This commit is contained in:
Josh Deprez 2024-05-09 11:50:39 +10:00
parent 69985a4fba
commit d6ac7ab3c2
No known key found for this signature in database
92 changed files with 9732 additions and 0 deletions

BIN
GT_Logo.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

BIN
air-back.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 MiB

View file

@ -0,0 +1,754 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>compositions</key>
<array>
<dict>
<key>adjustmentRatioX</key>
<real>0.0</real>
<key>adjustmentRatioY</key>
<real>0.0</real>
<key>children</key>
<array>
<dict>
<key>adjustmentRatioX</key>
<real>0.25</real>
<key>adjustmentRatioY</key>
<real>0.25</real>
<key>attributedTextData</key>
<data>
e1xydGYxXGFuc2lcYW5zaWNwZzEyNTJcY29j
b2FydGYyNzYxClxjb2NvYXRleHRzY2FsaW5n
MFxjb2NvYXBsYXRmb3JtMHtcZm9udHRibFxm
MFxmc3dpc3NcZmNoYXJzZXQwIEhlbHZldGlj
YTt9CntcY29sb3J0Ymw7XHJlZDI1NVxncmVl
bjI1NVxibHVlMjU1O1xyZWQwXGdyZWVuMFxi
bHVlMDt9CntcKlxleHBhbmRlZGNvbG9ydGJs
OztcY3NnZW5lcmljcmdiXGMwXGMwXGMwO30K
XHBhcmRcdHg1NjBcdHgxMTIwXHR4MTY4MFx0
eDIyNDBcdHgyODAwXHR4MzM2MFx0eDM5MjBc
dHg0NDgwXHR4NTA0MFx0eDU2MDBcdHg2MTYw
XHR4NjcyMFxwYXJkaXJuYXR1cmFsXHFjXHBh
cnRpZ2h0ZW5mYWN0b3IwCgpcZjBcZnMyOCBc
Y2YyIFx1cDAgQXBwbGUgSW50ZXJuZXQgUm91
dGVyfQ==
</data>
<key>className</key>
<string>Box</string>
<key>constrainAspectRatio</key>
<false/>
<key>contentFilterSpecs</key>
<array/>
<key>fillAngle</key>
<integer>0</integer>
<key>fillColor</key>
<string>1.000000:1.000000:1.000000:1.000000</string>
<key>fillGradientElements</key>
<array/>
<key>fillShadowBlur</key>
<real>3</real>
<key>fillShadowColor</key>
<string>0.000000:0.000000:0.000000:0.333000</string>
<key>fillShadowHidden</key>
<false/>
<key>fillShadowOffsetX</key>
<real>2</real>
<key>fillShadowOffsetY</key>
<real>2</real>
<key>fillType</key>
<integer>0</integer>
<key>frame</key>
<string>{{265, 158}, {100, 100}}</string>
<key>hidden</key>
<false/>
<key>identifier</key>
<string>15A4C3E6-20E9-423C-84D2-2F0629685937</string>
<key>imageAnchorRatio</key>
<string>{0.5, 0.5}</string>
<key>imageType</key>
<integer>0</integer>
<key>locked</key>
<false/>
<key>opacity</key>
<real>1</real>
<key>rotationAngle</key>
<integer>0</integer>
<key>rotationHandleRadius</key>
<real>100</real>
<key>scaleImage</key>
<true/>
<key>stroke1Color</key>
<string></string>
<key>stroke1Enabled</key>
<false/>
<key>stroke2Color</key>
<string></string>
<key>stroke2Enabled</key>
<false/>
<key>strokeColor</key>
<string>0.000000:0.000000:0.000000:1.000000</string>
<key>strokeLineCap</key>
<integer>1</integer>
<key>strokeLineJoin</key>
<integer>1</integer>
<key>strokeLineWidth</key>
<real>1</real>
<key>strokeShadowBlur</key>
<real>3</real>
<key>strokeShadowColor</key>
<string>0.000000:0.000000:0.000000:0.333000</string>
<key>strokeShadowHidden</key>
<true/>
<key>strokeShadowOffsetX</key>
<real>2</real>
<key>strokeShadowOffsetY</key>
<real>2</real>
<key>strokeType</key>
<integer>0</integer>
<key>textAlign</key>
<integer>1</integer>
<key>textAppearanceType</key>
<integer>0</integer>
<key>textDrawOnPath</key>
<false/>
<key>textShadowBlur</key>
<real>5</real>
<key>textShadowColor</key>
<string>0.000000:0.000000:0.000000:0.333000</string>
<key>textShadowHidden</key>
<true/>
<key>textShadowOffsetX</key>
<real>0.0</real>
<key>textShadowOffsetY</key>
<real>0.0</real>
<key>textVerticalAlign</key>
<integer>0</integer>
<key>title</key>
<string>Box</string>
<key>userSetTitle</key>
<false/>
</dict>
<dict>
<key>adjustmentRatioX</key>
<real>0.0</real>
<key>adjustmentRatioY</key>
<real>0.0</real>
<key>attributedTextData</key>
<data>
e1xydGYxXGFuc2lcYW5zaWNwZzEyNTJcY29j
b2FydGYyNzYxClxjb2NvYXRleHRzY2FsaW5n
MFxjb2NvYXBsYXRmb3JtMHtcZm9udHRibFxm
MFxmc3dpc3NcZmNoYXJzZXQwIEhlbHZldGlj
YTt9CntcY29sb3J0Ymw7XHJlZDI1NVxncmVl
bjI1NVxibHVlMjU1O1xyZWQwXGdyZWVuMFxi
bHVlMDt9CntcKlxleHBhbmRlZGNvbG9ydGJs
OztcY3NnZW5lcmljcmdiXGMwXGMwXGMwO30K
XHBhcmRcdHg1NjBcdHgxMTIwXHR4MTY4MFx0
eDIyNDBcdHgyODAwXHR4MzM2MFx0eDM5MjBc
dHg0NDgwXHR4NTA0MFx0eDU2MDBcdHg2MTYw
XHR4NjcyMFxwYXJkaXJuYXR1cmFsXHFjXHBh
cnRpZ2h0ZW5mYWN0b3IwCgpcZjBcZnMyOCBc
Y2YyIFx1cDAgQXBwbGVUYWxrIG5ldHdvcmt9
</data>
<key>className</key>
<string>Cloud</string>
<key>constrainAspectRatio</key>
<false/>
<key>contentFilterSpecs</key>
<array/>
<key>fillAngle</key>
<integer>0</integer>
<key>fillColor</key>
<string>1.000000:1.000000:1.000000:1.000000</string>
<key>fillGradientElements</key>
<array/>
<key>fillShadowBlur</key>
<real>3</real>
<key>fillShadowColor</key>
<string>0.000000:0.000000:0.000000:0.333000</string>
<key>fillShadowHidden</key>
<false/>
<key>fillShadowOffsetX</key>
<real>2</real>
<key>fillShadowOffsetY</key>
<real>2</real>
<key>fillType</key>
<integer>0</integer>
<key>frame</key>
<string>{{45, 163}, {178, 95}}</string>
<key>hidden</key>
<false/>
<key>identifier</key>
<string>C684FE57-CCC3-472F-B2C8-8BF7EC0BF17B</string>
<key>imageAnchorRatio</key>
<string>{0.5, 0.5}</string>
<key>imageType</key>
<integer>0</integer>
<key>locked</key>
<false/>
<key>opacity</key>
<real>1</real>
<key>rotationAngle</key>
<integer>0</integer>
<key>rotationHandleRadius</key>
<real>115</real>
<key>scaleImage</key>
<true/>
<key>stroke1Color</key>
<string></string>
<key>stroke1Enabled</key>
<false/>
<key>stroke2Color</key>
<string></string>
<key>stroke2Enabled</key>
<false/>
<key>strokeColor</key>
<string>0.000000:0.000000:0.000000:1.000000</string>
<key>strokeLineCap</key>
<integer>1</integer>
<key>strokeLineJoin</key>
<integer>1</integer>
<key>strokeLineWidth</key>
<real>1</real>
<key>strokeShadowBlur</key>
<real>3</real>
<key>strokeShadowColor</key>
<string>0.000000:0.000000:0.000000:0.333000</string>
<key>strokeShadowHidden</key>
<true/>
<key>strokeShadowOffsetX</key>
<real>2</real>
<key>strokeShadowOffsetY</key>
<real>2</real>
<key>strokeType</key>
<integer>0</integer>
<key>textAlign</key>
<integer>1</integer>
<key>textAppearanceType</key>
<integer>0</integer>
<key>textDrawOnPath</key>
<false/>
<key>textShadowBlur</key>
<real>5</real>
<key>textShadowColor</key>
<string>0.000000:0.000000:0.000000:0.333000</string>
<key>textShadowHidden</key>
<true/>
<key>textShadowOffsetX</key>
<real>0.0</real>
<key>textShadowOffsetY</key>
<real>0.0</real>
<key>textVerticalAlign</key>
<integer>0</integer>
<key>title</key>
<string>Cloud</string>
<key>userSetTitle</key>
<false/>
</dict>
<dict>
<key>adjustmentRatioX</key>
<real>0.0</real>
<key>adjustmentRatioY</key>
<real>0.0</real>
<key>attributedTextData</key>
<data>
e1xydGYxXGFuc2lcYW5zaWNwZzEyNTJcY29j
b2FydGYyNzYxClxjb2NvYXRleHRzY2FsaW5n
MFxjb2NvYXBsYXRmb3JtMHtcZm9udHRibFxm
MFxmc3dpc3NcZmNoYXJzZXQwIEhlbHZldGlj
YTt9CntcY29sb3J0Ymw7XHJlZDI1NVxncmVl
bjI1NVxibHVlMjU1O1xyZWQwXGdyZWVuMFxi
bHVlMDt9CntcKlxleHBhbmRlZGNvbG9ydGJs
OztcY3NnZW5lcmljcmdiXGMwXGMwXGMwO30K
XHBhcmRcdHg1NjBcdHgxMTIwXHR4MTY4MFx0
eDIyNDBcdHgyODAwXHR4MzM2MFx0eDM5MjBc
dHg0NDgwXHR4NTA0MFx0eDU2MDBcdHg2MTYw
XHR4NjcyMFxwYXJkaXJuYXR1cmFsXHFjXHBh
cnRpZ2h0ZW5mYWN0b3IwCgpcZjBcZnMyOCBc
Y2YyIFx1cDAgSVAgbmV0d29ya30=
</data>
<key>className</key>
<string>Cloud</string>
<key>constrainAspectRatio</key>
<false/>
<key>contentFilterSpecs</key>
<array/>
<key>fillAngle</key>
<integer>0</integer>
<key>fillColor</key>
<string>1.000000:1.000000:1.000000:1.000000</string>
<key>fillGradientElements</key>
<array/>
<key>fillShadowBlur</key>
<real>3</real>
<key>fillShadowColor</key>
<string>0.000000:0.000000:0.000000:0.333000</string>
<key>fillShadowHidden</key>
<false/>
<key>fillShadowOffsetX</key>
<real>2</real>
<key>fillShadowOffsetY</key>
<real>2</real>
<key>fillType</key>
<integer>0</integer>
<key>frame</key>
<string>{{412, 158}, {178, 95}}</string>
<key>hidden</key>
<false/>
<key>identifier</key>
<string>EB6B5FEF-9C46-4504-86E1-3C788F49CDB3</string>
<key>imageAnchorRatio</key>
<string>{0.5, 0.5}</string>
<key>imageType</key>
<integer>0</integer>
<key>locked</key>
<false/>
<key>opacity</key>
<real>1</real>
<key>rotationAngle</key>
<integer>0</integer>
<key>rotationHandleRadius</key>
<real>115</real>
<key>scaleImage</key>
<true/>
<key>stroke1Color</key>
<string></string>
<key>stroke1Enabled</key>
<false/>
<key>stroke2Color</key>
<string></string>
<key>stroke2Enabled</key>
<false/>
<key>strokeColor</key>
<string>0.000000:0.000000:0.000000:1.000000</string>
<key>strokeLineCap</key>
<integer>1</integer>
<key>strokeLineJoin</key>
<integer>1</integer>
<key>strokeLineWidth</key>
<real>1</real>
<key>strokeShadowBlur</key>
<real>3</real>
<key>strokeShadowColor</key>
<string>0.000000:0.000000:0.000000:0.333000</string>
<key>strokeShadowHidden</key>
<true/>
<key>strokeShadowOffsetX</key>
<real>2</real>
<key>strokeShadowOffsetY</key>
<real>2</real>
<key>strokeType</key>
<integer>0</integer>
<key>textAlign</key>
<integer>1</integer>
<key>textAppearanceType</key>
<integer>0</integer>
<key>textDrawOnPath</key>
<false/>
<key>textShadowBlur</key>
<real>5</real>
<key>textShadowColor</key>
<string>0.000000:0.000000:0.000000:0.333000</string>
<key>textShadowHidden</key>
<true/>
<key>textShadowOffsetX</key>
<real>0.0</real>
<key>textShadowOffsetY</key>
<real>0.0</real>
<key>textVerticalAlign</key>
<integer>0</integer>
<key>title</key>
<string>Cloud</string>
<key>userSetTitle</key>
<false/>
</dict>
<dict>
<key>adjustmentRatioX</key>
<real>0.0</real>
<key>adjustmentRatioY</key>
<real>0.0</real>
<key>arrowTypeA</key>
<integer>0</integer>
<key>arrowTypeB</key>
<integer>0</integer>
<key>className</key>
<string>Line</string>
<key>constrainAspectRatio</key>
<false/>
<key>contentFilterSpecs</key>
<array/>
<key>curveRatio</key>
<real>0.0</real>
<key>fillAngle</key>
<integer>0</integer>
<key>fillColor</key>
<string>1.000000:1.000000:1.000000:1.000000</string>
<key>fillGradientElements</key>
<array/>
<key>fillShadowBlur</key>
<real>3</real>
<key>fillShadowColor</key>
<string>0.000000:0.000000:0.000000:0.333000</string>
<key>fillShadowHidden</key>
<false/>
<key>fillShadowOffsetX</key>
<real>2</real>
<key>fillShadowOffsetY</key>
<real>2</real>
<key>fillType</key>
<integer>0</integer>
<key>flipped</key>
<false/>
<key>frame</key>
<string>{{265, 221}, {-42, -1}}</string>
<key>hidden</key>
<false/>
<key>identifier</key>
<string>C5F4B4ED-3CE9-4702-8480-956CDA69EAC6</string>
<key>imageAnchorRatio</key>
<string>{0.5, 0.5}</string>
<key>imageType</key>
<integer>0</integer>
<key>locked</key>
<false/>
<key>opacity</key>
<real>1</real>
<key>pathType</key>
<integer>0</integer>
<key>rotationAngle</key>
<integer>0</integer>
<key>rotationHandleRadius</key>
<real>100</real>
<key>scaleImage</key>
<true/>
<key>stroke1Color</key>
<string></string>
<key>stroke1Enabled</key>
<false/>
<key>stroke2Color</key>
<string></string>
<key>stroke2Enabled</key>
<false/>
<key>strokeColor</key>
<string>0.000000:0.000000:0.000000:1.000000</string>
<key>strokeLineCap</key>
<integer>1</integer>
<key>strokeLineJoin</key>
<integer>1</integer>
<key>strokeLineWidth</key>
<real>1</real>
<key>strokeShadowBlur</key>
<real>3</real>
<key>strokeShadowColor</key>
<string>0.000000:0.000000:0.000000:0.333000</string>
<key>strokeShadowHidden</key>
<true/>
<key>strokeShadowOffsetX</key>
<real>2</real>
<key>strokeShadowOffsetY</key>
<real>2</real>
<key>strokeType</key>
<integer>0</integer>
<key>textAlign</key>
<integer>2</integer>
<key>textAppearanceType</key>
<integer>0</integer>
<key>textDrawOnPath</key>
<false/>
<key>textShadowBlur</key>
<real>5</real>
<key>textShadowColor</key>
<string>0.000000:0.000000:0.000000:0.333000</string>
<key>textShadowHidden</key>
<true/>
<key>textShadowOffsetX</key>
<real>0.0</real>
<key>textShadowOffsetY</key>
<real>0.0</real>
<key>textVerticalAlign</key>
<integer>0</integer>
<key>title</key>
<string>Line</string>
<key>userSetTitle</key>
<false/>
</dict>
<dict>
<key>adjustmentRatioX</key>
<real>0.0</real>
<key>adjustmentRatioY</key>
<real>0.0</real>
<key>arrowTypeA</key>
<integer>0</integer>
<key>arrowTypeB</key>
<integer>0</integer>
<key>className</key>
<string>Line</string>
<key>constrainAspectRatio</key>
<false/>
<key>contentFilterSpecs</key>
<array/>
<key>curveRatio</key>
<real>0.0</real>
<key>fillAngle</key>
<integer>0</integer>
<key>fillColor</key>
<string>1.000000:1.000000:1.000000:1.000000</string>
<key>fillGradientElements</key>
<array/>
<key>fillShadowBlur</key>
<real>3</real>
<key>fillShadowColor</key>
<string>0.000000:0.000000:0.000000:0.333000</string>
<key>fillShadowHidden</key>
<false/>
<key>fillShadowOffsetX</key>
<real>2</real>
<key>fillShadowOffsetY</key>
<real>2</real>
<key>fillType</key>
<integer>0</integer>
<key>flipped</key>
<false/>
<key>frame</key>
<string>{{365, 208}, {47, 2}}</string>
<key>hidden</key>
<false/>
<key>identifier</key>
<string>A46D32B5-8F0D-4FE1-BC60-03D4CFD9BEE3</string>
<key>imageAnchorRatio</key>
<string>{0.5, 0.5}</string>
<key>imageType</key>
<integer>0</integer>
<key>locked</key>
<false/>
<key>opacity</key>
<real>1</real>
<key>pathType</key>
<integer>0</integer>
<key>rotationAngle</key>
<integer>0</integer>
<key>rotationHandleRadius</key>
<real>100</real>
<key>scaleImage</key>
<true/>
<key>stroke1Color</key>
<string></string>
<key>stroke1Enabled</key>
<false/>
<key>stroke2Color</key>
<string></string>
<key>stroke2Enabled</key>
<false/>
<key>strokeColor</key>
<string>0.000000:0.000000:0.000000:1.000000</string>
<key>strokeLineCap</key>
<integer>1</integer>
<key>strokeLineJoin</key>
<integer>1</integer>
<key>strokeLineWidth</key>
<real>1</real>
<key>strokeShadowBlur</key>
<real>3</real>
<key>strokeShadowColor</key>
<string>0.000000:0.000000:0.000000:0.333000</string>
<key>strokeShadowHidden</key>
<true/>
<key>strokeShadowOffsetX</key>
<real>2</real>
<key>strokeShadowOffsetY</key>
<real>2</real>
<key>strokeType</key>
<integer>0</integer>
<key>textAlign</key>
<integer>2</integer>
<key>textAppearanceType</key>
<integer>0</integer>
<key>textDrawOnPath</key>
<false/>
<key>textShadowBlur</key>
<real>5</real>
<key>textShadowColor</key>
<string>0.000000:0.000000:0.000000:0.333000</string>
<key>textShadowHidden</key>
<true/>
<key>textShadowOffsetX</key>
<real>0.0</real>
<key>textShadowOffsetY</key>
<real>0.0</real>
<key>textVerticalAlign</key>
<integer>0</integer>
<key>title</key>
<string>Line</string>
<key>userSetTitle</key>
<false/>
</dict>
</array>
<key>className</key>
<string>Composition</string>
<key>connections</key>
<array>
<dict>
<key>pointerCorner</key>
<integer>0</integer>
<key>pointerIdentifier</key>
<string>A46D32B5-8F0D-4FE1-BC60-03D4CFD9BEE3</string>
<key>shapeEdge</key>
<integer>1</integer>
<key>shapeIdentifier</key>
<string>15A4C3E6-20E9-423C-84D2-2F0629685937</string>
<key>shapeRatio</key>
<real>0.5</real>
</dict>
<dict>
<key>pointerCorner</key>
<integer>0</integer>
<key>pointerIdentifier</key>
<string>C5F4B4ED-3CE9-4702-8480-956CDA69EAC6</string>
<key>shapeEdge</key>
<integer>0</integer>
<key>shapeIdentifier</key>
<string>15A4C3E6-20E9-423C-84D2-2F0629685937</string>
<key>shapeRatio</key>
<real>0.63</real>
</dict>
<dict>
<key>pointerCorner</key>
<integer>8</integer>
<key>pointerIdentifier</key>
<string>C5F4B4ED-3CE9-4702-8480-956CDA69EAC6</string>
<key>shapeEdge</key>
<integer>1</integer>
<key>shapeIdentifier</key>
<string>C684FE57-CCC3-472F-B2C8-8BF7EC0BF17B</string>
<key>shapeRatio</key>
<real>0.60231920383310922</real>
</dict>
</array>
<key>constrainAspectRatio</key>
<false/>
<key>contentFilterSpecs</key>
<array/>
<key>fillAngle</key>
<integer>0</integer>
<key>fillColor</key>
<string>1.000000:1.000000:1.000000:1.000000</string>
<key>fillGradientElements</key>
<array/>
<key>fillShadowBlur</key>
<real>3</real>
<key>fillShadowColor</key>
<string>0.000000:0.000000:0.000000:0.333000</string>
<key>fillShadowHidden</key>
<false/>
<key>fillShadowOffsetX</key>
<real>2</real>
<key>fillShadowOffsetY</key>
<real>2</real>
<key>fillType</key>
<integer>0</integer>
<key>frame</key>
<string>{{0, 0}, {640, 480}}</string>
<key>gridTolerance</key>
<real>10</real>
<key>hidden</key>
<false/>
<key>identifier</key>
<string>E70BEC35-7F30-4D6E-810C-543C2BFB0AFA</string>
<key>imageAnchorRatio</key>
<string>{0.5, 0.5}</string>
<key>imageType</key>
<integer>0</integer>
<key>locked</key>
<false/>
<key>metrics</key>
<dict>
<key>anchorCorner</key>
<integer>4</integer>
<key>anchorSize</key>
<string>{0, 0}</string>
<key>group</key>
<integer>1</integer>
<key>height</key>
<real>480</real>
<key>resolution</key>
<real>72</real>
<key>unitType</key>
<integer>0</integer>
<key>width</key>
<real>640</real>
</dict>
<key>opacity</key>
<real>1</real>
<key>rotationAngle</key>
<integer>0</integer>
<key>rotationHandleRadius</key>
<real>100</real>
<key>rulerOriginCorner</key>
<integer>0</integer>
<key>scaleImage</key>
<true/>
<key>scrollCenterPoint</key>
<string>{319.5, 240}</string>
<key>stroke1Color</key>
<string></string>
<key>stroke1Enabled</key>
<false/>
<key>stroke2Color</key>
<string></string>
<key>stroke2Enabled</key>
<false/>
<key>strokeColor</key>
<string>0.000000:0.000000:0.000000:1.000000</string>
<key>strokeLineCap</key>
<integer>1</integer>
<key>strokeLineJoin</key>
<integer>1</integer>
<key>strokeLineWidth</key>
<real>1</real>
<key>strokeShadowBlur</key>
<real>3</real>
<key>strokeShadowColor</key>
<string>0.000000:0.000000:0.000000:0.333000</string>
<key>strokeShadowHidden</key>
<true/>
<key>strokeShadowOffsetX</key>
<real>2</real>
<key>strokeShadowOffsetY</key>
<real>2</real>
<key>strokeType</key>
<integer>0</integer>
<key>textAlign</key>
<integer>1</integer>
<key>textAppearanceType</key>
<integer>0</integer>
<key>textDrawOnPath</key>
<false/>
<key>textShadowBlur</key>
<real>5</real>
<key>textShadowColor</key>
<string>0.000000:0.000000:0.000000:0.333000</string>
<key>textShadowHidden</key>
<true/>
<key>textShadowOffsetX</key>
<real>0.0</real>
<key>textShadowOffsetY</key>
<real>0.0</real>
<key>textVerticalAlign</key>
<integer>0</integer>
<key>title</key>
<string>Page 1</string>
<key>userGuides</key>
<array/>
<key>userSetTitle</key>
<false/>
<key>zoomScaleIndex</key>
<integer>0</integer>
</dict>
</array>
<key>image_ref_counts</key>
<dict/>
<key>version</key>
<integer>8</integer>
</dict>
</plist>

BIN
air-diagram.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 384 KiB

BIN
air-front.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 220 KiB

BIN
air-networks.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 209 KiB

BIN
air-port-stats.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 146 KiB

BIN
air-router-ports.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 124 KiB

BIN
air-stats.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 110 KiB

BIN
air.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 MiB

File diff suppressed because it is too large Load diff

BIN
appletalkoverip_diagram.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 154 KiB

BIN
atalk-dos.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 MiB

BIN
atalkinternet.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 228 KiB

BIN
atalkoverip-sad.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 273 KiB

View file

@ -0,0 +1,983 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>compositions</key>
<array>
<dict>
<key>adjustmentRatioX</key>
<real>0.0</real>
<key>adjustmentRatioY</key>
<real>0.0</real>
<key>children</key>
<array>
<dict>
<key>adjustmentRatioX</key>
<real>0.0</real>
<key>adjustmentRatioY</key>
<real>0.0</real>
<key>attributedTextData</key>
<data>
e1xydGYxXGFuc2lcYW5zaWNwZzEyNTJcY29j
b2FydGYyNzYxClxjb2NvYXRleHRzY2FsaW5n
MFxjb2NvYXBsYXRmb3JtMHtcZm9udHRibFxm
MFxmc3dpc3NcZmNoYXJzZXQwIEhlbHZldGlj
YTt9CntcY29sb3J0Ymw7XHJlZDI1NVxncmVl
bjI1NVxibHVlMjU1O1xyZWQwXGdyZWVuMFxi
bHVlMDt9CntcKlxleHBhbmRlZGNvbG9ydGJs
OztcY3NnZW5lcmljcmdiXGMwXGMwXGMwO30K
XHBhcmRcdHg1NjBcdHgxMTIwXHR4MTY4MFx0
eDIyNDBcdHgyODAwXHR4MzM2MFx0eDM5MjBc
dHg0NDgwXHR4NTA0MFx0eDU2MDBcdHg2MTYw
XHR4NjcyMFxwYXJkaXJuYXR1cmFsXHFjXHBh
cnRpZ2h0ZW5mYWN0b3IwCgpcZjBcZnMyOCBc
Y2YyIFx1cDAgVGhlIEludGVybmV0fQ==
</data>
<key>className</key>
<string>Cloud</string>
<key>constrainAspectRatio</key>
<false/>
<key>contentFilterSpecs</key>
<array/>
<key>fillAngle</key>
<integer>0</integer>
<key>fillColor</key>
<string>1.000000:1.000000:1.000000:1.000000</string>
<key>fillGradientElements</key>
<array/>
<key>fillShadowBlur</key>
<real>3</real>
<key>fillShadowColor</key>
<string>0.000000:0.000000:0.000000:0.333000</string>
<key>fillShadowHidden</key>
<false/>
<key>fillShadowOffsetX</key>
<real>2</real>
<key>fillShadowOffsetY</key>
<real>2</real>
<key>fillType</key>
<integer>0</integer>
<key>frame</key>
<string>{{212, 170}, {170, 76}}</string>
<key>hidden</key>
<false/>
<key>identifier</key>
<string>F3CA3317-3FE2-4BC7-8E6F-722FFB457500</string>
<key>imageAnchorRatio</key>
<string>{0.5, 0.5}</string>
<key>imageType</key>
<integer>0</integer>
<key>locked</key>
<false/>
<key>opacity</key>
<real>1</real>
<key>rotationAngle</key>
<integer>0</integer>
<key>rotationHandleRadius</key>
<real>115</real>
<key>scaleImage</key>
<true/>
<key>stroke1Color</key>
<string></string>
<key>stroke1Enabled</key>
<false/>
<key>stroke2Color</key>
<string></string>
<key>stroke2Enabled</key>
<false/>
<key>strokeColor</key>
<string>0.000000:0.000000:0.000000:1.000000</string>
<key>strokeLineCap</key>
<integer>1</integer>
<key>strokeLineJoin</key>
<integer>1</integer>
<key>strokeLineWidth</key>
<real>1</real>
<key>strokeShadowBlur</key>
<real>3</real>
<key>strokeShadowColor</key>
<string>0.000000:0.000000:0.000000:0.333000</string>
<key>strokeShadowHidden</key>
<true/>
<key>strokeShadowOffsetX</key>
<real>2</real>
<key>strokeShadowOffsetY</key>
<real>2</real>
<key>strokeType</key>
<integer>0</integer>
<key>textAlign</key>
<integer>1</integer>
<key>textAppearanceType</key>
<integer>0</integer>
<key>textDrawOnPath</key>
<false/>
<key>textShadowBlur</key>
<real>5</real>
<key>textShadowColor</key>
<string>0.000000:0.000000:0.000000:0.333000</string>
<key>textShadowHidden</key>
<true/>
<key>textShadowOffsetX</key>
<real>0.0</real>
<key>textShadowOffsetY</key>
<real>0.0</real>
<key>textVerticalAlign</key>
<integer>0</integer>
<key>title</key>
<string>Cloud</string>
<key>userSetTitle</key>
<false/>
</dict>
<dict>
<key>adjustmentRatioX</key>
<real>0.25</real>
<key>adjustmentRatioY</key>
<real>0.25</real>
<key>className</key>
<string>Box</string>
<key>constrainAspectRatio</key>
<false/>
<key>contentFilterSpecs</key>
<array/>
<key>fillAngle</key>
<integer>0</integer>
<key>fillColor</key>
<string>1.000000:1.000000:1.000000:1.000000</string>
<key>fillGradientElements</key>
<array/>
<key>fillShadowBlur</key>
<real>3</real>
<key>fillShadowColor</key>
<string>0.000000:0.000000:0.000000:0.333000</string>
<key>fillShadowHidden</key>
<false/>
<key>fillShadowOffsetX</key>
<real>2</real>
<key>fillShadowOffsetY</key>
<real>2</real>
<key>fillType</key>
<integer>0</integer>
<key>frame</key>
<string>{{224, 29}, {158, 103}}</string>
<key>hidden</key>
<false/>
<key>identifier</key>
<string>4BDC4A7C-E6B8-4E8E-8390-D23D1A07A0C6</string>
<key>imageAnchorRatio</key>
<string>{0.5, 0.5}</string>
<key>imageType</key>
<integer>0</integer>
<key>locked</key>
<false/>
<key>opacity</key>
<real>1</real>
<key>rotationAngle</key>
<integer>0</integer>
<key>rotationHandleRadius</key>
<real>115</real>
<key>scaleImage</key>
<true/>
<key>stroke1Color</key>
<string></string>
<key>stroke1Enabled</key>
<false/>
<key>stroke2Color</key>
<string></string>
<key>stroke2Enabled</key>
<false/>
<key>strokeColor</key>
<string>0.000000:0.000000:0.000000:1.000000</string>
<key>strokeLineCap</key>
<integer>1</integer>
<key>strokeLineJoin</key>
<integer>1</integer>
<key>strokeLineWidth</key>
<real>1</real>
<key>strokeShadowBlur</key>
<real>3</real>
<key>strokeShadowColor</key>
<string>0.000000:0.000000:0.000000:0.333000</string>
<key>strokeShadowHidden</key>
<true/>
<key>strokeShadowOffsetX</key>
<real>2</real>
<key>strokeShadowOffsetY</key>
<real>2</real>
<key>strokeType</key>
<integer>0</integer>
<key>textAlign</key>
<integer>1</integer>
<key>textAppearanceType</key>
<integer>0</integer>
<key>textDrawOnPath</key>
<false/>
<key>textShadowBlur</key>
<real>5</real>
<key>textShadowColor</key>
<string>0.000000:0.000000:0.000000:0.333000</string>
<key>textShadowHidden</key>
<true/>
<key>textShadowOffsetX</key>
<real>0.0</real>
<key>textShadowOffsetY</key>
<real>0.0</real>
<key>textVerticalAlign</key>
<integer>0</integer>
<key>title</key>
<string>Box</string>
<key>userSetTitle</key>
<false/>
</dict>
<dict>
<key>adjustmentRatioX</key>
<real>0.0</real>
<key>adjustmentRatioY</key>
<real>0.0</real>
<key>arrowTypeA</key>
<integer>0</integer>
<key>arrowTypeB</key>
<integer>0</integer>
<key>className</key>
<string>Line</string>
<key>constrainAspectRatio</key>
<false/>
<key>contentFilterSpecs</key>
<array/>
<key>curveRatio</key>
<real>0.0</real>
<key>fillAngle</key>
<integer>0</integer>
<key>fillColor</key>
<string>1.000000:1.000000:1.000000:1.000000</string>
<key>fillGradientElements</key>
<array/>
<key>fillShadowBlur</key>
<real>3</real>
<key>fillShadowColor</key>
<string>0.000000:0.000000:0.000000:0.333000</string>
<key>fillShadowHidden</key>
<false/>
<key>fillShadowOffsetX</key>
<real>2</real>
<key>fillShadowOffsetY</key>
<real>2</real>
<key>fillType</key>
<integer>0</integer>
<key>flipped</key>
<false/>
<key>frame</key>
<string>{{297, 132}, {0, 38}}</string>
<key>hidden</key>
<false/>
<key>identifier</key>
<string>6E530217-474E-4EFD-94E5-D6EB7AA9733A</string>
<key>imageAnchorRatio</key>
<string>{0.5, 0.5}</string>
<key>imageType</key>
<integer>0</integer>
<key>locked</key>
<false/>
<key>opacity</key>
<real>1</real>
<key>pathType</key>
<integer>0</integer>
<key>rotationAngle</key>
<integer>0</integer>
<key>rotationHandleRadius</key>
<real>130</real>
<key>scaleImage</key>
<true/>
<key>stroke1Color</key>
<string></string>
<key>stroke1Enabled</key>
<false/>
<key>stroke2Color</key>
<string></string>
<key>stroke2Enabled</key>
<false/>
<key>strokeColor</key>
<string>0.000000:0.000000:0.000000:1.000000</string>
<key>strokeLineCap</key>
<integer>1</integer>
<key>strokeLineJoin</key>
<integer>1</integer>
<key>strokeLineWidth</key>
<real>1</real>
<key>strokeShadowBlur</key>
<real>3</real>
<key>strokeShadowColor</key>
<string>0.000000:0.000000:0.000000:0.333000</string>
<key>strokeShadowHidden</key>
<true/>
<key>strokeShadowOffsetX</key>
<real>2</real>
<key>strokeShadowOffsetY</key>
<real>2</real>
<key>strokeType</key>
<integer>0</integer>
<key>textAlign</key>
<integer>2</integer>
<key>textAppearanceType</key>
<integer>0</integer>
<key>textDrawOnPath</key>
<false/>
<key>textShadowBlur</key>
<real>5</real>
<key>textShadowColor</key>
<string>0.000000:0.000000:0.000000:0.333000</string>
<key>textShadowHidden</key>
<true/>
<key>textShadowOffsetX</key>
<real>0.0</real>
<key>textShadowOffsetY</key>
<real>0.0</real>
<key>textVerticalAlign</key>
<integer>0</integer>
<key>title</key>
<string>Line</string>
<key>userSetTitle</key>
<false/>
</dict>
<dict>
<key>adjustmentRatioX</key>
<real>0.0</real>
<key>adjustmentRatioY</key>
<real>0.0</real>
<key>attributedTextData</key>
<data>
e1xydGYxXGFuc2lcYW5zaWNwZzEyNTJcY29j
b2FydGYyNzYxClxjb2NvYXRleHRzY2FsaW5n
MFxjb2NvYXBsYXRmb3JtMHtcZm9udHRibFxm
MFxmc3dpc3NcZmNoYXJzZXQwIEhlbHZldGlj
YTt9CntcY29sb3J0Ymw7XHJlZDI1NVxncmVl
bjI1NVxibHVlMjU1O1xyZWQwXGdyZWVuMFxi
bHVlMDt9CntcKlxleHBhbmRlZGNvbG9ydGJs
OztcY3NnZW5lcmljcmdiXGMwXGMwXGMwO30K
XHBhcmRcdHg1NjBcdHgxMTIwXHR4MTY4MFx0
eDIyNDBcdHgyODAwXHR4MzM2MFx0eDM5MjBc
dHg0NDgwXHR4NTA0MFx0eDU2MDBcdHg2MTYw
XHR4NjcyMFxwYXJkaXJuYXR1cmFsXHFjXHBh
cnRpZ2h0ZW5mYWN0b3IwCgpcZjBcZnMyOCBc
Y2YyIFx1cDAgWW91ciBNYWNpbnRvc2h9
</data>
<key>className</key>
<string>Rectangle</string>
<key>constrainAspectRatio</key>
<false/>
<key>contentFilterSpecs</key>
<array/>
<key>fillAngle</key>
<integer>0</integer>
<key>fillColor</key>
<string>1.000000:1.000000:1.000000:1.000000</string>
<key>fillGradientElements</key>
<array/>
<key>fillShadowBlur</key>
<real>3</real>
<key>fillShadowColor</key>
<string>0.000000:0.000000:0.000000:0.333000</string>
<key>fillShadowHidden</key>
<false/>
<key>fillShadowOffsetX</key>
<real>2</real>
<key>fillShadowOffsetY</key>
<real>2</real>
<key>fillType</key>
<integer>0</integer>
<key>frame</key>
<string>{{234, 336}, {125, 69}}</string>
<key>hidden</key>
<false/>
<key>identifier</key>
<string>06F7E6E8-C86B-4797-91B2-568203B3A630</string>
<key>imageAnchorRatio</key>
<string>{0.5, 0.5}</string>
<key>imageType</key>
<integer>0</integer>
<key>locked</key>
<false/>
<key>opacity</key>
<real>1</real>
<key>rotationAngle</key>
<integer>0</integer>
<key>rotationHandleRadius</key>
<real>100</real>
<key>scaleImage</key>
<true/>
<key>stroke1Color</key>
<string></string>
<key>stroke1Enabled</key>
<false/>
<key>stroke2Color</key>
<string></string>
<key>stroke2Enabled</key>
<false/>
<key>strokeColor</key>
<string>0.000000:0.000000:0.000000:1.000000</string>
<key>strokeLineCap</key>
<integer>1</integer>
<key>strokeLineJoin</key>
<integer>1</integer>
<key>strokeLineWidth</key>
<real>1</real>
<key>strokeShadowBlur</key>
<real>3</real>
<key>strokeShadowColor</key>
<string>0.000000:0.000000:0.000000:0.333000</string>
<key>strokeShadowHidden</key>
<true/>
<key>strokeShadowOffsetX</key>
<real>2</real>
<key>strokeShadowOffsetY</key>
<real>2</real>
<key>strokeType</key>
<integer>0</integer>
<key>textAlign</key>
<integer>1</integer>
<key>textAppearanceType</key>
<integer>0</integer>
<key>textDrawOnPath</key>
<false/>
<key>textShadowBlur</key>
<real>5</real>
<key>textShadowColor</key>
<string>0.000000:0.000000:0.000000:0.333000</string>
<key>textShadowHidden</key>
<true/>
<key>textShadowOffsetX</key>
<real>0.0</real>
<key>textShadowOffsetY</key>
<real>0.0</real>
<key>textVerticalAlign</key>
<integer>0</integer>
<key>title</key>
<string>Rectangle</string>
<key>userSetTitle</key>
<false/>
</dict>
<dict>
<key>adjustmentRatioX</key>
<real>0.0</real>
<key>adjustmentRatioY</key>
<real>0.0</real>
<key>arrowTypeA</key>
<integer>0</integer>
<key>arrowTypeB</key>
<integer>0</integer>
<key>className</key>
<string>Line</string>
<key>constrainAspectRatio</key>
<false/>
<key>contentFilterSpecs</key>
<array/>
<key>curveRatio</key>
<real>0.0</real>
<key>fillAngle</key>
<integer>0</integer>
<key>fillColor</key>
<string>1.000000:1.000000:1.000000:1.000000</string>
<key>fillGradientElements</key>
<array/>
<key>fillShadowBlur</key>
<real>3</real>
<key>fillShadowColor</key>
<string>0.000000:0.000000:0.000000:0.333000</string>
<key>fillShadowHidden</key>
<false/>
<key>fillShadowOffsetX</key>
<real>2</real>
<key>fillShadowOffsetY</key>
<real>2</real>
<key>fillType</key>
<integer>0</integer>
<key>flipped</key>
<false/>
<key>frame</key>
<string>{{303, 246}, {0, 90}}</string>
<key>hidden</key>
<false/>
<key>identifier</key>
<string>6BFE4870-6EC6-401F-8ECA-04B1443D9FEF</string>
<key>imageAnchorRatio</key>
<string>{0.5, 0.5}</string>
<key>imageType</key>
<integer>0</integer>
<key>locked</key>
<false/>
<key>opacity</key>
<real>1</real>
<key>pathType</key>
<integer>0</integer>
<key>rotationAngle</key>
<integer>0</integer>
<key>rotationHandleRadius</key>
<real>130</real>
<key>scaleImage</key>
<true/>
<key>stroke1Color</key>
<string></string>
<key>stroke1Enabled</key>
<false/>
<key>stroke2Color</key>
<string></string>
<key>stroke2Enabled</key>
<false/>
<key>strokeColor</key>
<string>0.000000:0.000000:0.000000:1.000000</string>
<key>strokeLineCap</key>
<integer>1</integer>
<key>strokeLineJoin</key>
<integer>1</integer>
<key>strokeLineWidth</key>
<real>1</real>
<key>strokeShadowBlur</key>
<real>3</real>
<key>strokeShadowColor</key>
<string>0.000000:0.000000:0.000000:0.333000</string>
<key>strokeShadowHidden</key>
<true/>
<key>strokeShadowOffsetX</key>
<real>2</real>
<key>strokeShadowOffsetY</key>
<real>2</real>
<key>strokeType</key>
<integer>0</integer>
<key>textAlign</key>
<integer>2</integer>
<key>textAppearanceType</key>
<integer>0</integer>
<key>textDrawOnPath</key>
<false/>
<key>textShadowBlur</key>
<real>5</real>
<key>textShadowColor</key>
<string>0.000000:0.000000:0.000000:0.333000</string>
<key>textShadowHidden</key>
<true/>
<key>textShadowOffsetX</key>
<real>0.0</real>
<key>textShadowOffsetY</key>
<real>0.0</real>
<key>textVerticalAlign</key>
<integer>0</integer>
<key>title</key>
<string>Line</string>
<key>userSetTitle</key>
<false/>
</dict>
<dict>
<key>adjustmentRatioX</key>
<real>0.0</real>
<key>adjustmentRatioY</key>
<real>0.0</real>
<key>attributedTextData</key>
<data>
e1xydGYxXGFuc2lcYW5zaWNwZzEyNTJcY29j
b2FydGYyNzYxClxjb2NvYXRleHRzY2FsaW5n
MFxjb2NvYXBsYXRmb3JtMHtcZm9udHRibFxm
MFxmc3dpc3NcZmNoYXJzZXQwIEhlbHZldGlj
YTt9CntcY29sb3J0Ymw7XHJlZDI1NVxncmVl
bjI1NVxibHVlMjU1O1xyZWQwXGdyZWVuMFxi
bHVlMDt9CntcKlxleHBhbmRlZGNvbG9ydGJs
OztcY3NnZW5lcmljcmdiXGMwXGMwXGMwO30K
XHBhcmRcdHg1NjBcdHgxMTIwXHR4MTY4MFx0
eDIyNDBcdHgyODAwXHR4MzM2MFx0eDM5MjBc
dHg0NDgwXHR4NTA0MFx0eDU2MDBcdHg2MTYw
XHR4NjcyMFxwYXJkaXJuYXR1cmFsXHBhcnRp
Z2h0ZW5mYWN0b3IwCgpcZjBcZnMzMCBcY2Yy
IEV0aGVybmV0P30=
</data>
<key>className</key>
<string>ResizeText</string>
<key>constrainAspectRatio</key>
<false/>
<key>contentFilterSpecs</key>
<array/>
<key>fillAngle</key>
<integer>0</integer>
<key>fillColor</key>
<string></string>
<key>fillGradientElements</key>
<array/>
<key>fillShadowBlur</key>
<real>3</real>
<key>fillShadowColor</key>
<string>0.000000:0.000000:0.000000:0.333000</string>
<key>fillShadowHidden</key>
<true/>
<key>fillShadowOffsetX</key>
<real>2</real>
<key>fillShadowOffsetY</key>
<real>2</real>
<key>fillType</key>
<integer>0</integer>
<key>frame</key>
<string>{{313, 282}, {69, 19}}</string>
<key>hidden</key>
<false/>
<key>identifier</key>
<string>3B7835C2-1480-4473-8922-6A301D5F6C40</string>
<key>imageAnchorRatio</key>
<string>{0.5, 0.5}</string>
<key>imageType</key>
<integer>0</integer>
<key>locked</key>
<false/>
<key>opacity</key>
<real>1</real>
<key>rotationAngle</key>
<integer>0</integer>
<key>rotationHandleRadius</key>
<real>100</real>
<key>scaleImage</key>
<true/>
<key>stroke1Color</key>
<string></string>
<key>stroke1Enabled</key>
<false/>
<key>stroke2Color</key>
<string></string>
<key>stroke2Enabled</key>
<false/>
<key>strokeColor</key>
<string>0.000000:0.000000:0.000000:1.000000</string>
<key>strokeLineCap</key>
<integer>1</integer>
<key>strokeLineJoin</key>
<integer>1</integer>
<key>strokeLineWidth</key>
<real>1</real>
<key>strokeShadowBlur</key>
<real>3</real>
<key>strokeShadowColor</key>
<string>0.000000:0.000000:0.000000:0.333000</string>
<key>strokeShadowHidden</key>
<true/>
<key>strokeShadowOffsetX</key>
<real>2</real>
<key>strokeShadowOffsetY</key>
<real>2</real>
<key>strokeType</key>
<integer>3</integer>
<key>textAlign</key>
<integer>0</integer>
<key>textAppearanceType</key>
<integer>0</integer>
<key>textDrawOnPath</key>
<false/>
<key>textShadowBlur</key>
<real>5</real>
<key>textShadowColor</key>
<string>0.000000:0.000000:0.000000:0.333000</string>
<key>textShadowHidden</key>
<true/>
<key>textShadowOffsetX</key>
<real>0.0</real>
<key>textShadowOffsetY</key>
<real>0.0</real>
<key>textVerticalAlign</key>
<integer>0</integer>
<key>title</key>
<string>Text</string>
<key>userSetTitle</key>
<false/>
</dict>
<dict>
<key>adjustmentRatioX</key>
<real>0.0</real>
<key>adjustmentRatioY</key>
<real>0.0</real>
<key>attributedTextData</key>
<data>
e1xydGYxXGFuc2lcYW5zaWNwZzEyNTJcY29j
b2FydGYyNzYxClxjb2NvYXRleHRzY2FsaW5n
MFxjb2NvYXBsYXRmb3JtMHtcZm9udHRibFxm
MFxmbmlsXGZjaGFyc2V0MCBBcHBsZUNvbG9y
RW1vamk7fQp7XGNvbG9ydGJsO1xyZWQyNTVc
Z3JlZW4yNTVcYmx1ZTI1NTtccmVkMFxncmVl
bjBcYmx1ZTA7fQp7XCpcZXhwYW5kZWRjb2xv
cnRibDs7XGNzZ2VuZXJpY3JnYlxjMFxjMFxj
MDt9ClxwYXJkXHR4NTYwXHR4MTEyMFx0eDE2
ODBcdHgyMjQwXHR4MjgwMFx0eDMzNjBcdHgz
OTIwXHR4NDQ4MFx0eDUwNDBcdHg1NjAwXHR4
NjE2MFx0eDY3MjBccGFyZGlybmF0dXJhbFxw
YXJ0aWdodGVuZmFjdG9yMAoKXGYwXGZzMTA4
IFxjZjIgXHVwMCBcdWMwXHU1NTM1OCBcdTU3
MDU2IH0=
</data>
<key>className</key>
<string>ResizeText</string>
<key>constrainAspectRatio</key>
<false/>
<key>contentFilterSpecs</key>
<array/>
<key>fillAngle</key>
<integer>0</integer>
<key>fillColor</key>
<string></string>
<key>fillGradientElements</key>
<array/>
<key>fillShadowBlur</key>
<real>3</real>
<key>fillShadowColor</key>
<string>0.000000:0.000000:0.000000:0.333000</string>
<key>fillShadowHidden</key>
<true/>
<key>fillShadowOffsetX</key>
<real>2</real>
<key>fillShadowOffsetY</key>
<real>2</real>
<key>fillType</key>
<integer>0</integer>
<key>frame</key>
<string>{{259, 61}, {54, 71}}</string>
<key>hidden</key>
<false/>
<key>identifier</key>
<string>1AEFEB06-13DD-43A8-A56E-6126290CC6DE</string>
<key>imageAnchorRatio</key>
<string>{0.5, 0.5}</string>
<key>imageType</key>
<integer>0</integer>
<key>locked</key>
<false/>
<key>opacity</key>
<real>1</real>
<key>rotationAngle</key>
<integer>0</integer>
<key>rotationHandleRadius</key>
<real>100</real>
<key>scaleImage</key>
<true/>
<key>stroke1Color</key>
<string></string>
<key>stroke1Enabled</key>
<false/>
<key>stroke2Color</key>
<string></string>
<key>stroke2Enabled</key>
<false/>
<key>strokeColor</key>
<string>0.000000:0.000000:0.000000:1.000000</string>
<key>strokeLineCap</key>
<integer>1</integer>
<key>strokeLineJoin</key>
<integer>1</integer>
<key>strokeLineWidth</key>
<real>1</real>
<key>strokeShadowBlur</key>
<real>3</real>
<key>strokeShadowColor</key>
<string>0.000000:0.000000:0.000000:0.333000</string>
<key>strokeShadowHidden</key>
<true/>
<key>strokeShadowOffsetX</key>
<real>2</real>
<key>strokeShadowOffsetY</key>
<real>2</real>
<key>strokeType</key>
<integer>3</integer>
<key>textAlign</key>
<integer>0</integer>
<key>textAppearanceType</key>
<integer>0</integer>
<key>textDrawOnPath</key>
<false/>
<key>textShadowBlur</key>
<real>5</real>
<key>textShadowColor</key>
<string>0.000000:0.000000:0.000000:0.333000</string>
<key>textShadowHidden</key>
<true/>
<key>textShadowOffsetX</key>
<real>0.0</real>
<key>textShadowOffsetY</key>
<real>0.0</real>
<key>textVerticalAlign</key>
<integer>0</integer>
<key>title</key>
<string>Text</string>
<key>userSetTitle</key>
<false/>
</dict>
</array>
<key>className</key>
<string>Composition</string>
<key>connections</key>
<array>
<dict>
<key>pointerCorner</key>
<integer>8</integer>
<key>pointerIdentifier</key>
<string>6BFE4870-6EC6-401F-8ECA-04B1443D9FEF</string>
<key>shapeEdge</key>
<integer>2</integer>
<key>shapeIdentifier</key>
<string>06F7E6E8-C86B-4797-91B2-568203B3A630</string>
<key>shapeRatio</key>
<real>0.55200000000000005</real>
</dict>
<dict>
<key>pointerCorner</key>
<integer>0</integer>
<key>pointerIdentifier</key>
<string>6E530217-474E-4EFD-94E5-D6EB7AA9733A</string>
<key>shapeEdge</key>
<integer>3</integer>
<key>shapeIdentifier</key>
<string>4BDC4A7C-E6B8-4E8E-8390-D23D1A07A0C6</string>
<key>shapeRatio</key>
<real>0.46202531645569622</real>
</dict>
<dict>
<key>pointerCorner</key>
<integer>0</integer>
<key>pointerIdentifier</key>
<string>6BFE4870-6EC6-401F-8ECA-04B1443D9FEF</string>
<key>shapeEdge</key>
<integer>3</integer>
<key>shapeIdentifier</key>
<string>F3CA3317-3FE2-4BC7-8E6F-722FFB457500</string>
<key>shapeRatio</key>
<real>0.53551515904335867</real>
</dict>
<dict>
<key>pointerCorner</key>
<integer>8</integer>
<key>pointerIdentifier</key>
<string>6E530217-474E-4EFD-94E5-D6EB7AA9733A</string>
<key>shapeEdge</key>
<integer>2</integer>
<key>shapeIdentifier</key>
<string>F3CA3317-3FE2-4BC7-8E6F-722FFB457500</string>
<key>shapeRatio</key>
<real>0.50021225769668909</real>
</dict>
</array>
<key>constrainAspectRatio</key>
<false/>
<key>contentFilterSpecs</key>
<array/>
<key>fillAngle</key>
<integer>0</integer>
<key>fillColor</key>
<string>1.000000:1.000000:1.000000:1.000000</string>
<key>fillGradientElements</key>
<array/>
<key>fillShadowBlur</key>
<real>3</real>
<key>fillShadowColor</key>
<string>0.000000:0.000000:0.000000:0.333000</string>
<key>fillShadowHidden</key>
<false/>
<key>fillShadowOffsetX</key>
<real>2</real>
<key>fillShadowOffsetY</key>
<real>2</real>
<key>fillType</key>
<integer>0</integer>
<key>frame</key>
<string>{{0, 0}, {640, 480}}</string>
<key>gridTolerance</key>
<real>10</real>
<key>hidden</key>
<false/>
<key>identifier</key>
<string>C73DCBF2-4022-4EDE-BD98-E5AD8E9790E2</string>
<key>imageAnchorRatio</key>
<string>{0.5, 0.5}</string>
<key>imageType</key>
<integer>0</integer>
<key>locked</key>
<false/>
<key>metrics</key>
<dict>
<key>anchorCorner</key>
<integer>4</integer>
<key>anchorSize</key>
<string>{0, 0}</string>
<key>group</key>
<integer>1</integer>
<key>height</key>
<real>480</real>
<key>resolution</key>
<real>72</real>
<key>unitType</key>
<integer>0</integer>
<key>width</key>
<real>640</real>
</dict>
<key>opacity</key>
<real>1</real>
<key>rotationAngle</key>
<integer>0</integer>
<key>rotationHandleRadius</key>
<real>100</real>
<key>rulerOriginCorner</key>
<integer>0</integer>
<key>scaleImage</key>
<true/>
<key>scrollCenterPoint</key>
<string>{319.5, 240}</string>
<key>stroke1Color</key>
<string></string>
<key>stroke1Enabled</key>
<false/>
<key>stroke2Color</key>
<string></string>
<key>stroke2Enabled</key>
<false/>
<key>strokeColor</key>
<string>0.000000:0.000000:0.000000:1.000000</string>
<key>strokeLineCap</key>
<integer>1</integer>
<key>strokeLineJoin</key>
<integer>1</integer>
<key>strokeLineWidth</key>
<real>1</real>
<key>strokeShadowBlur</key>
<real>3</real>
<key>strokeShadowColor</key>
<string>0.000000:0.000000:0.000000:0.333000</string>
<key>strokeShadowHidden</key>
<true/>
<key>strokeShadowOffsetX</key>
<real>2</real>
<key>strokeShadowOffsetY</key>
<real>2</real>
<key>strokeType</key>
<integer>0</integer>
<key>textAlign</key>
<integer>2</integer>
<key>textAppearanceType</key>
<integer>0</integer>
<key>textDrawOnPath</key>
<false/>
<key>textShadowBlur</key>
<real>5</real>
<key>textShadowColor</key>
<string>0.000000:0.000000:0.000000:0.333000</string>
<key>textShadowHidden</key>
<true/>
<key>textShadowOffsetX</key>
<real>0.0</real>
<key>textShadowOffsetY</key>
<real>0.0</real>
<key>textVerticalAlign</key>
<integer>0</integer>
<key>title</key>
<string>Page 1</string>
<key>userGuides</key>
<array/>
<key>userSetTitle</key>
<false/>
<key>zoomScaleIndex</key>
<integer>0</integer>
</dict>
</array>
<key>image_ref_counts</key>
<dict/>
<key>version</key>
<integer>8</integer>
</dict>
</plist>

BIN
atcpuser.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

BIN
aurp-packet-layouts.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

BIN
aurp-pie.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 69 KiB

BIN
aurp-state1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 212 KiB

BIN
aurp-state2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 195 KiB

BIN
aurp.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 78 KiB

BIN
aww.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

BIN
bolo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 120 KiB

BIN
buffcrying.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 293 KiB

1
buildkite.svg Normal file
View file

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 400 387" xml:space="preserve"><path d="M0 384.8h32.1c15.9 0 23.8-6.5 23.8-19.7 0-7-3.5-12.5-9.3-15v-.1c4.3-2.3 6.9-6.9 6.9-12.4 0-10-8-17.1-19.1-17.1H0v64.3zm11.9-38.1v-15.8h20.5c6 0 9.3 2.8 9.3 7.8 0 5.3-3.1 8-9.3 8H11.9zm0 27.5v-18H33c7.5 0 11 2.9 11 8.9s-3.4 9.1-11.1 9.1h-21zM63.3 364.4c0 13.6 8.3 21.8 21.8 21.8 7.3 0 13.1-2.3 17.1-6.4h.2v5.1h11v-48.7H102v26.5c0 7.8-5.8 13.3-14 13.3s-13.3-4.9-13.3-13.3v-26.5H63.3v28.2zM123.5 384.8h11.4v-48.7h-11.4v48.7zm-.4-57h12.1v-11.7h-12.1v11.7zM145.2 384.8h11.4v-67.1h-11.4v67.1zM165.1 360.4c0 15.1 11 25.7 26.3 25.7 7.3 0 13.3-2.4 17-6.5h.2v5.1h10.8v-67.1H208v23h-.2c-4-3.8-9.9-6-16.8-6-14.9.1-25.9 11.2-25.9 25.8zm42.9 3.2c0 6.9-6.9 12.6-15.5 12.6-9.7 0-16-6.2-16-15.7 0-9.6 6.4-15.7 15.9-15.7 8.5 0 15.6 5.5 15.6 12.4v6.4zM229.5 384.8h11.4v-14l9.3-7.9h.2l17.8 21.9h14.2l-24.1-28.9 23.1-19.8H265L241.1 357h-.2v-39.2h-11.4v67zM288.6 384.8H300v-48.7h-11.4v48.7zm-.4-57h12.1v-11.7h-12.1v11.7zM344.5 345.8v-9.7h-15.7v-11.8h-11.4v11.8h-11.2v9.7h11.2v24.9c0 9.8 4.5 14.1 15.6 14.1h9.4v-10.5h-8.5c-4 0-5.2-.9-5.2-4.1v-24.3h15.8v-.1zM347.7 360.6c0 15.4 10.4 25.5 26.9 25.5 10 0 17.9-3.7 23.5-10.9l-7.6-6.8c-4.5 5.6-9.4 8.3-15.9 8.3-8.9 0-15.1-5-15.5-12.6h41v-3.4c0-14.8-10.4-26-26-26s-26.4 10.8-26.4 25.9zm11.5-4.8c.7-6.9 6.7-11.7 14.9-11.7s14 4.8 14.6 11.7h-29.5z" fill="#1a002e"/><path d="M0 0v133l133.1 66.5v-133L0 0zM266.2 0v133l133.1-66.5L266.2 0z" fill="#30f2a2"/><path d="M266.2 133.1v133l133.1-66.5V66.5l-133.1 66.6zM133.1 66.5v133L266.2 133V0L133.1 66.5z" fill="#14cc80"/></svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

BIN
bustopology.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 464 KiB

BIN
centris-back.JPG Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 203 KiB

BIN
chooser-nozones.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 219 KiB

BIN
chooser-zones.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 193 KiB

BIN
cksum.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 193 KiB

BIN
classic-back.HEIC Normal file

Binary file not shown.

BIN
copying-files.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 71 KiB

BIN
ddp-vs-ip.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 276 KiB

View file

@ -0,0 +1,562 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>compositions</key>
<array>
<dict>
<key>adjustmentRatioX</key>
<real>0.0</real>
<key>adjustmentRatioY</key>
<real>0.0</real>
<key>children</key>
<array>
<dict>
<key>adjustmentRatioX</key>
<real>0.10000000000000001</real>
<key>adjustmentRatioY</key>
<real>0.0</real>
<key>attributedText1Data</key>
<data>
e1xydGYxXGFuc2lcYW5zaWNwZzEyNTJcY29j
b2FydGYyNzYxClxjb2NvYXRleHRzY2FsaW5n
MFxjb2NvYXBsYXRmb3JtMHtcZm9udHRibFxm
MFxmc3dpc3NcZmNoYXJzZXQwIEhlbHZldGlj
YTtcZjFcZnN3aXNzXGZjaGFyc2V0MCBIZWx2
ZXRpY2EtQm9sZDt9CntcY29sb3J0Ymw7XHJl
ZDI1NVxncmVlbjI1NVxibHVlMjU1O1xyZWQw
XGdyZWVuMFxibHVlMDt9CntcKlxleHBhbmRl
ZGNvbG9ydGJsOztcY3NncmF5XGMwO30KXHBh
cmRcdHg1NjBcdHgxMTIwXHR4MTY4MFx0eDIy
NDBcdHgyODAwXHR4MzM2MFx0eDM5MjBcdHg0
NDgwXHR4NTA0MFx0eDU2MDBcdHg2MTYwXHR4
NjcyMFxwYXJkaXJuYXR1cmFsXHFyXHBhcnRp
Z2h0ZW5mYWN0b3IwCgpcZjBcZnMyNCBcY2Yy
IEhvcCBjb3VudDogNCBiaXRzXApcCgpcZjFc
YiBTb3VyY2UgbmV0d29yazogMTYgYml0c1wK
U291cmNlIG5vZGU6IDggYml0cwpcZjBcYjAg
XApTb3VyY2Ugc29ja2V0OiA4IGJpdHNcClwK
ClxmMVxiIERlc3RpbmF0aW9uIG5ldHdvcms6
IDE2IGJpdHNcCkRlc3RpbmF0aW9uIG5vZGU6
IDggYml0c1wKClxmMFxiMCBEZXN0aW5hdGlv
biBzb2NrZXQ6IDggYml0c1wKXApQcm90b2Nv
bCB0eXBlOiA4IGJpdHNcCn0=
</data>
<key>attributedTextData</key>
<data>
e1xydGYxXGFuc2lcYW5zaWNwZzEyNTJcY29j
b2FydGYyNzYxClxjb2NvYXRleHRzY2FsaW5n
MFxjb2NvYXBsYXRmb3JtMHtcZm9udHRibFxm
MFxmc3dpc3NcZmNoYXJzZXQwIEhlbHZldGlj
YTt9CntcY29sb3J0Ymw7XHJlZDI1NVxncmVl
bjI1NVxibHVlMjU1O1xyZWQwXGdyZWVuMFxi
bHVlMDt9CntcKlxleHBhbmRlZGNvbG9ydGJs
OztcY3NnZW5lcmljcmdiXGMwXGMwXGMwO30K
XHBhcmRcdHg1NjBcdHgxMTIwXHR4MTY4MFx0
eDIyNDBcdHgyODAwXHR4MzM2MFx0eDM5MjBc
dHg0NDgwXHR4NTA0MFx0eDU2MDBcdHg2MTYw
XHR4NjcyMFxwYXJkaXJuYXR1cmFsXHFjXHBh
cnRpZ2h0ZW5mYWN0b3IwCgpcZjBcZnMyNCBc
Y2YyIFx1cDAgRERQfQ==
</data>
<key>className</key>
<string>TitleBox</string>
<key>constrainAspectRatio</key>
<false/>
<key>contentFilterSpecs</key>
<array/>
<key>fillAngle</key>
<integer>0</integer>
<key>fillColor</key>
<string>1.000000:1.000000:1.000000:1.000000</string>
<key>fillGradientElements</key>
<array/>
<key>fillShadowBlur</key>
<real>3</real>
<key>fillShadowColor</key>
<string>0.000000:0.000000:0.000000:0.333000</string>
<key>fillShadowHidden</key>
<false/>
<key>fillShadowOffsetX</key>
<real>2</real>
<key>fillShadowOffsetY</key>
<real>2</real>
<key>fillType</key>
<integer>0</integer>
<key>frame</key>
<string>{{92, 91}, {190, 254}}</string>
<key>hidden</key>
<false/>
<key>identifier</key>
<string>32832BDA-9F03-4CD4-857E-6FE4C5472225</string>
<key>imageAnchorRatio</key>
<string>{0.5, 0.5}</string>
<key>imageType</key>
<integer>0</integer>
<key>locked</key>
<false/>
<key>opacity</key>
<real>1</real>
<key>rotationAngle</key>
<integer>0</integer>
<key>rotationHandleRadius</key>
<real>130</real>
<key>scaleImage</key>
<true/>
<key>stroke1Color</key>
<string></string>
<key>stroke1Enabled</key>
<false/>
<key>stroke2Color</key>
<string></string>
<key>stroke2Enabled</key>
<false/>
<key>strokeColor</key>
<string>0.304030:0.641902:1.000000:1.000000</string>
<key>strokeLineCap</key>
<integer>1</integer>
<key>strokeLineJoin</key>
<integer>1</integer>
<key>strokeLineWidth</key>
<real>5</real>
<key>strokeShadowBlur</key>
<real>3</real>
<key>strokeShadowColor</key>
<string>0.000000:0.000000:0.000000:0.333000</string>
<key>strokeShadowHidden</key>
<true/>
<key>strokeShadowOffsetX</key>
<real>2</real>
<key>strokeShadowOffsetY</key>
<real>2</real>
<key>strokeType</key>
<integer>0</integer>
<key>textAlign</key>
<integer>2</integer>
<key>textAppearanceType</key>
<integer>0</integer>
<key>textDrawOnPath</key>
<false/>
<key>textShadowBlur</key>
<real>5</real>
<key>textShadowColor</key>
<string>0.000000:0.000000:0.000000:0.333000</string>
<key>textShadowHidden</key>
<true/>
<key>textShadowOffsetX</key>
<real>0.0</real>
<key>textShadowOffsetY</key>
<real>0.0</real>
<key>textVerticalAlign</key>
<integer>0</integer>
<key>title</key>
<string>Title Box</string>
<key>userSetTitle</key>
<false/>
</dict>
<dict>
<key>adjustmentRatioX</key>
<real>0.10000000000000001</real>
<key>adjustmentRatioY</key>
<real>0.0</real>
<key>attributedText1Data</key>
<data>
e1xydGYxXGFuc2lcYW5zaWNwZzEyNTJcY29j
b2FydGYyNzYxClxjb2NvYXRleHRzY2FsaW5n
MFxjb2NvYXBsYXRmb3JtMHtcZm9udHRibFxm
MFxmc3dpc3NcZmNoYXJzZXQwIEhlbHZldGlj
YTtcZjFcZnN3aXNzXGZjaGFyc2V0MCBIZWx2
ZXRpY2EtQm9sZDt9CntcY29sb3J0Ymw7XHJl
ZDI1NVxncmVlbjI1NVxibHVlMjU1O1xyZWQw
XGdyZWVuMFxibHVlMDt9CntcKlxleHBhbmRl
ZGNvbG9ydGJsOztcY3NwdGhyZWVcYzBcYzBc
YzA7fQpccGFyZFx0eDU2MFx0eDExMjBcdHgx
NjgwXHR4MjI0MFx0eDI4MDBcdHgzMzYwXHR4
MzkyMFx0eDQ0ODBcdHg1MDQwXHR4NTYwMFx0
eDYxNjBcdHg2NzIwXHBhcmRpcm5hdHVyYWxc
cXJccGFydGlnaHRlbmZhY3RvcjAKClxmMFxm
czI0IFxjZjIgVGltZS10by1saXZlOiA4IGJp
dHNcClByb3RvY29sIHR5cGU6IDggYml0c1wK
ClxmMVxiIFNvdXJjZSBhZGRyZXNzOiAzMiBi
aXRzXApEZXN0aW5hdGlvbiBhZGRyZXNzIDMy
IGJpdHN9
</data>
<key>attributedTextData</key>
<data>
e1xydGYxXGFuc2lcYW5zaWNwZzEyNTJcY29j
b2FydGYyNzYxClxjb2NvYXRleHRzY2FsaW5n
MFxjb2NvYXBsYXRmb3JtMHtcZm9udHRibFxm
MFxmc3dpc3NcZmNoYXJzZXQwIEhlbHZldGlj
YTt9CntcY29sb3J0Ymw7XHJlZDI1NVxncmVl
bjI1NVxibHVlMjU1O1xyZWQwXGdyZWVuMFxi
bHVlMDt9CntcKlxleHBhbmRlZGNvbG9ydGJs
OztcY3NwdGhyZWVcYzBcYzBcYzA7fQpccGFy
ZFx0eDU2MFx0eDExMjBcdHgxNjgwXHR4MjI0
MFx0eDI4MDBcdHgzMzYwXHR4MzkyMFx0eDQ0
ODBcdHg1MDQwXHR4NTYwMFx0eDYxNjBcdHg2
NzIwXHBhcmRpcm5hdHVyYWxccWNccGFydGln
aHRlbmZhY3RvcjAKClxmMFxmczI0IFxjZjIg
XHVwMCBJUHY0fQ==
</data>
<key>className</key>
<string>TitleBox</string>
<key>constrainAspectRatio</key>
<false/>
<key>contentFilterSpecs</key>
<array/>
<key>fillAngle</key>
<integer>0</integer>
<key>fillColor</key>
<string>1.000000:1.000000:1.000000:1.000000</string>
<key>fillGradientElements</key>
<array/>
<key>fillShadowBlur</key>
<real>3</real>
<key>fillShadowColor</key>
<string>0.000000:0.000000:0.000000:0.333000</string>
<key>fillShadowHidden</key>
<false/>
<key>fillShadowOffsetX</key>
<real>2</real>
<key>fillShadowOffsetY</key>
<real>2</real>
<key>fillType</key>
<integer>0</integer>
<key>frame</key>
<string>{{340, 227}, {190, 118}}</string>
<key>hidden</key>
<false/>
<key>identifier</key>
<string>B9D780B9-0C92-4C26-AEDF-C21C05C990B7</string>
<key>imageAnchorRatio</key>
<string>{0.5, 0.5}</string>
<key>imageType</key>
<integer>0</integer>
<key>locked</key>
<false/>
<key>opacity</key>
<real>1</real>
<key>rotationAngle</key>
<integer>0</integer>
<key>rotationHandleRadius</key>
<real>130</real>
<key>scaleImage</key>
<true/>
<key>stroke1Color</key>
<string></string>
<key>stroke1Enabled</key>
<false/>
<key>stroke2Color</key>
<string></string>
<key>stroke2Enabled</key>
<false/>
<key>strokeColor</key>
<string>0.273143:0.994893:0.289632:1.000000</string>
<key>strokeLineCap</key>
<integer>1</integer>
<key>strokeLineJoin</key>
<integer>1</integer>
<key>strokeLineWidth</key>
<real>5</real>
<key>strokeShadowBlur</key>
<real>3</real>
<key>strokeShadowColor</key>
<string>0.000000:0.000000:0.000000:0.333000</string>
<key>strokeShadowHidden</key>
<true/>
<key>strokeShadowOffsetX</key>
<real>2</real>
<key>strokeShadowOffsetY</key>
<real>2</real>
<key>strokeType</key>
<integer>0</integer>
<key>textAlign</key>
<integer>2</integer>
<key>textAppearanceType</key>
<integer>0</integer>
<key>textDrawOnPath</key>
<false/>
<key>textShadowBlur</key>
<real>5</real>
<key>textShadowColor</key>
<string>0.000000:0.000000:0.000000:0.333000</string>
<key>textShadowHidden</key>
<true/>
<key>textShadowOffsetX</key>
<real>0.0</real>
<key>textShadowOffsetY</key>
<real>0.0</real>
<key>textVerticalAlign</key>
<integer>0</integer>
<key>title</key>
<string>Title Box</string>
<key>userSetTitle</key>
<false/>
</dict>
<dict>
<key>adjustmentRatioX</key>
<real>0.10000000000000001</real>
<key>adjustmentRatioY</key>
<real>0.0</real>
<key>attributedText1Data</key>
<data>
e1xydGYxXGFuc2lcYW5zaWNwZzEyNTJcY29j
b2FydGYyNzYxClxjb2NvYXRleHRzY2FsaW5n
MFxjb2NvYXBsYXRmb3JtMHtcZm9udHRibFxm
MFxmc3dpc3NcZmNoYXJzZXQwIEhlbHZldGlj
YTt9CntcY29sb3J0Ymw7XHJlZDI1NVxncmVl
bjI1NVxibHVlMjU1O1xyZWQwXGdyZWVuMFxi
bHVlMDt9CntcKlxleHBhbmRlZGNvbG9ydGJs
OztcY3NwdGhyZWVcYzBcYzBcYzA7fQpccGFy
ZFx0eDU2MFx0eDExMjBcdHgxNjgwXHR4MjI0
MFx0eDI4MDBcdHgzMzYwXHR4MzkyMFx0eDQ0
ODBcdHg1MDQwXHR4NTYwMFx0eDYxNjBcdHg2
NzIwXHBhcmRpcm5hdHVyYWxccXJccGFydGln
aHRlbmZhY3RvcjAKClxmMFxmczI0IFxjZjIg
U291cmNlIHBvcnQ6IDE2IGJpdHNcCkRlc3Rp
bmF0aW9uIHBvcnQ6IDE2IGJpdHN9
</data>
<key>attributedTextData</key>
<data>
e1xydGYxXGFuc2lcYW5zaWNwZzEyNTJcY29j
b2FydGYyNzYxClxjb2NvYXRleHRzY2FsaW5n
MFxjb2NvYXBsYXRmb3JtMHtcZm9udHRibFxm
MFxmc3dpc3NcZmNoYXJzZXQwIEhlbHZldGlj
YTt9CntcY29sb3J0Ymw7XHJlZDI1NVxncmVl
bjI1NVxibHVlMjU1O1xyZWQwXGdyZWVuMFxi
bHVlMDt9CntcKlxleHBhbmRlZGNvbG9ydGJs
OztcY3NwdGhyZWVcYzBcYzBcYzA7fQpccGFy
ZFx0eDU2MFx0eDExMjBcdHgxNjgwXHR4MjI0
MFx0eDI4MDBcdHgzMzYwXHR4MzkyMFx0eDQ0
ODBcdHg1MDQwXHR4NTYwMFx0eDYxNjBcdHg2
NzIwXHBhcmRpcm5hdHVyYWxccWNccGFydGln
aHRlbmZhY3RvcjAKClxmMFxmczI0IFxjZjIg
XHVwMCBVRFAgYW5kIFRDUH0=
</data>
<key>className</key>
<string>TitleBox</string>
<key>constrainAspectRatio</key>
<false/>
<key>contentFilterSpecs</key>
<array/>
<key>fillAngle</key>
<integer>0</integer>
<key>fillColor</key>
<string>1.000000:1.000000:1.000000:1.000000</string>
<key>fillGradientElements</key>
<array/>
<key>fillShadowBlur</key>
<real>3</real>
<key>fillShadowColor</key>
<string>0.000000:0.000000:0.000000:0.333000</string>
<key>fillShadowHidden</key>
<false/>
<key>fillShadowOffsetX</key>
<real>2</real>
<key>fillShadowOffsetY</key>
<real>2</real>
<key>fillType</key>
<integer>0</integer>
<key>frame</key>
<string>{{340, 91}, {190, 108}}</string>
<key>hidden</key>
<false/>
<key>identifier</key>
<string>C75EB962-8DA8-48EE-A3C0-4B8EAB3A35E9</string>
<key>imageAnchorRatio</key>
<string>{0.5, 0.5}</string>
<key>imageType</key>
<integer>0</integer>
<key>locked</key>
<false/>
<key>opacity</key>
<real>1</real>
<key>rotationAngle</key>
<integer>0</integer>
<key>rotationHandleRadius</key>
<real>130</real>
<key>scaleImage</key>
<true/>
<key>stroke1Color</key>
<string></string>
<key>stroke1Enabled</key>
<false/>
<key>stroke2Color</key>
<string></string>
<key>stroke2Enabled</key>
<false/>
<key>strokeColor</key>
<string>0.611546:0.986862:0.000000:1.000000</string>
<key>strokeLineCap</key>
<integer>1</integer>
<key>strokeLineJoin</key>
<integer>1</integer>
<key>strokeLineWidth</key>
<real>5</real>
<key>strokeShadowBlur</key>
<real>3</real>
<key>strokeShadowColor</key>
<string>0.000000:0.000000:0.000000:0.333000</string>
<key>strokeShadowHidden</key>
<true/>
<key>strokeShadowOffsetX</key>
<real>2</real>
<key>strokeShadowOffsetY</key>
<real>2</real>
<key>strokeType</key>
<integer>0</integer>
<key>textAlign</key>
<integer>2</integer>
<key>textAppearanceType</key>
<integer>0</integer>
<key>textDrawOnPath</key>
<false/>
<key>textShadowBlur</key>
<real>5</real>
<key>textShadowColor</key>
<string>0.000000:0.000000:0.000000:0.333000</string>
<key>textShadowHidden</key>
<true/>
<key>textShadowOffsetX</key>
<real>0.0</real>
<key>textShadowOffsetY</key>
<real>0.0</real>
<key>textVerticalAlign</key>
<integer>0</integer>
<key>title</key>
<string>Title Box</string>
<key>userSetTitle</key>
<false/>
</dict>
</array>
<key>className</key>
<string>Composition</string>
<key>connections</key>
<array/>
<key>constrainAspectRatio</key>
<false/>
<key>contentFilterSpecs</key>
<array/>
<key>fillAngle</key>
<integer>0</integer>
<key>fillColor</key>
<string>1.000000:1.000000:1.000000:1.000000</string>
<key>fillGradientElements</key>
<array/>
<key>fillShadowBlur</key>
<real>3</real>
<key>fillShadowColor</key>
<string>0.000000:0.000000:0.000000:0.333000</string>
<key>fillShadowHidden</key>
<false/>
<key>fillShadowOffsetX</key>
<real>2</real>
<key>fillShadowOffsetY</key>
<real>2</real>
<key>fillType</key>
<integer>0</integer>
<key>frame</key>
<string>{{0, 0}, {640, 480}}</string>
<key>gridTolerance</key>
<real>10</real>
<key>hidden</key>
<false/>
<key>identifier</key>
<string>A12D887F-EA0A-40A4-8802-57290F5015DF</string>
<key>imageAnchorRatio</key>
<string>{0.5, 0.5}</string>
<key>imageType</key>
<integer>0</integer>
<key>locked</key>
<false/>
<key>metrics</key>
<dict>
<key>anchorCorner</key>
<integer>4</integer>
<key>anchorSize</key>
<string>{0, 0}</string>
<key>group</key>
<integer>1</integer>
<key>height</key>
<real>480</real>
<key>resolution</key>
<real>72</real>
<key>unitType</key>
<integer>0</integer>
<key>width</key>
<real>640</real>
</dict>
<key>opacity</key>
<real>1</real>
<key>rotationAngle</key>
<integer>0</integer>
<key>rotationHandleRadius</key>
<real>100</real>
<key>rulerOriginCorner</key>
<integer>0</integer>
<key>scaleImage</key>
<true/>
<key>scrollCenterPoint</key>
<string>{319.5, 240}</string>
<key>stroke1Color</key>
<string></string>
<key>stroke1Enabled</key>
<false/>
<key>stroke2Color</key>
<string></string>
<key>stroke2Enabled</key>
<false/>
<key>strokeColor</key>
<string>0.000000:0.000000:0.000000:1.000000</string>
<key>strokeLineCap</key>
<integer>1</integer>
<key>strokeLineJoin</key>
<integer>1</integer>
<key>strokeLineWidth</key>
<real>1</real>
<key>strokeShadowBlur</key>
<real>3</real>
<key>strokeShadowColor</key>
<string>0.000000:0.000000:0.000000:0.333000</string>
<key>strokeShadowHidden</key>
<true/>
<key>strokeShadowOffsetX</key>
<real>2</real>
<key>strokeShadowOffsetY</key>
<real>2</real>
<key>strokeType</key>
<integer>0</integer>
<key>textAlign</key>
<integer>1</integer>
<key>textAppearanceType</key>
<integer>0</integer>
<key>textDrawOnPath</key>
<false/>
<key>textShadowBlur</key>
<real>5</real>
<key>textShadowColor</key>
<string>0.000000:0.000000:0.000000:0.333000</string>
<key>textShadowHidden</key>
<true/>
<key>textShadowOffsetX</key>
<real>0.0</real>
<key>textShadowOffsetY</key>
<real>0.0</real>
<key>textVerticalAlign</key>
<integer>0</integer>
<key>title</key>
<string>Page 1</string>
<key>userGuides</key>
<array/>
<key>userSetTitle</key>
<false/>
<key>zoomScaleIndex</key>
<integer>0</integer>
</dict>
</array>
<key>image_ref_counts</key>
<dict/>
<key>version</key>
<integer>8</integer>
</dict>
</plist>

BIN
demo-arch.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 384 KiB

File diff suppressed because it is too large Load diff

BIN
dongleback.HEIC Normal file

Binary file not shown.

BIN
dongleplug.HEIC Normal file

Binary file not shown.

BIN
dongletop.HEIC Normal file

Binary file not shown.

BIN
europlus.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 946 KiB

BIN
fam.JPG Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 MiB

BIN
figurewhere.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 131 KiB

BIN
foundit.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 241 KiB

BIN
gtchat1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 170 KiB

BIN
gtchat2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 208 KiB

BIN
gtsetup1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 125 KiB

BIN
imac.HEIC Normal file

Binary file not shown.

BIN
inside-at.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

BIN
ipv4header.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

BIN
is-it-safe.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

BIN
ltmodule.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 236 KiB

BIN
ltnetwork.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 102 KiB

BIN
mac-back.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 427 KiB

BIN
mac-ports.jpeg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

View file

@ -0,0 +1,870 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>compositions</key>
<array>
<dict>
<key>adjustmentRatioX</key>
<real>0.0</real>
<key>adjustmentRatioY</key>
<real>0.0</real>
<key>children</key>
<array>
<dict>
<key>adjustmentRatioX</key>
<real>0.25</real>
<key>adjustmentRatioY</key>
<real>0.25</real>
<key>attributedTextData</key>
<data>
e1xydGYxXGFuc2lcYW5zaWNwZzEyNTJcY29j
b2FydGYyNzYxClxjb2NvYXRleHRzY2FsaW5n
MFxjb2NvYXBsYXRmb3JtMHtcZm9udHRibFxm
MFxmc3dpc3NcZmNoYXJzZXQwIEhlbHZldGlj
YTt9CntcY29sb3J0Ymw7XHJlZDI1NVxncmVl
bjI1NVxibHVlMjU1O1xyZWQwXGdyZWVuMFxi
bHVlMDt9CntcKlxleHBhbmRlZGNvbG9ydGJs
OztcY3NnZW5lcmljcmdiXGMwXGMwXGMwO30K
XHBhcmRcdHg1NjBcdHgxMTIwXHR4MTY4MFx0
eDIyNDBcdHgyODAwXHR4MzM2MFx0eDM5MjBc
dHg0NDgwXHR4NTA0MFx0eDU2MDBcdHg2MTYw
XHR4NjcyMFxwYXJkaXJuYXR1cmFsXHFjXHBh
cnRpZ2h0ZW5mYWN0b3IwCgpcZjBcZnMyOCBc
Y2YyIFx1cDAgTWFjSVAgR2F0ZXdheX0=
</data>
<key>className</key>
<string>Box</string>
<key>constrainAspectRatio</key>
<false/>
<key>contentFilterSpecs</key>
<array/>
<key>fillAngle</key>
<integer>0</integer>
<key>fillColor</key>
<string>1.000000:1.000000:1.000000:1.000000</string>
<key>fillGradientElements</key>
<array/>
<key>fillShadowBlur</key>
<real>3</real>
<key>fillShadowColor</key>
<string>0.000000:0.000000:0.000000:0.333000</string>
<key>fillShadowHidden</key>
<false/>
<key>fillShadowOffsetX</key>
<real>2</real>
<key>fillShadowOffsetY</key>
<real>2</real>
<key>fillType</key>
<integer>0</integer>
<key>frame</key>
<string>{{265, 158}, {100, 100}}</string>
<key>hidden</key>
<false/>
<key>identifier</key>
<string>15A4C3E6-20E9-423C-84D2-2F0629685937</string>
<key>imageAnchorRatio</key>
<string>{0.5, 0.5}</string>
<key>imageType</key>
<integer>0</integer>
<key>locked</key>
<false/>
<key>opacity</key>
<real>1</real>
<key>rotationAngle</key>
<integer>0</integer>
<key>rotationHandleRadius</key>
<real>100</real>
<key>scaleImage</key>
<true/>
<key>stroke1Color</key>
<string></string>
<key>stroke1Enabled</key>
<false/>
<key>stroke2Color</key>
<string></string>
<key>stroke2Enabled</key>
<false/>
<key>strokeColor</key>
<string>0.000000:0.000000:0.000000:1.000000</string>
<key>strokeLineCap</key>
<integer>1</integer>
<key>strokeLineJoin</key>
<integer>1</integer>
<key>strokeLineWidth</key>
<real>1</real>
<key>strokeShadowBlur</key>
<real>3</real>
<key>strokeShadowColor</key>
<string>0.000000:0.000000:0.000000:0.333000</string>
<key>strokeShadowHidden</key>
<true/>
<key>strokeShadowOffsetX</key>
<real>2</real>
<key>strokeShadowOffsetY</key>
<real>2</real>
<key>strokeType</key>
<integer>0</integer>
<key>textAlign</key>
<integer>1</integer>
<key>textAppearanceType</key>
<integer>0</integer>
<key>textDrawOnPath</key>
<false/>
<key>textShadowBlur</key>
<real>5</real>
<key>textShadowColor</key>
<string>0.000000:0.000000:0.000000:0.333000</string>
<key>textShadowHidden</key>
<true/>
<key>textShadowOffsetX</key>
<real>0.0</real>
<key>textShadowOffsetY</key>
<real>0.0</real>
<key>textVerticalAlign</key>
<integer>0</integer>
<key>title</key>
<string>Box</string>
<key>userSetTitle</key>
<false/>
</dict>
<dict>
<key>adjustmentRatioX</key>
<real>0.0</real>
<key>adjustmentRatioY</key>
<real>0.0</real>
<key>attributedTextData</key>
<data>
e1xydGYxXGFuc2lcYW5zaWNwZzEyNTJcY29j
b2FydGYyNzYxClxjb2NvYXRleHRzY2FsaW5n
MFxjb2NvYXBsYXRmb3JtMHtcZm9udHRibFxm
MFxmc3dpc3NcZmNoYXJzZXQwIEhlbHZldGlj
YTt9CntcY29sb3J0Ymw7XHJlZDI1NVxncmVl
bjI1NVxibHVlMjU1O1xyZWQwXGdyZWVuMFxi
bHVlMDt9CntcKlxleHBhbmRlZGNvbG9ydGJs
OztcY3NnZW5lcmljcmdiXGMwXGMwXGMwO30K
XHBhcmRcdHg1NjBcdHgxMTIwXHR4MTY4MFx0
eDIyNDBcdHgyODAwXHR4MzM2MFx0eDM5MjBc
dHg0NDgwXHR4NTA0MFx0eDU2MDBcdHg2MTYw
XHR4NjcyMFxwYXJkaXJuYXR1cmFsXHFjXHBh
cnRpZ2h0ZW5mYWN0b3IwCgpcZjBcZnMyOCBc
Y2YyIFx1cDAgQXBwbGVUYWxrIG5ldHdvcmt9
</data>
<key>className</key>
<string>Cloud</string>
<key>constrainAspectRatio</key>
<false/>
<key>contentFilterSpecs</key>
<array/>
<key>fillAngle</key>
<integer>0</integer>
<key>fillColor</key>
<string>1.000000:1.000000:1.000000:1.000000</string>
<key>fillGradientElements</key>
<array/>
<key>fillShadowBlur</key>
<real>3</real>
<key>fillShadowColor</key>
<string>0.000000:0.000000:0.000000:0.333000</string>
<key>fillShadowHidden</key>
<false/>
<key>fillShadowOffsetX</key>
<real>2</real>
<key>fillShadowOffsetY</key>
<real>2</real>
<key>fillType</key>
<integer>0</integer>
<key>frame</key>
<string>{{45, 163}, {178, 95}}</string>
<key>hidden</key>
<false/>
<key>identifier</key>
<string>C684FE57-CCC3-472F-B2C8-8BF7EC0BF17B</string>
<key>imageAnchorRatio</key>
<string>{0.5, 0.5}</string>
<key>imageType</key>
<integer>0</integer>
<key>locked</key>
<false/>
<key>opacity</key>
<real>1</real>
<key>rotationAngle</key>
<integer>0</integer>
<key>rotationHandleRadius</key>
<real>115</real>
<key>scaleImage</key>
<true/>
<key>stroke1Color</key>
<string></string>
<key>stroke1Enabled</key>
<false/>
<key>stroke2Color</key>
<string></string>
<key>stroke2Enabled</key>
<false/>
<key>strokeColor</key>
<string>0.000000:0.000000:0.000000:1.000000</string>
<key>strokeLineCap</key>
<integer>1</integer>
<key>strokeLineJoin</key>
<integer>1</integer>
<key>strokeLineWidth</key>
<real>1</real>
<key>strokeShadowBlur</key>
<real>3</real>
<key>strokeShadowColor</key>
<string>0.000000:0.000000:0.000000:0.333000</string>
<key>strokeShadowHidden</key>
<true/>
<key>strokeShadowOffsetX</key>
<real>2</real>
<key>strokeShadowOffsetY</key>
<real>2</real>
<key>strokeType</key>
<integer>0</integer>
<key>textAlign</key>
<integer>1</integer>
<key>textAppearanceType</key>
<integer>0</integer>
<key>textDrawOnPath</key>
<false/>
<key>textShadowBlur</key>
<real>5</real>
<key>textShadowColor</key>
<string>0.000000:0.000000:0.000000:0.333000</string>
<key>textShadowHidden</key>
<true/>
<key>textShadowOffsetX</key>
<real>0.0</real>
<key>textShadowOffsetY</key>
<real>0.0</real>
<key>textVerticalAlign</key>
<integer>0</integer>
<key>title</key>
<string>Cloud</string>
<key>userSetTitle</key>
<false/>
</dict>
<dict>
<key>adjustmentRatioX</key>
<real>0.0</real>
<key>adjustmentRatioY</key>
<real>0.0</real>
<key>attributedTextData</key>
<data>
e1xydGYxXGFuc2lcYW5zaWNwZzEyNTJcY29j
b2FydGYyNzYxClxjb2NvYXRleHRzY2FsaW5n
MFxjb2NvYXBsYXRmb3JtMHtcZm9udHRibFxm
MFxmc3dpc3NcZmNoYXJzZXQwIEhlbHZldGlj
YTt9CntcY29sb3J0Ymw7XHJlZDI1NVxncmVl
bjI1NVxibHVlMjU1O1xyZWQwXGdyZWVuMFxi
bHVlMDt9CntcKlxleHBhbmRlZGNvbG9ydGJs
OztcY3NnZW5lcmljcmdiXGMwXGMwXGMwO30K
XHBhcmRcdHg1NjBcdHgxMTIwXHR4MTY4MFx0
eDIyNDBcdHgyODAwXHR4MzM2MFx0eDM5MjBc
dHg0NDgwXHR4NTA0MFx0eDU2MDBcdHg2MTYw
XHR4NjcyMFxwYXJkaXJuYXR1cmFsXHFjXHBh
cnRpZ2h0ZW5mYWN0b3IwCgpcZjBcZnMyOCBc
Y2YyIFx1cDAgSVAgbmV0d29ya30=
</data>
<key>className</key>
<string>Cloud</string>
<key>constrainAspectRatio</key>
<false/>
<key>contentFilterSpecs</key>
<array/>
<key>fillAngle</key>
<integer>0</integer>
<key>fillColor</key>
<string>1.000000:1.000000:1.000000:1.000000</string>
<key>fillGradientElements</key>
<array/>
<key>fillShadowBlur</key>
<real>3</real>
<key>fillShadowColor</key>
<string>0.000000:0.000000:0.000000:0.333000</string>
<key>fillShadowHidden</key>
<false/>
<key>fillShadowOffsetX</key>
<real>2</real>
<key>fillShadowOffsetY</key>
<real>2</real>
<key>fillType</key>
<integer>0</integer>
<key>frame</key>
<string>{{412, 158}, {178, 95}}</string>
<key>hidden</key>
<false/>
<key>identifier</key>
<string>EB6B5FEF-9C46-4504-86E1-3C788F49CDB3</string>
<key>imageAnchorRatio</key>
<string>{0.5, 0.5}</string>
<key>imageType</key>
<integer>0</integer>
<key>locked</key>
<false/>
<key>opacity</key>
<real>1</real>
<key>rotationAngle</key>
<integer>0</integer>
<key>rotationHandleRadius</key>
<real>115</real>
<key>scaleImage</key>
<true/>
<key>stroke1Color</key>
<string></string>
<key>stroke1Enabled</key>
<false/>
<key>stroke2Color</key>
<string></string>
<key>stroke2Enabled</key>
<false/>
<key>strokeColor</key>
<string>0.000000:0.000000:0.000000:1.000000</string>
<key>strokeLineCap</key>
<integer>1</integer>
<key>strokeLineJoin</key>
<integer>1</integer>
<key>strokeLineWidth</key>
<real>1</real>
<key>strokeShadowBlur</key>
<real>3</real>
<key>strokeShadowColor</key>
<string>0.000000:0.000000:0.000000:0.333000</string>
<key>strokeShadowHidden</key>
<true/>
<key>strokeShadowOffsetX</key>
<real>2</real>
<key>strokeShadowOffsetY</key>
<real>2</real>
<key>strokeType</key>
<integer>0</integer>
<key>textAlign</key>
<integer>1</integer>
<key>textAppearanceType</key>
<integer>0</integer>
<key>textDrawOnPath</key>
<false/>
<key>textShadowBlur</key>
<real>5</real>
<key>textShadowColor</key>
<string>0.000000:0.000000:0.000000:0.333000</string>
<key>textShadowHidden</key>
<true/>
<key>textShadowOffsetX</key>
<real>0.0</real>
<key>textShadowOffsetY</key>
<real>0.0</real>
<key>textVerticalAlign</key>
<integer>0</integer>
<key>title</key>
<string>Cloud</string>
<key>userSetTitle</key>
<false/>
</dict>
<dict>
<key>adjustmentRatioX</key>
<real>0.0</real>
<key>adjustmentRatioY</key>
<real>0.0</real>
<key>attributedTextData</key>
<data>
e1xydGYxXGFuc2lcYW5zaWNwZzEyNTJcY29j
b2FydGYyNzYxClxjb2NvYXRleHRzY2FsaW5n
MFxjb2NvYXBsYXRmb3JtMHtcZm9udHRibFxm
MFxmc3dpc3NcZmNoYXJzZXQwIEhlbHZldGlj
YTt9CntcY29sb3J0Ymw7XHJlZDI1NVxncmVl
bjI1NVxibHVlMjU1O1xyZWQwXGdyZWVuMFxi
bHVlMDt9CntcKlxleHBhbmRlZGNvbG9ydGJs
OztcY3NnZW5lcmljcmdiXGMwXGMwXGMwO30K
XHBhcmRcdHg1NjBcdHgxMTIwXHR4MTY4MFx0
eDIyNDBcdHgyODAwXHR4MzM2MFx0eDM5MjBc
dHg0NDgwXHR4NTA0MFx0eDU2MDBcdHg2MTYw
XHR4NjcyMFxwYXJkaXJuYXR1cmFsXHBhcnRp
Z2h0ZW5mYWN0b3IwCgpcZjBcZnMzMCBcY2Yy
IFx1cDAgTmV0d29yayB0cmFuc2xhdGlvbn0=
</data>
<key>className</key>
<string>ResizeText</string>
<key>constrainAspectRatio</key>
<false/>
<key>contentFilterSpecs</key>
<array/>
<key>fillAngle</key>
<integer>0</integer>
<key>fillColor</key>
<string></string>
<key>fillGradientElements</key>
<array/>
<key>fillShadowBlur</key>
<real>3</real>
<key>fillShadowColor</key>
<string>0.000000:0.000000:0.000000:0.333000</string>
<key>fillShadowHidden</key>
<true/>
<key>fillShadowOffsetX</key>
<real>2</real>
<key>fillShadowOffsetY</key>
<real>2</real>
<key>fillType</key>
<integer>0</integer>
<key>frame</key>
<string>{{251, 276}, {128, 18}}</string>
<key>hidden</key>
<false/>
<key>identifier</key>
<string>1CDE3656-2ABF-45D0-B50A-C329307C6656</string>
<key>imageAnchorRatio</key>
<string>{0.5, 0.5}</string>
<key>imageType</key>
<integer>0</integer>
<key>locked</key>
<false/>
<key>opacity</key>
<real>1</real>
<key>rotationAngle</key>
<integer>0</integer>
<key>rotationHandleRadius</key>
<real>100</real>
<key>scaleImage</key>
<true/>
<key>stroke1Color</key>
<string></string>
<key>stroke1Enabled</key>
<false/>
<key>stroke2Color</key>
<string></string>
<key>stroke2Enabled</key>
<false/>
<key>strokeColor</key>
<string>0.000000:0.000000:0.000000:1.000000</string>
<key>strokeLineCap</key>
<integer>1</integer>
<key>strokeLineJoin</key>
<integer>1</integer>
<key>strokeLineWidth</key>
<real>1</real>
<key>strokeShadowBlur</key>
<real>3</real>
<key>strokeShadowColor</key>
<string>0.000000:0.000000:0.000000:0.333000</string>
<key>strokeShadowHidden</key>
<true/>
<key>strokeShadowOffsetX</key>
<real>2</real>
<key>strokeShadowOffsetY</key>
<real>2</real>
<key>strokeType</key>
<integer>3</integer>
<key>textAlign</key>
<integer>0</integer>
<key>textAppearanceType</key>
<integer>0</integer>
<key>textDrawOnPath</key>
<false/>
<key>textShadowBlur</key>
<real>5</real>
<key>textShadowColor</key>
<string>0.000000:0.000000:0.000000:0.333000</string>
<key>textShadowHidden</key>
<true/>
<key>textShadowOffsetX</key>
<real>0.0</real>
<key>textShadowOffsetY</key>
<real>0.0</real>
<key>textVerticalAlign</key>
<integer>0</integer>
<key>title</key>
<string>Text</string>
<key>userSetTitle</key>
<false/>
</dict>
<dict>
<key>adjustmentRatioX</key>
<real>0.0</real>
<key>adjustmentRatioY</key>
<real>0.0</real>
<key>arrowTypeA</key>
<integer>0</integer>
<key>arrowTypeB</key>
<integer>0</integer>
<key>className</key>
<string>Line</string>
<key>constrainAspectRatio</key>
<false/>
<key>contentFilterSpecs</key>
<array/>
<key>curveRatio</key>
<real>0.0</real>
<key>fillAngle</key>
<integer>0</integer>
<key>fillColor</key>
<string>1.000000:1.000000:1.000000:1.000000</string>
<key>fillGradientElements</key>
<array/>
<key>fillShadowBlur</key>
<real>3</real>
<key>fillShadowColor</key>
<string>0.000000:0.000000:0.000000:0.333000</string>
<key>fillShadowHidden</key>
<false/>
<key>fillShadowOffsetX</key>
<real>2</real>
<key>fillShadowOffsetY</key>
<real>2</real>
<key>fillType</key>
<integer>0</integer>
<key>flipped</key>
<false/>
<key>frame</key>
<string>{{265, 221}, {-42, -1}}</string>
<key>hidden</key>
<false/>
<key>identifier</key>
<string>C5F4B4ED-3CE9-4702-8480-956CDA69EAC6</string>
<key>imageAnchorRatio</key>
<string>{0.5, 0.5}</string>
<key>imageType</key>
<integer>0</integer>
<key>locked</key>
<false/>
<key>opacity</key>
<real>1</real>
<key>pathType</key>
<integer>0</integer>
<key>rotationAngle</key>
<integer>0</integer>
<key>rotationHandleRadius</key>
<real>100</real>
<key>scaleImage</key>
<true/>
<key>stroke1Color</key>
<string></string>
<key>stroke1Enabled</key>
<false/>
<key>stroke2Color</key>
<string></string>
<key>stroke2Enabled</key>
<false/>
<key>strokeColor</key>
<string>0.000000:0.000000:0.000000:1.000000</string>
<key>strokeLineCap</key>
<integer>1</integer>
<key>strokeLineJoin</key>
<integer>1</integer>
<key>strokeLineWidth</key>
<real>1</real>
<key>strokeShadowBlur</key>
<real>3</real>
<key>strokeShadowColor</key>
<string>0.000000:0.000000:0.000000:0.333000</string>
<key>strokeShadowHidden</key>
<true/>
<key>strokeShadowOffsetX</key>
<real>2</real>
<key>strokeShadowOffsetY</key>
<real>2</real>
<key>strokeType</key>
<integer>0</integer>
<key>textAlign</key>
<integer>2</integer>
<key>textAppearanceType</key>
<integer>0</integer>
<key>textDrawOnPath</key>
<false/>
<key>textShadowBlur</key>
<real>5</real>
<key>textShadowColor</key>
<string>0.000000:0.000000:0.000000:0.333000</string>
<key>textShadowHidden</key>
<true/>
<key>textShadowOffsetX</key>
<real>0.0</real>
<key>textShadowOffsetY</key>
<real>0.0</real>
<key>textVerticalAlign</key>
<integer>0</integer>
<key>title</key>
<string>Line</string>
<key>userSetTitle</key>
<false/>
</dict>
<dict>
<key>adjustmentRatioX</key>
<real>0.0</real>
<key>adjustmentRatioY</key>
<real>0.0</real>
<key>arrowTypeA</key>
<integer>0</integer>
<key>arrowTypeB</key>
<integer>0</integer>
<key>className</key>
<string>Line</string>
<key>constrainAspectRatio</key>
<false/>
<key>contentFilterSpecs</key>
<array/>
<key>curveRatio</key>
<real>0.0</real>
<key>fillAngle</key>
<integer>0</integer>
<key>fillColor</key>
<string>1.000000:1.000000:1.000000:1.000000</string>
<key>fillGradientElements</key>
<array/>
<key>fillShadowBlur</key>
<real>3</real>
<key>fillShadowColor</key>
<string>0.000000:0.000000:0.000000:0.333000</string>
<key>fillShadowHidden</key>
<false/>
<key>fillShadowOffsetX</key>
<real>2</real>
<key>fillShadowOffsetY</key>
<real>2</real>
<key>fillType</key>
<integer>0</integer>
<key>flipped</key>
<false/>
<key>frame</key>
<string>{{365, 208}, {47, 2}}</string>
<key>hidden</key>
<false/>
<key>identifier</key>
<string>A46D32B5-8F0D-4FE1-BC60-03D4CFD9BEE3</string>
<key>imageAnchorRatio</key>
<string>{0.5, 0.5}</string>
<key>imageType</key>
<integer>0</integer>
<key>locked</key>
<false/>
<key>opacity</key>
<real>1</real>
<key>pathType</key>
<integer>0</integer>
<key>rotationAngle</key>
<integer>0</integer>
<key>rotationHandleRadius</key>
<real>100</real>
<key>scaleImage</key>
<true/>
<key>stroke1Color</key>
<string></string>
<key>stroke1Enabled</key>
<false/>
<key>stroke2Color</key>
<string></string>
<key>stroke2Enabled</key>
<false/>
<key>strokeColor</key>
<string>0.000000:0.000000:0.000000:1.000000</string>
<key>strokeLineCap</key>
<integer>1</integer>
<key>strokeLineJoin</key>
<integer>1</integer>
<key>strokeLineWidth</key>
<real>1</real>
<key>strokeShadowBlur</key>
<real>3</real>
<key>strokeShadowColor</key>
<string>0.000000:0.000000:0.000000:0.333000</string>
<key>strokeShadowHidden</key>
<true/>
<key>strokeShadowOffsetX</key>
<real>2</real>
<key>strokeShadowOffsetY</key>
<real>2</real>
<key>strokeType</key>
<integer>0</integer>
<key>textAlign</key>
<integer>2</integer>
<key>textAppearanceType</key>
<integer>0</integer>
<key>textDrawOnPath</key>
<false/>
<key>textShadowBlur</key>
<real>5</real>
<key>textShadowColor</key>
<string>0.000000:0.000000:0.000000:0.333000</string>
<key>textShadowHidden</key>
<true/>
<key>textShadowOffsetX</key>
<real>0.0</real>
<key>textShadowOffsetY</key>
<real>0.0</real>
<key>textVerticalAlign</key>
<integer>0</integer>
<key>title</key>
<string>Line</string>
<key>userSetTitle</key>
<false/>
</dict>
</array>
<key>className</key>
<string>Composition</string>
<key>connections</key>
<array>
<dict>
<key>pointerCorner</key>
<integer>0</integer>
<key>pointerIdentifier</key>
<string>A46D32B5-8F0D-4FE1-BC60-03D4CFD9BEE3</string>
<key>shapeEdge</key>
<integer>1</integer>
<key>shapeIdentifier</key>
<string>15A4C3E6-20E9-423C-84D2-2F0629685937</string>
<key>shapeRatio</key>
<real>0.5</real>
</dict>
<dict>
<key>pointerCorner</key>
<integer>0</integer>
<key>pointerIdentifier</key>
<string>C5F4B4ED-3CE9-4702-8480-956CDA69EAC6</string>
<key>shapeEdge</key>
<integer>0</integer>
<key>shapeIdentifier</key>
<string>15A4C3E6-20E9-423C-84D2-2F0629685937</string>
<key>shapeRatio</key>
<real>0.63</real>
</dict>
<dict>
<key>pointerCorner</key>
<integer>8</integer>
<key>pointerIdentifier</key>
<string>C5F4B4ED-3CE9-4702-8480-956CDA69EAC6</string>
<key>shapeEdge</key>
<integer>1</integer>
<key>shapeIdentifier</key>
<string>C684FE57-CCC3-472F-B2C8-8BF7EC0BF17B</string>
<key>shapeRatio</key>
<real>0.60231920383310922</real>
</dict>
</array>
<key>constrainAspectRatio</key>
<false/>
<key>contentFilterSpecs</key>
<array/>
<key>fillAngle</key>
<integer>0</integer>
<key>fillColor</key>
<string>1.000000:1.000000:1.000000:1.000000</string>
<key>fillGradientElements</key>
<array/>
<key>fillShadowBlur</key>
<real>3</real>
<key>fillShadowColor</key>
<string>0.000000:0.000000:0.000000:0.333000</string>
<key>fillShadowHidden</key>
<false/>
<key>fillShadowOffsetX</key>
<real>2</real>
<key>fillShadowOffsetY</key>
<real>2</real>
<key>fillType</key>
<integer>0</integer>
<key>frame</key>
<string>{{0, 0}, {640, 480}}</string>
<key>gridTolerance</key>
<real>10</real>
<key>hidden</key>
<false/>
<key>identifier</key>
<string>E70BEC35-7F30-4D6E-810C-543C2BFB0AFA</string>
<key>imageAnchorRatio</key>
<string>{0.5, 0.5}</string>
<key>imageType</key>
<integer>0</integer>
<key>locked</key>
<false/>
<key>metrics</key>
<dict>
<key>anchorCorner</key>
<integer>4</integer>
<key>anchorSize</key>
<string>{0, 0}</string>
<key>group</key>
<integer>1</integer>
<key>height</key>
<real>480</real>
<key>resolution</key>
<real>72</real>
<key>unitType</key>
<integer>0</integer>
<key>width</key>
<real>640</real>
</dict>
<key>opacity</key>
<real>1</real>
<key>rotationAngle</key>
<integer>0</integer>
<key>rotationHandleRadius</key>
<real>100</real>
<key>rulerOriginCorner</key>
<integer>0</integer>
<key>scaleImage</key>
<true/>
<key>scrollCenterPoint</key>
<string>{320, 240}</string>
<key>stroke1Color</key>
<string></string>
<key>stroke1Enabled</key>
<false/>
<key>stroke2Color</key>
<string></string>
<key>stroke2Enabled</key>
<false/>
<key>strokeColor</key>
<string>0.000000:0.000000:0.000000:1.000000</string>
<key>strokeLineCap</key>
<integer>1</integer>
<key>strokeLineJoin</key>
<integer>1</integer>
<key>strokeLineWidth</key>
<real>1</real>
<key>strokeShadowBlur</key>
<real>3</real>
<key>strokeShadowColor</key>
<string>0.000000:0.000000:0.000000:0.333000</string>
<key>strokeShadowHidden</key>
<true/>
<key>strokeShadowOffsetX</key>
<real>2</real>
<key>strokeShadowOffsetY</key>
<real>2</real>
<key>strokeType</key>
<integer>0</integer>
<key>textAlign</key>
<integer>1</integer>
<key>textAppearanceType</key>
<integer>0</integer>
<key>textDrawOnPath</key>
<false/>
<key>textShadowBlur</key>
<real>5</real>
<key>textShadowColor</key>
<string>0.000000:0.000000:0.000000:0.333000</string>
<key>textShadowHidden</key>
<true/>
<key>textShadowOffsetX</key>
<real>0.0</real>
<key>textShadowOffsetY</key>
<real>0.0</real>
<key>textVerticalAlign</key>
<integer>0</integer>
<key>title</key>
<string>Page 1</string>
<key>userGuides</key>
<array/>
<key>userSetTitle</key>
<false/>
<key>zoomScaleIndex</key>
<integer>0</integer>
</dict>
</array>
<key>image_ref_counts</key>
<dict/>
<key>version</key>
<integer>8</integer>
</dict>
</plist>

BIN
macip_diagram.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 232 KiB

BIN
macram-toot.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 276 KiB

BIN
macram.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 221 KiB

BIN
marchintosh.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

BIN
matrix2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 196 KiB

BIN
morpheus.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 MiB

BIN
mystic.HEIC Normal file

Binary file not shown.

BIN
nbp-brrq.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 255 KiB

File diff suppressed because it is too large Load diff

BIN
neithernet.HEIC Normal file

Binary file not shown.

BIN
networkbrowser.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 171 KiB

BIN
networkcp.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 539 KiB

BIN
osi1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 256 KiB

BIN
osi2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 240 KiB

BIN
osi3.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 203 KiB

BIN
phonenet.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

BIN
plus-back.HEIC Normal file

Binary file not shown.

BIN
postel.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 350 KiB

BIN
powerbookg3.HEIC Normal file

Binary file not shown.

867
presentation.md Normal file
View file

@ -0,0 +1,867 @@
theme: Zurich, 5
# The GlobalTalk Network
## /dev/world/2024, Melbourne
## Josh Deprez
---
# Who am I?
* Josh
* they/them
* Retro Mac nerd
* /dev/world fixture?
^ Hi, I'm Josh, some of you know me, etc
---
# A word from my sponsors
![inline](buildkite.svg)
^ Say nice things about the people I work with
---
## This is a talk about...
# Wi-Fi Cables
---
![inline](wificable.WEBP)
[.footer-style: #000000, text-scale(2.0)]
[.footer: https://www.reddit.com/r/networkingmemes/comments/12203r5/introducing\_the\_wifi\_cable/ ]
---
## This is a talk about...
# ~~Wi-Fi Cables~~ Ethernet
---
## This is a talk about...
# ~~Wi-Fi Cables~~ Ethernet _and_ AppleTalk
---
## This is a talk about...
# Precise language
---
# [fit] Networks
# [fit] Protocol
---
![inline](bolo.png)
^ The nerds wanted to play classic multiplayer Mac games, like Bolo,
---
![original](spectre.png)
^ Spectre,
---
![inline](copying-files.png)
^ and file sharing
---
![inline](GT_Logo.jpg)
A globe-spanning network of retro Macs
[.footer-style: #000000, text-scale(2.0)]
[.footer: Logo from http://marchintosh.com/globaltalk.html]
---
# GlobalTalk
[.build-lists: true]
* Started in early March 2024 (#MARCHintosh)
* Loose collection of retro Mac nerds over social media
* A Google spreadsheet
^ Paul Rickards, Dan @billgoats, Ron's Computer Vids
---
# [fit] 1983
---
# State of computer networking in 1983
- June: Ethernet standardised (IEEE 802.3)!
- Token Ring (IBM) in development
- Various proprietary systems
- Acoustic couplers and modems (300 bit/s)
- "Wireless network"? On what frequency?
^ Pre-standardised Ethernet systems were becoming more common
^ Prior to the Bell System breakup in 1984, customers were prohibited from connecting equipment not made or sold by Bell to the phone network
^ The US FCC released the ISM band for unlicensed use in 1985
---
![inline](why1.png)
[.footer-style: #000000, text-scale(2.0)]
[.footer: Sidhu G.S., et al (1990) _Inside AppleTalk, Second Edition_, Addison-Wesley]
---
![inline](why2.png)
[.footer-style: #000000, text-scale(2.0)]
[.footer: Sidhu G.S., et al (1990) _Inside AppleTalk, Second Edition_, Addison-Wesley]
---
![inline](macram.png)
[.footer-style: #000000, text-scale(2.0)]
[.footer: By @dschaub@mstdn.social]
---
![original](zilogscc.jpg)
[.footer-style: #000000, text-scale(2.0), alignment(right)]
[.footer: CC BY-SA 4.0 Mister rf<br>https://commons.wikimedia.org/wiki/File:ZILOG_Z0803006_SCC.jpg ]
---
[.quote: text-scale(0.6)]
> Burrell \[Smith\]'s third Macintosh design was done in June 1981. The main reason was that he fell in love with a communications chip called the SCC. **The SCC could support a built-in local area network,** making AppleTalk possible with no additional hardware, as well as providing nice buffered serial ports with interrupts and other hardware features.
-- Andy Hertzfeld (undated), _Five Different Macintoshes_, https://folklore.org/Five\_Different\_Macs.html
---
# [fit] 1984
---
[.build-lists: true]
1984: The Macintosh launches
- It included networking capability _built in_
- (mostly)
- (sort of)
- You needed some cables
---
![original](networking-cable-system-apple-237762-large.jpg)
[.footer-style: #000000, text-scale(2.0)]
[.footer: CC BY Museums Victoria https://collections.museumsvictoria.com.au/articles/1532]
---
## Hey!
# Those aren't ~~Wi-Fi~~ Ethernet cables!
![](networking-cable-system-apple-237762-large.jpg)
---
![](twistedpair.HEIC)
^ This is a Wi-Fi ca- sorry, Ethernet cable (twisted pair)
---
![](twistedpair.HEIC)
# Older Macs don't have Ethernet
# Many new Macs don't have Ethernet either
---
![inline](mac-back.jpg)
[.footer-style: #000000, text-scale(2.0)]
[.footer: Public domain - Aerialvendetta https://commons.wikimedia.org/wiki/File:AnOriginalMacintoshBackCaseUNALTEREDMACINTOSH.jpg]
---
![inline](mac-ports.jpeg)
[.footer-style: #000000, text-scale(2.0)]
[.footer: Public domain - Aerialvendetta https://commons.wikimedia.org/wiki/File:AnOriginalMacintoshBackCaseUNALTEREDMACINTOSH.jpg]
---
![inline](plus-back.HEIC)
---
![inline](classic-back.HEIC)
---
![inline](ltnetwork.png)
[.footer-style: #000000, text-scale(2.0)]
[.footer: Sidhu G.S., et al (1990) _Inside AppleTalk, Second Edition_, Addison-Wesley]
---
# The daisy-chain requires extra hardware
# You can't make 1 single network by chaining through both ports
---
![inline](phonenet.jpg)
[.footer-style: #000000, text-scale(2.0)]
[.footer: CC BY-SA 4.0 Bill Woodcock<br>https://commons.wikimedia.org/wiki/File:PhoneNET-LocalTalk.jpg]
^ Apple shipped their own "daisy chain" adapter and cable, but it wasn't long
^ before Farallon shipped the PhoneNET adapter, which used cheaper phone cabling
^ that was often installed in the walls of offices (for telephones)
---
![inline](ltmodule.png)
[.footer-style: #000000, text-scale(2.0)]
[.footer: Sidhu G.S., et al (1990) _Inside AppleTalk, Second Edition_, Addison-Wesley]
---
![](neithernet.HEIC)
^ I don't have a PhoneNET dongle handy to show you but I do have this, which is
^ almost the same thing
---
![](neithernet.HEIC)
# NeitherNet
[.build-lists: true]
- Sold by Joe's Computer Museum (jcm-1.com)
- Like Farallon PhoneNET, but...
- Uses commodity ~~Wi-Fi~~ Ethernet cables instead of rare "phone" cables
---
# Some Macs had Ethernet
---
![](quadra-back.JPG)
[.footer-style: #fff, text-scale(2.0)]
[.footer: CC BY-SA 2.5 Stephen Edmonds<br> https://commons.wikimedia.org/wiki/File:Quadra\_650\_rear.jpg ]
^ Here's the rear of a Quadra 650, a Mac from 1993. It claims to have Ethernet
^ built-in. Where's the RJ45 socket?
---
![](quadra-back-ethernet.jpeg)
[.footer-style: #fff, text-scale(2.0)]
[.footer: CC BY-SA 2.5 Stephen Edmonds<br> https://commons.wikimedia.org/wiki/File:Quadra\_650\_rear.jpg ]
---
![](dongleback.HEIC)
^ This is the Apple Ethernet dongle needed to use Ethernet if you have a Centris
^ or Quadra
---
![](morpheus.png)
[.footer-style: #fff, text-scale(2.0)]
[.footer: Still from _The Matrix_ (1999), Warner Bros.]
<!-- ---
![](buffcrying.png) -->
---
# The Blue Pill
A single LocalTalk network
* 230.4 Kbps
* Up to 254 nodes, up to 300m total length
* No routing, no routers!
* One anonymous zone
* One topology (bus)
---
![inline](ltnetwork.png)
[.footer-style: #000000, text-scale(2.0)]
[.footer: Sidhu G.S., et al (1990) _Inside AppleTalk, Second Edition_, Addison-Wesley]
---
# EtherTalk
Same thing, just with Ethernet
- Up to 10 Mbps!
- Supports more nodes
- More topologies
---
![inline](chooser-nozones.png)
---
# The Red Pill
AppleTalk internet
---
# An internet ≠ The Internet
# "Internet" is short for "internetwork"
^ "The Internet" is "an internet", but
^ "an internet" is not _necessarily_ "The Internet"
---
![original](postel.png)
[.footer-style: #000000, text-scale(2.0)]
[.footer: IEN 54]
---
# AppleTalk internets don't use the Internet Protocol
![](ipv4header.png)
[.footer-style: #000000, text-scale(2.0)]
[.footer: Postel, J.B. (1978) _Internetwork Protocol Specification Version 4_, IEN 54, ISI USC, California]
---
# The Red Pill
AppleTalk internet
* Up to ~16 million nodes
* AppleTalk _internet routers_
* 254 zones per (local) network
^ An AppleTalk internet is what you could think of as "routed AppleTalk"
---
![original](atalkinternet.png)
---
![inline](chooser-zones.png)
---
![inline](osi3.png)
[.footer-style: #000000, text-scale(2.0)]
[.footer: Sidhu G.S., et al (1990) _Inside AppleTalk, Second Edition_, Addison-Wesley]
---
# AppleTalk
Originally the name for both the physical cabling
(now LocalTalk)
_and_ the protocol stack, but later on it referred to the protocol stack only.
---
# AppleTalk
- LocalTalk: AppleTalk using Modem/Printer ports
- EtherTalk: AppleTalk over Ethernet
- TokenTalk: AppleTalk over Token Ring
---
![inline](osi2.png)
[.footer-style: #000000, text-scale(2.0)]
[.footer: Sidhu G.S., et al (1990) _Inside AppleTalk, Second Edition_, Addison-Wesley]
---
![inline](osi1.png)
[.footer-style: #000000, text-scale(2.0)]
[.footer: Sidhu G.S., et al (1990) _Inside AppleTalk, Second Edition_, Addison-Wesley]
---
# What happened to AppleTalk?
---
![](powerbookg3.HEIC)
[.footer-style: text-scale(2.0)]
[.footer: Macintosh PowerBook G3, 1998]
---
![](imac.HEIC)
[.footer-style: text-scale(2.0)]
[.footer: iMac, 1998]
^ In one fell swoop Apple removed many things from the commodity computer: floppy drive, SCSI port, mini-DIN serial ports, Apple Desktop Bus.
---
# What happened to AppleTalk?
[.build-lists: true]
- Apple added a TCP/IP stack to the Mac
- Apple made AFP sharing function over TCP/IP
- iMac (1998) and onwards had no mini-DIN ports
- AppleTalk removed in Mac OS X 10.6 Snow Leopard
- AFP sharing removed in macOS 11 Big Sur, incompatible with APFS
^ iMac famously shipped with USB and perhaps more famously _didn't_ ship with a floppy disk drive
---
[.column]
![inline](bolo.png)
![inline](spectre.png)
[.column]
![inline](copying-files.png)
---
# How do we get AppleTalk over The Internet?
# The Internet doesn't route AppleTalk packets
### (to be fair AppleTalk doesn't route IP packets)
---
![inline](matrix2.png)
[.footer-style: #000000, text-scale(2.0)]
[.footer: CC BY NC 2.5 https://xkcd.com/566/]
---
# [fit] 1985
---
# Stanford Ethernet AppleTalk Gateway (SEAGATE)
# which later became MacIP
---
![inline](macip_diagram.png)
---
![inline](ddp-vs-ip.png)
---
# [fit] VPN
---
# [fit] Tunneling
# also known as Encapsulation
---
[.column]
# _Tunneling_
... is to _networking_, as
--
"Just add another layer of tunnelling/encapsulation!"
[.column]
# _Indirection_
... is to _programming_
--
"Just add more lookup tables!"
---
[.column]
![inline](networkcp.png)
[.column]
![inline](atcpuser.png)
[.footer-style: #000000, text-scale(2.0)]
[.footer: Rob Braun (2013), _AppleTalk over IP_, http://www.synack.net/~bbraun/avpn.html]
---
![inline](appletalkoverip_diagram.png)
---
![inline](atalkoverip-sad.png)
---
# [fit] Apple
# [fit] Internet
# [fit] Router
---
[.column]
![inline](air-front.jpg)
[.column]
![inline](air-back.jpg)
[.footer-style: #000000, text-scale(2.0)]
[.footer: Apple Computer (1993), _Apple Internet Router_]
---
# Apple Internet Router _does_ use Internet Protocol (and AppleTalk)
# Apple Internet Router does _not_ let Macs access The Internet
---
![inline](air-diagram.png)
---
![inline](gtsetup1.png)
[.footer-style: #000000, text-scale(2.0)]
[.footer: Rickards, P. (2024) _Pushing AppleTalk Across the Internet_, https://biosrhythm.com/?p=2767 ]
---
# Which Mac supports System 7.1?
- Mac Plus: no Ethernet
- Mac Classic: no Ethernet
- **"Mystic" Colour Classic: Ethernet and 68040 CPU!**
- PowerBook G3: has Ethernet, but too new
- Power Mac G4 Cube: has Ethernet, but too new
---
![](mystic.HEIC)
---
# I promptly bricked it
![inline](whoops.png)
---
# No System 7.1 for Mystic
- Was running Mac OS 8.1
- ✅ 680x0 Macs can only boot from HFS format
- ✅ Internal hard disk is 140 GB
- ❌ Earlier Mac OS only supported disks up to 4 GB
- 😱 This includes Disk Tools disks
---
# [fit] QEMU
## I guess!?
---
![inline](air.png)
---
![inline](air-router-ports.png)
---
![inline](air-networks.png)
---
![inline](air-port-stats.png)
---
![inline](air-stats.png)
---
# Recommendation for devs
Software should be _observable_
Find a way to diagram the internal state of your app!
---
![inline](is-it-safe.png)
[.footer-style: #000000, text-scale(2.0)]
[.footer: Strosnider, J., McAdams, R., Steve Mac84 (2024) http://marchintosh.com/globaltalk.html]
---
# Is Apple Internet Router secure?
# Probably not
---
# Why am I not totally pwnd right now?
### (Obscurity)
---
# So I decided to write my own "AIR" in Go
# jrouter
^ It would let me avoid running a real vintage Mac as a router, and turn off QEMU running under sudo
^ We do these things not because they are easy, but because we thought they would be easy... actually, because it might make great talk material
---
![inline](writing-a-talk.png)
---
![inline](europlus.png)
---
![inline](tashtari.png)
[.footer-style: #000000, text-scale(2.0)]
[.footer: https://tinkerdifferent.com/threads/globaltalk-global-appletalk-network-for-marchintosh-2024-and-beyond.3392/page-2#post-29150 ]
---
![](tashtalk-hat.HEIC)
---
# jrouter
- Uses libpcap for raw Ethernet access
- Acts like an AppleTalk router
- Connects to Apple Internet Routers
- Works! (barely)
^ So I had to figure out how Apple Internet Router worked
---
Where's the diagram? 😡
![inline](rfc1504.png)
[.footer-style: #000000, text-scale(2.0)]
[.footer: Oppenheimer, A.B. (1993) _Appletalk Update-Based Routing Protocol: Enhanced Appletalk Routing_ https://datatracker.ietf.org/doc/html/rfc1504 ]
^ There's an RFC for that! But no diagrams
---
Sigh 😔
![inline](rfc1504-why.png)
[.footer-style: #000000, text-scale(2.0)]
[.footer: Oppenheimer, A.B. (1993) _Appletalk Update-Based Routing Protocol: Enhanced Appletalk Routing_ https://datatracker.ietf.org/doc/html/rfc1504 ]
---
![inline](foundit.png)
---
![](aurp.png)
[.footer-style: #000000, text-scale(2.0)]
[.footer: Apple Computer (1993)]
---
![inline](aurp-packet-layouts.png)
[.footer-style: #000000, text-scale(2.0)]
[.footer: Apple Computer (1993) _AppleTalk Update-based Routing Protocol: Enhanced AppleTalk Routing_]
---
# AURP
It's like AppleTalk routing but with...
* AppleTalk tunnelled over UDP/IP (port 387)
* ...between Apple Internet Routers...
* ...that share routing data...
* ...using a new protocol that replaces RTMP and ZIP
---
# [fit] Data sender ≠ packet sender
# [fit] Data receiver ≠ packet receiver
^ This is the one thing that, once clarified, makes the AURP spec make sense. "Data sender" and "data receiver" are _roles_ in a _connection_. The "data" is routing information. So one side needs to _request_ data from the other, which then responds with the requested data.
---
# AURP was the easy part
^ Writing an AppleTalk router was harder
---
![inline](aurp-pie.png)
[.footer-style: #000000, text-scale(2.0)]
[.footer: Apple Computer (1993) _AppleTalk Update-based Routing Protocol: Enhanced AppleTalk Routing_]
^ After getting my head around some of the language, it was clear that the authors of the AURP document were trying to be as helpful to other implementers as possible. This pie chart from the appendix is one example.
---
[.column]
![inline](aurp-state1.png)
[.column]
![inline](aurp-state2.png)
[.footer-style: #000000, text-scale(2.0)]
[.footer: Apple Computer (1993) _AppleTalk Update-based Routing Protocol: Enhanced AppleTalk Routing_]
^ These state diagrams are another. They may look complicated, but there are actually only five actual states in each, which boil down to some retry loops.
---
[.column]
![inline](inside-at.jpg)
[.column]
![inline](protocol-stack.png)
^ Inside AppleTalk, on the other hand, had to contend with documenting a protocol stack that was old and had grown since its original conception. The discussion of each protocol can't be done in a perfectly linear way, and to implement any kind of AppleTalk router, you need to implement at least 7 of the 17 boxes shown here.
---
![inline](cksum.png)
[.footer-style: #000000, text-scale(2.0)]
[.footer: Sidhu G.S., et al (1990) _Inside AppleTalk, Second Edition_, Addison-Wesley]
^ Inside Appletalk also leans quite a bit on pseudocode for explanations, which gets a bit dull.
---
![inline](nbp-brrq.png)
^ This packet translation needed for NBP requests is documented in the chapter on ZIP, for instance.
---
![inline](gtchat1.png)
[.footer-style: #000000, text-scale(2.0)]
[.footer: @kalleboo@bitbang.social (2024) _#GlobalTalk Chat_ version 0.2.3 (alpha)]
---
![inline](gtchat2.png)
[.footer-style: #000000, text-scale(2.0)]
[.footer: @kalleboo@bitbang.social (2024) _#GlobalTalk Chat_ version 0.2.3 (alpha)]
---
![inline](aww.png)
[.footer-style: #000000, text-scale(2.0)]
[.footer: @kalleboo@bitbang.social (2024) _AppleWideWeb_ version 1.2.1]
---
# [fit] Demo time
---
![inline](demo-arch.png)
^ "Just add more tunnelling!"
---
# [fit] Thanks!
Fediverse: @DrJosh9000@cloudisland.nz
jrouter: gitea.drjosh.dev/josh/jrouter
GitHub: github.com/DrJosh9000
---
![inline](atalk-dos.png)
^ Apple ported the AppleTalk stack to DOS...

BIN
protocol-stack.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 236 KiB

BIN
quadra-back-ethernet.jpeg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 143 KiB

BIN
quadra-back.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 141 KiB

BIN
rfc1504-why.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

BIN
rfc1504.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 130 KiB

BIN
spectre.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

BIN
tashtalk-hat.HEIC Normal file

Binary file not shown.

BIN
tashtari.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 98 KiB

BIN
twistedpair.HEIC Normal file

Binary file not shown.

BIN
whoops.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 MiB

BIN
why1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 240 KiB

BIN
why2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 339 KiB

BIN
wificable.WEBP Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

BIN
writing-a-talk.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 258 KiB

BIN
zilogscc.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 563 KiB