From 836f569870096bd94fce52c4ad02b83bc9c43447 Mon Sep 17 00:00:00 2001
From: Luan Nguyen
Android Wear supports multiple wearables connected to a handheld device. For example, when the +user saves a note on a handheld, it automatically appears on both of the user's Wear devices. To +synchronize data between devices, Google’s servers host a cloud node in the network of devices. The +system synchronizes data to directly connected devices, the cloud node, and to wearable devices +connected to the cloud node via Wi-Fi.
+ +
+Figure 1. A sample network of nodes with +handheld and wearable devices.
+ +Multiple wearable devices can be connected to a user’s handheld device. Each connected device in +the network is considered a node. With multiple connected devices, you must consider which +nodes receive the messages. For example, In a voice transcription app that receives voice data on +the wearable device, you should send the message to a node with the processing power and battery +capacity to handle the request, such as a handheld device.
-The following example shows how to send a message that indicates to the other -side of the connection to start an activity. -This call is synchronous and blocks processing until the message is received or until the request -times out:
- -Note: Read more about asynchronous and synchronous calls -to Google Play services and when to use each in -Communicate with Google Play Services. +
Note: +With versions of Google Play services prior to 7.3.0, only one wearable device could be connected to +a handheld device at a time. You may need to update your existing code to take the multiple +connected nodes feature into consideration. If you don’t implement the changes, your messages may +not get delivered to intended devices.
+A wearable app can provide functionality for users such as voice +transcription. Users can speak into their wearable device's microphone, and have a transcription +saved to a note. Since a wearable device typically does not have the processing power and battery +capacity required to handle the voice transcription activity, the app should offload this work to a +more capable, connected device.
+ +The following sections show you how to advertise device nodes that can process activity +requests, discover the nodes capable of fulfilling a requested need, and send messages to those +nodes. +
+ +To launch an activity on a handheld device from a wearable device, use the
+MessageApi
+class to send the request. Since multiple wearables can be connected to the handheld device, the
+wearable app needs to determine that a connected node is capable of launching the activity. In your
+handheld app, advertise that the node it runs on provides specific capabilities.
To advertise the capabilities of your handheld app:
+ +res/values/ directory of your project and
+ name it wear.xml.
+ android_wear_capabilities to wear.xml.
+ Note: +Capabilities are custom strings that you define and must be unique within your app. +
+ +The following example shows how to add a capability named voice_transcription to
+wear.xml:
-GoogleApiClient mGoogleApiClient; -public static final String START_ACTIVITY_PATH = "/start/MainActivity"; +<resources> + <string-array name="android_wear_capabilities"> + <item>voice_transcription</item> + </string-array> +</resources> ++ +
Initially, you can detect the capable nodes by calling the CapabilityApi.getCapability()
+method.
+The following example shows how to manually retrieve the results of reachable nodes with the
+voice_transcription capability:
+private static final String
+ VOICE_TRANSCRIPTION_CAPABILITY_NAME = "voice_transcription";
+
+private GoogleApiClient mGoogleApiClient;
+
...
-private void sendStartActivityMessage(String nodeId) {
- Wearable.MessageApi.sendMessage(
- mGoogleApiClient, nodeId, START_ACTIVITY_PATH, new byte[0]).setResultCallback(
- new ResultCallback<SendMessageResult>() {
- @Override
- public void onResult(SendMessageResult sendMessageResult) {
- if (!sendMessageResult.getStatus().isSuccess()) {
- Log.e(TAG, "Failed to send message with status code: "
- + sendMessageResult.getStatus().getStatusCode());
- }
- }
- }
- );
+private void setupVoiceTranscription() {
+ CapabilityApi.GetCapabilityResult result =
+ Wearable.CapabilityApi.getCapability(
+ mGoogleApiClient, VOICE_TRANSCRIPTION_CAPABILITY_NAME,
+ CapabilityApi.FILTER_REACHABLE).await();
+
+ updateTranscriptionCapability(result.getCapability());
}
--Here's a simple way to get a list of connected nodes that you can potentially -send messages to:
+To detect capable nodes as they connect to the wearable device, register a CapabilityApi.CapabilityListener()
+instance to your GoogleApiClient.
+The following example shows how to register the listener and retrieve the results of reachable nodes
+with the voice_transcription capability:
+private void setupVoiceTranscription() {
+ ...
+
+ CapabilityApi.CapabilityListener capabilityListener =
+ new CapabilityApi.CapabilityListener() {
+ @Override
+ public void onCapabilityChanged(CapabilityInfo capabilityInfo) {
+ updateTranscriptionCapability(capabilityInfo);
+ }
+ };
+
+ Wearable.CapabilityApi.addCapabilityListener(
+ mGoogleApiClient,
+ capabilityListener,
+ VOICE_TRANSCRIPTION_CAPABILITY_NAME);
+}
+
+
+After detecting the capable nodes, determine where to send the message. You should pick a node
+that is in close proximity to your wearable device to
+minimize message routing through multiple nodes. A nearby node is defined as one that is directly
+connected to the device. To determine if a node is nearby, call the Node.isNearby()
+method.
The following example shows how you might determine the best node to use:
+ +
+private String transcriptionNodeId = null;
+
+private void updateTranscriptionCapability(CapabilityInfo capabilityInfo) {
+ Set<Node> connectedNodes = capabilityInfo.getNodes();
+
+ transcriptionNodeId = pickBestNodeId(connectedNodes);
+}
+
+private String pickBestNodeId(Set<Node> nodes) {
+ String bestNodeId = null;
+ // Find a nearby node or pick one arbitrarily
+ for (Node node : nodes) {
+ if (node.isNearby()) {
+ return node.getId();
+ }
+ bestNodeId = node.getId();
+ }
+ return bestNodeId;
+}
+
+
+Once you’ve identified the best node to use, send the message using the
+MessageApi
+class.
The following example shows how to send a message to the transcription-capable node from a +wearable device. Verify that the node is available before you attempt to send the message. This call +is synchronous and blocks processing until the message is received or until the request times out. +
+ +
+
+public static final String VOICE_TRANSCRIPTION_MESSAGE_PATH = "/voice_transcription";
+
+private void requestTranscription(byte[] voiceData) {
+ if (transcriptionNodeId != null) {
+ Wearable.MessageApi.sendMessage(googleApiClient, transcriptionNodeId,
+ VOICE_TRANSCRIPTION_MESSAGE_PATH, voiceData).setResultCallback(
+ new ResultCallback() {
+ @Override
+ public void onResult(SendMessageResult sendMessageResult) {
+ if (!sendMessageResult.getStatus().isSuccess()) {
+ // Failed to send message
+ }
+ }
+ }
+ );
+ } else {
+ // Unable to retrieve node with transcription capability
+ }
+}
+
+
+Note: To learn more about asynchronous and synchronous calls +to Google Play services and when to use each, see +Communicate with Google Play +Services. +
+ +You can also broadcast messages to all connected nodes. To retrieve all of the +connected nodes that you can send messages to, implement the following code:
private Collection<String> getNodes() {
@@ -78,22 +227,24 @@ private Collection<String> getNodes() {
Receive a Message
-To be notified of received messages, you implement the
+To be notified of received messages, implement the
-MessageListener interface to provide a listener for message events. Then you register your
-listener with the
+MessageListener interface to provide a listener for message events. Then,
+register the listener with the
-MessageApi.addListener() method. This example shows how you might implement the listener
-to check the START_ACTIVITY_PATH that the previous example used to send the message.
-If this condition is true, a specific activity is started.
+MessageApi.addListener() method. This example shows how you might implement the
+listener to check the VOICE_TRANSCRIPTION_MESSAGE_PATH. If this condition is
+true, start an activity to process the voice
+data.
@Override
public void onMessageReceived(MessageEvent messageEvent) {
- if (messageEvent.getPath().equals(START_ACTIVITY_PATH)) {
+ if (messageEvent.getPath().equals(VOICE_TRANSCRIPTION_MESSAGE_PATH)) {
Intent startIntent = new Intent(this, MainActivity.class);
startIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+ startIntent.putExtra("VOICE_DATA", messageEvent.getData());
startActivity(startIntent);
}
}
diff --git a/docs/html/wear/images/wear_cloud_node.png b/docs/html/wear/images/wear_cloud_node.png
new file mode 100644
index 0000000000000000000000000000000000000000..602e2476521b3b863bbc2cf48ed48119e337b3ad
GIT binary patch
literal 13794
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
al(uV)qt}^&8u;I>CyKIaG8N!A!T%34yvy+b
literal 0
HcmV?d00001
diff --git a/docs/image_sources/training/wear/wear_cloud_node.graffle b/docs/image_sources/training/wear/wear_cloud_node.graffle
new file mode 100644
index 0000000000000..8a3e4b5ff8c90
--- /dev/null
+++ b/docs/image_sources/training/wear/wear_cloud_node.graffle
@@ -0,0 +1,4333 @@
+
+
+
+
+ ApplicationVersion
+
+ com.omnigroup.OmniGraffle6
+ 156.11.0.206384
+
+ CreationDate
+ 2015-04-10 16:36:28 +0000
+ Creator
+ Luan Nguyen
+ FileType
+ flat
+ GraphDocumentVersion
+ 11
+ GuidesLocked
+ NO
+ GuidesVisible
+ YES
+ ImageCounter
+ 3
+ LinksVisible
+ NO
+ MagnetsVisible
+ NO
+ MasterSheets
+
+ ModificationDate
+ 2015-04-15 20:46:45 +0000
+ Modifier
+ Luan Nguyen
+ NotesVisible
+ NO
+ OriginVisible
+ NO
+ PageBreaks
+ NO
+ PrintInfo
+
+ NSBottomMargin
+
+ float
+ 40
+
+ NSLeftMargin
+
+ float
+ 18
+
+ NSPaperSize
+
+ size
+ {612, 792}
+
+ NSRightMargin
+
+ float
+ 18
+
+ NSTopMargin
+
+ float
+ 18
+
+
+ ReadOnly
+ NO
+ Sheets
+
+
+ ActiveLayerIndex
+ 0
+ AutoAdjust
+
+ BackgroundGraphic
+
+ Bounds
+ {{0, 0}, {330, 375}}
+ Class
+ SolidGraphic
+ ID
+ 2
+ Style
+
+ stroke
+
+ Draws
+ NO
+
+
+
+ BaseZoom
+ 0
+ CanvasOrigin
+ {0, 0}
+ CanvasSize
+ {330, 375}
+ ColumnAlign
+ 1
+ ColumnSpacing
+ 36
+ DisplayScale
+ 1.0 pt = 1.0 px
+ GraphicsList
+
+
+ Bounds
+ {{66.75, 134.93730967886808}, {109.5, 28.169700000000034}}
+ Class
+ ShapedGraphic
+ FontInfo
+
+ Color
+
+ b
+ 0
+ g
+ 0
+ r
+ 0
+
+ Font
+ Roboto-BoldCondensed
+ Size
+ 10
+
+ ID
+ 1976
+ Layer
+ 0
+ Line
+
+ ID
+ 1893
+ Position
+ 0.61324973965300955
+ RotationType
+ 0
+
+ Magnets
+
+ {1, 1}
+ {1, -1}
+ {-1, -1}
+ {-1, 1}
+ {0, 1}
+ {0, -1}
+ {1, 0}
+ {-1, 0}
+ {-0.5, -0.233518}
+ {-0.49144199999999999, 0.26006299999999999}
+ {0.50711799999999996, -0.22408600000000001}
+ {0.50711799999999996, 0.267179}
+ {-0.27431, -0.474028}
+ {0.27977999999999997, -0.47847800000000001}
+ {0.29393799999999998, 0.54304399999999997}
+ {-0.28623199999999999, 0.55380399999999996}
+
+ Shape
+ Rectangle
+ Style
+
+ fill
+
+ Color
+
+ b
+ 0.938075
+ g
+ 0.938269
+ r
+ 0.938154
+
+
+ shadow
+
+ Color
+
+ a
+ 0.35
+ b
+ 0.328823
+ g
+ 0.328823
+ r
+ 0.328823
+
+ Fuzziness
+ 1.5349206924438477
+ ShadowVector
+ {0, 1}
+
+ stroke
+
+ Color
+
+ b
+ 0.472997
+ g
+ 0.473094
+ r
+ 0.473036
+
+ CornerRadius
+ 2
+ Draws
+ NO
+
+
+ Text
+
+ Text
+ {\rtf1\ansi\ansicpg1252\cocoartf1265\cocoasubrtf210
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc
+
+\f0\b\fs24 \cf0 Mobile data/Wi-Fi}
+ VerticalPad
+ 0
+
+
+
+ Bounds
+ {{234, 92.968750000000014}, {49, 28.169700000000034}}
+ Class
+ ShapedGraphic
+ FontInfo
+
+ Color
+
+ b
+ 0
+ g
+ 0
+ r
+ 0
+
+ Font
+ Roboto-BoldCondensed
+ Size
+ 10
+
+ ID
+ 1975
+ Layer
+ 0
+ Magnets
+
+ {1, 1}
+ {1, -1}
+ {-1, -1}
+ {-1, 1}
+ {0, 1}
+ {0, -1}
+ {1, 0}
+ {-1, 0}
+ {-0.5, -0.233518}
+ {-0.49144199999999999, 0.26006299999999999}
+ {0.50711799999999996, -0.22408600000000001}
+ {0.50711799999999996, 0.267179}
+ {-0.27431, -0.474028}
+ {0.27977999999999997, -0.47847800000000001}
+ {0.29393799999999998, 0.54304399999999997}
+ {-0.28623199999999999, 0.55380399999999996}
+
+ Shape
+ Rectangle
+ Style
+
+ fill
+
+ Color
+
+ b
+ 0.938075
+ g
+ 0.938269
+ r
+ 0.938154
+
+
+ shadow
+
+ Color
+
+ a
+ 0.35
+ b
+ 0.328823
+ g
+ 0.328823
+ r
+ 0.328823
+
+ Fuzziness
+ 1.5349206924438477
+ ShadowVector
+ {0, 1}
+
+ stroke
+
+ Color
+
+ b
+ 0.472997
+ g
+ 0.473094
+ r
+ 0.473036
+
+ CornerRadius
+ 2
+ Draws
+ NO
+
+
+ Text
+
+ Text
+ {\rtf1\ansi\ansicpg1252\cocoartf1265\cocoasubrtf210
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc
+
+\f0\b\fs24 \cf0 Wi-Fi}
+ VerticalPad
+ 0
+
+
+
+ Bounds
+ {{85.5, 252.41406223966777}, {72, 28.169700000000034}}
+ Class
+ ShapedGraphic
+ FontInfo
+
+ Color
+
+ b
+ 0
+ g
+ 0
+ r
+ 0
+
+ Font
+ Roboto-BoldCondensed
+ Size
+ 10
+
+ ID
+ 155
+ Layer
+ 0
+ Line
+
+ ID
+ 1895
+ Position
+ 0.48590017216177767
+ RotationType
+ 0
+
+ Magnets
+
+ {1, 1}
+ {1, -1}
+ {-1, -1}
+ {-1, 1}
+ {0, 1}
+ {0, -1}
+ {1, 0}
+ {-1, 0}
+ {-0.5, -0.233518}
+ {-0.49144199999999999, 0.26006299999999999}
+ {0.50711799999999996, -0.22408600000000001}
+ {0.50711799999999996, 0.267179}
+ {-0.27431, -0.474028}
+ {0.27977999999999997, -0.47847800000000001}
+ {0.29393799999999998, 0.54304399999999997}
+ {-0.28623199999999999, 0.55380399999999996}
+
+ Shape
+ Rectangle
+ Style
+
+ fill
+
+ Color
+
+ b
+ 0.938075
+ g
+ 0.938269
+ r
+ 0.938154
+
+
+ shadow
+
+ Color
+
+ a
+ 0.35
+ b
+ 0.328823
+ g
+ 0.328823
+ r
+ 0.328823
+
+ Fuzziness
+ 1.5349206924438477
+ ShadowVector
+ {0, 1}
+
+ stroke
+
+ Color
+
+ b
+ 0.472997
+ g
+ 0.473094
+ r
+ 0.473036
+
+ CornerRadius
+ 2
+ Draws
+ NO
+
+
+ Text
+
+ Text
+ {\rtf1\ansi\ansicpg1252\cocoartf1265\cocoasubrtf210
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc
+
+\f0\b\fs24 \cf0 Bluetooth}
+ VerticalPad
+ 0
+
+
+
+ Class
+ Group
+ Graphics
+
+
+ Bounds
+ {{42.947532278010186, 15.40233227120396}, {169.1049769052272, 11.625478289816014}}
+ Class
+ ShapedGraphic
+ FontInfo
+
+ Color
+
+ a
+ 0.65
+ b
+ 0
+ g
+ 0
+ r
+ 0
+
+ Font
+ Roboto-Condensed
+ Size
+ 12
+
+ ID
+ 1972
+ Shape
+ Rectangle
+ Style
+
+ fill
+
+ Draws
+ NO
+
+ shadow
+
+ Draws
+ NO
+
+ stroke
+
+ Draws
+ NO
+
+
+ Text
+
+ Pad
+ 2
+ RTFD
+
+ BAtzdHJlYW10
+ eXBlZIHoA4QB
+ QISEhBJOU0F0
+ dHJpYnV0ZWRT
+ dHJpbmcAhIQI
+ TlNPYmplY3QA
+ hZKEhIQITlNT
+ dHJpbmcBlIQB
+ Kw5Hb29nbGUg
+ U2VydmVyc4aE
+ AmlJAQ6ShISE
+ DE5TRGljdGlv
+ bmFyeQCUhAFp
+ A5KElpYHTlND
+ b2xvcoaShISE
+ B05TQ29sb3IA
+ lIQBYwOEAmZm
+ AINmZiY/hpKE
+ lpYQTlNQYXJh
+ Z3JhcGhTdHls
+ ZYaShISEEE5T
+ UGFyYWdyYXBo
+ U3R5bGUAlIQE
+ Q0NAUwIAhISE
+ B05TQXJyYXkA
+ lJkMkoSEhAlO
+ U1RleHRUYWIA
+ lIQCQ2YAHIaS
+ hKKhADiGkoSi
+ oQBUhpKEoqEA
+ cIaShKKhAIGM
+ AIaShKKhAIGo
+ AIaShKKhAIHE
+ AIaShKKhAIHg
+ AIaShKKhAIH8
+ AIaShKKhAIEY
+ AYaShKKhAIE0
+ AYaShKKhAIFQ
+ AYaGAIaShJaW
+ Bk5TRm9udIaS
+ hISEBk5TRm9u
+ dB6UmRyEBVsy
+ OGNdBgAAABQA
+ AAD//kgAZQBs
+ AHYAZQB0AGkA
+ YwBhAIQBZgyb
+ AJsBmwCbAIaG
+ hg==
+
+ Text
+ {\rtf1\ansi\ansicpg1252\cocoartf1265\cocoasubrtf210
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;\red0\green0\blue0;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
+
+\f0\fs24 \cf2 Google Servers}
+ alpha
+
+
+ 0
+ 14
+ 0.64999997615814209
+
+
+
+
+
+ Bounds
+ {{27.500000000000043, 31.027813195885251}, {199.99999999999991, 96.972186804114742}}
+ Class
+ ShapedGraphic
+ FontInfo
+
+ Color
+
+ a
+ 0.65
+ w
+ 0
+
+ Font
+ Roboto-BoldCondensed
+ Size
+ 12
+
+ ID
+ 1973
+ Magnets
+
+ {0, 1}
+ {0, -1}
+ {1, 0}
+ {-1, 0}
+
+ Shape
+ Rectangle
+ Style
+
+ fill
+
+ Draws
+ NO
+
+ shadow
+
+ Draws
+ NO
+
+ stroke
+
+ Color
+
+ b
+ 0.578326
+ g
+ 0.578615
+ r
+ 0.578453
+
+ CornerRadius
+ 5
+ Pattern
+ 1
+
+
+ Text
+
+ VerticalPad
+ 10
+
+ TextPlacement
+ 0
+
+
+ ID
+ 1971
+ Layer
+ 0
+
+
+ Class
+ LineGraphic
+ FontInfo
+
+ Color
+
+ w
+ 0
+
+ Font
+ Roboto-BoldCondensed
+ Size
+ 12
+
+ Head
+
+ ID
+ 251
+
+ ID
+ 1895
+ Layer
+ 0
+ OrthogonalBarAutomatic
+
+ OrthogonalBarPoint
+ {293, 271.5}
+ OrthogonalBarPosition
+ -1
+ Points
+
+ {121.5, 232}
+ {121.5, 303}
+
+ Style
+
+ stroke
+
+ Color
+
+ a
+ 0.7
+ b
+ 0
+ g
+ 0
+ r
+ 0
+
+ CornerRadius
+ 4
+ HeadArrow
+ FilledArrow
+ Legacy
+
+ LineType
+ 2
+ TailArrow
+ FilledArrow
+
+
+ Tail
+
+ ID
+ 250
+
+
+
+ Class
+ LineGraphic
+ FontInfo
+
+ Color
+
+ w
+ 0
+
+ Font
+ Roboto-BoldCondensed
+ Size
+ 12
+
+ Head
+
+ ID
+ 252
+
+ ID
+ 198
+ Layer
+ 0
+ OrthogonalBarAutomatic
+
+ OrthogonalBarPoint
+ {0, 0}
+ OrthogonalBarPosition
+ -1
+ Points
+
+ {180.49999999999997, 71.915149999999997}
+ {257.5, 104.58485}
+ {257.5, 181.83030000000002}
+
+ Style
+
+ stroke
+
+ Color
+
+ a
+ 0.7
+ b
+ 0
+ g
+ 0
+ r
+ 0
+
+ CornerRadius
+ 4
+ HeadArrow
+ FilledArrow
+ Legacy
+
+ LineType
+ 2
+ TailArrow
+ FilledArrow
+
+
+ Tail
+
+ ID
+ 158
+ Info
+ 7
+
+
+
+ Class
+ LineGraphic
+ FontInfo
+
+ Color
+
+ w
+ 0
+
+ Font
+ Roboto-BoldCondensed
+ Size
+ 12
+
+ Head
+
+ ID
+ 250
+
+ ID
+ 1893
+ Layer
+ 0
+ OrthogonalBarAutomatic
+
+ OrthogonalBarPoint
+ {293, 271.5}
+ OrthogonalBarPosition
+ -1
+ Points
+
+ {121.5, 97}
+ {121.5, 181.83029999999999}
+
+ Style
+
+ stroke
+
+ Color
+
+ a
+ 0.7
+ b
+ 0
+ g
+ 0
+ r
+ 0
+
+ CornerRadius
+ 4
+ HeadArrow
+ FilledArrow
+ Legacy
+
+ LineType
+ 2
+ TailArrow
+ FilledArrow
+
+
+ Tail
+
+ ID
+ 158
+
+
+
+ Bounds
+ {{212.5, 181.83029999999999}, {90, 50.169699999999999}}
+ Class
+ ShapedGraphic
+ FontInfo
+
+ Color
+
+ b
+ 0
+ g
+ 0
+ r
+ 0
+
+ Font
+ Roboto-BoldCondensed
+ Size
+ 10
+
+ ID
+ 252
+ Layer
+ 0
+ Magnets
+
+ {1, 1}
+ {1, -1}
+ {-1, -1}
+ {-1, 1}
+ {0, 1}
+ {0, -1}
+ {1, 0}
+ {-1, 0}
+ {-0.5, -0.233518}
+ {-0.49144199999999999, 0.26006299999999999}
+ {0.50711799999999996, -0.22408600000000001}
+ {0.50711799999999996, 0.267179}
+ {-0.27431, -0.474028}
+ {0.27977999999999997, -0.47847800000000001}
+ {0.29393799999999998, 0.54304399999999997}
+ {-0.28623199999999999, 0.55380399999999996}
+
+ Shape
+ RoundRect
+ Style
+
+ fill
+
+ Color
+
+ b
+ 0
+ g
+ 0.8
+ r
+ 0.6
+
+
+ shadow
+
+ Color
+
+ a
+ 0.35
+ b
+ 0.328823
+ g
+ 0.328823
+ r
+ 0.328823
+
+ Fuzziness
+ 1.5349206924438477
+ ShadowVector
+ {0, 1}
+
+ stroke
+
+ Color
+
+ b
+ 0
+ g
+ 0.6
+ r
+ 0.4
+
+ CornerRadius
+ 3
+ Draws
+ NO
+
+
+ Text
+
+ Text
+ {\rtf1\ansi\ansicpg1252\cocoartf1265\cocoasubrtf210
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc
+
+\f0\b\fs24 \cf0 Watch 2}
+ VerticalPad
+ 0
+
+
+
+ Bounds
+ {{76.5, 303}, {90, 50.169699999999999}}
+ Class
+ ShapedGraphic
+ FontInfo
+
+ Color
+
+ b
+ 0
+ g
+ 0
+ r
+ 0
+
+ Font
+ Roboto-BoldCondensed
+ Size
+ 10
+
+ ID
+ 251
+ Layer
+ 0
+ Magnets
+
+ {1, 1}
+ {1, -1}
+ {-1, -1}
+ {-1, 1}
+ {0, 1}
+ {0, -1}
+ {1, 0}
+ {-1, 0}
+ {-0.5, -0.233518}
+ {-0.49144199999999999, 0.26006299999999999}
+ {0.50711799999999996, -0.22408600000000001}
+ {0.50711799999999996, 0.267179}
+ {-0.27431, -0.474028}
+ {0.27977999999999997, -0.47847800000000001}
+ {0.29393799999999998, 0.54304399999999997}
+ {-0.28623199999999999, 0.55380399999999996}
+
+ Shape
+ RoundRect
+ Style
+
+ fill
+
+ Color
+
+ b
+ 0
+ g
+ 0.8
+ r
+ 0.6
+
+
+ shadow
+
+ Color
+
+ a
+ 0.35
+ b
+ 0.328823
+ g
+ 0.328823
+ r
+ 0.328823
+
+ Fuzziness
+ 1.5349206924438477
+ ShadowVector
+ {0, 1}
+
+ stroke
+
+ Color
+
+ b
+ 0
+ g
+ 0.6
+ r
+ 0.4
+
+ CornerRadius
+ 3
+ Draws
+ NO
+
+
+ Text
+
+ Text
+ {\rtf1\ansi\ansicpg1252\cocoartf1265\cocoasubrtf210
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc
+
+\f0\b\fs24 \cf0 Watch 1}
+ VerticalPad
+ 0
+
+
+
+ Bounds
+ {{62.5, 181.83029999999999}, {118, 50.169699999999999}}
+ Class
+ ShapedGraphic
+ FontInfo
+
+ Color
+
+ b
+ 0
+ g
+ 0
+ r
+ 0
+
+ Font
+ Roboto-BoldCondensed
+ Size
+ 10
+
+ ID
+ 250
+ Layer
+ 0
+ Magnets
+
+ {1, 1}
+ {1, -1}
+ {-1, -1}
+ {-1, 1}
+ {0, 1}
+ {0, -1}
+ {1, 0}
+ {-1, 0}
+ {-0.5, -0.233518}
+ {-0.49144199999999999, 0.26006299999999999}
+ {0.50711799999999996, -0.22408600000000001}
+ {0.50711799999999996, 0.267179}
+ {-0.27431, -0.474028}
+ {0.27977999999999997, -0.47847800000000001}
+ {0.29393799999999998, 0.54304399999999997}
+ {-0.28623199999999999, 0.55380399999999996}
+
+ Shape
+ RoundRect
+ Style
+
+ fill
+
+ Color
+
+ b
+ 0
+ g
+ 0.8
+ r
+ 0.6
+
+
+ shadow
+
+ Color
+
+ a
+ 0.35
+ b
+ 0.328823
+ g
+ 0.328823
+ r
+ 0.328823
+
+ Fuzziness
+ 1.5349206924438477
+ ShadowVector
+ {0, 1}
+
+ stroke
+
+ Color
+
+ b
+ 0
+ g
+ 0.6
+ r
+ 0.4
+
+ CornerRadius
+ 3
+ Draws
+ NO
+
+
+ Text
+
+ Text
+ {\rtf1\ansi\ansicpg1252\cocoartf1265\cocoasubrtf210
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc
+
+\f0\b\fs24 \cf0 Phone}
+ VerticalPad
+ 0
+
+
+
+ Bounds
+ {{62.5, 46.830299999999994}, {118, 50.169699999999999}}
+ Class
+ ShapedGraphic
+ FontInfo
+
+ Color
+
+ b
+ 0
+ g
+ 0
+ r
+ 0
+
+ Font
+ Roboto-BoldCondensed
+ Size
+ 12
+
+ ID
+ 158
+ Layer
+ 0
+ Magnets
+
+ {1, 1}
+ {1, -1}
+ {-1, -1}
+ {-1, 1}
+ {0, 1}
+ {0, -1}
+ {1, 0}
+ {-1, 0}
+ {-0.5, -0.233518}
+ {-0.49144199999999999, 0.26006299999999999}
+ {0.50711799999999996, -0.22408600000000001}
+ {0.50711799999999996, 0.267179}
+ {-0.27431, -0.474028}
+ {0.27977999999999997, -0.47847800000000001}
+ {0.29393799999999998, 0.54304399999999997}
+ {-0.28623199999999999, 0.55380399999999996}
+
+ Shape
+ RoundRect
+ Style
+
+ fill
+
+ Color
+
+ b
+ 0.898039
+ g
+ 0.709804
+ r
+ 0.2
+
+
+ shadow
+
+ Color
+
+ a
+ 0.35
+ b
+ 0.328823
+ g
+ 0.328823
+ r
+ 0.328823
+
+ Fuzziness
+ 1.5349206924438477
+ ShadowVector
+ {0, 1}
+
+ stroke
+
+ Color
+
+ b
+ 0.8
+ g
+ 0.6
+ r
+ 0
+
+ CornerRadius
+ 3
+ Draws
+ NO
+
+
+ Text
+
+ Text
+ {\rtf1\ansi\ansicpg1252\cocoartf1265\cocoasubrtf210
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc
+
+\f0\b\fs24 \cf0 Cloud Node}
+ VerticalPad
+ 0
+
+
+
+ Class
+ Group
+ Graphics
+
+
+ Bounds
+ {{890, 0}, {60, 1172}}
+ Class
+ ShapedGraphic
+ FontInfo
+
+ Color
+
+ w
+ 0
+
+ Font
+ Helvetica
+ Size
+ 12
+
+ ID
+ 45
+ Shape
+ Rectangle
+ Style
+
+ fill
+
+ Color
+
+ a
+ 0.1
+ b
+ 1
+ g
+ 0
+ r
+ 1
+
+
+ shadow
+
+ Draws
+ NO
+
+ stroke
+
+ Draws
+ NO
+
+
+
+
+ Bounds
+ {{810, 0}, {60, 1172}}
+ Class
+ ShapedGraphic
+ FontInfo
+
+ Color
+
+ w
+ 0
+
+ Font
+ Helvetica
+ Size
+ 12
+
+ ID
+ 46
+ Shape
+ Rectangle
+ Style
+
+ fill
+
+ Color
+
+ a
+ 0.1
+ b
+ 1
+ g
+ 0
+ r
+ 1
+
+
+ shadow
+
+ Draws
+ NO
+
+ stroke
+
+ Draws
+ NO
+
+
+
+
+ Bounds
+ {{730, 0}, {60, 1172}}
+ Class
+ ShapedGraphic
+ FontInfo
+
+ Color
+
+ w
+ 0
+
+ Font
+ Helvetica
+ Size
+ 12
+
+ ID
+ 47
+ Shape
+ Rectangle
+ Style
+
+ fill
+
+ Color
+
+ a
+ 0.1
+ b
+ 1
+ g
+ 0
+ r
+ 1
+
+
+ shadow
+
+ Draws
+ NO
+
+ stroke
+
+ Draws
+ NO
+
+
+
+
+ Bounds
+ {{650, 0}, {60, 1172}}
+ Class
+ ShapedGraphic
+ FontInfo
+
+ Color
+
+ w
+ 0
+
+ Font
+ Helvetica
+ Size
+ 12
+
+ ID
+ 48
+ Shape
+ Rectangle
+ Style
+
+ fill
+
+ Color
+
+ a
+ 0.1
+ b
+ 1
+ g
+ 0
+ r
+ 1
+
+
+ shadow
+
+ Draws
+ NO
+
+ stroke
+
+ Draws
+ NO
+
+
+
+
+ Bounds
+ {{570, 0}, {60, 1172}}
+ Class
+ ShapedGraphic
+ FontInfo
+
+ Color
+
+ w
+ 0
+
+ Font
+ Helvetica
+ Size
+ 12
+
+ ID
+ 49
+ Shape
+ Rectangle
+ Style
+
+ fill
+
+ Color
+
+ a
+ 0.1
+ b
+ 1
+ g
+ 0
+ r
+ 1
+
+
+ shadow
+
+ Draws
+ NO
+
+ stroke
+
+ Draws
+ NO
+
+
+
+
+ Bounds
+ {{490, 0}, {60, 1172}}
+ Class
+ ShapedGraphic
+ FontInfo
+
+ Color
+
+ w
+ 0
+
+ Font
+ Helvetica
+ Size
+ 12
+
+ ID
+ 50
+ Shape
+ Rectangle
+ Style
+
+ fill
+
+ Color
+
+ a
+ 0.1
+ b
+ 1
+ g
+ 0
+ r
+ 1
+
+
+ shadow
+
+ Draws
+ NO
+
+ stroke
+
+ Draws
+ NO
+
+
+
+
+ Bounds
+ {{410, 0}, {60, 1172}}
+ Class
+ ShapedGraphic
+ FontInfo
+
+ Color
+
+ w
+ 0
+
+ Font
+ Helvetica
+ Size
+ 12
+
+ ID
+ 51
+ Shape
+ Rectangle
+ Style
+
+ fill
+
+ Color
+
+ a
+ 0.1
+ b
+ 1
+ g
+ 0
+ r
+ 1
+
+
+ shadow
+
+ Draws
+ NO
+
+ stroke
+
+ Draws
+ NO
+
+
+
+
+ Bounds
+ {{330, 0}, {60, 1172}}
+ Class
+ ShapedGraphic
+ FontInfo
+
+ Color
+
+ w
+ 0
+
+ Font
+ Helvetica
+ Size
+ 12
+
+ ID
+ 52
+ Shape
+ Rectangle
+ Style
+
+ fill
+
+ Color
+
+ a
+ 0.1
+ b
+ 1
+ g
+ 0
+ r
+ 1
+
+
+ shadow
+
+ Draws
+ NO
+
+ stroke
+
+ Draws
+ NO
+
+
+
+
+ Bounds
+ {{250, 0}, {60, 1172}}
+ Class
+ ShapedGraphic
+ FontInfo
+
+ Color
+
+ w
+ 0
+
+ Font
+ Helvetica
+ Size
+ 12
+
+ ID
+ 53
+ Shape
+ Rectangle
+ Style
+
+ fill
+
+ Color
+
+ a
+ 0.1
+ b
+ 1
+ g
+ 0
+ r
+ 1
+
+
+ shadow
+
+ Draws
+ NO
+
+ stroke
+
+ Draws
+ NO
+
+
+
+
+ Bounds
+ {{170, 0}, {60, 1172}}
+ Class
+ ShapedGraphic
+ FontInfo
+
+ Color
+
+ w
+ 0
+
+ Font
+ Helvetica
+ Size
+ 12
+
+ ID
+ 54
+ Shape
+ Rectangle
+ Style
+
+ fill
+
+ Color
+
+ a
+ 0.1
+ b
+ 1
+ g
+ 0
+ r
+ 1
+
+
+ shadow
+
+ Draws
+ NO
+
+ stroke
+
+ Draws
+ NO
+
+
+
+
+ Bounds
+ {{90, 0}, {60, 1172}}
+ Class
+ ShapedGraphic
+ FontInfo
+
+ Color
+
+ w
+ 0
+
+ Font
+ Helvetica
+ Size
+ 12
+
+ ID
+ 55
+ Shape
+ Rectangle
+ Style
+
+ fill
+
+ Color
+
+ a
+ 0.1
+ b
+ 1
+ g
+ 0
+ r
+ 1
+
+
+ shadow
+
+ Draws
+ NO
+
+ stroke
+
+ Draws
+ NO
+
+
+
+
+ Bounds
+ {{10, 0}, {60, 1172}}
+ Class
+ ShapedGraphic
+ FontInfo
+
+ Color
+
+ w
+ 0
+
+ Font
+ Helvetica
+ Size
+ 12
+
+ ID
+ 56
+ Shape
+ Rectangle
+ Style
+
+ fill
+
+ Color
+
+ a
+ 0.1
+ b
+ 1
+ g
+ 0
+ r
+ 1
+
+
+ shadow
+
+ Draws
+ NO
+
+ stroke
+
+ Draws
+ NO
+
+
+
+
+ ID
+ 44
+ Layer
+ 1
+
+
+ GridInfo
+
+ GridSpacing
+ 1
+ MajorGridColor
+
+ a
+ 0.15
+ b
+ 0
+ g
+ 0
+ r
+ 0
+
+ MajorGridSpacing
+ 10
+ ShowsGrid
+ YES
+ SnapsToGrid
+ YES
+
+ HPages
+ 1
+ KeepToScale
+
+ Layers
+
+
+ Lock
+ NO
+ Name
+ Layer 1
+ Print
+ YES
+ View
+ YES
+
+
+ Lock
+ YES
+ Name
+ 12 Column Grid
+ Print
+ YES
+ View
+ NO
+
+
+ LayoutInfo
+
+ Animate
+ NO
+ circoMinDist
+ 18
+ circoSeparation
+ 0.0
+ layoutEngine
+ dot
+ neatoLineLength
+ 0.20000000298023224
+ neatoSeparation
+ 0.0
+ twopiSeparation
+ 0.0
+
+ Orientation
+ 2
+ PrintOnePage
+
+ RowAlign
+ 1
+ RowSpacing
+ 24
+ SheetTitle
+ 12 Columns
+ UniqueID
+ 1
+ VPages
+ 1
+ VerticalGuides
+
+ 10
+ 70
+ 90
+ 149
+ 170
+ 230
+ 250
+ 310
+ 330
+ 390
+ 410
+ 470
+ 490
+ 550
+ 570
+ 630
+ 650
+ 710
+ 730
+ 790
+ 810
+ 870
+ 890
+ 950
+
+
+
+ ActiveLayerIndex
+ 0
+ AutoAdjust
+
+ BackgroundGraphic
+
+ Bounds
+ {{0, 0}, {960, 1172}}
+ Class
+ SolidGraphic
+ ID
+ 2
+ Style
+
+ stroke
+
+ Draws
+ NO
+
+
+
+ BaseZoom
+ 0
+ CanvasOrigin
+ {0, 0}
+ CanvasSize
+ {960, 1172}
+ ColumnAlign
+ 1
+ ColumnSpacing
+ 20
+ DisplayScale
+ 1.0 pt = 1.0 px
+ GraphicsList
+
+
+ Class
+ Group
+ Graphics
+
+
+ Bounds
+ {{910, 0}, {40, 1172}}
+ Class
+ ShapedGraphic
+ FontInfo
+
+ Color
+
+ w
+ 0
+
+ Font
+ Helvetica
+ Size
+ 12
+
+ ID
+ 165
+ Shape
+ Rectangle
+ Style
+
+ fill
+
+ Color
+
+ a
+ 0.1
+ b
+ 1
+ g
+ 0
+ r
+ 1
+
+
+ shadow
+
+ Draws
+ NO
+
+ stroke
+
+ Draws
+ NO
+
+
+
+
+ Bounds
+ {{850, 0}, {40, 1172}}
+ Class
+ ShapedGraphic
+ FontInfo
+
+ Color
+
+ w
+ 0
+
+ Font
+ Helvetica
+ Size
+ 12
+
+ ID
+ 166
+ Shape
+ Rectangle
+ Style
+
+ fill
+
+ Color
+
+ a
+ 0.1
+ b
+ 1
+ g
+ 0
+ r
+ 1
+
+
+ shadow
+
+ Draws
+ NO
+
+ stroke
+
+ Draws
+ NO
+
+
+
+
+ Bounds
+ {{790, 0}, {40, 1172}}
+ Class
+ ShapedGraphic
+ FontInfo
+
+ Color
+
+ w
+ 0
+
+ Font
+ Helvetica
+ Size
+ 12
+
+ ID
+ 167
+ Shape
+ Rectangle
+ Style
+
+ fill
+
+ Color
+
+ a
+ 0.1
+ b
+ 1
+ g
+ 0
+ r
+ 1
+
+
+ shadow
+
+ Draws
+ NO
+
+ stroke
+
+ Draws
+ NO
+
+
+
+
+ Bounds
+ {{730, 0}, {40, 1172}}
+ Class
+ ShapedGraphic
+ FontInfo
+
+ Color
+
+ w
+ 0
+
+ Font
+ Helvetica
+ Size
+ 12
+
+ ID
+ 168
+ Shape
+ Rectangle
+ Style
+
+ fill
+
+ Color
+
+ a
+ 0.1
+ b
+ 1
+ g
+ 0
+ r
+ 1
+
+
+ shadow
+
+ Draws
+ NO
+
+ stroke
+
+ Draws
+ NO
+
+
+
+
+ Bounds
+ {{670, 0}, {40, 1172}}
+ Class
+ ShapedGraphic
+ FontInfo
+
+ Color
+
+ w
+ 0
+
+ Font
+ Helvetica
+ Size
+ 12
+
+ ID
+ 169
+ Shape
+ Rectangle
+ Style
+
+ fill
+
+ Color
+
+ a
+ 0.1
+ b
+ 1
+ g
+ 0
+ r
+ 1
+
+
+ shadow
+
+ Draws
+ NO
+
+ stroke
+
+ Draws
+ NO
+
+
+
+
+ Bounds
+ {{610, 0}, {40, 1172}}
+ Class
+ ShapedGraphic
+ FontInfo
+
+ Color
+
+ w
+ 0
+
+ Font
+ Helvetica
+ Size
+ 12
+
+ ID
+ 170
+ Shape
+ Rectangle
+ Style
+
+ fill
+
+ Color
+
+ a
+ 0.1
+ b
+ 1
+ g
+ 0
+ r
+ 1
+
+
+ shadow
+
+ Draws
+ NO
+
+ stroke
+
+ Draws
+ NO
+
+
+
+
+ Bounds
+ {{550, 0}, {40, 1172}}
+ Class
+ ShapedGraphic
+ FontInfo
+
+ Color
+
+ w
+ 0
+
+ Font
+ Helvetica
+ Size
+ 12
+
+ ID
+ 171
+ Shape
+ Rectangle
+ Style
+
+ fill
+
+ Color
+
+ a
+ 0.1
+ b
+ 1
+ g
+ 0
+ r
+ 1
+
+
+ shadow
+
+ Draws
+ NO
+
+ stroke
+
+ Draws
+ NO
+
+
+
+
+ Bounds
+ {{490, 0}, {40, 1172}}
+ Class
+ ShapedGraphic
+ FontInfo
+
+ Color
+
+ w
+ 0
+
+ Font
+ Helvetica
+ Size
+ 12
+
+ ID
+ 172
+ Shape
+ Rectangle
+ Style
+
+ fill
+
+ Color
+
+ a
+ 0.1
+ b
+ 1
+ g
+ 0
+ r
+ 1
+
+
+ shadow
+
+ Draws
+ NO
+
+ stroke
+
+ Draws
+ NO
+
+
+
+
+ Bounds
+ {{430, 0}, {40, 1172}}
+ Class
+ ShapedGraphic
+ FontInfo
+
+ Color
+
+ w
+ 0
+
+ Font
+ Helvetica
+ Size
+ 12
+
+ ID
+ 173
+ Shape
+ Rectangle
+ Style
+
+ fill
+
+ Color
+
+ a
+ 0.1
+ b
+ 1
+ g
+ 0
+ r
+ 1
+
+
+ shadow
+
+ Draws
+ NO
+
+ stroke
+
+ Draws
+ NO
+
+
+
+
+ Bounds
+ {{370, 0}, {40, 1172}}
+ Class
+ ShapedGraphic
+ FontInfo
+
+ Color
+
+ w
+ 0
+
+ Font
+ Helvetica
+ Size
+ 12
+
+ ID
+ 174
+ Shape
+ Rectangle
+ Style
+
+ fill
+
+ Color
+
+ a
+ 0.1
+ b
+ 1
+ g
+ 0
+ r
+ 1
+
+
+ shadow
+
+ Draws
+ NO
+
+ stroke
+
+ Draws
+ NO
+
+
+
+
+ Bounds
+ {{310, 0}, {40, 1172}}
+ Class
+ ShapedGraphic
+ FontInfo
+
+ Color
+
+ w
+ 0
+
+ Font
+ Helvetica
+ Size
+ 12
+
+ ID
+ 175
+ Shape
+ Rectangle
+ Style
+
+ fill
+
+ Color
+
+ a
+ 0.1
+ b
+ 1
+ g
+ 0
+ r
+ 1
+
+
+ shadow
+
+ Draws
+ NO
+
+ stroke
+
+ Draws
+ NO
+
+
+
+
+ Bounds
+ {{250, 0}, {40, 1172}}
+ Class
+ ShapedGraphic
+ FontInfo
+
+ Color
+
+ w
+ 0
+
+ Font
+ Helvetica
+ Size
+ 12
+
+ ID
+ 176
+ Shape
+ Rectangle
+ Style
+
+ fill
+
+ Color
+
+ a
+ 0.1
+ b
+ 1
+ g
+ 0
+ r
+ 1
+
+
+ shadow
+
+ Draws
+ NO
+
+ stroke
+
+ Draws
+ NO
+
+
+
+
+ Bounds
+ {{190, 0}, {40, 1172}}
+ Class
+ ShapedGraphic
+ FontInfo
+
+ Color
+
+ w
+ 0
+
+ Font
+ Helvetica
+ Size
+ 12
+
+ ID
+ 177
+ Shape
+ Rectangle
+ Style
+
+ fill
+
+ Color
+
+ a
+ 0.1
+ b
+ 1
+ g
+ 0
+ r
+ 1
+
+
+ shadow
+
+ Draws
+ NO
+
+ stroke
+
+ Draws
+ NO
+
+
+
+
+ Bounds
+ {{130, 0}, {40, 1172}}
+ Class
+ ShapedGraphic
+ FontInfo
+
+ Color
+
+ w
+ 0
+
+ Font
+ Helvetica
+ Size
+ 12
+
+ ID
+ 178
+ Shape
+ Rectangle
+ Style
+
+ fill
+
+ Color
+
+ a
+ 0.1
+ b
+ 1
+ g
+ 0
+ r
+ 1
+
+
+ shadow
+
+ Draws
+ NO
+
+ stroke
+
+ Draws
+ NO
+
+
+
+
+ Bounds
+ {{70, 0}, {40, 1172}}
+ Class
+ ShapedGraphic
+ FontInfo
+
+ Color
+
+ w
+ 0
+
+ Font
+ Helvetica
+ Size
+ 12
+
+ ID
+ 179
+ Shape
+ Rectangle
+ Style
+
+ fill
+
+ Color
+
+ a
+ 0.1
+ b
+ 1
+ g
+ 0
+ r
+ 1
+
+
+ shadow
+
+ Draws
+ NO
+
+ stroke
+
+ Draws
+ NO
+
+
+
+
+ Bounds
+ {{10, 0}, {40, 1172}}
+ Class
+ ShapedGraphic
+ FontInfo
+
+ Color
+
+ w
+ 0
+
+ Font
+ Helvetica
+ Size
+ 12
+
+ ID
+ 180
+ Shape
+ Rectangle
+ Style
+
+ fill
+
+ Color
+
+ a
+ 0.1
+ b
+ 1
+ g
+ 0
+ r
+ 1
+
+
+ shadow
+
+ Draws
+ NO
+
+ stroke
+
+ Draws
+ NO
+
+
+
+
+ ID
+ 164
+ Layer
+ 1
+
+
+ GridInfo
+
+ GridSpacing
+ 1
+ MajorGridColor
+
+ a
+ 0.15
+ b
+ 0
+ g
+ 0
+ r
+ 0
+
+ MajorGridSpacing
+ 10
+ ShowsGrid
+ YES
+ SnapsToGrid
+ YES
+
+ HPages
+ 2
+ KeepToScale
+
+ Layers
+
+
+ Lock
+ NO
+ Name
+ Layer 1
+ Print
+ YES
+ View
+ YES
+
+
+ Lock
+ YES
+ Name
+ 16 Column Grid
+ Print
+ YES
+ View
+ YES
+
+
+ LayoutInfo
+
+ Animate
+ NO
+ circoMinDist
+ 18
+ circoSeparation
+ 0.0
+ layoutEngine
+ dot
+ neatoLineLength
+ 0.20000000298023224
+ neatoSeparation
+ 0.0
+ twopiSeparation
+ 0.0
+
+ Orientation
+ 2
+ PrintOnePage
+
+ RowAlign
+ 1
+ RowSpacing
+ 24
+ SheetTitle
+ 16 Columns
+ UniqueID
+ 2
+ VPages
+ 2
+ VerticalGuides
+
+ 10
+ 50
+ 70
+ 110
+ 130
+ 170
+ 190
+ 230
+ 250
+ 290
+ 310
+ 350
+ 370
+ 410
+ 430
+ 470
+ 490
+ 530
+ 550
+ 590
+ 610
+ 650
+ 670
+ 710
+ 730
+ 770
+ 790
+ 830
+ 850
+ 890
+ 910
+ 950
+
+
+
+ ActiveLayerIndex
+ 0
+ AutoAdjust
+
+ BackgroundGraphic
+
+ Bounds
+ {{0, 0}, {960, 1172}}
+ Class
+ SolidGraphic
+ ID
+ 2
+ Style
+
+ stroke
+
+ Draws
+ NO
+
+
+
+ BaseZoom
+ 0
+ CanvasOrigin
+ {0, 0}
+ CanvasSize
+ {960, 1172}
+ ColumnAlign
+ 1
+ ColumnSpacing
+ 10
+ DisplayScale
+ 1.0 pt = 1.0 px
+ GraphicsList
+
+
+ Class
+ Group
+ Graphics
+
+
+ Bounds
+ {{925, 0}, {30, 1172}}
+ Class
+ ShapedGraphic
+ FontInfo
+
+ Color
+
+ w
+ 0
+
+ Font
+ Helvetica
+ Size
+ 12
+
+ ID
+ 193
+ Shape
+ Rectangle
+ Style
+
+ fill
+
+ Color
+
+ a
+ 0.1
+ b
+ 1
+ g
+ 0
+ r
+ 1
+
+
+ shadow
+
+ Draws
+ NO
+
+ stroke
+
+ Draws
+ NO
+
+
+
+
+ Bounds
+ {{885, 0}, {30, 1172}}
+ Class
+ ShapedGraphic
+ FontInfo
+
+ Color
+
+ w
+ 0
+
+ Font
+ Helvetica
+ Size
+ 12
+
+ ID
+ 194
+ Shape
+ Rectangle
+ Style
+
+ fill
+
+ Color
+
+ a
+ 0.1
+ b
+ 1
+ g
+ 0
+ r
+ 1
+
+
+ shadow
+
+ Draws
+ NO
+
+ stroke
+
+ Draws
+ NO
+
+
+
+
+ Bounds
+ {{845, 0}, {30, 1172}}
+ Class
+ ShapedGraphic
+ FontInfo
+
+ Color
+
+ w
+ 0
+
+ Font
+ Helvetica
+ Size
+ 12
+
+ ID
+ 195
+ Shape
+ Rectangle
+ Style
+
+ fill
+
+ Color
+
+ a
+ 0.1
+ b
+ 1
+ g
+ 0
+ r
+ 1
+
+
+ shadow
+
+ Draws
+ NO
+
+ stroke
+
+ Draws
+ NO
+
+
+
+
+ Bounds
+ {{805, 0}, {30, 1172}}
+ Class
+ ShapedGraphic
+ FontInfo
+
+ Color
+
+ w
+ 0
+
+ Font
+ Helvetica
+ Size
+ 12
+
+ ID
+ 196
+ Shape
+ Rectangle
+ Style
+
+ fill
+
+ Color
+
+ a
+ 0.1
+ b
+ 1
+ g
+ 0
+ r
+ 1
+
+
+ shadow
+
+ Draws
+ NO
+
+ stroke
+
+ Draws
+ NO
+
+
+
+
+ Bounds
+ {{765, 0}, {30, 1172}}
+ Class
+ ShapedGraphic
+ FontInfo
+
+ Color
+
+ w
+ 0
+
+ Font
+ Helvetica
+ Size
+ 12
+
+ ID
+ 197
+ Shape
+ Rectangle
+ Style
+
+ fill
+
+ Color
+
+ a
+ 0.1
+ b
+ 1
+ g
+ 0
+ r
+ 1
+
+
+ shadow
+
+ Draws
+ NO
+
+ stroke
+
+ Draws
+ NO
+
+
+
+
+ Bounds
+ {{725, 0}, {30, 1172}}
+ Class
+ ShapedGraphic
+ FontInfo
+
+ Color
+
+ w
+ 0
+
+ Font
+ Helvetica
+ Size
+ 12
+
+ ID
+ 198
+ Shape
+ Rectangle
+ Style
+
+ fill
+
+ Color
+
+ a
+ 0.1
+ b
+ 1
+ g
+ 0
+ r
+ 1
+
+
+ shadow
+
+ Draws
+ NO
+
+ stroke
+
+ Draws
+ NO
+
+
+
+
+ Bounds
+ {{685, 0}, {30, 1172}}
+ Class
+ ShapedGraphic
+ FontInfo
+
+ Color
+
+ w
+ 0
+
+ Font
+ Helvetica
+ Size
+ 12
+
+ ID
+ 199
+ Shape
+ Rectangle
+ Style
+
+ fill
+
+ Color
+
+ a
+ 0.1
+ b
+ 1
+ g
+ 0
+ r
+ 1
+
+
+ shadow
+
+ Draws
+ NO
+
+ stroke
+
+ Draws
+ NO
+
+
+
+
+ Bounds
+ {{645, 0}, {30, 1172}}
+ Class
+ ShapedGraphic
+ FontInfo
+
+ Color
+
+ w
+ 0
+
+ Font
+ Helvetica
+ Size
+ 12
+
+ ID
+ 200
+ Shape
+ Rectangle
+ Style
+
+ fill
+
+ Color
+
+ a
+ 0.1
+ b
+ 1
+ g
+ 0
+ r
+ 1
+
+
+ shadow
+
+ Draws
+ NO
+
+ stroke
+
+ Draws
+ NO
+
+
+
+
+ Bounds
+ {{605, 0}, {30, 1172}}
+ Class
+ ShapedGraphic
+ FontInfo
+
+ Color
+
+ w
+ 0
+
+ Font
+ Helvetica
+ Size
+ 12
+
+ ID
+ 201
+ Shape
+ Rectangle
+ Style
+
+ fill
+
+ Color
+
+ a
+ 0.1
+ b
+ 1
+ g
+ 0
+ r
+ 1
+
+
+ shadow
+
+ Draws
+ NO
+
+ stroke
+
+ Draws
+ NO
+
+
+
+
+ Bounds
+ {{565, 0}, {30, 1172}}
+ Class
+ ShapedGraphic
+ FontInfo
+
+ Color
+
+ w
+ 0
+
+ Font
+ Helvetica
+ Size
+ 12
+
+ ID
+ 202
+ Shape
+ Rectangle
+ Style
+
+ fill
+
+ Color
+
+ a
+ 0.1
+ b
+ 1
+ g
+ 0
+ r
+ 1
+
+
+ shadow
+
+ Draws
+ NO
+
+ stroke
+
+ Draws
+ NO
+
+
+
+
+ Bounds
+ {{525, 0}, {30, 1172}}
+ Class
+ ShapedGraphic
+ FontInfo
+
+ Color
+
+ w
+ 0
+
+ Font
+ Helvetica
+ Size
+ 12
+
+ ID
+ 203
+ Shape
+ Rectangle
+ Style
+
+ fill
+
+ Color
+
+ a
+ 0.1
+ b
+ 1
+ g
+ 0
+ r
+ 1
+
+
+ shadow
+
+ Draws
+ NO
+
+ stroke
+
+ Draws
+ NO
+
+
+
+
+ Bounds
+ {{485, 0}, {30, 1172}}
+ Class
+ ShapedGraphic
+ FontInfo
+
+ Color
+
+ w
+ 0
+
+ Font
+ Helvetica
+ Size
+ 12
+
+ ID
+ 204
+ Shape
+ Rectangle
+ Style
+
+ fill
+
+ Color
+
+ a
+ 0.1
+ b
+ 1
+ g
+ 0
+ r
+ 1
+
+
+ shadow
+
+ Draws
+ NO
+
+ stroke
+
+ Draws
+ NO
+
+
+
+
+ Bounds
+ {{445, 0}, {30, 1172}}
+ Class
+ ShapedGraphic
+ FontInfo
+
+ Color
+
+ w
+ 0
+
+ Font
+ Helvetica
+ Size
+ 12
+
+ ID
+ 205
+ Shape
+ Rectangle
+ Style
+
+ fill
+
+ Color
+
+ a
+ 0.1
+ b
+ 1
+ g
+ 0
+ r
+ 1
+
+
+ shadow
+
+ Draws
+ NO
+
+ stroke
+
+ Draws
+ NO
+
+
+
+
+ Bounds
+ {{405, 0}, {30, 1172}}
+ Class
+ ShapedGraphic
+ FontInfo
+
+ Color
+
+ w
+ 0
+
+ Font
+ Helvetica
+ Size
+ 12
+
+ ID
+ 206
+ Shape
+ Rectangle
+ Style
+
+ fill
+
+ Color
+
+ a
+ 0.1
+ b
+ 1
+ g
+ 0
+ r
+ 1
+
+
+ shadow
+
+ Draws
+ NO
+
+ stroke
+
+ Draws
+ NO
+
+
+
+
+ Bounds
+ {{365, 0}, {30, 1172}}
+ Class
+ ShapedGraphic
+ FontInfo
+
+ Color
+
+ w
+ 0
+
+ Font
+ Helvetica
+ Size
+ 12
+
+ ID
+ 207
+ Shape
+ Rectangle
+ Style
+
+ fill
+
+ Color
+
+ a
+ 0.1
+ b
+ 1
+ g
+ 0
+ r
+ 1
+
+
+ shadow
+
+ Draws
+ NO
+
+ stroke
+
+ Draws
+ NO
+
+
+
+
+ Bounds
+ {{325, 0}, {30, 1172}}
+ Class
+ ShapedGraphic
+ FontInfo
+
+ Color
+
+ w
+ 0
+
+ Font
+ Helvetica
+ Size
+ 12
+
+ ID
+ 208
+ Shape
+ Rectangle
+ Style
+
+ fill
+
+ Color
+
+ a
+ 0.1
+ b
+ 1
+ g
+ 0
+ r
+ 1
+
+
+ shadow
+
+ Draws
+ NO
+
+ stroke
+
+ Draws
+ NO
+
+
+
+
+ Bounds
+ {{285, 0}, {30, 1172}}
+ Class
+ ShapedGraphic
+ FontInfo
+
+ Color
+
+ w
+ 0
+
+ Font
+ Helvetica
+ Size
+ 12
+
+ ID
+ 209
+ Shape
+ Rectangle
+ Style
+
+ fill
+
+ Color
+
+ a
+ 0.1
+ b
+ 1
+ g
+ 0
+ r
+ 1
+
+
+ shadow
+
+ Draws
+ NO
+
+ stroke
+
+ Draws
+ NO
+
+
+
+
+ Bounds
+ {{245, 0}, {30, 1172}}
+ Class
+ ShapedGraphic
+ FontInfo
+
+ Color
+
+ w
+ 0
+
+ Font
+ Helvetica
+ Size
+ 12
+
+ ID
+ 210
+ Shape
+ Rectangle
+ Style
+
+ fill
+
+ Color
+
+ a
+ 0.1
+ b
+ 1
+ g
+ 0
+ r
+ 1
+
+
+ shadow
+
+ Draws
+ NO
+
+ stroke
+
+ Draws
+ NO
+
+
+
+
+ Bounds
+ {{205, 0}, {30, 1172}}
+ Class
+ ShapedGraphic
+ FontInfo
+
+ Color
+
+ w
+ 0
+
+ Font
+ Helvetica
+ Size
+ 12
+
+ ID
+ 211
+ Shape
+ Rectangle
+ Style
+
+ fill
+
+ Color
+
+ a
+ 0.1
+ b
+ 1
+ g
+ 0
+ r
+ 1
+
+
+ shadow
+
+ Draws
+ NO
+
+ stroke
+
+ Draws
+ NO
+
+
+
+
+ Bounds
+ {{165, 0}, {30, 1172}}
+ Class
+ ShapedGraphic
+ FontInfo
+
+ Color
+
+ w
+ 0
+
+ Font
+ Helvetica
+ Size
+ 12
+
+ ID
+ 212
+ Shape
+ Rectangle
+ Style
+
+ fill
+
+ Color
+
+ a
+ 0.1
+ b
+ 1
+ g
+ 0
+ r
+ 1
+
+
+ shadow
+
+ Draws
+ NO
+
+ stroke
+
+ Draws
+ NO
+
+
+
+
+ Bounds
+ {{125, 0}, {30, 1172}}
+ Class
+ ShapedGraphic
+ FontInfo
+
+ Color
+
+ w
+ 0
+
+ Font
+ Helvetica
+ Size
+ 12
+
+ ID
+ 213
+ Shape
+ Rectangle
+ Style
+
+ fill
+
+ Color
+
+ a
+ 0.1
+ b
+ 1
+ g
+ 0
+ r
+ 1
+
+
+ shadow
+
+ Draws
+ NO
+
+ stroke
+
+ Draws
+ NO
+
+
+
+
+ Bounds
+ {{85, 0}, {30, 1172}}
+ Class
+ ShapedGraphic
+ FontInfo
+
+ Color
+
+ w
+ 0
+
+ Font
+ Helvetica
+ Size
+ 12
+
+ ID
+ 214
+ Shape
+ Rectangle
+ Style
+
+ fill
+
+ Color
+
+ a
+ 0.1
+ b
+ 1
+ g
+ 0
+ r
+ 1
+
+
+ shadow
+
+ Draws
+ NO
+
+ stroke
+
+ Draws
+ NO
+
+
+
+
+ Bounds
+ {{45, 0}, {30, 1172}}
+ Class
+ ShapedGraphic
+ FontInfo
+
+ Color
+
+ w
+ 0
+
+ Font
+ Helvetica
+ Size
+ 12
+
+ ID
+ 215
+ Shape
+ Rectangle
+ Style
+
+ fill
+
+ Color
+
+ a
+ 0.1
+ b
+ 1
+ g
+ 0
+ r
+ 1
+
+
+ shadow
+
+ Draws
+ NO
+
+ stroke
+
+ Draws
+ NO
+
+
+
+
+ Bounds
+ {{5, 0}, {30, 1172}}
+ Class
+ ShapedGraphic
+ FontInfo
+
+ Color
+
+ w
+ 0
+
+ Font
+ Helvetica
+ Size
+ 12
+
+ ID
+ 216
+ Shape
+ Rectangle
+ Style
+
+ fill
+
+ Color
+
+ a
+ 0.1
+ b
+ 1
+ g
+ 0
+ r
+ 1
+
+
+ shadow
+
+ Draws
+ NO
+
+ stroke
+
+ Draws
+ NO
+
+
+
+
+ ID
+ 192
+ Layer
+ 1
+
+
+ GridInfo
+
+ GridSpacing
+ 1
+ MajorGridColor
+
+ a
+ 0.15
+ b
+ 0
+ g
+ 0
+ r
+ 0
+
+ MajorGridSpacing
+ 5
+ ShowsGrid
+ YES
+ SnapsToGrid
+ YES
+
+ HPages
+ 2
+ KeepToScale
+
+ Layers
+
+
+ Lock
+ NO
+ Name
+ Layer 1
+ Print
+ YES
+ View
+ YES
+
+
+ Lock
+ YES
+ Name
+ 24 Column Grid
+ Print
+ YES
+ View
+ YES
+
+
+ LayoutInfo
+
+ Animate
+ NO
+ circoMinDist
+ 18
+ circoSeparation
+ 0.0
+ layoutEngine
+ dot
+ neatoLineLength
+ 0.20000000298023224
+ neatoSeparation
+ 0.0
+ twopiSeparation
+ 0.0
+
+ Orientation
+ 2
+ PrintOnePage
+
+ RowAlign
+ 1
+ RowSpacing
+ 24
+ SheetTitle
+ 24 Columns
+ UniqueID
+ 3
+ VPages
+ 2
+ VerticalGuides
+
+ 5
+ 35
+ 45
+ 75
+ 85
+ 115
+ 125
+ 155
+ 165
+ 195
+ 205
+ 235
+ 245
+ 275
+ 285
+ 315
+ 325
+ 355
+ 365
+ 395
+ 405
+ 435
+ 445
+ 475
+ 485
+ 515
+ 525
+ 555
+ 565
+ 595
+ 605
+ 635
+ 645
+ 675
+ 685
+ 715
+ 725
+ 755
+ 765
+ 795
+ 805
+ 835
+ 845
+ 875
+ 885
+ 915
+ 925
+ 955
+
+
+
+ SmartAlignmentGuidesActive
+ YES
+ SmartDistanceGuidesActive
+ YES
+ UseEntirePage
+
+ WindowInfo
+
+ BottomSlabHeight
+ 471
+ CurrentSheet
+ 0
+ Expanded_Canvases
+
+ ShowInfo
+
+ ShowRuler
+
+ Sidebar
+
+ SidebarWidth
+ 230
+ VisibleRegion
+ {{0, 0}, {893, 674}}
+ Zoom
+ 1
+ ZoomValues
+
+
+ 12 Columns
+ 1
+ 1
+
+
+
+
+