summaryrefslogtreecommitdiffstats
path: root/docs/html
diff options
context:
space:
mode:
Diffstat (limited to 'docs/html')
-rw-r--r--docs/html/about/dashboards/index.jd96
-rw-r--r--docs/html/about/versions/android-2.3.jd13
-rw-r--r--docs/html/about/versions/jelly-bean.jd47
-rw-r--r--docs/html/design/building-blocks/buttons.jd7
-rw-r--r--docs/html/design/building-blocks/dialogs.jd13
-rw-r--r--docs/html/design/building-blocks/pickers.jd7
-rw-r--r--docs/html/design/building-blocks/spinners.jd7
-rw-r--r--docs/html/design/building-blocks/switches.jd8
-rw-r--r--docs/html/design/building-blocks/tabs.jd7
-rw-r--r--docs/html/design/building-blocks/text-fields.jd8
-rw-r--r--docs/html/design/downloads/index.jd27
-rw-r--r--docs/html/design/patterns/accessibility.jd9
-rw-r--r--docs/html/design/patterns/actionbar.jd14
-rw-r--r--docs/html/design/patterns/app-structure.jd17
-rw-r--r--docs/html/design/patterns/multi-pane-layouts.jd12
-rw-r--r--docs/html/design/patterns/navigation.jd12
-rw-r--r--docs/html/design/patterns/notifications.jd11
-rw-r--r--docs/html/design/patterns/selection.jd7
-rw-r--r--docs/html/design/patterns/settings.jd9
-rw-r--r--docs/html/design/patterns/swipe-views.jd10
-rw-r--r--docs/html/design/patterns/widgets.jd10
-rw-r--r--docs/html/design/style/color.jd3
-rw-r--r--docs/html/design/style/devices-displays.jd19
-rw-r--r--docs/html/design/style/iconography.jd5
-rw-r--r--docs/html/design/style/themes.jd7
-rw-r--r--docs/html/design/style/typography.jd6
-rw-r--r--docs/html/develop/index.jd169
-rw-r--r--docs/html/distribute/distribute_toc.cs40
-rw-r--r--docs/html/distribute/googleplay/about/monetizing.jd12
-rw-r--r--docs/html/distribute/googleplay/about/visibility.jd2
-rw-r--r--docs/html/distribute/googleplay/promote/badges.jd56
-rw-r--r--docs/html/distribute/googleplay/promote/brand.jd299
-rw-r--r--docs/html/distribute/googleplay/promote/linking.jd2
-rw-r--r--docs/html/distribute/googleplay/publish/preparing.jd93
-rw-r--r--docs/html/distribute/googleplay/quality/core.jd804
-rw-r--r--docs/html/distribute/googleplay/quality/index.jd45
-rw-r--r--docs/html/distribute/googleplay/quality/tablet.jd569
-rw-r--r--docs/html/distribute/googleplay/spotlight/index.jd46
-rw-r--r--docs/html/distribute/googleplay/spotlight/tablets.jd284
-rw-r--r--docs/html/distribute/googleplay/strategies/app-quality.jd45
-rw-r--r--docs/html/distribute/promote/device-art-resources/nexus_10/land_back.pngbin0 -> 481923 bytes
-rw-r--r--docs/html/distribute/promote/device-art-resources/nexus_10/land_fore.pngbin0 -> 33741 bytes
-rw-r--r--docs/html/distribute/promote/device-art-resources/nexus_10/land_shadow.pngbin0 -> 31761 bytes
-rw-r--r--docs/html/distribute/promote/device-art-resources/nexus_10/port_back.pngbin0 -> 508801 bytes
-rw-r--r--docs/html/distribute/promote/device-art-resources/nexus_10/port_fore.pngbin0 -> 31737 bytes
-rw-r--r--docs/html/distribute/promote/device-art-resources/nexus_10/port_shadow.pngbin0 -> 36240 bytes
-rw-r--r--docs/html/distribute/promote/device-art-resources/nexus_10/thumb.pngbin0 -> 17663 bytes
-rw-r--r--docs/html/distribute/promote/device-art-resources/nexus_4/land_back.pngbin0 -> 816742 bytes
-rw-r--r--docs/html/distribute/promote/device-art-resources/nexus_4/land_fore.pngbin0 -> 34120 bytes
-rw-r--r--docs/html/distribute/promote/device-art-resources/nexus_4/land_shadow.pngbin0 -> 31820 bytes
-rw-r--r--docs/html/distribute/promote/device-art-resources/nexus_4/port_back.pngbin0 -> 849499 bytes
-rw-r--r--docs/html/distribute/promote/device-art-resources/nexus_4/port_fore.pngbin0 -> 28044 bytes
-rw-r--r--docs/html/distribute/promote/device-art-resources/nexus_4/port_shadow.pngbin0 -> 37737 bytes
-rw-r--r--docs/html/distribute/promote/device-art-resources/nexus_4/thumb.pngbin0 -> 11736 bytes
-rw-r--r--docs/html/distribute/promote/device-art-resources/nexus_7/land_back.pngbin29977 -> 158936 bytes
-rw-r--r--docs/html/distribute/promote/device-art-resources/nexus_7/land_fore.pngbin30153 -> 33274 bytes
-rw-r--r--docs/html/distribute/promote/device-art-resources/nexus_7/land_shadow.pngbin33797 -> 31186 bytes
-rw-r--r--docs/html/distribute/promote/device-art-resources/nexus_7/port_back.pngbin30267 -> 177565 bytes
-rw-r--r--docs/html/distribute/promote/device-art-resources/nexus_7/port_fore.pngbin32982 -> 30824 bytes
-rw-r--r--docs/html/distribute/promote/device-art-resources/nexus_7/port_shadow.pngbin41554 -> 29482 bytes
-rw-r--r--docs/html/distribute/promote/device-art-resources/nexus_7/thumb.pngbin8163 -> 7754 bytes
-rw-r--r--docs/html/distribute/promote/device-art.jd154
-rw-r--r--docs/html/guide/appendix/media-formats.jd31
-rw-r--r--docs/html/guide/faq/security.jd4
-rw-r--r--docs/html/guide/google/gcm/adv.jd8
-rw-r--r--docs/html/guide/google/gcm/gcm.jd39
-rw-r--r--docs/html/guide/google/gcm/gs.jd12
-rw-r--r--docs/html/guide/google/gcm/server-javadoc/allclasses-frame.html4
-rw-r--r--docs/html/guide/google/gcm/server-javadoc/allclasses-noframe.html4
-rw-r--r--docs/html/guide/google/gcm/server-javadoc/com/google/android/gcm/server/Constants.html4
-rw-r--r--docs/html/guide/google/gcm/server-javadoc/com/google/android/gcm/server/InvalidRequestException.html4
-rw-r--r--docs/html/guide/google/gcm/server-javadoc/com/google/android/gcm/server/Message.Builder.html4
-rw-r--r--docs/html/guide/google/gcm/server-javadoc/com/google/android/gcm/server/Message.html4
-rw-r--r--docs/html/guide/google/gcm/server-javadoc/com/google/android/gcm/server/MulticastResult.html4
-rw-r--r--docs/html/guide/google/gcm/server-javadoc/com/google/android/gcm/server/Result.html4
-rw-r--r--docs/html/guide/google/gcm/server-javadoc/com/google/android/gcm/server/Sender.html6
-rw-r--r--docs/html/guide/google/gcm/server-javadoc/com/google/android/gcm/server/package-frame.html4
-rw-r--r--docs/html/guide/google/gcm/server-javadoc/com/google/android/gcm/server/package-summary.html4
-rw-r--r--docs/html/guide/google/gcm/server-javadoc/com/google/android/gcm/server/package-tree.html4
-rw-r--r--docs/html/guide/google/gcm/server-javadoc/constant-values.html4
-rw-r--r--docs/html/guide/google/gcm/server-javadoc/default.css243
-rw-r--r--docs/html/guide/google/gcm/server-javadoc/deprecated-list.html4
-rw-r--r--docs/html/guide/google/gcm/server-javadoc/help-doc.html4
-rw-r--r--docs/html/guide/google/gcm/server-javadoc/index-all.html4
-rw-r--r--docs/html/guide/google/gcm/server-javadoc/index.html2
-rw-r--r--docs/html/guide/google/gcm/server-javadoc/overview-tree.html4
-rw-r--r--docs/html/guide/google/gcm/server-javadoc/serialized-form.html4
-rw-r--r--docs/html/guide/google/play/billing/billing_subscriptions.jd43
-rw-r--r--docs/html/guide/google/play/billing/index.jd6
-rw-r--r--docs/html/guide/google/play/expansion-files.jd6
-rw-r--r--docs/html/guide/google/play/publishing/multiple-apks.jd68
-rw-r--r--docs/html/guide/google/play/services.jd37
-rw-r--r--docs/html/guide/guide_toc.cs68
-rw-r--r--docs/html/guide/practices/security.jd4
-rw-r--r--docs/html/guide/topics/appwidgets/index.jd31
-rw-r--r--docs/html/guide/topics/connectivity/nfc/nfc.jd103
-rw-r--r--docs/html/guide/topics/data/data-storage.jd7
-rw-r--r--docs/html/guide/topics/manifest/activity-element.jd10
-rw-r--r--docs/html/guide/topics/manifest/application-element.jd18
-rw-r--r--docs/html/guide/topics/manifest/permission-element.jd2
-rw-r--r--docs/html/guide/topics/manifest/provider-element.jd161
-rw-r--r--docs/html/guide/topics/manifest/uses-feature-element.jd8
-rw-r--r--docs/html/guide/topics/providers/content-provider-basics.jd147
-rw-r--r--docs/html/guide/topics/resources/providing-resources.jd37
-rw-r--r--docs/html/guide/topics/resources/string-resource.jd24
-rw-r--r--docs/html/guide/topics/ui/accessibility/apps.jd420
-rw-r--r--docs/html/guide/topics/ui/accessibility/calendar.pngbin0 -> 17811 bytes
-rw-r--r--docs/html/guide/topics/ui/accessibility/checklist.jd173
-rw-r--r--docs/html/guide/topics/ui/accessibility/index.jd60
-rw-r--r--docs/html/guide/topics/ui/accessibility/services.jd263
-rw-r--r--docs/html/guide/topics/ui/controls.jd2
-rw-r--r--docs/html/guide/topics/ui/dialogs.jd1229
-rw-r--r--docs/html/guide/topics/ui/notifiers/notifications.jd1558
-rw-r--r--docs/html/guide/topics/ui/notifiers/toasts.jd52
-rw-r--r--docs/html/guide/topics/ui/themes.jd9
-rw-r--r--docs/html/images/brand/Android_Robot_100.pngbin0 -> 4075 bytes
-rw-r--r--docs/html/images/brand/Android_Robot_200.pngbin0 -> 8288 bytes
-rw-r--r--docs/html/images/brand/Android_Robot_500.pngbin0 -> 22006 bytes
-rw-r--r--docs/html/images/brand/Android_Robot_outlined.ai1697
-rw-r--r--docs/html/images/brand/Google_Play_Store.ai1419
-rw-r--r--docs/html/images/brand/Google_Play_Store_48.pngbin0 -> 3466 bytes
-rw-r--r--docs/html/images/brand/Google_Play_Store_96.pngbin0 -> 10456 bytes
-rw-r--r--docs/html/images/brand/android_logo_no.pngbin0 -> 7115 bytes
-rw-r--r--docs/html/images/brand/droid.gifbin6371 -> 0 bytes
-rw-r--r--docs/html/images/brand/en_app_rgb_wo.ai1779
-rw-r--r--docs/html/images/brand/en_app_rgb_wo_45.pngbin0 -> 8913 bytes
-rw-r--r--docs/html/images/brand/en_app_rgb_wo_60.pngbin0 -> 10486 bytes
-rw-r--r--docs/html/images/brand/en_generic_rgb_wo.ai1780
-rw-r--r--docs/html/images/brand/en_generic_rgb_wo_45.pngbin0 -> 8171 bytes
-rw-r--r--docs/html/images/brand/en_generic_rgb_wo_60.pngbin0 -> 9614 bytes
-rw-r--r--docs/html/images/brand/google_play_logo_450.pngbin5910 -> 0 bytes
-rw-r--r--docs/html/images/brand/learnmore.gifbin3300 -> 0 bytes
-rw-r--r--docs/html/images/brand/logo_android.gifbin1034 -> 0 bytes
-rw-r--r--docs/html/images/brand/mediaplayer.gifbin5816 -> 0 bytes
-rw-r--r--docs/html/images/brand/mediaplayer.pngbin0 -> 9840 bytes
-rw-r--r--docs/html/images/brand/norad.gifbin889 -> 0 bytes
-rw-r--r--docs/html/images/dialog_buttons.pngbin3701 -> 0 bytes
-rw-r--r--docs/html/images/dialog_custom.pngbin4018 -> 0 bytes
-rw-r--r--docs/html/images/dialog_list.pngbin3830 -> 0 bytes
-rw-r--r--docs/html/images/dialog_progress_bar.pngbin2562 -> 0 bytes
-rw-r--r--docs/html/images/dialog_progress_spinning.pngbin2648 -> 0 bytes
-rw-r--r--docs/html/images/dialog_singlechoicelist.pngbin5071 -> 0 bytes
-rw-r--r--docs/html/images/distribute/instapaper.pngbin0 -> 359093 bytes
-rw-r--r--docs/html/images/distribute/mint.pngbin0 -> 471615 bytes
-rw-r--r--docs/html/images/distribute/tinyvillage.pngbin0 -> 945561 bytes
-rw-r--r--docs/html/images/systrace/display-rhythm.pngbin0 -> 65912 bytes
-rw-r--r--docs/html/images/systrace/process-rhythm.pngbin0 -> 46109 bytes
-rw-r--r--docs/html/images/systrace/report.pngbin0 -> 147640 bytes
-rw-r--r--docs/html/images/toast.pngbin6544 -> 47415 bytes
-rw-r--r--docs/html/images/ui-ex-multi-pane.pngbin0 -> 10074 bytes
-rw-r--r--docs/html/images/ui-ex-single-panes.pngbin0 -> 11434 bytes
-rw-r--r--docs/html/images/ui/dialog_buttons.pngbin0 -> 8454 bytes
-rw-r--r--docs/html/images/ui/dialog_checkboxes.pngbin0 -> 33386 bytes
-rw-r--r--docs/html/images/ui/dialog_custom.pngbin0 -> 21804 bytes
-rw-r--r--docs/html/images/ui/dialog_list.pngbin0 -> 13531 bytes
-rw-r--r--docs/html/images/ui/dialogs.pngbin0 -> 36234 bytes
-rw-r--r--docs/html/images/ui/dialogs_regions.pngbin0 -> 13355 bytes
-rw-r--r--docs/html/images/ui/notifications/activity_indicator.pngbin0 -> 14981 bytes
-rw-r--r--docs/html/images/ui/notifications/bigpicture_notification.pngbin0 -> 109466 bytes
-rw-r--r--docs/html/images/ui/notifications/bigpicture_notification_callouts.pngbin0 -> 33537 bytes
-rw-r--r--docs/html/images/ui/notifications/bigtext_notification.pngbin0 -> 34203 bytes
-rw-r--r--docs/html/images/ui/notifications/bigtext_notification_callouts.pngbin0 -> 45407 bytes
-rwxr-xr-xdocs/html/images/ui/notifications/custom_message.pngbin0 -> 17871 bytes
-rw-r--r--docs/html/images/ui/notifications/iconic_notification.pngbin0 -> 21823 bytes
-rw-r--r--docs/html/images/ui/notifications/inbox_notification.pngbin0 -> 20824 bytes
-rw-r--r--docs/html/images/ui/notifications/inbox_notification_callouts.pngbin0 -> 31459 bytes
-rw-r--r--docs/html/images/ui/notifications/normal_notification.pngbin0 -> 59021 bytes
-rw-r--r--docs/html/images/ui/notifications/normal_notification_callouts.pngbin0 -> 24898 bytes
-rwxr-xr-xdocs/html/images/ui/notifications/notifications_window.pngbin0 -> 10392 bytes
-rw-r--r--docs/html/images/ui/notifications/progress_bar_summary.pngbin0 -> 22220 bytes
-rw-r--r--docs/html/images/ui/notifications/progress_indicator_1.pngbin0 -> 9387 bytes
-rw-r--r--docs/html/images/ui/notifications/progress_indicator_2.pngbin0 -> 10861 bytes
-rwxr-xr-xdocs/html/images/ui/notifications/status_bar.pngbin0 -> 7161 bytes
-rw-r--r--docs/html/images/ui/notifications/updated_notification.pngbin0 -> 16809 bytes
-rw-r--r--docs/html/legal.jd2
-rw-r--r--docs/html/sdk/installing/installing-adt.jd17
-rw-r--r--docs/html/tools/adk/adk2.jd23
-rw-r--r--docs/html/tools/adk/aoa.jd186
-rw-r--r--docs/html/tools/adk/aoa2.jd227
-rw-r--r--docs/html/tools/adk/index.jd15
-rw-r--r--docs/html/tools/building/building-cmdline.jd14
-rw-r--r--docs/html/tools/building/building-eclipse.jd14
-rw-r--r--docs/html/tools/debugging/systrace.jd239
-rw-r--r--docs/html/tools/device.jd16
-rw-r--r--docs/html/tools/help/index.jd3
-rw-r--r--docs/html/tools/help/systrace.jd234
-rw-r--r--docs/html/tools/revisions/platforms.jd41
-rw-r--r--docs/html/tools/testing/testing_accessibility.jd257
-rw-r--r--docs/html/tools/tools_toc.cs42
-rwxr-xr-xdocs/html/training/animation/anim_card_flip.mp4bin0 -> 87087 bytes
-rwxr-xr-xdocs/html/training/animation/anim_card_flip.ogvbin0 -> 135105 bytes
-rwxr-xr-xdocs/html/training/animation/anim_card_flip.webmbin0 -> 95870 bytes
-rw-r--r--docs/html/training/animation/anim_crossfade.mp4bin0 -> 67644 bytes
-rw-r--r--docs/html/training/animation/anim_crossfade.ogvbin0 -> 102569 bytes
-rw-r--r--docs/html/training/animation/anim_crossfade.webmbin0 -> 65957 bytes
-rw-r--r--docs/html/training/animation/anim_layout_changes.mp4bin0 -> 42798 bytes
-rw-r--r--docs/html/training/animation/anim_layout_changes.ogvbin0 -> 50321 bytes
-rw-r--r--docs/html/training/animation/anim_layout_changes.webmbin0 -> 39560 bytes
-rwxr-xr-xdocs/html/training/animation/anim_screenslide.mp4bin0 -> 205799 bytes
-rwxr-xr-xdocs/html/training/animation/anim_screenslide.ogvbin0 -> 727629 bytes
-rwxr-xr-xdocs/html/training/animation/anim_screenslide.webmbin0 -> 131539 bytes
-rw-r--r--docs/html/training/animation/anim_zoom.mp4bin0 -> 66004 bytes
-rw-r--r--docs/html/training/animation/anim_zoom.ogvbin0 -> 98651 bytes
-rw-r--r--docs/html/training/animation/anim_zoom.webmbin0 -> 72442 bytes
-rw-r--r--docs/html/training/animation/cardflip.jd365
-rw-r--r--docs/html/training/animation/crossfade.jd208
-rw-r--r--docs/html/training/animation/index.jd86
-rw-r--r--docs/html/training/animation/layout.jd77
-rwxr-xr-xdocs/html/training/animation/screen-slide.jd185
-rw-r--r--docs/html/training/animation/zoom.jd320
-rw-r--r--docs/html/training/basics/activity-lifecycle/recreating.jd29
-rw-r--r--docs/html/training/basics/data-storage/databases.jd322
-rw-r--r--docs/html/training/basics/data-storage/files.jd382
-rw-r--r--docs/html/training/basics/data-storage/index.jd55
-rw-r--r--docs/html/training/basics/data-storage/shared-preferences.jd121
-rw-r--r--docs/html/training/basics/firstapp/running-app.jd23
-rw-r--r--docs/html/training/displaying-bitmaps/cache-bitmap.jd86
-rw-r--r--docs/html/training/displaying-bitmaps/display-bitmap.jd24
-rw-r--r--docs/html/training/displaying-bitmaps/index.jd6
-rw-r--r--docs/html/training/displaying-bitmaps/process-bitmap.jd14
-rw-r--r--docs/html/training/load-data-background/define-launch-query.jd83
-rw-r--r--docs/html/training/load-data-background/handle-results.jd104
-rw-r--r--docs/html/training/load-data-background/index.jd117
-rw-r--r--docs/html/training/load-data-background/setup-loader.jd90
-rw-r--r--docs/html/training/training_toc.cs223
225 files changed, 15939 insertions, 2956 deletions
diff --git a/docs/html/about/dashboards/index.jd b/docs/html/about/dashboards/index.jd
index 4a75b91..edf1f41 100644
--- a/docs/html/about/dashboards/index.jd
+++ b/docs/html/about/dashboards/index.jd
@@ -20,44 +20,41 @@ href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#ApiLevels">API level
<p>The following pie chart and table is based on the number of Android devices that have accessed
Google Play within a 14-day period ending on the data collection date noted below.</p>
-<div class="col-6" style="margin-left:0">
+<div class="col-5" style="margin-left:0">
<table>
<tr>
<th>Version</th>
<th>Codename</th>
- <th>API Level</th>
+ <th>API</th>
<th>Distribution</th>
</tr>
-<tr><td><a href="/about/versions/android-1.5.html">1.5</a></td><td>Cupcake</td> <td>3</td><td>0.2%</td></tr>
-<tr><td><a href="/about/versions/android-1.6.html">1.6</a></td><td>Donut</td> <td>4</td><td>0.5%</td></tr>
-<tr><td><a href="/about/versions/android-2.1.html">2.1</a></td><td>Eclair</td> <td>7</td><td>4.2%</td></tr>
-<tr><td><a href="/about/versions/android-2.2.html">2.2</a></td><td>Froyo</td> <td>8</td><td>15.5%</td></tr>
+<tr><td><a href="/about/versions/android-1.5.html">1.5</a></td><td>Cupcake</td> <td>3</td><td>0.1%</td></tr>
+<tr><td><a href="/about/versions/android-1.6.html">1.6</a></td><td>Donut</td> <td>4</td><td>0.3%</td></tr>
+<tr><td><a href="/about/versions/android-2.1.html">2.1</a></td><td>Eclair</td> <td>7</td><td>3.1%</td></tr>
+<tr><td><a href="/about/versions/android-2.2.html">2.2</a></td><td>Froyo</td> <td>8</td><td>12%</td></tr>
<tr><td><a href="/about/versions/android-2.3.html">2.3 - 2.3.2</a>
</td><td rowspan="2">Gingerbread</td> <td>9</td><td>0.3%</td></tr>
<tr><td><a href="/about/versions/android-2.3.3.html">2.3.3 - 2.3.7
- </a></td><!-- Gingerbread --> <td>10</td><td>60.3%</td></tr>
+ </a></td><!-- Gingerbread --> <td>10</td><td>53.9%</td></tr>
<tr><td><a href="/about/versions/android-3.1.html">3.1</a></td>
- <td rowspan="2">Honeycomb</td> <td>12</td><td>0.5%</td></tr>
-<tr><td><a href="/about/versions/android-3.2.html">3.2</a></td> <!-- Honeycomb --><td>13</td><td>1.8%</td></tr>
-<tr><td><a href="/about/versions/android-4.0.html">4.0 - 4.0.2</a></td>
- <td rowspan="2">Ice Cream Sandwich</td><td>14</td><td>0.1%</td></tr>
+ <td rowspan="2">Honeycomb</td> <td>12</td><td>0.4%</td></tr>
+<tr><td><a href="/about/versions/android-3.2.html">3.2</a></td> <!-- Honeycomb --><td>13</td><td>1.4%</td></tr>
<tr><td><a href="/about/versions/android-4.0.3.html">4.0.3 - 4.0.4</a></td>
- <!-- ICS --> <td>15</td><td>15.8%</td></tr>
-<tr><td><a href="/about/versions/android-4.1.html">4.1</a></td> <td>Jelly Bean</td><td>16</td><td>0.8%</td></tr>
+ <td>Ice Cream Sandwich</td><td>15</td><td>25.8%</td></tr>
+<tr><td><a href="/about/versions/android-4.1.html">4.1</a></td> <td>Jelly Bean</td><td>16</td><td>2.7%</td></tr>
</table>
-
</div>
-<div class="col-7" style="margin-right:0">
+<div class="col-8" style="margin-right:0">
<img alt=""
-src="http://chart.apis.google.com/chart?&cht=p&chs=460x310&chd=t:0.2,0.5,4.2,15.5,0.3,60.3,0.5,1.8,0.1,15.8,0.8&chl=Android%201.5|Android%201.6|Android%202.1|Android%202.2|Android%202.3|Android%202.3.3|Android%203.1|Android%203.2|Android%204.0|Android%204.0.3|Android%204.1&chco=c4df9b,6fad0c&chf=bg,s,00000000" />
+src="http://chart.apis.google.com/chart?&cht=p&chs=460x245&chd=t:3.5,12,54.2,1.8,25.8,2.7&chl=Eclair%20%26%20older|Froyo|Gingerbread|Honeycomb|Ice%20Cream%20Sandwich|Jelly%20Bean&chco=c4df9b,6fad0c&chf=bg,s,00000000" />
</div><!-- end dashboard-panel -->
-<p style="clear:both"><em>Data collected during a 14-day period ending on August 1, 2012</em></p>
+<p style="clear:both"><em>Data collected during a 14-day period ending on November 1, 2012</em></p>
<!--
<p style="font-size:.9em">* <em>Other: 0.1% of devices running obsolete versions</em></p>
-->
@@ -82,9 +79,9 @@ line for that version meets the y-axis on the right.</p>
Google Play within a 14-day period ending on the date indicated on the x-axis.</p>
<img alt="" height="250" width="660"
-src="http://chart.apis.google.com/chart?&cht=lc&chs=660x250&chxt=x,x,y,r&chf=bg,s,00000000&chxr=0,0,12|1,0,12|2,0,100|3,0,100&chxl=0%3A%7C02/01%7C02/15%7C03/01%7C03/15%7C04/01%7C04/15%7C05/01%7C05/15%7C06/01%7C06/15%7C07/01%7C07/15%7C08/01%7C1%3A%7C2012%7C%7C%7C%7C%7C%7C%7C%7C%7C%7C%7C%7C2012%7C2%3A%7C0%25%7C25%25%7C50%25%7C75%25%7C100%25%7C3%3A%7C0%25%7C25%25%7C50%25%7C75%25%7C100%25&chxp=0,0,1,2,3,4,5,6,7,8,9,10,11,12&chxtc=0,5&chd=t:98.6,98.4,98.4,98.6,98.5,98.6,98.8,98.7,98.9,99.1,99.1,99.2,98.6|97.6,97.5,97.6,97.8,97.8,97.9,98.1,98.1,98.3,98.5,98.6,98.7,98.1|89.9,90.3,90.8,91.4,91.8,92.1,92.5,92.7,93.1,93.5,93.9,94.2,93.9|62.0,63.7,65.2,66.8,68.6,69.9,71.5,72.6,74.0,75.2,76.5,77.8,78.4|4.0,4.1,4.3,4.6,5.5,6.5,7.6,8.2,9.4,11.0,12.8,15.6,18.1|2.6,3.0,3.2,3.5,4.5,5.5,6.6,7.4,8.7,10.4,12.3,15.1,17.6|0.7,0.8,1.1,1.3,2.3,3.3,4.4,5.3,6.7,8.4,10.4,13.2,15.8&chm=b,c3df9b,0,1,0|b,b6dc7d,1,2,0|tAndroid%202.2,5b831d,2,0,15,,t::-5|b,aadb5e,2,3,0|tAndroid%202.3.3,496c13,3,0,15,,t::-5|b,9ddb3d,3,4,0|b,91da1e,4,5,0|b,80c414,5,6,0|tAndroid%204.0.3,131d02,6,10,15,,t::-5|B,6fad0c,6,7,0&chg=7,25&chdl=Android%201.6|Android%202.1|Android%202.2|Android%202.3.3|Android%203.1|Android%203.2|Android%204.0.3&chco=add274,a0d155,94d134,84c323,73ad18,62960f,507d08" />
+src="http://chart.apis.google.com/chart?&cht=lc&chs=660x250&chxt=x,x,y,r&chf=bg,s,00000000&chxr=0,0,12|1,0,12|2,0,100|3,0,100&chxl=0%3A%7C05/01%7C05/15%7C06/01%7C06/15%7C07/01%7C07/15%7C08/01%7C08/15%7C09/01%7C09/15%7C10/01%7C10/15%7C11/01%7C1%3A%7C2012%7C%7C%7C%7C%7C%7C%7C%7C%7C%7C%7C%7C2012%7C2%3A%7C0%25%7C25%25%7C50%25%7C75%25%7C100%25%7C3%3A%7C0%25%7C25%25%7C50%25%7C75%25%7C100%25&chxp=0,0,1,2,3,4,5,6,7,8,9,10,11,12&chxtc=0,5&chd=t:98.1,98.1,98.3,98.5,98.6,98.7,98.9,98.9,99.0,99.1,99.2,99.2,99.2|92.5,92.7,93.1,93.5,93.9,94.2,94.7,94.9,95.3,95.5,95.8,96.0,96.1|71.5,72.6,74.0,75.2,76.5,77.8,79.2,80.1,81.1,82.0,82.9,83.5,84.4|7.6,8.2,9.4,11.0,12.8,15.6,18.9,21.2,23.7,25.5,27.4,28.7,31.1|6.6,7.4,8.7,10.4,12.3,15.1,18.4,20.7,23.2,25.1,27.0,28.3,30.7|4.4,5.3,6.7,8.4,10.4,13.2,16.6,19.0,21.5,23.5,25.5,26.8,29.4|0.0,0.0,0.0,0.0,0.0,0.0,0.8,0.9,1.1,1.4,1.8,2.1,3.2&chm=b,c3df9b,0,1,0|tAndroid%202.2,6c9729,1,0,15,,t::-5|b,b6dc7d,1,2,0|tAndroid%202.3.3,5b831d,2,0,15,,t::-5|b,aadb5e,2,3,0|b,9ddb3d,3,4,0|b,91da1e,4,5,0|tAndroid%204.0.3,253a06,5,4,15,,t::-5|b,80c414,5,6,0|B,6fad0c,6,7,0&chg=7,25&chdl=Android%202.1|Android%202.2|Android%202.3.3|Android%203.1|Android%203.2|Android%204.0.3|Android%204.1&chco=add274,a0d155,94d134,84c323,73ad18,62960f,507d08"/>
-<p><em>Last historical dataset collected during a 14-day period ending on August 1, 2012</em></p>
+<p><em>Last historical dataset collected during a 14-day period ending on November 1, 2012</em></p>
@@ -111,6 +108,14 @@ src="http://chart.apis.google.com/chart?&cht=lc&chs=660x250&chxt=x,x,y,r&chf=bg,
<h2 id="Screens">Screen Sizes and Densities</h2>
+
+<img alt="" style="float:right;"
+src="http://chart.googleapis.com/chart?cht=p&chs=400x250&chf=bg,s,00000000&chco=c4df9b,6fad0c&chl=Xlarge%7CLarge%7CNormal%7CSmall&chd=t%3A4.6,6.1,86.6,2.7" />
+
+
+<img alt="" style="float:right;clear:right"
+src="http://chart.googleapis.com/chart?cht=p&chs=400x250&chf=bg,s,00000000&chco=c4df9b,6fad0c&chl=ldpi%7Cmdpi%7Chdpi%7Cxhdpi&chd=t%3A2.2,18,51.1,28.7" />
+
<p>This section provides data about the relative number of active devices that have a particular
screen configuration, defined by a combination of screen size and density. To simplify the way that
you design your user interfaces for different screen configurations, Android divides the range of
@@ -132,10 +137,7 @@ of Android devices that have accessed Google Play within a 7-day period
ending on the data collection date noted below.</p>
-<div class="col-6" style="margin-left:0">
-
-
-<table>
+<table style="width:350px">
<tr>
<th></th>
<th scope="col">ldpi</th>
@@ -144,41 +146,32 @@ ending on the data collection date noted below.</p>
<th scope="col">xhdpi</th>
</tr>
<tr><th scope="row">small</th>
-<td>1.5%</td> <!-- small/ldpi -->
+<td>1.7%</td> <!-- small/ldpi -->
<td></td> <!-- small/mdpi -->
-<td>1.2%</td> <!-- small/hdpi -->
+<td>1.0%</td> <!-- small/hdpi -->
<td></td> <!-- small/xhdpi -->
</tr>
<tr><th scope="row">normal</th>
-<td>0.5%</td> <!-- normal/ldpi -->
-<td>12.1%</td> <!-- normal/mdpi -->
-<td>55.3%</td> <!-- normal/hdpi -->
-<td>17.4%</td> <!-- normal/xhdpi -->
+<td>0.4%</td> <!-- normal/ldpi -->
+<td>11%</td> <!-- normal/mdpi -->
+<td>50.1%</td> <!-- normal/hdpi -->
+<td>25.1%</td> <!-- normal/xhdpi -->
</tr>
<tr><th scope="row">large</th>
<td>0.1%</td> <!-- large/ldpi -->
-<td>2.7%</td> <!-- large/mdpi -->
+<td>2.4%</td> <!-- large/mdpi -->
<td></td> <!-- large/hdpi -->
-<td>4.5%</td> <!-- large/xhdpi -->
+<td>3.6%</td> <!-- large/xhdpi -->
</tr>
<tr><th scope="row">xlarge</th>
<td></td> <!-- xlarge/ldpi -->
-<td>4.7%</td> <!-- xlarge/mdpi -->
+<td>4.6%</td> <!-- xlarge/mdpi -->
<td></td> <!-- xlarge/hdpi -->
<td></td> <!-- xlarge/xhdpi -->
</tr>
</table>
-
-</div>
-
-<div class="col-7" style="margin-right:0">
-<img alt=""
-src="http://chart.googleapis.com/chart?cht=p&chs=400x250&chf=bg,s,00000000&chco=c4df9b,6fad0c&chl=Xlarge%20/%20mdpi|Large%20/%20ldpi|Large%20/%20mdpi|Large%20/%20xhdpi|Normal%20/%20hdpi|Normal%20/%20ldpi|Normal%20/%20mdpi|Normal%20/%20xhdpi|Small%20/%20hdpi|Small%20/%20ldpi&chd=t%3A4.7,0.1,2.7,4.5,55.3,0.5,12.1,17.4,1.2,1.5" />
-
-</div>
-
-<p style="clear:both"><em>Data collected during a 7-day period ending on August 1, 2012</em></p>
+<p style="clear:both"><em>Data collected during a 7-day period ending on October 1, 2012</em></p>
@@ -196,6 +189,10 @@ version of OpenGL ES. Note that support for one particular version of OpenGL ES
support for any lower version (for example, support for version 2.0 also implies support for
1.1).</p>
+
+<img alt="" style="float:right"
+src="http://chart.googleapis.com/chart?cht=p&chs=400x250&chco=c4df9b,6fad0c&chl=GL%201.1%20only|GL%202.0%20%26%201.1&chd=t%3A9.2,90.8&chf=bg,s,00000000" />
+
<p>To declare which version of OpenGL ES your application requires, you should use the {@code
android:glEsVersion} attribute of the <a
href="{@docRoot}guide/topics/manifest/uses-feature-element.html">{@code &lt;uses-feature&gt;}</a>
@@ -209,28 +206,21 @@ of Android devices that have accessed Google Play within a 7-day period
ending on the data collection date noted below.</p>
-<div class="col-6" style="margin-left:0">
-<table>
+<table style="width:350px">
<tr>
<th scope="col">OpenGL ES Version</th>
<th scope="col">Distribution</th>
</tr>
<tr>
<td>1.1 only</th>
-<td>9.3%</td>
+<td>9.2%</td>
</tr>
<tr>
<td>2.0 &amp; 1.1</th>
-<td>90.7%</td>
+<td>90.8%</td>
</tr>
</table>
-</div>
-<div class="col-7" style="margin-right:0">
-<img alt=""
-src="http://chart.googleapis.com/chart?cht=p&chs=400x250&chco=c4df9b,6fad0c&chl=GL%201.1%20only|GL%202.0%20%26%201.1&chd=t%3A9.3,90.7&chf=bg,s,00000000" />
-
-</div>
-<p style="clear:both"><em>Data collected during a 7-day period ending on August 1, 2012</em></p>
+<p style="clear:both"><em>Data collected during a 7-day period ending on October 1, 2012</em></p>
diff --git a/docs/html/about/versions/android-2.3.jd b/docs/html/about/versions/android-2.3.jd
index 8715973..89bf432 100644
--- a/docs/html/about/versions/android-2.3.jd
+++ b/docs/html/about/versions/android-2.3.jd
@@ -406,17 +406,6 @@ notification style.</li>
</ul>
</li>
-<li>WebView
-<ul>
-<li>New {@link
-android.webkit.WebSettings#setUseWebViewBackgroundForOverscrollBackground(
-boolean) setUseWebViewBackgroundForOverscrollBackground()} method lets a {@link
-android.webkit.WebView} specify whether to use its own background for the
-overscroll background. </li>
-</ul>
-</li>
-</ul>
-
<h3 id="extralargescreens">Extra Large Screens</h3>
<p>The platform now supports extra large screen sizes, such as those that might
@@ -707,4 +696,4 @@ declaring the attribute prevents the application from being installed on earlier
versions of the platform.</p>
<p>For more information, read <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#ApiLevels">What is API
-Level?</a></p> \ No newline at end of file
+Level?</a></p>
diff --git a/docs/html/about/versions/jelly-bean.jd b/docs/html/about/versions/jelly-bean.jd
index db56fa4..0583e12 100644
--- a/docs/html/about/versions/jelly-bean.jd
+++ b/docs/html/about/versions/jelly-bean.jd
@@ -1,29 +1,6 @@
page.title=Android 4.1 for Developers
@jd:body
-
-<!--<style type="text/css">
-#jd-content {
- max-width:1024px;
-}
-#jd-content div.screenshot {
- float:left;
- clear:left;
- padding:15px 30px 15px 0;
-}
-
-</style>
-
-<p></p>
-
-
-<div style="float:right;width:230px;padding:0px 0px 60px 34px;margin-top:-40px">
-<div>
-<img src="{@docRoot}images/android-jellybean-sm.png" xheight="402" width="280">
-</div>
-<p class="image-caption">Find out more about the Jelly Bean features for users at <a href="http://www.android.com">android.com</a></p>
-</div>-->
-
<div style="float:right;width:320px;padding:0px 0px 0px 34px;clear:both">
<div>
<img src="{@docRoot}images/jb-android-4.1.png" height="426" width="390">
@@ -35,23 +12,9 @@ page.title=Android 4.1 for Developers
improvements throughout the platform and added great new features
for users and developers. This document provides a glimpse of what's new for developers.
-<p>See the <a href="{@docRoot}about/versions/android-4.1.html">Android 4.1 APIs</a> document for a detailed look at the new developer APIs,</p>
-
-<!--
-<ul>
- <li><a href="#performance">Fast, Smooth, Responsive</a></li>
- <li><a href="#accessibility">Enhanced Accessibility</a></li>
- <li><a href="#intl">Support for International Users</a></li>
- <li><a href="#ui">Capabilities for Creating Beautiful UI</a></li>
- <li><a href="#input">New Input Types and Capabilities</a></li>
- <li><a href="#graphics">Animation and Graphics</a></li>
- <li><a href="#connectivity">New Types of Connectivity</a></li>
- <li><a href="#media">Media Capabilities</a></li>
- <li><a href="#google">Google APIs and services</a></li>
- </ul>
--->
+<p>See the <a href="{@docRoot}about/versions/android-4.1.html">Android 4.1 APIs</a> document for a detailed look at the new developer APIs.</p>
-<p>Find out more about the Jelly Bean features for users at <a href="http://www.android.com/whatsnew">www.android.com</a></p>
+<p>Find out more about the Jelly Bean features for users at <a href="http://www.android.com/whatsnew">www.android.com</a>.</p>
<h2 id="performance">Faster, Smoother, More Responsive</h2>
@@ -340,12 +303,12 @@ style="font-weight:500;">App Widgets</span> can resize automatically to fit the
<p>Smart app updates is a new feature of Google Play that introduces a better way of delivering <strong>app updates</strong> to devices. When developers publish an update, Google Play now delivers only the <strong>bits that have changed</strong> to devices, rather than the entire APK. This makes the updates much lighter-weight in most cases, so they are faster to download, save the device’s battery, and conserve bandwidth usage on users’ mobile data plan. On average, a smart app update is about <strong>1/3 the size</strong> of a full APK update.</p>
-<h3 id="gps">Google Play services (coming soon)</h3>
+<h3 id="gps">Google Play services</h3>
<p>Google Play services helps developers to <strong>integrate Google services</strong> such as authentication and Google+ into their apps delivered through Google Play.</p>
-<p>Google Play services will be automatically provisioned to end user devices by Google Play, so all you need is a <strong>thin client library</strong> in your apps.</p>
+<p>Google Play services is automatically provisioned to end user devices by Google Play, so all you need is a <strong>thin client library</strong> in your apps.</p>
<p>Because your app only contains the small client library, you can take advantage of these services without a big increase in download size and storage footprint. Also, Google Play will <strong>deliver regular updates</strong> to the services, without developers needing to publish app updates to take advantage of them.</p>
-<p>For more information about the APIs included in Google Play Services, see the <a href="http://developers.google.com/android/google-play-services/index.html">Google Play Services</a> developer page.</p>
+<p>For more information about the APIs included in Google Play Services, see the <a href="http://developers.google.com/android/google-play-services/index.html">Google Play services</a> developer page.</p>
diff --git a/docs/html/design/building-blocks/buttons.jd b/docs/html/design/building-blocks/buttons.jd
index 1c28cbe..82e2477 100644
--- a/docs/html/design/building-blocks/buttons.jd
+++ b/docs/html/design/building-blocks/buttons.jd
@@ -36,3 +36,10 @@ use borderless buttons with both icons and text. Borderless buttons are visually
than basic buttons and integrate nicely with other content.</p>
<img src="{@docRoot}design/media/buttons_borderless.png">
+
+
+<div class="note develop">
+<p><strong>Developer Guide</strong></p>
+ <p>For information about how to build and customize buttons in your app,
+ see the <a href="{@docRoot}guide/topics/ui/controls/button.html">Buttons</a> API guide.</p>
+</div>
diff --git a/docs/html/design/building-blocks/dialogs.jd b/docs/html/design/building-blocks/dialogs.jd
index 728821e..a2ece2e 100644
--- a/docs/html/design/building-blocks/dialogs.jd
+++ b/docs/html/design/building-blocks/dialogs.jd
@@ -122,6 +122,12 @@ available based on the title and the text of the action buttons.</p>
</div>
</div>
+<div class="note develop">
+<p><strong>Developer Guide</strong></p>
+ <p>For information about how to build dialogs in your app,
+ see the <a href="{@docRoot}guide/topics/ui/dialogs.html">Dialogs</a> API guide.</p>
+</div>
+
<h2 id="popups">Popups</h2>
<p>Popups are lightweight version of dialogs that require a single selection from the user. Popups
@@ -150,3 +156,10 @@ continue editing later. Toasts automatically disappear after a timeout.</p>
</div>
</div>
+
+
+<div class="note develop">
+<p><strong>Developer Guide</strong></p>
+ <p>For information about how to create toasts,
+ see the <a href="{@docRoot}guide/topics/ui/notifiers/toasts.html">Toasts</a> API guide.</p>
+</div>
diff --git a/docs/html/design/building-blocks/pickers.jd b/docs/html/design/building-blocks/pickers.jd
index e3cf642..b328df9 100644
--- a/docs/html/design/building-blocks/pickers.jd
+++ b/docs/html/design/building-blocks/pickers.jd
@@ -29,3 +29,10 @@ app helps ensure that a user's specification of a data or time input is valid an
correctly. The format of a time and date picker adjusts automatically to the locale.</p>
<img src="{@docRoot}design/media/picker_datetime.png">
+
+
+<div class="note develop">
+<p><strong>Developer Guide</strong></p>
+ <p>For information about how to create date and time pickers,
+ see the <a href="{@docRoot}guide/topics/ui/controls/pickers.html">Pickers</a> API guide.</p>
+</div>
diff --git a/docs/html/design/building-blocks/spinners.jd b/docs/html/design/building-blocks/spinners.jd
index 621a57c..279565f 100644
--- a/docs/html/design/building-blocks/spinners.jd
+++ b/docs/html/design/building-blocks/spinners.jd
@@ -35,3 +35,10 @@ tabs.</p>
<div class="figure-caption">
Spinners in the Holo Dark and Holo Light themes, in various states.
</div>
+
+
+<div class="note develop">
+<p><strong>Developer Guide</strong></p>
+ <p>For information about how to create spinners,
+ see the <a href="{@docRoot}guide/topics/ui/controls/spinner.html">Spinners</a> API guide.</p>
+</div>
diff --git a/docs/html/design/building-blocks/switches.jd b/docs/html/design/building-blocks/switches.jd
index c4dfc4b..d9cfd07 100644
--- a/docs/html/design/building-blocks/switches.jd
+++ b/docs/html/design/building-blocks/switches.jd
@@ -23,3 +23,11 @@ consider a spinner, which uses less space.</p>
<p>On/off switches toggle the state of a single settings option.</p>
<img src="{@docRoot}design/media/switches_switches.png">
+
+<div class="note develop">
+<p><strong>Developer Guide</strong></p>
+ <p>For information about how to create these different switches,
+ see the <a href="{@docRoot}guide/topics/ui/controls/checkbox.html">Checkboxes</a>,
+ <a href="{@docRoot}guide/topics/ui/controls/radiobutton.html">Radio Buttons</a>, or
+ <a href="{@docRoot}guide/topics/ui/controls/togglebutton.html">Toggle Buttons</a> API guides.</p>
+</div>
diff --git a/docs/html/design/building-blocks/tabs.jd b/docs/html/design/building-blocks/tabs.jd
index fe05f80..0a0f907 100644
--- a/docs/html/design/building-blocks/tabs.jd
+++ b/docs/html/design/building-blocks/tabs.jd
@@ -57,3 +57,10 @@ to the next/previous view, swipe left or right.</p>
permits fast view switching even on narrower screens.</p>
<img src="{@docRoot}design/media/tabs_stacked.png">
+
+
+<div class="note develop">
+<p><strong>Developer Guide</strong></p>
+ <p>For information about how to create tabs,
+ see the <a href="{@docRoot}guide/topics/ui/actionbar.html">Action Bar</a> API guide.</p>
+</div>
diff --git a/docs/html/design/building-blocks/text-fields.jd b/docs/html/design/building-blocks/text-fields.jd
index 1b10420..563f247 100644
--- a/docs/html/design/building-blocks/text-fields.jd
+++ b/docs/html/design/building-blocks/text-fields.jd
@@ -68,3 +68,11 @@ Selection mode includes:</p>
</div>
</div>
+
+
+<div class="note develop">
+<p><strong>Developer Guide</strong></p>
+ <p>For information about how to create text fields, provide auto-complete suggestions,
+ and specify the input mode,
+ see the <a href="{@docRoot}guide/topics/ui/controls/text.html">Text Fields</a> API guide.</p>
+</div>
diff --git a/docs/html/design/downloads/index.jd b/docs/html/design/downloads/index.jd
index 5f78aea..00f4467 100644
--- a/docs/html/design/downloads/index.jd
+++ b/docs/html/design/downloads/index.jd
@@ -12,7 +12,8 @@ You can also download individual files listed below.</p>
<div class="layout-content-col span-4">
<p>
- <a class="download-button" href="{@docRoot}downloads/design/Android_Design_Downloads_20120823.zip">Download All</a>
+ <a class="download-button" onClick="_gaq.push(['_trackEvent', 'Design', 'Download', 'All Design Assets']);"
+ href="{@docRoot}downloads/design/Android_Design_Downloads_20120823.zip">Download All</a>
</p>
</div>
@@ -37,10 +38,14 @@ available.</p>
<div class="layout-content-col span-4">
<p>
- <a class="download-button" href="{@docRoot}downloads/design/Android_Design_Fireworks_Stencil_20120814.png">Adobe&reg; Fireworks&reg; PNG Stencil</a>
- <a class="download-button" href="{@docRoot}downloads/design/Android_Design_Illustrator_Vectors_20120814.ai">Adobe&reg; Illustrator&reg; Stencil</a>
- <a class="download-button" href="{@docRoot}downloads/design/Android_Design_OmniGraffle_Stencil_20120814.graffle">Omni&reg; OmniGraffle&reg; Stencil</a>
- <a class="download-button" href="{@docRoot}downloads/design/Android_Design_Holo_Widgets_20120814.zip">Adobe&reg; Photoshop&reg; Sources</a>
+ <a class="download-button" onClick="_gaq.push(['_trackEvent', 'Design', 'Download', 'Fireworks Stencil']);"
+ href="{@docRoot}downloads/design/Android_Design_Fireworks_Stencil_20120814.png">Adobe&reg; Fireworks&reg; PNG Stencil</a>
+ <a class="download-button" onClick="_gaq.push(['_trackEvent', 'Design', 'Download', 'Illustrator Stencil']);"
+ href="{@docRoot}downloads/design/Android_Design_Illustrator_Vectors_20120814.ai">Adobe&reg; Illustrator&reg; Stencil</a>
+ <a class="download-button" onClick="_gaq.push(['_trackEvent', 'Design', 'Download', 'OmniGraffle Stencil']);"
+ href="{@docRoot}downloads/design/Android_Design_OmniGraffle_Stencil_20120814.graffle">Omni&reg; OmniGraffle&reg; Stencil</a>
+ <a class="download-button" onClick="_gaq.push(['_trackEvent', 'Design', 'Download', 'Photoshop Sources']);"
+ href="{@docRoot}downloads/design/Android_Design_Holo_Widgets_20120814.zip">Adobe&reg; Photoshop&reg; Sources</a>
</p>
</div>
@@ -66,7 +71,8 @@ modify to match your theme, plus source files.</p>
<div class="layout-content-col span-4">
<p>
- <a class="download-button" href="{@docRoot}downloads/design/Android_Design_Icons_20120814.zip">Action Bar Icon Pack</a>
+ <a class="download-button" onClick="_gaq.push(['_trackEvent', 'Design', 'Download', 'Action Bar Icons']);"
+ href="{@docRoot}downloads/design/Android_Design_Icons_20120814.zip">Action Bar Icon Pack</a>
</p>
</div>
@@ -91,8 +97,10 @@ requirements of UI and high-resolution screens.</p>
<div class="layout-content-col span-4">
<p>
- <a class="download-button" href="{@docRoot}downloads/design/Roboto_Hinted_20120823.zip">Roboto</a>
- <a class="download-button" href="{@docRoot}downloads/design/Roboto_Specimen_Book_20111129.pdf">Specimen Book</a>
+ <a class="download-button" onClick="_gaq.push(['_trackEvent', 'Design', 'Download', 'Roboto ZIP']);"
+ href="{@docRoot}downloads/design/Roboto_Hinted_20120823.zip">Roboto</a>
+ <a class="download-button" onClick="_gaq.push(['_trackEvent', 'Design', 'Download', 'Roboto Specemin Book']);"
+ href="{@docRoot}downloads/design/Roboto_Specimen_Book_20111129.pdf">Specimen Book</a>
</p>
</div>
@@ -115,7 +123,8 @@ shade that can be used as a complement when needed.</p>
<div class="layout-content-col span-4">
<p>
- <a class="download-button" href="{@docRoot}downloads/design/Android_Design_Color_Swatches_20120229.zip">Color Swatches</a>
+ <a class="download-button" onClick="_gaq.push(['_trackEvent', 'Design', 'Download', 'Color Swatches']);"
+ href="{@docRoot}downloads/design/Android_Design_Color_Swatches_20120229.zip">Color Swatches</a>
</p>
</div>
diff --git a/docs/html/design/patterns/accessibility.jd b/docs/html/design/patterns/accessibility.jd
index b2fbda9..2c3333f 100644
--- a/docs/html/design/patterns/accessibility.jd
+++ b/docs/html/design/patterns/accessibility.jd
@@ -69,6 +69,15 @@ page.title=Accessibility
<h4>Try it out yourself</h4>
<p>Turn on the TalkBack service in <strong>Settings > Accessibility</strong> and navigate your application using directional controls or eyes-free navigation.</p>
+
+<div class="note develop">
+<p><strong>Developer Guide</strong></p>
+ <p>For information about how to properly implement accessibility in your app, see the
+ <a href="{@docRoot}guide/topics/ui/accessibility/index.html">Accessibility</a>
+ API guide.</p>
+</div>
+
+
<h2>Checklist</h2>
<ul>
<li>Make navigation intuitive</li>
diff --git a/docs/html/design/patterns/actionbar.jd b/docs/html/design/patterns/actionbar.jd
index ba5b400..265ccde 100644
--- a/docs/html/design/patterns/actionbar.jd
+++ b/docs/html/design/patterns/actionbar.jd
@@ -293,7 +293,8 @@ files for further customization.
</p>
<p>
-<a href="{@docRoot}downloads/design/Android_Design_Icons_20120229.zip">Download the Action Bar Icon Pack</a>
+<a onClick="_gaq.push(['_trackEvent', 'Design', 'Download', 'Action Bar Icons (@actionbar page)']);"
+ href="{@docRoot}downloads/design/Android_Design_Icons_20120814.zip">Download the Action Bar Icon Pack</a>
</p>
@@ -348,6 +349,17 @@ sharing options.</p>
The Gallery app's share action provider with extended spinner for additional sharing options.
</div>
+
+<div class="note develop">
+<p><strong>Developer Guide</strong></p>
+ <p>For information about how to build an action bar
+ see the <a href="{@docRoot}guide/topics/ui/actionbar.html">Action Bar</a> API guide.
+ For information about contextual action bars, read
+ <a href="{@docRoot}guide/topics/ui/menus.html#context-menu">Creating Contextual Menus</a>.
+ </p>
+</div>
+
+
<h2 id="checklist">Action Bar Checklist</h2>
<p>When planning your split action bars, ask yourself questions like these:</p>
diff --git a/docs/html/design/patterns/app-structure.jd b/docs/html/design/patterns/app-structure.jd
index a483522..04af57b 100644
--- a/docs/html/design/patterns/app-structure.jd
+++ b/docs/html/design/patterns/app-structure.jd
@@ -86,6 +86,9 @@ important actions.</p>
through the navigation hierarchy.</li>
</ul>
+<p>For more discussion, see the <a href="{@docRoot}design/patterns/actionbar.html">Action Bar</a>
+design guide.</p>
+
</div>
<div class="layout-content-col span-8">
@@ -164,6 +167,10 @@ in view at the same time.</p>
</div>
</div>
+<p>For more discussion, see the <a href="{@docRoot}design/building-blocks/tabs.html">Tabs</a>
+design guide.</p>
+
+
<h4>Allow cutting through hierarchies</h4>
<p>Take advantage of shortcuts that allow people to reach their goals quicker. To allow top-level
invocation of actions for a data item from within list or grid views, display prominent actions
@@ -183,6 +190,12 @@ are often good reasons to act on collections of data as well.</p>
delete multiple items in the category view. Analyze which detail view actions are applicable to
collections of items. Then use multi-select to allow application of those actions to multiple items
in a category view.</p>
+
+
+<p>For more discussion, see the <a href="{@docRoot}design/patterns/selection.html">Selection</a>
+design guide.</p>
+
+
<h2 id="details">Details</h2>
<p>The detail view allows you to view and act on your data. The layout of the detail view depends on the data type being displayed, and therefore differs widely among apps.</p>
@@ -239,6 +252,10 @@ to achieve this.</p>
thumbnail view control that lets people quickly jump to specific pages.
</div>
+<p>For more discussion, see the <a href="{@docRoot}design/patterns/swipe-views.html">Swipe Views</a>
+design guide.</p>
+
+
<h2 id="checklist">Checklist</h2>
<ul>
diff --git a/docs/html/design/patterns/multi-pane-layouts.jd b/docs/html/design/patterns/multi-pane-layouts.jd
index ad888e9..e607676 100644
--- a/docs/html/design/patterns/multi-pane-layouts.jd
+++ b/docs/html/design/patterns/multi-pane-layouts.jd
@@ -86,6 +86,18 @@ you can use to adjust the layout after orientation change while keeping function
</div>
</div>
+
+<div class="note develop">
+<p><strong>Developer Guide</strong></p>
+ <p>For information about how to create multi-pane layouts, read
+ see the <a href="{@docRoot}training/basics/fragments/index.html">Building
+ a Dynamic UI with Fragments</a> and
+ <a href="{@docRoot}training/multiscreen/index.html">Designing for Multiple Screens</a>.
+ </p>
+</div>
+
+
+
<h2 id="checklist">Checklist</h2>
<ul>
diff --git a/docs/html/design/patterns/navigation.jd b/docs/html/design/patterns/navigation.jd
index 7e288ae..656e6e5 100644
--- a/docs/html/design/patterns/navigation.jd
+++ b/docs/html/design/patterns/navigation.jd
@@ -202,3 +202,15 @@ with Task B&mdash;the prior context is abandoned in favor of the user's new goal
<p>When your app registers to handle intents with an activity deep within the app's hierarchy,
refer to <a href="#into-your-app">Navigation into Your App via Home Screen Widgets and
Notifications</a> for guidance on how to specify Up navigation.</p>
+
+
+
+<div class="note develop">
+<p><strong>Developer Guide</strong></p>
+ <p>For information about how to build your app with proper Up and Back navigation, read
+ <a href="{@docRoot}training/implementing-navigation/ancestral.html">Implementing
+ Ancestral Navigation</a> and
+ <a href="{@docRoot}training/implementing-navigation/temporal.html">Implementing
+ Temporal Navigation</a>, respectively.
+ </p>
+</div>
diff --git a/docs/html/design/patterns/notifications.jd b/docs/html/design/patterns/notifications.jd
index 75bfff2..1a15a64 100644
--- a/docs/html/design/patterns/notifications.jd
+++ b/docs/html/design/patterns/notifications.jd
@@ -250,4 +250,13 @@ develop a widget that they can choose to place on their home screen.</p>
<h4>Dialogs and toasts are for feedback not notification</h4>
<p>Your app should not create a dialog or toast if it is not currently on screen. Dialogs and Toasts should only be displayed as the immediate response to the user taking an action inside of your app. For further guidance on the use of dialogs and toasts, refer to <a href="{@docRoot}design/patterns/confirming-acknowledging.html">Confirming &amp; Acknowledging</a>.</p>
</div>
-</div> \ No newline at end of file
+</div>
+
+
+
+<div class="note develop">
+<p><strong>Developer Guide</strong></p>
+ <p>For information about how to build notifications, see the
+ <a href="{@docRoot}guide/topics/ui/notifiers/notifications.html">Notifications</a>
+ API guide.</p>
+</div>
diff --git a/docs/html/design/patterns/selection.jd b/docs/html/design/patterns/selection.jd
index 612c370..e9d22e6 100644
--- a/docs/html/design/patterns/selection.jd
+++ b/docs/html/design/patterns/selection.jd
@@ -78,6 +78,13 @@ selected data items of the same kind.</p>
</div>
</div>
+<div class="note develop">
+<p><strong>Developer Guide</strong></p>
+ <p>For information about how to create a contextual action bar, read
+ <a href="{@docRoot}guide/topics/ui/menus.html#CAB">Using the contextual action mode</a>.</p>
+</div>
+
+
<h2 id="checklist">Checklist</h2>
<ul>
diff --git a/docs/html/design/patterns/settings.jd b/docs/html/design/patterns/settings.jd
index d10f0d3..fef7585 100644
--- a/docs/html/design/patterns/settings.jd
+++ b/docs/html/design/patterns/settings.jd
@@ -679,6 +679,15 @@ it doesn't mean anything to most users and would have taken up a lot of space.</
</div>
</div>
+
+<div class="note develop">
+<p><strong>Developer Guide</strong></p>
+ <p>For information about how to build a settings interface, see the
+ <a href="{@docRoot}guide/topics/ui/settings.html">Settings</a>
+ API guide.</p>
+</div>
+
+
<h2 id="checklist">Checklist</h2>
<ul>
<li><p>Make sure each item in Settings meets the criteria for belonging there.</p></li>
diff --git a/docs/html/design/patterns/swipe-views.jd b/docs/html/design/patterns/swipe-views.jd
index 252343d..daddd31 100644
--- a/docs/html/design/patterns/swipe-views.jd
+++ b/docs/html/design/patterns/swipe-views.jd
@@ -77,3 +77,13 @@ using the swipe gesture to navigate to the next/previous detail view.</p>
</ul>
</div>
</div>
+
+
+<div class="note develop">
+<p><strong>Developer Guide</strong></p>
+ <p>For information about how to create swipe views, read
+ <a href="{@docRoot}training/implementing-navigation/lateral.html">Implementing Lateral Navigation</a>.
+ </p>
+</div>
+
+
diff --git a/docs/html/design/patterns/widgets.jd b/docs/html/design/patterns/widgets.jd
index cf4c74f..54726b1 100644
--- a/docs/html/design/patterns/widgets.jd
+++ b/docs/html/design/patterns/widgets.jd
@@ -122,7 +122,15 @@ A music player widget is primarily a control widget, but also keeps the user inf
</div>
</div>
-<h3>Checklist</h3>
+
+<div class="note develop">
+<p><strong>Developer Guide</strong></p>
+ <p>For information about how to build widgets for the home screen, see the
+ <a href="{@docRoot}guide/topics/appwidgets/index.html">App Widgets</a>
+ API guide.</p>
+</div>
+
+<h2>Checklist</h2>
<ul>
<li>Focus on small portions of glanceable information on your widget. Expand on the information in your app.</li>
<li>Choose the right widget type for your purpose.</li>
diff --git a/docs/html/design/style/color.jd b/docs/html/design/style/color.jd
index 5be34ac..a7daacf 100644
--- a/docs/html/design/style/color.jd
+++ b/docs/html/design/style/color.jd
@@ -115,7 +115,8 @@ between visual components. Note that red and green may be indistinguishable to c
<p>Blue is the standard accent color in Android's color palette. Each color has a corresponding darker
shade that can be used as a complement when needed.</p>
-<p><a href="{@docRoot}downloads/design/Android_Design_Color_Swatches_20120229.zip">Download the swatches</a></p>
+<p><a onClick="_gaq.push(['_trackEvent', 'Design', 'Download', 'Color Swatches (@color page)']);"
+ href="{@docRoot}downloads/design/Android_Design_Color_Swatches_20120229.zip">Download the swatches</a></p>
<img src="{@docRoot}design/media/color_spectrum.png">
diff --git a/docs/html/design/style/devices-displays.jd b/docs/html/design/style/devices-displays.jd
index df77c1b..18550d9 100644
--- a/docs/html/design/style/devices-displays.jd
+++ b/docs/html/design/style/devices-displays.jd
@@ -36,8 +36,21 @@ ensure that your app looks great on any device.</p>
<h4>Strategies</h4>
<p>So where do you begin when designing for multiple screens? One approach is to work in the base
-standard (medium size, <acronym title="Medium density (160 dpi)">MDPI</acronym>) and scale it up or
+standard (normal size and <acronym title="Medium density (160 dpi)">MDPI</acronym>) and scale it up or
down for the other buckets. Another approach is to start with the device with the largest screen
size, and then scale down and figure out the UI compromises you'll need to make on smaller screens.</p>
-<p>For more detailed information on this topic, please visit <a href="http://developer.android.com/guide/practices/screens_support.html">Supporting Multiple
-Screens</a>.</p>
+
+<p>For details about designing layouts for larger screens, see the <a
+href="{@docRoot}design/patterns/multi-pane-layouts.html">Multi-pane Layouts</a> guide.</p>
+
+<div class="note develop">
+<p><strong>Developer Guide</strong></p>
+ <p>For information about how to build flexible layouts for multiple screen sizes and densities,
+ read
+ <a href="{@docRoot}training/multiscreen/index.html">Designing for Multiple Screens</a> and
+ <a href="{@docRoot}training/basics/fragments/index.html">Building a Dynamic UI with
+ Fragments</a>.</p>
+</div>
+
+
+
diff --git a/docs/html/design/style/iconography.jd b/docs/html/design/style/iconography.jd
index 31274c5..ce11cf7 100644
--- a/docs/html/design/style/iconography.jd
+++ b/docs/html/design/style/iconography.jd
@@ -109,9 +109,8 @@ files for further customization.
</p>
<p>
-
-<a href="{@docRoot}downloads/design/Android_Design_Icons_20120229.zip">Download the Action Bar Icon Pack</a>
-
+<a onClick="_gaq.push(['_trackEvent', 'Design', 'Download', 'Action Bar Icons (@iconography page)']);"
+ href="{@docRoot}downloads/design/Android_Design_Icons_20120814.zip">Download the Action Bar Icon Pack</a>
</p>
<div class="layout-content-row">
diff --git a/docs/html/design/style/themes.jd b/docs/html/design/style/themes.jd
index d4a6acf..e1899e3 100644
--- a/docs/html/design/style/themes.jd
+++ b/docs/html/design/style/themes.jd
@@ -38,5 +38,12 @@ desire is to have a more distinct look for your app, using one of the system the
point for your customizations is a good idea. The system themes provide a solid foundation on top
of which you can selectively implement your own visual stylings.</p>
+<div class="note develop">
+<p><strong>Developer Guide</strong></p>
+ <p>For information about how to apply themes such as Holo Light and Dark, and
+ how to build your own themes, see the
+ <a href="{@docRoot}guide/topics/ui/themes.html">Styles and Themes</a> API guide.</p>
+</div>
+
</div>
</div>
diff --git a/docs/html/design/style/typography.jd b/docs/html/design/style/typography.jd
index a699bed..427b8c6 100644
--- a/docs/html/design/style/typography.jd
+++ b/docs/html/design/style/typography.jd
@@ -18,8 +18,10 @@ italic weights by default.</p>
<img src="{@docRoot}design/media/typography_alphas.png">
-<p><a href="{@docRoot}downloads/design/Roboto_Hinted_20111129.zip">Download Roboto</a></p>
-<p><a href="{@docRoot}downloads/design/Roboto_Specimen_Book_20111129.pdf">Specimen Book</a></p>
+<p><a onClick="_gaq.push(['_trackEvent', 'Design', 'Download', 'Roboto ZIP (@typography page)']);"
+ href="{@docRoot}downloads/design/Roboto_Hinted_20120823.zip">Download Roboto</a></p>
+<p><a onClick="_gaq.push(['_trackEvent', 'Design', 'Download', 'Roboto Specimen Booke (@typography page)']);"
+ href="{@docRoot}downloads/design/Roboto_Specimen_Book_20111129.pdf">Specimen Book</a></p>
</div>
</div>
diff --git a/docs/html/develop/index.jd b/docs/html/develop/index.jd
index 14ab5d5..9c21b3a 100644
--- a/docs/html/develop/index.jd
+++ b/docs/html/develop/index.jd
@@ -23,8 +23,6 @@ position:absolute;top:50%;left:0;width:100%;z-index:-1;text-align:center;display
<a class="close" onclick="$('#player-wrapper').hide()">close video</a>
</div>
</div>
-
-
<div class="wrap">
<!-- Slideshow -->
<div class="slideshow-container slideshow-develop col-16">
@@ -32,39 +30,17 @@ position:absolute;top:50%;left:0;width:100%;z-index:-1;text-align:center;display
<a href="" class="slideshow-next">Next</a>
<div class="frame">
<ul>
- <li class="item carousel-home">
- <div class="col-8">
- <img
-src="http://4.bp.blogspot.com/-g05If_eKKRQ/UAcrVLI-OYI/AAAAAAAAAr8/AWvunVb5S-w/s320/nexus7.png"
-class="play no-shadow no-transform" />
- </div>
- <div class="content-right col-6">
- <p class="title-intro">From the blog:</p>
- <h2>Getting Your App Ready for Jelly Bean and Nexus 7</h2>
- <p>For many people, their first taste of Jelly Bean will be on the beautiful
- Nexus 7. While most applications will run just fine on Nexus 7, who wants
- their app to be just fine? Here are some tips for optimizing your application
- to make the most of this device.</p>
- <p><a
-href="http://android-developers.blogspot.com/2012/07/getting-your-app-ready-for-jelly-bean.html" class="button">Read
-more</a></p>
- </div>
- </li>
- <li class="item carousel-home">
+ <li class="item carousel-home">
<div class="col-8">
<img
-src="http://1.bp.blogspot.com/-6qyjPxTuzv0/T6lde-Oq_fI/AAAAAAAABXc/zle7OFEGP44/s400/fddns%2Bcopy.png"
+src="http://4.bp.blogspot.com/-lfjzgG5Dqrk/UHMThRtpRwI/AAAAAAAABpk/h4d3nsmkgPM/s400/mint.png"
class="play no-shadow no-transform" />
</div>
<div class="content-right col-6">
- <p class="title-intro">From the blog:</p>
- <h2>Using DialogFragments</h2>
- <p>In this post, I'll show how to use DialogFragments with the <a
-href="http://developer.android.com/reference/android/support/v4/app/DialogFragment.html">v4 support
-library</a> (for backward compatibility on pre-Honeycomb devices) to show a simple edit dialog and
-return a result to the calling Activity using an interface.</p>
+ <h2>Building Great Apps for Tablets</h2>
+ <p>Tablets are a growing part of the Android installed base and they offer new opportunities for user engagement and monetization. If you are targeting tablets, check out the <strong>Tablet App Quality Checklist</strong> for tips and techniques on how to deliver a great app experience for tablet users. </p>
<p><a
-href="http://android-developers.blogspot.com/2012/05/using-dialogfragments.html" class="button">Read
+href="/distribute/googleplay/quality/tablet.html" class="button">Read
more</a></p>
</div>
</li>
@@ -73,29 +49,44 @@ more</a></p>
<img
src="http://1.bp.blogspot.com/-6K1kfNOdek8/T72bXvtTSQI/AAAAAAAABmw/kYzmJt0_328/s1600/google-play-subscriptions.png" class="play"></div>
<div class="content-right col-6">
- <p class="title-intro">From the blog:</p>
- <h2>In-app Subscriptions in Google Play</h2>
- <p>Starting today, developers can use In-app Billing to sell monthly or annual
-subscriptions from inside of their apps. All subscriptions are auto-renewing, for every app and game
-and every type of subscription product.</p>
+ <h2>In-app Subscriptions with Trials</h2>
+ <p>You can now set up a <strong>free trial period</strong> for any Google Play in-app subscription, making it easy for users try your subscriber content before automatically converting to a full subscription. Free trials give you a new way to bring users into your products and engage them effectively. </p>
<p><a class="button"
-href="http://android-developers.blogspot.com/2012/05/in-app-subscriptions-in-google-play.html">Read
+href="http://dirkbd.mtv:8809/guide/google/play/billing/billing_subscriptions.html#trials">Read
more</a></p>
</div>
</li>
<li class="item carousel-home">
<div class="col-8">
<img
-src="{@docRoot}images/home/developers_live.png" class="play"></div>
+src="http://2.bp.blogspot.com/-MgN5DnoO5XU/UHYGYzTcAOI/AAAAAAAABs4/jTS7sKkfBcM/s1600/pubsites.png" class="play"></div>
<div class="content-right col-6">
- <h2>Learn what great apps are made of</h2>
- <p>Every week we host a live broadcast in which we review a collection of apps and games
- nominated by the creators. It's no-holds-barred and we tell you exactly what is flawed or
- fantastic in each app and how to make improvements.</p>
- <p><a href="" class="button" onclick="$('ul#DevelopersLive li:first
-a').click();return false;">Watch the latest review</a></p>
+ <p class="title-intro">From the blog:</p>
+ <h2>New Google Play Developer Console</h2>
+ <p>All developers can now try the <strong>new Google Play Developer Console</strong>. With a streamlined publishing flow, new language options, and new user ratings statistics, you’ll have better tools for delivering great Android apps that delight users.</p>
+ <p><a
+href="http://android-developers.blogspot.com/2012/10/new-google-play-developer-console.html" class="button">Read
+more</a></p>
</div>
</li>
+ <li class="item carousel-home">
+ <div class="col-8">
+ <img
+src="http://4.bp.blogspot.com/-g05If_eKKRQ/UAcrVLI-OYI/AAAAAAAAAr8/AWvunVb5S-w/s320/nexus7.png"
+class="play no-shadow no-transform" />
+ </div>
+ <div class="content-right col-6">
+ <p class="title-intro">From the blog:</p>
+ <h2>Getting Your App Ready for Jelly Bean and Nexus 7</h2>
+ <p>For many people, their first taste of Jelly Bean will be on the beautiful
+ <strong>Nexus 7 tablet</strong>. Most applications will run just fine on Nexus 7, but who wants
+ their app to be just fine? Here are some tips for optimizing your app
+ to make the most of this device.</p>
+ <p><a
+href="http://android-developers.blogspot.com/2012/07/getting-your-app-ready-for-jelly-bean.html" class="button">Read
+more</a></p>
+ </div>
+ </li>
</ul>
</div>
</div>
@@ -111,53 +102,47 @@ a').click();return false;">Watch the latest review</a></p>
<div class="feed-container">
<div class="feed-frame">
<!-- DEVELOPER NEWS -->
- <ul>
- <li><a href="http://android-developers.blogspot.com/2012/06/android-sdk-tools-revision-20.html">
- <div class="feed-image" style="background:url('http://1.bp.blogspot.com/-Kp1qE5du6l8/T-xurIjfPgI/AAAAAAAABAM/kuWQwPgi0rw/s640/newactivity+(1).png') no-repeat 0 0">
- </div>
- <h4>Android SDK Tools, Revision 20</h4>
- <p>Along with the preview of the Android 4.1 (Jelly Bean) platform, we launched Android SDK Tools R20 and ADT 20.0.0. Here are a few things...</p>
- </a></li>
- <li><a href="http://android-developers.blogspot.com/2012/04/faster-emulator-with-better-hardware.html">
- <div class="feed-image" style="background:url('../images/emulator-wvga800l.png') no-repeat 0 0">
- </div>
- <h4>A Faster Emulator with Better...</h4>
- <p>Today we’re thrilled to announce several significant improvements to the emulator, including a dramatic...</p>
- </a></li>
- <li><a href="http://android-developers.blogspot.com/2012/04/android-c2dm-client-login-key.html">
- <div class="feed-image" style="background:url('../images/develop/auth-code.png') no-repeat 0 0">
- </div>
- <h4>Android C2DM — Client Login key...</h4>
- <p>In the upcoming weeks, some of the older Client
- Login authentication keys will expire. If you generated the token you’re...</p>
- </a></li>
- <li><a href="http://android-developers.blogspot.com/2012/04/accessibility-are-you-serving-all-your.html">
- <div class="feed-image">
- </div>
- <h4>Accessibility</h4>
- <p>We recently published some new resources to help developers make their Android applications more accessible... </p>
- </a></li>
-
- </ul>
+ <ul>
+ <li><a href="http://android-developers.blogspot.com/2012/10/google-play-seller-support-in-india.html">
+ <div class="feed-image" style="background:url('http://4.bp.blogspot.com/-ekT-9XQi0YY/UH7WT2XjSdI/AAAAAAAABwc/fI5QaPi7QEk/s320/india-apps1.png') no-repeat 0 0"></div>
+ <h4>Google Play Seller Support in India</h4>
+ <p>Developers in India can sell paid applications, in-app products, and subscriptions in Google Play, with monthly payouts to their local bank accounts...</p>
+ </a></li>
+ <li><a href="http://android-developers.blogspot.com/2012/09/google-play-services-and-oauth-identity.html">
+ <div class="feed-image" style="background:url('https://lh4.ggpht.com/7z4NItEg-X21zvFGAarKonk-VaysBYthJ30u1JjaQ0-5fjyHNawnmoNeG--4FCACog=w124') no-repeat 0 0"></div>
+ <h4>Google Play services and OAuth Tools</h4>
+ <p>The rollout of Google Play services to all Android 2.2+ devices worldwide is now complete, and all of those devices now have new tools for working with OAuth 2.0 tokens...</p>
+ </a></li>
+ <li><a href="http://android-developers.blogspot.com/2012/08/creating-your-own-spelling-checker.html">
+ <div class="feed-image" style="background:url('http://2.bp.blogspot.com/-QKlztEdM1aA/UC1bH6Kv4UI/AAAAAAAAADo/fQS8-EfBYIQ/s320/spell-check-framed-new.png') no-repeat 0 0"></div>
+ <h4>Creating A Spelling Checker Service</h4>
+ <p>If you are an IME developer, the Spelling Checker framework gives you a great way to provide an even better experience for your users...</p>
+ </a></li>
+ <li><a href="http://android-developers.blogspot.com/2012/04/accessibility-are-you-serving-all-your.html">
+ <div class="feed-image"></div>
+ <h4>Accessibility</h4>
+ <p>We recently published some new resources to help developers make their Android applications more accessible... </p>
+ </a></li>
+ </ul>
<!-- FEATURED DOCS -->
- <ul>
- <li><a href="{@docRoot}guide/google/play/billing/index.html">
- <h4>Google Play In-app Billing</h4>
- <p>In-app Billing is a Google Play service that lets you sell digital content from inside your applications. You can sell products as standard in-app products (one-time purchase) or with subscriptions (recurring...</p>
- </a></li>
- <li><a href="{@docRoot}guide/topics/providers/contacts-provider.html">
- <h4>Contacts Provider</h4>
- <p>The Contacts Provider is a powerful and flexible Android component that manages the device's central repository of data about people. You can use it to build powerful social features...</p>
- </a></li>
- <li><a href="{@docRoot}training/efficient-downloads/index.html">
- <h4>Transferring Data Without Draining the Battery</h4>
- <p>This training class demonstrates the best practices for scheduling and executing downloads using techniques such as caching, polling, and prefetching.</p>
- </a></li>
- <li><a href="{@docRoot}training/backward-compatible-ui/index.html">
- <h4>Creating Backward-Compatible UIs</h4>
- <p>This training class demonstrates how to use UI components and APIs available in newer versions of Android in a backward-compatible way, ensuring that your application still runs on previous versions...</p>
- </a></li>
- </ul>
+ <ul>
+ <li><a href="{@docRoot}distribute/googleplay/spotlight/tablets.html">
+ <h4>Tablet Stories</h4>
+ <p>More developers are investing in a full tablet experience for their apps. Here are some stories from developers who are seeing real results as they expand their offering to include Android tablets. </p>
+ </a></li>
+ <li><a href="{@docRoot}distribute/googleplay/quality/core.html">
+ <h4>Core App Quality Guidelines</h4>
+ <p>This document helps you assess basic aspects of quality in your app through a compact set of core app quality criteria and associated tests. All Android apps should meet these criteria.</p>
+ </a></li>
+ <li><a href="{@docRoot}guide/topics/ui/notifiers/notifications.html">
+ <h4>Updated Notifications API Guide</h4>
+ <p>The Notifications API Guide is updated to include information about building Jelly Bean rich notifications using the Support Library APIs for backwards-compatibility.</p>
+ </a></li>
+ <li><a href="{@docRoot}guide/topics/ui/dialogs.html">
+ <h4>Updated Dialogs API Guide</h4>
+ <p>The Dialogs API Guide now shows to use DialogFragment class, a simpler way to manage your dialogs and embed them in alternative layouts.</p>
+ </a></li>
+ </ul>
</div>
</div>
</div> <!-- /news and feature feed -->
@@ -169,10 +154,10 @@ a').click();return false;">Watch the latest review</a></p>
</ul>
<div class="feed-container">
<div class="feed-frame">
- <ul id="DevelopersLive">
- </ul>
- <ul id="VideoPlaylists">
- </ul>
+ <ul id="DevelopersLive">
+ </ul>
+ <ul id="VideoPlaylists">
+ </ul>
</div>
</div>
</div>
diff --git a/docs/html/distribute/distribute_toc.cs b/docs/html/distribute/distribute_toc.cs
index f11e965..ad3121c 100644
--- a/docs/html/distribute/distribute_toc.cs
+++ b/docs/html/distribute/distribute_toc.cs
@@ -28,9 +28,7 @@
<li><a href="<?cs var:toroot ?>distribute/googleplay/publish/preparing.html">
<span class="en">Publishing Checklist</span>
</a></li>
- <li><a href="<?cs var:toroot ?>distribute/googleplay/strategies/app-quality.html">
- <span class="en">App Quality</span>
- </a></li>
+
</ul>
</li>
@@ -72,13 +70,33 @@
<span class="en">Linking to Your Products</a></li>
<li><a href="<?cs var:toroot ?>distribute/googleplay/promote/badges.html">
<span class="en">Google Play Badges</a></li>
- <li><a href="<?cs var:toroot ?>distribute/googleplay/promote/brand.html">
- <span class="en">Brand Assets and Guidelines</a></li>
<li><a href="<?cs var:toroot ?>distribute/promote/device-art.html">
<span class="en">Device Art Generator</a></li>
+ <li><a href="<?cs var:toroot ?>distribute/googleplay/promote/brand.html">
+ <span class="en">Brand Guidelines</a></li>
</ul>
</li>
+
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="<?cs var:toroot ?>distribute/googleplay/quality/index.html">
+ <span class="en">App Quality</span></a>
+ </div>
+ <ul>
+ <li><a href="<?cs var:toroot ?>distribute/googleplay/quality/core.html">
+ <span class="en">Core App Quality</span>
+ </a></li>
+ <li><a href="<?cs var:toroot ?>distribute/googleplay/quality/tablet.html">
+ <span class="en">Tablet App Quality</span>
+ </a></li>
+ <li><a href="<?cs var:toroot ?>distribute/googleplay/strategies/app-quality.html">
+ <span class="en">Improving App Quality</span>
+ </a></li>
+
+ </ul>
+ </li>
+
+
<!--
<li class="nav-section">
<div class="nav-section-header"><a href="<?cs var:toroot ?>distribute/googleplay/after.html">
@@ -92,17 +110,17 @@
</li>
-->
-<!--
<li class="nav-section">
- <div class="nav-section-header"><a href="<?cs var:toroot ?>distribute/googleplay/strategies/index.html">
- <span class="en">Strategies</span></a>
+ <div class="nav-section-header"><a href="<?cs var:toroot ?>distribute/googleplay/spotlight/index.html">
+ <span class="en">Spotlight</span></a>
</div>
<ul>
- <li><a href="<?cs var:toroot ?>distribute/googleplay/strategies/featuring.html">Featuring</a></li>
- <li><a href="<?cs var:toroot ?>distribute/googleplay/strategies/app-quality.html">App Quality</a></li>
+ <li><a href="<?cs var:toroot ?>distribute/googleplay/spotlight/tablets.html">
+ <span class="en">Tablet Stories</span>
+ </a></li>
</ul>
</li>
--->
+
<li class="nav-section">
<div class="nav-section-header empty">
<a href="<?cs var:toroot ?>distribute/open.html">
diff --git a/docs/html/distribute/googleplay/about/monetizing.jd b/docs/html/distribute/googleplay/about/monetizing.jd
index 4980eda..47d5266 100644
--- a/docs/html/distribute/googleplay/about/monetizing.jd
+++ b/docs/html/distribute/googleplay/about/monetizing.jd
@@ -42,7 +42,7 @@ manages the application download.</p>
<h3 id="payment-methods">Convenient payment options</h3>
<p>Users can purchase your products on Google Play using several convenient
-payment methods&mdash;credit cards, Direct Carrier Billing, and Google Play balance.</p>
+payment methods&mdash;credit cards, Direct Carrier Billing, gift cards, and Google Play balance.</p>
<p><span style="font-weight:500">Credit card</span> is the most common method of payment. Users can pay using any credit card
that they’ve registered in Google Play. To make it easy for users to get started,
@@ -52,8 +52,9 @@ registration is offered as a part of initial device setup process.</p>
<div class="sidebox">
<h2>Payment methods on Google Play</h2>
<ul>
-<li>Credit Card</li>
+<li>Credit card</li>
<li>Direct Carrier Billing</li>
+<li>Gift card</li>
<li>Google Play balance (stored value)</li>
</ul>
</div>
@@ -75,7 +76,7 @@ games, or other content.
<p>The payment methods available to users worldwide may vary, based on
location, carrier network, and other factors.</p>
-<div style="float:left;margin-right:2em;margin-top:1em;width:220px;">
+<div style="float:left;margin-right:2em;margin-top:3em;margin-bottom:1em;width:220px;">
<img src="{@docRoot}images/gp-subs.png" style="width:220px">
</div>
@@ -96,7 +97,7 @@ targeted advertising.</p>
<ul>
<li>Free (no charge to download)</li>
<li>Priced (user charged before download)</li>
-<li>In-App products and subscriptions</li>
+<li>In-app products and subscriptions</li>
</ul>
</div>
</div>
@@ -110,6 +111,9 @@ could set a nominal price for your app at download and sell value add-ons,
gameplay levels, and upgrades as in-app products. The only restriction is that
free apps must remain free (to download) for the life of the app.</p>
+<p>For details about in-app products or subscriptions,
+see <a href="/guide/google/play/billing/index.html">Google Play In-app Billing</a>.</p>
+
<h2 id="buyer-currency" style="margin-top:1.5em;">Flexible pricing in the currencies of your customers</h2>
<div style="float:right;margin-left:18px;border:1px solid #DDD;">
diff --git a/docs/html/distribute/googleplay/about/visibility.jd b/docs/html/distribute/googleplay/about/visibility.jd
index 47fa56e..38fb395 100644
--- a/docs/html/distribute/googleplay/about/visibility.jd
+++ b/docs/html/distribute/googleplay/about/visibility.jd
@@ -16,7 +16,7 @@ of users at Google's scale. </p>
<p>Google Play is the premier store for distributing Android apps. It’s
preinstalled on more than 400 million devices worldwide, a number growing by
more than a million every day. Android users have downloaded
-more than <strong style="text-wrap:none;">15 billion apps</strong> from Google
+more than <strong style="text-wrap:none;">25 billion apps</strong> from Google
Play, growing at a rate of more than 1.5 billion per month.</p>
<p>When you publish on Google Play, you put your apps in front of Android's huge
diff --git a/docs/html/distribute/googleplay/promote/badges.jd b/docs/html/distribute/googleplay/promote/badges.jd
index de12e2a..90e8c0d 100644
--- a/docs/html/distribute/googleplay/promote/badges.jd
+++ b/docs/html/distribute/googleplay/promote/badges.jd
@@ -1,11 +1,20 @@
page.title=Google Play Badges
@jd:body
-<p>Google Play badges give you an officially branded way of promoting your app to Android users. Use the form below to quickly create badges to link users to your products from web pages, ads, reviews, and more. See <a href="linking.html">Linking to your products</a> for more ways to bring users to your apps.</p>
+<p>Google Play badges allow you to promote your app with official branding in your
+online ads, promotional materials, or anywhere else you want a link to your app.</p>
-<p>Input your app's package or your publisher name, choose the style, size, and language, and click "Build my badge". The form will generate code for an embbeded button that links to your app's product page or a list of your apps. </p>
+<p>In the form below,
+input your app's package name or publisher name, choose the badge style,
+click <em>Build my badge</em>, then paste the HTML into your web content.</p>
-<p>Note that you should not modify the Google Play badges after generating them, including colors, size, text, and logo. See <a href="http://www.android.com/branding.html">Android Brand Guidelines</a> for more information.</p>
+<p>If you're creating a promotional web page for your app, you should also use the
+<a href="{@docRoot}distribute/promote/device-art.html">Device Art Generator</a>, which quickly
+wraps your screenshots in real device artwork.</p>
+
+<p>For guidelines when using the Google Play badge and other brand assets,
+see the <a href="{@docRoot}distribute/googleplay/promote/brand.html">Brand
+Guidelines</a>.</p>
<style type="text/css">
@@ -34,11 +43,13 @@ div.button-row {
}
div.button-row input {
- vertical-align:120%;
+ vertical-align:middle;
+ margin:0 5px 0 0;
}
#jd-content div.button-row img {
margin: 0;
+ vertical-align:middle;
}
</style>
@@ -46,7 +57,7 @@ div.button-row input {
<script type="text/javascript">
// variables for creating 'try it out' demo button
-var imagePath = "http://www.android.com/images/brand/"
+var imagePath = "http://developer.android.com/images/brand/"
var linkStart = "<a href=\"http://play.google.com/store/";
var imageStart = "\">\n"
+ " <img alt=\"";
@@ -77,6 +88,9 @@ function buildButton(form) {
$("#button-preview").html(linkStart + "apps/details?id=" + form["package"].value
+ imageStart + altText + imageSrc
+ selectedValue + imageEnd);
+
+ // Send the event to Analytics
+ _gaq.push(['_trackEvent', 'Distribute', 'Create Google Play Badge', 'Package ' + selectedValue]);
} else if (form["publisher"].value != "Example, Inc.") {
$("#preview").show();
$("#snippet").show().html(linkStartCode + "search?q=pub:" + form["publisher"].value
@@ -85,6 +99,9 @@ function buildButton(form) {
$("#button-preview").html(linkStart + "search?q=pub:" + form["publisher"].value
+ imageStart + altText + imageSrc
+ selectedValue + imageEnd);
+
+ // Send the event to Analytics
+ _gaq.push(['_trackEvent', 'Distribute', 'Create Google Play Badge', 'Publisher ' + selectedValue]);
} else {
alert("Please enter your package name or publisher name");
}
@@ -167,28 +184,29 @@ $(document).ready(function() {
onclick="return clearLabel('publisher','Example, Inc.');">clear</a>
<br/><br/>
+
<div class="button-row">
- <input type="radio" name="buttonStyle" value="get_it_on_play_logo_small" id="ns" checked="checked" />
- <label for="ns"><img src="http://www.android.com/images/brand/get_it_on_play_logo_small.png"
-alt="Get it on Google Play (small)" /></label>
+ <input type="radio" name="buttonStyle" value="en_app_rgb_wo_45" id="ws" checked="checked" />
+ <label for="ws"><img src="{@docRoot}images/brand/en_app_rgb_wo_45.png"
+alt="Android app on Google Play (small)" /></label>
&nbsp;&nbsp;&nbsp;&nbsp;
- <input type="radio" name="buttonStyle" value="get_it_on_play_logo_large" id="nm" />
- <label for="nm"><img src="http://www.android.com/images/brand/get_it_on_play_logo_large.png"
-alt="Get it on Google Play (large)" /></label>
+ <input type="radio" name="buttonStyle" value="en_app_rgb_wo_60" id="wm" />
+ <label for="wm"><img src="{@docRoot}images/brand/en_app_rgb_wo_60.png"
+alt="Android app on Google Play (large)" /></label>
</div>
<div class="button-row">
- <input type="radio" name="buttonStyle" value="android_app_on_play_logo_small" id="ws" />
- <label for="ws"><img src="http://www.android.com/images/brand/android_app_on_play_logo_small.png"
-alt="Android app on Google Play (small)" /></label>
+ <input type="radio" name="buttonStyle" value="en_generic_rgb_wo_45" id="ns" />
+ <label for="ns"><img src="{@docRoot}images/brand/en_generic_rgb_wo_45.png"
+alt="Get it on Google Play (small)" /></label>
&nbsp;&nbsp;&nbsp;&nbsp;
- <input type="radio" name="buttonStyle" value="android_app_on_play_logo_large" id="wm" />
- <label for="wm"><img src="http://www.android.com/images/brand/android_app_on_play_logo_large.png"
-alt="Android app on Google Play (large)" /></label>
+ <input type="radio" name="buttonStyle" value="en_generic_rgb_wo_60" id="nm" />
+ <label for="nm"><img src="{@docRoot}images/brand/en_generic_rgb_wo_60.png"
+alt="Get it on Google Play (large)" /></label>
</div>
- <input type="button" onclick="return buildButton(this.parentNode)" value="Build my badge"
-style="padding:5px" />
+ <input onclick="return buildButton(this.parentNode);"
+ type="button" value="Build my badge" style="padding:10px" />
<br/>
</form>
diff --git a/docs/html/distribute/googleplay/promote/brand.jd b/docs/html/distribute/googleplay/promote/brand.jd
index 76ed619..cb6bf48 100644
--- a/docs/html/distribute/googleplay/promote/brand.jd
+++ b/docs/html/distribute/googleplay/promote/brand.jd
@@ -1,174 +1,173 @@
-page.title=Brand Assets, Icons, and Guidelines
+page.title=Brand Guidelines
@jd:body
-<p>We encourage you to use the Android and Google Play brands in your
-promotional materials. You can use the icons and other assets on this page in
-any way you want, provided that you follow the guidelines described below.</p>
-<h2 id="brand-android">Android Brand</h2>
-<div>
- <div style="float:right;width:50%;padding:1.5em;">
- <img alt="" src="{@docRoot}images/brand/droid.gif">
- </div>
+<p>We encourage you to use the Android and Google Play brands with your Android app
+promotional materials. You can use the icons and other assets on this page
+provided that you follow the guidelines described below.</p>
- <div style="width:45%;">
- <h4>01/ Android Robot</h4>
+<h2 id="brand-android">Android</h2>
- <p> Can be used, reproduced, and modified freely in marketing
- communications. Our standard color value for print is PMS 376C. Our online hex
- color is <span id= "android-green">#A4C639</span>.</p>
+ <p>The following are guidelines for the Android brand
+ and related assets.</p>
+
- <p>When using the Android Robot or any modification of it, proper attribution is
- required under the terms of the Creative Commons Attribution license. For more
- details on proper attribution, please see the <a
- href="{@docRoot}license.html#attribution">Content License</a> document. </p>
+ <h4 style="clear:right">Android in text</h4>
+
+ <div style="float:right;clear:right;width:200px;margin:0 0 20px 30px">
+ <img alt="" src="{@docRoot}images/brand/mediaplayer.png">
</div>
-<div>
-
-<div style="clear:both">
- <div style="float:right;width:50%;padding:1.5em;">
- <img alt="" src="{@docRoot}images/brand/logo_android.gif">
+ <ul>
+ <li>Android&trade; should have a trademark symbol the first time it appears in a creative.</li>
+ <li>Android should always be capitalized and is never plural or possessive.</li>
+ <li>"Android" by itself cannot be used in the name of an application name or accessory product.
+Instead use "for Android."
+ <ul>
+ <li><span style="color:red">Incorrect</span>: "Android MediaPlayer"</li>
+ <li><span style="color:green">Correct</span>: "MediaPlayer for Android"</li>
+ </ul>
+ <p>If used with your logo, "for Android" needs to be smaller in size than your logo.
+ First instance of this use should be followed by a TM symbol, "for Android&trade;".</p>
+ </li>
+ <li>Android may be used as a descriptor, as long as it is followed by a proper generic term.
+ <ul>
+ <li><span style="color:red">Incorrect</span>: "Android MediaPlayer" or "Android XYZ app"</li>
+ <li><span style="color:green">Correct</span>: "Android features" or "Android applications"</li>
+ </ul>
+ </li>
+ </ul>
+
+ <p>Any use of the Android name needs to include this
+ attribution in your communication:</p>
+ <blockquote><em>Android is a trademark of Google Inc.</em></blockquote></p>
+
+
+ <h4>Android robot</h4>
+
+ <div style="float:right;width:200px;margin-left:30px">
+ <img alt="" src="{@docRoot}images/brand/Android_Robot_100.png"
+ style="margin-left:50px">
+ <p style="text-align:center">
+ <a href="{@docRoot}images/brand/Android_Robot_100.png">100x118</a> |
+ <a href="{@docRoot}images/brand/Android_Robot_200.png">200x237</a><br>
+ <a href="{@docRoot}images/brand/Android_Robot_outlined.ai">Illustrator (.ai)</a></p>
</div>
- <div style="width:45%;">
- <h4>02/ Android Logo</h4>
+ <p>The Android robot can be used, reproduced, and modified freely in marketing
+ communications. The color value for print is PMS 376C and the online hex
+ color is <span style="color:#A4C639">#A4C639</span>.</p>
- <p>The Android logo may not be used.</p>
- </div>
-<div>
+ <p>When using the Android Robot or any modification of it, proper attribution is
+ required under the terms of the <a href="http://creativecommons.org/licenses/by/3.0/">Creative
+Commons Attribution</a> license:</p>
+
+ <blockquote><em>The Android robot is reproduced or modified from work created and shared by Google and
+used according to terms described in the Creative Commons 3.0 Attribution License.</em></blockquote>
+
+ <p>You may not file trademark applications incorporating the Android robot logo or
+derivatives thereof. We want to ensure that the Android robot remains available
+for all to use.</p>
-<div style="clear:both">
- <div style="float:right;width:50%;padding:1.5em;">
- <img alt="" src="{@docRoot}images/brand/norad.gif">
- </div>
- <div style="width:45%;">
- <h4>03/ Android Custom Typeface</h4>
+<h4 style="clear:right">Android logo</h4>
- <p>The custom typeface may not be used.</p>
- </div>
-<div>
+<div style="float:right;width:210px;margin-left:30px;margin-top:-10px">
+ <img alt="" src="{@docRoot}images/brand/android_logo_no.png">
+</div>
-<div style="clear:both">
- <div style="float:right;width:50%;padding:1.5em;">
- <img alt="" src="{@docRoot}images/brand/mediaplayer.gif">
- </div>
+<p>The Android logo may not be used. Nor can this be used with the Android robot.</p>
+<p>The custom typeface may not be used.</p>
- <div style="width:45%;">
- <h4>04/ Android in Official Names</h4>
-<p>Any name with 'Android' alone may not be used in a name without permission. Any name
- with 'Droid' alone may not be used in a name.</p>
-
- <p>The word 'Android' may be used only as a descriptor, 'for Android'. If used with your
- logo, 'for Android' needs to be smaller in size than your logo. First instance of this
- use should be followed by a TM symbol, 'for Android™'.</p>
-
- <p>If you are not sure you meet these criteria, <a href=
- "http://services.google.com/permissions/application">please contact us</a>. </p>
- </div>
-<div>
-<div style="clear:both">
- <div style="float:right;width:50%;padding:1.5em;">
- <img alt="" src="{@docRoot}images/brand/learnmore.gif">
- </div>
- <div style="width:45%;">
- <h4>05/ Android in Messaging</h4>
- <p>
- May be used in text as a descriptor, as long as it is followed by a proper generic term
- (e.g. "Android™ application"). First instance of this use should be followed by a TM
- symbol.
- </p>
+
+<h2 id="brand-google_play">Google Play</h2>
+
+
+ <p>The following are guidelines for the Google Play brand
+ and related assets.</p>
+
+<h4>Google Play in text</h4>
+
+<p>Always include a TM symbol on the first or most prominent instance of Google Play&trade;
+in text.</p>
+
+<p>When referring to the mobile experience, use "Google Play" unless the text is clearly
+instructional for the user. For example, a marketing headline might read "Download our
+games on Google Play&trade;," but instructional text would read "Download our games using the Google
+Play&trade; Store app."
+
+ <p>Any use of the Google Play name or icon needs to include this
+ attribution in your communication:</p>
+
+<blockquote><em>Google Play is a trademark of Google Inc.</em></blockquote>
+
+
+ <div style="float:right;width:96px;margin-left:30px;margin-top:-20px">
+ <img src="{@docRoot}images/brand/Google_Play_Store_96.png" alt="">
+ <p style="text-align:center">
+ <a href="{@docRoot}images/brand/Google_Play_Store_48.png">48x48</a> |
+ <a href="{@docRoot}images/brand/Google_Play_Store_96.png">96x96</a><br>
+ <a href="{@docRoot}images/brand/Google_Play_Store.ai">Illustrator (.ai)</a>
+ </p>
</div>
-<div>
- <p class="caution"><strong>Note: Any usage of #04 or #05 needs to include footer attribution in your
- communication:</strong><br /><span style="margin-left:1.5em">
- "Android is a trademark of Google Inc."</span>
- </p>
-
-<h2 id="brand-google_play">Google Play Brand</h2>
-
-<div style="clear:both">
- <div style="float:right;width:50%;padding:1.5em;">
- <p>
- <img alt="Google Play logo" src="http://www.android.com/images/brand/google_play_logo_450.png">
- </p>
- <p>
- <img alt="Get it on Google Play badge, large" src=
- "http://www.android.com/images/brand/get_it_on_play_logo_large.png"><br>
- Download: <a href="http://www.android.com/images/brand/get_it_on_play_logo_small.png">Small</a> | <a href=
- "http://www.android.com/images/brand/get_it_on_play_logo_large.png">Large</a>
- </p>
- <p>
- <img alt="Android App on Google Play badge, large" src=
- "http://www.android.com/images/brand/android_app_on_play_logo_large.png"><br>
- Download: <a href="http://www.android.com/images/brand/android_app_on_play_logo_small.png">Small</a> |
- <a href="http://www.android.com/images/brand/android_app_on_play_large.png">Large</a>
- </p>
- </div>
+
+<h4>Google Play Store icon</h4>
+
+<p>You may use the Google Play Store icon, but you may not modify it.</p>
+
+<p>As mentioned above, when referring to the Google Play Store app in copy, use the full name:
+"Google Play Store." However, when labelling the Google Play Store icon directly, it's OK to use
+"Play Store" without "Google" (which is how the icon is labelled on a device).</p>
+
- <div style="width:45%;">
- <h4>06/ <em>Get it on Google Play</em> Badge
- </h4>
- <p>
- The "Get it on Google Play" and "Android App on Google Play" logos are badges that you
- can use on your web site and promotional materials, to point to your products on Google
- Play.
- </p>
- <p>
- The logos are available in two sizes:
- </p>
- <ul>
- <li>Large: 60(h) x 172(w)</li>
- </li>
- <li>Small 45(h) x 129(w)
- </li>
- </ul>
- <p>
- Guidelines for usage:
- </p>
- <ul>
- <li>Never separate the phrase “Get it on Google Play” or "Android App on Google Play"
- from the Google Play logo, and do not change the color, proportions, spacing or any
- other aspect of the logo.
- </li>
- </ul>
- </div>
-
- <ul>
- <li>When used online, the badge logo should be used to direct users to:
- <ul>
- <li>The Google Play landing page: <br />
- <span style="margin-left:1em;">http://play.google.com</span>
- </li>
- <li>The Google Play Apps landing page: <br />
- <span style="margin-left:1em;">http://play.google.com/store/apps</span>
- </li>
- <li>A list of products that include your company name, for example, <br />
- <span style="margin-left:1em;">http://play.google.com/store/search?q=<em>yourCompanyName</em></span>
- </li>
- <li>A list of products published by you, for example,<br />
- <span style="margin-left:1em;">http://play.google.com/store/search?q=<em>publisherName</em></span>
- </li>
- <li>A specific app product details page within Google Play, for example,<br />
- <span style="margin-left:1em;">http://play.google.com/store/apps/details?id=<em>packageName</em></span>
- </li>
- </ul>
- </li>
- <li>When used alongside logos for other application marketplaces, the Google Play logo
- should be of equal or greater size</li>
+<h4>Google Play badge</h4>
+
+ <div style="float:right;clear:right;width:172px;margin-left:30px">
+ <img src="{@docRoot}images/brand/en_app_rgb_wo_60.png" alt="">
+ <p style="text-align:center">
+ <a href="{@docRoot}images/brand/en_app_rgb_wo_45.png">129x45</a> |
+ <a href="{@docRoot}images/brand/en_app_rgb_wo_60.png">172x60</a><br>
+ <a href="{@docRoot}images/brand/en_app_rgb_wo.ai">Illustrator (.ai)</a></p>
+ </div>
+
+ <div style="float:right;clear:right;width:172px;margin-left:30px">
+ <img src="{@docRoot}images/brand/en_generic_rgb_wo_60.png" alt="">
+ <p style="text-align:center">
+ <a href="{@docRoot}images/brand/en_generic_rgb_wo_45.png">129x45</a> |
+ <a href="{@docRoot}images/brand/en_generic_rgb_wo_60.png">172x60</a><br>
+ <a href="{@docRoot}images/brand/en_generic_rgb_wo.ai">Illustrator (.ai)</a></p>
+ </div>
+
+ <p>The "Get it on Google Play" and "Android App on Google Play" logos are badges that you
+ can use on your web site and promotional materials, to point to your products on Google
+ Play.</p>
+
+ <ul>
+ <li>Do not modify the color, proportions, spacing or any other aspect of the badge image.
+ </li>
+ <li>When used alongside logos for other application marketplaces, the Google Play logo
+ should be of equal or greater size.</li>
+ <li>When used online, the badge should link to either:
+ <ul>
+ <li>A list of products published by you, for example:<br />
+ <span style="margin-left:1em;">http://play.google.com/store/search?q=<em>publisherName</em></span>
+ </li>
+ <li>A specific app product details page within Google Play, for example:<br />
+ <span style="margin-left:1em;">http://play.google.com/store/apps/details?id=<em>packageName</em></span>
+ </li>
+ </ul>
+ </li>
</ul>
-
- <p>For details on all the ways that you can link to your product details page in Google Play,
- see <a href="{@docRoot}distribute/googleplay/promote/linking.html">Linking to your products</a></p>
- <p>For convenience, if you are using the logos online, you can use the
- <a href="{@docRoot}distribute/googleplay/promote/badges.html">badge generator</a>
- to create the appropriate markup and link to your apps.</p>
+ <p>For your convenience, you can use the
+ <a href="{@docRoot}distribute/googleplay/promote/badges.html">Googe Play badge generator</a>
+ to create badges that link to your apps on Google Play.</p>
+
+ <p>For details on all the ways that you can link to your product details page in Google Play,
+ see <a href="{@docRoot}distribute/googleplay/promote/linking.html">Linking to your products</a></p>
-<h2>Other Brands</h2>
-<p>Any other brands or icons depicted on this site are <em>not</em> are the property of their
-respective owners and usage is reserved. You must seek the developer for appropriate permission to use them.</p>
+<p>If you are not sure you meet these criteria, <a href=
+ "http://services.google.com/permissions/application">please contact us</a>. </p>
diff --git a/docs/html/distribute/googleplay/promote/linking.jd b/docs/html/distribute/googleplay/promote/linking.jd
index 4a1b198..46607f5 100644
--- a/docs/html/distribute/googleplay/promote/linking.jd
+++ b/docs/html/distribute/googleplay/promote/linking.jd
@@ -5,7 +5,7 @@ page.title=Linking to Your Products
<div class="sidebox">
<a href="badges.html">
<img alt="Get it on Google Play"
- src="http://www.android.com/images/brand/get_it_on_play_logo_small.png" />
+ src="{@docRoot}images/brand/en_app_rgb_wo_45.png" />
</a>
<p>For a link that includes the Google Play brand icon, check out the <a href="badges.html">Badges</a> page. </p>
</div>
diff --git a/docs/html/distribute/googleplay/publish/preparing.jd b/docs/html/distribute/googleplay/publish/preparing.jd
index 6ea0f53..a3538a9 100644
--- a/docs/html/distribute/googleplay/publish/preparing.jd
+++ b/docs/html/distribute/googleplay/publish/preparing.jd
@@ -6,20 +6,21 @@ page.title=Publishing Checklist for Google Play
<ol>
<li><a href="#process">1. Understand the publishing process</a></li>
<li><a href="#policies">2. Understand Google Play policies</a></li>
-<li><a href="#rating">3. Determine your content rating</a></li>
-<li><a href="#countries">4. Determine country distribution</a></li>
-<li><a href="#size">5. Confirm the app's overall size</a></li>
-<li><a href="#compatibility">6. Confirm app compatibility ranges</a></li>
-<li><a href="#free-priced">7. Decide on free or priced</a></li>
-<li><a href="#inapp-billing">8. Consider In-app Billing</a></li>
-<li><a href="#pricing">9. Set prices for your apps</a></li>
-<li><a href="#localize">10. Start localization</a></li>
-<li><a href="#localize">11. Prepare promotional graphics</a></li>
-<li><a href="#apk">12. Build the release-ready APK</a></li>
-<li><a href="#product-page">13. Complete the product details</a></li>
-<li><a href="#badges">14. Use Google Play badges and links to your promotional campaigns</a></li>
-<li><a href="#final-checks">15. Final checks and publishing</a></li>
-<li><a href="#support">16. Support users after launch</a></li>
+<li><a href="#core-app-quality">3. Test for Core App Quality</a></li>
+<li><a href="#rating">4. Determine your content rating</a></li>
+<li><a href="#countries">5. Determine country distribution</a></li>
+<li><a href="#size">6. Confirm the app's overall size</a></li>
+<li><a href="#compatibility">7. Confirm app compatibility ranges</a></li>
+<li><a href="#free-priced">8. Decide on free or priced</a></li>
+<li><a href="#inapp-billing">9. Consider In-app Billing</a></li>
+<li><a href="#pricing">10. Set prices for your apps</a></li>
+<li><a href="#localize">11. Start localization early</a></li>
+<li><a href="#graphics">12. Prepare promotional graphics</a></li>
+<li><a href="#apk">13. Build the release-ready APK</a></li>
+<li><a href="#product-page">14. Complete the product details</a></li>
+<li><a href="#badges">15. Use Google Play badges</a></li>
+<li><a href="#final-checks">16. Final checks and publishing</a></li>
+<li><a href="#support">17. Support users after launch</a></li>
</ol>
</div></div>
@@ -86,7 +87,39 @@ violations, termination of your developer account. </p>
</tr>
</table>
-<h2 id="rating">3. Determine your app's content rating</h2>
+<h2 id="core-app-quality">3. Test for Core App Quality</h2>
+
+<p>Before you publish an app on Google Play, it's important to make sure that
+it meets the basic quality expectations for all Android apps, on all of the devices that you
+are targeting. You can check your app's quality by setting up a test
+environment and testing the app against a short set of <strong>core app quality criteria</strong>.
+For complete information, see the <a
+href="{@docRoot}distribute/googleplay/quality/core.html">Core App Quality Guidelines</a>.
+</p>
+
+<p>If your app is targeting tablet devices, make sure that it delivers a rich, compelling
+experience to your tablet customers. See the <a
+href="{@docRoot}distribute/googleplay/quality/tablet.html">Tablet App Quality Checklist</a>
+for recommendations on ways to optimize your app for tablets.</p>
+
+<table>
+<tr>
+<td><p>Related resources:</p>
+<ul style="margin-top:-.5em;">
+<li><strong><a
+href="{@docRoot}distribute/googleplay/quality/core.html">Core App Quality
+Guidelines</a></strong> &mdash; A set of core quality criteria that all Android
+apps should meet on all targeted devices.</li>
+<li><strong><a
+href="{@docRoot}distribute/googleplay/quality/tablet.html">Tablet App Quality
+Checklist</a></strong> &mdash; A set recommendations for delivering the best
+possible experience to tablet users.</li>
+</ul>
+</td>
+</tr>
+</table>
+
+<h2 id="rating">4. Determine your app's content rating</h2>
<p>Google Play requires you to set a content rating for your app, which informs
Google Play users of its maturity level. Before you publish, you should confirm
@@ -115,7 +148,7 @@ are required in your app binary.</p>
</tr>
</table>
-<h2 id="countries">4. Determine country distribution</h2>
+<h2 id="countries">5. Determine country distribution</h2>
<p>Google Play lets you control what countries and territories your app is
distributed to. For widest reach and the largest potential customer base, you
@@ -149,7 +182,7 @@ launch target date.</p>
</tr>
</table>
-<h2 id="size">5. Confirm the app's overall size</h2>
+<h2 id="size">6. Confirm the app's overall size</h2>
<p>The overall size of your app can affect its design and how you publish it on
Google Play. Currently, the maximum size for an APK published on Google Play is
@@ -180,7 +213,7 @@ creating your release-ready APK.</p>
</tr>
</table>
-<h2 id="compatibility">6. Confirm the app's platform and screen compatibility ranges</h2>
+<h2 id="compatibility">7. Confirm the app's platform and screen compatibility ranges</h2>
<p>Before publishing, it's important to make sure that your app is designed to
run properly on the Android platform versions and device screen sizes that you
@@ -217,7 +250,7 @@ charts.</p>
</tr>
</table>
-<h2 id="free-priced">7. Decide whether your app will be free or priced</h2>
+<h2 id="free-priced">8. Decide whether your app will be free or priced</h2>
<p>On Google Play, you can publish apps as free to download or priced. Free apps
can be downloaded by any Android user in Google Play.
@@ -249,7 +282,7 @@ you need set up a Checkout Merchant Account before you can publish.</p>
</tr>
</table>
-<h2 id="inapp-billing">8. Consider using In-app Billing</h2>
+<h2 id="inapp-billing">9. Consider using In-app Billing</h2>
<p>Google Play <a href="{@docRoot}guide/google/play/billing/index.html">In-app
Billing</a> lets you sell digital content in your applications. You can use the
@@ -275,7 +308,7 @@ before creating your release-ready APK.</p>
</tr>
</table>
-<h2 id="pricing">9. Set prices for your products</h2>
+<h2 id="pricing">10. Set prices for your products</h2>
<p>If your app is priced or you will sell in-app products, Google Play lets you
set prices for your products in a variety of currencies, for users in markets
@@ -308,7 +341,7 @@ in all available currencies through the Developer Console.</p>
</tr>
</table>
-<h2 id="localize">10. Start localization</h2>
+<h2 id="localize">11. Start localization</h2>
<p>With your country targeting in mind, it's a good idea to assess your localization
needs and start the work of localizing well in advance of your target
@@ -344,7 +377,7 @@ when you upload assets and configure your product details.</p>
</tr>
</table>
-<h2 id="graphics">11. Prepare promotional graphics</h2>
+<h2 id="graphics">12. Prepare promotional graphics</h2>
<p>When you publish on Google Play, you can supply a variety of high-quality
graphic assets to showcase your app or brand. After you publish, these appear on
@@ -375,7 +408,7 @@ advance of your target publishing date. </p>
</tr>
</table>
-<h2 id="apk">12. Build and upload the release-ready APK</h2>
+<h2 id="apk">13. Build and upload the release-ready APK</h2>
<p>When you are satisfied that your app meets your UI, compatibility, and
quality requirements, you can build the release-ready version of the app. The
@@ -407,7 +440,7 @@ recent version before publishing. </p>
</tr>
</table>
-<h2 id="product-page">13. Complete the app's product details</h2>
+<h2 id="product-page">14. Complete the app's product details</h2>
<p>On Google Play, your app's product information is shown to users on its
product details page, the page that users visit to learn more about your app and
@@ -431,6 +464,10 @@ page in the Developer Console. As you collect the information and assets for the
page, make sure that you can enter or upload it to the Developer Console, until
the page is complete and ready for publishing. </p>
+<p>If your app is targeting tablet devices, make sure to include at least one screen
+shot of the app running on a tablet, and highlight your app's support for tablets
+in the app description, release notes, promotional campaigns, and elsewhere.</p>
+
<table>
<tr>
<td><p>Related resources:</p>
@@ -444,7 +481,7 @@ the page is complete and ready for publishing. </p>
</tr>
</table>
-<h2 id="badges">14. Use Google Play badges and links in your promotional
+<h2 id="badges">15. Use Google Play badges and links in your promotional
campaigns</h2>
<p>Google Play badges give you an officially branded way of promoting your app
@@ -473,7 +510,7 @@ and reviews, or any other channel available.</p>
</tr>
</table>
-<h2 id="final-checks">15. Final checks and publishing</h2>
+<h2 id="final-checks">16. Final checks and publishing</h2>
<p>When you think you are ready to publish, sign in to the Developer Console and take a few moments for a few
final checks:</p>
@@ -511,7 +548,7 @@ final checks:</p>
</table>
-<h2 id="support">16. Support users after launch</h2>
+<h2 id="support">17. Support users after launch</h2>
<p>After you publish an app or an app update, it's crucial for you to support
your customers. Prompt and courteous support can provide a better experience for
diff --git a/docs/html/distribute/googleplay/quality/core.jd b/docs/html/distribute/googleplay/quality/core.jd
new file mode 100644
index 0000000..c1ef68c
--- /dev/null
+++ b/docs/html/distribute/googleplay/quality/core.jd
@@ -0,0 +1,804 @@
+page.title=Core App Quality Guidelines
+@jd:body
+
+<div id="qv-wrapper"><div id="qv">
+<h2>Quality Criteria</h2>
+ <ol>
+ <li><a href="#ux">Design and Interaction</a></li>
+ <li><a href="#fn">Functionality</a></li>
+ <li><a href="#ps">Performance and Stability</a></li>
+ <li><a href="#listing">Google Play</a></li>
+
+ </ol>
+
+ <h2>Testing</h2>
+ <ol>
+ <li><a href="#test-environment">Setting Up a Test Environment</a></li>
+ <li><a href="#tests">Test Procedures</a></li>
+ </ol>
+
+ <h2>You Should Also Read</h2>
+ <ol>
+ <li><a href="{@docRoot}distribute/googleplay/quality/tablet.html">Tablet App Quality Checklist</a></li>
+ <li><a href="{@docRoot}distribute/googleplay/strategies/app-quality.html">Improving App Quality</a></li>
+ </ol>
+
+
+</div>
+</div>
+
+<p>App quality directly influences the long-term success of your app&mdash;in
+terms of installs, user rating and reviews, engagement, and user retention.
+Android users expect high-quality apps, even more so if they've spent money on
+them.</p>
+
+<p>This document helps you assess basic aspects of quality in your app through a
+compact set of <em>core app quality criteria</em> and associated tests. All
+Android apps should meet these criteria.</p>
+
+<p>Before publishing your app, make sure to test it against these criteria to
+ensure that it functions well on many devices, meets Android standards for
+navigation and design, and is prepared for promotional opportunities in the
+Google Play Store. Your testing will go well beyond what's described here&mdash;the
+purpose of this document is to specify the essential characteristics
+of basic quality so that you can include them in your test plans.</p>
+
+<p>If your app is targeting tablet devices, make sure that it delivers a rich,
+compelling experience to your tablet customers. See the <a
+href="{@docRoot}distribute/googleplay/quality/tablet.html">Tablet App Quality
+Checklist</a> for recommendations on ways to optimize your app for tablets.</p>
+
+
+<h2 id="ux">Visual Design and User Interaction</h2>
+
+<p>These criteria ensure that your app provides standard Android visual design
+and interaction patterns where appropriate, for a consistent and intuitive
+user experience.</p>
+
+<table>
+ <tr>
+ <th style="width:2px;">
+ Area
+ </th>
+ <th style="width:54px;">
+ ID
+ </th>
+
+
+ <th>
+ Description
+ </th>
+ <th style="width:54px;">
+ Tests
+ </th>
+ </tr>
+ <tr id="UX-B1">
+ <td>Standard design</td>
+ <td>
+ UX-B1
+ </td>
+ <td>
+ <p style="margin-bottom:.5em;">App follows <a href="{@docRoot}design/index.html">Android Design</a> guidelines and uses common <a href="{@docRoot}design/patterns/index.html">UI patterns and icons</a>:</p>
+ <ol style="margin-bottom:.5em;list-style-type:lower-alpha">
+ <li>App does not redefine the expected function of a system icon (such as the Back button).</li>
+ <li>App does not replace a system icon with a completely different icon if it triggers the standard UI behavior. </li>
+ <li>If the app provides a customized version of a standard system icon, the icon strongly resembles the system icon and triggers the standard system behavior.</li>
+ <li>App does not redefine or misuse Android UI patterns, such that icons or behaviors could be misleading or confusing to users.</li>
+ </ol>
+ </td>
+ <td><a href="#core">CR-all</a></td>
+ </tr>
+
+
+ <tr>
+ <td rowspan="3">Navigation</td>
+ <td id="UX-N1">
+ UX-N1
+ </td>
+
+ <td>
+ <p>App supports standard system <a href="{@docRoot}design/patterns/navigation.html">Back button navigation</a> and does not make use of any custom, on-screen "Back button" prompts.</p>
+ </td>
+ <td><a href="#core">CR-3</a></td>
+ </tr>
+ <tr>
+ <td id="UX-N2">
+ UX-N2
+ </td>
+ <td>
+ <p>All dialogs are dismissable using the Back button.</p>
+ </td>
+ <td><a href="#core">CR-3</a></td>
+ </tr>
+
+ <tr id="UX-N3">
+ <td>
+ UX-N3
+ </td>
+ <td>
+ Pressing the Home button at any point navigates to the Home screen of the device.
+ </td>
+ <td><a href="#core">CR-1</a></td>
+ </tr>
+ <tr id="UX-S1">
+ <td rowspan="2">Notifications</td>
+ <td>
+ UX-S1
+ </td>
+ <td>
+ <p style="margin-bottom:.5em;">Notifications follow Android Design <a href="{@docRoot}design/patterns/notifications.html">guidelines</a>. In particular:</p>
+ <ol style="margin-bottom:.5em;list-style-type:lower-alpha">
+ <li>Multiple notifications are stacked into a single notification object, where possible.</li>
+ <li>Notifications are persistent only if related to ongoing events (such as music playback or a phone call).</li>
+ <li>Notifications do not contain advertising or content unrelated to the core function of the app, unless the user has opted in.</li>
+ </ol>
+
+ </td>
+ <td><a href="#core">CR-11</a></td>
+ </tr>
+ <tr id="UX-S2">
+
+ <td>
+ UX-S2
+ </td>
+
+ <td>
+
+ <p style="margin-bottom:.5em;">App uses notifications only to:</p>
+ <ol style="margin-bottom:.5em;list-style-type:lower-alpha">
+ <li>Indicate a change in context relating to the user personally (such as an incoming message), or</li>
+ <li>Expose information/controls relating to an ongoing event (such as music playback or a phone call).</li>
+ </ol>
+ </td>
+ <td><a href="#core">CR-11</a></td>
+ </tr>
+
+ </table>
+
+<table>
+<tr>
+<td><p>Related resources:</p>
+<ul style="margin-top:-.5em;">
+<li><strong><a href="{@docRoot}design/index.html">Android Design</a></strong> &mdash; Overview of design and user experience best practices for Android apps. </li>
+<li><strong><a href="{@docRoot}design/patterns/navigation.html">Navigation with Back and Up</a></strong> &mdash; Android Design document describing standard navigation patterns. </li>
+<li><strong><a href="{@docRoot}design/patterns/actionbar.html">Action Bar</a></strong> &mdash; Android Design document describing how to use the Action Bar. </li>
+<li><strong><a href="{@docRoot}design/style/iconography.html">Iconography</a></strong> &mdash; Android Design describing how to use various types of icons.</li>
+<li><strong><a href="{@docRoot}design/patterns/notifications.html">Notifications</a></strong> &mdash; Android Design document describing how to design and use notifications. </li>
+</ul>
+</td>
+</tr>
+</table>
+
+<h2 id="fn">Functionality</h2>
+
+<p>These criteria ensure that your app provides expected functional behavior with the appropriate level of permissions. </p>
+
+<table>
+ <tr>
+ <th style="width:2px;">
+ Area
+ </th>
+ <th style="width:54px;">
+ ID
+ </th>
+
+
+ <th>
+ Description
+ </th>
+ <th style="width:54px;">
+ Tests
+ </th>
+ </tr>
+
+ <tr id="FN-P1">
+ <td rowspan="2">Permissions</td>
+ <td>
+ FN-P1
+ </td>
+ <td>App requests only the <em>absolute minimum</em> permissions that it needs to support core functionality.
+ </td>
+ <td rowspan="2"><a href="#core">CR-11</a></td>
+ </tr>
+ <tr id="FN-P2">
+ <td>
+ FN-P2
+ </td>
+ <td><p style="margin-bottom:.5em;">App does not request permissions to access sensitive data (such as Contacts or the System Log) or services that can cost the user money (such as the Dialer or SMS), unless related to a core capability of the app.
+ </td>
+ </tr>
+ <tr id="FN-L1">
+ <td>Install location</td>
+ <td>
+ FN-L1
+ </td>
+ <td>
+ <p style="margin-bottom:.5em;">App functions normally when installed on SD card (if supported by app).</p>
+
+ <p style="margin-bottom:.25em;">Supporting installation to SD card is recommended for most large apps (10MB+). See the <a href="{@docRoot}guide/topics/data/install-location.html">App Install Location</a> developer guide for information about which types of apps should support installation to SD card.</p>
+ </td>
+
+ <td><a href="#SD-1">SD-1</a>
+ </td>
+ </tr>
+ <tr id="FN-A1">
+ <td rowspan="4">Audio</td>
+ <td>
+ FN-A1
+ </td>
+
+ <td>
+ Audio does not play when the screen is off, unless this is a core feature (for example, the app is a music player).
+ </td>
+ <td><a href="#core">CR-7</a></td>
+ </tr>
+ <tr id="FN-A2">
+ <td>
+ FN-A2
+ </td>
+ <td>
+ Audio does not <a href="http://android-developers.blogspot.com/2011/11/making-android-games-that-play-nice.html">play behind the lock screen</a>, unless this is a core feature.
+ </td>
+ <td><a href="#core">CR-8</a></td>
+ </tr>
+ <tr id="FN-A3">
+ <td>
+ FN-A3
+ </td>
+ <td>
+ Audio does not play on the home screen or over another app, unless this is a core feature.
+ </td>
+ <td><a href="#core">CR-1, <br />CR-2</a></td>
+ </tr>
+ <tr id="FN-A4">
+ <td>
+ FN-A4
+ </td>
+ <td>
+ Audio resumes when the app returns to the foreground, or indicates to the user that playback is in a paused state.
+ </td>
+ <td><a href="#core">CR-1, CR-8</a></td>
+ </tr>
+ <tr id="FN-U1">
+ <td rowspan="3">UI and Graphics</td>
+ <td>
+ FN-U1
+ </td>
+ <td>
+ <p style="margin-bottom:.5em;">App supports both landscape and portrait orientations (if possible).</em></p>
+ <p style="margin-bottom:.25em;">Orientations expose largely the same features and actions and preserve functional parity.
+ Minor changes in content or views are acceptable.</p>
+ </td>
+ <td><a href="#core">CR-5</a></td>
+ </tr>
+ <tr id="FN-U2">
+ <td>
+ FN-U2
+ </td>
+ <td>
+ <p style="margin-bottom:.5em;">App uses the whole screen in both orientations and does not letterbox to account for orientation changes.</em></p>
+ <p style="margin-bottom:.25em;">Minor letterboxing to compensate for small variations in screen geometry is acceptable.</p>
+ </td>
+ <td><a href="#core">CR-5</a></td>
+ </tr>
+ <tr id="FN-U3">
+ <td>
+ FN-U3
+ </td>
+ <td>
+ <p style="margin-bottom:.5em;">App correctly handles rapid transitions between display orientations without rendering problems.</p>
+ </td>
+ <td><a href="#core">CR-5</a></td>
+ </tr>
+
+ <tr id="FN-S1">
+ <td rowspan="2">User/app state</td>
+ <td>
+ FN-S1
+ </td>
+ <td>
+ <p style="margin-bottom:.5em;">App should not leave any services running when the app is in the background, unless related to a core capability of the app.</p>
+ <p style="margin-bottom:.25em;">For example, the app should not leave services running to maintain a network connection for notifications, to maintain a Bluetooth connection, or to keep the GPS powered-on.</p>
+ </td>
+ <td><a href="#core">CR-6</a></td>
+ </tr>
+ <tr id="FN-S2">
+ <td>
+ FN-S2
+ </td>
+ <td>
+ <p style="margin-bottom:.5em;">App correctly preserves and restores user or app state.</p>
+ <p style="margin-bottom:.25em;">App preserves user or app state when leaving the foreground and prevents accidental data loss due to back-navigation and other state changes. When returning to the foreground, the app must restore the preserved state and any significant stateful transaction that was pending, such as changes to editable fields, game progress, menus, videos, and other sections of the app or game.</p>
+ <ol style="margin-bottom:.25em;list-style-type:lower-alpha">
+ <li>When the app is resumed from the Recents app switcher, the app returns the user to the exact state in which it was last used.</li>
+ <li>When the app is resumed after the device wakes from sleep (locked) state, the app returns the user to the exact state in which it was last used.</li>
+ <li>When the app is relaunched from Home or All Apps, the app restores the app state as closely as possible to the previous state.</li>
+ <li>On Back keypresses, the app gives the user the option of saving any app or user state that would otherwise be lost on back-navigation.</li>
+ </ol>
+ </td>
+ <td><a href="#core">CR-1, CR-3, CR-5</a></td>
+ </tr>
+
+</table>
+
+<table>
+<tr>
+<td><p>Related resources:</p>
+<ul style="margin-top:-.5em;">
+<li><strong><a href="http://android-developers.blogspot.com/2011/11/making-android-games-that-play-nice.html">Making Android Apps that Play Nice</a></strong> &mdash; Developer blog post discussing the audio lifecycle and expected audio behaviors for Android apps. </li>
+<li><strong><a href="{@docRoot}guide/components/tasks-and-back-stack.html">Tasks and Back Stack</a></strong> &mdash; Developer guide describing how to implement back-navigation.</li>
+<li><strong><a href="{@docRoot}training/basics/activity-lifecycle/recreating.html">Recreating an Activity</a></strong> &mdash; Android Training class the shows how to preserve and restore app state.</li>
+
+</ul>
+</td>
+</tr>
+</table>
+
+
+<h2 id="ps">Performance and Stability</h2>
+
+<p>To ensure a high user rating, your app needs to perform well and stay
+responsive on all of the devices and form factors and screens that it is
+targeting. These criteria ensure that the app provides the basic performance,
+stability, and responsiveness expected by users.</p>
+
+<table>
+ <tr>
+ <th style="width:2px;">
+ Area
+ </th>
+ <th style="width:54px;">
+ ID
+ </th>
+ <th>
+ Description
+ </th>
+ <th style="width:54px;">
+ Tests
+ </th>
+ </tr>
+ <tr id="PS-S1">
+ <td>Stability</td>
+ <td>
+ PS-S1
+ </td>
+ <td>
+ App does not crash, force close, freeze, or otherwise function abnormally on any targeted device.
+ </td>
+ <td><a href="#core">CR-all</a>, <a href="#SD-1">SD-1</a>, <a href="#HA-1">HA-1</a></td>
+ </tr>
+
+ <tr id="PS-P1">
+ <td rowspan="2">Performance</td>
+ <td>
+ PS-P1
+ </td>
+ <td>
+ App loads quickly or provides onscreen feedback to the user (a progress indicator or similar cue) if the app
+ takes longer than two seconds to load.
+ </td>
+ <td>
+ <a href="#core">CR-all</a>, <a href="#SD-1">SD-1</a>
+ </td>
+ </tr>
+ <tr id="PS-P2">
+
+ <td>
+ PS-P2
+ </td>
+ <td>
+ With StrictMode enabled (see <a href="#strictmode">StrictMode Testing</a>, below), no red flashes (performance warnings from StrictMode) are visible when exercising the app, including
+ during game play, animations and UI transitions, and any other part of the app.
+ </td>
+ <td>
+ <a href="#PM-1">PM-1</a>
+ </td>
+ </tr>
+ <tr id="PS-M1">
+ <td>Media</td>
+ <td>
+ PS-M1
+ </td>
+ <td>
+ Music and video playback is smooth, without crackle, stutter, or other artifacts, during normal app usage and load.
+ </td>
+ <td>
+ <a href="#core">CR-all</a>, <a href="#SD-1">SD-1</a>, <a href="#HA-1">HA-1</a>
+ </td>
+ </tr>
+ <tr id="PS-V1">
+ <td rowspan="2">Visual quality</td>
+ <td>
+ PS-V1
+ </td>
+ <td>
+ <p style="margin-bottom:.5em;">App displays graphics, text, images, and other UI elements without noticeable distortion, blurring, or pixelation.</p>
+
+ <ol style="margin-bottom:.5em;list-style-type:lower-alpha">
+ <li>App provides high-quality graphics for all targeted screen sizes and form factors, including for <a href="{@docRoot}distribute/googleplay/quality/tablet.html">larger-screen devices such as tablets</a>.</li>
+ <li>No aliasing at the edges of menus, buttons, and other UI elements is visible.</li>
+ </ol>
+ </td>
+ <td rowspan="2"><a href="#core">CR-all</a></td>
+ </tr>
+ <tr id="PS-V2">
+ <td>
+ PS-V2
+ </td>
+ <td>
+ <p style="margin-bottom:.5em;">App displays text and text blocks in an acceptable manner. </p>
+
+ <ol style="margin-bottom:.5em;list-style-type:lower-alpha">
+ <li>Composition is acceptable in all supported form factors, including for larger-screen devices such as tablets.</li>
+ <li>No cut-off letters or words are visible.</li>
+ <li>No improper word wraps within buttons or icons are visible.</li>
+ <li>Sufficient spacing between text and surrounding elements.</li>
+ </ol>
+ </td>
+
+ </tr>
+</table>
+
+<table>
+<tr>
+<td><p>Related resources:</p>
+<ul style="margin-top:-.5em;">
+<li><strong><a href="http://android-developers.blogspot.com/2010/12/new-gingerbread-api-strictmode.html">Using StrictMode</a></strong> &mdash; Developer blog post discussing StrictMode and how to use it for performance monitoring in your app. </li>
+<li><strong><a href="{@docRoot}guide/practices/responsiveness.html">Designing for Responsiveness</a></strong> &mdash; Developer guide describing best practices for keeping your app responsive.</li>
+<li><strong><a href="http://android-developers.blogspot.com/2010/07/multithreading-for-performance.html">Multithreading for Performance</a></strong> &mdash; Developer blog post discussing ways to improve performance through multi-threading.</li>
+</ul>
+</td>
+</tr>
+</table>
+
+
+<h2 id="listing">Google Play</h2>
+
+<p>To launch your app successfully on Google Play, raise its ratings, and make
+sure that it is ready for promotional activities in the store, follow the
+criteria below.</p>
+
+<table>
+ <tr>
+ <th style="width:2px;">
+ Area
+ </th>
+ <th style="width:54px;">
+ ID
+ </th>
+ <th>
+ Description
+ </th>
+ <th style="width:54px;">
+ Tests
+ </th>
+ </tr>
+ <tr id="GP-P1">
+ <td rowspan="2">Policies</td>
+ <td>
+ GP-P1
+ </td>
+ <td>
+ App strictly adheres to the terms of the <a href="http://play.google.com/about/developer-content-policy.html">Google Play Developer Content Policy</a> and does not offer inappropriate content, does not use intellectual property or brand of others, and so on.
+ </td>
+ <td>
+ <a href="#gp">GP-all</a>
+ </td>
+ </tr>
+
+ <tr id="GP-P2">
+ <td>
+ GP-P2
+ </td>
+ <td>
+ <p style="margin-bottom:.5em;">App maturity level is set appropriately, based on the
+ <a href="http://support.google.com/googleplay/android-developer/bin/answer.py?hl=en&answer=188189">Content Rating Guidelines</a>.</p>
+
+ <p style="margin-bottom:.25em;">Especially, note that apps that request permission to use the device location cannot be given the maturity level "Everyone". </p>
+ </td>
+ <td>
+ <a href="#gp">GP-1</a>
+ </td>
+ </tr>
+
+ <tr id="GP-D1">
+ <td rowspan="3">App&nbsp;Details Page</td>
+ <td>
+ GP-D1
+ </td>
+ <td>
+ <p style="margin-bottom:.5em;">App feature graphic follows the guidelines outlined in this
+ <a href="http://android-developers.blogspot.com/2011/10/android-market-featured-image.html">blog post</a>. Make sure that:</p>
+
+ <ol style="margin-bottom:.5em;list-style-type:lower-alpha">
+ <li>The app listing includes a high-quality feature graphic.</li>
+ <li>The feature graphic does not contain device images, screenshots, or small text that will be illegible when scaled down and displayed on the smallest screen size that your app is targeting.</li>
+ <li>The feature graphic does not resemble an advertisement.</li>
+ </ol>
+
+
+ </td>
+
+ <td>
+ <a href="#gp">GP-1, GP-2</a>
+ </td>
+ </tr>
+ <tr id="GP-D2">
+ <td>
+ GP-D2
+ </td>
+ <td>
+ App screenshots and videos do not show or reference non-Android devices.
+ </td>
+ <td rowspan="2"><a href="#gp">GP-1</a></td>
+ </tr>
+ <tr id="GP-D3">
+ <td>
+ GP-D3
+ </td>
+ <td>
+ App screenshots or videos do not
+ represent the content and experience of your app in a misleading way.
+ </td>
+ </tr>
+ <tr id="GP-X1">
+ <td>User Support</td>
+ <td>
+ GP-X1
+ </td>
+ <td>Common user-reported bugs in the Reviews tab of the Google Play page are addressed if they are
+ reproducible and occur on many different devices. If a bug occurs on only a few devices,
+ you should still address it if those devices are particularly popular or new.
+ </td>
+
+ <td>
+ <a href="#gp">GP-1</a>
+ </td>
+
+ </tr>
+</table>
+
+<table>
+<tr>
+<td><p>Related resources:</p>
+<ul style="margin-top:-.5em;">
+<li><strong><a href="https://play.google.com/apps/publish/">Publishing Checklist</a></strong> &mdash; Recommendations on how to prepare your app for publishing, test it, and launch successfully on Google Play.</li>
+<li><strong><a href="http://play.google.com/about/developer-content-policy.html">Google Play Developer Program Policies</a></strong> — Guidelines for what is acceptable conent in Google Play. Please read and understand the and understand the policies before publishing.</p>
+<li><strong><a href="http://support.google.com/googleplay/android-developer/bin/answer.py?hl=en&amp;answer=188189">Rating your application content for Google Play</a></strong> — Help Center document describing content ratings levels and how to choose the appropriate one for your app.</li>
+<li><strong><a href="http://support.google.com/googleplay/android-developer/bin/answer.py?hl=en&amp;answer=1078870">Graphic Assets for your Application
+</a></strong> — Details about the graphic assets you need to upload before publishing.</li>
+<li><strong><a href="http://android-developers.blogspot.com/2011/10/android-market-featured-image.html">Google Play Featured Image Guidelines
+</a></strong> — Blog post discussing how to create an attractive, effective Featured Image for your app.</li>
+<li><strong><a href="http://support.google.com/googleplay/android-developer/bin/answer.py?hl=en&amp;answer=113477&amp;topic=2364761&amp;ctx=topic">Supporting your users
+</a></strong> — Help Center document describing options for supporting users.</li>
+</ul>
+</td></tr>
+</table>
+
+
+<h2 id="test-environment">Setting Up a Test Environment</h2>
+
+<p>To assess the quality of your app, you need to set up a suitable
+hardware or emulator environment for testing. </p>
+
+<p>The ideal test environment would
+include a small number of actual hardware devices that represent key form
+factors and hardware/software combinations currently available to consumers.
+It's not necessary to test on <em>every</em> device that's on the market &mdash;
+rather, you should focus on a small number of representative devices, even using
+one or two devices per form factor. </p>
+
+<p>If you are not able to obtain actual hardware devices for testing, you should
+<a href="{@docRoot}tools/devices/index.html">set up emulated devices (AVDs)</a>
+to represent the most common form factors and
+hardware/software combinations.</p>
+
+<p>To go beyond basic testing, you can add more devices, more form factors, or
+new hardware/software combinations to your test environment. You can also
+increase the number or complexity of tests and quality criteria. </p>
+
+
+<h2 id="tests">
+ Test Procedures
+</h2>
+
+<p>These test procedures help you discover various types of quality issues in
+your app. You can combine the tests or integrate groups of tests together in
+your own test plans. See the sections above for references that associate
+specific criteria with specific tests. </p>
+
+<table>
+ <tr>
+ <th style="width:2px;">
+ Type
+ </th>
+ <th style="width:54px;">
+ Test
+ </th>
+ <th>
+ Description
+ </th>
+ </tr>
+ <tr>
+ <td rowspan="12" id="core">Core Suite</td>
+ <td>
+ CR-0
+ </td>
+ <td><p style="margin-bottom:.5em;">Navigate to all parts of the app &mdash; all screens, dialogs, settings, and all user flows. </p>
+
+ <ol style="margin-bottom:.5em;list-style-type:lower-alpha">
+ <li>If the application allows for editing or content creation, game play, or media playback, make sure to enter those flows to create or modify content.</li>
+ <li>While exercising the app, introduce transient changes in network connectivity, battery function, GPS or location availability, system load, and so on. </li>
+ </ol>
+ </td>
+ </tr>
+ <tr id="tg2">
+ <td id="core">
+ CR-1
+ </td>
+ <td>From each app screen, press the device's Home key, then re-launch the app from the All Apps screen.
+ </td>
+ </tr>
+ <tr id="CR-2">
+ <td>
+ CR-2
+ </td>
+ <td>From each app screen, switch to another running app and then return to the app under test using the Recents app switcher.
+ </td>
+ </tr>
+
+ <tr id="CR-3">
+ <td>
+ CR-3
+ </td>
+ <td>From each app screen (and dialogs), press the Back button.
+ </td>
+ </tr>
+ <tr id="CR-5">
+ <td>
+ CR-5
+ </td>
+ <td>From each app screen, rotate the device between landscape and portrait orientation at least three times.
+ </td>
+ </tr>
+ <tr id="CR-6">
+ <td>
+ CR-6
+ </td>
+ <td>Switch to another app to send the test app into the background. Go to Settings and check whether the test app has any services running while in the background. In Android 4.0 and higher, go to the Apps screen and find the app in the "Running" tab. In earlier versions, use "Manage Applications" to check for running services.
+ </td>
+ </tr>
+
+
+ <tr id="CR-7">
+ <td>
+ CR-7
+ </td>
+ <td>
+ Press the power button to put the device to sleep, then press the power button again to
+ awaken the screen.
+ </td>
+ </tr>
+ <tr id="CR-8">
+ <td>
+ CR-8
+ </td>
+ <td>
+ Set the device to lock when the power button is pressed. Press the power button to put the device to sleep, then press the power button again to
+ awaken the screen, then unlock the device.
+ </td>
+ </tr>
+ <tr id="CR-9">
+ <!-- Hardware features -->
+ <td>
+ CR-9
+ </td>
+ <td>
+ For devices that have slide-out keyboards, slide the keyboard in and out at least once. For devices that have keyboard docks, attach the device to the keyboard dock.
+ </td>
+ </tr>
+ <tr id="CR-10">
+ <td>
+ CR-10
+ </td>
+ <td>
+ For devices that have an external display port, plug-in the external display.
+ </td>
+ </tr>
+ <tr id="CR-11">
+ <td>
+ CR-11
+ </td>
+ <td>Trigger and observe in the notications drawer all types of notifications that the app can display. Expand notifications where applicable (Android 4.1 and higher), and tap all actions offered.</td>
+ </tr>
+ <tr id="CR-12">
+ <td>
+ CR-12
+ </td>
+ <td>Examine the permissions requested by the app by going to Settings &gt; App Info.
+ </td>
+ </tr>
+ <tr id="tg3">
+ <td>Install on SD Card</td>
+ <td>
+ SD-1
+ </td>
+ <td>
+ <p style="margin-bottom:.5em;">Repeat <em>Core Suite</em> with app installed to <a href="{@docRoot}guide/topics/data/install-location.html">device SD card</a> (if supported by app).</p>
+
+ <p style="margin-bottom:.25em;">To move the app to SD card, you can use Settings &gt; App Info &gt; Move to SD Card.</p>
+ </td>
+ </tr>
+ <tr id="tg3">
+ <td>Hardware acceleration</td>
+ <td>
+ HA-1
+ </td>
+ <td>
+ <p style="margin-bottom:.5em;">Repeat <em>Core Suite</em> with hardware acceleration enabled.</p>
+
+ <p style="margin-bottom:.25em;">To force-enable hardware acceleration (where supported by device), add <code>hardware-accelerated="true"</code> to the <code>&lt;application&gt;</code> in the app manifest and recompile.</p>
+ </td>
+ </tr>
+ <tr id="tg3">
+ <td>Performance Monitoring</td>
+ <td>
+ PM-1
+ </td>
+ <td>
+ <p style="margin-bottom:.5em;">Repeat <em>Core Suite</em> with StrictMode profiling enabled <a href="#strictmode">as described below</a>. <p style="margin-bottom:.25em;">Pay close attention to garbage collection and its impact on the user experience.</p>
+ </td>
+ </tr>
+ <tr id="gp">
+ <td rowspan="3">Google Play</td>
+ <td>
+ GP-1
+ </td>
+ <td>
+ Sign into the <a href="https://play.google.com/apps/publish/">Developer Console</a> to review your developer profile, app description, screenshots, feature graphic, maturity settings, and user feedback.
+ </td>
+ </tr>
+ <tr id="GP-2">
+ <td>
+ GP-2
+ </td>
+ <td>
+ Download your feature graphic and screenshots and scale them down to match the display sizes on the devices and form factors you are targeting.
+ </td>
+ </tr>
+ <tr id="GP-3">
+ <td>
+ GP-3
+ </td>
+ <td>
+ Review all graphical assets, media, text, code libraries, and other content packaged in the app or expansion file download.
+ </td>
+ </tr>
+ <tr id="GP-4">
+ <td>Payments</td>
+ <td>
+ GP-4
+ </td>
+ <td>
+ Navigate to all screens of your app and enter all in-app purchase flows.
+ </td>
+</tr>
+
+</table>
+
+<h3 id="strictmode">
+Testing with StrictMode
+</h3>
+
+<p>For performance testing, we recommend enabling
+{@link android.os.StrictMode} in your app
+and using it to catch operations on the main thread and other threads that could
+affect performance, network accesses, file reads/writes, and so on.</p>
+
+<p>You can set up a monitoring policy per thread using
+{@link android.os.StrictMode.ThreadPolicy.Builder} and enable all supported monitoring in the
+<code>ThreadPolicy</code> using
+{@link android.os.StrictMode.ThreadPolicy.Builder#detectAll()}.</p>
+
+<p>Make sure to enable <strong>visual notification</strong> of policy violations
+for the <code>ThreadPolicy</code> using {@link android.os.StrictMode.ThreadPolicy.Builder#penaltyFlashScreen() penaltyFlashScreen()}.</p>
diff --git a/docs/html/distribute/googleplay/quality/index.jd b/docs/html/distribute/googleplay/quality/index.jd
new file mode 100644
index 0000000..ef537b1
--- /dev/null
+++ b/docs/html/distribute/googleplay/quality/index.jd
@@ -0,0 +1,45 @@
+page.title=App Quality
+@jd:body
+
+<p>App quality directly influences the long-term success of your app&mdash;in
+terms of installs, user rating and reviews, engagement, and user retention.
+Android users expect high-quality apps, even more so if they've spent money on
+them. At the same time, users enjoy and value apps that put a priority on
+continuous improvement. </p>
+
+<p>Before you publish an app on Google Play, it's important to make sure that
+your app meets the basic quality expectations of users, across all of the form
+factors and device types that the app is targeting. The documents in this
+section help you assess your app's fundamental quality and address any
+issues that you find. </p>
+
+<div class="vspace size-1">
+ &nbsp;
+</div>
+<div class="layout-content-row">
+ <div class="layout-content-col span-4">
+ <h4>
+ Core App Quality
+ </h4>
+ <p>
+ A set of core quality criteria that all Android apps should meet on all targeted devices.
+ </p><a href="{@docRoot}distribute/googleplay/quality/core.html">Learn more »</a>
+ </div>
+ <div class="layout-content-col span-4">
+ <h4>
+ Tablet App Quality
+ </h4>
+ <p>
+ A set recommendations for delivering the best possible experience to tablet users.
+ </p><a href="{@docRoot}distribute/googleplay/quality/tablet.html">Learn more »</a>
+ </div>
+ <div class="layout-content-col span-4">
+ <h4>
+ Improving App Quality
+ </h4>
+ <p>
+ Tips on continuously improving your app's quality, ratings, reviews, downloads, and engagement.
+ </p><a href="{@docRoot}distribute/googleplay/strategies/app-quality.html">Learn more
+ »</a>
+ </div>
+</div>
diff --git a/docs/html/distribute/googleplay/quality/tablet.jd b/docs/html/distribute/googleplay/quality/tablet.jd
new file mode 100644
index 0000000..80346a7
--- /dev/null
+++ b/docs/html/distribute/googleplay/quality/tablet.jd
@@ -0,0 +1,569 @@
+page.title=Tablet App Quality Checklist
+@jd:body
+
+<div id="qv-wrapper"><div id="qv">
+<h2>Checklist</h2>
+<ol>
+
+<li><a href="#core-app-quality">1. Test for Core App Quality</a></li>
+<li><a href="#optimize-layouts">2. Optimize your layouts</a></li>
+<li><a href="#use-extra-space">3. Use the extra screen area</a></li>
+<li><a href="#use-tablet-icons">4. Use assets designed for tablets</a></li>
+<li><a href="#adjust-font-sizes">5. Adjust fonts and touch targets</a></li>
+<li><a href="#adjust-widgets">6. Adjust homescreen widgets</a></li>
+<li><a href="#offer-full-feature-set">7. Offer the app's full feature set</a></li>
+<li><a href="#hardware-requirements">8. Don’t require hardware features</a></li>
+<li><a href="#support-screens">9. Declare tablet screen support</a></li>
+<li><a href="#google-play">10. Follow best practices for publishing in Google Play</a></li>
+
+</ol>
+<h2>Testing</h2>
+<ol>
+<li><a href="#test-environment">Setting Up a Test Environment</a></li>
+</ol>
+</div></div>
+
+
+<p>Before you publish an app on Google Play, it's important to make sure that
+the app meets the basic expectations of tablet users through compelling features
+and an intuitive, well-designed UI. </p>
+
+<p>Tablets are a growing part of the Android installed base that offers new
+opportunities for <a
+href="{@docRoot}distribute/googleplay/spotlight/tablets.html">user engagement
+and monetization</a>. If your app is targeting tablet users, this document helps
+you focus on key aspects of quality, feature set, and UI that can have a
+significant impact on the app's success. Each focus area is given as checklist
+item, with each one comprising several smaller tasks or best practices.</p>
+
+<p>Although the checklist tasks below are numbered for convenience,
+you can handle them in any order and address them to the extent that you feel
+is right for your app. In the interest of delivering the best possible product
+to your customers, follow the checklist recommendations
+to the greatest extent possible. </p>
+
+<p>As you move through the checklist, you'll find links to support resources
+that can help you address the topics raised in each task.</p>
+
+
+<h2 id="core-app-quality">1. Test for Core App Quality</h2>
+
+<p>The first step in delivering a great tablet app experience is making sure
+that it meets the <em>core app
+quality criteria</em> for all of the devices and form factors that the app is
+targeting. For complete information, see the <a
+href="{@docRoot}distribute/googleplay/quality/core.html">Core App Quality Checklist</a>.
+</p>
+
+<p>To assess the quality of your app on tablets &mdash; both for core app quality
+and tablet app quality &mdash; you need to set up a suitable
+hardware or emulator environment for testing. For more information,
+see <a href="#test-environment">Setting Up a Test Environment</a>.</p>
+
+<table>
+<tr>
+<td><p>Related resources:</p>
+<ul style="margin-top:-.5em;">
+<li><strong><a
+href="{@docRoot}distribute/googleplay/quality/core.html">Core App Quality
+Guidelines</a></strong> &mdash; A set of core quality criteria that all Android
+apps should meet on all targeted devices.</li>
+</ul>
+</td>
+</tr>
+</table>
+
+<h2 id="optimize-layouts">2. Optimize your layouts for larger screens</h2>
+
+<p>Android makes it easy to develop an app that runs well on a wide range of
+device screen sizes and form factors. This broad compatibility works in your
+favor, since it helps you design a single app that you can distribute widely to
+all of your targeted devices. However, to give your users the best possible
+experience on each screen configuration &mdash; in particular on tablets
+&mdash; you need to optimize your layouts and other UI components for each
+targeted screen configuration. On tablets, optimizing your UI lets you take
+full advantage of the additional screen available, such as to offer new features,
+present new content, or enhance the experience in other ways to deepen user
+engagement.</p>
+
+<p>If you developed your app for handsets and now want to distribute it to
+tablets, you can start by making minor adjustments to your layouts, fonts, and
+spacing. In some cases &mdash; such as for 7-inch tablets or for a game with
+large canvas &mdash; these adjustments may be all
+you need to make your app look great. In other cases, such as for larger
+tablets, you can redesign parts of your UI to replace "stretched UI" with an
+efficient multipane UI, easier navigation, and additional content. </p>
+
+<p>Here are some suggestions:</p>
+
+<div style="width:390px;float:right;margin:1.5em;margin-top:0em;">
+<img src="{@docRoot}images/training/app-navigation-multiple-sizes-multipane-bad.png" style="width:390px;padding:4px;margin-bottom:0em;">
+<p class="image-caption" style="padding:0em .5em .5em 2em"><span
+style="font-weight:500;">Get rid of "stretched" UI</span>: On tablets, single-pane layouts lead to awkward whitespace and excessive line lengths. Use padding to reduce the width of UI elements and consider using multi-pane layouts.</p>
+</div>
+
+<ul>
+<li>Provide custom layouts as needed for <code>large</code> and
+<code>xlarge</code> screens. You can also provide layouts that are loaded based
+on the screen's <a href="{@docRoot}guide/practices/screens_support.html#NewQualifiers">shortest
+dimension</a> or the <a href="{@docRoot}guide/practices/screens_support.html#NewQualifiers">minimum
+available width and height</a>. </li>
+<li>At a minimum, customize dimensions such as font sizes, margins, spacing for
+larger screens, to improve use of space and content legibility. </li>
+<li>Adjust positioning of UI controls so that they are easily accessible to
+users when holding a tablet, such as toward the sides when in
+landscape orientation.</li>
+<li>Padding of UI elements should normally be larger on tablets than on handsets. A
+<a href="{@docRoot}design/style/metrics-grids.html#48dp-rhythm">48dp rhythm</a> (and a 16dp
+grid) is recommended.</li>
+<li>Adequately pad text content so that it is not aligned directly along screen edges.
+Use a minimum <code>16dp</code> padding around content near screen edges.</li>
+</ul>
+
+<p>In particular, make sure that your layouts do not appear "stretched"
+across the screen:</p>
+
+<ul>
+<li>Lines of text should not be excessively long &mdash; optimize for a maximum
+100 characters per line, with best results between 50 and 75.</li>
+<li>ListViews and menus should not use the full screen width.</li>
+<li>Use padding to manage the widths of onscreen elements or switch to a
+multi-pane UI for tablets (see next section).</li>
+</ul>
+
+<table>
+<tr>
+<td><p>Related resources:</p>
+<ul style="margin-top:-.5em;">
+<li><strong><a href="http://developer.android.com/design/style/metrics-grids.html">Metrics and Grids
+</a></strong> &mdash; Android Design document that explains ....</li>
+<li><strong><a href="http://developer.android.com/design/style/devices-displays.html">Devices and Displays
+</a></strong> &mdash; Android Design document that explains ....</li>
+<li><strong><a href="{@docRoot}guide/practices/screens_support.html">Supporting Multiple Screens</a></strong> &mdash; Developer documentation that explains the details of managing UI for best display on multiple screen sizes.</li>
+<li><strong><a href="http://developer.android.com/guide/practices/screens_support.html#ConfigurationExamples">Configuration examples
+</a></strong> &mdash; Examples of how to declare layouts and other resources for specific screen sizes.</a></li>
+</ul>
+</td>
+</tr>
+</table>
+
+
+<h2 id="use-extra-space">3. Take advantage of extra screen area available on tablets</h2>
+
+<div style="width:290px;float:right;margin:1.5em;margin-bottom:0;margin-top:0;">
+<img src="{@docRoot}images/training/app-navigation-multiple-sizes-multipane-good.png" style="width:280px;padding:4px;margin-bottom:0em;">
+<p class="image-caption" style="padding:0em .5em .5em 1.5em"><span
+style="font-weight:500;">Multi-pane layouts</span> result in a better visual balance on tablet screens, while offering more utility and legibility.</p>
+</div>
+
+<p>Tablet screens provide significantly more screen real estate to your app,
+especially when in landscape orientation. In particular, 10-inch tablets offer a
+greatly expanded area, but even 7-inch tablets give you more space for
+displaying content and engaging users. </p>
+
+<p>As you consider the UI of your app when running on tablets, make sure that it
+is taking full advantage of extra screen area available on tablets. Here are
+some suggestions:</p>
+
+<ul>
+<li>Look for opportunities to include additional content or use an alternative
+treatment of existing content.</li>
+<li>Use <a href="{@docRoot}design/patterns/multi-pane-layouts.html">multi-pane
+layouts</a> on tablet screens to combine single views into a compound view. This
+lets you use the additional screen area more efficiently and makes it easier for
+users to navigate your app. </li>
+<li>Plan how you want the panels of your compound views to reorganize when
+screen orientation changes.</li>
+
+
+
+<div style="width:490px;margin:1.5em auto 1.5em 0;">
+
+<div style="">
+<img src="{@docRoot}images/ui-ex-single-panes.png" style="width:490px;padding:4px;margin-bottom:0em;" align="middle">
+<img src="{@docRoot}images/ui-ex-multi-pane.png" style="width:490px;padding:4px;margin-bottom:0em;">
+<p class="image-caption" style="padding:.5em"><span
+style="font-weight:500;">Compound views</span> combine several single views from a handset UI <em>(above)</em> into a richer, more efficient UI for tablets <em>(below)</em>. </p>
+</div>
+</div>
+
+<li>While a single screen is implemented as an {@link android.app.Activity}
+subclass, consider implementing individual content panels as {@link
+android.app.Fragment} subclasses. This lets you maximize code reuse across
+different form factors and across screens that share content.</li>
+<li>Decide on which screen sizes you'll use a multi-pane UI, then provide the
+different layouts in the appropriate screen size buckets (such as
+<code>large</code>/<code>xlarge</code>) or minimum screen widths (such as
+<code>sw600dp</code>/<code>sw720</code>).</li>
+</ul>
+
+<table>
+<tr>
+<td><p>Related resources:</p>
+<ul style="margin-top:-.5em;">
+<li><strong><a href="{@docRoot}design/patterns/multi-pane-layouts.html">Multi-pane Layouts</a></strong> &mdash; Android Design guide for using multi-pane UI, including examples of how to flatten navigation and integrate more content into your tablet UI.</li>
+<li><strong><a href="{@docRoot}training/design-navigation/multiple-sizes.html">Planning for Multiple Touchscreen Sizes</a></strong> &mdash; Android Training class that walks you through the essentials of planning an intuitive, effective navigation for tablets and other devices. </li>
+<li><strong><a href="{@docRoot}training/multiscreen/index.html">Designing for Multiple Screens</a></strong> &mdash; Android Training class that walks you through the essentials of planning an intuitive, effective navigation for tablets and other devices. </li>
+</ul>
+</td>
+</tr>
+</table>
+
+
+<h2 id="use-tablet-icons">4. Use Icons and other assets that are designed for tablet screens</h2>
+
+<p>So that your app looks its best, make sure to use icons and other bitmap
+assets that are created specifically for the densities used by tablet screens.
+Specifically, you should create sets of alternative bitmap drawables for each
+density in the range commonly supported by tablets.</p>
+
+<p class="table-caption"><strong>Table 1</strong>. Raw asset sizes for icon types.<table>
+<tr>
+<th>Density </th>
+<th colspa>Launcher</th>
+<th>Action Bar</th>
+<th>Small/Contextual</th>
+<th>Notification</th>
+</tr>
+<tr>
+<td><code>mdpi</code></td>
+<td>48x48px</td>
+<td>32x32px</td>
+<td>16x16px</td>
+<td>24x24px</td>
+</tr>
+<tr>
+<td><code>hdpi</code></td>
+<td>72x72px</td>
+<td>48x48px</td>
+<td>24x24px</td>
+<td>36x36px</td>
+</tr>
+<tr>
+<td><code>tvdpi</code></td>
+<td><em>(use hdpi)</em></td>
+<td><em>(use hdpi)</em></td>
+<td><em>(use hdpi)</em></td>
+<td><em>(use hdpi)</em></td>
+</tr>
+<tr>
+<td><code>xhdpi</code></td>
+<td>96x96px</td>
+<td>64x64px</td>
+<td>32x32px</td>
+<td>48x48px</td>
+</tr>
+
+</table>
+
+<p>Other points to consider: </p>
+
+<ul>
+<li>Icons in the action bar, notifications, and launcher should be designed
+according to the icon design guidelines and have the same physical size on
+tablets as on phones.</li>
+<li>Use density-specific <a
+href="{@docRoot}guide/topics/resources/providing-resources.html#AlternativeResources">
+resource qualifiers</a> to ensure that the proper set of alternative resources
+gets loaded.</li>
+</ul>
+
+<table>
+<tr>
+<td><p>Related resources:</p>
+<ul style="margin-top:-.5em;">
+<li><strong><a href="{@docRoot}design/style/iconography.html">Iconography</a></strong> &mdash; Android Design document that shows how to use various types of icons.</li>
+<li><strong><a href="{@docRoot}guide/topics/resources/providing-resources.html">Providing Resources</a></strong> &mdash; Developer documentation on how to provide sets of layouts and drawable resources for specific ranges of device screens. </li>
+<li><strong><a href="{@docRoot}guide/practices/screens_support.html">Supporting Multiple Screens</a></strong> &mdash; API Guide documentation that explains the details of managing UI for best display on multiple screen sizes.</li>
+<li><strong><a href="{@docRoot}training/basics/supporting-devices/screens.html">Supporting Different Screens</a></strong> &mdash; Android Training class that takes you through the process of optimizing the user experience for different screen sizes and densities.</li>
+</ul>
+</td>
+</tr>
+</table>
+
+
+<h2 id="adjust-font-sizes">5. Adjust font sizes and touch targets for tablet screens</h2>
+
+<p>To make sure your app is easy to use on tablets, take some time to adjust the
+font sizes and touch targets in your tablet UI, for all of the screen
+configurations you are targeting. You can adjust font sizes through <a
+href="{@docRoot}guide/topics/ui/themes.html">styleable attributes</a> or <a
+href="{@docRoot}guide/topics/resources/more-resources.html#Dimension">dimension
+resources</a>, and you can adjust touch targets through layouts and bitmap
+drawables, as discussed above. </p>
+
+<p>Here are some considerations:</p>
+<ul>
+<li>Text should not be excessively large or small on tablet screen sizes and
+densities. Make sure that labels are sized appropriately for the UI elements they
+correspond to, and ensure that there are no improper line breaks in labels,
+titles, and other elements.</li>
+<li>The recommended touch-target size for onscreen elements is 48dp (32dp
+minimum) &mdash; some adjustments may be needed in your tablet UI. Read <a
+href="http://developer.android.com/design/style/metrics-grids.html">Metrics and
+Grids
+</a> to learn about implementation strategies to help most of your users. To
+meet the accessibility needs of certain users, it may be appropriate to use
+larger touch targets. </li>
+<li>When possible, for smaller icons, expand the touchable area to more than
+48dp using {@link android.view.TouchDelegate} or just centering the icon within
+the transparent button.</li>
+</ul>
+
+<table>
+<tr>
+<td><p>Related resources:</p>
+<ul style="margin-top:-.5em;">
+<li><strong><a href="http://developer.android.com/design/style/metrics-grids.html">Metrics and Grids
+</a></strong> &mdash; Android Design document that explains how to arrange and size touch targets and other UI elements on the screen.</li>
+<li><strong><a href="{@docRoot}design/style/typography.html">Typography</a></strong> &mdash; Android Design document that gives an overview of how to use typography in your apps. </li>
+<li><strong><a href="{@docRoot}guide/practices/screens_support.html">Supporting Multiple Screens</a></strong> &mdash; Developer documentation that explains the details of managing UI for best display on multiple screen sizes.</li>
+<li><strong><a href="{@docRoot}training/multiscreen/screendensities.html">Supporting Different Densities</a></strong> &mdash; Android Training class that shows you how to provide sets of layouts and drawable resources for specific ranges of device screens. </li>
+</ul>
+</td>
+</tr>
+</table>
+
+
+<h2 id="adjust-widgets">6. Adjust sizes of home screen widgets for tablet screens</h2>
+
+<p>If your app includes a home screen widget, here are a few points to consider
+to ensure a great user experience on tablet screens: </p>
+
+<ul>
+<li>Make sure that the widget's default height and width are set appropriately
+for tablet screens, as well as the minimum and maximum resize height and width.
+</li>
+<li>The widget should be resizable to 420dp or more, to span 5 or more home
+screen rows (if this is a vertical or square widget) or columns (if this is a
+horizontal or square widget). </li>
+<li>Make sure that 9-patch images render correctly.</li>
+<li>Use default system margins.</li>
+<li>Set the app's <code>targetSdkVersion</code> to 14 or higher, if
+possible.</li>
+</ul>
+
+<table>
+<tr>
+<td><p>Related resources:</p>
+<ul style="margin-top:-.5em;">
+<li><strong><a href="{@docRoot}guide/topics/appwidgets/index.html#MetaData">Adding the AppWidgetProviderInfo Metadata
+</a></strong> &mdash; API Guide that explains how to set the height and width dimensions of a widget.</li>
+<li><strong><a href="{@docRoot}guide/practices/ui_guidelines/widget_design.html">App Widget Design Guidelines</a></strong> &mdash; API Guide that provides best practices and techniques for designing and managing the size of widgets. </li>
+</ul>
+</td>
+</tr>
+</table>
+
+
+<h2 id="offer-full-feature-set">7. Offer the app's full feature set to tablet users</h2>
+
+<p>Let your tablet users experience the best features of your app. Here are
+some recommendations:</p>
+
+<ul>
+<li>Design your app to offer at least the same set of features on tablets as it does on
+handsets. </li>
+<li>In exceptional cases, your app might omit or replace certain features on
+tablets if they are not supported by the hardware or use-case of most tablets.
+For example:
+<ul>
+<li>If the handset uses telephony features but telephony is not available on the
+current tablet, you can omit or replace the related functionality.</li>
+<li>Many tablets have a GPS sensor, but most users would not normally carry
+their tablets while running. If your phone app provides functionality to let the
+user record a GPS track of their runs while carrying their phones, the app would not need to
+provide that functionality on tablets because the use-case is not
+compelling.</li>
+</ul>
+</li>
+<li>If you will omit a feature or capability from your tablet UI, make sure
+that it is not accessible to users or that it offers “graceful degradation”
+to a replacement feature (also see the section below on hardware features).</li>
+</ul>
+
+
+<h2 id="hardware-requirements">8. Don’t require hardware features that might not be available on tablets</h2>
+
+<p>Handsets and tablets typically offer slightly different hardware support for
+sensors, camera, telephony, and other features. For example, many tablets are
+available in a "Wi-Fi" configuration that does not include telephony support.</p>
+
+<p>To ensure that you can deliver a single APK broadly across the
+your full customer base, make sure that your app does not have built-in
+requirements for hardware features that aren't commonly available on tablets.
+</p>
+
+<ul>
+<li>Your app's manifest should not include <a
+href="{@docRoot}guide/topics/manifest/uses-feature-element.html"><code>&lt;uses-feature&gt;</code></a>
+elements for hardware features or capabilities that might not be
+available on tablets, except when they are declared with the
+<code>android:required=”false”</code> attribute. For example, your app should
+not <em>require</em> features such as:
+<ul>
+<li><code>android.hardware.telephony</code></li>
+<li><code>android.hardware.camera</code> (refers to back camera), or</li>
+<li><code>android.hardware.camera.front</code></li>
+</ul>
+</li>
+<li>Similarly, your app manifest should not include any <a
+href="{@docRoot}guide/topics/manifest/permission-element.html"><code>&lt;permission&gt;</code></a> elements that <a
+href="{@docRoot}guide/topics/manifest/uses-feature-element.html#permissions">imply
+feature requirements</a> that might not be appropriate for tablets, except when
+accompanied by a corresponding <code>&lt;uses-feature&gt;</code> element
+declared with the <code>android:required=”false”</code> attribute.</li>
+</ul>
+
+<p>In all cases, the app must function normally when the hardware features it
+uses are not available and should offer “graceful degradation” and alternative
+functionality where appropriate. For example, if GPS is not supported on the device,
+your app could let the user set their location manually. The app should do
+run-time checking for the hardware capability that it needs and handle as needed.</p>
+
+<table>
+<tr>
+<td><p>Related resources:</p>
+<ul style="margin-top:-.5em;">
+<li><strong><a href="{@docRoot}guide/topics/manifest/uses-feature-element.html#permissions">Permissions that Imply Feature Requirements</a></strong> &mdash; A list of permissions that may cause unwanted filtering if declared in your app's manifest.</li>
+<li><strong><a href="{@docRoot}guide/topics/manifest/uses-feature-element.html"><code>&lt;uses-feature&gt;</code></a></strong> &mdash; Description and reference documentation for the <code>&lt;uses-feature&gt;</code> manifest element.</li>
+<li><strong><a href="{@docRoot}guide/topics/manifest/uses-feature-element.html#testing">Testing the features required by your application</a></strong> &mdash; Description of how to determine the actual set of hardware and software requirements (explicit or implied) that your app requires.</li>
+</ul>
+</td>
+</tr>
+</table>
+
+
+<h2 id="support-screens">9. Declare support for tablet screen configurations</h2>
+
+<p>To ensure that you can distribute your app to a broad range of tablets,
+declare all the screen sizes that your app supports in its manifest:</p>
+
+<ul>
+<li>Declare a <a
+href="{@docRoot}guide/topics/manifest/supports-screens-element.html"><code>&lt;supports-screens&gt;</code></a> element
+with appropriate attributes, as needed.</li>
+<li>If the app declares a <code>&lt;compatible-screens&gt;</code> element in the
+manifest, the element must include attributes that specify <em>all of the size and
+density combinations for tablet screens</em> that the app supports. Note that, if possible,
+you should avoid using this element in your app.</li>
+</ul>
+
+<table>
+<tr>
+<td><p>Related resources:</p>
+<ul style="margin-top:-.5em;">
+<li><strong><a href="{@docRoot}guide/topics/manifest/supports-screens-element.html"><code>&lt;supports-screens&gt;</code></a></strong>
+&mdash; Description and reference documentation for the <code>&lt;supports-screens&gt;</code>
+manifest element.</li>
+<li><strong><a href="{@docRoot}guide/practices/screens_support.html#DeclaringScreenSizeSupport">Declaring Screen Size
+Support</a></strong> &mdash; Developer documentation that explains the details of managing UI
+for best display on multiple screen sizes.</li>
+</ul>
+</td>
+</tr>
+</table>
+
+
+<h2 id="google-play">10. Follow best practices for publishing in Google Play</h2>
+
+<ul>
+<li>Publish your app as a single APK for all screen sizes (handsets
+and tablets), with a single Google Play listing:
+ <ul style="margin-top:.25em;">
+ <li>Easier for users to find your app from search, browsing, or promotions</li>
+ <li>Easier for users to restore your app automatically if they get a new device.</li>
+ <li>Your ratings and download stats are consolidated across all devices.</li>
+ <li>Publishing a tablet app in a second listing can dilute ratings for your brand.</li>
+ </ul>
+</li>
+<li>If necessary, you can alternatively choose to deliver your app using <a
+href="{@docRoot}guide/google/play/publishing/multiple-apks.html">Multiple APK Support</a>,
+although in most cases using a single APK to reach all devices is strongly recommended.</li>
+
+<li>Highlight your app’s tablet capabilities in the product details page:
+ <ul style="margin-top:.25em;">
+ <li>Add <strong>at least one screenshot taken while the app is running on a
+ tablet</strong>. It's recommended that you add one screenshot of landscape orientation
+ and one of portrait orientation, if possible. These screenshots make it clear to users
+ that your app is designed for tablets and highlight all the effort you've put into designing
+ a great tablet app experience.</li>
+ <li>Mention tablet support in the app description.</li>
+ <li>Include information about tablet support in the app's release notes and update
+ information.</li>
+ <li>In your app's promo video, add shots of your app running on a tablet.</li>
+ </ul>
+</li>
+<li>Make sure you are distributing to tablet devices. Check the app's Supported Devices
+list in the <a href="https://play.google.com/apps/publish/">Developer Console</a>
+to make sure your app is not filtered from tablet devices that you want to target.</li>
+
+<li>Let tablet users know about your app! Plan a marketing or advertising campaign that
+highlights the use of your app on tablets.</li>
+</ul>
+
+<table>
+<tr>
+<td><p>Related resources:</p>
+<ul style="margin-top:-.5em;">
+<li><strong><a href="https://play.google.com/apps/publish/">Publishing Checklist</a></strong> &mdash; Recommendations on how to prepare your app for publishing, test it, and launch successfully on Google Play.</li>
+<li><strong><a href="https://play.google.com/apps/publish/">Google Play Android Developer Console</a></strong> &mdash; The tools console for publishing your app to Android users.</li>
+</ul>
+</td>
+</tr>
+</table>
+
+<h2 id="test-environment">Setting Up a Test Environment for Tablets</h2>
+
+<p>To assess the quality of your app on tablets &mdash; both for core app quality
+and tablet app quality &mdash; you need to set up a suitable
+hardware or emulator environment for testing. </p>
+
+<p>The ideal test environment would
+include a small number of actual hardware devices that represent key form
+factors and hardware/software combinations currently available to consumers.
+It's not necessary to test on <em>every</em> device that's on the market &mdash;
+rather, you should focus on a small number of representative devices, even using
+one or two devices per form factor. The table below provides an overview of
+devices you could use for testing.</p>
+
+<p>If you are not able to obtain actual hardware devices for testing, you should
+<a href="{@docRoot}tools/devices/index.html">set up emulated devices (AVDs)</a>
+to represent the most common form factors and
+hardware/software combinations. See the table below for suggestions on the emulator
+configurations to use. </p>
+
+<p>To go beyond basic testing, you can add more devices, more form factors, or
+new hardware/software combinations to your test environment. For example, you
+could include mid-size tablets, tablets with more or fewer hardware/software
+features, and so on. You can also increase the number or complexity of tests
+and quality criteria. </p>
+
+<p class="table-caption"><strong>Table 1</strong>. A typical tablet test environment might
+include one or two devices from each row in the table below, with one of the
+listed chipsets, platform versions, and hardware feature configurations.</p>
+
+<table>
+<tr>
+<th>Type</th>
+<th>Size</th>
+<th>Density</th>
+<th>Version</th>
+<th>AVD Skin</th>
+</tr>
+
+<tr>
+<td>7-inch tablet</td>
+<td><span style="white-space:nowrap"><code>large</code> or</span><br /><code>-sw600</code></td>
+<td><code>hdpi</code>,<br /><code>tvdpi</code></td>
+<td>Android 4.0+</td>
+<td>WXGA800-7in</td>
+</tr>
+<tr>
+<td><span style="white-space:nowrap">10-inch</span> tablet</td>
+<td><span style="white-space:nowrap"><code>xlarge</code> or</span><br /><code>-sw800</code></td>
+<td><code>mdpi</code>,<br /><code>hdpi</code></td>
+<td>Android 3.2+</td>
+<td>WXGA800</td>
+</tr>
+</table> \ No newline at end of file
diff --git a/docs/html/distribute/googleplay/spotlight/index.jd b/docs/html/distribute/googleplay/spotlight/index.jd
new file mode 100644
index 0000000..6acd914
--- /dev/null
+++ b/docs/html/distribute/googleplay/spotlight/index.jd
@@ -0,0 +1,46 @@
+page.title=Spotlight
+walkthru=0
+header.hide=0
+
+@jd:body
+
+
+<p>Android developers, their apps, and their successes with Android and Google Play. </p>
+
+
+
+<div style="background: #F0F0F0;
+ border-top: 1px solid #DDD;
+ padding: 0px 0 24px 0;
+ overflow: auto;
+ clear:both;
+ margin-bottom:-10px;
+ margin-top:30px;"">
+ <div style="padding:0 0 0 29px;">
+ <h4>Developer Story: Robot Invader</h4>
+ <img alt="" class="screenshot thumbnail" style="-webkit-border-radius: 5px;
+ -moz-border-radius: 5px;
+ border-radius: 5px height:78px;
+ width: 78px;
+ float: left;
+ margin: 17px 20px 9px 0;" src=
+ "//g0.gstatic.com/android/market/com.robotinvader.knightmare/hi-256-0-9e08d83bc8d01649e167131d197ada1cd1783fb0">
+ <div style="width:700px;">
+ <p style="margin-top:26px;margin-bottom:12px;">Robot Invader chose
+ Android and Google Play as the launch platform for their first game,<br />
+ <a data-g-event="Developers Page" data-g-label="Case Study Link" href=
+ "//play.google.com/store/apps/details?id=com.robotinvader.knightmare"><em>Wind-up
+ Knight</em></a>.
+ </p>
+ <p>
+ Hear from the developers how Android helped them reach millions of users
+ and more than 100 device models with a single app binary, then iterate rapidly to ensure
+ a great user experience.
+ </p>
+ </div>
+ <iframe style="float:left;
+ margin-right:24px;
+ margin-top:14px;" width="700" height="394" src=
+ "http://www.youtube.com/embed/hTtlLiUTowY" frameborder="0" allowfullscreen></iframe>
+ </div>
+</div> \ No newline at end of file
diff --git a/docs/html/distribute/googleplay/spotlight/tablets.jd b/docs/html/distribute/googleplay/spotlight/tablets.jd
new file mode 100644
index 0000000..ee256bc
--- /dev/null
+++ b/docs/html/distribute/googleplay/spotlight/tablets.jd
@@ -0,0 +1,284 @@
+page.title=Developer Stories: The Opportunity of Android Tablets
+walkthru=0
+header.hide=0
+
+@jd:body
+
+
+<p>More and more, developers are investing in a full tablet experience
+for their apps and are seeing those investments pay off big. The increased
+screen area on tablets opens up a world of possibilities, allowing for more
+engagement with the user &mdash; which can mean an increase in usage as well as
+more monetization opportunities. And with the growing wave of Android tablets that
+continue to hit the market, it’s an important piece of any developer’s mobile
+offering. </p>
+
+<p>Here are some stories from developers who are seeing real results as they
+expand their offering to include Android tablets.</p>
+
+
+<div style="margin-bottom:2em;"><!-- START STORY -->
+
+<h3>Mint: More screen real estate = more engagement</h3>
+
+ <img alt="" class="screenshot thumbnail" style="-webkit-border-radius: 5px;
+ -moz-border-radius: 5px;
+ border-radius: 5px height:78px;
+ width: 78px;
+ float: left;
+ margin: 12px 20px 9px 20px;" src=
+ "https://lh5.ggpht.com/0xAIZJ1uE05b4RHNHgBBTIH6nRdPTY660T104xY7O2GbHXwab6YVmpU5yYg8yacfBg=w124">
+
+ <div style="list-style: none;height:100%;
+ float: right;
+ border-top: 1px solid #9C0;
+ width: 220px;
+ margin: 4px 20px;padding: .5em;">
+
+
+ <h5>About the app</h5>
+
+
+ <ul>
+ <li><a href="http://play.google.com/store/apps/details?id=com.mint">Mint.com Personal Finance</a> by Intuit Inc.</li>
+ <li>Financial management app targeting 7- to 10-inch tablets and phones</li>
+ </ul>
+
+ <h5>Tablet Results</h5>
+
+ <ul>
+ <li>Able to offer richer UI features</li>
+ <li>Much higher user engagement</li>
+ <li>Longer sessions &mdash; more Android tablet users have sessions longer than 5 minutes</li>
+ </ul>
+
+ <div style="padding:.5em 0 0 1em;">
+<a href="http://play.google.com/store/apps/details?id=com.mint">
+ <img alt="Android app on Google Play"
+ src="http://developer.android.com/images/brand/en_generic_rgb_wo_45.png" />
+</a>
+
+ </div>
+ </div>
+
+ <div style="line-height:1.4em;">
+ <p style="margin-top:0;margin-bottom:12px;">When Intuit was thinking about
+expanding their Mint mobile offering to include a version optimized for Android
+tablets, they knew that taking the layout that worked for phones and simply
+showing an enlarged version wouldn’t take full advantage of the opportunities
+that tablets afford.</p>
+
+ <p>“We knew we had a lot more real estate, and we wanted to provide a more
+immersive experience for our users” said Ken Sun, Intuit Group Product Manager
+at Mint.</p>
+
+<p>Intuit’s Mint app, which has a 4-star rating on Google Play, brings a number
+of features to Android tablets that aren’t available for phones, including a
+more visual presentation of personal financial data.</p>
+
+<p>“Whereas our app for phones is used throughout the day for quick sessions,
+we’ve seen a larger percentage of our tablet usage happen in the evening, for
+much longer sessions,” said Sun. “People are doing a lot more than just checking
+their spending. They’re looking at historical trends, re-categorizing
+transactions, analyzing the data and setting financial goals for the future
+&mdash; digging much deeper and being more thoughtful. One example is how much
+users are interacting with their own budgets in the tablet app. Customer budget
+operations (view, edit, drill-down, etc.) are 7x higher on Android tablets than
+they are on phones.”</p>
+
+<p>Fifty percent more Android tablet users have Mint sessions of 5 minutes or
+longer than they do on phones. “We’ve found that phone usage is indicative of a
+customer’s regular financial check-in, while tablet usage points towards more
+analysis and interaction with that customer’s personal financial data. This is
+the sort of immersive engagement experience we were looking for; the tablet and
+phone apps serve as great complements to each other."</p>
+ </div>
+
+ <div style="clear:both;margin-top:40px;width:auto;">
+
+ <a href=""><img src="{@docRoot}images/distribute/mint.png"></a>
+
+ <div style="width:600px;margin-top:0px;padding:0 90px;">
+ <p class="image-caption"><span style="font-weight:500;">Making the most of tablet screens</span>: Mint used the extra screen area on tablets to offer quick access to additional tools and information.</p>
+ </div>
+
+ </div>
+
+</div> <!-- END STORY -->
+
+
+<div style="margin:3em auto"><!-- START STORY -->
+
+
+<h3>TinyCo: Monetization opportunities abound on tablets</h3>
+
+ <img alt="" class="screenshot thumbnail" style="-webkit-border-radius: 5px;
+ -moz-border-radius: 5px;
+ border-radius: 5px height:78px;
+ width: 78px;
+ float: left;
+ margin: 12px 20px 30px 20px;" src=
+ "https://lh5.ggpht.com/mO1TPos65MWJF_n8ZrXMbNCqIqsvN4dQV_rwNOU3pF6N_Ii3lSiCPe_H_MP8C1MK5UKo=w124">
+
+
+ <div style="list-style: none;height:100%;
+ float: right;
+ border-top: 1px solid #9C0;
+ width: 220px;
+ margin: 4px 20px;padding: .5em;">
+
+ <h5>About the app</h5>
+
+ <ul>
+ <li><a href="http://play.google.com/store/apps/details?id=com.tinyco.village">Tiny Village</a> by TinyCo</li>
+ <li>Game targeting 7- to 10-inch tablets and phones</li>
+ </ul>
+
+ <h5>Tablet Results</h5>
+
+ <ul>
+ <li>35% higher average revenue per paying user (ARPPU)</li>
+ <li>Consistent increase in user retention</li>
+ <li>3x increase in downloads to Android tablets in the last 6 months</li>
+ </ul>
+
+ <div style="padding:.5em 0 0 1em;">
+<a href="http://play.google.com/store/apps/details?id=com.tinyco.village">
+ <img alt="Android app on Google Play"
+ src="http://developer.android.com/images/brand/en_generic_rgb_wo_45.png" />
+</a>
+
+ </div>
+ </div>
+
+ <div style="line-height:1.4em;">
+ <p style="margin-top:0;margin-bottom:12px;">
+
+<p>Over a year ago, app developer TinyCo, makers of a suite of games such as
+Tiny Monsters, decided to prioritize launching across multiple platforms
+effectively. They chose Android as one of their primary launch platforms because
+of its large installed base and global reach. They also knew that the growing
+base of Android tablet users represented a huge opportunity.</p>
+
+ <p>Tiny Village was their first title to take advantage of the strategy, and
+it proved to be a winning one &mdash; especially in terms of Android
+tablets.</p>
+
+ <p> “With continued optimization of the gameplay experience and a genuine
+commitment to our Android offering through our Griffin engine, all of our
+metrics started to rise,” said Rajeev Nagpal, Head of Product at TinyCo. In
+fact, they’ve seen Android tablet downloads more than triple in the last six
+months.</p>
+
+ <p>One of the first things they noticed about usage of Tiny Village on
+tablets was an increase in average revenue per paying user (ARPPU)&mdash;about 35%
+higher than on smaller-screen devices such as phones. Additionally, average
+revenue per user ARPU is now about 35% higher as well. “The game is just much
+more immersive on tablet.”</p>
+
+ <p>In addition to an increase in monetization metrics, they’ve also seen a
+consistent increase in retention over other platforms. “These are really
+important metrics for games &mdash; if you can get users to both stay around
+longer and spend more while they’re there, you have a recipe for success.”</p>
+ </div>
+
+ <div style="clear:both;margin-top:40px;width:auto;">
+
+ <a href=""><img src="{@docRoot}images/distribute/tinyvillage.png"></a>
+
+ <div style="width:600px;margin-top:0px;padding:0 90px;">
+ <p class="image-caption"><span style="font-weight:500;">More monetization
+on tablets</span>: On Android tablets TinyCo has seen higher ARPPU and user
+retention than on phones.</p>
+ </div>
+
+ </div>
+
+</div> <!-- END STORY -->
+
+
+<div style="margin-bottom:2em;"><!-- START STORY -->
+
+<h3>Instapaper: Riding the growing wave of Android tablets</h3>
+
+
+ <img alt="" class="screenshot thumbnail" style="-webkit-border-radius: 5px;
+ -moz-border-radius: 5px;
+ border-radius: 5px height:78px;
+ width: 78px;
+ float: left;
+ margin: 12px 20px 9px 20px;" src=
+ "https://lh3.ggpht.com/30KKcrIFO8V_wRfhnHaI9l0CLH_orIVFE7Xywtr9TBxAf0hi2BaZkKyBOs63Yfavpg=w124">
+
+
+ <div style="list-style: none;height:100%;
+ float: right;
+ border-top: 1px solid #9C0;
+ width: 220px;
+ margin: 4px 20px;padding: .5em;">
+
+
+
+
+ <h5>About the app</h5>
+ <ul>
+ <li><a href="http://play.google.com/store/apps/details?id=com.instapaper.android">Instapaper</a> by Mobelux</li>
+ <li>Content-browsing utility that targets 7- to 10-inch tablets and phones</li>
+ </ul>
+
+ <h5>Tablet Results</h5>
+
+ <ul>
+ <li>Tablets are now 50% of the app's installed base.</li>
+ </ul>
+
+ <div style="padding:.5em 0 0 1em;">
+<a href="http://play.google.com/store/apps/details?id=com.instapaper.android">
+ <img alt="Android app on Google Play"
+ src="http://developer.android.com/images/brand/en_generic_rgb_wo_45.png" />
+</a>
+
+ </div>
+ </div>
+
+ <div style="line-height:1.4em;">
+ <p style="margin-top:0;margin-bottom:12px;">Instapaper for Android is an app
+for saving web content to read later. Developer Mobelux decided that creating a
+great UI for Android tablet users would be an essential part of their initial launch
+plan.</p>
+
+ <p>The app launched at the beginning of the summer of 2012, just in time to
+take advantage of a new tide of Android tablets, including the <span
+style="white-space:nowrap;">Nexus 7</span> tablet. The app has since seen huge
+popularity among tablet users, in particular, on Nexus 7. On the day that
+pre-orders of Nexus 7 began arriving, Mobelux saw a 600% jump in downloads of
+its app on Google Play.</p>
+
+ <p>“We saw a promising new set of Android tablets about to hit the market
+and wanted to position ourselves to be ready for them” said Jeff Rock of
+Mobelux. “It was a market that others were hesitant to explore, but the decision
+to prioritize tablets has paid off very well for us.”</p>
+
+ <p>Since that initial 600% jump in downloads, Instapaper for Android has
+continued to see a successful run on Android tablets. In fact, Android tablets
+now represent about 50% of their installed base. “With more and more Android
+tablets coming online, we’re excited to see how our investment in Android
+tablets continues to pay off.”</p>
+ </div>
+
+ <div style="clear:both;margin-top:40px;width:auto;">
+
+ <a href=""><img src="{@docRoot}images/distribute/instapaper.png"></a>
+
+ <div style="width:600px;margin-top:0px;padding:0 90px;">
+ <p class="image-caption"><span style="font-weight:500;">Popular with
+tablet users</span>: A great tablet UI and browsing convenience make Instapaper
+popular with Android tablet users.</p>
+ </div>
+
+ </div>
+
+</div> <!-- END STORY -->
+
+
+
diff --git a/docs/html/distribute/googleplay/strategies/app-quality.jd b/docs/html/distribute/googleplay/strategies/app-quality.jd
index 6ea862b..eb2cd2b 100644
--- a/docs/html/distribute/googleplay/strategies/app-quality.jd
+++ b/docs/html/distribute/googleplay/strategies/app-quality.jd
@@ -1,10 +1,10 @@
-page.title=Improving App Quality
+page.title=Improving App Quality After Launch
@jd:body
<div id="qv-wrapper">
<div id="qv">
-<h2>Strategies:</h2>
-<ul>
+<h2>Strategies</h2>
+<ol>
<li><a href="#listen">Listen to Your Users</a></li>
<li><a href="#stability">Improve Stability and Eliminate Bugs</a></li>
<li><a href="#responsiveness">Improve UI Responsiveness</a></li>
@@ -13,7 +13,14 @@ page.title=Improving App Quality
<li><a href="#features">Deliver the Right Set of Features</a></li>
<li><a href="#integrate">Integrate with the System and Third-Party Apps</a></li>
<li><a href="#details">Pay Attention to Details</a></li>
-</ul>
+</ol>
+
+<h2>You Should Also Read</h2>
+<ol>
+<li><a href="{@docRoot}distribute/googleplay/quality/core.html">Core App Quality Guidelines</a></li>
+<li><a href="{@docRoot}distribute/googleplay/quality/tablet.html">Tablet App Quality Checklist</a></li>
+</ol>
+
</div>
</div>
@@ -22,7 +29,7 @@ With thousands of new apps being published in Google Play every week, it's impor
<p>
A better app can go a very long way: a higher quality app will translate to higher user ratings, generally better rankings, more downloads, and higher retention (longer install periods). High-quality apps also have a much higher likelihood of getting some unanticipated positive publicity such as being featured in Google Play or getting social media buzz.</p>
<p>
-The upside to having a higher-quality app is obvious. However, it's not always clear how to make an app "better". The path to improving app quality isn't always well-lit. The term "quality" &mdash; along with "polish" and "fit and finish" &mdash; aren't always well-defined. Here we'll light the path by looking at some of the key factors in app quality and ways of improving your app along these dimensions.</p>
+The upside to having a higher-quality app is obvious. However, it's not always clear how to make an app "better". This document looks at some of the key factors in app quality and ways of improving your app over time, after you've launched the app.</p>
<h2 id="listen">Listen to Your Users</h2>
<p>
@@ -30,7 +37,7 @@ Most ways of measuring the "success" of an app are dependent on user behavior. U
<p>
The most obvious way to listen to users is by reading and addressing comments on your app in Google Play. Although the comments aren't always productive or constructive, some will provide valuable insight on aspects of your app that you may not have consciously considered before. It's important to remember that users have the opportunity to change their ratings and comments about an app as much as they'd like.</p>
<p>
-One way to reach users and help them address their concerns is to set up your own support and discussion destination(s). There are some great support tools out there that can put you in touch with your users directly such as <a href="http://groups.google.com">Google Groups</a>, <a href="http://discussions.zoho.com/">Zoho Discussions</a>, <a href="http://getsatisfaction.com">getsatisfaction.com</a> and <a href="http://uservoice.com">uservoice.com</a>. Once you get set up with such a tool, make sure to fill in the support link in your Google Play product details page &mdash; users do click through to these.</p>
+One way to reach users and help them address their concerns is to set up your own support and discussion destination(s). There are some great support tools out there that can put you in touch with your users directly, from forums such as <a href="http://groups.google.com">Google Groups</a> to comprehensive customer support products and destinations. Once you get set up with such a tool, make sure to fill in the support link in your Google Play product details page &mdash; users do click through to these.</p>
<p>
Another way to better listen to your users is by having a public beta or trusted tester program. It's crucial to have some amount of real user testing before releasing something in Google Play. Fortunately, you can distribute your apps to users outside of Google Play via a website; this website can require a login or be publicly accessible&nbsp;&mdash;&nbsp;it's entirely up to you. Take advantage of this opportunity by offering your next planned update to some early adopters, before submitting to Google Play. You'll be surprised by how many little, yet impactful, improvements can come out of crowd-sourced, real-user testing.</p>
@@ -44,7 +51,7 @@ One noteworthy and yet relatively underused tool for catching stability issues s
<p>
Also, with the Google error-reporting features built into most Android devices, users now have a way to report application crashes to developers. The error reports show up in aggregate in the Google Play Developer Console. Make sure to read these reports often and act on them appropriately.</p>
<p>
-Last, keep an external bug and feature request tracker and let users know how to find it. This will enable them to engage with the app at a closer level, by following features and bugs that affect them. User frustration with app problems can be effectively managed with diligent issue tracking and communication. Some of the community support tools listed above offer issue tracking features, and if your project is open source, most popular repository hosting sites such as <a href="http://code.google.com/hosting">Google Code</a> and <a href="https://github.com/">GitHub</a> will offer this as well.</p>
+Last, keep an external bug and feature request tracker and let users know how to find it. This will enable them to engage with the app at a closer level, by following features and bugs that affect them. User frustration with app problems can be effectively managed with diligent issue tracking and communication. Some of the community support tools listed above offer issue tracking features, and if your project is open source, most popular repository hosting sites will offer this as well.</p>
<h2 id="responsiveness">Improve UI Responsiveness</h2>
<p>
@@ -52,15 +59,14 @@ One sure-fire way to lose your users is to give them a slow, unresponsive UI. Re
<p>
You can improve your apps's UI responsiveness by moving long-running operations off the main thread to worker threads. Android offers built-in debugging facilities such as StrictMode for analyzing your app's performance and activities on the main thread. You can see more recommendations in <a href="http://www.youtube.com/watch?v=c4znvD-7VDA">Writing Zippy Android Apps</a>, a developer session from Google I/O 2010,</p>
-
<div class="sidebox-wrapper">
<div class="sidebox">
-<h2>More resources</h2>
+<h3>More resources</h3>
<ul>
<li><a href="{@docRoot}design/index.html">Android Design</a></li>
<li><a href="{@docRoot}guide/practices/performance.html">Designing for Performance</a></li>
<li><a href="{@docRoot}guide/practices/responsiveness.html">Designing for Responsiveness</a>
-<li><a href="{@docRoot}guide/practices/seamlessness.html">Designing for seamlessness</a>
+<li><a href="{@docRoot}guide/practices/seamlessness.html">Designing for Seamlessness</a>
</li>
</ul>
</div></div>
@@ -73,27 +79,26 @@ Lastly, pointed out in the blog post <a href="http://android-developers.blogspot
<h2 id="usability">Improve Usability</h2>
<p>
In usability and in app design too, you should listen carefully to your users. Ask a handful of real Android device users (friends, family, etc.) to try out your app and observe them as they interact with it. Look for cases where they get confused, are unsure of how to proceed, or are surprised by certain behaviors. Minimize these cases by rethinking some of the interactions in your app, perhaps working in some of the <a href="http://www.youtube.com/watch?v=M1ZBjlCRfz0">user interface patterns</a> the Android UI team discussed at Google I/O.</p>
-<p>
-In the same vein, two problems that can plague some Android user interfaces are small tap targets and excessively small font sizes. These are generally easy to fix and can make a big impact on usability and user satisfaction. As a general rule, optimize for ease of use and legibility, while minimizing, or at least carefully balancing, information density.</p>
<div class="sidebox-wrapper">
<div class="sidebox">
-<h2>More resources</h2>
-<ul>
-As you are designing or evaluating your app's UI, make sure to read and become familiar with the <a href="{@docRoot}design/index.html">Android Design</a> guidelines. Included are many examples of UI patterns, styles, and building blocks, as well as tools for the design process.</li>
-</ul>
+<p>
+As you are designing or evaluating your app's UI, make sure to read and become familiar with the <a href="/design/index.html">Android Design</a> guidelines. Included are many examples of UI patterns, styles, and building blocks, as well as tools for the design process.</p>
</div></div>
<p>
+In the same vein, two problems that can plague some Android user interfaces are small tap targets and excessively small font sizes. These are generally easy to fix and can make a big impact on usability and user satisfaction. As a general rule, optimize for ease of use and legibility, while minimizing, or at least carefully balancing, information density.</p>
+
+<p>
Another way to incrementally improve usability, based on real-world data, is to implement <a href="http://code.google.com/mobile/analytics/docs/">Analytics</a> throughout your app to log usage of particular sections. Consider demoting infrequently used sections to the overflow menu in the <a href="{@docRoot}design/patterns/actionbar.html">Action bar</a>, or removing them altogether. For often-used sections and UI elements, make sure they're immediately obvious and easily accessible in your app's UI so that users can get to them quickly.</p>
<p>
Lastly, usability is an extensive and well-documented subject, with close ties to interface design, cognitive science, and other disciplines.</p>
<h2 id="appearance">Professional Appearance and Aesthetics</h2>
<p>
-There's no substitute for a real user interface designer&nbsp;&mdash;&nbsp;ideally one who's well-versed in mobile and Android, and ideally handy with both interaction and visual design. One popular venue to post openings for designers is <a href="http://jobs.smashingmagazine.com">jobs.smashingmagazine.com</a>, and leveraging social connections on Twitter and LinkedIn can surface great talent.</p>
+There's no substitute for a real user interface designer&nbsp;&mdash;&nbsp;ideally one who's well-versed in mobile and Android, and ideally handy with both interaction and visual design. One popular venue to post openings for designers is <a href="http://jobs.smashingmagazine.com">jobs.smashingmagazine.com</a>, and leveraging social networks can also surface great talent.</p>
<p>
-If you don't have the luxury of working with a UI designer, there are some ways in which you can improve your app's appearance yourself. First, get familiar with Adobe Photoshop, Adobe Fireworks, or some other raster image editing tool. Mastering the art of the pixel in these apps takes time, but honing this skill can help build polish across your interface designs. Also, master the resources framework by studying <a href="http://android.git.kernel.org/?p=platform/frameworks/base.git;a=tree;f=core/res/res;h=a3562fe1af94134486a8a899f02a9c2f7986c8dd;hb=master">the framework UI</a> assets and layouts and reading through the new <a href="{@docRoot}guide/topics/resources/index.html">resources documentation</a>. Techniques such as 9-patches and resource directory qualifiers are somewhat unique to Android, and are crucial in building flexible yet aesthetic UIs.</p>
+If you don't have the luxury of working with a UI designer, there are some ways in which you can improve your app's appearance yourself. First, get familiar with Adobe Photoshop, Adobe Fireworks, or some other raster image editing tool. Mastering the art of the pixel in these apps takes time, but honing this skill can help build polish across your interface designs. Also, master the resources framework by studying the framework UI assets and layouts and reading through the <a href="{@docRoot}guide/topics/resources/index.html">resources documentation</a>. Techniques such as 9-patches and resource directory qualifiers are somewhat unique to Android, and are crucial in building flexible yet aesthetic UIs.</p>
<p>
Before you get too far in designing your app and writing the code, make sure to visit the Android Design site and learn about the vision, the building blocks, and the tools of designing beautiful and inspiring user interfaces.</p>
@@ -109,8 +114,8 @@ A great way to deliver a delightful user experience is to integrate tightly with
<p>For some app categories, basic features like home screen widgets are par for the course. Not including them is a sure-fire way to tarnish an otherwise positive user experience. Some apps can achieve even tighter OS integration with Android's contacts, accounts, and sync APIs. </p>
<p>
-Third-party integrations can provide even more user delight and give the user a feeling of device cohesiveness. It's also a really nice way of adding functionality to your app without writing any extra code (by leveraging other apps' functionalities). For example, if you're creating a camera app, you can allow users to edit their photos in <a href=" http://mobile.photoshop.com/android/">Photoshop Express</a> before saving them to their collection, if they have that third-party application installed. More information on this subject is available in the class, <a href="{@docRoot}training/basics/intents/index.html">Interacting with Other Apps</a>.</p>
+Third-party integrations can provide even more user delight and give the user a feeling of device cohesiveness. It's also a really nice way of adding functionality to your app without writing any extra code (by leveraging other apps' functionalities). For example, if you're creating a camera app, you can allow users to edit their photos in another app before saving them to their collection, if they have that third-party application installed. More information on this subject is available in the Android Training class <a href="{@docRoot}training/basics/intents/index.html">Interacting with Other Apps</a>.</p>
<h2 id="details">Pay Attention to Details</h2>
<p>
-One particular detail to pay close attention to is your app's icon quality and consistency. Make sure your app icons (especially your launcher icon) are crisp and pixel-perfect at all resolutions, and follow the <a href="{@docRoot}guide/practices/ui_guidelines/icon_design.html">icon guidelines</a> as much as possible. If you're having trouble or don't have the resources to design the icons yourself, consider using the new <a href="http://android-ui-utils.googlecode.com/hg/asset-studio/dist/index.html">Android Asset Studio</a> tool to generate a set.</p>
+One particular detail to pay close attention to is your app's icon quality and consistency. Make sure your app icons (especially your launcher icon) are crisp and pixel-perfect at all resolutions, and follow the <a href="{@docRoot}guide/practices/ui_guidelines/icon_design.html">icon guidelines</a> as much as possible. If you're having trouble or don't have the resources to design the icons yourself, consider using the <a href="http://android-ui-utils.googlecode.com/hg/asset-studio/dist/index.html">Android Asset Studio</a> tool to generate a set.</p>
diff --git a/docs/html/distribute/promote/device-art-resources/nexus_10/land_back.png b/docs/html/distribute/promote/device-art-resources/nexus_10/land_back.png
new file mode 100644
index 0000000..71bb52d
--- /dev/null
+++ b/docs/html/distribute/promote/device-art-resources/nexus_10/land_back.png
Binary files differ
diff --git a/docs/html/distribute/promote/device-art-resources/nexus_10/land_fore.png b/docs/html/distribute/promote/device-art-resources/nexus_10/land_fore.png
new file mode 100644
index 0000000..d29f818
--- /dev/null
+++ b/docs/html/distribute/promote/device-art-resources/nexus_10/land_fore.png
Binary files differ
diff --git a/docs/html/distribute/promote/device-art-resources/nexus_10/land_shadow.png b/docs/html/distribute/promote/device-art-resources/nexus_10/land_shadow.png
new file mode 100644
index 0000000..af1a249
--- /dev/null
+++ b/docs/html/distribute/promote/device-art-resources/nexus_10/land_shadow.png
Binary files differ
diff --git a/docs/html/distribute/promote/device-art-resources/nexus_10/port_back.png b/docs/html/distribute/promote/device-art-resources/nexus_10/port_back.png
new file mode 100644
index 0000000..501690b
--- /dev/null
+++ b/docs/html/distribute/promote/device-art-resources/nexus_10/port_back.png
Binary files differ
diff --git a/docs/html/distribute/promote/device-art-resources/nexus_10/port_fore.png b/docs/html/distribute/promote/device-art-resources/nexus_10/port_fore.png
new file mode 100644
index 0000000..689a72a
--- /dev/null
+++ b/docs/html/distribute/promote/device-art-resources/nexus_10/port_fore.png
Binary files differ
diff --git a/docs/html/distribute/promote/device-art-resources/nexus_10/port_shadow.png b/docs/html/distribute/promote/device-art-resources/nexus_10/port_shadow.png
new file mode 100644
index 0000000..b2265ef
--- /dev/null
+++ b/docs/html/distribute/promote/device-art-resources/nexus_10/port_shadow.png
Binary files differ
diff --git a/docs/html/distribute/promote/device-art-resources/nexus_10/thumb.png b/docs/html/distribute/promote/device-art-resources/nexus_10/thumb.png
new file mode 100644
index 0000000..8d8dee9
--- /dev/null
+++ b/docs/html/distribute/promote/device-art-resources/nexus_10/thumb.png
Binary files differ
diff --git a/docs/html/distribute/promote/device-art-resources/nexus_4/land_back.png b/docs/html/distribute/promote/device-art-resources/nexus_4/land_back.png
new file mode 100644
index 0000000..57a011a
--- /dev/null
+++ b/docs/html/distribute/promote/device-art-resources/nexus_4/land_back.png
Binary files differ
diff --git a/docs/html/distribute/promote/device-art-resources/nexus_4/land_fore.png b/docs/html/distribute/promote/device-art-resources/nexus_4/land_fore.png
new file mode 100644
index 0000000..72c9654
--- /dev/null
+++ b/docs/html/distribute/promote/device-art-resources/nexus_4/land_fore.png
Binary files differ
diff --git a/docs/html/distribute/promote/device-art-resources/nexus_4/land_shadow.png b/docs/html/distribute/promote/device-art-resources/nexus_4/land_shadow.png
new file mode 100644
index 0000000..d80a5fd
--- /dev/null
+++ b/docs/html/distribute/promote/device-art-resources/nexus_4/land_shadow.png
Binary files differ
diff --git a/docs/html/distribute/promote/device-art-resources/nexus_4/port_back.png b/docs/html/distribute/promote/device-art-resources/nexus_4/port_back.png
new file mode 100644
index 0000000..e64fae4
--- /dev/null
+++ b/docs/html/distribute/promote/device-art-resources/nexus_4/port_back.png
Binary files differ
diff --git a/docs/html/distribute/promote/device-art-resources/nexus_4/port_fore.png b/docs/html/distribute/promote/device-art-resources/nexus_4/port_fore.png
new file mode 100644
index 0000000..c9fb062
--- /dev/null
+++ b/docs/html/distribute/promote/device-art-resources/nexus_4/port_fore.png
Binary files differ
diff --git a/docs/html/distribute/promote/device-art-resources/nexus_4/port_shadow.png b/docs/html/distribute/promote/device-art-resources/nexus_4/port_shadow.png
new file mode 100644
index 0000000..b2064a3
--- /dev/null
+++ b/docs/html/distribute/promote/device-art-resources/nexus_4/port_shadow.png
Binary files differ
diff --git a/docs/html/distribute/promote/device-art-resources/nexus_4/thumb.png b/docs/html/distribute/promote/device-art-resources/nexus_4/thumb.png
new file mode 100644
index 0000000..2988dc9
--- /dev/null
+++ b/docs/html/distribute/promote/device-art-resources/nexus_4/thumb.png
Binary files differ
diff --git a/docs/html/distribute/promote/device-art-resources/nexus_7/land_back.png b/docs/html/distribute/promote/device-art-resources/nexus_7/land_back.png
index 2999f35..697fb7d 100644
--- a/docs/html/distribute/promote/device-art-resources/nexus_7/land_back.png
+++ b/docs/html/distribute/promote/device-art-resources/nexus_7/land_back.png
Binary files differ
diff --git a/docs/html/distribute/promote/device-art-resources/nexus_7/land_fore.png b/docs/html/distribute/promote/device-art-resources/nexus_7/land_fore.png
index cefdd35..735262f 100644
--- a/docs/html/distribute/promote/device-art-resources/nexus_7/land_fore.png
+++ b/docs/html/distribute/promote/device-art-resources/nexus_7/land_fore.png
Binary files differ
diff --git a/docs/html/distribute/promote/device-art-resources/nexus_7/land_shadow.png b/docs/html/distribute/promote/device-art-resources/nexus_7/land_shadow.png
index 8f7aec7..cfb7952 100644
--- a/docs/html/distribute/promote/device-art-resources/nexus_7/land_shadow.png
+++ b/docs/html/distribute/promote/device-art-resources/nexus_7/land_shadow.png
Binary files differ
diff --git a/docs/html/distribute/promote/device-art-resources/nexus_7/port_back.png b/docs/html/distribute/promote/device-art-resources/nexus_7/port_back.png
index b2908a8..5bb815a 100644
--- a/docs/html/distribute/promote/device-art-resources/nexus_7/port_back.png
+++ b/docs/html/distribute/promote/device-art-resources/nexus_7/port_back.png
Binary files differ
diff --git a/docs/html/distribute/promote/device-art-resources/nexus_7/port_fore.png b/docs/html/distribute/promote/device-art-resources/nexus_7/port_fore.png
index 7f4b0b4..1be3b21 100644
--- a/docs/html/distribute/promote/device-art-resources/nexus_7/port_fore.png
+++ b/docs/html/distribute/promote/device-art-resources/nexus_7/port_fore.png
Binary files differ
diff --git a/docs/html/distribute/promote/device-art-resources/nexus_7/port_shadow.png b/docs/html/distribute/promote/device-art-resources/nexus_7/port_shadow.png
index c10bd53..7e8aff2 100644
--- a/docs/html/distribute/promote/device-art-resources/nexus_7/port_shadow.png
+++ b/docs/html/distribute/promote/device-art-resources/nexus_7/port_shadow.png
Binary files differ
diff --git a/docs/html/distribute/promote/device-art-resources/nexus_7/thumb.png b/docs/html/distribute/promote/device-art-resources/nexus_7/thumb.png
index 8b5cc5a..b5db82e 100644
--- a/docs/html/distribute/promote/device-art-resources/nexus_7/thumb.png
+++ b/docs/html/distribute/promote/device-art-resources/nexus_7/thumb.png
Binary files differ
diff --git a/docs/html/distribute/promote/device-art.jd b/docs/html/distribute/promote/device-art.jd
index af36625..55b846e 100644
--- a/docs/html/distribute/promote/device-art.jd
+++ b/docs/html/distribute/promote/device-art.jd
@@ -18,7 +18,9 @@ feature image or screenshots for your Google Play app listing.</p>
<p>Drag a screenshot from your desktop onto a device to the right.</p>
</div>
<div class="layout-content-col span-10">
- <ul id="device-list"></ul>
+ <ul class="device-list primary"></ul>
+ <a href="#" id="archive-expando">Older devices</a>
+ <ul class="device-list archive"></ul>
</div>
</div>
@@ -57,12 +59,12 @@ feature image or screenshots for your Google Play app listing.</p>
text-transform: uppercase;
}
- #device-list {
+ .device-list {
padding: 0;
margin: 0;
}
- #device-list li {
+ .device-list li {
display: inline-block;
vertical-align: bottom;
margin: 0;
@@ -70,11 +72,11 @@ feature image or screenshots for your Google Play app listing.</p>
text-align: center;
}
- #device-list li .thumb-container {
+ .device-list li .thumb-container {
display: inline-block;
}
- #device-list li .thumb-container img {
+ .device-list li .thumb-container img {
margin-bottom: 8px;
opacity: 0.6;
@@ -83,7 +85,7 @@ feature image or screenshots for your Google Play app listing.</p>
transition: transform 0.2s, opacity 0.2s;
}
- #device-list li.drag-hover .thumb-container img {
+ .device-list li.drag-hover .thumb-container img {
opacity: 1;
-webkit-transform: scale(1.1);
@@ -91,16 +93,35 @@ feature image or screenshots for your Google Play app listing.</p>
transform: scale(1.1);
}
- #device-list li .device-details {
+ .device-list li .device-details {
font-size: 13px;
line-height: 16px;
color: #888;
}
- #device-list li .device-url {
+ .device-list li .device-url {
font-weight: bold;
}
+ #archive-expando {
+ display: block;
+ font-size: 13px;
+ font-weight: bold;
+ color: #333;
+ text-transform: uppercase;
+ margin-top: 16px;
+ padding-top: 16px;
+ padding-left: 28px;
+ border-top: 1px solid transparent;
+ background: transparent url({@docRoot}assets/images/styles/disclosure_down.png)
+ no-repeat scroll 0 8px;
+ }
+
+ #archive-expando.expanded {
+ background-image: url({@docRoot}assets/images/styles/disclosure_up.png);
+ border-top: 1px solid #ccc;
+ }
+
#output {
color: #f44;
font-style: italic;
@@ -117,7 +138,7 @@ feature image or screenshots for your Google Play app listing.</p>
// Global constants
var MSG_INVALID_INPUT_IMAGE = 'Invalid screenshot provided. Screenshots must be PNG files '
- + 'matching the target device\'s screen resolution in either portrait or landscape.';
+ + 'matching the target device\'s screen aspect ratio in either portrait or landscape.';
var MSG_NO_INPUT_IMAGE = 'Drag a screenshot (in PNG format) from your desktop onto a '
+ 'target device above.'
var MSG_GENERATING_IMAGE = 'Generating device art&hellip;';
@@ -127,17 +148,44 @@ feature image or screenshots for your Google Play app listing.</p>
// Device manifest.
var DEVICES = [
{
+ id: 'nexus_4',
+ title: 'Nexus 4',
+ url: 'http://www.google.com/nexus/4/',
+ physicalSize: 4.7,
+ physicalHeight: 5.23,
+ density: 'XHDPI',
+ landRes: ['shadow', 'back', 'fore'],
+ landOffset: [349,214],
+ portRes: ['shadow', 'back', 'fore'],
+ portOffset: [213,350],
+ portSize: [768,1280]
+ },
+ {
id: 'nexus_7',
title: 'Nexus 7',
- url: 'http://www.android.com/devices/detail/nexus-7',
+ url: 'http://www.google.com/nexus/7/',
physicalSize: 7,
physicalHeight: 7.81,
- density: 213,
+ density: '213dpi',
landRes: ['shadow', 'back', 'fore'],
- landOffset: [363,260],
+ landOffset: [315,270],
portRes: ['shadow', 'back', 'fore'],
- portOffset: [265,341],
- portSize: [800,1280],
+ portOffset: [264,311],
+ portSize: [800,1280]
+ },
+ {
+ id: 'nexus_10',
+ title: 'Nexus 10',
+ url: 'http://www.google.com/nexus/10/',
+ physicalSize: 10,
+ physicalHeight: 7,
+ actualResolution: [1600,2560],
+ density: 'XHDPI',
+ landRes: ['shadow', 'back', 'fore'],
+ landOffset: [227,217],
+ portRes: ['shadow', 'back', 'fore'],
+ portOffset: [217,223],
+ portSize: [800,1280]
},
{
id: 'xoom',
@@ -145,12 +193,13 @@ feature image or screenshots for your Google Play app listing.</p>
url: 'http://www.google.com/phone/detail/motorola-xoom',
physicalSize: 10,
physicalHeight: 6.61,
- density: 160,
+ density: 'MDPI',
landRes: ['shadow', 'back', 'fore'],
landOffset: [218,191],
portRes: ['shadow', 'back', 'fore'],
portOffset: [199,200],
portSize: [800,1280],
+ archived: true
},
{
id: 'galaxy_nexus',
@@ -158,12 +207,13 @@ feature image or screenshots for your Google Play app listing.</p>
url: 'http://www.android.com/devices/detail/galaxy-nexus',
physicalSize: 4.65,
physicalHeight: 5.33,
- density: 320,
+ density: 'XHDPI',
landRes: ['shadow', 'back', 'fore'],
landOffset: [371,199],
portRes: ['shadow', 'back', 'fore'],
portOffset: [216,353],
portSize: [720,1280],
+ archived: true
},
{
id: 'nexus_s',
@@ -171,12 +221,13 @@ feature image or screenshots for your Google Play app listing.</p>
url: 'http://www.google.com/phone/detail/nexus-s',
physicalSize: 4.0,
physicalHeight: 4.88,
- density: 240,
+ density: 'HDPI',
landRes: ['shadow', 'back', 'fore'],
landOffset: [247,135],
portRes: ['shadow', 'back', 'fore'],
portOffset: [134,247],
portSize: [480,800],
+ archived: true
}
];
@@ -250,13 +301,23 @@ feature image or screenshots for your Google Play app listing.</p>
$('#output').html(MSG_NO_INPUT_IMAGE);
$('#frame-customizations').hide();
+ $('.device-list.archive').hide();
$('#output-shadow, #output-glare').click(function() {
- createFrame(g_currentDevice, g_currentImage);
+ createFrame();
});
// Build device list.
$.each(DEVICES, function() {
+ var resolution = this.actualResolution || this.portSize;
+ var scaleFactorText = '';
+ if (resolution[0] != this.portSize[0]) {
+ scaleFactorText = '<br>' + (100 * (this.portSize[0] / resolution[0])).toFixed(0) +
+ '% size output';
+ } else {
+ scaleFactorText = '<br>&nbsp;';
+ }
+
$('<li>')
.append($('<div>')
.addClass('thumb-container')
@@ -269,14 +330,26 @@ feature image or screenshots for your Google Play app listing.</p>
.html((this.url
? ('<a class="device-url" href="' + this.url + '">' + this.title + '</a>')
: this.title) +
- '<br>' + this.physicalSize + '" @ ' + this.density + 'dpi' +
- '<br>' + this.portSize[0] + 'x' + this.portSize[1]))
+ '<br>' + this.physicalSize + '" @ ' + this.density +
+ '<br>' + (resolution[0] + 'x' + resolution[1]) + scaleFactorText))
.data('deviceId', this.id)
- .appendTo('#device-list');
+ .appendTo(this.archived ? '.device-list.archive' : '.device-list.primary');
+ });
+
+ // Set up "older devices" expando.
+ $('#archive-expando').click(function() {
+ if ($(this).hasClass('expanded')) {
+ $(this).removeClass('expanded');
+ $('.device-list.archive').hide();
+ } else {
+ $(this).addClass('expanded');
+ $('.device-list.archive').show();
+ }
+ return false;
});
// Set up drag and drop.
- $('#device-list li')
+ $('.device-list li')
.live('dragover', function(evt) {
$(this).addClass('drag-hover');
evt.dataTransfer.dropEffect = 'link';
@@ -299,6 +372,8 @@ feature image or screenshots for your Google Play app listing.</p>
g_currentFilename = data.name;
g_currentImage = img;
createFrame();
+ // Send the event to Analytics
+ _gaq.push(['_trackEvent', 'Distribute', 'Create Device Art', g_currentDevice.title]);
});
});
});
@@ -333,27 +408,19 @@ feature image or screenshots for your Google Play app listing.</p>
*/
function createFrame() {
var port;
- if (g_currentImage.naturalWidth == g_currentDevice.portSize[0] &&
- g_currentImage.naturalHeight == g_currentDevice.portSize[1]) {
- if (!g_currentDevice.portRes) {
- alert('No portrait frame is currently available for this device.');
- $('#output').html(MSG_NO_INPUT_IMAGE);
- return;
- }
+
+ var aspect1 = g_currentImage.naturalWidth / g_currentImage.naturalHeight;
+ var aspect2 = g_currentDevice.portSize[0] / g_currentDevice.portSize[1];
+
+ if (aspect1 == aspect2) {
port = true;
- } else if (g_currentImage.naturalWidth == g_currentDevice.portSize[1] &&
- g_currentImage.naturalHeight == g_currentDevice.portSize[0]) {
- if (!g_currentDevice.landRes) {
- alert('No landscape frame is currently available for this device.');
- $('#output').html(MSG_NO_INPUT_IMAGE);
- return;
- }
+ } else if (aspect1 == 1 / aspect2) {
port = false;
} else {
- alert('Screenshots for ' + g_currentDevice.title + ' must be ' +
- g_currentDevice.portSize[0] + 'x' + g_currentDevice.portSize[1] +
- ' or ' +
- g_currentDevice.portSize[1] + 'x' + g_currentDevice.portSize[0] + '.');
+ alert('The screenshot must have an aspect ratio of ' +
+ aspect2.toFixed(3) + ' or ' + (1 / aspect2).toFixed(3) +
+ ' (ideally ' + g_currentDevice.portSize[0] + 'x' + g_currentDevice.portSize[1] +
+ ' or ' + g_currentDevice.portSize[1] + 'x' + g_currentDevice.portSize[0] + ').');
$('#output').html(MSG_INVALID_INPUT_IMAGE);
return;
}
@@ -376,6 +443,9 @@ feature image or screenshots for your Google Play app listing.</p>
var width = resourceImages['back'].naturalWidth;
var height = resourceImages['back'].naturalHeight;
var offset = port ? g_currentDevice.portOffset : g_currentDevice.landOffset;
+ var size = port
+ ? g_currentDevice.portSize
+ : [g_currentDevice.portSize[1], g_currentDevice.portSize[0]];
var canvas = document.createElement('canvas');
canvas.width = width;
@@ -386,7 +456,9 @@ feature image or screenshots for your Google Play app listing.</p>
ctx.drawImage(resourceImages['shadow'], 0, 0);
}
ctx.drawImage(resourceImages['back'], 0, 0);
- ctx.drawImage(g_currentImage, offset[0], offset[1]);
+ ctx.fillStyle = '#000';
+ ctx.fillRect(offset[0], offset[1], size[0], size[1]);
+ ctx.drawImage(g_currentImage, offset[0], offset[1], size[0], size[1]);
if (resourceImages['fore'] && $('#output-glare').is(':checked')) {
ctx.drawImage(resourceImages['fore'], 0, 0);
}
diff --git a/docs/html/guide/appendix/media-formats.jd b/docs/html/guide/appendix/media-formats.jd
index 93e8136..feacdc6 100644
--- a/docs/html/guide/appendix/media-formats.jd
+++ b/docs/html/guide/appendix/media-formats.jd
@@ -57,7 +57,7 @@ page.title=Android Supported Media Formats
<p class="table-caption" id="formats-table"><strong>Table 1.</strong> Core media format and codec support.</p>
-<table>
+<table style="font-size:12px">
<tbody>
<tr>
@@ -70,22 +70,22 @@ page.title=Android Supported Media Formats
</tr>
<tr>
-<td rowspan="10">Audio</td>
-<td>AAC LC/LTP</td>
+<td rowspan="11">Audio</td>
+<td>AAC LC</td>
<td style="text-align: center;"><big>&bull;</big></td>
<td style="text-align: center;"><big>&bull;</big></td>
-<td rowspan="3">Mono/Stereo content in any combination of standard bit
-rates up to 160 kbps and sampling rates from 8 to 48kHz</td>
-<td rowspan="3">
+<td rowspan="2">Support for mono/stereo/5.0/5.1
+content with standard sampling rates from 8 to 48 kHz.</td>
+<td rowspan="4">
&bull; 3GPP (.3gp)<br>
- &bull; MPEG-4 (.mp4, .m4a)<br>
+ <nobr>&bull; MPEG-4 (.mp4, .m4a)</nobr><br>
&bull; ADTS raw AAC (.aac, decode in Android 3.1+, encode in Android 4.0+, ADIF not supported)<br>
&bull; MPEG-TS (.ts, not seekable, Android 3.0+)</td>
</tr>
<tr>
<td>HE-AACv1 (AAC+)</td>
-<td>&nbsp;</td>
+<td style="text-align: center;"><big>&bull;</big><br><small>(Android 4.1+)</small></td>
<td style="text-align: center;"><big>&bull;</big></td>
</tr>
@@ -93,6 +93,16 @@ rates up to 160 kbps and sampling rates from 8 to 48kHz</td>
<td>HE-AACv2 (enhanced AAC+)</td>
<td>&nbsp;</td>
<td style="text-align: center;"><big>&bull;</big></td>
+<td>Support for stereo/5.0/5.1
+content with standard sampling rates from 8 to 48 kHz.</td>
+</tr>
+
+<tr>
+<td>AAC ELD (enhanced low delay AAC)</td>
+<td style="text-align: center;"><big>&bull;</big><br><small>(Android 4.1+)</small></td>
+<td style="text-align: center;"><big>&bull;</big><br><small>(Android 4.1+)</small></td>
+<td>Support for mono/stereo content
+with standard sampling rates from 16 to 48 kHz</td>
</tr>
<tr>
@@ -160,9 +170,10 @@ no dither applied for 24-bit.
<tr>
<td>PCM/WAVE</td>
-<td>&nbsp;</td>
+<td style="text-align: center;"><big>&bull;</big><br><small>(Android 4.1+)</small></td>
<td style="text-align: center;"><big>&bull;</big></td>
-<td>8- and 16-bit linear PCM (rates up to limit of hardware)</td>
+<td>8- and 16-bit linear PCM (rates up to limit of hardware). Sampling
+rates for raw PCM recordings at 8000, 16000 and 44100 Hz.</td>
<td>
WAVE (.wav)</td>
</tr>
diff --git a/docs/html/guide/faq/security.jd b/docs/html/guide/faq/security.jd
index 52ee0d9..a6e07c8 100644
--- a/docs/html/guide/faq/security.jd
+++ b/docs/html/guide/faq/security.jd
@@ -57,9 +57,7 @@ key</a>.</p>
<p>We appreciate researchers practicing responsible disclosure by emailing us
with a detailed summary of the issue and keeping the issue confidential while
users are at risk. In return, we will make sure to keep the researcher informed
-of our progress in issuing a fix and will properly credit the reporter(s) when
-we provide the patch. We will always move swiftly to mitigate or fix an
-externally-reported flaw and provide updates to users. </p>
+of our progress in issuing a fix. </p>
<a name="informed" id="informed"></a><h2>How can I stay informed about Android security?</h2>
diff --git a/docs/html/guide/google/gcm/adv.jd b/docs/html/guide/google/gcm/adv.jd
index 2174128..356ee1d 100644
--- a/docs/html/guide/google/gcm/adv.jd
+++ b/docs/html/guide/google/gcm/adv.jd
@@ -51,7 +51,6 @@ delivered right away unless the <code>delay_while_idle</code> flag is set to tru
<p>If the device is not connected to GCM, the message will be stored until a connection is established (again respecting the collapse key rules). When a connection is established, GCM will deliver all pending messages to the device, regardless of the <code>delay_while_idle</code> flag. If the device never gets connected again (for instance, if it was factory reset), the message will eventually time out and be discarded from GCM storage. The default timeout is 4 weeks, unless the <code>time_to_live</code> flag is set.</p>
-<p class="note"><strong>Note:</strong> When you set the <code>time_to_live</code> flag, you must also set <code>collapse_key</code>. Otherwise the message will be rejected as a bad request.</p>
<p>Finally, when GCM attempts to deliver a message to the device and the application was uninstalled, GCM will discard that message right away and invalidate the registration ID. Future attempts to send a message to that device will get a <code>NotRegistered</code> error. See <a href="#unreg">How Unregistration Works</a> for more information.</p>
<p>Although is not possible to track the status of each individual message, the Google APIs Console stats are broken down by messages sent to device, messages collapsed, and messages waiting for delivery.</p>
@@ -164,7 +163,7 @@ registerReceiver(mRetryReceiver, filter);
<p>There are two ways to unregister a device from GCM: manually and automatically.</p>
<p>An Android application can manually unregister itself by issuing a <code>com.google.android.c2dm.intent.UNREGISTER</code> intent, which is useful when the application offers a logoff feature (so it can unregister on logoff and register again on logon). See the <a href="gcm.html#unregistering">Architectural Overview</a> for more discussion of this topic. This is the sequence of events when an application unregisters itself:</p>
<ol>
- <li> The application issues a <code>com.google.android.c2dm.intent.UNREGISTER</code> intent, passing the registration ID (the application should have saved its registration ID when it received the proper <code>com.google.android.c2dm.intent.REGISTRATION</code> intent).</li>
+ <li> The application issues a <code>com.google.android.c2dm.intent.UNREGISTER</code> intent, passing the package name as an extra.</li>
<li>When the GCM server is done with the unregistration, it sends a <code>com.google.android.c2dm.intent.REGISTRATION</code> intent with the <code>unregistered</code> extra set.</li>
<li>The application then must contact the 3rd-party server so it can remove the registration ID.</li>
<li>The application should also clear its registration ID.
@@ -175,7 +174,7 @@ registerReceiver(mRetryReceiver, filter);
<li>The end user uninstalls the application.</li>
<li>The 3rd-party server sends a message to GCM server.</li>
<li>The GCM server sends the message to the device.</li>
- <li>The GCM client receives the message and queries Package Manager about whether there are broadcast receivers configured to receive it, which returns <code>false</code>.
+ <li>The GCM client receives the message and queries Package Manager about whether there are broadcast receivers configured to receive it, which returns <code>false</code>.
</li>
<li>The GCM client informs the GCM server that the application was uninstalled.</li>
<li>The GCM server marks the registration ID for deletion.</li>
@@ -184,6 +183,9 @@ registerReceiver(mRetryReceiver, filter);
<li>The 3rd-party deletes the registration ID.
</li>
</ol>
+
+<p class ="note"><strong>Note:</strong> The GCM client is the Google Cloud Messaging framework present on the device.</p>
+
<p>Note that it might take a while for the registration ID be completely removed from GCM. Thus it is possible that messages sent during step 7 above gets a valid message ID as response, even though the message will not be delivered to the device. Eventually, the registration ID will be removed and the server will get a <code>NotRegistered</code> error, without any further action being required from the 3rd-party server (this scenario happens frequently while an application is being developed and tested).</p>
<h2 id="collapsible">Send-to-Sync vs. Messages with Payload</h2>
diff --git a/docs/html/guide/google/gcm/gcm.jd b/docs/html/guide/google/gcm/gcm.jd
index 5515f31..a47ceb9 100644
--- a/docs/html/guide/google/gcm/gcm.jd
+++ b/docs/html/guide/google/gcm/gcm.jd
@@ -57,9 +57,15 @@ page.title=GCM Architectural Overview
</div>
<p>Google Cloud Messaging for Android (GCM) is a free service that helps
-developers send data from servers to their Android applications on Android devices. This could be a lightweight message telling the Android application that there is new data to be fetched from the server (for instance, a movie uploaded by a friend), or it could be a message containing up to 4kb of payload data (so apps like instant messaging can consume the message directly). The GCM service handles all aspects of queueing of
- messages and delivery to the target Android application running on the target
- device.</p>
+developers send data from servers to their Android applications on Android
+devices. This could be a lightweight message telling the Android application
+that there is new data to be fetched from the server (for instance, a movie
+uploaded by a friend), or it could be a message containing up to 4kb of payload
+data (so apps like instant messaging can consume the message directly). The GCM
+service handles all aspects of queueing of messages and delivery to the target
+Android application running on the target device.</p>
+
+
<p class="note"> To jump right into using GCM with your Android
applications, see the instructions in <a href="gs.html">Getting Started</a>.</p>
@@ -647,14 +653,16 @@ when the device is offline, so that only the last message gets sent to the
client. This is intended to avoid sending too many messages to the phone when it
comes back online. Note that since there is no guarantee of the order in which
messages get sent, the &quot;last&quot; message may not actually be the last
-message sent by the application server. See <a href="adv.html#collapsible">Advanced Topics</a> for more discussion of this topic. Optional, unless you are using the <code>time_to_live</code> parameter&mdash;in that case, you must also specify a <code>collapse_key</code>.</td>
+message sent by the application server. See <a href="adv.html#collapsible">Advanced Topics</a> for more discussion of this topic. Optional.</td>
</tr>
<tr>
<td><code>data</code></td>
<td>A JSON object whose fields represents the key-value pairs of the message's payload data. If present, the payload data it will be
included in the Intent as application data, with the key being the extra's name. For instance, <code>"data":{"score":"3x1"}</code> would result in an intent extra named <code>score</code> whose value is the string <code>3x1</code>.
+
There is no limit on the number of key/value pairs, though there is a limit on the total size of the message (4kb). The values could be any JSON object, but we recommend using strings, since the values will be converted to strings in the GCM server anyway. If you want to include objects or other non-string data types (such as integers or booleans), you have to do the conversion to string yourself. Also note that the key cannot be a reserved word (<code>from</code> or any word starting with <code>google.</code>). To complicate things slightly, there are some reserved words (such as <code>collapse_key</code>) that are technically allowed in payload data. However, if the request also contains the word, the value in the request will overwrite the value in the payload data. Hence using words that are defined as field names in this table is not recommended, even in cases where they are technically allowed. Optional.</td>
+
</tr>
<tr>
<td><code>delay_while_idle</code></td>
@@ -665,7 +673,7 @@ sent. Optional. The default value is <code>false</code>, and must be a JSON bool
</tr>
<tr>
<td><code>time_to_live</code></td>
- <td>How long (in seconds) the message should be kept on GCM storage if the device is offline. Optional (default time-to-live is 4 weeks, and must be set as a JSON number). If you use this parameter, you must also specify a <code>collapse_key</code>.</td>
+ <td>How long (in seconds) the message should be kept on GCM storage if the device is offline. Optional (default time-to-live is 4 weeks, and must be set as a JSON number).</td>
</tr>
</table>
@@ -685,8 +693,10 @@ sent. Optional. The default value is <code>false</code>, and must be a JSON bool
</tr>
<tr>
<td><code>data.&lt;key&gt;</code></td>
+
<td>Payload data, expressed as parameters prefixed with <code>data.</code> and suffixed as the key. For instance, a parameter of <code>data.score=3x1</code> would result in an intent extra named <code>score</code> whose value is the string <code>3x1</code>. There is no limit on the number of key/value parameters, though there is a limit on the total size of the message. Also note that the key cannot be a reserved word (<code>from</code> or any word starting with
<code>google.</code>). To complicate things slightly, there are some reserved words (such as <code>collapse_key</code>) that are technically allowed in payload data. However, if the request also contains the word, the value in the request will overwrite the value in the payload data. Hence using words that are defined as field names in this table is not recommended, even in cases where they are technically allowed. Optional.</td>
+
</tr>
<tr>
<td><code>delay_while_idle</code></td>
@@ -698,7 +708,7 @@ sent. Optional. The default value is <code>false</code>, and must be a JSON bool
</tr>
</table>
-<p>If you want to test your request (either JSON or plain text) without delivering the message to the devices, you can set an optional HTTP parameter called <code>dry_run</code> with the value <code>true</code>. The result will be almost identical to running the request without this parameter, except that the message will not be delivered to the devices. Consequently, the response will contain fake IDs for the message and multicast fields (see <a href="#response">Response format</a>).</p>
+
<h4 id="example-requests">Example requests</h4>
<p>Here is the smallest possible request (a message without any parameters and just one recipient) using JSON:</p>
@@ -763,13 +773,8 @@ the HTTP response contains a non-200 status code (such as 400, 401, or 503).</p>
<td>There was an error authenticating the sender account. <a href="#auth_error">Troubleshoot</a></td>
</tr>
<tr>
- <td>500</td>
- <td>There was an internal error in the GCM server while trying to process the request. <a href="#internal_error">Troubleshoot</a></td>
- </tr>
- <tr>
- <td>503</td>
- <td>Indicates that the server is temporarily unavailable (i.e., because of timeouts, etc ). Sender must retry later, honoring any <code>Retry-After</code> header
- included in the response. Application servers must implement exponential back-off. The GCM server took too long to process the request. <a href="#internal_error">Troubleshoot</a></td>
+ <td>5xx</td>
+ <td>Errors in the 500-599 range (such as 500 or 503) indicate that there was an internal error in the GCM server while trying to process the request, or that the server is temporarily unavailable (for example, because of timeouts). Sender must retry later, honoring any <code>Retry-After</code> header included in the response. Application servers must implement exponential back-off. <a href="#internal_error">Troubleshoot</a></td>
</tr>
</table>
@@ -891,13 +896,11 @@ Happens when the error code is <code>InvalidDataKey</code>.</dd>
</ul>
Check that the token you're sending inside the <code>Authorization</code> header is the correct API key associated with your project. You can check the validity of your API key by running the following command:<br/>
-
<pre># api_key=YOUR_API_KEY
# curl --header "Authorization: key=$api_key" --header Content-Type:"application/json" https://android.googleapis.com/gcm/send -d "{\"registration_ids\":[\"ABC\"]}"</pre>
-
If you receive a 401 HTTP status code, your API key is not valid. Otherwise you should see something like this:<br/>
<pre>
@@ -927,17 +930,15 @@ all messages at the same time.</li>
Senders that cause problems risk being blacklisted.
<br />
-Happens when the HTTP status code is 503, or when the <code>error</code> field of a JSON object in the results array is <code>Unavailable</code>.
+Happens when the HTTP status code is between 501 and 599, or when the <code>error</code> field of a JSON object in the results array is <code>Unavailable</code>.
</dd>
<dt id="internal_error"><strong>Internal Server Error</strong></dt>
<dd>
The server encountered an error while trying to process the request. You
-could retry the same request (obeying the requirements listed in the <strong>Timeout</strong>
+could retry the same request (obeying the requirements listed in the <a href="#timeout">Timeout</a>
section), but if the error persists, please report the problem in the <a href="https://groups.google.com/forum/?fromgroups#!forum/android-gcm">android-gcm group</a>.
-<br />
-Senders that cause problems risk being blacklisted.
<br />
Happens when the HTTP status code is 500, or when the <code>error</code> field of a JSON
object in the results array is <code>InternalServerError</code>.
diff --git a/docs/html/guide/google/gcm/gs.jd b/docs/html/guide/google/gcm/gs.jd
index 6f8598f..8d132d8 100644
--- a/docs/html/guide/google/gcm/gs.jd
+++ b/docs/html/guide/google/gcm/gs.jd
@@ -138,8 +138,16 @@ page.title=GCM: Getting Started
</ol>
<p>This intent service will be called by the <code>GCMBroadcastReceiver</code> (which is is provided by GCM library), as shown in the next step. It must be a subclass of <code>com.google.android.gcm.GCMBaseIntentService</code>, must contain a public constructor, and should be named <code>my_app_package.GCMIntentService</code> (unless you use a subclass of <code>GCMBroadcastReceiver</code> that overrides the method used to name the service).</p>
-<h4><br>
- Step 3: Write the my_app_package.GCMIntentService class</h4>
+
+<p>The intent service must also define its sender ID(s). It does this as follows:</p>
+<ul>
+ <li>If the value is static, the service's default constructor should call <code>super(senderIds)</code>.</li>
+ <li>If the value is dynamic, the service should override the <code>getSenderIds()</code> method.</li>
+</ul>
+
+
+<h4>Step 3: Write the my_app_package.GCMIntentService class</h4>
+
<p>Next write the <code>my_app_package.GCMIntentService</code> class, overriding the following callback methods (which are called by <code>GCMBroadcastReceiver</code>):<br>
</p>
<ul>
diff --git a/docs/html/guide/google/gcm/server-javadoc/allclasses-frame.html b/docs/html/guide/google/gcm/server-javadoc/allclasses-frame.html
index cf7dc28..80ee784 100644
--- a/docs/html/guide/google/gcm/server-javadoc/allclasses-frame.html
+++ b/docs/html/guide/google/gcm/server-javadoc/allclasses-frame.html
@@ -2,12 +2,12 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.6.0_26) on Mon Jul 16 14:12:10 PDT 2012 -->
+<!-- Generated by javadoc (build 1.6.0_26) on Wed Aug 29 14:55:34 PDT 2012 -->
<TITLE>
All Classes
</TITLE>
-<META NAME="date" CONTENT="2012-07-16">
+<META NAME="date" CONTENT="2012-08-29">
<LINK REL ="stylesheet" TYPE="text/css" HREF="default.css" TITLE="Style">
diff --git a/docs/html/guide/google/gcm/server-javadoc/allclasses-noframe.html b/docs/html/guide/google/gcm/server-javadoc/allclasses-noframe.html
index 299085c..966598d 100644
--- a/docs/html/guide/google/gcm/server-javadoc/allclasses-noframe.html
+++ b/docs/html/guide/google/gcm/server-javadoc/allclasses-noframe.html
@@ -2,12 +2,12 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.6.0_26) on Mon Jul 16 14:12:10 PDT 2012 -->
+<!-- Generated by javadoc (build 1.6.0_26) on Wed Aug 29 14:55:34 PDT 2012 -->
<TITLE>
All Classes
</TITLE>
-<META NAME="date" CONTENT="2012-07-16">
+<META NAME="date" CONTENT="2012-08-29">
<LINK REL ="stylesheet" TYPE="text/css" HREF="default.css" TITLE="Style">
diff --git a/docs/html/guide/google/gcm/server-javadoc/com/google/android/gcm/server/Constants.html b/docs/html/guide/google/gcm/server-javadoc/com/google/android/gcm/server/Constants.html
index 7384dfd..515bba4 100644
--- a/docs/html/guide/google/gcm/server-javadoc/com/google/android/gcm/server/Constants.html
+++ b/docs/html/guide/google/gcm/server-javadoc/com/google/android/gcm/server/Constants.html
@@ -2,12 +2,12 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.6.0_26) on Mon Jul 16 14:12:09 PDT 2012 -->
+<!-- Generated by javadoc (build 1.6.0_26) on Wed Aug 29 14:55:34 PDT 2012 -->
<TITLE>
Constants
</TITLE>
-<META NAME="date" CONTENT="2012-07-16">
+<META NAME="date" CONTENT="2012-08-29">
<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../default.css" TITLE="Style">
diff --git a/docs/html/guide/google/gcm/server-javadoc/com/google/android/gcm/server/InvalidRequestException.html b/docs/html/guide/google/gcm/server-javadoc/com/google/android/gcm/server/InvalidRequestException.html
index 56de783..bb0974c 100644
--- a/docs/html/guide/google/gcm/server-javadoc/com/google/android/gcm/server/InvalidRequestException.html
+++ b/docs/html/guide/google/gcm/server-javadoc/com/google/android/gcm/server/InvalidRequestException.html
@@ -2,12 +2,12 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.6.0_26) on Mon Jul 16 14:12:10 PDT 2012 -->
+<!-- Generated by javadoc (build 1.6.0_26) on Wed Aug 29 14:55:34 PDT 2012 -->
<TITLE>
InvalidRequestException
</TITLE>
-<META NAME="date" CONTENT="2012-07-16">
+<META NAME="date" CONTENT="2012-08-29">
<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../default.css" TITLE="Style">
diff --git a/docs/html/guide/google/gcm/server-javadoc/com/google/android/gcm/server/Message.Builder.html b/docs/html/guide/google/gcm/server-javadoc/com/google/android/gcm/server/Message.Builder.html
index 7d5110c..c2ee648 100644
--- a/docs/html/guide/google/gcm/server-javadoc/com/google/android/gcm/server/Message.Builder.html
+++ b/docs/html/guide/google/gcm/server-javadoc/com/google/android/gcm/server/Message.Builder.html
@@ -2,12 +2,12 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.6.0_26) on Mon Jul 16 14:12:10 PDT 2012 -->
+<!-- Generated by javadoc (build 1.6.0_26) on Wed Aug 29 14:55:34 PDT 2012 -->
<TITLE>
Message.Builder
</TITLE>
-<META NAME="date" CONTENT="2012-07-16">
+<META NAME="date" CONTENT="2012-08-29">
<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../default.css" TITLE="Style">
diff --git a/docs/html/guide/google/gcm/server-javadoc/com/google/android/gcm/server/Message.html b/docs/html/guide/google/gcm/server-javadoc/com/google/android/gcm/server/Message.html
index 37a8a74..5dbd262 100644
--- a/docs/html/guide/google/gcm/server-javadoc/com/google/android/gcm/server/Message.html
+++ b/docs/html/guide/google/gcm/server-javadoc/com/google/android/gcm/server/Message.html
@@ -2,12 +2,12 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.6.0_26) on Mon Jul 16 14:12:10 PDT 2012 -->
+<!-- Generated by javadoc (build 1.6.0_26) on Wed Aug 29 14:55:34 PDT 2012 -->
<TITLE>
Message
</TITLE>
-<META NAME="date" CONTENT="2012-07-16">
+<META NAME="date" CONTENT="2012-08-29">
<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../default.css" TITLE="Style">
diff --git a/docs/html/guide/google/gcm/server-javadoc/com/google/android/gcm/server/MulticastResult.html b/docs/html/guide/google/gcm/server-javadoc/com/google/android/gcm/server/MulticastResult.html
index 21752ca..0721488 100644
--- a/docs/html/guide/google/gcm/server-javadoc/com/google/android/gcm/server/MulticastResult.html
+++ b/docs/html/guide/google/gcm/server-javadoc/com/google/android/gcm/server/MulticastResult.html
@@ -2,12 +2,12 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.6.0_26) on Mon Jul 16 14:12:10 PDT 2012 -->
+<!-- Generated by javadoc (build 1.6.0_26) on Wed Aug 29 14:55:34 PDT 2012 -->
<TITLE>
MulticastResult
</TITLE>
-<META NAME="date" CONTENT="2012-07-16">
+<META NAME="date" CONTENT="2012-08-29">
<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../default.css" TITLE="Style">
diff --git a/docs/html/guide/google/gcm/server-javadoc/com/google/android/gcm/server/Result.html b/docs/html/guide/google/gcm/server-javadoc/com/google/android/gcm/server/Result.html
index 512b8f5..a4aad29 100644
--- a/docs/html/guide/google/gcm/server-javadoc/com/google/android/gcm/server/Result.html
+++ b/docs/html/guide/google/gcm/server-javadoc/com/google/android/gcm/server/Result.html
@@ -2,12 +2,12 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.6.0_26) on Mon Jul 16 14:12:10 PDT 2012 -->
+<!-- Generated by javadoc (build 1.6.0_26) on Wed Aug 29 14:55:34 PDT 2012 -->
<TITLE>
Result
</TITLE>
-<META NAME="date" CONTENT="2012-07-16">
+<META NAME="date" CONTENT="2012-08-29">
<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../default.css" TITLE="Style">
diff --git a/docs/html/guide/google/gcm/server-javadoc/com/google/android/gcm/server/Sender.html b/docs/html/guide/google/gcm/server-javadoc/com/google/android/gcm/server/Sender.html
index 5224e15..fabda98 100644
--- a/docs/html/guide/google/gcm/server-javadoc/com/google/android/gcm/server/Sender.html
+++ b/docs/html/guide/google/gcm/server-javadoc/com/google/android/gcm/server/Sender.html
@@ -2,12 +2,12 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.6.0_26) on Mon Jul 16 14:12:10 PDT 2012 -->
+<!-- Generated by javadoc (build 1.6.0_26) on Wed Aug 29 14:55:34 PDT 2012 -->
<TITLE>
Sender
</TITLE>
-<META NAME="date" CONTENT="2012-07-16">
+<META NAME="date" CONTENT="2012-08-29">
<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../default.css" TITLE="Style">
@@ -591,6 +591,8 @@ protected static java.lang.String <B>getString</B>(java.io.InputStream&nbsp;stre
<p>
If the stream ends in a newline character, it will be stripped.
+ <p>
+ If the stream is null, returns an empty string.
<P>
<DD><DL>
diff --git a/docs/html/guide/google/gcm/server-javadoc/com/google/android/gcm/server/package-frame.html b/docs/html/guide/google/gcm/server-javadoc/com/google/android/gcm/server/package-frame.html
index 9f099b3..1bc4fd9 100644
--- a/docs/html/guide/google/gcm/server-javadoc/com/google/android/gcm/server/package-frame.html
+++ b/docs/html/guide/google/gcm/server-javadoc/com/google/android/gcm/server/package-frame.html
@@ -2,12 +2,12 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.6.0_26) on Mon Jul 16 14:12:10 PDT 2012 -->
+<!-- Generated by javadoc (build 1.6.0_26) on Wed Aug 29 14:55:34 PDT 2012 -->
<TITLE>
com.google.android.gcm.server
</TITLE>
-<META NAME="date" CONTENT="2012-07-16">
+<META NAME="date" CONTENT="2012-08-29">
<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../default.css" TITLE="Style">
diff --git a/docs/html/guide/google/gcm/server-javadoc/com/google/android/gcm/server/package-summary.html b/docs/html/guide/google/gcm/server-javadoc/com/google/android/gcm/server/package-summary.html
index eddcca1..de791c7 100644
--- a/docs/html/guide/google/gcm/server-javadoc/com/google/android/gcm/server/package-summary.html
+++ b/docs/html/guide/google/gcm/server-javadoc/com/google/android/gcm/server/package-summary.html
@@ -2,12 +2,12 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.6.0_26) on Mon Jul 16 14:12:10 PDT 2012 -->
+<!-- Generated by javadoc (build 1.6.0_26) on Wed Aug 29 14:55:34 PDT 2012 -->
<TITLE>
com.google.android.gcm.server
</TITLE>
-<META NAME="date" CONTENT="2012-07-16">
+<META NAME="date" CONTENT="2012-08-29">
<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../default.css" TITLE="Style">
diff --git a/docs/html/guide/google/gcm/server-javadoc/com/google/android/gcm/server/package-tree.html b/docs/html/guide/google/gcm/server-javadoc/com/google/android/gcm/server/package-tree.html
index d3d1c43..d509312 100644
--- a/docs/html/guide/google/gcm/server-javadoc/com/google/android/gcm/server/package-tree.html
+++ b/docs/html/guide/google/gcm/server-javadoc/com/google/android/gcm/server/package-tree.html
@@ -2,12 +2,12 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.6.0_26) on Mon Jul 16 14:12:10 PDT 2012 -->
+<!-- Generated by javadoc (build 1.6.0_26) on Wed Aug 29 14:55:34 PDT 2012 -->
<TITLE>
com.google.android.gcm.server Class Hierarchy
</TITLE>
-<META NAME="date" CONTENT="2012-07-16">
+<META NAME="date" CONTENT="2012-08-29">
<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../default.css" TITLE="Style">
diff --git a/docs/html/guide/google/gcm/server-javadoc/constant-values.html b/docs/html/guide/google/gcm/server-javadoc/constant-values.html
index 66df664..68db1cb 100644
--- a/docs/html/guide/google/gcm/server-javadoc/constant-values.html
+++ b/docs/html/guide/google/gcm/server-javadoc/constant-values.html
@@ -2,12 +2,12 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.6.0_26) on Mon Jul 16 14:12:10 PDT 2012 -->
+<!-- Generated by javadoc (build 1.6.0_26) on Wed Aug 29 14:55:34 PDT 2012 -->
<TITLE>
Constant Field Values
</TITLE>
-<META NAME="date" CONTENT="2012-07-16">
+<META NAME="date" CONTENT="2012-08-29">
<LINK REL ="stylesheet" TYPE="text/css" HREF="default.css" TITLE="Style">
diff --git a/docs/html/guide/google/gcm/server-javadoc/default.css b/docs/html/guide/google/gcm/server-javadoc/default.css
index 2513e69..7c395c7 100644
--- a/docs/html/guide/google/gcm/server-javadoc/default.css
+++ b/docs/html/guide/google/gcm/server-javadoc/default.css
@@ -530,12 +530,12 @@ h3:target {
}
.design ol {
counter-reset: item; }
- .design ol li {
+ .design ol>li {
font-size: 14px;
line-height: 20px;
list-style-type: none;
position: relative; }
- .design ol li:before {
+ .design ol>li:before {
content: counter(item) ". ";
counter-increment: item;
position: absolute;
@@ -561,16 +561,18 @@ h3:target {
content: "9. "; }
.design ol li.value-10:before {
content: "10. "; }
-.design .with-callouts ol li {
+.design .with-callouts ol>li {
list-style-position: inside;
margin-left: 0; }
- .design .with-callouts ol li:before {
+ .design .with-callouts ol>li:before {
display: inline;
left: -20px;
float: left;
width: 17px;
color: #33b5e5;
font-weight: 500; }
+.design .with-callouts ul>li {
+ list-style-position: outside; }
/* special list items */
li.no-bullet {
@@ -1079,22 +1081,71 @@ color-stop(50%, #acbc00), color-stop(50%, #bdde00), color-stop(100%, #bdde00));
Print Only
========================================================================== */
@media print {
-a {
- color: inherit;
-}
-.nav-x, .nav-y {
- display: none;
-}
-.str { color: #060; }
-.kwd { color: #006; font-weight: bold; }
-.com { color: #600; font-style: italic; }
-.typ { color: #404; font-weight: bold; }
-.lit { color: #044; }
-.pun { color: #440; }
-.pln { color: #000; }
-.tag { color: #006; font-weight: bold; }
-.atn { color: #404; }
-.atv { color: #060; }
+ /* configure printed page */
+ @page {
+ margin: 0.75in 1in;
+ widows: 4;
+ orphans: 4;
+ }
+
+ /* reset spacing metrics */
+ html, body, .wrap {
+ margin: 0 !important;
+ padding: 0 !important;
+ width: auto !important;
+ }
+
+ /* leave enough space on the left for bullets */
+ body {
+ padding-left: 20px !important;
+ }
+ #doc-col {
+ margin-left: 0;
+ }
+
+ /* hide a bunch of non-content elements */
+ #header, #footer, #nav-x, #side-nav,
+ .training-nav-top, .training-nav-bottom,
+ #doc-col .content-footer,
+ .nav-x, .nav-y,
+ .paging-links,
+ a.totop {
+ display: none !important;
+ }
+
+ /* remove extra space above page titles */
+ #doc-col .content-header {
+ margin-top: 0;
+ }
+
+ /* bump up spacing above subheadings */
+ h2 {
+ margin-top: 40px !important;
+ }
+
+ /* print link URLs where possible and give links default text color */
+ p a:after {
+ content: " (" attr(href) ")";
+ font-size: 80%;
+ }
+ p a {
+ word-wrap: break-word;
+ }
+ a {
+ color: inherit;
+ }
+
+ /* syntax highlighting rules */
+ .str { color: #060; }
+ .kwd { color: #006; font-weight: bold; }
+ .com { color: #600; font-style: italic; }
+ .typ { color: #404; font-weight: bold; }
+ .lit { color: #044; }
+ .pun { color: #440; }
+ .pln { color: #000; }
+ .tag { color: #006; font-weight: bold; }
+ .atn { color: #404; }
+ .atv { color: #060; }
}
/* =============================================================================
@@ -2033,8 +2084,11 @@ div.toggle-content.closed .toggle-content-toggleme {
#jd-content img.toggle-content-img {
margin:0 5px 5px 0;
}
-div.toggle-content > p {
- padding:0 0 5px;
+div.toggle-content p {
+ margin:10px 0 0;
+}
+div.toggle-content-toggleme {
+ padding:0 0 0 15px;
}
@@ -2145,14 +2199,9 @@ table.blank th, table.blank td {
.nolist {
list-style:none;
- padding:0;
- margin:0 0 1em 1em;
+ margin-left:0;
}
-.nolist li {
- padding:0 0 2px;
- margin:0;
-}
pre.classic {
background-color:transparent;
@@ -2180,6 +2229,12 @@ p.table-caption {
color:#666;
}
+div.note,
+div.caution,
+div.warning {
+ margin: 0 0 15px;
+}
+
p.note, div.note,
p.caution, div.caution,
p.warning, div.warning {
@@ -2898,10 +2953,6 @@ ul#search_filtered {
/* SEARCH RESULTS */
-/* disable twiddle and size selectors for left column */
-#leftSearchControl div {
- padding:0;
-}
#leftSearchControl .gsc-twiddle {
background-image : none;
@@ -3475,7 +3526,7 @@ EndColorStr='#ececec');
.morehover:hover {
opacity:1;
- height:345px;
+ height:385px;
width:268px;
-webkit-transition-property:height, -webkit-opacity;
}
@@ -3489,7 +3540,7 @@ EndColorStr='#ececec');
.morehover .mid {
width:228px;
background:url(../images/more_mid.png) repeat-y;
- padding:10px 20px 10px 20px;
+ padding:10px 20px 0 20px;
}
.morehover .mid .header {
@@ -3598,15 +3649,19 @@ a.download-sdk {
padding-top: 14px;
}
+#nav-x .wrap {
+ min-height:34px;
+}
+
#nav-x .wrap,
#searchResults.wrap {
max-width:940px;
border-bottom:1px solid #CCC;
- min-height:34px;
-
}
-
+#searchResults.wrap #leftSearchControl {
+ min-height:700px
+}
.nav-x {
margin-left:0;
margin-bottom:0;
@@ -3762,7 +3817,8 @@ a.download-sdk {
height: 300px;
}
.slideshow-develop img.play {
- width:350px;
+ max-width:350px;
+ max-height:240px;
margin:20px 0 0 90px;
-webkit-transform: perspective(800px ) rotateY( 35deg );
box-shadow: -16px 20px 40px rgba(0, 0, 0, 0.3);
@@ -3817,6 +3873,7 @@ a.download-sdk {
.feed .feed-nav li {
list-style: none;
float: left;
+ height: 21px; /* +4px bottom border = 25px; same as .feed-nav */
margin-right: 25px;
cursor: pointer;
}
@@ -3969,21 +4026,24 @@ a.download-sdk {
.landing-docs {
margin:20px 0 0;
}
-.landing-banner {
- height:280px;
-}
.landing-banner .col-6:first-child,
-.landing-docs .col-6:first-child {
+.landing-docs .col-6:first-child,
+.landing-docs .col-12 {
margin-left:0;
+ min-height:280px;
}
.landing-banner .col-6:last-child,
-.landing-docs .col-6:last-child {
+.landing-docs .col-6:last-child,
+.landing-docs .col-12 {
margin-right:0;
}
.landing-banner h1 {
margin-top:0;
}
+.landing-docs {
+ clear:left;
+}
.landing-docs h3 {
font-size:14px;
line-height:21px;
@@ -4002,4 +4062,99 @@ a.download-sdk {
.plusone {
float:right;
-} \ No newline at end of file
+}
+
+
+
+/************* HOME/LANDING PAGE *****************/
+
+.slideshow-home {
+ height: 500px;
+ width: 940px;
+ border-bottom: 1px solid #CCC;
+ position: relative;
+ margin: 0;
+}
+.slideshow-home .frame {
+ width: 940px;
+ height: 500px;
+}
+.slideshow-home .content-left {
+ float: left;
+ text-align: center;
+ vertical-align: center;
+ margin: 0 0 0 35px;
+}
+.slideshow-home .content-right {
+ margin: 80px 0 0 0;
+}
+.slideshow-home .content-right p {
+ margin-bottom: 10px;
+}
+.slideshow-home .content-right p:last-child {
+ margin-top: 15px;
+}
+.slideshow-home .content-right h1 {
+ padding:0;
+}
+.slideshow-home .item {
+ height: 500px;
+ width: 940px;
+}
+.home-sections {
+ padding: 30px 20px 20px;
+ margin: 20px 0;
+ background: -webkit-linear-gradient(top, #F6F6F6,#F9F9F9);
+}
+.home-sections ul {
+ margin: 0;
+}
+.home-sections ul li {
+ float: left;
+ display: block;
+ list-style: none;
+ width: 170px;
+ height: 35px;
+ border: 1px solid #ccc;
+ background: white;
+ margin-right: 10px;
+ border-radius: 1px;
+ -webkit-border-radius: 1px;
+ -moz-border-radius: 1px;
+ box-shadow: 1px 1px 5px #EEE;
+ -webkit-box-shadow: 1px 1px 5px #EEE;
+ -moz-box-shadow: 1px 1px 5px #EEE;
+ background: white;
+}
+.home-sections ul li:hover {
+ background: #F9F9F9;
+ border: 1px solid #CCC;
+}
+.home-sections ul li a,
+.home-sections ul li a:hover {
+ font-weight: bold;
+ margin-top: 8px;
+ line-height: 18px;
+ float: left;
+ width: 100%;
+ text-align: center;
+ color: #09c !important;
+}
+.home-sections ul li a {
+ font-weight: bold;
+ margin-top: 8px;
+ line-height: 18px;
+ float: left;
+ width:100%;
+ text-align:center;
+}
+.home-sections ul li img {
+ float: left;
+ margin: -8px 0 0 10px;
+}
+.home-sections ul li.last {
+ margin-right: 0px;
+}
+.fullpage #footer {
+ margin-top: -40px;
+}
diff --git a/docs/html/guide/google/gcm/server-javadoc/deprecated-list.html b/docs/html/guide/google/gcm/server-javadoc/deprecated-list.html
index 729b2bf..04b9aa5 100644
--- a/docs/html/guide/google/gcm/server-javadoc/deprecated-list.html
+++ b/docs/html/guide/google/gcm/server-javadoc/deprecated-list.html
@@ -2,12 +2,12 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.6.0_26) on Mon Jul 16 14:12:10 PDT 2012 -->
+<!-- Generated by javadoc (build 1.6.0_26) on Wed Aug 29 14:55:34 PDT 2012 -->
<TITLE>
Deprecated List
</TITLE>
-<META NAME="date" CONTENT="2012-07-16">
+<META NAME="date" CONTENT="2012-08-29">
<LINK REL ="stylesheet" TYPE="text/css" HREF="default.css" TITLE="Style">
diff --git a/docs/html/guide/google/gcm/server-javadoc/help-doc.html b/docs/html/guide/google/gcm/server-javadoc/help-doc.html
index 7f5286c..c479cff 100644
--- a/docs/html/guide/google/gcm/server-javadoc/help-doc.html
+++ b/docs/html/guide/google/gcm/server-javadoc/help-doc.html
@@ -2,12 +2,12 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.6.0_26) on Mon Jul 16 14:12:10 PDT 2012 -->
+<!-- Generated by javadoc (build 1.6.0_26) on Wed Aug 29 14:55:34 PDT 2012 -->
<TITLE>
API Help
</TITLE>
-<META NAME="date" CONTENT="2012-07-16">
+<META NAME="date" CONTENT="2012-08-29">
<LINK REL ="stylesheet" TYPE="text/css" HREF="default.css" TITLE="Style">
diff --git a/docs/html/guide/google/gcm/server-javadoc/index-all.html b/docs/html/guide/google/gcm/server-javadoc/index-all.html
index 0b095ec..97aa300 100644
--- a/docs/html/guide/google/gcm/server-javadoc/index-all.html
+++ b/docs/html/guide/google/gcm/server-javadoc/index-all.html
@@ -2,12 +2,12 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.6.0_26) on Mon Jul 16 14:12:10 PDT 2012 -->
+<!-- Generated by javadoc (build 1.6.0_26) on Wed Aug 29 14:55:34 PDT 2012 -->
<TITLE>
Index
</TITLE>
-<META NAME="date" CONTENT="2012-07-16">
+<META NAME="date" CONTENT="2012-08-29">
<LINK REL ="stylesheet" TYPE="text/css" HREF="./default.css" TITLE="Style">
diff --git a/docs/html/guide/google/gcm/server-javadoc/index.html b/docs/html/guide/google/gcm/server-javadoc/index.html
index d8ba0ef..d3c3821 100644
--- a/docs/html/guide/google/gcm/server-javadoc/index.html
+++ b/docs/html/guide/google/gcm/server-javadoc/index.html
@@ -2,7 +2,7 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc on Mon Jul 16 14:12:10 PDT 2012-->
+<!-- Generated by javadoc on Wed Aug 29 14:55:34 PDT 2012-->
<TITLE>
Generated Documentation (Untitled)
</TITLE>
diff --git a/docs/html/guide/google/gcm/server-javadoc/overview-tree.html b/docs/html/guide/google/gcm/server-javadoc/overview-tree.html
index b8e28ad..c9afea6 100644
--- a/docs/html/guide/google/gcm/server-javadoc/overview-tree.html
+++ b/docs/html/guide/google/gcm/server-javadoc/overview-tree.html
@@ -2,12 +2,12 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.6.0_26) on Mon Jul 16 14:12:10 PDT 2012 -->
+<!-- Generated by javadoc (build 1.6.0_26) on Wed Aug 29 14:55:34 PDT 2012 -->
<TITLE>
Class Hierarchy
</TITLE>
-<META NAME="date" CONTENT="2012-07-16">
+<META NAME="date" CONTENT="2012-08-29">
<LINK REL ="stylesheet" TYPE="text/css" HREF="default.css" TITLE="Style">
diff --git a/docs/html/guide/google/gcm/server-javadoc/serialized-form.html b/docs/html/guide/google/gcm/server-javadoc/serialized-form.html
index 7a1378f..ab99e41 100644
--- a/docs/html/guide/google/gcm/server-javadoc/serialized-form.html
+++ b/docs/html/guide/google/gcm/server-javadoc/serialized-form.html
@@ -2,12 +2,12 @@
<!--NewPage-->
<HTML>
<HEAD>
-<!-- Generated by javadoc (build 1.6.0_26) on Mon Jul 16 14:12:10 PDT 2012 -->
+<!-- Generated by javadoc (build 1.6.0_26) on Wed Aug 29 14:55:34 PDT 2012 -->
<TITLE>
Serialized Form
</TITLE>
-<META NAME="date" CONTENT="2012-07-16">
+<META NAME="date" CONTENT="2012-08-29">
<LINK REL ="stylesheet" TYPE="text/css" HREF="default.css" TITLE="Style">
diff --git a/docs/html/guide/google/play/billing/billing_subscriptions.jd b/docs/html/guide/google/play/billing/billing_subscriptions.jd
index ae12951..68eda19 100644
--- a/docs/html/guide/google/play/billing/billing_subscriptions.jd
+++ b/docs/html/guide/google/play/billing/billing_subscriptions.jd
@@ -12,6 +12,7 @@ parent.link=index.html
<li><a href="#publishing">Subscription publishing and unpublishing</a></li>
<li><a href="#pricing">Subscription pricing</a></li>
<li><a href="#user-billing">User billing</a></li>
+ <li><a href="#trials">Free trial period</a></li>
<li><a href="#cancellation">Subscription cancellation</a></li>
<li><a href="#uninstallation">App uninstallation</a></li>
<li><a href="#refunds">Refunds</a></li>
@@ -94,8 +95,10 @@ digital content, from any type of app or game.</p>
<p>As with other in-app products, you configure and publish subscriptions using
the Developer Console and then sell them from inside apps installed on an
Android-powered devices. In the Developer console, you create subscription
-products and add them to a product list, setting a price for each, choosing a
-billing interval of monthly or annually, and then publishing. In your apps, it’s
+products and add them to a product list, then set a price and optional trial
+period for each, choose a billing interval (monthly or annual), and then publish.</p>
+
+<p>In your apps, it’s
straightforward to add support for subscription purchases. The implementation
extends the standard In-app Billing API to support a new product type but uses
the same communication model, data structures, and user interactions as for
@@ -145,6 +148,7 @@ subscription and if so, allow access to your content. </p>
<li>You can set up subscriptions with either monthly or annual billing</li>
<li>You can sell multiple subscription items in an app with various billing
intervals or prices, such as for promotions</li>
+ <li>You can offer a configurable trial period for any subscription. <span class="new" style="font-size:.78em;">New!</span></li>
<li>Users purchase your subscriptions from inside your apps, rather than
directly from Google Play</li>
<li>Users manage their purchased subscriptions from the My Apps screen in
@@ -251,6 +255,41 @@ notify your backend servers of subscription purchases, tokens, and any billing
errors that may occur. Your backend servers can use the server-side API to query
and update your records and follow up with customers directly, if needed.</p>
+<h3 id="trials">Free Trial Period</h3>
+
+<p>For any subscription, you can set up a free trial period that lets users
+try your subscription content before buying it. The trial period
+runs for the period of time that you set and then automatically converts to a full subscription
+managed according to the subscription's billing interval and price.</p>
+
+<p>To take advantage of a free trial, a user must "purchase" the full
+subscription through the standard In-app Billing flow, providing a valid form of
+payment to use for billing and completing the normal purchase transaction.
+However, the user is not charged any money, since the initial period corresponds
+to the free trial. Instead, Google Play records a transaction of $0.00 and the
+subscription is marked as purchased for the duration of the trial period or
+until cancellation. When the transaction is complete, Google Play notifies users
+by email that they have purchased a subscription that includes a free trial
+period and that the initial charge was $0.00. </p>
+
+<p>When the trial period ends, Google Play automatically initiates billing
+against the credit card that the user provided during the initial purchase, at the amount set
+for the full subscription, and continuing at the subscription interval. If
+necessary, the user can cancel the subscription at any time during the trial
+period. In this case, Google Play <em>marks the subscription as expired immediately</em>,
+rather than waiting until the end of the trial period. The user has not
+paid for the trial period and so is not entitled to continued access after
+cancellation.</p>
+
+<p>You can set up a trial period for a subscription in the Developer Console,
+without needing to modify or update your APK. Just locate and edit the
+subscription in your product list, set a valid number of days for the trial
+(must be 7 days or longer), and publish. You can change the period any time,
+although note that Google Play does not apply the change to users who have
+already "purchased" a trial period for the subscription. Only new subscription
+purchases will use the updated trial period. You can create one free trial
+period per subscription product.</p>
+
<h3 id="cancellation">Subscription cancellation</h3>
<p>Users can view the status of all of their subscriptions and cancel them if
diff --git a/docs/html/guide/google/play/billing/index.jd b/docs/html/guide/google/play/billing/index.jd
index a33b199..134140d 100644
--- a/docs/html/guide/google/play/billing/index.jd
+++ b/docs/html/guide/google/play/billing/index.jd
@@ -42,10 +42,8 @@ and features, and more. You can use In-app Billing to sell products as</p>
<div class="sidebox-wrapper">
<div class="sidebox">
- <h2>Support for subscriptions <span class="new">New!</span></h2>
- <p>In-app Billing now lets you sell subscriptions in your apps, as well as standard in-app products.
- For details on how to sell subscriptions to content, services, and features, see the
- <a href="{@docRoot}guide/google/play/billing/billing_subscriptions.html">Subscriptions</a> documentation.</p>
+ <p><strong>Free trials for subscriptions</strong> <span class="new" style="font-size:.78em;">New!</span></p>
+ <p>You can now offer users a configurable <a href="{@docRoot}guide/google/play/billing/billing_subscriptions.html#trials">free trial period</a> for your in-app subscriptions. You can set up trials with a simple change in the Developer Console&mdash;no change to your app code is needed.
</div>
</div>
diff --git a/docs/html/guide/google/play/expansion-files.jd b/docs/html/guide/google/play/expansion-files.jd
index 750e958..f5cda06 100644
--- a/docs/html/guide/google/play/expansion-files.jd
+++ b/docs/html/guide/google/play/expansion-files.jd
@@ -421,7 +421,7 @@ policy, which captures the expansion file names, sizes, and URLs from the licens
<p>To use APK expansion files with your application and provide the best user experience with
minimal effort on your behalf, we recommend you use the Downloader Library that's included in the
-Google Market Apk Expansion package. This library downloads your expansion files in a
+Google Play APK Expansion Library package. This library downloads your expansion files in a
background service, shows a user notification with the download status, handles network
connectivity loss, resumes the download when possible, and more.</p>
@@ -450,8 +450,8 @@ application.</p>
<p>First, open the <a href="{@docRoot}sdk/exploring.html">Android SDK Manager</a>, expand
<em>Extras</em> and download:</p>
<ul>
- <li><em>Google Market Licensing package</em></li>
- <li><em>Google Market Apk Expansion package</em></li>
+ <li><em>Google Play Licensing Library package</em></li>
+ <li><em>Google Play APK Expansion Library package</em></li>
</ul>
<p>If you're using Eclipse, create a project for each library and add it to your app:</p>
diff --git a/docs/html/guide/google/play/publishing/multiple-apks.jd b/docs/html/guide/google/play/publishing/multiple-apks.jd
index e41817e..0619dfc 100644
--- a/docs/html/guide/google/play/publishing/multiple-apks.jd
+++ b/docs/html/guide/google/play/publishing/multiple-apks.jd
@@ -9,9 +9,7 @@ page.title=Multiple APK Support
<ul>
<li>Simultaneously publish different APKs for different
device configurations</li>
- <li>Different APKs are distributed to different devices based on filters declared in the
-manifest file</li>
- <li>You should publish multiple APKs only when it's not possible or reasonable to
+ <li>You should publish multiple APKs only when it's not possible to
support all desired devices with a single APK</li>
</ul>
@@ -39,16 +37,17 @@ support all desired devices with a single APK</li>
<li><a href="#TextureOptions">Supporting multiple GL textures</a></li>
<li><a href="#ScreenOptions">Supporting multiple screens</a></li>
<li><a href="#ApiLevelOptions">Supporting multiple API levels</a></li>
+ <li><a href="#CpuArchOptions">Supporting multiple CPU architectures</a></li>
</ol>
</li>
</ol>
<h2>See also</h2>
<ol>
+ <li><a href="{@docRoot}guide/google/play/expansion-files.html">APK Expansion Files</a></li>
<li><a href="{@docRoot}guide/google/play/filters.html">Filters on Google Play</a></li>
<li><a href="{@docRoot}guide/practices/screens_support.html">Supporting Multiple Screens</a></li>
- <li><a href="{@docRoot}tools/extras/support-library.html">Compatibility
-Package</a></li>
+ <li><a href="{@docRoot}tools/extras/support-library.html">Support Library</a></li>
<li><a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#ApiLevels">Android API Levels</a></li>
</ol>
@@ -76,14 +75,16 @@ many device configurations as possible, doing so is sometimes not possible. To h
you publish your application for as many devices as possible, Google Play allows you to
publish multiple APKs under the same application listing. Google Play then supplies each APK to
the appropriate devices based on configuration support you've declared in the manifest file of each
-APK.</p>
+APK. </p>
<p>By publishing your application with multiple APKs, you can:</p>
<ul>
<li>Support different OpenGL texture compression formats with each APK.</li>
- <li>Support different screen configurations with each APK.</li>
+ <li>Support different screen sizes and densities with each APK.</li>
<li>Support different platform versions with each APK.</li>
+ <li>Support different CPU architectures with each APK (such as for ARM, x86, and MIPS, when your
+ app uses the <a href="{@docRoot}tools/sdk/ndk/index.html">Android NDK</a>).</li>
</ul>
<p>Currently, these are the only device characteristics that Google Play supports for publishing
@@ -91,7 +92,8 @@ multiple APKs as the same application.</p>
<p class="note"><strong>Note:</strong> You should generally use multiple APKs to support
different device configurations <strong>only when your APK is too large</strong> (greater than
-50MB). Using a single APK to support different configurations is always the best practice,
+50MB) due to the alternative resources needed for different device configurations.
+Using a single APK to support different configurations is always the best practice,
because it makes the path for application updates simple and clear for users (and also makes
your life simpler by avoiding development and publishing complexity). Read the section below about
<a href="#SingleAPK">Using a Single APK Instead</a> to
@@ -283,14 +285,19 @@ higher, as per the previous note).</li>
</ul>
</div>
</li>
+
+ <li><strong>CPU architecture (ABI)</strong>
+ <p>This is based on the native libraries included in each APK (which are
+ determined by the architectures you declare in the {@code Application.mk}
+ file) when using the Android NDK.</p></li>
</ul>
<p>Other manifest elements that enable <a
href="{@docRoot}guide/google/play/filters.html">Google Play filters</a>&mdash;but are not
listed above&mdash;are still applied for each APK as usual. However, Google Play does not allow
-you to publish multiple APKs based on variations of them. Thus, you cannot publish
-multiple APKs if the above listed filters are the same for each APK (but the APKs differ based on
-other characteristics in the manifest file). For
+you to publish separate APKs based on variations of those device characteristics. Thus, you cannot
+publish multiple APKs if the above listed filters are the same for each APK (but the APKs differ
+based on other characteristics in the manifest or APK). For
example, you cannot provide different APKs that differ purely on the <a
href="{@docRoot}guide/topics/manifest/uses-configuration-element.html">{@code
&lt;uses-configuration&gt;}</a> characteristics.</p>
@@ -349,7 +356,8 @@ greater. In this case, the API level is the only supported filter used, so the v
get an update when they receive a system update.</li>
<li>If you have one APK that's for API level 4 (and above) <em>and</em> small -
large screens, and another APK for API level 8 (and above) <em>and</em> large - xlarge screens, then
-the version codes <strong>must increase</strong>. In this case, the API level filter is used to
+the version codes <strong>must increase</strong> in correlation with the API levels.
+In this case, the API level filter is used to
distinguish each APK, but so is the screen size. Because the screen sizes overlap (both APKs
support large screens), the version codes must still be in order. This ensures that a large screen
device that receives a system update to API level 8 will receive an update for the second
@@ -360,6 +368,21 @@ screens, then the version codes <strong>do not need to increase</strong> in corr
levels. Because there is no overlap within the screen size filter, there are no devices that
could potentially move between these two APKs, so there's no need for the version codes to
increase from the lower API level to the higher API level.</li>
+ <li>If you have one APK that's for API level 4 (and above) <em>and</em> ARMv7 CPUs,
+and another APK for API level 8 (and above) <em>and</em> ARMv5TE CPUs,
+then the version codes <strong>must increase</strong> in correlation with the API levels.
+In this case, the API level filter is used to
+distinguish each APK, but so is the CPU architecture. Because an APK with ARMv5TE libraries is
+compatible with devices that have an ARMv7 CPU, the APKs overlap on this characteristic.
+As such, the version code for the APK that supports API level 8 and above must be higher.
+This ensures that a device with an ARMv7 CPU that receives a system update to API level 8
+will receive an update for the second APK that's designed for API level 8.
+However, because this kind of update results in the ARMv7 device using an APK that's not
+fully optimized for that device's CPU, you should provide an
+APK for both the ARMv5TE and the ARMv7 architecture at each API level in order to optimize
+the app performance on each CPU.
+<strong>Note:</strong> This applies <em>only</em> when comparing APKs with the ARMv5TE and
+ARMv7 libraries, and not when comparing other native libraries.</li>
</ul>
</li>
@@ -384,7 +407,12 @@ screens so that all previously-supported devices are still supported.</li>
sizes small, normal, and large, while another APK supports sizes large and xlarge, there is an
overlap, because both APKs support large screens. If you do not resolve this, then devices that
qualify for both APKs (large screen devices in the example) will receive whichever APK has the
-highest version code.</li>
+highest version code.
+ <p class="note"><strong>Note:</strong> If you're creating separate APKs for different CPU
+ architectures, be aware that an APK for ARMv5TE will overlap with an APK for ARMv7. That is,
+ an APK designed for ARMv5TE is compatible with an ARMv7 device,
+but the reverse is not true (an APK with only the ARMv7 libraries is
+<em>not</em> compatible with an ARMv5TE device).</li>
</ul>
<p>When such conflicts occur, you will see a warning message, but you can still publish your
@@ -641,3 +669,17 @@ if (android.os.Build.VERSION.SDK_INT >= 11) {
}
</pre>
+
+<h3 id="CpuArchOptions">Supporting multiple CPU architectures</h3>
+
+<p>When using the Android NDK, you can create a single APK that supports multiple CPU architectures
+by declaring each of the desired architectures with the {@code APP_ABI} variable in the
+<code>Application.mk</code> file.</p>
+
+<p>For example, here's an <code>Application.mk</code> file that declares support for three
+different CPU architectures:</p>
+
+<pre>
+APP_ABI := armeabi armeabi-v7a mips
+APP_PLATFORM := android-9
+</pre>
diff --git a/docs/html/guide/google/play/services.jd b/docs/html/guide/google/play/services.jd
index 519d78b..092642c 100644
--- a/docs/html/guide/google/play/services.jd
+++ b/docs/html/guide/google/play/services.jd
@@ -1,24 +1,25 @@
page.title=Google Play Services
-
@jd:body
-
-<p>Google Play services is a platform that is delivered through the Google Play Store that
+<p>
+ Google Play services is a platform that is delivered through the Google Play Store that
offers integration with Google products, such as Google+, into Android apps.
The Google Play services framework consists of a services component
- that runs on the device and a thin client library that you package with your app. </p>
-
-
+ that runs on the device and a thin client library that you package with your app.
+</p>
<div class="distribute-features col-13">
- <ul>
- <li style="border-top: 1px solid #F80;"><h5>Easy Authentication</h5> Your app can leverage the user's
- existing Google account on the device without having to go through
- tedious authentication flows. A few clicks from the user and you're set!
- <br /> <a href="https://developers.google.com/android/google-play-services">Learn more &raquo;</a>
+<ul>
+ <li style="border-top: 1px solid #F80;"><h5>Easy Authentication</h5>
+ Your app can leverage the user's existing Google account on the device without having to go
+ through tedious authentication flows. A few clicks from the user and you're set!
+ <br/>
+ <a href="https://developers.google.com/android/google-play-services">Learn more &raquo;</a>
</li>
- <li style="border-top: 1px solid #F80;"><h5>Google+ Integration</h5> Google Play services makes it
- easy for your app to integrate with Sign in with Google+, +1 button, and Google+ history.
- <br /> <a href="https://developers.google.com/android/google-play-services">Learn more &raquo;</a>
- </li>
- </ul>
-
-</div> \ No newline at end of file
+ <li style="border-top: 1px solid #F80;"><h5>Google+ Integration</h5>
+ Google Play services makes it easy for your app to integrate with Google+ sign-in and the +1
+ button.
+ <br/>
+ <a href="https://developers.google.com/android/google-play-services">Learn more &raquo;</a>
+ </li>
+</ul>
+
+</div>
diff --git a/docs/html/guide/guide_toc.cs b/docs/html/guide/guide_toc.cs
index 9465f18..46c4398 100644
--- a/docs/html/guide/guide_toc.cs
+++ b/docs/html/guide/guide_toc.cs
@@ -8,7 +8,7 @@
<ul id="nav">
<!-- Walkthrough for Developers -- quick overview of what it's like to develop on Android -->
<!--<li style="color:red">Overview</li> -->
-
+
<li class="nav-section">
<div class="nav-section-header"><a href="<?cs var:toroot ?>guide/components/index.html">
<span class="en">App Components</span>
@@ -191,28 +191,21 @@
<li><a href="<?cs var:toroot ?>guide/topics/ui/menus.html">
<span class="en">Menus</span></span>
</a></li>
- <li><a href="<?cs var:toroot ?>guide/topics/ui/dialogs.html">
- <span class="en">Dialogs</span>
- </a></li>
<li><a href="<?cs var:toroot ?>guide/topics/ui/actionbar.html">
<span class="en">Action Bar</span>
</a></li>
<li><a href="<?cs var:toroot ?>guide/topics/ui/settings.html">
<span class="en">Settings</span>
</a></li>
- <li class="nav-section">
- <div class="nav-section-header"><a href="<?cs var:toroot ?>guide/topics/ui/notifiers/index.html">
- <span class="en">Notifications</span>
- </a></div>
- <ul>
- <li><a href="<?cs var:toroot ?>guide/topics/ui/notifiers/toasts.html">
- <span class="en">Toast Notifications</span>
- </a></li>
- <li><a href="<?cs var:toroot ?>guide/topics/ui/notifiers/notifications.html">
- <span class="en">Status Notifications</span>
- </a></li>
- </ul>
- </li>
+ <li><a href="<?cs var:toroot ?>guide/topics/ui/dialogs.html">
+ <span class="en">Dialogs</span>
+ </a></li>
+ <li><a href="<?cs var:toroot ?>guide/topics/ui/notifiers/notifications.html">
+ <span class="en">Notifications</span>
+ </a></li>
+ <li><a href="<?cs var:toroot ?>guide/topics/ui/notifiers/toasts.html">
+ <span class="en">Toasts</span>
+ </a></li>
<li class="nav-section">
<div class="nav-section-header"><a href="<?cs var:toroot ?>guide/topics/search/index.html">
<span class="en">Search</span>
@@ -223,7 +216,7 @@
<li><a href="<?cs var:toroot ?>guide/topics/search/adding-custom-suggestions.html">Adding Custom Suggestions</a></li>
<li><a href="<?cs var:toroot ?>guide/topics/search/searchable-config.html">Searchable Configuration</a></li>
</ul>
- </li>
+ </li>
<li><a href="<?cs var:toroot ?>guide/topics/ui/drag-drop.html">
<span class="en">Drag and Drop</span>
</a></li>
@@ -235,6 +228,9 @@
<li><a href="<?cs var:toroot ?>guide/topics/ui/accessibility/apps.html">
<span class="en">Making Applications Accessible</span>
</a></li>
+ <li><a href="<?cs var:toroot ?>guide/topics/ui/accessibility/checklist.html">
+ <span class="en">Accessibility Developer Checklist</span>
+ </a></li>
<li><a href="<?cs var:toroot ?>guide/topics/ui/accessibility/services.html">
<span class="en">Building Accessibility Services</span>
</a></li>
@@ -382,9 +378,9 @@
</a></li>
</ul>
</li><!-- end of location and sensors -->
-
-
+
+
<li class="nav-section">
<div class="nav-section-header"><a href="<?cs var:toroot ?>guide/topics/connectivity/index.html">
<span class="en">Connectivity</span>
@@ -419,10 +415,10 @@
<span class="en">SIP</span>
</a>
</li>
-
+
</ul>
</li><!-- end of connectivity -->
-
+
<li class="nav-section">
<div class="nav-section-header"><a href="<?cs var:toroot ?>guide/topics/text/index.html">
<span class="en">Text and Input</span>
@@ -439,7 +435,7 @@
</a></li>
</ul>
</li><!-- end of text and input -->
-
+
<li class="nav-section">
<div class="nav-section-header"><a href="<?cs var:toroot ?>guide/topics/data/index.html">
<span class="en">Data Storage</span>
@@ -457,7 +453,7 @@
</ul>
</li><!-- end of data storage -->
-
+
<li class="nav-section">
<div class="nav-section-header"><a href="<?cs var:toroot?>guide/topics/admin/index.html">
<span class="en">Administration</span>
@@ -475,7 +471,7 @@
-->
</ul>
</li><!-- end of administration -->
-
+
<li class="nav-section">
<div class="nav-section-header"><a href="<?cs var:toroot ?>guide/webapps/index.html">
<span class="en">Web Apps</span>
@@ -498,7 +494,7 @@
</a></li>
</ul>
</li><!-- end of web apps -->
-
+
<li class="nav-section">
<div class="nav-section-header"><a href="<?cs var:toroot ?>guide/practices/index.html">
<span class="en">Best Practices</span>
@@ -555,13 +551,13 @@
</ul>
</li>
-
-
+
+
<li class="nav-section">
<div class="nav-section-header"><a href="<?cs var:toroot ?>guide/google/index.html">
<span class="en">Google Services</span>
</a></div>
- <ul>
+ <ul>
<li class="nav-section">
<div class="nav-section-header"><a href="<?cs var:toroot?>guide/google/play/billing/index.html">
@@ -623,7 +619,7 @@
<li><a href="<?cs var:toroot ?>guide/google/play/expansion-files.html">
<span class="en">APK Expansion Files</span></a>
</li>
-
+
<li class="nav-section">
<div class="nav-section-header"><a href="<?cs var:toroot ?>guide/google/gcm/index.html">
<span class="en">Google Cloud Messaging</span></a>
@@ -649,9 +645,9 @@
</ul>
</li><!-- end Google Play -->
-
-
-
+
+
+
<!-- this needs to move
<li class="nav-section">
<div class="nav-section-header"><a href="<?cs var:toroot ?>guide/practices/ui_guidelines/index.html">
@@ -691,9 +687,9 @@
</a></div>
</li>
</ul>
- </li>
+ </li>
</ul> -->
-
+
<!-- Remove
<li class="nav-section">
<div class="nav-section-header"><a href="<?cs var:toroot ?>guide/appendix/index.html">
@@ -710,7 +706,7 @@
<li><a href="<?cs var:toroot ?>guide/appendix/g-app-intents.html">
<span class="en">Intents List: Google Apps</span>
</a></li>
-
+
<li><a href="<?cs var:toroot ?>guide/appendix/glossary.html">
<span class="en">Glossary</span>
diff --git a/docs/html/guide/practices/security.jd b/docs/html/guide/practices/security.jd
index ce59a9d..36eeff8 100644
--- a/docs/html/guide/practices/security.jd
+++ b/docs/html/guide/practices/security.jd
@@ -1,11 +1,11 @@
-page.title=Designing for Security
+page.title=Designing for Security
@jd:body
<div id="qv-wrapper">
<div id="qv">
<h2>In this document</h2>
<ol>
-<li><a href="#Dalvik">Using Davlik Code</a></li>
+<li><a href="#Dalvik">Using Dalvik Code</a></li>
<li><a href="#Native">Using Native Code</a></li>
<li><a href="#Data">Storing Data</a></li>
<li><a href="#IPC">Using IPC</a></li>
diff --git a/docs/html/guide/topics/appwidgets/index.jd b/docs/html/guide/topics/appwidgets/index.jd
index a46f9a7..7e031d9 100644
--- a/docs/html/guide/topics/appwidgets/index.jd
+++ b/docs/html/guide/topics/appwidgets/index.jd
@@ -117,7 +117,7 @@ to modify App Widget settings at create-time.</p>
application's
<code>AndroidManifest.xml</code> file. For example:</p>
-<pre>
+<pre style="clear:right">
&lt;receiver android:name="ExampleAppWidgetProvider" >
&lt;intent-filter>
&lt;action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
@@ -307,6 +307,7 @@ following layout classes:</p>
<li>{@link android.widget.FrameLayout}</li>
<li>{@link android.widget.LinearLayout}</li>
<li>{@link android.widget.RelativeLayout}</li>
+ <li>{@link android.widget.GridLayout}</li>
</ul>
<p>And the following widget classes:</p>
@@ -327,6 +328,9 @@ following layout classes:</p>
<p>Descendants of these classes are not supported.</p>
+<p>RemoteViews also supports {@link android.view.ViewStub}, which is an invisible, zero-sized View you can use
+to lazily inflate layout resources at runtime.</p>
+
<h3 id="AddingMargins">Adding margins to App Widgets</h3>
@@ -410,6 +414,25 @@ App Widget,
done.
(See <a href="#Configuring">Creating an App Widget Configuration
Activity</a> below.)</dd>
+
+<dt>
+ {@link android.appwidget.AppWidgetProvider#onAppWidgetOptionsChanged onAppWidgetOptionsChanged()}
+</dt>
+<dd>
+This is called when the widget is first placed and any time the widget is resized. You can use this callback to show or hide content based on the widget's size ranges. You get the size ranges by calling {@link android.appwidget.AppWidgetManager#getAppWidgetOptions getAppWidgetOptions()}, which returns a {@link android.os.Bundle} that includes the following:<br /><br />
+<ul>
+ <li>{@link android.appwidget.AppWidgetManager#OPTION_APPWIDGET_MIN_WIDTH}&mdash;Contains
+the lower bound on the current width, in dp units, of a widget instance.</li>
+ <li>{@link android.appwidget.AppWidgetManager#OPTION_APPWIDGET_MIN_HEIGHT}&mdash;Contains
+the lower bound on the current height, in dp units, of a widget instance.</li>
+ <li>{@link android.appwidget.AppWidgetManager#OPTION_APPWIDGET_MAX_WIDTH}&mdash;Contains
+ the upper bound on the current width, in dp units, of a widget instance.</li>
+ <li>{@link android.appwidget.AppWidgetManager#OPTION_APPWIDGET_MAX_HEIGHT}&mdash;Contains
+the upper bound on the current width, in dp units, of a widget instance.</li>
+</ul>
+
+This callback was introduced in API Level 16 (Android 4.1). If you implement this callback, make sure that your app doesn't depend on it since it won't be called on older devices.
+</dd>
<dt>{@link android.appwidget.AppWidgetProvider#onDeleted(Context,int[])}</dt>
<dd>This is called every time an App Widget is deleted from the App Widget
host.</dd>
@@ -533,12 +556,13 @@ you would like
to receive the App Widget broadcasts directly, you can implement your own
{@link android.content.BroadcastReceiver} or override the
{@link android.appwidget.AppWidgetProvider#onReceive(Context,Intent)} callback.
-The four Intents you need to care about are:</p>
+The Intents you need to care about are as follows:</p>
<ul>
<li>{@link android.appwidget.AppWidgetManager#ACTION_APPWIDGET_UPDATE}</li>
<li>{@link android.appwidget.AppWidgetManager#ACTION_APPWIDGET_DELETED}</li>
<li>{@link android.appwidget.AppWidgetManager#ACTION_APPWIDGET_ENABLED}</li>
<li>{@link android.appwidget.AppWidgetManager#ACTION_APPWIDGET_DISABLED}</li>
+ <li>{@link android.appwidget.AppWidgetManager#ACTION_APPWIDGET_OPTIONS_CHANGED}</li>
</ul>
@@ -791,8 +815,7 @@ href="{@docRoot}resources/samples/StackWidget/index.html">StackView Widget
sample</a>:</p>
<p>
-<img src="{@docRoot}resources/samples/images/StackWidget.png" alt="StackView
-Widget" />
+<img src="{@docRoot}resources/images/StackWidget.png" alt="" />
</p>
<p>This sample consists of a stack of 10 views, which display the values
diff --git a/docs/html/guide/topics/connectivity/nfc/nfc.jd b/docs/html/guide/topics/connectivity/nfc/nfc.jd
index 51c7bee..5011872 100644
--- a/docs/html/guide/topics/connectivity/nfc/nfc.jd
+++ b/docs/html/guide/topics/connectivity/nfc/nfc.jd
@@ -318,8 +318,8 @@ other two intents, giving the user a better experience.</p>
</pre>
</li>
- <li>The <code>uses-feature</code> element so that your application shows up in Google
-Play only for devices that have NFC hardware:
+ <li>The <code>uses-feature</code> element so that your application shows up in Google Play
+ only for devices that have NFC hardware:
<pre>
&lt;uses-feature android:name="android.hardware.nfc" android:required="true" /&gt;
</pre>
@@ -511,13 +511,24 @@ contain the payload and allow you to enumerate the tag's technologies:</p>
<h2 id="creating-records">Creating Common Types of NDEF Records</h2>
<p>This section describes how to create common types of NDEF records to help you when writing to
-NFC tags or sending data with Android Beam. It also describes how to create the corresponding
+NFC tags or sending data with Android Beam. Starting with Android 4.0 (API level 14), the
+{@link android.nfc.NdefRecord#createUri createUri()} method is available to help you create
+URI records automatically. Starting in Android 4.1 (API level 16), {@link android.nfc.NdefRecord#createExternal createExternal()}
+and {@link android.nfc.NdefRecord#createMime createMime()} are available to help you create
+MIME and external type NDEF records. Use these helper methods whenever possible to avoid mistakes
+when manually creating NDEF records.</p>
+
+<p>
+This section also describes how to create the corresponding
intent filter for the record. All of these NDEF record examples should be in the first NDEF
record of the NDEF message that you are writing to a tag or beaming.</p>
<h3 id="abs-uri">TNF_ABSOLUTE_URI</h3>
-<p>Given the following {@link android.nfc.NdefRecord#TNF_ABSOLUTE_URI} NDEF record, which is
-stored as the first record inside of an {@link android.nfc.NdefMessage}:</p>
+<p class="note"><strong>Note:</strong> We recommend that you use the
+ <a href="#well-known-uri"><code>RTD_URI</code></a> type instead
+ of {@link android.nfc.NdefRecord#TNF_ABSOLUTE_URI}, because it is more efficient.</p>
+
+<p>You can create a {@link android.nfc.NdefRecord#TNF_ABSOLUTE_URI} NDEF record in the following way:</p>
<pre>
NdefRecord uriRecord = new NdefRecord(
@@ -526,7 +537,7 @@ NdefRecord uriRecord = new NdefRecord(
new byte[0], new byte[0]);
</pre>
-<p>the intent filter would look like this:</p>
+<p>The intent filter for the previous NDEF record would look like this:</p>
<pre>
&lt;intent-filter&gt;
&lt;action android:name="android.nfc.action.NDEF_DISCOVERED" /&gt;
@@ -537,32 +548,35 @@ NdefRecord uriRecord = new NdefRecord(
&lt;/intent-filter&gt;
</pre>
-
<h3 id="mime">TNF_MIME_MEDIA</h3>
-<p>Given the following {@link android.nfc.NdefRecord#TNF_MIME_MEDIA} NDEF record, which is stored as
-the first record inside
-of an {@link android.nfc.NdefMessage}:</p>
+<p>You can create a {@link android.nfc.NdefRecord#TNF_MIME_MEDIA} NDEF record in the following ways.</p>
+
+<p>Using the {@link android.nfc.NdefRecord#createMime createMime()} method:</p>
+<pre>
+NdefRecord mimeRecord = NdefRecord.createMime("application/vnd.com.example.android.beam",
+ "Beam me up, Android".getBytes(Charset.forName("US-ASCII")));
+</pre>
+
+<p>Creating the {@link android.nfc.NdefRecord} manually:</p>
<pre>
NdefRecord mimeRecord = new NdefRecord(
NdefRecord.TNF_MIME_MEDIA ,
- "application/com.example.android.beam".getBytes(Charset.forName("US-ASCII")),
+ "application/vnd.com.example.android.beam".getBytes(Charset.forName("US-ASCII")),
new byte[0], "Beam me up, Android!".getBytes(Charset.forName("US-ASCII")));
</pre>
-<p>the intent filter would look like this:</p>
+<p>The intent filter for the previous NDEF records would look like this:</p>
<pre>
&lt;intent-filter&gt;
&lt;action android:name="android.nfc.action.NDEF_DISCOVERED" /&gt;
&lt;category android:name="android.intent.category.DEFAULT" /&gt;
- &lt;data android:mimeType="application/com.example.android.beam" /&gt;
+ &lt;data android:mimeType="application/vnd.com.example.android.beam" /&gt;
&lt;/intent-filter&gt;
</pre>
-
<h3 id="well-known-text">TNF_WELL_KNOWN with RTD_TEXT</h3>
-<p>Given the following {@link android.nfc.NdefRecord#TNF_WELL_KNOWN} NDEF record, which is stored as
-the first record inside of an {@link android.nfc.NdefMessage}:</p>
+<p>You can create a {@link android.nfc.NdefRecord#TNF_WELL_KNOWN} NDEF record in the following way:</p>
<pre>
public NdefRecord createTextRecord(String payload, Locale locale, boolean encodeInUtf8) {
byte[] langBytes = locale.getLanguage().getBytes(Charset.forName("US-ASCII"));
@@ -592,9 +606,20 @@ public NdefRecord createTextRecord(String payload, Locale locale, boolean encode
<h3 id="well-known-uri">TNF_WELL_KNOWN with RTD_URI</h3>
-<p>Given the following {@link android.nfc.NdefRecord#TNF_WELL_KNOWN} NDEF record, which is stored as
-the first record inside of an {@link android.nfc.NdefMessage}:</p>
+<p>You can create a {@link android.nfc.NdefRecord#TNF_WELL_KNOWN} NDEF record in the following ways.</p>
+
+<p>Using the {@link android.nfc.NdefRecord#createUri(String)} method:</p>
+<pre>
+NdefRecord rtdUriRecord1 = NdefRecord.createUri("http://example.com");
+</pre>
+<p>Using the {@link android.nfc.NdefRecord#createUri(Uri)} method:</p>
+<pre>
+Uri uri = new Uri("http://example.com");
+NdefRecord rtdUriRecord2 = NdefRecord.createUri(uri);
+</pre>
+
+<p>Creating the {@link android.nfc.NdefRecord} manually:</p>
<pre>
byte[] uriField = "example.com".getBytes(Charset.forName("US-ASCII"));
byte[] payload = new byte[uriField.length + 1]; //add 1 for the URI Prefix
@@ -604,7 +629,7 @@ NdefRecord rtdUriRecord = new NdefRecord(
NdefRecord.TNF_WELL_KNOWN, NdefRecord.RTD_URI, new byte[0], payload);
</pre>
-<p>the intent filter would look like this:</p>
+<p>The intent filter for the previous NDEF records would look like this:</p>
<pre>
&lt;intent-filter&gt;
@@ -617,24 +642,32 @@ NdefRecord rtdUriRecord = new NdefRecord(
</pre>
<h3 id="ext-type">TNF_EXTERNAL_TYPE</h3>
-<p>Given the following {@link android.nfc.NdefRecord#TNF_EXTERNAL_TYPE} NDEF record, which is stored
-as the first record inside of an {@link android.nfc.NdefMessage}:</p>
+<p>You can create a {@link android.nfc.NdefRecord#TNF_EXTERNAL_TYPE} NDEF record in the following ways:</p>
+
+<p>Using the {@link android.nfc.NdefRecord#createExternal createExternal()} method:
+<pre>
+byte[] payload; //assign to your data
+String domain = "com.example"; //usually your app's package name
+String type = "externalType";
+NdefRecord extRecord = NdefRecord.createExternal(domain, type, payload);
+</pre>
+<p>Creating the {@link android.nfc.NdefRecord} manually:</p>
<pre>
byte[] payload;
...
-NdefRecord mimeRecord = new NdefRecord(
- NdefRecord.TNF_EXTERNAL_TYPE, "example.com:externalType", new byte[0], payload);
+NdefRecord extRecord = new NdefRecord(
+ NdefRecord.TNF_EXTERNAL_TYPE, "com.example:externalType", new byte[0], payload);
</pre>
-<p>the intent filter would look like this:</p>
+<p>The intent filter for the previous NDEF records would look like this:</p>
<pre>
&lt;intent-filter&gt;
&lt;action android:name="android.nfc.action.NDEF_DISCOVERED" /&gt;
&lt;category android:name="android.intent.category.DEFAULT" /&gt;
&lt;data android:scheme="vnd.android.nfc"
android:host="ext"
- android:pathPrefix="/example.com:externalType"/&gt;
+ android:pathPrefix="/com.example:externalType"/&gt;
&lt;/intent-filter&gt;
</pre>
@@ -840,8 +873,8 @@ public class Beam extends Activity implements CreateNdefMessageCallback {
String text = ("Beam me up, Android!\n\n" +
"Beam Time: " + System.currentTimeMillis());
NdefMessage msg = new NdefMessage(
- new NdefRecord[] { createMimeRecord(
- "application/com.example.android.beam", text.getBytes())
+ new NdefRecord[] { createMime(
+ "application/vnd.com.example.android.beam", text.getBytes())
/**
* The Android Application Record (AAR) is commented out. When a device
* receives a push with an AAR in it, the application specified in the AAR
@@ -882,22 +915,12 @@ public class Beam extends Activity implements CreateNdefMessageCallback {
// record 0 contains the MIME type, record 1 is the AAR, if present
textView.setText(new String(msg.getRecords()[0].getPayload()));
}
-
- /**
- * Creates a custom MIME type encapsulated in an NDEF record
- */
- public NdefRecord createMimeRecord(String mimeType, byte[] payload) {
- byte[] mimeBytes = mimeType.getBytes(Charset.forName("US-ASCII"));
- NdefRecord mimeRecord = new NdefRecord(
- NdefRecord.TNF_MIME_MEDIA, mimeBytes, new byte[0], payload);
- return mimeRecord;
- }
}
</pre>
<p>Note that this code comments out an AAR, which you can remove. If you enable the AAR, the
application specified in the AAR always receives the Android Beam message. If the application is not
-present, Google Play launches to download the application. Therefore, the following intent
+present, Google Play is started to download the application. Therefore, the following intent
filter is not technically necessary for Android 4.0 devices or later if the AAR is used:
</p>
@@ -905,13 +928,13 @@ filter is not technically necessary for Android 4.0 devices or later if the AAR
&lt;intent-filter&gt;
&lt;action android:name="android.nfc.action.NDEF_DISCOVERED"/&gt;
&lt;category android:name="android.intent.category.DEFAULT"/&gt;
- &lt;data android:mimeType="application/com.example.android.beam"/&gt;
+ &lt;data android:mimeType="application/vnd.com.example.android.beam"/&gt;
&lt;/intent-filter&gt;
</pre>
<p>With this intent filter, the <code>com.example.android.beam</code> application now can be started
when it scans an NFC tag or receives an Android Beam with an AAR of
type <code>com.example.android.beam</code>, or when an NDEF formatted message contains a MIME record
-of type <code>application/com.example.android.beam</code>.</p>
+of type <code>application/vnd.com.example.android.beam</code>.</p>
<p>Even though AARs guarantee an application is started or downloaded, intent filters are
recommended, because they let you start an Activity of your choice in your
diff --git a/docs/html/guide/topics/data/data-storage.jd b/docs/html/guide/topics/data/data-storage.jd
index e9d2d25..2603a06 100644
--- a/docs/html/guide/topics/data/data-storage.jd
+++ b/docs/html/guide/topics/data/data-storage.jd
@@ -232,7 +232,12 @@ save files. This can be a removable storage media (such as an SD card) or an int
(non-removable) storage. Files saved to the external storage are world-readable and can
be modified by the user when they enable USB mass storage to transfer files on a computer.</p>
-<p class="caution"><strong>Caution:</strong> External files can disappear if the user mounts the
+<p>It's possible that a device using a partition of the
+internal storage for the external storage may also offer an SD card slot. In this case,
+the SD card is <em>not</em> part of the external storage and your app cannot access it (the extra
+storage is intended only for user-provided media that the system scans).</p>
+
+<p class="caution"><strong>Caution:</strong> External storage can become unavailable if the user mounts the
external storage on a computer or removes the media, and there's no security enforced upon files you
save to the external storage. All applications can read and write files placed on the external
storage and the user can remove them.</p>
diff --git a/docs/html/guide/topics/manifest/activity-element.jd b/docs/html/guide/topics/manifest/activity-element.jd
index 844be11..2aedaec 100644
--- a/docs/html/guide/topics/manifest/activity-element.jd
+++ b/docs/html/guide/topics/manifest/activity-element.jd
@@ -218,7 +218,8 @@ separated by '{@code |}' &mdash; for example, "{@code locale|navigation|orientat
<td>"{@code uiMode}"</td>
<td>The user interface mode has changed &mdash; this can be caused when the user places the
device into a desk/car dock or when the the night mode changes. See {@link
-android.app.UiModeManager}. <em>Introduced in API Level 8</em>.</td>
+android.app.UiModeManager}.
+ <em>Added in API level 8</em>.</td>
</tr><tr>
<td>"{@code orientation}"</td>
<td>The screen orientation has changed &mdash; the user has rotated the device.
@@ -246,7 +247,12 @@ smallestWidth configuration</a>. However, if your application targets API level
your activity always handles this configuration change itself (this configuration change does not
restart your activity, even when running on an Android 3.2 or higher device).
<p><em>Added in API level 13.</em></p></td>
- </tr>
+ </tr><tr>
+ <td>"{@code layoutDirection}"</td>
+ <td>The layout direction has changed. For example, changing from left-to-right (LTR)
+ to right-to-left (RTL).
+ <em>Added in API level 17.</em></td>
+ </tr>
</table>
<p>
diff --git a/docs/html/guide/topics/manifest/application-element.jd b/docs/html/guide/topics/manifest/application-element.jd
index 2105a50..42cfdd5 100644
--- a/docs/html/guide/topics/manifest/application-element.jd
+++ b/docs/html/guide/topics/manifest/application-element.jd
@@ -23,6 +23,7 @@ parent.link=manifest-intro.html
android:<a href="#persistent">persistent</a>=["true" | "false"]
android:<a href="#proc">process</a>="<i>string</i>"
android:<a href="#restoreany">restoreAnyVersion</a>=["true" | "false"]
+ android:<a href="#supportsrtl">supportsRtl</a>=["true" | "false"]
android:<a href="#aff">taskAffinity</a>="<i>string</i>"
android:<a href="#theme">theme</a>="<i>resource or theme</i>"
android:<a href="#uioptions">uiOptions</a>=["none" | "splitActionBarWhenNarrow"] &gt;
@@ -271,7 +272,7 @@ applications, reducing resource usage.
</p></dd>
<dt><a name="restoreany"></a>{@code android:restoreAnyVersion}</dt>
-<dd>Indicate that the application is prepared to attempt a restore of any
+<dd>Indicates that the application is prepared to attempt a restore of any
backed-up data set, even if the backup was stored by a newer version
of the application than is currently installed on the device. Setting
this attribute to {@code true} will permit the Backup Manager to
@@ -281,6 +282,21 @@ incompatible. <em>Use with caution!</em>
<p>The default value of this attribute is {@code false}.
</p></dd>
+<dt><a name="supportsrtl"></a>{@code android:supportsRtl}</dt>
+<dd>Declares whether your application is willing to support right-to-left (RTL) layouts.
+<p>If set to {@code true} and <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#target"
+>{@code targetSdkVersion}</a> is set to 17 or higher, various RTL APIs will be
+activated and used by the system so your app can display RTL layouts.
+If set to {@code false} or if <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#target"
+>{@code targetSdkVersion}</a> is set to 16 or lower, the RTL APIs will be ignored
+or will have no effect and your app will behave the same regardless of the layout
+direction associated to the user's Locale choice (your layouts will always be left-to-right).
+
+<p>The default value of this attribute is {@code false}.</p>
+
+<p>This attribute was added in API level 17.</p>
+</dd>
+
<dt><a name="aff"></a>{@code android:taskAffinity}</dt>
<dd>An affinity name that applies to all activities within the application,
except for those that set a different affinity with their own
diff --git a/docs/html/guide/topics/manifest/permission-element.jd b/docs/html/guide/topics/manifest/permission-element.jd
index c256fb1..a23fb4b 100644
--- a/docs/html/guide/topics/manifest/permission-element.jd
+++ b/docs/html/guide/topics/manifest/permission-element.jd
@@ -111,7 +111,7 @@ The value can be set to one of the following strings:
<td>"{@code signatureOrSystem}"</td>
<td>A permission that the system grants only to applications that are
in the Android system image <em>or</em> that are signed with the same
- certificates as those in the system image. Please avoid using this
+ certificate as the application that declared the permission. Please avoid using this
option, as the {@code signature} protection level should be sufficient
for most needs and works regardless of exactly where applications are
installed. The "{@code signatureOrSystem}"
diff --git a/docs/html/guide/topics/manifest/provider-element.jd b/docs/html/guide/topics/manifest/provider-element.jd
index 4558800..6cf6843 100644
--- a/docs/html/guide/topics/manifest/provider-element.jd
+++ b/docs/html/guide/topics/manifest/provider-element.jd
@@ -5,7 +5,9 @@ parent.link=manifest-intro.html
<dl class="xml">
<dt>syntax:</dt>
-<dd><pre class="stx">&lt;provider android:<a href="#auth">authorities</a>="<i>list</i>"
+<dd>
+<pre class="stx">
+&lt;provider android:<a href="#auth">authorities</a>="<i>list</i>"
android:<a href="#enabled">enabled</a>=["true" | "false"]
android:<a href="#exported">exported</a>=["true" | "false"]
android:<a href="#gprmsn">grantUriPermissions</a>=["true" | "false"]
@@ -20,10 +22,13 @@ parent.link=manifest-intro.html
android:<a href="#sync">syncable</a>=["true" | "false"]
android:<a href="#wprmsn">writePermission</a>="<i>string</i>" &gt;
. . .
-&lt;/provider&gt;</pre></dd>
+&lt;/provider&gt;</pre>
+</dd>
<dt>contained in:</dt>
-<dd><code><a href="{@docRoot}guide/topics/manifest/application-element.html">&lt;application&gt;</a></code></dd>
+<dd>
+ <code><a href="{@docRoot}guide/topics/manifest/application-element.html">&lt;application&gt;</a></code>
+</dd>
<dt>can contain:</dt>
<dd><code><a href="{@docRoot}guide/topics/manifest/meta-data-element.html">&lt;meta-data&gt;</a></code>
@@ -31,58 +36,67 @@ parent.link=manifest-intro.html
<br/><code><a href="{@docRoot}guide/topics/manifest/path-permission-element.html">&lt;path-permission&gt;</a></code></dd>
<dt>description:</dt>
-<dd>Declares a content provider &mdash; a subclass of
-{@link android.content.ContentProvider} &mdash; that supplies structured
-access to data managed by the application. All content providers that
-are part of the application must be represented by {@code &lt;provider&gt;}
-elements in the manifest file. The system cannot see, and therefore will
-not run, any that are not declared. (You need to declare only
-those content providers that you develop as part of your application,
-not those developed by others that your application uses.)
-
-<p>
-The Android system identifies content providers by the authority part
- of a {@code content:} URI. For example, suppose that the following URI
-is passed to <code>{@link android.content.ContentResolver#query
-ContentResolver.query()}</code>:
-
-<p style="margin-left: 2em">{@code content://com.example.project.healthcareprovider/nurses/rn}</p>
-
-<p>
-The {@code content:} scheme identifies the data as belonging to a content
-provider and the authority ({@code com.example.project.healthcareprovider})
-identifies the particular provider. The authority therefore must be unique.
-Typically, as in this example, it's the fully qualified name of a
-ContentProvider subclass. The path part of a URI may be used by a content
-provider to identify particular data subsets, but those paths are not
-declared in the manifest.
-</p>
-
-<p>
-For information on using and developing content providers, see a separate document,
-<a href="{@docRoot}guide/topics/providers/content-providers.html">Content Providers</a>.
-</p></dd>
+<dd>
+ Declares a content provider component. A content provider is a subclass of
+ {@link android.content.ContentProvider} that supplies structured access to data managed by the
+ application. All content providers in your application must be defined in a
+ {@code &lt;provider&gt;} element in the manifest file; otherwise, the system is unaware of them
+ and doesn't run them.
+ <p>
+ You only declare content providers that are part of your application. Content providers in
+ other applications that you use in your application should not be declared.
+ </p>
+ <p>
+ The Android system stores references to content providers according to an <b>authority</b>
+ string, part of the provider's <b>content URI</b>. For example, suppose you want to
+ access a content provider that stores information about health care professionals. To do
+ this, you call the method
+ {@link android.content.ContentResolver#query ContentResolver.query()}, which among other
+ arguments takes a URI that identifies the provider:
+ </p>
+<pre>
+content://com.example.project.healthcareprovider/nurses/rn
+</pre>
+ <p>
+ The <code>content:</code> <b>scheme</b> identifies the URI as a content URI pointing to
+ an Android content provider. The authority
+ <code>com.example.project.healthcareprovider</code> identifies the provider itself; the
+ Android system looks up the authority in its list of known providers and their authorities.
+ The substring <code>nurses/rn</code> is a <b>path</b>, which the content provider can use
+ to identify subsets of the provider data.
+ </p>
+ <p>
+ Notice that when you define your provider in the <code>&lt;provider&gt;</code> element, you
+ don't include the scheme or the path in the <code>android:name</code> argument, only the
+ authority.
+ </p>
+ <p>
+ For information on using and developing content providers, see the API Guide,
+ <a href="{@docRoot}guide/topics/providers/content-providers.html">Content Providers</a>.
+ </p>
+</dd>
<dt>attributes:</dt>
-<dd><dl class="attr">
-<dt><a name="auth"></a>{@code android:authorities}</dt>
-<dd>A list of one or more URI authorities that identify data under the purview
-of the content provider.
-Multiple authorities are listed by separating their names with a semicolon.
-To avoid conflicts, authority names should use a Java-style naming convention
-(such as {@code com.example.provider.cartoonprovider}). Typically, it's the name
-of the ContentProvider subclass.
-
-<p>
-There is no default. At least one authority must be specified.
-</p></dd>
-
-<dt><a name="enabled"></a>{@code android:enabled}</dt>
-<dd>Whether or not the content provider can be instantiated by the system &mdash;
-"{@code true}" if it can be, and "{@code false}" if not. The default value
-is "{@code true}".
-
-<p>
+<dd>
+ <dl class="attr">
+ <dt><a name="auth"></a>{@code android:authorities}</dt>
+ <dd>
+ A list of one or more URI authorities that identify data offered by the content provider.
+ Multiple authorities are listed by separating their names with a semicolon.
+ To avoid conflicts, authority names should use a Java-style naming convention
+ (such as {@code com.example.provider.cartoonprovider}). Typically, it's the name
+ of the {@link android.content.ContentProvider} subclass that implements the provider
+ <p>
+ There is no default. At least one authority must be specified.
+ </p>
+ </dd>
+
+ <dt><a name="enabled"></a>{@code android:enabled}</dt>
+ <dd>Whether or not the content provider can be instantiated by the system &mdash;
+ "{@code true}" if it can be, and "{@code false}" if not. The default value
+ is "{@code true}".
+
+ <p>
The <code><a href="{@docRoot}guide/topics/manifest/application-element.html">&lt;application&gt;</a></code> element has its own
<code><a href="{@docRoot}guide/topics/manifest/application-element.html#enabled">enabled</a></code> attribute that applies to all
application components, including content providers. The
@@ -93,16 +107,37 @@ are by default) for the content provider to be enabled. If either is
</p></dd>
<dt><a name="exported"></a>{@code android:exported}</dt>
-<dd>Whether or not the content provider can be used by components of other
-applications &mdash; "{@code true}" if it can be, and "{@code false}" if not.
-If "{@code false}", the provider is available only to components of the
-same application or applications with the same user ID. The default value
-is "{@code true}".
-
-<p>
-You can export a content provider but still limit access to it with the
-<code><a href="{@docRoot}guide/topics/manifest/provider-element.html#prmsn">permission</a></code> attribute.
-</p></dd>
+<dd>
+ Whether the content provider is available for other applications to use:
+ <ul>
+ <li>
+ <code>true</code>: The provider is available to other applications. Any application can
+ use the provider's content URI to access it, subject to the permissions specified for
+ the provider.
+ </li>
+ <li>
+ <code>false</code>: The provider is not available to other applications. Set
+ <code>android:exported="false"</code> to limit access to the provider to your
+ applications. Only applications that have the same user ID (UID) as the provider will
+ have access to it.
+ </li>
+ </ul>
+ <p>
+ The default value is <code>"true"</code> for applications that set either
+<code><a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min">android:minSdkVersion</a></code>
+ or
+<code><a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#target">android:targetSdkVersion</a></code> to
+ <code>"16"</code> or lower. For applications that
+ set either of these attributes to <code>"17"</code> or higher, the default is
+ <code>"false"</code>.
+ </p>
+ <p>
+ You can set <code>android:exported="false"</code> and still limit access to your
+ provider by setting permissions with the
+ <code><a href="{@docRoot}guide/topics/manifest/provider-element.html#prmsn">permission</a></code>
+ attribute.
+ </p>
+</dd>
<dt><a name="gprmsn"></a>{@code android:grantUriPermissions}</dt>
<dd>Whether or not those who ordinarily would not have permission to
diff --git a/docs/html/guide/topics/manifest/uses-feature-element.jd b/docs/html/guide/topics/manifest/uses-feature-element.jd
index a111356..10b5a33 100644
--- a/docs/html/guide/topics/manifest/uses-feature-element.jd
+++ b/docs/html/guide/topics/manifest/uses-feature-element.jd
@@ -561,7 +561,7 @@ is sensitive to delays or lag in sound input or output.</td>
</td>
</tr>
<tr>
- <td rowspan="4">Camera</td>
+ <td rowspan="5">Camera</td>
<td><code>android.hardware.camera</code></td>
<td>The application uses the device's camera. If the device supports
multiple cameras, the application uses the camera that facing
@@ -583,6 +583,12 @@ is sensitive to delays or lag in sound input or output.</td>
<td><code>android.hardware.camera.front</code></td>
<td>Subfeature. The application uses a front-facing camera on the device.</td>
</tr>
+<tr>
+ <td><code>android.hardware.camera.any</code></td>
+ <td>The application uses at least one camera facing in any direction. Use this
+in preference to <code>android.hardware.camera</code> if a back-facing camera is
+not required.</td>
+</tr>
<tr>
<td rowspan="3">Location</td>
diff --git a/docs/html/guide/topics/providers/content-provider-basics.jd b/docs/html/guide/topics/providers/content-provider-basics.jd
index 8c47ad7..527e713 100644
--- a/docs/html/guide/topics/providers/content-provider-basics.jd
+++ b/docs/html/guide/topics/providers/content-provider-basics.jd
@@ -2,9 +2,7 @@ page.title=Content Provider Basics
@jd:body
<div id="qv-wrapper">
<div id="qv">
-
-
- <!-- In this document -->
+<!-- In this document -->
<h2>In this document</h2>
<ol>
<li>
@@ -238,15 +236,11 @@ page.title=Content Provider Basics
</p>
<p>
For example, to get a list of the words and their locales from the User Dictionary Provider,
- you call {@link android.content.ContentResolver#query(Uri, String[], String, String[], String)
- ContentResolver.query()}.
- The {@link android.content.ContentResolver#query(Uri, String[], String, String[], String)
- query()} method calls the
- {@link android.content.ContentProvider#query(Uri, String[], String, String[], String)
- ContentProvider.query()} method defined by the User Dictionary Provider. The following lines
- of code show a
- {@link android.content.ContentResolver#query(Uri, String[], String, String[], String)
- ContentResolver.query()} call:
+ you call {@link android.content.ContentResolver#query ContentResolver.query()}.
+ The {@link android.content.ContentResolver#query query()} method calls the
+ {@link android.content.ContentProvider#query ContentProvider.query()} method defined by the
+ User Dictionary Provider. The following lines of code show a
+ {@link android.content.ContentResolver#query ContentResolver.query()} call:
<p>
<pre>
// Queries the user dictionary and returns results
@@ -259,7 +253,7 @@ mCursor = getContentResolver().query(
</pre>
<p>
Table 2 shows how the arguments to
- {@link android.content.ContentResolver#query(Uri, String[], String, String[], String)
+ {@link android.content.ContentResolver#query
query(Uri,projection,selection,selectionArgs,sortOrder)} match an SQL SELECT statement:
</p>
<p class="table-caption">
@@ -344,7 +338,7 @@ content://user_dictionary/words
<code>4</code> from user dictionary, you can use this content URI:
</p>
<pre>
-Uri singleUri = ContentUri.withAppendedId(UserDictionary.Words.CONTENT_URI,4);
+Uri singleUri = ContentUris.withAppendedId(UserDictionary.Words.CONTENT_URI,4);
</pre>
<p>
You often use id values when you've retrieved a set of rows and then want to update or delete
@@ -354,7 +348,7 @@ Uri singleUri = ContentUri.withAppendedId(UserDictionary.Words.CONTENT_URI,4);
<strong>Note:</strong> The {@link android.net.Uri} and {@link android.net.Uri.Builder} classes
contain convenience methods for constructing well-formed Uri objects from strings. The
{@link android.content.ContentUris} contains convenience methods for appending id values to
- a URI. The previous snippet uses {@link android.content.ContentUris#withAppendedId(Uri, long)
+ a URI. The previous snippet uses {@link android.content.ContentUris#withAppendedId
withAppendedId()} to append an id to the UserDictionary content URI.
</p>
@@ -367,10 +361,9 @@ Uri singleUri = ContentUri.withAppendedId(UserDictionary.Words.CONTENT_URI,4);
</p>
<p class="note">
For the sake of clarity, the code snippets in this section call
- {@link android.content.ContentResolver#query(Uri, String[], String, String[], String)
- ContentResolver.query()} on the "UI thread"". In actual code, however, you should
- do queries asynchronously on a separate thread. One way to do this is to use the
- {@link android.content.CursorLoader} class, which is described
+ {@link android.content.ContentResolver#query ContentResolver.query()} on the "UI thread"". In
+ actual code, however, you should do queries asynchronously on a separate thread. One way to do
+ this is to use the {@link android.content.CursorLoader} class, which is described
in more detail in the <a href="{@docRoot}guide/components/loaders.html">
Loaders</a> guide. Also, the lines of code are snippets only; they don't show a complete
application.
@@ -391,8 +384,8 @@ Uri singleUri = ContentUri.withAppendedId(UserDictionary.Words.CONTENT_URI,4);
To retrieve data from a provider, your application needs "read access permission" for the
provider. You can't request this permission at run-time; instead, you have to specify that
you need this permission in your manifest, using the
- <code><a href="{@docRoot}guide/topics/manifest/uses-permission-element.html">
- &lt;uses-permission&gt;</a></code> element and the exact permission name defined by the
+<code><a href="{@docRoot}guide/topics/manifest/uses-permission-element.html">&lt;uses-permission&gt;</a></code>
+ element and the exact permission name defined by the
provider. When you specify this element in your manifest, you are in effect "requesting" this
permission for your application. When users install your application, they implicitly grant
this request.
@@ -436,10 +429,9 @@ String[] mSelectionArgs = {""};
</pre>
<p>
The next snippet shows how to use
- {@link android.content.ContentResolver#query(Uri, String[], String, String[], String)
- ContentResolver.query()}, using the User Dictionary Provider as an example.
- A provider client query is similar to an SQL query, and it contains a set of columns to return,
- a set of selection criteria, and a sort order.
+ {@link android.content.ContentResolver#query ContentResolver.query()}, using the User Dictionary
+ Provider as an example. A provider client query is similar to an SQL query, and it contains a
+ set of columns to return, a set of selection criteria, and a sort order.
</p>
<p>
The set of columns that the query should return is called a <strong>projection</strong>
@@ -448,9 +440,9 @@ String[] mSelectionArgs = {""};
<p>
The expression that specifies the rows to retrieve is split into a selection clause and
selection arguments. The selection clause is a combination of logical and Boolean expressions,
- column names, and values (the variable <code>mSelection</code>). If you specify the replaceable
- parameter <code>?</code> instead of a value, the query method retrieves the value from the
- selection arguments array (the variable <code>mSelectionArgs</code>).
+ column names, and values (the variable <code>mSelectionClause</code>). If you specify the
+ replaceable parameter <code>?</code> instead of a value, the query method retrieves the value
+ from the selection arguments array (the variable <code>mSelectionArgs</code>).
</p>
<p>
In the next snippet, if the user doesn't enter a word, the selection clause is set to
@@ -517,7 +509,7 @@ if (null == mCursor) {
This query is analogous to the SQL statement:
</p>
<pre>
-SELECT _ID, word, frequency, locale FROM words WHERE word = &lt;userinput&gt; ORDER BY word ASC;
+SELECT _ID, word, locale FROM words WHERE word = &lt;userinput&gt; ORDER BY word ASC;
</pre>
<p>
In this SQL statement, the actual column names are used instead of contract class constants.
@@ -575,16 +567,15 @@ selectionArgs[0] = mUserInput;
<!-- Displaying the results -->
<h3 id="DisplayResults">Displaying query results</h3>
<p>
- The {@link android.content.ContentResolver#query(Uri, String[], String, String[], String)
- ContentResolver.query()} client method always returns a {@link android.database.Cursor}
- containing the columns specified by the query's projection for the rows that match the query's
- selection criteria. A {@link android.database.Cursor} object provides random read access to the
- rows and columns it contains. Using {@link android.database.Cursor} methods,
- you can iterate over the rows in the results, determine the data type of each column, get the
- data out of a column, and examine other properties of the results. Some
- {@link android.database.Cursor} implementations automatically update the object when the
- provider's data changes, or trigger methods in an observer object when the
- {@link android.database.Cursor} changes, or both.
+ The {@link android.content.ContentResolver#query ContentResolver.query()} client method always
+ returns a {@link android.database.Cursor} containing the columns specified by the query's
+ projection for the rows that match the query's selection criteria. A
+ {@link android.database.Cursor} object provides random read access to the rows and columns it
+ contains. Using {@link android.database.Cursor} methods, you can iterate over the rows in the
+ results, determine the data type of each column, get the data out of a column, and examine other
+ properties of the results. Some {@link android.database.Cursor} implementations automatically
+ update the object when the provider's data changes, or trigger methods in an observer object
+ when the {@link android.database.Cursor} changes, or both.
</p>
<p class="note">
<strong>Note:</strong> A provider may restrict access to columns based on the nature of the
@@ -594,7 +585,7 @@ selectionArgs[0] = mUserInput;
<p>
If no rows match the selection criteria, the provider
returns a {@link android.database.Cursor} object for which
- {@link android.database.Cursor#getCount() Cursor.getCount()} is 0 (an empty cursor).
+ {@link android.database.Cursor#getCount Cursor.getCount()} is 0 (an empty cursor).
</p>
<p>
If an internal error occurs, the results of the query depend on the particular provider. It may
@@ -685,8 +676,8 @@ if (mCursor != null) {
<p>
{@link android.database.Cursor} implementations contain several "get" methods for
retrieving different types of data from the object. For example, the previous snippet
- uses {@link android.database.Cursor#getString(int) getString()}. They also have a
- {@link android.database.Cursor#getType(int) getType()} method that returns a value indicating
+ uses {@link android.database.Cursor#getString getString()}. They also have a
+ {@link android.database.Cursor#getType getType()} method that returns a value indicating
the data type of the column.
</p>
@@ -713,17 +704,16 @@ if (mCursor != null) {
</p>
<p>
To get the permissions needed to access a provider, an application requests them with a
- <code><a href="{@docRoot}guide/topics/manifest/uses-permission-element.html">
- &lt;uses-permission&gt;</a></code> element in its manifest file.
- When the Android Package Manager installs the application, a user must approve all of the
- permissions the application requests. If the user approves all of them, Package Manager
- continues the installation; if the user doesn't approve them, Package Manager
+<code><a href="{@docRoot}guide/topics/manifest/uses-permission-element.html">&lt;uses-permission&gt;</a></code>
+ element in its manifest file. When the Android Package Manager installs the application, a user
+ must approve all of the permissions the application requests. If the user approves all of them,
+ Package Manager continues the installation; if the user doesn't approve them, Package Manager
aborts the installation.
</p>
<p>
The following
- <code><a href="{@docRoot}guide/topics/manifest/uses-permission-element.html">
- &lt;uses-permission&gt;</a></code> element requests read access to the User Dictionary Provider:
+<code><a href="{@docRoot}guide/topics/manifest/uses-permission-element.html">&lt;uses-permission&gt;</a></code>
+ element requests read access to the User Dictionary Provider:
</p>
<pre>
&lt;uses-permission android:name="android.permission.READ_USER_DICTIONARY"&gt;
@@ -746,7 +736,7 @@ if (mCursor != null) {
<h3 id="Inserting">Inserting data</h3>
<p>
To insert data into a provider, you call the
- {@link android.content.ContentResolver#insert(Uri,ContentValues) ContentResolver.insert()}
+ {@link android.content.ContentResolver#insert ContentResolver.insert()}
method. This method inserts a new row into the provider and returns a content URI for that row.
This snippet shows how to insert a new word into the User Dictionary Provider:
</p>
@@ -777,8 +767,7 @@ mNewUri = getContentResolver().insert(
The data for the new row goes into a single {@link android.content.ContentValues} object, which
is similar in form to a one-row cursor. The columns in this object don't need to have the
same data type, and if you don't want to specify a value at all, you can set a column
- to <code>null</code> using {@link android.content.ContentValues#putNull(String)
- ContentValues.putNull()}.
+ to <code>null</code> using {@link android.content.ContentValues#putNull ContentValues.putNull()}.
</p>
<p>
The snippet doesn't add the <code>_ID</code> column, because this column is maintained
@@ -799,17 +788,16 @@ content://user_dictionary/words/&lt;id_value&gt;
</p>
<p>
To get the value of <code>_ID</code> from the returned {@link android.net.Uri}, call
- {@link android.content.ContentUris#parseId(Uri) ContentUris.parseId()}.
+ {@link android.content.ContentUris#parseId ContentUris.parseId()}.
</p>
<h3 id="Updating">Updating data</h3>
<p>
To update a row, you use a {@link android.content.ContentValues} object with the updated
values just as you do with an insertion, and selection criteria just as you do with a query.
The client method you use is
- {@link android.content.ContentResolver#update(Uri, ContentValues, String, String[])
- ContentResolver.update()}. You only need to add values to the
- {@link android.content.ContentValues} object for columns you're updating. If you want to clear
- the contents of a column, set the value to <code>null</code>.
+ {@link android.content.ContentResolver#update ContentResolver.update()}. You only need to add
+ values to the {@link android.content.ContentValues} object for columns you're updating. If you
+ want to clear the contents of a column, set the value to <code>null</code>.
</p>
<p>
The following snippet changes all the rows whose locale has the language "en" to a
@@ -842,9 +830,8 @@ mRowsUpdated = getContentResolver().update(
</pre>
<p>
You should also sanitize user input when you call
- {@link android.content.ContentResolver#update(Uri, ContentValues, String, String[])
- ContentResolver.update()}. To learn more about this, read the section
- <a href="#Injection">Protecting against malicious input</a>.
+ {@link android.content.ContentResolver#update ContentResolver.update()}. To learn more about
+ this, read the section <a href="#Injection">Protecting against malicious input</a>.
</p>
<h3 id="Deleting">Deleting data</h3>
<p>
@@ -873,9 +860,8 @@ mRowsDeleted = getContentResolver().delete(
</pre>
<p>
You should also sanitize user input when you call
- {@link android.content.ContentResolver#delete(Uri, String, String[])
- ContentResolver.delete()}. To learn more about this, read the section
- <a href="#Injection">Protecting against malicious input</a>.
+ {@link android.content.ContentResolver#delete ContentResolver.delete()}. To learn more about
+ this, read the section <a href="#Injection">Protecting against malicious input</a>.
</p>
<!-- Provider Data Types -->
<h2 id="DataTypes">Provider Data Types</h2>
@@ -907,7 +893,7 @@ mRowsDeleted = getContentResolver().delete(
The data types for the User Dictionary Provider are listed in the reference documentation
for its contract class {@link android.provider.UserDictionary.Words} (contract classes are
described in the section <a href="#ContractClasses">Contract Classes</a>).
- You can also determine the data type by calling {@link android.database.Cursor#getType(int)
+ You can also determine the data type by calling {@link android.database.Cursor#getType
Cursor.getType()}.
</p>
<p>
@@ -918,7 +904,7 @@ mRowsDeleted = getContentResolver().delete(
data structures or files. For example, the {@link android.provider.ContactsContract.Data}
table in the Contacts Provider uses MIME types to label the type of contact data stored in each
row. To get the MIME type corresponding to a content URI, call
- {@link android.content.ContentResolver#getType(Uri) ContentResolver.getType()}.
+ {@link android.content.ContentResolver#getType ContentResolver.getType()}.
</p>
<p>
The section <a href="#MIMETypeReference">MIME Type Reference</a> describes the
@@ -935,8 +921,7 @@ mRowsDeleted = getContentResolver().delete(
<li>
<a href="#Batch">Batch access</a>: You can create a batch of access calls with methods in
the {@link android.content.ContentProviderOperation} class, and then apply them with
- {@link android.content.ContentResolver#applyBatch(String, ArrayList)
- ContentResolver.applyBatch()}.
+ {@link android.content.ContentResolver#applyBatch ContentResolver.applyBatch()}.
</li>
<li>
Asynchronous queries: You should do queries in a separate thread. One way to do this is to
@@ -963,11 +948,10 @@ mRowsDeleted = getContentResolver().delete(
To access a provider in "batch mode",
you create an array of {@link android.content.ContentProviderOperation} objects and then
dispatch them to a content provider with
- {@link android.content.ContentResolver#applyBatch(String, ArrayList)
- ContentResolver.applyBatch()}. You pass the content provider's <em>authority</em> to this
- method, rather than a particular content URI, which allows each
- {@link android.content.ContentProviderOperation} object in the array to work against a
- different table. A call to {@link android.content.ContentResolver#applyBatch(String, ArrayList)
+ {@link android.content.ContentResolver#applyBatch ContentResolver.applyBatch()}. You pass the
+ content provider's <em>authority</em> to this method, rather than a particular content URI.
+ This allows each {@link android.content.ContentProviderOperation} object in the array to work
+ against a different table. A call to {@link android.content.ContentResolver#applyBatch
ContentResolver.applyBatch()} returns an array of results.
</p>
<p>
@@ -1028,14 +1012,13 @@ mRowsDeleted = getContentResolver().delete(
</p>
<p>
A provider defines URI permissions for content URIs in its manifest, using the
- <code><a href="{@docRoot}guide/topics/manifest/provider-element.html#gprmsn">
- android:grantUriPermission</a></code>
- attribute of the <a href="{@docRoot}guide/topics/manifest/provider-element.html">
- {@code &lt;provider&gt;}</a>
+<code><a href="{@docRoot}guide/topics/manifest/provider-element.html#gprmsn">android:grantUriPermission</a></code>
+ attribute of the
+<code><a href="{@docRoot}guide/topics/manifest/provider-element.html">&lt;provider&gt;</a></code>
element, as well as the
- <a href="{@docRoot}guide/topics/manifest/grant-uri-permission-element.html">{@code
- &lt;grant-uri-permission&gt;}</a> child element of the
- <a href="{@docRoot}guide/topics/manifest/provider-element.html">{@code &lt;provider&gt;}</a>
+<code><a href="{@docRoot}guide/topics/manifest/grant-uri-permission-element.html">&lt;grant-uri-permission&gt;</a></code>
+ child element of the
+<code><a href="{@docRoot}guide/topics/manifest/provider-element.html">&lt;provider&gt;</a></code>
element. The URI permissions mechanism is explained in more detail in the
<a href="{@docRoot}guide/topics/security/security.html">Security and Permissions</a> guide,
in the section "URI Permissions".
@@ -1053,7 +1036,7 @@ mRowsDeleted = getContentResolver().delete(
Your application sends an intent containing the action
{@link android.content.Intent#ACTION_PICK} and the "contacts" MIME type
{@link android.provider.ContactsContract.RawContacts#CONTENT_ITEM_TYPE}, using the
- method {@link android.app.Activity#startActivityForResult(Intent, int)
+ method {@link android.app.Activity#startActivityForResult
startActivityForResult()}.
</li>
<li>
@@ -1063,7 +1046,7 @@ mRowsDeleted = getContentResolver().delete(
<li>
In the selection activity, the user selects a
contact to update. When this happens, the selection activity calls
- {@link android.app.Activity#setResult(int, Intent) setResult(resultcode, intent)}
+ {@link android.app.Activity#setResult setResult(resultcode, intent)}
to set up a intent to give back to your application. The intent contains the content URI
of the contact the user selected, and the "extras" flags
{@link android.content.Intent#FLAG_GRANT_READ_URI_PERMISSION}. These flags grant URI
@@ -1073,7 +1056,7 @@ mRowsDeleted = getContentResolver().delete(
</li>
<li>
Your activity returns to the foreground, and the system calls your activity's
- {@link android.app.Activity#onActivityResult(int, int, Intent) onActivityResult()}
+ {@link android.app.Activity#onActivityResult onActivityResult()}
method. This method receives the result intent created by the selection activity in
the People app.
</li>
diff --git a/docs/html/guide/topics/resources/providing-resources.jd b/docs/html/guide/topics/resources/providing-resources.jd
index b0d5d6f..b311b7f 100644
--- a/docs/html/guide/topics/resources/providing-resources.jd
+++ b/docs/html/guide/topics/resources/providing-resources.jd
@@ -329,6 +329,39 @@ your application for other languages.</p>
indicates the current locale.</p>
</td>
</tr>
+ <tr id="LayoutDirectionQualifier">
+ <td>Layout Direction</td>
+ <td><code>ldrtl</code><br/>
+ <code>ldltr</code><br/>
+ </td>
+ <td><p>The layout direction of your application. {@code ldrtl} means "layout-direction-right-to-left".
+ {@code ldltr} means "layout-direction-left-to-right" and is the default implicit value.
+ </p>
+ <p>This can apply to any resource such as layouts, drawables, or values.
+ </p>
+ <p>For example, if you want to provide some specific layout for the Arabic language and some
+ generic layout for any other "right-to-left" language (like Persian or Hebrew) then you would have:
+ </p>
+<pre class="classic no-pretty-print">
+res/
+ layout/ <span style="color:black">
+ main.xml </span>(Default layout)
+ layout-ar/ <span style="color:black">
+ main.xml </span>(Specific layout for Arabic)
+ layout-ldrtl/ <span style="color:black">
+ main.xml </span>(Any "right-to-left" language, except
+ for Arabic, because the "ar" language qualifier
+ has a higher precedence.)
+</pre>
+ <p class="note"><strong>Note:</strong> To enable right-to-left layout features
+ for your app, you must set <a
+ href="{@docRoot}guide/topics/manifest/application-element.html#supportsrtl">{@code
+ supportsRtl}</a> to {@code "true"} and set <a
+ href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#target"
+ >{@code targetSdkVersion}</a> to 17 or higher.</p>
+ <p><em>Added in API level 17.</em></p>
+ </td>
+ </tr>
<tr id="SmallestScreenWidthQualifier">
<td>smallestWidth</td>
<td><code>sw&lt;N&gt;dp</code><br/><br/>
@@ -548,6 +581,10 @@ which indicates the current device orientation.</p>
no display</li>
</ul>
<p><em>Added in API level 8, television added in API 13.</em></p>
+ <p>For information about how your app can respond when the device is inserted into or
+ removed from a dock, read <a
+ href="{@docRoot}training/monitoring-device-state/docking-monitoring.html">Determining
+and Monitoring the Docking State and Type</a>.</p>
<p>This can change during the life of your application if the user places the device in a
dock. You can enable or disable some of these modes using {@link
android.app.UiModeManager}. See <a href="runtime-changes.html">Handling Runtime Changes</a> for
diff --git a/docs/html/guide/topics/resources/string-resource.jd b/docs/html/guide/topics/resources/string-resource.jd
index 5f5484e..da410a4 100644
--- a/docs/html/guide/topics/resources/string-resource.jd
+++ b/docs/html/guide/topics/resources/string-resource.jd
@@ -13,8 +13,7 @@ your application with strings:</p>
<dt><a href="#StringArray">String Array</a></dt>
<dd>XML resource that provides an array of strings.</dd>
<dt><a href="#Plurals">Quantity Strings (Plurals)</a></dt>
- <dd>XML resource that carries different strings for different quantities
- of the same word or phrase.</dd>
+ <dd>XML resource that carries different strings for pluralization.</dd>
</dl>
<p>All strings are capable of applying some styling markup and formatting arguments. For
@@ -231,10 +230,19 @@ so Android provides you with methods such as
{@link android.content.res.Resources#getQuantityString(int,int) getQuantityString()} to select
the appropriate resource for you.
-<p>Note that the selection is made based on grammatical necessity. A string for <code>zero</code>
-in English will be ignored even if the quantity is 0, because 0 isn't grammatically different
-from 2, or any other number except 1 ("zero books", "one book", "two books", and so on).
-Don't be misled either by the fact that, say, <code>two</code> sounds like it could only apply to
+<p>Although historically called "quantity strings" (and still called that in API), quantity
+strings should <i>only</i> be used for plurals. It would be a mistake to use quantity strings to
+implement something like Gmail's "Inbox" versus "Inbox (12)" when there are unread messages, for
+example. It might seem convenient to use quantity strings instead of an {@code if} statement,
+but it's important to note that some languages (such as Chinese) don't make these grammatical
+distinctions at all, so you'll always get the <code>other</code> string.
+
+<p>The selection of which string to use is made solely based on grammatical <i>necessity</i>.
+In English, a string for <code>zero</code> will be ignored even if the quantity is 0, because 0
+isn't grammatically different from 2, or any other number except 1 ("zero books", "one book",
+"two books", and so on).
+
+<p>Don't be misled either by the fact that, say, <code>two</code> sounds like it could only apply to
the quantity 2: a language may require that 2, 12, 102 (and so on) are all treated like one
another but differently to other quantities. Rely on your translator to know what distinctions
their language actually insists upon.
@@ -313,7 +321,7 @@ values, with non-exhaustive examples in parentheses:
<td>{@code one}</td><td>When the language requires special treatment of numbers like one (as with the number 1 in English and most other languages; in Russian, any number ending in 1 but not ending in 11 is in this class).</td>
</tr>
<tr>
- <td>{@code two}</td><td>When the language requires special treatment of numbers like two (as in Welsh).</td>
+ <td>{@code two}</td><td>When the language requires special treatment of numbers like two (as with 2 in Welsh, or 102 in Slovenian).</td>
</tr>
<tr>
<td>{@code few}</td><td>When the language requires special treatment of "small" numbers (as with 2, 3, and 4 in Czech; or numbers ending 2, 3, or 4 but not 12, 13, or 14 in Polish).</td>
@@ -322,7 +330,7 @@ values, with non-exhaustive examples in parentheses:
<td>{@code many}</td><td>When the language requires special treatment of "large" numbers (as with numbers ending 11-99 in Maltese).</td>
</tr>
<tr>
- <td>{@code other}</td><td>When the language does not require special treatment of the given quantity.</td>
+ <td>{@code other}</td><td>When the language does not require special treatment of the given quantity (as with all numbers in Chinese, or 42 in English).</td>
</tr>
</table>
</dd>
diff --git a/docs/html/guide/topics/ui/accessibility/apps.jd b/docs/html/guide/topics/ui/accessibility/apps.jd
index d23512b..13b4538 100644
--- a/docs/html/guide/topics/ui/accessibility/apps.jd
+++ b/docs/html/guide/topics/ui/accessibility/apps.jd
@@ -21,14 +21,11 @@ parent.link=index.html
<li><a href="#accessibility-methods">Implementing accessibility API methods</a></li>
<li><a href="#send-events">Sending accessibility events</a></li>
<li><a href="#populate-events">Populating accessibility events</a></li>
+ <li><a href="#virtual-hierarchy">Providing a customized accessibility context</a></li>
+ <li><a href="#custom-touch-events">Handling custom touch events</a></li>
</ol>
</li>
- <li><a href="#test">Testing Accessibility</a>
- <ol>
- <li><a href="#test-audibles">Testing audible feedback</a></li>
- <li><a href="#test-navigation">Testing focus navigation</a></li>
- </ol>
- </li>
+ <li><a href="#test">Testing Accessibility</a></li>
</ol>
<h2>Key classes</h2>
@@ -42,60 +39,79 @@ parent.link=index.html
<h2>See also</h2>
<ol>
- <li><a href="{@docRoot}training/accessibility/index.html">Implementing Accessibility</a></li>
- <li><a href="{@docRoot}training/design-navigation/index.html">Designing Effective Navigation</a>
- </li>
- <li><a href="{@docRoot}design/index.html">Android Design</a></li>
+ <li><a href="checklist.html">Accessibility Developer Checklist</a><li>
+ <li><a href="{@docRoot}tools/testing/testing_accessibility.html">Accessibility Testing Checklist</a><li>
+ <li><a href="{@docRoot}design/patterns/accessibility.html">Android Design: Accessibility</a></li>
+ <li><a href="{@docRoot}training/design-navigation/index.html">Designing Effective Navigation</a></li>
+ <li><a href="{@docRoot}training/accessibility/index.html">Training: Implementing Accessibility</a></li>
</ol>
</div>
</div>
-<p>Applications built for Android are accessible to users with visual, physical or age-related
-disabilities when they activate accessibility features and services on a device. By default,
-these services make your application more accessible. However, there are further steps you should
-take to optimize the accessibility of your application and ensure a pleasant experience for all your
-users.</p>
+<p>Applications built for Android are more accessible to users with visual, physical or age-related
+limitations when those users activate accessibility services and features on a device. These
+services make your application more accessible even if you do not make any accessibility changes
+to your code. However, there are steps you should take to optimize the accessibility of your
+application and ensure a pleasant experience for all your users.</p>
-<p>Making sure your application is accessible to all users is relatively easy, particularly when you
-use framework-provided user interface components. If you only use these standard components for your
-application, there are just a few steps required to ensure your application is accessible:</p>
+<p>Making sure your application is accessible to all users requires only a few steps, particularly
+when you create your user interface with the components provided by the Android framework. If you
+use only the standard components for your application, the steps are:</p>
<ol>
- <li>Label your {@link android.widget.ImageButton}, {@link android.widget.ImageView}, {@link
-android.widget.EditText}, {@link android.widget.CheckBox} and other user interface controls using
-the <a href="{@docRoot}reference/android/view/View.html#attr_android:contentDescription">
- {@code android:contentDescription}</a> attribute.</li>
- <li>Make all of your user interface elements accessible with a directional controller,
- such as a trackball or D-pad.</li>
- <li>Test your application by turning on accessibility services like TalkBack and Explore by
- Touch, and try using your application using only directional controls.</li>
+ <li>Add descriptive text to user interface controls in your application using the
+ <a href="{@docRoot}reference/android/view/View.html#attr_android:contentDescription">
+ {@code android:contentDescription}</a> attribute. Pay particular attention to
+ {@link android.widget.ImageButton}, {@link android.widget.ImageView}
+ and {@link android.widget.CheckBox}.</li>
+ <li>Make sure that all user interface elements that can accept input (touches or typing) can be
+ reached with a directional controller, such as a trackball, D-pad (physical or virtual) or
+ navigation <a href="http://support.google.com/android/bin/topic.py?hl=en&topic=2492346">gestures
+ </a>.</li>
+ <li>Make sure that audio prompts are always accompanied by another visual prompt or notification,
+ to assist users who are deaf or hard of hearing.</li>
+ <li>Test your application using only accessibility navigation services and features. Turn on
+ <a href="{@docRoot}tools/testing/testing_accessibility.html#testing-talkback">TalkBack</a> and
+ <a href="{@docRoot}tools/testing/testing_accessibility.html#testing-ebt">Explore by Touch</a>,
+ and then try using your application using only directional controls. For more information on
+ testing for accessibility, see the <a href="{@docRoot}tools/testing/testing_accessibility.html">
+ Accessibility Testing Checklist</a>.</li>
</ol>
-<p>Developers who create custom controls that extend from the {@link android.view.View} class have
-some additional responsibilities for making sure their components are accessible for users. This
-document also discusses how to make custom view controls compatible with accessibility services.</p>
+<p>If you build custom controls that extend the {@link android.view.View} class, you must complete
+some additional work to make sure your components are accessible. This document discusses how to
+make custom view controls compatible with accessibility services.</p>
+<p class="note">
+<strong>Note:</strong> The implementation steps in this document describe the requirements for
+making your application accessible for users with blindness or low-vision. Be sure to review the
+requirements for serving users who are deaf and hard of hearing in the
+<a href="{@docRoot}guide/topics/ui/accessibility/checklist.html">Accessibility Developer
+Checklist</a></p>.
-<h2 id="label-ui">Labeling User Interface Elements</h2>
-<p>Many user interface controls rely on visual cues to inform users of their meaning. For
-example, a note-taking application might use an {@link android.widget.ImageButton} with a
-picture of a plus sign to indicate that the user can add a new note. Or, an {@link
-android.widget.EditText} component may have a label near it that indicates its purpose. When a user
-with impaired vision accesses your application, these visual cues are often useless.</p>
-<p>To provide textual information about interface controls (as an alternative to the visual cues),
-use the <a href="{@docRoot}reference/android/view/View.html#attr_android:contentDescription">
-{@code android:contentDescription}</a> attribute. The text you provide in this attribute is not
-visible on the screen, but if a user has enabled accessibility services that provide audible
-prompts, then the description in this attribute is read aloud to the user.</p>
+<h2 id="label-ui">Labeling User Interface Elements</h2>
-<p>Set the <a href="{@docRoot}reference/android/view/View.html#attr_android:contentDescription">
+<p>Many user interface controls depend on visual cues to indicate their meaning and usage. For
+example, a note-taking application might use an {@link android.widget.ImageButton} with a
+picture of a plus sign to indicate that the user can add a new note. An {@link
+android.widget.EditText} component may have a label near it that indicates its purpose. A user
+with impaired vision can't see these cues well enough to follow them, which makes them useless.</p>
+
+<p>You can make these controls more accessible with the
+<a href="{@docRoot}reference/android/view/View.html#attr_android:contentDescription">
+{@code android:contentDescription}</a> XML layout attribute. The text in this attribute does not
+appear on screen, but if the user enables accessibility services that provide audible prompts, then
+when the user navigates to that control, the text is spoken.</p>
+
+<p>For this reason, set the
+<a href="{@docRoot}reference/android/view/View.html#attr_android:contentDescription">
{@code android:contentDescription}</a> attribute for every {@link android.widget.ImageButton},
-{@link android.widget.ImageView}, {@link android.widget.EditText}, {@link android.widget.CheckBox}
-in your application's user interface, and on any other input controls that might require additional
-information for users who are not able to see it.</p>
+{@link android.widget.ImageView}, {@link android.widget.CheckBox}
+in your application's user interface, and add descriptions to any other input controls that might
+require additional information for users who are not able to see it.</p>
<p>For example, the following {@link android.widget.ImageButton} sets the content description for
the plus button to the {@code add_note} string resource, which could be defined as “Add note" for an
@@ -108,32 +124,38 @@ English language interface:</p>
android:contentDescription=”@string/add_note”/&gt;
</pre>
-<p>By including the description, speech-based accessibility services can announce "Add note" when a
-user moves focus to this button or hovers over it.</p>
+<p>By including the description, an accessibility service that provides spoken feedback can announce
+"Add note" when a user moves focus to this button or hovers over it.</p>
<p class="note"><strong>Note:</strong> For {@link android.widget.EditText} fields, provide an
<a href="{@docRoot}reference/android/widget/TextView.html#attr_android:hint">android:hint</a>
-attribute to help users understand what content is expected.</p>
+attribute <em>instead</em> of a content description, to help users understand what content is
+expected when the text field is empty. When the field is filled, TalkBack reads the entered
+content to the user, instead of the hint text.</p>
+
<h2 id="focus-nav">Enabling Focus Navigation</h2>
<p>Focus navigation allows users with disabilities to step through user interface controls using a
-directional controller. Directional controllers can be physical, such as a clickable trackball,
-directional pad (D-pad) or arrow keys, tab key navigation with an attached keyboard or a software
-application, such as the
+directional controller. Directional controllers can be physical, such as a trackball, directional
+pad (D-pad) or arrow keys, or virtual, such as the
<a href="https://play.google.com/store/apps/details?id=com.googlecode.eyesfree.inputmethod.latin">
-Eyes-Free Keyboard</a>, that provides an on-screen directional control.</p>
+Eyes-Free Keyboard</a>, or the gestures navigation mode available in Android 4.1 and higher.
+Directional controllers are a primary means of navigation for many Android users.
+</p>
+
+<p>To ensure that users can navigate your application using only a directional controller, verify
+that all user interface (UI) input controls in your application can be reached and activated
+without using the touchscreen. You should also verify that clicking with the center button (or OK
+button) of a directional controller has the same effect as touching a control that already has
+focus. For information on testing directional controls, see
+<a href="{@docRoot}tools/testing/testing_accessibility.html#test-navigation">Testing
+focus navigation</a>.</p>
-<p>A directional controller is a primary means of navigation for many users.
-Verify that all user interface (UI) controls in your application are accessible
-without using the touchscreen and that clicking with the center button (or OK button) of a
-directional controller has the same effect as touching the controls on the touchscreen. For
-information on testing directional controls, see <a href="#test-navigation">Testing focus
-navigation</a>.</p>
<h3 id="focus-enable">Enabling view focus</h3>
-<p>A user interface element is accessible using directional controls when its
+<p>A user interface element is reachable using directional controls when its
<a href="{@docRoot}reference/android/view/View.html#attr_android:focusable">
{@code android:focusable}</a> attribute is set to {@code true}. This setting allows users to focus
on the element using the directional controls and then interact with it. The user interface controls
@@ -149,44 +171,44 @@ and even request that a control be given focus:</p>
<li>{@link android.view.View#requestFocus requestFocus()}</li>
</ul>
-<p>When working with a view that is not focusable by default, you can make it focusable from the XML
-layout file by setting the
-<a href="{@docRoot}reference/android/view/View.html#attr_android:focusable">
-{@code android:focusable}</a> attribute to {@code true} or by using the {@link
+<p>If a view is not focusable by default, you can make it focusable in your layout file by setting
+the <a href="{@docRoot}reference/android/view/View.html#attr_android:focusable">
+{@code android:focusable}</a> attribute to {@code true} or by calling the its {@link
android.view.View#setFocusable setFocusable()} method.</p>
+
<h3 id="focus-order">Controlling focus order</h3>
<p>When users navigate in any direction using directional controls, focus is passed from one
-user interface element (View) to another, as determined by the focus ordering. The ordering of the
-focus movement is based on an algorithm that finds the nearest neighbor in a given direction. In
-rare cases, the default algorithm may not match the order that you intended for your UI. In these
-situations, you can provide explicit overrides to the ordering using the following XML attributes in
-the layout file:</p>
+user interface element (view) to another, as determined by the focus order. This order is based on
+an algorithm that finds the nearest neighbor in a given direction. In rare cases, the algorithm may
+not match the order that you intended or may not be logical for users. In these situations, you can
+provide explicit overrides to the ordering using the following XML attributes in your layout file:
+</p>
<dl>
- <dt><a href="{@docRoot}reference/android/view/View.html#attr_android:nextFocusDown"
->{@code android:nextFocusDown}</a></dt>
- <dd>Defines the next view to receive focus when the user navigates down.</dd>
- <a><a href="{@docRoot}reference/android/view/View.html#attr_android:nextFocusLeft"
->{@code android:nextFocusLeft}</a></dt>
- <dd>Defines the next view to receive focus when the user navigates left.</dd>
- <dt><a href="{@docRoot}reference/android/view/View.html#attr_android:nextFocusRight"
->{@code android:nextFocusRight}</a></dt>
- <dd>Defines the next view to receive focus when the user navigates right.</dd>
- <dt><a href="{@docRoot}reference/android/view/View.html#attr_android:nextFocusUp"
->{@code android:nextFocusUp}</a></dt>
- <dd>Defines the next view to receive focus when the user navigates up.</dd>
+ <dt><a href="{@docRoot}reference/android/view/View.html#attr_android:nextFocusDown">
+ {@code android:nextFocusDown}</a></dt>
+ <dd>Defines the next view to receive focus when the user navigates down.</dd>
+ <dt><a href="{@docRoot}reference/android/view/View.html#attr_android:nextFocusLeft">
+ {@code android:nextFocusLeft}</a></dt>
+ <dd>Defines the next view to receive focus when the user navigates left.</dd>
+ <dt><a href="{@docRoot}reference/android/view/View.html#attr_android:nextFocusRight">
+ {@code android:nextFocusRight}</a></dt>
+ <dd>Defines the next view to receive focus when the user navigates right.</dd>
+ <dt><a href="{@docRoot}reference/android/view/View.html#attr_android:nextFocusUp">
+ {@code android:nextFocusUp}</a></dt>
+ <dd>Defines the next view to receive focus when the user navigates up.</dd>
</dl>
-<p>The following example XML layout shows two focusable user interface elements where the <a
-href="{@docRoot}reference/android/view/View.html#attr_android:nextFocusDown"
->{@code android:nextFocusDown}</a> and <a
-href="{@docRoot}reference/android/view/View.html#attr_android:nextFocusUp"
->{@code android:nextFocusUp}</a> attributes have been explicitly set. The {@link android.widget.TextView} is
+<p>The following example XML layout shows two focusable user interface elements where the
+<a href="{@docRoot}reference/android/view/View.html#attr_android:nextFocusDown">{@code
+android:nextFocusDown}</a> and
+<a href="{@docRoot}reference/android/view/View.html#attr_android:nextFocusUp">{@code
+android:nextFocusUp}</a> attributes have been explicitly set. The {@link android.widget.TextView} is
located to the right of the {@link android.widget.EditText}. However, since these properties have
been set, the {@link android.widget.TextView} element can now be reached by pressing the down arrow
-when focus is on the {@link android.widget.EditText} element: </p>
+when focus is on the {@link android.widget.EditText} element:</p>
<pre>
&lt;LinearLayout android:orientation="horizontal"
@@ -218,8 +240,9 @@ These are the main tasks for ensuring the accessibility of your view:</p>
<ul>
<li>Handle directional controller clicks</li>
- <li>Implement Accessibility API methods</li>
- <li>Send {@link android.view.accessibility.AccessibilityEvent} objects specific to your custom view</li>
+ <li>Implement accessibility API methods</li>
+ <li>Send {@link android.view.accessibility.AccessibilityEvent} objects specific to your custom
+ view</li>
<li>Populate {@link android.view.accessibility.AccessibilityEvent} and {@link
android.view.accessibility.AccessibilityNodeInfo} for your view</li>
</ul>
@@ -243,9 +266,9 @@ full keyboard much easier for users.</p>
<p>Accessibility events are messages about users interaction with visual interface components in
your application. These messages are handled by <a href="services.html">Accessibility Services</a>,
-which use the information in these events to produce supplemental feedback and prompts when users
-have enabled accessibility services. As of Android 4.0 (API Level 14) and higher, the methods for
-generating accessibility events have been expanded to provide more detailed information beyond the
+which use the information in these events to produce supplemental feedback and prompts. In
+Android 4.0 (API Level 14) and higher, the methods for
+generating accessibility events have been expanded to provide more detailed information than the
{@link android.view.accessibility.AccessibilityEventSource} interface introduced in Android 1.6 (API
Level 4). The expanded accessibility methods are part of the {@link android.view.View} class as well
as the {@link android.view.View.AccessibilityDelegate} class. The methods are as follows:</p>
@@ -262,12 +285,12 @@ sendAccessibilityEventUnchecked()}</dt>
<dd>(API Level 4) This method is used when the calling code needs to directly control the check
for accessibility being enabled on the device ({@link
android.view.accessibility.AccessibilityManager#isEnabled AccessibilityManager.isEnabled()}). If
-you do implement this method, you must assume that the calling method has already checked that
-accessibility is enabled and the result is {@code true}. You typically do not need to implement this
-method for a custom view.</dd>
+you do implement this method, you must perform the call as if accessibility is enabled, regardless
+of the actual system setting. You typically do not need to implement this method for a custom view.
+</dd>
<dt>{@link android.view.View#dispatchPopulateAccessibilityEvent
-dispatchPopulateAccessibilityEvent()} </dt>
+dispatchPopulateAccessibilityEvent()}</dt>
<dd>(API Level 4) The system calls this method when your custom view generates an
accessibility event. As of API Level 14, the default implementation of this method calls {@link
android.view.View#onPopulateAccessibilityEvent onPopulateAccessibilityEvent()} for this view and
@@ -276,21 +299,21 @@ dispatchPopulateAccessibilityEvent()} method for each child of this view. In ord
accessibility services on revisions of Android <em>prior</em> to 4.0 (API Level 14) you
<em>must</em> override this method and populate {@link
android.view.accessibility.AccessibilityEvent#getText} with descriptive text for your custom
-view.</dd>
+view, which is spoken by accessibility services, such as TalkBack.</dd>
<dt>{@link android.view.View#onPopulateAccessibilityEvent onPopulateAccessibilityEvent()}</dt>
- <dd>(API Level 14) This method sets the text output of an {@link
+ <dd>(API Level 14) This method sets the spoken text prompt of the {@link
android.view.accessibility.AccessibilityEvent} for your view. This method is also called if the
view is a child of a view which generates an accessibility event.
<p class="note"><strong>Note:</strong> Modifying additional attributes beyond the text within
-this method potentially overwrites properties set by other methods. So, while you are able modify
+this method potentially overwrites properties set by other methods. While you can modify
attributes of the accessibility event with this method, you should limit these changes
-to text content only and use the {@link android.view.View#onInitializeAccessibilityEvent
+to text content, and use the {@link android.view.View#onInitializeAccessibilityEvent
onInitializeAccessibilityEvent()} method to modify other properties of the event.</p>
- <p class="note"><strong>Note:</strong> If your implementation of this event calls for completely
-overiding the output text without allowing other parts of your layout to modify its content, then
+ <p class="note"><strong>Note:</strong> If your implementation of this event completely
+overrides the output text without allowing other parts of your layout to modify its content, then
do not call the super implementation of this method in your code.</p>
</dd>
@@ -306,7 +329,7 @@ that have not been set by the super class.</dd>
<dt>{@link android.view.View#onInitializeAccessibilityNodeInfo
onInitializeAccessibilityNodeInfo()}</dt>
<dd>(API Level 14) This method provides accessibility services with information about the state of
-the view. The default {@link android.view.View} implementation sets a standard set of view
+the view. The default {@link android.view.View} implementation has a standard set of view
properties, but if your custom view provides interactive control beyond a simple {@link
android.widget.TextView} or {@link android.widget.Button}, you should override this method and set
the additional information about your view into the {@link
@@ -315,7 +338,7 @@ android.view.accessibility.AccessibilityNodeInfo} object handled by this method.
<dt>{@link android.view.ViewGroup#onRequestSendAccessibilityEvent
onRequestSendAccessibilityEvent()}</dt>
<dd>(API Level 14) The system calls this method when a child of your view has generated an
-{@link android.view.accessibility.AccessibilityEvent}. This step allows the the parent view to amend
+{@link android.view.accessibility.AccessibilityEvent}. This step allows the parent view to amend
the accessibility event with additional information. You should implement this method only if your
custom view can have child views and if the parent view can provide context information to the
accessibility event that would be useful to accessibility services.</dd>
@@ -333,7 +356,7 @@ higher, to your project. Then, within your custom view class, call the
{@link android.support.v4.view.ViewCompat#setAccessibilityDelegate
ViewCompat.setAccessibilityDelegate()} method to implement the accessibility methods
above. For an example of this approach, see the Android Support Library (revision 5 or higher)
-sample {@code AccessibilityDelegateSupportActivity} in
+sample {@code AccessibilityDelegateSupportActivity} in
({@code &lt;sdk&gt;/extras/android/support/v4/samples/Support4Demos/})
</li>
</ul>
@@ -446,20 +469,20 @@ public void dispatchPopulateAccessibilityEvent(AccessibilityEvent event) {
}
</pre>
-<p>On Android 4.0 (API Level 14) and higher, the {@link
+<p>For Android 4.0 (API Level 14) and higher, use the {@link
android.view.View#onPopulateAccessibilityEvent onPopulateAccessibilityEvent()} and
{@link android.view.View#onInitializeAccessibilityEvent onInitializeAccessibilityEvent()}
-methods are the recommended way to populate or modify the information in an {@link
-android.view.accessibility.AccessibilityEvent}. Use the
+methods to populate or modify the information in an {@link
+android.view.accessibility.AccessibilityEvent}. Use the
{@link android.view.View#onPopulateAccessibilityEvent onPopulateAccessibilityEvent()} method
specifically for adding or modifying the text content of the event, which is turned into audible
prompts by accessibility services such as TalkBack. Use the
{@link android.view.View#onInitializeAccessibilityEvent onInitializeAccessibilityEvent()} method for
populating additional information about the event, such as the selection state of the view.</p>
-<p>In addition, you should also implement the
+<p>In addition, implement the
{@link android.view.View#onInitializeAccessibilityNodeInfo onInitializeAccessibilityNodeInfo()}
-method. {@link android.view.accessibility.AccessibilityNodeInfo} objects populated by this method
+method. The {@link android.view.accessibility.AccessibilityNodeInfo} objects populated by this method
are used by accessibility services to investigate the view hierarchy that generated an accessibility
event after receiving that event, to obtain a more detailed context information and provide
appropriate feedback to users.</p>
@@ -467,8 +490,8 @@ appropriate feedback to users.</p>
<p>The example code below shows how override these three methods by using
{@link android.support.v4.view.ViewCompat#setAccessibilityDelegate
ViewCompat.setAccessibilityDelegate()}. Note that this sample code requires that the Android
-<a href="{@docRoot}tools/extras/support-library.html">Support Library</a> for API Level 4 (revision 5
-or higher) is added to your project.</p>
+<a href="{@docRoot}tools/extras/support-library.html">Support Library</a> for API Level 4 (revision
+5 or higher) is added to your project.</p>
<pre>
ViewCompat.setAccessibilityDelegate(new AccessibilityDelegateCompat() {
@@ -509,10 +532,10 @@ ViewCompat.setAccessibilityDelegate(new AccessibilityDelegateCompat() {
}
</pre>
-<p>On applications targeting Android 4.0 (API Level 14) and higher, these methods can be implemented
+<p>In applications targeting Android 4.0 (API Level 14) and higher, you can implement these methods
directly in your custom view class. For another example of this approach, see the Android
-<a href="{@docRoot}tools/extras/support-library.html">Support Library</a> (revision 5 or higher) sample
-{@code AccessibilityDelegateSupportActivity} in
+<a href="{@docRoot}tools/extras/support-library.html">Support Library</a> (revision 5 or higher)
+sample {@code AccessibilityDelegateSupportActivity} in
({@code &lt;sdk&gt;/extras/android/support/v4/samples/Support4Demos/}).</p>
<p class="note"><strong>Note:</strong> You may find information on implementing accessibility for
@@ -525,50 +548,141 @@ approach is to use the
methods.</p>
-<h2 id="test">Testing Accessibility</h2>
+<h3 id="virtual-hierarchy">Providing a customized accessibility context</h3>
+
+<p>In Android 4.0 (API Level 14), the framework was enhanced to allow accessibility services to
+ inspect the containing view hierarchy of a user interface component that generates an
+ accessibility event. This enhancement allows accessibility services to provide a much richer set
+ of contextual information with which to aid users.</p>
+
+<p>There are some cases where accessibility services cannot get adequate information
+ from the view hierarchy. An example of this is a custom interface control that has two or more
+ separately clickable areas, such as a calendar control. In this case, the services cannot get
+ adequate information because the clickable subsections are not part of the view hierarchy.</p>
+
+<img src="calendar.png" alt="" id="figure1" />
+<p class="img-caption">
+ <strong>Figure 1.</strong> A custom calendar view with selectable day elements.
+</p>
+
+<p>In the example shown in Figure 1, the entire calendar is implemented as a single view, so if you
+ do not do anything else, accessibility services do not receive enough information about the
+ content of the view and the user's selection within the view. For example, if a user clicks on the
+ day containing <strong>17</strong>, the accessibility framework only receives the description
+ information for the whole calendar control. In this case, the TalkBack accessibility service would
+ simply announce "Calendar" or, only slightly better, "April Calendar" and the user would be left
+ to wonder what day was selected.</p>
+
+<p>To provide adequate context information for accessibility services in situations like this,
+ the framework provides a way to specify a virtual view hierarchy. A <em>virtual view
+ hierarchy</em> is a way for application developers to provide a complementary view hierarchy
+ to accessibility services that more closely matches the actual information on screen. This
+ approach allows accessibility services to provide more useful context information to users.</p>
+
+<p>Another situation where a virtual view hierarchy may be needed is a user interface containing
+ a set of controls (views) that have closely related functions, where an action on one control
+ affects the contents of one or more elements, such as a number picker with separate up and down
+ buttons. In this case, accessibility services cannot get adequate information because action on
+ one control changes content in another and the relationship of those controls may not be apparent
+ to the service. To handle this situation, group the related controls with a containing view and
+ provide a virtual view hierarchy from this container to clearly represent the information and
+ behavior provided by the controls.</p>
+
+<p>In order to provide a virtual view hierarchy for a view, override the {@link
+ android.view.View#getAccessibilityNodeProvider} method in your custom view or view group and
+ return an implementation of {@link android.view.accessibility.AccessibilityNodeProvider}. For an
+ example implementation of this accessibility feature, see
+ {@code AccessibilityNodeProviderActivity} in the ApiDemos sample project. You can implement a
+ virtual view hierarchy that is compatible with Android 1.6 and later by using the
+ <a href="{@docRoot}tools/extras/support-library.html">Support Library</a> with the
+ {@link android.support.v4.view.ViewCompat#getAccessibilityNodeProvider
+ ViewCompat.getAccessibilityNodeProvider()} method and providing an implementation with
+ {@link android.support.v4.view.accessibility.AccessibilityNodeProviderCompat}.</p>
+
+
+<h3 id="custom-touch-events">Handling custom touch events</h3>
+
+<p>Custom view controls may require non-standard touch event behavior. For example, a custom
+control may use the {@link android.view.View#onTouchEvent} listener method to detect the
+{@link android.view.MotionEvent#ACTION_DOWN} and {@link android.view.MotionEvent#ACTION_UP} events
+and trigger a special click event. In order to maintain compatibility with accessibility services,
+the code that handles this custom click event must do the following:</p>
-<p>Testing the accessibility of your application is an important part of ensuring your users have a
-great experience. You can test the most important parts of accessibility by testing your application
-with audible feedback enabled and testing navigation within your application using directional
-controls.</p>
-
-<h3 id="test-audibles">Testing audible feedback</h3>
-<p>You can simulate the experience for many users by enabling an accessibility service that speaks
-as you move around the screen. The Explore by Touch accessibility service, which is available on
-devices with Android 4.0 and later. The <a
-href="https://play.google.com/store/apps/details?id=com.google.android.marvin.talkback">TalkBack</a>
-accessibility service, by the <a href="http://code.google.com/p/eyes-free/">Eyes-Free
-Project</a> comes preinstalled on many Android devices.</p>
-
-<p>To enable TalkBack on revisions of Android prior to Android 4.0:</p>
<ol>
- <li>Launch the Settings application.</li>
- <li>Navigate to the <strong>Accessibility</strong> category and select it.</li>
- <li>Select <strong>Accessibility</strong> to enable it.</li>
- <li>Select <strong>TalkBack</strong> to enable it.</li>
+ <li>Generate an appropriate {@link android.view.accessibility.AccessibilityEvent} for the
+ interpreted click action.</li>
+ <li>Enable accessibility services to perform the custom click action for users who are not able to
+ use a touch screen.</li>
</ol>
-<p class="note"><strong>Note:</strong> If the TalkBack accessibility service is not available, you
-can install it for free from <a href="http://play.google.com">Google Play</a>.</p>
+<p>To handle these requirements in an efficient way, your code should override the
+{@link android.view.View#performClick} method, which must call the super implementation of this
+method and then execute whatever actions are required by the click event. When the custom click
+action is detected, that code should then call your {@code performClick()} method. The following
+code example demonstrates this pattern.</p>
-<p>To enable Explore by Touch on Android 4.0 and later:</p>
-<ol>
- <li>Launch the Settings application.</li>
- <li>Navigate to the <strong>Accessibility</strong> category and select it.</li>
- <li>Select the <strong>TalkBack</strong> to enable it.</li>
- <li>Return to the <strong>Accessibility</strong> category and select <strong>Explore by
-Touch</strong> to enable it.
- <p class="note"><strong>Note:</strong> You must turn on TalkBack <em>first</em>, otherwise this
-option is not available.</p>
- </li>
-</ol>
+<pre>
+class CustomTouchView extends View {
-<h3 id="test-navigation">Testing focus navigation</h3>
+ public CustomTouchView(Context context) {
+ super(context);
+ }
+
+ boolean mDownTouch = false;
+
+ &#64;Override
+ public boolean onTouchEvent(MotionEvent event) {
+ super.onTouchEvent(event);
+
+ // Listening for the down and up touch events
+ switch (event.getAction()) {
+ case MotionEvent.ACTION_DOWN:
+ mDownTouch = true;
+ return true;
+
+ case MotionEvent.ACTION_UP:
+ if (mDownTouch) {
+ mDownTouch = false;
+ performClick(); // Call this method to handle the response, and
+ // thereby enable accessibility services to
+ // perform this action for a user who cannot
+ // click the touchscreen.
+ return true;
+ }
+ }
+ return false; // Return false for other touch events
+ }
+
+ &#64;Override
+ public boolean performClick() {
+ // Calls the super implementation, which generates an AccessibilityEvent
+ // and calls the onClick() listener on the view, if any
+ super.performClick();
+
+ // Handle the action for the custom click here
+
+ return true;
+ }
+}
+</pre>
+
+<p>The pattern shown above makes sure that the custom click event is compatible with
+accessibility services by using the {@link android.view.View#performClick} method to both generate
+an accessibility event and provide an entry point for accessibility services to act on behalf of a
+user to perform this custom click event.</p>
+
+<p class="note"><strong>Note:</strong> If your custom view has distinct clickable regions, such as
+a custom calendar view, you must implement a <a href="#virtual-hierarchy">virtual view
+hierarchy</a> by overriding {@link android.view.View#getAccessibilityNodeProvider} in your custom
+view in order to be compatible with accessibility services.</p>
+
+
+<h2 id="test">Testing Accessibility</h2>
+
+<p>Testing the accessibility of your application is an important part of ensuring your users have a
+great experience. You can test the most important accessibility features by using your application
+with audible feedback enabled and navigating within your application using only directional
+controls. For more information on testing accessibility in your application, see the
+<a href="{@docRoot}tools/testing/testing_accessibility.html">Accessibility Testing Checklist</a>.
+</p>
-<p>As part of your accessibility testing, you can test navigation of your application using focus,
-even if your test devices does not have a directional controller. The <a
-href="{@docRoot}tools/help/emulator.html">Android Emulator</a> provides a
-simulated directional controller that you can easily use to test navigation. You can also use a
-software-based directional controller, such as the one provided by the
-<a href="https://play.google.com/store/apps/details?id=com.googlecode.eyesfree.inputmethod.latin">
-Eyes-Free Keyboard</a> to simulate use of a D-pad.</p>
diff --git a/docs/html/guide/topics/ui/accessibility/calendar.png b/docs/html/guide/topics/ui/accessibility/calendar.png
new file mode 100644
index 0000000..ca5c44f
--- /dev/null
+++ b/docs/html/guide/topics/ui/accessibility/calendar.png
Binary files differ
diff --git a/docs/html/guide/topics/ui/accessibility/checklist.jd b/docs/html/guide/topics/ui/accessibility/checklist.jd
new file mode 100644
index 0000000..9473d1b
--- /dev/null
+++ b/docs/html/guide/topics/ui/accessibility/checklist.jd
@@ -0,0 +1,173 @@
+page.title=Accessibility Developer Checklist
+parent.title=Accessibility
+parent.link=index.html
+@jd:body
+
+<div id="qv-wrapper">
+<div id="qv">
+
+ <h2>In this document</h2>
+ <ol>
+ <li><a href="#requirements">Accessibility Requirements</a></li>
+ <li><a href="#recommendations">Accessibility Recommendations</a></li>
+ <li><a href="#special-cases">Special Cases and Considerations</a></li>
+ </ol>
+
+ <h2>See also</h2>
+ <ol>
+ <li><a href="{@docRoot}design/patterns/accessibility.html">Android Design: Accessibility</a></li>
+ <li><a href="{@docRoot}tools/testing/testing_accessibility.html">Accessibility Testing Checklist</a></li>
+ <li><a href="{@docRoot}training/accessibility/index.html">Training: Implementing Accessibility</a></li>
+ <li><a href="{@docRoot}training/design-navigation/index.html">Designing Effective Navigation</a></li>
+ </ol>
+
+</div>
+</div>
+
+<p>Making an application accessible is about a deep commitment to usability, getting the
+details right and delighting your users. This document provides a checklist of accessibility
+requirements, recommendations and considerations to help you make sure your application is
+accessible. Following this checklist does not guarantee your application is accessible, but it's a
+good place to start.</p>
+
+<p>Creating an accessible application is not just the responsibility of developers. Involve your
+design and testing folks as well, and make them are aware of the guidelines for these other stages
+of development:</p>
+
+<ul>
+ <li><a href="{@docRoot}design/patterns/accessibility.html">Android Design: Accessibility</a></li>
+ <li><a href="{@docRoot}tools/testing/testing_accessibility.html">Accessibility Testing
+ Checklist</a></li>
+</ul>
+
+<p>In most cases, creating an accessible Android application does not require extensive code
+restructuring. Rather, it means working through the subtle details of how users interact with your
+application, so you can provide them with feedback they can sense and understand. This checklist
+helps you focus on the key development issues to get the details of accessibility right.</p>
+
+
+<h2 id="requirements">Accessibility Requirements</h2>
+
+<p>The following steps must be completed in order to ensure a minimum level of application
+ accessibility.</p>
+
+<ol>
+ <li><strong>Describe user interface controls:</strong> Provide content
+ <a href="{@docRoot}guide/topics/ui/accessibility/apps.html#label-ui">descriptions</a> for user
+ interface components that do not have visible text, particularly
+ {@link android.widget.ImageButton}, {@link android.widget.ImageView}
+ and {@link android.widget.CheckBox} components. Use the
+ <a href="{@docRoot}reference/android/view/View.html#attr_android:contentDescription">
+ {@code android:contentDescription}</a> XML layout attribute or the {@link
+ android.view.View#setContentDescription} method to provide this information for accessibility
+ services. (Exception: <a href="#decorative">decorative graphics</a>)</li>
+ <li><strong>Enable focus-based navigation:</strong> Make sure
+ <a href="{@docRoot}guide/topics/ui/accessibility/apps.html#focus-nav">users can navigate</a>
+ your screen layouts using hardware-based or software directional controls (D-pads, trackballs,
+ keyboards and navigation gestures). In a few cases, you may need to make user interface components
+ <a href="{@docRoot}reference/android/view/View.html#attr_android:focusable">focusable</a>
+ or change the <a href="{@docRoot}guide/topics/ui/accessibility/apps.html#focus-order">focus
+ order</a> to be more logical for user actions.</li>
+ <li><strong>Custom view controls:</strong> If you build
+ <a href="{@docRoot}guide/topics/ui/custom-components.html">custom interface controls</a> for
+ your application, <a href="{@docRoot}guide/topics/ui/accessibility/apps.html#custom-views">
+ implement accessibility interfaces</a> for your custom views and provide content descriptions.
+ For custom controls that are intended to be compatible with versions of Android back to 1.6,
+ use the <a href="{@docRoot}tools/extras/support-library.html">Support Library</a> to implement
+ the latest accessibility features.</li>
+ <li><strong>No audio-only feedback:</strong> Audio feedback must always have a secondary
+ feedback mechanism to support users who are deaf or hard of hearing. For example, a sound alert
+ for the arrival of a message must be accompanied by a system
+ {@link android.app.Notification}, haptic feedback (if available) or other visual alert.</li>
+ <li><strong>Test:</strong> Test accessibility by navigating your application
+ using directional controls, and using eyes-free navigation with TalkBack enabled.
+ For more accessibility testing information, see the
+ <a href="{@docRoot}tools/testing/testing_accessibility.html">Accessibility Testing
+ Checklist</a>.</li>
+</ol>
+
+
+<h2 id="recommendations">Accessibility Recommendations</h2>
+
+<p>The following steps are recommended for ensuring the accessibility of your application. If you
+ do not take these actions, it may impact the overall accessibility and quality of your
+ application.</p>
+
+<ol>
+ <li><strong>Android Design Accessibility Guidelines:</strong> Before building your layouts,
+ review and follow the accessibility guidelines provided in the
+ <a href="{@docRoot}design/patterns/accessibility.html">Design guidelines</a>.</li>
+ <li><strong>Framework-provided controls:</strong> Use Android's built-in user interface
+ controls whenever possible, as these components provide accessibility support by default.</li>
+ <li><strong>Temporary or self-hiding controls and notifications:</strong> Avoid having user
+ interface controls that fade out or disappear after a certain amount of time. If this behavior
+ is important to your application, provide an alternative interface for these functions.</li>
+</ol>
+
+
+<h2 id="special-cases">Special Cases and Considerations</h2>
+
+<p>The following list describes specific situations where action should be taken to ensure an
+ accessible app. Review this list to see if any of these special cases and considerations apply to
+ your application, and take the appropriate action.</p>
+
+<ol>
+ <li><strong>Text field hints:</strong> For {@link android.widget.EditText} fields, provide an
+ <a href="{@docRoot}reference/android/widget/TextView.html#attr_android:hint">android:hint</a>
+ attribute <em>instead</em> of a content description, to help users understand what content is
+ expected when the text field is empty and allow the contents of the field to be spoken when
+ it is filled.</li>
+ <li><strong>Custom controls with high visual context:</strong> If your application contains a
+ <a href="{@docRoot}guide/topics/ui/custom-components.html">custom control</a> with a high degree
+ of visual context (such as a calendar control), default accessibility services processing may
+ not provide adequate descriptions for users, and you should consider providing a
+ <a href="{@docRoot}guide/topics/ui/accessibility/apps.html#virtual-hierarchy">virtual
+ view hierarchy</a> for your control using
+ {@link android.view.accessibility.AccessibilityNodeProvider}.</li>
+ <li><strong>Custom controls and click handling:</strong> If a custom control in your
+ application performs specific handling of user touch interaction, such as listening with
+ {@link android.view.View#onTouchEvent} for {@link android.view.MotionEvent#ACTION_DOWN
+ MotionEvent.ACTION_DOWN} and {@link android.view.MotionEvent#ACTION_UP MotionEvent.ACTION_UP}
+ and treating it as a click event, you must trigger an {@link
+ android.view.accessibility.AccessibilityEvent} equivalent to a click and provide a way for
+ accessibility services to perform this action for users. For more information, see
+ <a href="{@docRoot}guide/topics/ui/accessibility/apps.html#custom-touch-events">Handling custom
+ touch events</a>.</li>
+ <li><strong>Controls that change function:</strong> If you have buttons or other controls
+ that change function during the normal activity of a user in your application (for example, a
+ button that changes from <strong>Play</strong> to <strong>Pause</strong>), make sure you also
+ change the <a href="{@docRoot}reference/android/view/View.html#attr_android:contentDescription">
+ {@code android:contentDescription}</a> of the button appropriately.</li>
+ <li><strong>Prompts for related controls:</strong> Make sure sets of controls which provide a
+ single function, such as the {@link android.widget.DatePicker}, provide useful audio feedback
+ when an user interacts with the individual controls.</li>
+ <li><strong>Video playback and captioning:</strong> If your application provides video
+ playback, it must support captioning and subtitles to assist users who are deaf or hard of
+ hearing. Your video playback controls must also clearly indicate if captioning is available for
+ a video and provide a clear way of enabling captions.</li>
+ <li><strong>Supplemental accessibility audio feedback:</strong> Use only the Android accessibility
+ framework to provide accessibility audio feedback for your app. Accessibility services such as
+ <a href="https://play.google.com/store/apps/details?id=com.google.android.marvin.talkback"
+ >TalkBack</a> should be the only way your application provides accessibility audio prompts to
+ users. Provide the prompting information with a
+ <a href="{@docRoot}reference/android/view/View.html#attr_android:contentDescription">{@code
+ android:contentDescription}</a> XML layout attribute or dynamically add it using accessibility
+ framework APIs. For example, if your application takes action that you want to announce to a
+ user, such as automatically turning the page of a book, use the {@link
+ android.view.View#announceForAccessibility} method to have accessibility services speak this
+ information to the user.</li>
+ <li><strong>Custom controls with complex visual interactions:</strong> For custom controls that
+ provide complex or non-standard visual interactions, provide a
+ <a href="{@docRoot}guide/topics/ui/accessibility/apps.html#virtual-hierarchy">virtual view
+ hierarchy</a> for your control using {@link android.view.accessibility.AccessibilityNodeProvider}
+ that allows accessibility services to provide a simplified interaction model for the user. If
+ this approach is not feasible, consider providing an alternate view that is accessible.</li>
+ <li><strong>Sets of small controls:</strong> If you have controls that are smaller than
+ the minimum recommended touch size in your application screens, consider grouping these controls
+ together using a {@link android.view.ViewGroup} and providing a
+ <a href="{@docRoot}reference/android/view/View.html#attr_android:contentDescription">{@code
+ android:contentDescription}</a> for the group.</li>
+ <li id="decorative"><strong>Decorative images and graphics:</strong> Elements in application
+ screens that are purely decorative and do not provide any content or enable a user action should
+ not have accessibility content descriptions.</li>
+</ol>
diff --git a/docs/html/guide/topics/ui/accessibility/index.jd b/docs/html/guide/topics/ui/accessibility/index.jd
index 6fd71e2..6cdbde4 100644
--- a/docs/html/guide/topics/ui/accessibility/index.jd
+++ b/docs/html/guide/topics/ui/accessibility/index.jd
@@ -8,47 +8,67 @@ parent.link=../index.html
<h2>Topics</h2>
<ol>
- <li><a href="{@docRoot}guide/topics/ui/accessibility/apps.html">Making Applications Accessible</a>
- </li>
- <li><a href="{@docRoot}guide/topics/ui/accessibility/services.html">Building Accessibility
- Services</a></li>
+ <li><a href="apps.html">
+ Making Applications Accessible</a></li>
+ <li><a href="checklist.html">
+ Accessibility Developer Checklist</a></li>
+ <li><a href="services.html">
+ Building Accessibility Services</a></li>
</ol>
- <h2>Key classes</h2>
+ <h2>See also</h2>
<ol>
- <li>{@link android.view.accessibility.AccessibilityEvent}</li>
- <li>{@link android.accessibilityservice.AccessibilityService}</li>
+ <li><a href="{@docRoot}design/patterns/accessibility.html">Android Design: Accessibility</a></li>
+ <li><a href="{@docRoot}training/accessibility/index.html">Training: Implementing Accessibility</a></li>
+ <li><a href="{@docRoot}tools/testing/testing_accessibility.html">Accessibility Testing Checklist</a></li>
</ol>
-
- <h2>See also</h2>
+
+ <h2>Related Videos</h2>
<ol>
- <li><a href="{@docRoot}training/accessibility/index.html">Implementing Accessibility</a></li>
+ <li>
+ <iframe title="Google I/O 2012 - Making Android Apps Accessible"
+ width="210" height="160"
+ src="http://www.youtube.com/embed/q3HliaMjL38?rel=0&amp;hd=1"
+ frameborder="0" allowfullscreen>
+ </iframe>
+ <li>
</ol>
</div>
</div>
-<p>Many Android users have disabilities that require them to interact with their Android devices in
-different ways. These include users who have visual, physical or age-related disabilities that
-prevent them from fully seeing or using a touchscreen.</p>
+<p>Many Android users have different abilities that require them to interact with their Android
+devices in different ways. These include users who have visual, physical or age-related limitations
+that prevent them from fully seeing or using a touchscreen, and users with hearing loss who may not
+be able to perceive audible information and alerts.</p>
<p>Android provides accessibility features and services for helping these users navigate their
-devices more easily, including text-to-speech, haptic feedback, trackball and D-pad navigation that
-augment their experience. Android application developers can take advantage of these services to
-make their applications more accessible and also build their own accessibility services.</p>
+devices more easily, including text-to-speech, haptic feedback, gesture navigation, trackball and
+directional-pad navigation. Android application developers can take advantage of these services to
+make their applications more accessible.</p>
+
+<p>Android developers can also build their own accessibility services, which can provide
+enhanced usability features such as audio prompting, physical feedback, and alternative navigation
+modes. Accessibility services can provide these enhancements for all applications, a set of
+applications or just a single app.</p>
<p>The following topics show you how to use the Android framework to make applications more
accessible.</p>
<dl>
- <dt><strong><a href="{@docRoot}guide/topics/ui/accessibility/apps.html">Making Applications
-Accessible</a></strong>
+ <dt><strong><a href="{@docRoot}guide/topics/ui/accessibility/apps.html">
+ Making Applications Accessible</a></strong>
</dt>
<dd>Development practices and API features to ensure your application is accessible to users with
disabilities.</dd>
- <dt><strong><a href="{@docRoot}guide/topics/ui/accessibility/services.html">Building Accessibility
-Services</a></strong>
+ <dt><strong><a href="{@docRoot}guide/topics/ui/accessibility/checklist.html">
+ Accessibility Developer Checklist</a></strong>
+ </dt>
+ <dd>A checklist to help developers ensure that their applications are accessible.</dd>
+
+ <dt><strong><a href="{@docRoot}guide/topics/ui/accessibility/services.html">
+ Building Accessibility Services</a></strong>
</dt>
<dd>How to use API features to build services that make other applications more accessible for
users.</dd>
diff --git a/docs/html/guide/topics/ui/accessibility/services.jd b/docs/html/guide/topics/ui/accessibility/services.jd
index 7d36181..2a6fe7a 100644
--- a/docs/html/guide/topics/ui/accessibility/services.jd
+++ b/docs/html/guide/topics/ui/accessibility/services.jd
@@ -14,8 +14,16 @@ parent.link=index.html
<li><a href="#service-config">Accessibility service configuration</a></li>
</ol>
</li>
+ <li><a href="#register">Registering for Accessibility Events</a></li>
<li><a href="#methods">AccessibilityService Methods</a></li>
<li><a href="#event-details">Getting Event Details</a></li>
+ <li><a href="#act-for-users">Taking Action for Users</a>
+ <ol>
+ <li><a href="#detect-gestures">Listening for gestures</a></li>
+ <li><a href="#using-actions">Using accessibility actions</a></li>
+ <li><a href="#focus-types">Using focus types</a></li>
+ </ol>
+ </li>
<li><a href="#examples">Example Code</a></li>
</ol>
@@ -30,7 +38,7 @@ parent.link=index.html
<h2>See also</h2>
<ol>
- <li><a href="{@docRoot}training/accessibility/index.html">Implementing Accessibility</a></li>
+ <li><a href="{@docRoot}training/accessibility/index.html">Training: Implementing Accessibility</a></li>
</ol>
</div>
@@ -45,20 +53,20 @@ might need additional or alternative interface feedback.</p>
create and distribute their own services. This document explains the basics of building an
accessibility service.</p>
-<p>The ability for you to build and deploy accessibility services was introduced with Android
-1.6 (API Level 4) and received significant improvements with Android 4.0 (API Level 14). The Android
-Support Library was also updated with the release of Android 4.0 to provide support for these
-enhanced accessibility features back to Android 1.6. Developers aiming for widely compatible
-accessibility services are encouraged to use the
-<a href="{@docRoot}tools/extras/support-library.html">Support Library</a> and develop for the more
-advanced accessibility features introduced in Android 4.0.</p>
+<p>The ability for you to build and deploy accessibility services was introduced with Android 1.6
+ (API Level 4) and received significant improvements with Android 4.0 (API Level 14). The Android
+ <a href="{@docRoot}tools/extras/support-library.html">Support Library</a> was also updated with
+ the release of Android 4.0 to provide support for these enhanced accessibility features back to
+ Android 1.6. Developers aiming for widely compatible accessibility services are encouraged to use
+ the Support Library and develop for the more advanced accessibility features introduced in
+ Android 4.0.</p>
<h2 id="manifest">Manifest Declarations and Permissions</h2>
<p>Applications that provide accessibility services must include specific declarations in their
- application manifests in order to be treated as an accessibility service by an Android system.
- This section explains the required and optional settings for accessibility services.</p>
+ application manifests to be treated as an accessibility service by the Android system. This
+ section explains the required and optional settings for accessibility services.</p>
<h3 id="service-declaration">Accessibility service declaration</h3>
@@ -66,7 +74,9 @@ advanced accessibility features introduced in Android 4.0.</p>
<p>In order to be treated as an accessibility service, your application must include the
{@code service} element (rather than the {@code activity} element) within the {@code application}
element in its manifest. In addition, within the {@code service} element, you must also include an
-accessibility service intent filter, as shown in the following sample:</p>
+accessibility service intent filter. For compatiblity with Android 4.1 and higher, the manifest
+must also request the {@link android.Manifest.permission#BIND_ACCESSIBILITY_SERVICE} permission
+as shown in the following sample:</p>
<pre>
&lt;application&gt;
@@ -76,6 +86,7 @@ accessibility service intent filter, as shown in the following sample:</p>
&lt;action android:name=&quot;android.accessibilityservice.AccessibilityService&quot; /&gt;
&lt;/intent-filter&gt;
&lt;/service&gt;
+ &lt;uses-permission android:name="android.permission.BIND_ACCESSIBILITY_SERVICE" /&gt;
&lt;/application&gt;
</pre>
@@ -123,6 +134,26 @@ shows example contents for the service configuration file:</p>
/&gt;
</pre>
+<p>For more information about the XML attributes which can be used in the accessibility service
+ configuration file, follow these links to the reference documentation:</p>
+
+<ul>
+ <li><a href="{@docRoot}reference/android/R.styleable.html#AccessibilityService_description">{@code android:description}</a></li>
+ <li><a href="{@docRoot}reference/android/R.styleable.html#AccessibilityService_packageNames">{@code android:packageNames}</a></li>
+ <li><a href="{@docRoot}reference/android/R.styleable.html#AccessibilityService_accessibilityEventTypes">{@code android:accessibilityEventTypes}</a></li>
+ <li><a href="{@docRoot}reference/android/R.styleable.html#AccessibilityService_accessibilityFlags">{@code android:accessibilityFlags}</a></li>
+ <li><a href="{@docRoot}reference/android/R.styleable.html#AccessibilityService_accessibilityFeedbackType">{@code android:accessibilityFeedbackType}</a></li>
+ <li><a href="{@docRoot}reference/android/R.styleable.html#AccessibilityService_notificationTimeout">{@code android:notificationTimeout}</a></li>
+ <li><a href="{@docRoot}reference/android/R.styleable.html#AccessibilityService_canRetrieveWindowContent">{@code android:canRetrieveWindowContent}</a></li>
+ <li><a href="{@docRoot}reference/android/R.styleable.html#AccessibilityService_settingsActivity">{@code android:settingsActivity}</a></li>
+</ul>
+
+<p>For more information about which configuration settings can be dynamically set at runtime, see
+the {@link android.accessibilityservice.AccessibilityServiceInfo} reference documentation.</p>
+
+
+<h2 id="register">Registering for Accessibility Events</h2>
+
<p>One of the most important functions of the accessibility service configuration parameters is to
allow you to specify what types of accessibility events your service can handle. Being able to
specify this information enables accessibility services to cooperate with each other, and allows you
@@ -139,32 +170,27 @@ android.accessibilityservice.AccessibilityServiceInfo#packageNames
AccessibilityServiceInfo.packageNames} member.</li>
<li><strong>Event Types</strong> - Specify the types of accessibility events you want your service
to handle. This parameter can be set in the accessibility service configuration files with the
-{@code android:accessibilityEventTypes} attribute as a comma-separated list, or set using the
+{@code android:accessibilityEventTypes} attribute as a list separated by the {@code |} character
+(for example {@code accessibilityEventTypes="typeViewClicked|typeViewFocused"}), or set using the
{@link android.accessibilityservice.AccessibilityServiceInfo#eventTypes
AccessibilityServiceInfo.eventTypes} member. </li>
</ul>
-<p>For more information about the XML attributes which can be used in the accessibility service
- configuration file, follow these links to the reference documentation:</p>
+<p>When setting up your accessibility service, carefully consider what events your service is able
+to handle and only register for those events. Since users can activate more than one accessibility
+services at a time, your service must not consume events that it is not able to handle. Remember
+that other services may handle those events in order to improve a user's experience.</p>
-<ul>
- <li><a href="{@docRoot}reference/android/R.styleable.html#AccessibilityService_description">{@code android:description}</a></li>
- <li><a href="{@docRoot}reference/android/R.styleable.html#AccessibilityService_packageNames">{@code android:packageNames}</a></li>
- <li><a href="{@docRoot}reference/android/R.styleable.html#AccessibilityService_accessibilityEventTypes">{@code android:accessibilityEventTypes}</a></li>
- <li><a href="{@docRoot}reference/android/R.styleable.html#AccessibilityService_accessibilityFlags">{@code android:accessibilityFlags}</a></li>
- <li><a href="{@docRoot}reference/android/R.styleable.html#AccessibilityService_accessibilityFeedbackType">{@code android:accessibilityFeedbackType}</a></li>
- <li><a href="{@docRoot}reference/android/R.styleable.html#AccessibilityService_notificationTimeout">{@code android:notificationTimeout}</a></li>
- <li><a href="{@docRoot}reference/android/R.styleable.html#AccessibilityService_canRetrieveWindowContent">{@code android:canRetrieveWindowContent}</a></li>
- <li><a href="{@docRoot}reference/android/R.styleable.html#AccessibilityService_settingsActivity">{@code android:settingsActivity}</a></li>
-</ul>
-
-<p>For more information about which configuration settings can be dynamically set at runtime, see
-the {@link android.accessibilityservice.AccessibilityServiceInfo} reference documentation.</p>
+<p class="note"><strong>Note:</strong> The Android framework dispatches accessibility events to
+more than one accessibility service if the services provide different
+<a href="{@docRoot}reference/android/R.styleable.html#AccessibilityService_accessibilityFeedbackType">
+feedback types</a>. However, if two or more services provide the same feedback type, then only the
+first registered service receives the event.</p>
<h2 id="methods">AccessibilityService Methods</h2>
-<p>An application that provides accessibility service must extend the {@link
+<p>An accessibility service must extend the {@link
android.accessibilityservice.AccessibilityService} class and override the following methods from
that class. These methods are presented in the order in which they are called by the Android system,
from when the service is started
@@ -188,15 +214,15 @@ onAccessibilityEvent()} - (required) This method is called back by the system wh
{@link android.view.accessibility.AccessibilityEvent} that matches the event filtering parameters
specified by your accessibility service. For example, when the user clicks a button or focuses on a
user interface control in an application for which your accessibility service is providing feedback.
-When this happens, the system calls this method of your service with the associated {@link
-android.view.accessibility.AccessibilityEvent}, which you can then interpret and provide feedback to
-the user. This method may be called many times over the lifecycle of your service.</li>
+When this happens, the system calls this method, passing the associated {@link
+android.view.accessibility.AccessibilityEvent}, which the service can then interpret and use to
+provide feedback to the user. This method may be called many times over the lifecycle of your
+service.</li>
<li>{@link android.accessibilityservice.AccessibilityService#onInterrupt onInterrupt()} -
(required) This method is called when the system wants to interrupt the feedback your service is
-providing, usually in response to a user taking action, such as moving focus to a different user
-interface control than the one for which you are currently providing feedback. This method may be
-called many times over the lifecycle of your service.</li>
+providing, usually in response to a user action such as moving focus to a different control. This
+method may be called many times over the lifecycle of your service.</li>
<li>{@link android.accessibilityservice.AccessibilityService#onUnbind onUnbind()} - (optional)
This method is called when the system is about to shutdown the accessibility service. Use this
@@ -206,7 +232,9 @@ services, such as the audio manager or device vibrator.</li>
<p>These callback methods provide the basic structure for your accessibility service. It is up to
you to decide on how to process data provided by the Android system in the form of {@link
-android.view.accessibility.AccessibilityEvent} objects and provide feedback to the user.</p>
+android.view.accessibility.AccessibilityEvent} objects and provide feedback to the user. For more
+information about getting information from an accessibility event, see the
+<a href="{@docRoot}training/accessibility/service.html">Implementing Accessibility</a> training.</p>
<h2 id="event-details">Getting Event Details</h2>
@@ -214,15 +242,15 @@ android.view.accessibility.AccessibilityEvent} objects and provide feedback to t
<p>The Android system provides information to accessibility services about the user interface
interaction through {@link android.view.accessibility.AccessibilityEvent} objects. Prior to Android
4.0, the information available in an accessibility event, while providing a significant amount of
-detail about a user interface control selected by the user, typically provided limited contextual
+detail about a user interface control selected by the user, offered limited contextual
information. In many cases, this missing context information might be critical to understanding the
meaning of the selected control.</p>
-<p>A typical example of an interface where context is of critical importance is a calendar or day
-planner. If a user selects a 4:00 PM time slot in a Monday to Friday day list and the accessibility
-service announces “4 PM”, but fails to indicate this is a Friday a Monday, the month or day, this is
-hardly ideal feedback for the user. In this case, the context of a user interface control is of
-critical importance to a user who wants to schedule a meeting.</p>
+<p>An example of an interface where context is critical is a calendar or day planner. If the
+user selects a 4:00 PM time slot in a Monday to Friday day list and the accessibility service
+announces “4 PM”, but does not announce the weekday name, the day of the month, or the month name,
+the resulting feedback is confusing. In this case, the context of a user interface control is
+critical to a user who wants to schedule a meeting.</p>
<p>Android 4.0 significantly extends the amount of information that an accessibility service can
obtain about an user interface interaction by composing accessibility events based on the view
@@ -245,26 +273,167 @@ can obtain additional information about the event using these calls:</p>
AccessibilityEvent.getRecordCount()} and {@link
android.view.accessibility.AccessibilityEvent#getRecord getRecord(int)} - These methods allow you to
retrieve the set of {@link android.view.accessibility.AccessibilityRecord} objects which contributed
-to the {@link android.view.accessibility.AccessibilityEvent} passed to you by the system, which can
-provide more context for your accessibility service.</li>
+to the {@link android.view.accessibility.AccessibilityEvent} passed to you by the system. This level
+of detail provides more context for the event that triggered your accessibility service.</li>
<li>{@link android.view.accessibility.AccessibilityEvent#getSource
AccessibilityEvent.getSource()} - This method returns an {@link
-android.view.accessibility.AccessibilityNodeInfo} object. This object allows you to request the
-parents and children of the component that originated the accessibility event and investigate their
-contents and state in order to provide
+android.view.accessibility.AccessibilityNodeInfo} object. This object allows you to request view
+layout hierarchy (parents and children) of the component that originated the accessibility event.
+This feature allows an accessibility service to investigate the full context of an event, including
+the content and state of any enclosing views or child views.
- <p class="caution"><strong>Important:</strong> The ability to investigate the full view
+<p class="caution"><strong>Important:</strong> The ability to investigate the view
hierarchy from an {@link android.view.accessibility.AccessibilityEvent} potentially exposes private
user information to your accessibility service. For this reason, your service must request this
level of access through the accessibility <a href="#service-config">service configuration XML</a>
file, by including the {@code canRetrieveWindowContent} attribute and setting it to {@code true}. If
you do not include this setting in your service configuration xml file, calls to {@link
android.view.accessibility.AccessibilityEvent#getSource getSource()} fail.</p>
+
+<p class="note"><strong>Note:</strong> In Android 4.1 (API Level 16) and higher, the
+{@link android.view.accessibility.AccessibilityEvent#getSource getSource()} method,
+as well as {@link android.view.accessibility.AccessibilityNodeInfo#getChild
+AccessibilityNodeInfo.getChild()} and
+{@link android.view.accessibility.AccessibilityNodeInfo#getParent getParent()}, return only
+view objects that are considered important for accessibility (views that draw content or respond to
+user actions). If your service requires all views, it can request them by setting the
+{@link android.accessibilityservice.AccessibilityServiceInfo#flags flags} member of the service's
+{@link android.accessibilityservice.AccessibilityServiceInfo} instance to
+{@link android.accessibilityservice.AccessibilityServiceInfo#FLAG_INCLUDE_NOT_IMPORTANT_VIEWS}.</p>
</li>
</ul>
+<h2 id="act-for-users">Taking Action for Users</h2>
+
+<p>Starting with Android 4.0 (API Level 14), accessibility services can act on behalf
+ of users, including changing the input focus and selecting (activating) user interface elements.
+ In Android 4.1 (API Level 16) the range of actions has been expanded to include scrolling lists
+ and interacting with text fields. Accessibility services can
+ also take global actions, such as navigating to the Home screen, pressing the Back button, opening
+ the notifications screen and recent applications list. Android 4.1 also includes a new type of
+ focus, <em>Accessibilty Focus</em>, which makes all visible elements selectable by an
+ accessibility service.</p>
+
+<p>These new capabilities make it possible for developers of accessibility services to create
+ alternative navigation modes such as
+ <a href="{@docRoot}tools/testing/testing_accessibility.html#test-gestures">gesture navigation</a>,
+ and give users with disabilities improved control of their Android devices.</p>
+
+
+<h3 id="detect-gestures">Listening for gestures</h3>
+
+<p>Accessibility services can listen for specific gestures and respond by taking action on behalf
+ of a user. This feature, added in Android 4.1 (API Level 16), and requires that your
+ accessibility service request activation of the Explore by Touch feature. Your service can
+ request this activation by setting the
+ {@link android.accessibilityservice.AccessibilityServiceInfo#flags flags} member of the service’s
+ {@link android.accessibilityservice.AccessibilityServiceInfo} instance to
+ {@link android.accessibilityservice.AccessibilityServiceInfo#FLAG_REQUEST_TOUCH_EXPLORATION_MODE},
+ as shown in the following example.
+ </p>
+
+<pre>
+public class MyAccessibilityService extends AccessibilityService {
+ &#64;Override
+ public void onCreate() {
+ getServiceInfo().flags = AccessibilityServiceInfo.FLAG_REQUEST_TOUCH_EXPLORATION_MODE;
+ }
+ ...
+}
+</pre>
+
+<p>Once your service has requested activation of Explore by Touch, the user must allow the
+ feature to be turned on, if it is not already active. When this feature is active, your service
+ receives notification of accessibility gestures through your service's
+ {@link android.accessibilityservice.AccessibilityService#onGesture onGesture()} callback method
+ and can respond by taking actions for the user.</p>
+
+
+<h3 id="using-actions">Using accessibility actions</h3>
+
+<p>Accessibility services can take action on behalf of users to make interacting with applications
+ simpler and more productive. The ability of accessibility services to perform actions was added
+ in Android 4.0 (API Level 14) and significantly expanded with Android 4.1 (API Level 16).</p>
+
+<p>In order to take actions on behalf of users, your accessibility service must
+ <a href="#register">register</a> to receive events from a few or many applications and request
+ permission to view the content of applications by setting the
+ <a href="{@docRoot}reference/android/R.styleable.html#AccessibilityService_canRetrieveWindowContent">
+ {@code android:canRetrieveWindowContent}</a> to {@code true} in the
+ <a href="#service-config">service configuration file</a>. When events are received by your
+ service, it can then retrieve the
+ {@link android.view.accessibility.AccessibilityNodeInfo} object from the event using
+ {@link android.view.accessibility.AccessibilityEvent#getSource getSource()}.
+ With the {@link android.view.accessibility.AccessibilityNodeInfo} object, your service can then
+ explore the view hierarchy to determine what action to take and then act for the user using
+ {@link android.view.accessibility.AccessibilityNodeInfo#performAction performAction()}.</p>
+
+<pre>
+public class MyAccessibilityService extends AccessibilityService {
+
+ &#64;Override
+ public void onAccessibilityEvent(AccessibilityEvent event) {
+ // get the source node of the event
+ AccessibilityNodeInfo nodeInfo = event.getSource();
+
+ // Use the event and node information to determine
+ // what action to take
+
+ // take action on behalf of the user
+ nodeInfo.performAction(AccessibilityNodeInfo.ACTION_SCROLL_FORWARD);
+
+ // recycle the nodeInfo object
+ nodeInfo.recycle();
+ }
+ ...
+}
+</pre>
+
+<p>The {@link android.view.accessibility.AccessibilityNodeInfo#performAction performAction()} method
+ allows your service to take action within an application. If your service needs to perform a
+ global action such as navigating to the Home screen, pressing the Back button, opening the
+ notifications screen or recent applications list, then use the
+ {@link android.accessibilityservice.AccessibilityService#performGlobalAction performGlobalAction()}
+ method.</p>
+
+
+<h3 id="focus-types">Using focus types</h3>
+
+<p>Android 4.1 (API Level 16) introduces a new type of user interface focus called <em>Accessibility
+ Focus</em>. This type of focus can be used by accessibility services to select any visible user
+ interface element and act on it. This focus type is different from the more well known <em>Input
+ Focus</em>, which determines what on-screen user interface element receives input when a user
+ types characters, presses <strong>Enter</strong> on a keyboard or pushes the center button of a
+ D-pad control.</p>
+
+<p>Accessibility Focus is completely separate and independent from Input Focus. In fact, it is
+ possible for one element in a user interface to have Input Focus while another element has
+ Accessibility Focus. The purpose of Accessibility Focus is to provide accessibility services with
+ a method of interacting with any visible element on a screen, regardless of whether or not the
+ element is input-focusable from a system perspective. You can see accessibility focus in action by
+ testing accessibility gestures. For more information about testing this feature, see
+ <a href="{@docRoot}tools/testing/testing_accessibility.html#test-gestures">Testing gesture
+ navigation</a>.</p>
+
+<p class="note">
+ <strong>Note:</strong> Accessibility services that use Accessibility Focus are responsible for
+ synchronizing the current Input Focus when an element is capable of this type of focus. Services
+ that do not synchronize Input Focus with Accessibility Focus run the risk of causing problems in
+ applications that expect input focus to be in a specific location when certain actions are taken.
+ </p>
+
+<p>An accessibility service can determine what user interface element has Input Focus or
+ Accessibility Focus using the {@link android.view.accessibility.AccessibilityNodeInfo#findFocus
+ AccessibilityNodeInfo.findFocus()} method. You can also search for elements that can be selected
+ with Input Focus using the
+ {@link android.view.accessibility.AccessibilityNodeInfo#focusSearch focusSearch()} method.
+ Finally, your accessibility service can set Accessibility Focus using the
+ {@link android.view.accessibility.AccessibilityNodeInfo#performAction
+ performAction(AccessibilityNodeInfo.ACTION_SET_ACCESSIBILITY_FOCUS)} method.</p>
+
+
<h2 id="examples">Example Code</h2>
<p>The API Demo project contains two samples which can be used as a starting point for generating
diff --git a/docs/html/guide/topics/ui/controls.jd b/docs/html/guide/topics/ui/controls.jd
index 83bb0c8..a58d9f9 100644
--- a/docs/html/guide/topics/ui/controls.jd
+++ b/docs/html/guide/topics/ui/controls.jd
@@ -15,7 +15,7 @@ checkboxes, zoom buttons, toggle buttons, and many more.</p>
href="{@docRoot}guide/topics/ui/declaring-layout.html">XML layout</a>. For example, here's a
layout with a text field and button:</p>
-<pre>
+<pre style="clear:right">
&lt;?xml version="1.0" encoding="utf-8"?>
&lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
diff --git a/docs/html/guide/topics/ui/dialogs.jd b/docs/html/guide/topics/ui/dialogs.jd
index d1c24df..3cfed13 100644
--- a/docs/html/guide/topics/ui/dialogs.jd
+++ b/docs/html/guide/topics/ui/dialogs.jd
@@ -1,680 +1,801 @@
page.title=Dialogs
-parent.title=User Interface
-parent.link=index.html
@jd:body
+
+
<div id="qv-wrapper">
<div id="qv">
<h2>In this document</h2>
+<ol>
+ <li><a href="#DialogFragment">Creating a Dialog Fragment</a></li>
+ <li><a href="#AlertDialog">Building an Alert Dialog</a>
<ol>
- <li><a href="#ShowingADialog">Showing a Dialog</a></li>
- <li><a href="#DismissingADialog">Dismissing a Dialog</a></li>
- <li><a href="#AlertDialog">Creating an AlertDialog</a>
- <ol>
- <li><a href="#AddingButtons">Adding buttons</a></li>
- <li><a href="#AddingAList">Adding a list</a></li>
- </ol>
- </li>
- <li><a href="#ProgressDialog">Creating a ProgressDialog</a>
- <ol>
- <li><a href="#ShowingAProgressBar">Showing a progress bar</a></li>
- </ol>
- </li>
- <li><a href="#CustomDialog">Creating a Custom Dialog</a></li>
+ <li><a href="#AddingButtons">Adding buttons</a></li>
+ <li><a href="#AddingAList">Adding a list</a></li>
+ <li><a href="#CustomLayout">Creating a Custom Layout</a></li>
</ol>
-
- <h2>Key classes</h2>
+ </li>
+ <li><a href="#PassingEvents">Passing Events Back to the Dialog's Host</a></li>
+ <li><a href="#ShowingADialog">Showing a Dialog</a></li>
+ <li><a href="#FullscreenDialog">Showing a Dialog Fullscreen or as an Embedded Fragment</a>
<ol>
- <li>{@link android.app.Dialog}</li>
- <li>{@link android.app.AlertDialog}</li>
- <li>{@link android.app.DialogFragment}</li>
+ <li><a href="#ActivityAsDialog">Showing an activity as a dialog on large screens</a></li>
</ol>
+ </li>
+ <li><a href="#DismissingADialog">Dismissing a Dialog</a></li>
+</ol>
- <h2>Related tutorials</h2>
+ <h2>Key classes</h2>
<ol>
- <li><a href="{@docRoot}resources/tutorials/views/hello-datepicker.html">Hello
-DatePicker</a></li>
- <li><a href="{@docRoot}resources/tutorials/views/hello-timepicker.html">Hello
-TimePicker</a></li>
+ <li>{@link android.app.DialogFragment}</li>
+ <li>{@link android.app.AlertDialog}</li>
</ol>
<h2>See also</h2>
<ol>
- <li><a href="{@docRoot}design/building-blocks/dialogs.html">Android Design: Dialogs</a></li>
+ <li><a href="{@docRoot}design/building-blocks/dialogs.html">Dialogs design guide</a></li>
+ <li><a href="{@docRoot}guide/topics/ui/controls/pickers.html">Pickers</a> (Date/Time dialogs)</li>
</ol>
</div>
</div>
-<p>A dialog is usually a small window that appears in front of the current Activity.
-The underlying Activity loses focus and the dialog accepts all user interaction. Dialogs are
-normally used for notifications that should interrupt the user and to perform short tasks that
-directly relate to the application in progress (such as a progress bar or a login prompt).</p>
-
-<p>The {@link android.app.Dialog} class is the base class for creating dialogs. However, you
-typically should not instantiate a {@link android.app.Dialog} directly. Instead, you should use one
-of the following subclasses:</p>
-<dl>
- <dt>{@link android.app.AlertDialog}</dt>
- <dd>A dialog that can manage zero, one, two, or three buttons, and/or a list of
- selectable items that can include checkboxes or radio buttons. The AlertDialog
- is capable of constructing most dialog user interfaces and is the suggested dialog type.
- See <a href="#AlertDialog">Creating an AlertDialog</a> below.</dd>
- <dt>{@link android.app.ProgressDialog}</dt>
- <dd>A dialog that displays a progress wheel or progress bar. Because it's an extension of
- the AlertDialog, it also supports buttons.
- See <a href="#ProgressDialog">Creating a ProgressDialog</a> below.</dd>
- <dt>{@link android.app.DatePickerDialog}</dt>
- <dd>A dialog that allows the user to select a date. See the
- <a href="{@docRoot}resources/tutorials/views/hello-datepicker.html">Hello DatePicker</a> tutorial.</dd>
- <dt>{@link android.app.TimePickerDialog}</dt>
- <dd>A dialog that allows the user to select a time. See the
- <a href="{@docRoot}resources/tutorials/views/hello-timepicker.html">Hello TimePicker</a> tutorial.</dd>
-</dl>
-
-<p>If you would like to customize your own dialog, you can extend the
-base {@link android.app.Dialog} object or any of the subclasses listed above and define a new layout.
-See the section on <a href="#CustomDialog">Creating a Custom Dialog</a> below.</p>
+<p>A dialog is a small window that prompts the user to
+make a decision or enter additional information. A dialog does not fill the screen and is
+normally used for modal events that require users to take an action before they can proceed.</p>
<div class="note design">
<p><strong>Dialog Design</strong></p>
- <p>For design guidelines, read Android Design's <a
-href="{@docRoot}design/building-blocks/dialogs.html">Dialogs</a> guide.</p>
+ <p>For information about how to design your dialogs, including recommendations
+ for language, read the <a
+href="{@docRoot}design/building-blocks/dialogs.html">Dialogs</a> design guide.</p>
</div>
+<img src="{@docRoot}images/ui/dialogs.png" />
+<p>The {@link android.app.Dialog} class is the base class for dialogs, but you
+should avoid instantiating {@link android.app.Dialog} directly.
+Instead, use one of the following subclasses:</p>
+<dl>
+ <dt>{@link android.app.AlertDialog}</dt>
+ <dd>A dialog that can show a title, up to three buttons, a list of
+ selectable items, or a custom layout.</dd>
+ <dt>{@link android.app.DatePickerDialog} or {@link android.app.TimePickerDialog}</dt>
+ <dd>A dialog with a pre-defined UI that allows the user to select a date or time.</dd>
+</dl>
-<h2 id="ShowingADialog">Showing a Dialog</h2>
+<div class="sidebox">
+<h2>Avoid ProgressDialog</h2>
+<p>Android includes another dialog class called
+{@link android.app.ProgressDialog} that shows a dialog with a progress bar. However, if you
+need to indicate loading or indeterminate progress, you should instead follow the design
+guidelines for <a href="{@docRoot}design/building-blocks/progress.html">Progress &amp;
+Activity</a> and use a {@link android.widget.ProgressBar} in your layout.</p>
+</div>
-<p>A dialog is always created and displayed as a part of an {@link android.app.Activity}.
-You should normally create dialogs from within your Activity's
-{@link android.app.Activity#onCreateDialog(int)} callback method.
-When you use this callback, the Android system automatically manages the state of
-each dialog and hooks them to the Activity, effectively making it the "owner" of each dialog.
-As such, each dialog inherits certain properties from the Activity. For example, when a dialog
-is open, the Menu key reveals the options menu defined for the Activity and the volume
-keys modify the audio stream used by the Activity.</p>
-
-<p class="note"><strong>Note:</strong> If you decide to create a dialog outside of the
-<code>onCreateDialog()</code> method, it will not be attached to an Activity. You can, however,
-attach it to an Activity with {@link android.app.Dialog#setOwnerActivity(Activity)}.</p>
-
-<p>When you want to show a dialog, call
-{@link android.app.Activity#showDialog(int)} and pass it an integer that uniquely identifies the
-dialog that you want to display.</p>
-
-<p>When a dialog is requested for the first time, Android calls
-{@link android.app.Activity#onCreateDialog(int)} from your Activity, which is
-where you should instantiate the {@link android.app.Dialog}. This callback method
-is passed the same ID that you passed to {@link android.app.Activity#showDialog(int)}.
-After you create the Dialog, return the object at the end of the method.</p>
-
-<p>Before the dialog is displayed, Android also calls the optional callback method
-{@link android.app.Activity#onPrepareDialog(int,Dialog)}. Define this method if you want to change
-any properties of the dialog each time it is opened. This method is called
-every time a dialog is opened, whereas {@link android.app.Activity#onCreateDialog(int)} is only
-called the very first time a dialog is opened. If you don't define
-{@link android.app.Activity#onPrepareDialog(int,Dialog) onPrepareDialog()}, then the dialog will
-remain the same as it was the previous time it was opened. This method is also passed the dialog's
-ID, along with the Dialog object you created in {@link android.app.Activity#onCreateDialog(int)
-onCreateDialog()}.</p>
-
-<p>The best way to define the {@link android.app.Activity#onCreateDialog(int)} and
-{@link android.app.Activity#onPrepareDialog(int,Dialog)} callback methods is with a
-<em>switch</em> statement that checks the <var>id</var> parameter that's passed into the method.
-Each <em>case</em> should check for a unique dialog ID and then create and define the respective Dialog.
-For example, imagine a game that uses two different dialogs: one to indicate that the game
-has paused and another to indicate that the game is over. First, define an integer ID for
-each dialog:</p>
-<pre>
-static final int DIALOG_PAUSED_ID = 0;
-static final int DIALOG_GAMEOVER_ID = 1;
-</pre>
+<p>These classes define the style and structure for your dialog, but you should
+use a {@link android.support.v4.app.DialogFragment} as a container for your dialog.
+The {@link android.support.v4.app.DialogFragment} class provides all the controls you
+need to create your dialog and manage its appearance, instead of calling methods
+on the {@link android.app.Dialog} object.</p>
+
+<p>Using {@link android.support.v4.app.DialogFragment} to manage the dialog
+ensures that it correctly handles lifecycle events
+such as when the user presses the <em>Back</em> button or rotates the screen. The {@link
+android.support.v4.app.DialogFragment} class also allows you to reuse the dialog's UI as an
+embeddable component in a larger UI, just like a traditional {@link
+android.support.v4.app.Fragment} (such as when you want the dialog UI to appear differently
+on large and small screens).</p>
+
+<p>The following sections in this guide describe how to use a {@link
+android.support.v4.app.DialogFragment} in combination with an {@link android.app.AlertDialog}
+object. If you'd like to create a date or time picker, you should instead read the
+<a href="{@docRoot}guide/topics/ui/controls/pickers.html">Pickers</a> guide.</p>
+
+<p class="note"><strong>Note:</strong>
+Because the {@link android.app.DialogFragment} class was originally added with
+Android 3.0 (API level 11), this document describes how to use the {@link
+android.support.v4.app.DialogFragment} class that's provided with the <a
+href="{@docRoot}tools/extras/support-library.html">Support Library</a>. By adding this library
+to your app, you can use {@link android.support.v4.app.DialogFragment} and a variety of other
+APIs on devices running Android 1.6 or higher. If the minimum version your app supports
+is API level 11 or higher, then you can use the framework version of {@link
+android.app.DialogFragment}, but be aware that the links in this document are for the support
+library APIs. When using the support library,
+be sure that you import <code>android.support.v4.app.DialogFragment</code>
+class and <em>not</em> <code>android.app.DialogFragment</code>.</p>
+
+
+<h2 id="DialogFragment">Creating a Dialog Fragment</h2>
+
+<p>You can accomplish a wide variety of dialog designs&mdash;including
+custom layouts and those described in the <a
+href="{@docRoot}design/building-blocks/dialogs.html">Dialogs</a>
+design guide&mdash;by extending
+{@link android.support.v4.app.DialogFragment} and creating a {@link android.app.AlertDialog}
+in the {@link android.support.v4.app.DialogFragment#onCreateDialog
+onCreateDialog()} callback method.</p>
+
+<p>For example, here's a basic {@link android.app.AlertDialog} that's managed within
+a {@link android.support.v4.app.DialogFragment}:</p>
-<p>Then, define the {@link android.app.Activity#onCreateDialog(int)} callback with a
-switch case for each ID:</p>
<pre>
-protected Dialog onCreateDialog(int id) {
- Dialog dialog;
- switch(id) {
- case DIALOG_PAUSED_ID:
- // do the work to define the pause Dialog
- break;
- case DIALOG_GAMEOVER_ID:
- // do the work to define the game over Dialog
- break;
- default:
- dialog = null;
+public class FireMissilesDialogFragment extends DialogFragment {
+ &#64;Override
+ public Dialog onCreateDialog(Bundle savedInstanceState) {
+ // Use the Builder class for convenient dialog construction
+ AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
+ builder.setMessage(R.string.dialog_fire_missiles)
+ .setPositiveButton(R.string.fire, new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog, int id) {
+ // FIRE ZE MISSILES!
+ }
+ })
+ .setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog, int id) {
+ // User cancelled the dialog
+ }
+ });
+ // Create the AlertDialog object and return it
+ return builder.create();
}
- return dialog;
}
</pre>
-<p class="note"><strong>Note:</strong> In this example, there's no code inside
-the case statements because the procedure for defining your Dialog is outside the scope
-of this section. See the section below about <a href="#AlertDialog">Creating an AlertDialog</a>,
-offers code suitable for this example.</p>
+<div class="figure" style="width:290px;margin:0 0 0 20px">
+<img src="{@docRoot}images/ui/dialog_buttons.png" alt="" />
+<p class="img-caption"><strong>Figure 1.</strong>
+A dialog with a message and two action buttons.</p>
+</div>
-<p>When it's time to show one of the dialogs, call {@link android.app.Activity#showDialog(int)}
-with the ID of a dialog:</p>
-<pre>
-showDialog(DIALOG_PAUSED_ID);
-</pre>
+<p>Now, when you create an instance of this class and call {@link
+android.support.v4.app.DialogFragment#show show()} on that object, the dialog appears as
+shown in figure 1.</p>
+<p>The next section describes more about using the {@link android.app.AlertDialog.Builder}
+APIs to create the dialog.</p>
-<h2 id="DismissingADialog">Dismissing a Dialog</h2>
+<p>Depending on how complex your dialog is, you can implement a variety of other callback
+methods in the {@link android.support.v4.app.DialogFragment}, including all the basic
+<a href="{@docRoot}guide/components/fragments.html#Lifecycle">fragment lifecycle methods</a>.
-<p>When you're ready to close your dialog, you can dismiss it by calling
-{@link android.app.Dialog#dismiss()} on the Dialog object.
-If necessary, you can also call {@link android.app.Activity#dismissDialog(int)} from the
-Activity, which effectively calls {@link android.app.Dialog#dismiss()} on the
-Dialog for you.</p>
-
-<p>If you are using {@link android.app.Activity#onCreateDialog(int)} to manage the state
-of your dialogs (as discussed in the previous section), then every time your dialog is
-dismissed, the state of the Dialog
-object is retained by the Activity. If you decide that you will no longer need this object or
-it's important that the state is cleared, then you should call
-{@link android.app.Activity#removeDialog(int)}. This will remove any internal references
-to the object and if the dialog is showing, it will dismiss it.</p>
-
-<h3>Using dismiss listeners</h3>
-
-<p>If you'd like your application to perform some procedures the moment that a dialog is dismissed,
-then you should attach an on-dismiss listener to your Dialog.</p>
-
-<p>First define the {@link android.content.DialogInterface.OnDismissListener} interface.
-This interface has just one method,
-{@link android.content.DialogInterface.OnDismissListener#onDismiss(DialogInterface)}, which
-will be called when the dialog is dismissed.
-Then simply pass your OnDismissListener implementation to
-{@link android.app.Dialog#setOnDismissListener(DialogInterface.OnDismissListener)
-setOnDismissListener()}.</p>
-
-<p>However, note that dialogs can also be "cancelled." This is a special case that indicates
-the dialog was explicitly cancelled by the user. This will occur if the user presses the
-"back" button to close the dialog, or if the dialog explicitly calls {@link android.app.Dialog#cancel()}
-(perhaps from a "Cancel" button in the dialog). When a dialog is cancelled,
-the OnDismissListener will still be notified, but if you'd like to be informed that the dialog
-was explicitly cancelled (and not dismissed normally), then you should register
-an {@link android.content.DialogInterface.OnCancelListener} with
-{@link android.app.Dialog#setOnCancelListener(DialogInterface.OnCancelListener)
-setOnCancelListener()}.</p>
-
-
-<h2 id="AlertDialog">Creating an AlertDialog</h2>
-
-<p>An {@link android.app.AlertDialog} is an extension of the {@link android.app.Dialog}
-class. It is capable of constructing most dialog user interfaces and is the suggested dialog type.
-You should use it for dialogs that use any of the following features:</p>
-<ul>
- <li>A title</li>
- <li>A text message</li>
- <li>One, two, or three buttons</li>
- <li>A list of selectable items (with optional checkboxes or radio buttons)</li>
-</ul>
-<p>To create an AlertDialog, use the {@link android.app.AlertDialog.Builder} subclass.
-Get a Builder with {@link android.app.AlertDialog.Builder#AlertDialog.Builder(Context)} and
-then use the class's public methods to define all of the
-AlertDialog properties. After you're done with the Builder, retrieve the
-AlertDialog object with {@link android.app.AlertDialog.Builder#create()}.</p>
-<p>The following topics show how to define various properties of the AlertDialog using the
-AlertDialog.Builder class. If you use any of the following sample code inside your
-{@link android.app.Activity#onCreateDialog(int) onCreateDialog()} callback method,
-you can return the resulting Dialog object to display the dialog.</p>
-<h3 id="AddingButtons">Adding buttons</h3>
+<h2 id="AlertDialog">Building an Alert Dialog</h2>
+
+
+<p>The {@link android.app.AlertDialog} class allows you to build a variety of dialog designs and
+is often the only dialog class you'll need.
+As shown in figure 2, there are three regions of an alert dialog:</p>
+
+<div class="figure" style="width:311px;margin-top:0">
+<img src="{@docRoot}images/ui/dialogs_regions.png" alt="" style="margin-bottom:0"/>
+<p class="img-caption"><strong>Figure 2.</strong> The layout of a dialog.</p>
+</div>
-<img src="{@docRoot}images/dialog_buttons.png" alt="" style="float:right" />
+<ol>
+<li><b>Title</b>
+ <p>This is optional and should be used only when the content area
+ is occupied by a detailed message, a list, or custom layout. If you need to state
+ a simple message or question (such as the dialog in figure 1), you don't need a title.</li>
+<li><b>Content area</b>
+ <p>This can display a message, a list, or other custom layout.</p></li>
+<li><b>Action buttons</b>
+ <p>There should be no more than three action buttons in a dialog.</p></li>
+</ol>
-<p>To create an AlertDialog with side-by-side buttons like the one shown in the screenshot to the right,
-use the <code>set...Button()</code> methods:</p>
+<p>The {@link android.app.AlertDialog.Builder}
+class provides APIs that allow you to create an {@link android.app.AlertDialog}
+with these kinds of content, including a custom layout.</p>
+
+<p>To build an {@link android.app.AlertDialog}:</p>
<pre>
-AlertDialog.Builder builder = new AlertDialog.Builder(this);
-builder.setMessage("Are you sure you want to exit?")
- .setCancelable(false)
- .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
+<b>// 1. Instantiate an {@link android.app.AlertDialog.Builder} with its constructor</b>
+AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
+
+<b>// 2. Chain together various setter methods to set the dialog characteristics</b>
+builder.setMessage(R.string.dialog_message)
+ .setTitle(R.string.dialog_title);
+
+<b>// 3. Get the {@link android.app.AlertDialog} from {@link android.app.AlertDialog.Builder#create()}</b>
+AlertDialog dialog = builder.create();
+</pre>
+
+<p>The following topics show how to define various dialog attributes using the
+{@link android.app.AlertDialog.Builder} class.</p>
+
+
+
+
+<h3 id="AddingButtons">Adding buttons</h3>
+
+<p>To add action buttons like those in figure 2,
+call the {@link android.app.AlertDialog.Builder#setPositiveButton setPositiveButton()} and
+{@link android.app.AlertDialog.Builder#setNegativeButton setNegativeButton()} methods:</p>
+
+<pre style="clear:right">
+AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
+// Add the buttons
+builder.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
- MyActivity.this.finish();
+ // User clicked OK button
}
- })
- .setNegativeButton("No", new DialogInterface.OnClickListener() {
+ });
+builder.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
- dialog.cancel();
+ // User cancelled the dialog
}
});
-AlertDialog alert = builder.create();
+// Set other dialog properties
+...
+
+// Create the AlertDialog
+AlertDialog dialog = builder.create();
</pre>
-<p>First, add a message for the dialog with
-{@link android.app.AlertDialog.Builder#setMessage(CharSequence)}. Then, begin
-method-chaining and set the dialog
-to be <em>not cancelable</em> (so the user cannot close the dialog with the back button)
-with {@link android.app.AlertDialog.Builder#setCancelable(boolean)}. For each button,
-use one of the <code>set...Button()</code> methods, such as
-{@link android.app.AlertDialog.Builder#setPositiveButton(CharSequence,DialogInterface.OnClickListener)
-setPositiveButton()}, that accepts the name for the button and a
+<p>The <code>set...Button()</code> methods require a title for the button (supplied
+by a <a href="{@docRoot}guide/topics/resources/string-resource.html">string resource</a>) and a
{@link android.content.DialogInterface.OnClickListener} that defines the action to take
-when the user selects the button.</p>
+when the user presses the button.</p>
-<p class="note"><strong>Note:</strong> You can only add one of each button type to the
-AlertDialog. That is, you cannot have more than one "positive" button. This limits the number
-of possible buttons to three: positive, neutral, and negative. These names are technically irrelevant to the
-actual functionality of your buttons, but should help you keep track of which one does what.</p>
+<p>There are three different action buttons you can add:</p>
+<dl>
+ <dt>Positive</dt>
+ <dd>You should use this to accept and continue with the action (the "OK" action).</dd>
+ <dt>Negative</dt>
+ <dd>You should use this to cancel the action.</dd>
+ <dt>Neutral</dt>
+ <dd>You should use this when the user may not want to proceed with the action,
+ but doesn't necessarily want to cancel. It appears between the positive and negative
+ buttons. For example, the action might be "Remind me later."</dd>
+</dl>
+<p>You can add only one of each button type to an {@link
+android.app.AlertDialog}. That is, you cannot have more than one "positive" button.</p>
-<h3 id="AddingAList">Adding a list</h3>
-<img src="{@docRoot}images/dialog_list.png" alt="" style="float:right" />
-<p>To create an AlertDialog with a list of selectable items like the one shown to the right,
-use the <code>setItems()</code> method:</p>
+<div class="figure" style="width:290px;margin:0 0 0 40px">
+<img src="{@docRoot}images/ui/dialog_list.png" alt="" />
+<p class="img-caption"><strong>Figure 3.</strong>
+A dialog with a title and list.</p>
+</div>
-<pre>
-final CharSequence[] items = {"Red", "Green", "Blue"};
+<h3 id="AddingAList">Adding a list</h3>
-AlertDialog.Builder builder = new AlertDialog.Builder(this);
-builder.setTitle("Pick a color");
-builder.setItems(items, new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog, int item) {
- Toast.makeText(getApplicationContext(), items[item], Toast.LENGTH_SHORT).show();
- }
-});
-AlertDialog alert = builder.create();
-</pre>
+<p>There are three kinds of lists available with the {@link android.app.AlertDialog} APIs:</p>
+<ul>
+<li>A traditional single-choice list</li>
+<li>A persistent single-choice list (radio buttons)</li>
+<li>A persistent multiple-choice list (checkboxes)</li>
+</ul>
-<p>First, add a title to the dialog with
-{@link android.app.AlertDialog.Builder#setTitle(CharSequence)}.
-Then, add a list of selectable items with
-{@link android.app.AlertDialog.Builder#setItems(CharSequence[],DialogInterface.OnClickListener)
-setItems()}, which accepts the array of items to display and a
-{@link android.content.DialogInterface.OnClickListener} that defines the action to take
-when the user selects an item.</p>
+<p>To create a single-choice list like the one in figure 3,
+use the {@link android.app.AlertDialog.Builder#setItems setItems()} method:</p>
+
+<pre style="clear:right">
+&#64;Override
+public Dialog onCreateDialog(Bundle savedInstanceState) {
+ AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
+ builder.setTitle(R.string.pick_color);
+ .setItems(R.array.colors_array, new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog, int which) {
+ // The 'which' argument contains the index position
+ // of the selected item
+ }
+ });
+ return builder.create();
+}
+</pre>
+<p>Because the list appears in the dialog's content area,
+the dialog cannot show both a message and a list and you should set a title for the
+dialog with {@link android.app.AlertDialog.Builder#setTitle setTitle()}.
+To specify the items for the list, call {@link
+android.app.AlertDialog.Builder#setItems setItems()}, passing an array.
+Alternatively, you can specify a list using {@link
+android.app.AlertDialog.Builder#setAdapter setAdapter()}. This allows you to back the list
+with dynamic data (such as from a database) using a {@link android.widget.ListAdapter}.</p>
+
+<p>If you choose to back your list with a {@link android.widget.ListAdapter},
+always use a {@link android.support.v4.content.Loader} so that the content loads
+asynchronously. This is described further in
+<a href="{@docRoot}guide/topics/ui/declaring-layout.html#AdapterViews">Building Layouts
+with an Adapter</a> and the <a href="{@docRoot}guide/components/loaders.html">Loaders</a>
+guide.</p>
+
+<p class="note"><strong>Note:</strong> By default, touching a list item dismisses the dialog,
+unless you're using one of the following persistent choice lists.</p>
+
+<div class="figure" style="width:290px;margin:-30px 0 0 40px">
+<img src="{@docRoot}images/ui/dialog_checkboxes.png" />
+<p class="img-caption"><strong>Figure 4.</strong>
+A list of multiple-choice items.</p>
+</div>
-<h4>Adding checkboxes and radio buttons</h4>
-<img src="{@docRoot}images/dialog_singlechoicelist.png" alt="" style="float:right" />
+<h4 id="Checkboxes">Adding a persistent multiple-choice or single-choice list</h4>
-<p>To create a list of multiple-choice items (checkboxes) or
-single-choice items (radio buttons) inside the dialog, use the
+<p>To add a list of multiple-choice items (checkboxes) or
+single-choice items (radio buttons), use the
{@link android.app.AlertDialog.Builder#setMultiChoiceItems(Cursor,String,String,
-DialogInterface.OnMultiChoiceClickListener) setMultiChoiceItems()} and
-{@link android.app.AlertDialog.Builder#setSingleChoiceItems(int,int,DialogInterface.OnClickListener)
-setSingleChoiceItems()} methods, respectively.
-If you create one of these selectable lists in the
-{@link android.app.Activity#onCreateDialog(int) onCreateDialog()} callback method,
-Android manages the state of the list for you. As long as the Activity is active,
-the dialog remembers the items that were previously selected, but when the user exits the
-Activity, the selection is lost.
-
-<p class="note"><strong>Note:</strong> To save the selection when the user leaves or
-pauses the Activity, you must properly save and restore the setting throughout
-the <a href="{@docRoot}guide/components/activities.html#Lifecycle">activity lifecycle</a>.
-To permanently save the selections, even when the Activity process is completely shutdown,
-you need to save the settings
-with one of the <a href="{@docRoot}guide/topics/data/data-storage.html">Data
-Storage</a> techniques.</p>
-
-<p>To create an AlertDialog with a list of single-choice items like the one shown to the right,
-use the same code from the previous example, but replace the <code>setItems()</code> method with
+DialogInterface.OnMultiChoiceClickListener) setMultiChoiceItems()} or
{@link android.app.AlertDialog.Builder#setSingleChoiceItems(int,int,DialogInterface.OnClickListener)
-setSingleChoiceItems()}:</p>
+setSingleChoiceItems()} methods, respectively.</p>
+
+<p>For example, here's how you can create a multiple-choice list like the
+one shown in figure 4 that saves the selected
+items in an {@link java.util.ArrayList}:</p>
+
+<pre style="clear:right">
+&#64;Override
+public Dialog onCreateDialog(Bundle savedInstanceState) {
+ mSelectedItems = new ArrayList(); // Where we track the selected items
+ AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
+ // Set the dialog title
+ builder.setTitle(R.string.pick_toppings)
+ // Specify the list array, the items to be selected by default (null for none),
+ // and the listener through which to receive callbacks when items are selected
+ .setMultiChoiceItems(R.array.toppings, null,
+ new DialogInterface.OnMultiChoiceClickListener() {
+ &#64;Override
+ public void onClick(DialogInterface dialog, int which,
+ boolean isChecked) {
+ if (isChecked) {
+ // If the user checked the item, add it to the selected items
+ mSelectedItems.add(which);
+ } else if (mSelectedItems.contains(which)) {
+ // Else, if the item is already in the array, remove it
+ mSelectedItems.remove(Integer.valueOf(which));
+ }
+ }
+ })
+ // Set the action buttons
+ .setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
+ &#64;Override
+ public void onClick(DialogInterface dialog, int id) {
+ // User clicked OK, so save the mSelectedItems results somewhere
+ // or return them to the component that opened the dialog
+ ...
+ }
+ })
+ .setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
+ &#64;Override
+ public void onClick(DialogInterface dialog, int id) {
+ ...
+ }
+ });
+
+ return builder.create();
+}
+</pre>
+
+<p>Although both a traditional list and a list with radio buttons
+provide a "single choice" action, you should use {@link
+android.app.AlertDialog.Builder#setSingleChoiceItems(int,int,DialogInterface.OnClickListener)
+setSingleChoiceItems()} if you want to persist the user's choice.
+That is, if opening the dialog again later should indicate what the user's current choice is,
+then you create a list with radio buttons.</p>
+
-<pre>
-final CharSequence[] items = {"Red", "Green", "Blue"};
-AlertDialog.Builder builder = new AlertDialog.Builder(this);
-builder.setTitle("Pick a color");
-builder.setSingleChoiceItems(items, -1, new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog, int item) {
- Toast.makeText(getApplicationContext(), items[item], Toast.LENGTH_SHORT).show();
- }
-});
-AlertDialog alert = builder.create();
-</pre>
-<p>The second parameter in the
-{@link android.app.AlertDialog.Builder#setSingleChoiceItems(CharSequence[],int,DialogInterface.OnClickListener)
-setSingleChoiceItems()} method is an integer value for the <var>checkedItem</var>, which indicates the
-zero-based list position of the default selected item. Use "-1" to indicate that no item should be
-selected by default.</p>
+<h3 id="CustomLayout">Creating a Custom Layout</h3>
-<h2 id="ProgressDialog">Creating a ProgressDialog</h2>
+<div class="figure" style="width:290px;margin:-30px 0 0 40px">
+<img src="{@docRoot}images/ui/dialog_custom.png" alt="" />
+<p class="img-caption"><strong>Figure 5.</strong> A custom dialog layout.</p>
+</div>
-<img src="{@docRoot}images/dialog_progress_spinning.png" alt="" style="float:right" />
+<p>If you want a custom layout in a dialog, create a layout and add it to an
+{@link android.app.AlertDialog} by calling {@link
+android.app.AlertDialog.Builder#setView setView()} on your {@link
+android.app.AlertDialog.Builder} object.</p>
-<p>A {@link android.app.ProgressDialog} is an extension of the {@link android.app.AlertDialog}
-class that can display a progress animation in the form of a spinning wheel, for a task with
-progress that's undefined, or a progress bar, for a task that has a defined progression.
-The dialog can also provide buttons, such as one to cancel a download.</p>
+<p>By default, the custom layout fills the dialog window, but you can still
+use {@link android.app.AlertDialog.Builder} methods to add buttons and a title.</p>
-<p>Opening a progress dialog can be as simple as calling
-{@link android.app.ProgressDialog#show(Context,CharSequence,CharSequence)
-ProgressDialog.show()}. For example, the progress dialog shown to the right can be
-easily achieved without managing the dialog through the
-{@link android.app.Activity#onCreateDialog(int)} callback,
-as shown here:</p>
+<p>For example, here's the layout file for the dialog in Figure 5:</p>
+<p style="clear:right" class="code-caption">res/layout/dialog_signin.xml</p>
<pre>
-ProgressDialog dialog = ProgressDialog.show(MyActivity.this, "",
- "Loading. Please wait...", true);
+&lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:orientation="vertical"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content">
+ &lt;ImageView
+ android:src="@drawable/header_logo"
+ android:layout_width="match_parent"
+ android:layout_height="64dp"
+ android:scaleType="center"
+ android:background="#FFFFBB33"
+ android:contentDescription="@string/app_name" />
+ &lt;EditText
+ android:id="@+id/username"
+ android:inputType="textEmailAddress"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="16dp"
+ android:layout_marginLeft="4dp"
+ android:layout_marginRight="4dp"
+ android:layout_marginBottom="4dp"
+ android:hint="@string/username" />
+ &lt;EditText
+ android:id="@+id/password"
+ android:inputType="textPassword"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="4dp"
+ android:layout_marginLeft="4dp"
+ android:layout_marginRight="4dp"
+ android:layout_marginBottom="16dp"
+ android:fontFamily="sans-serif"
+ android:hint="@string/password"/>
+&lt;/LinearLayout>
</pre>
-<p>The first parameter is the application {@link android.content.Context},
-the second is a title for the dialog (left empty), the third is the message,
-and the last parameter is whether the progress
-is indeterminate (this is only relevant when creating a progress bar, which is
-discussed in the next section).
-</p>
+<p class="note"><strong>Tip:</strong> By default, when you set an {@link android.widget.EditText}
+element to use the {@code "textPassword"} input type, the font family is set to monospace, so
+you should change its font family to {@code "sans-serif"} so that both text fields use
+a matching font style.</p>
-<p>The default style of a progress dialog is the spinning wheel.
-If you want to create a progress bar that shows the loading progress with granularity,
-some more code is required, as discussed in the next section.</p>
+<p>To inflate the layout in your {@link android.support.v4.app.DialogFragment},
+get a {@link android.view.LayoutInflater} with
+{@link android.app.Activity#getLayoutInflater()} and call
+{@link android.view.LayoutInflater#inflate inflate()}, where the first parameter
+is the layout resource ID and the second parameter is a parent view for the layout.
+You can then call {@link android.app.AlertDialog#setView setView()}
+to place the layout in the dialog.</p>
+<pre>
+&#64;Override
+public Dialog onCreateDialog(Bundle savedInstanceState) {
+ AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
+ // Get the layout inflater
+ LayoutInflater inflater = getActivity().getLayoutInflater();
+
+ // Inflate and set the layout for the dialog
+ // Pass null as the parent view because its going in the dialog layout
+ builder.setView(inflater.inflate(R.layout.dialog_signin, null))
+ // Add action buttons
+ .setPositiveButton(R.string.signin, new DialogInterface.OnClickListener() {
+ &#64;Override
+ public void onClick(DialogInterface dialog, int id) {
+ // sign in the user ...
+ }
+ })
+ .setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog, int id) {
+ LoginDialogFragment.this.getDialog().cancel();
+ }
+ });
+ return builder.create();
+}
+</pre>
-<h3 id="ShowingAProgressBar">Showing a progress bar</h3>
+<div class="note">
+<p><strong>Tip:</strong> If you want a custom dialog,
+you can instead display an {@link android.app.Activity} as a dialog
+instead of using the {@link android.app.Dialog} APIs. Simply create an activity and set its theme to
+{@link android.R.style#Theme_Holo_Dialog Theme.Holo.Dialog}
+in the <a href="{@docRoot}guide/topics/manifest/activity-element.html">{@code
+&lt;activity&gt;}</a> manifest element:</p>
-<img src="/images/dialog_progress_bar.png" alt="" style="float:right" />
+<pre>
+&lt;activity android:theme="&#64;android:style/Theme.Holo.Dialog" >
+</pre>
+<p>That's it. The activity now displays in a dialog window instead of fullscreen.</p>
+</div>
-<p>To show the progression with an animated progress bar:</p>
-<ol>
- <li>Initialize the
- ProgressDialog with the class constructor,
- {@link android.app.ProgressDialog#ProgressDialog(Context)}.</li>
- <li>Set the progress style to "STYLE_HORIZONTAL" with
- {@link android.app.ProgressDialog#setProgressStyle(int)} and
- set any other properties, such as the message.</li>
- <li>When you're ready to show the dialog, call
- {@link android.app.Dialog#show()} or return the ProgressDialog from the
- {@link android.app.Activity#onCreateDialog(int)} callback.</li>
- <li>You can increment the amount of progress displayed
- in the bar by calling either {@link android.app.ProgressDialog#setProgress(int)} with a value for
- the total percentage completed so far or {@link android.app.ProgressDialog#incrementProgressBy(int)}
- with an incremental value to add to the total percentage completed so far.</li>
-</ol>
-<p>For example, your setup might look like this:</p>
+<h2 id="PassingEvents">Passing Events Back to the Dialog's Host</h2>
+
+<p>When the user touches one of the dialog's action buttons or selects an item from its list,
+your {@link android.support.v4.app.DialogFragment} might perform the necessary
+action itself, but often you'll want to deliver the event to the activity or fragment that
+opened the dialog. To do this, define an interface with a method for each type of click event.
+Then implement that interface in the host component that will
+receive the action events from the dialog.</p>
+
+<p>For example, here's a {@link android.support.v4.app.DialogFragment} that defines an
+interface through which it delivers the events back to the host activity:</p>
+
<pre>
-ProgressDialog progressDialog;
-progressDialog = new ProgressDialog(mContext);
-progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
-progressDialog.setMessage("Loading...");
-progressDialog.setCancelable(false);
+public class NoticeDialogFragment extends DialogFragment {
+
+ /* The activity that creates an instance of this dialog fragment must
+ * implement this interface in order to receive event callbacks.
+ * Each method passes the DialogFragment in case the host needs to query it. */
+ public interface NoticeDialogListener {
+ public void onDialogPositiveClick(DialogFragment dialog);
+ public void onDialogNegativeClick(DialogFragment dialog);
+ }
+
+ // Use this instance of the interface to deliver action events
+ NoticeDialogListener mListener;
+
+ // Override the Fragment.onAttach() method to instantiate the NoticeDialogListener
+ &#64;Override
+ public void onAttach(Activity activity) {
+ super.onAttach(activity);
+ // Verify that the host activity implements the callback interface
+ try {
+ // Instantiate the NoticeDialogListener so we can send events to the host
+ mListener = (NoticeDialogListener) activity;
+ } catch (ClassCastException e) {
+ // The activity doesn't implement the interface, throw exception
+ throw new ClassCastException(activity.toString()
+ + " must implement NoticeDialogListener");
+ }
+ }
+ ...
+}
</pre>
-<p>The setup is simple. Most of the code needed to create a progress dialog is actually
-involved in the process that updates it. You might find that it's
-necessary to create a second thread in your application for this work and then report the progress
-back to the Activity's UI thread with a {@link android.os.Handler} object.
-If you're not familiar with using additional
-threads with a Handler, see the example Activity below that uses a second thread to
-increment a progress dialog managed by the Activity.</p>
-
-<script type="text/javascript">
-function toggleDiv(link) {
- var toggleable = $(link).parent();
- if (toggleable.hasClass("closed")) {
- $(".toggleme", toggleable).slideDown("fast");
- toggleable.removeClass("closed");
- toggleable.addClass("open");
- $(".toggle-img", toggleable).attr("title", "hide").attr("src", "/assets/images/triangle-opened.png");
- } else {
- $(".toggleme", toggleable).slideUp("fast");
- toggleable.removeClass("open");
- toggleable.addClass("closed");
- $(".toggle-img", toggleable).attr("title", "show").attr("src", "/assets/images/triangle-closed.png");
- }
- return false;
-}
-</script>
-<style>
-.toggleme {
- padding:0 0 1px 0;
-}
-.toggleable a {
- text-decoration:none;
-}
-.toggleable.closed .toggleme {
- display:none;
-}
-#jd-content .toggle-img {
- margin:0;
-}
-</style>
-
-<div class="toggleable closed">
- <a href="#" onclick="return toggleDiv(this)">
- <img src="/assets/images/triangle-closed.png" class="toggle-img" />
- <strong>Example ProgressDialog with a second thread</strong></a>
- <div class="toggleme">
- <p>This example uses a second thread to track the progress of a process (which actually just
-counts up to 100). The thread sends a {@link android.os.Message} back to the main
-Activity through a {@link android.os.Handler} each time progress is made. The main Activity then updates the
-ProgressDialog.</p>
+<p>The activity hosting the dialog creates an instance of the dialog
+with the dialog fragment's constructor and receives the dialog's
+events through an implementation of the {@code NoticeDialogListener} interface:</p>
<pre>
-package com.example.progressdialog;
-
-import android.app.Activity;
-import android.app.Dialog;
-import android.app.ProgressDialog;
-import android.os.Bundle;
-import android.os.Handler;
-import android.os.Message;
-import android.view.View;
-import android.view.View.OnClickListener;
-import android.widget.Button;
-
-public class NotificationTest extends Activity {
- static final int PROGRESS_DIALOG = 0;
- Button button;
- ProgressThread progressThread;
- ProgressDialog progressDialog;
-
- /** Called when the activity is first created. */
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
-
- // Setup the button that starts the progress dialog
- button = (Button) findViewById(R.id.progressDialog);
- button.setOnClickListener(new OnClickListener(){
- public void onClick(View v) {
- showDialog(PROGRESS_DIALOG);
- }
- });
+public class MainActivity extends FragmentActivity
+ implements NoticeDialogFragment.NoticeDialogListener{
+ ...
+
+ public void showNoticeDialog() {
+ // Create an instance of the dialog fragment and show it
+ DialogFragment dialog = new NoticeDialogFragment();
+ dialog.show(getSupportFragmentManager(), "NoticeDialogFragment");
}
-
- protected Dialog onCreateDialog(int id) {
- switch(id) {
- case PROGRESS_DIALOG:
- progressDialog = new ProgressDialog(NotificationTest.this);
- progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
- progressDialog.setMessage("Loading...");
- return progressDialog;
- default:
- return null;
- }
+
+ // The dialog fragment receives a reference to this Activity through the
+ // Fragment.onAttach() callback, which it uses to call the following methods
+ // defined by the NoticeDialogFragment.NoticeDialogListener interface
+ &#64;Override
+ public void onDialogPositiveClick(DialogFragment dialog) {
+ // User touched the dialog's positive button
+ ...
}
&#64;Override
- protected void onPrepareDialog(int id, Dialog dialog) {
- switch(id) {
- case PROGRESS_DIALOG:
- progressDialog.setProgress(0);
- progressThread = new ProgressThread(handler);
- progressThread.start();
+ public void onDialogNegativeClick(DialogFragment dialog) {
+ // User touched the dialog's negative button
+ ...
}
+}
+</pre>
- // Define the Handler that receives messages from the thread and update the progress
- final Handler handler = new Handler() {
- public void handleMessage(Message msg) {
- int total = msg.arg1;
- progressDialog.setProgress(total);
- if (total >= 100){
- dismissDialog(PROGRESS_DIALOG);
- progressThread.setState(ProgressThread.STATE_DONE);
- }
- }
- };
-
- /** Nested class that performs progress calculations (counting) */
- private class ProgressThread extends Thread {
- Handler mHandler;
- final static int STATE_DONE = 0;
- final static int STATE_RUNNING = 1;
- int mState;
- int total;
-
- ProgressThread(Handler h) {
- mHandler = h;
- }
-
- public void run() {
- mState = STATE_RUNNING;
- total = 0;
- while (mState == STATE_RUNNING) {
- try {
- Thread.sleep(100);
- } catch (InterruptedException e) {
- Log.e("ERROR", "Thread Interrupted");
- }
- Message msg = mHandler.obtainMessage();
- msg.arg1 = total;
- mHandler.sendMessage(msg);
- total++;
- }
- }
-
- /* sets the current state for the thread,
- * used to stop the thread */
- public void setState(int state) {
- mState = state;
- }
+<p>Because the host activity implements the {@code NoticeDialogListener}&mdash;which is
+enforced by the {@link android.support.v4.app.Fragment#onAttach onAttach()}
+callback method shown above&mdash;the dialog fragment can use the
+interface callback methods to deliver click events to the activity:</p>
+
+<pre>
+public class NoticeDialogFragment extends DialogFragment {
+ ...
+
+ &#64;Override
+ public Dialog onCreateDialog(Bundle savedInstanceState) {
+ // Build the dialog and set up the button click handlers
+ AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
+ builder.setMessage(R.string.dialog_fire_missiles)
+ .setPositiveButton(R.string.fire, new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog, int id) {
+ // Send the positive button event back to the host activity
+ mListener.onDialogPositiveClick(NoticeDialogFragment.this);
+ }
+ })
+ .setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog, int id) {
+ // Send the negative button event back to the host activity
+ mListener.onDialogPositiveClick(NoticeDialogFragment.this);
+ }
+ });
+ return builder.create();
}
}
</pre>
- </div> <!-- end toggleme -->
-</div> <!-- end toggleable -->
-<h2 id="CustomDialog">Creating a Custom Dialog</h2>
+<h2 id="ShowingADialog">Showing a Dialog</h2>
+
+<p>When you want to show your dialog, create an instance of your {@link
+android.support.v4.app.DialogFragment} and call {@link android.support.v4.app.DialogFragment#show
+show()}, passing the {@link android.support.v4.app.FragmentManager} and a tag name
+for the dialog fragment.</p>
+
+<p>You can get the {@link android.support.v4.app.FragmentManager} by calling
+{@link android.support.v4.app.FragmentActivity#getSupportFragmentManager()} from
+the {@link android.support.v4.app.FragmentActivity} or {@link
+android.support.v4.app.Fragment#getFragmentManager()} from a {@link
+android.support.v4.app.Fragment}. For example:</p>
+
+<pre>
+public void confirmFireMissiles() {
+ DialogFragment newFragment = new FireMissilesDialogFragment();
+ newFragment.show(getSupportFragmentManager(), "missiles");
+}
+</pre>
+
+<p>The second argument, {@code "missiles"}, is a unique tag name that the system uses to save
+and restore the fragment state when necessary. The tag also allows you to get a handle to
+the fragment by calling {@link android.support.v4.app.FragmentManager#findFragmentByTag
+findFragmentByTag()}.</p>
+
+
-<img src="{@docRoot}images/dialog_custom.png" alt="" style="float:right" />
-<p>If you want a customized design for a dialog, you can create your own layout
-for the dialog window with layout and widget elements.
-After you've defined your layout, pass the root View object or
-layout resource ID to {@link android.app.Dialog#setContentView(View)}.</p>
+<h2 id="FullscreenDialog">Showing a Dialog Fullscreen or as an Embedded Fragment</h2>
-<p>For example, to create the dialog shown to the right:</p>
+<p>You might have a UI design in which you want a piece of the UI to appear as a dialog in some
+situations, but as a full screen or embedded fragment in others (perhaps depending on whether
+the device is a large screen or small screen). The {@link android.support.v4.app.DialogFragment}
+class offers you this flexibility because it can still behave as an embeddable {@link
+android.support.v4.app.Fragment}.</p>
+
+<p>However, you cannot use {@link android.app.AlertDialog.Builder AlertDialog.Builder}
+or other {@link android.app.Dialog} objects to build the dialog in this case. If
+you want the {@link android.support.v4.app.DialogFragment} to be
+embeddable, you must define the dialog's UI in a layout, then load the layout in the
+{@link android.support.v4.app.DialogFragment#onCreateView
+onCreateView()} callback.</p>
+
+<p>Here's an example {@link android.support.v4.app.DialogFragment} that can appear as either a
+dialog or an embeddable fragment (using a layout named <code>purchase_items.xml</code>):</p>
-<ol>
- <li>Create an XML layout saved as <code>custom_dialog.xml</code>:
<pre>
-&lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@+id/layout_root"
- android:orientation="horizontal"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:padding="10dp"
- >
- &lt;ImageView android:id="@+id/image"
- android:layout_width="wrap_content"
- android:layout_height="fill_parent"
- android:layout_marginRight="10dp"
- />
- &lt;TextView android:id="@+id/text"
- android:layout_width="wrap_content"
- android:layout_height="fill_parent"
- android:textColor="#FFF"
- />
-&lt;/LinearLayout>
+public class CustomDialogFragment extends DialogFragment {
+ /** The system calls this to get the DialogFragment's layout, regardless
+ of whether it's being displayed as a dialog or an embedded fragment. */
+ &#64;Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container,
+ Bundle savedInstanceState) {
+ // Inflate the layout to use as dialog or embedded fragment
+ return inflater.inflate(R.layout.purchase_items, container, false);
+ }
+
+ /** The system calls this only when creating the layout in a dialog. */
+ &#64;Override
+ public Dialog onCreateDialog(Bundle savedInstanceState) {
+ // The only reason you might override this method when using onCreateView() is
+ // to modify any dialog characteristics. For example, the dialog includes a
+ // title by default, but your custom layout might not need it. So here you can
+ // remove the dialog title, but you must call the superclass to get the Dialog.
+ Dialog dialog = super.onCreateDialog(savedInstanceState);
+ dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
+ return dialog;
+ }
+}
+</pre>
+
+<p>And here's some code that decides whether to show the fragment as a dialog
+or a fullscreen UI, based on the screen size:</p>
+
+<pre>
+public void showDialog() {
+ FragmentManager fragmentManager = getSupportFragmentManager();
+ CustomDialogFragment newFragment = new CustomDialogFragment();
+
+ if (mIsLargeLayout) {
+ // The device is using a large layout, so show the fragment as a dialog
+ newFragment.show(fragmentManager, "dialog");
+ } else {
+ // The device is smaller, so show the fragment fullscreen
+ FragmentTransaction transaction = fragmentManager.beginTransaction();
+ // For a little polish, specify a transition animation
+ transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
+ // To make it fullscreen, use the 'content' root view as the container
+ // for the fragment, which is always the root view for the activity
+ transaction.add(android.R.id.content, newFragment)
+ .addToBackStack(null).commit();
+ }
+}
+</pre>
+
+<p>For more information about performing fragment transactions, see the
+<a href="{@docRoot}guide/components/fragments.html">Fragments</a> guide.</p>
+
+<p>In this example, the <code>mIsLargeLayout</code> boolean specifies whether the current device
+should use the app's large layout design (and thus show this fragment as a dialog, rather
+than fullscreen). The best way to set this kind of boolean is to declare a
+<a href="{@docRoot}guide/topics/resources/more-resources.html#Bool">bool resource value</a>
+with an <a href="{@docRoot}guide/topics/resources/providing-resources.html#AlternativeResources"
+>alternative resource</a> value for different screen sizes. For example, here are two
+versions of the bool resource for different screen sizes:</p>
+
+<p class="code-caption">res/values/bools.xml</p>
+<pre>
+&lt;!-- Default boolean values -->
+&lt;resources>
+ &lt;bool name="large_layout">false&lt;/bool>
+&lt;/resources>
+</pre>
+
+<p class="code-caption">res/values-large/bools.xml</p>
+<pre>
+&lt;!-- Large screen boolean values -->
+&lt;resources>
+ &lt;bool name="large_layout">true&lt;/bool>
+&lt;/resources>
</pre>
- <p>This XML defines an {@link android.widget.ImageView} and a {@link android.widget.TextView}
- inside a {@link android.widget.LinearLayout}.</p>
- <li>Set the above layout as the dialog's content view and define the content
- for the ImageView and TextView elements:</p>
+<p>Then you can initialize the {@code mIsLargeLayout} value during the activity's
+{@link android.app.Activity#onCreate onCreate()} method:</p>
+
<pre>
-Context mContext = getApplicationContext();
-Dialog dialog = new Dialog(mContext);
+boolean mIsLargeLayout;
-dialog.setContentView(R.layout.custom_dialog);
-dialog.setTitle("Custom Dialog");
+&#64;Override
+public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_main);
-TextView text = (TextView) dialog.findViewById(R.id.text);
-text.setText("Hello, this is a custom dialog!");
-ImageView image = (ImageView) dialog.findViewById(R.id.image);
-image.setImageResource(R.drawable.android);
+ mIsLargeLayout = getResources().getBoolean(R.bool.large_layout);
+}
</pre>
- <p>After you instantiate the Dialog, set your custom layout as the dialog's content view with
- {@link android.app.Dialog#setContentView(int)}, passing it the layout resource ID.
- Now that the Dialog has a defined layout, you can capture View objects from the layout with
- {@link android.app.Dialog#findViewById(int)} and modify their content.</p>
- </li>
- <li>That's it. You can now show the dialog as described in
- <a href="#ShowingADialog">Showing A Dialog</a>.</li>
-</ol>
-<p>A dialog made with the base Dialog class must have a title. If you don't call
-{@link android.app.Dialog#setTitle(CharSequence) setTitle()}, then the space used for the title
-remains empty, but still visible. If you don't want
-a title at all, then you should create your custom dialog using the
-{@link android.app.AlertDialog} class. However, because an AlertDialog is created easiest with
-the {@link android.app.AlertDialog.Builder} class, you do not have access to the
-{@link android.app.Dialog#setContentView(int)} method used above. Instead, you must use
-{@link android.app.AlertDialog.Builder#setView(View)}. This method accepts a {@link android.view.View} object,
-so you need to inflate the layout's root View object from
-XML.</p>
-
-<p>To inflate the XML layout, retrieve the {@link android.view.LayoutInflater} with
-{@link android.app.Activity#getLayoutInflater()}
-(or {@link android.content.Context#getSystemService(String) getSystemService()}),
-and then call
-{@link android.view.LayoutInflater#inflate(int, ViewGroup)}, where the first parameter
-is the layout resource ID and the second is the ID of the root View. At this point, you can use
-the inflated layout to find View objects in the layout and define the content for the
-ImageView and TextView elements. Then instantiate the AlertDialog.Builder and set the
-inflated layout for the dialog with {@link android.app.AlertDialog.Builder#setView(View)}.</p>
-
-<p>Here's an example, creating a custom layout in an AlertDialog:</p>
+<h3 id="ActivityAsDialog">Showing an activity as a dialog on large screens</h3>
+
+<p>Instead of showing a dialog as a fullscreen UI when on small screens, you can accomplish
+the same result by showing an {@link android.app.Activity} as a dialog when on
+large screens. Which approach you choose depends on your app design, but
+showing an activity as a dialog is often useful when your app is already designed for small
+screens and you'd like to improve the experience on tablets by showing a short-lived activity
+as a dialog.</p>
+
+<p>To show an activity as a dialog only when on large screens,
+apply the {@link android.R.style#Theme_Holo_DialogWhenLarge Theme.Holo.DialogWhenLarge}
+theme to the <a href="{@docRoot}guide/topics/manifest/activity-element.html">{@code
+&lt;activity&gt;}</a> manifest element:</p>
<pre>
-AlertDialog.Builder builder;
-AlertDialog alertDialog;
-
-Context mContext = getApplicationContext();
-LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(LAYOUT_INFLATER_SERVICE);
-View layout = inflater.inflate(R.layout.custom_dialog,
- (ViewGroup) findViewById(R.id.layout_root));
-
-TextView text = (TextView) layout.findViewById(R.id.text);
-text.setText("Hello, this is a custom dialog!");
-ImageView image = (ImageView) layout.findViewById(R.id.image);
-image.setImageResource(R.drawable.android);
-
-builder = new AlertDialog.Builder(mContext);
-builder.setView(layout);
-alertDialog = builder.create();
+&lt;activity android:theme="&#64;android:style/Theme.Holo.DialogWhenLarge" >
</pre>
-<p>Using an AlertDialog for your custom layout lets you
-take advantage of built-in AlertDialog features like managed buttons,
-selectable lists, a title, an icon and so on.</p>
+<p>For more information about styling your activities with themes, see the <a
+href="{@docRoot}guide/topics/ui/themes.html">Styles and Themes</a> guide.</p>
+
-<p>For more information, refer to the reference documentation for the
-{@link android.app.Dialog} and {@link android.app.AlertDialog.Builder}
-classes.</p>
+<h2 id="DismissingADialog">Dismissing a Dialog</h2>
+
+<p>When the user touches any of the action buttons created with an
+{@link android.app.AlertDialog.Builder}, the system dismisses the dialog for you.</p>
+
+<p>The system also dismisses the dialog when the user touches an item in a dialog list, except
+when the list uses radio buttons or checkboxes. Otherwise, you can manually dismiss your dialog
+by calling {@link android.support.v4.app.DialogFragment#dismiss()} on your {@link
+android.support.v4.app.DialogFragment}.</p>
+
+<p>In case you need to perform certain
+actions when the dialog goes away, you can implement the {@link
+android.support.v4.app.DialogFragment#onDismiss onDismiss()} method in your {@link
+android.support.v4.app.DialogFragment}.</p>
+
+<p>You can also <em>cancel</em> a dialog. This is a special event that indicates the user
+explicitly left the dialog without completing the task. This occurs if the user presses the
+<em>Back</em> button, touches the screen outside the dialog area,
+or if you explicitly call {@link android.app.Dialog#cancel()} on the {@link
+android.app.Dialog} (such as in response to a "Cancel" button in the dialog).</p>
+
+<p>As shown in the example above, you can respond to the cancel event by implementing
+{@link android.support.v4.app.DialogFragment#onCancel onCancel()} in your {@link
+android.support.v4.app.DialogFragment} class.</p>
+
+<p class="note"><strong>Note:</strong> The system calls
+{@link android.support.v4.app.DialogFragment#onDismiss onDismiss()} upon each event that
+invokes the {@link android.support.v4.app.DialogFragment#onCancel onCancel()} callback. However,
+if you call {@link android.app.Dialog#dismiss Dialog.dismiss()} or {@link
+android.support.v4.app.DialogFragment#dismiss DialogFragment.dismiss()},
+the system calls {@link android.support.v4.app.DialogFragment#onDismiss onDismiss()} <em>but
+not</em> {@link android.support.v4.app.DialogFragment#onCancel onCancel()}. So you should generally
+call {@link android.support.v4.app.DialogFragment#dismiss dismiss()} when the user presses the
+<em>positive</em> button in your dialog in order to remove the dialog from view.</p>
diff --git a/docs/html/guide/topics/ui/notifiers/notifications.jd b/docs/html/guide/topics/ui/notifiers/notifications.jd
index 273b5f7..8026b7d 100644
--- a/docs/html/guide/topics/ui/notifiers/notifications.jd
+++ b/docs/html/guide/topics/ui/notifiers/notifications.jd
@@ -1,646 +1,998 @@
-page.title=Status Notifications
-parent.title=Notifications
-parent.link=index.html
+page.title=Notifications
@jd:body
<div id="qv-wrapper">
- <div id="qv">
- <h2>Quickview</h2>
- <ul>
- <li>A status notification allows your application to notify the user of an event
-without interupting their current activity</li>
- <li>You can attach an intent to your notification that the system will initiate when the
-user clicks it</li>
- </ul>
-
- <h2>In this document</h2>
+<div id="qv">
+<h2>In this document</h2>
+<ol>
+ <li><a href="#NotificationUI">Notification Display Elements</a>
<ol>
- <li><a href="#Basics">The Basics</a></li>
- <li><a href="#HandlingNotifications">Responding to Notifications</a></li>
- <li><a href="#ManageYourNotifications">Managing your Notifications</a></li>
- <li><a href="#CreateANotification">Creating a Notification</a>
- <ol>
- <li><a href="#Updating">Updating the notification</a></li>
- <li><a href="#Sound">Adding a sound</a></li>
- <li><a href="#Vibration">Adding vibration</a></li>
- <li><a href="#Lights">Adding flashing lights</a></li>
- <li><a href="#More">More features</a></li>
- </ol>
- </li>
- <li><a href="#CustomExpandedView">Creating a Custom Notification Layout</a></li>
+ <li><a href="#NormalNotify">Normal view</a></li>
+ <li><a href="#BigNotify">Big view</a></li>
</ol>
- <h2>Key classes</h2>
+ </li>
+ <li><a href="#CreateNotification">Creating a Notification</a>
<ol>
- <li>{@link android.app.Notification}</li>
- <li>{@link android.app.NotificationManager}</li>
+ <li><a href="#Required">Required notification contents</a></li>
+ <li><a href="#Optional">Optional notification contents and settings</a></li>
+ <li><a href="#Actions">Notification actions</a></li>
+ <li><a href="#SimpleNotification">Creating a simple notification</a></li>
+ <li><a href="#ApplyStyle">Applying a big view style to a notification</a></li>
+ <li><a href="#Compatibility">Handling compatibility</a></li>
</ol>
-
- <h2>See also</h2>
+ </li>
+ <li><a href="#Managing">Managing Notifications</a>
<ol>
- <li><a href="{@docRoot}design/patterns/notifications.html">Android
-Design: Notifications</a></li>
+ <li><a href="#Updating">Updating notifications</a></li>
+ <li><a href="#Removing">Removing notifications</a></li>
</ol>
- </div>
-</div>
-
-<p>A status notification adds an icon to the system's status bar
-(with an optional ticker-text message) and a notification message in the notifications window.
-When the user selects the notification, Android fires an
-{@link android.content.Intent} that is defined by the {@link android.app.Notification} (usually to
-launch an {@link android.app.Activity}).
-You can also configure the notification to alert the user with a sound, a vibration, and flashing
-lights on the device.</p>
-
-<p>A status notification should be used for any case in
-which a background service needs to alert the user about an event that requires a response. A
-background service
-<strong>should never</strong> launch an activity on its own in order to receive user interaction.
-The service should instead create a status notification that will launch the activity
-when selected by the user.</p>
-
-<p>Figure 1 shows the status bar with a notification icon on the left side.</p>
-<img src="{@docRoot}images/status_bar.png" alt="" />
-<p class="img-caption"><strong>Figure 1.</strong> Status bar with a notification.</p>
-
-<p>Figure 2 shows the notification's message in the notifications window.</p>
-
-<img src="{@docRoot}images/notifications_window.png" alt="" />
-<p class="img-caption"><strong>Figure 2.</strong> The notifications window.</p>
-
-
-<div class="note design">
-<p><strong>Notification Design</strong></p>
- <p>For design guidelines, read Android Design's <a
-href="{@docRoot}design/patterns/notifications.html">Notifications</a> guide.</p>
-</div>
-
-
-
-<h2 id="Basics">The Basics</h2>
-
-<p>An {@link android.app.Activity} or {@link android.app.Service} can initiate a status
-notification. Because an activity can perform actions only while it is
-running in the foreground and its window has focus, you will usually create status notifications
-from a
-service. This way, the notification can be created from the background,
-while the user is using another application or
-while the device is asleep. To create a notification, you must use two
-classes: {@link android.app.Notification} and {@link android.app.NotificationManager}.</p>
-
-<p>Use an instance of the {@link android.app.Notification} class to define the properties of your
-status notification, such as the status icon, the notification message, and extra settings
-such as a sound to play. The {@link android.app.NotificationManager} is an Android system service
-that executes and manages all status notifications. You do not instantiate the
-{@link android.app.NotificationManager} directly. In order
-to give it your {@link android.app.Notification}, you must retrieve a reference to the
-{@link android.app.NotificationManager} with
-{@link android.app.Activity#getSystemService(String) getSystemService()} and
-then, when you want to notify the user, pass it your {@link android.app.Notification} with
-{@link android.app.NotificationManager#notify(int,Notification) notify()}. </p>
-
-<p>To create a status notification:</p>
-<ol>
- <li>Get a reference to the {@link android.app.NotificationManager}:
-<pre>
-String ns = Context.NOTIFICATION_SERVICE;
-NotificationManager mNotificationManager = (NotificationManager) getSystemService(ns);
-</pre>
</li>
- <!-- use Notification.Builder in 3.0 -->
- <li>Instantiate the {@link android.app.Notification}:
-<pre>
-int icon = R.drawable.notification_icon;
-CharSequence tickerText = "Hello";
-long when = System.currentTimeMillis();
-
-Notification notification = new Notification(icon, tickerText, when);
-</pre>
- </li>
- <li>Define the notification's message and {@link android.app.PendingIntent}:
-<pre>
-Context context = getApplicationContext();
-CharSequence contentTitle = "My notification";
-CharSequence contentText = "Hello World!";
-Intent notificationIntent = new Intent(this, MyClass.class);
-PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);
-
-notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent);
-</pre>
+ <li><a href="#NotificationResponse">Preserving Navigation when Starting an Activity</a>
+ <ol>
+ <li><a href="#DirectEntry">Setting up a regular activity PendingIntent</a></li>
+ <li><a href="#ExtendedNotification">Setting up a special activity PendingIntent</a></li>
+ </ol>
</li>
- <li>Pass the {@link android.app.Notification} to the {@link android.app.NotificationManager}:
-<pre>
-private static final int HELLO_ID = 1;
-
-mNotificationManager.notify(HELLO_ID, notification);
-</pre>
- <p>That's it. Your user has now been notified.</p>
+ <li><a href="#Progress">Displaying Progress in a Notification</a>
+ <ol>
+ <li><a href="#FixedProgress">Displaying a fixed-duration progress indicator</a></li>
+ <li><a href="#ActivityIndicator">Displaying a continuing activity indicator</a></li>
+ </ol>
</li>
+ <li><a href="#CustomNotification">Custom Notification Layouts</a></li>
</ol>
-
-<h2 id="HandlingNotifications">Responding to Notifications</h2>
-
-<p>A central part of the user's experience with a notification revolves around
-how it interacts with the application's UI flow. You must implement
-this correctly to provide a consistent user experience within your app.</p>
-
-<p>Two typical examples of notifications are provided by Calendar, which can send out
-notifications of upcoming events, and Email, which can send out notifications
-when new messages arrive. These represent the two recommended patterns for handling
-notifications: either launching into an activity that is separate from the
-main application, or launching an entirely new instance of the application
-showing the appropriate point for the notification.</p>
-
-<p>The following scenario shows how the activity stack should work
-in these two typical notification flows, first handling a Calendar notification:
-</p>
-
+ <h2>Key classes</h2>
+ <ol>
+ <li>{@link android.app.NotificationManager}</li>
+ <li>{@link android.support.v4.app.NotificationCompat}</li>
+ </ol>
+ <h2>Videos</h2>
+ <ol>
+ <li>
+ <a href="http://www.youtube.com/watch?v=Yc8YrVc47TI&feature=player_detailpage#t=1672s">
+ Notifications in 4.1</a>
+ </li>
+ </ol>
+<h2>See also</h2>
<ol>
- <li>User is creating a new event in Calendar. They realize they
- need to copy part of an email message into this event.
- </li>
- <li>
- The user chooses Home &gt; Email.
- </li>
- <li>
- While in Email, they receive a notification from Calendar for an upcoming
- meeting.
- </li>
- <li>
- So they choose that notification, which takes them to a
- dedicated Calendar activity that displays brief details of the
- upcoming meeting.
- </li>
- <li>
- The user has seen enough to know they have a meeting coming up,
- so they press the <em>Back</em> button. They are now returned to Email, which
- is where they were when they took the notification.
- </li>
+ <li>
+ <a href="{@docRoot}design/patterns/notifications.html">Android Design: Notifications</a>
+ </li>
</ol>
-
-<p>Handling an Email notification:</p>
-
+</div>
+</div>
+<p>
+ A notification is a message you can display to the user outside of your application's
+ normal UI. When you tell the system to issue a notification, it first appears as an icon in the
+ <strong>notification area</strong>. To see the details of the notification, the user opens the
+ <strong>notification drawer</strong>. Both the notification area and the notification drawer
+ are system-controlled areas that the user can view at any time.
+</p>
+<img
+ id="figure1"
+ src="{@docRoot}images/ui/notifications/iconic_notification.png"
+ height="120" alt="" />
+<p class="img-caption">
+ <strong>Figure 1.</strong> Notifications in the notification area.
+</p>
+<img id="figure2" src="{@docRoot}images/ui/notifications/normal_notification.png"
+ height="293" alt="" />
+<p class="img-caption">
+ <strong>Figure 2.</strong> Notifications in the notification drawer.
+</p>
+<div class="note design">
+ <p>
+ <strong>Notification Design</strong>
+ </p>
+ <p>
+ Notifications, as an important part of the Android UI, have their own design guidelines. To
+ learn how to design notifications and their interactions, read the Android Design Guide
+ <a href="{@docRoot}design/patterns/notifications.html">Notifications</a> topic.
+ </p>
+</div>
+<p class="note">
+ <strong>Note:</strong> Except where noted, this guide refers to the
+ {@link android.support.v4.app.NotificationCompat.Builder NotificationCompat.Builder} class
+ in the version 4 <a href="{@docRoot}tools/extras/support-library.html">Support Library</a>.
+ The class {@link android.app.Notification.Builder Notification.Builder} was added in Android
+ 3.0.
+</p>
+<!-- ------------------------------------------------------------------------------------------ -->
+<!-- ------------------------------------------------------------------------------------------ -->
+<h2 id="NotificationUI">Notification Display Elements</h2>
+<p>
+ Notifications in the notification drawer can appear in one of two visual styles, depending on
+ the version and the state of the drawer:
+</p>
+<dl>
+ <dt>
+ Normal view
+ </dt>
+ <dd>
+ The standard view of the notifications in the notification drawer.
+ </dd>
+ <dt>
+ Big view
+ </dt>
+ <dd>
+ A large view that's visible when the notification is expanded. Big view is part of the
+ expanded notification feature available as of Android 4.1.
+ </dd>
+</dl>
+<p>
+ These styles are described in the following sections.
+</p>
+<!-- ------------------------------------------------------------------------------------------ -->
+<h3 id="NormalNotify">Normal view</h3>
+<p>
+ A notification in normal view appears in an area that's up to 64 dp tall. Even if you create a
+ notification with a big view style, it will appear in normal view until it's expanded. This
+ is an example of a normal view:
+</p>
+<img
+ src="{@docRoot}images/ui/notifications/normal_notification_callouts.png"
+ alt=""
+ height="153"
+ id="figure3" />
+<p class="img-caption">
+ <strong>Figure 3.</strong> Notification in normal view.
+</p>
+<p>
+ The callouts in the illustration refer to the following:
+</p>
<ol>
- <li>
- The user is currently in Email composing a message, and needs to
- check a date in their calendar.
- </li>
- <li>
- The user chooses Home &gt; Calendar.
- </li>
- <li>
- While in Calendar, they receive a notification from Email about a new
- message.
- </li>
- <li>
- They select the notification, which brings them to Email with the message
- details displayed. This has replaced what they were previously doing
- (writing an e-mail), but that message is still saved in their drafts.
- </li>
- <li>
- The user presses <em>Back</em> once to go to the message list (the typical flow in the
- Email app), and press <em>Back</em> again to return to Calendar as they left it.
- </li>
+ <li>Content title</li>
+ <li>Large icon</li>
+ <li>Content text</li>
+ <li>Content info</li>
+ <li>Small icon</li>
+ <li>
+ Time that the notification was issued. You can set an explicit value with
+ {@link android.support.v4.app.NotificationCompat.Builder#setWhen setWhen()}; if you don't
+ it defaults to the time that the system received the notification.
+ </li>
</ol>
-
-<p>In an Email style of notification, the UI launched by the notification
-shows the main application in a state representing that notification.
-For example, when the Email application comes to the foreground from its
-notification, it displays either the conversion list or a specific
-conversation depending on whether there are multiple or only one new
-email. To achieve this, we want to completely replace whatever current
-state the application is in with a new activity stack representing the
-new notification state.</p>
-
-<p>The following code illustrates how to show this kind of notification. Of
-most interest is the <code>makeMessageIntentStack()</code> method, which constructs
-an array of intents representing the app's new activity stack for this state.
-(If you are using fragments, you may need to initialize your fragment and
-app state so that pressing <em>Back</em> will switch the UI back to its parent state.)
-The core of this is the {@link android.content.Intent#makeRestartActivityTask
-Intent.makeRestartActivityTask()} method, which constructs the root activity
-of the stack with the appropriate flags, such as
-{@link android.content.Intent#FLAG_ACTIVITY_CLEAR_TASK Intent.FLAG_ACTIVITY_CLEAR_TASK}.</p>
-
-{@sample development/samples/ApiDemos/src/com/example/android/apis/app/IncomingMessage.java
- app_notification}
-
-<p>In a Calendar style of notification, the UI launched by the notification
-is a dedicated activity that is not part of the normal application flow.
-For example, when the user receives a Calendar notification, choosing that
-notification starts a special activity that displays a list
-of upcoming calendar events &mdash; this view is available only
-from the notification, not through the Calendar's normal user
-interface.</p>
-
-<p>The code for posting this type of notification is very straight-forward; it
-is like the above, but the {@link android.app.PendingIntent} is for just a single
-activity, our dedicated notification activity.</p>
-
-{@sample development/samples/ApiDemos/src/com/example/android/apis/app/IncomingMessage.java
- interstitial_notification}
-
-<p>This is not enough, however. Normally Android considers all activities within
-an application to be part of that application's UI flow, so simply launching the
-activity like this can cause it to be mixed with your normal application back stack
-in undesired ways. To make it behave correctly, in the manifest declaration
-for the activity the attributes
-<code>android:launchMode="singleTask"</code>,
-<code>android:taskAffinity=""</code> and
-<code>android:excludeFromRecents="true"</code>
-must be set. The full activity declaration for this sample is:</p>
-
-{@sample development/samples/ApiDemos/AndroidManifest.xml interstitial_affinity}
-
-<p>You must be careful when launching other activities from this initial activity,
-because this is not a top-level part of the application, does not appear in
-recents, and needs to be relaunched at any point from the notification with new data
-to show. This best approach is to make sure any activity launched from it is
-launched in its own task. When doing this care must be taken to make sure this
-new task interacts well with the current state of your exiting application's
-task. This is essentially
-the same as switching to the main application as described for the Email style
-notification shown before. Given the <code>makeMessageIntentStack()</code>
-method previously shown, handling a click then would look something like this:</p>
-
-{@sample development/samples/ApiDemos/src/com/example/android/apis/app/IncomingMessageInterstitial.java
- app_launch}
-
-<h2 id="ManageYourNotifications">Managing your Notifications</h2>
-
-<p>The {@link android.app.NotificationManager} is a system service that manages all
-notifications. You must retrieve a reference to it with the
-{@link android.app.Activity#getSystemService(String) getSystemService()} method.
-For example:</p>
-<pre>
-String ns = Context.NOTIFICATION_SERVICE;
-NotificationManager mNotificationManager = (NotificationManager) getSystemService(ns);
-</pre>
-
-<p>When you want to deliver your status notification, pass the {@link android.app.Notification}
-to the {@link android.app.NotificationManager} with {@link
-android.app.NotificationManager#notify(int,Notification)}.
-The first parameter is the unique ID for the notification and the second is the {@link
-android.app.Notification} object.
-The ID uniquely identifies the notification from within your
-application. The ID is necessary if you need to update the notification or (if
-your application manages different kinds of notifications) select the appropriate action
-when the user returns to your application via the intent defined in the notification.</p>
-
-<p>To clear the status notification when the user selects it from the notifications
-window, add the "FLAG_AUTO_CANCEL" flag to your {@link android.app.Notification}. You can
-also clear it manually with {@link android.app.NotificationManager#cancel(int)}, passing it the
-notification ID, or clear all your notifications with {@link
-android.app.NotificationManager#cancelAll()}.</p>
-
-
-<h2 id="CreateANotification">Creating a Notification</h2>
-
-<p>A {@link android.app.Notification} object defines the details of the notification
-message that is displayed in the status bar and notifications window, and any other
-alert settings, such as sounds and blinking lights.</p>
-
-<p>A status notification <em>requires</em> all of the following:</p>
-<ul>
- <li>An icon for the status bar</li>
- <li>A title and message, unless you define a
- <a href="#CustomExpandedView">custom notification layout</a></li>
- <li>A {@link android.app.PendingIntent}, to be fired when the notification is selected</li>
-</ul>
-<p>Optional settings for the status notification include:</p>
+<!-- ------------------------------------------------------------------------------------------ -->
+<h3 id="BigNotify">Big view</h3>
+<p>
+ A notification's big view appears only when the notification is expanded, which happens when the
+ notification is at the top of the notification drawer, or when the user expands the
+ notification with a gesture. Expanded notifications are available starting with Android 4.1.
+</p>
+<p>
+ The following screenshot shows an inbox-style notification:
+</p>
+<img src="{@docRoot}images/ui/notifications/bigpicture_notification_callouts.png"
+ alt=""
+ height="240"
+ id="figure4" />
+<p class="img-caption">
+ <strong>Figure 4.</strong> Big view notification.
+</p>
+<p>
+ Notice that the big view shares most of its visual elements with the normal view. The
+ only difference is callout number 7, the details area. Each big view style sets this area in
+ a different way. The available styles are:
+</p>
+<dl>
+ <dt>
+ Big picture style
+ </dt>
+ <dd>
+ The details area contains a bitmap up to 256 dp tall in its detail section.
+ </dd>
+ <dt>
+ Big text style
+ </dt>
+ <dd>
+ Displays a large text block in the details section.
+ </dd>
+ <dt>
+ Inbox style
+ </dt>
+ <dd>
+ Displays lines of text in the details section.
+ </dd>
+</dl>
+<p>
+ All of the big view styles also have the following content options that aren't
+ available in normal view:
+</p>
+<dl>
+ <dt>
+ Big content title
+ </dt>
+ <dd>
+ Allows you to override the normal view's content title with a title that appears only in
+ the expanded view.
+ </dd>
+ <dt>
+ Summary text
+ </dt>
+ <dd>
+ Allows you to add a line of text below the details area.
+ </dd>
+</dl>
+<p>
+ Applying a big view style to a notification is described in the section
+ <a href="#ApplyStyle">Applying a big view style to a notification</a>.
+</p>
+<!-- ------------------------------------------------------------------------------------------ -->
+<!-- ------------------------------------------------------------------------------------------ -->
+<h2 id="CreateNotification">Creating a Notification</h2>
+<p>
+ You specify the UI information and actions for a notification in a
+ {@link android.support.v4.app.NotificationCompat.Builder NotificationCompat.Builder} object.
+ To create the notification itself, you call
+ {@link android.support.v4.app.NotificationCompat.Builder#build
+ NotificationCompat.Builder.build()}, which returns a {@link android.app.Notification} object
+ containing your specifications.
+ To issue the notification, you pass the {@link android.app.Notification} object to the system
+ by calling {@link android.app.NotificationManager#notify NotificationManager.notify()}.
+</p>
+<!-- ------------------------------------------------------------------------------------------ -->
+<h3 id="Required">Required notification contents</h3>
+<p>
+ A {@link android.app.Notification} object <em>must</em> contain the following:
+</p>
<ul>
- <li>A ticker-text message for the status bar</li>
- <li>An alert sound</li>
- <li>A vibrate setting</li>
- <li>A flashing LED setting</li>
+ <li>
+ A small icon, set by
+ {@link android.support.v4.app.NotificationCompat.Builder#setSmallIcon setSmallIcon()}
+ </li>
+ <li>
+ A title, set by
+ {@link android.support.v4.app.NotificationCompat.Builder#setContentTitle setContentTitle()}
+ </li>
+ <li>
+ Detail text, set by
+ {@link android.support.v4.app.NotificationCompat.Builder#setContentText setContentText()}
+ </li>
</ul>
-
-<p>The starter-kit for a new notification includes the
-{@link android.app.Notification#Notification(int,CharSequence,long)} constructor and the
-{@link android.app.Notification#setLatestEventInfo(Context,CharSequence,CharSequence,PendingIntent)}
-method. These define all the required settings for a notification.
-The following snippet demonstrates a basic notification setup:</p>
-<pre>
-int icon = R.drawable.notification_icon; // icon from resources
-CharSequence tickerText = "Hello"; // ticker-text
-long when = System.currentTimeMillis(); // notification time
-Context context = getApplicationContext(); // application Context
-CharSequence contentTitle = "My notification"; // message title
-CharSequence contentText = "Hello World!"; // message text
-
-Intent notificationIntent = new Intent(this, MyClass.class);
-PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);
-
-// the next two lines initialize the Notification, using the configurations above
-Notification notification = new Notification(icon, tickerText, when);
-notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent);
-</pre>
-
-
-<h3 id="Updating">Updating the notification</h3>
-
-<p>You can update the information in your status notification as events
-continue to occur in your application. For example, when a new SMS text message arrives
-before previous messages have been read, the Messaging application updates the existing
-notification to display the total number of new messages received.
-This practice of updating an existing notification is much better than adding new
-notifications, because it avoids clutter in the notifications window.</p>
-
-<p>Because each notification is uniquely identified
-by the {@link android.app.NotificationManager} with an integer ID, you can revise the notification
-by calling {@link
-android.app.Notification#setLatestEventInfo(Context,CharSequence,CharSequence,PendingIntent)
-setLatestEventInfo()} with new values, change some field values of the notification, and then call
-{@link android.app.NotificationManager#notify(int,Notification) notify()} again.</p>
-
-<p>You can revise each property with the object member fields
-(except for the {@link android.content.Context} and the notification title and text). You
-should always revise the text message when you update the notification by calling
-{@link android.app.Notification#setLatestEventInfo(Context,CharSequence,CharSequence,PendingIntent)
-setLatestEventInfo()} with new values for <var>contentTitle</var> and <var>contentText</var>.
-Then call {@link android.app.NotificationManager#notify(int,Notification) notify()} to update the
-notification. (Of course, if you've created a <a href="#CustomExpandedView">custom notification
-layout</a>, then updating these title and text values has no effect.)</p>
-
-
-<h3 id="Sound">Adding a sound</h3>
-
-<p>You can alert the user with the default notification sound
-(which is defined by the user) or with a sound specified by your application.</p>
-
-<p>To use the user's default sound, add "DEFAULT_SOUND" to the <var>defaults</var> field:</p>
-<pre>
-notification.defaults |= Notification.DEFAULT_SOUND;
-</pre>
-
-<p>To use a different sound with your notifications, pass a Uri reference to the
-<var>sound</var> field.
-The following example uses a known audio file saved to the device SD card:</p>
-<pre>
-notification.sound = Uri.parse("file:///sdcard/notification/ringer.mp3");
-</pre>
-
-<p>In the next example, the audio file is chosen from the internal
-{@link android.provider.MediaStore.Audio.Media MediaStore}'s {@link android.content.ContentProvider}:</p>
+<h3 id="Optional">Optional notification contents and settings</h3>
+<p>
+ All other notification settings and contents are optional. To learn more about them,
+ see the reference documentation for {@link android.support.v4.app.NotificationCompat.Builder}.
+</p>
+<!-- ------------------------------------------------------------------------------------------ -->
+<h3 id="Actions">Notification actions</h3>
+<p>
+ Although they're optional, you should add at least one action to your notification.
+ An action allows users to go directly from the notification to an
+ {@link android.app.Activity} in your application, where they can look at one or more events
+ or do further work.
+</p>
+<p>
+ A notification can provide multiple actions. You should always define the action that's
+ triggered when the user clicks the notification; usually this action opens an
+ {@link android.app.Activity} in your application. You can also add buttons to the notification
+ that perform additional actions such as snoozing an alarm or responding immediately to a text
+ message; this feature is available as of Android 4.1. If you use additional action buttons, you
+ must also make their functionality available in an {@link android.app.Activity} in your app; see
+ the section <a href="#Compatibility">Handling compatibility</a> for more details.
+</p>
+<p>
+ Inside a {@link android.app.Notification}, the action itself is defined by a
+ {@link android.app.PendingIntent} containing an {@link android.content.Intent} that starts
+ an {@link android.app.Activity} in your application. To associate the
+ {@link android.app.PendingIntent} with a gesture, call the appropriate method of
+ {@link android.support.v4.app.NotificationCompat.Builder}. For example, if you want to start
+ {@link android.app.Activity} when the user clicks the notification text in
+ the notification drawer, you add the {@link android.app.PendingIntent} by calling
+ {@link android.support.v4.app.NotificationCompat.Builder#setContentIntent setContentIntent()}.
+</p>
+<p>
+ Starting an {@link android.app.Activity} when the user clicks the notification is the most
+ common action scenario. You can also start an {@link android.app.Activity} when the user
+ dismisses an {@link android.app.Activity}. In Android 4.1 and later, you can start an
+ {@link android.app.Activity} from an action button. To learn more, read the reference guide for
+ {@link android.support.v4.app.NotificationCompat.Builder}.
+</p>
+<!-- ------------------------------------------------------------------------------------------ -->
+<h3 id="SimpleNotification">Creating a simple notification</h3>
+<p>
+ The following snippet illustrates a simple notification that specifies an activity to open when
+ the user clicks the notification. Notice that the code creates a
+ {@link android.support.v4.app.TaskStackBuilder} object and uses it to create the
+ {@link android.app.PendingIntent} for the action. This pattern is explained in more detail
+ in the section <a href="#NotificationResponse">
+ Preserving Navigation when Starting an Activity</a>:
+</p>
<pre>
-notification.sound = Uri.withAppendedPath(Audio.Media.INTERNAL_CONTENT_URI, "6");
+NotificationCompat.Builder mBuilder =
+ new NotificationCompat.Builder(this)
+ .setSmallIcon(R.drawable.notification_icon)
+ .setContentTitle("My notification")
+ .setContentText("Hello World!");
+// Creates an explicit intent for an Activity in your app
+Intent resultIntent = new Intent(this, ResultActivity.class);
+
+// The stack builder object will contain an artificial back stack for the
+// started Activity.
+// This ensures that navigating backward from the Activity leads out of
+// your application to the Home screen.
+TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
+// Adds the back stack for the Intent (but not the Intent itself)
+stackBuilder.addParentStack(ResultActivity.class);
+// Adds the Intent that starts the Activity to the top of the stack
+stackBuilder.addNextIntent(resultIntent);
+PendingIntent resultPendingIntent =
+ stackBuilder.getPendingIntent(
+ 0,
+ PendingIntent.FLAG_UPDATE_CURRENT
+ );
+mBuilder.setContentIntent(resultPendingIntent);
+NotificationManager mNotificationManager =
+ (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
+// mId allows you to update the notification later on.
+mNotificationManager.notify(mId, mBuilder.build());
</pre>
-
-<p>In this case, the exact ID of the media file ("6") is known and appended to the content
-{@link android.net.Uri}. If you don't know the exact ID, you must query all the
-media available in the {@link android.provider.MediaStore} with a {@link
-android.content.ContentResolver}.
-See the <a href="{@docRoot}guide/topics/providers/content-providers.html">Content Providers</a>
-documentation for more information on using a ContentResolver.</p>
-
-<p>If you want the sound to continuously repeat until the user responds to the notification
-or the notification is cancelled, add {@link android.app.Notification#FLAG_INSISTENT} to the
-<var>flags</var> field.</p>
-
-<p class="note"><strong>Note:</strong> If the <var>defaults</var> field includes
-{@link android.app.Notification#DEFAULT_SOUND}, then the default sound overrides any sound defined
-by the <var>sound</var> field.</p>
-
-
-<h3 id="Vibration">Adding vibration</h3>
-
-<p>You can alert the user with the the default
-vibration pattern or with a vibration pattern defined by your application.</p>
-
-<p>To use the default pattern, add {@link android.app.Notification#DEFAULT_VIBRATE} to the
-<var>defaults</var> field:</p>
+<p>That's it. Your user has now been notified.</p>
+<!-- ------------------------------------------------------------------------------------------ -->
+<h3 id="ApplyStyle">Applying a big view style to a notification</h3>
+<p>
+ To have a notification appear in a big view when it's expanded, first create a
+ {@link android.support.v4.app.NotificationCompat.Builder} object with the normal view options
+ you want. Next, call {@link android.support.v4.app.NotificationCompat.Builder#setStyle
+ Builder.setStyle()} with a big view style object as its argument.
+</p>
+<p>
+ Remember that expanded notifications are not available on platforms prior to Android 4.1. To
+ learn how to handle notifications for Android 4.1 and for earlier platforms, read the
+ section <a href="#Compatibility">Handling compatibility</a>.
+</p>
+<p>
+ For example, the following code snippet demonstrates how to alter the notification created
+ in the previous snippet to use the Inbox big view style:
+</p>
<pre>
-notification.defaults |= Notification.DEFAULT_VIBRATE;
+NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this)
+ .setSmallIcon(R.drawable.notification_icon)
+ .setContentTitle("Event tracker")
+ .setContentText("Events received")
+NotificationCompat.InboxStyle inboxStyle =
+ new NotificationCompat.InboxStyle();
+String[] events = new String[6];
+// Sets a title for the Inbox style big view
+inboxStyle.SetBigContentTitle("Event tracker details:");
+...
+// Moves events into the big view
+for (int i=0; i &lt; events.length; i++) {
+
+ inboxStyle.addLine(events[i]);
+}
+// Moves the big view style object into the notification object.
+mBuilder.setStyle(inBoxStyle);
+...
+// Issue the notification here.
</pre>
-
-<p>To define your own vibration pattern, pass an array of <em>long</em> values to the
-<var>vibrate</var> field:</p>
+<h3 id="Compatibility">Handling compatibility</h3>
+<p>
+ Not all notification features are available for a particular version, even though
+ the methods to set them are in the support library class
+ {@link android.support.v4.app.NotificationCompat.Builder NotificationCompat.Builder}.
+ For example, action buttons, which depend on expanded notifications, only appear on Android
+ 4.1 and higher, because expanded notifications themselves are only available on
+ Android 4.1 and higher.
+</p>
+<p>
+ To ensure the best compatibility, create notifications with
+ {@link android.support.v4.app.NotificationCompat NotificationCompat} and its subclasses,
+ particularly {@link android.support.v4.app.NotificationCompat.Builder
+ NotificationCompat.Builder}. In addition, follow this process when you implement a notification:
+</p>
+<ol>
+ <li>
+ Provide all of the notification's functionality to all users, regardless of the version
+ they're using. To do this, verify that all of the functionality is available from an
+ {@link android.app.Activity} in your app. You may want to add a new
+ {@link android.app.Activity} to do this.
+ <p>
+ For example, if you want to use
+ {@link android.support.v4.app.NotificationCompat.Builder#addAction addAction()} to
+ provide a control that stops and starts media playback, first implement this
+ control in an {@link android.app.Activity} in your app.
+ </p>
+ </li>
+ <li>
+ Ensure that all users can get to the functionality in the {@link android.app.Activity},
+ by having it start when users click the notification. To do this,
+ create a {@link android.app.PendingIntent} for the {@link android.app.Activity}. Call
+ {@link android.support.v4.app.NotificationCompat.Builder#setContentIntent
+ setContentIntent()} to add the {@link android.app.PendingIntent} to the notification.
+ </li>
+ <li>
+ Now add the expanded notification features you want to use to the notification. Remember
+ that any functionality you add also has to be available in the {@link android.app.Activity}
+ that starts when users click the notification.
+ </li>
+</ol>
+<!-- ------------------------------------------------------------------------------------------ -->
+<!-- ------------------------------------------------------------------------------------------ -->
+<h2 id="Managing">Managing Notifications</h2>
+<p>
+ When you need to issue a notification multiple times for the same type of event, you
+ should avoid making a completely new notification. Instead, you should consider updating a
+ previous notification, either by changing some of its values or by adding to it, or both.
+</p>
+<p>
+ For example, Gmail notifies the user that new emails have arrived by increasing its count of
+ unread messages and by adding a summary of each email to the notification. This is called
+ "stacking" the notification; it's described in more detail in the
+ <a href="{@docRoot}design/patterns/notifications.html">Notifications</a> Design guide.
+</p>
+<p class="note">
+ <strong>Note:</strong> This Gmail feature requires the "inbox" big view style, which is
+ part of the expanded notification feature available starting in Android 4.1.
+</p>
+<p>
+ The following section describes how to update notifications and also how to remove them.
+</p>
+<h3 id="Updating">Updating notifications</h3>
+<p>
+ To set up a notification so it can be updated, issue it with a notification ID by
+ calling {@link android.app.NotificationManager#notify(int, Notification)
+ NotificationManager.notify(ID, notification)}. To update this notification once you've issued
+ it, update or create a {@link android.support.v4.app.NotificationCompat.Builder} object,
+ build a {@link android.app.Notification} object from it, and issue the
+ {@link android.app.Notification} with the same ID you used previously. If
+ the previous notification is still visible, the system updates it from the contents of
+ the {@link android.app.Notification} object. If the previous notification has been dismissed, a
+ new notification is created instead.
+</p>
+<p>
+ The following snippet demonstrates a notification that is updated to reflect the
+ number of events that have occurred. It stacks the notification, showing a summary:
+</p>
<pre>
-long[] vibrate = {0,100,200,300};
-notification.vibrate = vibrate;
+mNotificationManager =
+ (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
+// Sets an ID for the notification, so it can be updated
+int notifyID = 1;
+mNotifyBuilder = new NotificationCompat.Builder(this)
+ .setContentTitle("New Message")
+ .setContentText("You've received new messages.")
+ .setSmallIcon(R.drawable.ic_notify_status)
+numMessages = 0;
+// Start of a loop that processes data and then notifies the user
+...
+ mNotifyBuilder.setContentText(currentText)
+ .setNumber(++numMessages);
+ // Because the ID remains unchanged, the existing notification is
+ // updated.
+ mNotificationManager.notify(
+ notifyID,
+ mNotifyBuilder.build());
+...
</pre>
-
-<p>The long array defines the alternating pattern for the length of vibration off and on
-(in milliseconds). The first value is how long to wait (off) before beginning, the second
-value is the length of the first vibration, the third is the next length off, and so on.
-The pattern can be as long as you like, but it can't be set to repeat.
+<p>
+ This produces a notification that looks like this:
</p>
-
-<p class="note"><strong>Note:</strong> If the <var>defaults</var> field includes
-{@link android.app.Notification#DEFAULT_VIBRATE}, then the default vibration overrides any vibration
-defined by the
-<var>vibrate</var> field.</p>
-
-
-<h3 id="Lights">Adding flashing lights</h3>
-
-<p>To alert the user by flashing LED lights, you can implement the default
-light pattern (if available), or define your own color and pattern for the lights.</p>
-
-<p>To use the default light setting, add {@link android.app.Notification#DEFAULT_LIGHTS} to the
-<var>defaults</var> field:</p>
+<img
+ id="figure5"
+ src="{@docRoot}images/ui/notifications/updated_notification.png"
+ alt=""
+ height="118"/>
+<p class="img-caption">
+ <strong>Figure 5.</strong> Updated notification displayed in the notification drawer.
+</p>
+<!-- ------------------------------------------------------------------------------------------ -->
+<h3 id="Removing">Removing notifications</h3>
+<p>
+ Notifications remain visible until one of the following happens:
+</p>
+<ul>
+ <li>
+ The user dismisses the notification either individually or by using "Clear All" (if
+ the notification can be cleared).
+ </li>
+ <li>
+ The user clicks the notification, and you called
+ {@link android.support.v4.app.NotificationCompat.Builder#setAutoCancel setAutoCancel()} when
+ you created the notification.
+ </li>
+ <li>
+ You call {@link android.app.NotificationManager#cancel(int) cancel()} for a specific
+ notification ID. This method also deletes ongoing notifications.
+ </li>
+ <li>
+ You call {@link android.app.NotificationManager#cancelAll() cancelAll()}, which removes
+ all of the notifications you previously issued.
+ </li>
+</ul>
+<!-- ------------------------------------------------------------------------------------------ -->
+<!-- ------------------------------------------------------------------------------------------ -->
+<h2 id="NotificationResponse">Preserving Navigation when Starting an Activity</h2>
+<p>
+ When you start an {@link android.app.Activity} from a notification, you must preserve the
+ user's expected navigation experience. Clicking <i>Back</i> should take the user back through
+ the application's normal work flow to the Home screen, and clicking <i>Recents</i> should show
+ the {@link android.app.Activity} as a separate task. To preserve the navigation experience, you
+ should start the {@link android.app.Activity} in a fresh task. How you set up the
+ {@link android.app.PendingIntent} to give you a fresh task depends on the nature of the
+ {@link android.app.Activity} you're starting. There are two general situations:
+</p>
+<dl>
+ <dt>
+ Regular activity
+ </dt>
+ <dd>
+ You're starting an {@link android.app.Activity} that's part of the application's normal
+ workflow. In this situation, set up the {@link android.app.PendingIntent} to
+ start a fresh task, and provide the {@link android.app.PendingIntent} with a back stack
+ that reproduces the application's normal <i>Back</i> behavior.
+ <p>
+ Notifications from the Gmail app demonstrate this. When you click a notification for
+ a single email message, you see the message itself. Touching <b>Back</b> takes you
+ backwards through Gmail to the Home screen, just as if you had entered Gmail from the
+ Home screen rather than entering it from a notification.
+ </p>
+ <p>
+ This happens regardless of the application you were in when you touched the
+ notification. For example, if you're in Gmail composing a message, and you click a
+ notification for a single email, you go immediately to that email. Touching <i>Back</i>
+ takes you to the inbox and then the Home screen, rather than taking you to the
+ message you were composing.
+ </p>
+ </dd>
+ <dt>
+ Special activity
+ </dt>
+ <dd>
+ The user only sees this {@link android.app.Activity} if it's started from a notification.
+ In a sense, the {@link android.app.Activity} extends the notification by providing
+ information that would be hard to display in the notification itself. For this situation,
+ set up the {@link android.app.PendingIntent} to start in a fresh task. There's no need to
+ create a back stack, though, because the started {@link android.app.Activity} isn't part of
+ the application's activity flow. Clicking <i>Back</i> will still take the user to the
+ Home screen.
+ </dd>
+</dl>
+<!-- ------------------------------------------------------------------------------------------ -->
+<h3 id="DirectEntry">Setting up a regular activity PendingIntent</h3>
+<p>
+ To set up a {@link android.app.PendingIntent} that starts a direct entry
+ {@link android.app.Activity}, follow these steps:
+</p>
+<ol>
+ <li>
+ Define your application's {@link android.app.Activity} hierarchy in the manifest.
+ <ol style="list-style-type: lower-alpha;">
+ <li>
+ Add support for Android 4.0.3 and earlier. To do this, specify the parent of the
+ {@link android.app.Activity} you're starting by adding a
+<code><a href="{@docRoot}guide/topics/manifest/meta-data-element.html">&lt;meta-data&gt;</a></code>
+ element as the child of the
+<code><a href="{@docRoot}guide/topics/manifest/activity-element.html">&lt;activity&gt;</a></code>.
+ <p>
+ For this element, set
+<code><a href="{@docRoot}guide/topics/manifest/meta-data-element.html#nm">android:name</a>="android.support.PARENT_ACTIVITY"</code>.
+ Set
+<code><a href="{@docRoot}/guide/topics/manifest/meta-data-element.html#val">android:value</a>="&lt;parent_activity_name&gt;"</code>
+ where <code>&lt;parent_activity_name&gt;</code> is the value of
+<code><a href="{@docRoot}guide/topics/manifest/meta-data-element.html#nm">android:name</a></code>
+ for the parent
+<code><a href="{@docRoot}guide/topics/manifest/activity-element.html">&lt;activity&gt;</a></code>
+ element. See the following XML for an example.
+ </p>
+ </li>
+ <li>
+ Also add support for Android 4.1 and later. To do this, add the
+<code><a href="{@docRoot}guide/topics/manifest/activity-element.html#parent">android:parentActivityName</a></code>
+ attribute to the
+<code><a href="{@docRoot}guide/topics/manifest/activity-element.html">&lt;activity&gt;</a></code>
+ element of the {@link android.app.Activity} you're starting.
+ </li>
+ </ol>
+ <p>
+ The final XML should look like this:
+ </p>
<pre>
-notification.defaults |= Notification.DEFAULT_LIGHTS;
+&lt;activity
+ android:name=".MainActivity"
+ android:label="&#64;string/app_name" &gt;
+ &lt;intent-filter&gt;
+ &lt;action android:name="android.intent.action.MAIN" /&gt;
+ &lt;category android:name="android.intent.category.LAUNCHER" /&gt;
+ &lt;/intent-filter&gt;
+&lt;/activity&gt;
+&lt;activity
+ android:name=".ResultActivity"
+ android:parentActivityName=".MainActivity"&gt;
+ &lt;meta-data
+ android:name="android.support.PARENT_ACTIVITY"
+ android:value=".MainActivity"/&gt;
+&lt;/activity&gt;
</pre>
-
-<p>To define your own color and pattern, define a value for the <var>ledARGB</var> field
-(for the color), the <var>ledOffMS</var> field (length of time, in milliseconds, to
-keep the light off), the <var>ledOnMS</var> (length of time, in milliseconds, to keep the light on),
-and also add {@link android.app.Notification#FLAG_SHOW_LIGHTS} to the <var>flags</var> field:</p>
+ </li>
+ <li>
+ Create a back stack based on the {@link android.content.Intent} that starts the
+ {@link android.app.Activity}:
+ <ol style="list-style-type: lower-alpha;">
+ <li>
+ Create the {@link android.content.Intent} to start the {@link android.app.Activity}.
+ </li>
+ <li>
+ Create a stack builder by calling {@link android.app.TaskStackBuilder#create
+ TaskStackBuilder.create()}.
+ </li>
+ <li>
+ Add the back stack to the stack builder by calling
+ {@link android.support.v4.app.TaskStackBuilder#addParentStack addParentStack()}.
+ For each {@link android.app.Activity} in the hierarchy you've defined in the
+ manifest, the back stack contains an {@link android.content.Intent} object that
+ starts the {@link android.app.Activity}. This method also adds flags that start the
+ stack in a fresh task.
+ <p class="note">
+ <strong>Note:</strong> Although the argument to
+ {@link android.support.v4.app.TaskStackBuilder#addParentStack addParentStack()}
+ is a reference to the started {@link android.app.Activity}, the method call
+ doesn't add the {@link android.content.Intent} that starts the
+ {@link android.app.Activity}. Instead, that's taken care of in the next step.
+ </p>
+ </li>
+ <li>
+ Add the {@link android.content.Intent} that starts the {@link android.app.Activity}
+ from the notification, by calling
+ {@link android.support.v4.app.TaskStackBuilder#addNextIntent addNextIntent()}.
+ Pass the {@link android.content.Intent} you created in the first step as the
+ argument to
+ {@link android.support.v4.app.TaskStackBuilder#addNextIntent addNextIntent()}.
+ </li>
+ <li>
+ If you need to, add arguments to {@link android.content.Intent} objects on the
+ stack by calling {@link android.support.v4.app.TaskStackBuilder#editIntentAt
+ TaskStackBuilder.editIntentAt()}. This is sometimes necessary to ensure that the
+ target {@link android.app.Activity} displays meaningful data when the user navigates
+ to it using <i>Back</i>.
+ </li>
+ <li>
+ Get a {@link android.app.PendingIntent} for this back stack by calling
+ {@link android.support.v4.app.TaskStackBuilder#getPendingIntent getPendingIntent()}.
+ You can then use this {@link android.app.PendingIntent} as the argument to
+ {@link android.support.v4.app.NotificationCompat.Builder#setContentIntent
+ setContentIntent()}.
+ </li>
+ </ol>
+ </li>
+</ol>
+<p>
+ The following code snippet demonstrates the process:
+</p>
<pre>
-notification.ledARGB = 0xff00ff00;
-notification.ledOnMS = 300;
-notification.ledOffMS = 1000;
-notification.flags |= Notification.FLAG_SHOW_LIGHTS;
+...
+Intent resultIntent = new Intent(this, ResultActivity.class);
+TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
+// Adds the back stack
+stackBuilder.addParentStack(ResultActivity.class);
+// Adds the Intent to the top of the stack
+stackBuilder.addNextIntent(resultIntent);
+// Gets a PendingIntent containing the entire back stack
+PendingIntent resultPendingIntent =
+ stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);
+...
+NotificationCompat.Builder builder = new NotificationCompat.Builder(this);
+builder.setContentIntent(resultPendingIntent);
+NotificationManager mNotificationManager =
+ (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
+mNotificationManager.notify(id, builder.build());
</pre>
-
-<p>In this example, the green light repeatedly flashes on for 300 milliseconds and
-turns off for one second. Not every color in the spectrum is supported by the
-device LEDs, and not every device supports the same colors, so the hardware
-estimates to the best of its ability. Green is the most common notification color.</p>
-
-
-<h3 id="More">More features</h3>
-
-<p>You can add several more features to your notifications
-using {@link android.app.Notification} fields and flags. Some useful features include the
-following:</p>
-
-<dl>
- <dt>{@link android.app.Notification#FLAG_AUTO_CANCEL} flag</dt>
- <dd>Add this to the <var>flags</var> field to automatically cancel the notification
- after it is selected from the notifications window.</dd>
- <dt>{@link android.app.Notification#FLAG_INSISTENT} flag</dt>
- <dd>Add this to the <var>flags</var> field to repeat the audio until the
- user responds.</dd>
- <dt>{@link android.app.Notification#FLAG_ONGOING_EVENT} flag</dt>
- <dd>Add this to the <var>flags</var> field to group the notification under the "Ongoing"
- title in the notifications window. This indicates that the application is on-going &mdash;
- its processes are still running in the background, even when the application is not
- visible (such as with music or a phone call).</dd>
- <dt>{@link android.app.Notification#FLAG_NO_CLEAR} flag</dt>
- <dd>Add this to the <var>flags</var> field to indicate that the notification should
- <em>not</em> be cleared by the "Clear notifications" button. This is particularly useful if
- your notification is on-going.</dd>
- <dt>{@link android.app.Notification#number} field</dt>
- <dd>This value indicates the current number of events represented by the notification.
- The appropriate number is overlaid on top of the status icon.
- If you intend to use this field, then you must start with "1" when the Notification is first
- created. (If you change the value from zero to anything greater during an update, the number
- is not shown.)</dd>
- <dt>{@link android.app.Notification#iconLevel} field</dt>
- <dd>This value indicates the current level of a
- {@link android.graphics.drawable.LevelListDrawable} that is used for the notification icon.
- You can animate the icon in the status bar by changing this value to correlate with the
- drawable's defined in a LevelListDrawable. See the {@link android.graphics.drawable.LevelListDrawable}
- reference for more information.</dd>
-</dl>
-
-<p>See the {@link android.app.Notification} class reference for more information about additional
-features that you can customize for your application.</p>
-
-
-<h2 id="CustomExpandedView">Creating a Custom Notification Layout</h2>
-
-<div class="figure" style="width:200px;margin-top:0">
-<img src="{@docRoot}images/custom_message.png" alt="" />
-<p class="img-caption"><strong>Figure 3.</strong> Notification with a custom layout.</p>
-</div>
-
-<p>By default, the notification that appears in the notifications window includes a title
-and the message text.
-These are defined by the <var>contentTitle</var> and <var>contentText</var>
-parameters of the {@link android.app.Notification#setLatestEventInfo(Context,CharSequence,CharSequence,PendingIntent)
-setLatestEventInfo()} method. However, you can also define a custom layout for the
-notification using
-{@link android.widget.RemoteViews}. Figure 3 shows an example of a
-custom notification layout. It looks similar to the default notification, but is
-actually created with a custom XML layout.</p>
-
-<p>To define your own layout for the notification,
-instantiate a {@link android.widget.RemoteViews} object that inflates a custom layout file, then
-pass the {@link android.widget.RemoteViews} to the <var>contentView</var> field of your
-Notification.</p>
-
-<p>Creating a custom notification layout is best understood with an example:</p>
-
+<!-- ------------------------------------------------------------------------------------------ -->
+<h3 id="ExtendedNotification">Setting up a special activity PendingIntent</h3>
+<p>
+ The following section describes how to set up a special activity
+ {@link android.app.PendingIntent}.
+</p>
+<p>
+ A special {@link android.app.Activity} doesn't need a back stack, so you don't have to
+ define its {@link android.app.Activity} hierarchy in the manifest, and you don't have
+ to call
+ {@link android.support.v4.app.TaskStackBuilder#addParentStack addParentStack()} to build a
+ back stack. Instead, use the manifest to set up the {@link android.app.Activity} task options,
+ and create the {@link android.app.PendingIntent} by calling
+ {@link android.app.PendingIntent#getActivity getActivity()}:
+</p>
<ol>
- <li>Create the XML layout for the notification.
- For example, the following layout is called <code>custom_notification.xml</code>:
+ <li>
+ In your manifest, add the following attributes to the
+<code><a href="{@docRoot}guide/topics/manifest/activity-element.html">&lt;activity&gt;</a></code>
+ element for the {@link android.app.Activity}
+ <dl>
+ <dt>
+<code><a href="guide/topics/manifest/activity-element.html#nm">android:name</a>="<i>activityclass</i>"</code>
+ </dt>
+ <dd>
+ The activity's fully-qualified class name.
+ </dd>
+ <dt>
+<code><a href="{@docRoot}guide/topics/manifest/activity-element.html#aff">android:taskAffinity</a>=""</code>
+ </dt>
+ <dd>
+ Combined with the
+ {@link android.content.Intent#FLAG_ACTIVITY_NEW_TASK FLAG_ACTIVITY_NEW_TASK} flag
+ that you set in code, this ensures that this {@link android.app.Activity} doesn't
+ go into the application's default task. Any existing tasks that have the
+ application's default affinity are not affected.
+ </dd>
+ <dt>
+<code><a href="{@docRoot}guide/topics/manifest/activity-element.html#exclude">android:excludeFromRecents</a>="true"</code>
+ </dt>
+ <dd>
+ Excludes the new task from <i>Recents</i>, so that the user can't accidentally
+ navigate back to it.
+ </dd>
+ </dl>
+ <p>
+ This snippet shows the element:
+ </p>
<pre>
-&lt;RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@+id/layout"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:padding="10dp" >
- &lt;ImageView android:id="@+id/image"
- android:layout_width="wrap_content"
- android:layout_height="fill_parent"
- android:layout_alignParentLeft="true"
- android:layout_marginRight="10dp" />
- &lt;TextView android:id="@+id/title"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_toRightOf="@id/image"
- style="@style/NotificationTitle" />
- &lt;TextView android:id="@+id/text"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_toRightOf="@id/image"
- android:layout_below="@id/title"
- style="@style/NotificationText" />
-&lt;/RelativeLayout>
+&lt;activity
+ android:name=".ResultActivity"
+...
+ android:launchMode="singleTask"
+ android:taskAffinity=""
+ android:excludeFromRecents="true"&gt;
+&lt;/activity&gt;
+...
</pre>
-
- <p>Notice that the two {@link android.widget.TextView} elements include the {@code style}
-attribute. It's important that you use style resources for the text in your custom
-notifications, because the background color of the notification can vary across different
-devices and platform versions. Beginning with Android 2.3 (API level 9), the system defines a
-style for the text it uses for the default notification layouts. Thus, you should apply
-that style when running on Android 2.3 or higher to ensure that your text is visible against
-the background.</p>
-
- <p>For example, to use the standard text colors on versions of Android lower than 2.3, you
-should use the following styles for {@code res/values/styles.xml}:</p>
+ </li>
+ <li>
+ Build and issue the notification:
+ <ol style="list-style-type: lower-alpha;">
+ <li>
+ Create an {@link android.content.Intent} that starts the
+ {@link android.app.Activity}.
+ </li>
+ <li>
+ Set the {@link android.app.Activity} to start in a new, empty task by calling
+ {@link android.content.Intent#setFlags setFlags()} with the flags
+ {@link android.content.Intent#FLAG_ACTIVITY_NEW_TASK FLAG_ACTIVITY_NEW_TASK}
+ and
+ {@link android.content.Intent#FLAG_ACTIVITY_CLEAR_TASK FLAG_ACTIVITY_CLEAR_TASK}.
+ </li>
+ <li>
+ Set any other options you need for the {@link android.content.Intent}.
+ </li>
+ <li>
+ Create a {@link android.app.PendingIntent} from the {@link android.content.Intent}
+ by calling {@link android.app.PendingIntent#getActivity getActivity()}.
+ You can then use this {@link android.app.PendingIntent} as the argument to
+ {@link android.support.v4.app.NotificationCompat.Builder#setContentIntent
+ setContentIntent()}.
+ </li>
+ </ol>
+ <p>
+ The following code snippet demonstrates the process:
+ </p>
<pre>
-&lt;?xml version="1.0" encoding="utf-8"?>
-&lt;resources>
- &lt;style name="NotificationText">
- &lt;item name="android:textColor">?android:attr/textColorPrimary&lt;/item>
- &lt;/style>
- &lt;style name="NotificationTitle">
- &lt;item name="android:textColor">?android:attr/textColorPrimary&lt;/item>
- &lt;item name="android:textStyle">bold&lt;/item>
- &lt;/style>
- &lt;!-- If you want a slightly different color for some text,
- consider using ?android:attr/textColorSecondary -->
-&lt;/resources>
+// Instantiate a Builder object.
+NotificationCompat.Builder builder = new NotificationCompat.Builder(this);
+// Creates an Intent for the Activity
+Intent notifyIntent =
+ new Intent(new ComponentName(this, ResultActivity.class));
+// Sets the Activity to start in a new, empty task
+notifyIntent.setFlags(FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_CLEAR_TASK);
+// Creates the PendingIntent
+PendingIntent notifyIntent =
+ PendingIntent.getActivity(
+ this,
+ 0,
+ notifyIntent
+ PendingIntent.FLAG_UPDATE_CURRENT
+);
+
+// Puts the PendingIntent into the notification builder
+builder.setContentIntent(notifyIntent);
+// Notifications are issued by sending them to the
+// NotificationManager system service.
+NotificationManager mNotificationManager =
+ (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
+// Builds an anonymous Notification object from the builder, and
+// passes it to the NotificationManager
+mNotificationManager.notify(id, builder.build());
</pre>
- <p>Then, to apply the system's default colors for notifications on Android
-2.3 and higher, use the following styles for {@code res/values-v9/styles.xml}:</p>
+ </li>
+</ol>
+<!-- ------------------------------------------------------------------------------------------ -->
+<!-- ------------------------------------------------------------------------------------------ -->
+<h2 id="Progress">Displaying Progress in a Notification</h2>
+<p>
+ Notifications can include an animated progress indicator that shows users the status
+ of an ongoing operation. If you can estimate how long the operation takes and how much of it
+ is complete at any time, use the "determinate" form of the indicator
+ (a progress bar). If you can't estimate the length of the operation, use the
+ "indeterminate" form of the indicator (an activity indicator).
+</p>
+<p>
+ Progress indicators are displayed with the platform's implementation of the
+ {@link android.widget.ProgressBar} class.
+</p>
+<p>
+ To use a progress indicator on platforms starting with Android 4.0, call
+ {@link android.support.v4.app.NotificationCompat.Builder#setProgress setProgress()}. For
+ previous versions, you must create your own custom notification layout that
+ includes a {@link android.widget.ProgressBar} view.
+</p>
+<p>
+ The following sections describe how to display progress in a notification using
+ {@link android.support.v4.app.NotificationCompat.Builder#setProgress setProgress()}.
+</p>
+<!-- ------------------------------------------------------------------------------------------ -->
+<h3 id="FixedProgress">Displaying a fixed-duration progress indicator</h3>
+<p>
+ To display a determinate progress bar, add the bar to your notification by calling
+ {@link android.support.v4.app.NotificationCompat.Builder#setProgress setProgress()
+ setProgress(max, progress, false)} and then issue the notification. As your operation proceeds,
+ increment <code>progress</code>, and update the notification. At the end of the operation,
+ <code>progress</code> should equal <code>max</code>. A common way to call
+ {@link android.support.v4.app.NotificationCompat.Builder#setProgress setProgress()}
+ is to set <code>max</code> to 100 and then increment <code>progress</code> as a
+ "percent complete" value for the operation.
+</p>
+<p>
+ You can either leave the progress bar showing when the operation is done, or remove it. In
+ either case, remember to update the notification text to show that the operation is complete.
+ To remove the progress bar, call
+ {@link android.support.v4.app.NotificationCompat.Builder#setProgress setProgress()
+ setProgress(0, 0, false)}. For example:
+</p>
<pre>
-&lt;?xml version="1.0" encoding="utf-8"?>
-&lt;resources>
- &lt;style name="NotificationText" parent="android:TextAppearance.StatusBar.EventContent" />
- &lt;style name="NotificationTitle" parent="android:TextAppearance.StatusBar.EventContent.Title" />
-&lt;/resources>
+...
+mNotifyManager =
+ (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
+mBuilder = new NotificationCompat.Builder(this);
+mBuilder.setContentTitle("Picture Download")
+ .setContentText("Download in progress")
+ .setSmallIcon(R.drawable.ic_notification);
+// Start a lengthy operation in a background thread
+new Thread(
+ new Runnable() {
+ &#64;Override
+ public void run() {
+ int incr;
+ // Do the "lengthy" operation 20 times
+ for (incr = 0; incr &lt;= 100; incr+=5) {
+ // Sets the progress indicator to a max value, the
+ // current completion percentage, and "determinate"
+ // state
+ mBuilder.setProgress(100, incr, false);
+ // Displays the progress bar for the first time.
+ mNotifyManager.notify(0, mBuilder.build());
+ // Sleeps the thread, simulating an operation
+ // that takes time
+ try {
+ // Sleep for 5 seconds
+ Thread.sleep(5*1000);
+ } catch (InterruptedException e) {
+ Log.d(TAG, "sleep failure");
+ }
+ }
+ // When the loop is finished, updates the notification
+ mBuilder.setContentText("Download complete")
+ // Removes the progress bar
+ .setProgress(0,0,false);
+ mNotifyManager.notify(ID, mBuilder.build());
+ }
+ }
+// Starts the thread by calling the run() method in its Runnable
+).start();
</pre>
- <p>Now, when running on Android 2.3 (API level 9) or higher, the text in your custom view will
-use the same colors that the system does for default notifications. This is important because later
-versions of Android actually change the background color of the notifications to be dark. Inheriting
-the system's styles ensures that your text will be light in such cases, but also if the background
-is some other unexpected color, your text will also change as appropriate.</p>
- </li>
-
- <li>Now, in the application code, use the RemoveViews
- methods to define the image and text. Then pass the RemoteViews object to the <var>contentView</var>
- field of the Notification, as shown in this example:
+<p>
+ The resulting notifications are shown in figure 6. On the left side is a snapshot of the
+ notification during the operation; on the right side is a snapshot of it after the operation
+ has finished.
+</p>
+<img
+ id="figure6"
+ src="{@docRoot}images/ui/notifications/progress_bar_summary.png"
+ height="84"
+ alt="" />
+<p class="img-caption">
+<strong>Figure 6.</strong> The progress bar during and after the operation.</p>
+<!-- ------------------------------------------------------------------------------------------ -->
+<h3 id="ActivityIndicator">Displaying a continuing activity indicator</h3>
+<p>
+ To display an indeterminate activity indicator, add it to your notification with
+ {@link android.support.v4.app.NotificationCompat.Builder#setProgress setProgress(0, 0, true)}
+ (the first two arguments are ignored), and issue the notification. The result is an indicator
+ that has the same style as a progress bar, except that its animation is ongoing.
+</p>
+<p>
+ Issue the notification at the beginning of the operation. The animation will run until you
+ modify your notification. When the operation is done, call
+ {@link android.support.v4.app.NotificationCompat.Builder#setProgress setProgress()
+ setProgress(0, 0, false)} and then update the notification to remove the activity indicator.
+ Always do this; otherwise, the animation will run even when the operation is complete. Also
+ remember to change the notification text to indicate that the operation is complete.
+</p>
+<p>
+ To see how activity indicators work, refer to the preceding snippet. Locate the following lines:
+</p>
<pre>
-RemoteViews contentView = new RemoteViews(getPackageName(), R.layout.custom_notification_layout);
-contentView.setImageViewResource(R.id.image, R.drawable.notification_image);
-contentView.setTextViewText(R.id.title, "Custom notification");
-contentView.setTextViewText(R.id.text, "This is a custom layout");
-notification.contentView = contentView;
+// Sets the progress indicator to a max value, the current completion
+// percentage, and "determinate" state
+mBuilder.setProgress(100, incr, false);
+// Issues the notification
+mNotifyManager.notify(0, mBuilder.build());
</pre>
-
- <p>As shown here, pass the application's package name and the layout
- resource ID to the RemoteViews constructor. Then, define the content for the ImageView and TextView,
- using the {@link android.widget.RemoteViews#setImageViewResource(int, int) setImageViewResource()}
- and {@link android.widget.RemoteViews#setTextViewText(int, CharSequence) setTextViewText()}.
- In each case, pass the reference ID of the appropriate View object that you want to set, along with
- the value for that View. Finally, the RemoteViews object is passed to the Notification in the
- <var>contentView</var> field.</p>
- </li>
-
- <li>Because you don't need the
- {@link android.app.Notification#setLatestEventInfo(Context,CharSequence,CharSequence,PendingIntent)
- setLatestEventInfo()} method when using a custom view, you must define the Intent for the Notification
- with the <var>contentIntent</var> field, as in this example:
+<p>
+ Replace the lines you've found with the following lines:
+</p>
<pre>
-Intent notificationIntent = new Intent(this, MyClass.class);
-PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);
-notification.contentIntent = contentIntent;
+ // Sets an activity indicator for an operation of indeterminate length
+mBuilder.setProgress(0, 0, false);
+// Issues the notification
+mNotifyManager.notify(0, mBuilder.build());
</pre>
- </li>
-
- <li>The notification can now be sent as usual:
- <pre>mNotificationManager.notify(CUSTOM_VIEW_ID, notification);</pre>
- </li>
+<p>
+ The resulting indicator is shown in figure 7:
+</p>
+<img
+ id="figure7"
+ src="{@docRoot}images/ui/notifications/activity_indicator.png"
+ height="99"
+ alt="" />
+<p class="img-caption"><strong>Figure 7.</strong> An ongoing activity indicator.</p>
+
+<!-- ------------------------------------------------------------------------------------------ -->
+<!-- ------------------------------------------------------------------------------------------ -->
+<!-- ------------------------------------------------------------------------------------------ -->
+
+<!-- ------------------------------------------------------------------------------------------ -->
+<h2 id="CustomNotification">Custom Notification Layouts</h2>
+<p>
+ The notifications framework allows you to define a custom notification layout, which
+ defines the notification's appearance in a {@link android.widget.RemoteViews} object.
+ Custom layout notifications are similar to normal notifications, but they're based on a
+ {@link android.widget.RemoteViews} defined in a XML layout file.
+</p>
+<p>
+ The height available for a custom notification layout depends on the notification view. Normal
+ view layouts are limited to 64 dp, and expanded view layouts are limited to 256 dp.
+</p>
+<p>
+ To define a custom notification layout, start by instantiating a
+ {@link android.widget.RemoteViews} object that inflates an XML layout file. Then,
+ instead of calling methods such as
+ {@link android.support.v4.app.NotificationCompat.Builder#setContentTitle setContentTitle()},
+ call {@link android.support.v4.app.NotificationCompat.Builder#setContent setContent()}. To set
+ content details in the custom notification, use the methods in
+ {@link android.widget.RemoteViews} to set the values of the view's children:
+</p>
+<ol>
+ <li>
+ Create an XML layout for the notification in a separate file. You can use any file name
+ you wish, but you must use the extension <code>.xml</code>
+ </li>
+ <li>
+ In your app, use {@link android.widget.RemoteViews} methods to define your notification's
+ icons and text. Put this {@link android.widget.RemoteViews} object into your
+ {@link android.support.v4.app.NotificationCompat.Builder} by calling
+ {@link android.support.v4.app.NotificationCompat.Builder#setContent setContent()}. Avoid
+ setting a background {@link android.graphics.drawable.Drawable} on your
+ {@link android.widget.RemoteViews} object, because your text color may become unreadable.
+ </li>
</ol>
-
-
-<p>The {@link android.widget.RemoteViews} class also includes methods that you can use to easily add
-a {@link android.widget.Chronometer} or {@link android.widget.ProgressBar}
-in your notification's layout. For more information about creating custom layouts for your
-notification, refer to the {@link android.widget.RemoteViews} class reference.</p>
-
-<p class="caution"><strong>Caution:</strong>
-When creating a custom notification layout, you must take special care to ensure that your
-custom layout functions properly in different device orientations and resolutions. While this
-advice applies to all View layouts created on Android, it is especially important in this case
-because your layout real estate is very restricted. So don't make your custom layout too
-complex and be sure to test it in various configurations.</p>
-
-
-
-
+<p>
+ The {@link android.widget.RemoteViews} class also includes methods that you can use to easily
+ add a {@link android.widget.Chronometer} or {@link android.widget.ProgressBar}
+ to your notification's layout. For more information about creating custom layouts for your
+ notification, refer to the {@link android.widget.RemoteViews} reference documentation.
+</p>
+<p class="caution">
+ <strong>Caution:</strong> When you use a custom notification layout, take special care to
+ ensure that your custom layout works with different device orientations and resolutions. While
+ this advice applies to all View layouts, it's especially important for notifications because
+ the space in the notification drawer is very restricted. Don't make your custom layout too
+ complex, and be sure to test it in various configurations.
+</p>
+<!-- ------------------------------------------------------------------------------------------ -->
+<h4>Using style resources for custom notification text</h4>
+<p>
+ Always use style resources for the text of a custom notification. The background color of the
+ notification can vary across different devices and versions, and using style resources
+ helps you account for this. Starting in Android 2.3, the system defined a style for the
+ standard notification layout text. If you use the same style in applications that target Android
+ 2.3 or higher, you'll ensure that your text is visible against the display background.
+</p>
diff --git a/docs/html/guide/topics/ui/notifiers/toasts.jd b/docs/html/guide/topics/ui/notifiers/toasts.jd
index 1a1fb1f..92c146a 100644
--- a/docs/html/guide/topics/ui/notifiers/toasts.jd
+++ b/docs/html/guide/topics/ui/notifiers/toasts.jd
@@ -1,17 +1,8 @@
-page.title=Toast Notifications
-parent.title=Notifications
-parent.link=index.html
+page.title=Toasts
@jd:body
<div id="qv-wrapper">
- <div id="qv">
- <h2>Quickview</h2>
- <ol>
- <li>A toast is a message that appears on the surface of the screen for a moment, but it
-does not take focus (or pause the current activity), so it cannot accept user input</li>
- <li>You can customize the toast layout to include images</li>
- </ol>
-
+ <div id="qv">
<h2>In this document</h2>
<ol>
<li><a href="#Basics">The Basics</a></li>
@@ -26,22 +17,17 @@ does not take focus (or pause the current activity), so it cannot accept user in
</div>
</div>
-<p>A toast notification is a message that pops up on the surface of the window.
-It only fills the amount of space required for the message and the user's current
-activity remains visible and interactive. The notification automatically fades in and
-out, and does not accept interaction events.</p>
+<p>A toast provides simple feedback about an operation in a small popup.
+It only fills the amount of space required for the message and the current
+activity remains visible and interactive.
+For example, navigating away from an email before you send it triggers a
+"Draft saved" toast to let you know that you can continue editing later.
+Toasts automatically disappear after a timeout.</p>
-<p>The screenshot below shows an example toast notification from the Alarm application.
-Once an alarm is turned on, a toast is displayed to assure you that the
-alarm was set.</p>
<img src="{@docRoot}images/toast.png" alt="" />
-<p>A toast can be created and displayed from an {@link android.app.Activity} or
-{@link android.app.Service}. If you create a toast notification from a Service, it
-appears in front of the Activity currently in focus.</p>
-
-<p>If user response to the notification is required, consider using a
-<a href="notifications.html">Status Bar Notification</a>.</p>
+<p>If user response to a status message is required, consider instead using a
+<a href="{@docRoot}guide/topics/ui/notifiers/notifications.html">Notification</a>.</p>
<h2 id="Basics">The Basics</h2>
@@ -90,8 +76,6 @@ To nudge it down, increase the value of the last parameter.
<h2 id="CustomToastView">Creating a Custom Toast View</h2>
-<img src="{@docRoot}images/custom_toast.png" alt="" style="float:right" />
-
<p>If a simple text message isn't enough, you can create a customized layout for your
toast notification. To create a custom layout, define a View layout,
in XML or in your application code, and pass the root {@link android.view.View} object
@@ -105,17 +89,17 @@ with the following XML (saved as <em>toast_layout.xml</em>):</p>
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
- android:padding="10dp"
+ android:padding="8dp"
android:background="#DAAA"
>
- &lt;ImageView android:id="@+id/image"
+ &lt;ImageView android:src="@drawable/droid"
android:layout_width="wrap_content"
- android:layout_height="fill_parent"
- android:layout_marginRight="10dp"
+ android:layout_height="wrap_content"
+ android:layout_marginRight="8dp"
/>
&lt;TextView android:id="@+id/text"
android:layout_width="wrap_content"
- android:layout_height="fill_parent"
+ android:layout_height="wrap_content"
android:textColor="#FFF"
/>
&lt;/LinearLayout>
@@ -126,13 +110,11 @@ ID to inflate the layout from the XML, as shown here:</p>
<pre>
LayoutInflater inflater = getLayoutInflater();
-View layout = inflater.inflate(R.layout.toast_layout,
+View layout = inflater.inflate(R.layout.custom_toast,
(ViewGroup) findViewById(R.id.toast_layout_root));
-ImageView image = (ImageView) layout.findViewById(R.id.image);
-image.setImageResource(R.drawable.android);
TextView text = (TextView) layout.findViewById(R.id.text);
-text.setText("Hello! This is a custom toast!");
+text.setText("This is a custom toast");
Toast toast = new Toast(getApplicationContext());
toast.setGravity(Gravity.CENTER_VERTICAL, 0, 0);
diff --git a/docs/html/guide/topics/ui/themes.jd b/docs/html/guide/topics/ui/themes.jd
index d787492..bc1c4f0 100644
--- a/docs/html/guide/topics/ui/themes.jd
+++ b/docs/html/guide/topics/ui/themes.jd
@@ -413,8 +413,8 @@ thoroughly describe the styles, so viewing the actual source code for these styl
themes will give you a better understanding of what style properties each one provides.
For a better reference to the Android styles and themes, see the following source code:</p>
<ul>
- <li><a href="http://android.git.kernel.org/?p=platform/frameworks/base.git;a=blob;f=core/res/res/values/styles.xml;h=d7b654e49809cb97a35682754b1394af5c8bc88b;hb=HEAD">Android Styles (styles.xml)</a></li>
- <li><a href="http://android.git.kernel.org/?p=platform/frameworks/base.git;a=blob;f=core/res/res/values/themes.xml;h=6b3d7407d1c895a3c297e60d5beac98e2d34c271;hb=HEAD">Android Themes (themes.xml)</a></li>
+ <li><a href="https://android.googlesource.com/platform/frameworks/base/+/refs/heads/master/core/res/res/values/styles.xml">Android Styles (styles.xml)</a></li>
+ <li><a href="https://android.googlesource.com/platform/frameworks/base/+/refs/heads/master/core/res/res/values/themes.xml">Android Themes (themes.xml)</a></li>
</ul>
<p>These files will help you learn through example. For instance, in the Android themes source code,
@@ -422,9 +422,8 @@ you'll find a declaration for <code>&lt;style name="Theme.Dialog"&gt;</code>. In
you'll see all of the properties that are used to style dialogs that are used by the Android
framework.</p>
-<p>For more information about the syntax used to create styles in XML, see
-<a href="{@docRoot}guide/topics/resources/available-resources.html#stylesandthemes">Available Resource Types:
-Style and Themes</a>.</p>
+<p>For more information about the syntax for styles and themes in XML, see the
+<a href="{@docRoot}guide/topics/resources/style-resource.html">Style Resource</a> document.</p>
<p>For a reference of available style attributes that you can use to define a style or theme
(e.g., "windowBackground" or "textAppearance"), see {@link android.R.attr} or the respective
diff --git a/docs/html/images/brand/Android_Robot_100.png b/docs/html/images/brand/Android_Robot_100.png
new file mode 100644
index 0000000..946ee3a
--- /dev/null
+++ b/docs/html/images/brand/Android_Robot_100.png
Binary files differ
diff --git a/docs/html/images/brand/Android_Robot_200.png b/docs/html/images/brand/Android_Robot_200.png
new file mode 100644
index 0000000..40bf934
--- /dev/null
+++ b/docs/html/images/brand/Android_Robot_200.png
Binary files differ
diff --git a/docs/html/images/brand/Android_Robot_500.png b/docs/html/images/brand/Android_Robot_500.png
new file mode 100644
index 0000000..1fbfc51
--- /dev/null
+++ b/docs/html/images/brand/Android_Robot_500.png
Binary files differ
diff --git a/docs/html/images/brand/Android_Robot_outlined.ai b/docs/html/images/brand/Android_Robot_outlined.ai
new file mode 100644
index 0000000..9105cba
--- /dev/null
+++ b/docs/html/images/brand/Android_Robot_outlined.ai
@@ -0,0 +1,1697 @@
+%PDF-1.5 %
+1 0 obj <</Metadata 2 0 R/OCProperties<</D<</ON[5 0 R]/Order 6 0 R/RBGroups[]>>/OCGs[5 0 R]>>/Pages 3 0 R/Type/Catalog>> endobj 2 0 obj <</Length 40079/Subtype/XML/Type/Metadata>>stream
+<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
+<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 5.0-c060 61.134777, 2010/02/12-17:32:00 ">
+ <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
+ <rdf:Description rdf:about=""
+ xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <dc:format>application/pdf</dc:format>
+ <dc:title>
+ <rdf:Alt>
+ <rdf:li xml:lang="x-default">Android_Robot_outlined</rdf:li>
+ </rdf:Alt>
+ </dc:title>
+ </rdf:Description>
+ <rdf:Description rdf:about=""
+ xmlns:xmp="http://ns.adobe.com/xap/1.0/"
+ xmlns:xmpGImg="http://ns.adobe.com/xap/1.0/g/img/">
+ <xmp:CreatorTool>Adobe Illustrator CS5</xmp:CreatorTool>
+ <xmp:CreateDate>2012-06-16T18:47:04-07:00</xmp:CreateDate>
+ <xmp:ModifyDate>2012-06-16T18:47:04-07:00</xmp:ModifyDate>
+ <xmp:MetadataDate>2012-06-16T18:47:04-07:00</xmp:MetadataDate>
+ <xmp:Thumbnails>
+ <rdf:Alt>
+ <rdf:li rdf:parseType="Resource">
+ <xmpGImg:width>220</xmpGImg:width>
+ <xmpGImg:height>256</xmpGImg:height>
+ <xmpGImg:format>JPEG</xmpGImg:format>
+ <xmpGImg:image>/9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA&#xA;AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK&#xA;DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f&#xA;Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAADcAwER&#xA;AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA&#xA;AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB&#xA;UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE&#xA;1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ&#xA;qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy&#xA;obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp&#xA;0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo&#xA;+DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FXYq7FXYq7&#xA;FUvtdf0y51GbTopa3UJIZSCASpowUnrTMaGrxymYA+oIsJhmSl2KuxV2KuxV2KuxV2KuxVB6pq1l&#xA;plsLi7cqhYKoAqST4DKc+ojijckE0r2t1DdW0dzA3KKVQyN02PzyeOYnESHIpVcmrsVdirsVdirs&#xA;VdirsVdirsVdirsVdirsVdirsVYD5tsptH1yHWLT4UmfmfASj7QPs4/jnPa/EcOUZI9fv/a1SFG2&#xA;baffQ31lDdwmscyhgPA9wfcHbN7hyjJESHVsBRGWJdirsVdirsVdirsVdirz3XLibzF5ki062b/R&#xA;oWMasNxtvJJ+FBnOaqZ1OcQj9I/BLUdyz62t4ba3jt4V4xRKERfAAUzoYQEQAOQbVTJK7FXYq7FX&#xA;Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FUFrOmRanp01nJQFxWNz+y43U/flGpwDLAxKCLYn5G1OWzvp&#xA;tFu6oWZjErfsyL9pfpA/zrmo7LzmEzil+CwgejNp7iCCMyTyLFGOruQo+85vJTERZNBsSS787+X7&#xA;ckLM1ww6iFSfxbiv45g5O08Met+5iZhK5vzItgf3Ni7jtzcJ+oPmLLtmPSP2sfEQ5/MmappYLTt+&#xA;8P8AzTlf8sn+b9q+Iqx/mStQJNPIHcrLX8Co/Xkh2z3x+39i+ImFr5/0OUgSiW3PcuvJf+ELH8My&#xA;IdrYjzsJ4wnllqenXq1tLiObxCsOQ+a9Rmfjzwn9JBZApZ5v1r9G6Uwjal1c1jhp1Ap8T/QPxzF7&#xA;Q1PhY9vqlyRI0ED5C0X6tZNqEq0muhSKvURD/mo7/dlHZWm4Y8Z5y+5EAyrNszdirsVdirsVdirs&#xA;VdirsVdirsVdirsVdirsVdirsVUbu9tbOBp7qVYol6sx/AeJyGTLGAuRoKS8x8xavaXms/X9OV4W&#xA;XiTIdizp0cDt2zltZqIzy8cNvxzaZHdLLq8u7uX1bmZ5pP5nJP3VzFnklM3I2WJKjkFdirsVdirs&#xA;VbR3Rg6MVZTVWBoQfnhBpUTLqNxdTwPfySXKQ0XizfEUBqRyNdz45bLNKZBmTKk29Q0XXdL1KFVs&#xA;3COigG2aiuoG3TuPlnU6bVY8o9PybgQUzzKS7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FUr1&#xA;7zDZ6Pb8pf3lw4/cwA7t7nwHvmJq9ZHCN+fQIMqeZ6rrF/qlwZ7uTkf2IxsiDwUZzGfUTyyuRaSb&#xA;QWUIdirsVdirsVdirsVdirsVXwzSwyrLC5jlQ1R1NCD7EZKMjE2OavQPK/nJL4pZagQl2do5eiyH&#xA;wPg3686HQ9o8fpn9Xf3tsZWyrNszdirsVdirsVdirsVdirsVdirsVdirsVdiqXa7rVvpNg1xJ8Uh&#xA;+GCLu7/0HfMbVakYYcR59EE08qvr65vrqS5uXLyyGpPYeAHgBnJ5cspyMpcy0k2oZWhF2Wkaneoz&#xA;2ltJMi7FlG1fCuXY9POe8QSkAlDSxSxSNHKhjkU0ZGBBB9wcrlEg0eaFuRV2KuxV2KuxV2Ko4aHr&#xA;DW31kWcpgpy58T9nxp1pl402Th4uE0nhKByhDgSDUdcVeh+TfM5voxYXj1vIx+7kPWRR4/5Q/HOj&#xA;7O13GOCX1fe2xlbKs2zN2KuxV2KuxV2KuxV2KuxV2KuxV2KtMyqpZiAqipJ6ADATSvKfMutvq2pP&#xA;KCfq0dUt1/yfGni3XOS1upOWd9ByaZG0pzEYuxV675e+rfoSy+rU9L0l6fzU+KvvyrXOw0fD4UeH&#xA;lTfHkw78xfqv6Tt/Tp9Y9L9/Twr8Fffrmm7Y4fEFc63a5sTzUMHYq7FXYq7FUXo/1b9K2n1qn1f1&#xA;U9WvSnIdfbxy7T8PiR4uVpHN7FnZt7yLzB9V/Td59Vp6Hqnjx6V/apTtyrnH6vh8WXDytolzS/MZ&#xA;Cpb3E1vPHPCxSWNgyMOxGShIxII5hXrWh6rHqmmxXaUDMOMqD9lx9ofxHtnX6XOMsBL8W3g2j8yE&#xA;uxV2KuxV2KuxV2KuxV2KuxV2Ksc89ambPRzAhpLeH0x48Bu5/h9Oa3tTPwY6HOX4LGZ2ea5zDS7F&#xA;XYqi7PV9TskZLW5khRtyqttXxpl2PUThtEkJBIQ0ssksjSSuXkY1Z2JJJ9ycqlIk2ULcCuxV2Kux&#xA;V2KuxVGjW9XFt9VF5KIKceHI9PDxpl/5nJw8PEaTZQWUIdirsVZV+X+pmDUnsXP7u6WqDwkQV/Fa&#xA;5tuyc/DPgPKX3s4F6HnRtrsVdirsVdirsVdirsVdirsVdirzj8wLsza2IAfhto1Wn+U/xn8CM5rt&#xA;bJeWv5oapndjOatg7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYqr2F01pewXK9YZFf8A4E1plmKf&#xA;BIS7ikF7KrKyhlNVYVB9jnaA23t4VdirsVdirsVdirsVdirsVdiryTzJKZdev2PaZ0/4A8f4Zx+s&#xA;leaXvaJc0tzGQ7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXsGhymXRrGQ9Wgj5V8eIrnZaWV&#xA;4on+iG8ckbl6XYq7FXYq7FXYqgtT1nTtMjD3kwj5fYTq7fJRvlGfUwxC5FBNJC35i6SGotvOV8aI&#xA;Pw5Zrz2xj7pfYx4wnGk+ZNJ1Q8baWk3UwyDi9PYdD9GZun1uPL9J37mQkCmeZSWN3nlbyxNdzTTy&#xA;8ZpXZ5B6oHxManb6c1mTQ4DIkncnvYmIUv8ACPlH/f3/ACWGQ/k/Td/2o4Q7/CPlH/f3/JYY/wAn&#xA;6bv+1eEO/wAI+Uf9/f8AJYY/yfpu/wC1eEO/wj5R/wB/f8lhj/J+m7/tXhDv8I+Uf9/f8lhj/J+m&#xA;7/tXhDv8I+Uf9/f8lhj/ACfpu/7V4Q7/AAj5R/39/wAlhj/J+m7/ALV4Q7/CPlH/AH9/yWGP8n6b&#xA;v+1eEO/wj5R/39/yWGP8n6bv+1eEO/wj5R/39/yWGP8AJ+m7/tXhDv8ACPlH/f3/ACWGP8n6bv8A&#xA;tXhDv8I+Uf8Af3/JYY/yfpu/7V4Q7/CPlH/f3/JYY/yfpu/7V4Q7/CPlH/f3/JYY/wAn6bv+1eEO&#xA;/wAI+Uf9/f8AJYY/yfpu/wC1eEO/wj5R/wB/f8lhj/J+m7/tXhDI7K3gt7SGCA1hjQLGa1+EDbfv&#xA;mzxQEYgDkGYW3+o2VhAZ7uVYo+gJ6k+AA3J+WRy5o4xcjQQTTHZfzF0lXpHBO6j9qij7gWzXS7Yx&#xA;3sCx4wmOlebtG1GQRRyGGdvsxTAKSfYglT9+ZODtDFkNA0fNIkCnOZrJ2KobU7+PT9PnvJBVYV5c&#xA;elT0UfSTTKs+UY4GR6IJp5FfX1zfXUl1cuXlkNSewHYDwAzj8uWU5GUuZaSbUMrQujkkikWSNiki&#xA;EMjqaEEdCDhBINhXqvljWTqulJPJT6xGfTnp/MB9r6Qa51mh1Pi47PMbFuibDzzzR/ykF9/xlP6h&#xA;nO67++l72uXNK8xGLsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVeu6TNHD5esppDxjjtIndvB&#xA;VjBJzsNPIRwxJ5CI+5vHJ5jrWr3Gq373MpPGtIY+yJ2A/jnL6nUSyzMi0k2gMx0OBINR1xV6V5K1&#xA;2XUrF4LluV1a0Bc9WQ/ZJ99qHOn7N1RyQqX1RbYG2R5smbHfPhI8vPTvJGD9+a3tX+5+IYz5PNM5&#xA;hpdirsVZx+WrsU1BP2QYiPmedf1ZvexT9Xw/S2Y2N+aP+Ugvv+Mp/UM1uu/vpe9jLmleYjF2KuxV&#xA;2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KvTLtivkRSDQ/UYh9BRQc6fIf8E/zB9zd/C8zzmGl2Kux&#xA;VlX5dMf0zcLX4TbsSPcOn9c23Y5/en+r+kM4c3oedG2sd8+/8o+//GVP15re1f7n4hjPk80zmGl2&#xA;KuxVm/5a/wDSx/54/wDMzN72L/H8P0tmNjnmj/lIL7/jKf1DNbrv76XvYy5pXmIxdirsVdirsVdi&#xA;rsVdirsVdirsVdirsVdirsVdir0u8/5QRf8AmBi/4gudPl/xT/MH6G7+F5pnMNLsVdirKfy6/wCO&#xA;3P8A8wzf8nEzbdj/AN6f6v6QzhzeiZ0bax3z7/yj7/8AGVP15re1f7n4hjPk80zmGl2KuxVm/wCW&#xA;v/Sx/wCeP/MzN72L/H8P0tmNjnmj/lIL7/jKf1DNbrv76XvYy5pXmIxdirsVdirsVdirsVdirsVd&#xA;irsVdirsVdirsVdir0u8/wCUEX/mBi/4gudPl/xT/MH6G7+F5pnMNLsVdirKfy6/47c//MM3/JxM&#xA;23Y/96f6v6QzhzeiZ0bax3z7/wAo+/8AxlT9ea3tX+5+IYz5PNM5hpdirsVZv+Wv/Sx/54/8zM3v&#xA;Yv8AH8P0tmNjnmj/AJSC+/4yn9QzW67++l72MuaV5iMXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq&#xA;7FXYq9LvP+UEX/mBi/4gudPl/wAU/wAwfobv4Xmmcw0uxV2Ksp/Lr/jtz/8AMM3/ACcTNt2P/en+&#xA;r+kM4c3omdG2sd8+/wDKPv8A8ZU/Xmt7V/ufiGM+TzTOYaXYq7FWb/lr/wBLH/nj/wAzM3vYv8fw&#xA;/S2Y2OeaP+Ugvv8AjKf1DNbrv76XvYy5pXmIxdirsVdirsVdirsVdirsVdirsVdirsVdirsVdir0&#xA;u8/5QRf+YGL/AIgudPl/xT/MH6G7+F5pnMNLsVdirKfy6/47c/8AzDN/ycTNt2P/AHp/q/pDOHN6&#xA;JnRtrHfPv/KPv/xlT9ea3tX+5+IYz5PNM5hpdirsVZv+Wv8A0sf+eP8AzMze9i/x/D9LZjY55o/5&#xA;SC+/4yn9QzW67++l72MuaV5iMXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq9LvP+UEX/AJgY&#xA;v+ILnT5f8U/zB+hu/heaZzDS7FXYqyn8uv8Ajtz/APMM3/JxM23Y/wDen+r+kM4c3omdG2sd8+/8&#xA;o+//ABlT9ea3tX+5+IYz5PNM5hpdirsVZv8Alr/0sf8Anj/zMze9i/x/D9LZjY55o/5SC+/4yn9Q&#xA;zW67++l72MuaV5iMXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq9LvP8AlBF/5gYv+ILnT5f8&#xA;U/zB+hu/heaZzDS7FXYqyn8uv+O3P/zDN/ycTNt2P/en+r+kM4c3omdG2sd8+/8AKPv/AMZU/Xmt&#xA;7V/ufiGM+TzTOYaXYq7FWb/lr/0sf+eP/MzN72L/AB/D9LZjY55o/wCUgvv+Mp/UM1uu/vpe9jLm&#xA;leYjF2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KvS7z/lBF/5gYv+ILnT5f8AFP8AMH6G7+F5&#xA;pnMNLsVdirKfy6/47c//ADDN/wAnEzbdj/3p/q/pDOHN6JnRtrHvPaM3l6UgVCSRlvYcqfrOa7tU&#xA;XhPvDGfJ5nnLtLsVdirOfy2jYRX8n7LNEo+ahif+JZvuxhtI+79LZjY15o/5SC+/4yn9QzWa7++l&#xA;72MuaV5iMXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq9NuY2fyKqqKn6hGaeyxqT+rOomL0n&#xA;+YPubujzLOXaXYq7FWV/lzGx1e4kp8K25Un3Z1I/4jm37HH7wn+j+kM4c3oWdE2qN7aQ3lpNazCs&#xA;cylG8RXuPlleXGJxMTyKkPJdX0i80u7a3uF/4xyAfC6+IzkdRp5YpcMmgikFlCFa0s7m8uEt7aMy&#xA;TSGiqP1nwGTx45TPDEWVAeraBpCaVpkdqCGk+3M46F2609h0GdbpNP4UBHr1bwKeb+aP+Ugvv+Mp&#xA;/UM5rXf30ve1S5pXmIxdirsVdirsVdirsVdirsVdirsVdirsVdirsVdir17RUV9CsEcBla1iDKeh&#xA;BjFRnY6YXhiD/NH3N45POPMfl+40i8ZeJa0ck283Yj+Un+YZzWs0ksMv6PQtUo0lGYbFdFFJLIsc&#xA;Sl5HNFRRUknsBhjEk0OavT/KWgtpOnn1gPrdwQ81P2QB8KfRX786ns/S+FDf6jzboik8zPZOxVRu&#xA;rO1u4jDcxLNGf2XAIr4jwOQyY4zFSFhaSZvI3lwychA6j+QSPT8TX8cwj2Xhvl9rHgCa2Gladp6F&#xA;LO3SEH7RAqx+bGpOZWLBDGPSKSBSKy5LybzR/wApBff8ZT+oZyOu/vpe9plzSvMRi7FXYq7FXYq7&#xA;FXYq7FXYq7FXYq7FXYq7FXYq7FXsGh/8cTT/APmGh/5NjOy0v91H+qPubxyRU0EM8bRTIskbbMjg&#xA;MD8wctlESFEWEpLL5I8uyPyFuU7kI7AH6CT+GYMuzMJPL7WPAEfp2h6Vp29nbLG52Mm7P/wTVOZG&#xA;HS48f0ikgAI7MhLsVdirsVdirsVdiryvzfA8PmK8DDZ2DqfEMoOcn2hGs0mmXNJswmLsVdirsVdi&#xA;rsVdirsVdirsVdirsVdirsVdirsVeyaZA1vptpA2zRQxow91UDO0wR4YRB6AN4ROWpdirsVdirsV&#xA;dirsVdirsVdirHPOPlt9UgW5tR/pkAIC/wA6dePzHbNZ2jozlHFH6h9rCUbebyRyRu0cilHU0ZGF&#xA;CCOxBzmiCDRaluBXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYqyryf5XmuriPULtClnEQ8SsKGRh02&#xA;/lH45tuztCZyE5fSPtZxi9Dzo212KuxV2KuxV2KuxV2KuxV2KuxV2KoO+0fS7+hu7ZJWHRyKNT/W&#xA;FDlOXTY8n1AFBFoD/BXln/lj/wCSkv8AzXmP/JuD+b9p/WjgDHfOugaTpthBLZQelI8vFjzdqjiT&#xA;+0xzW9paTHigDEVv5sZxAYfmma3Yq7FWYeStA0nUrCeW9g9WRJeKnm60HEH9lhm57N0mPLAmQvfz&#xA;bIRBZF/gryz/AMsf/JSX/mvNl/JuD+b9p/Wy4Ah9Q8n+XYbC5ljtOMkcTujepKaFVJB3bK83Z+EQ&#xA;JEdwD1P60GIea5zDU7FXYqm/lWwtL7Woba6T1IGVyyVK9FJG6kHMzQ4o5MojIWGURZZ3/gryz/yx&#xA;/wDJSX/mvN//ACbg/m/af1tnAFe18r6BauHhsk5DoXrJT/gy2ThocMTYiPv+9IiE0zLS7FXYq7FX&#xA;Yq7FXYq7FXYq7FXYq7FXYq7FXYqxP8xv+OXbf8Z/+NGzUdsf3Y97CfJ59nOtTsVdir0H8uf+OXc/&#xA;8Z/+NFzoux/7s+9thyZZm3ZoXVv+OXef8YJP+IHKdR/dy/qn7kHk8czjGh2KuxVPvI//ACkdv/qy&#xA;f8QObDsz+/Hx+5lDm9PzqW52KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxVif5jf8cu2/wCM&#xA;/wDxo2ajtj+7HvYT5PPs51qdirsVeg/lz/xy7n/jP/xoudF2P/dn3tsOTLM27NC6t/xy7z/jBJ/x&#xA;A5TqP7uX9U/cg8njmcY0OxV2Kp95H/5SO3/1ZP8AiBzYdmf34+P3Moc3p+dS3OxV2KuxV2KuxV2K&#xA;uxV2KuxV2KuxV2KuxV2KuxV2KsT/ADG/45dt/wAZ/wDjRs1HbH92PewnyefZzrU7FXYq9B/Ln/jl&#xA;3P8Axn/40XOi7H/uz722HJlmbdmhdW/45d5/xgk/4gcp1H93L+qfuQeTxzOMaHYq7FU+8j/8pHb/&#xA;AOrJ/wAQObDsz+/Hx+5lDm9PzqW52KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxVin5iqx0m&#xA;3YD4ROAT80bNR2wP3Y97CfJ57nOtTsVdir0T8u42XR53PR5zx+QRd86Pscfuyf6TbDkynNszQ+ox&#xA;tJp91GgqzwyKo9ypAyrMLhIeRQXjWcW0OxV2Ksg8iozeYoSBUIkjN7DjT9ZzY9lj98Piyhzem51D&#xA;c7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYqgtZ0yPU9Oms3PH1B8D/AMrDdT9+UanAMsDE&#xA;oIt5NfWN1Y3L211GY5UO4PQjxB7g5yOXFKEuGQotJFKGVoROn6fd6hdJbWqF5H+4DuzHsBluLFLJ&#xA;LhiN0gW9Z0nTotO0+Gzj3ES/E38zHdm+k512nwjHARHRuApF5cl2KvMfNnl2bTL154kJsZmLRsOi&#xA;E7lD4e2ctr9GcUrH0H8U0yjSQZr2LgCSABUnYAYVej+SvL0unW73d0vG6uAAEPVI+tD7k9c6TszS&#xA;HGOKX1H7m2EaZNm0ZuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxVDX+mafqEYjvIFmUf&#xA;Z5dRXwYUI+jKsuCGQVIWgi0n/wACeXuVfTkp/L6hp/XMP+SsPcfmjgCcWOm2NhF6VnAsKHrxG5+Z&#xA;O5+nMzFhhjFRFJApE5al2KuxVbJHHKjRyKHjYUZGAII9wcBiCKKpHceSPL0z8xA0RPURuwH3GtPo&#xA;zAn2ZhJuqY8AReneWtF09xJbWw9UdJXJdh8uVafRl2HRYsZuI3SIgJnmUl2KuxV2KuxV2KuxV2Ku&#xA;xV2Kv//Z</xmpGImg:image>
+ </rdf:li>
+ </rdf:Alt>
+ </xmp:Thumbnails>
+ </rdf:Description>
+ <rdf:Description rdf:about=""
+ xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/"
+ xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#"
+ xmlns:stEvt="http://ns.adobe.com/xap/1.0/sType/ResourceEvent#">
+ <xmpMM:OriginalDocumentID>uuid:9E3E5C9A8C81DB118734DB58FDDE4BA7</xmpMM:OriginalDocumentID>
+ <xmpMM:DocumentID>xmp.did:04801174072068118083B5D54AC8DDFA</xmpMM:DocumentID>
+ <xmpMM:InstanceID>uuid:4d2bb5dd-df53-ea4f-981f-de92c4dd6ef6</xmpMM:InstanceID>
+ <xmpMM:RenditionClass>proof:pdf</xmpMM:RenditionClass>
+ <xmpMM:DerivedFrom rdf:parseType="Resource">
+ <stRef:instanceID>uuid:307d434c-4eaf-aa4a-a018-2cfd09e817b5</stRef:instanceID>
+ <stRef:documentID>xmp.did:FD7F1174072068118C14C41908EA5785</stRef:documentID>
+ <stRef:originalDocumentID>uuid:9E3E5C9A8C81DB118734DB58FDDE4BA7</stRef:originalDocumentID>
+ <stRef:renditionClass>proof:pdf</stRef:renditionClass>
+ </xmpMM:DerivedFrom>
+ <xmpMM:History>
+ <rdf:Seq>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:FD7F1174072068118C14C41908EA5785</stEvt:instanceID>
+ <stEvt:when>2011-06-10T11:52:49+01:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS5</stEvt:softwareAgent>
+ <stEvt:changed>/</stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:04801174072068118083B5D54AC8DDFA</stEvt:instanceID>
+ <stEvt:when>2012-06-16T18:47:02-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS5</stEvt:softwareAgent>
+ <stEvt:changed>/</stEvt:changed>
+ </rdf:li>
+ </rdf:Seq>
+ </xmpMM:History>
+ </rdf:Description>
+ <rdf:Description rdf:about=""
+ xmlns:illustrator="http://ns.adobe.com/illustrator/1.0/">
+ <illustrator:StartupProfile>Basic RGB</illustrator:StartupProfile>
+ <illustrator:Type>Document</illustrator:Type>
+ </rdf:Description>
+ <rdf:Description rdf:about=""
+ xmlns:xmpTPg="http://ns.adobe.com/xap/1.0/t/pg/"
+ xmlns:stDim="http://ns.adobe.com/xap/1.0/sType/Dimensions#"
+ xmlns:xmpG="http://ns.adobe.com/xap/1.0/g/">
+ <xmpTPg:NPages>1</xmpTPg:NPages>
+ <xmpTPg:HasVisibleTransparency>False</xmpTPg:HasVisibleTransparency>
+ <xmpTPg:HasVisibleOverprint>False</xmpTPg:HasVisibleOverprint>
+ <xmpTPg:MaxPageSize rdf:parseType="Resource">
+ <stDim:w>841.889648</stDim:w>
+ <stDim:h>595.280273</stDim:h>
+ <stDim:unit>Pixels</stDim:unit>
+ </xmpTPg:MaxPageSize>
+ <xmpTPg:PlateNames>
+ <rdf:Seq>
+ <rdf:li>Cyan</rdf:li>
+ <rdf:li>Magenta</rdf:li>
+ <rdf:li>Yellow</rdf:li>
+ <rdf:li>Black</rdf:li>
+ </rdf:Seq>
+ </xmpTPg:PlateNames>
+ <xmpTPg:SwatchGroups>
+ <rdf:Seq>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:groupName>Default Swatch Group</xmpG:groupName>
+ <xmpG:groupType>0</xmpG:groupType>
+ <xmpG:Colorants>
+ <rdf:Seq>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>White</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>255</xmpG:red>
+ <xmpG:green>255</xmpG:green>
+ <xmpG:blue>255</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>Black</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>0</xmpG:red>
+ <xmpG:green>0</xmpG:green>
+ <xmpG:blue>0</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>RGB Red</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>255</xmpG:red>
+ <xmpG:green>0</xmpG:green>
+ <xmpG:blue>0</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>RGB Yellow</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>255</xmpG:red>
+ <xmpG:green>255</xmpG:green>
+ <xmpG:blue>0</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>RGB Green</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>0</xmpG:red>
+ <xmpG:green>255</xmpG:green>
+ <xmpG:blue>0</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>RGB Cyan</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>0</xmpG:red>
+ <xmpG:green>255</xmpG:green>
+ <xmpG:blue>255</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>RGB Blue</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>0</xmpG:red>
+ <xmpG:green>0</xmpG:green>
+ <xmpG:blue>255</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>RGB Magenta</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>255</xmpG:red>
+ <xmpG:green>0</xmpG:green>
+ <xmpG:blue>255</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=193 G=39 B=45</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>193</xmpG:red>
+ <xmpG:green>39</xmpG:green>
+ <xmpG:blue>45</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=237 G=28 B=36</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>237</xmpG:red>
+ <xmpG:green>28</xmpG:green>
+ <xmpG:blue>36</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=241 G=90 B=36</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>241</xmpG:red>
+ <xmpG:green>90</xmpG:green>
+ <xmpG:blue>36</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=247 G=147 B=30</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>247</xmpG:red>
+ <xmpG:green>147</xmpG:green>
+ <xmpG:blue>30</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=251 G=176 B=59</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>251</xmpG:red>
+ <xmpG:green>176</xmpG:green>
+ <xmpG:blue>59</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=252 G=238 B=33</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>252</xmpG:red>
+ <xmpG:green>238</xmpG:green>
+ <xmpG:blue>33</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=217 G=224 B=33</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>217</xmpG:red>
+ <xmpG:green>224</xmpG:green>
+ <xmpG:blue>33</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=140 G=198 B=63</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>140</xmpG:red>
+ <xmpG:green>198</xmpG:green>
+ <xmpG:blue>63</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=57 G=181 B=74</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>57</xmpG:red>
+ <xmpG:green>181</xmpG:green>
+ <xmpG:blue>74</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=0 G=146 B=69</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>0</xmpG:red>
+ <xmpG:green>146</xmpG:green>
+ <xmpG:blue>69</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=0 G=104 B=55</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>0</xmpG:red>
+ <xmpG:green>104</xmpG:green>
+ <xmpG:blue>55</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=34 G=181 B=115</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>34</xmpG:red>
+ <xmpG:green>181</xmpG:green>
+ <xmpG:blue>115</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=0 G=169 B=157</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>0</xmpG:red>
+ <xmpG:green>169</xmpG:green>
+ <xmpG:blue>157</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=41 G=171 B=226</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>41</xmpG:red>
+ <xmpG:green>171</xmpG:green>
+ <xmpG:blue>226</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=0 G=113 B=188</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>0</xmpG:red>
+ <xmpG:green>113</xmpG:green>
+ <xmpG:blue>188</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=46 G=49 B=146</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>46</xmpG:red>
+ <xmpG:green>49</xmpG:green>
+ <xmpG:blue>146</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=27 G=20 B=100</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>27</xmpG:red>
+ <xmpG:green>20</xmpG:green>
+ <xmpG:blue>100</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=102 G=45 B=145</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>102</xmpG:red>
+ <xmpG:green>45</xmpG:green>
+ <xmpG:blue>145</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=147 G=39 B=143</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>147</xmpG:red>
+ <xmpG:green>39</xmpG:green>
+ <xmpG:blue>143</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=158 G=0 B=93</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>158</xmpG:red>
+ <xmpG:green>0</xmpG:green>
+ <xmpG:blue>93</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=212 G=20 B=90</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>212</xmpG:red>
+ <xmpG:green>20</xmpG:green>
+ <xmpG:blue>90</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=237 G=30 B=121</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>237</xmpG:red>
+ <xmpG:green>30</xmpG:green>
+ <xmpG:blue>121</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=199 G=178 B=153</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>199</xmpG:red>
+ <xmpG:green>178</xmpG:green>
+ <xmpG:blue>153</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=153 G=134 B=117</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>153</xmpG:red>
+ <xmpG:green>134</xmpG:green>
+ <xmpG:blue>117</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=115 G=99 B=87</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>115</xmpG:red>
+ <xmpG:green>99</xmpG:green>
+ <xmpG:blue>87</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=83 G=71 B=65</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>83</xmpG:red>
+ <xmpG:green>71</xmpG:green>
+ <xmpG:blue>65</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=198 G=156 B=109</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>198</xmpG:red>
+ <xmpG:green>156</xmpG:green>
+ <xmpG:blue>109</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=166 G=124 B=82</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>166</xmpG:red>
+ <xmpG:green>124</xmpG:green>
+ <xmpG:blue>82</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=140 G=98 B=57</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>140</xmpG:red>
+ <xmpG:green>98</xmpG:green>
+ <xmpG:blue>57</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=117 G=76 B=36</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>117</xmpG:red>
+ <xmpG:green>76</xmpG:green>
+ <xmpG:blue>36</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=96 G=56 B=19</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>96</xmpG:red>
+ <xmpG:green>56</xmpG:green>
+ <xmpG:blue>19</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=66 G=33 B=11</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>66</xmpG:red>
+ <xmpG:green>33</xmpG:green>
+ <xmpG:blue>11</xmpG:blue>
+ </rdf:li>
+ </rdf:Seq>
+ </xmpG:Colorants>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:groupName>Grays</xmpG:groupName>
+ <xmpG:groupType>1</xmpG:groupType>
+ <xmpG:Colorants>
+ <rdf:Seq>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=0 G=0 B=0</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>0</xmpG:red>
+ <xmpG:green>0</xmpG:green>
+ <xmpG:blue>0</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=26 G=26 B=26</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>26</xmpG:red>
+ <xmpG:green>26</xmpG:green>
+ <xmpG:blue>26</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=51 G=51 B=51</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>51</xmpG:red>
+ <xmpG:green>51</xmpG:green>
+ <xmpG:blue>51</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=77 G=77 B=77</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>77</xmpG:red>
+ <xmpG:green>77</xmpG:green>
+ <xmpG:blue>77</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=102 G=102 B=102</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>102</xmpG:red>
+ <xmpG:green>102</xmpG:green>
+ <xmpG:blue>102</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=128 G=128 B=128</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>128</xmpG:red>
+ <xmpG:green>128</xmpG:green>
+ <xmpG:blue>128</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=153 G=153 B=153</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>153</xmpG:red>
+ <xmpG:green>153</xmpG:green>
+ <xmpG:blue>153</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=179 G=179 B=179</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>179</xmpG:red>
+ <xmpG:green>179</xmpG:green>
+ <xmpG:blue>179</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=204 G=204 B=204</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>204</xmpG:red>
+ <xmpG:green>204</xmpG:green>
+ <xmpG:blue>204</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=230 G=230 B=230</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>230</xmpG:red>
+ <xmpG:green>230</xmpG:green>
+ <xmpG:blue>230</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=242 G=242 B=242</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>242</xmpG:red>
+ <xmpG:green>242</xmpG:green>
+ <xmpG:blue>242</xmpG:blue>
+ </rdf:li>
+ </rdf:Seq>
+ </xmpG:Colorants>
+ </rdf:li>
+ </rdf:Seq>
+ </xmpTPg:SwatchGroups>
+ </rdf:Description>
+ <rdf:Description rdf:about=""
+ xmlns:pdf="http://ns.adobe.com/pdf/1.3/">
+ <pdf:Producer>Adobe PDF library 9.90</pdf:Producer>
+ </rdf:Description>
+ </rdf:RDF>
+</x:xmpmeta>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<?xpacket end="w"?> endstream endobj 3 0 obj <</Count 1/Kids[7 0 R]/Type/Pages>> endobj 7 0 obj <</ArtBox[256.482 104.78 585.012 489.874]/BleedBox[0.0 0.0 841.89 595.28]/Contents 8 0 R/LastModified(D:20120616184703-07'00')/MediaBox[0.0 0.0 841.89 595.28]/Parent 3 0 R/PieceInfo<</Illustrator 9 0 R>>/Resources<</ColorSpace<</CS0 10 0 R>>/ExtGState<</GS0 11 0 R>>/Properties<</MC0 5 0 R>>>>/Thumb 12 0 R/TrimBox[0.0 0.0 841.89 595.28]/Type/Page>> endobj 8 0 obj <</Filter/FlateDecode/Length 2520>>stream
+HWK% ܿSZ>6>@,G6I?^?QGuneyǗ՟PTWb_nzoE׳j׳Y{\xmyĸ/<Y1.ًyfun&V}u,uք{eO< ^( u/ݨ^&H#:|;?Ѵ8v)VxmJ|NljKC:11S9R#_䓿!mo&T*&2n&wceS
+$9w7$;G(T䏾KO!,k_4\}|,\e=3xS`+H"}Q^׶Qrm2P@ `Tm2P ;ibOWjKY kj;8
+뻴`NcY,Z 8-[ سoMv4A?xn<i PjCE((Z"TQg2d&R(=?v4wĸm<]u@v{&f6=ky3ώ}PFD/&3ͬ ^=& -dZWroSWۦ*h8v^0
+nG DFQAO79,݊gSd%)/8χײ~Ɔpd^%!gLy0>~}rȏpEahvEC&GzЖPMJXebvN8q1X*Ybt2: V( fU@ ;,&šA1aVܙp_scrIZB6c2NZ`h~P ``X64\K!0P9|2MŚ8,$8jv 'h (Q*`@b}\*x`КF+<q j.bV OB#釿밚cC_
+ph6L/_JJ{C1RHf!/E*:c<zeYu'@冔L))f!V"?+̕LF+̕&ːY?GIr{nW(v-o^A,ՏۋzΖbg-8ˌ-{{{=\,' %^b
+`믊km!y@ Vk D$e :zh)V hb4z|ܕ] t^E
+!|
+@[ASp:)-}dDL$] ` sp?
+8;Z]"9+ln#$q-0%MB%?YELjql(f>q8d*6#LccX+Fd?T"\0PAFG*9Y(.;SC)g$4:p;
+"BJ?^[>287Q?XE]M%WQPb?9.R;mBe((Y=G*;[gWL0nR9]crTq3b)R6"kO)u4cp<_I
+(m^a&i@Pq%n<PUmpl5bMV-k2,Y%AUKIN-UIfYO"kfYPj3_[^j])Kr,!%dGfKC:p<E
+Nqs.j^epFA_#!Jh,=k<g8&+#(1t#6^V;[qU23_<g_bPq'3mqWr)&d\&6.>7ER5[>h
+VVJgCFB:iSNe-V5W&)L[Xe<r^"8+u<F>cMaK3_;0W&)NS0LM>'*Ap4:jXP@qLkZni
+EL^)o!s$e5&F9~> endstream endobj 13 0 obj [/Indexed/DeviceRGB 255 14 0 R] endobj 14 0 obj <</Filter[/ASCII85Decode/FlateDecode]/Length 428>>stream
+8;X]O>EqN@%''O_@%e@?J;%+8(9e>X=MR6S?i^YgA3=].HDXF.R$lIL@"pJ+EP(%0
+b]6ajmNZn*!='OQZeQ^Y*,=]?C.B+\Ulg9dhD*"iC[;*=3`oP1[!S^)?1)IZ4dup`
+E1r!/,*0[*9.aFIR2&b-C#s<Xl5FH@[<=!#6V)uDBXnIr.F>oRZ7Dl%MLY\.?d>Mn
+6%Q2oYfNRF$$+ON<+]RUJmC0I<jlL.oXisZ;SYU[/7#<&37rclQKqeJe#,UF7Rgb1
+VNWFKf>nDZ4OTs0S!saG>GGKUlQ*Q?45:CI&4J'_2j<etJICj7e7nPMb=O6S7UOH<
+PO7r\I.Hu&e0d&E<.')fERr/l+*W,)q^D*ai5<uuLX.7g/>$XKrcYp0n+Xl_nU*O(
+l[$6Nn+Z_Nq0]s7hs]`XX1nZ8&94a\~> endstream endobj 5 0 obj <</Intent 15 0 R/Name(Layer 1)/Type/OCG/Usage 16 0 R>> endobj 15 0 obj [/View/Design] endobj 16 0 obj <</CreatorInfo<</Creator(Adobe Illustrator 15.0)/Subtype/Artwork>>>> endobj 11 0 obj <</AIS false/BM/Normal/CA 1.0/OP false/OPM 1/SA true/SMask/None/Type/ExtGState/ca 1.0/op false>> endobj 10 0 obj [/ICCBased 17 0 R] endobj 17 0 obj <</Filter/FlateDecode/Length 2574/N 3>>stream
+HyTSwoɞc [5laQIBHADED2mtFOE.c}08׎8GNg9w߽
+ 
+V)gB0iW8#8wթ8_٥ʨQQj@&A)/g>'K
+x-
+ꇆnQt}MA0alSx k&^>0|>_',G!"F$H:R!zFQd?r 9\A&G rQ hE]a4zBgE#H *B=0HIpp0MxJ$D1D, VĭKĻYdE"EI2EBGt4MzNr!YK ?%_&#(0J:EAiQ(()ӔWT6U@P+!~mD eԴ!hӦh/']B/ҏӿ?a0nhF!X8܌kc&5S6lIa2cKMA!E#ƒdV(kel }}Cq9
+N')].uJr
+ wG xR^[oƜchg`>b$*~ :Eb~,m,-ݖ,Y¬*6X[ݱF=3뭷Y~dó ti zf6~`{v.Ng#{}}jc1X6fm;'_9 r:8q:˜O:ϸ8uJqnv=MmR 4
+n3ܣkGݯz=[==<=G</z^^j^ ޡZQB0FX'+t<u-{__ߘ-G,}/Hh 8mW2p[AiAN#8$X?AKHI{!7<qWy(!46-aaaW @@`lYĎH,$((Yh7ъb<b*b<~L&Y&9%uMssNpJP%MI JlN<DHJIڐtCj'KwKgC%Nd |ꙪO=%mLuvx:HoL!ȨC&13#s$/Y=OsbsrnsO1v=ˏϟ\h٢#¼oZ<]TUt}`IÒsKV-Y,+>TB(/S,]6*-W:#7*e^YDY}UjAyT`#D="b{ų+ʯ:!kJ4Gmt}uC%K7YVfFY .=b?SƕƩȺy چ k5%4m7lqlioZlG+Zz͹mzy]?uuw|"űNwW&e֥ﺱ*|j5kyݭǯg^ykEklD_p߶7Dmo꿻1ml{Mś nLl<9O
+zpg_XQKFAǿ=ȼ:ɹ8ʷ6˶5̵5͵6ζ7ϸ9к<Ѿ?DINU\dlvۀ܊ݖޢ)߯6DScs 2F[p(@Xr4Pm8Ww)Km
+%!PS-Adobe-3.0 %%Creator: Adobe Illustrator(R) 15.0 %%AI8_CreatorVersion: 15.0.0 %%For: (Elena Czubiak) () %%Title: (robot.ai) %%CreationDate: 6/16/12 6:47 PM %%Canvassize: 16383 %%BoundingBox: 256 -491 586 -105 %%HiResBoundingBox: 256.4824 -490.5 585.0117 -105.4063 %%DocumentProcessColors: Cyan Magenta Yellow Black %AI5_FileFormat 11.0 %AI12_BuildNumber: 399 %AI3_ColorUsage: Color %AI7_ImageSettings: 0 %%RGBProcessColor: 0 0 0 ([Registration]) %AI3_Cropmarks: 0 -595.2803 841.8896 0 %AI3_TemplateBox: 421.5 -298.5 421.5 -298.5 %AI3_TileBox: 24.9448 -603.6406 816.9453 8.35986 %AI3_DocumentPreview: None %AI5_ArtSize: 14400 14400 %AI5_RulerUnits: 6 %AI9_ColorModel: 1 %AI5_ArtFlags: 0 0 0 1 0 0 1 0 0 %AI5_TargetResolution: 800 %AI5_NumLayers: 1 %AI9_OpenToView: -649 301 0.6667 1380 862 18 0 0 43 154 0 0 0 1 1 0 1 1 0 1 %AI5_OpenViewLayers: 7 %%PageOrigin:21 -598 %AI7_GridSettings: 72 8 72 8 1 0 0.8 0.8 0.8 0.9 0.9 0.9 %AI9_Flatten: 1 %AI12_CMSettings: 00.MS %%EndComments endstream endobj 20 0 obj <</Length 19973>>stream
+%%BoundingBox: 256 -491 586 -105 %%HiResBoundingBox: 256.4824 -490.5 585.0117 -105.4063 %AI7_Thumbnail: 112 128 8 %%BeginData: 19820 Hex Bytes %0000330000660000990000CC0033000033330033660033990033CC0033FF %0066000066330066660066990066CC0066FF009900009933009966009999 %0099CC0099FF00CC0000CC3300CC6600CC9900CCCC00CCFF00FF3300FF66 %00FF9900FFCC3300003300333300663300993300CC3300FF333300333333 %3333663333993333CC3333FF3366003366333366663366993366CC3366FF %3399003399333399663399993399CC3399FF33CC0033CC3333CC6633CC99 %33CCCC33CCFF33FF0033FF3333FF6633FF9933FFCC33FFFF660000660033 %6600666600996600CC6600FF6633006633336633666633996633CC6633FF %6666006666336666666666996666CC6666FF669900669933669966669999 %6699CC6699FF66CC0066CC3366CC6666CC9966CCCC66CCFF66FF0066FF33 %66FF6666FF9966FFCC66FFFF9900009900339900669900999900CC9900FF %9933009933339933669933999933CC9933FF996600996633996666996699 %9966CC9966FF9999009999339999669999999999CC9999FF99CC0099CC33 %99CC6699CC9999CCCC99CCFF99FF0099FF3399FF6699FF9999FFCC99FFFF %CC0000CC0033CC0066CC0099CC00CCCC00FFCC3300CC3333CC3366CC3399 %CC33CCCC33FFCC6600CC6633CC6666CC6699CC66CCCC66FFCC9900CC9933 %CC9966CC9999CC99CCCC99FFCCCC00CCCC33CCCC66CCCC99CCCCCCCCCCFF %CCFF00CCFF33CCFF66CCFF99CCFFCCCCFFFFFF0033FF0066FF0099FF00CC %FF3300FF3333FF3366FF3399FF33CCFF33FFFF6600FF6633FF6666FF6699 %FF66CCFF66FFFF9900FF9933FF9966FF9999FF99CCFF99FFFFCC00FFCC33 %FFCC66FFCC99FFCCCCFFCCFFFFFF33FFFF66FFFF99FFFFCC110000001100 %000011111111220000002200000022222222440000004400000044444444 %550000005500000055555555770000007700000077777777880000008800 %000088888888AA000000AA000000AAAAAAAABB000000BB000000BBBBBBBB %DD000000DD000000DDDDDDDDEE000000EE000000EEEEEEEE0000000000FF %00FF0000FFFFFF0000FF00FFFFFF00FFFFFF %524C45FDFCFFFD05FFAEFD2BFFAEFD43FF827BCFFD28FF7B82A8FD42FF82 %8282FD27FFA78282FD43FFCF7B82A7FD25FFA8827BAEFD44FFA77BA6FD25 %FFA77BA7FD45FFA8827BADFD23FFCF7B81A8FD46FFA78282FD23FF8282A6 %FD48FF7B81A7FD0DFFCFFFAEFFA8FD0FFFA78281CFFD48FFAE7BA6CFFD07 %FFAEAEA7A782A682A6828281A682A7A7CFAEFD08FFA67BADFD4AFF8257A7 %FFFFFFCFA7A67B827B817B827B827B827B827B827B817B827BA6A7CFFFFF %FFA77B82A8FD4AFFA8A681CFA7A7828281A682A681A682A681A682A681A6 %82A681A68282818281A6A7CF8282A7FD4CFF82827B817B8281827B828182 %7B8281827B8281827B8281827B8281827B827B817B8282FD4CFFA7A681A6 %828281A6828281A6828281A6828281A6828281A6828281A6828281A68282 %81A6A7FD49FFAE7B817B827B827B827B827B827B827B827B827B827B827B %827B827B827B827B827B827B827B827BA7FD46FFAD81A682A681A682A681 %A682A681A682A681A682A681A682A681A682A681A682A681A682A681A682 %8281ADCFFD42FFA8A67B827B8281827B8281827B8281827B8281827B8281 %827B8281827B8281827B8281827B8281827B8281827B82A8FD40FFA8827B %A6828281A6828281A6828281A6828281A6828281A6828281A6828281A682 %8281A6828281A6828281A682828182A7FD3EFFA7827B827B827B827B827B %827B827B827B827B827B827B827B827B827B827B827B827B827B827B827B %827B827B827B827B81A7FD3CFFA78282A681A682A681A682A681A682A681 %A682A681A682A681A682A681A682A681A682A681A682A681A682A681A682 %A681A68282A7FD3AFFA7817B8281827B8281827B8281827B8281827B8281 %827B8281827B8281827B8281827B8281827B8281827B8281827B8281827B %828181A7FD38FFA882818281A6828281A682828182818281A6828281A682 %8281A6828281A6828281A6828281A6828281A681828182818281A6828281 %A68282A7FD36FFA8827B827B827B827B827B82A7CFA7A67B827B827B827B %827B827B827B827B827B827B827B827B827B827BA6A7CFA7827B827B827B %827B827B82A8FD35FFA781A682A681A682A681A6A7FD04FFA781A682A681 %A682A681A682A681A682A681A682A681A682A681A6FD04FFAE8281A682A6 %81A682A681A6FD34FFAD7B827B8281827B8281827BFD05FFA7817B828182 %7B8281827B8281827B8281827B8281827B828181A7FD05FF82827B828182 %7B8281827BADFD33FF81A6828281A6828281A681A6FD05FFCF818281A682 %8281A6828281A6828281A6828281A6828281A681ADFD05FFA7818281A682 %8281A6828281CFFD31FF82817B827B827B827B827B827BA7FD04FF82827B %827B827B827B827B827B827B827B827B827B827B827B8282FD04FFAE7B82 %7B827B827B827B827B8182FD30FFCF8281A682A681A682A681A6828281AE %CFCF82A682A681A682A681A682A681A682A681A682A681A682A681A68282 %82CFCFAE82A682A681A682A681A682A68182AEFD2FFFA77B827B8281827B %8281827B8281827B827B827B8281827B8281827B8281827B8281827B8281 %827B8281827B8281827B827B827B8281827B8281827B8281827BA7FD2FFF %81A6828281A6828281A6828281A6828281A6828281A6828281A6828281A6 %828281A6828281A6828281A6828281A6828281A6828281A6828281A68282 %81A6828281FD2EFFA7817B827B827B827B827B827B827B827B827B827B82 %7B827B827B827B827B827B827B827B827B827B827B827B827B827B827B82 %7B827B827B827B827B827B827B8182FD2DFFA781A682A681A682A681A682 %A681A682A681A682A681A682A681A682A681A682A681A682A681A682A681 %A682A681A682A681A682A681A682A681A682A681A682A681A6FD2DFF8182 %7B8281827B8281827B8281827B8281827B8281827B8281827B8281827B82 %81827B8281827B8281827B8281827B8281827B8281827B8281827B828182 %7B8281827BCFFD2BFFA782828281A6828281A6828281A6828281A6828281 %A6828281A6828281A6828281A6828281A6828281A6828281A6828281A682 %8281A6828281A6828281A6828281A68282A7FD2BFFA77B827B827B827B82 %7B827B827B827B827B827B827B827B827B827B827B827B827B827B827B82 %7B827B827B827B827B827B827B827B827B827B827B827B827B827B827BA7 %FD2BFF82A682A681A682A681A682A681A682A681A682A681A682A681A682 %A681A682A681A682A681A682A681A682A681A682A681A682A681A682A681 %A682A681A682A681A6828282FD2AFFCFA67B8281827B8281827B8281827B %8281827B8281827B8281827B8281827B8281827B8281827B8281827B8281 %827B8281827B8281827B8281827B8281827B8281827B828182AEFD2AFF82 %8281A6828281A6828281A6828281A6828281A6828281A6828281A6828281 %A6828281A6828281A6828281A6828281A6828281A6828281A6828281A682 %8281A6828281A682FD2AFFA8827B827B827B827B827B827B827B827B827B %827B827B827B827B827B827B827B827B827B827B827B827B827B827B827B %827B827B827B827B827B827B827B827B827B827B82A8FD2AFF818281A682 %8281A6828281A6828281A6828281A6828281A6828281A6828281A6828281 %A6828281A6828281A6828281A6828281A6828281A6828281A6828281A682 %8281A681FD2AFFCFCFA8CFA8CFA8CFA8CFA8CFA8CFA8CFA8CFA8CFA8CFA8 %CFA8CFA8CFA8CFA8CFA8CFA8CFA8CFA8CFA8CFA8CFA8CFA8CFA8CFA8CFA8 %CFA8CFA8CFA8CFA8CFA8CFA8CFA8CFA8CFCFFD1CFFCFAEA7ADA7AEAEFD53 %FFCFCFA7A7A7CFCFFD0EFF82827B817B827B8282FD06FFCFA7CFA8CFA8CF %A8CFA8CFA8CFA8CFA8CFA8CFA8CFA8CFA8CFA8CFA8CFA8CFA8CFA8CFA8CF %A8CFA8CFA8CFA8CFA8CFA8CFA8CFA8CFA8CFA8CFA8CFA8CFA8CFA8CFA8CF %A8CFA8FD05FFA7827B827B817B8282FD0CFF828282A681A682A6818282FD %05FF82A6828281A6828281A6828281A6828281A6828281A6828281A68282 %81A6828281A6828281A6828281A6828281A6828281A6828281A6828281A6 %828281A6828281A6828281FD05FFA68281A682A681A6828282FD0AFF8281 %7B8281827B8281827B8282FD04FFA67B8281827B8281827B8281827B8281 %827B8281827B8281827B8281827B8281827B8281827B8281827B8281827B %8281827B8281827B8281827B8281827B8281827B827B82A8FFFFFF828281 %827B8281827B82818182FD08FFA782828281A6828281A682828182A7FFFF %FF828281A6828281A6828281A6828281A6828281A6828281A6828281A682 %8281A6828281A6828281A6828281A6828281A6828281A6828281A6828281 %A6828281A6828281A682FFFFFFAE8281A6828281A6828281A68282A7FD07 %FFA67B827B827B827B827B827B827BA6FFFFA8A67B827B827B827B827B82 %7B827B827B827B827B827B827B827B827B827B827B827B827B827B827B82 %7B827B827B827B827B827B827B827B827B827B827B827B827B827B82AEFF %FFA77B827B827B827B827B827B827B82A8FD06FF82A682A681A682A681A6 %82A681A682FFFFFF828281A682A681A682A681A682A681A682A681A682A6 %81A682A681A682A681A682A681A682A681A682A681A682A681A682A681A6 %82A681A682A681A682A681A682A681A682FFFFFF828281A682A681A682A6 %81A682A681CFFD05FFA8827B8281827B8281827B8281827B82A8FFCFA67B %827B8281827B8281827B8281827B8281827B8281827B8281827B8281827B %8281827B8281827B8281827B8281827B8281827B8281827B8281827B8281 %827B8281827B82CFFFA8827B827B8281827B8281827B828181A7FD06FF82 %8281A6828281A6828281A682827BCFFFFFFD048281A6828281A6828281A6 %828281A6828281A6828281A6828281A6828281A6828281A6828281A68282 %81A6828281A6828281A6828281A6828281A6828281A6828281FFFFFF81A6 %828281A6828281A6828281A681AEFD05FFA8827B827B827B827B827B827B %827B81A7FFFFA67B827B827B827B827B827B827B827B827B827B827B827B %827B827B827B827B827B827B827B827B827B827B827B827B827B827B827B %827B827B827B827B827B827B827B82A8FFA8827B827B827B827B827B827B %827B81A7FD06FF828281A682A681A682A681A682A681CFFFFF82A682A681 %A682A681A682A681A682A681A682A681A682A681A682A681A682A681A682 %A681A682A681A682A681A682A681A682A681A682A681A682A681A682A681 %A682A681FFFFFF82A682A681A682A681A682A681A681CFFD05FFA8828182 %7B8281827B8281827B828181A8FFFFA67B8281827B8281827B8281827B82 %81827B8281827B8281827B8281827B8281827B8281827B8281827B828182 %7B8281827B8281827B8281827B8281827B8281827B828182A8FFAE827B82 %81827B8281827B8281827B82A7FD05FFCF81A6828281A6828281A6828281 %A681CFFFFF828281A6828281A6828281A6828281A6828281A6828281A682 %8281A6828281A6828281A6828281A6828281A6828281A6828281A6828281 %A6828281A6828281A6828281A682FFFFFF828281A6828281A6828281A682 %827BCFFD05FFA8827B827B827B827B827B827B827B82A8FFA8A67B827B82 %7B827B827B827B827B827B827B827B827B827B827B827B827B827B827B82 %7B827B827B827B827B827B827B827B827B827B827B827B827B827B827B82 %7B827B82AEFFA8827B827B827B827B827B827B827B81A7FD05FFCF81A682 %A681A682A681A682A681A681CFFFFF828281A682A681A682A681A682A681 %A682A681A682A681A682A681A682A681A682A681A682A681A682A681A682 %A681A682A681A682A681A682A681A682A681A682A681A682FFFFFF828281 %A682A681A682A681A682A681CFFD05FFA8827B8281827B8281827B828182 %7B82A8FFCFA67B827B8281827B8281827B8281827B8281827B8281827B82 %81827B8281827B8281827B8281827B8281827B8281827B8281827B828182 %7B8281827B8281827B8281827B82CFFFA8827B827B8281827B8281827B82 %8181A7FD06FF828281A6828281A6828281A682827BCFFFFFFD048281A682 %8281A6828281A6828281A6828281A6828281A6828281A6828281A6828281 %A6828281A6828281A6828281A6828281A6828281A6828281A6828281A682 %8281FFFFFF81A6828281A6828281A6828281A681AEFD05FFA8827B827B82 %7B827B827B827B827B81A7FFFFA67B827B827B827B827B827B827B827B82 %7B827B827B827B827B827B827B827B827B827B827B827B827B827B827B82 %7B827B827B827B827B827B827B827B827B827B827B82A8FFA8827B827B82 %7B827B827B827B827B81A7FD06FF828281A682A681A682A681A682A681CF %FFFF82A682A681A682A681A682A681A682A681A682A681A682A681A682A6 %81A682A681A682A681A682A681A682A681A682A681A682A681A682A681A6 %82A681A682A681A682A681FFFFFF82A682A681A682A681A682A681A681CF %FD05FFA88281827B8281827B8281827B828181A8FFFFA67B8281827B8281 %827B8281827B8281827B8281827B8281827B8281827B8281827B8281827B %8281827B8281827B8281827B8281827B8281827B8281827B8281827B8281 %82A8FFAE827B8281827B8281827B8281827B82A7FD05FFCF81A6828281A6 %828281A6828281A681CFFFFF828281A6828281A6828281A6828281A68282 %81A6828281A6828281A6828281A6828281A6828281A6828281A6828281A6 %828281A6828281A6828281A6828281A6828281A682FFFFFF828281A68282 %81A6828281A682827BCFFD05FFA8827B827B827B827B827B827B827B82A8 %FFA8A67B827B827B827B827B827B827B827B827B827B827B827B827B827B %827B827B827B827B827B827B827B827B827B827B827B827B827B827B827B %827B827B827B827B827B82AEFFA8827B827B827B827B827B827B827B81A7 %FD05FFCF81A682A681A682A681A682A681A681CFFFFF828281A682A681A6 %82A681A682A681A682A681A682A681A682A681A682A681A682A681A682A6 %81A682A681A682A681A682A681A682A681A682A681A682A681A682A681A6 %82FFFFFF828281A682A681A682A681A682A681CFFD05FFA8827B8281827B %8281827B8281827B82A8FFCFA67B827B8281827B8281827B8281827B8281 %827B8281827B8281827B8281827B8281827B8281827B8281827B8281827B %8281827B8281827B8281827B8281827B8281827B82CFFFA8827B827B8281 %827B8281827B828181A7FD06FF828281A6828281A6828281A682827BCFFF %FFFD048281A6828281A6828281A6828281A6828281A6828281A6828281A6 %828281A6828281A6828281A6828281A6828281A6828281A6828281A68282 %81A6828281A6828281FFFFFF81A6828281A6828281A6828281A681AEFD05 %FFA8827B827B827B827B827B827B827B81A7FFFFA67B827B827B827B827B %827B827B827B827B827B827B827B827B827B827B827B827B827B827B827B %827B827B827B827B827B827B827B827B827B827B827B827B827B827B82A8 %FFA8827B827B827B827B827B827B827B81A7FD06FF828281A682A681A682 %A681A682A681CFFFFF82A682A681A682A681A682A681A682A681A682A681 %A682A681A682A681A682A681A682A681A682A681A682A681A682A681A682 %A681A682A681A682A681A682A681A682A681FFFFFF82A682A681A682A681 %A682A681A681CFFD05FFA88281827B8281827B8281827B828181A8FFFFA6 %7B8281827B8281827B8281827B8281827B8281827B8281827B8281827B82 %81827B8281827B8281827B8281827B8281827B8281827B8281827B828182 %7B8281827B828182A8FFAE827B8281827B8281827B8281827B82A7FD05FF %CF81A6828281A6828281A6828281A681CFFFFF828281A6828281A6828281 %A6828281A6828281A6828281A6828281A6828281A6828281A6828281A682 %8281A6828281A6828281A6828281A6828281A6828281A6828281A682FFFF %FF828281A6828281A6828281A682827BCFFD05FFA8827B827B827B827B82 %7B827B827B82A8FFA8A67B827B827B827B827B827B827B827B827B827B82 %7B827B827B827B827B827B827B827B827B827B827B827B827B827B827B82 %7B827B827B827B827B827B827B827B827B82AEFFA8827B827B827B827B82 %7B827B827B81A7FD05FFCF81A682A681A682A681A682A681A681CFFFFF82 %8281A682A681A682A681A682A681A682A681A682A681A682A681A682A681 %A682A681A682A681A682A681A682A681A682A681A682A681A682A681A682 %A681A682A681A682FFFFFF828281A682A681A682A681A682A681CFFD05FF %A8827B8281827B8281827B8281827B82A8FFCFA67B827B8281827B828182 %7B8281827B8281827B8281827B8281827B8281827B8281827B8281827B82 %81827B8281827B8281827B8281827B8281827B8281827B8281827B82CFFF %A8827B827B8281827B8281827B828181A7FD06FF828281A6828281A68282 %81A682827BCFFFFFFD048281A6828281A6828281A6828281A6828281A682 %8281A6828281A6828281A6828281A6828281A6828281A6828281A6828281 %A6828281A6828281A6828281A6828281FFFFFF81A6828281A6828281A682 %8281A681AEFD05FFA8827B827B827B827B827B827B827B81A7FFFFA67B82 %7B827B827B827B827B827B827B827B827B827B827B827B827B827B827B82 %7B827B827B827B827B827B827B827B827B827B827B827B827B827B827B82 %7B827B827B82A8FFA8827B827B827B827B827B827B827B81A7FD06FF8282 %81A682A681A682A681A682A681CFFFFF82A682A681A682A681A682A681A6 %82A681A682A681A682A681A682A681A682A681A682A681A682A681A682A6 %81A682A681A682A681A682A681A682A681A682A681A682A681FFFFFF82A6 %82A681A682A681A682A681A681CFFD05FFA88281827B8281827B8281827B %828181A8FFFFA67B8281827B8281827B8281827B8281827B8281827B8281 %827B8281827B8281827B8281827B8281827B8281827B8281827B8281827B %8281827B8281827B8281827B828182A8FFAE827B8281827B8281827B8281 %827B82A7FD05FFCF81A6828281A6828281A6828281A681CFFFFF828281A6 %828281A6828281A6828281A6828281A6828281A6828281A6828281A68282 %81A6828281A6828281A6828281A6828281A6828281A6828281A6828281A6 %828281A682FFFFFF828281A6828281A6828281A682827BCFFD05FFA8827B %827B827B827B827B827B827B82A8FFA8A67B827B827B827B827B827B827B %827B827B827B827B827B827B827B827B827B827B827B827B827B827B827B %827B827B827B827B827B827B827B827B827B827B827B827B82AEFFA8827B %827B827B827B827B827B827B81A7FD05FFCF81A682A681A682A681A682A6 %81A681CFFFFF828281A682A681A682A681A682A681A682A681A682A681A6 %82A681A682A681A682A681A682A681A682A681A682A681A682A681A682A6 %81A682A681A682A681A682A681A682FFFFFF828281A682A681A682A681A6 %82A681CFFD05FFA8827B8281827B8281827B8281827B82A8FFCFA67B827B %8281827B8281827B8281827B8281827B8281827B8281827B8281827B8281 %827B8281827B8281827B8281827B8281827B8281827B8281827B8281827B %8281827B82CFFFA8827B827B8281827B8281827B828181A7FD06FF828281 %A6828281A6828281A6828281FFFFFFFD048281A6828281A6828281A68282 %81A6828281A6828281A6828281A6828281A6828281A6828281A6828281A6 %828281A6828281A6828281A6828281A6828281A6828281FFFFFF82A68282 %81A6828281A6828281A681CFFD05FFA8827B827B827B827B827B827B827B %82A8FFFFA67B827B827B827B827B827B827B827B827B827B827B827B827B %827B827B827B827B827B827B827B827B827B827B827B827B827B827B827B %827B827B827B827B827B827B82A8FFFF827B827B827B827B827B827B827B %82A8FD06FFA78282A682A681A682A681A68282A6FFFFFF82A682A681A682 %A681A682A681A682A681A682A681A682A681A682A681A682A681A682A681 %A682A681A682A681A682A681A682A681A682A681A682A681A682A681A682 %A681FFFFFFA78282A681A682A681A682A682A682FD08FF7B827B8281827B %8281827B827BCFFFFFFFA67B8281827B8281827B8281827B8281827B8281 %827B8281827B8281827B8281827B8281827B8281827B8281827B8281827B %8281827B8281827B8281827B8281827B828182A8FFFFFF7B8281827B8281 %827B8281827BCFFD08FFCF818281A6828281A682827BCFFD04FF828281A6 %828281A6828281A6828281A6828281A6828281A6828281A6828281A68282 %81A6828281A6828281A6828281A6828281A6828281A6828281A6828281A6 %828281A682FD04FFCF7B82828281A6828281A681ADFD0AFFAE7B817B827B %827B817BAEFD04FFA8A67B827B827B827B827B827B827B827B827B827B82 %7B827B827B827B827B827B827B827B827B827B827B827B827B827B827B82 %7B827B827B827B827B827B827B827B827B82AEFD04FFAE7B817B827B827B %817BADFD0DFFA7A6828281A6A7FD07FF828281A682A681A682A681A682A6 %81A682A681A682A681A682A681A682A681A682A681A682A681A682A681A6 %82A681A682A681A682A681A682A681A682A681A682A681A682FD07FFA7A6 %82A682A6A6FD10FFCFFFA8CFCFFD07FFCFA67B827B8281827B8281827B82 %81827B8281827B8281827B8281827B8281827B8281827B8281827B828182 %7B8281827B8281827B8281827B8281827B8281827B8281827B82CFFD09FF %A8FFCFFD1EFFFD048281A6828281A6828281A6828281A6828281A6828281 %A6828281A6828281A6828281A6828281A6828281A6828281A6828281A682 %8281A6828281A6828281A6828281FD2BFFA67B827B827B827B827B827B82 %7B827B827B827B827B827B827B827B827B827B827B827B827B827B827B82 %7B827B827B827B827B827B827B827B827B827B827B827B827B82A8FD2AFF %82A682A681A682A681A682A681A682A681A682A681A682A681A682A681A6 %82A681A682A681A682A681A682A681A682A681A682A681A682A681A682A6 %81A682A681A682A681FD2BFFA67B8281827B8281827B8281827B8281827B %8281827B8281827B8281827B8281827B8281827B8281827B8281827B8281 %827B8281827B8281827B8281827B8281827B828182A8FD2AFFA78281A682 %8281A6828281A6828281A6828281A6828281A6828281A6828281A6828281 %A6828281A6828281A6828281A6828281A6828281A6828281A6828281A682 %82818282FD2BFFAE7B827B827B827B827B827B827B827B827B827B827B82 %7B827B827B827B827B827B827B827B827B827B827B827B827B827B827B82 %7B827B827B827B827B827B827B827BA7FD2CFFA681A682A681A682A681A6 %82A681A682A681A682A681A682A681A682A681A682A681A682A681A682A6 %81A682A681A682A681A682A681A682A681A682A681A682A681A6CFFD2CFF %A7817B8281827B8281827B8281827B8281827B8281827B8281827B828182 %7B8281827B8281827B8281827B8281827B8281827B8281827B8281827B82 %81827B828181A7FD2EFFA78281A6828281A6828281A6828281A6828281A6 %828281A6828281A6828281A6828281A6828281A6828281A6828281A68282 %81A6828281A6828281A682828182A7FD30FFA7827B827B827B827B827B82 %7B827B827B827B827B827B827B827B827B827B827B827B827B827B827B82 %7B827B827B827B827B827B827B827B827B827B82A7FD33FFCFA6A682A682 %A682A682A681A682A681A682A681A682A681A682A682A682A682A682A681 %A682A681A682A681A682A681A682A682A682A682A6A6AECFFD38FFCFFFFF %FFA8A67B827B8281827B8281827B828181A7FFFFFFCFFFFFFFCFFFA7827B %8281827B8281827B8281827B82A8FFCFFFFFFFCFFD40FF82A6828281A682 %8281A6828281A681AEFD09FFCF818281A6828281A6828281A6828281FD46 %FFAE827B827B827B827B827B827B827B82A7FD09FFA7827B827B827B827B %827B827B827B82A8FD46FF82A682A681A682A681A682A681A681AEFD09FF %CF81A681A682A681A682A681A682A681FD46FFCF827B8281827B8281827B %8281827B82A7FD09FFA78281827B8281827B8281827B828182A8FD46FF82 %8281A6828281A6828281A682827BAEFD09FFCF81A6828281A6828281A682 %8281A681CFFD45FFA8827B827B827B827B827B827B827B81A7FD09FFA782 %7B827B827B827B827B827B827B82A8FD46FF828281A682A681A682A681A6 %82A681CFFD09FFCF81A682A681A682A681A682A681A681CFFD45FFA8A67B %827B8281827B8281827B828181A7FD09FFA8827B8281827B8281827B8281 %827B82A8FD46FF82A6828281A6828281A6828281A681AEFD09FFCF818281 %A6828281A6828281A6828281FD46FFAE827B827B827B827B827B827B827B %82A7FD09FFA7827B827B827B827B827B827B827B82A8FD46FF82A682A681 %A682A681A682A681A681AEFD09FFCF81A681A682A681A682A681A682A681 %FD46FFCF827B8281827B8281827B8281827B82A7FD09FFA78281827B8281 %827B8281827B828182A8FD46FF828281A6828281A6828281A682827BAEFD %09FFCF81A6828281A6828281A6828281A681CFFD45FFA8827B827B827B82 %7B827B827B827B81A7FD09FFA7827B827B827B827B827B827B827B82A8FD %46FF828281A682A681A682A681A682A681CFFD09FFCF81A682A681A682A6 %81A682A681A681CFFD45FFA8A67B827B8281827B8281827B828181A7FD09 %FFA8827B8281827B8281827B8281827B82A8FD46FF82A6828281A6828281 %A6828281A681CFFD09FFCF818281A6828281A6828281A6828281FD47FFA6 %7B827B827B827B827B827B827B82A8FD09FFA8827B827B827B827B827B82 %7B827B82A8FD46FFA78282A681A682A681A682A681A682FD0BFFA68282A6 %82A681A682A681A68282A6FD48FF7B8281827B8281827B8281827BAEFD0B %FFCF7B827B8281827B8281827B827BCFFD48FFCF7B82828281A6828281A6 %81A7FD0DFFAE818281A6828281A682827BCFFD4AFFAE7B817B827B827B81 %7BA7FD0FFFAD7B817B827B827B827BA7FD4DFFA7A681A681A682CFFD11FF %CFA6A6818281A6A7FD50FFCFCFA8CFAEFD15FFA8CFA8CFAEFDFCFFFD0CFF %FF %%EndData endstream endobj 21 0 obj <</Length 65536>>stream
+%AI12_CompressedDatax\u&j~8B阈z<#
+KvC60@Ϻ}kAgPG"ve<g//u:/޽|_]_~ݷ/W^z_?w߾zW'#_yqu?W/W%޿~I{޾~>:گJo/o}?诱iwoz揷o_]ڮ(3^A/b߽]eo וLcO\oo/_~o}?xs/_~oW_|/mD/鞿~*Fށ߽z|?sr¥si5/?״._Ar_MoӾ{/ :u!_ǘ*~o^>ˎiHs?/^+ݹr=KW_Ո*:9~`m}~u7o߼yw
+L)%ӑtHCN|CqE;rΉHG!=qOtA[h]d*v't<q/ǝ~СMAr^Eف(?A(ǃ~qk clGߎvr~)O|HN<K?~>s<dO ` Gn#qBoG};ɑώxrг=ƃwO'8=G Wȑ\OZ
+@ڣ VSXwt|v@ݣ HY렭=~M9K @#"#*rThrva1帱{;ϣDO9GlGݎvrЃc|r\8n/w8ҏ:.sxr|ow;!qtPN;~cl")kNawgvNo'TqB~'d‘B s${t8xJϒq⟣y4X|qp
+xXn8\8?`u|dw&U!30wTC5ȑϮ?S}B(%F<LwbޛJ(~,*fX],Aدl{l })T ijދ |SW]6wQyؽ엾Q1Ij60
+ kҼQ"vDŰEM!Yib<$1
+aKE܅ȟY4Sh>G#i478͢;\>Brc!`^ո<9XeTe
+ٌB5 aj x[¬d}P30+QDIR#(&f ވPCi(펙;?nyD9X.f9bó$c~Vn%=QhR^pٛ_^~PW%]Ry'c,90K*HGfu,8]d O1
+nrD}ԮKVP9r/|WͽU]BMdSM+W>0\byRdi;<vRhN
+- ~h叶vko
+ '{+,{/,{͙wg6߹ŗ;rV(R 0w͙8ny];1 M'v`4+O/UY~4,* `y9jJiE.w\5jJO-fo7qL]`=}w2v#P%l;5 Չ#E:AVKU<41&V”UXV;(7 `!bT۪T39CK} g4Ҷ~i6mf{ײ͋e.$OKvaI+^|O*r/[ʧV|\/ƻ]${-hF[-ZaRxH)8<L׺aWc0L>h%yψZϬb͞erHo=>.%XndAm[#s ;;4kzg{ah5ًC,Ǔ<y8wg{1ḠlhK[nziOc(;mݚdإt3wPOȆむO<cѢ33L fSSt"U R:uȳD3[k#"½w A_Pa)`?4}$7ːiibrbj/vSꝂGBRGJ ^!~[~DSRw!Ux*$iU|CnvAJ¢yRdu#OGm^Vq0yVm(C9
+P0qwYћ׶~50C
+Pv7l Orr!ͅ>M; (OҶƶ7%#؍iUw߀uݟ./0IG&y
+ip+N̶3
+ =[dN S#/-]Œ/. X,Th.jA݁pwUb[ \O$@~}qtlu}x|
+[`]\qM'pvGZY7[Ԥ?19eһY]q$yZ&>'ę{lq)r'ޤ |tK:ˢ8x/x@=˫`$u^{NIݩi߹p] ~mRqlݛǓ–PcdsqlLb'Ӏ .ܡԥSHİwOҹɊ$j +Nщb(ssԱSqw,|'$fSRD?A-΋ =GLqK{NR.RC;|UdcervQI_;&OniEM{(-:ٯIMN} !]Br<Ȱ D3qܓ*IE5"F5ԇ$f^Nw ϷRI1Jv$)7:*%gAj4o%(; qUr!fPYo$-DR7kYP/PW읕R_EA8wzpWԋgӏ]r?.x>bKL
+I3)|&~Z!5Or ĜDXߴ뜌N&Ggly4s^6iygsgs=\lgsb?b>gRL
+txX:`We fjU-2(fEhj
+U걆<x):*Uxs<+2nSJ
+IuRK8I]v8=Râ>TEwZҭe҂6jL2ά'ljqnSP5N p۳<anc'
+8AzӧJO8>i)4' ,{"8.&p{r6x =%R871͔e,Ɵ^*I>
+/PX~(zp-Zf'7KgՄ*= e zZwEz$Z>֥5im9hϛl6#nC69{<z'YуNhUk㝓Yd+p^hvRFnF{pXy-zϊ˚>3T.=?seU}|1U`=+wj>gRL
+Ia'-C:Wpи4d~L
+
++:$zh{$B%yNUnnfv~:)ﭠ7 Eʰ
+ya_]h=ߘjdP46h
+>SwW)|ŻU||
+_8>WF<Ϝ^Y-яtima͖VJ*iOU0X|I;]kf>qOyO|%}ywliiOK%.-8i bq?p|o۩ꤙ7(̎~\jewv0X'82>Zb%ju!tQ!DS0غo/k^ H2ħ?+=tIdOK ?&\U|&w$ynӏ;.>&?0dKZCh]_: n
+U^$67@~3@1
+N*9UsTϩŸ?~&Ϥ~re P:~g\8taӫ/n߾廫zW߼|%#}al0^>f}8NG2n?|g5zc4laIHRIkF ؄5d&Xұ"R^0ønYxG73 ̋lA.x0~$8tBTq<Ky_WY8t05QzGA:ǃmYi="s/VRҝjA
+wkyk*F3PbZ#ʮ ]˙$[ld&8V@2l7d(LrM*xXqiۃJ?,3&H|/8i5*"ji\(R[5 HƜ3:7Ä Ḧ́D72lp Nq Q\TzRBrX9u{Bx.sH~9IN]:/wMqQ$!ÏE͎qBA63Ȇ )6
+=,cܟM`\$Ӊz˭zNW'L6aP&ԟJOx> ,9u:;7NBaQ.\yl q>%A^ Qe&S^
+A2=O$9z#EC/|1dD/qpN!~xI+2CHE2u8QgݛC~<khNyrt Z߼}w޼_|9>? %_~~__~{E'Oq >!nz>{Y(rß^wZro+Yi [wBDxIn{\}1Mefu{r/ _1U5z͓SrدRmfzCo*kQ՗t+Qk۔Ksѭ3Vy+d}=/}rDP4o!ṟͤ:#&zaqf_[HMa''ԙׁIo վnB@/, dH C|%)ʿ@C8׮Uȱȏ>3 S<sG>S8 vy2=>z
+21I\MN DDG5v]Oב`o ҿףο)=|AHzAMC&\T 0鉎@OD8 NClT)ڹ[LAJV/ <=rkVS+YZwZt|A
+{Ʈf4GJ>h 证[Hv2QT|/w.;s1ȽL#Nnw}ثO sU CgA2N {i\U貮D;@ Ud^Nߗ{F%zcdB\#%Ԫ@*E獅w12|
+HpQ{%c\]/+O)g(8%7}VDx8.)Zr7nSJ0e'8%DOϱ, +#*]D<.؂>K9g9IVg<g&
+ )_#8Vᚃob& mN Of"F[Pt_+Ðwh$.Lqb" kUbjxUeⳁkaG{ir,0u~n,㈟н18RŠ3qڻnlT:D1_/ 6DDv1NFOAtϿ5%FF!B,JsXgz27;B1My߈LȯDw8F|K.9xxے>ʺ
+# L)ozDPt]V㤯}"U]ꑮ3&BVVϡt[?g4DhC լWĮ[ϙib8tf±3),x:k<]N~ iIC&=eR bcu~%žyL;sczW}߅23DdG"=CVYɗOq
+D&gH'M"͒ }F1'{qgSatv"=f|6&L;#˃w݊QշMVLjyg ;ȥ1E'U;> iNrˬag*ሶDV~RU%d2$ )[_iY*2RJi+um&{X
+7l`E7
+ҰO?i`WFL;5JۼD#n:5n'Hsr#q~]]fƉq9
+Pwrk)Ekeшaj\rjT <{7cg5;<gx:IWA*
+zNr" :{8sO"]EBXU]9>[1MY\^
+ĆkPjk KH
+Vq Segߐ{@Hẉ{Y|R
+n j
+V(j S<ج
+3]VCP
+o8_r9Ȟw
+s5M-6Lcq&1PpjX`9ӕx
+&i j(I?) m!`\Jq4^I E=Ól/d3JC>zƛrS5bKhј1]a.Ô`i 0$XJǧpbVɺ;FHun x h}cKcҏ+gid Lj@>ƣ%FbW-βTAtO@xXԖ_ .Q²>gt^IS`jTNTn] =Mؽ6RhF lQB, Sqot@T3Q+avHN@TRyR޺=WwO2'eoi+/ Zfp,Vk#LyC#b)I]t]>`\Z
+Qdw![lTÖ? #'5g?[BOsIZ۔|iiE5׭)p2L`e,:v%w@
+ 7|4y8(d8\"@_NdӪvF>ӭ硙.GEA'6dYR`^L{&jx./!ԵEoS b0˒dܲIMD;jaʉeS$05۵dY|%O7%R
+cI=d,/}L5MJ2h1yΣmfJ0l<G6 c=V<Kxl)I[^ b3tӔBI?Gy}WmUۯAbSA `*@GJx-xi\+Ei*dG0,ߜ9qwv.AZ!.?F^ h3 mȾ-@Q¹U
+Xu-dN&)% x-+X%P B^~mď kC%aTrCe<Ov)(%tKXCU}dl4̗^Isa45ϜZJ̌=qXٍր0v^BhWkT=9a:rD`
+1JKAYei^'B m~2Y,T.M&ɦ3@oDlB?V4F90-`<x@"+.[AJCqH}O^)!RIsxNJWA{&wi&l4;U:H E*soVUAZdgZ
+AeLPǞ)Ȩm9%a/ /y@߅ sipt4jG
+J{-x8\ezBWInpő0
+ xT=i 7ZD i<] f6!Z1%l^QH ^(7`io9м[AȕBՑXPlҹ 6V<vPHcµ2җ3WAΰ5!"IhC  vd jiAHD%KRS=E:hT)I"0ƲK!6]>ċ O74|pө|kxE'|{2!}ue8#(fN%qWGb)onB 81V4<iVCLHǀ]th +,ߋ16 Vwk,tGf `TM1f kvf`z1?jd`1F͛5$ BAR0FWm&Tj0PPKD@2̓
+ܥ!O_VV<wٷeLp7/T,KW|
+ʵВ2jqK§I0g
+fjxq*XOY
+8̤,`F΃'l Cq<6RtPf4?gT|W`e$$ W1XpДrueBd6'~GgZ-:搖E$Ci"DU §fRsVa:G8&Ғw,b/%k6$W(j6ag`Ag'!E0x"M!c4ísoZI0Far DIJQ!rR<gOAs+]*mh&Y
+BTtGh/ 
+$(NkDn<jeS i3FOhPjkyq.[k{6k4!ZЫC@b&rII}u QKc!xh,5(6JH &jq. TMrP((<N-^2N*tۅn7QR^T/$ٻd$˼hn!xty٣"jb5ό\a j61ڐİ *M8F29)iQ Q M6%8CiqZBۋJ-!'PJkV%30fqTTOSiq:J32fʮK/E.p6j`<SH:LG4mWě-6MQMܖ_OE-H
+Z7Ӧ+AuL1ڂY|!ic42C^@Q/l`,Y=ZT>Vy"2ut
+:ӹGWnմVZi
+fE 20 4 ҁUA[I9&zu(>A@:GrDٌ̥j7-;5]ec 6 6?!jn᱊w))?K24U%^"C66D^k"H`eT7U{zbKXEφ
+*m3@f+@'ʣ&׭y"JՉ4{}"vo%%.86|ւl#
+7q,|F1gB/,tjuų -abz `KSVeQ3aIٶ T, Zj©АǶlR(<f'Ɛ;O KU")sj3DƖ>b@/]v"eIcj0IpUvw3/眶 lK
+ r~g1P`LZXL -f2WKh̐BSPfך6F=dD Het*ӎЂ] NnF:m/ ޡpW^l]>`m& 8,nhn"05wC%hB7@Od Z5S>Q Q~9AZ Ʃ }2niE/'P6F [gZ
+DEבۀD]RЪ!{r*ֳQ!u(,"t pR:pRqwh
+DkDQ\\V6jc^ @14,,J!
+6dyTwd&rx0Qn/vc0gO[jÕ тSN>zeK;>l[B7Ӽ<s<p->'*u Y $@YF( ;,?Ó6
+
+ՐH&Y0Z14 ]Nb4.S؉a->I0 #8J]H k15T׼eңʲ"..Vc5)m(E"і~ /5J20>״
+@7՚ڀҢ)(ҼP=+S Fє8ZViCz/g/B/:FZ+؝lѽy4c##
+Af A*p&h0dԽ k4PAZ܎]Fm!W[z,X=xى#4|HQ;VxβRH<{]fR mS\Z@.0H }mb Sg1 >v\?cf pR*9HÖ[/LBK,[Kn
+2(!_L[QZ..zUiѾڻ u1Xot;dP/Rd/TRu4sNA ++3O!<Jݯ<p *4C-)%9J>4'4((~l;GiFqz#i9乻5!O+!.LjYS5=yAu]DgkEs.Q*: ˅N"eScFiKݙ-1Lm|8`GFOuj.G5ST- 'eL:@3zvm3SLEM66J lʡ ,кSN]mVFld #sEfwO=9nU,[Q ^SQ O6xpn%j&;#<@@wfbAUK
+і\E[!#H,,OT njOYI}#9*
+&²*>L7^ie
+/Q]$sQ!4ҰwE7\)VrRCJ
+"& ԩfh\]^G6u;w8Hm*%H;rS=(+
+/іLAIoӂڲřKhiH3N V%!cUEggzZ
+JJ6cYl6]dҘ.ZR;( 2.P
+zl9ό\5YL%@9P<z(vj^_iDzQ7[sƧh^[:8NՖOQtkA
+$5lԾiXAI/1Ed[ztO:-6\YVxӌ(Asؠ{^uW@1.m(G+ eIq6RO[߳4qK6kXŁ+
+n=E->dD&1 m
+WDG̝\yw'ӄ;ba%T
+w V6R1*WWIs.2xªs%޿I\ (ё*iGy\-+!/"
+t7v[㗧Wklp$d`ԳV(X-
+Fw$@tOT\/TDEݱZmhBEҒⶌmF"  5PkzE6^LϋhwUXuZ9 (ee71 V'Z`xs&xւE KAc4!3qj 3
+A &I^rsBӴq/"H1"7\Y#-iCYʰ
+Yd6oEg4Bc(>'Wn
+}X1kފ+L5BJ*pWemчP#'k其%SHعx lyLh]cA(uoɹ|iE TÏK܂De ȶN'-hr4l
+qc ôEs20L$͒^7Jm@cr=o?-Gc[D)*n怿`
+`=`:l/ϰ?R8NOd=Uj୚p0т%Lc
+&H
+ӥ@%9n J#p?  J8>Ն~xʥ`p=9xOe0 V;3E $<kt7Y׃ 2y}n,p+;L]+N@C[I#PyﱉU4܊A/z)K3;@B6>o7Э! &L]xC ROR1V(D!ʄpk17_e4Y,AR@{D\yVjIHͿ2f
+͸(zl|_.&:~^Ќ MI1N
+Sbw6\
+¦ +qM!K֣d~T4+#]8љ]*0Wm~8bP7<4
+F+ŠG#YIyzvbZHq#ty5T3f؃DRt=V۫lo34U(t0n@=uė٭D{g!󴯥K:gң9 ]1EGqo@1x4 #٥ !{'pj-
+W9>FN1،+J*2(=n)
+|l[JNQz̋pyЊ4ph1ێD A/ҷsCPdpV~ @[ qkӅ TH"}HE:"NY6 l!81ӷ0&)PcI+aH*ji7]OS#O2BI
+NۙV tDK(ؖ)ʴb B39 jWHsb PŐb
+1eڗi8 ؊I1:cIy;'U>g1#"qJp(
+ֶK -4_EC.ʫ{152 bԥ<c$p3
+s"?_CC+,X5>rYC $Dɹŭ]FMEJL8M"JiTjppOwƋ)nl|֙Q윓Ptp\>|Aew
+ ^Wϒ.Qj*Vdaj(D<K*Fߌ|梻
+$67.bYz:1zO8ɇ~x8v)7#y[.^N:WW.S2⹺`~ ^db1<2Դƒ4^c.Ø-bvˆl^G" F4tӅj8҅Fz;.꺍с7ר 4XkCJ0U[v0.f*DݎIs.iEa̡N? QL)S{, y=YE'橻q3#
+֒'ĤXR:a'ӝpbŴh0>rJro.XDA71V
+7qwܜ
+n҃:u%X{]̏ x/zh8yy
+H#cwSmoVL
+M.lRJ6I2~CB2-iđ}M BEffft
+GՓ?岡^}ӫB-ؖc,R1co B?H"Fц|ΏW @9FAZHUO%H"j-Tمѻ{ťܞJI/fV:dS6f(%4'["c
+$B`G &
+Reu\7K %H/8/zνEMpG5#@t|/gQ MZ.<CXbl̀9FUV"we2bf'Ѝd0]m+K룀' hTx
+xPٲ
+%CپqQ"wcnV1 N"exP<wgߞj gqAI;z_kT9m ~2I ¦xL
+Xuz|-W*pTXgOYJQ*NJ˝hC$`5jfeqdt6g;7q2Ĕ?H|*;"Af"Yҭ2{csJH-8FQ\eRVw^HAjպaIQ )I:i(&Qb(/NEQzRa{T :! mԹ si.p/*W
+xQH$t[ضO0ﹿYj׉Q; 'FCGU94P=\<mrG.֘!Q2Xݍ^H/qEdn=
+ 4Bh1%jbMMYb VIx0Ty$ߚjNokP[K5״ T1&0OebњՉJ>+ՖJXs3EGҷFDhFwrצm \,bj2Љm^$fͶLރ:<vy.9657BwеP ̯|rKYj)PAȯˈwI]%^9c*[ 0l8Jё>$ע]gJ=Y91"}_{z {̌N.XH#/5mkш/I< ?#6&J HMy &fb!nd^"P>xĆ8S jw +;CggaR!
+~b!:qTbaj
+'@zRtg##UjV)
+MI*l^݇
+gn^RJ} ZOR;8IT龁(/ܰHxU}+xx }4Ƹa=rI/ZEZ:b$";|8V`Pn8)lxO%BI;£]άuHD2燓,=6Js +\n^fE0
+ЉܦGiho2l{:`uڰ(3o`KoJf^̢B{ o}S/
+
+,{("[F6/p
+^1Əj&fNuC(CT04
+džgoD ?EYsz!F=FεD1nbŜ`qw bRɸ9霔j- \< ݎ0L6ƜаXb0efz
+N1a
+xߨLBzcCm5 j- H7Rj
+'>D(HK ,:GOf)ǀ#%8S; -WimFq(H1z"H#eSA1eV_0#J.:\~)H1R6'JR )Sm4iK:݁EaUFEng^G 7xiS(K*QVG]p*%拓0CMG,߿>uw"Y оYOG
+SGt.pLw8]0FkjHcТZ7%}oHRzW
+Қr#]
+_R!"_ټ @hgc .^gL_v:~y`9 Q1Ӭ uq'?O%E
+ٗ{_
+%Dt%axRb64S>}aav92-*Ί:=;+bm8>}0#\ץiYիD6=&z:kgXDO#Q:ȔFds}ZU 먜,x-s;!JR↽U3DB7Iw~<Tz +HQ*d
+[Q,Rc(=x!Wu(E(J]Rr|H9zb|{
+ϲKfjsU`? &(U\<N^W3,hc9CW@
+plG%'' F!KQKNqxmcəRҜӳr& JLl@WERIt'QJJ4v3jc@S: XlfXnV*zSR$Q:a"Q[ъNqw*J1:
+igXpL lK ?|4|t5
+ X}6F;W6.1%4Ί٣4\`pw#4%9K52۠KNbƅCT,3-vVĄtEn6#?M,z@@
+2"t.`5TU/7|VUbv^lɚ>EE"  S6.Gi?OqSnCaגvԢpH p 7jv^ߛ 3Ku$eVzET* iׄQR|wEU&JMMz_88pK91"1:D-`g=\J́s4BaBN8M!F^I>͢y0qFЏ~r++w~*NiiSRsP=H_E<Rͼů&j  >nDiiֳo֦ǽ$LYSEv\ά
+qO<i< Ö ,ƆvшMPȽgP9n>͗ Sp֌h/!&wX8Lƹ>N[LZd[` j{DcI&5ZO͉ \eoi~|װ۳b4YǮ[1̐a+畬w"H;[cd~tbLnNyCgnRg蓘5}Xaj\Ԁq=o߉
+KtI.] gk
+ Q.o=up6
+!lP˵4 Pz~Rc==))Ff2.äI։
+
+RAU4~iF+>10 `+Ωx(%Y)nן/b$N4$[5F{f lpXHx09ޣ2X%Wlw]w8F;%H@,iAEAzch\<:?˄i`̟S[AZpQNzAta4SK:7V Y,{$Fm,D'vtlg
+O "fAE>N!QDv~%es$cQq(S$
+wB
+š3k$3&{Lay6e1"GLy 2Vk};gZ%i>ٖ h@A}&]6+RF$a5(]|#v䢻9 !ri>&D<;9Ӟ6ŞmrPM@AI).:],H2Xp7*HVQFdJi U
+op}FeX:̉ 6uHsC;{ ABH# ^<
+ݯP{A'<l*c)iDco c2tw#Lꕅ[3!BߍL6DO{QY7"B4ZF*X.:?8Dψ ޶
+22$*bJɿx)37t\Fop3'I*ߊxň)c.뵀)a*a NT[*Nɣ8l .R&3,Ȯw;NAn`'eG8hs>^<c%*af
+Ok=4HqB.?l/+(
+aŧ ƭs¼2>|ƐFybGiڣÕ6cO,e?O!-蔆I(#89D'RvN2[#x7ios h0hX5u:<e':Q04r3F.s`
+0;#SwK;aPv=MsC*60Xj5{$,֓g `'..T>A:hi=AE:;n ,hk-38
+MaX',A>pB3l4CS.n&$82czL/I(bf-t:TnHQaDY@7s fZ5R_($1hBthn)یE\ ל,F f-&&?w
+BC*2٨j5G%^>GpCB5N+yn iēWay(MXș
+l eVѦÐ{gf$(=Jq۔bS#c'F6`t2\d$Ѡ$c]*vnկAsX04~(c <09y `{ˆz˘Lܔ&dFǘHCFl43{ߍ~vP
++b=,`&Rqm=JAA>sUO C
+1ꋢ:lhڠ|}q1:W nc! `(
+d@$
+r,ЍW=-  "4}n 2pKL鿦nb:LfD>{ 3"B# nP(2Q tO׆[@S=;:櫵1Aԝn=^Ӎ9)l?
+UB-יS~hi_>A76QOܱڙ*6 '7A !JuKwe\=(D[DR:Cg~P6b1gN͙
+pNu ˋ:E@DiP1F>Gm_,ǽ:z[Č*k@iم?Ձ0ub#w^N>ND邚qIN=҈|PRE@J7ܷPYepCi8׮X'Dkإ} o_]'>EVB 78 O 0 N7$eNn`\"K{1 5N{OvH/idw1#>DFZW1Z[ɐL hcQ$ʙFQ^.}0yYQzǛ?P
+1Ͻb0ڇp(v~6QN'kwS,&-cN!Qrbars$ Zrj>tA Ioaf5X0(
+a=V0l`J0I"Ϳ`aua:73`
+-}Y7ش&*VDŽi#+~a
+ H|Lwv#L&ox!O`@S<!| F_SnŨOsM\`Dw.Aojrw |FPI_h[dsLU 1ʒ'QoNވQK99@I ]%])2(?cb9EIuO_{%D&6U:5ƪljRCyEl]%+
+_v+>IR臀U6<N .x)w¸X% "=ifxՈ`$\NX
+mSJ norxA_3̬ =/]'lڥ?r t.
+nm*#NNѴDeҰ[C("y pdVʝS%L7z~#ƃU$$bvmôUNDsiGTȺ+f)1N2kC -ãN*ڣMv
+5~͝0NSCw̃ = +nًqYlc$c0 S~^q-=EtNo(lG4|'xyThɕPT} eM˽+Kh"Z98d M # J('D Q6(+26j,ܦN9$wD37(ۯ>:iQJA`V`-Pb[ף0xqUS¥Dgx
+|7@pS[sXIёJ
+lJ=A+^jͰo߄\sgW&O'ٽeK// ^+^#L %b Û [V#U{6,B
+Rj@vxr]0k//)~ Df̬o
+fy@t ]n]Bw
+z+ߥłRjH^f.n=ѻDYnh})t]P[(%dmGK)?W;@(!O?%%BCfEI4E
+$jVWQZtؓt˶]zph%o,oƁսo*8mJ@
+ Jg慶f ^ h4K0e(غE=gly>d pf+πZ6pqIx拆¾H`̪q]Yt95T&7ah;f<E]8ySaȏXCZFx׻N'(ծZ|uU\8LBo}nWzaxE$81ztpA\n`Ȇq.*:Gø7H(fUf1,nz@Wuحa'0-BCJ)mgKty7&:>M2{\b iD>L,o+>\=u QtZ`ͥ6 ±Yg)%g,W* t?B?D )?^nuL223>{b+ZFWl ä_ҝ{.ieguH}oE\ų'#`C,ko *Huh0!yff[zG[΅ ZBΣ2/A JS<֥hzx| kT
+?F4,}; -V#'HqЋjЈ{lWAp-JЌݍ?0>\s|{̷6̮:bf<ˈ>Ri?Pfڞ \hgUK]+gP Ǯe=bAm7|)Ԯ
+#dwM>'^4KY[_$, )+r}Ɉo
+e/R
+ÇQAwgu#
+ ]cr =- KAzq ttJ0^?@
+~mtH!V2H(7Ʊ
+C1EeBR\Ŕఀфc_X-$ 2*߶[]pdֱ/ f%/^#q )ߋg̀/ԛ 1:A=0wŻh/?8"CW,SZ9 
+pìBIa\X" ͲZVTeKfDi; 㪕 AKH]0ݒAwz/Z> -+H %A}:?8 LXNr*wc႘O`JFԡLLbht8i-5ݕ`]^_
+/#TcJss9wN &TУB`Cf?`6[;m[öԹ| lhhѩ1 Sy7PBgs˄2QZ w0԰הDoM `
+O"@٨D`gZ̓mqz rx*(樰tcܯع|?Q؆'ipp>~K a{?Jm2 Gu@WK .ΒOتO:'4
+ѝ?dwp QA9ѳXcFͨ7RmbV;1/FcXS2wb4+'mٗ㰃@=G~Ak_
+ 垓
+_
+)-r@haׅX| yz;-rD*JB
+xm@
+2\,?ʨVMG'.gVERl)D@6Y Qdi#QOAZIp4 Lmgiy Ҟ, љ Q0MJĎ <Ob92'P ,L!%ѧ% -`Z%7⩭Qg"VZa&uyU
+PGʁVßKsT F[(f<Gk*m̱[
+o㑏>0 qޛ #ͰeYNugAMsЋ}(QtySQwuKr* \`l/&: HAVd
+-i黔 __ͮlY*s[\Fq<c:T˪]=]`0$sīף <bkxDaZ0X‚,&_Iӿw1a=I١4ЋE =DЀxf!Kt# i6sQLx9wZW
+mٌϖw?շ =ybbp/}Hm ˎ6X$dQNՆp[-\Q9%HQl`,y˹
+iS
+Qڎ[xi!!kJa%D]sx~&,bzA"D2=L}0ZXFs
+Ṷ#>ScҠ#I/2"
+} SWLLq}a#ܻxUtKW=m
+aLhaX_fOHV1*3RL@NXQzI۝iDE?$JS?rttRN&C毥0ӟoMׁя.bL$]쎮NX*Jq\L=^=f3'D)H(ia
+J{Z&4FVIb< {m=0% .o_Kc?91z/Q1H;u
+G-aXAh{@zBP*4#Jif.lww@Bӑy#=;:)oZjsr&ws=_>Q*ұq<0Z(ZhՈҸdL) rA,!FhÈ/c.PasRv*f)fi(HӼ~ЬTN׶)ΛjCĔI^ҋ p']fz2dlb_e ZdxJ_/ pUR>ennI>.``{/7hw@5 OiߥHo,. <{ZRAzf4+F8w.ZAJ ܭhK h)Zm Ѿ^9~
+
+"A
+dt;'iPXjPG_twjp6E( Y r체px]8}r6s:i3&19
+|][ lH>7K#_StqQw=0?Y$՘مHe[9? wM"0JˇY xswsbVuN>\`QTx !:2L0ZєR)BYBje餘6W^4.7v}\Q-47#Djw #~i*gh
+ⰸ$>6fꅩ+ CI2 OE.
+E9V$%%b{gxlX ]ڏE;<zLS wŰ@ls^+'};(>*OoM񈘒 bM=
+hS8М7Y]ROkgcnx9BIs{u]=q
+
+_ek-*hq^ _fL8.AENc18ϧhyLƋ?ʻ]hTڪ
+;hw)3HۆԷ^Ij^;(.6'
+?Al? J(mx~:ַeVqWXC%FB\8<d =nE
+e
+sA]0zDJ~ zj9"|sH(co/%{WLHExWᕳ܁6脦 "dZOMϕ ,v.i6P*ZvQ] ">^R6>p<Ψx0$=f;6ab
+@{;/isݲnci"zH)&<
+PwPIJㆌB ͇_ԻEq_}(p-xBLWhDy!8L̗|0aZ udgm^)!is|Ob84Ai&T ()v?uB%Vtn`ũȼKc.3+CC IIڊbɥ0O5~> TpKLm0
+Ud M7
+V
+|mdYڼ]_CtŦL:ђ`X 0й,r26^]%Uv ,dZ R-W']HEsGh/MܵyYY3 ^|Y/v-7"Z.`G*b #o]E121ԑhr")@<W^K_BXR}cT+.1ih~y~c@=:9(\a͌Hge`b(
+מ{_F nWmjvfsQ53U3//wɋSQNҠ_M29zM;B~Ƹ
+~;cWVa(e/*?PHql>Q$3@_><Kvah\䊪Hb0|$N^9ϰoX1li2'f
+[f
+HpX'lOF ƛv/!K3QɑgKX)So}y<,
+/f7Roz*ЉJsM0 "W7=эq'eNAΆ9K%G l[ec W`Ӕ&v#A# %u<͵cJt!h K97yX?-(?$8og`J7Z\K[Zxv(Ev ^.kRrjdM(%>DN5_T՞)bEBd}PVL߹՝<|=%pd3q7;?E'QpNT 7"B7ԴHMK
+46%A:P:s=<@ذ(= U ljbt3?* }bS:v/RUl xR+@IzLt
+~$,GyP(JO%2(B{ (m Z͋Nw GߦDrfn.ubXZ噫E㝙HImN#J=e*DnWCFc˷%7r 57(w
+DQG lyb M/mgҁtd *{:heSH돩%y7c"%K8CW/ S!];OYR0'H z?a Erw://i=_TZ_$OXύ9Pj&\ي_К ]pY ̈́YlopQ_{v\ȻIC7|; zA=k>
+]02{$To\KH;tj.1yEDvO
+{!ڧa,|fڼ9*/F~91&aw1ldbea#8I_$<a񻪁 ˣ O6<ւc5@c8[ dN n֢g8"]yfTSA^NeVV Ya$oZs))6D'RV{tȡzF DcK
+JWzvPF/<? $~U]Pj"5 BB#pdMZpAFɅ3oړ6+ - xbUBn00;6H(J\E(ۡflm40Q`6>T7%Xtڽ4jCY 42]1҆2/^KQs'j-
+Ν ͡$`56ķ0|Eq/3xV^ bV
+e2o3o6LcO}b
+drg_EW"!b]֜6?%B7Ҳ2ANX+=;l
+C> K3O
+m)
+re} (^<u厐rw$%Vՙ"%eCE(ي[^0% v3CSτ<:4yz%H%@6:WF
+@^NnD
+a蠆doqz;&/e&G?!1[nR`j'PM,^qp*\:Cmk>ɲõe88=:%,.w֡0VmI))
+]*Ͼ8ֲB>,,٫Z̯
+;Bm1gǐa#9㘐6 /6‡M<ZY "]բ(
+]K!Ti 03)cKW
+p) v,3P҈?@eH@)\AR @)\?ĵcDjX-4Ivf$Q+Ʒ=s9w(]@iu=w</ͦ{,'jjOJ
+* =6&F&h; RMO 'E1}=+kȤ▪b_Brn
+:nD{'0a3AMHg{w wr99$a\'y7 ͖V'v+02 I?AkT;#H7T)^֊\Yf"`oT3IXMu:N>ȣvҰ5ǫ ֢.1Rt ҋ֭Qa y.˙{@9QQ&/3Nh+GF&PG)C!^Y=j̒eC(m]Pc*A**낆HڠcO M؏J_pm
+=J \@>A_ /$خ'֭֘RerSyO=ܪ%*1tq`4{c+r$Āam6t(k"b8T,BGoT2d.W*܃3(F^RؘqHiUUtzײ} RULم׎$3Gt a^eW]A HJߩi,km\Tq~̻~BMcoX)q3GXᗡV>”,[wovH-P8+Stfy']5TX&P}4ĩs3q83pAs(/`a(. 7h3%<w|t%a*f 7ufR2FSa:(w
+hP'
+&WZm$p uP8t> [*@׋)5m@
+,<xDEaH-I?>w ?y-m/ovepLB
+MK+p+ۻFި
+1mi\4/JJ%6'7 LY`:c`bWkٿZ}C Mm|l6+riM iE)]cLmqDȕ\"|ydcQg|<|.P=7JAХ%@J٣sݯޒ.1&poJ .fK1
+(vuNDpV.k_p{BL_"J;+&"ԯ?N>͞)d$O`S, :zB[
+҃  =*z
+t(HGD ]5[3tN?AkMpfDǁҐw Qcgt#<Ϣp]wkYpE5,|XQt l+|J_[(.L˥{ܯRrDQ"#ǵM5nbW<ji5!1_gn3GBP mL# T.]=MpV;T*#0CW&>8H}2@bT1/4eۆ" {χDG伤 ją-Z5[Ss=Q *Qtg2ٽ^ <D̡F3@`<`H;E~˨RkEmqiѩ0y
+%EԬQ
+A?X",hgt201[~k襻@.>fER =~uC20{9.ڽmW6Lj9鳚(oǁ6;Ej+i2UD20"Qz1F
+J'¼Ȁu҉fJ.kb14Ҟ]reʢzbx^GE;Jmb9(hkhcBt4Zz=?}@S
+6RȄV!HC60dN֩ʲSWɳP(|ԕI;ۃMV2'g)J/lTp&@c݉R᭟KW.l&iK#o'ﶟ D JשǁXW4N
+uH# iGiҸ%G2U..Θ|ft $&hp8ŵN69د4R
+w.Q;Ӑ*=Q^RLWoji>=+ 9HdU
+ 7[aʰ9tO^~ZۥP~1ӱ&ERf*Փ@盽IQVq5k9cIQzҔIuf| o,ݕt?Pz| :^NnW? 5r—jgDTwl@V:1zHtA34Kh35 Ml8)Uy^ܒM5۽]Q\V[Xd*sy$1f.&%id _(>:LV2_?
+(F7$_@p[˲ysʎQuX'Nm5)NY]k?ꚙht $fC*5a:0I͟8z7[g쐃_ƜyaÆDR #4zH 6+&ZS2cM6.qz~Bh`%SAY%(·PCyq
+qJ>dȪ4]۹Y &UeL7R
+]
+Y <Xrthkےq:Pmw
+
++
+kdaT,RH.~A_YIn7!Qz\놂W; R8le\Hb߈Pv@J#ǖt#b@$`d[pԵORǚ5A*ڧ
+KY.WD GcQNjlNaIp2ZX>|"fgoXPox)0#AA*:cL)KlJřG&J/8Dύp(?M;x' âd/#+$6? 9l؄/7!D,9,}ۺ&`]@Eג.~%YOFǞDⓆᑚ|\D%/CkRsT{|_w!j:IXQtK/RUiɁ~,^ \*猫3B4P'1SрP\1KBKO٪h.tM
+ $Pc/~Qj-Kh
+:]{3`P *`ِnnXR<
+6ۺeGחa; Sv"ClJEYc~çkyMZrfڞѾCըܮ!s Ӳϸ͖\z>5 uA>0&:Gtnp)89[>eVfR9n[^Tz
+-]Kk=< 򦎾XkB衰+}pW?ObAh 2#FQHjƆ㽬0.[1O| e+
+cGs@tS$7E?5E:fpZ5]}] yD br'geNK2 @)EB?Er=p #F'yyEi*9oxwK`>?7Gx%TAiX ?We4ν$Ì*oX~y= -^N;4.kmir?8HJw鲶 ߙ"Iƶ}JRR5M4Vᮣ{?tZ S'[[GfL:s7A5`f "t@;\™}sIt"Ew z+^^gqv@Z}d%D(\|\o4$"K
+mr>QƻDU
+I|CJ;6Q'n:*S(f}aIy]#`kO~) dl-{AO^Wc6[=r6wGf.ǹ'~,{@sEm0MT:d/.x18Ld 82} ˊmLΙ ʊjlVIi_ hIŖO]C.P>B5!*RM~k[
+puaݫ#"R~vhv]"T[(8l,BYUI'*A94cfN[%ԵI\?B| mxcP\%&!Sh?fHQ>X4;K;=Ȏ˫sNWG~:&WAۀC 4㛍4 <IM9.(#E5$u<x
+Pud/'vڔ%zmF]aX5Q9f?Dj*Z>XP*Q4ؙҌhi/P+>[Ljx!aeo,<rWl\!MG(KXAY7΁4J[wDmPp wGWX=l+c䬉
+NYNi׽t4ӿ zcքDJ(7UM`RQw=Yh/>alǞ8$Ht"P(%ͧaw[
+7fn7ک+UuDo ^RW5[S6P
+RIU8 *@eQN&M|pE/d3I
+Lqa |稸~<\wy&T\~NAs@jC"SOXjiIYA/O@eas\ܝE (_OjFR !d]Ē<(LKp>*pX4/pqH-U6ѬeQ
+P/]}=WkKcJ;mamt})J̌  SJ/n0"yEPtQ:O l5"FK6D s p_N4
+t Nwz@I1? @5!;8PjU<M֚>kY(|"t
+ zV]]l@ |ñJy>$D}
+q;>w ŖS틝"Pfo1UsŧN]=~R&Bim*jOp\>CAѸ *`&$kJVe?LuDBlҥT0%60Bp!I `?hEцne+q+3،u'wO7z(iPf;Ml-eKs95<꾓(5)=ajFEέ_2.1MѿN
+s. E"4f(̨{]!Q э[L#Ǯb$ 8Dqꖓʌc!6ٷxIBt$z觔8 zQ6~JfŃ*EB4-{2b!-t~=1ۑBƤY r{UwJHRa (ᮇX[{eNh;.%C0=$$
+f E0:!~i(5ړyw+aJs;܄&hi*Ԯؕޮ'L9UI
+%]bں"eK
+a
+Y76w}Wk5GBc#lA 2ښA^[ƚ:p 1L+?;1ނJژ~~73b/w:l]{w1Q1˛bayI|wmoCjeY-! DӪ -"ٸ`#W<}>`Z$U`ltp-I;ڷƧ"D~E=MX oeٲUo:=:Hg 8huTVw5V% IE:+g(#fX= T2"H=މ~M"Y^Q0|Uɍ2}NRSQJyH3 5hCp
+YzAԽ68`ʷEMi^ d&us-oMLb30k-X<o v7-jo0sﻜ$D~-Bl9x[[oKV$m[e6z%\Qffh,_eTu&B!ʵ\G>uJ"W%]zq{s2hzZ٦)8ž/⩖$
+r|R
+=}FU4FV^i|v%Jt9̓[9/Ұ
+(9AP~q*VF\*./; $] jfOZ%=90hIX P,q
+0Tq}+y<El 0:_jW }}1)oR{|̜ކvӸEB(T<@s89|lu,xHnmŶMz)AU{Hr^9&l J#4kH)QRH|̓T"bj^btbZ̧:`ɰ˖_g2cqT \q[G1]Yo`$L0'i(Al <I\DdJ PK\ f
+'u`"DoF-SC.}&r 7k%JLL)> J{Bq6_M
+ҕ% M\]!(&ۑmZLھ6CG1Q(!3vbqc}= {wrC{l.SBR3,A.0BLզW1zHx41KyQU.eGmn@Q:iY нI+0OB}YXd+8J*W b*EM5Pbp1 >:DZ~`IQ6^|nhFͫ~>+ꮋK}?8iSûR;Ea4fҕmWx%JKY{2D?o_o?G??_O?kwr_7ρ~Olݞɪ-nu}}R6 Au㿣q
+܄,K'Uܜw^\mpB}e2</&김A+IzI]E$)x
+_ ߇dFVSf$)qZSHIo{8p}<2#n] ziّS*(hnφYszLȣ~ZB)֧Ȝ UҫN>`1㿷GcVt}y4$%BkB@W\ -|@B$&7R7Z"9#y;~}L n
+tZ D>$o4xsN$.W|PKr
+F߼ӝzq2?8;.[~8
+J[qLҋz,_רhoQlXI5W3|;t:K=$HP7H %H|ISK4G^
+XI_2AFGl!FNAI:|E?˞,ǬgdIJ?Q:U-Y3%ڙřPVF]5Z/%l81pJ­7xUiDna'PBhn "̨s]ʪrWʲدk cx[1Tgs Mm%N6-'Bra0{6'7h?;LqK{]Ena r_L/z%Dv drxZB5( DW, ܎9+r6a R`^`. jN: f>"@$S bR=OHԓ홇r 7owV(w#HCCdfҫGEsC$LbWE{ i6f7muoF&Ul$B$x%wg+:DWTQ3yBHPz~- 7L|<8F5yt #%
+\K<dYg <7Vo(ފH&u
+N<{ey2&@tsiFcH$ip6bkZVz7XU)Fz)&(Ŧ)
+# @tjpEU5>(.r`DIum01s 3$1s|
+HxInOĨ\b$V[HD]y
+zW輌#1' :Q$FCZv̊"C%w12WC#eXfηbdV89ǠsYWcN*w
+R,V!gZ!:!®1(vk
+4?ˈ8/tadV8/*B-e/
+hjJ_HUJy~]vCH12Y矶-t#.Y{MWEF271zԖFD."4NG0w >j> w=aBq #9؆7Hpnܜ՘*ciB7ZcMMpuN#ҫO2=a&[Dp}LNKx+?dE`YBkIdD~tp"z/\cZaxE \ɶz Å_ TM,pb!n'qjW0"|ֶ|2y!K?H㞈KxFtBOP:pLDJ7_W
+͇t7n[ K@]\$vGRyjY xxU4:(D^T?rjj߀Hߥ5. "7 5$2hiVXq]7EHU$2ITdkw\cSO&p@Cc핬d|G9>Z;NGLB_S-c&4"Ou"k<kN}jfwԏ;R6WV(
+]^nzV !ɚ+oxD}K
+1M9);JV
+<'"a.˃´zBb#ه/@R_AF^HOo]:׮#?+ ɑJqS^G Z m/g%*9($Ax4*H> 6σiDdcK;64\,( K>O'h<D@I_~J*׉ĈVbV
+=JG #O!Y3R=,WNaN%j(~̠q/UNb=#`a%5K~c$l@ZnN Ĉ&*e`kGEÖbDĈ/+FN<}Ӱ+6J]U!oǀ]Dy͜O8sBHc: C%%e֮'"p?Jw妧*?eC*Gl
+E8 2ֽ.*ơZ//V3y#R0x[:Bæ&#eKX >$e1_!ޠi
+vwHgHBxr8fE6p
+qD b h]SܠGh>QjM/ʑ;Hq#|ߔ\K#@ 'Unh_Y!Y2~"DSY0mjȵv/uS<([i{ zhUA2\'5^UiG
+E~xdJ{" dv`.?;wHA_8pƺ*bfEnn7,Ex,wIqSʅ\5T*z"$AөqEĶ y|VBaasOm""cc,(ZCe` ')r2XVm ̈ Z>88(;UV9J 2Ixm˃6̥(n!az`B.Vˮwh:D q=-L|Rf3LMSi//C TP%7h Z D.kf_0-0EMIYXx=}~}_LR
+l+2t|r8)""0R4&f7ɡHHD[
+npx&P6{mz/
+> iXB쥝=ݲb.!H68 АO[OFNEb/.s;/%#Qؽ(bC'8 tl.R(Iր3*jDc,B_W9P⛅:mds=O5*)zLW8IlODA.l\
+CZHFK
+/ڈZ0 q' :j@gG5 !i*}c)
+  ],C%h]ݿ:x,^l4W^rpR^Ufĕba*-?k1ٸ.1q|VKd˽C
+ $!(8- [:`p/'>X',}cUrDV GZ~7U#IjꌾJ|ǂTJygHFuz-)c]24S
+D aտڍsR޳ۆgqY|!^K!}} [z54@Ɏ@HRd!Q-Cv\Rr!`?o5T9~[w˪
+bH`O{:Ը
+BL3ΖaHlYB{m&abjf٨i݋@~o4c6
+; pgϩ)zjoWx$$:lQc|MVdjeBcC
+"NMqA6ÔCpK-Mocu^ ߲O7Y
+1±=Y*ȗN苽sg$F00ju!l"6K֑[}#<[:"F&g#b?y=ˆPsbM;t@.9^a>HQx&
+K_8 2DzߚaTtC)2rb$2:Ng˖ Ƣ _"DPSpRXo D(0kYٲuY6`&o1v [,+uh-SݍDC4Gl44b7|E"ʾ'
+"<$(7Vqr" ⦸A$+a,Fcíx9baJWf^`Zr9@}-}Vw՚א^12N#&:$Ft@{KgS<Y.tHRaJ0<T|9̳L +/PX*c*Wpߓf7uNs7Z:p"6C @MV%6k9K 1v;^I-Q Ӹזɴr[\у)oe>F &KacP.B:sJoI"U*u.\YC1E|(*#'.48B+":f#\5BddwRF; -c0AE\:
+ɝRC_ ԓ덲gtICj!N<im5;cMoY!"tJ})FFekm965Lh\ fw35IZ·,YEea]5X3p1vCNq6Տ lgOʧi8uNHb#|'E&Zow8ʼnCdlg.aD"A=AlfSK.bCR$9J8h4 ѡwIoXLtm7сKx*`f']
+;h<ft+>p>)$n>jQ& kQZ8=ۓhJ1+ÃBaro~,=]^VZZn Dy.r
+wN>ujdھQER=4R5>dGDYem)eFY|m)p#
+՟aypÛ.r@jXtUz<1tŊ#+W U/K ) 2Ku Tݚ{Snɛ8
+g}˜#1șLCW KZ qd%e <ܱ Da↙vt|~`VȁL)5vY7ٗ9ӿ(qWFٽ,RH݀4yIӭBQ&=BDt"bԗB[xq>h_v<`[n<SIu2(ZBթU̽bK5qa ;!i)xfM/8ThrJpCM3[ud[[z0Ui<^(]B
+tb"p|ؘ٪ES $NsqGX沰hZ!TʶI#3,;[ۇ2 @ai783f+R C
+rRN`)IBh#:j??
+xlsEB\\Smgݩf# + 1ٺfx(Y D$M/7,s >'#>%Wf!S{wh
+.Uq<crFF) *'X٬ͻ2N0vIR%g \-b,
+{rŁ?Hwf$uD~]c mo"q_PypAAB:8.pA;Splʓ@c`ЦuBF Km2]'?QCxm֭YuO;@w>$W )H@CURbAiD*}F?/ .G^Zc6~h%kmʮXs(GX:iBp
+۳$.Y¬uHȳ-cLś PrI7!oYJэƯ seα kEW2m`
+}3z 5wVu{kѩU@h cc.z* Y+sul⣓<?@ҫA
+R:L;YQ<jZmD(+KE|z&wKț"*ΎN☋k럔N,s@kS1ѓ7
+ jZ(x"bE $ S M7)E("֙
++
+H@׫` 킣lְP~co}#`A)CCOƄQYFL 5d+eNn9W @ hU;dl iDSL
+\jĀ7)-bjP2}e{D:#WZ܇l68J'ȆzjV PӿG`̰qLUFu,8+%<l7փh.ndθ0;x+`eUaujmsB7&#P/::\G3WdAtI÷7W~rA$yF[~c9H1#Za ^
+Pc-@Tpe֫5!Fs?Zy13L^l'Sm%@z!|j~L#yZ4CdB'J9Ifb\*.vDGi7
+;!HnpVJlQJCKx1bS]a:+ZBXcho^NftDLhBI8Eú^,i]i֨ƞ} N@i PC.j8 YՊT
+IK?m%H{0pvkFv2]䠓bh]g+E\NйzkuT`UG%v#1*.jDlx4TJ 9QB0ډht8R7Bkx@ԛ SJ29w+=dU[ wh":U کoΑPD6
+ĪBEjfFv2)>aP/*<0|Zg%wTR)r0 0RJ[#cno!2Z-g;-3z$`PzcqM\p} h=CXb~W?v*)\DN43]!RO,;7@ƒoX$k)1/I
+axXJMzz漈`b޻JorRm=\~`pV+В3QR7 ۘ:"EMF[woQb~#UwdH.hPntƲїIJPZ7;>BS^LiUH5!x6FoHx:/!%)@&̡b}/9ɜ454t~ohǥ K[.6>E}NfFV02 UIe#d`P _DNCQ;'̾cG=Vf|ѺYb@w _yТޭF9@4:@~X%>H$| UaXiΰrr !LYLQc-RV/N'40eU_
+.u`n
+eMЕ C RƯjHR8C64"nb*t $^UI ll+'qО̅{֒ҷ2ߋ'eDw ,¯ǘg4ɝM銂K4"n9v$t[ 1JfVD?He.H;{XGefPwb2-l[ i9{
+!v4.~ī S"*5ߠ;Է{Cpo]#L`J$r\Ȥ{\8v!YQIslv>ߡp5b8/0TNz f؅glIԏV`O']F"3Vav f{VS_juv_=)nEL<No[{;XFé%qya
+JYmP>.+AHֶp*˷PHB@Ҽܝ3/ 3G"fϑD?
+kJEU4JJpTؒLi*\vL`z
+n+9}F3h V=50qáBUiXFtU@
+Z_ vh<%hE˭!3}#=G=ؔvJjG-d}RWNG_$Jzc̊%VuN|Ok`^&QqQ߱E%1729'[(8VДV_H~ya$ohq.Fuvj`\ĵgD0üD9TA܉dG1. #8d`MmfR]2,@7ِ^y#Ki21JC8v߀5
+|D~00riC=#ZFM@9F<O.νͮ|^SjbcK0(F@F?ZD(E56J)ܸ {6BGɼm%Xo|1}Q&G:u
+Α^)Yd.D[bĊx{
+$=$ʌe w#Gn'5xĶ葸‡DvCվ@?Twͧ |}e?o*'z7yt:&;>3}ç tra
+So.}RZ0X΂;BIN#C[N<G
+@y|fINTwoeHxPxxӛڧk'čnp.N CxlA0X۝eZMb|!}#_ia8#h[0=^Bprhb
+ ;kV]2 $ǹLGo,Ӥ[|:}w?_O1Q)H1y†Tϖ#T
+F&,\0g_56DWΔ9P1C!E&
+pxFȝNYG
+I(YB9Lutt4+6=GɺjFj=ܢ9'D:%r*[]V>GxԠUDkalSW vI"rl/+pB4P`)e%P#)$Lkkب{K輕(Jl^x}}a*ENJs_4E:ڟCOQr#LxE"ݫd,Xb:A/DCQcL;B-bk!Ѷv`0+9kh6vSV?B%0.Y+bnCFͥqN4;0g >XNngo[O8 c3I}]Ycz^kG|֩M) #\|~#΋I> 2sv- B,&w|a, A#4bLCYbn%cөM6™p|Vsd~Ge:0ufxZWH'G 4K@±4C.@͞qQUf݋0P4ܠAGNT88IF бk(R I.$F9y! kftUI<̓t%%'R|937ǁ $zbÓ#8/J֓wAU[dqwa) O ċvSAˏK;%oB@6?!B
+r`vSY
+5%w-4G#ݘ#.,ikָW] A_E%-' ׮u1fbk.JBeub#d@'"eLaM+Rp
+Ap txjRBHz{RݦôOu@B}d(-Y+k KQC7%c'Cgl]$FO=Cc[Wg@RJEpZw w0F\p#?d$u\l M@R ̃.J(dHe51M6Ze.?W|a8 > {^t0Ӕ
+B|\)+w?\3u_Ѻz)CXjIdXa x=Z(raCߊaBDNt,JT |L|/0L%OD|p@bU_$1pld 9gk
+Ft
+kNV@t,Rdѧӫ #k\$x; !t
+bYoxP<@RGy
+2
+/}'D %"+d V^o>.bCW
+9 Ruib|{t"nCq[fyi6"Or/p+w*R3S. *:.eB:}( R)!gna /Z+vB $?dGĨ!6|<v\kKsuO݇TTXח1>^Y$n"VU`,,0}= Ih}:RAۣdM }˘/.^D_ޕF )~5ƃ-?. kAWj*)$i 7$J0e`M_Qey<vDVb9&I[JX"S,+x /nV,
+)wQԟ(l</f_<lɅ xrޚuF'?/1I Y6`L[1DeϞ~9S0',b'z{TOi
+=ltن,3ݓصE!Z"Ʃ /^ss/*e?u\kɽ%6K]o.<޽tI
+\t+bNZE~g2m Wp8XVLt{s_(4e6m(
+apa{y
+ |k,3ڌ`1?dt>j[@rHmPy7MV F?;\2u͌g2r{Os qvPV(!z75)e8@RgA9(f{Ǔ,j5/&z]
+l/ ŋ-mHTJ}^X|?lgWPAFre !*d?b#6>m̭{:z&o"ȟMu3Zf'V]
+P0 @Ӌ15܁J(~i!<J Js&:W:Źޟ`
+cH z z0I'fn?^^OZ9:/*"&^힀3e
+IaĴ a<K(~&/˝ˈmwuQ/|G UJ
++L(%
+Ht@X3fg}Ai<Z"ay"k
+g\F5{_ ƭC
+O-.H[نrqŅll dq=5~(?^":.$ƀRQ_RŖw
+(vkolLG[s\-$[VLtr.e0͏FuF!/ p0=G{u<UN̒O{VB ˧aHHG$oA::5묎:4Fl4jtC_h`.l
+V"+JpD"@ 
+$6d]}Q>juP6vۤ7V0g`fCTĘQۉ4֗=/al "h^cn,`[ҽ3TOZ!Fzh!; ~\
+ڽ1#8bv†j0A+WwMd&˵l0[Mc
+~n%5ͬ' ĊxfeC7Bm8Q\<eJVt@0Yo(hM5Hմ+!kP+}Rw= loF#
+ȆP096}T ;~
+"bPSŀ_1Asb? T;x]f)h
+G xWO>6wma4Ӂb@nVi;l4:Â7 f+a9`@tuHA Q<Sce*]'U?`6ğ]n݋dp_8ң:c&=
+Q0.]j$\U` totfaڑzHe!pG
+h&R1}|آ#IեN *ѴSk
+zQԛ
+y(Cے@zI] szDVȇ ^'uH9gz5RN
+jD(0sf@X<7.Vnowa1]݄
+bE|mr.ttʉ"j)3.Ʊ1a{&M&a `1pW[+@:KuEdIc H-Ն1-q:XnbMݻ1Vj5zfm
+)#~ 2xkEn͞B̥-`=D쏠yp\%϶=^5{%hSeOöZ
+/w6G4]m9 sifo1&AyĒ:ZGz~y҄Xabç9c I[TvJvUPP`W72CO)V@_ W+"7aӴ/hg27#.=v;B"[HWa;ؿlO^FZ:)qh]~Aesgf ۫>㼞3w<aR<Q 
+
+R" nH܋fX詂mH+0R<F9xA8:? ArC
+Fm 00]0_ 3ٸ.bEJl!G
+Lpzq"0,Hxz%%]Mf$a]cLwMC Vz Eo48Φ |k.HdEea%I)؛plH]uV/]p^78iC(sH*;=hdGR.h
+M/<铡vYd{l?@_Q_ƉWC>څhE, PRXhh&ԗcLT%cT忯{9,vDCzݤf{*5o$K5TO}VDj< ]3 .I
+=z/ .kkO
+z; JZW*n@ m`l2qHќ%qt
+ k#ݕkB ׷~`zm=Q42񁳁<&}g!٬p&qe vtVBeZ+RuE9j8;0>p$3V\jFzrU rU.o&7szl`Z<W]A^پ[0," ɽWeNQj(1'6cte(C/X zEuY~q-=FDĜs
+O
+A,Yf!F^O1ɪ'=qmjN]- `2Ybͬ1bCpEZK72Jj84|C+6
+l<g].&5?sܐ]L#OixMS:yY{Af!st/^b^ا+hFXsvUr
+wlmiDŽyTFFOVk~BI 7`Պ j _|`i
+ M0ģx  p$urnnZǔdxf\ 0Sz
+uî]hl!`5L7\VD*$+b
+UJLžїGfk@
+`gm3[h1m8(֬[>Ǚ3fXeG'(uL}{\1N4xuz sÁ#-Xh0!Dz {7픽c9ix flz)K % ˶r5ZوL׹1`m.~QE9?`Vyw<ՎOaezvcxε2
+|8ѧ'2|3v5yA
+KҞۓkɒe3p>SOO{"88?cͷ3noqFLYTNC3Ph/?Kiϲf+)Y-LS@ά]
+5B
+Ɓ\ױKk ^,i |$R^/VԨ؇<&&!8x|Q
+2GeRd\P+H8BACxzXDjRbp`mk8j[GGn`"2
+ĀR.dA/n`nB
+ۨM1,FL%_
+AzzxOm18ഘԡ!A6@ҩAOVtrqbR,{k8B-| ł1YExV,1&=.1YAdS0U`̣(9+,?0_H<a֥ wŜ(!R:8@Nr 
+8 aXL@AF Ic݄2a̧%#yx?r4L;˿w9kВqLwdv es0]PD
+]D3@@tk v큘Bc
+a](aPzI^"z堀bi _thM
+٘:瀛' Zv%N~jtesc9AV $9a$!66܇Q@O&m`Bl3'
+˂ON$.8h/, X,1@S06+`jL 1
+at s$*r%TYt7>*|!;4ct d;R<0zZrF`R6l3!YzaP jX
+j!cW] m&XqM=G jC$=[LM 3<R")8NNJ:2U0KFoBzFSPx6Q߽#> +'fU$hrgfg9mku~IlXG\ӬnG}i#]aSIGL%S^1=a*?IHB06-vHdIJY#OՊT*:1F6/Ę:meرPsQ=(*ENHE9
+4BX XpaA#r6#KF-/WiaR76/CTa?*DTYvl
+I ڮm'%Il1,bqK9 ?ŘX/lp [$KEMEMHޒUN
+Ui YlMȰw! :NOL3b$rJɓ̟Yk¾hW~gBo$
+BdoDuF+: :N\<@BG +#9KQ#5i8>uqQ$@dLՓrgWB!e w%s r"P-q=[Hi*r#@6 tӍ%i4#D&١L. I_Ua)5g¬u!.^v#o4hT\#pQh԰Ci
+ eltkdC;[Njo<Nufo k)4Wz4dC~hO䌋H-A?9E7DloߩeƜO:Yu[Hʘ!'!)F W]
+*mEXiI.U@aFvqj3YlK<Du`Fz"i>i9|vAKIfL"B>hhԠ Ko3Fb8
+5. ݓ)F3W(Cj}i5q2&N͹0|Ges4) )_t[o<{aszĵ=ƅH r[Z2AУwaISڳX#Km|G6Qiީ?eb|[;X #Wm䪣 &v߀`RD>ɪ|`8i$)mzUoڪa9lfi8)so DDԱl8bOĉɔ
+\xJ#`o<-7uW}I5|0%q98su)4p<Ӊ9u̬,q8 ? Xt`oʯqw$S0 }cTj"i1\q` qQ
+N3eVt &]f/wZ
+vV<".Yxɧ61MvӓG怫&MHt&rGP;
+Υӳ3E޿ؗOd|'u"KFb"̸S@g ܰk0(TVMSb=-#k~1T3l`
+89
+9[X?pqn&i
+&$5 V &CQ z.]QJͨW~!m]f""ucVCie#N`KZ^WCG~aGltq[O9y$#(B_'^x`(ܖT{nN} r-6`&('ʱ&_']q qͮ.Xוck:wRe]5*slq]%Ȧ& rf61=!2KM'2
+׼zg
+].TEz bDi% :7ށ~}?3KOFH!sǩ#٭?-Xw96`>䲄Vh g)O
+[Mx-rZDE0 3ѝ6C1Ŧ9
+Rl3đ~sx*od C[2ג(b Le5t0e
+M/=L#r7Musݚn[Vj&`=s~0&F ȶ fwaQb!qn?
+gkʿw3\i[
+r!pNMPsxF
+iBI彛l U,;$_}.5hBG݉4=5l3]R敤 "p V
+{)| Nu6] 9"HZGSJG}sƔ i-uyeQzn0-%.F .+W6UQ,Om͍rDou-M
+n$\ɱ蝞
+~@桖4k6gCfQ)-x+ݩwQ/%ULThh+Sc(sێ阬!I7g%JfQr{XZ%Bxߚ*!Wx~Mx{y\9T'GX#jo8P5d|
+[sY҄)]) Z쉑RjVbJg
+w2:71 R)У" z6恜qÔA]K'.E[}b6>"R )童9f#*ę->_1@ 91F' I9[K+ľM&˛< 8>oBP0j
+cMX<N1Z w+ ,|cXۦ4\O f-Q&rX0o#M:-Bݢ0BYy_03EQP@eu3Y][LA;B1-:['f=i U.Sy>wpUv/KC gSSNҒ-u7c l- SJZne0Tжv.iOVҠlA=eXs?4C
+6O^> nN˺O_oYj pa jxruURx )'e hzԋ9%0G{SPȦ}(rӭ`ގ>>M3Ze{:xkt(7 rUB]:|90
+zfTzL(۔.:5WTǮ|Gw<5)2C(7ϦT[Zٮ=f d8c3=J\"=`θY](lyF%eq%ӛb\W(
+&9ߘ?,xlVg0ZxfI$nR5A
+g.쉳9QmhW,ٔL WD Ry C-d^4K
+8a$GTEnab
+41.̶jX[mINOm2ío|Gu&y*:dzFx"L`yliZ׌z7aDzgqǯ̛3錺EAbcaqD-M<EI Eܛ e= gx{jd(ek{@7uٙJ1/?8e~ e94fZC>+-7UtT_Tچ؅#Ɣ;d ?~j9O
+-co_Q-2ΜhAl1d:c^z,b ]
+M}<v8_J9ZT5 eN{ d'w^M
+HjwRs21oȊ&aW=qܔk (| M}/˴=WƓб0Y~#!@y܃DgnUZ).Jt?NABM>n
+mDɤG2NM9kyBqj³4ؿ壶W=tOVMFa[TMK+C$ br5,3! T6tG?/oY??7_??wO}ӿGW-Oʟ>Ͽ?YO_?<zHvI)fŚ. )xn_mUEI%~ڟmk'{NbyvG!)dE=䛾{_W&@%l, z;#xq>3lqE,sዋ!{V
+΢[&
+lȭ|:/n|ב(Ed㶌TSMTTA+1p/K@KZBD*@*j}?ʛ k-xg{P>7Fjm}k̸AiO*[Hgtȳ#<m!CliQU("63>~[ldPt 6ikxV m븅abW?C6^|GoUd
+ǠƝxԷ0f'6m/DEDxk'l Jߚ
+82ŅN]D8LWGH8_Z&`¨M03);L.ﰂpE<4IGdҼ/<xPDk
+sFO~-rAquy`Zq`,%A!rki(?/wk5JlKnt
+\S ֤݅HHW~NZm)y}b7F%KL6+=WߘUh6tNnSF$:#ڟ]>ѶXjcѼ^7]2*sGgi #Y'L
+Ąg)x<mpXs;+l8q\q2SP{zU_C?.x ^JF88E3%/7\ڙaG"h^Սs{GeD|O
+J@r?ixq[hwḌ3I{s\6rt[r?19LN*ȻOHgW[IKHViR9
+1"XPmIpEF![ e
+(!M0B yF%;
+/޷a,<\E $sG摎Ѱ 57aMV
+stʤ{塌) [GyY>>q$(̀~S{<Aq,4%(V0yE8j8>At|GfXşsJË
+D`]ߧ0 Tp4؛(lwL~
+n.B) C0_::V 81Uۏ-8A2D' p(q$G$ݲUB]kQt< S:NiwMFbg"H!8pS]]P&B
+j'yb"sGgh vtVC]Fr
+;8-lQxOP2<xh ]SuRH~qtNeW.iҷ^p,ANd
+.HA
+_̢4nt<sd(E&wf턹4wґ¨c?Pz}a(==.> })Q}O N!S: J Gs.6
+vggq%yX B}bTrJ6W utH'|N{d69Hƒu sMY~#~(B+.?!MQ\=KBۭ&H9hr] .@:ٮc/578HMŽ (#WMg΁v gA
+ Y PzyB()PRWQ/-T7ԹmJŸ5q蛺kC>0s 7POk&AX"J׌ \H$: RL$
+2>jb
+mtSF_*Kh@xظ>&}6) wM8թu?a AYZt tq4uSۃS|+""c(P8ƥ-Wq~ 8*SnPV) ({ kճθS4FX {`Fq I4ѹ\O-"&6` Wl[9-ai]f8U{Yb8ե*)#`
+h%Ld#~)pZKB?t S'+_<3񜶏:db
+] R!;9Ix
+6M`~:uH%.9JYPF{9;7$ H7)\}f_HTsYQTP[6԰" FYor\Rnl}kFgI^N ,c̬߶AoJL ׅRScCi ;9ٍ4bh ekksNY
+4sPơ9d tiݓm.7J)¦'J[鋕D)M8H;/%QyqB ݭ@ ! 쫰06bwpMc -YA ˱Y>، }4lLh2 </$eC|:hg {$Qc݂ҜlT[f8JK$!k*<fbTA6Mu$5@P>4# eɾpCf\ӁGdC4b
+lٞ*j,94m]p53jA0'Z8FuSa,Gs5M[06i YVW5"A:a5b
+>={@'JK
+'O2YVp;'|{`;+ L#!7J@*]촇?β@᳼DPG;k(D=Yd$@B/~BPi:֗yT9r1"#N)>FuV@b+iN1#;޽%FeK#F*XJOS7"B G) IUz :N7$7OlaSz!.+y (B'̈́D%@hy^q=UQgx7ٕ#
+GΖeȖ?|E-޼_ =L. X͞C4")aO? Г"4#OSԡ.P<|!-_|nݴ;l} {
+NC /(3]pVS'_z0Ҟes q K]HTaL'
+Jl~ ?Z,6vzCS0T\s4nN^,J0nq
+-tP-4|wpCs BMt^+D 6ψ nv}£4
+th@Fw5/9mIm x.j$!<s4(3WE26/ن| t1Rb
+H3v}Q˩(Ĩכ6`jY~v!zP?7"WK(0h
+#r
+ap ُ%F7+F;lz
+ wr.̦-"4JWV-H)KѨܭI!W㮱)>4֒SQ͑
+Zr12/[)aF#)r좿uŵ MU<gQ~GJ0)v)$ޓNO7aa%(F b_p%H
+iF]i(Mӻ!J-+!n^xSft0å}GH5:2: qrY ȤJ]Z݌*KA{e!n
+Y~*l$!zET+pz^o1eyxй@g 5GE nwܞwt=Od&^;>Eiؤx@=G*N u2nXO;b9}ߵR${ryaXs%g6z"zI!tCS-Jrqn64zg*7 K(&Qx $Ш/Svw6Iλdu?!AcyM%\TԣK1|à)O4ɩ}=~>6;Bо^Y"*A lV S`=KovZb3z6,0k_irNƁY\D
+a~chEWTpJq߶gl
+B\A:sBȢɄO:ydʢp+T(]`ra(mƞ J>(*U3Wv[24BpJ73ߤ
+rJXL!;^K4N-҉-U.ȋy쏣wC+!o?ty5 )ˆ1
+<_̫3Et{J7+i)Ps J`/p5q|x_q߶|{9NKLm.\sB8Wsnn/Ѣ/_B)F">@`tG`l0w`S} oI"$d`I^ xÚ{v[B%v 48/Od!VbVV{$uTIN7p7H5]<_9f m=+iU|ɛJ&"kj(jSVuvWKy f"
+=.lrm'34ֵL(?a%"gIGLsOD4i Oӝdީ[gZ@C"\{|{tdw&Μ kљ;|1ڊ塁r)8v`p?(
+pTn(!h9*^Rd^Ya/s×1H3<#˲-."RDuurĀG i9yg8$ݮS]Iۧ,>tR$ea{'I qr3 qXxRŽEg</.6\j+MYr2@)]#4?֊xNȬAx OMB<~A)iY=DFO _Db A) t]"{yR;hZC`
+6MZx#_
+{g̈F1^ӏqTpC90iOաn&3:cȉD!*1̦l38^k>G0sPͷ RD5?O űb<G'-D,$s3|6_};/3$44Ct3v]*Lvճ"ǢNs)B <401V^(PdۣEjBbTZv(
+ Y@@L,ΚgkFӘj յюWjɟM</!
+IiͣUωQմ8] ߦ<F{v0agD
+’7q0 ݓ띵o,>iԭr F9ޜ`ZbYscѽts4dP>Aob$43,dUFF3<O@8`l)ZqJ{iĞzByxـMt8v;tfgtԃΨG]yB W"n ! x'RIl-?
+|F?"Z\g~)hOz?V|aGhcEKFoyiVm8(s٨@[$By&QY͛ǽ g0dܜk{#7G`2D_`CMpL'B6;Ec! 0$JN!09bؼBftC-aɲtZ*F^Z^@: cU &>B: x{kjUa՜*'.F5171RV-٨oB&v֭
+O̎B+]n5-:L/բ+ ”w9- OIDnXWÖ,L\;w3Hw/n/^MtrV/s$љ[T_ XUF`(l5|>,\kH.~ƛ|L+ξL2JH SMg 8d\#T ^Zho7]ܔC ^^6H8]LebEb:i\MTa[*%zdKG&U.!ſl{^9Tj7= FX+G|i#N=ڥ0ZSLZ N'NNjaFDNXN<ѥBCyؒ 7[HjWC{L4_ mYVs)3 ywDflh: zyC`5
+Jziu?Oc׷){HTSt7.ָϴ~0I
+ϽySigT)KUr 'щi
+ <(=$tJu[h@_~ΣSڶhA4<e>fdvQ$ln afZ46|YHCb"e@Az,v}[Frƞ~EZ g>d38r_r e.٣}'~
+G
+8`0:t VhQ<{Id c{o<uҿ^ZQ@z9o,&]/|,j<'Hq!j~°P%PK3t~}}#w%H']t?Ds3q/ Ҹhߙ3(#ⶉenVRF^WJ:ɂdjDG֤/󕁇Xo.2r d̄˓Ѡs$QZ6]tXȂF}E2
+wg;U»~Ŝd03(o6OIW'm!&>븨RQoQ9i@`kD?֚BQ$&o&(WL뢨nAjlŎrBP
+XdPwܼ# 7K'MPޭ4x'hgWE LުZJ`' MOOFX5FvUB̛|v(ܔCFQdh,fJۅc*yLMRW} ]Ra ^& 8bq8Z0$5<TUՌJkal2YC8!->Y7բ0L4;mPB:G´`1^}4iwKv5/xC06Z+)p.k<(}_&QwV&2\T5C=YE5T>eW}3e߉7-ZQ+ōG~-#w:QORIr6GYɋE֒ ٘Z"F˰FKC(Й HpvtYZmrē_9yým{bn4WJz;jG4PZj]ijJ/әRcoЭ#_"nGi>"%- DP(*|zFQfցF~!  QZ'Q7v>#pK8e (>goo1QtTV7߈{*8GVE$\\}39S:+C's MH 0?M3!cmJ}ؠcWU,(&<AƼd4F3ɍۯ_ڋ[w]K"Nֻz71]se
+<mk3\!Wi<=m$1n/݋Z4^
+A,ݔ~ ]8pT%6
+@@wwӿ{EQ;r^֘0B82~Vf _ m#&بyS~W\(zF'SYkyͪ^`Q,uE*u"%^G!dT7gzZqaWr!/2̭~6is ]
+[ꗱf2+ٷlPL* Ʈha3?5?$S
+Oйzq;0/D|y֋Qo7[ ѝ2W{QxTT7/>~PJt,$W7$x Qg}!>Orzd"?=t64Pm<J:؂bqNxϷSw6ӅO︩݌*>/Lw tߩ vu{2;w":$'YN~WM&|NlLG6: IA>"9Iiˆvh`; @E~=KNn)f,`  ]t6ׇ$j)7H8{;tڨV#1]:ܪ_qz+glL@7zr_V VjXjBѭO(ʢ;B5[<B/ol |
+[&"7b! `OFsv
+2NmiSSsW:uqS3| :Ka-]S[R
+%; j`&A=gć&3o#kA-k^E"+TC7eMC
+^
+?n C[SAr\t! .⼷2aj:dQLG"8sXHo\6Mj !2^Ht_  [Yt
+`h X9a΃0Z ]*|qaJRG_I[uHy"^ 蒇,ϛ۸\ kV5ܲ$q褗KmT|N=']\t^bBHId( )$C?Q,v/vOnM-}|uR͘ %<'P/ ?X u#kEs~g4Fv
+s S6%[ާ Cr\:mST^~D7Lβ)ܹ{$мsU(x3"ϾA0IDɭ9[!-a%'k$I˸ObmJ~aZ0eCG_ H}RT6?a
+|d`(y@S54DWM6!8SJaΟi~j}ʬP\CDͷ전RT(]ކM_XJZ7H]L_D/(lDMkC>M^vp.<B{I8iN
+.~[RjZ*kQb5C_d<l:LI /'Ue$挵N:>ٱ{*JɞDȰ&e0 Bouiaɣ2;q.=j{`qesan³+gMi]ȦgB)Wpt:qf`!xXOTL 7\FGCtQ]"?_"<׌99N:wgSHyh"K]\4e+9>v0u %YC̤I쳊qd<19/V~C]t{%5(@'۾NK
+̤Nգ㓓/2XC7# lݓY$8ϻ
+Ki*JwU{M;<[^NW
+^TIF2y %Dw3^6t:u{F رQݟxr&iG?`<4҂2JBh!JK`_|-Ojs>^YrJT x `ڼY0w`7)uM7k|'%\yb qL%\coNÜԥ\hIx͹kOAz`뙎L輴qeԯVmuE65ŻgJ$@tmuv`uD>X<4JJse@DE953v-j7t3wvh^h
+dlTuKk˞yoU2WsLpt U.f1?b2LƵAhci|Sr~>R%AGK)rRBVhХ)lu*7%a[~2PoJn|<!C -Y)6#wѤ᝽-12[qGZS8dIqAazC\ S\iωމތ/l4p<_H"Fψ];wB ռ˭4t@:gی 8Ũ^<{I0`؏ɰy+Q&V_!(@*;h8nB%%sEjBiWSf(1e 8 H-yإɎg
+H}4:~ޘ?צTl#=«ѓ/
+C1soq?.5
+i$jOOl_`NwG觚_F8zi6^p&O+Ҕpkό[nFjV$m=uK],qE ew"3!i/Ϋ:t?iðva+ﮉSjvvvp/$ne%|~^~"x'[s' j /*);H4DL_}獜ŹV5%8K^*scDBy_*&¯ԽIZmRj)3b M'A~QlM\U C4C)Im% (̼Eiaȋ,F%JD1N;2l240u~'Hܡڮ Bbb"g]rR8ZT~HssJJ T>(mrxf]x{#eQ2~~2O&
+ז"H@z
+mk
+JTU*H77}-%a^lv4I%w
+~Or'=#r25#JlT0 K1CL
+`0 Ν iEYRbW D:KE]ir, 3b@).Z=)JItԉ~R)tz̦h&JAχ]Yl'ݎ-I|8rN#c*8x)3x%ebU?DnI׫}ĀӬ, FDRJ3`Dn\c%FOpe/݁Y#q 4NQp&xNJQh`0H(hWryjA PV`Vr E(X -@
+J|\[
+ K yug2DЋB4Z7~zN.BލB(-N5u>c#Tک-Re:ݒc=PJ
+^> [
+_ ng>E4?\s|1ŕL@( ]wނS6ԧnQ[OIgO\4xVm1שwK_->Q坍K!90L%fI{k3se*k+ RدfWH\bT-RHJ = ?.Ɛ 28y=DO5Ub1uF"EL^Eh-O8B;0PQ+]TVDg*Bnr%C w=a vSr zSQJbtD }XKځR$(ATiWzw" 7e
+2C\Z2kF&3
+Y`:Y@X\}! h'ݙ /8JO(8%n:9lr4{20c5[$<̉5C]*jql@獓O,a:q~5
+
+Ej̤e[4hie=H<ը9v0o`I$s%ϧ01,cӭMT2dڊbYLQHlZLk 0Y<10D;Dô3Bt"ΰQPĢ@W|QE ]/'Pu'Wfۗ {kݽ77
+‚ѷA9\ͨhhInJ'`:ٳScE]FI [,\D!E`]D)%]c $:rYOC%(O3>!
+mP-Lg"G:DN1!C"R5\qEV[=Rvs>n"_Gf#3L.}O +Tb ts:XDu'AB2ilOn_3"ʒ&8.8 % OS~tOzDW&'.S_;N})sDl,Ktkm@9s.%;wQmnK֤?v'1zFY?.\&#FcR\0`b<N|S'?._ff憷=䰙C6@;@,1r[4 Q…˄_fƧ%I۝>VL[S"A0|u DYV Y,=(8q𤮧!D;j+>[ӕn"LhNt SqtE^t!ks6$ 19nT %M"-.J4C@n/&ͱdLtXH:ipm81g'bv]aBОɉ\nsBNKBDEl[J?}eZ7/a1p0Ba\gVi# +p 
+FQ
+n,-Ͼ+!z8i[B43ix2_ xxѥ*>IO)~ 3G8!FeItK7n80aus?Ɍt uNh* d")@};lM>9!_I>$J!a#Y1?B0(HKG|(m Sө{ǀ>iK@l:RÔ
+Bc>d @GN^HQ.9l0͠҉+쵃_(&cNs 3[zEp v;.Fky`c ҝ 0_˿PH׶4ͯ~.uE%Ǵ0v([=Ip4!JµÙ~`mAŬ(lSlÂE(pqo%?`E((DZRd b c%: 7o~.NFσӠ(X. 46z ҁq&`K˞Y瀎[8co-[,;zy[YMۅ,X#?&e ZF:_[VN: _KeG]Eh4 F:# zCgQK_%P]+Y-~
+S0T t[JE،
+W'ͻ: d
+
+nEh䤌\L 06
+c/bt8 RS,:&D;r@4MIFMdNqh,q#]t Q
+A/VHףف2uA<Ra[xeN'J_@{q>]eI|[R7*=">/'Ci Jhà8F(@{(ZO<<D
+hiqv@<wH.QJ"
+R/SPX(3b15b/24.5ln{DSi98<1 ]ZOI1EcsOuR9(WOi{Ī7FH Yb=FA/Ri=\w(1=nG,{Vp,_4#sZ9PpkMIp},З4B[*ey_4SB:!bPpN^
+l^Rv=-3pJk|x(̘mtEƹ_s3{8π!qzQ0MWH}=J#NsrP6{./5,c^j-\“\T^ 捱!q:L;;5pGtJouDGWmw"NۈYmYL
+bN&]jЄ2SoC% ikvf >c\s<TG'Nwa9@0KO%HeR`'}EÆbq/
+ɑt%j^Cܐ0?-ǫ>!/
+3Dth(*rHiM0uI6vD9>*) eHN\ЍIkW=@(eBʇޕ!nC B]Ve1\LUgajɝ)K;UILDG7
+ѐ8]Pc?!ᰡG^L1."v5sԱ1 p, Vig@4HHr|i}"_weu5Z@Cu2E^(75($>[u2/ g-dCӻq,۠O3!ZQqQz`^71ѽȶʐE(}g=^N Jt+L i8E A X *BqRGPH?M h';2uWkc6*VIS/
+$\W(KKíhV6 Q!4TChb]VOI|N
+fp|kJ![1h; ص%̷>jKpQ߇1'pq;ySv
+H`uAɠ0?\*jb7mŃRǥNb~.Z2(wn \-6cyJ|
+QJ­:M 6_чaVTo?
+1l.c  FwLtTU7?5QuKY貿cb4vҐqBAz`WuM[=-n >T QLj
+=EK\jʟ?{
+5DZ*F7̋w]]@]v%1zi:꬘WZ/],J7
+h&p+F qGH/- _ۦbկ$F1y#F=5e@~YSh-]_7RA 6 K!.*A*qQ¹wJ `iLW8?%DI0A
+)DƁU'sv6E:Z`>''t2u$?:tR76|1eEp[@tAD{%E]f}bCBԵljU#ѹ1;u+{kD
+Hbծԗ~"p[d+8ѱcfX`hQ4xɬ3|dE|py! /f]A~@(~ ܶg{`c=8Q:PGץ ` rl-ZHRBŹ&Dė 5C f1a`a)QzH7N"im˦<X-=.kԓ7?1#j!!:lZ &^!@IT~"(}"cC(%]qݑsbDyN^vrNJ.7³(F"<F<]=c㋉x@x
+%!>p;2u"h9O+|Ɓccۉl~o268Ƹgc83~-JuG h9BeLt04?3s;\|9:#Ck9g Œ>Ύ|Ax֭; Z&MR:BkQAʳO tp+1i) .v$ŭ\ZLH1Q? @i|}X hSDD] or9Dz<K#
+"_7ހl(ѓu`f*8{PohĺN9ܛ1 %k'[hYc
+?рg_yA
+/уfEs6&E!ųPtdEitL#UЊe M6)
+diR?Έ"ɼsղ , T# nj%Tز6PV$@k腚^wg-,&A+ M m}bSD،(P:Fwk'<3~N!H*[3 ;uYnjJ`
+MK)Ь !q Ys:!!^q@eW%y'\fx^~fʝ}ZxKG`
+,jbB
+́@x܏qC:#8v<ؐ
+q9.Dc6dvEAϪh覓.ndc޸(8mj`4jiY[a<!S~XtBIxo : d}g0]nbsSrt[[ɩ )t ̦ϥp4w\/h=ÄEHLK傥Bj4zS
+|
+n*iE&å2E(MB&0i"par&9őr(
+ ?n[pZ]q"ho
+XU%&mņSv8إ:M&-æsLn22rq_\ 7[A6
+]c8u>=o.:7+{Ly !DpI0@
+;]_I@Ii]˽Lgi zu..Fd-r>͈ږ/1,/cآc84G .*vϐ*$-6#@J}2On
+
+l;#\Sf\ܥ"@Pd/nrPX3ŖӮ%
+^(5/%nu& .~_WÒ#`:0L*i8?m7mbp n#
+!2JԈn#=':wD' $b+jsb[d{\h>@ h ED+\ȄRTCfaC艠-L?$|F6eK$/L4
+ iÙY( 
+Gb3R
+G:<mb$jYU={ؙB71/ ':fKM1 ˁtRC( >`?i`!a'-[,r"MFvB,ksRf;
+ kNBUD斑5H/vp<DnX*+=rT.bSfv"ATxvkj<Ln\س-5Uncے+k9SÃcIPYLl nZT5%@@o\ӈqyYF.ٳ4'܈6a J
++1qPFj::=piu0|LbJ)pү*4%Dkp9P:ϚH4]4hS œ;&y{s, FϢ;͜DIu6E:JDʨXF
+ׁ?|
+ѣ۰KOTȧ FA>mE~K=9=SBBs4Н͝#&/x̔u@i .R[;y(cv:FEµe/52e[.LHEQGBn} f+obs]h uJaW?HF5qM7 /@*Z`JHaE=3DO>
+~? \T[ԋ@dbc O\+Ki[0f҆r2P)ɰ?0.=?LE4iP<M"Cqp:7xۡSaFc(Ԕ mBs $)VvHXW"N8X? YbT6C=Wa8ジiQO(1]}E QH1BPO92[ZX# 6KTg.ZM3=IU!:YEʾ;ulu[=%ܐ~'d7} ؃BY P$~{}coA^&O./ 'P푯P.y!$2aS@ZVmHd0U Q >#6kL_hlleHI^[
+LM}0L]NQ ~1j?$4uyp\h2rxtLЋfB
+zt:7)&x1SQum6..Ds֦oZ2-W!:b'v Vc8%p0i y@f0 Am('[/Gjcl."rpb|v;`Ⱗ܀'lq5 \G
+3E@z&hfyp!Aze1*Az\>bJ&U|_fHPMh2q/co6I8`1Cf܆yH1%ajA 0R4cChe{7aK߈S4hLE$%SiD9H+%4q`ǜ^q7E~]DBBݓ&Jo׍(7s[-KJÝLi +v>=- +hWfB4 Þ(+0:OQN)FAQR`>}:F6vs@T!1z2.is 8Y{ݻ)<Ԕpafv mUl 5RkbI |Tei!iw`Wp0JƤ\T%#ܟ[<5 1/zծ|Jn6;Zf \WHmםsQ̧gS9F;ؘGXy2Ø7f (FΕnkfgfwrm`{FZbt N9p Q"Rn/FYPb4z"FiZFbcX̄&aZ $ЄzFAӬy}wn+ mх-aznbXajptcjFHҲ25X\7= !~/
+ϩ0~<&HcNCk.?RVӃP)
+c=ue]҉-0l$fqTG|\FEx՚o>,WhCG:7
++Y?jD Yq:X" d=[ڄcֻbЫKƂy"%':mf*4$3-hnɴ锦(mbuCJ=_zU'>= W!Qs*}iυC/Pgt4r&CQ̡1J{p3Mz /pz32lbiE0LYvƥdF]D7XL/n(2W`m =Pl~9
+uщ~'>vھR1hvrW8f>Q)"
+
+QL{g8+̌`i
+ma(y<up.x[F j(!;"?Io)Bw
+p"~K<S*Hu%ᯌ8adEbTPFh#9Hu!O7 ׹B1( g'^Mg񤯋ۣ"j͖GQi,e;CD15B-sP [-EFETv&үoA
+mrp-w Nɦ{ y2
+{C?z#rXyQP'+kO
+,9rn$2WQ<GMZIp,IAQSB-j~<D#$.dixOA#k'`{ǜD " [V#uEs̃7T(zLC8<W`o
+F"iᴽnzQ~):TRzOzRcfsPB,p3oizFV: *.AYDrX|(Ά w :C` &QBj69gEw4
+m!=8mna]|i%=?A)oN=D|VU1!nsC<B,d%碳hgHYצ27lڼx[  ^k@cj4h4h
+H2.Xp;DaE6\.lQ} +a"Xa ZpqNV*%`V
+dAmL J)QP\Bˣ(WiVq5iAOR1ϧ@527`j j&Fc?3Fq2΂ ո(yp%GiGK@K9Ӣ i
+M7ɖ0+< ҁ _aFLg~3i"HMM#Y
+W.8c g٘+0'DO;i
+'Z<A *A=`tkPaхo$1JG+qWцm}APt5\Rr! tEЫpVgj#$>S,Icu&J!d̃/4x9 )RLʋ,8 QImM
+ /w&a+mo%L HR@YG-&#qTϥ j4]JB1.m 
+ygK|0(y
+Q1ajH DBcEh쨺Qf(Hm!z<bI;%sTPv/Մ/GnE\,,.B s0
+I廬T` ]L%]3qt3JldյlL>Lo Ub<1lm 醨z0z_ŀ
+^} ON ݪYFt^iؠ|u>wGj"?1{ħ'9ŀAH"Gp nm
+/͠~$2G.1+=&utDN -ְ7+scI#El1h1 Պ[㉇h@0|{7*k.}dS ]
+ޡ41*YvR@i 4҅.=OM+MKfDǾ>I[L>P̥Vl`D{0N Tx<Ӟ~ص`􆵑yC* :6ܘ(B SFY=fbfr
+J|
+qx#*Qj'-=
+_Dȣ~wAK_~Hva͙
+Lsqj?~cr,ELoXħa1"D4TRT0wي< =
+6p`WL۬ SR1w P<R!:XANGxs$U #jK{F? :aS9)f'jF*b_@ׂ3Dʊ$HAEb*djjDe!(ekG'd}? Ũ"|1(Rc.$ֽ!\D2)|/ a[?v-n\b]f$U蚝>Ű3G+Y3IݗMȓΙNVa-”(p_ؚ%o泷 =.3x )%ѐE#"2 y8*;y@#\=K0rM h.fIǓV|
+3cي }GpWn>\,!nXs]a4>6<
+:?$Ɯ")l 0k~Pt.*:tS? <P~Hx@_x򟙆eFk $d>wVu|G$ഉP4!
+ ⊕'-0ֈ U͂`b j1D^އP (\/}[Fd΢cl~
+PޘO.=A}vV==QK}bD эwLZj2mᆇA5hwwar'V0ЂV-qq#(f'x6yFGw}t0tEeCKBY.wl\rcs9ŀ6H%sO ~46==t6l$JN|T/vMx
+d-_ZXac=/)촂ȀSv{?WTA
+tH׍6^ ;Hr.iW|xzt}".7T=
+b=w|C-۲VMjhM>X+EJr!t6 @N hkF>FП^I~Z[[%DrO_^K3T|CNo4btl@ bVNYi -)i_(4sR&1Vy=%>I4ķ(#/AW,2{ ^|W_l:5F4M䰖]J=ϑ.maIĎYh12@AS T Ҍz iPXm *Kִ1zqmwZs</]LUQYQZy"]݋ c<?.fk!tc-`]~pK0O]8,˓ Q~NX^Hn^F1AKT>hH`0'֨$,լb{Ʒ=1 ;4;L4Ǧ~ȸ[B1sΆP1t( 1Z6N$+Zz+ħk8w>n1QH:Cx !o`p[낹`BȞ?U=sde/
+A&&I}HO[E(-ЋFGTV& zX.mz4b FV `39p*?Ʉ>n%تRWL$ŧ8Kt6_r=˘LNh
+zj>Wo9j~ -"-. JÕF"۔}$6Uj_(֯ zvD. c`@y@*R\$|yQ?z,$Kمl2Sy3'HWxWc*}tyRxq5@h<uBo٢<0a`ӮF,ISN.;jD AyEXyG+O4d7)7\xHυЏ،;k$Y3y0]cq :$6
+Qp~ ώISzb%#
+f0N
+U$ꗹV$x!6}& 2^aC̓50Zx7.Ɉq4vLKu'x^6[tTчD'T$XMDEE'mL܍5J\iR8\ݽ؁9.<.2P
+NL 8S++* K$D@<G
+Zt85ǩiV1c*׳#x=r1Vh1}Aᖆ:ˎle2[+WQ̂ R1즑@i*Zj
+؃;!1U5
+$LO @}sٰEEg//F@
+ĶqK6t%
+֡ }"?&CI˪b+Ox. @ R(O>"sV\C*tMyMpz"!*?YBm6*F2`Mng=P]lPX~D1d%l $A(qy37/u#(13%y9̈́b;3b3!}2bwoN] Rج o;`@^^oM9y& E
+*jDf
+N_2JM IJu4 |Z\>b\0pVNЊEaND=Xv=Gu=<|
+Y/NC@MLjtȁS22,8 0 wg@vnX\N<Rdbb 8UƄU`%6u^Dm-]vt搮 S e(
+Ry<i
+΂ rn=ȷC+y7\ƅe-/0 # Z#g
+ʑ
+6#Hy`m{uM?, M#77i
+6P?2q#S:32g:&@JkhGWM'=:hv/H@)BjRop/߲`hXJqܙM6p}=E-'ȓ&-&yZG͙ߢZ 
+\%V/\c#áz- BMD1{$Au@M9?ͽ΁jvL\$v1/id]bxJt.̙ Ya X!k˥dQ1?sՕ(bc%e)R<Uec ֗NDo8[KN?62i|xbT6ɢLAGt0p{E
+%E;L@Q^t{P}p^W܋f0m`%%r6ZoA+[?8άB={s Q}/-gFzpr$i P
+u*FYCyMƃbxJT(q&kq$EhLg>1
+NӟpI=I7Yp;Κmr: `vjݒ0pZ Oj-BǾ`4L
+DIaM"!T_Y%RiE2K }HwJs$ĄȾhbtY@c?Bɷ(IB*Bx;938^ ?nJQr̍m,軇0}WY[-tO].<=)1Y2ذ?%Hr;D'Yt0twٷ#*ѹAsx9n1eQm3-Q2σ{.^ MGE*ղBqNoxcOsY`3€g'<[ΆB|Fȥƙ`Q7iS=t,0D8t.#.x.^0j.v9ihg\Q N''h:bSDX p՞:f>%Q ho2Rg=\Ďi)8&cºB#Ϩ7e2U'۬dX7FNi[FZ)Z~gTӄ,o /s$ *&A2<?iV >RG)H A]gCm AP
+r]LK?^˞z$h֌53J!(ݬz!J&E05,bLgIPAqtHĹ#>0 P.] >vmNrI\Ϛ7o:~6Ҁo{r.\#ڜ yȁK|f5
+5ԆmSsN >XUЀ:m¹hSE%FmdTߝy Mo:t
+(g-! >ݓ{JBgcbJBD|Ah\ ښVϫJQ#ӯ2tj u+҄DBw,unp TC("HL1tM}8`pϸ施nbԝyT~kVV\ˎȬ/e
+-8-X>/י ڠOclQī&mDKRDeu;g?dpMjEwKҎ&'ז&LraQ$_ ƹk?{źQA
+8H}÷w59wY4TqN% Q<Y0{?j;J5VveWT?RstspWסY`ciFN3puE[CWuAeK6V5pL8gAJIKTyw*(5մ@TS2 r_
+vv$,ɧqd-J60mY91cB;BKϩȑ ԝmÔZmU`;}GK#L XoYFZ
+9P;AW%<>j/SbnȘt_}̀ɘ[0_`Tݣ1%%͎pOOivjL G.{r81%HH\|`ott'X1_.
+F
+#PA9(sl\#
+mB{Hd8jyicZ42 ؂0=NJ}0Ma:f ^`I&=zbkς68<1ÐBi8ISnVC1bh[/H]Q<W%(XbNY0j
+ HϾEHXw= v1%:!saYbxl1MBIWYюspҧ% rltjj6i E[tfq;;9BeϝE\3OkÛ8 ك
+!P]=}(7ɺI.=* GZ\:B^ױvwZF!0]6NxaH<K!&-:jB`:ک
+ӹp֓ZUZ|x 4^~w%> 4uJ%7!2`5u5ELhc6Jt]XiLY1ibَ Xˀ)U:x{~b]Y=R&^aNSqH Mxi*- )QӪGsy@:/Qƹ`8`ڼ8p0ԕ<,V6nz9bDgm'$M(mP:e-^/5vanZd.7>t1k w$"JmǎRW)hUfqUhQQR WBPZ:5mhF:X,+aEZ͘
+Z'U19{
+(譅u$9Y\)z/ 3QkڥD"wm iN2G6Eƹ
+݀)CILEw0Q=Ь|ŽZTܲ(<ày:sl;-
+)6SFU:QF)=!2򲄧֏2vɼ+.np)(fƓ:`U0N`iR0tnV&,>eK9666z>1[hEi $RcG+\,d>^Du_bZCxl\$jl U6;*9Ц+v jj.V6[UJ]q$ȋ-o
+N.<Sw95} Q~X@=F,e8C"#=IȿOyUPE"Ȧ X껒 #T~gh 2L,s`4
+' "?vM8T RR9'#)14^4zyKHuxߠ2xd$e' iVX*Fn2M i9>{wN!Q Cp0;8\$-״V…JGHh "e3c!4'-qi5I5MEsj B$YTpw˿t Եw1(#Rƺ'tyI
+;# j tm$bLtQdI-!5 *[K;k#Q!8hI>>*,'!:/0 J^הPKvzvډFp?& -U–]T qOZK1e-tjě 7]rQlָsrNZCGP"%9K|[I3A-ܪpHN YX54-X<삍{iwsR:VaL '!Zw=FC\%Ti;ۤBI
+hm"oK0mc鮎c_V%LketQԞ\C=t0Z>ԧrp ô㎫aJ]ualuӍVML,zH'JU
+%;1:8i~6 %y)Gz dej;}0*{7-ڛ\YθHdwezPQ&kkJDAYE}} m[Dj, :ͽOڥ%DG!:Q8ucq-O>k(z+%Ǹ4Pl.P&D ET6Mh4}, m -"' "@P$skN e+߇kŨ PwDŅ҅TWGNJK
+Kksu,0*W3 S}&\?}_s&mBT胱3}9aOr
+[kւ
+ekmDNpt5<{|MNѨ(DO09NyY}yY%<vSfIR7V8>x[[wKTK0fbfB(3YvVhKtX9,y%yd-ƢW@*)%
+gr%D+V'-^F 8Ůr+T5S%@X&x_ᙤN
+ѝ*Qo~r&YkdǵDSANcH/\DU Hg9%VÎ)n΂5s{vٻS%AX#G 8(voGr[E!d>A^+/Rb%EѺ׌~Q"I6jZ"5Kbb/
+#~"~֐d&
+ Ns6K .RK~ Jmj#Qʉe39dZY~9խe<;lDi-:%Jn
+ aT_WVH((1Hr[g
+ȵ]g3 ?װ4D)#|RS.. ׃p}dQaSy6ޘfҼK@i]1TW_RjT}p[lt0"L;8iֺ=hvCJzDo(C̵ g 9ld;-
+e!ka%L']SL!Msi _2A=N>|cquӿi,PfMWXE(-<̡M~P6
+]jo as?d5
+e8f4Àš\?w M/dzȐ
+! N{-XVUf4
++цSބMUY t5iV>'7:lMw%3ZU#QCsw4װ\mPso?X ߨXK%oa-Kݍh- "=*x$"dTt _#&Da+gO
+ Qȯ&6P&<+.
+Jg?`hEStבgP'JuH6<iYh{-nH AuxHC奒 -OlئdM%<@c{4;/pFNvz88DOB8S2d;^Mi#~3m.|:\7 v=5~pE!o#< D&LMm/=wP֥Ȼgvq.+-paE.pW?^4_+qy@mEc
+
+
+K.jlH'BfЍ&~MHfs2u\b}w4P@&lH*@qp2`~*t]yZt ڡƥdK Sޣ_B&Ђə8p`CZV ȵLI2 t;0>T tb4%J)G*/tC E5_q h]šE# KAk6*n䚚.su:C҉Nٔ(%.A{-6crcޮ;`6^tCuŽb8,d73NlG`GnD@Z_E/u[nl.01+>$"kM#JDZ*\CRr<PY@xve8" a wxa '2y5t%AioP6Qyn]LeI䑸҇~8٭#` $/~WA*t
+Yp8Koo&5nbtOOaA5;xd~F%>(f{uHk='k<a*Ɍq+xX}ZChxV%/e;ߙ-6l)[o&ǔU&y|7Kެ;5x_wh74
+VӝHM%ѵt]mu4Ѳy_blBǫE79?$4}Oғ̱p|z8,=b\I C>e|4ԋGW5~W0N i5ĵZ>^h ȡsr<wS]
+!s/>O1ږw:DbB2j93;Q M~wD9, $ lj%ٛaMf"{67S/ 
+ l
+W&h-Ȟ9v_7iyYe>(IiwDA>8t28\1q0H8/oa"'6wfiѽMOMf`mB>zc4㭑A];t\gI
+bĈ 'gĺEFRDv\ňru;vUV'bݰCPݢ@R;Jd tN\W vhR5vH
+.^訖
+#vb[r/Eb#YĈK~")b_gJ웪> йIwxAkbdOl ű$!0ҼCN`O Js͒ )tw #E‡E3 (npf6>.yaL/&5rkmX!Ɨ2X,6ˉ-MaWYj:Zl
+7mW׵|s x}"Ԕ\ܥlR:ɟ$ מ/_ꍞVyݥln D#Fk}L"'"n"`XacU<e2'?Ը8@t`ht`yN(umVP*dy-B!F&;3+z@)1]/ jm_[Ե߼i^2]Y_ ?DNиU+?ixW(|t6.F *&Y+pz5/ϡ%>PG>2q>ηE|4VBkh']A)6Dۤn̳Q]c @39X1</%.Ȁ a(Qf#Uo@Rbp'&ptKuZ86~ffgE0;Z\l,[w6iѝIj& /𖤍 y5 ׿'4zꅹC #&UP|\b@CLQ6zߧ[rC&?cH`wMб‚I|^,B9O'T}tP"JG'@GQUQAC[tr#R
+3CjU>7Jb|4f.e39s-blNry5nc?^ !uYtzD&hG$^,HBts(Wmw0lݪgNRƂ$Ue4io찒u[1p(.3;i}@Cb  "yuIQSRvRMnCԆr1RPåEצP`!
+C^Z.
+-ap9>IJeEwF !8qЮ!t\.>0g :~צ@nq^ӌq`% i+:mA U RPiR₋6c|bIY+ rJ:[N@ =
+̂&D:"Շ=jٱ-b v0LwaQ{j) q۔*M<-ԅtA
+'mD*J D:x.S](R7+;xI+4 XЄ&Z#vja+,9@dq;߳9%ġ]$cyptr6Mp7"$$IY!Hvkje P}2)K&_iQ<בgJ3+>ݴtn-7R8XP%I~;zgFL8wi 6]^P2ÂUvNaJ5SKoA.|BM"e?
+D: 2ӸMiH"2`yrnda7J&Kf!W=.+! 9oC%%@"\ E:KDMYȲչF{A$|< IPHt"f3ͳQ@\EӋ'zVj*oPLO޺dvF4@`'/{d \yNx2,Dk x,۬ cQU$
+'ppD#"3xٷwC\e(فi0 Г<<q'z #:(Rk!'b <MEz/xԤessǵD9UG^ !>̙A.I>Ÿi6
+>
+e:'ngÓOYMւX@+J}/O^AǏnca]ƥn#(FN0VM|py?صMnb
+2BрmM8}>bʐ!ɜdX#4*g*HLD xdS6&B@qbbh0K I51j{$0Q!_79UTNB<"@Bm$>PX)tXӏ) jա-֒;"4-hؒIR-cjD%x;a"bė<Qj2c"yRq##D];)ޯC:K@2ikr L=uv^n0]K=έѸو]a'*A@nqGڝD܈W </ uFyQc5pCp}awoi&sr;䩓CEs(BMdн=ַpxQݦW.% :3IUx: xUJLS+'Y^;Ps{ qVgZ#֠>a>b'a9R'E~ɔc&NBpD2QHD`q&b!yCPy[<~sb/rRmNM@e5;Bs=A~GP_-}3mF7]vMjC))a$W$<pgm"ВG98OUS9(mupf@H6:e"wJVqsq_cGI*@ )j?=_Ӑ!\ G!sx\x6f7>V| G@˞=@=IHT1<4DvӯDEF;r*
+^~yEwLgT
+i0ץ"A&(oաMi<I턬iNԻ%F 㴝)>8|R15HI5 䁎MsöE#gq:s"@*x1]\P}Nq)?V"Q @7V* H.HxlYPreizCI%mb#Dda1XP# CvDpD#,(+Lf7#J&(IOjǕ2rXk'B
+!I!/n$i%Ef)#C\qL7HT?ޱr)σEFňvoW l6
+uUl##)+4#1d`d_-(ERbi}H7r)
+;|5DCk;1{1gqK P u0-&~-I5ywHPaL +*7]. [!? 67l:iaD+O"X;B[[zr:FOԌ<u<6?''"V(5 /BdaIAeW:TQ@/"L* 2!u8*n?lq#b>)̈ $/-`X10|3ERDTuCN%N9=
+1g4ǧ
+t9F&"E%h#aCahbrw&ߩ.I_n-VYF:!uU-tJ,^S-S|Wbe$CI+F420zDZIZZNbz@R0XCwaZAba"knFI
+6݂RpuUaѺX9KT'Bs@CpJhYh|_0.Z$'y^iqx7~ [1Ug`}?ǶTkW5uK6yaŢI@>
+믯RH"H7/F"ȇ0;(pnփutppWܦ, \%<ýR)Fkm^NqzQ#<
+:D1z
+auk::
+#r'U}ce
+qSճCHS35z6p̐FF>uNm:&C_aZ;PЂk+tt {y5xo
+<JҲۍ3ԩeuݬ?WU OE%BgH5HOxm[A}F1/'牺V[C~zRPXGË3сV-cbZlvX.
+8d[í!!Bz$7_n$;X
+ b
+oCנaߣ
+ M-k83+ۡ?WPGBW펅.gޓQHQ=vҎqZoʱTz|oX(!D|gU-ف\vGH]V qvXw z :(| i(V`Z'k~<r# #,5\x4ySyfOu헣@ۿڟ"c#f?;tGW/wdSiA[5<\A:JYrZ;^> ]Ih~:>6%oբ.[y'u:#
+m@` a$c"/Ob^ sϝ(*%cc!pd3.؈cM}biSTݓfSt/4}GIyD&8",ñ۬(IBi! t-ٻUB: VȊA_Z%윆V@ *(R<ls"!/uӈYOMxdbŠƑH(oOᣡ/DjJc+A*0M+ZF8>|IF|D/`F"AK# F0hRc%}xO|PZcbwXm1
+5O@i
+T8TlK Uq
+譜1m^xKβ xZH}PȎkK"iVNh] Ps268?L akJOz
+)6a`@Z+l~\w;*5-(`BM@YܭCT"$*hdr I?Nd.I*>n2CuB^{R]EځbQ>>f
+|̃@ب^y.ف%`5q4͋~HoʈDE I0tA#@wr)e-.FuXi} 3O;Lt ;RLL+.m5O+6[r `]
+Ļ%wurH:o;\: jQ<dVA*I;j!a}sI\zSS{ZJ,Bzڨ$BlKpbb壷~z8VQSGH]>cЗ&¬k\j`J!:Nx0$
+9'S%p!Єx/y:t`,hL%ԴX'zǩj HJLe<(dOtiHh!ֽ+Jny@ _Mx4,C;<m~L't-ѻ&o@h4Hz-H1zI #c䪡"#AeV4`jj67I *B0o)šQ#ECGBމI#!%
+n1f}|ZMPe;FJ33tfY#B nҪGjںci<z̞i
+^`T$Sy@{}*9J{Lt\3i{&(W~Ä)\6@$`R\wtnrtz~$$VIcMIb"oNѫ У}$EV7 rֹѧ·Ԅ%*
+\%`WűP48jPv3S&Mئ{6K
+%>νe޻Tͩx!qxWc0 j1Ք~pv|Ev\T B\\M\D
+ȓgeY
+6Q,@$Ɓp;au t^:Ro
+}Ȉ#dY"iFe)%HVhu%:<bJLT v{cGWH)̳F3tL9EjM٨Q( 0w|Cۉ"lP|mBU?™ȿn4*.m5i
+bc`MqdJjS څ;4;8h1VO
+KftHh9P =h=)hI/CnhaSF
+ OmNS_؇$)ֆ]סR/y/DPYDG
+'2/d˨\$@ ֙uR3GtHva=ض^/윮ЂP_cjޜTUZ^׹]J'ʂ
+ƞZYOeyrb$$K݀:Z""x*'a{-Bæ<@ۦgZq x@U8
+7F=tQɊ9 UV]/7H!n8Y浖K0RVS TT𱗢FR/c?[jjy`yG=9"k)NRYkD 魴ΕOUPq98z(,]#R<1hx5S"Ftde7ji\`%Dt$$ 3FHصlϽNF?=.Q׺`#w"Y#N@܌D
+]o)qG$@eb-AS"sTמ 4?
+{x¿. ښhKΌLF hIG')
+([ xT|"q"~T-XTa
+?!p["6<o[ nnwf :61IήmIDU)+v=TׁчNJPVүu) f|iFGL( _W_Gzi"蠲,0gt )tPfvf1 D 62.~;ehyZ:Շr&̯{ |ܪ*IqtyJ,9nz=tB4/ !LIm/{$Xg"19N--m$M<CipH3ԛ#h#qPb)us) W 0"+}0OO͌r(d44^&!$Il&"DDw
+LsubPgNJ~p$e 6R;f"\.!p(Q =RL).v"xH2qꌀ_7 ` R%ټL:~#vS)4w36h2rj2хm0:˽yr;(2Y֠zX-dYExF%4@ D<.@7@BݧI@-F"F+H YHԅfIKvaC'%а 뤗/P6ZjoVƗXwr ~7*g:
+
+ٲI-h۳Ч&SdZ![qܬ{ ؒԼtjEv-`{z}ڪc ¢Q5;@Ҡې Sq8)@+E
+l<L认}+%PG%a=KE?鿟BﵒUDy~]bFi̓'u1Up[qQx~Hַ%Q1H
+ w9J,}/^4s(
+"FUSLӿ RXW{0gԤYp0'c#c7Dže^jPrMOol4bpbb;SvEIԲ6x-y+&JZg5BqBxՆʩ 5L6:4
+Ȩ$pVե 7k3ͨ # ɦAo̱JXsA VTVGPqZ[ 2
+#Y Ui rMtO:9ZK hk90!k-#[|gt݋ƾoڟJ҅52%KqgU`xqr/ ބ_iSkrQ):W)R,8y6lX:K9v8"z1t߬Rdy QjL#yJ,b-ڭHhE=eFp6ib"7l>sǙJW!&JbHA+)ȵE8L)4|I'IYh7)٣UWJujO8b2c˱1`wc,~;YPa_. Z:,;VA:fHеъac Ɣ-k(h<
+!60
+%DРmFM*ZFzX=sp:ҳ
++MH\^s,"FJ,jtiM ktmuTRXBU,o
+EDLrpO^ b=p%} 媶zr3#њn+lplo{Te
+@
+Q/a ;jp*GS"
+0nt+tC+I{!|f]5J Z_] >+"n!)L2H 1w|!Zw45I|v }[J癬t|h$52Vc.mLqn[pK؉Nкl@m ,%ލ#,0~K
+}ROőaj&1{cGn̈́ti5
+D_%ӏ3  #<z%[!mֻG!b]4{9ԂHUY Ȱ'i'xʳ ΚAhbNL y4-$SlFu'')8v{ge;:lbAo\ӱx~FH;8O1('2@Ύss[*P ;:1+<T]|: 9 ;;rŸV?`jłF%TPpa ?8[U Vbn =?:rCcu"iB ; dZSHYָm/荓wfX%<RjsBO<=)]Ll}vn7zv5Y0!336G*NƮLR^j Qa<nd٬B
+4S5(MDŽy :hK CӼOUjX'uݹҒ=gb
+0]Ww4+ҭyyYa]MY ϑg+MuXahR-W'I]<zHS.5VerqxK2H=+o`T8Z<$L-`rMU6#0XvC4Q,r
+#;A-j\9v !XBJB 42BhR40熱$&O6,qpk 0^2&cs z
+{>J`0:~%sŕ@CU3ck_jճդᩰ\*RO
+Dܲ(dbSO#ȴيc&)$C|tp I$.M5̇ћE(бE *d;yD,p)G,d2omkX{Љ;k1ž9iFHu|;-g'٭qmy)Hr&uYIrua`\,3FVR2ҫZHw@5JCNh d;fһp"X(8_Cb+b^FFfj"F1RRmEAHv$Y_lɌ!G[rIڵm@S"L%Ja8B<SHa,tѫ]P"  lkv'׳5 2NSB*Sn C>!@9HQcFwY!;)Fsc8DYSuSjdd$p=/[wc W@߻{poa FE{H_1a*r,ڬ\eB }FXȁ v߃SQ2s.gRDj(V xDP}|T}A.ګGFyBU
+WƩ͍"LU}Ył\00F0 Sc˔aꐊ +f$(_FD%ir TZ nJس/ A`ôDo_=d
+dH6_ygӠ);TS6IM*qo"C=kTZnlX^^2w/I=XoELgv+ A5iwͣ,(7zlp<Ou?Hy.B( 532ޚwㅷ^>~lG%9,fiIE~di[yEp4t\\O!b1=Ym
+=`n/: `ohн_[&ʳOYQmleMsQjHq}%{8̯y^^]5O zog}"'"G5S% yH[}A)
+ x$?]f[ӵ::ϋi>j=L2&T[ k7ҿ}˲H]/&A0oDPj ޮ??_<S$VDa&:Mvuل-{wybA1lcQEL±([cA~?ϖM+^IQW+}; <iI_>: ށd4 :}ڗ!&&cx O6?{e\?@j9$pL<֑g{U?EfٶebO,OV? *J7]/9f-[+ՄCs ۨiO#"'*)&ٛc;lҽAч%=ts1/B p1~eM s8_&7x''Cd5?]Wkc#A4\Ewzy~V
+NQ%DU]x}7G"VOȽ'nKJf6pMs=ːulwu4#{<ÓR4pV8'dζXv4$@;7/l@5eU~5ާ^GX)56>!&|]^^w]e$Zg?&]IG_
+3 eqw %c_7Omz7"&X4*H Tv
+U1
+G$6%}ab>??G0*8tE:$4>L iS$ͽx+#d|M.SlJOBiztRR=/Np,ԷFH~dwt r. k &ݜMlqht@MZPtƛlЁf 1^v8< Jqx; ^Nq ޻ s`Z
+P-,sY `
+
+B@m#B1Uڼ4m*j2:QՊ?{
+]5Ey8U7%:I+)n
+>$
+n@ *NB'!V؈ ͢$<Ц 5_-
+*,D,/6tA
+mϣ]-w%\lwpo@FpX%uADg
+WI7F@seʖ3N`'H ƺ_-kZDgl0uD$ <`&3!f Qe`gqtۖN^ eYу]=< )
+tB09J
+J2)`=FȀ{屻hi3|!cQ߂~_b;c|/o%*3) UseH !U 6۳| @i.6@ZѢPRv= +i-;7\+=8殥"ѤXdP5oUP9PCϒ@Mx̂`Z;ۯrMZp}47$h2
+hI[:$fgߪ\,Nw[4HG.qV0qP}{qL ] C^$& 9\t޺g%Z3u3["g'C1WN<p
+ڈh?j * h.o`@{3 sۉHͷwH(`Y ip1פ/BcdcA M+5RV'
+Saز^~q
+t~u8G,K%M:lu <ç]fw9:#&-^8?jgX5 <wop"SO45렯 nH8k+
+
+"NY~DLcШūQP o=zγa7ڏ0-QPmD'Lye{z2a9pTssj1 ١;9(ͅ==?(};'>zqck?Rk[̱Q6|qzH =-GY~ ~t1<aqfyIYŦ6aVKǦpQ8zt"
+r^1̺{=ނtv[J#zCN*
+i™jmM=jYE-J+[)\ˎՆl$k_g9@([@6,B͚q6~ ewxMkQvH"9/Xϼ);(WΥ&tUu A(8ƪgeHO<
+_ޣbD3mDyWk 2F9cd`z(E.5}pbJϨ_NyHRa!`9ckV{bJ]&x#,JBWmU$c' &XY^A4b(Kt2`c6#Nq,0۝AsJbK0sQ:}uI k`J9P5!GDV?5ϜVWc_U i 
+Ź˂U,LYfq05 \۲<dƛ40B(sbV T=\b;<
+;fYǼx| Ǽ eD`) T3z31P7LbW\,H(jNsvyfb.;ѯ(~'J{%əXi
+?cN߯u`tuBʙEj6,,oYjD-;Gu{㫡+w2UaEYYu=&y ,dv l_t׏vj/ݙ&?I=maFjJ1We6h1"
+~px {T,
+sMٲ*+jk{ pH]q'q>Gi)qXh6,mY@ NRTV4¨nc-1*NMQ(@loD@,+;S⡹yBG43M@F4q8]3
+HT=.W EV: Y?ؐFpwXpu-KH =6B&oPj)lo+(s=-GAqʢ}f4)reg4l%$$\h#
+
+tuTv ]@L rФr.aYüCO3P .X'jj('Gd<_670eU䊱yY0݆fZS`Nya/k{?39 Q\)WQ9 9;\'_ ۯenO9fW*c'P!D{^u^􀞭 C˲!PnJѷS
+6zAR.}菌^ƽ 2U}pwrO* 2I?4
+ @0qGV)gHdnfJ99ZԴ㬱8q;z3lt|i΢y
+
+:v2_U̞is@S ؿO2Ve)epj;P{\ =<hga8IG -ĉ $녔=pp<L<
+(gZkϨn+p)3Dk)ئ
+.w<m˾QduŎr'f |a}|7<'_
+E&@VH#ⰧCoY.<~Ory'xfH%wuv.T:7F/Ő.8*vd/U thF 6]ʶ삊6.e7м)q2^)5ʁ]˔0#Bt%wޡ|R,%:dpL-N2\Z.'9~0iK. 2GW;VY Ǝ;4h|ʂ8kǞWoq:72(TVKM8UGz .5-\*αBRi'-ld֡\jDihE<zCKyY"kc󅼎gx,պr C pFAC\ƚlӹ9¼t
+7C׵ ė΅~U
+/ _0TТx]ģixN<|$+whJBˇ)ijHkP&
+qv#E;~"0Zʆ޲{K<Pk|ezu1&BZ':DwpG, ;Hw
+qVaČ54jCcA#8+ \$Ka?b(-*G
+]=&.85›Z[D_Fr5"!1u+4~
+Ȭ!me^itEvIAe1jy^H uVPUM<8ǐ-ti7
+XS(B:
+#t^V1&';KE `=8XɂtE|
+lA"ux2^uc95[]@koX\`D:df5RGUlcDNc +
+~gmj x (Yb9F=}Vo YãFE>F79cߴ$n!EX)f_;d8 4
+Q7$9 ү |•~ЗdERMpbФZnk>t s љQ.
+֔w eYti 5ђceVμr܋ܑZ h kSQH3|64ݒl{xT+"H`擮FѨ:tq@RN/Uwkd`v՗9Ǩ ΤzA8 dRU 6l0};VRF_@:I25Gmԁ}0b V
+Fa-ziQ*TW
+vwnH@ȖlgJƶA3ଐxpn9P;R-l/yix4Da;%"nP)T,¨N8%PL9ZX)amXk0S1n#ϻg2ޢlo(s5P A֊_b
+Zijdȁ|Ȟ"Ohś4@f0G5Q=Đ2"M0~2h$lư.{=N1*i旄w&mNneHW%=1V0CP;R%:g1TjӺ8Z{`P9tHME AeԼ5BV9(TvGAb_tO7P
+X `t&H܅@oz݄'nB0Cî 4zfsu/M3KLP 6Fiy43wC8XQ@v' 0&Nb-Fx %R
+,mH͒4,ơvP
+ViEp fзJK׈ jd2h+*1h E`d1;(
+!L "'v8+]"ʐ2HfT::l$X.@w;e7 r h٢&wC%'3Y}D|I8>DKK
+!-,:iED;3:mV!zZ{8ue^&h膦P,C$-!gBĭJٌdqX"ul`4ǫ;
+n~4S@S'(u<=ZCLܪ6=4 $CJ;^4s2;[K唫H$U 'b/kp
+tw3R$,kFvsnOJby{"h
+P@Ԫ=yX)Cq: ^#^jCt|I
+ՎmЃhנ}%*cdO,v|2݀v5Փ<۟qg>浅ik8bP]zUp7C!5km?Wh>;Akج7a4rGFl*׽F>jtIHĉb*0و+[@hnD!E;E#.?`8,S@]#l
+ː,t%+hSʨ[{WQI+mdVըt{{! >4~[*FzvyP *;8
+ )1; HUoq(4$ 맿ط5MH܍$F_τGi<ӃHc^6͈4AA^۪'1$=!mE>A/yA+" jd0xqہFe\h"7pUwM'Wѳg//]cD|(eY4 I] ǢهYΤ&]?vw(i-xCMcK[F)JD:|iE`*Dv9ީAeb}wIl'9먐bXi뷤qxRO'3KstJ.&{8,NJ  B+ {Xq2%B&'"xtT>׏:ըlu^>5iGΥ,%M5Z-i9;$nw Y4/cçFB1d^k0oh05<n4H#~GljMg{xmxq. -l
+Q=,`%ibgr꣛p{ %?5L0*s+َ#QA$+@Bp(-<~Q,
+}r͏0 Grb"&2t?GpI9m Ԕ ^l;&QM =t`
+yڂ `
+bǡu]σ֭)M݃E$=M~I
+
+&C#YWQxvT"j8͘^[²mrtblTr\m d4F=Ѥם@VKl`̵ 1.#M*X/i,x K) N :&]M0uO\6I_U0i SG&9īKFKK2.X%B& @B0gXbNW Xeęco
+ &:f`9Tu%,NtMUNFז
+*#$תP@ TOVZekt@#
+{ӂUxa \Z{2Vh mv5,yAaE>E,3/񝝉+sFlqOδ@Qi{jNp!U0HsqJ֖]hPqѰ.#%Aw-o%3_iqp0;60$ܱ%mi0 PC8WGr{Ɋ_/la8dh gA*JT`o[zsWLގaT ["Q+˹GkSktWpf06/Uxz͔V{;b—
+悱@W|"R=[c%8ac^Y +y
+K..w qg@M,kg0cIqY;:rHXSfE*քDA3Q`oD{)Am12Sޠ8[W:_W}fs ~$hTah Zm
+I6pv*PFe8 d1
+7Jh:O'gn1k4}h)˵ҧ3mXs6/rfRG~""(#Sؓ ,7! s( $+Å̃~;z6^
+pFV(t'ƁS
+ؖ,vкּq h*Hه09F0\8ۻi<[( Tc5ꃳ;q 59hWj!3ܸQ#J v
+Ya##:0u?)axni :UCt.m'=(ᷪ/6*?6@Gޤsz6jĞXYhGΫ;
+1o#&w/l]& p!1W
+hF4§jqhإI  v|
+M5i S*Ů|0P5f}ao`!Qdo78iv܄ GgNӸ|
+N)vLkIn! =Y I6cNAN2:pmS, !C8˻dT~ a GӀHSr_;b $XA9dнWr7-clzYS{1Q&䊺ḃ|"\S5g?ocWtvߦ4e^=pɩV46`fNˁn0MHF6&*;
+s7({Xڈ-NjkW08$p }*>D¬!')7HOJ3tQd$Lkctwgessn:.u3xED v
+pW>P0m'qVa~%)g(͠wQB`# RLT:$#&/b;0í* E2-~M
+S/tԍ3"ObGX:[$kw-M#GVAyWkm VC=_VA7⬑JXP`8M1_ p6kXq3Fv]䘀Y =8sW^'fb顄YXXfۓ"}1.QFb2ҵwLHqі^ԞWUypcg
+bQ=ĝKk{\<c|@_a4SkCeQj\t X:IoJp62'禴 򂘴.lGpA
+{eu\r&""
+J811JM٠j05{Zm~={y_ݑb+d5niw~񭨫|~fշ>YϞշSN1j3kY4KZЊzSoϴm[6_TX+Oy{˴S6u{қ?xUkFNo7leC2j+$F{Ah>$5M$37_K}k^`٠Sأ6q_a\k՚=kҹ(]n,~|R֯$$Z#&rEeE{_2(Suޕ[f/oB{Bkv_r<|bcѴ؋@V<kUrZK|.
+0}Kka6_S׊H5/_c/zff_HJ~Lk^~vvRxS
+Tl&T_PZ/?4,myϜ;D(?w7˧n3dmv6a4 G^&/vFե .}ZJ.y9x Sb/4J4g4d+EF[iGhBC*$C[鳕>u3{WgvIkڀ5G^sb/6b#ۊ1&6ί)6MZ]^tA nY87B Vˮ kumwmT6PUBjuCՒ2Gr ]'Zk͖,hg?
+v p$nvڽ=êo`/c0'(3XRu _]9Zl*;Zҟu_羬n_m} xF"[`O էD}"O!
+!K1Z0X-'De/'Fe ُWKȫ%<^-!cj ZB^-!yT&gsǯ/=oU4Vaܐ4vMo4*]]o@ZnPW/]UޫnGlWO_(W*țՁjO>m\ik*J"'
+O9(^';N8fhHB*;N*Dp[3DWy_6tX<]%VI3+i?ybԓWM]KJeYciy' ӉO+rqԈR:BjEv`uwΰ"?~w33~i_O{q -54)!w_S4l;~;|wu8%ruw
+og͵q8+v_[<sUۖ7BUh
+͖܁n+V͝Uh6E"_l*4[fl-Oؿk
+V$5䪾%f(Џ㴬9
+6ɲ0VII {WI[4V흭Gk~V~{=A{})
+v)┻Z55֠ZibrM/VҨ9V1'ԧm ~pyhSCKf300HMw~Bb3S]*jM5^Z }0oE>| F?)ޑU(yrY25_qYmVN뿲Fn(}mo͐56cfA7O^\
+]7B>{^| 5o"UķV/*[>WWVWDca$M)^+Y]xa#K냶p6fJ#nVl'h9- 2"A?[hhzAX۵[@ m}Um!ڶK/z<68CGno>+W9D|H/O.;6;W2kkKCǑ
+)[&
+?hc'֭MnW}:X_eV ,#lȔr/8
+mWD)DD@6?vC[_5N)76CMX볦s/~Ɩ+sMD~&=/]}bj…D yXSgTM Ɨ5!
+qjP8A**AH<vig5(,gi=Z(mb5hɀ?d?= jPU{e0Fں8U,8EBpjy^scyW/n7 $7z 2ɑ*ѻ<//}1,m%[L9JaD9K &9X1JiRt/P5j,`nt3:
+n t} wzMv 7]/zGUeT總+G uU"|H) ,Ys@T]V r2H0/
+RIZ- k2aG
+%ޠ0)e p S C@RJj@b#a#H
+Z+8iXbnGs
+ 'x%M3,vC{gh`)Hf?6z<ĥ ,0,`8`EIT9*
+((Ұq(apڨ Tcf4,
+ ]U~
+
+PK"P[h|*Wq^3A,Y
+Q"2AB(Pi*b-Ȍ BNҍ)q
+!2TeV&3c~sȏ[ƠJBUQA uE4L'=Ls&`e < 5pTT X捇~⬦@|Y\Lˍs .5jI4qFoa C QBǖXF:/Y"ByY"/,XX4/.M߿VK~K
+G2bX' bu
+T%sF$.ь
+i` o篨Edk.IV &YhQ:0"ƜE93AAYiN2>hWTR%Daq%'/IJp@
+Lja,
+6z;$2u\$7B=0P"I&'DgS&tr?DD\CfebX0x mR @{YõUȣ%i
+@*>L(+
+UEњaQa2Pf
+uALa$]1f ގ`C]v0/O௧51AILVXQ?*+<R$AD.$ScI!E}(ұHc,HŀDv(t{!oH<@%Zȴ)O6xf$*ha4 m! Ha%X\^Y !?g. gcE! Pw&Mk+,StѨEባ+Q
+Y*XUP'Dd1) `PY
+<IZZs0[D0'脀2
+?H`C`=0 =tFyt0%T쬦Q *̦Ai~D#gI퀀H]L//_M4Jw2EYVT\mS=8.>WDZot Ÿ9
+Z")a\2x*U)bI
+< X_0@
+r4ʬpׁQ$cЂ2!,QE )XRBf7 ".0XoVAg
+U$X=~0
+ܰPC
+&T5Q@xLl9&Q/)SA,M@gHmZERQ!@R%1
+MICU S$@fXJ D0T ,2"Ƒ< O
+p}1 q3@)<c*<֙$;Rǖ!RI^EM$.00u x@]b0Ԥ "
+*8b >`08ġ3i/\1 ?Y|E_ fq/YT`ɺK?P%t@JAx2Ǥ ٯǩdɫqwA"k)|,Izc %,k3pFV&4pQ*L@p*dĹ
+*JSU
+*@ꈸATO7a  R&Q]nXy=t0\2Q8ƖD@
+
+ pDFCe%0G_2>?ܩ r,-hk6+d󘀛JG4(HQGh`fl3z,%#SH|(2] Y'VŠ
+H@X0mF n58$Ȁ%aDւO~2bo ķM1K 9wsZˠX0Ra|gVc^K( ^ŦN3p V?Ls`
+P"~<CC #!]\PSvNZ[1'vr_vEObxU-ɎQܰq]
+ tVz9e pua^~hn4e: hu
+/ݑ,9MIw'NUOZZ͘OTEghFM;u
+=JRp@ZRj5V3=?8#
+rwR-Z/-4Z&3׎-^A fpߑq@>dcKP '՚P].?$gf!ӞԷ`D}Vi[2j ׉`QG&dZ9yox8m
+3#݀S~@8+rG$6=B58C9BQYT)SsϙF7/
+ǚ6;PA
+HrxF=04f@ӈ ;ŋV ^ fVH_`7U1KSA%B-CjJ2UZ&JĭHL (1u.ϊFby0TEeȬA͛)_ e%Kn%B! V<A0ad7az`[y\$D0X<ŎOr* OBߔ ԝp',]p3m!mzHZ)@ kUĴ9rY@ 9V֔.d++OT1)Mi%ݑo;BI=~&tFF㋏$p0,q]06Z8Ȝ# Z}qֺ3ubQ[ܓY_z1`љjB-fpOi΢0N2+Iw,ՒRhlc|00 L8t$r
+
+IB%-BDmݡ;!M5.L 1`?e
+0
+)
+z`$Djlѐ c#Y1"?n ($NΎ,c<ܢ2`t,S{H 1`L$"NLD~<V\@m ."$b`F ׁ-K 0$8BFM4DjGÎ ;0"/XI0cfm>[\%C_a`c7[tiŏ4I&ff=.u|OQu3dIz_+_`
+|Nem?`
+ڞeaE<K41Y w{)zv3Ae h/Lt-aϮ!˰rzNVlk?RYfFX} ڭfBor'teI"+Y~fȖD$K"$_w%N }&D. c&>$Vo?.@K*g{5$^6*!msNf?)~[Gn&XM#`S ?$-1VY֑=RjZ0H<tZ2*# :$jMV::و|DEwiuM]ǵ_Z/W>Í"Z9'?>:0T)v7Khv,mq~!F/'Ȟp0+Ʊ3c"|X c_zw\Y7!Ù3h30Z:aGX%*77,
+bϴrvaDIѠӃiw;t3wԤN0 :Df1c&$H cEU9UGr
+VI'UFz-5s~^lJfMg.8;jXvZCXU<s^OkUֻR~jhN5v<2mYKShU
+@TB 5δ7Ufv)-Y2⌅u #)Xfe-zu4TߠN E՚9~D~;wRqڍ +9{-Ȍ5nK'9vlL/MˀO&Bjb}%?f`k٤|S N@5j uZMgDQG+2Ѵ#:跇]
+S)j'uن
+c}Noi}i5\|P7[ kM<.&t6K3hd|QgZ`dq7Lw.O[pڢ׌qwFiZő2x9ݪ;pcDO 8V-L<UMM紿3kqpoG 
+͗sh<櫠3AoZ%Nq;=Ui!M zXlԕH {q#]}kpN`Ut$$C*xZ66ж6m;@BEQceо!:'XA[ WFZ:
+F/`FinL0(GCsJ"e0<~n78ys[蹾*ge13j*]B1<v 7 =L;?qAjާf"?kVwkM\2DiaۡY\uм&7<$AyYp\hcZwYV=wN2)"ApYBXV:לd$?8IQǵ]KPPyKi ]!X#v%c*t6d":h-3Ql0nhv\ A3%̱XW#YtHUJ]#Z^?z^ j/$5JMKG8!]@5xh0YÎaBl\W`CY;->rM2ciNy=閺ZhY\@,a3~䬡t8q#ˤM9R:7TYbJĩF#8i$)s=VCjZ_!6`>GiV{ v3)ӊQKә؋nOdPJtb;ƹ!]Fv3ZK=~W2wjjwp:6]NصQd0t/,<wg>*?Uเ\a,x6^\?asL3D~x%t?3r?gT;uaᨒ}+Óo<6<oa%塧~9Nk$eM;Ÿ4Kc\%? .*@&T]:d!ϸR ON Ϳ<dlZ{݇Dyȓ8τdu;\"͟q]}ލHq"w\T~s><7b1y[{ZhyҸ]Hg )P| hn<Cqfud^MrL%v;P {^6bxgbhnX}y,45|Z/mߣve
+I:)^k{G)y?(i\w'N~+jFsۑVV)<rq?/bI/jPwIA]|C"]JoybH5DOAwze>-Y]}Bp]ȧhncI|e$Y*+Q<ҹNxcNNtޜč
+] 4
+ȴ`\֓yXܷ|U61gU[o5yE9no $|n9dԽ/ W>.^Y9v? vq7;KZ zO=_qx@߷dik+v )둔eE*4 ]ېIV}س[z˥n{KжenQG9~?tN"o;TN?ɪzW}] on.vwS.'謃;٭kI⇩P" Of17aÑ[-aMy{VɷwU{/'{c><%
+O'[3NqݧL4{ݎFv2;oFr^3Rj;QS=khtWTnѷM bŠ;0st5O<xǣ~<˅3q&L<TY._KƔ-_Mֶw͛^*SUSz*U{]ޡPӾsS<;|Gz?Jdjrը'z(oa7Ώu8>Woww|}
+?*ݻӽ.9mFNog>y}_W5-rJ<*%oDy3RL2v=YrU͝M</<PRmEFz<edMVv.Wǹ}*wsY=g|+p>+rjx=^"W|~->gF kh|usx\7~V:zzJx]OWNwjn>۾o&}lpWJυG^ 'Spc:-<]]N,h9/?䭫U%em҃x>?zDoH6 ًB2-\VᲨ<\}(OZIڮ.LԼ~1#ٽވ.{_9>]6^*^Y/Zjvy]mԻݚ .vjS>ߤl1{7:^]h׉\uF8y4t6p|RǭMJnޖӮɸ;kwyޕ}&N>w#˖|ys<3r7 r3n)6v:/թ4fUrpmދo w19\7S(:\?*ncMh.xͶGgv[2H}j2 9jR\IDҊVqAJss$sl]
+NiBoQ9u[lW ;tܱ5f;55gncCf2@NɇJ=?^wZJzwޒTjEP5ЮOU[gbSZzEVR6E6|epV'V?zs*F[nrVi+D6q Ua$DhMj}sp"ᇕ
+h!mzwl5qQܕcP϶:dma#׵\*.Ԇ+ܵ`2$_%JzSߖk
+.XG#Ljks܎ */GÚ lѰ́J90Z63*v9*}"FNg^*f =DPŲabFtJk+@|i e;DԬl!+#C,{!
+fo3n@,=lVw+-qʹ݌״`o]:JJp{yr*ɝ)V K%*z$܊;HYDBήY]F‚`p25iƓ)Ϯ|O=ńv>Eӹ~տ/~{klެye0uY-|<xzOp=ĶgkBKf(?ȸw[U|ώu#QdO#܋?W+X@y[V+ <_L o*QᏝoU*POOtdnmu|\5<q=m#HʯyS$*n6{gW=ǽk 7<Sڭw4_lc 9ۤܝz"t}VKAr?|]z
+'~K[nFh!cu0XtʰOĎH9]EϤRe\i<Sa)|<Wwǥuo~rKT~n¡3!_&&@
+>H0OX N%;<9W㔵N9sba%wB)o$e{ηC\zʻūe=? F
+pF KC# T @Wɞ*^]F{frG뱾]vA5%j]?y4̾gAKjZe$p4)_J%{οXT2!1)&
+']oA;[Ԍ5Zhz]ts.&4{ڈI*Ֆ>"*Ղ#S
+ ݞ~79?˃ rFҁXuaAs
+Yl2zwbdC*'#y,t+a bBřO[tbG1acslj$0|ރ(Œۑ(@]@|]juL^|*bG…V¿[j`7<8
+$[Ǧ9ƙܧ5;rI b1H~QqZ
+-^8r˳*s}]=cKtNKRS68Iď M͞n;FNs-vyWS
+#w*};*ѭu>‰nWdFDN%GIr-2WE겘R7oaߗ߇ŃL0M.A"xY
+3bKT+n, =ʝ7S՟_MR낕GAKlRɰosxkfi~pߣbjD9߅`)7-=zRΓHO UjV|s :2&bZ}1X&=:DsްPʛ.`p:61TGoy} ݀WtͰ1z$q[etੴc"۾dT \`G!).?&RdQlȁo6r,speQ'G]x{b*g~,i~ù=|g VRTLxλYyD. w;?PS!GI(a,dJ o P_\Sk
+D
+y3&n|V|r"?OĠ{H9D;PwjݰКR/ tԈȷdT9q;Uw7:{xDBb1 D_hG뵙Pyw'Uo{+ci1\&LY5v.Ts|i1J$%t8 $|f(jYG!̙,\/x/8{9j1^*IWO׊|?WJ.\89 œKiH
+NpEuN!ތ)a6ݺ'<;֙PU콜<P3+=xI[ISTơ~&S'zg ^Dv%
+P5 jb0zKy&#ک)`޼KY"_oDu^ w,9QBf8تw'6j աC1<$8Sb4sr˥;7҅ no$<ڮ%oWpw3JW7CÜ?;ɢcg>_Mn/Of/6;nekەh>ےO=\l큼v{ڝh~HX6QE)Ff3ţ;=)0/<4 5?d!Gql{tJ$amfHUSgJ9ݤm8W8vxf/ϡtRڽ*
+~.aS#t)BAT]MU:u^N3;B1s6X2rfm酡oe?tnɼ$r((7y؀wAOg=spO ;Tzfvz=ӝ=h}\h5hYAŪWۼKT=\e6Գq_upeRJV׷wL| Jv=t7AdPBr|No8ozVwCB{N1hvssbPQltF8} $9A<78װꗳכAa^Yi>=pwǤT|栮TE^lrYBܜzzJ}[g՘ك2M+ߑA<A  {yؠaT8ĠkHoKZa$>k *z)Ѡ lI%"M~ߍu/g mzxf֠
+|09ް0gΟsSխlԲę5{n+ڞ/~S_A֯Ar@h盷dPXW)LϮUwPnl:Z^V(AW5"Gy kV=
+tIܘ (꧲MOyrAQa'ۻwT >l]ϳI4W wwsThclO|;f=}7ۜb`ҰO5C>^!ޟOÞS6{|jH7OWEbW{~zw}63~eNuQmg(vt~jf|zRO/ 6BI.˱>K{kޜ|.)l6YO]N3Vz̧ҸȦJ^,2]0my4xZ9,YOTvo:+seTXCx(^4,sSxŧ;ھVYlO>=&}OϬga>~ިƻ_5_\*.X=8!oD6HD}x/{u|
+;7QpW4f|?+O16~E9sP8Dŀ=]+tw;r
+ XWZ0h3
+_|5f9()AQ}âMq՞iO>YQn?|+oj_WӝOYb|bi!ѽ)!u=OR.S\QYz8uI_,:=Hfwb\4AqݶpdUMa @L`{
+x= }'":W̮r<nkn&g|;)gu.S>`ܜ[깹MX~SV=W-ꑙ'Ǻ˵Δ}'vW-a,3SmUv{8fL͒J ]xyO18yp+ԝ)+:f%*)YUo6em(aw;C/ߔ`rM6U?b́G$>>* 6x8u;y; ݓ6EK?{9!V*xClNwCl Xycgϙg^d-ߝЙ-vE. 6%ǷUޒNƫz^A<8lF`\|3\!v&S?tz:X[1uYo͇Ǥ) :{r/?Ұ};^4,_grr9Rՙ@I:/;kuv$YתKM~kan8:_`>0geІS>Fy p^L*WO&94;]LlAO<9uƧxǶ Rgq˱apðP
+Mh/0&-GI{&B}
+zb"ONKF hç5VA 6L`Zّ+$Ĉ
+-Q|e^*
+%0wS5֟A p'yXE_ęnX EG,G/Iu\_Cp8_$* g DH<)<d~0:K o8^Rp*?cyDDn ^TF'Wҽcr,U FqqGo" >Sz'hJN0AS: =FSo|A^:ҋb%</#D?7kABQQA9acQDze:.ڲt-UE \0S<܀Ԓż|zv)Ho Rςo_B+NR]>rdrⴟH{qI['''!2Q~Hjoq65L2 r4WC;js| #rNsc~~NF4%hf+F;r5&kg ;]9R9@iIJ$hC OzϽ~"AՒũ
+aր:򠽩pE[3Ƕ X|[b!Nˬr&4LBgDJ6W`o?>O|v-pa3홽8
+P2l,X5= a}.!Τ=Lz;?HF< ixȾbg˯0)<5|a?i{O/Y8)F zqWF?aYH4Ww^dh:{XY<^`-ʑ};=MWlGߵk$`/k\r=m
+C7yOa]
+\q$P}'
+B^I6fɛRǫf&oB& N=O1`7V%Łit-[A|i
+|HaW͝|YDN/J{'P&'0޷b{l8t8|1>aQ2VDy, ,݁O㻋ÿLVlhmJ߁/.<M&d_x[3txq|F? YfѾ`!StXSR,&ʿHWD1WZ==_t.և l١ﰛ~x2/˸DFMtw9=q{5
+V >H;t-ğ/I.q2"C҈Jc8qCl9RdAѯ< Wv`*ArOfk;!b
+7zOh=_
+}
+.$ PvezUQ']U7F--]\E
+'Î<wxpsWw|Np!ǃ+X56S9jWr}Vy7Vkj}|Q?e+bK0Jlܙ7e/?m~g| >M,rvv{3ڇQο[֠7vfLϠA,lenӦS0
+o*\=*]=B mKZlԨ1Ǖ[[ykv>P FMu8ɋEL*rj=fYI.H;U8KQE.W$cА䝐 O1E Wlw}Wg$.c"b^w-@M7Z&).kqf|?LJ4]XL0(/taXQl4]X,>}4,̆,.7DN 8gefh0,Mۓ
+F}~ju^Hx,; X˪k޳{+ vI!cc0[e=< #elר;)]D ߠYw{L)Λ[]mdUSܲP5+R[ -ժi/0]# C o"@|
+w6Un1 \1jd)f4]&bD|≜Jy0ă]TWq[X{9,X ś99C֦ XD>iG/
+C'{g9'<@LLryIa &oVDuH gK1ײq˜x@LŅ'9x`LENݮ}a˜fK\HݑT򀘊 A{T4uk'F S Û0egDFV1_VKTmej3}z|5UrncLW|:08PW79
+jEp#6lo݅X4'zBsrpqSSgڧ8ޤ zb'o{i;+ &v*Wf?7_'`x4 ML?,%sPXxSfUL1-Yu%*yCE}ʭ#(Pkؠ8Xsû bݘe M "#LjA;{aoF UGp=hua'yd0g|Ony
+Gُ{Lšϔ$khlDĉ$U-lYI^b#$lH*攐ٓj@M*nLeHR3js*
+_:QXk7%U}+[ڄPI(=WP1f:@nf52*: 6bXE3))[O'6KFgCp0Т؈(@^ {HX
+H#
+#
+f.ujue
+EL&#N7Ĺƿۺ*\~ԘqIGK5g x3kO6aˠ2>^Vq+ڽhOsVeĮ)9:3Q3kv4 woՊ4PNU h#F4߾r}EV*ބ٦Kw v>ӬO>-9`kM{#\am9鱼nF\6>;ɞJnH ng0ʷiq avuߝ
+Z>]]IWI[wA!]X[Oz!'nB?]l\f {NņtUW ٘]61ax|D&]fCi͙Ͻ,WKV?=Hއ}?+CQ9xf| vf`z"
+Nid_Ҳ [zN^1iØ2o%x݁ Kmsrg}5|?%oѠ^/rr|\QP=|^w4%SHqS
+}/kO';G>[SEh򥥬?
+׾=7s >"i@eF~MCUBV^pd}zK=4
+Σ=g<ys"LgZKYm Y^y
+NrBCw"ioIX}٫/k ) ȴ/ww?n/Dk'X%O6`zXIC^oUp< ܔ4D1ŰA@ax2wG>1#e{EPA^H(܍<9?Cp埇{'f(k"aMyZ^$5URKzT Kyx@}o}S>u$ó@!Q$@CUZ{^ٽX Rxùd4幻d?VZϕ?u yJ:.yjB>5o9ߓg8n߯^[w3'tl)V b"%C/T{}5Qʺ
+5o:[ϨۺU79F(5rex%[EB0^4FW\HD
+My>=+BzpJ|;?h%Hbz*['"1氳
+E҈4 &x҈H&2J#Js9
+Y9$2K#IDb٧];:N\eFLciDv*4⨉diDo*4;)m14bU_H#k+OVM"JǤ98'/]U[s/фiqD7h_8EĈo@_#QD' qD7[q qD?J߉#Q\nm~'FsGt$ KqD
+t}ԱhpF
+1/T$\th*#ЯܻW!Yi6pؖm[%zZ3Vw])
+ ZhQ^:ް^GGV01yWzI7
+;` ;G%/ZΣۮYѺe;XvJs$ى-rL^\
+=vc 4]5IeO{x PUX ᱬchEKkIVfXU @5CץHa6&j@iȚDLA&]
+0 LѨ Eb4mhTj! \|?VWW?oV"]k2T3%
+,V;)5ԑk(I24{35wU#ärMB
+.n Gi_ȢP%]%_EKبٜ(*&lt!H)0$J%m,"Y[E
+U:[p.j7J&("چL m@&;s%%& F
+2Xj[h5 Ap ? /
+r
+Z
+ " 4_j"QF&Z쳬¶:p:,DIe
+jrX jj؈46`8橊25S31FM)PaO& P`
+:*@#
+؟Vm0*v#ln&Cӡ7-t+@-U
+=QqT4hhd#Lڛ v $Pɔk!
+0Tkz (`;T5EF VP-P#+VoFQye xhDK
+B:g'&33A NCס!m2-ImU 3FDjDH"?QXD HoM0u4_lF:,K YhV4>bw#J \13
+?m2\Q@
+lRUMz5ɲ$6F$!rѴWlD GY|IB2Ӧa7JHX}|Ӑ$kJ蓼ZhÑB]C8t,h k"uVB VEu7i#!ը;լ8bo6ZL(NRr
+;0<cQt4@HګyqFŮգ&F\ bj5I ct(S<ĐmDҰ `BA%]"xr&*ۨGUBH,WHzE=ߡTjET(YN64Ih`ImTlvD)DI"ɚ
+7X[nֱLOEd 4:z9h(UpVE{dlD{VzCM$U'ҨvDdJt%氈.(Ċ{ +yebH:D\Q 5eUѬdf$Y. `Nvkn;h5Zԕ> -n7 x*lP =.ڄ.҆8F.m#,$C ;M
+fXI2>`xP[-4^DWI<0
+0000000016 00000 n
+0000000144 00000 n
+0000040300 00000 n
+0000000000 00000 f
+0000044353 00000 n
+0000330776 00000 n
+0000040351 00000 n
+0000040716 00000 n
+0000047335 00000 n
+0000044652 00000 n
+0000044539 00000 n
+0000043305 00000 n
+0000043792 00000 n
+0000043840 00000 n
+0000044423 00000 n
+0000044454 00000 n
+0000044687 00000 n
+0000047408 00000 n
+0000047648 00000 n
+0000048680 00000 n
+0000068705 00000 n
+0000134293 00000 n
+0000199881 00000 n
+0000265469 00000 n
+0000330799 00000 n
+trailer <</Size 26/Root 1 0 R/Info 25 0 R/ID[<F229790500A942A19DDCD76A6B0456E6><31B889EA550A45928BDB51B1C340EEF5>]>> startxref 330985 %%EOF \ No newline at end of file
diff --git a/docs/html/images/brand/Google_Play_Store.ai b/docs/html/images/brand/Google_Play_Store.ai
new file mode 100644
index 0000000..51f07c6
--- /dev/null
+++ b/docs/html/images/brand/Google_Play_Store.ai
@@ -0,0 +1,1419 @@
+%PDF-1.5 %
+1 0 obj <</Metadata 2 0 R/OCProperties<</D<</ON[5 0 R]/Order 6 0 R/RBGroups[]>>/OCGs[5 0 R]>>/Pages 3 0 R/Type/Catalog>> endobj 2 0 obj <</Length 44072/Subtype/XML/Type/Metadata>>stream
+<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
+<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 5.0-c060 61.134777, 2010/02/12-17:32:00 ">
+ <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
+ <rdf:Description rdf:about=""
+ xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <dc:format>application/pdf</dc:format>
+ <dc:title>
+ <rdf:Alt>
+ <rdf:li xml:lang="x-default">ggp_googleplay_apps1</rdf:li>
+ </rdf:Alt>
+ </dc:title>
+ </rdf:Description>
+ <rdf:Description rdf:about=""
+ xmlns:xmp="http://ns.adobe.com/xap/1.0/"
+ xmlns:xmpGImg="http://ns.adobe.com/xap/1.0/g/img/">
+ <xmp:CreatorTool>Adobe Illustrator CS5</xmp:CreatorTool>
+ <xmp:CreateDate>2012-06-25T18:52:36-07:00</xmp:CreateDate>
+ <xmp:ModifyDate>2012-06-25T18:52:36-07:00</xmp:ModifyDate>
+ <xmp:MetadataDate>2012-06-25T18:52:36-07:00</xmp:MetadataDate>
+ <xmp:Thumbnails>
+ <rdf:Alt>
+ <rdf:li rdf:parseType="Resource">
+ <xmpGImg:width>256</xmpGImg:width>
+ <xmpGImg:height>248</xmpGImg:height>
+ <xmpGImg:format>JPEG</xmpGImg:format>
+ <xmpGImg:image>/9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA&#xA;AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK&#xA;DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f&#xA;Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgA+AEAAwER&#xA;AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA&#xA;AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB&#xA;UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE&#xA;1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ&#xA;qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy&#xA;obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp&#xA;0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo&#xA;+DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FXYq7FXYq7&#xA;FXYq7FXYq7FXYqptOoNB8TeA3OKredy32YwB4sf6VxV3+meEf3n+mKurdjqEPyJ/iMVd60i/bjIH&#xA;iN/1YqvSVHFQcVX4q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FVO&#xA;WZYxvUnsBuTiqz0XloZSVX+QdfpIxVWREQURQo8BiqjcX9lbU+sXEcRPQOwUn5AnFUG/mXRENDc1&#xA;P+SkjD71U4qqR69o8gqLuNf9c+n/AMT44qjIpoZkDxOsiHoyEMPvGKtS20MhqRR/512OKqRaW3qX&#xA;q8f8w6j5jFVdHV1BU1BxVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdiqjP&#xA;cBKKu7t9le5xVbEvE83PKQ9T2HsMVQeoa7BasYo1a4uu0Mfb/Wb9nFUIIta1Chnka2hO/pQkp97D&#xA;4jiqtbeWNNiFfSBYmpJJqcVRg0iwAoIhiq19E09xvEMVQcnlizVvUtw0Mo6PGzK33gjFVpl1ywr/&#xA;AMfkKj7L7PQDs4H664qjrHVre8FF5RzD7UMg4uP6j3GKr3V4nEkJ+D9uL+K/0xVEQzxypyQgj2xV&#xA;UxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxVSuJhFGW6mmwxVBo2/N/7w9fYeAxV&#xA;KrvV57u7bTtNajRtxurkCoQ90T/K8T2+fRVM9M0WC0Sv2nO7MepOKpmAAKDFXYq7FXYq7FXEAihx&#xA;VLNR0dJyskbGOZN0ddiDiqHs9Rk9U2t3RblSQrAUDgdx7+IxVEeqIJDKo+Bj+8Udv8r+uKpkjh1D&#xA;DoRXFW8VdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdiqU3dzzuWAPwx7U9yMVY75r1+ey&#xA;torOyNdSv2EVsB1XkaF/xoPfCFZH5f0SDTNPhgUAug+Nz1ZjuWPuTgVNcVdirsVdirsVdirsVdiq&#xA;T+YdMe4spHtqJdx/HBIKVDqar+PXFUv0fWI9T02K6A4s44zR/wArrs6/fhVN9MuACYCSeI+GvhgV&#xA;McVdirsVdirsVdirsVdirsVdiriaDFUO1w+5UKVBoSSBv9OKtC6b/I/4Nf64q0btgein35r/AFxV&#xA;31x/5V/4NP64q764/wDKv/Bp/XFXfXH/AJV/4NP64qslvZAhoq1/10/5qxVJHnYuS1AxPxU33+Yw&#xA;qxqy0jWrvztDql5bUsIGb0SXjpxRT6e3Ku7fFir0Nbs0+yB/sl/rgVv657L/AMEv9cVd9c9l/wCC&#xA;X+uKu+ujwH/BL/XFV/rTf76P4f1xV3rTf76P4Yq71pv99H8MVd603++j+GKtC4k/30w+jFXNKzKQ&#xA;Y2ofbFWB6VZ6lpuuatBJbSpp88pntpSpEfJjUqD06N+GFU/spZfrkbRqXFCHpuadjgVPhO9P7tvu&#xA;xVr60f8Afb/8C2Ku+tH/AH2//AtirvrR/wB9v/wLYq4XJP8Aut/+BOKrvXP8jf8AAnFWxOD1Uj5g&#xA;jFVQYq7FXYqozXCr8Kgu56Ku5xViH5gMlh5O1K4uLiOKcOt1axM1GdouJaFRX4mdFZR2Fa++IV55&#xA;FqUE0SSxOGjkUOjDoVYVBySF/wBdTxxV311PHFXfXU8cVd9dTxxVSub5RCxB3ptirO57tba0kkrR&#xA;YYy3jQKtf4YFYDZXoMCknegwqiPrqeOKu+up44q766njirvrqeOKu+up44q766njirvrqeOKu+up&#xA;44q766njirvrqeOKqum6l6es2ZB2dyhH+uCv8cCsi8zTD9EvIT/dujfewX/jbFWLi9SnXCrf11PH&#xA;FXfXU8cVd9dTxxV311fHFV/6Uk/363/BHFXonlO7tZvKw+qTi5uUk5XMaHk6NzpRl6j4RgKQyi1n&#xA;SWJSprgVWxVD3EtJo4uXH1DSo69CcVSDzNeecLdGtvLWkCZ2HxahNLCFBI/ZjZwzEeLbexwhXlet&#xA;fl7+aGryTXN9avdXUisA8lxbmla0VR6lFFT0G2SsISzyn+V35qWejx2d/pqxvbkpETc27Vj6r9l2&#xA;6dMiqc/8q3/ML/lhT/kfF/zVjau/5Vv+YX/LCn/I+L/mrG1d/wAq3/ML/lhT/kfF/wA1Y2rv+Vb/&#xA;AJhf8sKf8j4v+asbVSufy98+xR+pLZosakF29eI0A67BsbVk+omWfT7qGIVllikSMVpVmUgbn3xV&#xA;i1n+XX5gNAhWxShAp+/i/wCasbVX/wCVb/mF/wAsKf8AI+L/AJqxtXf8q3/ML/lhT/kfF/zVjau/&#xA;5Vv+YX/LCn/I+L/mrG1d/wAq3/ML/lhT/kfF/wA1Y2rv+Vb/AJhf8sKf8j4v+asbV3/Kt/zC/wCW&#xA;FP8AkfF/zVjau/5Vv+YX/LCn/I+L/mrG1d/yrf8AML/lhT/kfF/zVjau/wCVb/mF/wAsKf8AI+L/&#xA;AJqxtXf8q3/ML/lhT/kfF/zVjarV8i+eLG9tLu6tES3gmjkmcTRNRFYFtg1emNqnuu2t7qWlTWVk&#xA;oe6l4ekpIUEq6t1NB0GKpGn5cfmCVBFin/I+L/mrG1b/AOVb/mF/ywp/yPi/5qxtXf8AKt/zC/5Y&#xA;U/5Hxf8ANWNq7/lW/wCYX/LCn/I+L/mrG1d/yrf8wv8AlhT/AJHxf81Y2rv+Vb/mF/ywp/yPi/5q&#xA;xtVll+X35mafei8sbVre5UkiWO4gHU1of3m4PgclYV6b5Zn86TD0df0xbSdRUahDJCyOR/vyJXYg&#xA;nxX7hkSlklvOWZo2I5oaNTAqHvjxu7Vq0+MD79sVR+KuxV2KuxV2KuxV2KoLWRXT5h/kN+rFXmUM&#xA;9ZkFerAfjhQ9Q03/AHkj/wBUfqwJRWKuxV2KuxV2KuxV2KuxV2KuxVJ/M7BdMmJ7I36sVYPos3PV&#xA;Lda9W/UDhQ9Oi/u1+WBK7FXYq7FXYq7FXYq7FUt08lr+7JNf3hH3bYqv1ID1Lc+Esf8AxIYqj8Vd&#xA;irsVdirsVdirsVSnzVqtlpHl6/1O9JFrZwvLLShJCj7Kg03Y7D3xV49LrAt7J7+ICT0ozPGpNA3F&#xA;eYFR45JD1/ylq1vq/l6x1K3BWK5iDBT1Uj4WU/6rAjIpTjFXYq7FXYq7FXYq7FXYq7FXYqwL80/N&#xA;Y0iPT9OijEt1qkvpnkaKkIKh3+fxfCP9rCFYHf8AmlvLtq2sLALk2hVvQJ48gzBGoe1FYnCh7dpF&#xA;/b6jpVnqFsSba8gjuICRQlJUDrUfI5FKLxV2KuxV2KuxV2KuxVK9JWlxdnxmkP8Aw5xVW1OgWNia&#xA;UdTX5HFUdirsVdirsVdirsVdiqV+aNAtvMPl7UNFuWKRX8LQmQCpRiPhcCorxajUxV4Bd/lJ+baP&#xA;Hotnbxvp6cYhqL3MYg4ig5emW9biPDgflhtXvXk3y4vlvyzp+iiY3DWkdJJ225yOxeRgOwLsaDww&#xA;KnOKuxV2KuxV2KuxV2KuxV2KuxVgf5qeQbnzNbWt1YMBf2XIBDQc0eh2JI3Uj9eNq8uH5V/mDrMg&#xA;sLiN4rcnhJdXDERorfCzBW4s5Ck0oPpGG1fQek6bb6XpVlpltU29jBFbQlt24QoEWvvRcCorFXYq&#xA;7FXYq7FXYq7FUt0kHlOx7yOfvY4qqavtbFuvHenyxVHYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7&#xA;FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FUt0WphZq1qSa+NTiqrqwraP8sVRo6DFXYq7&#xA;FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYqlugj/Qk&#xA;+WKojUh/oz/LFVeEgwxkbgqKH6MVX4q7FXYq7FXYq7FXYq7FXhf5n/mT5ms/Oc2nadcva2OncEMU&#xA;Z4mVmQO7Mw+L9qg3ptXN1pNHCWKzzLzvaOsyeIYxJiB3Mh8o/mtPNbob8fW4Ds0q0WZD4MNlb8Pn&#xA;mvz6cwlRYabtecNsnqHf1ekabqun6lB61lOsqftAbMvsyncfTmMQ7/DnhkFxNovA3OxV2KuxV2Ku&#xA;xV2KuxV2KuxV2KuxV2KuxV2KuxV2KtOQEYnoATiqB0ZaWafLFVe+Fbdvliq6yINnAQagxoQf9iMV&#xA;VsVdirsVdirsVdirsVdir5m/NOOvn/WD/wAWJ/yaTOj0R/dReS7QP7+X46JFpl7cWFwJoTUHaSM9&#xA;GHgcszYo5I0XCt6Joeql1S90+ZopBseJoynurZzufHLHKi2YpGJuJos/0Xz4Txh1VN+n1mMfiyD/&#xA;AI1+7KOJ3mm7U6ZPmy+3uYLmJZoJFlibo6moyTuITEhYNhUxZOxV2KuxV2KuxV2KuxV2KuxV2Kux&#xA;V2KuxV2KqdywS3lY9FRiaewxVDaSCLRPliqteisDfLFVumf8c21/4wx/8RGKonFXYq7FXYq7FXYq&#xA;7FXYq+cPzNjr581Y/wDFif8AJpM6DRn90HkO0T+/l+OjGhFmRbg2jtLvbjT7kTQnY7SRnow8DlGf&#xA;DHJGimM6egabdW1/bLPAag7Mp6qfA5zOfFLHKpOXCpCwm2n3l7YS+paytGf2gN1b5jocpGSnIxZJ&#xA;YzcTTMNL83W89I71fQl/34N4z/FctjmB5u4wa8S2lsfsT9WVlDKQyncEbgjLnYg23irsVdirsVdi&#xA;rsVdirsVdirsVdirsVdiqhqDqlhcu32Vicn5BTiqnpv+8yfLFVa6/uW+WKrNN/459t/xiT/iIxVE&#xA;Yq7FXYq7FXYq7FXYq7FXz1+ZEdfO+qn/AIsT/k0mb3Sn92Hje0j+/l+OjHBFl9uDa8Q4LRaP0u9u&#xA;dPuRNCag7SRnow8DmPqMEcsaLOGQxNh6Dpt3bX9ss8BqDs6nqp8DnLajFLFLhk7XFITFhGrDmOZN&#xA;vCmGn6hfWJHovWPvE26n6O30ZKGcx5ORhyyhyZNYa7a3VFk/cy/ysdj8jmZj1MZeRdni1UZc9imW&#xA;ZDkuxV2KuxV2KuxV2KuxV2KuxV2KuxVC6tvpd4P+KJP+IHFXacKWyfLFVW6/uW+WKqWl1/R1vX/f&#xA;a/qxVFYq7FXYq7FXYq7FXYq7FXgn5hx1856mf8tP+Ta5utMf3YeL7TP+ES/HRj4hy63AteIcFrao&#xA;sOC0WjtLvbnT7kTQnY7SRnow8DmPqcEcseGTZizGBsPQ9Nu7a/tlngNR0ZT1U+BzktThlilwyd9h&#xA;yRyRsI0Q5jGTfwrxDkTJPCmFlqN1bUWvqRD9hu3yPbL8WslDzDk48so+5N7bV7CeYQCVVuaV9BiA&#xA;1PbxzZ4dTDJy5uzhCUocYB4e9GZkMXYq7FXYq7FXYq7FXYq7FXYqhdV/45l3/wAYX/4icVXWP+86&#xA;/LFVSf8Au2+WKqWmEGwgp/KB92KonFXYq7FXYq7FXYq7FXYq8O8+x1836kf8tP8Ak2ubfTn0B4nt&#xA;Q/4RL8dEiEOW24FqghwWi14hwWi14hwWi0fpd7c6fciaE7HaSM9GHgcxtTp45o8Mv7G7BqJYpWHo&#xA;Wm3dtf2yzwHboyHqp8DnH6nBLDLhk9Pp80cseKKNEOYpk5HCl2s6rHYp6UdGumGw7KPE4Ru7nsvs&#xA;o5zxS2xj7fIMV/ePIZWYmQnkXrvXxwmT2gEYx4QKAZPo/m6/tgsV3W6hG3I/3g+nv9OZeHtGUdpb&#xA;j7XU6rsyE94ek/YzCw1Oyvo+dtIGP7SHZh8xm3w6iGQXEuhzaeeM1IIrLml2KuxV2KuxV2KuxV2K&#xA;oTVyRpd1T/fTD7xTFVSy/uF+WKqk/wDdn5Yqh9I/450PyP8AxI4qi8VdirsVdirsVdirsVdirxjz&#xA;vHXzXqB/y1/5Nrm0wH0B4ftQ/wCET/HRJRDlluvtUEOC0WvEOC0WqCHBa2vEOC0Wj9LvbnT7kTQn&#xA;Y7SRnow8DmLqtPHNHhl/Y36bVSwy4osqufM9qbQG0Ia5cbxnrGf8ofqzkM+mlimYyfRexdH+ciMn&#xA;LH9/l+1jpDyO0khLOxqzHqTlJk9vECIobAKqRZAyYGSukWVmTWZImD1InDxsUdejKaEfdkRkMTYN&#xA;FqnRFFlmg6zcXLm3uaM4WqSAUrTsaZvOztfLJLglz73SazSxgOKPJO83DrnYq7FXYq7FXYq7FUJq&#xA;wrptyP8Ais4qq2gpCvyxVfP/AHZ+WKofSP8AjnQ/I/8AEjiqLxV2KuxV2KuxV2KuxV2KvI/OUdfM&#xA;98f8tf8AiC5sMJ9IeF7VP+Ez/HRKFhyy3XWvWHBaLVBDgtbVFhwWi16w4LRaT+Yteh0yP0YqPeuP&#xA;hXqEB/ab+AzHzZuEbc3r/Zf2Xnr5+JkuOnif9N5D9J+A35RDTdbvrK+N4rmR3P79WOzj3/hmj1EO&#xA;Pm+2x0mMYxjiOGMRQro9O0fULTU7Rbm2ao6Oh+0jfysM0uSJiaLqM8JYzRTNIspMnGMldIsrMmsy&#xA;Rtnp1zctxhQtTq3QD5nJ4cE8pqItx8ueMBuWTaVo8dlWRm5zEUqOgHtnR6Hs8YfUTcnUajVHJsOS&#xA;Y5snEdirsVdirsVdirsVQessV0y4I/lp95AxVXtf7lfliq6f+7PyxVD6R/xzofkf+JHFUXirsVdi&#xA;rsVdirsVdirsVeW+bIq+Yr0/5S/8QXM3EfSHg+1j/hM/x0CWLDk7dba9YcFraosOC0WvWHI2i0j8&#xA;z+Y4dJi9CGkl+4+FeoQH9pv4DISlT13sx7Mz18/EyenBH/ZeQ/Sflvy51LNLNK0srF5HPJ3bcknM&#xA;LI+3YMUMcBCA4Yx2ADhmHNyoploms3ek3i3Fuag7SxH7Lr4H+BzAzYxIUVzYI5Y0XsHl69g1y2Se&#xA;wBkJ2eL9pG7hvDNV4EzLhAsvK6uBwGp7MusPLaLR7s8j/vpen0n+mbfTdjjnkPwdJm15O0U6jjjj&#xA;QJGoRR0UCgzdwgIigKDr5SJNldkkOxV2KuxV2KuxV2KuxVBa3/xy7j5D/iQxVEWv9yvyxVdP/dn5&#xA;Yqh9I/450PyP/EjiqLxV2KuxV2KuxV2KuxV2KvOPM0Vdeuz/AJS/8QGZUDs8D2uf8Jn+OgS4Q4bd&#xA;ZaosOC1tesOC0Wx/zZ5og0eL6vARJqMg+FOojB/ab+AyURb1nsz7NS10/EyenBH/AGXkP0n9PLmU&#xA;s808zzTOZJZDyd2NSSchMPteDFHHAQgOGMdgA0MxJuVFXtre4uZ0gt42mnkPGOKNSzMT2AG5zEmG&#xA;0zERZNAPTvKX5KX91wuvMEhs4DQizjIMzD/LbdU/E/LGOlv6nn9b7Rxh6cI4j3nl+165o+h6To1o&#xA;LTTLVLaEUqEHxMRtV2PxMfcnMuGOMRQDyeo1WTNLiyEyKOybjuxV2KuxV2KuxV2KuxV2KuxVBa3/&#xA;AMcu4+Q/4kMVRFr/AHK/LFV0/wDdn5Yqh9I/450PyP8AxI4qi8VdirsVdirsVdirsVdirA/MEVdZ&#xA;uj/lD/iIy6J2fPu2D/hM/f8AoCBEOG3W2vEYGC0Wxvzh5ut9FhNvb0k1KQfAnURg/tv/AAGXYsRl&#xA;ueT1fs17Ny10/EybYB/svIfpP6eXKZp5riZ553MkshLO7GpJPfMiQp9owYo44iEBwxGwAaUEmg3J&#xA;6DMSbkxeheUfye8waxwudSrpdgd/3i/v3H+TGacfm33HMWQt1mr7bxYtoeuX2fN7L5a8m+X/AC5B&#xA;6emWwWUikl0/xTP/AKz/AMBQYiIDy2r1+XOfWdu7oneFw3Yq7FXYq7FXYq7FXYq7FXYq7FXYqgtb&#xA;/wCOXcfIf8SGKoi1/uV+WKrp/wC7PyxVD6SCNOhrtsf1nFUXirsVdirsVdirsVdirsVYVrv/AB1r&#xA;j5j/AIiMsjyfPe2P8an7/wBAQGF1jGPOPnKHRYTbWxEmpyD4E6iMH9t/4DMvT6Yz3P0vVezns5LW&#xA;y48m2Af7LyH6T+nlyaa4muJ3nncyTSEs7sakk9zmfKIAoPseDFHHERiKiOQZb5R/LLzN5j4TRxfU&#xA;9Obc3s4IUj/itftP9G3vmDmygNOp7Sx4djvLuD2zyl+Wnlry2Elhi+t6gvW+nAZwf+K1+yn0b++Y&#xA;MpkvO6vtLLm2JqPcGV5B17sVdirsVdirsVdirsVdirsVdirsVdirsVQWt/8AHLuPkP8AiQxVEWv9&#xA;yvyxVufaJvliqlpu9hB/qDFUTirsVdirsVdirsVdirsVYVrv/HWuPmP+IjLI8nz3tj/Gp+/9AYR5&#xA;z85waJCba2Ik1OQfAnURg/tv/AZn6TRnIbP0u19nvZ6Wtlxz2wj/AGXkP0n9PKBeXvJ/mrzbevJZ&#xA;wPMHetxfzErEpPUs56n2Wp9s2WfNDEKPyfVzlw6aAiKiANgHtPk/8m/Lui8LnUQNU1BaHlKv7hD/&#xA;AJEff5tX6M0ubVyny2DqNT2nkntH0x+16AAAKDYDoMxHWOxV2KuxV2KuxV2KuxV2KuxV2KuxV2Ku&#xA;xV2KuxVBa0CdLuAP5QfuIOKoi1/uV+WKuuv7lvliqzTRTT7b/jGn6sVRGKuxV2KuxV2KuxV2KuxV&#xA;ifnDQtdnSWfQlie8motJ24KhpTn0NaDtmRpzDi9f0uly9iY82q8SZ/dn6h1NfrYz5X/JCziuDqPm&#xA;m5/Sl87c2t0LCDkd6uxo8n4D2OZ2o7TJHDjHDF6qWu4YiGIcERsHp1vb29tCkFvEkMEY4xxRqERR&#xA;4BRQDNUSSbLgEkmyqYEOxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KoXVf+Obc/8Yziqra/&#xA;3K/LFWrs0gb5Yqt03fTrU+MMf/ERiqIxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Ku&#xA;xV2KuxV2KuxV2KuxV2KuxV2KoXVhXTLr/jE5+4VxVfZf3C/LFWr80t3+WKqlspW2iU9Qig/QMVVM&#xA;VdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdiqF1X/jmX&#xA;ftDIf+FOKrrA1t0+WKtagpa3YDqRiqiutacqgczsKfZb+mNK79N6d/vw/wDAn+mGld+m9O/34f8A&#xA;gT/TGld+m9O/34f+BP8ATGld+m9O/wB+H/gT/TGld+m9O/34f+BP9MaV36b07/fh/wCBP9MaV36b&#xA;07/fh/4E/wBMaV36b07/AH4f+BP9MaV36b07/fh/4E/0xpXfpvTv9+H/AIE/0xpXfpvTv9+H/gT/&#xA;AExpXHXNPH7ZP+xONKt/T1h4v/wONK79PWHi/wDwONK79PWHi/8AwONK79PWHi//AAONK79PWHi/&#xA;/A40rv09YeL/APA40rv09YeL/wDA40rv09YeL/8AA40rv09YeL/8DjSu/T1h4v8A8DjSu/T1h4v/&#xA;AMDjSu/T1h4v/wADjSu/T1h4v/wONK79PWHi/wDwONK79PWHi/8AwONK79PWHi//AAONKp3WsWE1&#xA;tLD8R9RGShX+YUxpUZYIVt1B60wKiGUEUOKoc6bZk1MSf8CMVa/Rll/vlP8AgRirv0ZZf75T/gRi&#xA;rv0ZZf75T/gRirv0ZZf75T/gRirv0ZZf75T/AIEYq79GWX++U/4EYq79GWX++U/4EYq79GWX++U/&#xA;4EYq79GWX++U/wCBGKu/Rll/vlP+BGKu/Rll/vlP+BGKu/Rll/vlP+BGKu/Rll/vlP8AgRirv0ZZ&#xA;f75T/gRirv0ZZf75T/gRirv0ZZf75T/gRirv0ZZf75T/AIEYq79GWX++U/4EYq79GWX++U/4EYq7&#xA;9GWX++U/4EYq79GWX++U/wCBGKu/Rll/vlP+BGKu/Rll/vlP+BGKu/Rll/vlP+BGKu/Rll/vlP8A&#xA;gRirv0ZZf75T/gRirv0ZZf75T/gRirv0ZZf75T/gRira6dZqaiJK/IYqiQABQYq//9k=</xmpGImg:image>
+ </rdf:li>
+ </rdf:Alt>
+ </xmp:Thumbnails>
+ </rdf:Description>
+ <rdf:Description rdf:about=""
+ xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/"
+ xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#"
+ xmlns:stEvt="http://ns.adobe.com/xap/1.0/sType/ResourceEvent#">
+ <xmpMM:RenditionClass>proof:pdf</xmpMM:RenditionClass>
+ <xmpMM:OriginalDocumentID>uuid:65E6390686CF11DBA6E2D887CEACB407</xmpMM:OriginalDocumentID>
+ <xmpMM:DocumentID>xmp.did:F87F1174072068118A6DF333610584B2</xmpMM:DocumentID>
+ <xmpMM:InstanceID>uuid:15a3ab41-6703-e944-a5ec-63770d002408</xmpMM:InstanceID>
+ <xmpMM:DerivedFrom rdf:parseType="Resource">
+ <stRef:instanceID>uuid:52d3fbd8-d8d7-2543-8e0c-81d9ea137ecb</stRef:instanceID>
+ <stRef:documentID>xmp.did:8CF5709C0E20681188C6A12CE4B46A4D</stRef:documentID>
+ <stRef:originalDocumentID>uuid:65E6390686CF11DBA6E2D887CEACB407</stRef:originalDocumentID>
+ <stRef:renditionClass>proof:pdf</stRef:renditionClass>
+ </xmpMM:DerivedFrom>
+ <xmpMM:History>
+ <rdf:Seq>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:F87F1174072068118A6DF333610584B2</stEvt:instanceID>
+ <stEvt:when>2012-06-25T18:52:34-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS5</stEvt:softwareAgent>
+ <stEvt:changed>/</stEvt:changed>
+ </rdf:li>
+ </rdf:Seq>
+ </xmpMM:History>
+ </rdf:Description>
+ <rdf:Description rdf:about=""
+ xmlns:illustrator="http://ns.adobe.com/illustrator/1.0/">
+ <illustrator:StartupProfile>Web</illustrator:StartupProfile>
+ <illustrator:Type>Document</illustrator:Type>
+ </rdf:Description>
+ <rdf:Description rdf:about=""
+ xmlns:xmpTPg="http://ns.adobe.com/xap/1.0/t/pg/"
+ xmlns:stDim="http://ns.adobe.com/xap/1.0/sType/Dimensions#"
+ xmlns:xmpG="http://ns.adobe.com/xap/1.0/g/">
+ <xmpTPg:NPages>1</xmpTPg:NPages>
+ <xmpTPg:HasVisibleTransparency>True</xmpTPg:HasVisibleTransparency>
+ <xmpTPg:HasVisibleOverprint>False</xmpTPg:HasVisibleOverprint>
+ <xmpTPg:MaxPageSize rdf:parseType="Resource">
+ <stDim:w>11.111111</stDim:w>
+ <stDim:h>8.333333</stDim:h>
+ <stDim:unit>Inches</stDim:unit>
+ </xmpTPg:MaxPageSize>
+ <xmpTPg:PlateNames>
+ <rdf:Seq>
+ <rdf:li>Cyan</rdf:li>
+ <rdf:li>Magenta</rdf:li>
+ <rdf:li>Yellow</rdf:li>
+ <rdf:li>Black</rdf:li>
+ </rdf:Seq>
+ </xmpTPg:PlateNames>
+ <xmpTPg:SwatchGroups>
+ <rdf:Seq>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:groupName>Default Swatch Group</xmpG:groupName>
+ <xmpG:groupType>0</xmpG:groupType>
+ <xmpG:Colorants>
+ <rdf:Seq>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>White</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>255</xmpG:red>
+ <xmpG:green>255</xmpG:green>
+ <xmpG:blue>255</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>Black</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>0</xmpG:red>
+ <xmpG:green>0</xmpG:green>
+ <xmpG:blue>0</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>RGB Red</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>255</xmpG:red>
+ <xmpG:green>0</xmpG:green>
+ <xmpG:blue>0</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>RGB Yellow</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>255</xmpG:red>
+ <xmpG:green>255</xmpG:green>
+ <xmpG:blue>0</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>RGB Green</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>0</xmpG:red>
+ <xmpG:green>255</xmpG:green>
+ <xmpG:blue>0</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>RGB Cyan</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>0</xmpG:red>
+ <xmpG:green>255</xmpG:green>
+ <xmpG:blue>255</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>RGB Blue</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>0</xmpG:red>
+ <xmpG:green>0</xmpG:green>
+ <xmpG:blue>255</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>RGB Magenta</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>255</xmpG:red>
+ <xmpG:green>0</xmpG:green>
+ <xmpG:blue>255</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=193 G=39 B=45</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>193</xmpG:red>
+ <xmpG:green>39</xmpG:green>
+ <xmpG:blue>45</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=237 G=28 B=36</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>237</xmpG:red>
+ <xmpG:green>28</xmpG:green>
+ <xmpG:blue>36</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=241 G=90 B=36</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>241</xmpG:red>
+ <xmpG:green>90</xmpG:green>
+ <xmpG:blue>36</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=247 G=147 B=30</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>247</xmpG:red>
+ <xmpG:green>147</xmpG:green>
+ <xmpG:blue>30</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=251 G=176 B=59</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>251</xmpG:red>
+ <xmpG:green>176</xmpG:green>
+ <xmpG:blue>59</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=252 G=238 B=33</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>252</xmpG:red>
+ <xmpG:green>238</xmpG:green>
+ <xmpG:blue>33</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=217 G=224 B=33</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>217</xmpG:red>
+ <xmpG:green>224</xmpG:green>
+ <xmpG:blue>33</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=140 G=198 B=63</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>140</xmpG:red>
+ <xmpG:green>198</xmpG:green>
+ <xmpG:blue>63</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=57 G=181 B=74</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>57</xmpG:red>
+ <xmpG:green>181</xmpG:green>
+ <xmpG:blue>74</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=0 G=146 B=69</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>0</xmpG:red>
+ <xmpG:green>146</xmpG:green>
+ <xmpG:blue>69</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=0 G=104 B=55</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>0</xmpG:red>
+ <xmpG:green>104</xmpG:green>
+ <xmpG:blue>55</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=34 G=181 B=115</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>34</xmpG:red>
+ <xmpG:green>181</xmpG:green>
+ <xmpG:blue>115</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=0 G=169 B=157</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>0</xmpG:red>
+ <xmpG:green>169</xmpG:green>
+ <xmpG:blue>157</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=41 G=171 B=226</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>41</xmpG:red>
+ <xmpG:green>171</xmpG:green>
+ <xmpG:blue>226</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=0 G=113 B=188</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>0</xmpG:red>
+ <xmpG:green>113</xmpG:green>
+ <xmpG:blue>188</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=46 G=49 B=146</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>46</xmpG:red>
+ <xmpG:green>49</xmpG:green>
+ <xmpG:blue>146</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=27 G=20 B=100</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>27</xmpG:red>
+ <xmpG:green>20</xmpG:green>
+ <xmpG:blue>100</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=102 G=45 B=145</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>102</xmpG:red>
+ <xmpG:green>45</xmpG:green>
+ <xmpG:blue>145</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=147 G=39 B=143</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>147</xmpG:red>
+ <xmpG:green>39</xmpG:green>
+ <xmpG:blue>143</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=158 G=0 B=93</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>158</xmpG:red>
+ <xmpG:green>0</xmpG:green>
+ <xmpG:blue>93</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=212 G=20 B=90</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>212</xmpG:red>
+ <xmpG:green>20</xmpG:green>
+ <xmpG:blue>90</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=237 G=30 B=121</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>237</xmpG:red>
+ <xmpG:green>30</xmpG:green>
+ <xmpG:blue>121</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=199 G=178 B=153</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>199</xmpG:red>
+ <xmpG:green>178</xmpG:green>
+ <xmpG:blue>153</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=153 G=134 B=117</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>153</xmpG:red>
+ <xmpG:green>134</xmpG:green>
+ <xmpG:blue>117</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=115 G=99 B=87</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>115</xmpG:red>
+ <xmpG:green>99</xmpG:green>
+ <xmpG:blue>87</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=83 G=71 B=65</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>83</xmpG:red>
+ <xmpG:green>71</xmpG:green>
+ <xmpG:blue>65</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=198 G=156 B=109</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>198</xmpG:red>
+ <xmpG:green>156</xmpG:green>
+ <xmpG:blue>109</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=166 G=124 B=82</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>166</xmpG:red>
+ <xmpG:green>124</xmpG:green>
+ <xmpG:blue>82</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=140 G=98 B=57</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>140</xmpG:red>
+ <xmpG:green>98</xmpG:green>
+ <xmpG:blue>57</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=117 G=76 B=36</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>117</xmpG:red>
+ <xmpG:green>76</xmpG:green>
+ <xmpG:blue>36</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=96 G=56 B=19</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>96</xmpG:red>
+ <xmpG:green>56</xmpG:green>
+ <xmpG:blue>19</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=66 G=33 B=11</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>66</xmpG:red>
+ <xmpG:green>33</xmpG:green>
+ <xmpG:blue>11</xmpG:blue>
+ </rdf:li>
+ </rdf:Seq>
+ </xmpG:Colorants>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:groupName>Grays</xmpG:groupName>
+ <xmpG:groupType>1</xmpG:groupType>
+ <xmpG:Colorants>
+ <rdf:Seq>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=0 G=0 B=0</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>0</xmpG:red>
+ <xmpG:green>0</xmpG:green>
+ <xmpG:blue>0</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=26 G=26 B=26</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>26</xmpG:red>
+ <xmpG:green>26</xmpG:green>
+ <xmpG:blue>26</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=51 G=51 B=51</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>51</xmpG:red>
+ <xmpG:green>51</xmpG:green>
+ <xmpG:blue>51</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=77 G=77 B=77</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>77</xmpG:red>
+ <xmpG:green>77</xmpG:green>
+ <xmpG:blue>77</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=102 G=102 B=102</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>102</xmpG:red>
+ <xmpG:green>102</xmpG:green>
+ <xmpG:blue>102</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=128 G=128 B=128</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>128</xmpG:red>
+ <xmpG:green>128</xmpG:green>
+ <xmpG:blue>128</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=153 G=153 B=153</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>153</xmpG:red>
+ <xmpG:green>153</xmpG:green>
+ <xmpG:blue>153</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=179 G=179 B=179</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>179</xmpG:red>
+ <xmpG:green>179</xmpG:green>
+ <xmpG:blue>179</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=204 G=204 B=204</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>204</xmpG:red>
+ <xmpG:green>204</xmpG:green>
+ <xmpG:blue>204</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=230 G=230 B=230</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>230</xmpG:red>
+ <xmpG:green>230</xmpG:green>
+ <xmpG:blue>230</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=242 G=242 B=242</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>242</xmpG:red>
+ <xmpG:green>242</xmpG:green>
+ <xmpG:blue>242</xmpG:blue>
+ </rdf:li>
+ </rdf:Seq>
+ </xmpG:Colorants>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:groupName>Web Color Group</xmpG:groupName>
+ <xmpG:groupType>1</xmpG:groupType>
+ <xmpG:Colorants>
+ <rdf:Seq>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=63 G=169 B=245</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>63</xmpG:red>
+ <xmpG:green>169</xmpG:green>
+ <xmpG:blue>245</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=122 G=201 B=67</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>122</xmpG:red>
+ <xmpG:green>201</xmpG:green>
+ <xmpG:blue>67</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=255 G=147 B=30</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>255</xmpG:red>
+ <xmpG:green>147</xmpG:green>
+ <xmpG:blue>30</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=255 G=29 B=37</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>255</xmpG:red>
+ <xmpG:green>29</xmpG:green>
+ <xmpG:blue>37</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=255 G=123 B=172</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>255</xmpG:red>
+ <xmpG:green>123</xmpG:green>
+ <xmpG:blue>172</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=189 G=204 B=212</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>189</xmpG:red>
+ <xmpG:green>204</xmpG:green>
+ <xmpG:blue>212</xmpG:blue>
+ </rdf:li>
+ </rdf:Seq>
+ </xmpG:Colorants>
+ </rdf:li>
+ </rdf:Seq>
+ </xmpTPg:SwatchGroups>
+ </rdf:Description>
+ <rdf:Description rdf:about=""
+ xmlns:pdf="http://ns.adobe.com/pdf/1.3/">
+ <pdf:Producer>Adobe PDF library 9.90</pdf:Producer>
+ </rdf:Description>
+ </rdf:RDF>
+</x:xmpmeta>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<?xpacket end="w"?> endstream endobj 3 0 obj <</Count 1/Kids[7 0 R]/Type/Pages>> endobj 7 0 obj <</ArtBox[94.0 7.0 707.0 595.0]/BleedBox[0.0 0.0 800.0 600.0]/Contents 8 0 R/Group 9 0 R/LastModified(D:20120625185236-07'00')/MediaBox[0.0 0.0 800.0 600.0]/Parent 3 0 R/PieceInfo<</Illustrator 10 0 R>>/Resources<</ColorSpace<</CS0 11 0 R/CS1 11 0 R>>/ExtGState<</GS0 12 0 R/GS1 13 0 R>>/Properties<</MC0 5 0 R>>/Shading<</Sh0 14 0 R/Sh1 15 0 R/Sh2 16 0 R/Sh3 17 0 R/Sh4 18 0 R/Sh5 19 0 R>>/XObject<</Fm0 20 0 R/Fm1 21 0 R/Fm2 22 0 R>>>>/Thumb 23 0 R/TrimBox[0.0 0.0 800.0 600.0]/Type/Page>> endobj 8 0 obj <</Filter/FlateDecode/Length 2230>>stream
+Hˎ$Ebت%{%־`k1` TI2^7n_^~~ _\ ?@_~se{yErs_hQԢECj><}ӧd?suuЇ!x >m7?pZK!̺ Suٺ+%JCYQv|*A߶<ĎܒuKAag!1q@HRj,6e;ƶK)fbrBKBgĹ^8R}’-fu 9|gu&k:d3C艽M8+VblX[}K~X{}ɶ Qu U_$id^}QuI%;2Ou%J/cs?kNQ,<PSIv)='V;j.żLs8\$EML
+1|#i&7BX6('6 RHC:xRaGem3DlM
+B6o$& 37AKSΆ쬷 (`0H
+xbA=#1S&h)C@㈇AKSӈ(,Z
+n9-2Pu )xs
+?!^j~E ν?gKlfyO
+~gG$qfkfnt=*ex`T}V &z[^hnƟEa\4vk[uǪd.Hx3&5,n&u>k*ņlD`erk:%2֨`aL!$U9pn?D*5؍q*Mg AkZ -t_6kXbA$f4,aSA%9=
+5'CR 04V3R*xg)3׫ γ\b΄!.QLymEL+a
+ w!X@W~y}MizMlZ].SMA7\OC9g ᖩ!$̲IUs4l-SvLAzNJmjLwIH{DrS4G""pL$k~EF`#L)L砼[Pֆ3KI2۴U`t3л3T}ӳd>#LYJ3˾ N17YpgeAHKBQ1xJ@]AUK]aLHu{~[ѕ]q[%vb7ĉ&ezvvg ?,a6ĶA743"*ϻ5AotM|݊tIr>G\!K&X}iχ% 0', '5=W`
+8;ZDo4a*;['SVmH.]]4a"c]In"BYY'W"&B_"uWn*W!HPAUd-Pr8ni5hFd_XX^-P.R
+&jM#',fKGKkB"k;2tq_V8B2M*h\6%E")-<!M)_-rr*1"Ug]//^]90Oi[Bd/VUbRB-
+kPc+S\miA\f!2(u"LGOK\7-EaB+8@7X!a6jUE[3%(q-t')8TL6e+2%q!@c6+EkL7J
+1aue$:Y^CSLH,@FO;tW5\''fd_gi#)T\/_-9eLp6Q7Fb[ceoiOf.idg!T3.g-VVmK
+lh$@qW9;?/bBH*/\sA,b7m6.oK_LFEgMlW7RW\#WYk@#r%QHLU'7(s`LI2KKI224N
+@`5rI0fh7e%tn-+T?s\=#aj/H*E)()T)@[QK/Bs>(7sckFH#-[JAh%Bj[KD*9HkVh
+m20mdQ>)a?*j"-Y<)5J)dorid(bpY(7W=`[?Xf,8e$'D&#7=$fP/KrIgG+;tZ:s#Y
+;4rG`a_o%mh(n<6Z;%&aiW@]$;,R+o$;dCQ,12l'$)kp6>e/XVm2bKd@9YqKQ=]Ll
+nln\7@.5\;#ioFIp9K5*b-Ig(hX=;(W!R5=4Ad*?LBdiTW[O/J"[\O:8I)PmN-bIg
+<abCFRXqOf6dC,j8iPWd\-Xi/%u3NqNMu,9&GUgIVk;H:VP_]S+Y&@\'pOkHJt%9o
+3n3&fC4;D^$M*gZ\d&I2Zn[[-K7^G:k4lC4QiIVj#k0XkdMrQ.LXl`NVYCFL!nNh`
+`!R&TH'YAh^%MTgONPERL].G3LSWRW=dWjT,RK_**!B\PE=D,/s*Uo`YmnGZLN;i[
+iLlp,3$q9@N[W\;gBeOHG`KXS8d<]nMC))Cc[*A+f4rU_V9TWHr\*q[!2KK+LB~> endstream endobj 25 0 obj [/Indexed/DeviceRGB 255 26 0 R] endobj 26 0 obj <</Filter[/ASCII85Decode/FlateDecode]/Length 428>>stream
+8;X]O>EqN@%''O_@%e@?J;%+8(9e>X=MR6S?i^YgA3=].HDXF.R$lIL@"pJ+EP(%0
+b]6ajmNZn*!='OQZeQ^Y*,=]?C.B+\Ulg9dhD*"iC[;*=3`oP1[!S^)?1)IZ4dup`
+E1r!/,*0[*9.aFIR2&b-C#s<Xl5FH@[<=!#6V)uDBXnIr.F>oRZ7Dl%MLY\.?d>Mn
+6%Q2oYfNRF$$+ON<+]RUJmC0I<jlL.oXisZ;SYU[/7#<&37rclQKqeJe#,UF7Rgb1
+VNWFKf>nDZ4OTs0S!saG>GGKUlQ*Q?45:CI&4J'_2j<etJICj7e7nPMb=O6S7UOH<
+PO7r\I.Hu&e0d&E<.')fERr/l+*W,)q^D*ai5<uuLX.7g/>$XKrcYp0n+Xl_nU*O(
+l[$6Nn+Z_Nq0]s7hs]`XX1nZ8&94a\~> endstream endobj 20 0 obj <</BBox[94.0 595.0 707.0 7.0]/Group 27 0 R/Length 40/Matrix[1.0 0.0 0.0 1.0 0.0 0.0]/Resources<</ColorSpace<</CS0 28 0 R>>/ExtGState<</GS0 29 0 R>>/ProcSet[/PDF/ImageC/ImageI]/XObject<</Im0 30 0 R>>>>/Subtype/Form>>stream
+q
+/GS0 gs
+613 0 0 588 94 7 cm
+/Im0 Do
+Q
+ endstream endobj 21 0 obj <</BBox[495.0 491.0 545.0 389.0]/Group 31 0 R/Length 42/Matrix[1.0 0.0 0.0 1.0 0.0 0.0]/Resources<</ColorSpace<</CS0 28 0 R>>/ExtGState<</GS0 32 0 R>>/ProcSet[/PDF/ImageC/ImageI]/XObject<</Im0 33 0 R>>>>/Subtype/Form>>stream
+q
+/GS0 gs
+50 0 0 102 495 389 cm
+/Im0 Do
+Q
+ endstream endobj 22 0 obj <</BBox[251.0 494.0 301.0 389.0]/Group 34 0 R/Length 42/Matrix[1.0 0.0 0.0 1.0 0.0 0.0]/Resources<</ColorSpace<</CS0 28 0 R>>/ExtGState<</GS0 35 0 R>>/ProcSet[/PDF/ImageC/ImageI]/XObject<</Im0 36 0 R>>>>/Subtype/Form>>stream
+q
+/GS0 gs
+50 0 0 105 251 389 cm
+/Im0 Do
+Q
+ endstream endobj 34 0 obj <</I false/K false/S/Transparency/Type/Group>> endobj 36 0 obj <</BitsPerComponent 8/ColorSpace 28 0 R/Decode[0.0 255.0]/Filter/FlateDecode/Height 105/Intent/RelativeColorimetric/Length 139/Name/X/SMask 37 0 R/Subtype/Image/Type/XObject/Width 50>>stream
+H׻ Di+} 8SSA"Lauy\7MZ @Pt])ʠC:.
+HWS
+bs-r :Da@
+=ƦOO uioC&^Ղz7_Z0Ejoт݃s
+Pr{B檦}=b>y,Y-}wZh.?QsCaj/MW3I'-cs }jlI~LuVapF  8k&x= cs
+
+s0:?i†Os \mm ėO*Ǹ@ho>pńo}rtޡ-HEh}c ~`ds_҈)^vyknrtT6"Tu O޼F1c˙ⵐBV*˯#6E0 jӎ% t=j>_髾j KN>3O66<k}tm+|,
+uf9Y|[W0ޒ&JKmяZw؍[6DŽ;Zs$GYOarvRπHybVx8y,*AU,$%
+L$D0 #
+a8a1h Ø!` FC
+̇s0
+# endstream endobj 39 0 obj <</Filter/FlateDecode/Length 2574/N 3>>stream
+HyTSwoɞc [5laQIBHADED2mtFOE.c}08׎8GNg9w߽
+ 
+V)gB0iW8#8wթ8_٥ʨQQj@&A)/g>'K
+x-
+ꇆnQt}MA0alSx k&^>0|>_',G!"F$H:R!zFQd?r 9\A&G rQ hE]a4zBgE#H *B=0HIpp0MxJ$D1D, VĭKĻYdE"EI2EBGt4MzNr!YK ?%_&#(0J:EAiQ(()ӔWT6U@P+!~mD eԴ!hӦh/']B/ҏӿ?a0nhF!X8܌kc&5S6lIa2cKMA!E#ƒdV(kel }}Cq9
+N')].uJr
+ wG xR^[oƜchg`>b$*~ :Eb~,m,-ݖ,Y¬*6X[ݱF=3뭷Y~dó ti zf6~`{v.Ng#{}}jc1X6fm;'_9 r:8q:˜O:ϸ8uJqnv=MmR 4
+n3ܣkGݯz=[==<=G</z^^j^ ޡZQB0FX'+t<u-{__ߘ-G,}/Hh 8mW2p[AiAN#8$X?AKHI{!7<qWy(!46-aaaW @@`lYĎH,$((Yh7ъb<b*b<~L&Y&9%uMssNpJP%MI JlN<DHJIڐtCj'KwKgC%Nd |ꙪO=%mLuvx:HoL!ȨC&13#s$/Y=OsbsrnsO1v=ˏϟ\h٢#¼oZ<]TUt}`IÒsKV-Y,+>TB(/S,]6*-W:#7*e^YDY}UjAyT`#D="b{ų+ʯ:!kJ4Gmt}uC%K7YVfFY .=b?SƕƩȺy چ k5%4m7lqlioZlG+Zz͹mzy]?uuw|"űNwW&e֥ﺱ*|j5kyݭǯg^ykEklD_p߶7Dmo꿻1ml{Mś nLl<9O
+zpg_XQKFAǿ=ȼ:ɹ8ʷ6˶5̵5͵6ζ7ϸ9к<Ѿ?DINU\dlvۀ܊ݖޢ)߯6DScs 2F[p(@Xr4Pm8Ww)Km
+q
+/GS0 gs
+50 0 0 105 251 389 cm
+/Im0 Do
+Q
+ endstream endobj 43 0 obj <</CS 11 0 R/I false/K false/S/Transparency/Type/Group>> endobj 45 0 obj <</BitsPerComponent 8/ColorSpace/DeviceGray/DecodeParms<</BitsPerComponent 4/Colors 1/Columns 50>>/Filter/FlateDecode/Height 105/Intent/RelativeColorimetric/Length 2256/Name/X/Subtype/Image/Type/XObject/Width 50>>stream
+HWS
+bs-r :Da@
+=ƦOO uioC&^Ղz7_Z0Ejoт݃s
+Pr{B檦}=b>y,Y-}wZh.?QsCaj/MW3I'-cs }jlI~LuVapF  8k&x= cs
+
+s0:?i†Os \mm ėO*Ǹ@ho>pńo}rtޡ-HEh}c ~`ds_҈)^vyknrtT6"Tu O޼F1c˙ⵐBV*˯#6E0 jӎ% t=j>_髾j KN>3O66<k}tm+|,
+uf9Y|[W0ޒ&JKmяZw؍[6DŽ;Zs$GYOarvRπHybVx8y,*AU,$%
+L$D0 #
+a8a1h Ø!` FC
+̇s0
+HA Dv+)ht/
+Hė?/,0c72kM!R+-RJ7E%KBEv 3c[ߟ,a<}>?X:*kֺʵ&EF>QJl{``0Xdh4#@k,'`x6740'*J!-n=Jg0YlXLJ&
+lB;[k pOXB'WO//O7g{ ! 4O1 Bg_P͡^֦\@h'::E÷wlceHȾT6h,# oh=ɩ)I~bcjȠ91q}0-S-<=x5MNT)30|wұW^=ޜ  K2щ%++n^;Ucшp[m?uFEM}cC]UYQ^fOG[۸D$d+.mzܴ0_'K>2e"pG]==o;?&1U%PY<H<YXVSwGceQvPO;6]:8]\S6 mw4~F{3Z D»/? O/+Ld }Jpd}/ixqtR:5IS~.0 Gsfy\u]󃢬nF pX6nN+m0:5-i}X.0fPԎۊBb^;<9==5ţgĄlxL5B[kU-Ci[yq=,Մ ]aIkz;c^u-$=Cs'm '
+˟<.~{P$Ĕ R9,H70u,Ud v@RNhlx t'8qTghlڹG&҉ᾎ:IS<]ܨyW&j|MN2Y:^{PTJnö HgHL-5 ]PFW
+bz
+H\ZlV{
+B:[^ū /3/^^]N׍?&1+݂̽x"&gf';_<wmr$f&Vr7א1A K']@'êbvr]yAGL DI_ՈD?&$KJͿH\b6wX $OKϰtnmBYe]jͯF'냎3)wT67?*R]Ps@~?*6?'~|ѩپ0&_
+I(h 6@mjTjW!*(Q)W9U-HcwDJvξ)`G
+Bc&EK/]YU]Uy +}_dr8|8@$zIQa$}<hDw
+_k" IٳgrNe!D^kjmٖKdԴ#b#~"K"c]4He
+EaQ1qbo ps An O3^[ġ>"%ߐASP}ڢq-n" 6xz: y ]of% l-x\>
+q
+/GS0 gs
+50 0 0 102 495 389 cm
+/Im0 Do
+Q
+ endstream endobj 50 0 obj <</CS 11 0 R/I false/K false/S/Transparency/Type/Group>> endobj 51 0 obj <</BitsPerComponent 8/ColorSpace/DeviceGray/DecodeParms<</BitsPerComponent 4/Colors 1/Columns 50>>/Filter/FlateDecode/Height 102/Intent/RelativeColorimetric/Length 2342/Name/X/Subtype/Image/Type/XObject/Width 50>>stream
+Hė?/,0c72kM!R+-RJ7E%KBEv 3c[ߟ,a<}>?X:*kֺʵ&EF>QJl{``0Xdh4#@k,'`x6740'*J!-n=Jg0YlXLJ&
+lB;[k pOXB'WO//O7g{ ! 4O1 Bg_P͡^֦\@h'::E÷wlceHȾT6h,# oh=ɩ)I~bcjȠ91q}0-S-<=x5MNT)30|wұW^=ޜ  K2щ%++n^;Ucшp[m?uFEM}cC]UYQ^fOG[۸D$d+.mzܴ0_'K>2e"pG]==o;?&1U%PY<H<YXVSwGceQvPO;6]:8]\S6 mw4~F{3Z D»/? O/+Ld }Jpd}/ixqtR:5IS~.0 Gsfy\u]󃢬nF pX6nN+m0:5-i}X.0fPԎۊBb^;<9==5ţgĄlxL5B[kU-Ci[yq=,Մ ]aIkz;c^u-$=Cs'm '
+˟<.~{P$Ĕ R9,H70u,Ud v@RNhlx t'8qTghlڹG&҉ᾎ:IS<]ܨyW&j|MN2Y:^{PTJnö HgHL-5 ]PFW
+bz
+H\ZlV{
+B:[^ū /3/^^]N׍?&1+݂̽x"&gf';_<wmr$f&Vr7א1A K']@'êbvr]yAGL DI_ՈD?&$KJͿH\b6wX $OKϰtnmBYe]jͯF'냎3)wT67?*R]Ps@~?*6?'~|ѩپ0&_
+I(h 6@mjTjW!*(Q)W9U-HcwDJvξ)`G
+Bc&EK/]YU]Uy +}_dr8|8@$zIQa$}<hDw
+_k" IٳgrNe!D^kjmٖKdԴ#b#~"K"c]4He
+EaQ1qbo ps An O3^[ġ>"%ߐASP}ڢq-n" 6xz: y ]of% l-x\>
+HV
+Lh<K`B'&4I
+
+ ه;0}#G::1}tQ٧MLf`M/t]^kz4bzo;WΦkz)iM/Lӫa=0v0C ]=ezIe:'M7LMt8/^Lgut4.f\6^/eT1;3{3+yxh:L<2G~6~7O.o}Mo{>nMo(L1Uk^_AgNs38Aep6u`;I79=9ۜ'gG`zOsv9!׻ʜ|;݅Fv.5,xhG_brTv5LlGfXmLeWr}psTvWNgoL).ߘNoTvv+4+'k4v{!ӃEm[1J줖jls^bVkl닦^ztlLd'bc*;%Whc6=󪖍Lelc6=ņ,ņ$nl'^ڍWXy]a]“{ `>i >m镽d=%Hӽ*{4!44FOd@cDFNdDFOcDFOdDFNdDFOdDFNc4FNc$FOb4FOb$FOc@b$$4FOc@b@c44FOd44FOdDFOcDFNdDFNcDFOdDFNdDFNdDFNdDFNdDFNdDFNdDFNdn799999999ʨȉMdDFNdDFNdDFNdDFNdDFNdDFNdDFNdDF2j"#'2r"#'2r"#'2j7Q9999999ȉȉȉȉMdDFNdDFNdDFNdDFNdDFNdDFNdDFNdn*&2r"#'2r"#'2r"#'2r"#'2r"#'2j7Q9999999ȉȉȉȉȉȉȉȨDFMdDFNdDFNdDFNdDFNdDFNdDFNdDFNdF2v'2r"#'2r"#'2r"#'2r"#'2r"#'2r"#'2r"#'2r"#'2r"#'2j{9999999999ȉȉȉȉȉȉȉȉȉȉȉȨiLdKdDFNdDFNdDFNdDFNdDFNdDFNdDFNdDFNdDFNdDFNdDFNdDFNdDFNdDFNdDFNdDFNdDFNdDFNdDFNdDFNdDFNdDFNdDFNdDFNdDFNdDFNdDFNdDFNdDFNdDFNdDFNdDFNdDFNdDFNdDFNdDFNdDFNdDFNdDFNdDFNdDFNdDFNdDFNdDFNdDFNdDFNdDFNdDFNdDFNdDFNdDFNdDFNdDFNdDFNdDFNdDFNdDFNdDFNcDFNdDFNdDFNdDFNdDFNdDFNdDFNdDFNdDFNdDFNdDFOdDFNdDFNdDFNdDFNdDFNcDFNdDFNdDFNdDFNdDFNdDFNdDFNdDFNdDFNdDFNdDFNd4FOdDFNdDFNdDFNdDFNdDFNdDFNdDFNdDFNdDFNcDFNdDFr"#'2r"v݉Ȩ}kLeMd42vu1Иω}1G <)
+Hy8V9}cc_"%2QYҌ[3"RdIE&ґd9Xtu;gܹJ_9<$=QH @&o?MGf2[VC9FSm U0$]-[ne```ddq; [BȦ|z@^ۘ1,º`n54  e ~1cl\<ޕ g\\l,X E5hhP> 
+/ ($,"*&&&p**"",$(]Ӡhhg((Qcae~ mW? //+#-)!.&"$Ta)}# 
+~IHTvkhjiEGG[[KS] SE '/+-!.* LdgEzB4 ILT\RFSMSGb޵XYY0751ڭWQR8X̫<[ߋg9ba0>A(U ]M-zJA.Nl171Rǫ(HQ=3T b1aXa aۥUT5u ,my|}x@PPp218((#^n.{-L u4TU%Dy=CM11,|B2Jx }#s+}n8Ȩظsk)"ӡ!Ǽ=]m,͌hxeI1a~^g [ќ}]PDW@d2^S9w>)9%JZՌ̕iWRSNL ;|POKU' =sDPjòrp I)A9BDD'&_JȺ{Eeca݂۷r;{h
+NFBL0gf_4Ő9"&ۡkhO
+pc
+򰳠1⡌JT^YyP1pF{irb||ltttx$MM@jQ=buOfυsoeW
+C%FoZmm,N:Hx`V 3<ʳ,l|b2Pٸť4wƦ
+F^Y
+F{D&e:q
+XTQm}[[Y$u5UE9i)ļy^bcߧgfVT64C &H3
+ e@PpHXDdtlBRJǬO_jj#
+mg}7j,2
+*vW̡" @UdH~rwq4{sO qWC]]uu{?1wv{1su]sG
+7d$DE o]!S鎊:B[W7 )9ElTgv(?~lD6T| v@jݑt?Ɂu 0J!ɛzOQޤWw3K`T ;88DD6a*Krž 6BM%-).zMH
+K|<<Gt0muM=$4['7O`XT|rznqEMC[<z5P(Џώw7Wd&>5b&.GڬY)o^T =Pc )d-ϓC YBTWV"' llv"7%
+JwzM]{FŧdRی&mkv)|<'9*t1;1vEkJsa %5}SFlwkX=4N0}-Y)q!7'XX 3 ˹sm\
+x 0^,,L0[􉙙!kHHCvkm8u&$<:~FNQ fkkk+|4'5 7[3]5829d(ۄC7/*k UM=PC2vzIFˁ=Ԉ2R"(/k֟/} ӆSC8
+{F^э-/r,7=!:Q2i$=WQAm[_X
+reLhk"f4U p>{>vJӪƮXlHosUAݫ>$-e(cb,̍v^i%Mc+Ȼ-}c3U;Xn@0MIbg]']^GgLVinc #>f2յVeahoKua`o+cM%i^, e<tcRA+ [_~F56?34'?13= )9X}Obn&LTjQC7$2AvqMK2(sF ogKC E)a a#$n@v
+>Ƒ15(+9&<Q{ #Ui1A^(c,ߙH:3v.^A1
+[I &P͌@/'6Fq Jȫ;z K/jc 4cSM/x 1&+!̇vQ~gb3XrpC5U0q y ё+O ?h&/!Pl\r<b֍-j(K
+=~ȒbLnJbv41;iO:֕6Wņx8Ubc7\b*CcRs+{Q-/+I>yn&QNcqEaF4w'04e*rScBvȊ3N̍ruLm^S3:Cc`lbEivJLYof b<?6Bۙ<b]{Lm\\Ke#=9)7/5&D8vXH+ilN]]=23O7fbV*1F{13QHةclyIY5mTe/:lm$ZC?,5\|]K|TR5<=OY[x3^[t㒿#HKENBʍ1a+$+Ĭ%κk|\, '&#~`?,wX8GqmeuX[MQVbE_ws elUnPџ7L%ue8~==-eȚAel)FRpdZ[mDIY
+e)Q)!$JTvY 3c33t?s|>z=_.^qiysdM~{-œsa ҎsRrΣꦎ&gK r4PAU9o1&88/pe[P=LE.5$^0'9LL\< CЏK^3`s?=F:rҨ*/G̥ˤԴ(Tg\66MeIA^
+<6e$9eik:z&[
+X9.K +56Ħj<06 Ƕhŗ0<w3*l;rY\Z͟z'e#hb݈>GX&l"\⒲
+v vdY@ږξ241$E8bcJI(9EP9z^vAU#\1TJdxe1*,@e|[Yp>c:j
+2DaΝe)eXx|g?w.9q~-YwaqlL +ھ '׶›e-40%œ#!_%ŎVP^ \s8+Y~t!r0(Zvq2wqR&
+s΄ N'sK_t 1s&FՖ_OҬZFv>sV7u3&Y>w#=|_òDe}<蟚ZW^x3\͂جH
+dmcK~go=}50y^vTr⋉(xeJܖ^Xލlz5A^ƕǽm(?؂|ėtL K/|Zu>bMЇ//H>㳇jD".ģ~iy6G/(˻k[?Ѱ⬫]I*5ݺ=|BVqۏ0,G9Ph ԯpӎGï@Y6}@hzp'1﮶ZY)7}"2)QMKg(f1Bo+2.jB%dns&& =L6w47Ӿ_-
+1޷+d1|Ĥ׽œd˾՗Ag  Y8ۯ4~bbNw,cS,We!lHZ.= i2iyU2aEϡ0G,6{b W9XQ$LALFQC̖vlܭʷhY
+尣n;UW\Å.`g`D(̮ 6ͳ{6ת+Q&\ɖݞAQ)yeumxYh|Q}qm4Ec|!GXFs:
+8.!ǹI=vZk$LȚ 2}sJhYjyYu򠋍*rRE=xL~FHh&Þ!L2! s:qFӆ=#~Y"0\B{LC{:qa&ֶ~Or8,0\,/%*s  M?پ#aWԴʢnV0,e-Y<&
+ρ$% (LWŠzG 8檒C4[2O(
+ȼN {G,k$Fz:n3Ua /Iɭ4v(̑QA4Ud/%RXQT3"!D\s25+\~0e`aZ;y/ofP v5WC=SWM^
+&271;@Ȫh[< >dSc3Îai@&%!
+rV„bp(USlD;XV&-#_HBϰX\Z^mF*Ph|d(،/I,QC@&R)<"Sںl~UgąXꨮxBR^mh=0z>LKLd\ޏ+
+c}qY*" )QeS8M(#ApD\roH\fIZNa~p,\.Nw(clsq1B/"ܖ/&-0plpPK'`YbY"(V
+C 0oq>s~%zw
+sˡQ֭VDCKPlME(@MpHɓu')};f7bI صDKU,0K2 l3ֱ ad߲V3FET,i>vɾ"TH6Y#S$E$-yu{hyC\3UnpU,ZgЛi˾{91xKn8%t}O5=[ p!;&HbXd V
+S|p[)>fz`G2362ȲI`+0ϻrlr=~{t$~J~[ۼQ_N;,6i'~*s1 5@##/[> ӓOW᱿\d=g~IDRQ|_tfySGxI`#K<h,%62F2:7]hx&\G-u`^|5/2
+
+BǓIҴp(9\_UV\ `!)@+aS/Θ'4 Iȿt~y|€İ
+}DAǘ\<<
+
+2'.@CAFRTXPM+ȁ¶;`~98n8esun\ ij BHGZ
+)21$;WPTBj,FlBђST1=Wr|jf89:t!;.#HW]##
+
+6A!#O%gUy7~87/e%ǝ<p?_@...NVS
+0; t51h~.6FT=#O n<>旔WT/+-).*,,(ȧ.E%U5 [z SEPe#};n\pŅIrseef
+gMW}'VB@+8[Z]{@ 456_:u MͷZ=x569?>.=v3<K.VWUV
+O9_tN]@G{[띖ԧNk/都4Az5("EAFĂk2Œee aYEGQCd%%q ! ,y{ʛ-.ג >@ERHbl~^.xׯ33R
+QAw
+n~
+K,ՃVb u5T@e6jg~Д&s恦ؼ70b^dVZ;X^IMM ¾$Iwݳq =-f"t&ddnJ ҔN92XO$Ȧ;RݼrN0CM
+m3a|[oj1&lJ
+/;✗o\ccn>ZgU Ҕk<|rgio
+kH )-a[Y/9/U-͌)D15-=pSb9{ 6eRJvA)%Mi "Qcњ+Y/oE?g5+͛cb:3a2bv* M)l:r t"I BNe'?|NW/[hmn>|
+Rcw0(M{:8
+)d2 -sݴؙۏ)›RҔ kPH6K RH^+
+spX7EM)ALf_P{
+R„O .KYz>0f?2.kc(M$O;do=ydX
+ 8
+C6!+!;aI-`-!t6{=B.mІAeKMInJt4&2~GPtrnI D6@y_$'9:C&%<v'5?
+Bd0d#mO{ج"#2?QZQ#(:%CAx>u֕]=i2I0=(:9IO  aH]h2-Q 8 0R[BN9w~4![0J-0*)q5 8
+!!)M3V&EfbtAD6@y_$'9:C&%<L5 2!kD \}b"
+tn2IMW;ůiȒ [cl?  pYECfmۏ!dc_)d&EٚAƅIXmuWo=|! |ABz3Wh2wȚ
+rR< :LV͗@20&D~UX!N wg2h>JG2{7H %F$(NٹaY4 M&Dɚ&e
+hMf/Zqn<xE$d@#d$#S+;gČҚ.ـ ?5d"dTK['6L
+KT
+EbH$Lv>)jUɴP2}2`Ʀd *bi?$P_Q7];t`z" )Y Wl]TQG$ɀf?PMO^={lu.gLAtT%3 cZĽ IΕ3Gm] %3Va*D:!L˧ݲffYd,
+ B$뗊[Pw&F!dZ*B(Y3$xPoD䘝V,ELg8IU2X4I+n+/Ja,L'iu<>A2C%+q~FOgGTye/ `-adjM ~ ܵ{ޠd_C2~2lʌ.?vݧM{P h{2.;j2clڭrISGO$~df-]eӗo?~
+ђi:#Đ M)4?46%[P!lK!gf,B$3W̐B]:
+H_$ٻ'LX=?̟Iɀ7IV97P.$KTd`6c҂GWOߺrQ$=[2Q /d%o^IM;gȁnNH41ɪ+K>yqr'ڪ%%d߿~|}򉽛?l Pch`翺wfɀ.8݋voX:cPۘ3$0ɪ*>sKɀ&CC}mUyQ\xZ_WGEd[w]4uP`Ӻkxy9$31~giՉkN"%Z A0tZZ)
+p=YW&Yt<$A201Y>WQ)e&ߒYul*+SB,MJ"9GmO>{iΗoH%KQH$;G @2/Y;& \$Udq2T̊$ky8}qR7?Xٓd&]u J+ 8M6p9[R<|[PdGVֶN=0{}'3TRYdW6:?||ǯߑ 8Ooظ69~ޫb&Y+~lw5t쌥vxe~qEu-:}]G/y񡨢
+ɀ dG>~!yyEUH$kF t3uoe Md-H) $ӵY? Lf't )IVdo2g&DTi2u2$N%;"7+wPDPdH's'RE
+IC%㣙d] h245{Td`&So_r8=.:<@ԛ+(ɀcd F2$E{rd 1~d_;}`۪yBY!bLVYZ[WΝ4$G2Ȕ+I[bL9 ɀ&&Yueɧ72Nۼbz:Z[D2Ę׏_>wYѹm$j LW.߳qq!EVW翼{ KgսS{$zdUE^ܹpt%Cd@(Gv[<-į
+ɀ&r,m:q)}=]$C2hIjJYLTɀ"c2}.SR$L2g3|d`SB,MJ" (k,E!dHt57Y<Y'KH,Pĕ+,:^L pڮcSɰ X4#YoQ@xt7|d9/K8dJɀddaW'<s;W+~ɬH.Ojہg.%~#̞$5iʭO]}]PZd2'#'Ήݒzۂ$.w9`Ą+6;ͧj$v<йGg-ߴ?~d9 7s=/{_$k@2`7MNݽtc/E2`?cCB/Y;/>UT!L/du;<ɀ dZc.Zp<=>ZdmBOSITk"N#S5ZɀdL2LdreH;(R"UHB$.IN$M$ ifTd`f%"dRHd`q$!ɒLH4JɀSo_r8=.:<@ɀ*cd F2$E{rd 1~d_;}`۪yBY!bLVYZ[WΝ4$G2Ȕ+I[bL9 ɀ&&Yueɧ72Nۼbz:Z[D2Ę׏_>wYѹm$j LW.߳qq!EVW翼{ KgսS{$zdUE^ܹpt%Cd@(Gv[<-į
+ɀ&r,m:q)}=]$Yǐ $aR"C2ȘLԨ2 ɀ&SB,MJ" (k,E!dHt!X\dr8ɀ? (C28$C28$C28$C28$Sp|DJ8ʝ܉\R5wc:
+c e0܋ar{.pJQ}~5^|~x>8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&kځ`1['dAMV& g2X¶ɚuLfb2a2:ЈW4&6'3<: 0oUDTt:Y6AUQ&s0=:8˱L&&+'+`pqӼI <vA|Ar\E!uIٿ l\z- h%$g14Y=cU>l{N^%'AM5hc%Gu23`NfZa#/ݸͧoS2 ڬ}Ig9c٦gn=KLdddj4n{dadeɼbswޥ~e2hrbdk6;fvC>I,ɠɜ|| v½d?~149+&dfd<778/>|f2vNeߓuh;Y%u2ە^2t9YH_&CyG c
+Wd)o<o#ziX^kd!L}HI|vMfնQuWvE5&kq`hx2ɠ'oĸgl^>sTvkTМN6>04"2:)ɠ#w;eŬ}hLf0yxu8aުXul&&9Gw4{L_&5+*g"dWAu96ޔdЦL2ً{o 3G̩;\42x҂5;]ydГ;ٷV=Y)u[t2y]ǯ>|ɠ%o^ܿx$,x~=kiOVJ݆NYnkӳ :򛬬S&s,]jV݇M]~dd2hd/ɶS'3Y=O[aO|T'33X7kmzt7M`2dGhOVξkFm{l3%d|g2z
+5=jގKLe2v2d}FZ;qR2oKLVLb&}z?)04Y9:9A_B/&6&7geXdߘ zg~xŇL]MV©l|&#fd~s+d2Xɚ2dO֡_@ s
+ٵZ6=GL_qOߦd0tN6.>g\󙬨}Ig9c٦gn=KLdУN=#%٭37-1WF]K
+5=jގKLe2˛,51ջ]
+2wѳVl9xNܻԯL]}M}w-+fLV&Ɋ)UħA['e&69Gw4{L_&5+*w2'e2O߱a8s_u/˸s/e^WuT^ک Lpݮ3^ISieZ_]ۍXXn%[LkRtv1ELŗd|s??.y?gu&eE
+(%R_Ҩqd\b_eF4nD%K"QT_iJȘ\,Yg2vMNdH<%̈#Rڏ,$*
+bjxr3'2Ą˥b#fdt6O!۱uM;O}5uOhttq^Vjj7L]'6%X^щS-JeEyYiIqANfjBt\^K6i@cr\=AؤoWX7
+?o3ec2@/N֡ mNw
+,mé) 10D,ćl$[{/){*"cވ3II&)1!n^UNÅvlDF2.eAa{(
+0
+q
+/GS0 gs
+613 0 0 588 94 7 cm
+/Im0 Do
+Q
+ endstream endobj 56 0 obj <</CS 11 0 R/I false/K false/S/Transparency/Type/Group>> endobj 57 0 obj <</BitsPerComponent 8/ColorSpace/DeviceGray/DecodeParms<</BitsPerComponent 4/Colors 1/Columns 613>>/Filter/FlateDecode/Height 588/Intent/RelativeColorimetric/Length 26318/Name/X/Subtype/Image/Type/XObject/Width 613>>stream
+Hy8V9}cc_"%2QYҌ[3"RdIE&ґd9Xtu;gܹJ_9<$=QH @&o?MGf2[VC9FSm U0$]-[ne```ddq; [BȦ|z@^ۘ1,º`n54  e ~1cl\<ޕ g\\l,X E5hhP> 
+/ ($,"*&&&p**"",$(]Ӡhhg((Qcae~ mW? //+#-)!.&"$Ta)}# 
+~IHTvkhjiEGG[[KS] SE '/+-!.* LdgEzB4 ILT\RFSMSGb޵XYY0751ڭWQR8X̫<[ߋg9ba0>A(U ]M-zJA.Nl171Rǫ(HQ=3T b1aXa aۥUT5u ,my|}x@PPp218((#^n.{-L u4TU%Dy=CM11,|B2Jx }#s+}n8Ȩظsk)"ӡ!Ǽ=]m,͌hxeI1a~^g [ќ}]PDW@d2^S9w>)9%JZՌ̕iWRSNL ;|POKU' =sDPjòrp I)A9BDD'&_JȺ{Eeca݂۷r;{h
+NFBL0gf_4Ő9"&ۡkhO
+pc
+򰳠1⡌JT^YyP1pF{irb||ltttx$MM@jQ=buOfυsoeW
+C%FoZmm,N:Hx`V 3<ʳ,l|b2Pٸť4wƦ
+F^Y
+F{D&e:q
+XTQm}[[Y$u5UE9i)ļy^bcߧgfVT64C &H3
+ e@PpHXDdtlBRJǬO_jj#
+mg}7j,2
+*vW̡" @UdH~rwq4{sO qWC]]uu{?1wv{1su]sG
+7d$DE o]!S鎊:B[W7 )9ElTgv(?~lD6T| v@jݑt?Ɂu 0J!ɛzOQޤWw3K`T ;88DD6a*Krž 6BM%-).zMH
+K|<<Gt0muM=$4['7O`XT|rznqEMC[<z5P(Џώw7Wd&>5b&.GڬY)o^T =Pc )d-ϓC YBTWV"' llv"7%
+JwzM]{FŧdRی&mkv)|<'9*t1;1vEkJsa %5}SFlwkX=4N0}-Y)q!7'XX 3 ˹sm\
+x 0^,,L0[􉙙!kHHCvkm8u&$<:~FNQ fkkk+|4'5 7[3]5829d(ۄC7/*k UM=PC2vzIFˁ=Ԉ2R"(/k֟/} ӆSC8
+{F^э-/r,7=!:Q2i$=WQAm[_X
+reLhk"f4U p>{>vJӪƮXlHosUAݫ>$-e(cb,̍v^i%Mc+Ȼ-}c3U;Xn@0MIbg]']^GgLVinc #>f2յVeahoKua`o+cM%i^, e<tcRA+ [_~F56?34'?13= )9X}Obn&LTjQC7$2AvqMK2(sF ogKC E)a a#$n@v
+>Ƒ15(+9&<Q{ #Ui1A^(c,ߙH:3v.^A1
+[I &P͌@/'6Fq Jȫ;z K/jc 4cSM/x 1&+!̇vQ~gb3XrpC5U0q y ё+O ?h&/!Pl\r<b֍-j(K
+=~ȒbLnJbv41;iO:֕6Wņx8Ubc7\b*CcRs+{Q-/+I>yn&QNcqEaF4w'04e*rScBvȊ3N̍ruLm^S3:Cc`lbEivJLYof b<?6Bۙ<b]{Lm\\Ke#=9)7/5&D8vXH+ilN]]=23O7fbV*1F{13QHةclyIY5mTe/:lm$ZC?,5\|]K|TR5<=OY[x3^[t㒿#HKENBʍ1a+$+Ĭ%κk|\, '&#~`?,wX8GqmeuX[MQVbE_ws elUnPџ7L%ue8~==-eȚAel)FRpdZ[mDIY
+e)Q)!$JTvY 3c33t?s|>z=_.^qiysdM~{-œsa ҎsRrΣꦎ&gK r4PAU9o1&88/pe[P=LE.5$^0'9LL\< CЏK^3`s?=F:rҨ*/G̥ˤԴ(Tg\66MeIA^
+<6e$9eik:z&[
+X9.K +56Ħj<06 Ƕhŗ0<w3*l;rY\Z͟z'e#hb݈>GX&l"\⒲
+v vdY@ږξ241$E8bcJI(9EP9z^vAU#\1TJdxe1*,@e|[Yp>c:j
+2DaΝe)eXx|g?w.9q~-YwaqlL +ھ '׶›e-40%œ#!_%ŎVP^ \s8+Y~t!r0(Zvq2wqR&
+s΄ N'sK_t 1s&FՖ_OҬZFv>sV7u3&Y>w#=|_òDe}<蟚ZW^x3\͂جH
+dmcK~go=}50y^vTr⋉(xeJܖ^Xލlz5A^ƕǽm(?؂|ėtL K/|Zu>bMЇ//H>㳇jD".ģ~iy6G/(˻k[?Ѱ⬫]I*5ݺ=|BVqۏ0,G9Ph ԯpӎGï@Y6}@hzp'1﮶ZY)7}"2)QMKg(f1Bo+2.jB%dns&& =L6w47Ӿ_-
+1޷+d1|Ĥ׽œd˾՗Ag  Y8ۯ4~bbNw,cS,We!lHZ.= i2iyU2aEϡ0G,6{b W9XQ$LALFQC̖vlܭʷhY
+尣n;UW\Å.`g`D(̮ 6ͳ{6ת+Q&\ɖݞAQ)yeumxYh|Q}qm4Ec|!GXFs:
+8.!ǹI=vZk$LȚ 2}sJhYjyYu򠋍*rRE=xL~FHh&Þ!L2! s:qFӆ=#~Y"0\B{LC{:qa&ֶ~Or8,0\,/%*s  M?پ#aWԴʢnV0,e-Y<&
+ρ$% (LWŠzG 8檒C4[2O(
+ȼN {G,k$Fz:n3Ua /Iɭ4v(̑QA4Ud/%RXQT3"!D\s25+\~0e`aZ;y/ofP v5WC=SWM^
+&271;@Ȫh[< >dSc3Îai@&%!
+rV„bp(USlD;XV&-#_HBϰX\Z^mF*Ph|d(،/I,QC@&R)<"Sںl~UgąXꨮxBR^mh=0z>LKLd\ޏ+
+c}qY*" )QeS8M(#ApD\roH\fIZNa~p,\.Nw(clsq1B/"ܖ/&-0plpPK'`YbY"(V
+C 0oq>s~%zw
+sˡQ֭VDCKPlME(@MpHɓu')};f7bI صDKU,0K2 l3ֱ ad߲V3FET,i>vɾ"TH6Y#S$E$-yu{hyC\3UnpU,ZgЛi˾{91xKn8%t}O5=[ p!;&HbXd V
+S|p[)>fz`G2362ȲI`+0ϻrlr=~{t$~J~[ۼQ_N;,6i'~*s1 5@##/[> ӓOW᱿\d=g~IDRQ|_tfySGxI`#K<h,%62F2:7]hx&\G-u`^|5/2
+
+BǓIҴp(9\_UV\ `!)@+aS/Θ'4 Iȿt~y|€İ
+}DAǘ\<<
+
+2'.@CAFRTXPM+ȁ¶;`~98n8esun\ ij BHGZ
+)21$;WPTBj,FlBђST1=Wr|jf89:t!;.#HW]##
+
+6A!#O%gUy7~87/e%ǝ<p?_@...NVS
+0; t51h~.6FT=#O n<>旔WT/+-).*,,(ȧ.E%U5 [z SEPe#};n\pŅIrseef
+gMW}'VB@+8[Z]{@ 456_:u MͷZ=x569?>.=v3<K.VWUV
+O9_tN]@G{[띖ԧNk/都4Az5("EAFĂk2Œee aYEGQCd%%q ! ,y{ʛ-.ג >@ERHbl~^.xׯ33R
+QAw
+n~
+K,ՃVb u5T@e6jg~Д&s恦ؼ70b^dVZ;X^IMM ¾$Iwݳq =-f"t&ddnJ ҔN92XO$Ȧ;RݼrN0CM
+m3a|[oj1&lJ
+/;✗o\ccn>ZgU Ҕk<|rgio
+kH )-a[Y/9/U-͌)D15-=pSb9{ 6eRJvA)%Mi "Qcњ+Y/oE?g5+͛cb:3a2bv* M)l:r t"I BNe'?|NW/[hmn>|
+Rcw0(M{:8
+)d2 -sݴؙۏ)›RҔ kPH6K RH^+
+spX7EM)ALf_P{
+R„O .KYz>0f?2.kc(M$O;do=ydX
+ 8
+C6!+!;aI-`-!t6{=B.mІAeKMInJt4&2~GPtrnI D6@y_$'9:C&%<v'5?
+Bd0d#mO{ج"#2?QZQ#(:%CAx>u֕]=i2I0=(:9IO  aH]h2-Q 8 0R[BN9w~4![0J-0*)q5 8
+!!)M3V&EfbtAD6@y_$'9:C&%<L5 2!kD \}b"
+tn2IMW;ůiȒ [cl?  pYECfmۏ!dc_)d&EٚAƅIXmuWo=|! |ABz3Wh2wȚ
+rR< :LV͗@20&D~UX!N wg2h>JG2{7H %F$(NٹaY4 M&Dɚ&e
+hMf/Zqn<xE$d@#d$#S+;gČҚ.ـ ?5d"dTK['6L
+KT
+EbH$Lv>)jUɴP2}2`Ʀd *bi?$P_Q7];t`z" )Y Wl]TQG$ɀf?PMO^={lu.gLAtT%3 cZĽ IΕ3Gm] %3Va*D:!L˧ݲffYd,
+ B$뗊[Pw&F!dZ*B(Y3$xPoD䘝V,ELg8IU2X4I+n+/Ja,L'iu<>A2C%+q~FOgGTye/ `-adjM ~ ܵ{ޠd_C2~2lʌ.?vݧM{P h{2.;j2clڭrISGO$~df-]eӗo?~
+ђi:#Đ M)4?46%[P!lK!gf,B$3W̐B]:
+H_$ٻ'LX=?̟Iɀ7IV97P.$KTd`6c҂GWOߺrQ$=[2Q /d%o^IM;gȁnNH41ɪ+K>yqr'ڪ%%d߿~|}򉽛?l Pch`翺wfɀ.8݋voX:cPۘ3$0ɪ*>sKɀ&CC}mUyQ\xZ_WGEd[w]4uP`Ӻkxy9$31~giՉkN"%Z A0tZZ)
+p=YW&Yt<$A201Y>WQ)e&ߒYul*+SB,MJ"9GmO>{iΗoH%KQH$;G @2/Y;& \$Udq2T̊$ky8}qR7?Xٓd&]u J+ 8M6p9[R<|[PdGVֶN=0{}'3TRYdW6:?||ǯߑ 8Ooظ69~ޫb&Y+~lw5t쌥vxe~qEu-:}]G/y񡨢
+ɀ dG>~!yyEUH$kF t3uoe Md-H) $ӵY? Lf't )IVdo2g&DTi2u2$N%;"7+wPDPdH's'RE
+IC%㣙d] h245{Td`&So_r8=.:<@ԛ+(ɀcd F2$E{rd 1~d_;}`۪yBY!bLVYZ[WΝ4$G2Ȕ+I[bL9 ɀ&&Yueɧ72Nۼbz:Z[D2Ę׏_>wYѹm$j LW.߳qq!EVW翼{ KgսS{$zdUE^ܹpt%Cd@(Gv[<-į
+ɀ&r,m:q)}=]$C2hIjJYLTɀ"c2}.SR$L2g3|d`SB,MJ" (k,E!dHt57Y<Y'KH,Pĕ+,:^L pڮcSɰ X4#YoQ@xt7|d9/K8dJɀddaW'<s;W+~ɬH.Ojہg.%~#̞$5iʭO]}]PZd2'#'Ήݒzۂ$.w9`Ą+6;ͧj$v<йGg-ߴ?~d9 7s=/{_$k@2`7MNݽtc/E2`?cCB/Y;/>UT!L/du;<ɀ dZc.Zp<=>ZdmBOSITk"N#S5ZɀdL2LdreH;(R"UHB$.IN$M$ ifTd`f%"dRHd`q$!ɒLH4JɀSo_r8=.:<@ɀ*cd F2$E{rd 1~d_;}`۪yBY!bLVYZ[WΝ4$G2Ȕ+I[bL9 ɀ&&Yueɧ72Nۼbz:Z[D2Ę׏_>wYѹm$j LW.߳qq!EVW翼{ KgսS{$zdUE^ܹpt%Cd@(Gv[<-į
+ɀ&r,m:q)}=]$Yǐ $aR"C2ȘLԨ2 ɀ&SB,MJ" (k,E!dHt!X\dr8ɀ? (C28$C28$C28$C28$Sp|DJ8ʝ܉\R5wc:
+c e0܋ar{.pJQ}~5^|~x>8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&8&kځ`1['dAMV& g2X¶ɚuLfb2a2:ЈW4&6'3<: 0oUDTt:Y6AUQ&s0=:8˱L&&+'+`pqӼI <vA|Ar\E!uIٿ l\z- h%$g14Y=cU>l{N^%'AM5hc%Gu23`NfZa#/ݸͧoS2 ڬ}Ig9c٦gn=KLdddj4n{dadeɼbswޥ~e2hrbdk6;fvC>I,ɠɜ|| v½d?~149+&dfd<778/>|f2vNeߓuh;Y%u2ە^2t9YH_&CyG c
+Wd)o<o#ziX^kd!L}HI|vMfնQuWvE5&kq`hx2ɠ'oĸgl^>sTvkTМN6>04"2:)ɠ#w;eŬ}hLf0yxu8aުXul&&9Gw4{L_&5+*g"dWAu96ޔdЦL2ً{o 3G̩;\42x҂5;]ydГ;ٷV=Y)u[t2y]ǯ>|ɠ%o^ܿx$,x~=kiOVJ݆NYnkӳ :򛬬S&s,]jV݇M]~dd2hd/ɶS'3Y=O[aO|T'33X7kmzt7M`2dGhOVξkFm{l3%d|g2z
+5=jގKLe2v2d}FZ;qR2oKLVLb&}z?)04Y9:9A_B/&6&7geXdߘ zg~xŇL]MV©l|&#fd~s+d2Xɚ2dO֡_@ s
+ٵZ6=GL_qOߦd0tN6.>g\󙬨}Ig9c٦gn=KLdУN=#%٭37-1WF]K
+5=jގKLe2˛,51ջ]
+2wѳVl9xNܻԯL]}M}w-+fLV&Ɋ)UħA['e&69Gw4{L_&5+*w2'e2O߱a8s_u/˸s/e^WuT^ک Lpݮ3^ISieZ_]ۍXXn%[LkRtv1ELŗd|s??.y?gu&eE
+(%R_Ҩqd\b_eF4nD%K"QT_iJȘ\,Yg2vMNdH<%̈#Rڏ,$*
+bjxr3'2Ą˥b#fdt6O!۱uM;O}5uOhttq^Vjj7L]'6%X^щS-JeEyYiIqANfjBt\^K6i@cr\=AؤoWX7
+?o3ec2@/N֡ mNw
+,mé) 10D,ćl$[{/){*"cވ3II&)1!n^UNÅvlDF2.eAa{(
+0
+%!PS-Adobe-3.0 %%Creator: Adobe Illustrator(R) 15.0 %%AI8_CreatorVersion: 15.0.2 %%For: (Dustin Rinehart) () %%Title: (Untitled-2) %%CreationDate: 6/25/12 6:52 PM %%Canvassize: 16383 %%BoundingBox: 94 -593 707 -5 %%HiResBoundingBox: 94 -593 707 -5 %%DocumentProcessColors: Cyan Magenta Yellow Black %AI5_FileFormat 11.0 %AI12_BuildNumber: 399 %AI3_ColorUsage: Color %AI7_ImageSettings: 0 %%RGBProcessColor: 0 0 0 ([Registration]) %AI3_Cropmarks: 0 -600 800 0 %AI3_TemplateBox: 400.5 -300.5 400.5 -300.5 %AI3_TileBox: 22 -588 756 -12 %AI3_DocumentPreview: None %AI5_ArtSize: 14400 14400 %AI5_RulerUnits: 0 %AI9_ColorModel: 1 %AI5_ArtFlags: 0 0 0 1 0 0 1 0 0 %AI5_TargetResolution: 800 %AI5_NumLayers: 1 %AI9_OpenToView: -133 17 1.69 1805 1060 18 0 0 -1873 98 0 0 0 1 1 0 1 1 0 1 %AI5_OpenViewLayers: 7 %%PageOrigin:0 -600 %AI7_GridSettings: 72 8 72 8 1 0 0.8 0.8 0.8 0.9 0.9 0.9 %AI9_Flatten: 1 %AI12_CMSettings: 00.MS %%EndComments endstream endobj 76 0 obj <</Length 9743>>stream
+%%BoundingBox: 94 -593 707 -5 %%HiResBoundingBox: 94 -593 707 -5 %AI7_Thumbnail: 128 124 8 %%BeginData: 9614 Hex Bytes %0000330000660000990000CC0033000033330033660033990033CC0033FF %0066000066330066660066990066CC0066FF009900009933009966009999 %0099CC0099FF00CC0000CC3300CC6600CC9900CCCC00CCFF00FF3300FF66 %00FF9900FFCC3300003300333300663300993300CC3300FF333300333333 %3333663333993333CC3333FF3366003366333366663366993366CC3366FF %3399003399333399663399993399CC3399FF33CC0033CC3333CC6633CC99 %33CCCC33CCFF33FF0033FF3333FF6633FF9933FFCC33FFFF660000660033 %6600666600996600CC6600FF6633006633336633666633996633CC6633FF %6666006666336666666666996666CC6666FF669900669933669966669999 %6699CC6699FF66CC0066CC3366CC6666CC9966CCCC66CCFF66FF0066FF33 %66FF6666FF9966FFCC66FFFF9900009900339900669900999900CC9900FF %9933009933339933669933999933CC9933FF996600996633996666996699 %9966CC9966FF9999009999339999669999999999CC9999FF99CC0099CC33 %99CC6699CC9999CCCC99CCFF99FF0099FF3399FF6699FF9999FFCC99FFFF %CC0000CC0033CC0066CC0099CC00CCCC00FFCC3300CC3333CC3366CC3399 %CC33CCCC33FFCC6600CC6633CC6666CC6699CC66CCCC66FFCC9900CC9933 %CC9966CC9999CC99CCCC99FFCCCC00CCCC33CCCC66CCCC99CCCCCCCCCCFF %CCFF00CCFF33CCFF66CCFF99CCFFCCCCFFFFFF0033FF0066FF0099FF00CC %FF3300FF3333FF3366FF3399FF33CCFF33FFFF6600FF6633FF6666FF6699 %FF66CCFF66FFFF9900FF9933FF9966FF9999FF99CCFF99FFFFCC00FFCC33 %FFCC66FFCC99FFCCCCFFCCFFFFFF33FFFF66FFFF99FFFFCC110000001100 %000011111111220000002200000022222222440000004400000044444444 %550000005500000055555555770000007700000077777777880000008800 %000088888888AA000000AA000000AAAAAAAABB000000BB000000BBBBBBBB %DD000000DD000000DDDDDDDDEE000000EE000000EEEEEEEE0000000000FF %00FF0000FFFFFF0000FF00FFFFFF00FFFFFF %524C45FDBCFFA8FFFFFFA8FD78FFA8FD0BFFA8FD6EFFA8FFA8FD0FFFA8FF %A8FFA8FDE7FFA8FD19FFA8FDE1FFA8FFA8FD07FFA8FFFD04A87DA87DFD04 %A8FD0BFFA8FD66FFFD05A8FFA8FFA8FFFD07A8FD64FFA8FD07FFFD05A8FD %0BFFA8FFFD05A8FD07FFA8FD60FFA8A8A8FD13FFFD04A8FD5DFFA8FFFFFF %A8FFA8A87DA8A8FFA8FD13FFA8FFA8A8A8FFFFFFA8FFA8FD54FFA8FD06FF %A8A8FD1BFFA8A8A8FD05FFA8FD52FFA8FFA8FFFFFFA8A8A8FFCBFD1BFFA8 %A8A8FFA8FFFFFFA8FD50FFA8FD05FFA8A8A8FD21FFA8FD05FFA8FD4EFFA8 %FFA8FFA8FFA87DA8FFCBFD1FFFA8A8A8FFA8FFA8A8A8FD4EFFA9FFFFFFA8 %A8A8FD24FFA8A8FFFFFFA8FD4EFFA8FFA8FFA87D7DFD25FFA8A8A8FFA8FF %A8FD4CFFA8FFAFFFFFA87DFD27FFA8A8A8FFFFFFA8FD4AFFA8A8A8FFA8A8 %52A8FD28FF7DA8A8FFA8A8A8FD4AFFA8FFA8FF7D7DA8FD28FFA87DFFA8FF %A8FD4AFFA8A9A8FFA87D53FD29FFA87DA8FFA8A8A8FD38FFCAFFFFFFCAFF %FFFFCAFFFFFFCAFFFFFFA8FFA8FFA8A87D7EA8FD29FF77A8A8FFA8A8A8FD %2CFFA8FFFFFFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %FD05A8A9A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFFD07A8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FD12FF7DA87DA87DA87DA8 %7DA87DA87DA87DA87DA87DA87DA87DA87DA8A8FFA8A87DA87DA87DA87DA8 %7DA87DA87DA87DA87DA87DA87EA87DA87EA87DA87EA87DA87EA87DA87EA8 %7DA87EA87DFD04A8FFA8A87DA87EA87DA87EA87DA87EA87DA87EA87DA87E %A87DA8A8A884A8A8FFA8FD10FFA8FFA87D7DA87D7D7DA87D7D7DA87D7D7D %A87D7D7DA87D7D7DA87D7DFD04A8FD057DA87D7D7DA87D7D7DA87D7D7DA8 %7D7D7DA87D7D7DA87D7D7DA87D7D7DA87D7D7DA87D7D7DA8FD057DA8A8A9 %A87D7DA87D7D7DA87D7D7DA87D7D7DA87D7D7DA87D7D7D847D7D7DFFFFFF %A8FD12FF7D7D7DA87D847DA87D847DA87D847DA87D847DA87D847DA87DA8 %A8FFA87D7DA87D847DA87D847DA87D847DA87D847DA87D847DA87D847DA8 %7D847DA87D847DA87D847DA87D847DA87D847D7DA8A9A8A87D7D7DA87D84 %7DA87D847DA87D847DA87D847DA87D847DA87DA8FFFFA8FD0EFFA8FFFFFF %A85352FD177DFD04A852FD2D7D52A8A8A87EFD1A7DA8FFFFA8FFA8FD0EFF %7D7D5252FD177DA8A8FFFD317DA9A8A8FD1A7D527DA8FD0AFFA8FFFFFFA8 %7DFD0452F852527D527D527D527D527D527D527D527D527D527D527DA8A8 %A87D5259527D527D527D527D527D527D527D527D527D527D527D527D527D %527D527D527D527D527D527D527D527D527D527DA8A87D7D527D527D527D %527D527D527D527D527D527D527D527D527D525352537DFFA8FFA8FD08FF %A87D527D597D5252527D597D7D7D597D7D7D597D7D7D597D7D7D59FD047D %A8A8A8FD047D597D7D7D597D7D7D597D7D7D597D7D7D597D7D7D597D7D7D %597D7D7D597D7D7D597D7D7D597D7D7D59FD047DA8A8A8537D7D7D597D7D %7D597D7D7D597D7D7D597D7D7D59FD057D597D527D53A8FD07FFA8FFFFFF %A8FFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFA8 %7DA87DA8A8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FF %FFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFA8A87DA87DA8A8FFFFFF %A8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFA8FFA8FD %26FFFD05A8FD2FFFFD05A8FD21FFA8FD04FFA8FD20FFA87DA87DA8A8FD2D %FFA8A87DA87DA8FD20FFA8FD26FFA8A87DA8A8FD2FFFA8A87DA8A8FD21FF %A8FD04FFA8FD1FFFCAA97D847DA8A8FD2DFFA8A87D847DFD21FFA8A8A8FD %04FFA8FD1FFFA8A87DA8A8FD2FFFA8A87DA8FD22FFA8FD04FFA8FD21FF7D %7D7DA8A8FD2DFFA8FD047DA8FD20FFA8A8FD05FFA8FD1FFFA87D7DA852A8 %FD2DFF7D52A87D7D27FD21FFA8FD04FFA8FD20FF5252A87D5352FD2DFF28 %7D7D847D277DFD1FFFA8FD06FFA8FD1FFF52527D7D5252FD2CFFA852527D %7D7D277EFD20FFA8FD04FFA8FD20FF7D2752272752FD2DFFFD0652A8FD1F %FFA8FD06FFCBFD20FFA8275252FD2FFF7D7D527D7EFD21FFA8FD04FFA8FD %23FFA8FD31FFA8A8A8FD21FFA8FFA8FD04FFA8FD79FFA8FD04FFA8FD79FF %A8FD06FFA8FD7EFFA8A8A8FD77FFA8FD06FFA8FD7FFFCBA8FD77FFA8FD06 %FFA8FD79FFA8FD04FFA8FD79FFA8FD06FFA8FD26FFAF84FD56FFA8FD26FF %840D363B84A8FD4DFFA8FD06FFA8FD25FF2F300D603B6084FD54FFA8FD23 %FFA8360D2F0D363B3B3BAEFD4AFFA8FD06FFA8FD25FF2F362F362F605F60 %5F8AAEFD50FFA8FD23FFA8360D360D360D5A5F605F5F5FAFFD46FFA8FD06 %FFA8FD25FF2F3635362F362F605F8A5F5F5F8AAFFD4AFFA8FFA8FD23FFA8 %360D360D360D360DFD075F84FD43FFA8FD06FFA8FD25FF35363536353635 %3635605F8A5F8A5F8A5FAFFD49FFA8FD23FFA8360D3635360D3635360D60 %5F835F8A5F835F8AA8FD3FFFA8FD06FFA8FD25FF35363536353635363536 %3560838A5F8A838A5F8A83FD3DFFA8FD08FFA8FD23FFA8360D360D363536 %133635360D605F835F895F835F895F8AA8FD3AFFA8A8FD06FFA8FD25FF36 %363536363635363636353C3660838A838A838A838A838AAEFD39FFA8FD08 %FFA8FD23FFA8363536353635363536353635363560838983898389838983 %8983AEAEFD36FFA8A8FD2CFF35363636353C3636353C3636353C3660838A %838A83AE838A83AE83AEAEFD35FFA8FD06FFCAFFA8FD23FFA83613363536 %35363536353635363536356083898389838983898389838983FD35FFA8FD %2CFF353C363C3560363C3660363C3660363C368A89AE83AE89AE83AE89AE %89AE89AEAEFD31FFA8FD08FFA8FD23FFA93635363536353C3536353C3536 %353C353C3584838983AD83AD83AD83AD83AD83ADA7FD31FFA8FD06FFA8FD %25FF363C353C363C3560363C3560363C3560363C368AADAD83AE89AD89AE %ADAD89AEADADADCFFD2EFFA8FD08FFA8FD23FFA83C3536353C3536353C35 %3C353C353C353C353C358483AD83AD83AD83AD83AD83AD83AD89C9C3FD2C %FFA8A8FD2CFF363C366036603660366036603C6036603C603C603C8AADAE %ADAEADAEADAEADAEADAEADC9C2C2C2CFFD2AFFA8FD08FFA8FD23FFA83C35 %3C353C353C353C353C353C363C3560363C35603684FD04ADA7FD06ADC9BC %C3C2C2C2C9CAFD28FFA8A8FD2CFF3660363C36603C6036603C6036603C60 %3C603C603C603C8AADAEADADADAEADADADC9C2C3C2C3C2C3C2C9C9FD27FF %A8FD08FFA8FD23FFA83C353C353C353C353C353C353C3560353C35603B3C %35603C8AFD04ADA7ADADC9BCFD0AC2C9CAFD24FFA8A8FD2CFF3C603C603C %603C603C603C603C603C603C603C603C603C603C8AADCEADCFADC9C2C3C2 %C3C2C9C2C9C2C9C2C9C2C9C9FD23FFA8FD08FFA8FD23FFAF3C3560363C35 %603C3C35603C3C3B603C603B603C603B603C603C8AADADADC9C2C2C2C3C2 %C2C2C9C2C8C2C9C2C8C2C8C8CFFD22FFA8FD2CFF3C603C603C603C603C60 %3C603C603C603C603C663C603C663C603C8AADC9C2C3C2C3C2C9C2C9C2C9 %C2C9C2C9C8C9C8C9C8CFFD20FFA8FD08FFA8FD23FFA860353C35603B3C35 %603C3C3B603C603B603C603B603C603B603C3C3CA7FD07C2C8C2C8C2C8C2 %C8C2C8C2C8C2C8C9FD20FFA8A8FD2CFF3C603C603C603C663C603C663C66 %3C663C663C6660663C6660663CA194C2C2C9C2C9C2C9C2C9C2C9C8C9C8C9 %C8C9C8C9C8CFFD20FFA8FD08FFA8FD23FFA8603C603B603C603B603C603C %603C603C663C603C663C603C663C7D93B693C2C2C9C2C8C2C9C2C8C2C9C2 %C8C2C9C8C8C8CEFD21FFA8A8FD2CFF3C603C603C663C603C663C663C663C %663C6660663C6660663CA194B693BC93C2C2C9C2C9C2C9C8C9C8C9C8C9C8 %C8C9CFFD22FFA8FD08FFA8FD23FFA8603B603C603B603C603B603C603B66 %3C603C663C603C663C7D8D94939493B693C2C2C8C2C8C2C8C2C8C2C8C8C9 %C9FD24FFA8A8FD2CFF3C6660663C6660663C6660663C6660666066606660 %67667D94BC94BC94BC94BC93C2C8C9C8C9C8C9C8C8C8CFFD26FFA8FD08FF %A8FD23FFAF603C663C603C663C603C663C663C663C663C663C663C7DFD06 %9493B693B593C2C8C8C2C8C8C8C9FD28FFA8A8FD2CFF60663C6660663C66 %60663C6660663C6666666066667D949B949494BC94BC93BC93B693C2C8C8 %C8CECFFD29FFA8FD08FFA8FD23FFA8663C603C663C663C663C663C663C66 %3C663C66427DFD06949394939493B693B58CC2C9CFFD2BFFA8A8FD2CFF60 %666066606660676666606766666667666666A2949594BD949A94BC94BC93 %BC93B693BCCAFD2DFFA8FD08FFA8FD23FFAE663C663C663C663C663C663C %6660663C66427D8E95FD069493B6939493B593C3FD2FFFA8A8FD2CFF6066 %66666066666660FD08667E9495949B949494BC949A94BC93BCA1FD31FFA8 %FD08FFA8FD23FFAE663C663C663C663C663C6660663C66427D6A95709470 %FD079493C3CAFD32FFA8A8FD2CFF6667666666676666666766666667667E %949B959B949B949B94BD94949BFD35FFA8FD08FFA8FD23FFAF663C666666 %3CFD0766427E9495709594959495949493BDA8FD36FFA8A8FD2CFF666666 %676666666766666667667E71959595949B9495949494CAFD38FFA8FD08FF %A8FD23FFAE6642663C66666642666666427E6B957095709570957094A1FD %3AFFA8A8FD2CFF66666667666766676667667E9595719B959B949594C4CB %FD3BFFA8FD08FFA8FD23FFAEFD0A667E6B957195709570959BFD3EFFA8A8 %FD2CFF6667666666676666667E7195719B7195709CCAFD3FFFA8FD08FFA8 %FD23FFAF66426666664266667E6B957171709571CAFD41FFA8A8FD2CFF66 %6766676667667E719C7195719CA2FD43FFA8FD08FFA8FD23FFAF66426666 %66427E6BFD0471A2CAFD44FFA8A8FD06FFA8FD25FF66666667667E6B9671 %729CFD47FFA8FD08FFA8FD23FFAE666666427E6B716B9CA8FD48FFA8A8FD %06FFA8FD25FF6666667E6C7278CBFD4AFFA8FD08FFA8FD24FF8B427E6B78 %A2FD4CFFA8A8FD2CFFAFA99CA3FD4EFFA8FD06FFCAFFA8FD25FFCBFD51FF %A8FD7EFFA8FD08FFA8FD77FFA8FD06FFA8FD77FFA8FD08FFA8FD76FFA8A8 %FD06FFA8FD77FFA8FD08FFA8FD77FFA8FD06FFA8FD77FFA8FD06FFA8FFA8 %FD77FFA8FD06FFA8FD77FFA8FD06FFA8FD79FFA8FD06FFA8FD77FFA8FD08 %FFFD79A8FD08FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8FFA8FFA8FDFCFFFD87FFFF %%EndData endstream endobj 77 0 obj <</Length 65536>>stream
+%AI12_CompressedDataxiF( ?}p}cFa=".W^'n(nJ3ݤn/c{~ʬ
+>fc.l
+&x|ik1^ǯ뛫o_`IUu{ xx-\yzy \z{Mn6ow{GyJ̇n2Ҝ(gwa.8%)Q Ouя,ٌz5'<ެ~0|_Uas7K<5/{z-<>tX?WU<1^$by5etC%=BE2JXޱ/IQ 7f6~ww}vGCo%f0՚3hKx|}5#Bn6og5}?7`~^cG|#|79-/k^)_p^>^?_ufz+{znZl{+?wwru'KX#׷v@
+6f
+ X':S:Z
+ªD8
++#YswS|%P0Ua9) Jm-fE ,
+H~+M-G+  1=U07!"$ Ĵdf0Rn)FSI1-r#B22-26oN[h? [ɭsLS47msn3n2_z䧲VؖۖqKHS>CW. DeE/"UQfΉbsU^x!]Q/a/e}#L3HH$/˲.P4. ߙcdP7v
+j ) {I^Eڀ)j1ln
+kVG
+K+2b,E0͢`>'y
+ZĚ_3K\](l
+_j
+"=EUx0TJB"!堑D1[浜.Xr׶9p++OLu:)S1
+zFg<%29ЄIv3&FcCMBH 򂌛I6yv i+,].C)?R><QyBEПx¾s2?!崑5jŕ3V֤5PP2by+[Ul niUCmբS7ӕ:(GZԩCI TTND&d =:ْ--m6ŜAw;[Zeu%3ݭn7âtYgwߔ%uw6R(ODeB)F:K
+zƉqfG۔'AZgOs: Jܧ Oiq
+8:?NYtF%jTwIs2/#}2Pfl%cP!3%̌2L(F)H+3!YfF*"&N7c5oF1LN"a4٫ )-FfA5W(1%&ώ)jĶe\<DSGEcV41ш9NOl5qF&$hiG#Cq
+[
+nW sq`&}o
+>G"Qhd_2<A! :[:ZzBidTn ϧV ֤!ѝ̀F@=KjP>`]P^d-`
+яpNtIg%e'鴒44d&QIBKg'1CPZpʼV%l,!ՠ%M{IKŤf"%(o'KeFY3kZ" S/m,ng:n zI$U1 ԇu\:x15}:upwTU}%Ϝv$O4,FǢa-tǚ(KY+]ljHR^hÌ>,10^5˪mN(Ͽ)j} |C6Hq4Gx;a5]E89QGʔpb
+vi?JE
+)ˑZQZgj4f EQilC9|_Ufo3.yҊf5%7yOxa4p y^>"T։:Y0c3kܬmʎ%)Ri:b_p余[i S;ǐnk|Mƥ8yKn f%V(\%uUN%(Z$;ڢ.R/n*SWغgLq`ӎ{IYsnv*
+:tʎ7t3nFHI7#fʲ}ڹz$p:7lsat<sq ez{?
+ *B`X8H "EEB~S!;C`Q,wq7uF". j!9op&PE=!44h_JؓId$fغ?Ł8
+6 '*ȝ;bG cf#?3pCp>b
+㴁1 7s(Vރ %^ `}m!T#vƋA'2QA\n ƱA\<#ZD;3Ma2A#+L+LW)6PQ`)џ4槅üK
+P{|KU]~%vUTw[:Cnkֲxꑿ+?uI,%ʦ'q:}
+eB׳^3Ɣ~BGH?iNxj~bcwFӌU+@"4b`m1ǧDO$8m/S6Uc]p~Mb Aa[hq䞰}Bja*I 8H"K1/ |J#7}B5{
+S;օOV׉ԞGzHf1;0a'6D1Q^9 #x F^o;WxsűSH8'%ۧ9eɌf
+pWG.i,4J2Z9$Y9}+ cS}s]RBW qT( L_`*O-
+P@*W$
+WTbF.<[-znn!u D{mhf jƶ&WmiOyoY )hjrzfBjYQY]=ˬ(\HlRSUj)}St*%sZY1ųBD5QO9=Y9[~T"ig7 [ſ1W}Bu`j;H]4l톦smc螶^쯩ꨨ!:,Aᢼ.ʷc4vDy/5Z(2EdS 2"29SR|Ɣ ɣfђS&9Ij&% c6n3i_fh\UeM/rT})'_R/s4!8]f9'f:47+oEwH3+ָQ9\#AGܒ7<U]PFg9rG#0jxȇSW?7`$LqrY5z?E;Uc׶dt.ZEyJ$(1vY$E9ݜ/6"ݖXSNR"1)5y:2E9X;cQ
+V'$)bo~sKͯ.M 1r5esP&&v$\QYGTvE-"Ek=#JԤ9樂d]@|Ps?s__ʎ :Ɖ$_Zrq٥i,HaNTrVq̢B3֋1#ZxFoshm]թl$;VSJ U1шTxc& jmm`ꦂ,.x…QM?Ax'gWqzru'gWqzru'uzw.j$-59iĹ-ZaIѪ)Q;)tmh!s$haꑬ):.a_qA]aUZ]u/ۉ­ND-ÓqwSq8P-&XLy+UREfl1qIW2~U2b?UT9?9IΉEa֌xVmX[ՙUr8" Թ"zd
+hܲ}m_[B.C C>?Ua$m
+ } ; 1ZgVv𸺃a; +v|7ӫLbft%] :ڢlN'dE2g1;"c
+Sx֙r_;) /
+ʓh=z%dFd2%߾zd&Y?!ܑH#) ʂ]L3E'kS>kb<oJB5L A \'?q%!!8I2ZoDXqMJ.bH1gh) Q1Vc=+ԳēCܙ8Qg3C)IGJ(>`aN\1Ul xFs)ʬvT? tHS6pҴ (hLuUdJ9a]OLME(wJN-jSzEm-iS//ދIʥ}5Yb#BX҆ ff7'gu;Z󺝠n'HvJND2a$5EB@`,PZhihfP^(p4mdY3($i h DFyVІ;IhV#IG6+=sA[WϠ{z:|oķnߍxu(AAMu$zad??pn$t\/zI^$ʧ[SPZ'=ɫZՁzn!k'e!G${n8|6>I\%vIٚ
+#&;TtTluP~vBNJN׊йBYN@e,|WG$}񔚄)(}7`fL{Z/
+F0sDʉ8%h 6+"s ]'X/m3'.X;?O¤-8?VQRp+N$I3g]mui|?и͟
+*Aٜ.rHen}؋@3AaSCIVT nPkb00B=o8>0E~f!P&=aP
+6})108"0W6!1Nr+Xv-4AZg \i&VW8t'pJQUJ*Ŷ|(TjSUGTft\բM@|EnKds%⛽$^ij$Aq6u?0ݬ1 k8
+/4UjZ\1;ς- {k!S"(O7lf{F =5-Or+_Yhn
+-"C13ѣd|]kߘl$q9K[pGFt0"-JPB4EޯP*iia-QF:f-#b6 enANibE㛌3 `PQ:3aF1{?U>ǾN9UjArd6B M)NcʣB!g[SUd28醫=*0ʰatpn/.2Rr.Y਒)2ÌnbVO&ŜWX:gfPxL\2'Nd0JLLJy gp
+6_VފڳbБa)”M0 @(BCXQl|ʹ©
+ J] ܚGұU 9(mif8(4m4ϴ 4bQ[L4F-f-nSM`ӛ>CF<4nFHq7#f$p5"FE2LBWq
+QcSTvyvhn83[E%1+Ȭ);%ہ5 Dm"3VhvGrb ;pT`.a!6,)EpW?5 t51q"ɌCN[) RReRl2).U{t~fu:IQY)J%ZWD7Q2S-T89KF]iT}{IjV$f㲒'~EǟʜM19 [G\T$fY_ 6BI =!QxJB]\UlOIa=O&LP&bDxbG`g )]2zV]<V2c݅JlUNDm>9[-8u$UNQ/(
+KU+Vjig˶7iZPԔb*
+d)tɄ*E6DiwD5)k=kB oCV4/:ҔgKKǹtխƮFNX䛾^Uv#$kTAy5?`?\5ɝ;h9M*7-\Gsq6sq:X:K+no&jpa0 5e \E6r] sUv=o ;6خ@
+"C!2] `84҇.$T
+ڦqMᚪk3 ƗiHyfS juKF;{dA7d)Y-BFBR9`#NO1&(N0Lnsl@VBgX%;}Q ҽdy/F.)4szc^P=)b?</OgyʋH`5-wMz?~ ?K(ef^zWOO3jf;P==|wL:.|C7eA-rF` xQVEfGkXxd ,ߙNN6@{c?iӁ݃#fNI7gfh|+>Xyo4MS۪B9` |L|U[fo˸ v|5H5n Yo
+Xmf~`裍<B"o&8#V0%6l3(l8WYQENg'80ҐmqRx};@FV'n-dgW>wq,M#P\eeL<}~`겕VDH]җQ^Df O`zsq!hm"W7l" xpMM6 ʐ
+~1D#$|@ ،NFCu
+aiie=p0* s: ^3NhF恇P-!0|*g谫GSHTr눯]\QjUmJXX僔^PaezhVԝR
+ZV;);(,SN+k#f/*LQhdM+I@"`-#w݇4]  QAQQs
+( 0
+;?Hrp_2YD.9jL~s?<|vtzvibw-vegoAAAAdP@bU+KH"SVJHs^-`)1틭| ~H:rE\xp9H6bg/tt
+'NIA!DP"e |Hؕh\RՑvYc`oEKu{V2Ϛ;2+;D,ry{Y~pQ9~ù^48a0ޕn ͷE LL`+#O<ùb^@c^
+Е )<DQ\$Ȉ,"o7:@¤< 9-) 2e_Ќ+.A*Hlzri6d,VYCZHֹbP f.wQuh:_4vQ/_z|O,TTZJT>6z%,|@a
+Iwb.iOj.e8SB퐿)" d^wʾ̃S
+\ZwYuS[x=w&&K@:q;y_9[ZNˬ [ݿNJy<ΰ4\ ;If8fx+q
+go.n{Sk4yx9u9NGg/ř4IM63GNK\Ϝ9ΠjId)3=igɞ)2_4mΝ\%:N(MCRm`ɝwjivL/a%^3;w
+69*SV R$_؈2
+V.Óv'ɵĆ!!`
+Cp0D
+M{{ilMqw&[sWor?7{no{츇8 A`}η3+iw(/̋?~h"UYeWI d5JHVBN%8)9lqS_IIuI5;
+[_̄(Lrodb3]Zg#.9{/7kyTùtVžkU 7"7zgyTFvqrU*77L%>:RѹΏC,sj:gNVza>V[\:U=yԡyv:UynUj{m.U,J2x5$()+lr<pLI{gٰw]}40yJ %tC G*Aׯj'srO'ѾFt}h@h_hMhi_Evpnvpn[ /P@apK s8-gB] 8u߶]u_N92rn;ӘH7;igB˘<vnG)N'NCm\֞sP5h!CMנ/w9^r
+ɏBB:ܨ%MMYDYI*4r n:.LUNۂ^I Wug<yJr
+Ӟ9 *[Br<y>><Sؤ:mmBq<1XmGXPV i9FY8{4dqUq!xmׅ$lmFi͢-XIRh <KrR\٪۶`S:.Vwps&(r%U F 2}9 =b4YvpseDfI Q.Z< 0q^Ѫ<siqw3 -J<[)lXpgMքr>dyI}UR.*QbMjk@cӊ zS>DL(Xe55NeTwbx6*=3bx@Eh|fBLi]!F]hȡYrHk2S;-`>fwk۾923I&<N?R̳
+Cn^<G]e&7UTΦ.p0Щ"4Y搊WR5ww)%G#Й v5>XgFwOwYSzE\AaߛK-lזb戟3m0
+=iꪎ pK#@.qrq*VJn'!3'ZNt@]X'_0`4RuTXU^@M_GP:|q PcHbC"ԻaH#fD#>!oqHoٺ20ݵ?203Gj5mutq'3ŞN=:jHƀ>*+Sb,L ]w&^<ZBe" .[=Rcb
+t'Z:9&fmW:.;0b QݺnoآRǥߪ ݾ[+"T
+DYhB<#+KȌ^Sd9OwZ&YFIh})Nr2QZ9egp
+?O2lQ*LKE}d1<= iX`SmfQ}칛VezKg9ǀSoez H3TfpՏwۋ O~|$擟7/gj4}|J5ޏqn!8t9*qp ~so/.>JG?D+/_[w{K'Һo?p0kO&NU tT
+FS|/<>.kI<.{_txדt x")sslLU(WY9jn|S1N&ײٟ<]N}cw#)`Ň2` /Ǻ_{_t?I7sXg(E"S[i|v9`U㟓f#ٺ|ME&>sgh/1탖7t I
+ݵ~RHA:
+5yPtoUUf2V—MX4y„E zXT*VOWl:M6j<qqqTf$LqGU밓RWfrsU͑l:y.vMv{[=Ezї_~Si8]!|E[p[]60Ӹq9qRt2_nmv=*Ǝƪ
+:ik! fCX'yS:\\Wdϩ
+ECl8qP7l2?Wi
+X)`0'2GaU>%6@RJJ58N'V8y#H1Se'3HJv2. %x;i.fe>v)\AXnHqhBa7-yJ@22@N[(%%,abC̆)[% s3qQ1E<73~q0_cp+byQ*,)IjF
+a6f=R}rbY媨Oy>.Ex0MH:d*+p}8(oUa!=ǘ/ed/%]$cZ,&LD$Nr1M ̻HN"cZ"aSZD8ON
+%q{'UIh֊]Z !*l!VFc_,dp0
+D |bˏQ\0Z4pQưf
+9sR: ƌrAud]8p8^kpΝγ9&?N/nUvv#M"m/ 3F
+ogTx<K)</3o#cnQɞUp#u,sF&2ڔe'Ȝ!ʴ'%8>BOJGdj.$_YO+6k =G"t$KUJbf,ff D\0!kE*pp
+PwS=W"q1o2d|R_c?#W9k[`ڋy9?g䌱yc?,@`uj*div}fy]~X#m:m? o|`T1}\W7/W757jZIijI4x#|1bK}$DGI2lQ$SU<:.~K
+)=/׷~9XZ_Z(3pWW:xܭH$մZayw?` 4Y2Vաws^-fІbAC)K
+qK/:<Cta.e:ou;'tc;3뗈4|j0?k_w=cҠz1N}ڗ!mOg }~|כ;O&rZ2CݳmlE^ü#C!سJT>~
+U|z 3rbڿ)f dfT^3{rCݳk_zG;pR1iU v>Tޞ6{\\, DŽ'wD
+2noZd5jO3e?o֫w_=τ, ߟxtO)H^ǩo~N
+3{o]<D&nLd'M_'&G*nLPֳ٧8vG3Hg@:6Ξֱs(ؑ Sq}
+,<]1:2wn>~&=_>O;mLo[B4
+E]8t2qY[8%8dt8/QeYp!Gy SEWrw兢rw++BL&+G8z)Xg#ud0 {F'Hgc]Hk u_*RyQ4z(gL\3b/]SO.}C*<.C>cښ+A؛£tf|ngQj3J+<zSf'OuqɕCxƴ5WEsp%&ܔ/kp<0hESu Ov,h/Ns9/+>mϜ0X " , €f}%mOo!@:sz Cs_)}SnyUxi:)ՅU8jg.ӴnG 4ˢһI)ײqVqhq`tS0OJ:K%"]sq1?9H]tot$1>G^&e )Y0\|JWQkI}Ǻ4s
+Gg]) ʐ?ʕKܮ4ŭpJi\^hqٞd]+`LW nY
+~efWY+
+
+x36 5s|w^M4 z%_dc>63} o*|J7wM>W++
+:r@8yEoVϊ\7EQQQ(
+y
+ r ǤʐR"W1<AU&fӴM,aU?y}mH)/ "cA&nnS<]
+O
+xh+:Ivn$m\g\#1_]-
+`1.`[41YRdݷ$-٩/~J}S@2@jGtph#?x\4ļxzmuㄖ7ĥy}#dy(eŋ
+rNbq[W֩*c
+?ѫ}yauU‚7XҏV 3H Reȴ#:Qx<
+֭eg)թ6`R<EY{8d C2uyz lQBFXV]pd1T.|R8F*"Ɨ7conTѻR
+u_iUeYGbh7]1y{|WfcJ`I<We$-Ҕ8x
+U:x `K`]hAT;tмs:p}A3&0rV@I(#s 74>sp(S(_J o*`iUhpoE0]ذgイZI
+\Ga-ͲmzMB>P3N!?K"ہ b,7VTub0EX.5ڱVF}Jh*JZ֡E_ho@O4G@}qF2TÔZ*2< ;9h|e>
+ )~g8yRUӦ־&C;ߎV{ rFylsېf}@m
+K|+ |bTϪ><[6?Թ4 }C `yMq=Q/>fnjE ݤg~XI SJ.=-uc?K.peQ[8sv)?|s?2ѧ{9tD/Cd?ϺalU|ry w)e!*O)"tYc<hfRR`&˻E*# cif8
+'F v-DS1 E^1SZunwr;P"! `cZL-aœ zт ZЯn%Q{3NܓЧ8v-l58-tgFf2&Q$@c#<DQƸc- 
+2fgdCtn#LA"y!vI.M %]7 GнI_#QA`hEĞ$а< A80l``KQ1H!^CKU^Vt"Tɚs GT Ј;dŠb Msbx3vYyR,Je);poGYUk *$[pK4W(? ,e:@%) ~l|R
+yq?[$8 O@g2=
+I( }0=E1ɤ+F
+Tpc]'Tfx肉3OAxEb0U3Uvv8r&UW$HRG1p;`lJB}OUKbSdN)+S jmHB 8. ҠT*|.@iN(u Te<tKmI&F*fB4BɴwtHHT#VvN"AC<*BF# ,F\%7!${qPQ"ԭtd &((
+/Q-q )8 ؐ yt v FCnt0ІgQ<`#fYAC5
+FSȐ2055+ t%_+G&ƞK wIgI$ym@:X@6~W,PueẬܳ]BK#?mUpeY[Ai2GA
+5A~PMm0B@ߥh4t@;jJ鰺`$~=t-.N!g@jvUZ]x}"+"=J}v h6t)
+תSSpa`FaILN/
+O N,
+3^|c-&pyHTA6TO;N%eN!vؽ 99#b+ @X<KS6`h^wLS@áH?0J6TaPLS} 5VxSq)_GX+R_jd04n\Q蜠>K/U/!d TsJpJB<_^3h`F^59AENMCd.UގwF>/L!_s~Q;
+n0],}v+&e S f
+"s7fT@hBed90 knR_^
+) \Eِ81zI "(Len~Rh(zqC`*4TWC(t6t]#阱^ByKۛHmN
+p$KT0ӈL,I% 
+2$EGbp'`3Mb@JG@:1.BdȠoC<Lq|FQJ4tAb_,sDT܆Cbh)2 <Td ۸Ju,B3ON+>a8wvx
+1L3"cx9k Bc!@0%Dh 6`NqB<U;Au\!Δj9J!"{5>vQQ1tfL( x
+iM )!%sY
+էSdj*",Hhf(
+ `D1+ӡ2RFesG}:8M,K4UL 30LX2
+L=D0헏NG2i#ׄIHyX,`=KtF ш8OxVkŴe0w *UĻT")
+sSK)0dKUfo0T(_[Gx q.3SY-? S"l (YCF4z!}P
+ژM!E]m(ln/2iMw^ɺ.ܻ>ţ&
+
+HXmZ³nc2pIMb=05r7G=HIhe:p(ؑT:Ѯ <w p
+R¨o &vmG ]MdiIZe ٘:=rTqcb,+pw_@ƋM'a"s*o)ivm8ϼmCEt4< 쾯9W(m c428\kI0sZ*VEm1[CH
+fc& Ir9BA$i+Ea<ڃZBixrܼPX8
+|BbhPBOӢɞ[hVa0,X0t%x9Ь&̌dV77&yI TGKqe"blSʂӦ9+.VAG5$AN@"T$2hb@:Ecj>:0hggV]1t27nOtnYĝZ-'8$9s.%x2@谂9rP3=mA~iFhS#:b?C8 akp~f>#(YÆ ?<S#- 9'ӴyaB%FQzc
+1V4uWhrla>П.p3.%ktXDU"Qa^T,b@/Y%$#"*[2"`>9UI 4A~_`?:9HQUMsJ *h*$ P)|Rg^Uv'a'"("*lS
+EP(ʜ^ <W%Cě.'- g9t" ~5
+C9<b`@Sx6= &G7h;TQ34N~ vCs<(%C0He$D/owDT7YS*}gtLh$<(˲ahX-~(vыQ<Mair5ip/!)(-|73#7)%!,ɹ I;dC OG5x*7g$:vJ.OTx=a'y0fgFAqa
+a􅂪j
+nitUP 9DK +<;30o 4NoG"hbj%_oYz͐4>G|Y
+TվSANzx?Cz!0 D- x"z%tH|Gfaoaox:ǰ)^KF6,b}薁^Ulxё`cS5"FӸ6Xx?1t YjS|8wh(çt\[cQaT>:M0A{S-0y1m"m'u=PQ#;L۹iN^1Dҏj3W`|Js&;nw'ZeTޖ
+rb x[8L?$r s8VȄKOTj;<6-knpPhmԵwE\#1Kd*AaDn)< Ż3 ˻ӌ[µ
+-ݡMehg/Ͼ&Ni1ھa(yEW?U!P  q'O޻MIh`XIfk5eʭ}UYǣf]mtp}1s7{s\ t<"}vSg˶KV;8Lk*VZ5`>F|{*"h[_XDUj"]w߭/SSץ&F|`.Ęm
+ ÃzCj[L
+jNlp\7_|@ |Zt?g붛/[.w,!{ZEHՂ!3GR_ —*Ϫ]jN~j6
+w(wwRIVR_DEsC9`_gKbSo;x0S_JOմ_K7l0И}kSmWJ2Rsg{D;pBEL8
+\1*i=-kd'WFYe d["0^|٭jYee\x?p^՛ngxxc0ћL%o;v;&ѫ'5vvNob_ld._ަ?̳{-݈l; ,g~j
+I>>ɸcX5GUR8zKۚr\ YE?lQ;sޯn:v _
+S\}fV
+VZ۽Nw=y6VdS7Q.ҭC $<&~,@* cJ$P}'yq^_<p KHjYF*d /
+8r.n3</jFYgL0u+CW5sҰsjrS4eΦl⛊jMO5BH˒%
+T>-*ϛ
+=5rkv6A5rۣHM
+nH$C1eCeAe 3_jt_YAD㛪i7WEg(%De?"#Bݒ w=ӆ#bMr@#D!cй9fӜ*kV1T ZU6 Fp&&"9H*،$b{6H =&
+=1
+H<Pgc-#6!1*&ye%{} >iH6L:kA+{t$i$іrkV"0)䡡 g#L"Zhpeի@2^хf5VJ CAqp:u5l
+KK1 Jx8QwgvT4eQ5)bc2H/"0%fjE9d7I2]YC7IMɶ%lZ.;dPh45Eh9GiJ.$Qێfs$ӷ6C->ӫ
+xL1ҽ5IK;|! NdPT25M#
+v)#@dgy,rTa,NZ*#DUE:Iv uT
+'&IT_8 F\R#L{fF\03qGn&:U涨Ӆ G. & ^K!hºƍ42A\ F-'L?{6)
+N,kKK4k6^YecRveڀ} uAJ -%֢M*L";
+ԁd֩ComtOGv]@;U ѩn/% VJT%,^51YIkҗ;;'ۯz.sV]v^_8peēW<f»NC*gЬa3noiתO<y֜@(Q>.rXW ? < }X-S$v[nyQ]:x.g-8<r|ybH
+wbaݭSTkuS1߅ .;VDz.ybR?`.-4:^۬Y{tЋߦaǰ2 9~#ԚW>͆PdC?b=۰ h
+G5{O9~|İjv\'!?G
+wGb*lEN >`8Xv
+M4hfU0s mx
+CfAYNYQ2
+եf[}b/ '9b\8v: -wyÛ) <)t=pPߧ_|Nk'Vm6.TUV90}yEMm,n7u[4Z_;:Z}Z;_}g
+]W@G>kl&
+|LQ }wFK:<o<a"r<>tcVWVmT6 |SK}&)I} LFh\CG:eXI؋CM9$1zwspcp{RS4sWT"BD贠Τ{^)x;y8-۞lf[mnL zUwLBUv[b5
+UT|c
+kv^-PD@NQ= tDlj]~,a:OxP×m!;>O\X\P 5q2x sQkj%d_3;U< TDJ^h䫵 o;M֙Ǭ<,ۧq[{H
+0Zd<*XYZǘIl?8:8fWv}r,r61T
+H6zktͲ}5^1!ad:Bv5&Wt#i z~o_У <EF<y}DBZs]Hj.${h
+ߦ`@v(rnLO˖FT|k$V&?~vb }|n@;H]~1N1C<{%UrV
+ %asP?>eF$#^bB,oU[3>+7U>
+mz
+5]ǧR.õP|6Uiۿ]_ϭ$Rt6*⚰_ڮ\ӿ|Nf .Asu/ԏObG\w/5VCo]ڹ^, 7.u~ֿ}6Đ?'n?}Zwlk|
+=I!Vpu+)fz:';ә/\ּ\+| kof6+^+/ߛkgs KPb[ wOa~}V3Yem8Z\]_kn-7fD47~8Pfjlt̞N݋kڹfgsBz.Ish>׺m{Kw\͵\Z 9Q694g󝹍\f.y ݉2w .ݛٹq=g=s/L`qubJy>S^Uy}޼{|:hIqq~WCJgs23zq<_/T_:Vw'6gL [ GF@B@\(;J`3hz{xJ/U-th),,N" ւϮ/ jli&],^6V6nNv
+ y,<[B#yY腃 bZZT.#'w񃦲͕ﶶ/KŇ^p]뙽kt֦)R64S[[|1K!pťFna._\*2K-uŸU &BA=
+n?t"d'xy- X:^o5C]$Bˑ۹e>.B3|ݴ kv| !h>wg P$këv(? ^H;{V+Rzhe#ܼ]IuՕl3r},JzmÁPX_ ±A _wr09{7B$=h Z$ZiA/Efc>?8ߍ}yc5|zZX5Jsj]ʫ7@CAXZmܫ~xNxN^
+YЯ[D(*nq//M] b)6v/[5&I!iIkj9#KoE95dM > \>9_2φ2{fj7R67e:4\-wztz]>$|5TgA}[YֵfOZ:NsZT}Nt3XJ<y8/Wn.ʖ쥱2qŸZ?2s.L:86 -$U0yXrdm-=vmUZkճL`}\W;dr~Ϭ.׻yrCXS7q7o囧ubsk<W}UZ9hom& [G{[70[jka;Nnoﷳv>nft5b4GKVpXt|,^K<-[bh&-ˉJDsꕒzF"J,z:̥VLcr:xIVz.dZpsG ;{#e>P<y ۻyM_w*ryo`k/ {/N{?ؓ~r_͛0"Mnfh_g6L [-g*/AqU'ΫK|ҟ+G1-u{t7az=|lo%z]<*c{/Nts$k.f'<]Z=NX>Vi! w3l{xm){-Ηsۃ\}z>lËB2)3s^[+m*ZZz~=,^yV2njfپ9[YkS̭X,]pK7wwֽ>0_?Z+ܟ2ͳ䵹P՗#ǽ%Q,^UBOAehOb~~pߎ^\oǹ|o~z|\(]˅ӢqԽ s<˗IQhAKTx&neyX^^ʯ,Ks6i+IcrZ^r\VG>_K.Ti=m E2v^ZFĨ]D>{UߪG7ro,.Ԣx(
+=mʗJak% ٹq goӖvmՎF/ڏN'(c˱zGIJklgnC}y!G;sÿ,-&Hg^;MiskCe{-sxmz:%|I>rtcՉvՙ@t=oەݓLtCr`MlPW5'Ӂ5f|+70G2^[ mistR/gɲ_ؼnۻY"r1Sok>։Cɕ@/S*Yl/Y Z++DE,h*
+X~\g#ԊܻD!qQ]
+sV#
+'q<Mď\-v r}ȐynRb"\Ųct,tt3roX6|NK 76w[E hK3ll
+QSbZ@e&QRMOk &% Ҏr8L9t𸶞N7Rhk) ֞3.UN%U=p"
+u\}j-_zָh*WAiZiI酰~;-WT MhSW6 ty
+ST.cbBf\A
+aR(7F^A9 vกh,۞ t Ƽ67N<(`Y<[y^'j~t"E@y-O}`GF/D90 c2͔/Ee aL ;*TE/Qbc%L+D*цgG &,R6ۭN=wg[d
+_.
+ӄk}qhd}^] ŨEڻ|\?ڏmeY!mSwɃ r$p%uXx"D[A$]e5vZ,=?
+6ˉjW!| C-1V?Hn{NFUDk?x}܍\%6Gdnķ4 vL1an"g`q<kS5H ΍CGKĪ8t\W
+(ɽ2*TFn|.8p,5c~%\"YI<^&|2Si'Z^sz?D/] L_f`ճHբ_ػM8</ZuTX:y<jh}L`y{7Ų~T\TYG[;z^V7"pFUN^l3DEs%lkW;
+{K&}ω}uܴwNkE:yu=<jY=K Z;3-z;SGUNQG<
+MjW;&c@iQǎJՎ_Go@mעգȢAXWD:^o\[nnnߘ]ˑwX9- # }} 9h;['DzתּZ~fSS['c*婖TNG_o(mFjLvKf{cʪ⣹3UM{E.h/X HuR;T {[s:wĆ̷W4nBIsnmmuο\4ܶU-ڛц޸voT]<^kC/'~u{AnYuX,vR4^vjm(il͖bϝ鲔GyHQރVoமOT;Xm EgVZk{ψ}ѮHȇON)SmC}qiy14#lɝ+YssajcBT8%T514{6TLptV+3=#y'="@@缙Βm'KtgB񎃢Fqo\(n|,Q\/+ugsu-^sf(ihY+j?@a_[8/3; ggexgefYl8tiZOE#{b\:n7g
+b>n^xً =CݣUuS+b_&(jڢ{Z}srmZTYԊS,զnݼډټ'=زn/_:z(17{o#N[-_*,K;tʥjOJ3Pi8,W4ԕG>MyM6sGeS)8Z.n.)+wٞ͆lLmvҩlQXvTGvw-k.V_8DTٱY<TVS^#ݹK+O݋YƕޖڃoL`z<ڸ-ZF<%Eb}Ufܡ<q~``\[V1܍' ;޵|b b5G|mǵұYZvPUQWVkK+۟1^iWBe]BJE:nѕVr!p7^o"_W]i+ڃVn.Lw=i6ӜBE+wbwh_VmMV: T{4ڮ|_J㦇?4TŕszR乣~ZwY-.J+vR-ႂVV[܍4Z]ܟ7YirUu g҅Qvg !{ wc}x#sF+o5EW*KlQ*ji2^i7P4\iNtu9J]o`~>`Uv.{&Wm-X/V?͡N Ĭt_]+-[i {}jt/V[_~ggMVZ[X0[iwhV[,cqڳWrvppc+[+T%ޱEwѾuθ W:Y}tc#K+J\:m0^ik"h:Yvr+
+֗b7{"a߹IO7K 5z;Mkq=:^iUoq<fMUY3eyR3_4dBA%~ϟY5߳7teT}Ӹ#V;m_tw7L?=UWNx΄|9u Glbwl`-7k,ӹ3|ɵPgnO7'm#Oع@ӂ-6i^EӔsn=sEv~olnogcQx
+>4>m/m*ǗZWTށ{
+fCϒkK~ ,Vb1al.魝wggvI-r#B[m |9P}.sbcM?=]NGwE lة#Qj/L[N9GK%1~N+ZNdU>gx3+I/=WNt2孚tMҊ1q[m`ۘnkѕjJlGk+fiUژ7]7YJžJ>0_l4%ڐ]jӕjmJZ٦9k w9;ptn[fUBԐ*7B.T[}k Ֆ R9ytFu4MP?w'=?v C7N
+7v#K,T۝wVۊڮQq-w5G:]?vB+КDږb{5)IT{mesl(r-]]m)M?ȗ ڣ Cձnc`Mld]Fmm~
+D(4{uhq݁!Q[?B7ؿlrEP XF(TƌP6^',󷣕̓e0_Qـ颲/IdEULF䏼qPINfj{{z܉UBglSnZdn\Ͼ
+l,{=ψoGȇz'3Q:}]њ!]8{rQ7+e7J9XK\/j7b/^/]wI{=$V} ][c%Cr7orSBg?n^^€]RŦ7D9k;p쟫j;+N#/*0鯑GVI՛1= 1M閣(杉:FcZt2.Ӷe=vʛ' J^,DNzq[E_$v(eQEىMzT
+Y,ˉLnkBăI
+ .%r7]JNNf9b&DchgjF0k/fԗt#/MI#BYdPꚟu{1Y,F;t'hlh=$[MDkk2-k,OR"WeNj4q֌j}krүR-iPq[a)NY˨5&w(ţ[{qt˩=jfˬ]\CFs>jV,l2;J6eZͦC<K܉@g-&F{M{ӥh0b9-:ɻz9mv/<M`.瑭l(~ZN^WHsFҾ:i7Kwa O&վ K}?g b%ߥriɅg1m9{D^Mc7ZBK;ZO3:
+ʘa-NPx65N_u\?XXWn mw-nLʵsYj:xz.dEϕ6ɴDh(/^ZKlWHL5\3[w(m\\+{V,M bay}!G:&;L. .b|6X"6fHB9xFYSEhNgl,w;KZ丹NtonI >%1:tZ1t+FЙLr :htYi1z]h4Y-:th %\1#"wiAcb^Ha6\0jmo>(edۡ~qx@=r/vķ~ :vfN_G );V4 [?>D}g0ק9g{z,M2蹲$!sr_4g{$nOrz$ wuk vtIe&dZI<`76wInte 1ېθ 1#-,,_j䣽:k9MvUBSmۀQ{{qeGc]g͚ݸnN4.f(0]K)~e{ߑ$ƿtZM3cݔN|q#lZh?;"X4<vXط26Bt?ldJ2 SxG,5#&j'5ZJG,65]Sw܋#e|o"qxE,`3'6#,bɿ,Y^6n"w|ݶob
+P}58ϑoհ7T.3UpCԝ Y]rTM\B#l㑧C_yp{eю;Hx!=1+g{1U
+jQ<X+>z$׽c>. ӆ!+V¼$#I1Fؤ؋Y,SM~;]=(j⿻478$)=2ZLop3>𜼺tzdtȈZݑ0TzdF ##ȘHUϫHGư{s=qKTr_l޸ry'Faۗ7y)LصB;v>dKI Kxupj\]/&:QN>/]zÉE*f3хǼpr-xz<\?x8ez<\,gj^4@ tWbކ
+7qybeUߋ=֑#Y/\މ}'Ҭmi[Dt FזS:6cgR1m9ɕ&;M3K|Y7{E o<)NDEh35e|UH2 Zz2޵{ZN~Ѱeۀ$wG@Ȏ2{YL66-׬Xmhq.NÒϬIyCI>}pJ#Rsm "9"u9gNb_FFefD\N&FbHKĈT{_wKl^vij/KBg?2J2
+g\ez(>=
+gx^2>.~#f}}eCA ;/C zP81gV C}UdOFX{^rQzmt ˅]m/Nn4G8V+r]zps9ӯÉOQ~qF m˦Ŏܵ@m^B`i@im>9 n8b79;hԙK
+Q5wV3R7/^WϺVnwFULOY v[+3]70f55tf`lK+*խ4~,V@ ?حbj?23aBnҸWl]Un^ќ`YQgG팏4}clLspm/t$vvVkor^g~/ثsX^(uW4DwIMjwlg;/1ψw23Gj|<V{66I\bT/޽fr&9iG SFLrIv~ER1RN$SM"g^Dt}SM6bws >yFK-_/]jw:TFӥh:\MgaMg'?h,]#Gihf ,tFR|CH
+RI3zNɕMg4NtFclۓh: Mgtvތ3jh:t&6hM5o):Ψqh:g6TS8tfm̎MgMKz43[tF kh:%qg`4Q{t'#M/Mgt0LSh:tX_,n2+q9l|S\1bl.KؤC'ՙ.COAR)zbބc2 E fɨg$UbLI򈉍JjeM2~´8N.T25zjw[Ef˲.itseI4wds;\zADw靫];XRٚN٣(L܅0ݥ=]pb;{v2=W>hE_^Q6S#vm|>)=TO9N<[Hg,C8l/kx01-fk-O$4tyOvż %
+}poCE)6X7_l꾌|LQQCgrljݛ]c$d7)ˮ-Z9 ֎m'ܷʅed"cSs7:^ޡ.J|+G%Amy'nfFFD8D25`k"͞ɉnNbVgl/Bo8L] z\62O{J9R ^Hufe.h22Sr<O)/bqIvƇ2Ý|rgrSkWk͜,; t Xn_8`8:ҖBr99w/\XظALYЦKf| &SQYA'\ua_+<aLv14.߉겘aL;;.*r^L1ny*
+\v14n7SJjDrDL\p*47ok|YtpLqm/5V1ytIMJt澚jZ{1Ӧ_M|f 3啥8Uw}F^ð1Y=UlQVc\C=@DW/#޺;6}me';r{Dz\͞Ɲ%O[װ6/05X4tֵ;-f`~1\ygMù-bax"UyգyAxs+-7WoW̄J zVJO掮42+z+M;(Ώ#X7]<e,<s [?} &+uU v,E`G-Z+|]#3F+}ZQy&W9yK6O~^[hQQcY7vWzZm,SsMb+5ޞnOIt6_ҭ= L⤍,?ICb>$)*M%| mRl:,Zbf=I֯VY
+ƒyj]7O1*Mf(e+OqݿHw,&Vb'Vj$Q[ڞwc㪫ι؇םsv+!c㫯} l{phc4eݧ< |mtLbWƥ4uRkЙbrhQ~ wřSݵ$~W qXK#XIw`^2vaR}pgvkOlY|?NϴWb/͚#&s?4N?Ln Y|iLf=)1VI}ρnƿuY+[1{U?Zw&9p3PN\Y TMi8'k]: CܼƆ$0,:k-U;bʱ<w2eGL9NRGbda ÅZ#(@c
+dFGZ<
+0Xaƿ(@c
+0&CDlh*r<cD7FH+ٞ<ofux켁RovvnEFoikvd䜻m}z5w鶴*{ny\mUYSߝ?07Z9=媮,XLgWwU,nN4 T_ܛ,\?w]q6g|onajgp{ozϵ߲]5}r uj};[3^Mc٥lIOCyA7 ZvU/Ԝ9]Z9\4,- {;[0#' NCbƗ/ֶr>ɣ%`iCa</y٦h,\.XΝo/ +NneɑGŻ}mmLbvk`|[_wbqصvݠhnDft\GY6f|T`ZNKaCoKZ}6wsdK8lM][SsU+b9{,y6P酖}mZȒw䢧sr[MV[oem`M\VYZP;Gz[H+*]b-Ylv_4nu(l\ܫ5U 7+jշY.=\Kf&Dק__I^F EY,kt5Qn9]u^Pr+GuW?e,"ee'[#%><AS|j4KUr9#^rؾo{Hgh3йx6ŧڧ~wUZxxy5^֘-Jw2OTz,, G.IJ`a7X^{-W{߯jl_+W]=3yĦgTаXtGk]?Y=aFYOQLO&<Peo[ߎfBmK{y17J"gZgJxV7_/䞊nkjhGl"rUedv45ѶEë;zǢIaN{s _}V:Yo|
+mkg+CX>Mkߚ@Vj\Asd7-C-:;_-7NeO.tfreg
+K
+DF>;<>Ք]=2Y-(/`WN:j.9Z(ku<+[+ WJ1R7K%sn•?;ڰ%{^;[5ȷ:KLH]ISWkB ^?b- 5VESSE)?ٶ/TGʆ2'ۗ6[JwBjW[^Z{L`9uMɕy&+ϒ`fwBUfhbkb.7OdŶۣwoZ~qmEoڪ:/A}sRTLi7g%<5G__5seD1Ҋs5v~N%MP!/.6^W[^Gx h+.EZ򈔞ʹ3MZkF&6~ٙmOҊ\LCs[~EmvtjgyQV{kbPM,whQ-'ŵ 瑖/9( 5JGh{T[sL~E;zĦw:pr#U7:'.yC ‚ OD,M}'hm'fA(5sMYmhQ7tI\i%A:Qƴ8ͷSC99g'‡@< [΂݃EgR&,Ô!R
+}Y[:un\RڸWnLԕ%6bLL]DvXlP)Qr`t[v۽VXJy{p|M~^js~3p1BP9_^,HJazet2foe`02v[/@+c+ ~ t4ZR9Ӎe60\U_V |hKi7DP`U:]⭷aNW#nt絔%U* ntҺ6d/nBG<Wl~S/҉}F]倕6dB]B ҷW]ZXjz(#e&Zjs[Ֆ=%v92Ѫ,h]zi_ZW8b3Q6{L>/3QJrD+Q9ZG8b31Tsg֕!9?sgBwUD
+e9egr) tEu0%nAT-uΑȑŤfKr\ސ{Ae 58BGQ6T"]qET D~Vلv/Q[ʕ>yj|
+mO><=$+HGV3_aju8tCqtO֖]eeJnay8ܔU]];Q]#(=Z?sob{m'>Îգsۇ'NTv^*\ušG^rdum\8nl.ߓ͢!]ŋkXvaAt'g8D*Xo; @xWcdhK醲֙XK١wGš1OuO V w|Rvzv^GMYv%g>3(oP~М]Z]<0՝]/{ku~ORb4h1+u.MN+er/OeUˮL- ~`k+٭;؅,_-DaF{6\lhm
+?ޣjb}Z>^*^9w{EmxH^9"uf)k*'&zbjZ=+݉{f)X̗{t̂<cC0=١A'أ~Z2RX:Cq>(PުQ'%?.j#s\d훡eQaIgAK<ZqI_8'ZG,\mB_!+ ya`xn0zHV-q4[!6FGlz>D3sS/c"%2_?)1}zMPWi1/"~7kP1#و.@֑z%GlCl\ot+ѳEdx(znh _A>)Q b_,]17Z`!vE?ihކHFN܊L6DKeeRiWu4pzYV?<S{Mk0ŎAyD`^8])v v 1(Kr])v ʳD`ѯ5bǠܗ$S%;Lc0rLcPK]сI*6)HCy~_{}!:ޞšȓcȮ :Z]C`&'[ܔU/*os{M/?[?<ڕPض~v|'?kO5'+YO􋣳XֺqfOM Ot;E'
+xo,VSO:'V[ZڀOz_ϊ<{bĚF[8^ۑC'nweu?hWۉȾV(<1W~Fljc͉ry_$:5ʬAAAAqDO8& p*9@ <σdO  Ǔ 0F$ .p<y: 6SOAqY)" E3FA<pxҹ8} gK p8Y.aN[ "x69>>AD*x8>Ap<e"@AXizN ">O 0t  d8t!8x"}N WH u>t!tQ"dt"Ӆ  soN1 ;@rA\xӅ " m8Gqu5.NC :qp0A\x ӥ 
+ǫe\.AD8^t!%p8qpA88]f pEKU..jN_ ״48] c8^Rtq&8/xK "xKӥ "3xuKe "p"1tI'H=Bq8] R +OCNz jǖe n8^as
+ PU%K$+ɋ GB8Ap8^=^8'H!/N
+Ņu: "x8πi8~d.N WT6#"85!o
+aqj6pr
+j6qTqIUUy
+Ǐ< K&QpDp~ ꎊ O
+g 4Bpq 񊎚pdq (*
+BO 9ܨ*/p R 0 & *֨/pR$@
+Z/e gb 2% zj
+8 >Ĩ/pSZx ꋪ
+
+현%FD:xDUv|C#"pj;nx)B8^/Qp,QH*m8^(rAk$*c*JA6Z똇EGp."/`? ʊŌHE8^QYpQ 0 k!)B7!AxDEąEHDb8^P;x@+&,/~I "xCD%ID$ypR8 .F"xQpxCuD(H%:IJ)Ap¡""ŒRJ\A>xUy$ Nj%p  rH$.px]U Bu
+L.G>яyce<.6=1~?/ 5Yt]#.0!e#> O|ҕO>'N<'={,k& (gD(B%LVav!<_.EiiIqq0ߕs'=A5Y.
+4QQΎ}+1YL=A/WAQq_QUS[Wؔ u5Օ~oiqQ+7ɢ=QxVQΈH%&KV=e滋K}umlomj{KdI;q(h|gŕ3x#Z:,2Q=O:! XYyUmcK{Wəť?YZ\hmsO<ZE+^v(a
++=#Ss+gmxJ4?wwm987=1:X[/|c/gd"&+E|.wwp͝</}_81^<y9g<hgscmy~zbdSJ_;?Ox\=ΎWX{x"WY=0:9vf{)/{ū^_7Mozsl Wyտ/zşnm-Ntw4WKd9yΜ>
+w߽?(g>mWy@Sם{.Wc)e]+mȧuؽ?I+`-`oRJVDM}7| ^x_\Q&:*K G\k7
+6D?jŤP&2Voڗ>Mlx_[]yșN3Fo*j,W;6z{k>E'oo~*a)X{iM-Q3i߯}3|s)j Vh˻~vǭ߿|^<u{mvF'=WP]JRD5V^~s_ڷGDݿ~P d /hOǯdoE-R˙h|熯|^WGS%>ʌ̋72xSUcm}gW]V+bw{{D;%~uwiwqGwyOwKa+Hu%-t?MQ>7 rfHVfLBR僳x,g>~ _D2O5i^ZG|{߽;~?᭷;%;oÝkΏPͯo?/wfde&ZfόyqF(U>䲇?9nƖ6򜗽mrwoE7}8O0ٔ_ix@>_ϯ\/)__ϯ~߼Q>Do]{ =&j}[|=o٥`e`eFʼBkCd?S _w}_{E,t;,au/~A_>}k,^sG?O|O}~=P'?_&?/?׿xWfGɏ{Y&e^|!c]-ųGyO^~pD[,\Ă?n_AQnwW*>O}}@ַ%[ַxǻ|蚏}~7txۏUگt5_{?Ȥ}[_'^l.MםG?\)eWDc{rܾ՝goz5e-H=s7小||[t^{ſ/}K^?^җ핯]\w/9ʒ|nMhMkm_ywygy_g =yɻLfMDcS52q엾jQ};"S7Z_F~zm|*
+'(_oyk_;l ;cAr( H$*"
+IY0GL`ΊTs1# QPLi{Uu9߾tu{_NU9biˆfL6edqFSN1k /Yjh]]rVr*TDg_/o^<MOyԁؙiϷB"eB` 
+t-yv=Nb ג=y:5RRNca~a޾v9Ա{b%"fϘ6aN@% :f܄fΉX|պM[{ɳ\G{Hh%`gp@fjm!0ySP`-pt 7cژ}'{G$&ܜHaΝ8oWԣcCC}Ix>{˻AC|G7q2NZzҎ<w1ƝT#hɾ/dT~,-̖̞2س-2!0iO+U P81(x✥w:x!vc+IM
+;w綍k-55 'Q<__7ݜ::ۉwpԭ[>^<j̄#/]>:&nc_[2Ŀ~g"ϱ3;wtidz4Łg@OBl}rK7R˸1"/soxK;nXdiaF 2kw'G;[Rb2"Lm8tu37 8t\Y!m޾{S WnܹGxg"b.1.Q`݁
+ o.]{sNo9%nL$1"ލ7n۰*j)FɡK'ԅ23`blddDCt0h.*/ՙ*=`c'M|]xVOx6vf9$=s9y8wfh*ºlGtF<{fFqGY/ФLXbRn%&<I/5ya=zujgCJt4512$JyjiiU #YZRSN=\=K>j\񳗮'K{Kşor\?,~ʈ#AY o7]QBJ+ۀ nu$:*+^Ko_fg>{c㶮[h |uwqpV梲vZXRiUb%%Q=Y Mv:zHjf,]|8m΢ek7s[)Ѩ{kĂُ߾tr̚EFkaV5bJǔ5L]O|s=Db$vѫDLǩkEeZu`dH&Q`qkĕqb5uM\1i  gA~'Mxņm?w݇2+*wڱ>j$If#dy /]0NGGܺOC%ƨŪG)HbGn\xΔq#yj+0,L
+H[XgEj&uI!cMmӌ:` l{!cg_f}dR=@OS'ٵ fwE῞&L2/1k)БS9p:Σyx+^%Y驷='vÊ r;h#)JYѴ‘7JZdWQЬX<\(ȣ΍\I (GA n^<gˊya!=:1L$SM2Aejl hgE;}JNM7{c7,_8sRh`/7RI.I* ˋjTc֚+("ghlK; > gFF2rc}CfۗO۶j>ufhI&A`vd3}]O&Xq)3&_7@?S)K))k#*SL`Xg<Cq1GȎ'9ث>Bفص(M2 K2@e Dcv=! ޼x>7Bӳ anBEKN{?>j֨KBkK5h9ꋳՑ6܂+RӟЬ fiwC䌱=pRAJ,Zi g>BwÏ8zxH5Cz8vZӤnlѬYy%J4 Jgz;X wFnP2۾x;$4/(,D*{,#F‘Kfjϵ FF(39 8gnie1ƲRn\8o ԧcgi{=mu 'pwi
+R,d48Y6Z9_й멏sş>!l_ؐ.h4!5K%&HGPlfԑ)w;$9uɎp2d2;#Ckehܦ,54%7cwq Ccs7=c"+l]`Ɯ:EZRb" 8iX;;:篧?ųx)##l`.l3}MPY#^ S3e4)cHc%XjiܰCMn22WTVoghjͷlҜv:KST`IA{ڲL4DenFށ殌9x:Y%{4-ꙃE43rcF*Tm)tR$R|93$*v+I8O2)=r@te6jb)clݩ9+?{-qr>s @nL)ʹHf823 3AWm{2Qkgo]1gWN:jd!k M,UY
+ ;kٖ}xLܬRzD!}r,Dn~kh".,˼#gf98Du~Xe(zzߖe$4j
+S̆
+[+hw:zƒ=f1'n_<lpv;EXAY1]ݩ$/bM<'zɌC=yx!}iO\INy]Oܺplˁ$7TVr􎼢.6/I:zHey/ݹ|bi# 2ń!(X꛱z hc={O.
+޾xrօqF-;.݀4:3R6͂ﮌ\w{DeGIŭ_49dk)&zĒix;^+j GGNoWRpX3k Y6N[~g9@‘ksazGk50qުo=zTO ͆3Ksgy2M=N]1CN@SL !,w xb7nmݸ$)uL5*
+urrzHcHcSƺ
+uIFSʤ$0SRA*Ux}ܱf2sw"aZЦ[ %^!Cs_ Vo?r!3<i-QW"!)TZ㊨ ivK2<żup98 5aGhK }3Ccf-v0&X!f=u+k۸4VZ24ǜ&g]xy-Kgqg꩷ j:&L[ׁ#EE=}5$.2Ѹ8+X#VIIB2VctSW^j8(,qac4eX2X
+{-XĕxEѧ^=}tⱸh4Q=*:;{xҋ7xC6
+\a
+,`9h[)|:Oo:éQkTeJ1~AyҝWxG^~f_tzS/6 ,4 -ݼn?u55d>% ($,5G#Qwq2exK\~AA&صn|sM%*WT58E厣s|'/2]?,n+ ӑc>8t-޸%]8!v,$ GF֝{1m ,o=${>eփ cěMtJUeh9lܜɢ߻‚<tA7ҿG'拶yN}&-X'
+>gn_8}u@68 Ckd9
+2ݼ'-XG͖߼/,Daqk#&y:rQbC팙]z =kE쑋w`4MNFqeOà SA˼x<mٌQ]mF*m9ɋ7;{,Y*
+7EN1O[R]MC eC^̴
+Pp=z9:kW&[J }عwBfx|s.9zHoOOՉĿŢ̹ohLL| ϑ{>}Czuae pe2đY @l iIl_5w%kMʕ ϣIkQk
+?z9O7W&c:޾u'/?K"Z ,_NT~Am&ST5es#xa
+rх߹zءnbW"eYK$`'QF t$8'pd)lL0|^K>v;)ý!W&姸j|cGv~Z$T*9)i3æӗm=t CỗOR[3w. cme0^
+en("[Ѕ;q_]nfюQO,Df[u4tzP܉'yؕ>\hi
+b[_jc^K 6c
+RTs>%jAbGVy>,]SUZS<#re qꨶiW1EEIMc欉CSK?Sd?~&eG;Gĕ]9cQ\m[x) UScś$[N9P4X=?1l{ ={Վcؕ+'nݻaa8R&Ѳ5^2`Ԭ;ewOPfaewdOATyA]&WyґmK{;tQ, vM\qY
+>}$ESuZaı H?"OZ3 5a d0QP5Ca1G.cI<QIJjΘ!nv,6ƌ r|;~ӓ^i2R64 :3wͮS<CQq|qvEA^xF۟ȪhF ۼ/XOBG>^V>~8$9m
+Bڊ-~ C$񜼂&Gm9-Y~xtycX//˞CenGL_;RćW;J2бbu>EƝ 6/ t_/O 'RBe/Pxly|S-+!=-SHIL%}s~~!Ӗn;|c [*+5v4^+3^dFiӦ(~Sq^$|x,VԡWͩ#HDe{ 6Psd|t%YiGjC5A-Zlihh^hJNQE^$j?-b]k\͛@
+ghan̴Q{bddbњcȨK8ڭ79u`gQ{CCtHF.^"D/z  i*qufPrf Z08<SNB!Y,&Ù,C!8Ú6SqQ}ٮbX[YYZ_ Cf<}[1}
+ &dN*䋇cVۧ-qu܁jD(Wn :Ǧoj3pշGoǫaLX$O{%]' :__On\{ )6tkۈv2^)N&߸xꨡ}]mOM=ҡn;- 5eEuWiDZгaA#Bnj;ft!ÃeK@@'^j˞qO_~) 6jcF ;d^} ^kpиK6qP ]kGvY0yku%:47`dru2js}rC~BƅO=w޼ys̚9c)'˚SΘbCn?|}їo߾~2'nX1{)aa&N?vL
+#3Ќ'tgO]q;l۶Ul#.~Sy_oߐ+{,=ݽs{ dM7[[O=@B/ =}ּEm?v}ԥ>~Q\9u`ǦQ̘6.;e8ˣgW(DFuv X9ѓgΞ={Ǐ;z9zĩ3/_KJMӗ߿~*{,WΟ=uC߷'z$lRc~{ʵ?~zJz|}=Gwٳ}+P:?5
+Z] 1
+'޽z %n^=
+]*P_E > hn Jϫ(ɵÜjN(WP\#*$8b)z@ `U9nYuz@a9Sʿ0riReXbhDSPƧK &e(WD7Jr%{-huos `qɁ}&jJ$k8OH
+?㯿~ L=6В#*.z
+ʂyOG$tcRUSר#Sow%}Ѳo
+PsᛧX9+]b 5$D$12Rh34u10h܌u;'C"7To_>ĩ:-k*}شY#s^޾#,ݰ멏} sK-}`S~n\ڶiShɌXّR`gqܼhԌ7#BO_;{=>ՎcnDmoތNfR}C.Yśy__y:>j ]y&zZș3E?"ԜCFg.^eI2'8'd 'N]?} :*D?GsJjb'/HI+gM<g9f˱4צ13r
+Hٽs{,9ޑm/"WF.سyż^BfG#]M<fI -HY4tvrFYx<|{r߾X4Z*Rä'n]pݻM ۩++ʵj#gFiu%dN))>zgpP[k\^"]9}`%sF׫kgR#i
+nh=y{2U^l=i+ ~VU|ܑݛW.>n>.2CfYe =+}Ox\)HA_Jvi6 2*;#œ_:wrOn\x@-V2q rOxNyS0Tq.b3I<w$~3'؉&
+5a5P '+UJV2$d2"#RSx5))Y.% Ad
+Z@J)
+
+DH Q 2@jVRCr  5t+G
+DH QP;
+@dЭ
+
+RCr(nQ(PHd"eЭ
+
+R#Ƞ@ 1
+!Ƞ@
+"Ƞ@ 
+#Ƞ@ 9
+RA@ -
+#Ƞ@ 1yB2@Z$Ԏ$vX %KB2@J藌b/ "~X %KƂ
+EG
+IN"R!I 2@*$9DH$'
+IN"R!I 2@*$9DH$'
+
+
+
+:u
+
+<l>>c#{XV 2%AWZl$
+j>/5K6~\ 8kD_ &x(G/cfx<t_XEY.1,!Jч8L~e ;z{ M}yn8\
+529\.S\?]?6Wd`qMVL> ] }AO]@_dE><@O=5~h|~<EK)7Dů:#}O()HHm+Q,xL,ɳпe X3!Q1ЭE8tK%l.]`
+\!1d(Db#qyb>d:5$\òaɕpf~L3L~ B*cshU8(ϩ܉FWՉBD4;Qx(n'VBrVL}&'r2l"QtEm6XaEJrHLPFcGf3T<H ٖ\ElDn˭bF"˨y,U\d3_ȧW/{ySYXќ/?9/$/"%WE_*菆)S1cFO 4fvfD?BJBv D7| ۊB_}!ɫx>E-\>\~ؖ:H}-i+C[qgrtDC:&8l! N
+0A̘B./,&tB哧^2R;G._XP~gc9f@}O 4TCu.,f[;YlAyM
+[Ke
+\WT~0+\j֤K;W'àG b &V,5R
+߅YJ^!n'z4K?dPPZUK?UR&=^< L@Yɿbq .,,;C"7 }6
+D]L d |v*ш' Cf9a(ă ~]rPJ_2]
+zW|,pކn?9Xu4.=>Wt,>ZЕad1XV|tKhYe^
+ A<}\,i/,y b
+ (Gze_9],V蚪0d* Gx(
+$0 c *#%
+2HBBCE,|l Y8tc /GDmD dH$G(.
+8k <(C6P1;Y(grE+`yD.=J/,g @ԒăA]l*E! *XsWNBa.jMϲѝ&h:MFut
+1F4/GC!zOwykA};*l8Vx}>h ћDq'F3=yccb
+jU?U kXVU`bU5 *
+*
+*
+I`XVU`տǪ5 *
+֪5G&UV5a՛hTV4 Ȫ1LRdmtԶڛTա=PicXvO{ſ\Uk(܄:Ri-b5寧vj- @7<rmUT䴃6r>
+?E\EkUn 6ȫWNLS}MMʵh!VCϔٹQçN>~NMQ%F+kQG:ga䒨Es>#߂Y,rX+|Ҵuc/\n"gO> BgnR-Tu:`e{vŬ_2{_g>>ou`E-cg-wɓ5} W[k#-%r`p?!buS/_p5=te[ҬeU"`zKn^25_7~G=5^:>]y6jh㞓WnMMqȎUG@]¥!m̲pW?'T}l E^V%唴]܇MXak)Ro8Î/l |[+jZuv2v޺SRg<}%S8Mͪt{ͅ=^wjJZGɗn_>=ۉӡ]SƩKW591cŎcWefM<s̑y:*ZP΄wԥ1G.y83=]kf飼Z D7+<r Oǯ;fМz Znihm;qnLw̞cKKVfX̍{Q{7?Ե%y[TP38z߿yn|l 4?trf:DGŭы&s2Pl]E ySs3V8noFn^׻u{2)8]/~r /d07(kSdYQ@P$,ɁUK@Y},vRjΥ#1KXT
+<BKH|4vٴ^b)VqQ[I $+ǶRKZ0<£B-?IqD?gn%)[G-iHqg3R-P-SڽfNK-n$3o{.2<rn۷q!D5IV[ 7-0MUr铇^8ݰ+HC-%!.T+zZ\@r玽"Y :iw."jQT¿N-«mQD ZqXQ×{-JϑOkn!pS|7ivu-Ol!FtǾAS4i-~]䩧!O,iz[iA|wlO\M}Z\?<r檸ef<5Fu5{S?yN^Gj?sAjQM <֒0={/3Boܗp5@ ~lp}|R5w(I7󘴨R-ҽZdEJJyH~^*28cY=FߑTR*
+ơhPE%[&HMHtsƠٲB\҂ӵoPM{N]r/ε-1ҧ8HZ0oBĚ^qFb]y9\^3 =siç'>e챾Pjo٥;:|h_Ã}zڠHjVc)mټn)C=,Gy$pW>{+/Y8;<tW&)4/jx޾!cç͜9cZ^=dVa$fX]<
+5jdHϏS(kw:zx0p@?<:MM,X[=\ztXi%x۾B>3szEeum]fhRoŔ =ڄzMG1
+
+XգX~XZRvY3'^G]:zͳh"5?.M:,6I3ԋBu|R˶2H~\ߔTqQ\*ߏ˨TmlRK*sp _Ԧo'XNk*R5n<qMEnŚePRS+|.T/o ꧙FcVVKdaO-mIV?VIdXD߰z6ZUa bRz*V5I֪VѴMU?[
+YjpU?*
+*
+*
+*
+FnUVU`XVU`Uc3 ٪4ZUI֪1絪 iR=Ȥz3L
+dm&ΰZ$ ʤ2OHm^=CԆ_DCdL
+0,ff[j-''///''l6T7hڬE
+mJmȷnUUHBT6BKSCMEYkzⲘJ 7RWiW겘
+ ,,imѤv4Wbvml:XJ
+{(kXr:;twuݫS!XOSRQI5cK]ރ| ٖgeԦU_+lFEЂkkHШq'M?&`Z+뙲x5i D̞:~KNGMVQJZ-}dպ ֮>ʷoNT۴*[S\T9eMb6,<b=TW,:Rw
+8oCO<v .z ^΂4#Zu9pԌ]Jr SG pl^\!Mqc]a#<rZRrijcV3Wқ%u؎}#ѣ{/ߵ.bϹ_tRU'ݸp_oe5kVNG/T*fқKr4f7d=UGZ< }GSTa {z, {M05tM'z*'})URŪ.y\ohJ'q \}ؤś?{wUݻwW[DAVn]@6/{ `~QCޏvYG`s>93Cn>|"n{vgv naު؅_w̞3unX\ {dw"_\qr{+wڽjƐ+>ܶWO\1ہFؙ3ϭGwر|ʠOZG/[<}ex.^̶إ-.۶tR=|g/[nqtuhgW[Em,;{ʝN^Ȗx+0}lO]r}Z}t:s=oyxm7Џ4Yk/r@,RqWyx{z gnvxwOP?P=FϓçOt>[hj8.FlK;n=z<?}n+o!(--[BʃmqE`Ed~+kk돏o:tj~`W_ExW}O݇[|?yp~<擟Q~A1knmW*g͇U
+Wo윕[:rx߶5' h_M"l]Lr㶝;]2}dr؟]3.,75lܥ+׬^hA֐M[ ?%!e7jkȸi͛=mmU(;`z6>`q أ]eLv92~hfP\-;tݯ_ߞ4Y1_~^1G~"jؼwVM{V(b3SdUm4M6S݊\V]"s-'kIߨa&6yM%˔P\bfy!v-hOIl8S+"$ytʫF\6Y2|si2K2ew̚9COom4叔Ҥw7ޔ%>m4?zDy3EIm 9n$?WvMh}|yɲ|RIب}Λlөt2;8;3.6:NNfGN.rN'{wsnvN&gotwpp7W^qYlXUu>hgEWכVL.6fwG.~Wjm\;Ud.?9l
+9]ͮ.6e:_E/ss]fQ7wu.2m{j1"E?;>dorwxLf'K&'éI9gwn6Kn6Nnns~799AL1ks&YM&;d(qǹ"iU|ͬm*JArt>NY!'r?\\},J#L'wx"IfaXgyWͬ<6fc2Y[c/ɟ?qUOZeRGutiѹMk-ZoӥvǤ~l[;i!Q2fG軹\d'Gy9ZHOPήf|Mn5ٔn}M6>;F+A/]ۊct.nnG.99CK|QN5;8L[SS&'w'O\?I&'wy;;[sx4ECbu`#=jr1{Yggg-]Qؕ},:<\q%~n7wQfUm]\m̮us2}Nٸ8;jK|'Jۖɤ8L\"VM&#":I3ZX|-}.Wgq:k?&_UtE7U>q5~
+E fggUtpIC>N vW܉pmA<⛹j}Ac,o~\rq*
+w'mMc/`peqwɛM>bGlrQ[EI3Z$[ڣ߸t俱x\"V֎VSf-n"4韧im\к4qK>xrWOo?dֿSQlO!B!}Go5#B>#BH,sI!$va$;cPctB1|x1: !>bB!(O臈B1| 9F?bBb.xǐBH4)xB>Y1[B!QçIaCM![bH~ !D6 ]B"2!|G> "c85B! =DB! 17| BP F!U.%B1#j]PbxcG1!$~ftBH܎m1r#8û7bEG!q,m#8{5bːBbu ҈=.FB1?#2* !$vX$Xû1b?B }qѥJ!8%qѕK!1[.4B=wZF2!Dc ﱈO.gB]/]ׄ1"3 !$jbx;EgtBFJ'o- N!Û' B.M$XF>!D67L$pF$$pBH ;q;B!7臂"v=[~>Bd o4H{cx'~C y! *Aw;GcxFa y( !2>Zk4{obxӣ@  x| !q:;iLGGcx| x !q+7::1q'ĉh!?p
+$|!7" FB>ûmDFB>-E>%G5B>D>GAB"Ck"GMBbx/
+2 !a1БbxRD"R8 !QjD !L ID>%UJbg(hᭆǑ|m /K
+Ğ^.L+bxR$6GHH^
+b}
+| LWdSJ&Mtg~O.]4SL<dE(45+^arB+M2eΒ5[v9sqWsdϖ5KdR& Mt4Xb0,"ejY_Y̝7m *
+,`?o\9me,JMVZB :Kћa~M":(E}WٽHQbŊb<<1\] ȟ'WҧMRh kb´*,wt1)Vt+UZzzjUTX\R=\
+J&
+-Mɓ~PgF$DKL +^d
+y֪Sa&M5oѢE#ҼY&֯[f+-UթpAۼlf 2KhKLobI&ZXv܊/]R5:7k٦]]uٳWo>ګgݺv޻ufԩYJŲ9˟'GE3fJX&\LLr-^TkkԬwǮ=8xF;3zÆ6o];kݢI:^*X6o3uYŠ,M,],6rt-Rlj56j޺}} >z)gΞ;o .z?+ ϛ;{'5|~uj׺Y5U,[}YgbnH$b;3 ѝ%<eg +r wаQ'O5o+W]aMEGM7_z/7{ cGطG5Y\Im2
+~ oZiepPwE?utMkΛ6nXnV/_`+[ƴ)*ُ4xk bR6٠e^.]e.]uOWojߟڗҴB^g.;qhu/1a(upϗ#Kɓ$N
+W gݻy;7\8s]Z7X,ff S|,RT՘hc{6hե%#bVagYabXg¯Ċ ^X/sլu&gϟ߿{܉fһcs-$3̸͌}T'Z+]Nh=ZxjmbaGEOk߻ҽ{?О x`+H#T[=S( +OMtw, YiwXFe)f.X
+t8jw:u(gArN6R]ȿs놟kW\+W^{;w?xX^^\^,^|]+ر~#wmгBqL^3cdXFR˒A 8{N\zS؋sR*8(P|/W>}';v4,ǎ?qԙ/'}oܺ= =M OQ߅]ʗOD]>wl߶5KfڻCUf^of̸m9ӿ*W={6ml̴=vʍ{ODYN'
+{F4Kܿw۷mj}֭۶عk=~̹ '=40{&{PYfw|/9gFֶ̲gL"ibFf܋\ig)҈d:6q HŬ%/˨(0kTܷ{M_/[db׋/Yt+VYa;?x|\q}#t?srh>}⩃;/3qX늕m,R?UK.sN["eoui Woµ[3J}-wXӞO<^p1-֮\d93O2i Ǐ7Nτ 'M:mƬ9.^b [e]|QhKoٳ7?oE ֦gygrk"y,$|9&*휋Ujܮ 6v沘^~:/}$z{;%
+l֍ϟ=cqG <h~Z׷o 2l&O9g|w;t D}`yJ?gB>w]f֡Y%Mb&v,Zcb9-O!4o?qOB^Rob!A]xđm\b|1# ׻G7ʶmZjUmzЩKm1'O5oѲk7nݹѓ]ןp3mi\kNlW/S6gt)YŝX&J<MF|ͥomؙKX@>)5?p直vl^r&io=ٵS6-ioUӳF ?^^5kծSA&Zй[Ͼ-t'O`hi[w;tKbn6߻q& ծWbv,Y2IrX9F=N_m"\Ò\:'+lϝ1i{7Q6oܠn-jU*/Wt%KXRdeʖPJ5kkؤy+]z8d؉f_bm/Qa}f۷jElfZ0udNT.V(O60BW%g
+5v;bƴ z@>-_yL0j:m٤AիT([D1mg'GGK]LE=*Sb^7nʻS#
+mUk<,mX3+;[J f,c},.ie\v.+iyK:rʭamRb8ŅL?rp[6_۳jŲ1jBϗ7Oܹ?ɛ7_vxiФe]{<b\ucg.^L{)kmܺvMϝ8w#rEmsdN벱>K2wAU۸79~GR{?%vϙcwnZ-_&=jp4oXdzj2%<-z
+ϛ;bL7̔)s cb+TXjdيU<EKkѶc4cU=|e|B]_^8uDMkY\YXX_t,87֠M!ܲ6*˯򢕼4,kOٻmE&үG6Ԫ^lIe[L:SJ+qTd3d̔%kl vr5-QB7iծKCL`ͻ;sML'_hւo^9{x%3 B,\ ,bq.ΐ=oas { `Cg.ߴJB_ZJlֵO0b|ZZ*)h_ _ڶ`I"ĺ3ܽ8]r\yDOsp1BUQ ν ;e;rⵛ2{ʲ?lϦ֭uLXc҅{Yh#޶J/V]%eҹS׭}FW,SP0Q` `'m>)3f=-w>Yhf*5uȉ3,_
+jx
+֪uYu/k[j { p#N+jWݳyvnRJIJeJa#[ZxJ>Z)Qf-;<vU=`[W!N2nP[!YecO+eJWk{v=/kug8]2sFj効%1]vA:6Δ-WBE=8:6a֒ԛY2#-:wjM8nj=ѯJs+]Q>#/Y{/|
+ݳiż#woI+ar͝Ma'?!bɏ
+H*]l9r)Rrm9eMɷLf<ɼpl%Giרzi7.UE<uEҍ{O\Vcrq}ЎuKfܳ]ڕK;Y7q%Vg%J,wΨQjf{7S4||ifI=jU&&f\jieGx!KʔεT!kv[}T>q|ߖ׹e<\
+aَPϠ>3 cabkoչ߈Wl@LQeػqQ}5V.g4ʸax dΔKɪ lӾn>x*/}eS fmIJ%Ť̙UX3ĢxX.h.YVvZ^{E62_= MKgݠjI92NeF'2:R߻|S^ؓ
+5EE,[7%q,MނEV߲sSzए]yB^ʸqIVW)lk*3< d2dTr6F1%X=+Mֻ}ZJ
+珸 ]t9B%M:} Jfk9oګRen*۸t^mU.?{Te/z,}|E+ic%5]j,{6.5m('Xl{F'> E|;hfhoZ~s .$SL֣uEeKo\?$t$)eSH-hnXZd[ԭR,XfqN[LY:m򙉰*sbESvoY|y.d00 1qb"m܅ek6:xuOƂ\/ӾI
+\
+nic1y ?X7ۼfVХXy/ݽrZeb|wm^P,i94.i2*h*ٴ :vzLgm_=О k"Ek>BѽLuMgUwخ5' Գ[Ay!ſQpµTz ~أWܶR{yC77:ZG$M6SvP$m=pReA|ٱjU2SLeF$ֹDri.^?{tʙ[WP6m?!iۦt)^Ir[U o[1{Lv ;ŤxE~bXRG\w`;}`ˊ/9˕%l f,<*liٿWeb!yp#{[!o6g`x,&'9|\\>^c;S=;;kemfȴXWN̒UOLloZ:mXqn-Yx\݆LYaߩ+DYcwlUNPrm;={9&?'o]>wâɃ6*ce1~dŢt qb9q='.z,՛7Xϲ£]v/i3Wn?|Uy!c ;5^ֆeYGB&dE[ y5A)ϖެW[z[>$pt9c1|,b<+diq(*}FZO^{]X?QceyiLĚLfgUVFV+:{B<}^mT(-eF %ڰWĂ\=O_䉥ƮXƲO-cͦL{\iU&zY~)NڭEͲ&S30c0 [ 6j42xOk'D߹z>+52vX*Ӯ&ߗb _8qP&K:Ϟ>%3bu,Va}~bB^fںb\X,8|??!YV8l巉 :._ӫb9k\,_!Ou 26,+i{;^x߽ͫ~жJߏUVؽ\]L^^RSl?D.z],c00c*eX9, lmشe[T[ z|+q*˖סHڭz t(++eLҥiR.a;GN,,lqązW_x@X=wNM= T1Ju9,_!/ĜܳnT3$x}X&M1gAs:mzKgBF{L3c򡱼GAx* ;gc%qAAO޼xlY#{Ud#c*1}՟"].j4r< }-O,ݺ|rz% {0\JVoią"fHX;yMpdYG̹ ܠ bXXܹzz%/k,dYTƫySn.= Щ׮^"XD_LoSlVF^C^o~w-˦ٺNE6T^D.ik,l鋐,slNJ#z**)~e8q,^qSn9t^KQcOܸpdYx׷,rY^#NeDw?~=b`=sI:6;sdhE;S:mn)yfi]]yoXDykljۊeY.C,bp5sFn][ )ieћFשD]M}QRw޷aѤ:7Q.μ_'R>+ej9R c>=Cў.:se ZY&4W ޗцC[Mֽ|/Yv%q!U%=*o{嵿!/C߻vzXm[ɎV͉j46|ʝ/zibrmV(R8O) b$)g ̩˶ 3O_|/~Oֵi5k+Ȣ-Yv',xeկ Ky?~@U;j..1vwD+{}߳7,߯m򢕉̟cbkdYwN\a_Ԟ ۩$n<,8mvܰI6О}2yKw1kjdN42=kk 6vbE6aѦUo]<cyłq䱰 ̔fiZإ=={@m mty3"_(iyWkModOx{,SarPϻX?sV]W(+S*^]ωS^\/(3By-<_ 8*RLU<34򌥕_?l5KϚ6Yby8>F(2*Qq3VSKmEJ\9kvR˸z"\h.WM[Yʎn[> *̑!~"m.k3vSKف&2,;{Ÿ2s(Vq!ӖoyH<~f9z4QQ.mZ*_Ԡ˷q@WB3woqQ켐>|_FVTke.޲x
+Y@6i"I1y|1&?8UҥI.m4SJ*eG|swN0qfq?*4Dp€ w.+ktiRLB1u|e,SӇ/R]J{5z}g|_ItI'cHuWn $y43fΚ-LlYfɜ9SўLu,Rf ˫>yJ,REk%ʞ5s6I
+_8zvI,奚lX0OeMsJBԊ(݌K{<MsgkWPήm|yɝ;wMy(Rg',pj'ڳv޸{p-l?o\9sG@:"dH:M:K~է< g iSG<uHkU̺-8²_^HwwHh\LEKUjܮ|x7z[0-U+WCa{BcGi;ju|):
+˕-STɒ%DG[_^Tkm־K68{Yk_th^ϳJJ(^̣hws_q|-&EAGSJuZv6]{|C֫ݼph)4YִD<BL/S&O,`֏cdx*u7lԸq ׭SVM//OOOO5l޶KS jͻ{!;nڠn-/իURRŘ96Ŋy|ptmk^=B׾+L>wlMkU*avqrGuuh-K RHk4byV
+KUٰytڥsymӺUћVZmߩ{!c-\"?޽y(7$۽~M-7o֤q:2տ|h]tJj7n ȷ=Gw;hvlQ߳J2JF# lΑ58HUU>mޮ[C >| п_߾};}4dĸ)sq쵻_z
+s̡kΙ2nĐAݻWݻv#kҢE͚~UN-u8zҍO_g޾{;WNݰxڨݼ7WW?#REn΅̪}^|xw*VNNL6cYfL6e&?~\4f 'M>{՛w9{o޽[\:updž͜6yƎ3zC<Em_xm_<kѹ}6Q{
+ؒK4Qc7Fލ b-jbї{gvٝu<:9s2%xs-@
+
+(彭
+ZJ~?g%yFʢ%ʄHٸu縤/~΃R{?#{?y?xy#le5exḂa! @g`4x^kJ=}2fș7 ;:^$NeICbZ74ʖ,+97S+mMYM)GN튍;8Oh E^"/~pΞ8_vMjEa!r"1򽅧_"tݸMOlݶ}G\~!}L5bh KgO,飨r
+13Wc<T梶*+h
+FOHz˞ç޺gkʞ?ΕGvo\6wc6]Y /SHA?<2dynAV9]SG.߸K28G_[췟ټS+rCti
+.?t%%]~JK(IIWZJ
+]bJ.1] q %ivD#Qv>])i,!Pv.] s(ID!.$"2{9qo;~_t%LD$/PvK(IK% /X]:&^"ڰK(&^"Q,2LD$/P.2LD4ĥ
+9\
+Pd (s)@O\
+m Q淂>  P%2)@}
+P*2)@49)@49)@49)@49
+S(uB!Q>f:Gf(uB!Q"C49
+EhFs ьR(A49
+EhFs ьR(B49
+EhFs!Qef:GA>hPhFР рR(4(C4
+ ͨ!Q!24(CJdhPhAР Q:A"C2D5*EezԈ M(5Z
+D%i<m"c62` (2 DHD3`{O] qzy՚0DdGYY.Old&.X"CRdY+Uomo?s qzy)h 7x7 q/ZF٪'Sm:pç/PdCT,wAeZ{x7OM"+'i7%[% "ˑۿXnϦ-z­GPdcԉ?YsוP}3v$g/QdC4`;G/~"C^d> J :&bDZw"CRd@d%F=k>"CZdDd:%j׉ 2q9D(:qYdQdcD;g,ȐQ+m_.QdU NE&g;DO_#αٸMPdkGH% QK"+"C^/?KӪ yPrꩽkCDTdv(DO۬"C^#Ddr}LԵy$\3̎Pdd=vfo& ֢:R3W(2uꟿgܰp[KB!"O8w`Ӣ)hUS(S43=ٟ/~}x͋ٺX6@DQr^""f-KצTE^Ȟ=u֥>oWZ;wG"C{2DDd/=rd3Fn_BywY}Qdd=}_ۡ~Ű Pc;VбA%=W={ΕFjXI_"
+3 'CRdhOGО Qz=u"$+=m"C(DDf@!Pah"C3mf!*Qa!#n f!Paq6TX-bF VhD"f!QnqF[-bFVhD"f!QnqF[-bFVhD"f!Qnq*[-Z%+aFV:Z"[eāpD
+J3htɤgD$U8H!bk(p4VXJ9(k
+L + YPUٿqc͌OeO') qj;{=VytzR
+'j^ HKk \aLc
+p FQ#BG&F8$?%xCC1̇5N pdgci+6F-!:Gl|"R͙d  irz 'HDr #fֽRrСʹ%7 #h?uSҖڢgcdyjoFRPG^pv"'Vpk;/v ]&cHŲpN57df}F> 'X-)aۏ2yڛ&>ݸdo#M }qΒo V'0 Cwh`+p岜=Y7Zk!^
+]dD|< 3I斖x9HXOC*9 4FjT̗CT4
+Ja(gaJ!WyF3(|9z>)`#,,Se0Șo@g7ȢצG
+gu
+˂<O,aYrNz`:G d! 9/ *F0\A䢠h(h;HXV/ȗQJ-Kg ,x'OEIڄaY!Т̳#<e_+ү(k`GdlX4
+¨0*
+¨0*
+¨0*
+zGB¨0*
+¨ޟnHFQaTFvzeF?
+qHlTo>0%!S՛ LmHL[<n^ol1#tk$9oşQmM޳:jK,+s%olyx{O[ Wހ# 8=/}az汿/ 
+̛/EAE
+kw,tܞ~*]\hh9VP`A?h}r{(Zth8Img(_dP>P$nd<
+*j+V^vZ5EHlX.'ݡ7u r
+/߀|:V-ԯYh(S<0Gҫ.Pd(QQv-S W`
+ΒD.|0k5iۥgߤA%s5*M]oNv@(o~gаQcǏ=|p߮Gӽâ{&ɛHpx:-;2jҴgM2vhmWfK-zwbw* .Ytܼnls2|&Q?8s7[pƸ!=Տ/BJD60b޽coѯsj\N_"ky %%$x}kӲuoUXw֗N6+/A^q'رfᔡիPxA ˯p0[IQ_/ۼ鳧ݴdȾQ #K/Z%9=}K*78|䁭g߹I\u r9=|J+iK6?q>™;W?0Y$R*˦zu:mN]q߉S۽IC.畡zɥ*+Ǔsŋ|aMLJȗ^$luЄkv=r1ľצ\P7^t*+i윕;'ܼBGB%#F5sփ/\L>u`#z-fMWYYs)X<TVӗn9p*9JlȾW 0cB:m{ ;Zɧn]>sTBTJo:tZYZ{~:uцACVݯS}
+6R( %@XrA~ڳu-])#H>w_kSG/^DcK.q˒i[2ĹRNaY-q9̡=o*^g%tCۖ<cJn[ʥ5{ ۔8% endstream endobj 79 0 obj <</Length 4920>>stream
+N/wB FWTR wsQVѝ@%26G%:moDJTQ*KSQjW:gPX"YX%=\ >|嚣O #zdAs•kWjw =^|lJоF0nw2u(q ?`x)6?uNJcT=N]ӗPPX9y\P₃dӌz{6}^qڅNJ,sߑ_+7 T"3Y+Iz8f.\uz
+-a %@VpJ\ȴDYH~JەI;O R@%i=m yd`vGn^4m2ikA26=|%O jW._)Lq4.m+8yB#;uX<̑2̑SK՛&tӞ'N<&~Q:Rhq"jMF|p{<w3F'ŶAt3i8Sa^Lxm۷m^dΤTJ 7b1yַ߯ZEԭuJI?/K (*Voұ͞`iFشHV99ӕwLDqICG4yQC:SwuQd&V2{|ulQJWkAVjݦm:v1Q֩""+\3w̓ׯ^QI۴maWB|)MdHX` )JjԮSNU+LhB~)/m$BA%K7pd2n5_AŃK -_!ƶ@sq&
+,l?r?w c&ǒ'/YɑCހ/,*-Q
+wz`R-ҽPHe`3{= |/4M N^&Ȼ@k{rhq΁'PNIV>Nwxg/ XsոͦR#6J֦-6/e6Fm*ίoީv|t16wblI[`o&*UCzgr[ 靍q`¨bHlTQ)ꭇQaTOTn¨0*[݌r0*
+¨0*
+¨0*
+¨0*
+¨0*QaTFQaTջFQb``TCzgz+{zÁ) F*7!#
+h $Է{0<vAݻ@dMu5A8(j5SdK59r̙3'q0{Zd4=Gy<<=<===hba)=G^>|
+)VdpHHpŋ ,?_^bJ;Ө_@eˇ3,2˅,Vخ9)=i\8oTjU*U09i!'_@0b5iڤq:5*
+c1 nܲ]TtΝڷnޠf)7Ol}CXP^=KL߽sfuAy,V\eCjQ2_x!54(/a;8bi3f|5y찤QkU.R okT'5h_\xɒEgL1GFU2ňj>f~}1gɪ6[h֤ ]ZԔ2zfXN+k ۺk[V/1vP6u+KJMj
+f4wė߮پȱcrC;4q3Mv"$}Μ;wըN j$l}5j:rR,zTƲm hW6=?Jvڥ3-5:h4KZn^ujg.߸e69iv^3m=t;%A,`ɷxX~>s#ܽs=ΑE+Bq;9SĎ l=I bѨS+wKqJ?5EZ̜U;eW{#+ڂXFK\9{`w_ٺ1d{5O\q+g~ܸh]U+.śPN؞ufFW='IN[ͤZThϙnޓh{-8ksb bO3[Ğ66fwO_%.ƤgfTbv+rkЅuWkkQ^}\b\R[TKrR6qþZ๫w玣nM,iM[áܿ稄AP}o<'_k)A2)jGGvT0j&i7=wQ +CѳV8rރ.9,AI ixC%Қe.1vj%dMhw%,,:T֕힫ԕZoڠvn 2$6mK射Uxy ; g%2wnwX"qu wn;+A@-kSnܾ}i4\\WV/VMjGӜLFqK4ՌLvdqjNi>*K8xW0˽ma_~iW/[j'/<ΦWbnl6 %Ƥ-0w';˲ۛX՚9yYGƍ@Xp #t6e<|hU d>_x͖wm]t=Z1
+z۔HSg-^n5OCOٱK+\*x&K,؏{ulLvF(7wYtjuO:v3OiBu+*aS]!JM5wQcǎlHBCʰ_C3i҆
+5Q+}ڕAVjk /T߼mnݺvغI|hyWřç@`2bDz{nԈ‚92JUת]fdD~třlyV,aa#"޾J ]ϛeЯ&fE }A3)#oeJ9ř4 53L>E|ZlALw2[w3͙㯗nd}d](ԉiBZLߎ)$ #֝hxjʊ^bYr1Nb'+zx-PVo0YyQOg#GCY &)y(+2Lzg*w SYv\C,#HUWFF/h#ZxBMTGoԅq^^Wr<Ըy8g09$s}CK` >Pb>h0Vw>B$ffFH."`5
+z$yVeE#3ɇM(!N+.EILN\ifNTgW3 %+b,;F=IPiFrPc FtB*Mr8ȹI,<oc$|Ox> "~1BP:eΓ&rP+d֤]kA,e ̑jON2{[C@C?Q]62:b,?$ټV3#;jo+6F-!:Gl|~$wr' ʄ i#z5%ѨĐހ^K{I'9yi
+(.չ:RcWٹ#U( +"#GcHn(䬆B&"@Q1<QEbNȋ0󼮁Q9l0k}6^Y=2"@–w&-g!$n@TE
+|? ЖA,ǓC"!NUU<LnCC
+rY"^d"ԉOydX]ZO餈'Ctp] r(%MHIС0Òca^ `d%o0)'<:a:0F!wpju
+\2Vh<.uB3ayD{1tqG2d#Y+3JWrCn,CX$+?r&.OdwsCxH5'gt<E9g8֒5%O5{o=(6!,+8It =bNENN?b%N{
+0000000016 00000 n
+0000000144 00000 n
+0000044293 00000 n
+0000000000 00000 f
+0000122924 00000 n
+0000270588 00000 n
+0000044344 00000 n
+0000044851 00000 n
+0000047150 00000 n
+0000123337 00000 n
+0000052618 00000 n
+0000123110 00000 n
+0000123224 00000 n
+0000120651 00000 n
+0000120794 00000 n
+0000120937 00000 n
+0000121080 00000 n
+0000121223 00000 n
+0000121366 00000 n
+0000048770 00000 n
+0000049060 00000 n
+0000049355 00000 n
+0000047211 00000 n
+0000270553 00000 n
+0000048209 00000 n
+0000048257 00000 n
+0000064648 00000 n
+0000050071 00000 n
+0000093545 00000 n
+0000064711 00000 n
+0000058513 00000 n
+0000061516 00000 n
+0000058576 00000 n
+0000049650 00000 n
+0000055355 00000 n
+0000049713 00000 n
+0000050114 00000 n
+0000052653 00000 n
+0000052707 00000 n
+0000055469 00000 n
+0000055532 00000 n
+0000055562 00000 n
+0000055824 00000 n
+0000058401 00000 n
+0000055897 00000 n
+0000058926 00000 n
+0000061630 00000 n
+0000061693 00000 n
+0000061723 00000 n
+0000061985 00000 n
+0000062058 00000 n
+0000066976 00000 n
+0000093659 00000 n
+0000093722 00000 n
+0000093752 00000 n
+0000094009 00000 n
+0000094082 00000 n
+0000121509 00000 n
+0000122705 00000 n
+0000122389 00000 n
+0000122180 00000 n
+0000121970 00000 n
+0000121757 00000 n
+0000121544 00000 n
+0000121639 00000 n
+0000121852 00000 n
+0000122065 00000 n
+0000122275 00000 n
+0000122506 00000 n
+0000122615 00000 n
+0000122800 00000 n
+0000122994 00000 n
+0000123025 00000 n
+0000123411 00000 n
+0000123629 00000 n
+0000124612 00000 n
+0000134406 00000 n
+0000199994 00000 n
+0000265582 00000 n
+0000270611 00000 n
+trailer <</Size 81/Root 1 0 R/Info 80 0 R/ID[<52D8D36F9F0F4093A63E37ACF2897B45><5FF1FD3406B84938948F332CEEC035D6>]>> startxref 270795 %%EOF \ No newline at end of file
diff --git a/docs/html/images/brand/Google_Play_Store_48.png b/docs/html/images/brand/Google_Play_Store_48.png
new file mode 100644
index 0000000..2f0cfe0
--- /dev/null
+++ b/docs/html/images/brand/Google_Play_Store_48.png
Binary files differ
diff --git a/docs/html/images/brand/Google_Play_Store_96.png b/docs/html/images/brand/Google_Play_Store_96.png
new file mode 100644
index 0000000..6e2c835
--- /dev/null
+++ b/docs/html/images/brand/Google_Play_Store_96.png
Binary files differ
diff --git a/docs/html/images/brand/android_logo_no.png b/docs/html/images/brand/android_logo_no.png
new file mode 100644
index 0000000..8de22d8
--- /dev/null
+++ b/docs/html/images/brand/android_logo_no.png
Binary files differ
diff --git a/docs/html/images/brand/droid.gif b/docs/html/images/brand/droid.gif
deleted file mode 100644
index 7c7b941..0000000
--- a/docs/html/images/brand/droid.gif
+++ /dev/null
Binary files differ
diff --git a/docs/html/images/brand/en_app_rgb_wo.ai b/docs/html/images/brand/en_app_rgb_wo.ai
new file mode 100644
index 0000000..db27314
--- /dev/null
+++ b/docs/html/images/brand/en_app_rgb_wo.ai
@@ -0,0 +1,1779 @@
+%PDF-1.5 %
+1 0 obj <</Metadata 2 0 R/OCProperties<</D<</ON[6 0 R 7 0 R 45 0 R 46 0 R 83 0 R 84 0 R 121 0 R 122 0 R 159 0 R 160 0 R 197 0 R 198 0 R 235 0 R 236 0 R 273 0 R 274 0 R 311 0 R 312 0 R 349 0 R 350 0 R 386 0 R 387 0 R]/Order 388 0 R/RBGroups[]>>/OCGs[6 0 R 7 0 R 45 0 R 46 0 R 83 0 R 84 0 R 121 0 R 122 0 R 159 0 R 160 0 R 197 0 R 198 0 R 235 0 R 236 0 R 273 0 R 274 0 R 311 0 R 312 0 R 349 0 R 350 0 R 386 0 R 387 0 R]>>/Pages 3 0 R/Type/Catalog>> endobj 2 0 obj <</Length 49811/Subtype/XML/Type/Metadata>>stream
+<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
+<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 5.3-c011 66.145661, 2012/02/06-14:56:27 ">
+ <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
+ <rdf:Description rdf:about=""
+ xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <dc:format>application/pdf</dc:format>
+ <dc:title>
+ <rdf:Alt>
+ <rdf:li xml:lang="x-default">google_badge_de</rdf:li>
+ </rdf:Alt>
+ </dc:title>
+ </rdf:Description>
+ <rdf:Description rdf:about=""
+ xmlns:xmp="http://ns.adobe.com/xap/1.0/"
+ xmlns:xmpGImg="http://ns.adobe.com/xap/1.0/g/img/">
+ <xmp:MetadataDate>2012-07-13T15:55:18-07:00</xmp:MetadataDate>
+ <xmp:ModifyDate>2012-07-13T15:55:18-07:00</xmp:ModifyDate>
+ <xmp:CreateDate>2012-06-12T19:07-07:00</xmp:CreateDate>
+ <xmp:CreatorTool>Adobe Illustrator CS5</xmp:CreatorTool>
+ <xmp:Thumbnails>
+ <rdf:Alt>
+ <rdf:li rdf:parseType="Resource">
+ <xmpGImg:width>256</xmpGImg:width>
+ <xmpGImg:height>112</xmpGImg:height>
+ <xmpGImg:format>JPEG</xmpGImg:format>
+ <xmpGImg:image>/9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA&#xA;AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK&#xA;DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f&#xA;Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgAcAEAAwER&#xA;AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA&#xA;AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB&#xA;UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE&#xA;1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ&#xA;qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy&#xA;obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp&#xA;0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo&#xA;+DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A5J+Zv5m/mTZ/mT5ss7Pz&#xA;ZrNtaW2s6hDb28OoXSRxxpdSKiIiyBVVVFAB0xVjX/K2PzT/AOpy1z/uJXn/AFUxV3/K2PzT/wCp&#xA;y1z/ALiV5/1UxV3/ACtj80/+py1z/uJXn/VTFXf8rY/NP/qctc/7iV5/1UxV3/K2PzT/AOpy1z/u&#xA;JXn/AFUxV3/K2PzT/wCpy1z/ALiV5/1UxV3/ACtj80/+py1z/uJXn/VTFXf8rY/NP/qctc/7iV5/&#xA;1UxV3/K2PzT/AOpy1z/uJXn/AFUxV3/K2PzT/wCpy1z/ALiV5/1UxV3/ACtj80/+py1z/uJXn/VT&#xA;FXf8rY/NP/qctc/7iV5/1UxV3/K2PzT/AOpy1z/uJXn/AFUxV3/K2PzT/wCpy1z/ALiV5/1UxV3/&#xA;ACtj80/+py1z/uJXn/VTFXf8rY/NP/qctc/7iV5/1UxV3/K2PzT/AOpy1z/uJXn/AFUxV3/K2PzT&#xA;/wCpy1z/ALiV5/1UxV3/ACtj80/+py1z/uJXn/VTFXf8rY/NP/qctc/7iV5/1UxV3/K2PzT/AOpy&#xA;1z/uJXn/AFUxV3/K2PzT/wCpy1z/ALiV5/1UxV3/ACtj80/+py1z/uJXn/VTFXf8rY/NP/qctc/7&#xA;iV5/1UxV3/K2PzT/AOpy1z/uJXn/AFUxV3/K2PzT/wCpy1z/ALiV5/1UxV3/ACtj80/+py1z/uJX&#xA;n/VTFXf8rY/NP/qctc/7iV5/1UxV3/K2PzT/AOpy1z/uJXn/AFUxV3/K2PzT/wCpy1z/ALiV5/1U&#xA;xVkv5Zfmb+ZN5+ZPlOzvPNms3Npc6zp8NxbzahdPHJG91Gro6NIVZWU0IPXFWNfmx/5NPzl/23NS&#xA;/wCoyTFWM2trc3dzFa2sT3FzO6xwQRKXkd2NFVFWpZidgBir0s/klDosEcnn3zZpnlO4lUONKcS3&#xA;+oorCqtLbWocxhq7Vavtiql/gD8nv/LqQf8AcE1P/mnFXf4A/J7/AMupB/3BNT/5pxV3+APye/8A&#xA;LqQf9wTU/wDmnFXf4A/J7/y6kH/cE1P/AJpxV3+APye/8upB/wBwTU/+acVd/gD8nv8Ay6kH/cE1&#xA;P/mnFXf4A/J7/wAupB/3BNT/AOacVd/gD8nv/LqQf9wTU/8AmnFXf4A/J7/y6kH/AHBNT/5pxV3+&#xA;APye/wDLqQf9wTU/+acVd/gD8nv/AC6kH/cE1P8A5pxV3+APye/8upB/3BNT/wCacVd/gD8nv/Lq&#xA;Qf8AcE1P/mnFXf4A/J7/AMupB/3BNT/5pxV3+APye/8ALqQf9wTU/wDmnFXf4A/J7/y6kH/cE1P/&#xA;AJpxV3+APye/8upB/wBwTU/+acVd/gD8nv8Ay6kH/cE1P/mnFXf4A/J7/wAupB/3BNT/AOacVd/g&#xA;D8nv/LqQf9wTU/8AmnFXf4A/J7/y6kH/AHBNT/5pxV3+APye/wDLqQf9wTU/+acVd/gD8nv/AC6k&#xA;H/cE1P8A5pxV3+APye/8upB/3BNT/wCacVd/gD8nv/LqQf8AcE1P/mnFXf4A/J7/AMupB/3BNT/5&#xA;pxVWh/JnRNc/c+R/POleYdSP93pU6T6XczN/JbrdhVkb25DFXnGqaXqWlahPp2p20lnf2rmO4tpl&#xA;KSIw7Mp3xVkP5T/+TT8m/wDbc03/AKjI8Vd+bH/k0/OX/bc1L/qMkxVlv5f3EfkX8uNS/MRI0fzJ&#xA;qN2dD8rSSDl9W/depeXqA7clRhGh7N4gnFXll1dXN3cy3V1K9xczu0k88rF5HdjVmdmqWYnck4qp&#xA;Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FW1ZlYMpKspqr&#xA;DYgjuMVeseaL+T8wPymi8237CbzZ5RuodL1m8P8AeXWnXYb6nNMf2pI5UaOvUjcknFWI/lP/AOTT&#xA;8m/9tzTf+oyPFXfmx/5NPzl/23NS/wCoyTFWQeZv/JC+SP8Atq6x/wAyMVeaYq7FXYq7FXYq7FXq&#xA;/wDzjh5Ys9R88y+YtVj9TQ/KFpLrN8CvMM8KkwIBvVufxgU340xVNP8AnIewt9c0/wArfmdYWQsY&#xA;fMtp9W1a1ReKw6hafAymtD8Sghdtwle+KvTP+cjvy+0Dzpd6xL5XgWLzt5Phhk1TTo0CteafNEJV&#xA;ljVfttEWI8ex/YxVF3bJp3/OR35jXdrDEslh5NlurVWjRkWWKO0dW4EFftDwxVgPkjzZJ+celeZf&#xA;LXnLTbKbUtP0m41XR/MFrbx21xby2xUBJDEArRsZBtt36kghVmnlSz/NZ/ye/Lr/AJVzBp7SyxXx&#xA;1f66lqSwW5Ho09ccyAPU5cN/wxVA3Hlz8trv86PNfmGCxsNStPJ/l5tWvtIsgPqc+rwITIFShRlU&#xA;L8Qp9s/FvyxVj/5afm/rP5n+cIPInnrT7HU/L2uJPDbwQ20cD2LpE8qPbOo5rx4U3JI6123VSrVN&#xA;Gg0v8hbWx+CaWy/MB7M3IUVdYbaVOvgeNcVZT+cH52a/5V/OTVfLT6bp2reU7drNJdGuLKBzJFPa&#xA;wSyqH4h+ZaRuPIkexGKvJfz+8laR5O/NLV9G0cenpn7q5trevL0VuI1kMVTvRWJ41/Zpir038gv0&#xA;R5C8hL521vTxev5r1e30e0R4/UEWnxufrVzSh+EHmDt1VfHFVb8pPIcflH/nKXUvLcsIeyt4LuWx&#xA;EihgbaZFlg61qVRwpPiDiqYea/8AFH/KqvNf/K4P0J9Z9JP8KfVfqn1367X/AHX9V/Z+zy70rXbF&#xA;WXzQ/mbFJ5EHl2PR18mPoemNro1IWgqSp+sluf78r6HH7O1fpxV8r/m1/hb/AJWR5g/wr6f6A+tt&#xA;9S9D+56D1PS7en6nLjTanTbFXr/5j+fdT/Je80vyR5DtbOxWHToLjWNVkt4rie/nnBLs7uGrH8O1&#xA;PkNgMVT/AEfS9B1j8wfyh/MC20y20y781rfJrOnW8fC3e4tIXVp0jNaeoWNf9j1NSVUVdfl7oOq/&#xA;nDoH5ieT4Vk0c63Jp3mnTgo/0PUIGaJpGQVAjmND8yD+3sq+aPzAVV8++ZFUBVXVb0Ko2AAuH2GK&#xA;pBirsVel/l+T/wAqc/NUV2MGiEjtUamuKsf/ACn/APJp+Tf+25pv/UZHirvzY/8AJp+cv+25qX/U&#xA;ZJirIPM3/khfJH/bV1j/AJkYq80xV2KuxV2KuxV2KvSPI351ar5H8janoXlq0Nlr2qXcdxP5iEqO&#xA;6wwgBYEt3iZf5viLn7R2xVE6z+fnmPzN+X+qeU/OMJ124uriG60vV2kjgks5IutI0hIkDLVeqmjH&#xA;fFXa1+fOtXP5wL+ZWkWf6LuaQxyac0xnSSGONYpIpHCRVWRV/l26jcA4qm6/85EWj/mjr/na88sf&#xA;WbPzBpB0W50b680fGNhCrt9YWDkeSwUoEB367YqlupfnXoll5Y1Py/5B8nW/lGPW4/Q1a++uT6hd&#xA;SQGoaJJZlQorAkEb7E9DviqWv+cuqQaV5AttKtPqN/5Da7eC+9b1Bc/W5UkZWj4JwXihRhybkD2x&#xA;VFp+djab+aV5568t6JFpkGqIyavoU031m2uRPQ3AJEcNFkYB6cTRvEbYqm9t+d/kPy215qXkDyFH&#xA;oXma8jeJNUuL6W8W0Eoo5t4XUKD4HanShX4cVYgPzMf/AJVrZ+S5LAyPa66NffU2nqZD6LRGExFO&#xA;/Llz5/RirPdY/wCcg/y+1LzVL5xl/LGCXzUzRyR6hdatcTxCWCNYona19FIW4LGtKAdK1rviryHz&#xA;X5o1nzV5hvvMGszevqOoSepO4HFRQBVRB2VFAVR4DFXo+p/85J+dINL0TRvJZbytpGjWMdmbaN4b&#xA;tp5UryneSSBKF/5QOtTXfFU0s/8AnJuRfOHl3zfqHl365r2j6XLpWo3IvBEL4PQpKVFuwiKtzJA5&#xA;A8u1MVeHYqzD8yvzB/xrdaFcfUP0f+hdGtNG4+t63q/VDIfWrwj48vU+zvSnU4qw/FXr0H51eUdc&#xA;0XSrH8xvJy+ZL/RYUtbLV4L2Wyne2j+zFPwB9Snjy+ipJKqlN+f99L+Y/l3zT+hoYNE8qxtBovlq&#xA;2l9KKGFomjI9b02+I1FW9PfiBTFVD8u/z61ryT591rzJa2X1rTNennn1DRGnKKTLI0sRWbg1HiZ6&#xA;cvT3FRQV2Vee+YdW/TGv6nq/peh+kbue79Dlz4evI0nDlReXHlStBiqX4q7FXpfkD/yT35qf8YNE&#xA;/wC6muKsf/Kf/wAmn5N/7bmm/wDUZHirvzY/8mn5y/7bmpf9RkmKsg8zf+SF8kf9tXWP+ZGKsH8v&#xA;aDda5qIsbZ0jfgzl5K8QF234hj1I7ZdhwnJKg0ajOMUeIonzJ5L8xeXXX9JWpFtIf3F7H8cEg/yX&#xA;H6mofbK5RMTRRg1UMo9J+HVI8i5DsVdirsVdirsVdirsVdirsVdirsVdirsVTTQ/K3mfX3lTQtIv&#xA;dWeEAzLY20tyUB6FhEr0+nFVDVtF1jRr1rHV7G4069QBntbuJ4JQGFQSkgVt/liqCxV2KuxV2Kux&#xA;V2KuxV2KuxV2KvS/IH/knvzU/wCMGif91NcVY/8AlP8A+TT8m/8Abc03/qMjxV35sf8Ak0/OX/bc&#xA;1L/qMkxVkHmb/wAkL5I/7ausf8yMVSv8oIvV82Ov/LrIf+GTM3QGsnwdZ2saxfF9AaS0Mcb2OoQJ&#xA;d6XcfDPbyqHWh78WqD8sy9Zg8QWPqecjko2xvzp/zjPpupxNqXk64WzmkHMWExZrZ67/ALuT4mj+&#xA;RqP9XOeOfhNSd9ptfKvVuO94F5j8q+YvLV+bDXbCWwutyqyj4XUbco3FVdfdSRl8ZiXJ2sJiQsJT&#xA;kmbsVeofk9+U1h5os9V82eabqTTfI3l5DJqN1EP3s8iqH+rw1rvQipoTuoG7bKqOofnRLZTtB5G8&#xA;v6V5a0qM8betlbX97Ig2BuLm9SdnY9dqU/HFWXeQ/wA3fIfmaS50r82PLekS2n1eSVfMFrbJZ3ga&#xA;Ndoz9WCM5fovp8aHqCNwq8U1mTSZNWvH0eKaDSmmc2MNy6yTLDX4BIyhVLU60GKoZLeeSN5EjZo4&#xA;/wC8dVJVa+JHTFVPFW1VmYKoLMxoqjcknsMVXTQzQuY5o2jkHVHBU7+xxVZirsVe5f8AOIV/fD82&#xA;LeyFzKLI2d25tubekX4r8XCvGvvTFWCfnazN+bvm8sST+lbkVO+wkIA+7FWGCCcwmYRsYQeJloeI&#xA;bw5dK4qp4q7FVU21wIBOYnEDGiylTwJ6UDdO2KvQfyC8v6Nr35kW2naxaR3ti9pfSNbyglS8VrI6&#xA;Han2WAOKvOcVVp7S6t+P1iGSHlXj6ila060qPfFVHFXYq7FXpfkD/wAk9+an/GDRP+6muKsf/Kf/&#xA;AMmn5N/7bmm/9RkeKu/Nj/yafnL/ALbmpf8AUZJirIPM3/khfJH/AG1dY/5kYqofkXF6vnV1/wCX&#xA;OU/8OmZWkNT+Dqe2TWH/ADh+l9Dx6f7ZsDN5MzZD5dvpdOkEcoL2jn4l7qf5lzV6/SDKLj9f3uTp&#xA;dXwGj9Ka+crHy5rumHSryzg1O3mozCVQ6oabMh6q+/UbjOX8ScJdxD6B2N2WMtZZf3fT+l+x86+d&#xA;/wDnGW/iWS+8oTG5jFWOl3DASgeEUporewanzOZuHtOPKfzdhquza3xn4PDJ4JoJpIJ0aKaJiksb&#xA;gqyspoysDuCDm0Bvd1BD6g13TzYf84V6eNO/u7qSG41J0/a9W+JPP/Vk9NfoGFXy3irsVex/844/&#xA;ldo/m3VdY1/zDCbry/5Xtxcz2IPH6zMyu0cbHb4AsTMwr1oDsTiqTJ/zkL+aNvri6jpupjTbKF62&#xA;2hWsaR6bHCDtALZQEK8fhqfi9674q9Z/OT8uvL3n38tdD/NHylp0Wn6tqLWsepWcACxyvdzLakEC&#xA;i+pFdNw5U+IbnpirHvzekl/JRNE8l+S3Wx1a5sFv9c8yoi/Xrl5JJIhHHMQWhiUxMeKU2pv9rkqy&#xA;D8iPOlv+bdrqP5d/mTGutzJbNdaRqsyr9cjVSFkVZqcvUXmHRutOQao2xVKPI/5K6X5Y078xfNXm&#xA;Kzj11/JUt1ZaPYTpytpbiCETLcXENRzThLE3E7ULdSBRVM/+cb/zs1bXvO3+EvM8VnPaarHKdLaG&#xA;0t7b6vNGpl9JPRSMemyK1K1PKm++Koz8txr1t/zljqOk6vqcupnTILyGzllCLxgeNJIxwjCRqeDj&#xA;lxUVO+KpZoH5daP5h/Ob80PNGvWn6R0fylcXl3+jGqEurkmV4o3/AJkUQsWXueNdqgqu/Lvzr+bO&#xA;la7D5g8/6pbeXvIlyH+saPqipDHLbMG/d2GmIpn2r8JVKHuW3qq8Z/NrUfIepeeb+/8AI1vJa6Dc&#xA;cXW3kjEKLMR+89GMFuMbH4lBpStKAUxVn/5M6voeh/lD591vVdHh1tbG70trWxuRWFp2eRYjL3Ma&#xA;uQzL+1SmKpTp/wDzk9+akWprLqN3b6noznhc6BNa262cluaAwhUjDKOOwNfnXeqr0fy/5P0HQv8A&#xA;nIDRNV8tRGDy35p0C61nTLftCLiyl5wjw4n4qfshqdsVeUflh+Y3l/yT5e1i5stKe7/MS7kji0HU&#xA;pYYp7ezi25Oiuxb1ia0/dntvSoKrPvyy/Mf82PMHm+x8tefbK58weVddlFnqFrqFiAkfrAqsySCN&#xA;DGUY169PehCqE8p+X7DVbX8zfybRRLeadeXeoeU5Xp6puNMmaKSIMe80SKKf6xxV495J8q33mvzd&#xA;pXlyzBFxqVykBYCvBK1lkI8I4wzH5Yqy38/fMml6t5/m03RUSLQPLUMei6WkYAUpaDg71UfFyk5U&#xA;buoGKrvIH/knvzU/4waJ/wB1NcVY/wDlP/5NPyb/ANtzTf8AqMjxV35sf+TT85f9tzUv+oyTFWQe&#xA;Zv8AyQvkj/tq6x/zIxVW/wCcdIfV/MCRf+XGY/8ADx5dhNSdN26awf5w/S+oI9P9syDN40yY75r8&#xA;xw6dysLJg16RSVxuIgf+Nv1ZXkmae49lPZc6uQz5xWEch/P/AOO/exvRvPtl5ZrLrNwE0uRv3hc1&#xA;ZWO5ZBuzHxUdc53V6czPp+p9X12PFDFxEiHCNv1fqYf5/wD+cnr+49Sw8l25src1VtVuVDTt2rFF&#xA;usfzbkfZTjp+yhzyG/J4zPrydovB5ppp5pJpnaSaVi8kjklmZjUsSepJzbgU64l9R/8AONXnLyz5&#xA;s/L7Ufyf8zTCKSZZ10sMwX1YJyZGSIn/AHbDMTIB3rt9k4VeH/mZ+UXnL8vdWktdYtHfTy5Flq8S&#xA;k206fskNuEenVG3HuKEqvRf+cZ/Maaz560ryheaFo8ujGG5kuC2nwyzyNHCzK0lxKJJPtgd/bpti&#xA;r1P8t/Ofl7T/AM8vP/kTUI7WxtNVlhg0i2jjjt4G+rxsj24WMIvORZajarEHetMVfLf5jfl7rnkj&#xA;zfeeXtQt5Kxyt+j5yp43NuzfupYyNm5CladGqvUYq921PzhL+WH/ADj35U8saiP+dpv7uLUm0liR&#xA;LBaRah9fHqr1T1OCLxNDVm/lOKq//OUvl2Hzz5X0D80PKf8AuS02G2aDUJIfieO3LepGzqKlfSka&#xA;RZB+yTv0OKsE/wCcVNNubbz9L5vvD9T8taBZ3Mmp6pN8FuhkjMaRlzsWPLlx9sVTjyz/AM5N6dY+&#xA;dPOZ1zTJdS8l+bLqR2tY+KzxRGP6sDwYqr+pboquvMdNj4qsk8jfl95O8meU7v8AO7yidR8xLaxX&#xA;LeX9Iu4o4mhBlazkkuPTaRpPT+NiV4/DvTvirEv+cYNa1TzB+f02t6k5nv762vrm7lAoOUlK7D7K&#xA;1NAMVei/lP5v03S/z+/Mjylq7CBfMl/I9gZSYw8sMko9JTtvLHNVd/2dtzirwv8ANb8kPPvk/wAy&#xA;XMDWN5q2ku5On6vDHJOskNfgEjKG4SAbMrd+lRvirAdW0TV9HuEttVs5bG5eNZRb3CGOUI/2WZGo&#xA;y8uoqNxv0xV6/wDlF5V1fzT+Sn5iaPo6LNqUlzpctvbswVpTC8kjRpXq7Kp4judsVeU6X5S8y6rr&#xA;8fl6x0y4l1uST0vqHpssqtXfmrAcAv7RagA3OKvp20urCz/PHyf5Ms50um8neV7jTb+4jNVN4LKQ&#xA;zKPl8PyJI7Yqwn8vX1Hyr/zj9qPnfyXZxT+bJNUNlqmqmNZ7iwsggP7lWVgtSycjT9qp6DiqrfkT&#xA;5h/PDzZ560q6ute1STyza3McuqXV3PItm6cwBb1YhHeZyEVF336UxVgevebLzyj/AM5B655ks6mb&#xA;TPMuoTNGDTnH9clWWOv/ABZGzL9OKvYNX8taZ+WmoedvzY09kaw1a0j/AMByKQAbnWlLyOijp6A5&#xA;FR/Jir5YJLEkmpO5J6k4q9K8gf8AknvzU/4waJ/3U1xVj/5T/wDk0/Jv/bc03/qMjxV35sf+TT85&#xA;f9tzUv8AqMkxVkHmb/yQvkj/ALausf8AMjFUy/5xgQP+ZMoPT9HTn/kpFkond0ftB/i/+cP0vefP&#xA;/n6y0OCWztJkS7A/0i5YgJAp9ztz/Vmfh09jjltFj7Nezf5is+o2wDkD/F/x37+T538w/mpFGzx6&#xA;Qv1iZied5NXjU9SqmjMfc/jmPnyAmg+iZ+244xw4Ry69B7g871HU9Q1K4NzfTvcTH9pz0HgB0A9h&#xA;mKA8/mzzyy4pmyhcLS7FVyO8brJGxR0IZHU0II3BBGKvRNL/AOch/wA59NsfqUHmeea3pxpeRW96&#xA;xHgXuo5nP34qgb387PzSuopIR5gnso5d5F05IdPDbU3+ppBXFWGz3d1PctdTzSS3Ltzed2LSFv5i&#xA;xNa4qzK3/O782YLOO0TzTftFFtEZJPVkSgI+GWQNIOvZsVYff6jqGo3kt7qFzLeXkx5TXNw7Syu3&#xA;izuSxPzOKpv5W8/edPKjSHy7rV3pizGs0UErLE56cmjNUY+5FcVX+ZPzC87+ZYUt9c1q6vbWM8o7&#xA;R34wKxJPIQpxjB368cVerL5G8qfl3+TGj+ftW0iHzJ5k8xyRrp1velzYWkcqPKjPCjJ6zGOPcMaV&#xA;Ptuqhvy4/wCcpPNXlnVILe+sbBvKrufrOlafZ29kIg7VaWH0FjBceD15ex+LFVX/AJyBkf8ALr82&#xA;p7nyDfzaIut6fDe3aWLtAFeaR+aALQqr+ksnHxOKvJ/MHnjzj5ie3fXdavdTa1JNsbmd5PTJ3JTk&#xA;fhO3UYqyO3/Pz847fTxYR+bL76uBxDOyvKAKf7udWl7fzYqwe9vby+upby9nkurudi89xM7SSOx6&#xA;s7sSzH3OKvU/Id1c2n5DfmBdWsr29zBqOiSQTxMUkR1nYqyMtCrA7gjFUul/5yO/OyXTf0c3mq4F&#xA;vx4c0it0np/zELEJ6/5XOuKsL0HzRr+g6v8ApjSb17bU+Mqm6oruROpSSvqBgeSsanFUb5O/MLzp&#xA;5MuZLjyzq8+mvNT10jKtFJxrx9SKQPG9KmnJdsVTHX/zk/M/zBfWV9q3mK6nn06ZbqyCcIY450PJ&#xA;JFihWOPkp6HjiqF0fyv5/wDzF1q+u9MsrjXNTkkWXUZ0C1DzsQHlY8VHIg74qzr8/tbj06y8r/ll&#xA;ZXwvrfyfZhNUnRy6PqUu8qAmu0I+FR+zyK9sVeOYq9L8gf8AknvzU/4waJ/3U1xVj/5T/wDk0/Jv&#xA;/bc03/qMjxV35sf+TT85f9tzUv8AqMkxVlFvbN5m/IFobFfU1HyTqsl3e261LHTtRjUevTvwmio1&#xA;Oi7nFWFeTfOeteUNVfVNHaNbuSCS2JlUsAklKkUK0YFQQclCXCbq2jPp4ZQBMWAbr3ILWfMGr6zc&#xA;NNqFw0pJLBK0QE71A8fc75Zm1E8h9R/U5uXPKex5DkOg+CXZS0uxV2KuxV2KuxV2KuxV2KuxV2Ku&#xA;xV7H5K/5yBgs/JC+Q/O/l6LzR5YiHG1BlMFzCobkoDgNXhU8COLDpyptiqUyec/ya0u8GoeXvJV1&#xA;dXsbCS2i1m/MtnFIu6lreFEeYA0+F5aHvirB/M/mbW/M+u3mu63ctd6nfPznmag6AKqqo2VVUBVA&#xA;6DFUqxV2KuxVes0qxtErsI3oXQEhSR0qO9MVWYq7FXYq7FUVY6pqdgXNjdzWhlAEhgkePkB0DcSK&#xA;9cVQxJJqdyepxVrFXqHliBtJ/IbzrqV5+7j8yXumaTpYOxkezmN5cMAdyqqqio2rtirGvyn/APJp&#xA;+Tf+25pv/UZHirvzY/8AJp+cv+25qX/UZJiqD8k+dtc8m69HrOkOnqhWhubWZecFzbybSQTxn7cb&#xA;jqPpG+Ks1u7X8hfNTG/h1S88g6hLVrrTZrWTU9PDnc/VntyJkQ9gy7dBtiqG/wAAfk9/5dSD/uCa&#xA;n/zTirv8Afk9/wCXUg/7gmp/804q7/AH5Pf+XUg/7gmp/wDNOKu/wB+T3/l1IP8AuCan/wA04q7/&#xA;AAB+T3/l1IP+4Jqf/NOKu/wB+T3/AJdSD/uCan/zTirv8Afk9/5dSD/uCan/AM04q7/AH5Pf+XUg&#xA;/wC4Jqf/ADTirv8AAH5Pf+XUg/7gmp/804q7/AH5Pf8Al1IP+4Jqf/NOKu/wB+T3/l1IP+4Jqf8A&#xA;zTirv8Afk9/5dSD/ALgmp/8ANOKu/wAAfk9/5dSD/uCan/zTirv8Afk9/wCXUg/7gmp/804q7/AH&#xA;5Pf+XUg/7gmp/wDNOKu/wB+T3/l1IP8AuCan/wA04q7/AAB+T3/l1IP+4Jqf/NOKu/wB+T3/AJdS&#xA;D/uCan/zTirv8Afk9/5dSD/uCan/AM04q7/AH5Pf+XUg/wC4Jqf/ADTirv8AAH5Pf+XUg/7gmp/8&#xA;04q7/AH5Pf8Al1IP+4Jqf/NOKu/wB+T3/l1IP+4Jqf8AzTirv8Afk9/5dSD/ALgmp/8ANOKu/wAA&#xA;fk9/5dSD/uCan/zTirv8Afk9/wCXUg/7gmp/804qqweW/wAhNHYXepecb7zQqbrpelabLYlyOge4&#xA;vCOKnvxWtOhxVjn5gfmDdebbizggs4tH8u6RGYNE0O2JMVtExqxLmjSSyEVkkbdjiq38p/8Ayafk&#xA;3/tuab/1GR4q782P/Jp+cv8Atual/wBRkmKsUxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2K&#xA;uxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Ksr/Kf/wAmn5N/7bmm/wDUZHir2bz1/wA4n/mhrnnf&#xA;zDrVlLpgs9U1O8vbYSXEiv6VxcPKnICI0PFhXfFUj/6E2/Nz/f2lf9JMv/VHFXf9Cbfm5/v7Sv8A&#xA;pJl/6o4q7/oTb83P9/aV/wBJMv8A1RxV3/Qm35uf7+0r/pJl/wCqOKu/6E2/Nz/f2lf9JMv/AFRx&#xA;V3/Qm35uf7+0r/pJl/6o4q7/AKE2/Nz/AH9pX/STL/1RxV3/AEJt+bn+/tK/6SZf+qOKu/6E2/Nz&#xA;/f2lf9JMv/VHFXf9Cbfm5/v7Sv8ApJl/6o4q7/oTb83P9/aV/wBJMv8A1RxV3/Qm35uf7+0r/pJl&#xA;/wCqOKu/6E2/Nz/f2lf9JMv/AFRxV3/Qm35uf7+0r/pJl/6o4q7/AKE2/Nz/AH9pX/STL/1RxV3/&#xA;AEJt+bn+/tK/6SZf+qOKu/6E2/Nz/f2lf9JMv/VHFXf9Cbfm5/v7Sv8ApJl/6o4q7/oTb83P9/aV&#xA;/wBJMv8A1RxV3/Qm35uf7+0r/pJl/wCqOKu/6E2/Nz/f2lf9JMv/AFRxV3/Qm35uf7+0r/pJl/6o&#xA;4q7/AKE2/Nz/AH9pX/STL/1RxV3/AEJt+bn+/tK/6SZf+qOKu/6E2/Nz/f2lf9JMv/VHFXf9Cbfm&#xA;5/v7Sv8ApJl/6o4q7/oTb83P9/aV/wBJMv8A1RxV3/Qm35uf7+0r/pJl/wCqOKu/6E2/Nz/f2lf9&#xA;JMv/AFRxV3/Qm35uf7+0r/pJl/6o4qnnkX/nE/8ANDQ/O/l7Wr2XTDZ6Xqdne3IjuJGf0re4SV+I&#xA;MQqeKmm+Kv8A/9k=</xmpGImg:image>
+ </rdf:li>
+ </rdf:Alt>
+ </xmp:Thumbnails>
+ </rdf:Description>
+ <rdf:Description rdf:about=""
+ xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/"
+ xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#"
+ xmlns:stEvt="http://ns.adobe.com/xap/1.0/sType/ResourceEvent#">
+ <xmpMM:InstanceID>uuid:e1fbb25a-cbb1-c04c-b8b5-421613fe0bfe</xmpMM:InstanceID>
+ <xmpMM:DocumentID>xmp.did:42A648F7CE2068118C14F31EF4E701AA</xmpMM:DocumentID>
+ <xmpMM:OriginalDocumentID>uuid:5D20892493BFDB11914A8590D31508C8</xmpMM:OriginalDocumentID>
+ <xmpMM:RenditionClass>proof:pdf</xmpMM:RenditionClass>
+ <xmpMM:DerivedFrom rdf:parseType="Resource">
+ <stRef:instanceID>xmp.iid:41A648F7CE2068118C14F31EF4E701AA</stRef:instanceID>
+ <stRef:documentID>xmp.did:41A648F7CE2068118C14F31EF4E701AA</stRef:documentID>
+ <stRef:originalDocumentID>uuid:5D20892493BFDB11914A8590D31508C8</stRef:originalDocumentID>
+ <stRef:renditionClass>proof:pdf</stRef:renditionClass>
+ </xmpMM:DerivedFrom>
+ <xmpMM:History>
+ <rdf:Seq>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:02801174072068118C14D11CE5BC7600</stEvt:instanceID>
+ <stEvt:when>2012-06-05T12:51:06-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS5</stEvt:softwareAgent>
+ <stEvt:changed>/</stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:F77F1174072068118C14F31EF4E701AA</stEvt:instanceID>
+ <stEvt:when>2012-06-11T19:13:38-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS5</stEvt:softwareAgent>
+ <stEvt:changed>/</stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:F87F1174072068118C14F31EF4E701AA</stEvt:instanceID>
+ <stEvt:when>2012-06-12T18:34:28-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS5</stEvt:softwareAgent>
+ <stEvt:changed>/</stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:F97F1174072068118C14F31EF4E701AA</stEvt:instanceID>
+ <stEvt:when>2012-06-12T18:34:45-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS5</stEvt:softwareAgent>
+ <stEvt:changed>/</stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:FA7F1174072068118C14F31EF4E701AA</stEvt:instanceID>
+ <stEvt:when>2012-06-12T18:52:21-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS5</stEvt:softwareAgent>
+ <stEvt:changed>/</stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:FB7F1174072068118C14F31EF4E701AA</stEvt:instanceID>
+ <stEvt:when>2012-06-12T18:54:29-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS5</stEvt:softwareAgent>
+ <stEvt:changed>/</stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:40A648F7CE2068118C14F31EF4E701AA</stEvt:instanceID>
+ <stEvt:when>2012-06-12T19:06:02-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS5</stEvt:softwareAgent>
+ <stEvt:changed>/</stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:41A648F7CE2068118C14F31EF4E701AA</stEvt:instanceID>
+ <stEvt:when>2012-06-12T19:06:38-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS5</stEvt:softwareAgent>
+ <stEvt:changed>/</stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:42A648F7CE2068118C14F31EF4E701AA</stEvt:instanceID>
+ <stEvt:when>2012-06-12T19:06:58-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS5</stEvt:softwareAgent>
+ <stEvt:changed>/</stEvt:changed>
+ </rdf:li>
+ </rdf:Seq>
+ </xmpMM:History>
+ </rdf:Description>
+ <rdf:Description rdf:about=""
+ xmlns:illustrator="http://ns.adobe.com/illustrator/1.0/">
+ <illustrator:Type>Document</illustrator:Type>
+ <illustrator:StartupProfile>Print</illustrator:StartupProfile>
+ </rdf:Description>
+ <rdf:Description rdf:about=""
+ xmlns:xmpTPg="http://ns.adobe.com/xap/1.0/t/pg/"
+ xmlns:stDim="http://ns.adobe.com/xap/1.0/sType/Dimensions#"
+ xmlns:xmpG="http://ns.adobe.com/xap/1.0/g/">
+ <xmpTPg:HasVisibleOverprint>False</xmpTPg:HasVisibleOverprint>
+ <xmpTPg:HasVisibleTransparency>False</xmpTPg:HasVisibleTransparency>
+ <xmpTPg:NPages>1</xmpTPg:NPages>
+ <xmpTPg:MaxPageSize rdf:parseType="Resource">
+ <stDim:w>229.500000</stDim:w>
+ <stDim:h>91.500000</stDim:h>
+ <stDim:unit>Points</stDim:unit>
+ </xmpTPg:MaxPageSize>
+ <xmpTPg:PlateNames>
+ <rdf:Seq>
+ <rdf:li>Cyan</rdf:li>
+ <rdf:li>Magenta</rdf:li>
+ <rdf:li>Yellow</rdf:li>
+ <rdf:li>Black</rdf:li>
+ </rdf:Seq>
+ </xmpTPg:PlateNames>
+ <xmpTPg:SwatchGroups>
+ <rdf:Seq>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:groupName>Default Swatch Group</xmpG:groupName>
+ <xmpG:groupType>0</xmpG:groupType>
+ <xmpG:Colorants>
+ <rdf:Seq>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>White</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>255</xmpG:red>
+ <xmpG:green>255</xmpG:green>
+ <xmpG:blue>255</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>Black</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>35</xmpG:red>
+ <xmpG:green>31</xmpG:green>
+ <xmpG:blue>32</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>CMYK Red</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>236</xmpG:red>
+ <xmpG:green>28</xmpG:green>
+ <xmpG:blue>36</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>CMYK Yellow</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>255</xmpG:red>
+ <xmpG:green>241</xmpG:green>
+ <xmpG:blue>0</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>CMYK Green</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>0</xmpG:red>
+ <xmpG:green>165</xmpG:green>
+ <xmpG:blue>81</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>CMYK Cyan</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>0</xmpG:red>
+ <xmpG:green>173</xmpG:green>
+ <xmpG:blue>238</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>CMYK Blue</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>46</xmpG:red>
+ <xmpG:green>49</xmpG:green>
+ <xmpG:blue>145</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>CMYK Magenta</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>235</xmpG:red>
+ <xmpG:green>0</xmpG:green>
+ <xmpG:blue>139</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=15 M=100 Y=90 K=10</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>190</xmpG:red>
+ <xmpG:green>30</xmpG:green>
+ <xmpG:blue>45</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=90 Y=85 K=0</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>238</xmpG:red>
+ <xmpG:green>64</xmpG:green>
+ <xmpG:blue>54</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=80 Y=95 K=0</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>240</xmpG:red>
+ <xmpG:green>90</xmpG:green>
+ <xmpG:blue>40</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=50 Y=100 K=0</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>246</xmpG:red>
+ <xmpG:green>146</xmpG:green>
+ <xmpG:blue>30</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=35 Y=85 K=0</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>250</xmpG:red>
+ <xmpG:green>175</xmpG:green>
+ <xmpG:blue>64</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=5 M=0 Y=90 K=0</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>249</xmpG:red>
+ <xmpG:green>236</xmpG:green>
+ <xmpG:blue>49</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=20 M=0 Y=100 K=0</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>214</xmpG:red>
+ <xmpG:green>222</xmpG:green>
+ <xmpG:blue>35</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=50 M=0 Y=100 K=0</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>139</xmpG:red>
+ <xmpG:green>197</xmpG:green>
+ <xmpG:blue>63</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=75 M=0 Y=100 K=0</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>55</xmpG:red>
+ <xmpG:green>179</xmpG:green>
+ <xmpG:blue>74</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=85 M=10 Y=100 K=10</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>0</xmpG:red>
+ <xmpG:green>147</xmpG:green>
+ <xmpG:blue>69</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=90 M=30 Y=95 K=30</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>0</xmpG:red>
+ <xmpG:green>104</xmpG:green>
+ <xmpG:blue>56</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=75 M=0 Y=75 K=0</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>41</xmpG:red>
+ <xmpG:green>180</xmpG:green>
+ <xmpG:blue>115</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=80 M=10 Y=45 K=0</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>0</xmpG:red>
+ <xmpG:green>166</xmpG:green>
+ <xmpG:blue>156</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=70 M=15 Y=0 K=0</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>38</xmpG:red>
+ <xmpG:green>169</xmpG:green>
+ <xmpG:blue>224</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=85 M=50 Y=0 K=0</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>27</xmpG:red>
+ <xmpG:green>117</xmpG:green>
+ <xmpG:blue>187</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=100 M=95 Y=5 K=0</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>43</xmpG:red>
+ <xmpG:green>56</xmpG:green>
+ <xmpG:blue>143</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=100 M=100 Y=25 K=25</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>38</xmpG:red>
+ <xmpG:green>34</xmpG:green>
+ <xmpG:blue>97</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=75 M=100 Y=0 K=0</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>101</xmpG:red>
+ <xmpG:green>45</xmpG:green>
+ <xmpG:blue>144</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=50 M=100 Y=0 K=0</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>144</xmpG:red>
+ <xmpG:green>39</xmpG:green>
+ <xmpG:blue>142</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=35 M=100 Y=35 K=10</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>158</xmpG:red>
+ <xmpG:green>31</xmpG:green>
+ <xmpG:blue>99</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=10 M=100 Y=50 K=0</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>217</xmpG:red>
+ <xmpG:green>28</xmpG:green>
+ <xmpG:blue>92</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=95 Y=20 K=0</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>236</xmpG:red>
+ <xmpG:green>41</xmpG:green>
+ <xmpG:blue>123</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=25 M=25 Y=40 K=0</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>193</xmpG:red>
+ <xmpG:green>180</xmpG:green>
+ <xmpG:blue>154</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=40 M=45 Y=50 K=5</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>154</xmpG:red>
+ <xmpG:green>132</xmpG:green>
+ <xmpG:blue>121</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=50 M=50 Y=60 K=25</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>113</xmpG:red>
+ <xmpG:green>101</xmpG:green>
+ <xmpG:blue>88</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=55 M=60 Y=65 K=40</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>90</xmpG:red>
+ <xmpG:green>74</xmpG:green>
+ <xmpG:blue>66</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=25 M=40 Y=65 K=0</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>195</xmpG:red>
+ <xmpG:green>153</xmpG:green>
+ <xmpG:blue>107</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=30 M=50 Y=75 K=10</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>168</xmpG:red>
+ <xmpG:green>124</xmpG:green>
+ <xmpG:blue>79</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=35 M=60 Y=80 K=25</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>138</xmpG:red>
+ <xmpG:green>93</xmpG:green>
+ <xmpG:blue>59</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=40 M=65 Y=90 K=35</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>117</xmpG:red>
+ <xmpG:green>76</xmpG:green>
+ <xmpG:blue>40</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=40 M=70 Y=100 K=50</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>96</xmpG:red>
+ <xmpG:green>56</xmpG:green>
+ <xmpG:blue>19</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=50 M=70 Y=80 K=70</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>59</xmpG:red>
+ <xmpG:green>35</xmpG:green>
+ <xmpG:blue>20</xmpG:blue>
+ </rdf:li>
+ </rdf:Seq>
+ </xmpG:Colorants>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:groupName>Grays</xmpG:groupName>
+ <xmpG:groupType>1</xmpG:groupType>
+ <xmpG:Colorants>
+ <rdf:Seq>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=0 Y=0 K=100</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>35</xmpG:red>
+ <xmpG:green>31</xmpG:green>
+ <xmpG:blue>32</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=0 Y=0 K=90</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>64</xmpG:red>
+ <xmpG:green>64</xmpG:green>
+ <xmpG:blue>65</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=0 Y=0 K=80</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>88</xmpG:red>
+ <xmpG:green>89</xmpG:green>
+ <xmpG:blue>91</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=0 Y=0 K=70</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>109</xmpG:red>
+ <xmpG:green>110</xmpG:green>
+ <xmpG:blue>112</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=0 Y=0 K=60</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>128</xmpG:red>
+ <xmpG:green>129</xmpG:green>
+ <xmpG:blue>132</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=0 Y=0 K=50</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>146</xmpG:red>
+ <xmpG:green>148</xmpG:green>
+ <xmpG:blue>151</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=0 Y=0 K=40</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>166</xmpG:red>
+ <xmpG:green>168</xmpG:green>
+ <xmpG:blue>171</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=0 Y=0 K=30</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>187</xmpG:red>
+ <xmpG:green>189</xmpG:green>
+ <xmpG:blue>191</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=0 Y=0 K=20</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>208</xmpG:red>
+ <xmpG:green>210</xmpG:green>
+ <xmpG:blue>211</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=0 Y=0 K=10</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>230</xmpG:red>
+ <xmpG:green>231</xmpG:green>
+ <xmpG:blue>232</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=0 Y=0 K=5</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>241</xmpG:red>
+ <xmpG:green>241</xmpG:green>
+ <xmpG:blue>242</xmpG:blue>
+ </rdf:li>
+ </rdf:Seq>
+ </xmpG:Colorants>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:groupName>Brights</xmpG:groupName>
+ <xmpG:groupType>1</xmpG:groupType>
+ <xmpG:Colorants>
+ <rdf:Seq>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=100 Y=100 K=0</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>236</xmpG:red>
+ <xmpG:green>28</xmpG:green>
+ <xmpG:blue>36</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=75 Y=100 K=0</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>241</xmpG:red>
+ <xmpG:green>101</xmpG:green>
+ <xmpG:blue>34</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=10 Y=95 K=0</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>255</xmpG:red>
+ <xmpG:green>221</xmpG:green>
+ <xmpG:blue>21</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=85 M=10 Y=100 K=0</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>0</xmpG:red>
+ <xmpG:green>161</xmpG:green>
+ <xmpG:blue>75</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=100 M=90 Y=0 K=0</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>34</xmpG:red>
+ <xmpG:green>64</xmpG:green>
+ <xmpG:blue>153</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=60 M=90 Y=0 K=0</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>127</xmpG:red>
+ <xmpG:green>63</xmpG:green>
+ <xmpG:blue>151</xmpG:blue>
+ </rdf:li>
+ </rdf:Seq>
+ </xmpG:Colorants>
+ </rdf:li>
+ </rdf:Seq>
+ </xmpTPg:SwatchGroups>
+ </rdf:Description>
+ <rdf:Description rdf:about=""
+ xmlns:pdf="http://ns.adobe.com/pdf/1.3/">
+ <pdf:Producer>Adobe PDF library 9.90</pdf:Producer>
+ </rdf:Description>
+ </rdf:RDF>
+</x:xmpmeta>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<?xpacket end="w"?> endstream endobj 3 0 obj <</Count 1/Kids[9 0 R]/Type/Pages>> endobj 9 0 obj <</ArtBox[0.0 0.0 229.5 91.5]/BleedBox[0.0 0.0 229.5 91.5]/Contents 389 0 R/LastModified(D:20120713155518-07'00')/MediaBox[0.0 0.0 229.5 91.5]/Parent 3 0 R/PieceInfo<</Illustrator 390 0 R>>/Resources<</ColorSpace<</CS0 391 0 R>>/ExtGState<</GS0 392 0 R>>/Properties<</MC0 386 0 R/MC1 387 0 R>>/Shading<</Sh0 393 0 R/Sh1 394 0 R/Sh2 395 0 R/Sh3 396 0 R>>>>/Thumb 397 0 R/TrimBox[0.0 0.0 229.5 91.5]/Type/Page>> endobj 389 0 obj <</Filter/FlateDecode/Length 3513>>stream
+HWˎ$ WLm2ϫFO!A7dafi̪^
+Gw:
+njb
+_
+D=R`Ǿ7bROa@<VflI79CMz|'dUn SR
+y"@Z؜=ES>g;gYrH!-`XK# ,R0 ay^6;٬,yvYn"r_I*4\
+C.Y:$$PCnVA0a:@{ww7qp
+ 9hR-8gi(lC%-,-( H3dȑiM)HzuLB,=
+Z HeRU#y)edv
+tݣA&ZTuùBK\w'FOOil؃$8PsrpyIM,tuJuy;l_w0uUj3E%ubD9%d$MViԼurM$Y݊YRjGӡ>6w
+z[hi?o8xKaR:ҳ Nhp'ٵ1CM@*/Q$z
+^w9%غM2m]|2gD@L&NHW'GY:R6v#q%j)NXqlLָnzk-7GpYP`( ;_(_.}'fc+*pZЇE١P[_o3Hʋ< .1TH',71&FBcNzkzBŞq_.@!(aj(pz!Jd `)'8`Gg폊̘S$g؉$Re{ֽ鐋z_kP&ƽrr"_pV&dHGc+T{erᩁD f⒨Nd QvIN7QWXbOdYbs]m߱?sI$;@j圇׮h^Djz:?Fk3݋q-iT_|
+Zf]![nܙZƂAiXV X~\3?!cbo?Q@UVCܑH像2E\3?6?iK뷋mZN>C~!`'heOwKӟ.5߼Ŀ7e Wfz[vP]Z%zeKS§mV3>L Vfz9{|)zW#aіo9 [ |^
+JVٿHF?V25|3׏~0
+8;Ue`^]Ub""#s81`,OrFbF,#+J]osZ8d=Tk!(/FB7P\(K*]eki719Y^BC*Y"g9T0&
+a;tDF&BfU.!6$CcCtp':$ih=)Q0n~> endstream endobj 398 0 obj [/Indexed/DeviceRGB 255 399 0 R] endobj 399 0 obj <</Filter[/ASCII85Decode/FlateDecode]/Length 428>>stream
+8;X]O>EqN@%''O_@%e@?J;%+8(9e>X=MR6S?i^YgA3=].HDXF.R$lIL@"pJ+EP(%0
+b]6ajmNZn*!='OQZeQ^Y*,=]?C.B+\Ulg9dhD*"iC[;*=3`oP1[!S^)?1)IZ4dup`
+E1r!/,*0[*9.aFIR2&b-C#s<Xl5FH@[<=!#6V)uDBXnIr.F>oRZ7Dl%MLY\.?d>Mn
+6%Q2oYfNRF$$+ON<+]RUJmC0I<jlL.oXisZ;SYU[/7#<&37rclQKqeJe#,UF7Rgb1
+VNWFKf>nDZ4OTs0S!saG>GGKUlQ*Q?45:CI&4J'_2j<etJICj7e7nPMb=O6S7UOH<
+PO7r\I.Hu&e0d&E<.')fERr/l+*W,)q^D*ai5<uuLX.7g/>$XKrcYp0n+Xl_nU*O(
+l[$6Nn+Z_Nq0]s7hs]`XX1nZ8&94a\~> endstream endobj 393 0 obj <</AntiAlias false/ColorSpace 391 0 R/Coords[0.0 0.0 1.0 0.0]/Domain[0.0 1.0]/Extend[true true]/Function 400 0 R/ShadingType 2>> endobj 394 0 obj <</AntiAlias false/ColorSpace 391 0 R/Coords[0.0 0.0 1.0 0.0]/Domain[0.0 1.0]/Extend[true true]/Function 401 0 R/ShadingType 2>> endobj 395 0 obj <</AntiAlias false/ColorSpace 391 0 R/Coords[0.0 0.0 1.0 0.0]/Domain[0.0 1.0]/Extend[true true]/Function 402 0 R/ShadingType 2>> endobj 396 0 obj <</AntiAlias false/ColorSpace 391 0 R/Coords[0.0 0.0 1.0 0.0]/Domain[0.0 1.0]/Extend[true true]/Function 403 0 R/ShadingType 2>> endobj 391 0 obj [/ICCBased 404 0 R] endobj 403 0 obj <</Bounds[]/Domain[0.0 1.0]/Encode[1.0 0.0]/FunctionType 3/Functions[405 0 R]>> endobj 405 0 obj <</C0[0.541176 0.2 0.858824]/C1[1.0 0.270588 0.129412]/Domain[0.0 1.0]/FunctionType 2/N 1.08481>> endobj 404 0 obj <</Filter/FlateDecode/Length 2574/N 3>>stream
+HyTSwoɞc [5laQIBHADED2mtFOE.c}08׎8GNg9w߽
+ 
+V)gB0iW8#8wթ8_٥ʨQQj@&A)/g>'K
+x-
+ꇆnQt}MA0alSx k&^>0|>_',G!"F$H:R!zFQd?r 9\A&G rQ hE]a4zBgE#H *B=0HIpp0MxJ$D1D, VĭKĻYdE"EI2EBGt4MzNr!YK ?%_&#(0J:EAiQ(()ӔWT6U@P+!~mD eԴ!hӦh/']B/ҏӿ?a0nhF!X8܌kc&5S6lIa2cKMA!E#ƒdV(kel }}Cq9
+N')].uJr
+ wG xR^[oƜchg`>b$*~ :Eb~,m,-ݖ,Y¬*6X[ݱF=3뭷Y~dó ti zf6~`{v.Ng#{}}jc1X6fm;'_9 r:8q:˜O:ϸ8uJqnv=MmR 4
+n3ܣkGݯz=[==<=G</z^^j^ ޡZQB0FX'+t<u-{__ߘ-G,}/Hh 8mW2p[AiAN#8$X?AKHI{!7<qWy(!46-aaaW @@`lYĎH,$((Yh7ъb<b*b<~L&Y&9%uMssNpJP%MI JlN<DHJIڐtCj'KwKgC%Nd |ꙪO=%mLuvx:HoL!ȨC&13#s$/Y=OsbsrnsO1v=ˏϟ\h٢#¼oZ<]TUt}`IÒsKV-Y,+>TB(/S,]6*-W:#7*e^YDY}UjAyT`#D="b{ų+ʯ:!kJ4Gmt}uC%K7YVfFY .=b?SƕƩȺy چ k5%4m7lqlioZlG+Zz͹mzy]?uuw|"űNwW&e֥ﺱ*|j5kyݭǯg^ykEklD_p߶7Dmo꿻1ml{Mś nLl<9O
+zpg_XQKFAǿ=ȼ:ɹ8ʷ6˶5̵5͵6ζ7ϸ9к<Ѿ?DINU\dlvۀ܊ݖޢ)߯6DScs 2F[p(@Xr4Pm8Ww)Km
+%!PS-Adobe-3.0 %%Creator: Adobe Illustrator(R) 15.0 %%AI8_CreatorVersion: 16.0.0 %%For: (Elena Czubiak) () %%Title: (en_app_rgb_wo.ai) %%CreationDate: 7/13/12 3:55 PM %%Canvassize: 16383 %%BoundingBox: 185 -199 421 -97 %%HiResBoundingBox: 185.667 -199 421 -97.5 %%DocumentProcessColors: Cyan Magenta Yellow Black %AI5_FileFormat 11.0 %AI12_BuildNumber: 682 %AI3_ColorUsage: Color %AI7_ImageSettings: 0 %%RGBProcessColor: 0 0 0 ([Registration]) %AI3_Cropmarks: 189 -193 418.5 -101.5 %AI3_TemplateBox: 300.5 -150.5 300.5 -150.5 %AI3_TileBox: -74.25 -435.25 659.75 140.75 %AI3_DocumentPreview: None %AI5_ArtSize: 14400 14400 %AI5_RulerUnits: 2 %AI9_ColorModel: 1 %AI5_ArtFlags: 0 0 0 1 0 0 1 0 0 %AI5_TargetResolution: 800 %AI5_NumLayers: 2 %AI9_OpenToView: -542 278 1 1318 788 18 1 0 46 133 0 0 0 1 1 0 1 1 0 %AI5_OpenViewLayers: 77 %%PageOrigin:-6 -546 %AI7_GridSettings: 72 8 72 8 1 0 0.8 0.8 0.8 0.9 0.9 0.9 %AI9_Flatten: 1 %AI12_CMSettings: 00.MS %%EndComments endstream endobj 415 0 obj <</Length 7356>>stream
+%%BoundingBox: 185 -199 421 -97 %%HiResBoundingBox: 185.667 -199 421 -97.5 %AI7_Thumbnail: 128 56 8 %%BeginData: 7218 Hex Bytes %0000330000660000990000CC0033000033330033660033990033CC0033FF %0066000066330066660066990066CC0066FF009900009933009966009999 %0099CC0099FF00CC0000CC3300CC6600CC9900CCCC00CCFF00FF3300FF66 %00FF9900FFCC3300003300333300663300993300CC3300FF333300333333 %3333663333993333CC3333FF3366003366333366663366993366CC3366FF %3399003399333399663399993399CC3399FF33CC0033CC3333CC6633CC99 %33CCCC33CCFF33FF0033FF3333FF6633FF9933FFCC33FFFF660000660033 %6600666600996600CC6600FF6633006633336633666633996633CC6633FF %6666006666336666666666996666CC6666FF669900669933669966669999 %6699CC6699FF66CC0066CC3366CC6666CC9966CCCC66CCFF66FF0066FF33 %66FF6666FF9966FFCC66FFFF9900009900339900669900999900CC9900FF %9933009933339933669933999933CC9933FF996600996633996666996699 %9966CC9966FF9999009999339999669999999999CC9999FF99CC0099CC33 %99CC6699CC9999CCCC99CCFF99FF0099FF3399FF6699FF9999FFCC99FFFF %CC0000CC0033CC0066CC0099CC00CCCC00FFCC3300CC3333CC3366CC3399 %CC33CCCC33FFCC6600CC6633CC6666CC6699CC66CCCC66FFCC9900CC9933 %CC9966CC9999CC99CCCC99FFCCCC00CCCC33CCCC66CCCC99CCCCCCCCCCFF %CCFF00CCFF33CCFF66CCFF99CCFFCCCCFFFFFF0033FF0066FF0099FF00CC %FF3300FF3333FF3366FF3399FF33CCFF33FFFF6600FF6633FF6666FF6699 %FF66CCFF66FFFF9900FF9933FF9966FF9999FF99CCFF99FFFFCC00FFCC33 %FFCC66FFCC99FFCCCCFFCCFFFFFF33FFFF66FFFF99FFFFCC110000001100 %000011111111220000002200000022222222440000004400000044444444 %550000005500000055555555770000007700000077777777880000008800 %000088888888AA000000AA000000AAAAAAAABB000000BB000000BBBBBBBB %DD000000DD000000DDDDDDDDEE000000EE000000EEEEEEEE0000000000FF %00FF0000FFFFFF0000FF00FFFFFF00FFFFFF %524C45A8527D527D527D527D527D527D527D527D527D527D527D527D527D %527D527D527D527D527D527D527D527D527D527D527D527D527D527D527D %527D527D527D527D527D527D527D527D527D527D527D527D527D527D527D %527D527D527D527D527D527D527D527D527D527D527D527D527D527D527D %527D527D527D527D527DA852FD7EF8527DFD7EF85252FD7EF87D7DFD7EF8 %5252FD7EF87D7DFD07F82752FD6CA87D27FD07F85252FD06F827A8A82727 %F827F827F827F827F827F827F827F827F827F827F827F827F827F827F827 %F827F827F827F827F827F827F827F827F827F827F827F827F827F827F827 %F827F827F827F827F827F827F827F827F827F827F827F827F827F827F827 %F827F827F827F827F827F827F827F82752A852FD06F87D7DFD05F852FF52 %FD6FF8FF7DFD05F85252FD05F8A852FD71F8FF27FD04F87D7DFD04F852A8 %FD72F852A8FD04F85252FD04F8A827FD72F827A8FD04F87D7DFD04F87D52 %FD1CF87DFFF8F8F8FF52F8F8A8F852FFFFA852F827A8FFA87DF8F852FFFF %A827F87D7DF8A8A8FF7D27FD05F8A8A827F852A8FFA87DF87DA8FFA852FD %04F87DFFFFA8F8F8A87DF8F87D52FD0DF8FFFD04F85252FD04F8A827FD1C %F8FFFF7DF8F8FFFFF8F8FF2752A8F852FF52F8FF2727FF5227FF52277DFF %F8A85227FF2727FFA8FD04F827FFFF52F827FF2727FF527DA8F87DA8F8F8 %F87DFF2727A8A8F8FFFF52F8A852FD0DF87D27F8F8F87D7DFD04F87D27FD %1BF852A852A8F8F8FFA8FFF8FFF87D7DF8F87DA827FF2727FF52A87DF8F8 %F8FF527D7DF8FFF8F8F8FF27F8F8F87DA852A8F852FF2727FF277D7DF87D %FFF8F8F8FF52F8F827FF27A8FFFF277D7DFD0DF8A8FD04F85252FD04F8A8 %27FD1BF8A87DF8FF27F8A827A8A8A82752A8F8F852A8F8FFA8FF7DF8A87D %F8F8F8FF277D52F8A8F8F8F8FF27F8F8F8FF5227FF2727FFA8FF7DF87DFF %A8A827F8F8F8A852F8F8F8FF27A8277DA8A852FD0DF8A827F8F8F87D7DFD %04F87D27FD1AF827FFA8A8FFA8F8FF2727FFFFF87DA8F827FF5227FF27A8 %7DF87DFF27F87DFF277D7DF8FF27277DFFF8F8F852FFA8A8FF7D27FF27F8 %F8F8A87DFD06F8A8A827F8A8A8F8A852F8FFFF52FD0DF8A8FD04F85252FD %04F8A827FD1AF87DA8F8F852A827A827F852FF2752FFA8FF7DF8F8FFF827 %A827F87DA8FFA852F8A852F8A8FFA8A8FD04F87DA8F8F852A827FFFD04F8 %7D7DFD07F8A8A8FFA827F8A852F827FF52FD0DF8A827F8F8F87D7DFD04F8 %7D52FD1FF827FD05F827F827F827FD07F827F8F8F8272727F8F8F827F827 %F827FD05F827FD05F827FD0FF82727FD16F8A8FD04F85252FD04F8A827FD %73F87D27F8F8F87D7DFD04F87D52FD73F8A8FD04F85252FD04F8A827FD73 %F8A827F8F8F87D7DFD04F87D27F8F8F805062DFD6DF8A8FD04F85252FD04 %F8A827F8F8F80536355904FD3AF827527D5227FD2CF8A827F8F8F87D7DFD %04F87D27F8F8F8283636608A2E27FD13F8277DA87DA87D7DFD1FF87DFFA8 %FD15F8272727FD15F8A8FD04F85252FD04F8A827F8F8F805362F36358A5F %58FD11F87DA87D2727277DFFFF52FD1DF827FF7DFD15F827A8FD16F8A827 %F8F8F87D7DFD04F87D52F8F8F828363635365F8A89892DFD0EF8A8FF27FD %05F852FF27FD1DF852FF7DFD15F827A8FD16F8A8FD04F85252FD04F8A827 %F8F8F80536353635365F8983AE5E2DFD0BF852FF52FD07F827FD05F82727 %27FD07F82727FD0DF827FF7DFD04F82727FD0AF827FD04F827A8FD04F827 %27FD10F87D27F8F8F87D7DFD04F87D52F8F8F82E3660366036605FAE89AE %AD8327FD09F8A8FFFD0CF827A87DA8FFA827F8F8F827A87DA8FFA8FD04F8 %52A8A8FFA8A82752FF7DF8F827A87DFFFF52FD04F827A852FFA8FFA827F8 %52A827F852FFA8A8FF52F852A8FD05F87D7DFD04F8A8FD04F85252FD04F8 %A827F8F8F80560353C3560353C5FFD04ADC97526FD07F8FF7DFD0CF8FF52 %F8F827FFFFF8F827FF27F8F852FFA8F8F87DFFF827A8FF27F827FF7DF827 %FF27F8F8FFFF27F8F8F827FFA827F8F8A8FFF827A8F852FF52F8F827FF27 %27FF27F8F8F827FF52FD04F8A827F8F8F87D7DFD04F87D27F8F8F82E3C60 %3C603C603C6083CFADC3C2C9C276FD05F852FFA8FD0BF8A8A8FD04F87DFF %A8F8FF7DFD04F8A8FF5227FF27F8F852FFA8F852FF7DF8FF7DF8F852A8A8 %27F8F8F827FFFD05F8FF5227A8F82752FD04F87D7DF8A87DF8F8F852FFFD %05F8A8FD04F85252FD04F8A827F8F8F8056035603B603B603C3C83C9C2C2 %A0C9C8C820F8F8F827FFA8FD0AF827FFA8FD05F8FFA852FF7DFD04F827FF %7D7DFF52F8F8F8FFA8F827FF52F8FF7D27A87D27FD05F827A8FD05F852A8 %F8A8F8F8F827275227A852F827FFF8F8F8A852FD05F8A827F8F8F87D7DFD %04F87D27F8F8F82E3C6660603C666066609BBCC9C2C9C8CEA627F8F8F827 %FFFF27FD04F8277DA87D7D52FFA8FD04F827A8FF7DFF7DFD04F827FFA852 %FF7DF8F8F8FFA8F852FF7DF8FFA827FD08F827A8FD05F87DA827A827F8A8 %A8A87D7DFF7DF8F8A852F852FF27FD05F8A8FD04F85252FD04F8A827F8F8 %F805663C663C603C66609A8DB69AC9C8C951FD06F87DFFA8FD05F85252FF %A827FFFFFD05F8FFA852FFA8FD05F8FF7DF8A8FF52277DA8F8F827FF7DF8 %A8FFFD09F827A8FD05F852A827A8F87DA827F8F8F87D7DF8F87DA8F87D7D %FD06F8A827F8F8F87D7DFD04F87D52F8F8F82E666660666066609B949493 %BCC27CFD09F8FFFF7DFD05F827FFA8F8A8FF7DF8F8F827FF7DF8FFFF52F8 %F8F852FF52F82752A8FFFFF8F8F852FF7DF87DFFA8FD08F827FF27FD04F8 %FF5227A8F8A87DF8F8F827FF7DF8F8F8FF52FF27FD06F8A8FD04F85252FD %04F8A827F8F8F805663C663C66609B8E9494B66920FD0AF827FFFFA827F8 %F8F827FF7DF8F8A8FF52F827A8A8F8F827FFFF27F827A87DFD05F8FFFF52 %F8F827FFA8F8F8A8FFA852525227F8F8F827A8FF27F8F8A8A8F827A8F87D %FF27F8527DFF52F8F8F87DFF7DFD07F87D27F8F8F87D7DFD04F87D52F8F8 %F82E66666667669B94BD949420FD0EF87DA8FFA8A87DA85227F8F8F87DA8 %A87D52FD05F8A8A87D7D52F8F8F827527DA8FFFF52F8527DA852F8F87DA8 %FFA852FD04F827A827A8A8FFA827F8277DF8F8A8FFFFA852527DF8F8F827 %FF52FD07F8A8FD04F85252FD04F8A827F8F8F80567666660778F95704BFD %13F827FD19F852A87D272727FFFF27FD0FF827A8F8F827FD12F852A8FD08 %F8A827F8F8F87D7DFD04F87D27F8F8F82E666766788F9545FD2EF827FF7D %FD04F827FF7DFD0FF827A8FD15F8FF52FD08F8A8FD04F85252FD04F8A827 %F8F8F80B6760786B4CFD30F852FF27FD05F8A852FD0FF827A8FD13F87DA8 %7DFD09F8A827F8F8F87D7DFD04F8A827F8F8F834679C4627FD31F852FFFF %27F8F8F852FFFD11F827FD13F8525227FD09F8A8FD04F85252FD04F8A827 %FD04F82800FD34F852A8FFFD047DFD32F8A827F8F8F87D7DFD04F852A8FD %3BF82727522727FD32F827A8FD04F85252FD05F8A827FD71F87D52FD04F8 %7D7DFD05F852FF27FD6FF87DA827FD04F85252FD06F852A87DFD6CF827A8 %A827FD05F87D7DFD07F8277DFD6DA852FD07F85252FD0AF827F827F827F8 %27F827F827F827F827F827F827F827F827F827F827F827F827F827F827F8 %27F827F827F827F827F827F827F827F827F827F827F827F827F827F827F8 %27F827F827F827F827F827F827F827F827F827F827F827F827F827F827F8 %27F827F827F827F827F827FD09F87D7DFD7EF85252FD7EF87D7DFD7EF852 %52FD7EF87D7DFD7EF85252FD7EF87DA8FD7E527DFD7FFFFF %%EndData endstream endobj 416 0 obj <</Length 65536>>stream
+%AI12_CompressedDataxy\' w{0ʹIc0@DddhdUn-~ON%Rn%T$/O~r0'7O߾~Qŏ?}gnfxyo~x.;O//^==x~v/~7O7᛿yg.Tt-<R CyJ~O}B @;շ_}wz!zwx
+}\$x_>z՛~7?pW_</^pzٿM0電/u_>}{p_soǗx#9|CU ş\Ǘ@["48
+֢\-VUhW0}|~$cݙ<Ok n?*۷d `91,_CWߞ_ġWd^f?_?~ϯ@՛篰/^7_S}x&/ leZ_y *<IUoW~xZ<}<}WOn5?3)TޣRX&GU<0=zOp.=]vigNo~O_~ª]j2Q6+mK%8|Z
+; {`%؇<UJHGvs=
+l lL|#N`Ke8Hp5fi'x77 7f&4AAqs%j?wȇ4<ǿ~~DTun<[t^>ˍw GW
+5h: V$-a#‰xę֝<^{}8:227KQcH<vQYT/ŮIVï
+ ċb5d?NN_yR(Bs!'4s<B*NORj xv^ 3HlG:. +8!|De)X\EE{`&RNP1e9LN`EK3|G"DUdejveX4&Kw-,gOÉ#kY@C6C^{< gͱs#qFsRE,W#If3, ) g *+L 07Oy`
+|MpҢ"; 3d(ZaҾQO
+`>hH˼% (%kya'hf`G6\XmHof2p+*"vTBV izXdD_/GizI+fn'V@4i {.{C>v}!A 
+b
+S WIS]_k&`^ X>aF[w]V9q]gxi'ZnlISg\#EN>Ϊ:+묰sIRY 6hnEW _|T)EJL$-\]wV.RnR_JRd+IJQvRU&"KF
+ JR(]3mKN\qdV:9 v~zUknu_Mt+2XQ4r)Q&<"g"T&20"?RnDF6r>{Z^0a6&1_8+PP@Bȋ(tK&I6Gg']@jiD $"q&S;z8Ƕ:0FCl{f@~HlD>jEN,rXj Z.ǖ9͑unB t̎tPG&:q4,uhCkZX2/x7t65:'1⑓M -dgaG[ܢ&5|".n(¢(eLL[b^ KԻF
+fo[0. Kj.-fAedn3UkivhGDJ͠?OVjDK%bfr;vq]֠ -q]& K-zi'V4i[XD+S2j^[n!ȴBdݒzYEcKT¥8Q02N<Bv~f:iAE"rQ8DZ班::WwO}8}w>,t  )RxlR!>Q&
+*Z LUsjZA9h5 :\5Ҭ~Zm8Q>>[מּ ë.7O_}
+JH&; _X}Vq&闚
+LU395O
+4"{R` (Ewfԯ&EjgMa
+z ;Gp(%I1W$XmZTgq;끋?yc~p% Č&\F=<ۡ\r˴8Pzǯ1ihIWclh1LZ@ű;ܻL_ÍrQzCiCJ n
+@8.yOpWXFT ;C4q+!fPƉ9&9k=5[<F:F<"jL3:AA ".5Q_8AQd>Jݺ\IƵqUTbf$Ylre;>X
+n^„Pa(JiGietHKzRw֬_&I2p.Tv__[$y7X!aN^ T{tRBj/iԐj jIKxYC֠M> ݍgn1V+rܸGI#赻g8N6^j__*_*_*_*_*_*_*_*_*_*_*o~||  `UCLCƫl+k"1nW:~E3D*[^*,9^t2* ߯k$n-
+Q TQ
+GuP?L;.[/dXk+MWezV6W՗
+T\r߉ޢsWX%NktE)iɮ>uW)i孆rt*]4S/#y4Ԏ:K!(9W3*2v}G]Ы]/CZgpVANܵ
+T5jZkX:ŝjl2UdXNjQvhlw2>=E˓ݣXU_*5u#ygeTwSȽKaOYe^ij_++q;^t_uO${79 w+yĄ[wyP ;h GwX
+PꪔMɫeڻP܇My@eypLh |+/:JƏfQꇗ4]~ty
+لQ>tWH V`Lx2ܵ{G>C]vѩYbc[ AǣL/oBnWWp+笕r}F[<4}'PGC>'y,mb=saYsg Ye^ӇdW7߿x8
+O_lZuonȻ3 YQ cĂ}oE,|P[6 y;dV U l[ГZ7۩I
+|{6<b#V
+v¸OUD
+],W?IU^]2iqoJZE^ 2V'ᚩo1@Oo"k-dV|ko"i_Y،Q6cMiפ؂ e jčFC9=yͲn-8"!P(Ε8)2c L q{VK
+NN$b1YDޒ1;]o1%1mn1L.ʴ 7͗n͞ftDuڄfٸq6!֙ayTP?ٯiZXǴ,y_8=rcYZ+)wA괈UbW,cl^oq h~1~+4[Ά_
+)3߉yPC7Z3]eVoMٻu(3;}2i͈Ga>pRi=E_<@wʹnG=:
+2-yyU!|&~Wom{UN<;8񇈇>dzx\br?uH%3Y*}9h5Vsj" vHO^5-O&'cnjáR>K[ڻ3V!7^=};!ErR+8$E-BJDŽ~G3_CTj
+pzWvJhמM·B`N' -a܋[2cRDy"mhM[2Ԣf!+ŵa|-VR5b%dêYXx'IX$ kHrn!ވD|V,˟a y؍c?U>ǟJAX~te
+=7P0κP y7bN"7-R&vCz' h꼳$86l
+8DS:(ʠ(VC;:)+JΙqxQ9fz`'Lv"Jz8jߨIݒxVaB fT 㬊
+me,=cQl;'h3P#n[HT<wYQq8KF ̉"=oh#A}ލeY_seJln2Tx0,w.0;Q^Ź#Eu4RF<Rhiƥ/CdN3}IXn57&xp8zʧCp$T‡ls}Ii0thZ2Z܂e.jwYZ_4ٲY 11״0=iqƘim4qNgS 4eAhP(<E)R$vV)ӀL ĸ4 0' ed@䀞-a̅rv$%,hkf)p I4{3d1GuJ~gG `-7B!'`r>:x4_1(|>I{qO}*WA4mt<wb#
+-@r3%ڍQ#] nuV9XsEQ߽CzY =  `xocZ%ʴOB]tO!|KB>BKDe^\mp5@GvҲ3A/ͺk.vv+ӻ1hc6 Yy;-3Z`NiPSiȞN,(8Trˣ彿SU{T{Ge48n.FO!v(B6:cQ~h!K>uSZ&*{*.`=ʬ-˴3' l2 z~8I؜#]#:vr 0~Um#(%|:g 8Χ5MP&gIRԥ@N忔#
+l| nǍncC kw2P [,qpV:$Y̫\sl5s5s Ѹp 2%P008#vDL]hp;w_V{}&ǭei󏽮s 7ٲ5 xN sZ]~ )BLh2 ?(Xj' uYd_-K5g~rmbTc  inbQ6jW<Zp&`_9ִwLXILX1 =G|Yx>m\}WUQW^?a_P;qVp߷3*&-Lvdxow/7ʸ}ܽ#\Λː1wf7vxgX2E 7׊}"S^W~! }Ҟ
+<a2c8HG=qB~2 2훺 *%jo$^ۦVrYdb2Y?n6LHkĮ#duQʹ\f続kjwHsݫ7>h겞~M7:'m
+sUȲhR 4._00`7,b0=/|u5Lt}-ae[[V>Я}mQhdy+=Z*J]1aw|L> uk]vW誵eq#nޔݯ$dʐ[7{n"ۿgos f>)3d9>)D6I|^tٹ}E@"g
+;I2h@3x?ٯ?~4*8~pv,oq{X ;L{3 msnk;v=?uZ2kqa.{Ziclfʷ˼8vdwyy&ָKܿZ_5l]ڹwsMm+Uܤ]ܕuNgv6KaNEtͭ׻ޜvy+{rKk/OډMrN]:қRj
+I㞂&ƵyRu_>`=U*IՏJV޼ 4kj:S]>䪇\ /g hЎѤ/߳V}\jI);5kAʷ׬Ӛ״g7c$U!=]%Me},P̹ڊ߇]49Z,me}9` cC~1E됮^f
+I/^o%fxٺО*$GKNoe}2BӾꊷ߇]a49Z,mg}C{F^߇v&}g>*MA׼޷dXaiyCIzbUHOoo9$ZM!SH|hA(xbTB
+.#8١y`+rWR~ݫF7ZF@M~+d~m6 t _!K%F mFdx=W\zpnI8vRźE#qo?Npk]M`!䪳(ex|7\%ϰ^%J\;+d{?iDbó Z[W5 \![%?TzBvj:yї^Ubܼ)K
+yhj~(h]nɋ{%WȫFAm!oMִiJWUvx1ȻlJWMuwůȋ{%WF hm|||h'/p
+y(m)HiO4ɋ{%Wȫ36 s5 l洓+Bo~Ò }=iu-Dۧڇ׵' b9c2"D8V\,@J2T\P*2 %pch$h e$
+0qme--&[_WB.Xqƪ'y<Ug֫HHW#s$a!R
+G+s/ԐFDL"L[#MG@\%M.qn.01;Лϲ~jsrQ9L-T޸9eڄdDkg`%񠽗 y^(_n'cNHdp&b8WIOfm
+F5Ut/kDZl8> 1F!X '|[:T֘,!v13Eef)'*SY!*1qT7u  2!6atd*~;XP Iu&+;BC
+1bL$DWd6 _$OzRӉU@= Y9c$ID"&xx&c!u<uΰ#/ކ(=5D!z&h1tHʲLBsYvSjB}E+D= 8G]I2>PQC]Q|~vB$Yfb Y{;XPP;ӹXQ0nS9eѹ!*Hc
+T45sSh}ыHU!8AL R'Od^Yw89W@ yAYr6P\ZAI1#O f:y& QSHFmoA}@_mST
+_
+; '쐈>W"b=/T#}Q':Og٩ND UHd+
+d*I
+?3ÓcmE|x唊EK !7wトxVάPL)E@ :d&*"%ֳj@RQbFĔ/1\[L}\j
+rɂ}GvM6>D
+ 7 lI!1vn6Wږ&r$̸Gcr(pO]fQX 0آ"9ʨ1+T bm*pil3q8TՆ{Nv<@D<i쫠2KաG13̬z%4Vi
+l;쾬02 Meox4
+@ֳ 1!hxԊNnNB&o'D+(/؏bTe*/\ЋԎ2*&'Bʽ#2ކ7Ra髆Bz]dtdDP<K3Wў/giuSu?OQjB`YZ@3\8,Q<P5):Ji<1QW4W>34l,ZyX4Pkn|G5s$$+G;ijˊdu}I.T^ȴGyCL!c3,;-Վ=XNY`>+hNR1<{=S !b}AٳI
+Zg[
+J!E>\9?By 62dPM3U 􄭅mO Lf ghV$Z+LV+8DC% ]f T
+J]2Y )VeM^DNٶ)ќZseQkz2*vEuG?I.Dm1&榬:V.3*Gz큱"o*XI2mCUe`Xƴbp~).ul`.Y =焛ǩO,33Ol`&HD_Cu)i5z^蓹I $@zmj[gVRQS0o.OyȀff4/0= BrjGj"&U3 %j =C}"tH {UIřA&EY+xD7L( p$Thkr@9-<M 1ȳYt W Ж ے=HV[-{e^=Ikm" ^ *!-9c8c0m"-ـςC [Tc3rNF&J7UXY"[H$YJ\67[tṣ<liOMw,O 8Y iI_#o!4'
+.p3QD7u){fDcaIqizp;gCH8 h,b3 hN'DH|@]ҝgxL,&j[D2$wVE]WȼU,]Je|Ĉm тxhu!e,}7S^3g5Lp22!W}SxmQ6dUUu M
+N5&۝t`2*2bDCM26dyoyň `+[ĠĄH艚AN=eVE@q2,Z+J;Rkffb|5,:"rÝĸLAHLjIWArm}}bCK
+({<G
+рȪt::›GWݪԘYT%[TGqdd&Ix<2i
+YQٳ zF;$+'KRDסӐY^\pJY2{I6!z'L{x<Aw#(j3'DوE?o y{#fg;WU ˎl^*(WbzދEޑuRl=m9!HĤMgX2mΨ9YI-jPd\XՆ5y\QLhŏ8`zz9Z*Q :&>Q
+X\C^jF3p.Id>Pg1j0$h:Ѓ%z\ZT@k erQlԏƻ0δ{(@k& T@-}o\CZ
+Oz"]vZkHEJ ƧS7#  H2)
+,9"b"LٽJUXQf9T "$%;M@s<:r-5z
+#L\"iZw'1Q
+\ۖy^|r AkOXA>4i_g J7qf1&.-nb݋N_puso%s{ZV?ڍ5B^y݋pN}iBɉ#ab]d7`^<w G+B4#7VW8DF#x^UGz3
+']QWk]Z1/ g)R5<'kB5!嬬r~-hY;fR0`TƦUXMʅ+S1!_eO
+ HE
+Z<`0q5|.8 p? l?60WE
+a1쪚/qx,UkJlP
+
+Efp%gNdB4uYWܜepu Nv!> ABf @`.ɽ`ZAí(&=I))P~Ť꾀E%H
+Z!۔ψxȆLЀDG0NT(ZSwE43qy/"Ä*^6͑dS$&6Dz
+cbYhH nBR,6_5\ƹdMęȽsԧMG
+%qьB,2uQwp*g>Pѫ="-=j Bw
+0㜦H;LQ
+I _!(Zp,ECLnL>:M>{ [.
+э8&6E#ׁpL 2#o󷺢MG7]#v,e:Y@
+*"LɳUP.:6xƎm#ýX+hho)jr6͚FҔ֭j%-x(][
+ɂ]Ws5M9_d,! >r?!<g;dkkp~L #_v
+uW^F]Ҙ
+VyPQk2{i6EB4:I, ɛ)YdF1 VI- W2n9?͗2eQ[Yь`ׁ(#8ߚv#XܢG,{
+5K$؏Nms.\6ݧyyhtS6*HuX+EQKLlWN^4޲)ށcۺQFe<֎fnFIC+(vߐu$M(BCD37Qz.j8ߗFM
+W{mL;4zJtsT
+*FҦ&ug(&/1mӴ}KpXg9?:;a P%Vɜ3{vs2Q@޳Ƣi!qM@lEPΠ0^IB'a0/W)4[ዅ8ۅ̋S2(P_Ɏ$hRkdpUg ~\+%oȔ@~STnRj˝MFF!U
+j9={-1I#˒*{!1 6NaYaD"P ɀk۬\5 c|j\`ͤq l
+(׳>r 6W[?-'N?}Lr9AMb vYlxnL8|kTiv=r$QM9G>
+)&T) 'SH*l1#e@ӆ{Zƨ v>=&Wka2WJr0,y^@~4CRG|H"W?]DOSfcJ?&rY0fpkm4
+ݥ:S)DˋDAIa"+ mDjňv'۲7M4݀#zѵ DzԋQk]ϤYPM2\&b*".vZSZTn /L0 @D7IETKvꠈ1ZK
+TmfmNr /2o'A#ޏBV/cJbb!FqDQnyTFӐ m2x4#41癅KCH&*-q4'ynhӃJϢ%<-1*xr! ]ZVk:l[dMTM {q4qݾd)OY"HlD|rkk#RASR,Δ՗`~M*i6gakDĴ~j/Y&Z!4&Rvyu.{rݢG2k3XMC٦ޏ(7F~(*.PIjr5bJ!2Fn¶$l1XdOlP-~gyc-N=0ľ-,VILv*S==G{$ɎɛJ'i!#a"Gps)ZhˤY\t)^V%"H()m֛+k'+73ѕy[eC$ʓU04Ȧ8C<MWaX~TC< _5I=.ӻ0p@}Y?UhX@J4lrh8E&?:ec43R 56*;V&4(ԉX99in>
+Wk-%hcVaINRƨ9w%FLQnn-(vةdЄNrn%QDz R"x4Jefrc윭XKz7g]o
+YzG`[xgu!lݰ:=*9DT7ڱ Ѝ+d.pƓBD4t"@WrN=9ѨeW:Jܴ6lzyϞ;wWf7WߞßzÛWL<=|Ղ߼z÷i>B.wH9//[|WӓHCthj4F`1,3/q{4+/'+Cy=0jMRlLwO#AF ;x
+&)'2H@" ,xL~zMIpJK@ BgY&'Sn
+(;*؏U %(
+%S&ej$^0̑9XsQ,ׁ MMdd hS̕ʟ/:L~HdJ$DUDEVI?2 @NG&+s%R3:|#
+"f (Eve)xrL;D޶!o_Yۙǘt D2&0_LW@` =bRC[ ۢiA+/G r]o<I0dĥJgyWRVL:<b_q١N\O#uT]#)kJ6
+ t@gA=/QD_yηD!H"Gre+ŬE۲k#AJI,'eJATQ
+Aeb k 2+kocdQ&r4X$X\F,!1B ,H,&a2EEj̇"CMZ
+"J{haޥw"b i Mj,0`xpƻXX!@>Q{c; pXn W7wxEa/c2}C;OCaFc(^(kN\iRbge7@'`V/D6(YC94&7cxD5ү
+ٓ%͜y;s`NKn<4ocbCo|z=*sqT,IQdZf\@4eMe>%Kڳ$&4q$i@̡PƴyZAKxTO97#=|'hKiEQ; m~.QMMDGZ}r,P J~Z`1q!TJ,Vqf'̀S$f&>,Z ek>2NƦ+k֦\:]TW 꺔Rj#QKmBjOI%wMN;K;M }/EeBbbmw,
+%zr<H+$`G͸qcqgL]+E)ÖEb#ZVaR(Y{"lL:t(?ˀFHN")rV[5JL&"da^YVޱ6P3aҫii 2 !Ia).y.o$m]գ=q)=Fn}=x±BӋ
+8cCky,BVJhݔCӳxC_ #J;ꌧЯn0(jjhCzD]th|cP ;aEU:\!K;Llժ;{ %_X]s3fȄHfy Q0a޲k|Cg#!t럩OT? IW @h*td\ "n}P"ՖV
+w7h\s%-@$W\t
+YםMD[Pwż8(#j<
+Ӳ0d MPfJ@QaA`J!@/Ug&
+I0u^f@ki(uEU413TۤuS] ; d9ץ=y5 <(
+&m
+ W(RgHXj2֧d_+&wNjGz>=TjΠE\vdܓXeYpۡ9,r&2!'JT.<;o:`us"؉BMĔ d]}!k܂9CaA}ډ6bc 3[~+5T,=IĢdX/ ŅOoѵKBxuߤb( Eo'(r@i;DeqNߋ=+~O ׏D!FF*!6#UjUȠ$ %=1IGJ f|BHXdE̵E(_X$0(b#\$Vtm˙f^ǏsANsvLvOvbs"L6%=jrcbL$sH8V" Ff!Yԗ^%^^L'A%CňX(H& sh Ȋm9yuA);Uo\͐4m\? œFRq@fkCޯD%Do%h`IJX5D;t'7$
+uMyb#Γ,V)A`>|Á^:|zw`tA(~]`^d yTjfzc|N4]A'ZbQX۞Dw $(*BضTf` 8C +٤|v@*m
+"=("3u•"'Db~ Mr[eP vhɩ\,EFݪXx٠,^7
+rs 7$;L(.UaApvp׮;BgCʤtV)S
+?ŐQ?Gpn^3Z9IL땉bQX%EpÀqTS r}J,jI_`t*3tdžYC qF^;0AuU p,E{wWKQ$YU3I^`?o: R;,yBpͪ;x&2^ΰCx
+0;1/XJMd,!$˫(e:)/B?3Q&gLEċU3m0 ak7>y@[UϺ
+
+(_b)Bxdi?k {ፐva 9;6\|OrxdIg2V! 2J}!ׁS6Uԏ9-gͦmNA,JSdybԃqRQ;ao'*FǼi{n&V
+zR9PTEݔQK":c?NfyMN#'+iȵ
+A{w)췈''^ϋ0{P}׋$ipaHE\U#<Tb.XÉQ
+H!i(V@=e,~.SK0O;BV4T^--'T2
+ y\Vik
+Q 49E@LF?MGY3J.BEGcgVpd(*O^NmD1E
+kZfF'nÈ:C6 Jg5@Bu-xУ:0|V}!g%;^uk}*ԡ*y
+G(%~e] ;HBp\
+=f#r՘m)~\67/3+|JKo@ý&>J+DjEWcdT
+J<
+©Є6tr}d2z 
+I"-U%z2Z
+9 }ÔGկ@l+=j16]Nne&
+v\q,ا ̍SK QQx3IN8~Ĕ'*MFm fj#_p"AoSZA4S45u@HtO)@64POBNAcR ːU F3
+4MqJyAM=/j'nj 9H8t4^($S5O{/D@Q6rfjBtXp*?ӗ,K᪈1рgirU/`DR8A9⤉ (BKm8z $4^N>( xf iX6]od6y8 `5>Η{'b*K 8LzF4DMii4Mh
+D9 WWU.N@L$4˧{<M@#9M1XwU0$uc$ R4O)+6U(Ԅсf LsBPĠ$KvJAI@0N8
+`p· Ο U5X=|-&f_70s@)\"հ"h(U!fh9$fW*'>牄B1JB}%r0IRaIi#_A  Y͜#amLh@~9 
+順0[ڃ[/-du`}˳kEaiTrYO8BEԌnɖPZDMŰAtCr(BFێUvwh!:&=*YT#δ>MbF u$~3*
+*8.qP2&S&v
+pzzq4
+R
+i
+k)ab%4 Q2M(+9?`I=%'֋ R73 I q(8wa ;NAJwC+9gg$Uh^B,\l7Ң1eސH;,.3l Ɠ3|U [Tdj 
+4'νfrc “ɺu&-* A?Aj}q{LS.фZU>{i,"n,#"lO!ÀE}vYgPz{?]Q*ZV;'PA}
+OL1#.
+E
+AU_$HDd5}:Y2DYHXϹc^M\>/¤W:dF!;SӋH8.FVh`Wԯ|ANiqm%/
+ƄѱsLlD I*;\ԯp²',ԣrYV1,4{=zEVPo-vҌf5r
+-ZQ cۉ|` 8Ʊ&jDHFpWhfPgF L<o99 0 1DseP5l9"v{lӥ } S/ @9%y czfIFs089nW6J!9vAR3d39;qxJvh$lggJ ]XW8b ѮR;3gR\(=
+cD
+jq 9 G(eZ+uqAZL?)" +SgLj4
+B=.3ySᢣ$:Bk}i?1Vu*Nadupx qL!
+A69 x\uDg>auÎr<-zkBb
+
+s]>(o>lAdBSOYp >5aq6;3,zH$|2$d0#775!P!
+V,Q=#q]UZEH_:3TQB/wZgiL;|,O,\v
+x#zaW+ڭ"iDF4I~f ejp"~Jo.]
+z+ @\Hi ^ F'@ŒWRsmS.3OP
+;IaW?K7 lҾK&B
+F'I=@MߩIhZU*ǫ4)w( 60`dUͪ?Gejh܊DO
+!4ٮ|TiS1qq48h>L:45-NŠzpЃԀ}+3h7B>#tf,MNce'uUb<̰- JUҜ[+%w.33L7~
+1c~"H9OqT*[zfV%NXetsv:wm5/˼hIs 8H>Yt0U2Wa@̬)me퐈6Ԭ9вDB02Ʃ8{W8ʾѦG
+biyR)iߡ 9F<eZEQ* OW2B|4
+(yJGU%rBYm1#@KYiT ((lԣs6h4BRA:oYjJu#Qf53a۴Cj*RM耒ۀܦ4TcҠj ylWq7;2亢p~TBypUfӔbN/#kz hX4B7%,M,#. ^#nivUלݖqT@@|C()
+<a'ץ9:%N@ѓv}2;Gu4]ꞇsdk]e
+6 h)a
+ mk*Xm21xp-1`qE=/NEu8E1-%QhW i 0J5FJ~k/BҢ3YY'`~UN 8lQoGs  ,x"Y8+{(=cK!Wƒ
+
+Tb=(/r?TKɞGUϸ^7U&fcmqMI%f[]JZAO]cm`Ě!ZMČ
+}s(1
+ EEv[{+Zf3MdD9zWSRRTrJO A1aQ͢<e-YeY'N10Tn
+݋%uS
+ُ~i{LjdZʝw9UъgC e|edQ5~$DlޟB(qGF'nʦO0;z6؉d6ՍlӝvUzPթ>WW*FzYSQZO7?id"V$dG\9)"qiHSJ Z S9QG5DB BCA2 Vm &EO*”rns AEo4A'*VhA"!;e;'A;&WsX$?qdӏ,nyڂ0v"9jC4]FmڎY*k8njˀV0acmkgSʔ@R `,B aBlh1&ͼ0~eQAX[hHpe:y+Wdq %]T^Í6ԮmXT!-åM5w4D,des9pSAj@grqAFí8LpK5h"Ȃ"Ƌ>+R4i^.20t{siHGbHRkz-"閸c)=bQKJ7>Y0_ 7'w`/{ G(33Vo鲁>-rb0vcDnK̬.Z5`Z;,A &llԮ#ڟ, ~GC2YaOɪ['73\ToK
+GmES:% ;5 sE8P i`¤R
+Rڈ RӇ68ՈA*Tg-qHGi0[xՠf -?M"ǵ|_ʠ
+`Mw`>*`cO`GRH9)[N}WBy'eqdip#N3'Bѝdl&$tjHf2 2dt(}r-C"H;vSh9Mv{LI|p2^&" 8&1nV[:U>mdM3h̔ 6BZOMRm Mq< mAL$۱R ZލO2ٯDCX19TE*@Y6Ge0`o?ciR{Ā:Vo! G50@7sD΃yi."dXPx݃9dҳVobNFVmBc
+-W¤:/A0QG9O\
+ds(#X0U`UT6q)Tbr)tՉ3cA"[c6&l7/Qׯ FxКN&JfEaGqXG {<0Y16hWWj9f`g +%vղ飴ls^Vr# -= $ d Rt @SG­5.pn 6gAf":C1E2yg-4UuUp ʳ@zsC@Ndd[GMgs7׆6 = <+Uv6LEQG2NjI45W4HN
+Y nQdK
+.
+.3_Uxn0>rOn(|1r.[*-b^
+ɢ zFCtjR ) ђ3<@:
+yb
+Մ`|d`҇Ob(f
+Q ,+
+'$3I(Xv= @$P3ɕf0`NPmT:EWtMj1@э:DG{\;u֩H
+[K5A\UCq׈Vrr6GĹo 5NfFm y;k_NƬ]O>6"tjRJSE&XP/0t&1
+6 [AA5:ߗ
+T R`
+K`|;Il5pj[A>ˇuR| h!吃GRaQjZqp:Ta>jTq0,jmOmľvp[
+*`Lڃ1kZ Ύ$o DʎгNU>o`o3`N^7BCP4{9N JkxYc]LYFN TUi:ѧ҉PڮuKg*'J`+^
+Bx
+=,W+_kL4/Z#XЩEAlqC(C{˝t*E2 'ajV2iؚ^<C
+{*~[-
+0QQ:ǾGuL]y:I\@4HQwQ37 b\ެ"AndN;jռhHuXԮ#3:zoo:"v讍>Q
+M!3XE:lH6/<H4BY$sb v}Xʓ( 5eHYͺ7eDb%Y*VQASٷHV^QDjb^-zҁPyϻ0IS UyA=\37:L6
+1/
+bW1^#60 bڢ* KUy
+++bB܁e.lGg4# "c$Xb˜b] h ,JwK"2ZΒ-xɮr@e
+$ 6b Y9ypi,ҨzaR}%ZtU!"ZfZn":&p"Q|@|(zأYnVlM,%mFrpY(=[/ǚDmz}uU*i ~Q2~] |GT\$L҃TN,lrCh XS's.<NBOr~
+cP:z"]bIXF[(N:VQLHL
+fcߖuVT a1!ѠT,bpnOtT>$!
+%T}9|X>*&c-.%
+>eNP|[kċX/YrS*IVF<NO{BT n) 6tl8V)AT({b$:ڤ Q6>ҵl0sX"Lˍ)BL*{hXB JK? ɞEc&,ZX
+!}2a찋;S8NB21&g14|`
+w#;hyYOrTD&*YF_-LwJ#Y<GҤ-%䎚RL#Bp=7CKmsrmXɎ*:MW˪ 5FtdۋuSPpP5E\EɠզрI\(ri _\Ub>28<\YRCAE(,0
+4pi/+N#!5GF6`Y+MM΁ܪg.vfޱ]X^RAxM^zcd~pjMǙǞn[ tXz:8:p+K\澰kO⤵VC}$7PČ¥No..f^<WN~?W?.ݺ_ǫ_~z{{/._ߞ_ӿ_nw{Ns~q˿\_-ϗvO/ɳ__|?M&zx mw^{H~_~yigV39?k|`ǰQ<zv1m9&~|鑟9/x󻋻cLo?_\G?ݝ}?ygѕۗos{-w|wk&x|=]?/<|pg`޷\\`j=zݱ|{~{zws|T߼=;o8[cmq\}{nMct:s1혵#[{{kǝ7b{{o콵OݳvͽCۛ{{sooͽ^v痟}; /d$~c S{_R6= |!}yjuۋdK^~q~ssM͛wmmKҎ %xvsys}-f̚'_tk޾}szv&/gxo8<\&c[ӏrA\;Amh[w9ͼPn| ;Q's#?׭zCefc
+SP_ث?jm$ٖ`mOo
+?^h~<w~+b3Z\Q;vO>OD[{mO-?~}*ڋ:ϳy=
+<۟glϳ9fxv=Kx7bxmζ?m'm;kcd
+(e g~CAL9Usˑ,0߽Cb2RQ˜Ғ4K?|JyȥԹ%e嵣!Pk.<6+bS=9~+5S[_Ѳ]sYˢ[Yk9^gxAF/:SGbIIB$1]DNS}W!KЦtJymkm9t|N֖,DpKW/Zj˧qٗ ^|/ZDyȲqMݲaˇh4Յt&WÅWoeW>#iMZsp )e+N)u29W8ӍIJ -xS\wH(zK>[W֗ʲeGnۗ{9I WG۝K[gy ;bVZU
+ad8Wդ%d@SBSS{z&4u{|mu_fs)~rɱ\:(9<
+91:;[bS/{%;o jV3 tu󖥣}X_"}X%o>x3O?T
+R$S}ܺQ+lTw&+ J2su#wS|hW~y5-G>L7 +K fP3k
+W~u='W?7Ȼ,Dv]ҍo7Og}7_o:eφ}+l$_? =G2p>Iu]KöwU1 ,:ulX (F$j{lͲ,&ϵ.Z&qtZ Z|c/RqBrhG/9I\t{oi"]Ew:Y&l"}]v_K[` * Q`8\hU`x0uݡq msIk4TLK\Ccb 6>w.vsKyc"2VB*z
+[;c>5腓'5g
+37Z#g"D[j ~ҖȄSC#(yhiZKr䵬y#[ s8xbWN1_ԖJLimעs727_{$'-߈</
+78}+rjxtn9/wu$9Џx}l> _Gԋ ZÚ 5R':Vpֻ6bıWJ~ٽ+⭅k;Q02z6Ǘ,[ OAJav۔ ZL%S^Lg9y3p]R_{kQIZ{Ӻ^s[R~{S,5wZb/oC~?-7z]dJo?n%g:OfKT<QK9Y:m{9c$^=W)Gk Nyt$j2
+!]U)I/E@KūOw|^7?o7ݟw۟Wd[LO `P:[y&Ei蚵KB9gүgl%/?}4ٿ\st`?e9u}2n)ov˵@.[;0Ј n:*
+rў}. fս毾<FIw/⇟9p_?z^>y3˚>G9+K R~_j#CpryƝayih
+eM+){{(]A(΅9kW)l>tޘUӁu}LC^\[@qÐ/B'_ǭ 0W<+aWPۛ}ƣ TY༂o
+kX0r1^e?
+#I:g/~ na&|ø~<髽'aW%1=s>;@ ׷z\rezOz⃏K~s8YvQ^;Z8o5w-!
+1it;c:lOm li+s*Z~yPr/{S3㧳T,)˹7d ڗvR]gN*qFoG+^ 7 uRA2IB lT_DY_Kȷ';.b]>#kgM#p!nJ"ݶ{g˃y @1u왪tW|ݚHs*1pllUQ֊}]Uu
+#!zJ߭u9)࢒݆*בTNƒ׺@7 )e݈߫׿elW. b%0m6u}{|К:fm}3ie8@re篿MJ$y*f?IAּvdzh @"K^qhW\=D4 JAq nkn`7Qyx7߃=Ejy}<vA[1k7,qRCLUd b=Kt<mx>7i<]Ms/ wEwNG<SRnz_%>xJMn|/\sA:.)釵/ Eq[#I!zwr:.l5$ҙ[wD_ 4`~.\ۖ%8!<9
+Xfaron4wi*Q\?HE %-嫭NBb\^ӱ¦mwSWLy6Jt؈.3g
+qM9Ѹ!:LNʚC<x X9HC#C'9q4,<mKÐJU2|
+X_Ib&b(ikld.
+8W*M:ռ\2gݯl&sք?^]Yu[ 
+9iݶ?V}=E\yUgJW&Ed9Bj>&/"m˔JrDq
+t,K[\K<_{K6!l=B X6|-ǬÊ1H0ٔXZTjp)%CէY̿$qv80yG)
+[_㬅0@r?`m
+ً]'m-Z5)wmNG~~?#eީ^YK2Gp2 p @O널1u֓V@]f-V@N4W^fqo2N%"]rGa}z2mɝiLUBk38{q;b )T[Z{187+]߱v<ܪTSҝ]{5մEI10aUg8 Vg'Y-K R3t=-nԤ["Boep6|h1~LZyo+Q fTn2wai6ТYkXV8e:C!jwDu
+C xw>;;7Θck*~O k^md4BڸbK!d ,Z-WѪp61MIqjl%@\ ubDmȄRgXK-gwk>Y{oPιI"[.2؅FWXSH:<!=Nklr
+Jٴz/&+ZDb59sv{S;vvf8C$0}@b
+", $1-<[Uyuc[zfC35\
+VmgW$! ŀtFYw3].4Ǚ$$gk q!Lb10:S;ǀ;kJܨ$sjGLpyȡK;
+XmqŰiʼs(0 +$y2
+RL žhk)pu\Q"fa993Il NFKֱYCG^k&2h@[C6a
+VșXoϱ~hѫY3v_'VS
+*S}oV|u vR9\LRU6[0kt \4Ad\ K8enTG}GkŸD61@\w%h\;Pba?ϸD@I5&of@)f""ۮk/ȸ$NA|ta؄לIPLR$<K1I?2+&)fvJ1(a61DeH󮓀B9kΡ'>Uyw~ŀ!"`.R?J= uj|xП$[;ڇCjy4qvApkS'Pna&Pmj e3L;|yU|cҖx%1LTxw;/P~m8[J\`5c NqV;V:Z(<r܍::'jZa tb݅m{_{}˛\GŜR3;r%*}
+g
+ѳ]ue'a([7x
+n^kxF"u( <GinҐEyͱ<f@vHMJXq
+lNf`z)%}<lx[#܉eaJa hA)>RM|Cg!.h]
+!qQnZHI=7,KZ xc Jv;m1%C\X: ` 5J^#8fv+)xBgs-im#F)汴Vl}+iK]@ )Bmh)A
+|/"x,:ejGPn|2I(|G&3)P*'GzE* |bDo[Og2*ybfk9ml[BUO_mؽ{PAė|WAGACoG*Pom=Bu}P9IJdߪwQCyˆ cW;S)c2ry@s@îXA^x͝:To 9IPYg5ƛD:ӽ'vl˽MIeR@xT]8 tjHF0 m0Ch]2=̷H9V?QyX E
+ #]l .Jn { ts*
+n2J,FH̠}5J N_(B7u}R#Pc1I/̫diȒ^wr#XKDVZ0u?ҶM61#"eړ @3M>+^&VS**;'73ė-+|jA(D!_LCΈ$m>E y퀉~Zbz^/+YMD`R4%Y^nmcc/8HV0w؏6zXʦ2Bj|]–RrK=͗s% YhzAތM|g7*߾ mkclC@Hښ^o'۾hs̖\]N `.!xTz*qq-)qv.e)7fo, 2HJq)H_,s`sYDRσM \zA 'g|T Hܡ童qemehn(gw;K@_yGjL_Ezٹ{ \ ;Gw{r\k mX[2}3uXiu>(SzݩTRIkVA{ɜh}^,\U4dhvp0DJ> <sUR]bǥ$XOimE̺ɩ8671@#3Ԏ3mIGLYd!0Z-))\e6EӨc#r]I1aT-YXG+!
+kûth3߼3ŘѸS,HS\b
+ƦSA#@JΊ7P&ZpmՂ Gjw)[=HG0U8=S"\ɯ=Ro ]
+봁ib5(l#+O
+u ڽUIwM=R8nnX|OCE'NN SZC0Ak/:2Cc7p ġ'xkȰ-8Ga̻d00 
+xÚo+[4`0
+3X*@@@n<"ܫOq`zkQB
+#qLP{T<+
+NG' 2ͅ sbξ }C7Wv#qp]#͎?FFGva±]RNN/;mIDzm9}u ؔI(rIEvLYksA3b;.XjpNYS92WH/VR~=46f+vJl ]Z;![r^%?"ΝM-:֍ R,/T5myY*,Hd#ugh3 LFLG H bljEMiR)wΑB# zH>nab畴aN}]vȶ#VmO uwoOfjB.n^NzِǑ$37CU' $@ԳQ<<`R\Behf; 2-oļk Pmc8Np8.0#2ocMlV"-3ɯǬ 3%G
+ђfƻr]Ҽ iɆ eQϿ,=r3gF&`9r\Nv0I_WcZLS`M36狕q`Y;%w4Wqq굿@oi2t ڌ]lNeeVq&PalE샸)el@M.>Դ:z#H7
+gV\?F, YGb+E;!!6I=\3& cRܽ/fސ磮\ׄB4o!iPO {ׅ7
+ZQ$dhyw
+y8v@mȜHY>m+p7BB3ժ g@B`!sb,ן5c$ ;D;فHp+AbP4 O`*Dņa
+}^<
+=uqfG/b]rH<IT\a,B )Bhhe
+yNe`ջ^:u5pR2{%C ֜"6H8FT0u$1ckJP12nպQ%݆
+UW;~C?0<? T Zkޓ2l2کZCdcRkC`&eH{|vzJ<%ל:.8 U~qσE)ʴ6ֲMH
+Hzfj62c!-p
++ZK%vܦs+v[I!1i_>2†X.6SDg;w`ڵ{FlY85u$ #|$VjH'vE2NU5S*si%L`绌0 f"Γ2 ':j1:FȩMٵy}}0lu
+n*iY>ؒ
+i,a[rbPIli [d/mѪ_ޅqQ }+ [jh:2q[Ӹx<$VFKj=-qTB5НPa?^0l
+<eXFa.n&1EAn75S
+ޖn ,v,v~Xat>+߷]qZl|꺍61[Јe$/鰁j" 2yR2]aʈg8f
+~@]Դq TӢ *M+/#ޥJv=cIPVK\M+6IHި]2Ĝ$3>c0#Beᨵ&i7$
+ P.aa$̫Pdow$W
+몕6vJN@},,0S9uW96J\-qt3shz[I/hz]S1TswJf }Dhl^%Z 82ecB[nLRkWn1sٚ{3KC$L e{3@Q;+瑶1Sjg{7)n%UDG3S ھUJʳkQXL%huA,>~c<74ي@@FZ#E
+ur:G"g}g_9w2,GԋAGhk:>"ϸXN8bx;9oq-wRV=`j㽥ym k7~ڑbT9Ex֫ޒJju_؂o^rڰ;rH5t_
+'ddukaƚ Z1uzKWfƲ*dt ѱhmPHuҫٞ3
+V-ʱ&2bO˦c
+
+ 9
+A4ad
+Zy}.kGHv3Pp|ч6s>4~Q%V۩A++{=4im9O]<Y ))R, {悁n(ҝ
+[R`FԀTeF/ru7!bo;7ixT]^L&'m/cjO13͔[
+#<HMm}g($0]sMI mx̐xQ
+W!^wS[R 0jeK2hҎH9;&S `7Jo_-ϻ4K_v-K=KYrjS<sT8K65nKńu7L^Ew N`Na{}abQ/*^NI'p
+<67uZ}H܉
+c;L\JXՊh-UBUa TJ`$s"Gc!U^,04Z ݰ5`Ib8jv]q8E`P׍Rf \4<ŁCۙ:ߌ+ո'?;h!)VrMӦW(
+k;3V63!FWtр߾H2TPV3
+Ͼ ۴d?|؃pGk"}ymjϬ ؍qݮ,,ݜg: ApipމJe#W >\A„C=  qeD)a+ =?mvgi䤴DhcZOx4݂~ć)zѧm&&Zpm2=,qu?FU\l*>@DJBSo>yhըܮi+⩈{
+B۾TbJkkxȺ47"uUoGxIY*,MGTZ$mW0`m ފHiX\4Q@,9
+!1C"9j=c%=XJKP+:wg<c=;U oǧHRܣ'l,zǐMVLNIY} u`Ȏ#m_pPd!WS?|i_m) um]6F$Ba<i.44E[(3KY^{Yk’cdǥ8d-I[o]z~+[Kr2^iH +ӏwHK;,Xc+?3ϱZڒP%t=gMNMLV%RMM mePRM~Ne6y:rLmG1$s{2ёbɱG4\|I|ߓje,10uDZ'
+VN?oCdR=dR3tGM?:#lI
+ %xEO1Ό+ގ6gmދk+zjE8_7=2t)QܡB CӵՐn뭏ߞy5ui i]8Ro_Izn?^`ᨊt~=[2,uV+!l g\Kk2`ѯ)oiyd3[ j.Z*Phc2Z0zHrkM& ւ"N,p=eSrGn}iOBڸ 4yFD@
+F?O28?gRmzNR~}krBb 7_фtjWا*Y" UgOϒߋY@OʔVlxDkIvi[auZJ<i3!^3i Z. SIu Wz5Ryݠz6 v:cGKS֯HaZxUN= $0ϹvmlTs(hـMIxڛ
+q)#rx8-sʔud䑺-!IuZzz"0nb+o; `QAcFΏEƛ~ |ؕ/A{o| $ i"w׃\7<vǓލ
+ ⧑-cg*ŧ.N/L#t:RX4-NUl̼:G #5MPv)!. uCw|'?-LybI"/xmd3U)b!eJ1&Wf>'|=^&aMAņcJ
+X6޼vV,jIᝧYeS]>M%ZsҒLvO턝pDg={l 
+MEi)%Z%K7,p뻞TB`#q{HkwK MqSX{a&8)=Z3" 2q>P<<R/hlۧBd흈q!]dZA4'{KNkN҉>TA{"qڂ .{
+>S)ޑ&ÌYv492|3weaF-w 8Ǯ,Q885rC` LD%V6+[baީbޫ&xū82թgq#F=oNWJ^IX~Q&>qm(6HXu%eSm15UDkA3[5M
+2+4:z|HsqKHjO.'˝W ȡR~FImoP *B6,:a "Ok5|*2ej/9Gvķ|E5IU'
+g,\}b$nFpѺQZb_-o1.QЊ}cV_b+`W7UxIFsɐyġEI^iPz؍_b~ҳ iو#&fhmܒzD+?P>w]fmO]SmN@qoߊ\F^+cM2:Kڽ I2
+tm&Z8n@wgvLj:d0f (q@Do {{Ih?4eN+zUU^/-UtaQP=mps?MpTmNJ,x&jjf}3#!cӋ>RĎh{r>L!:1ޤjrj mV)OVBQ8!C'KEg&]{ʦ-c]4,au7Ci &QB=k +KߠS̴>Wd`GޜׯkjaO?7V $8['pVdd̷'*7J"„p1Na
+:Yb`0
+1fc*.NgZk8ē];x?nsޡI.Uo*](##gmSLVRG֓y-[Êy
+Ȱ4ghyu M\g daF|}к5񨾻
+0~=.Q&t8 kIׯR3 ~=]w`*aHπ5R8`̝ "7C]v1 $Hf}\sKz25#_L?ǔ " Rgl6)lypgIL}y_i-ں#κ3 3mFhhcq;6{ 6dȓŒ<ze0~V蒭j.L/Ԧ;\fF0c'K~c&/s,:Յ._BW+f1K
+1ui /oid# 61F#:4dof
+Z aq̝(47ufQ?ؑyUDCinP5"Vs?LHԆN !x6_hQh{hi2 `}(t I!\ yX*O f~> GL5
+1xu,"!}BD4)A AFk;hF S8~6Wl*3a ͍=
+@)<MOĶG~YGd b"Gj7 <bEF,8zt
+ʋc@SNVB4!r(i8APprЌQʆ2p5@@iN;;{f "QIU0;>ogBpsb5e#d@} &WxQ:_<_Ά:=ԁȽdhj
+g
+}?~-H՗ _G`s=\O+r*TWԋv_[AQe˻!h]j׈Mo<*r? ڎ+n2 +D:t;Uus~f
+E]!Q/b}bH:1ճOk@^ʐ!  UF-Ѧm{DMϯuL)cIr{Ef5-9eT?no]u%}i\Ty >gj8.OSY?侅` Y9- r?ި^([L콌
+ |x .RuPA y x]kۄA~kgHZC׮Os.FAs9|CcYy|#ю?7}t1l:F}v>謱yHz&~뙓߾\k{֘@)w"9?ssNZ)tx\禠<3wMwf7mwvLA-
+ǎ#$u--F|Jr;c,8pwL(9zGџ
+cvkͯy&+A7w}&KoIȩ%cY|c#הf~rhlMS1HZ$ч:3~Uugݡ⛲kdg{폳'9ɤx޶QOWa}gٹF$ŖAb~͕edMb(#V]$
+8S
+=:.Xs# 5ZVO(>|%u!6K=\"!){(X&Q Q!b c ŔU2Gof@<gH! $i=mlw~EE$RED\!KY;;y<4^::C-D9=.rzOVw i+lw|i&˺Y97Ϫ] gUEy"wc3E8 #F=ϜCvMY{J)ͽ?+ezJ 73\S, o35شҵ6/gfsxZA P P(}{Y?~p,z0;k&LFj.Z#FÎ]+r)|F#Jdxz#.`d-?#ş+L`lz%#=(;ej_Oe:\̦4!uFP@=4!`mf=()te GBz
+UH(˽=g QR?bg;_wCU
+(hU!ΜB`! wY23jZ!4ٺ"kXg l;ݼbsL/?;hų<#弙1=sm6t-<EDԬ÷z24[2=~*fWjf$Ǚ{_p0'=n YSiY ;ʔ0}scxm(V祚\BitѨ%ɬ
+67@x"pX'I[
+n+3TȄdAgd<o,
+(;V=41c|o|
+WA%2Y#(*ofto([63hadA羲4wo]<
+nP3 <
++,'+*wF=VJp<w;G_US׿G3g2@8sd2ۺ7M3<c+-buJj%OM.[ RjGb{CfL7dDS%yvV>%Y#ٵPժ׍~ˮtSEj
+0uqpЂ_[*ׯLȞlT<7 cG2KbvaHRV'ץFZAmUAEXulmT*r`no5~3_=;[e.X(Ze@w<z
+gp4}c*D 䰋RruzBIu Q:sRhI#0!f+/t#a?$;0 T0_Fi}_Uf\{@bߝ C
+1-06u V䢼Lj0kFhQJg0%{bO錺L"y kxM|KZ5El`yOn $D3k fЁF8e+Yo"òV}/&>f^+'7c;oQ}1+_XcHt (2^
+\i(REyl%c=G=&PthHQ/=uok#(˨Nx=ƒKedPr e!/>kӟ1C``rEE/?(+Vv,xj{܆A#BdU½zaqNo';N)i]5RKܭH5|֌AP'_ր +Y#WM&hFQfo
+D ݂s״{vq]TGژT;5d .5EA26C.Y R}TU:PPT%CM;qwJ%a뙍篰2?z?hX̤9.sVlR@ok6W6\q~XOo<>}H3 UK܊UڛZąO9VV-\+k΢ z)3qOGKB
+ ^T,Bãs*F);>1#s-,.y Z=txb GqGw"/
+ x($C <rW~6xI%qet(ʅnr#ӫ̣yX e)G<}_T/`?}+tdೱ챎#22@?iv$C2ʻe8:FN/du$CW!3pF%`9CSޜ,xaC._#:w*mw*噷\ϛIW0=k-[ݙ3C}f#!FkD{F
+;;{DZQqJuF<RjOE,o;MmM4W/_#tv\I+dz R7ÆqlRKqw1fJ!HsXZH|*>uHuzI/rl">=i\]]ӑ*4hZL;
+iHz?Y1uyVw?ER*ߧQhjFǣr\CF4)gzԈ^lCm~85g~wHBnN@(.ր,5*(k{ 4;T3*Ky#yeT,3(ggi)<);̓*i19E築[`ř9p 93ģ-,pw$:CHgn>SrWJ9?FwA{f3`Jg+Q?7W5N&ʀƦ
+}adwggng}`fIi΍+7^uoODnt )8Xp+X=:(PiZd{>k*ch8l](S"6%фdp .RvI:ug6B?91<{|=x=
+J`'iȿSP.alEo7u=2"6x6 PK0 '3Q ӊ +q{w
+{H[TZ X] #5o m~CcM5EfQcΞv
+h\i1XV0DR:V )i2) V=/zҤvW5t('GG/s̈r) .:v~(U U/ͯZ+DPXF~Z@"@dwXI0߄p
+2:sgtBpڔ\ fbgQ+k`tHUCf<x
+}xe^'Duwy-]wOqOc)pj 0z$:R5HoYq4#n[JTgFiP^0{ᥓNQfEz5*
+xD)I jqj'0^R.u)pO}ATrˌ;yRrW)_7/ V$&a$rWR+@g SݖhvW#3*>&yu
+BS;uH"ҭ/VyO!~1d^W+~,yo <nЯ4чbgzάkE<eGY(m~@ sh%`B(*&A1<D{}_s6~ GQb_sF а{odd^;iGsÄHHyӔ\睜oRiJy[Xmřqy_=qe~bF Ԫ0UWaq z,Ի!U8j2 ӏhzC*UKo7> Z3qOe)YYX;Y:Rb>{ʬgr0'`=)ߤ>ڠ||β8w7I}ә-.,n sŋ{^u'԰sD(wk<H2#Bp=޵IPAwĥ@Ƽ?g /L;&b5G0%k~n9cg_!zl98w删xgnusq
+zF4)~<o/$OTu(mI~S$PԪZ].Q3@0.ڮ]oxQL%ˬZYK9p9'ȐK7Gbs8y؈9ˉ1Kw9m48U!6X·]>4N~0c=R h4j^[/*# 1<WjZbI4ܝU}E]j
+ sݎZxzʈ u2*ZF2J\)#:?vOo<oAhyG،yOlߪ#W0K
+0S0>)m!ۢYe0 &wBރh"eAх_GkWc'+`5|E 1$<ye&`l5Хw]'\cCD@O1p|GF5`L%hq^}J%>)U?gU$
+SMW⩘#.rT Br5|TN#fe788hw8|3;` EXdR;O]k02ϑxKሀ-̼ǔk~{:#+pbY|;mA,l4C.cшMSOˁ+MmyŜiz@5h>형_Co%KH1p/0{:IEoOܻy6#Jޙshsdf:u/ZsUOH)lLWT<>Yt}[C9z5w>}L8bDoMg]6}gJ<L
+HO<bൟ1M鎎m7?klGERzzJ.oXi\~| n/+Ut__gծ%ڎmsipC?6hy?ȼ̷uJ`V:~!Pzִ
+YS)JVn;i-wŦF=V6V@^),^jSwWf`#)fxo7jX 1^=x EE *jPAVi+56}{pۧDNO4PN( FOW
+@80mVjasbuȫYkh=%;=^Q~Kjf c»`E(9,5))czlQ<pڞq+ӣ6*L
+aLbc#b6fj
+61*}O;:ɢnC3N`)Ww)$QR(眅캫~舅>j-oPK(^)i7K|O
+Cň~zQ݅sΦΘT,.K$#ע1hS
+<<Β#fL̶#ZwK KN~r|-7wTrB𥖗"R߁\ My.:Lcu)Mp
+ߚ^Vw> (?yNcwdwdQ5oc6WJ9!Yӳ\^[ih :W&wڢ>2]}ndk%c{k^r.)Ws
+)a2E F4@{
+ɦ"05S=mt&5,gʷh<ue};2v#xe 9brꥐGxqƷr>0$Q[n~fQKI<Lˆj
+mڱu;e' l^KZ&΂Zqdiw: ̦ ]Ҕ^&Ά<}\!}9++Ц" m@
+wAGNN58v[ᝨO]3[ye X0ƺ >BPPjʀ1,3sŅ*Hj@;4:<b w+]2BL5ڌG誽o|
+Մd̒)V=b',֩S芄R@0q[ʕ)nq@Uu=ʈ ̪,=bReL$껣1(}S4_j>/
+S.r(vЪcmnT}Zߓ0"(H+q
+.NY R odheاTVl?>] JYA^ 8^S^ZGxg?LH UtQ(e}[4<Gd
+Wz.8Ca泖mmHבxht '?'ɱΒs`UƆ4R vfm7GT6X?v*L YA鶾􅸩:SNsgfO6[ bk;P ~!y9sWyS5ӓ#0D@{J:+Ywz /C(|ů)b6f{4ݏ&L9DJbR,R!k%&O5ºPOSRݬL>]O S@sAURƐPolЧQm&(qnoO:
+.vGO)R5E=#bnf]+n S.9 O_ =t\grKE~ K47;vt{<£T`׃E-2 N+iy¨xm"]4'JmϨ
+/{\0--=*@}@
+ {58(cp~g ?\,,G
+3CQ 4WyN+g+mY1{ZZDԓ[A<ӱלXo{3\G3ڕ'=s#/1oL*<~`X%{hɇB>iY<i"Cz0mrF*W%C|)mJZ%˗̈<Bdzv.cT%>sPiQnJ[`4$㤭X[28gNhM5<>[Bt@[r5+T5Tc%'"biQ;${~c.,%!kC#ʟYh{te85Er=<y~~V6G,O[2uXrk=RСY2$/ },(a&vڸt六%}U{*vVf:(l9%*^+Y[^~4Vz]lh\Wt^gQM%tiSh <vg|ʱ'B05fmAT7t"ܟvמFg4K{֊gQg|Ejp`$ S{Ym(?vĮSő&/x0)QG0xEV.hLmA.@\c>{vZqDU'N6J Nį0+T[9Jv[́gG[g= 5Uфf5*}5iW
+HIx
+fF_t`QB` 4s~SvDВpn6^Pg^bSߧo'P"YÊX#>(xx#HA2e;]8V'Cesv= @H˴AoI3ןȞd4&/mC@͚)(v]z^[hfYd& #UEF$W19 ]B2:I2#ױ"~/aRu!ےr
+E-8 BapЮkgH6U^(iB ͼTAhZcű!/ bcC\ϖ
+B{o4pwb7=}?3q]ٝ[n|1@WPКu𵫽}>B5jw!=!XTbmJGdieOh_4
+'QͼW^28t%TB CQQ8GfA
+NHr%aSՒe=U n5=F)˾ Ve@2iD%+ԑ8bs
+TrQѭp) OAY0SOz?НJEjи,B,+>
+xq GbvN?ojHK((ө*1 wdQ]Ǟjvү6~Ո;Vs<tO1<D<`>mOq~Cwӵ5^a (2רiTKjδTD,Z%O:,TRގg5KW͛09[[)<O^'j!`/2$dpuŽoVoW4kў80GM-e7-]ISw:c혱 W)V,KE+~c0
+ɠ^Z0426{T#1L:Ie
+k |sZiY$rUX;W+Y)ʱ߅I #f`?{~&=TZ?zMN c >Oej5*ցSO [@Bc=xsbzZl:xs{r7U6
+
+cMg9cR\]-lЫ-^ڢ' Y>c
+Tuڡϧ@H7,g0GZg|d
+
+(f钁6W B
+
+ltkHoFlHEchRk$9
+^il3Έ:D-
+KaĬ~yi H`G
+G 3VS[FWu/-ߎɽ;)2QmeWu(t(*h%]3PB^*W6@-cZ0=W " HT3# 'R %XTr<15 ddUOP&.3/tChGX_sdf o]fIbsC
+ǎU~,ҡ\fJW)ll$SmI|.=Cx«Ф}5F\ cI}6uC'撀AsbBzϑR|-i̭_Nx Tl$57I Y rr#/~7?/
+E9GXd#^g
+H1(G%k(\lB%_Tɫ`&,UjKQTDlInuhbjO{?i,j,L$:TO}̉hq+L.F|QTqkK+)g`2Lc,+gʀ0|sIBGIA-͊LfF)բeXC܀CeLŝ{2|\:vԽ|"+;oLwo\?#
+ӝEZ&9ٷ( G#~[Ҋ/
+㗬dH-"C#`۫ &i RdZLLB^j[OsL(?~4=8T1
+8
+ gQHMGw҄֨{xg=+^~5^v^g(X&RAtJOߟ"!#$ZծrmE~EYРޥa=}DFnpYU}h*f=fJa2Pa(/N]BY:JT ĈH<~ו S9+.z.x? $ȀݪCwX3\Mg!qjC溓7#W]4%/>ޑ/&!}'|M?"M] emAΔL ^-W~!%.K%ۚV
+yeLV-*wlij)_ # ZA Gz }H)_*#1zDQbfevlSh%+ ‰'y1H:sM/D,Zfؘ՗yb?1X`"Ǹ
+BzuGBHwnf0q6Wn|#C%jr"5lpDTt9 _`EpyϿcaAql]x_4ʋa^Dj _(;_w:1'1sq_1ۉIkV2dSWXeK"86 Y\4m0%MzD΂YT*%>nϗv>OJyЇENa)
+j3QBaQVqM3K HX%.(yB};_e@
+e:"NXU4m6a/%"ɟ*B4HA?0GtjW^R`ceJ3/P﹤PHu;7 Q4bTDIEСM.yx艢Ug%*
+R%Yv߂sdK=I&قp1gl
+MdmgA90-o:a;~4Mne6!B$_-UAdlL|*]YPbE]FxZe̹
+}#vwZ©wFRʤG+>"
+$#-d1tQ.5x]0H n^/@FV,~SCX_8Պn
+|7[#J.dEf_EC34gQ|1Bb~ĮսI}x,grN*,Aq76CWgb<|=###XxDZ _~D2d A$<UkP[lZ->EQa 8h'Stm;Fh5~vR995]u c~X ceb(ZƧs:Rs y o;:0
+Տ~{\"4+4"vJ#i!G4fdmUD9JG5 *k4r$vE=ߞ%A((=&ՙ*wW%ӨV5b]+Ī
+*KXKRm
+>X2w4 bHʔ8bQ$kFI] NBJر~?T
+5b0k̈́Y'A_s*ՕkkdmF!b&+THVu?=:
+7q՜esLq@y"m<jc0)>oQ}
+_$tKvMLnseK}iBFj$gVf'NJz$@
+ÅѮύ\})9(UP<keJھ+MyNX6< e$8Vb})pԕ׈="
+RL;{|kG^ "jk=6nax]L;T8^+"#:ݑg|
+`͆UmaDXTX3UU>TԦO8 )dyDq8QځLbdCPZ@\F2@á/%_ܥ/:1p"u0+|t V+0 <K
+Z7v:g]Op2ϒ25?(H
+F{;n3g.ZwەD c=훏؊>UM+1:PH'(:Xn`,qt 5hL=;H6Z^,)L }]{\Axi"9zy>Ճ܃C0#j0(M
+[+bl+=ƋhHx4 j%K:tgU*y왲.c׮&oQO׸ѡ ASu<fe[Ä]!2芫JS]A{ƀwiVNkGjxwyZ+enYG-f[VDKBvg[<XŘ 8CzxP ,-iF0; 3I3YMD|'d:( FrWpQ*w,5"Rާxk)$Vgi)dΈWH(,%'f.Mh3$Q)Y"T\+|
+%fCo[ꈂk^oNiȇ}d$oRNPy143 .suS{8N ~9xZRFiLY߻Lf(ŗ,s::$Dg9:$ x?M2Ny[*՚zE*3Rjrr# :K,)
+߫bEsÃky |R qGg@$M/!1ggf)U@j wJZ>c;νw/qSrU%{YG% "7b83:aD^D)ҬGM6oêǝPP
+R!4;n]~(@TjI`uxz>S㌏rk`?<Oapf| p?˦fU
+mq&<36$w`ޣ#
+
+'E/˧/vi|G GƬ HNX1 a Cb!w2N;bC*0R=πAЋE{1u ܥ<kqX3'a؍4Fz‡-$F~d %dG©wNJ7ЛKgXe"?p_g$Qng5̬[wISk8} #?rէCnȧ_7!G{@fBiS PmGh?d O+% ay&h4δnWYdg}tndɠNJeB
+q%'SQw`OilM?ڂb^ ]4FSp>T\?7<mi?WŝD*R
+L
+H~P ng$N\j^ЙLiUWPc8+M@7'_pjeGTڵ@C7C3+G"f0;!!?\avʐmxw×"v(|\khLdkutp/G!ֿn^dEWtWMwᵘ-&5Q=i˖\ǻV-X
+HߩFnߡ<~Fo<$YȖzb@.N 4뱾L+]&z9] YUA?9~|Tu(N2! jp*j!Я4@j)V\)g&V̢Ow6cg%ktl$wV0l:*uw֩E#t1~+J[x kG&0w4 @B2G)ASepb*ݜ/l3e!́IUYCTD_THVb8"Ƣ wz;=ҫ?{4#
+E \8kQ$qk<6so |eP*#ogS&P
+xӲ[ޑP(x\_ؕ3>"Pdq{7 m>JO<Y<M(wڄ
+ĢWcBs|4V܃\-97qr+3+FxkU+ h%1aeԎRU~F,ȫCS*ύj`KgP>]+x|gk8GJ_)~[>Ni>?eu]8D
+Q^CI
+@ډ
+tk7bpȥPk]`˫ũ٪MbHr%'+'rhHL''&h'2|LS Ѣi(ESkrfx'IYɓ rB5̆HprBb\Z}ѷT5Wř J)Rcwت̈qo' GJ-w,VIPʼn88
+@ٖX7gBƂ` U-&mDfLkH,G™ ("v8'w;6̹0dd 9jF0l51UuU_Z71x:wY C
+ڍI PMd򅞺@L.yPnI \֭ Y-Z-L])s{j3W1$Y v<
+ETCf#xcO;2QIܵ!Vp ڼDVBf$Uؖ8\C dyX9]6 b?fL%
+fɹJbxEa$ 1
+l'!~M-!L N0$}T:#,-aVԾXHƍ\pgGu0ઉ(56,اh21>HNRKWȶ$d7SюNmJ-Kf*((13lt"DzEQ3κ,}u/Cjl Q0ZMf]ٰJwl$Dz>-n-I猙XXMW1PhDއ_Ͼw?1Rh:p޿<ݬndH$5A~CYAtP^W7f*@*X )GZRpͨA ^cf3E:D#}{olᑻM:*}HFDl7VRj}5*ƝZh_R|W ̌,eG2!T._- BBkh|MS96H,]pg-!FȱG8#)ʪ*~5B;C5S B=Sv<TkV |1KŇ5j
+s:Ͼ7F1j֢Ԋ"
+FbuS%4S:Sz̨clJt-0o̬;ؘrz>`hNsҀ!]/<lnqX*%Ylj l9f\&<m稑u(X-=L8 #cHFgDƨ}7DEFLrZg2:UEUL4J(ˢgwRb囃D.1QY ë\NN ӊ̉<\(V$J}9kbju3${SՏ5 &x[bЗxj4u3'"``xph\;!& $ e:S3#Nެ Xl\
+c(hȑLY-5*
+\\~}3 À({"?=& M6WL#m@0V1ݲV/# i 1UkpoU3KY{ 6P,.KG1uO P)(/Hw;0ّtW~Qڙ`VS֘ޠk\'dB*q-0Ƿg@8zd
+]{ u1W79 $k~C4q(F3~SrD} 7#1LXeh*UڛUڑdp
+*LIX-nQmAZ+ PoB~;8*pEF<^.*BbG0
+@N0w+ca{</FX{ ^zUg A#_BJ&2i=`ƿ(ۍ<2I$=BWDKQIFCE
+ށaN>t8H/Jb໪֠"@`k! R!PMj< XI |hǡFzu{D cpazH t1wi'YUQй1Vd! 7jw͐xDElW40;#刌KWڲV
+2%M/ S .< A8 X]AO|#KwM6?ȖaCd"{2sԯh+3;<"J&fQњZz/V$GC5.vE<
+!=e6I cX
+_JZ CrŜu#A!, ccGk$kZ^ӄ\ڼ
+h/dM&ܖcTDgRtYW$Gt>'w^2ِ:p %KJRV_W@I% +.
+@ЃgraI0}]Ot X UMS B
+)Q_c@`܄z `#
+ANX$D;,XJ#Xw(V%yfjsmxxخxeHW >nx3uךGnJ!@oKyXR H,Ƅ͇?jq%@ǚm@Bkg%uIH$aR=("@r8$A$Xe0;=[Qp?ib
+S|L"S3߹u}E {4%]\"spswa _F?7KhuUiy@+c=m- !$&bS`P\?Qh޳+SB[?E!aCIWk?fZ˩WhctmI!`67 âE(*& MD@#>\ǽ6vPp Կ*d[HUof'354AzڅʳCRI(cO~^=8Uߙ ˽h?H
+DcblʬJjߕxo{Za
+*-Э<%,,b1!CAVqqM؈N " A?-FRڢ#"Yv$UI(Q%627<@kSkDTmB5U8i1LU!<
+3aUa$t6(Tu,ݴ?+D2fhy'\L狔 da5FQ8;U-owaM݋;?Z%ZIlaa6s Ӣfj) Mu=C@Y ,BG-2*6U:*vTv"ap/+yb&Rڽ48&u&cs [#3A}E2]p6%ٛDR
+[[zK>ZȁOCs`N @[Ŭ Y{pD5ؑ$vf4
+m$)
+f9?+ 24FdqMQ%` ")DzAHe#d4Rsvr;5,MՈ,V❫1<YQ #ϡȁ&D/A(DFIv҇<x{>ƫ-l6
+ LvW9+O.Ýn<M bNgbAM*2ħ ?LyU%E+*Y *ndL0ty[[\x'+Q\e;IPX$++A(qST ⷂFB
+*Ϧ(+
+$!u=W+Z
+ʚ¤jEys\jRbpE5ݜ9_Rd_h}<2O9L|-kXm
+ & EQȆ- nP9
+$EJX!5#E>9{vUV/ %pZZxy-Yi#+lX*D&Jvid&0*©gߗ-X YRq'ZKb)Fd]8-VZ$aDcK!jyqՠ!uo0E~]U#.Hr|s@mmE2aѩ5r?HTWI8j8@LJ3
+aH&,_WfN=: '%f'f!R`s*HbX"T)?Ȣl%+@ؒ@(o^ZQ% $ $5K݋Ɛ4e"
+hև 2hݞK`$% 4r}GHqqʲBh fS,6OC‹.%3l;d͈*h{b3ݖb41v* {o6QMz
+
+-d~Nl 5#_ mj,cI$% AEY5JyW-& %Gv4q q%rLaAv2I@
+-%XFdf'2DFf%/4{\B79f;;u&U/Wc!Y9R28JevgI g Fbm4!bF FI؏q
+rlZ-߫plXYdd-l'˚ EVo1J&늛lؕ'vǖ%1t:ɒ7\RtJb[Q. V_0V?ƚ8Rڙr\WE 1VDΞd19nM9F*7P1N/Aev!
+g5> Ld&$•:µު"NV@ԉ,DӺb,ۂ5L2. B9*8"Kؐsf 'sH .'&h&_-VzBA *‡R0$j\L2yK-
+YdGGzRp[ "r݊`DR)ͳ(ͱj_`9)['\PGayѮm*(j3H ne;?'1bXo¤!UHUƼIZXa<6Hu<]Ll jD?ϖFJ %2aH  { mST"u3
+` /4 [y:n;%uYw5u.|5"Gw2d]gRP@ܦ^mE(Ԑml @F2ǽZm$80C!^`x7vQ,no"efy_WZ6V'lgfJZ֬.*fHe޴'e WI}(F=V`F0}Wt栳)VD&1 x`OjK[]\U D0Nj мkDXGh⢿y$26zTtNP`6E1aE
+JS4_$
+WD'lEPYѐ9#XF 5#ŹodNL0@Xdv4n~2ɻ ʔ˂4) 0Zd҂m(r/2D:)%TaTx_Zx )ʙC+,E
+
+ 5)QK[lD }9Z6^C}]I^fQRd1%@,腻^H6-=v[XTB2nE Yz]M]v2umźO>b1L ra4(*bۑDǓ:`\{Lh+NԐ`0<WH>E[ULe0pKuD$l;X~lK"yXT/(U|AiA4j(Ɛ6Xh5slūhKu.&Z&
+C-3k0Ħ= N"kpSlٚ
+lU)oYw~PfηlEʴhT@۔MmM
+$j.IF7`\7I&kYt_^Ŵlho.F5=qfqi$M8qr$ΖfOy> eWZ:#~J܅&ɈmVQˆ}G  Ec 5]61 d}V,WHF81
+UvD'"aٙ;9!|.]sd9,z2n f!>^j"S+۫e+h Kk RcW…1C %:sk@JD*X GLh S۔r0NoF$T^&+F{xo)g |G}{<?2߸@b9dE?&BidA6LœF6j\mFPXw8هdsOY,ڹZ]"?_ GYlctGȀ3ka*BK;x$lRe[1J.ˏ6# 2%2RDe'Vg,`=Fs Q)s(DsAްQ \L]ʯZh/ 'ܚlW yȖŰvGvva9| ca2Sh\t[To2քDd+d=O
+QTw+w1Xr9%4<(lEe
+%pX)ʤղXiLҙCXk#4G%F,na!2;Wߍ:] o6 7H3L '_yd;e!<֓Z㋒YOA}xbN;M{Θ
+U<u Qo]KkNϹ( Ub@.؁E30hjn1 6Cxޭ8 C|ϐUY̺`3
+Ђ-auS'ަCD
+"bHBu)r%6]QUM% zj}yKIAVD[dw@D7/s'A|PDË7N8hߙmLଣzܐ1`aA\͠~aG@d)2X1XxI3+;8eʰh833_)AqpD4IȀ8NeVaNfsLmKr=@U] ôySj-VI>n5GoqURu\7#zV-joO}a"]^=D
+֤\D΁9 wpy7y0B@9 ;ꪩCa \M޶!yӊۻX>7Li)Vq"kVVQfbJf`\azEV;B$XbA>3'!
+E3I=r
+C\A7bJ"$(
+ YG4$ADVdN|b,)5W#OE0ܔ)N ‡tmpNEFi": Rx%D\!JeG@%]4$QŪvmX7 i=I0@N/kp}\.Դx_RgC+2Vu'DnĐ -1
+ZFzRhUnosVQH/XӔ=6H'aL7J
+/+MʲGj~I-uAe݉|~d
+/1A@3a[
+NqN迕~20J >CG'<bKc0#|i㻙w4 0N&Jh|I` wFDacR x
+x+le
+Mۗq "
+;JVn@]T $Mk%,;,'^]JNí7)8ݟH|kc{@%h]u;<!Ey-ӹhm $s;iWj!6vp74DZ$^W0$ԟ0t4eh80zK&7}"؞Ue4Mj%Hrt~>&8
+jq@ƫ],]i{NĖiG(PK S3K{OmZxk ڟwq]Tn0YXy-X{&eӂ,$qև,8)/30S2tcl[DPն#iVVodDEMWs,2b8 FGӂNr"(T&Njbh*bJc'q޹beޯdzbNގE0 RY*O
+x1jTQN;#]mc<.A` OZX_:UH.B׃ >l5TUIGA`hlL1qb܏BWE <=Qy,(oKb4Ll,Z
+Sn(Mڬe
+5 t܄0웖AQCgƇT "]cW油,jĤ={& q L!+'#6aي:XʊZN*O -]Nsѐ֗ܶL1Xj
+a"¨ GZ  .,p4]PM{S$je7h1+K{;"wCb1.T d*A69<n&W p7pF`+ D
+L ĴY6X`RYW>CXXW `Ceŵ o>ژx+tpۓG{~&&z`( \я&TN_CF) ~+ض,>g<x&G7`_"e2ǚAmp8x*ȅ
+#V[bc pQ
+`PH4FH2;@LS8c{'+Zbt|1Ai@3ܢ0-
+,k<7B:KvG)T̯ΓoѐqNf;۔ZPxbM @o1(eȥ= ^BAVb~(.\&)`OĒV 8-2upM[cJر npC.0_SM+ #L8ZM(FmnP+v"$Րa"@s K=)Q
+[H-+<fbP
+"#r !ld5MgҩtUT\0vo KʊrN鞬J`P`m~O*AOKf:G.CӃ4cԑ@<[+W
+rOE1\| w\>om439ƀbXըУk&3Z+VKXNj'bQKt)N@M+N8}͡Zc$
+ 31+Q t<ԭ2n - J=n02>  qWR"ů?:‡!F-,aGo q$LgoI.{t9]|˯_<=㓯O_>ҠoBBx]8PiD ]>'/N~O^|{ϧ$p8}=7DO3-;Ń?k^( .Kbj#w;Dz}zOm?5+gyǰ29[%haQۼя=pyJ
+N3 h)OB>9ړY' ?O.qd<
+tPoG}|@
+'sk+wևg{x
+'pK[þҾڦ'~xx'.9n]T[^}g}Ml?'j Җ?WxF0x_V#-<m3B;i<n+Vh|mΐi]Oc")ϣ|ݲh6x`~ʈ?kpQł?]_5PACA85uF1*bC%T"B"2(FQ&H"
+ne&`I@e"Qב`5"02[cF{.2%YS$^W!6U9}XvJYd`C(s,.~\" ‡XG0!*q+C,CX-EƑ4~+f0٧ k$RDu…ć\`@~Kxc6reI> endstream endobj 418 0 obj <</Length 45739>>stream
+s1[ "1ZYEsoe9uvrۯ!+ڌnFki<[ԝF{&[(Sd*=]ʃG'R*GbMgWoé 2X|'FEQTuLieB#IZ -c/ЁuX9_lMcl AY"VDK6iVa?[bgfj939Fͺ5 !m|sȫڒ}
+f|˰Jx_B|p]Qc .rTj"֯9"&VcIzP9,=4u-_XlI S59hJƞIpx2Z&H2VPy<F!z%dzgE3y!Yҷҗz&>u[{6LPeaߘ1'- 0bIKsxiI44E^E͌vNf{Wv#, 3 >otYCSW-2ZRǿ@]QT67,xULNE VcAD |d_C4? Ma@w-ֱ2ɴKBaQ(bφ,;YnkY2~d<g.w/UPojjn c,2T5"Q4.!b^h31܂<yĿ ;5[SR1&I&tg-w!ϹbK&zNf4bA(Rdj.ߊWEg&T?/1>ԭbgMul”a6<,a\tt}& B_vٲ?CC8[n.Lk={}GxjᰙU<xj֟vtD$YWӞI'ek~]ja7S
+ڳA]Y7ku/T8왩q!ߏY4NYhWh>Იˎ'!|\')OjVL;g>@(ǛzO>W3ylM݊Vg[#""bUB]F`mކravM. #{N A(|\(!7ņh:T8z!!c|JmRޕ]MD748qܷ_u|DA8ٛv|~l](L{rV2+|,yjH\m.UeQWzOp! d΅"5MJ\x]@ŜT>3oogYz]!WƝ$<д¬R? js.Ld^1-(zP
+v)3#>` l:%e^xOpuv lE)Eev>\}q
+fcg.ǕבD{kg2\,5n>Wh|3ʊ"K]MaNqdqbP$Lay55-v<P-ŵ2-9W# 5jԃ‘Q.>$CV*\_]][S\(zפf?PV7؈@oN?uP$#*4,vI`Z=[#b? x]T94Q
+Es]dwx" S@PiJĚt*bOAuPshJqV\sɘIɚ[,P4F\IY}G?CfgOר|7YdT|%nI딯1u ќمb&#lV9\+7T6"a}OI
+(:@7Z&Y$DIM'lPSh-}9HI.r͕~h~M|jOu#f9 >EOSՍyPDFq6|*<cL٧wlj
+קlfѴp_yRX:BÎŵN)} {;>wy%sfܴjRMx5^uٰo,raQmqϵY(IgQg
+kzw`Kڔkۧh퍬
+
+/}B'<c0*Y+ !#ӌ+MuHRl%u؊ezn+΢8\苯x|^xjZϖrzi#c6FqW!hRf0~[#D,vER҂uh]Xmԕӛ4T1"ߊj]96FiF.t'^T<x;RvZؙ2}?xf8fdŲqg<ct|Ll1g>UnVa2('B1dTc-bٳ?2_b!N|_MK!ش`;JaI
+czEcLfPc>3yHYniyI$\=κp0 OXǿlK{Sƚ]eO57X`i9$i/N{)t럧?ޯpWX.a+\Vbr l%sJ,Xn[ݎXnr[-Xa+Vq"J l%[`+\Vb9йR.`+\VbrV(gX.`+\Vbl% J,Vbr[:Vbr l% J,o|[-/`+1_V\ј~a+1_V\m/`+1_Vb2\ZH\[%l% Jo\簕}1_Vb|[J/`+X,Jةm LJ/`+1[l%[`+rV|[-Xa+\Vbl% J,Vbr[J,X.`+
+[ ֧Kw6>z5ЙN_K.u;cKKz<z.:x.<x釛!/UqKҧD^>Nӏy1w/}3hm8f=~tυ͏3/= /CT/3/י(عᙗ y!it\zB=Kc^:_Kgt~K? ,<ҧ!v/0OS^4hk¼th /l.Ã)^gK?|Ø /c|9G/ݽ~ ^ق~X< ^Xzg^8v{ZOKns/0ӻ{Ӭϖrlυ^ˆ`D]lhpb# [;?HA&Ng _{2,S/dй%^pӉ!^!i=W"uJz1_S/ޗ* O} O}2ף{@<uD{r}vy:L=b,!M'@n5Qhdy}ej_ԋaIQSPw>B)i8;ڤQ/Q, G~! GX$LpԋUBHcKqwQِ:ѭRUcubnndC'?}^G ;U|~zI7WÇxҪt]\SA50{
+]ti|dsC{ҫz^,(=u
+
+gOѕ$T-tRմ%O=<v .JT`vLL`KDa2o&5^tH_vL;mEhF #̌K*C 3/ͨ]Ah!NA!C<k5nz l鶊m+Πo Y2n_Fv3Q88BH"O)w8 >]l_-e82 #f;eL %F<* g P%^ʆ1ìә4ő})cV}(K}i?,d<,:H D} `'Ƞ/)N2 ݸ σ1MB0`TۭwrG}\ lv#g?8E.2=M]4pCY^uw<&N\,*ùvϑLՒޯx2=Z IB.lzh3w3yd#JgZ1ڪV\+%S6bl=1
+^D$yqph p6yPD֑l-]l]κÉz͗&;ZWToHR]#n2L@<2̣b6ABk6aD}&#jl385n;k0}&OΫ:Ke/KM.!-A%>OLQOhÂJN{\P*7vL;1B-!ndmMn/HcD Y ^Pa0}1!|ַ Y(ɋcK?H<VhI6dɱK 1CE<;ج; <Baz~&!+G$3g(O~<a2DX45ﲻ@4{ydU麰2\/ViW;USXX# ^&q Bŵ2# ytEH+(dn?Ӯ܂~/&l:O?`a+2_>aXoP܍v3aƿO<<ozi='yɷEX߸ԥy2ydOW4>?VW$A5ӟfRttۯukmfs_bgQQ/2v޺cOhWRy|/,{?.c_}_eߧ-X'CC3un3qagsZOǕv\cqټ$eZI5v\ݰ 5tXBӐ8ӴqAeuR8nQ9Nɂx?)Cӈ.cD[ߦX?"o_ceXv̋geu|LկSfEV80ƴucaXl7||io/MןBLYvŪ;ʋU{X7-v\3p~zJ<_<8.uX{TP~,bYVާI.w?lЇ9W=_+Wߜ&
+)^=__]?7e? O޼~y˫'7^᧯=o>=|ys'/_?{zZWg?{ps/_|f{O|z~߶ /y7{_/_ճo}PmO|1Ã
+_~yzϟG~ϟxW_zzo񓛛gx?>+ gxͣ/K?==~b|\ʟǛ'oO'nk!\ޱ-_ئ~'7:=<}yų]͟['7/\?~W'p鳛]#b K,ܦ%ftGZ#ۢ:_f[K۟g۔tgѫm'\/n}v[>0|??ǼeUl2K2'uqm#SO-dž;yl:?x{K-'lC㡁|XժAwv6mnSY{9.NœOO鳓wg'Xh8oyI.8eU^΁S v PS6-}Ӆ?mٙ No?j|/<~曛>/O>ŧytgϿ]Nxo?&Ron~d{?<8}o}C72L
+cW|QmYܳg/N@Ogm/7O=~GO^?oOpWv}7*{m =/8q Eyq-Ɵ~zpdO ??{_
+>wgXCW|uCGam~Jykuk>y n}rk.0>5 _l3uO{?}]?ͳ}O|'</5WN?ܲH|go-u=M׿^ӧM<b_k>[^W2<?~=}g9wC|\_}wNۻ*MQ(6Lju+uY,EÛֻz\{Z$0w| Z/YȬmJ鹞oӕ@`Wlob{W[I^q=즒iVV4Pڽ^zwk(ABr昦"Hn7ҬD3e۽bЊ+wSl?B
+oSkaYWkjCvUa-KϳKj ¥%:'n޽PJoWz.Pz)Y9@AQCH!+{^WzcPzq\]iZkܻ+uWlJMkH K8o5fz}jނKy{w>ֻ/txWsw܊~[Ns/淧iֽ
+^FoK 6c&ٽ[zz2{>xgҠGlˁm6m2pDڽZjcazgU'}ho# sܿ)yڇk
+p޿>| GKMk}ݖ𣶄6F9`?4 ^yI#/B]3WO޼|WkO5M;7\O=7{0z'@ B1%P?k?\ &ɞ>,H3iH"m-Xc  /ߤJ3*pVU"'Hr
+A κ[E) 4qcFhEږ-e:‘9}0;aA&>dg]'pmlflr[]궿ꫳ?p4+ﯜf΀{^} 1[nbУIxnMmo<k@%c1'
+L/%{ݯW-gdD~Ϣ(I ݧ8IB? Z7x9_OnԆIJ==nb
+ zICh/0$OFH)䠞~rϾ.@g>HT܇AvG0BV%iۀ ͍!p!Tv' hH
+
+Q5NoKsxht{$C'!t?* #@m 0
+@ D@P` ~R@B^{]
+秊@N?*ȉK/?
+S$FE^4eXp^ x1dϩ% 9ز)IPxMnO!|#F^a
+ӏBh r:8Tb@K'
+R+A6_G~&
+O#^&u1@3AG
+ 5RpX*+~+gPg %4?+ h8Ĩ#ndž<,3AH.7 a x"S|WnH
+^cX npسSF ~
+i=;}_j]Gޤle2p^Yê]-m<6dv()zyd;*Rj=;y>f?'CJIcè,R)BaKys+#G%68I=g{-On݅%suy~e=MҘK!<Q@w`~
+Rgow"0MW |Aͱf@ӳh/)uh?#ʥ?uQ1\FRq~ZUBPRǜJwǁ4,D&
+aH^Ylٿ_w7l^H|Bu~?F}coTq/atsa ɹ]. ~ԑ7&9)mE{[X'-`Vo
+
+
+ȨtRQ{f,JV4 r5&7BU]
+i{ ,Δ <
+J;P~c0/yVB%"4@>>]#q
+;n8) PT6B
+k/2c 3[v7 `67氿xv_Mb7j$_gŬ/tAiSOIA DG #Q}DP<LK&'M|!PZb"Ip𶸕beGִXoL%6Sk'l|ND}^:6hSK1v>.Vh ȩEy$vX<0=c@:ivf
+̀l+9RO3|<
+M*xd;(Zm0% ZN-5VBM}:[.fgTh ( `wpMFyA˪V31
+<פJ,]O1xȦ}vcamlzq
+`ƁVh<-mvxd}v32h|cFʾH.⋧89ݧgBFwKzH?;kKM3];aJ4ׇpcf>lafRS_/I)3yzwSl=8bqsǐS3{GɅ:Da)ucíxb5.JXv@S@8!B8Lw-@ )|}_]lr-tx13.ƿ|)X ~sFZ90" (F;%/t bɹvqXI{Ks>o!>xCPP3>0|3"Lkre9`d,
+g[0r&̛K.Љc,uc;[6 xrx7$ᔔ
+NJ.0iߚ@}zf % Y6Ԕ~x #n.EbG8r("-~™Z >79RdSb'JQ65ZvTA.#lz_>'McTч3[MfGq>|rsÀaa߽"[nFCm~vc!U Y`&?ءxUsQ@:=F#{1EmYؚzo5 l&X1Gx+cqɬ=pi sb-&] <LDXݘ%*\xދ7j$d&aI7 xf{vltS?P<eF:j6O&g,JSiኯRY}&twg#=c8V\f%nN.8?o Z@ 3eH-ER8KQ-u'1Z$T)"J7d>E)[;@7$t2lHⓃoQ؛  v
+R  #`G,DjHWbbCNLN>Eø;k ;Qq5 E4=E,X̋enF(pcV0{ IN(+%bpc2&rgYu}G!=~dLU0tl\Gurc$V)991U5*fY$aT1L&!9;yoRwSR/y'WcGE!%*S%,&*NHdXᬼ C:cj
+ M׉!bG
+\?f4? jn*8@> '
+nudܮ/]I${laxL4eYO8cAŃ|q
+/D5A2€zaJ@xt Ͽv|ܮnyׯL'zs>v89@B @-];
+'c{==~t怞ΦI(@Bp-bkͫ@afVw,<#.%z-YcNl>}màK1FV9KjBX$8)%'pk L[rNF1F=1">?Sw;ZOA3:>N19j}
+QG/[d7E|C0rCsD5iCvS@ܛ,}
+zZY}{˥mG̓e5%aq:bm2~,<&SV
+\ nbG\:`Kl78}?{M XodԬE ݝ)Wq3=1g\!'^2®p<
+1vVYiȸO;ŷn搨=x_Cp
+|N.xxCA`}lFigwgKtH. N>gP@ h)B 4J< .5VvPܧ\>պC/l. jI_ܟ0͈׳]w{ V%Sb_}Ɠq>l̮нD&sJw$3>o7׳`bjd{FKͼ}(yJ>3H:l7PI$M &gx(sJX1J1^xz,jŜ![f4aޓK0$> )g
+kHlr-* ܺ/&}c>YuwdPl.2/܃#;:ְs`~Bg"DS'Jb$A-ݏң%㒮Yـ'G)/p).̔߷lb2tB^
+Ж qjl
+M{ryEq\7npڐZ7$Q(=hKySca]~c4d4NZ#5 }\XvgbOG1=xblsHqhP^d'm=\;KI%!;Jm{(O6ʚ tp7'IȚˁX<YW'JyU p3wlg{} ojj2\b,"ff0r84kAYE
+֋xYirg
+Wq^NM6-{|N8)qWRCGacE؟ve9"ID[L|uFz_CCvj{;ֽ)^aF5nG0 n=>n
+ȋX \$5 XY {~4}V#pҲ7DV4:C<Jr@.4ɵXob19ʊz<W$-Ms4 uvUDjIt o?6%aJ~%:=pE\S@a}#PmOYָm8Kg"s4 pܑOFjRo3o:]AINK`D"9'3H4 Զ%K=k0Ff6 E"I:Nץ;B)"zߗ
+rwT|}Dx~isNJ,Nܬ3oNS눥F_<Z$Q>
+
+^T>J#鿨+9S|A<LU)%Ά {'еzkR=ބ<l`-̦, y{9=,L80TF,e 9CI> 0Z1:VL87oƸb,S{ ۶q?Ce+_j0E_~a= +3`h1Lx 4~m&<nd͡X?zGYk}X(¯a5Iwkk|!֩ <
+Z3Av/}!Œ=f"
+c<zްp8E-
+t[}ޛ~6h=4ƄG26]܂e󉭫9lb{7``$+Kh1ئOg7ww^ QYޘ P ЪkYC|4 C3^ C𰨯 Vnba0X0Xp4qjԂeo}dFl6tHPoಿ3Fcc٘/V5֭͏1ڭWfc0k4qc6RSΒ ջJMLηԄK&?41ާ)V`TTm8~Ӄk5=mL4`s3>Dof}<Xf⾿2I|0R͍'nO<{ͼlYQ,7_jċ%>Kn̖*Y*OiqE-g>˄XVrpVˮYzXpך,}B1ֺ;k{fXӊuLweг;(f'![#e'[hE[sհغ6*nʶEmd`&١ݛrr9f{y^Gbm_c%,X쟋aN:ˋA?wyܑLnY5,]|د{/N}$37 w|wvivfG%q 3&]dp/.;sU;Z\w*Zma՜g]ZK߻{ygLT<eħSjڞV9bKyϢZx E*u?< MojhOyo^ ~gmlN=ŋoMm|P
+%[Lv/mاDWu$DjMi%H2juufARoɑ l e+ߩE1ũ$3ݧh$`;Na؎iQ9wL;`R)[ t9Ñ{& уmA2K>jS#vFжT`$K/ gcIdK5&iimzfaY+uPրu u&4kF7氩X}\6N[wf𾏷#SHm:,D=9~~:h1Ga2rm,KB\܏mf˝۝wMvϺwM{9o<͌G&TeȌ:D{'>i$a,mm-3&7ۡƜ;T,Rr0Jt_Dz^id, :.Ne)gAua!{4wr={5+O}ǙR*mi&_:YvGe*|0m~ 1,6Jˮ}~k@$
+Ԋ}Sa[s
+ P ZVmu }<l숗ThcTѲbg}E֢Iv
+?p\m?qP$UTd[cS
+Okeko3_C/}xtmXhtˏͤ3hJ'ǦdE@K2G-6ƺXjţkW_T{="7F}vbg=l-Fymn31/\&J~M>4=iz megFsg{"O#;6{ S'-<4$ĝ{-*˸pF5j\O@!p1'
+L/ #K
+vQxvR_T
+Θ=k Yq9{
+~"}zOAk1~zwbS}(<BGsgP۞xĽю c){ݷ#wйwW}Q *=O|Mݘ }1^bv`>dϾVf}щh":$BΔ
+".`iEYmx6Yk @yó):JD"k"ɦ&yX!8y=
+~9"=J2}H}:5Ho&5SAi=e}e5";"|9^UGt,߫"5d'Ò!1׬Xiy뽥4'-AHoJ;imSɛγ2pCƼ35w
+rEczNR
+'0o9wDɭP4)*! ִ+W nZ"@xKs{5 ?-Ti>ԉeKϿǧ'޴Em3% (AYI'RB]ͧAt;} -Cͧe~:ǧ
+ƪa8k[tld>:gs:& =sN˥ӶyŴvӡ@1淀IǾk>dby66R=|Z$}'mAͧDej>-wBb 4COy<ucŠf}w?My"YoszG`)|d}IݼO7|89Փ\O2=FM0La".Z<,-Q&FoHk9sdXHY%0ґo%8
+B_in!CjUVF(yHA<#R0X_5|H X#ҲU))Hܗ>ESUУO<#ROr%-i[z-`-Om IIJ-\,b{gƐ'|u6FhC bLzcr/i:&},c*kro p')633KN:S]~,С=8p~;%#Y3nxo6?P (ISs蔴KnEZpIMD$,]":w Ug4wc>2:gk$\dXgGVԍqv_%YGYdNr)Jw<mʓgx7ĒyUzn.n[J (vYF@ zirWiGiqcj[kV|:&bhp]YD\¯&v$TJj$bk 5XZapIB[qJn{Jkɵ!&k0QAr$:@!KVy;:`+Y^ #^E
+I bg|U1A
+ݎ52~Qȵ%r{yW
+@o=>#WPz\G.B{"5l/jٟRz_:G,S\3AQ ֕S\F,q7(3'xE>U% }s2%͹"C,=xrJ M2x_&)}  1JRvx/7|h@h JaS5>7sYe.vdS| K%zSi\AJ9N&:Y3 \RЎP7@=
+bW’| vYKG'ڗ/d7%Ѝّ(Gw!I0uZ,]CR_*tM0h:$@<OPvUQK
+u&\k pMM]=5I}|9JUY\-]:TQ|~Ko]tzf)0ϫ{eS
+bS Gk a
+:Y7jWН|oНL\YY||.6$0Yj޶xJ f]R/ov諗*b/oM+_LKZncd/ܰe:2q׊6ަ`[(5s7>T9{||Ot]Ҩ|:%98t隌b+qouTpT7\6J긍vM dfb7eytM;>= іAd0$fU
+&߂E KtV?{UЋfV;P^Ubj*:/Xjk٢?v:874 xQuVrnfSRց]tt.큿op(KZiiwO[SVj%^.QNT:RM9aN~Bt{\ЪLeO1yX&G%dot+6֫TreOra8 4
+Ϝ\7}4)L{Yp8MKkOCg5]9,X|v`XJAD2fT7tHzRJ~"3OTzWB(?Q
+;ZCDԫ7<PQ
+~?'JTp_[)v>v"F) "T ©dR8s1
+{U/R aލ^_WFQG>Jk$K8N\\.nVu5Q!;bR
+9w,4-7*J snGT~_xUaGUrlynlj"H ){>6KNi!+WG>r.֎*Ze]}׎7eZXPsc[nsōEFTUeDO]ԥͩypO$vʙ*:Kn* ֽEB5$:}}.;O<]DNs|j]lD.5Qϗ}vWН~kyk
+CM 3DK
+Ln(
+kP6Vϝ
+EH@o(3$eS{=q +NwPĵPT'_I*~C𠦽D{?^uQxܮ+)VA& U}Qp
+ݩ2 [:
+te}ÝP_u抯[} w*1 Ao.)DMyߟgn% w{w]ÝSa kG7G+z]X ]vsn8:t_+UV>?rιBp7OΈp~wKJ v`WvfߡYfk ̽<djΉͱ?T*R*mz,lSk&躼Aηbңh pУ#o}ce|%bc6w
+1B_'Ի.Q9[gTsir9|<SDxwbv0D10e'8Z+w~_nI{5)E>iWS ܾ tc*Cqg SϽϸB>팫`#^zyo+fZv2ɯ,_K.|Zۡ};6eO<Djܱ99ɿTUip·׳f&ǎSc^! |:X;;Xm=lEUhxK xaZѣioބGЊr,
+Q;"ngt~P;V?wեеqskcgiҽozheнn~?\a= ߧO|%jFr9f_W4 m>NglOtuÉm THѠ-f7N17CM=G[:V 5sjm}nf!B,2I+ݷVu,P [кyrSi=vhr)eӧXk5UJҊ>.L[:ăU e}Z>1sca*^Mޙ2R=8zyL7q+oru7Ѫ3W u-=d={/WdoS6]qϋZ$eΏE7Xow?m|S[a]qLEj{Svt_GV~Ml xۃ#~? Y>e~i3V@9Ъ;r֍;Gmjmxa{uqSuVؽƩ Y[t&kdUFXϳ<72Qb=Hb GDžӼC!!O{t: .8$<)~
+Cg
+7f- ^O+e{T~_ z_]Yl{otqJC/ڭ~ ~Q ~úr{Jo݃{jvhuw u{3E/&~ xUÌ|ޓ
+knFع5+>\8<?ʕKK9vzT&z{ըl~3܉v:(㍷K͹= OZ+3e|To?^`Nڐүg`xǵZ^j|K >b:N4n&[;cGg J}cw;<IM}Lp3I-x;/Qol@vjڡ9ŷjM&7_W@vwn,U-Uփ%xtcyB>G2[~}f,=xxrk#צV-?&/?>*'hcNesڦQy/nwn+NyR~2 DgMѩ_084YI
+Wr4+cosïmwZ.
+8ꪬx#UA㯭U;+~=ȦOc+e. 'qvħC&>}_
+ߒo'v`l s<+yv0x꫏=u$Զ3$vfVkq3WܦW},O-46Vo! 98IZEaMCjkM|=wħsxi9^E}Ksyd&z;tgcbu'"v34kI)g119{RX=n~wjv3~$5̚O-1>0'%ޫՓ7\eg P~v %m'E:lX¯%f4FIY/_[oDBaҁSZ7Rz^xx}ېZ6ĦvhNkw0 ;vwSWm}P M-ZMsk֟纹>S71==mSфtOl^9>[ʫs㫗(;<4NDy„ oa; 5d{}ɸ?/SDwkl:+o  ^¬JD
+r*WI+ghHUb璲Sw.1ɗuc-}Awc>qʓwp/O9R_6MBT>LuڜFQ%v{rO]==N"{?@A.K]~7
+!v8ݏDžd"_K%C:*8,0yzFyѼP,S$D
+-А
+jqˮ@gŪdzw'hI[lR"[_77-36jƧ4+v%NYq>/{&"rṁ9Vř1{nS1rIh%X~II:3'wkh+?o/ɔ1E^~_0կO.
+3TK ajiz#(F{s}gKĄY_W" ?!Ģ.D-dڋNځ EBBf$Yr>'ю!m( 2.?|{1 m8ChQG* ̬ofjo~Ngf*y|RoZ4?Zley;+]+Kۘk By-=ٺō`a}lofqm"2dknJsf9;M~6_O9w¹Ԑ5;5jW?VK㘅:>XW\e};GKwɌ)vOs[vn2ya$OWJn\io X,[w͓Xs$x_]Iyqc:JpÐ|" >iMaڥ;:[&n+o"00o9T!LcS¶p)8׵y\%զ
+>m, $R<ϭ;ί&p;I
+~T*.|fl֯7{|\yƷ}/\؝c=N0Su}
+c)8)tأ/7eX'E&S{a̿&Js E+J/ũD:rɻ2.%#0fl.G3px5JU0%T:JطXX^k22>ޟvOS9*!*0v
+<35`?dV;<x)
+z 8aW[tJyۺ.SEP] G&WKO`7 @Y/Tla.mk4Z(.OwG<^!./뭍{]qm_m:CQ~޹z e,~%zٌqk/,^rW;/2'.1yԟ<Fb={|idGѱֻceYǎGԱӗN:w
+rѱD3~&ʝcgqzp2$az֡X߽qO!zӇ{#MЖgl!|yǗXPY&~Yގ4|z%ua|:Moi=gy:t9ksKĘ\ݰ"<xH|%TOm=b=_hw% BThJqM#DeT0>єc
+`P& qڼ9# ,*)37u|mv%G! AfiM-P@wUv %3!A\ř<XB@A @ـ4]ۅh㪭A`2O0É@<C
+<?
+ta2NA P fuF/o/`<?Te8bhM/Jܐ/JS:% -h݀ij9O
+>qL O
+_Oj0*AAT$ydIR1[aFX@ϑS$`|v+ l8B]:!&ɡ g2$<Oøj2Hďr= Uvl0 OR9HN@wj)8田<l!:w 8wVЁ1lF*rAS|R5°
+
+T  nfbh&5G?<Czps5RςCW0z4Mwt|m{)PP\ iP9\q"%܌! V:0bV "$A+2(ZS.( zjK Ɖst&-nsP{!70%EJSr
+|^Dgv9%Vd>!)3i [
+Z$
+ M5P* Z4aBE* A n<P(rYDM
+|bxv5DHZ$:*rhQS@#WçM=3;HYjM4HJvuBܨP%M<I(ߵK<=ebUdBGY3ߕ g&!(z&0 B]i8 ;9ICІj-,_TXxIApi")$@G)ubdQm\'6_)iòhp=
+#fl\qq=[`Yh"XK.c(vb\Ķ(Jie)%s(Ɓ hI*2RĖh60%S&-ɰ80 i.*vT& >aW p|OD sQ|}Rž`|y[2sD9a&ٓcN^Z Ϡ$?頇{D\ zTL|Uchb[ 
+-nB0`:2y#-OZR5
+}n \Y?^7 |`mkv CU"h_z̀ % <85snɯIOXrcz&,sx[\u W
+Q$9< 2B]aI_xXj`I.WGD7Yʙa/g:%" ]y2|$Q=m-؞|, cd:]` !)1 6OF,®?Ե'7vtCI6`yB(T!݆"$ ٤!N$_ S3mcrӣMCFY!ݱ(so3Pe(h(Ȃ]fxkH<϶De})6¬L>
+ay#|;LA&xh
+‚
+N+
+pՓ<&^`X:0"<Y`Nd{;P6laЊeXKEPm
+B Coµx9F;,((v <0 =Ѓ<yX4^AqINr&EqId I7ЮS?Ƃj㢥~P
+*H9 Z uEAITPhj-øZ0-cϑ|[16-r("CSP_}`suB5H-ơNxb*)b°icR9zAz#TAp$brOze`֝J> 3f8]Ujς6ߩT3N[cZ ` 'ͰS'Y|q#Ao|N2<*b!#rw&b|V`BE֓(6ycQ6CEq~J4*E@S\d2
+#*3S)LN,DSBޤ%4$&-+Q *q4RYZDb9B;jERC^+HSkd4`8GrQ3"QIP!RS˖:Tנ#͇ȋ64̓(s<c-m]KOb!nԓha2c`"y,jVm[2=]se-f6ܣ9hFĵBzk&xB6ߋ`62-]q{gQFJ5Pl[Bы^[Ǔˍx'uF=79ROŽ
+Z/NTC-CهZUd&lęmV9 n ]+i`4Pz0*7h*Fz.l,8ܵ¤[|2}uglɴDr~V_TdftTEag0m*̰b{MQ[@I-Il<c'w!)SC{F B
+uJ!"hD҈ ^! H<<$4a&CQjFqA&!&:MU$W#Exh=4ewqAbCGxhk=$/iTRՇ}*1F)F-EH1Iz ! &H:$ŔVId&N6KPNM:uP 
+ŝMP&i(DS(,/B8IFU9ui/:AK&L:i$U4)Bxh
+IVa-tU=IYEF\Eh!F_q&,:x
+A#]Bh!:4#0eASHo\Qx@+R;Sh..хTWN!"耴CS_X!ɯHǧP`t@ 54 4$:J
+)I">R1"iF ѧSHW$(dq{㖟_G$YkK;7V;sv_{/o_ڭۯ!Iv=? endstream endobj 6 0 obj <</Intent 31 0 R/Name(Black Blackground)/Type/OCG/Usage 32 0 R>> endobj 7 0 obj <</Intent 33 0 R/Name(SemiBold)/Type/OCG/Usage 34 0 R>> endobj 45 0 obj <</Intent 69 0 R/Name(Black Blackground)/Type/OCG/Usage 70 0 R>> endobj 46 0 obj <</Intent 71 0 R/Name(SemiBold)/Type/OCG/Usage 72 0 R>> endobj 83 0 obj <</Intent 107 0 R/Name(Black Blackground)/Type/OCG/Usage 108 0 R>> endobj 84 0 obj <</Intent 109 0 R/Name(SemiBold)/Type/OCG/Usage 110 0 R>> endobj 121 0 obj <</Intent 145 0 R/Name(Black Blackground)/Type/OCG/Usage 146 0 R>> endobj 122 0 obj <</Intent 147 0 R/Name(SemiBold)/Type/OCG/Usage 148 0 R>> endobj 159 0 obj <</Intent 183 0 R/Name(Black Blackground)/Type/OCG/Usage 184 0 R>> endobj 160 0 obj <</Intent 185 0 R/Name(SemiBold)/Type/OCG/Usage 186 0 R>> endobj 197 0 obj <</Intent 221 0 R/Name(Black Blackground)/Type/OCG/Usage 222 0 R>> endobj 198 0 obj <</Intent 223 0 R/Name(SemiBold)/Type/OCG/Usage 224 0 R>> endobj 235 0 obj <</Intent 259 0 R/Name(Black Blackground)/Type/OCG/Usage 260 0 R>> endobj 236 0 obj <</Intent 261 0 R/Name(SemiBold)/Type/OCG/Usage 262 0 R>> endobj 273 0 obj <</Intent 297 0 R/Name(Black Blackground)/Type/OCG/Usage 298 0 R>> endobj 274 0 obj <</Intent 299 0 R/Name(SemiBold)/Type/OCG/Usage 300 0 R>> endobj 311 0 obj <</Intent 335 0 R/Name(Black Blackground)/Type/OCG/Usage 336 0 R>> endobj 312 0 obj <</Intent 337 0 R/Name(SemiBold)/Type/OCG/Usage 338 0 R>> endobj 349 0 obj <</Intent 373 0 R/Name(Black Blackground)/Type/OCG/Usage 374 0 R>> endobj 350 0 obj <</Intent 375 0 R/Name(SemiBold)/Type/OCG/Usage 376 0 R>> endobj 375 0 obj [/View/Design] endobj 376 0 obj <</CreatorInfo<</Creator(Adobe Illustrator 15.1)/Subtype/Artwork>>>> endobj 373 0 obj [/View/Design] endobj 374 0 obj <</CreatorInfo<</Creator(Adobe Illustrator 15.1)/Subtype/Artwork>>>> endobj 337 0 obj [/View/Design] endobj 338 0 obj <</CreatorInfo<</Creator(Adobe Illustrator 15.1)/Subtype/Artwork>>>> endobj 335 0 obj [/View/Design] endobj 336 0 obj <</CreatorInfo<</Creator(Adobe Illustrator 15.1)/Subtype/Artwork>>>> endobj 299 0 obj [/View/Design] endobj 300 0 obj <</CreatorInfo<</Creator(Adobe Illustrator 15.1)/Subtype/Artwork>>>> endobj 297 0 obj [/View/Design] endobj 298 0 obj <</CreatorInfo<</Creator(Adobe Illustrator 15.1)/Subtype/Artwork>>>> endobj 261 0 obj [/View/Design] endobj 262 0 obj <</CreatorInfo<</Creator(Adobe Illustrator 15.1)/Subtype/Artwork>>>> endobj 259 0 obj [/View/Design] endobj 260 0 obj <</CreatorInfo<</Creator(Adobe Illustrator 15.1)/Subtype/Artwork>>>> endobj 223 0 obj [/View/Design] endobj 224 0 obj <</CreatorInfo<</Creator(Adobe Illustrator 15.1)/Subtype/Artwork>>>> endobj 221 0 obj [/View/Design] endobj 222 0 obj <</CreatorInfo<</Creator(Adobe Illustrator 15.1)/Subtype/Artwork>>>> endobj 185 0 obj [/View/Design] endobj 186 0 obj <</CreatorInfo<</Creator(Adobe Illustrator 15.0)/Subtype/Artwork>>>> endobj 183 0 obj [/View/Design] endobj 184 0 obj <</CreatorInfo<</Creator(Adobe Illustrator 15.0)/Subtype/Artwork>>>> endobj 147 0 obj [/View/Design] endobj 148 0 obj <</CreatorInfo<</Creator(Adobe Illustrator 15.0)/Subtype/Artwork>>>> endobj 145 0 obj [/View/Design] endobj 146 0 obj <</CreatorInfo<</Creator(Adobe Illustrator 15.0)/Subtype/Artwork>>>> endobj 109 0 obj [/View/Design] endobj 110 0 obj <</CreatorInfo<</Creator(Adobe Illustrator 15.0)/Subtype/Artwork>>>> endobj 107 0 obj [/View/Design] endobj 108 0 obj <</CreatorInfo<</Creator(Adobe Illustrator 15.0)/Subtype/Artwork>>>> endobj 71 0 obj [/View/Design] endobj 72 0 obj <</CreatorInfo<</Creator(Adobe Illustrator 15.0)/Subtype/Artwork>>>> endobj 69 0 obj [/View/Design] endobj 70 0 obj <</CreatorInfo<</Creator(Adobe Illustrator 15.0)/Subtype/Artwork>>>> endobj 33 0 obj [/View/Design] endobj 34 0 obj <</CreatorInfo<</Creator(Adobe Illustrator 15.0)/Subtype/Artwork>>>> endobj 31 0 obj [/View/Design] endobj 32 0 obj <</CreatorInfo<</Creator(Adobe Illustrator 15.0)/Subtype/Artwork>>>> endobj 388 0 obj [387 0 R 386 0 R] endobj 419 0 obj <</CreationDate(D:20120612190700-07'00')/Creator(Adobe Illustrator CS5)/ModDate(D:20120713155518-07'00')/Producer(Adobe PDF library 9.90)/Title(google_badge_de)>> endobj xref 0 420 0000000004 65535 f
+0000000016 00000 n
+0000000470 00000 n
+0000050358 00000 n
+0000000005 00000 f
+0000000008 00000 f
+0000245545 00000 n
+0000245625 00000 n
+0000000010 00000 f
+0000050409 00000 n
+0000000011 00000 f
+0000000012 00000 f
+0000000013 00000 f
+0000000014 00000 f
+0000000015 00000 f
+0000000016 00000 f
+0000000017 00000 f
+0000000018 00000 f
+0000000019 00000 f
+0000000020 00000 f
+0000000021 00000 f
+0000000022 00000 f
+0000000023 00000 f
+0000000024 00000 f
+0000000025 00000 f
+0000000026 00000 f
+0000000027 00000 f
+0000000028 00000 f
+0000000029 00000 f
+0000000030 00000 f
+0000000035 00000 f
+0000249355 00000 n
+0000249386 00000 n
+0000249239 00000 n
+0000249270 00000 n
+0000000036 00000 f
+0000000037 00000 f
+0000000038 00000 f
+0000000039 00000 f
+0000000040 00000 f
+0000000041 00000 f
+0000000042 00000 f
+0000000043 00000 f
+0000000044 00000 f
+0000000047 00000 f
+0000245696 00000 n
+0000245777 00000 n
+0000000048 00000 f
+0000000049 00000 f
+0000000050 00000 f
+0000000051 00000 f
+0000000052 00000 f
+0000000053 00000 f
+0000000054 00000 f
+0000000055 00000 f
+0000000056 00000 f
+0000000057 00000 f
+0000000058 00000 f
+0000000059 00000 f
+0000000060 00000 f
+0000000061 00000 f
+0000000062 00000 f
+0000000063 00000 f
+0000000064 00000 f
+0000000065 00000 f
+0000000066 00000 f
+0000000067 00000 f
+0000000068 00000 f
+0000000073 00000 f
+0000249123 00000 n
+0000249154 00000 n
+0000249007 00000 n
+0000249038 00000 n
+0000000074 00000 f
+0000000075 00000 f
+0000000076 00000 f
+0000000077 00000 f
+0000000078 00000 f
+0000000079 00000 f
+0000000080 00000 f
+0000000081 00000 f
+0000000082 00000 f
+0000000085 00000 f
+0000245849 00000 n
+0000245932 00000 n
+0000000086 00000 f
+0000000087 00000 f
+0000000088 00000 f
+0000000089 00000 f
+0000000090 00000 f
+0000000091 00000 f
+0000000092 00000 f
+0000000093 00000 f
+0000000094 00000 f
+0000000095 00000 f
+0000000096 00000 f
+0000000097 00000 f
+0000000098 00000 f
+0000000099 00000 f
+0000000100 00000 f
+0000000101 00000 f
+0000000102 00000 f
+0000000103 00000 f
+0000000104 00000 f
+0000000105 00000 f
+0000000106 00000 f
+0000000111 00000 f
+0000248889 00000 n
+0000248921 00000 n
+0000248771 00000 n
+0000248803 00000 n
+0000000112 00000 f
+0000000113 00000 f
+0000000114 00000 f
+0000000115 00000 f
+0000000116 00000 f
+0000000117 00000 f
+0000000118 00000 f
+0000000119 00000 f
+0000000120 00000 f
+0000000123 00000 f
+0000246006 00000 n
+0000246090 00000 n
+0000000124 00000 f
+0000000125 00000 f
+0000000126 00000 f
+0000000127 00000 f
+0000000128 00000 f
+0000000129 00000 f
+0000000130 00000 f
+0000000131 00000 f
+0000000132 00000 f
+0000000133 00000 f
+0000000134 00000 f
+0000000135 00000 f
+0000000136 00000 f
+0000000137 00000 f
+0000000138 00000 f
+0000000139 00000 f
+0000000140 00000 f
+0000000141 00000 f
+0000000142 00000 f
+0000000143 00000 f
+0000000144 00000 f
+0000000149 00000 f
+0000248653 00000 n
+0000248685 00000 n
+0000248535 00000 n
+0000248567 00000 n
+0000000150 00000 f
+0000000151 00000 f
+0000000152 00000 f
+0000000153 00000 f
+0000000154 00000 f
+0000000155 00000 f
+0000000156 00000 f
+0000000157 00000 f
+0000000158 00000 f
+0000000161 00000 f
+0000246165 00000 n
+0000246249 00000 n
+0000000162 00000 f
+0000000163 00000 f
+0000000164 00000 f
+0000000165 00000 f
+0000000166 00000 f
+0000000167 00000 f
+0000000168 00000 f
+0000000169 00000 f
+0000000170 00000 f
+0000000171 00000 f
+0000000172 00000 f
+0000000173 00000 f
+0000000174 00000 f
+0000000175 00000 f
+0000000176 00000 f
+0000000177 00000 f
+0000000178 00000 f
+0000000179 00000 f
+0000000180 00000 f
+0000000181 00000 f
+0000000182 00000 f
+0000000187 00000 f
+0000248417 00000 n
+0000248449 00000 n
+0000248299 00000 n
+0000248331 00000 n
+0000000188 00000 f
+0000000189 00000 f
+0000000190 00000 f
+0000000191 00000 f
+0000000192 00000 f
+0000000193 00000 f
+0000000194 00000 f
+0000000195 00000 f
+0000000196 00000 f
+0000000199 00000 f
+0000246324 00000 n
+0000246408 00000 n
+0000000200 00000 f
+0000000201 00000 f
+0000000202 00000 f
+0000000203 00000 f
+0000000204 00000 f
+0000000205 00000 f
+0000000206 00000 f
+0000000207 00000 f
+0000000208 00000 f
+0000000209 00000 f
+0000000210 00000 f
+0000000211 00000 f
+0000000212 00000 f
+0000000213 00000 f
+0000000214 00000 f
+0000000215 00000 f
+0000000216 00000 f
+0000000217 00000 f
+0000000218 00000 f
+0000000219 00000 f
+0000000220 00000 f
+0000000225 00000 f
+0000248181 00000 n
+0000248213 00000 n
+0000248063 00000 n
+0000248095 00000 n
+0000000226 00000 f
+0000000227 00000 f
+0000000228 00000 f
+0000000229 00000 f
+0000000230 00000 f
+0000000231 00000 f
+0000000232 00000 f
+0000000233 00000 f
+0000000234 00000 f
+0000000237 00000 f
+0000246483 00000 n
+0000246567 00000 n
+0000000238 00000 f
+0000000239 00000 f
+0000000240 00000 f
+0000000241 00000 f
+0000000242 00000 f
+0000000243 00000 f
+0000000244 00000 f
+0000000245 00000 f
+0000000246 00000 f
+0000000247 00000 f
+0000000248 00000 f
+0000000249 00000 f
+0000000250 00000 f
+0000000251 00000 f
+0000000252 00000 f
+0000000253 00000 f
+0000000254 00000 f
+0000000255 00000 f
+0000000256 00000 f
+0000000257 00000 f
+0000000258 00000 f
+0000000263 00000 f
+0000247945 00000 n
+0000247977 00000 n
+0000247827 00000 n
+0000247859 00000 n
+0000000264 00000 f
+0000000265 00000 f
+0000000266 00000 f
+0000000267 00000 f
+0000000268 00000 f
+0000000269 00000 f
+0000000270 00000 f
+0000000271 00000 f
+0000000272 00000 f
+0000000275 00000 f
+0000246642 00000 n
+0000246726 00000 n
+0000000276 00000 f
+0000000277 00000 f
+0000000278 00000 f
+0000000279 00000 f
+0000000280 00000 f
+0000000281 00000 f
+0000000282 00000 f
+0000000283 00000 f
+0000000284 00000 f
+0000000285 00000 f
+0000000286 00000 f
+0000000287 00000 f
+0000000288 00000 f
+0000000289 00000 f
+0000000290 00000 f
+0000000291 00000 f
+0000000292 00000 f
+0000000293 00000 f
+0000000294 00000 f
+0000000295 00000 f
+0000000296 00000 f
+0000000301 00000 f
+0000247709 00000 n
+0000247741 00000 n
+0000247591 00000 n
+0000247623 00000 n
+0000000302 00000 f
+0000000303 00000 f
+0000000304 00000 f
+0000000305 00000 f
+0000000306 00000 f
+0000000307 00000 f
+0000000308 00000 f
+0000000309 00000 f
+0000000310 00000 f
+0000000313 00000 f
+0000246801 00000 n
+0000246885 00000 n
+0000000314 00000 f
+0000000315 00000 f
+0000000316 00000 f
+0000000317 00000 f
+0000000318 00000 f
+0000000319 00000 f
+0000000320 00000 f
+0000000321 00000 f
+0000000322 00000 f
+0000000323 00000 f
+0000000324 00000 f
+0000000325 00000 f
+0000000326 00000 f
+0000000327 00000 f
+0000000328 00000 f
+0000000329 00000 f
+0000000330 00000 f
+0000000331 00000 f
+0000000332 00000 f
+0000000333 00000 f
+0000000334 00000 f
+0000000339 00000 f
+0000247473 00000 n
+0000247505 00000 n
+0000247355 00000 n
+0000247387 00000 n
+0000000340 00000 f
+0000000341 00000 f
+0000000342 00000 f
+0000000343 00000 f
+0000000344 00000 f
+0000000345 00000 f
+0000000346 00000 f
+0000000347 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000246960 00000 n
+0000247044 00000 n
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000247237 00000 n
+0000247269 00000 n
+0000247119 00000 n
+0000247151 00000 n
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000059343 00000 n
+0000059427 00000 n
+0000249471 00000 n
+0000050834 00000 n
+0000059852 00000 n
+0000055804 00000 n
+0000059738 00000 n
+0000055220 00000 n
+0000055366 00000 n
+0000055512 00000 n
+0000055658 00000 n
+0000054418 00000 n
+0000054656 00000 n
+0000054706 00000 n
+0000059131 00000 n
+0000058920 00000 n
+0000058702 00000 n
+0000055841 00000 n
+0000056053 00000 n
+0000055938 00000 n
+0000058799 00000 n
+0000059017 00000 n
+0000059228 00000 n
+0000059620 00000 n
+0000059652 00000 n
+0000059502 00000 n
+0000059534 00000 n
+0000059928 00000 n
+0000060152 00000 n
+0000061167 00000 n
+0000068575 00000 n
+0000134164 00000 n
+0000199753 00000 n
+0000249506 00000 n
+trailer <</Size 420/Root 1 0 R/Info 419 0 R/ID[<12EE2A4941754B9AB45F47B3159D96E7><9B14C7B398694BC2A71E22BD224DEFA7>]>> startxref 249686 %%EOF \ No newline at end of file
diff --git a/docs/html/images/brand/en_app_rgb_wo_45.png b/docs/html/images/brand/en_app_rgb_wo_45.png
new file mode 100644
index 0000000..9891cbb
--- /dev/null
+++ b/docs/html/images/brand/en_app_rgb_wo_45.png
Binary files differ
diff --git a/docs/html/images/brand/en_app_rgb_wo_60.png b/docs/html/images/brand/en_app_rgb_wo_60.png
new file mode 100644
index 0000000..649e782
--- /dev/null
+++ b/docs/html/images/brand/en_app_rgb_wo_60.png
Binary files differ
diff --git a/docs/html/images/brand/en_generic_rgb_wo.ai b/docs/html/images/brand/en_generic_rgb_wo.ai
new file mode 100644
index 0000000..57c1e47
--- /dev/null
+++ b/docs/html/images/brand/en_generic_rgb_wo.ai
@@ -0,0 +1,1780 @@
+%PDF-1.5 %
+1 0 obj <</Metadata 2 0 R/OCProperties<</D<</ON[6 0 R 7 0 R 45 0 R 46 0 R 83 0 R 84 0 R 121 0 R 122 0 R 159 0 R 160 0 R 197 0 R 198 0 R 235 0 R 236 0 R 273 0 R 274 0 R 311 0 R 312 0 R 349 0 R 350 0 R 386 0 R 387 0 R]/Order 388 0 R/RBGroups[]>>/OCGs[6 0 R 7 0 R 45 0 R 46 0 R 83 0 R 84 0 R 121 0 R 122 0 R 159 0 R 160 0 R 197 0 R 198 0 R 235 0 R 236 0 R 273 0 R 274 0 R 311 0 R 312 0 R 349 0 R 350 0 R 386 0 R 387 0 R]>>/Pages 3 0 R/Type/Catalog>> endobj 2 0 obj <</Length 48887/Subtype/XML/Type/Metadata>>stream
+<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
+<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 5.0-c060 61.134777, 2010/02/12-17:32:00 ">
+ <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
+ <rdf:Description rdf:about=""
+ xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <dc:format>application/pdf</dc:format>
+ <dc:title>
+ <rdf:Alt>
+ <rdf:li xml:lang="x-default">google_badge_de</rdf:li>
+ </rdf:Alt>
+ </dc:title>
+ </rdf:Description>
+ <rdf:Description rdf:about=""
+ xmlns:xmp="http://ns.adobe.com/xap/1.0/"
+ xmlns:xmpGImg="http://ns.adobe.com/xap/1.0/g/img/">
+ <xmp:MetadataDate>2012-06-21T18:40:48-07:00</xmp:MetadataDate>
+ <xmp:ModifyDate>2012-06-21T18:40:48-07:00</xmp:ModifyDate>
+ <xmp:CreateDate>2012-06-12T19:07-07:00</xmp:CreateDate>
+ <xmp:CreatorTool>Adobe Illustrator CS5</xmp:CreatorTool>
+ <xmp:Thumbnails>
+ <rdf:Alt>
+ <rdf:li rdf:parseType="Resource">
+ <xmpGImg:width>256</xmpGImg:width>
+ <xmpGImg:height>112</xmpGImg:height>
+ <xmpGImg:format>JPEG</xmpGImg:format>
+ <xmpGImg:image>/9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA&#xA;AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK&#xA;DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f&#xA;Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgAcAEAAwER&#xA;AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA&#xA;AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB&#xA;UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE&#xA;1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ&#xA;qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy&#xA;obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp&#xA;0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo&#xA;+DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A5J+Zv5m/mTZ/mT5ss7Pz&#xA;ZrNtaW2s6hDb28OoXSRxxpdSKiIiyBVVVFAB0xVjX/K2PzT/AOpy1z/uJXn/AFUxV3/K2PzT/wCp&#xA;y1z/ALiV5/1UxV3/ACtj80/+py1z/uJXn/VTFXf8rY/NP/qctc/7iV5/1UxV3/K2PzT/AOpy1z/u&#xA;JXn/AFUxV3/K2PzT/wCpy1z/ALiV5/1UxV3/ACtj80/+py1z/uJXn/VTFXf8rY/NP/qctc/7iV5/&#xA;1UxV3/K2PzT/AOpy1z/uJXn/AFUxV3/K2PzT/wCpy1z/ALiV5/1UxV3/ACtj80/+py1z/uJXn/VT&#xA;FXf8rY/NP/qctc/7iV5/1UxV3/K2PzT/AOpy1z/uJXn/AFUxV3/K2PzT/wCpy1z/ALiV5/1UxV3/&#xA;ACtj80/+py1z/uJXn/VTFXf8rY/NP/qctc/7iV5/1UxV3/K2PzT/AOpy1z/uJXn/AFUxV3/K2PzT&#xA;/wCpy1z/ALiV5/1UxV3/ACtj80/+py1z/uJXn/VTFXf8rY/NP/qctc/7iV5/1UxV3/K2PzT/AOpy&#xA;1z/uJXn/AFUxV3/K2PzT/wCpy1z/ALiV5/1UxV3/ACtj80/+py1z/uJXn/VTFXf8rY/NP/qctc/7&#xA;iV5/1UxV3/K2PzT/AOpy1z/uJXn/AFUxV3/K2PzT/wCpy1z/ALiV5/1UxV3/ACtj80/+py1z/uJX&#xA;n/VTFXf8rY/NP/qctc/7iV5/1UxV3/K2PzT/AOpy1z/uJXn/AFUxV3/K2PzT/wCpy1z/ALiV5/1U&#xA;xVkv5Zfmb+ZN5+ZPlOzvPNms3Npc6zp8NxbzahdPHJG91Gro6NIVZWU0IPXFWNfmx/5NPzl/23NS&#xA;/wCoyTFWM2trc3dzFa2sT3FzO6xwQRKXkd2NFVFWpZidgBir0s/klDosEcnn3zZpnlO4lUONKcS3&#xA;+oorCqtLbWocxhq7Vavtiql/gD8nv/LqQf8AcE1P/mnFXf4A/J7/AMupB/3BNT/5pxV3+APye/8A&#xA;LqQf9wTU/wDmnFXf4A/J7/y6kH/cE1P/AJpxV3+APye/8upB/wBwTU/+acVd/gD8nv8Ay6kH/cE1&#xA;P/mnFXf4A/J7/wAupB/3BNT/AOacVd/gD8nv/LqQf9wTU/8AmnFXf4A/J7/y6kH/AHBNT/5pxV3+&#xA;APye/wDLqQf9wTU/+acVd/gD8nv/AC6kH/cE1P8A5pxV3+APye/8upB/3BNT/wCacVd/gD8nv/Lq&#xA;Qf8AcE1P/mnFXf4A/J7/AMupB/3BNT/5pxV3+APye/8ALqQf9wTU/wDmnFXf4A/J7/y6kH/cE1P/&#xA;AJpxV3+APye/8upB/wBwTU/+acVd/gD8nv8Ay6kH/cE1P/mnFXf4A/J7/wAupB/3BNT/AOacVd/g&#xA;D8nv/LqQf9wTU/8AmnFXf4A/J7/y6kH/AHBNT/5pxV3+APye/wDLqQf9wTU/+acVd/gD8nv/AC6k&#xA;H/cE1P8A5pxV3+APye/8upB/3BNT/wCacVd/gD8nv/LqQf8AcE1P/mnFXf4A/J7/AMupB/3BNT/5&#xA;pxVWh/JnRNc/c+R/POleYdSP93pU6T6XczN/JbrdhVkb25DFXnGqaXqWlahPp2p20lnf2rmO4tpl&#xA;KSIw7Mp3xVkP5T/+TT8m/wDbc03/AKjI8Vd+bH/k0/OX/bc1L/qMkxVlv5f3EfkX8uNS/MRI0fzJ&#xA;qN2dD8rSSDl9W/depeXqA7clRhGh7N4gnFXll1dXN3cy3V1K9xczu0k88rF5HdjVmdmqWYnck4qp&#xA;Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FW1ZlYMpKspqr&#xA;DYgjuMVeseaL+T8wPymi8237CbzZ5RuodL1m8P8AeXWnXYb6nNMf2pI5UaOvUjcknFWI/lP/AOTT&#xA;8m/9tzTf+oyPFXfmx/5NPzl/23NS/wCoyTFWQeZv/JC+SP8Atq6x/wAyMVeaYq7FXYq7FXYq7FX0&#xA;L5burn8vfyw8j3nk/T7WXzz5/vJ4xrV5HHJ9XWGdYI4Iml+CPkZEqW2+0T24qph5m078yLnzp+W2&#xA;reevL2kW1yfMVjaTa9YPC09673KOEnWB2QhVQ9V+VKkFVPvzT1Lz/DeeabW289+SbbR0F5HHoks1&#xA;qupLBxYfVyn1cv6/H4QOdeXfFWOfkZ+avm++8t+bLG6e1kt/KvlS5utFBtLflHLZRKsDO3CslAN+&#xA;Va98VeFeb/OGuebtZbWNaeOS+eNImaGKOBOMYovwRhV/DFXrv5g+atW8m6P+VetaD6MGoHyyEZ5I&#xA;IplYScQxZJFZSfemKpr+fH5o+bLXyz5S0+B7WO280+VrS81kC0t+Uk12h9Vkbhyjr240pirAf+cd&#xA;/Keg+Y/zBb9O24vdN0awudWl080IuDbcQkRB+0OUgYr3pQ7VxVmvkT8+9f8AOfnfTfKPmfSNNv8A&#xA;yfrdyLBdES0jVLVJzxjaB1AcekabntXoaEKsx/Lvy95B8u+RfzF8veaVWfy5D5nfRnvmCmSJJDFB&#xA;DMXp8JjcqzEfZIrirEde/LfUvIn5M/mNoupxrI8Oq6bJp1/xFJ7WSRfTlRv8obMAdmqMVfPGKuxV&#xA;2KuxV2KuxV2KuxV2KuxV2KvS/wAvyf8AlTn5qiuxg0QkdqjU1xVj/wCU/wD5NPyb/wBtzTf+oyPF&#xA;Xfmx/wCTT85f9tzUv+oyTFWQeZv/ACQvkj/tq6x/zIxV5pirsVdirsVdirsVemeS/wA3dMsfJ58k&#xA;+c/L0fmjyxHM1zp0frta3NnM9SxhmQMeLMxNNup3I2xVHav+eGler5S0/wAteWI9H8seU9Vh1mLT&#xA;jdPPPc3EUgkbncOp48hUfZalfkMVb81/mv8AlP5jn1XUbj8sfT13VPWkbUv05eNwuZgaTeiI0jPF&#xA;zy40APTFWKfl9+YP+ELXzRb/AFD69/iTRrnRuXrej6H1kU9anCTnx/l+GvjirD8VZh56/MH/ABVo&#xA;3lXTfqH1P/DOmrpvq+t6vr8SP3nHgnp9Ps1b54q78wfzB/xfa+V7f6h9R/w3o1to3L1vW9f6sKet&#xA;ThHw5fy/FTxxVA+QfPOt+R/NNn5j0Zl+t2pIaKQExyxOOLxSAEHiw+479cVekWn54flzol/P5i8q&#xA;/l1Bpnm6VX+r3s19LcWtrLIpDyQ2xRVHXYDjTttsVWIwfmtdj8tvMXk+8s2u7vzFqaarcay89GEi&#xA;tG7hofTPMu0deXMdemKptffn1rWp/k4fy31Wz+uNG8ItNZach47eCRJI4XiKNz48eIbmPhpttuq8&#xA;txV2KuxV2KuxV2KuxV2KuxV2KuxV6X5A/wDJPfmp/wAYNE/7qa4qx/8AKf8A8mn5N/7bmm/9RkeK&#xA;u/Nj/wAmn5y/7bmpf9RkmKsg8zf+SF8kf9tXWP8AmRirB/L+g3Wt6gLK3dI34M5eSvEBfHiGPU+G&#xA;XYMBySoNGp1AxR4iifMnkzzD5ddf0lbEW0h/cXsfxwSD/JcfqND7ZXKBiaKNPqseUek/DqkeRch2&#xA;KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KppoflbzPr7ypoWkXurPCAZlsbaW5KA9CwiV6fTiqhq2i6&#xA;xo161jq9jcadeoAz2t3E8EoDCoJSQK2/yxVBYq7FXYq7FXYq7FXYq7FXYq7FXpfkD/yT35qf8YNE&#xA;/wC6muKsf/Kf/wAmn5N/7bmm/wDUZHirvzY/8mn5y/7bmpf9RkmKsg8zf+SF8kf9tXWP+ZGKpV+U&#xA;UXq+a2X/AJdZD/wyZndnmsnwdV2waw/5we/6Q8Mcb2OoQJd6XcfDPbyqHWh78WqD8sy9Zp/EFj6n&#xA;mseXhNsc86f840abqcTal5OuFs5pBzFhMS1s9d/3cnxNH8jUf6uc6c/Cak9HptfKvVuO94F5j8q+&#xA;YfLV+bDXLCWwuuqrKPhcDblG4qrr7qSMvjMSFh2sJiQsJVkmTsVeofk9+U1h5os9V82eabqTTfI3&#xA;l5DJqN1EP3s8iqH+rw1rvQipoTuoG7bKqOofnRLZTtB5G8v6V5a0qM8betlbX97Ig2BuLm9SdnY9&#xA;dqU/HFWXeQ/zd8h+ZpLnSvzY8t6RLafV5JV8wWtslneBo12jP1YIzl+i+nxoeoI3CrxTWZNJk1a8&#xA;fR4poNKaZzYw3LrJMsNfgEjKFUtTrQYqhkt55I3kSNmjj/vHVSVWviR0xVTxVtVZmCqCzMaKo3JJ&#xA;7DFV00M0LmOaNo5B1RwVO/scVWYq7FXuX/OIV/fD82LeyFzKLI2d25tubekX4r8XCvGvvTFWCfna&#xA;zN+bvm8sST+lbkVO+wkIA+7FWGCCcwmYRsYQeJloeIbw5dK4qp4q7FVU21wIBOYnEDGiylTwJ6UD&#xA;dO2KvQfyC8v6Nr35kW2naxaR3ti9pfSNbyglS8VrI6Han2WAOKvOcVVp7S6t+P1iGSHlXj6ila06&#xA;0qPfFVHFXYq7FXpfkD/yT35qf8YNE/7qa4qx/wDKf/yafk3/ALbmm/8AUZHirvzY/wDJp+cv+25q&#xA;X/UZJirIPM3/AJIXyR/21dY/5kYqh/yMi9Xzq6/8ucp/4dMytGan8HT9tn9x/nD9L6Fj0/2zZGby&#xA;JkyLy5fSadII5QXtHPxL3U/zL/TNV2hpBmFx+v73L0ms8M1L6U2842HlzXNMOlXlnBqdvNRiJVDq&#xA;hpsyHqr79RuM5XxJwl3EPofY3ZYy1ll/d9P6X7Hzt53/AOcZr+JZL7yhMbmMVY6XcMBKB4RSmit7&#xA;BqfM5m4e1I8p/N2Gq7MrfGfg8MngmgmkgnRopomKSxuCrKymjKwO4IObUG9w6cin1Brunmw/5wr0&#xA;8ad/d3UkNxqTp+16t8Sef+rJ6a/QMKvlvFXYq9j/AOccfyu0fzbqusa/5hhN15f8r24uZ7EHj9Zm&#xA;ZXaONjt8AWJmYV60B2JxVJk/5yF/NG31xdR03UxptlC9bbQrWNI9NjhB2gFsoCFePw1Pxe9d8Ves&#xA;/nJ+XXl7z7+Wuh/mj5S06LT9W1FrWPUrOABY5Xu5ltSCBRfUium4cqfENz0xVj35vSS/komieS/J&#xA;brY6tc2C3+ueZURfr1y8kkkQjjmILQxKYmPFKbU3+1yVZB+RHnS3/Nu11H8u/wAyY11uZLZrrSNV&#xA;mVfrkaqQsirNTl6i8w6N1pyDVG2KpR5H/JXS/LGnfmL5q8xWceuv5KlurLR7CdOVtLcQQiZbi4hq&#xA;OacJYm4nahbqQKKpn/zjf+dmra952/wl5nis57TVY5TpbQ2lvbfV5o1MvpJ6KRj02RWpWp5U33xV&#xA;GfluNetv+csdR0nV9Tl1M6ZBeQ2csoReMDxpJGOEYSNTwccuKip3xVLNA/LrR/MP5zfmh5o160/S&#xA;Oj+Uri8u/wBGNUJdXJMrxRv/ADIohYsvc8a7VBVd+XfnX82dK12HzB5/1S28veRLkP8AWNH1RUhj&#xA;ltmDfu7DTEUz7V+EqlD3Lb1VeM/m1qPkPUvPN/f+RreS10G44utvJGIUWYj956MYLcY2PxKDSlaU&#xA;ApirP/yZ1fQ9D/KHz7req6PDra2N3pbWtjcisLTs8ixGXuY1chmX9qlMVSnT/wDnJ781ItTWXUbu&#xA;31PRnPC50Ca1t1s5Lc0BhCpGGUcdga/Ou9VXo/l/yfoOhf8AOQGiar5aiMHlvzToF1rOmW/aEXFl&#xA;LzhHhxPxU/ZDU7Yq8o/LD8xvL/kny9rFzZaU93+Yl3JHFoOpSwxT29nFtydFdi3rE1p+7PbelQVW&#xA;ffll+Y/5seYPN9j5a8+2Vz5g8q67KLPULXULEBI/WBVZkkEaGMoxr16e9CFUJ5T8v2Gq2v5m/k2i&#xA;iW8068u9Q8pyvT1TcaZM0UkQY95okUU/1jirx7yT5VvvNfm7SvLlmCLjUrlICwFeCVrLIR4RxhmP&#xA;yxVlv5++ZNL1bz/NpuiokWgeWoY9F0tIwApS0HB3qo+LlJyo3dQMVXeQP/JPfmp/xg0T/uprirH/&#xA;AMp//Jp+Tf8Atuab/wBRkeKu/Nj/AMmn5y/7bmpf9RkmKsg8zf8AkhfJH/bV1j/mRiqr/wA47Q+r&#xA;5/kX/lxmP/Dx5dgNSdL28awf5w/S+no9P9syjN4syY/5o8wRafysbNg14dpHG4jB/wCNv1ZTlyED&#xA;Z7n2U9ljq5DPnFYRyH8//jv3se0jz5Y+Way6zchNLdv3hc1YMdy0Y+0x8VHXOb1enOQ+n6n1rWwx&#xA;QxcRIhwjb9X6mG+f/wDnJ6/ufUsPJdubK3NVbVbhQ07dqxRbrH825H2U4dP2SOeQ35PGZ+0DLaLw&#xA;eaaaeaSaZ2kmlYvJI5JZmY1LEnqSc3AFbOtJfUf/ADjV5y8s+bPy+1H8n/M0wikmWddLDMF9WCcm&#xA;RkiJ/wB2wzEyAd67fZOFXh/5mflF5y/L3VpLXWLR308uRZavEpNtOn7JDbhHp1Rtx7ihKr0X/nGf&#xA;zGms+etK8oXmhaPLoxhuZLgtp8Ms8jRwsytJcSiST7YHf26bYq9T/Lfzn5e0/wDPLz/5E1CO1sbT&#xA;VZYYNIto447eBvq8bI9uFjCLzkWWo2qxB3rTFXy3+Y35e655I833nl7ULeSscrfo+cqeNzbs37qW&#xA;MjZuQpWnRqr1GKvdtT84S/lh/wA49+VPLGoj/nab+7i1JtJYkSwWkWofXx6q9U9Tgi8TQ1Zv5Tiq&#xA;v/zlL5dh88+V9A/NDyn/ALktNhtmg1CSH4njty3qRs6ipX0pGkWQfsk79DirBP8AnFTTbm28/S+b&#xA;7w/U/LWgWdzJqeqTfBboZIzGkZc7Fjy5cfbFU48s/wDOTenWPnTzmdc0yXUvJfmy6kdrWPis8URj&#xA;+rA8GKq/qW6KrrzHTY+KrJPI35feTvJnlO7/ADu8onUfMS2sVy3l/SLuKOJoQZWs5JLj02kaT0/j&#xA;YlePw7074qxL/nGDWtU8wfn9NrepOZ7++tr65u5QKDlJSuw+ytTQDFXov5T+b9N0v8/vzI8pauwg&#xA;XzJfyPYGUmMPLDJKPSU7byxzVXf9nbc4q8L/ADW/JDz75P8AMlzA1jeatpLuTp+rwxyTrJDX4BIy&#xA;huEgGzK3fpUb4qwHVtE1fR7hLbVbOWxuXjWUW9whjlCP9lmRqMvLqKjcb9MVev8A5ReVdX80/kp+&#xA;Ymj6OizalJc6XLb27MFaUwvJI0aV6uyqeI7nbFXlOl+UvMuq6/H5esdMuJdbkk9L6h6bLKrV35qw&#xA;HAL+0WoANzir6dtLqws/zx8n+TLOdLpvJ3le402/uIzVTeCykMyj5fD8iSO2KsJ/L19R8q/84/aj&#xA;538l2cU/myTVDZapqpjWe4sLIID+5VlYLUsnI0/aqeg4qq35E+Yfzw82eetKurrXtUk8s2tzHLql&#xA;1dzyLZunMAW9WIR3mchFRd9+lMVYHr3my88o/wDOQeueZLOpm0zzLqEzRg05x/XJVljr/wAWRsy/&#xA;Tir2DV/LWmflpqHnb82NPZGsNWtI/wDAcikAG51pS8joo6egORUfyYq+WCSxJJqTuSepOKvSvIH/&#xA;AJJ781P+MGif91NcVY/+U/8A5NPyb/23NN/6jI8Vd+bH/k0/OX/bc1L/AKjJMVZB5m/8kL5I/wC2&#xA;rrH/ADIxVMf+cYUD/mRKD0/R05/5KRZKB3dF7Q/4v/nD9L3vz556stEgltLaZEulH+kXLEBIFPud&#xA;uf6sz8WAkcctotfs17OfmCM+o2wDkP53/HfvfPHmL814o2eLRk+sTEnleTA8KnqVU0Zj7n8cxc+Q&#xA;E7Po2btqOMcOEcvkPcHnOo6pqGpXJub6d7iY/tOeg8AOgHsMxwKdBmzzyy4pmyhcLS7FVyO8brJG&#xA;xR0IZHU0II3BBGKvRNL/AOch/wA59NsfqUHmeea3pxpeRW96xHgXuo5nP34qgb387PzSuopIR5gn&#xA;so5d5F05IdPDbU3+ppBXFWGz3d1PctdTzSS3Ltzed2LSFv5ixNa4qzK3/O782YLOO0TzTftFFtEZ&#xA;JPVkSgI+GWQNIOvZsVYff6jqGo3kt7qFzLeXkx5TXNw7Syu3izuSxPzOKpv5W8/edPKjSHy7rV3p&#xA;izGs0UErLE56cmjNUY+5FcVX+ZPzC87+ZYUt9c1q6vbWM8o7R34wKxJPIQpxjB368cVerL5G8qfl&#xA;3+TGj+ftW0iHzJ5k8xyRrp1velzYWkcqPKjPCjJ6zGOPcMaVPtuqhvy4/wCcpPNXlnVILe+sbBvK&#xA;rufrOlafZ29kIg7VaWH0FjBceD15ex+LFVX/AJyBkf8ALr82p7nyDfzaIut6fDe3aWLtAFeaR+aA&#xA;LQqr+ksnHxOKvJ/MHnjzj5ie3fXdavdTa1JNsbmd5PTJ3JTkfhO3UYqyO3/Pz847fTxYR+bL76uB&#xA;xDOyvKAKf7udWl7fzYqwe9vby+upby9nkurudi89xM7SSOx6s7sSzH3OKvU/Id1c2n5DfmBdWsr2&#xA;9zBqOiSQTxMUkR1nYqyMtCrA7gjFUul/5yO/OyXTf0c3mq4Fvx4c0it0np/zELEJ6/5XOuKsL0Hz&#xA;Rr+g6v8ApjSb17bU+Mqm6oruROpSSvqBgeSsanFUb5O/MLzp5MuZLjyzq8+mvNT10jKtFJxrx9SK&#xA;QPG9KmnJdsVTHX/zk/M/zBfWV9q3mK6nn06ZbqyCcIY450PJJFihWOPkp6HjiqF0fyv5/wDzF1q+&#xA;u9MsrjXNTkkWXUZ0C1DzsQHlY8VHIg74qzr8/tbj06y8r/llZXwvrfyfZhNUnRy6PqUu8qAmu0I+&#xA;FR+zyK9sVeOYq9L8gf8AknvzU/4waJ/3U1xVj/5T/wDk0/Jv/bc03/qMjxV35sf+TT85f9tzUv8A&#xA;qMkxVlFvbN5m/IFobFfU1HyTqsl3e261LHTtRjUevTvwmio1Oi7nFWFeTfOeteUNWfVNHMa3UkEl&#xA;sTKpYcJKVIoVoQVBByUJcJuraM+mhmAExYBuvcg9a8xaxrVwZtRuWlJJYJWiAnwXx9zvlmbUTyH1&#xA;H9TmZM0p7HkOQ6D4JblLU7FXYq7FXYq7FXYq7FXYq7FXYq7FXsfkr/nIGCz8kL5D87+XovNHliIc&#xA;bUGUwXMKhuSgOA1eFTwI4sOnKm2KpTJ5z/JrS7wah5e8lXV1exsJLaLWb8y2cUi7qWt4UR5gDT4X&#xA;loe+KsH8z+Ztb8z67ea7rdy13qd8/OeZqDoAqqqjZVVQFUDoMVSrFXYq7FV6zSrG0SuwjehdASFJ&#xA;HSo70xVZirsVdirsVRVjqmp2Bc2N3NaGUASGCR4+QHQNxIr1xVDEkmp3J6nFWsVeoeWIG0n8hvOu&#xA;pXn7uPzJe6ZpOlg7GR7OY3lwwB3KqqqKjau2Ksa/Kf8A8mn5N/7bmm/9RkeKu/Nj/wAmn5y/7bmp&#xA;f9RkmKoPyT521zybr0es6Q6eqFaG5tZl5wXNvJtJBPGftxuOo+kb4qzW7tfyF81Mb+HVLzyDqEtW&#xA;utNmtZNT08Odz9We3ImRD2DLt0G2Kob/AAB+T3/l1IP+4Jqf/NOKu/wB+T3/AJdSD/uCan/zTirv&#xA;8Afk9/5dSD/uCan/AM04q7/AH5Pf+XUg/wC4Jqf/ADTirv8AAH5Pf+XUg/7gmp/804q7/AH5Pf8A&#xA;l1IP+4Jqf/NOKu/wB+T3/l1IP+4Jqf8AzTirv8Afk9/5dSD/ALgmp/8ANOKu/wAAfk9/5dSD/uCa&#xA;n/zTirv8Afk9/wCXUg/7gmp/804q7/AH5Pf+XUg/7gmp/wDNOKu/wB+T3/l1IP8AuCan/wA04q7/&#xA;AAB+T3/l1IP+4Jqf/NOKu/wB+T3/AJdSD/uCan/zTirv8Afk9/5dSD/uCan/AM04q7/AH5Pf+XUg&#xA;/wC4Jqf/ADTirv8AAH5Pf+XUg/7gmp/804q7/AH5Pf8Al1IP+4Jqf/NOKu/wB+T3/l1IP+4Jqf8A&#xA;zTirv8Afk9/5dSD/ALgmp/8ANOKu/wAAfk9/5dSD/uCan/zTirv8Afk9/wCXUg/7gmp/804q7/AH&#xA;5Pf+XUg/7gmp/wDNOKu/wB+T3/l1IP8AuCan/wA04q7/AAB+T3/l1IP+4Jqf/NOKu/wB+T3/AJdS&#xA;D/uCan/zTiqrB5b/ACE0dhd6l5xvvNCpuul6VpstiXI6B7i8I4qe/Fa06HFWOfmB+YN15tuLOCCz&#xA;i0fy7pEZg0TQ7YkxW0TGrEuaNJLIRWSRt2OKrfyn/wDJp+Tf+25pv/UZHirvzY/8mn5y/wC25qX/&#xA;AFGSYqxTFXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY&#xA;q7FXYqyv8p//ACafk3/tuab/ANRkeKvZvPX/ADif+aGued/MOtWUumCz1TU7y9thJcSK/pXFw8qc&#xA;gIjQ8WFd8VSP/oTb83P9/aV/0ky/9UcVd/0Jt+bn+/tK/wCkmX/qjirv+hNvzc/39pX/AEky/wDV&#xA;HFXf9Cbfm5/v7Sv+kmX/AKo4q7/oTb83P9/aV/0ky/8AVHFXf9Cbfm5/v7Sv+kmX/qjirv8AoTb8&#xA;3P8Af2lf9JMv/VHFXf8AQm35uf7+0r/pJl/6o4q7/oTb83P9/aV/0ky/9UcVd/0Jt+bn+/tK/wCk&#xA;mX/qjirv+hNvzc/39pX/AEky/wDVHFXf9Cbfm5/v7Sv+kmX/AKo4q7/oTb83P9/aV/0ky/8AVHFX&#xA;f9Cbfm5/v7Sv+kmX/qjirv8AoTb83P8Af2lf9JMv/VHFXf8AQm35uf7+0r/pJl/6o4q7/oTb83P9&#xA;/aV/0ky/9UcVd/0Jt+bn+/tK/wCkmX/qjirv+hNvzc/39pX/AEky/wDVHFXf9Cbfm5/v7Sv+kmX/&#xA;AKo4q7/oTb83P9/aV/0ky/8AVHFXf9Cbfm5/v7Sv+kmX/qjirv8AoTb83P8Af2lf9JMv/VHFXf8A&#xA;Qm35uf7+0r/pJl/6o4q7/oTb83P9/aV/0ky/9UcVd/0Jt+bn+/tK/wCkmX/qjirv+hNvzc/39pX/&#xA;AEky/wDVHFXf9Cbfm5/v7Sv+kmX/AKo4q7/oTb83P9/aV/0ky/8AVHFXf9Cbfm5/v7Sv+kmX/qji&#xA;qeeRf+cT/wA0ND87+XtavZdMNnpep2d7ciO4kZ/St7hJX4gxCp4qab4q/wD/2Q==</xmpGImg:image>
+ </rdf:li>
+ </rdf:Alt>
+ </xmp:Thumbnails>
+ </rdf:Description>
+ <rdf:Description rdf:about=""
+ xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/"
+ xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#"
+ xmlns:stEvt="http://ns.adobe.com/xap/1.0/sType/ResourceEvent#">
+ <xmpMM:InstanceID>uuid:e2ad0f15-2e2e-4f47-afb6-a6d12aaf8cd0</xmpMM:InstanceID>
+ <xmpMM:DocumentID>xmp.did:42A648F7CE2068118C14F31EF4E701AA</xmpMM:DocumentID>
+ <xmpMM:OriginalDocumentID>uuid:5D20892493BFDB11914A8590D31508C8</xmpMM:OriginalDocumentID>
+ <xmpMM:RenditionClass>proof:pdf</xmpMM:RenditionClass>
+ <xmpMM:DerivedFrom rdf:parseType="Resource">
+ <stRef:instanceID>xmp.iid:41A648F7CE2068118C14F31EF4E701AA</stRef:instanceID>
+ <stRef:documentID>xmp.did:41A648F7CE2068118C14F31EF4E701AA</stRef:documentID>
+ <stRef:originalDocumentID>uuid:5D20892493BFDB11914A8590D31508C8</stRef:originalDocumentID>
+ <stRef:renditionClass>proof:pdf</stRef:renditionClass>
+ </xmpMM:DerivedFrom>
+ <xmpMM:History>
+ <rdf:Seq>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:02801174072068118C14D11CE5BC7600</stEvt:instanceID>
+ <stEvt:when>2012-06-05T12:51:06-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS5</stEvt:softwareAgent>
+ <stEvt:changed>/</stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:F77F1174072068118C14F31EF4E701AA</stEvt:instanceID>
+ <stEvt:when>2012-06-11T19:13:38-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS5</stEvt:softwareAgent>
+ <stEvt:changed>/</stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:F87F1174072068118C14F31EF4E701AA</stEvt:instanceID>
+ <stEvt:when>2012-06-12T18:34:28-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS5</stEvt:softwareAgent>
+ <stEvt:changed>/</stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:F97F1174072068118C14F31EF4E701AA</stEvt:instanceID>
+ <stEvt:when>2012-06-12T18:34:45-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS5</stEvt:softwareAgent>
+ <stEvt:changed>/</stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:FA7F1174072068118C14F31EF4E701AA</stEvt:instanceID>
+ <stEvt:when>2012-06-12T18:52:21-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS5</stEvt:softwareAgent>
+ <stEvt:changed>/</stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:FB7F1174072068118C14F31EF4E701AA</stEvt:instanceID>
+ <stEvt:when>2012-06-12T18:54:29-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS5</stEvt:softwareAgent>
+ <stEvt:changed>/</stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:40A648F7CE2068118C14F31EF4E701AA</stEvt:instanceID>
+ <stEvt:when>2012-06-12T19:06:02-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS5</stEvt:softwareAgent>
+ <stEvt:changed>/</stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:41A648F7CE2068118C14F31EF4E701AA</stEvt:instanceID>
+ <stEvt:when>2012-06-12T19:06:38-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS5</stEvt:softwareAgent>
+ <stEvt:changed>/</stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:42A648F7CE2068118C14F31EF4E701AA</stEvt:instanceID>
+ <stEvt:when>2012-06-12T19:06:58-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS5</stEvt:softwareAgent>
+ <stEvt:changed>/</stEvt:changed>
+ </rdf:li>
+ </rdf:Seq>
+ </xmpMM:History>
+ </rdf:Description>
+ <rdf:Description rdf:about=""
+ xmlns:illustrator="http://ns.adobe.com/illustrator/1.0/">
+ <illustrator:Type>Document</illustrator:Type>
+ <illustrator:StartupProfile>Print</illustrator:StartupProfile>
+ </rdf:Description>
+ <rdf:Description rdf:about=""
+ xmlns:xmpTPg="http://ns.adobe.com/xap/1.0/t/pg/"
+ xmlns:stDim="http://ns.adobe.com/xap/1.0/sType/Dimensions#"
+ xmlns:xmpG="http://ns.adobe.com/xap/1.0/g/">
+ <xmpTPg:HasVisibleOverprint>False</xmpTPg:HasVisibleOverprint>
+ <xmpTPg:HasVisibleTransparency>False</xmpTPg:HasVisibleTransparency>
+ <xmpTPg:NPages>1</xmpTPg:NPages>
+ <xmpTPg:MaxPageSize rdf:parseType="Resource">
+ <stDim:w>229.500000</stDim:w>
+ <stDim:h>91.500000</stDim:h>
+ <stDim:unit>Points</stDim:unit>
+ </xmpTPg:MaxPageSize>
+ <xmpTPg:PlateNames>
+ <rdf:Seq>
+ <rdf:li>Cyan</rdf:li>
+ <rdf:li>Magenta</rdf:li>
+ <rdf:li>Yellow</rdf:li>
+ <rdf:li>Black</rdf:li>
+ </rdf:Seq>
+ </xmpTPg:PlateNames>
+ <xmpTPg:SwatchGroups>
+ <rdf:Seq>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:groupName>Default Swatch Group</xmpG:groupName>
+ <xmpG:groupType>0</xmpG:groupType>
+ <xmpG:Colorants>
+ <rdf:Seq>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>White</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>255</xmpG:red>
+ <xmpG:green>255</xmpG:green>
+ <xmpG:blue>255</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>Black</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>35</xmpG:red>
+ <xmpG:green>31</xmpG:green>
+ <xmpG:blue>32</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>CMYK Red</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>236</xmpG:red>
+ <xmpG:green>28</xmpG:green>
+ <xmpG:blue>36</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>CMYK Yellow</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>255</xmpG:red>
+ <xmpG:green>241</xmpG:green>
+ <xmpG:blue>0</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>CMYK Green</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>0</xmpG:red>
+ <xmpG:green>165</xmpG:green>
+ <xmpG:blue>81</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>CMYK Cyan</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>0</xmpG:red>
+ <xmpG:green>173</xmpG:green>
+ <xmpG:blue>238</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>CMYK Blue</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>46</xmpG:red>
+ <xmpG:green>49</xmpG:green>
+ <xmpG:blue>145</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>CMYK Magenta</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>235</xmpG:red>
+ <xmpG:green>0</xmpG:green>
+ <xmpG:blue>139</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=15 M=100 Y=90 K=10</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>190</xmpG:red>
+ <xmpG:green>30</xmpG:green>
+ <xmpG:blue>45</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=90 Y=85 K=0</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>238</xmpG:red>
+ <xmpG:green>64</xmpG:green>
+ <xmpG:blue>54</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=80 Y=95 K=0</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>240</xmpG:red>
+ <xmpG:green>90</xmpG:green>
+ <xmpG:blue>40</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=50 Y=100 K=0</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>246</xmpG:red>
+ <xmpG:green>146</xmpG:green>
+ <xmpG:blue>30</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=35 Y=85 K=0</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>250</xmpG:red>
+ <xmpG:green>175</xmpG:green>
+ <xmpG:blue>64</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=5 M=0 Y=90 K=0</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>249</xmpG:red>
+ <xmpG:green>236</xmpG:green>
+ <xmpG:blue>49</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=20 M=0 Y=100 K=0</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>214</xmpG:red>
+ <xmpG:green>222</xmpG:green>
+ <xmpG:blue>35</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=50 M=0 Y=100 K=0</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>139</xmpG:red>
+ <xmpG:green>197</xmpG:green>
+ <xmpG:blue>63</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=75 M=0 Y=100 K=0</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>55</xmpG:red>
+ <xmpG:green>179</xmpG:green>
+ <xmpG:blue>74</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=85 M=10 Y=100 K=10</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>0</xmpG:red>
+ <xmpG:green>147</xmpG:green>
+ <xmpG:blue>69</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=90 M=30 Y=95 K=30</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>0</xmpG:red>
+ <xmpG:green>104</xmpG:green>
+ <xmpG:blue>56</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=75 M=0 Y=75 K=0</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>41</xmpG:red>
+ <xmpG:green>180</xmpG:green>
+ <xmpG:blue>115</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=80 M=10 Y=45 K=0</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>0</xmpG:red>
+ <xmpG:green>166</xmpG:green>
+ <xmpG:blue>156</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=70 M=15 Y=0 K=0</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>38</xmpG:red>
+ <xmpG:green>169</xmpG:green>
+ <xmpG:blue>224</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=85 M=50 Y=0 K=0</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>27</xmpG:red>
+ <xmpG:green>117</xmpG:green>
+ <xmpG:blue>187</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=100 M=95 Y=5 K=0</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>43</xmpG:red>
+ <xmpG:green>56</xmpG:green>
+ <xmpG:blue>143</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=100 M=100 Y=25 K=25</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>38</xmpG:red>
+ <xmpG:green>34</xmpG:green>
+ <xmpG:blue>97</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=75 M=100 Y=0 K=0</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>101</xmpG:red>
+ <xmpG:green>45</xmpG:green>
+ <xmpG:blue>144</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=50 M=100 Y=0 K=0</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>144</xmpG:red>
+ <xmpG:green>39</xmpG:green>
+ <xmpG:blue>142</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=35 M=100 Y=35 K=10</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>158</xmpG:red>
+ <xmpG:green>31</xmpG:green>
+ <xmpG:blue>99</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=10 M=100 Y=50 K=0</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>217</xmpG:red>
+ <xmpG:green>28</xmpG:green>
+ <xmpG:blue>92</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=95 Y=20 K=0</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>236</xmpG:red>
+ <xmpG:green>41</xmpG:green>
+ <xmpG:blue>123</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=25 M=25 Y=40 K=0</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>193</xmpG:red>
+ <xmpG:green>180</xmpG:green>
+ <xmpG:blue>154</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=40 M=45 Y=50 K=5</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>154</xmpG:red>
+ <xmpG:green>132</xmpG:green>
+ <xmpG:blue>121</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=50 M=50 Y=60 K=25</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>113</xmpG:red>
+ <xmpG:green>101</xmpG:green>
+ <xmpG:blue>88</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=55 M=60 Y=65 K=40</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>90</xmpG:red>
+ <xmpG:green>74</xmpG:green>
+ <xmpG:blue>66</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=25 M=40 Y=65 K=0</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>195</xmpG:red>
+ <xmpG:green>153</xmpG:green>
+ <xmpG:blue>107</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=30 M=50 Y=75 K=10</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>168</xmpG:red>
+ <xmpG:green>124</xmpG:green>
+ <xmpG:blue>79</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=35 M=60 Y=80 K=25</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>138</xmpG:red>
+ <xmpG:green>93</xmpG:green>
+ <xmpG:blue>59</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=40 M=65 Y=90 K=35</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>117</xmpG:red>
+ <xmpG:green>76</xmpG:green>
+ <xmpG:blue>40</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=40 M=70 Y=100 K=50</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>96</xmpG:red>
+ <xmpG:green>56</xmpG:green>
+ <xmpG:blue>19</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=50 M=70 Y=80 K=70</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>59</xmpG:red>
+ <xmpG:green>35</xmpG:green>
+ <xmpG:blue>20</xmpG:blue>
+ </rdf:li>
+ </rdf:Seq>
+ </xmpG:Colorants>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:groupName>Grays</xmpG:groupName>
+ <xmpG:groupType>1</xmpG:groupType>
+ <xmpG:Colorants>
+ <rdf:Seq>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=0 Y=0 K=100</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>35</xmpG:red>
+ <xmpG:green>31</xmpG:green>
+ <xmpG:blue>32</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=0 Y=0 K=90</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>64</xmpG:red>
+ <xmpG:green>64</xmpG:green>
+ <xmpG:blue>65</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=0 Y=0 K=80</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>88</xmpG:red>
+ <xmpG:green>89</xmpG:green>
+ <xmpG:blue>91</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=0 Y=0 K=70</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>109</xmpG:red>
+ <xmpG:green>110</xmpG:green>
+ <xmpG:blue>112</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=0 Y=0 K=60</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>128</xmpG:red>
+ <xmpG:green>129</xmpG:green>
+ <xmpG:blue>132</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=0 Y=0 K=50</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>146</xmpG:red>
+ <xmpG:green>148</xmpG:green>
+ <xmpG:blue>151</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=0 Y=0 K=40</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>166</xmpG:red>
+ <xmpG:green>168</xmpG:green>
+ <xmpG:blue>171</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=0 Y=0 K=30</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>187</xmpG:red>
+ <xmpG:green>189</xmpG:green>
+ <xmpG:blue>191</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=0 Y=0 K=20</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>208</xmpG:red>
+ <xmpG:green>210</xmpG:green>
+ <xmpG:blue>211</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=0 Y=0 K=10</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>230</xmpG:red>
+ <xmpG:green>231</xmpG:green>
+ <xmpG:blue>232</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=0 Y=0 K=5</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>241</xmpG:red>
+ <xmpG:green>241</xmpG:green>
+ <xmpG:blue>242</xmpG:blue>
+ </rdf:li>
+ </rdf:Seq>
+ </xmpG:Colorants>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:groupName>Brights</xmpG:groupName>
+ <xmpG:groupType>1</xmpG:groupType>
+ <xmpG:Colorants>
+ <rdf:Seq>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=100 Y=100 K=0</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>236</xmpG:red>
+ <xmpG:green>28</xmpG:green>
+ <xmpG:blue>36</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=75 Y=100 K=0</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>241</xmpG:red>
+ <xmpG:green>101</xmpG:green>
+ <xmpG:blue>34</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=10 Y=95 K=0</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>255</xmpG:red>
+ <xmpG:green>221</xmpG:green>
+ <xmpG:blue>21</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=85 M=10 Y=100 K=0</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>0</xmpG:red>
+ <xmpG:green>161</xmpG:green>
+ <xmpG:blue>75</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=100 M=90 Y=0 K=0</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>34</xmpG:red>
+ <xmpG:green>64</xmpG:green>
+ <xmpG:blue>153</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=60 M=90 Y=0 K=0</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>127</xmpG:red>
+ <xmpG:green>63</xmpG:green>
+ <xmpG:blue>151</xmpG:blue>
+ </rdf:li>
+ </rdf:Seq>
+ </xmpG:Colorants>
+ </rdf:li>
+ </rdf:Seq>
+ </xmpTPg:SwatchGroups>
+ </rdf:Description>
+ <rdf:Description rdf:about=""
+ xmlns:pdf="http://ns.adobe.com/pdf/1.3/">
+ <pdf:Producer>Adobe PDF library 9.90</pdf:Producer>
+ </rdf:Description>
+ </rdf:RDF>
+</x:xmpmeta>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<?xpacket end="w"?> endstream endobj 3 0 obj <</Count 1/Kids[9 0 R]/Type/Pages>> endobj 9 0 obj <</ArtBox[0.0 0.0 229.5 91.5]/BleedBox[0.0 0.0 229.5 91.5]/Contents 389 0 R/LastModified(D:20120621184047-07'00')/MediaBox[0.0 0.0 229.5 91.5]/Parent 3 0 R/PieceInfo<</Illustrator 390 0 R>>/Resources<</ColorSpace<</CS0 391 0 R/CS1 391 0 R>>/ExtGState<</GS0 392 0 R>>/Properties<</MC0 386 0 R/MC1 387 0 R>>/Shading<</Sh0 393 0 R/Sh1 394 0 R/Sh2 395 0 R/Sh3 396 0 R>>>>/Thumb 397 0 R/TrimBox[0.0 0.0 229.5 91.5]/Type/Page>> endobj 389 0 obj <</Filter/FlateDecode/Length 3320>>stream
+HWK%)^ $u[J6Y
+k>|=-{,/?+6YA;hQ[ʷ/2~4|};JT+w{;dlY؎ubhv&_g.Y[z9хDzkaiG^~F~$:|>UE7Va5k%_癜 #ûwxbc,`z9=GX<F̅ ޹>GP(
+D=R}7bNa@Jړ79CMz|'d5v))
+f鈭o$]yC,Op~"J[,h2 dzEJ ې_fCfɒ!㱂.!"Dy_
+H*Hr1~W1"u au|sխ)Y#5zT
+/jUNdeUF;t9E~ xh0%[qOV#쳦H=T|:v}.X
+)\SsҼJ߱9FQR+Gebc4NS68o F4`[Nq<^r}t!k>&mts6ǒYrB@pweqCp͉spJ%OMN$ߧr39 #\xԏ
+YMC9C>f[9p^g^̻͂ͤBL U*ozUpŋSe-/s_@W3(El^'~+M+ t:mQ
+z_hn7
+xKaҚ:ڳ NhZؘ
+KE*dDWǂU/:cU]XZR#b(YgQLF2(u(jHB
+&(#3
+G_Alpc.
+8;Ue`^]Ub"")'0GFWp'_5aO8mZN?Q:Dj:a^`rLijh,#o//.\;ei?AJ]R59$HEc"tD
+@:Tn"8;LhB=GGfL<&SWT!sSc!C58n~> endstream endobj 398 0 obj [/Indexed/DeviceRGB 255 399 0 R] endobj 399 0 obj <</Filter[/ASCII85Decode/FlateDecode]/Length 428>>stream
+8;X]O>EqN@%''O_@%e@?J;%+8(9e>X=MR6S?i^YgA3=].HDXF.R$lIL@"pJ+EP(%0
+b]6ajmNZn*!='OQZeQ^Y*,=]?C.B+\Ulg9dhD*"iC[;*=3`oP1[!S^)?1)IZ4dup`
+E1r!/,*0[*9.aFIR2&b-C#s<Xl5FH@[<=!#6V)uDBXnIr.F>oRZ7Dl%MLY\.?d>Mn
+6%Q2oYfNRF$$+ON<+]RUJmC0I<jlL.oXisZ;SYU[/7#<&37rclQKqeJe#,UF7Rgb1
+VNWFKf>nDZ4OTs0S!saG>GGKUlQ*Q?45:CI&4J'_2j<etJICj7e7nPMb=O6S7UOH<
+PO7r\I.Hu&e0d&E<.')fERr/l+*W,)q^D*ai5<uuLX.7g/>$XKrcYp0n+Xl_nU*O(
+l[$6Nn+Z_Nq0]s7hs]`XX1nZ8&94a\~> endstream endobj 393 0 obj <</AntiAlias false/ColorSpace 400 0 R/Coords[0.0 0.0 1.0 0.0]/Domain[0.0 1.0]/Extend[true true]/Function 401 0 R/ShadingType 2>> endobj 394 0 obj <</AntiAlias false/ColorSpace 400 0 R/Coords[0.0 0.0 1.0 0.0]/Domain[0.0 1.0]/Extend[true true]/Function 402 0 R/ShadingType 2>> endobj 395 0 obj <</AntiAlias false/ColorSpace 400 0 R/Coords[0.0 0.0 1.0 0.0]/Domain[0.0 1.0]/Extend[true true]/Function 403 0 R/ShadingType 2>> endobj 396 0 obj <</AntiAlias false/ColorSpace 400 0 R/Coords[0.0 0.0 1.0 0.0]/Domain[0.0 1.0]/Extend[true true]/Function 404 0 R/ShadingType 2>> endobj 400 0 obj [/ICCBased 405 0 R] endobj 404 0 obj <</Bounds[]/Domain[0.0 1.0]/Encode[1.0 0.0]/FunctionType 3/Functions[406 0 R]>> endobj 406 0 obj <</C0[0.541183 0.199997 0.858826]/C1[1.0 0.270584 0.12941]/Domain[0.0 1.0]/FunctionType 2/N 1.08481>> endobj 405 0 obj <</Filter/FlateDecode/Length 2574/N 3>>stream
+HyTSwoɞc [5laQIBHADED2mtFOE.c}08׎8GNg9w߽
+ 
+V)gB0iW8#8wթ8_٥ʨQQj@&A)/g>'K
+x-
+ꇆnQt}MA0alSx k&^>0|>_',G!"F$H:R!zFQd?r 9\A&G rQ hE]a4zBgE#H *B=0HIpp0MxJ$D1D, VĭKĻYdE"EI2EBGt4MzNr!YK ?%_&#(0J:EAiQ(()ӔWT6U@P+!~mD eԴ!hӦh/']B/ҏӿ?a0nhF!X8܌kc&5S6lIa2cKMA!E#ƒdV(kel }}Cq9
+N')].uJr
+ wG xR^[oƜchg`>b$*~ :Eb~,m,-ݖ,Y¬*6X[ݱF=3뭷Y~dó ti zf6~`{v.Ng#{}}jc1X6fm;'_9 r:8q:˜O:ϸ8uJqnv=MmR 4
+n3ܣkGݯz=[==<=G</z^^j^ ޡZQB0FX'+t<u-{__ߘ-G,}/Hh 8mW2p[AiAN#8$X?AKHI{!7<qWy(!46-aaaW @@`lYĎH,$((Yh7ъb<b*b<~L&Y&9%uMssNpJP%MI JlN<DHJIڐtCj'KwKgC%Nd |ꙪO=%mLuvx:HoL!ȨC&13#s$/Y=OsbsrnsO1v=ˏϟ\h٢#¼oZ<]TUt}`IÒsKV-Y,+>TB(/S,]6*-W:#7*e^YDY}UjAyT`#D="b{ų+ʯ:!kJ4Gmt}uC%K7YVfFY .=b?SƕƩȺy چ k5%4m7lqlioZlG+Zz͹mzy]?uuw|"űNwW&e֥ﺱ*|j5kyݭǯg^ykEklD_p߶7Dmo꿻1ml{Mś nLl<9O
+zpg_XQKFAǿ=ȼ:ɹ8ʷ6˶5̵5͵6ζ7ϸ9к<Ѿ?DINU\dlvۀ܊ݖޢ)߯6DScs 2F[p(@Xr4Pm8Ww)Km
+%!PS-Adobe-3.0 %%Creator: Adobe Illustrator(R) 15.0 %%AI8_CreatorVersion: 15.0.2 %%For: (Francisco Camberos) () %%Title: (ggp_generic_en_us_outline.ai) %%CreationDate: 6/21/12 6:40 PM %%Canvassize: 16383 %%BoundingBox: 185 -199 421 -97 %%HiResBoundingBox: 185.667 -199 421 -97.5 %%DocumentProcessColors: Cyan Magenta Yellow Black %AI5_FileFormat 11.0 %AI12_BuildNumber: 399 %AI3_ColorUsage: Color %AI7_ImageSettings: 0 %%RGBProcessColor: 0 0 0 ([Registration]) %AI3_Cropmarks: 189 -193 418.5 -101.5 %AI3_TemplateBox: 300.5 -150.5 300.5 -150.5 %AI3_TileBox: -74.25 -435.25 659.75 140.75 %AI3_DocumentPreview: None %AI5_ArtSize: 14400 14400 %AI5_RulerUnits: 2 %AI9_ColorModel: 1 %AI5_ArtFlags: 0 0 0 1 0 0 1 0 0 %AI5_TargetResolution: 800 %AI5_NumLayers: 2 %AI9_OpenToView: -334 250 1 1295 800 18 1 0 259 410 0 0 0 1 1 0 1 1 0 1 %AI5_OpenViewLayers: 77 %%PageOrigin:-6 -546 %AI7_GridSettings: 72 8 72 8 1 0 0.8 0.8 0.8 0.9 0.9 0.9 %AI9_Flatten: 1 %AI12_CMSettings: 00.MS %%EndComments endstream endobj 416 0 obj <</Length 6920>>stream
+%%BoundingBox: 185 -199 421 -97 %%HiResBoundingBox: 185.667 -199 421 -97.5 %AI7_Thumbnail: 128 56 8 %%BeginData: 6782 Hex Bytes %0000330000660000990000CC0033000033330033660033990033CC0033FF %0066000066330066660066990066CC0066FF009900009933009966009999 %0099CC0099FF00CC0000CC3300CC6600CC9900CCCC00CCFF00FF3300FF66 %00FF9900FFCC3300003300333300663300993300CC3300FF333300333333 %3333663333993333CC3333FF3366003366333366663366993366CC3366FF %3399003399333399663399993399CC3399FF33CC0033CC3333CC6633CC99 %33CCCC33CCFF33FF0033FF3333FF6633FF9933FFCC33FFFF660000660033 %6600666600996600CC6600FF6633006633336633666633996633CC6633FF %6666006666336666666666996666CC6666FF669900669933669966669999 %6699CC6699FF66CC0066CC3366CC6666CC9966CCCC66CCFF66FF0066FF33 %66FF6666FF9966FFCC66FFFF9900009900339900669900999900CC9900FF %9933009933339933669933999933CC9933FF996600996633996666996699 %9966CC9966FF9999009999339999669999999999CC9999FF99CC0099CC33 %99CC6699CC9999CCCC99CCFF99FF0099FF3399FF6699FF9999FFCC99FFFF %CC0000CC0033CC0066CC0099CC00CCCC00FFCC3300CC3333CC3366CC3399 %CC33CCCC33FFCC6600CC6633CC6666CC6699CC66CCCC66FFCC9900CC9933 %CC9966CC9999CC99CCCC99FFCCCC00CCCC33CCCC66CCCC99CCCCCCCCCCFF %CCFF00CCFF33CCFF66CCFF99CCFFCCCCFFFFFF0033FF0066FF0099FF00CC %FF3300FF3333FF3366FF3399FF33CCFF33FFFF6600FF6633FF6666FF6699 %FF66CCFF66FFFF9900FF9933FF9966FF9999FF99CCFF99FFFFCC00FFCC33 %FFCC66FFCC99FFCCCCFFCCFFFFFF33FFFF66FFFF99FFFFCC110000001100 %000011111111220000002200000022222222440000004400000044444444 %550000005500000055555555770000007700000077777777880000008800 %000088888888AA000000AA000000AAAAAAAABB000000BB000000BBBBBBBB %DD000000DD000000DDDDDDDDEE000000EE000000EEEEEEEE0000000000FF %00FF0000FFFFFF0000FF00FFFFFF00FFFFFF %524C45A8527D527D527D527D527D527D527D527D527D527D527D527D527D %527D527D527D527D527D527D527D527D527D527D527D527D527D527D527D %527D527D527D527D527D527D527D527D527D527D527D527D527D527D527D %527D527D527D527D527D527D527D527D527D527D527D527D527D527D527D %527D527D527D527D527DA852FD7EF8527DFD7EF85252FD7EF87D7DFD7EF8 %5252FD7EF87D7DFD07F82752FD6CA87D27FD07F85252FD06F827A8A82727 %F827F827F827F827F827F827F827F827F827F827F827F827F827F827F827 %F827F827F827F827F827F827F827F827F827F827F827F827F827F827F827 %F827F827F827F827F827F827F827F827F827F827F827F827F827F827F827 %F827F827F827F827F827F827F827F82752A852FD06F87D7DFD05F852FF52 %FD6FF8FF7DFD05F85252FD05F8A852FD71F8FF27FD04F87D7DFD04F852A8 %FD72F852A8FD04F85252FD04F8A827FD72F827A8FD04F87D7DFD04F87D52 %FD1BF8A8FFFF7DF852FFA8FF5252A8FFA8FF27F8F8527D52A8FFA8FF52F8 %F8F827FFFFFF52F852FF27F827A8FD2FF8FFFD04F85252FD04F8A827FD1A %F8A8A82727A8F87DA8FD04F827A8A8FD04F852A8F8277DA8F827F8F8F8FF %7D2752FF2752FFFFF852A8FD2FF87D27F8F8F87D7DFD04F87D27FD19F827 %FF27F82727F852FF7D7D27F8F8A87DFD04F87DA8F8F87D7DFD04F87DA8F8 %F8F87D7D52FFA87D27FFFD2FF8A8FD04F85252FD04F8A827FD19F827FFF8 %52A8FF2752A87D7D52F8F87D7DFD04F852A8F8F852A8FD04F852A8F8F8F8 %7D7D52A827A8A8A8FD2FF8A827F8F8F87D7DFD04F87D27FD19F827A8A8F8 %27FF5252A8FD05F8A87DFD04F87DA8F8F87DA8FD04F827FF52F852FF5252 %FFF87DFFFFFD2FF8A8FD04F85252FD04F8A827FD1AF827A8FFA8A8F852FF %FFFF7DF8F87D7DFD04F852A8F8F852A8FD05F852A8FFFF7DF852A8F8F8A8 %A8FD2FF8A827F8F8F87D7DFD04F87D52FD1CF82727F8F8F827F827F8F8F8 %27FD11F8272727F8F8F827F8F8F827FD2FF8A8FD04F85252FD04F8A827FD %73F87D27F8F8F87D7DFD04F87D52FD73F8A8FD04F85252FD04F8A827FD73 %F8A827F8F8F87D7DFD04F87D27F8F8F805062DFD6DF8A8FD04F85252FD04 %F8A827F8F8F805363559FD3BF827527D5227FD2CF8A827F8F8F87D7DFD04 %F87D27F8F8F82836363C8A2E27FD13F8277DA87DA87D7DFD1FF87DFFA8FD %15F8272727FD15F8A8FD04F85252FD04F8A827F8F8F805360D36358A5F58 %FD11F87DA87D2727277DFFFF52FD1DF827FF7DFD15F827A8FD16F8A827F8 %F8F87D7DFD04F87D52F8F8F828363635365F8A89892DFD0EF8A8FF27FD05 %F852FF27FD1DF852FF7DFD15F827A8FD16F8A8FD04F85252FD04F8A827F8 %F8F80536353635365F8983AE5E2DFD0BF852FF52FD07F827FD05F8272727 %FD07F82727FD0DF827FF7DFD04F82727FD0AF827FD04F827A8FD04F82727 %FD10F87D27F8F8F87D7DFD04F87D52F8F8F82E363C3660363C5FAE89AEAD %8327FD09F8A8FFFD0CF827A87DA8FFA827F8F8F827A87DA8FFA8FD04F852 %A8A8FFA8A82752FF7DF8F827A87DFFFF52FD04F827A852FFA8FFA827F852 %A827F852FFA8A8FF52F852A8FD05F87D7DFD04F8A8FD04F85252FD04F8A8 %27F8F8F8053C353C353C363C5FFD04ADC97526FD07F8FF7DFD0CF8FF52F8 %F827FFFFF8F827FF27F8F852FFA8F8F87DFFF827A8FF27F827FF7DF827FF %27F8F8FFFF27F8F8F827FFA827F8F8A8FFF827A8F852FF52F8F827FF2727 %FF27F8F8F827FF52FD04F8A827F8F8F87D7DFD04F87D27F8F8F82E3C603C %603C603C3C83CFADC3C2C9C276FD05F852FFA8FD0BF8A8A8FD04F87DFFA8 %F8FF7DFD04F8A8FF5227FF27F8F852FFA8F852FF7DF8FF7DF8F852A8A827 %F8F8F827FFFD05F8FF5227A8F82752FD04F87D7DF8A87DF8F8F852FFFD05 %F8A8FD04F85252FD04F8A827F8F8F8053C35603B3C3B603C3C83C9C2C2C2 %C8C8C820F8F8F827FFA8FD0AF827FFA8FD05F8FFA852FF7DFD04F827FF7D %7DFF52F8F8F8FFA8F827FF52F8FF7D27A87D27FD05F827A8FD05F852A8F8 %A8F8F8F827275227A852F827FFF8F8F8A852FD05F8A827F8F8F87D7DFD04 %F87D27F8F8F82E3C663C603C666066609BBCC9C2C9C8CEC827F8F8F827FF %FF27FD04F8277DA87D7D52FFA8FD04F827A8FF7DFF7DFD04F827FFA852FF %7DF8F8F8FFA8F852FF7DF8FFA827FD08F827A8FD05F87DA827A827F8A8A8 %A87D7DFF7DF8F8A852F852FF27FD05F8A8FD04F85252FD04F8A827F8F8F8 %05603C603C603C66609A93B69AC8C8C851FD06F87DFFA8FD05F85252FFA8 %27FFFFFD05F8FFA852FFA8FD05F8FF7DF8A8FF52277DA8F8F827FF7DF8A8 %FFFD09F827A8FD05F852A827A8F87DA827F8F8F87D7DF8F87DA8F87D7DFD %06F8A827F8F8F87D7DFD04F87D52F8F8F82E66663C666066609B949A93BC %C27CFD09F8FFFF7DFD05F827FFA8F8A8FF7DF8F8F827FF7DF8FFFF52F8F8 %F852FF52F82752A8FFFFF8F8F852FF7DF87DFFA8FD08F827FF27FD04F8FF %5227A8F8A87DF8F8F827FF7DF8F8F8FF52FF27FD06F8A8FD04F85252FD04 %F8A827F8F8F805663C663C66609B8E9494B66920FD0AF827FFFFA827F8F8 %F827FF7DF8F8A8FF52F827A8A8F8F827FFFF27F827A87DFD05F8FFFF52F8 %F827FFA8F8F8A8FFA852525227F8F8F827A8FF27F8F8A8A8F827A8F87DFF %27F8527DFF52F8F8F87DFF7DFD07F87D27F8F8F87D7DFD04F87D52F8F8F8 %2E66666667669B94BD949420FD0EF87DA8FFA8A87DA85227F8F8F87DA8A8 %7D52FD05F8A8A87D7D52F8F8F827527DA8FFFF52F8527DA852F8F87DA8FF %A852FD04F827A827A8A8FFA827F8277DF8F8A8FFFFA852527DF8F8F827FF %52FD07F8A8FD04F85252FD04F8A827F8F8F80567666660779595704BFD13 %F827FD19F852A87D272727FFFF27FD0FF827A8F8F827FD12F852A8FD08F8 %A827F8F8F87D7DFD04F87D27F8F8F82E66676678959545FD2EF827FF7DFD %04F827FF7DFD0FF827A8FD15F8FF52FD08F8A8FD04F85252FD04F8A827F8 %F8F80B6760786B4CFD30F852FF27FD05F8A852FD0FF827A8FD13F87DA87D %FD09F8A827F8F8F87D7DFD04F8A827F8F8F83467784627FD31F852FFFF27 %F8F8F852FFFD11F827FD13F8525227FD09F8A8FD04F85252FD04F8A827FD %04F82800FD34F852A8FFFD047DFD32F8A827F8F8F87D7DFD04F852A8FD3B %F82727522727FD32F827A8FD04F85252FD05F8A827FD71F87D52FD04F87D %7DFD05F852FF27FD6FF87DA827FD04F85252FD06F852A87DFD6CF827A8A8 %27FD05F87D7DFD07F8277DFD6DA852FD07F85252FD0AF827F827F827F827 %F827F827F827F827F827F827F827F827F827F827F827F827F827F827F827 %F827F827F827F827F827F827F827F827F827F827F827F827F827F827F827 %F827F827F827F827F827F827F827F827F827F827F827F827F827F827F827 %F827F827F827F827F827FD09F87D7DFD7EF85252FD7EF87D7DFD7EF85252 %FD7EF87D7DFD7EF85252FD7EF87DA8FD7E527DFD7FFFFF %%EndData endstream endobj 417 0 obj <</Length 65536>>stream
+%AI12_CompressedDatax]&an7gh4pvCNmPHrZJ}} .B+!9[?QO~r~o~~ /^7Ho~vpnȃ_t޿y>go^O/}7={<{͏?|Ƿ/zvϴ#P[x<78%ɫ<PN|Wߝ^@ȵvCw9Ńw ~g~g?p~~~8ɫ/@>9ًz8xN0(/|so#5$o
+7[皱E/̾=G(SOogCowu^gd,`E9_CWߞ_,Wj^f?_?~ϯ@՛篰WW/~?ӛ?~Wz=τ߾y;_ϳoa[ >gVف_wOǙz}g/^?Tk'='ow_xɛѭyc0`zd z3J^}Ϳ.;δwS\}o7?o_~a.d ?F_^ж%y`<pӷ[?#~~<ϟ5wk! o/?i|O_<o?}p4շt}{(_Ϩη'
+7pgGS<^ '?ys8A4ݫWO^>g`s @s43|r?JpJ]Ҡʽ1|_'_{hj
+CRpr
+p W(>XK"~XXx'(xI3"JjCN9CPK*ՠʥ\r_}*tƚjJrrrrÃtvrjvrڵݷ\C_8(^JXSJ)E>vZS҆O?=Kk8,882L MR)Jx)*/3P
+Bs^t=BcA.Ѝ%jS}|<s9s8ϧ|:tʧt
+k;c9&X3ι5X0zoq%`9 01WX7\N,\W<
+{!^ 6>cyV`x?Ë`f `'c_
+a~f{$X8y'({]ma`AUUgW'4w.4,1YZ.` 8 \au3UF`𬄵݂# p'M=*s:=`cF4SpO8`ApR/< mR ,{͸NPn; ed;Wp)r-eǶ[n)7
+l຤ƀBI%'fďOď=D tN\0ȃ6g:qx.`
+HBx~#8qȕϰf9s+,#l3+pgN??WXGXg=r q&܄-#c {? ;>8N:Þ}`{ !{tґhg'x9†>ip=)RDY '~ r]Y -pP{=ܥ\?Z} z7!`JRACsKla2*%oyd,w% []~{JeO:. V']Qgu/kKVH~~Fk,+t>oI[>%G4q3;]yG+p"texe8o.+xeQYT/ŮIVï
+ ċb5d?_&bEIv/T<)B !TP\H9F%'Y')j5xvmOO<;tn$#pPIJ
+p>lt.^P1⭰p^iXTLqYN$,F:2`; ߓ`}YYFc$v>Mz`i@h#~R]e,~8?~8 xfHT|@'a9v~$hNhEj$ك܌p{% 87XeF <@9{XgXaEC(C NZTqgZ} E#,B7`&)=zHş&cW>}{? [VM0x9
+-P
+qeNd=;{GErE6Y6dr
+"ĉ_3d}sM<-d{ȓ^IW:^IE 7ϰ
+üi`njwPG*Ps"i0]fHvfV!Y}dʼnƉl&Ǻ"zȪaW /:XHD-У
+ 'R(}=RHc-H]1.V7>wXѤS@It`= 3#G*Q(L%X\&'eNu~uuy5`aTm϶u7[u}3}heû%M6se:~N:D;ꬬ%IRX?Rdg.,L_IKvjsR,%qH(T+
+ JR(]3mKN\qdV:9 v~zUknu_Mt+2XQ4r)Q&<"g"T'20"?RnDF6r>{Z^0a6&1_8+b(( `E寉~l͑ dZDZ9t"!$zԎbFy$13α*6 ѐ_'C2랰D7&R*34:OZ#.9˱emsdP"%'c$3]7ԑNg3 'KZLp;6ݩwIxdSC Yі&1E. (1@2:EW'?$-
+c[!^~t b?oy
+R,#1Ág!>ք1֬&/8ȃ}?ʙ|g1~]f.= ]Hi(fQI# csX$q\ ٳgOb]Zgf'1vyc=VY tmk3aḠنf}𽌄K@̓<(i0 a55
+f3:ˋ3ͦmޟhpGIcyvȡS ՙC qV3m@ ivGI~8%"_҉rM0Ku-啎;~+U+#i9O-Q/b= iuS Obk֥uiWե%,lrmj-vn(H24`FT^"h&ce
+e`ݲgv2{mAcEr-םr?IPw E"+R?@/k\
+.p9 H-'AgO3=<(s !z8l1@nP9@gZ ";Fh)5 )(eDQ5VsjR;0U#Ն<{JP=͓W=ݧC| n
+'mJ!cqnDŢYOcR;V.7Mx=GHD&
+sc,AZIr`$39o
+Ra@C $w/>a oX#d9R3X!)jT3i@YdO*aN,դZ,c)bW9.Npd RseObզKѻ}(37.8g}<^PPPLheC :^һ<~QNc,EKMHecF[M7(!`"4O2-1Tme$n  gJhW:M(ewCH9cK^kOL+2V|Y/~v{B7Z$8ȠeeݡEhxB!'NN9r/ytǑxE՘Lgt32E\jqh|xuk㪨I
+=7} }%<^:2ͿGi=%r^ӦɶmzMcğ,qU1~UL g{+}N+~~#c'iJޔӴ6Iru
+ޔ˦n04hhѮVܦdž#[] %5G-!!8W%+0?idIWSg5{ԜšzHy/DpٮШ:RYYZLA+1]Y)0+lLZ6qյkO1AGjfx<&^
+ҕwe}TUZ?ٟ_
+MFl_8WhM`0t S%-ݶxx- t~2?˜‰;mwژ=zsȰ61,-kodgc9|{&ߥ 9ڦg Y'z)
+GMpO+Ut֥CI2 oM{bS߯6G{+G+ۧ>_U_*R
+?s}'j^{]sW+C`M82$MׄSҒ]}RN[ 5U&J?it'8^FiQ;f;t(]u=CQ<r#fUd&W^ଂbVkj
+i!RJq| )/^Fug3:51Kl|+^C!xI%]hѭt*\nEr?]T#/s+cqA}1M_,sg.̟6k.}A<k~k_“?VC:LCV*v"9F:lA5ˠ{x*VMCN!bdvj!ai2K;3'Gvp(vrKN"
+OH'yF1uQ{@%x\A7 !l!kxu@z;A\ױ`#99F(u]-?>셍nںƛsf Z 'YEVn۵&`3V e"`3k[!Z RQ*Qj|QIz"[
+@Oo "
+b65mt#` g?WV?f@8껨k{3:i0mx)fIZ㺼8-od$n?>S4[ޯ콿7]T.wE, ojTc]
+ӇHD׆2:2j6VJ0ȞU"^"<1I‘
+
+( C-Y?ϧ(B|T|?5(&ޱX1
+˦zZo*`uT#0nUѝ:DnZL5~O"ZygI\qmpueQAQvt7S(WF$3I/(">4# &Js(.(N8"IE8ЕpԾQxVaB fT 㬊
+me,=cQl;'h3P#n܇p$_*;8P%K~WRDD:HP|߬wu.fֻ<dלwY[#U11^9 o=cD8!NTFW%AzqH'`,EQ -u<wj{qe>!L}_'s͍ɭ:r0=>#I7h!\-zn *ݨ2Vye43`]cqlkCqL5-L{@}(mᩣ1fZa4MSYs?%elMv).A
+OQpJf'(8e)D"fR&`LP rг1 0[<E-cL4nt$ft0q,H@B65x%F4 ]G;/Q'iO>O@j>H5x&mG?]s`Yq^ 3+:r z"O{;u[i_Vu͒V@nu2uy[!cCz.,ez塸˿THv
+-@r3%ڍQ#݀ ~uV9XsEQ߽CzY =  `xocZ%ʴOB]jêRm<=hW/\Ml%QݶLKڰKi@]ľ{z7M B[Ц!+oGe1`F,):jR2 zމeJNcy״=}j>
+}o⨌F?MVЕ)}1ZF4w,JT-$uIԧJYYO2Wy\̡~]uvޱ%`umX@CFAu' skD' N.arO uDDYL9Fù ʷdl;"RȩrD^oMCVd@
+ude]:8]#y`fwRu9DT$rRǔ.(vK@}.wnj3_|>? ?RtU}3&[iaN }+3Ę"_ MG˷U3a tce~iCONMLj,#d!Í7U,FM9ޓp?t
+w=~4uf$`P馑 Z{נ̶uzfןnomo%[U&O>x?LRr{̇j
+YiC{k0o
+AwlK*dY_)Oدo o 1Yyc~>KٿjE񖎰-}k+iz>UƶY(c<vbno;>Ee5M+tڲ7oJYW^Upet-[eyfE@O#v
+ѩM
+t &jPhmY s]%dsܝ)9.mӆ/‰l1٦zݴǩ.TKƩ.\goθvIg|KÌktƥGktW8vH&^jOݍB3݌]٤]FC>eG]0Z ̞5Y؎Ѥ/Ztu2OeHxw=_ ]k/8[f|zޫT4.:y`/'LiԐ[}`Ui!mG_Ξ:I_-Yg-wxO;|R,wkp7`oYt65#i+h{oHBz~}K̘ ɸ2X( soBis
+YʸruXg3Z>c4!]]ݧ_6b*JͤyRu_?=U*IՏJV޼˰e}ohsYθաMbo)}]=ݧ}Tyo #α*dgY3.3
+Vޛ1ĪFsHL $BB̑ 4PB%1 `
+Z#Y8/55m+BqBwԫ]aM
+><UR,]Pa
+ Wo飏zO&T1pɔE+H(dOi,ҹnBI>5h<ձ }NEU&Y>xSO(-
+
+Kp紬6Y>xSNvheC`= TxUXe@p&Y Txm6 t K%F mFdx=7\zpnI8vRźE#i/?NpUY.&ZCVrYm%<>@JJng{qo{%@q~yS 41Y?CYtcJn?*hK!M5K*F]q1nyV @^WrzS45EiV}EUж7&Xk4ɋ{%7ȫFሪa;]ɋ{%7ȫFѦтֻ׍Ee6[@C>n[WrjT64DnEцB\6sɋq McD\>4qODh
+"SÏ׵' b9c"D8V\,@J2T\P*2 %pch$h e$
+0Wme--&[_WB.Xqƪ'y<Ug֫HHW#s$a!R
+G+X!qc;3PET+t- PxKĻ]\`bv7eꫵ24= r.:Z\ q1y'rݫ !ɚ>G%bRJf-)AX?zUG\H~) P%:!)\%Q?MW)՘WABcY%b>Afh1
+Z>I2չbLg q.r0xާ, 5K9QaJ QaPd9 c3E&U.ĂB,dnHZPg7t ]18FxE>a+1f}2 %ٰ1$d Ѵ
+1*1I`[#
+
+t< d|הA"~BuyMɧY4ûi4H
+| ~j(U2?gYԉv| "0oNt231yQCP蜄Xs>{Q
+.7%;0gI.|gHgϽ6 sU ӌiD)
+RuÕZ]3E4<$|#?'r,᳄QJbf $:LP+f"F zM8$ L0 yғNDڄahq QL#1SC1
+Sѿ@Y礓ErPebc7RC*+:_7 IOП9rN*!5BD"1
+caŸwncdۊAh0i8(E /nIv<4=w:m5*|r+8T!F*$[
+J y:f0ˍg-Q3eJB7mKx  zef*RxȴRȘЁ_8dDTy):ay:?Nu"2hHD"\,B_xW&tLDVT*ET̞l+dvhd+Tn.^BO 靸DDrfGg-H)b!s6PiU,c<Pږ32M&\|b"㺅P@ˉ/@~WE]Y(㓓\H(
+RJHr{)!Zj1{zkh!V) uLJ:W\TOt;2@$s%nz!_D/ TXT -|%YEwEE8"nGFQFUfgj
+m޳)n&!Gse
+6SrmA)PaOz]<>gj=Iֶ
+?C;\"D,h
+pD5G4!P(l3QIi YVU ÀPE_2|N%ªm\Du(,,D.%p&VU@nٸ_j[~vB$ʑ¶W3ZSVU:H=u՛Ea5./l`^P+Fb\ǬP0<-IzOeSU9%0R򤱯,=PV-2*y[)س ,7Qp(
+)z:g^Jo:uIU[Q kA#b#, t\NbZG{aPkBINO&<E=ޫifhOerjzDSD$w8gzBՈDV>(JD]Ѹ_}CtC d<ha@y@*"ϑL<@pU&oD朗 s/+:amh'%r8Sy! Vz2ܲ4W;`:Yg9;J⢷
+H`&OIgO'%
++hYm++ 8F:tdpC4ܒ:@5LV1$#Y<5$03YdhEhlxZ  ,\Lt &hrR+(Atf5XXKB5y9ERWf&[n֦Gsj͕EmYE˨MUZ#$DŘXG\ktZPꑷH^ob% 8l U̓ _b.Ӫb@<@P l!b
+ݻd5fnFf<<>O>IS볁 } EץchIz5[Ov&5
+lEZJaHDML?
+##P
+I^En
+>d6 fсpd\7@[ lK Zn RV&y &YJ4xYԖhT䜎!:´,ZÖbhdkp
+d> "N /dl}REDY8DCog+I<H>Tg Vuce
+JM`^Aaxu!7'"-`,n+dE9dz|6\"xڃ{<W4^k,Iepg \NCjd1zEtʎfs)9g] I&ۄ0YO5^ lL8"*̜e#S5S1d^!W5,;VyūfV^mY2{/G҃yG:I}b:t EF?j7;cɴ;Ж
+f%tAqaU8
+sGSã>*?k!;D1LDq+Lbqu x kG h $1 C3hn@JP,*<q!h}|SyւjGxs3S?F8g+#,\R rj)<
+
+"T&w&FFˉ393cYU1"s{5Tƪdn63~voUO-AY.y=ޣn7R"ﻰ1|KA.g9.D?M%Q5J&_daUaPX$~RϤuAhXm幥%gaԒnC{6>kw}Ʉ~R$R(ըT 3@a=R 2A:agW+lղ6\Έg20[先'
+:^%-Lf[ b+֪R=?hz
+o&gj !?JK:U!d;e/䦈9q3+uKM!
+dbpԪ$PBpwV1,X)"^tqS;I6B,\m=yzD#-&zęݫTunMR Qr$: t>#B]7(ma @!dQyġJx
+$FK1IP@TMFgq,걐ɺ,dkLb=tlSaLG&DΊN&fV 9K,/YΆ)f@bE|rI y
+\ۖy^|r AkOXA>4>Ӿ :@nQTuo Nc:M\([ĺxEc{/ DDcײnL1$B^DsK|MNW MW ZL'󰰽*A0/P{\8t] 2b"Ǚ ~DV$2Jה
+>ZԛU(T8芒b]kEԊ }Xe<Nї9Y^B^ X*ׂv ?`~Sm&Jll
+lq^Ɉմ\ͱ;U6P߁Y4 *
+'8.vJǂ$"Peވ"oC D'\2щH.GW0겵‚Mr(lTNFFJTHl e횑 4Ƃl78:Mg@,P} s7f=ٙ3[yC䀪c>ED"{I;Q1POȚ ocoUӜ*3LD$ڬ$k&6DD%cgE9/UytGŁжB u2wVTO]0F{%^[j' g[A rY,%\hxt`+8 qW$1)&E8myKA8mL|exCK+۝Hѣ4kaؤt۰C$4a\ GȩZ{3u@s7:1ۣ0爌v~ձq68h#yg*<3d?sc3aFtCS)uI dBϢ&`XӍ,:C[L6u\
+E|BQ4z
+qc&.Ed|`Z˦9,zuX~2z@Ȧ㏷$ͻϜ m7ռ% J;Dr&@c>G}-A">g
+~#ϓ$Z֘q@$
+%Vy.qMN,5*RfTU4}S4Ӻ$f#{"AVŤ̋bœ?I07>.n$jNJcL,1sS iM(yYʀ櫦5k8̝ C8Ӟ`wIH$.QH8E."
+$ث}(zD<4Tt4flgӗh݂`3Qv ANR(tlBiMLK%AY0-^4w:E.(\-ZUema>!ܑ)~EFI׃DW A(O0<%|Ng,42+xEB A9k'5!Kf=;P4emʉe|X8iJB~b*W-$l^xԁb$:,d.b
+[QȨljN̖ݲʌjFxUєŰ\.dX
+lh'/j/ynm,ECon~lS@^n[mڨSNksևȋF7ukxiYBo: [&D[
+l!!tߙSgVKnKg&EZJčn{n?-;D$Y9IPxee!Y0DAE vW[=*+ [%ZU8Q IJ]4Q̜a2tr`Ei] TnF%+QY*Y7ju֍:8kIJ֍yJYxouF^5:ҹz@1#YJڷ]69=6@f^%K:9ɋsWrlph hihdN3KKabzi>%8T۰ P%Vɜ3{vs2Q@޳Ƣi!qM@lEPΠ0^IB'a0/W)4[ዅ8ۅ̋S2(P_Ɏ$hRkdpUg ~\+%?ސ)M%7RɺQ Hf-w6T"QŜC
+_'t^ |Xw͒s⇄2&G6af T7 sںw#, ȏm@Fk+E QɣYfrys)y=knݽx=vZ.WK,iJE[z\z#cZ(B\TY"smW:Xz:HMσd$PA+:%Ju'x~(gND;KDͤ~u!-bb9I$#'7m 7뇂&ΜXPW9kqVOYWcaujΊ3 :0u1JH,\f] M4YUk& ax߅,u
+Bd
+O!-< W\!99es(z3+'092zqza:4)'˧X3wgB/rEf˘[F %$EqUDThqИ=qQ?cc j[Pk΂kp`[MS\?A#o9=bROҋp2Ŏ2=R& 4m穨ejccr}!c;R^ƚE= ȯrrHYCd6翠hi,P|LI_٤CN9 & NC{my\FaT'1xW4yy(6I#<Lde!xHmd[f#b֛}$?8WY:vQz#jc+DksF)` ׯػm-*7pBA $΢ %;uP~NFk jJVr
+0Qh,?!ab$怞o]\K8>جbVx]}z_4kv~%E{9A4 "21kjwV)]aQ+]ljtDSr̜?47ɱ_$')|cT_;c (7y `]HTw2hB['9|IsImэ(\=lx)~{<pR^1vV%ȋ7w,#0h<:BnXLhmXy 2uB{8Ɋ]!"j:y+A^qwhTN^+mHnEUOZ ȼg{WnoOo~_=yٛWL<={gϦp+ݺ0a/ ~?@!~y⳿EC3P1
+DvEdʤLq
+ܫ>N$rmȰ(=oVv&p1&7B€1 L$@bX7`OԐB"⥀h`"frz
+ڱ9%y8E uQE;/''bFDQ<LA4+p9Phj&zWd$EUL[}4oD͞jv|G:S 4'%fRA L2+]QEQ7ZQt/i ys,SG"mzAkST'lQg.B](~#2eyldފBVo;D7^^Wvbµ*{ #5 2I+5!$+ M,1
+ t@gA=/QD o C &DL1YWY=e3AFȃR?Yx=O/Bl&^1(@a\Af9 eWVCȢLh|L?IbcYBbX |Y&"e//LY.*bTd>('Dn*'*U8PJܭD .TDecMkhJ\VϤ\g9)K%73]"Y;|:aPr[r(y_s.r }ڱx ;0C@9=^szdNJ;̗z(?+=3z A͡1$
+</t㬑~UΞt,iۙ vr_*wk)|[z#uD׃QbaM&3,%6Kz)אnr.,X2Ԟ%1_1&{@ O@<.
+\Bģ}ʹQ;A[L+Q6fhsjm":>B2gc=JyV2Ӳ S_fVN78iT-&"13Ua
+oX&*S)dlfme:EuPK,<&*!4Y{tRdQ+$&ֆyWH:׋A}cb,c(,j;(ǹ-*Β^(zYH Qap$Q TU-zi+EL "l9l@b ^GTDWuۛPT@(?&fYW]v ಐtj3N#zIsrV95~N CSs= qfbZgPA,!Tz{ʎ#[ ǀsZ,z@_,ۭ b$vse,OVdS*X7KF}rg!+RhI+Z}ŒKfMqz~청3T?,D,zN"eZd8Q˭V[i<kUMD¦%U#ѽ<1*/cmfR/€uWq9d\ACRV]\tI:k);V!!2GzSl<Fn}=}KiX O}l1R<by[P!+PZLnʡYL҅SuSW7tTF5=+>Ъ'Q*@,*ԽGŽiEUG,it{[^BW*V$=5|*Ī2ᵹ5R80"58z:[v 2ol$Dtnt37!j!MN{A͡_]z.fM߂~*TSWa#뺳hzkꮘGeDGaZ, j BI>*, q:\Q)1SQSe"?R$ ~8Q\ԮFx̄$69 }nzqQ}YPbhVLK#E*ccϰ_T!!lQh8 n꟝&xՕjױ"tJ˳!@"w; {>Afq8ϺaS!Xx]Гwul6ptZ
+R`>H+iTU=2 0LDRDIMd(Be#P4k15ށ0dzYHeӢ*ݖΡZZŪ爆`m>
+SN5)p<v/l$րS$Ibݿ$>E. 5~RcTIPl$NQz! ,w$,"X {V${ BT3TCmG؋=*(+C1A5'B1IJ~ۧ1IGJ f|BHXdE̵E(_洫NAZtXFC6?ELŒ@3/\P\5:g#䓝XMIj&bs>ɜ2R8UHYH0Cv h끟)$d|P $a YMb7'_$+XV IjP<Y`$*ad6y:ATKVfl~@D8@UL>p1CXprCBEMޖKlrP[W*?2<bER>h,`8e'wvFWEFIڠk,gIAfƫ7fsק9
+ V/> B$$bcm it@Q!jكcRɓ- %̳rvfˮVHd^Ķ- `db'#Hj&cyfvaDrJ,vB)=HR_J&_T LVN;-VeJ
+WtOʊ77!
+nYApsՏВS1`;4X5U'5A!YFnRnHwP\0Y0nw\IΆIRܧ
+Ld>E
+a9
+vk9Ɩ#8H::)C-'D()E9^q$E^SiYtќENW*f
+!"eYRW<Mq_"#H'|ܵ< EJF
+ U\
+Mz\Võ۪X1΂~ٲH10@xܔas
+zBoc[Z--$b"/lh!5/-wy)3)'tmFfW=zT
+ `
+U^HF )({ ;ME 8(S&ȴm.LK al(@\DU^<΂XR< tIW@Mj:F-%שm$"
+I*`iEX-ԛ %띙hdǕؚAbZ#IdDLY+*lsX<>Y3R<#u~d_bD8t1t^; @
+0L;JM.~[_'E4U|pjS$5)8SiRGGysGc HZA̺Ԫ4P(_?:j|3ȩ@$}<6Up5AƩ>#|MҬϪqGe;j7G+PZ&M +TQ*#g =>(cѢIƹi\i&}ʰvDb 9V LiM
+9Og%+tE#u 3ߝm/;1/I 5ﰎNSXx,řO9v%QQs|#kW"zC<9g$;a R?zX8D+bjUQʉbP,5BS`J`Nli g<Ո-D׳Uw. UcVaNR3A-o牣DJZ=MLqYZgRTt%G@4O>
+<
+ZIgv$3#Y~4k.d˂ޤCM`
+VH![GQ!0X859Z^_TLF/#B!cVe!BOFK6?g
+ܑ>X(#8y&PRxlFi R *bTw 9`U7Mt(Ƚ9:\ҥm̕ς}8=swILY|Rdt۶`66.tKY+=D3,LSSD?2 dCU+4&E0푰 P`^1i@IʂKf5N,xj6jNg~
+˛o7zғۙKVJ!/j+%}r
+;[=hpz#xwq)}O!p_u;8b`2.e1
+6S0lUdF̣jy9P<-uTAj؏
+@!" a3H!Fq(ʙ c3é<O_F."T{/%"F9T㋲U!HYs&6$9/!<,
+#25auXKP) CtLzU F2iOA5=ܝMbF =u$~3*
+*8.qP2&S&v
+pzzq4
+R
+i
+k)ab%4 Q2M(+9?`I=%'֋ R73 I q(8wa ;NAJwC+9gg$Uh^B,\l7Ң1eސH;,.3l Ɠ3|U [Tdj 
+4'νfrc “ɺu&-* A?Aj}q{LS.фZU>q}DZG7'a>FܬY(h.GĨP-sq >`
+VP0<h(kP>LA4Bl3ڪP =L6@&M(yZU"
+22R7"GL4 @4fVӇ"\ I1fr$ץ@tA?h``GqYpG~bh x#"$pp:X#qH!(2L&V@'K>Up9WslKiEJ̈:rs~z Ũ
+- 1";I<-θ}`8Vb:ˢ8>9$Ntl)sf 4 с /1I%V.m*XƐWBS@A5:N}JnB9fNatoBRfMD=PfZ
++D|E9uMK
+#!
+eFX w7c~%p,Vب9 1*,C(16rk?1#`O|1.9* $c"jfn,)jsLXtp2nA əb/O#C3W9UЃcM "֠]4vM@bd4NJtEdl˘-,O~8Rq`"t; wJqԑV6
+L?m(b_),mCfh4yP h"b 
+GPbRũ9
+ 94:_., "t֦D8 "S ݖѨ͕yŒیi$Wa3`J @!S|8ɳ.z:lPF7S_Ac$2O GXLg$
+؆XɅ[:,#u'a uqب`ֈX@
+4Q%
+بŨ
+!;`=P%x#WNNF51Y,͂FfX4®e&Ih5[udeʨAϓ
+mJ1}B43"+%{𔙆kyF$<]6*ȣ)yUu#`| eqČXepp/eهQY7QAXR#FGJ]e o𥉉f+eԍFmӪZ} Hi4
+ݔ4x,:xIV]s
+{t[QY9pET 9
+im1S
+2&h9I7aD
+m(f3A#I &|*̇zeZ`orڀ4zPV$VRGuf 8X0<'
+]7PJuRgQ[#%U"Il \㫌qRG<,Ƥ]#+jMqCQSU;j3 5F!b'.&sE
+ mk*Xm21xp-1`qE=/NEu8E1-%QhW i 0J5FJ~k/BҢ3YY'`~UN 8lQoGs  ,x"Y8+{(=cK!Wƒ
+
+Tb=(/r?TKɞGUϸ^7U&fcmqMI%f[]JZAO]cm`Ě!ZMČ
+%/)jʳbcXL䑦I\UZ$
+qUlL6
+;Y$o2.Kտ0O)[W׌& e40 ZG8LS|&sb%E,
+8TIq1R%V,)/>
+. N-S.87m?K<vmHT,Z1 Уe
+8>
+g _ M\t`ZThUA^J%01ƾȖh%P6'i׻z
+HTzZ` m-S
+3yptгvga!;0}ɮvP $N ,=,O7{#˥[e1 %݀HNM׼.gj#}+
+Z`-1#2LXb{9"Ԫ2%Ыԩ%HX$?PBr sI3/yYTh8V@ 3\YNފeeU0q|¬tI-c.?Eթd<W~s୬ kdHh kpiS{z9Qq4 0AbٜcTb/!o.sжp+,u=EM32 OMZ묗 ^\Zv0ґ0RZ^GHE%D;+&X/mJ8`πXzOV:WM؋^!FulOxh\4X1Qcm,3y KP$['' pߑ 8kVSjրsL*`l|[є/k N #\N,0k%;T 0)+n
+Il0 3 66 & Ca 23RކI`if:={\B( Ʃ`C7-fG^pg|a7O HJo;U[{!: u"!1Cbh~ٌA)utZ BnfdqǒB208ը_S;?(T:z%j e{ 9}HhSS(/Ihxg~km
+a&#ޠ *[)oJF'2,+c7[,4jwɔė/se"€skSnSs<ݖ!J43L`#TT-5++fOФW"&JR0Z-ݸ+J43J%[D_oqT)zP&# 63F(G i&a"|hfy0O:-%V
+A{66[LzVM,>Ȫ\h@%ƅRImJ#STe<H9h5KWtle
+*R&S".*TL.24;:|&qR0HrkCy#m
+Ȓd,`<c ȇ6=23?Q*K3) 츍pcEsTi4
+Vgm@qA0([Yx['Bt`ngW*V)R΅h!^(V`8aAbpZvT&"
+=b6ct".O\*`N9UCN{. ;" vq1X@Y3+$_$`~|i Ak'ҩKf0 8DKS<D
+اx!6LꏖPׇuݍll{I
+B [|AEЍ%$X^v#cL`o2
+Zk#jHq
+XiV+e
+XnLl
+>̀5SƾBF"8H3jzn
+$h½gތũgZ8c#[Pę9YH7i޽kT\v0 o4+ӍON,X1*3dvل2q)@r?c$,RFܬ0 a@Oκ4Zì} <Fݛ@U ё+mA 0&?]@= $̨Feei%tT Q&q
+ʀkY>Jnmn
+.@pMi66lB`(q<d#c#'9o
+q8YոQ3
+ptSq80?ĉ} pd>
+n\[ixXsl,Ǥb> ptO'*4Q]3TNV([2vzDi`+H^x|
+SzZa "z5AB cŸ<~]caNC0*ozKcR1@^ "; Qo洃]1=@2 ᠼ<* iuڹ
+rBG^do;Xᶻh8d]X),~ 1VePOh艖-2>1 eQ ZhzsfMviLN6GKV2ZqRLKHld!R~M򤲂E=@#I<
+j-!QEwr<l \a-ZYQN-Ú`Z inI&NU3~MɅKEDX)G%&f&f8P:pMxJ32͋tjCuPk%[A
+%cѣL vFLZ~)fya
+0q6js=Y$_WU8Ǣq:yʓ* % 5dƫGL
+n2*!q3ϣ2 QV& E$t
+V؃P$&+]5ڽ {ԣN-2-Q@LɕUoc:5˴s6TnBv}C"
+bS 孃k [5`F-l^GTEkrT6HVb+PzTع`uY&ćh1uZ0N
+&{%{;gźJKijo .\-ZP2DZAE>EU?-W+=,]p)wOr\jSIgPkfTy+'Kiiwt VHh-Xw HʊBmB `kK%u`(lCf(YUu=P[:EAZ
+xQceRNh,'>-y, 9W)UyĹ TEwI ZIZ\7{ PJWq"wv]PҵR=",KpP6kWy*ԥ?PuGH?> sSj{@~bB+$"!pި/椡VrgcSer"˕R Yɢa Z'9&iU*<OpY 84K
+̦kX˔ XVf1.W.P1"$t ,밨t1LyL_TybiI:ޱE9|"; fy350b0--*-T}̽"Fx.XɖqtH>bp-(=J2!&,a
+)ـb@dApԹ,.,قG{ѭ{*y\py (=!5|C
+9U"gD) %Z<QHXAuiX,,V[Gi"ZԮ"I?o,V(9 O舞c _ɞ B/-A
+*'hXBm1U.A\QY"g&mnG ·W=zkRf$ë>+@EHrIԦwܧx_WG*e!SP
+ݵ'~KMŵmN$=J&74 }@Ջ8}2?$ZQ!gA`W&/کDT.ꨫ73X,Jj<r
+eH ѥFwFcµAu,REXTɊ k^/#ߕUj)(!>ƫFeu 0c+cţ8(*%9Idj8,
+-vd>diU฽L =b3@uQ2\rJ /E|Xh#` ]f`dq׃źfzUt2Вl>&2;Ϋcv4T-8bߛw, Vk]t4A
+e$Iz4Nwl$4GM8yH=d)'&#r>8Q^uaL 9shI6MU.;gY AB/d86.d,LUnzuX =Ij g,ct:6]':ﰨFةF՗IB7m]C,mEm]WI<ߋ(DChne
+#k)k*=`u]$5lj&脇Fcr҆l
+bu]FE.g
+PHBN l1% 5&@fD.J]J+.'9Bb*}֓
+ 8&&=d"
+b7Isg>ʣ{v.fm%T=bB}
+ xv­.qMaמ40Ikͭ@C}$7PČN鳿wK3/~eNj_}?޼<_+W-m|u.;Gp_gǻկooO󿾹Oƿ}}q7gw7ק'-og䇺y ?q`=Zŗo_c?XӨn_{ĸV5"~sLotvwzA
+́;gU pc#nߛe|1/_;oy}q#ӻ~U}IW7m<ݼ=;7__jhۃzǡCMg8?/zw+z9o/^޽]N︆~ח|}_ha,={t}zЧ7z?7~s^ݞ.o.^gaU jo=[]7ۛ{{soo=!=[
+7Voן^1^Qї2,݆#U٫ֶoqqJ
+XϷyy. W.wF;jλc~:../:?纼P/(5gyt]1 oOA"2q|yqw~s6W51{CÃ?,1? 7s/.kQr]7WZ/\y7L`^lsM#ͳSyCuu}ߧZK+1`-p=m]'l]dYgy
+j${09[WaVFȴG|l
+]+v]Os(5aֶQ
+a9֕ANۋV|2 FnЪFBݾ7wlo ؛'S eeyϮ~Bvjouf>(/|y+ҟZPu A^U5`N>QGrpڇ!}yBއ!"!}yի7Ohތٛq{39qߟ_^|Wן,'ˇ\\}r{YOؾ5d䭿xh\,݉eN:՛^u"~~t6DYרG/"Y<6lyvon_-
+gi.J:\),a9[cc{Ϫy[r<f#nQ
+gߜ-;N}zN(v?Nyw~iwz{3vwD;6-վZ[HokޙFdF6uEۣ
+Qgk&8^zlo4VQ}2']ݑuWVuݟq].V/<s]yS?tQ]<;7N?;;}Y3fs
+5__^jVag"<]iu#yb|
+PkW_ݞL7ڗj?/ 2I11ˡ?=zHO}募z/^_//^#Z ]?jrp{追%#y_/?{}{p;xIoˋ~k=ZDQ5ԃvT}j0,C9(G xpZ| Ր r |=XiTb;ruCT|CQ,1Ж_/p} #K=G>5(TAXӗn?jG9vW|>-#*ָ5e?uyyZ^j^嗗-Bmy"{ͅe|wGeP ,Ӑb/Zm|i[s}Ջ},컍/{hNW{O?ٛYDg_,enO_ȅ3h5dea4Z eLEuSKr*-ާ#_cM4RR/isM EϷܛ {|˪9HBesҀ^z!lhdEu)(eNiId>|rR܃{vMևT;>/~EZ3e-kje:,eyixd?|$@˘$Hcp޵LD45wuRYmH
+nW5Xe12'g˥SΣêan%:b71X0 von=K\׺=oY:g%ܗ^Yf7I?x=W/Lߚ,W+[f;o _yzZK>ρL\xM[ϿZ\Ҳswm/.k=YX~m]u`[[/egu\x@.UTƽDqlۻ@=/Zj7;nH.$.t6gGaћv;~iː`B.:~k5cK9s֗1Y<vo\ Vj*7c(jb t
+w.=)g+.{Aa}\Eg6Z.Ut켜uo&Rѷk1`( s˥VS'ۀ:;fLCŴd^5$8v)OA{mS!p{lM>"hHO=׹Io7&R(cy-/Er]ZakGB~|,>ߣqǶpZfY `ãcI 5לV;Ȉ5W,ҷmK^[/5([S<ev@_x}RTؾGprQNrXyF1`QhKOpjh$?5M|I5oۛz~a[oP)Z)-VZ{1pF}Krd<wQEAFXoEONa-宎Dtw?~͇ұaVz_kXFjDG_4n7qt~e@_}v'xk'&ڎk#`kgk t%E#mR6e(1S8"YN<m\מZT9^93oﴮ$%龔kc(TK~Kd+k;O5u+^hҵ[ ;oORNnck^X+W>D(~tQvp*S,I ]IqKYrDZH4][4.qHA cqmpdx@-iPy-{Ƿ[6i6`5l'S~dm4Ie4}O/ק}z֥HR&MKEx|Z,.U 1GW0P:{{;g䳑d?[ȥ\E뾗
+E+G-yKWmVH?-Vr4rv-ܧ|^T O4c7,Ls)eG~#r?۬[/Aԣ< ΰ%ƏjhgyIc+^m/
+q\`pkA!{9<ΰh4^m0[}䭿=_F:l7^[:كDG&]Ff_MT|Wzb ?~x^珶Ft {}r
+Tn0ñ*~Wt|ّݾ{h;B{A&~╉= s 5+e6k:oh@r
+>"IPg&?on^] vw<
+x-OK_Q
+zJ??w_{?0֙aŨorqu=gj.8 wv5Zye~|Hg7CLJ0ޘ_p0t_X߳Tw
+QGd{Zg<~u,b~x\hX$~s__wo_Td/?zO֋7E8\З<m;3[.(1U~Pۭ+>?/_5
+~.~ro_L4
+`m㏯vR5/߭5,mڂ3йW7Ec6ڕ*W CiPk*:XMi,M>d)0p`OZFmOc)dy̚"(k' @!3Eke`\S18BXOf[>#O+MZ=Og@g 9w]ݭӑ25T?WInR!"u.`NFKJam ,:H1wzѭk):mhRH|}\oK:[&m tf$݁5 .: ׶flIpu6NO"
+{S]2%y Y?ꔋzssQ/_ ,%PI[O^fޚi9gZ(258&ks{X?h|EE}
+|(zܲ t^F.r {w% `K8¨^K]>Fkew1n(n0L/BR+A- *<ˤ)ŷI>7o|X=?E<*
+c!`@'n+7 u:d}­2^xM&$p:gҺE2=(ӗ*cHpS[bvμ44Hvb:=T10uKA++T&aX#dTh}gM3.PjM(`aLSYcu{3QT 1Dųd$;gfLe
+>}R%iDIA bj벓$8c#ati`*S%6L@꩒+1M'cS,T&޿D34U˙ↁi䆄|}Onֲs0kW#\-0RpXKyfYnM!ㅨ>{cE Z#X( ?V;lt5Ćh\SNi4nH;=椧4>%VpRaIkew{7{? OR+0bRՁ ! Wa gz7J`|!:ٱK¦=!oN5/;L٥nk-0ɜ5ᏗsWpV}Ǹxig-)U_OW^DcQ&YΥ"H2e6E=)Q}~+&,נޒMp[l֯" u}kAK1"| L6%0U-\ePi/:{]46LtF."3U0dd7wͯߍQfh$ñ ϵ+{_Bp:MGTEy- j G9BgȞx#6&j)tq#s+臦8k!b,$s;}%X@em@6p̔;yvYؼ3'i ZBR7:QR")\X/Mܖ*HJK¡#
+NdjO1сS
+!
+][SQ_c013ƏFwW\}BE=!x9С:!$Ao}n){(SMsx{۸̃SH겜QX0 7G[rg3lڌ5^o
+V'b ͺ'¹C eswu?'O7*!Utx'st޹%{M5/vAQR0:sgXj%Eى<x;# g}{K5H8裳[/M3_.Z5 f^&:1JTY, "݁rXl.hVձ;NpvQ{;La6aƵN;K !/QGL:~S~o;X94;'ǁ<Bicr<w/`N:QnDBDq`C\RW#+n(pI`lI|2K$t9:i6r_MMDZƐ3T>y= lJS
+6RFown%ŋY$ byNn!WaU |p鄮 'Մ~rn#pb/O}l):m«-z"X@G2i$nzi$_c,؝xvl#zz07_ޠ-W}߽6¿Gn2M' h'n|O:\.(v5I&X"<QۖN:A`,v(:TDW-[ Q2\)e80c(E~DKrTǶ=Hto~1_IvN!M:m0'CPj%=n$ [qŭ-b3ZsP5qI歓*FX
++/A(1ߙe
+]-BDL#!c Gi.mGvG"Ҽ$GNڦ's"4 ODdޝ_r1`=XϱRxO;H'I֎zi;M>f]P8 [#|"i7gf!i8_|mj_FF'% qI06^ _ul$XcF,S\?U5671310|8w#NNVX]Cwa^f:r0Q1'}LĎ\ J߿ endstream endobj 418 0 obj <</Length 65536>>stream
+oFBFuiRlx#+q2Ŵ@G)náze>?F!8rx!6m,esWh,IX 3Fnō
+3I`'"B'81cn0|UEG%µGeH8j\g8R|#%w<t,6fݎogr AgPD_ #BH?66]~JD$e\AEۈQy,m#}xCJڒt;E0;)æv@l
+2PwEZJ|9
+R-; _.*h]Ab>xwy- @KK<O1k 7˩" dڑG9_Lw
+QbǙ JZeddNPSW$v^b1%U!FQP[
+?[B%`@P.xGgN:ǮYŷj]iG!C.TX8 \rA"`;rw%k<V^s'D}a38HN=&l֙m͇&;>.!ѱtɠroFmSR7PG'U<,9kr[~:4Z׫L%~+R#G%|zxVCBk/%[K笒󄪯b>㜫
+
+: %h , dlF(BoQ~!L}9K.$;Zsjӕt˶R1ˁѺA9`9-3h,sw`BcᰃӦ
+M]&k !nh89 |$&=.V#LOpübcm$t pkFরv⯡/ eKy
+u
+Qtņצm"2!P3"IdOQ}^s;`"_0nK*@-rVxc$:M =4lVn[ۘXꅰK+2N'$%#Me08)9zy7_\AsϽE\F7<cw<ڃn 7#F_j}MJ,÷/CXi7P/x񶯯+Üe-ASaCKJm\:v FJs@msʍ4 %DܲEo4Rk ܭ#Xy\t$ԭf9fDf
+8E(CG S3,n˽T$MЅ)LqF2:pL mO>.}u_ 
+qJºi .yaC H')
+Jz:1AF~ɞMU-MM,Wڔ yF{~̋~YC>:H|X:$B=;R2 '
+C1Cv@Γ!j AAܷ4To"@XnKJ 1Ұ(mn=׻"iV@ߊ- w2ss-B HOA!`}Ht]t'bacQ3oFY#oAT`[
+K˔:FS
+J4>m0;}Zz+ɵrDUTPH/ yb25(~[a ȑ]ʖfO3RL~AFH@E9WkC@ qƓCq}Jt18Фl
+ʓB]=voEի-Aҿ{2B]tT
+ 3?#r3"s'
+#K L s 2=xF{ 5w|Sb
+X_g[RD癁0R4u6ZR8\YWy
+maN;QV?yhKCpEpTn C zH7 ^ؗ>ci#IaWb2qθaP F&yK<
+c<YЩ39oq D|~B>s U/c]Q˥IZG&U^k?s@n€Sc'>QD)b4.>X&Pl}B"N8.Od)7z4fsL%ʕ}s2ga2!kW 6j65hR<I
+Ċ|rq=$e#IC^9#(_!Ver9Zk` t9oͻ
++#~7Ja[$׀Q^RTR(7 OTbbE)BqhRԀHȌCv{:Ӝȝ <;\16kjd`”ڳM#6iL Jx{:\Nf7FQ ƣ޶q|o Qݭb!l,vBn1Gȯal
+`bk۞%olfY^p@* 
+]e rDg3])|=aCg`k6wxDJU
+<!4(lvqowR*嬔Inɨ7Hyf8ðV (7̽agFRTT>zæ'⼴oò ,J
+dKĄdדgY^ElwL
+P̶Ysl%-D*1\$.sяlX[x߾T;~|>u|_aSWo_~/7s._~凿ow_?o7o?FOY. #, O
+8 Bn G mEBݷ{D~3 t!q/ }W֧&U Ų[_TT"p^6x"{cC_Z1yes5jeh5ӷ:4.D!pXw<,D?l%@sKd`o>~*8\SD^Yh`^/6[-n|۔ Sei2吙՜5034 EW&@"GSr䞎TQc2;ԄT_`/mgxe1>$GjNqr P%aYAcAf+*<
+fICq= s C=?j{Z{{h5SerXtwˆȦ?Dp'qȶ=I')M'=۔
+@(#@6ۉXm0Oiy#m?\Kd}rosqj9?$wA$y;_fkjF`ohO~U=>fmv!/>U Dp\6{7> MHK6ln /Ïz`%8T54 ˑ{r] DHedkDE<ߵ>_
+*9=~ u9mФW>Y%[7|$jC6N 7HDh<Q F
+K!Dw5Z#>M1y*ήE?ϋk
+oKڻkMg<F1o3lXJ JsD
+i֩hXCB"d_ʮv1\:l.n.v U5TrrF
+kU {fca:{$RڻCbE=`0&U;bF,N y>zuM(Dpw]~d/ENMo ғaD֥;CY&iY>W  |ZlV^\min)ER\RIXM sGƬ%fM'X+#3W {8Tq]>¯EB'y@|wc݆̉T壌`޶w 8ޑ($|:Sp,{ / x9.LrY.XS9fOCêil?К+4BT(E; BQlH6_N㑽` ;Hl>!,C9~z#o34Ιehw:G^dx\Mv YrM8FLS]x&,{^-cS\#0!-FLDGM+u%5]1|ψ͹gH(.$^ڌ
+|*L(WI { XԲ@Utk Xy|S7wl~"fK%#Du6"ϐ"kFx&^ToQ{S7^ .\l,%l,Z?0Ȁi*baD#QG.,iH9665S!| f\_Um~l < 6s$CV$x}955/g$6B1jKP@q, "@M gDkW_<Q-tۡوh7z<a*e3fMzSEp;a%y:/ԿϑGq:eSOQץV%
+hICʳl@}Y#j0A
+R`2WŠ~k
+I.,3\urf;
+oVfC.3dZbWm:wrmEZ#!l"k9Eqs]gESQIb1NK+n%ᨶ9AtAm^$TU82Vv
+J_@` 9(<)p"IctHG]Vw1>PC-٬ƢX%,֎
+æSe4la"{)SX3%mIbb7`F
+}Nj`þXFB&@`)M!'%?J*xpYN{Jn]NEcܩ
+`(1Hp{P`'5 unI?Hcyum$fu>l>Rbm<? d1+#"kh <"vȭn-}{g% g^RǧbRI  FNH[͔/-t)16ė3`%c
+͖6?Ѣ%IcLV'\'W;D^}=PQw tHEM'Y()/ύ@5-j[|D2??]k961`emմb3h؏ta0%CI23< #p;r.TZ[ivxCQH@پK
+b_8FFN¼E&j \vN{ŮZiZj竔
+1ŚkKZwc${G79(;Gx5u[+C1w$,!aGvQb[# ?0_6>PX@*dqලhY!vXرˡ8I7c  <N¸ΔP8!S@b|is`8%&XXƸws Q/V_PEt48Š Y˩<EΤQVĪ"G:6P[sCCd]5h8R˾>mRD u_dwg+ UdQRґlRoNJ%m:lE; –\*͛c[GT: ZmVOQ&! }d,< N96ۯ9g:J8$6!xZ^s,Gڜw2c2C'7A<pI#b DwgXK31(B[6Qmamz[0oP](()s\,|wٝq'rDOȾt Ϲ#儈)rW(e>[ߛ'ڶ|g0{)FSn*X\-V-FE. C.ʋTZH7 i!
+ac&?e;T34XC
+ĔTߞ0ϜPpDOHA̡0+׷rv䨌Il:}nÿ0 8wKI~SH8 [rj]"M\wۑ޳.OF#5ʓAݐ"Ұg.oYN@lr. [J<a+u*e;fD HQj4/^wRI-f9s͞G܅aDir2643L
+VD
+ A
+v$TGqo=9h"-8)%$Gj=KXCf{H'N5#
+ $JMd.u=$%,6qg=CtSj[wiu=7SbJwО+M8ZD;"N͙Fs;"T3VRWiyKwvI."ro,69T `pyXQl]7[km II|Hvi9}&Oj?Ĝ3$xJb$ͱ9馽bΖ.
+f!o9ݵ-bW4Zl.a ]UrMD$xz0]0IRjq$#YwR%@QRl!o' [GN."f|٣]bXI#XSեu;]1(^vP<;0BlO;E?b:.R( aXv{t?\ni࢞:}σfwoBr s5הtټ09vQ 9 bC~1Ft̹ :3>q,qEkFE!
+X@^x:'HetCƥ
+[iAg`0 b+;kpQ᜚yf2)oYp"! <3xpu?ձ) RM6qXT.oV!x3mb}POQ9v#Z|| NnlWB(S$
+K%Ǩ~`>3M5dPZ <PL]wS~,*\tt}y4&6t
+
+|`Cl66ް#lnGDt3x'מ}p._絯Q*#O1si/men=>>>p o}L'  (ޟ*Ceu1pZ-m$\'kp?@gLspnH|ٯ;_ A#=hJ wD)8Fx aؗFƟ̚X’y8V
+Ꝩ$Q9rU P$Lh?PYvMxﺛR;_ӶigyFNJK6L)-G|R|}fBh2&)ӊ1Wc>^ŵʦ#qDA($4wiV޽"g K-P6{̏Ns!YGXQvH$a’8tDEܖ[X,mH SL`ᭈ$|m5M{\rS
+Qv$5[9 f5~pMsDxQ
+I^6
+^3o~:"?Asj}{"b [-|34 
+1TIǽwJF+'>iY(]R.H;i(|j'C|$I)
+))ڽ|Jɗ7=yp_SSGTuҪ`6D!C&1:[ONoO pi3–$ w}*ʟFF9go}U] vn#~ epR#TIPZ Bˀ y~ݽ eHnY8n;4Jd+ҶK Ѓk.G~cFѤth6p\$ ǯ+EKR*vFfdUleg 6W>⣥-9?)m#9|v
+Z.ktJ wٴ3um:ٔ P'Qv S}M(<H邀%Np{o/Qhy]jɷ
+D驰o4c$is&&</׷: ')vrMhMኡv}%z-2 x;\u&$,)K 
+LIhvI!lVH
+<~M{g];3GWL7*H#xV~"JpR\enkBIfZؖ(i+yr h:i2yh'A*u
+<*z鴍4.l-wBd"{j'?t+ն'z>;f p'BZ s8$٪t~E}pXX_v~1U0ҲXܝKq崵 wr־\Hw/".~#hzn#՜Itc1[?2Q@$ǧrgzU˺QaYP̜BVI4p+G=-;A[s<-/eF4ҵ_>d9t&֜pZAM49`H rrq]ߌV&[SZp\drt[
+i$5Mp%VJ|56fdϲA᛹{/ 76jog8ve2IζB
+Wl)u"^3AتoR(}Y^o;Cۅ[Ez0T+=~r!=YZ|]@=\*x ^7Jo m~땆JP9e A}Z(_LWu(3wDT{9
+c& ,ٟN<^Q xٞBb{I&q7 J<78I)3
+4xoo,8vc`unwRb3Q#T3ˌ ^"vLF# 3aY&UkePooc-62Hyjr aR'89X|}.~>77S6m3\eil)8f_MK0Y[XYBb";~E_CT SX>,} j@H%LQ:#$$g=QVha &t/wRmaMD"BT4\x0G.;g6m9L3 bv"53pqTXe[
+*ëDZi#M~L| pH~о<B/Q
+@Twyz1j!"'mP ŞN!F"#=
++͇o`at8# O`J4D !7L*p(rPe;o_y]Mv/p^v|
+%ι(#n+ l%,b$@H=d /3$=
+%nXέ`Å'?'sS [.G?h)Cp}ڽ> E ۏ0MKywM}nQ|)t8} OChja:AJ  Yc@(ջJa"rpZ]PpNF9D; _Ggh:O'3 &Ů+EGݭVE! t2.?a0\LR]~%8Ij;
+Lo%(Uv֕_^4i7B@DCݡٓhA$^Fd.c(#5@lPsez6ݡ236R`aߟ;Y5E|ígѩ.vB"_1YR0&OqOy>|c|M#LXEuT 6"-ѡ)&Cx3k{Lw@ZPdJc7ImG9h.#
+?3 oY;vd^%`a;TU8"SCk͗+ZAhvLB{
+k)C&mR+W2$joJ?{~B8S 0cyas$-h`p]h=*HH'%=M
+iaPnCP'N-6D߸U&5 x7Hsc@Ox;Jzw'T΍G
+<[!-$[n.,_
+enr.۵G舠y9$ao3պءBg&-7ld0#hFa^h>R{l Qj4'WE?2 `z} l?hi+׮U;{L0I.m̜e=Gƌb_\I`γnfνpr0hmknO:_O&8*wo"ʴDǽX.?>I?4SFWGk$`F} vϐ q<+lDCH톁G,hۈ3
+zGmLn.] b o"6JˡgCPǸ: PMLO}8߳7rLpKiENz.k8ȼ_4
+ly7KGEaDqAUMy7s;rsrTn翪#5^s dBa2C#0H%i2J~r wX ˙:{_e[%Dڗ3EMJZ92Ό_o]4
+2~@M3G3i*ܷ! K
+AgU\"}C]Ԯ!"^ݙ-$s([|򌽠CrG8pk(I:u[O<:;:e:Va¡🡞oEzZj6!!Ckx0׏cp IquiCub=7(s#h#?o`~,+x;ڑ禯.FUGpˆQy5v>OT=COޡv=s7kz~3c~?N<?b`^1~Bhezn
+
+C:{{gVvgǔiآp8O2l]ǑOb !ꊬ(3ba wȄ#ﭭ} x;]զOX=_-}yHDVT ZDTӴr8n2b )Fb~AsSʷTu઻s#3}P6rJx0MQ1_a)hGQomR|~WANmQ䎜Z0G?9ryMylf+'ք,1_M}3[UW~j+)FV}8!>Lmt5Yڇp|ȝiD]l4-\YF6 ~Kܴ(2b L<kgMѓO!ddCQ .Ϸ
+v =10gP2_ƨI]?Tv_ul{MRg#:l>N
+Td|P-@Z-V
+`"G.~fɨ~/0l
+v^-g~ָ
+-(r*́(AcΌq~3`L}0Vix$/&Qij ni+he yr]jQ`$Ui^ET[QF8.-v6V[7ճUڮUֹz Yǣ[8ì\A."1>kd#utzcQ\52EhndvRߦ\)2b֝Gpm[H(IRP^j+jl6I*
+ú_ua,B
+*vU1-|z"jD}3۱[ ;?S3mº`{w91ͷP{[]*jsgD+lR.20
+Q>H9T\PFR]F0B蜇Z4Ly ]>B'1̗cQZWfY5?@^$-bw'йBotL3wo LDw |ݨUl63xw6(/+ ѹ%r)Le:.H|޹?,Ä>{%^ҮlM.X>I9{s>QpZt ANk֛Ȱrzz &nT_@ W1@M9}wk!DxmUE_ e,?dQxڥv4qJgaGBV%} 8hNؓGagpޞ| qs)C [ /J1_HE@;Jl {/K+xqD|^z2Ag lhFJ3{Κd^
+_t=z
+k"vYu-. fF$
+z%*uzG@rw͟
+{Ȣ%ԣMg,\ΖHY |˜"J;
+bݫYy!<8^Y~tC#oɜIVyW>#izvs]xqJlX4yrm!΀JڎWA7)ś =Ǻk_~9|J k%u#<Ud.Jy|ɭ#PʚnS\.^CF| ^/Pb?~ H0CGf oFKGF}݌vc)>عtB Ԩ;1"{Z4%]gRw$ÆN)Z3Nr;@}^Niâ`|="axvdoNrEG/XڟDR1G6|WTfPjƐ"̘ۃJEp5Ψо"@
+ȞJfi}(:Bnu$ҿ(5WBlTmeԀFcI@2p(9{ GʵORpfx]!0 Rt;N\=nC̠HE*xށig0Ǹt޷S˓ 4.wVКY>Lk NkNɕ˫&Eu(7Q KnAѹ k=VY*#PmL*ǝI@py"s !IuB~c*wo(E(*ġsg;ABG DWFWD r؟f4C,fJ]9+CEy6[)5b+
+AV.q8?zOo<>}H3 UK܊UڛZąO9VV-\+k̢ z)3qOGKB
+ ^T,Bãs*F);>1#s-,.y Z=txb GqGw"/
+ x($C <rW~6xI%qet(ʅnr#ӫ̣yX e)G<}_T/`?}+tdೱ챎#22@?iv$C2ʻe8:FN/du$CW!3pF%`9CSޜ,xaC._#:w*mw*噷\? 7ߓ baz7;[&9 +/3g?zͦGC6H5ֈ@q㩱wwL(+T.yNԞ4~%&'+X&>wěۈh:_+ɿFe;$WN=n )ؤ8c<F C水\Uv%}ɑ*JP_D2|z3¹ccb#)3Uhдvdފp,m ~[)ɫK;\xZЬ_]eLwVMˈEPF>pDxmw 11'rDLwnh g-F.[j/w*=d%#;Ia4TLƲx|yڳU`Z)mt6nl y_Md"wէ(ZR|;,pS)V.fު_sE(AǹdD9W:SțBtsƓ(Թ8D '
+
+*5"b݁-=ןdMYY
+ZҖJ ,~NOcWDup sUmh{ФQ#{m _ԜIگ"Ŧ@gvw ]ɗg`:mzrXV֐ӫzhA4WK 4~RDz,= ,{oP̠hYVp80ObrTQ;>r&Rl{g|5:c@AޑLf~ !!}Lq^qn*Qa FFπ*D_Bd^"8(z*\ݹٯ ku%;7܄{ݾ>sTw '$cG5csfo`\@9M*k߮|IJw L*lGRdZw`:K%ԝzؼ
+0G8Q;=Jc
+#2N?<<6!^.]jÜ +,q@+f,<"9GTCzꚕu'nptUxf-nk)2Ӡ
+ pSFJ^ !1-gOALiNyԓ&JCA<9m8}cFKIpk  HFjzi~]o^~&/2r!x"{J?Y Mǭ-3wM'M m&v  F>;T<4?lVNӪ:gIg-(QzB~[wug4ې I2#U+ eL?F4@uf
+啘^:kKe\W©GLDipnZqHz3%e~.^D%_ڮ(%wezR*ϹpQiоIbB@F/% y0m)v:aw9?cW.4.l0>C_G)"Z@ <!lCJzG2& 6. JS}/vF̬:VI~HSv z P:K?gYV*bSN8{μ5g_mPz.5g
+Suu BB[P.2Ga0RtFJp3ðj<q:T6~3O#u ש̚~&GCySH_iM*mί ,s
+^L5ޕ05 SҪ6وoߏyńQ̪u7^z tx#M z$;LjtڦASuksE@-|%
+ A㴨G =6m#ǀFA88Sqv%fD^i]Wԥ&  If8\AT6Tc4A _Ӟ'# 6 Oٟ{W۳P4M*#QG#yO)1JA0^ݧU[=b/_ɋ<Њ9K{dƖ`mKԃo7Q*U[ ]GMMUv8]u/Y7,)31t+PMi=YC5y~;#FcesGM BK0( <P)U`,#o8
+ ]ϕ>1n/nv􍖷jċ͘Wl.:rDhH"͐ϙ=>C) "͎n J_ZS*
+S'5R(W~yP-ُXMD.U.Xשe%f)Oz_Tr4®|D*;Ttr67egdr$QP٩?p"FMZ 5sse<{mٛADuOPvў#6#h=(ߞKNL[tVS'{FlxJg4-H3DK!
+jr(=F)r]]~V~9v(¿V-P#zKJ Wf1QhrH VvP]{G0ulU><Dwd^ T`Z58TYRs\E򘎭9Mۘ`--fq1vx D]Ubr"U֙]Jk2qV6<uHs[1idT.ԌLv.9tHNZ(z+5(H
+(Ysgǔ/F$$pf*e3+w
+乪Ԋ |4#^ݔ踟&{3V>@-ΆypT.gQpEP6 X]Eu6]XPl-67tcӍ>K|[ [ZjÞR{gM lsB
+Gj l⼟5mo*+{@v82ȓz38@+K»gd< fjĝ-d'W=kYgw5 ӵ ĺVWyr"gkݡh"kdxQ1B[`Sѓ#+$(rCր"
+t GLb,yg_CЎyN~DC]\rbbYV0L& )^{dbw9|gO{JB^JQs)I[2JYxl}ZüGU3{e1'wo
+
+xe6@
+;b}@q3G_pP_
+tϬo& N\nc۷7ꜿ}JNc. $bp?`~E.
+4=S
+f=י)V]'U&mSuU৮
+m0& VHc>QQ2f\M]&c
+2=j3j*ot[
+Hpt!66r `sm`hC:t,=4SV{%|(jR_IA%RqYȮꇎXӨBVu4x:8&xN `_8!+ӝgL5`z;數;ҽ5ڈ=^C!R<@4"[3b
+k%v׮J,luf*HfjuSc5Q _E#Fan6` |=rlZ;i@-=`٣FzTn$DF$1a^Kϒ
+jNJYAy,c<f{J
+|̯3eG\ȡB׵(isl rFTJ(s3>E]̷B.zcA/B.o /
+K0dPGP[W]1G>hAlꌹ+ORI"=}-6#,9bl;40/7grczYA%'_jy)"̥ ܎ܔwҍ0Q׿Plud8vG݁{GU<ms;=Eߟf{ˊѠs}nL}g-Z=/EJFV1? yxg.!o(oh.
+1P>^Z?u)a\yYOV말l
++CQ3Fa+Xr|#XWַ#`=}|]O-F/^
+yg|+
+C<^Vjv>(`ʜ?oq$h@ަ[#Yvp֟Jl$aki؁,ȬyGl}ly`8x*Me"p+@lgK"2 m*" ĬpwmqtĿ\c7eމ5WF`ݯ|~Wջn SKi s-88,Ց #Zϒ-1{
+C#
+=AG˧vzx" Mr[~OC4(L.fJ^R:`hҫW?[j(+^챃مSQF%ݤXuUVн{! OWAJaqdA3ۻ :4(xͪ+Ǡ˚d sQVU_X矚Uͼ8>Y5^\cг0M[”vdcx ,]_]r2>vK
+󷡏]ߡTsuLK=AL \2ҧ0Sã{W^,M^46 g'|XMH,"n#6(xRk:HX!Qg\Y@>1_U7y= ѣj#.xI]Tj=M;G}@1@KcK` կ Lcp0"njk86I= #JB`ľϐi.HvY6}jO}\a3޵[T~ ;奕x{DwÔ<kpY5H2PַAsDp5S*0Df>kHV4iyyp
+lg|qDNeQiWG2̄(n\J:nL_ڨ3t?wiN-/kn #Qa_ 7W-N3z9eXs;=黌=R+ qAT\̽gZT5p}GP12lZ*"fic7[J#h˔SpLD-h ("YbQcZ* e4%+:ӵOl!@8<T^e e &i
+}F`‹Tbw_/:Y3^$C<+fu2ÐTi*^%XyړK7uf*ǼTO0 @~#kMG> <Jv=Mn?Z4*xBQ(PjTzŸ&W+q٦!EsR
+
+SI80-,C<" ƻ= :)dRHgqKA~l+%F## ? Yzڃ \@(iuR:9:RYo}늄 ٜb~΅_0cJ#)DJ`v:z(Wgh#
+êP
+bŞ C2< #P3)vnC4QpTBђڭh4ߢ4Ԥ)Eu+)Iʿ,^Qa<e(GWmNE~Ó,t*:M;Bdme$LOr
+/N>J8@z由rЖOD=4;ؾ}evW<>#~D>k])X~37+Z̤GȓY+U|($ᓖeϓv+r>h. 8 f]+gr^?ɗTY|zɌ8ͳ t|<k2!IU[#a0 EdKf~JC2N*%|*Ը^%D9%PNEYC>J^xox.";3Ab>X:j64G\.SS$N3;?HӼ?geA |$E(Z w(
+)J ǂ2ʩFKYo"kKGQ^ZQWzimgUa¶/!*^GIcņ@1}E%~ՁnOTB@G6P[ƼkOK}˾qa)p"Sc4I+x#H'"iwixƸLdgxuWY6HO0u8؆oG:?Um{8QQ"uWd*҈0; ĵ?gGYun1TPO >Z[Mdq~EzRSMhfPW~ڟv5
+.M>RSTu:`PP_Tނ[[)fX
+̎F K䝁f5f8P[!F?;wl* iF} }'v|Yx)9:Qykڈu*;G
+T}5ki
+=
+]ӟ/a-c aYI$|+ZLY<QºBJ#9
+I+^4Bv+VSkMv
+s;Tt;H"IJ hތ}$f
+HaTox2:
+CzGJ%u}V
+QH^,j^عc=A>
+ã+!Ic aӆ 4I7T
+~W<~?][E(֡M ?k-s1kM|t+LKLb
+iKz.;z-pϻ'pAPe
+8V
+Rec1@U׮|
+܎tBS}ĪNpF 'Mv `+mBBP 7LxfC;bmNA"f7ܪ*ԢG"zd
+_QJ5bZ'2&rv! (^ : ;+5EieGgn.f1.0.afۜ.:hs .
+ &իO
+="XE[ggQ1[En=k+ne&BW
+}MnVԱ8Whn1nf )
+0eR]gHmWJ_,䯔c겱yFQ3OF}yj-DQ<sDL-;V
+
+bRѽjI񆿿z%MYnFz1H|=ɰd0/*㉩!t=f(%#j=`*ʭ61uٞyBL=R#3[(~0{McvV=v򣤰g2GuT=M ed#jKrsYRV^&}C1rZloK>!4<Zk(j{ŕ:CdnIgnw[pf#FIjy5}َ3o}|ٝ-T(9"G=>cVH/EA<*YCb*qL^4` mR]*%d2%eOrSDS{Ig!0Wc`f&ס5}|s`N4 @?[ydt1⛾[+<^ZI9_Qgci%^9E8=KUKR:NBjiVHfr4K7J`F.ĊU l -c*ܓҁ@ `]فcǿ\C `|棪=K4O/f(RA!'zW0y[e}Lx~?AO~pڼ)ܜ0~JVh!2:1^y
+ʫNk-?"IҭU*V[ z;]/SWYHdV^߷J&Joh6&Z)uj ֈR%ůKE @#iw]I
+-N Xݭ=t*Qx=ʥD扞9k;y?+}E8iH[.bw#EPFL ruAR ^jrTi@YfY$
+A1vϧ"Lz[цo[9,VuOjIM% n$
+v \7Hy_;&߅EE.aIeB}̿n"X3f%J6uUM$c ?@ymÐE.^ܔlG,8Ϝ%pNRX|id`dW}XV2&<ތ<%F!.N(?j4oDe[kxr m!ԇch]P#RxUK&j{ѨR"+د"LCN^C sO׭v 쥋q+6Vt[1C 5.K
+5I*$P a{L# OuL]-``p (PuzV2B. ,U8
+k-8G˟TJaN-xsv?y|k@v䘣 3B6WhAdVYvlQO_i*D;REHJgb? %\$IlGUƜ 9c5j^n0 E~\8MG+_T\8">:LIG깫}\u]e|@`\QcvU>W9@IK2}k \XE+3&##6ھH. *-p۶F $"HuHxⲔ2NB!ZG Bch}&S
+PRHB9W3'!)],2Vz3$'j}2Mj$HUn ef
+#[P)~ēQK.( .0nru=-2s*uy!3]F{O+~oK&c=GUf4ӣ^uvuyvF\zYk#$HwB
+E%˦Sjyv15I^ў݆cZ_lo)SUm0f臵?z?Q-u^l|:#-<"p\W3Õ)
+MlJգ<S" ]C{wMIO偰8aIR@KZ˫O}>-i\gvP ~FS|8H@E)wP4’5&=Q$^d,m#
+}S-Ѕ0f=~to{[(v\1%-nl#j;¥P!OB#"*:n$z="pDm@&iڮYLtT iVA.(Gb^dA s8zaYX)r3{irI`_rwU"8iZ!ֵJ+<\$@WUt ay}*$ڀE$:7*T9oir7Q5"po,; %:M<!ϟyx'OXa+͸qNz#ׇ }j@,u1v=Z\*HH+z)qJ /LHz!EQV=q\./`mܕ$CJk
+p? -u]1kqV=O_T;ZI̺i)pKsTM7d) 4# 8٧TD?R&˪z|[:>`kezs
+L{Z-1W8Q]ѼƻfJV&lt|)fkؽBd5]*c /xqXio_9nQ^6gW(چ#V=vl3zAJm\G
+._%HҺOTk״8WOmǛ&+dF?}flQz䠇Kd(̬>\UٗRuʭo q=ϳV[Խp_+Ҕ8eóZFˆcU &׌G]y#`9>Mq[jlf{͢ZV8ck|~e5C \_gh=npW<6K>vV53{ք=03輞y/Y^ѐg ub)+""CдgA }vxCYџUMvIW7"'~*4y]3L>J3!e- Ŕwۼv ,+r-ckʹIՌ㵂!8[ }FlkKX+FU K@E<SUYCLIm@m-RIgMx#Z$VK]~-O6Ue$0,c
+|8RRş](3׸x(RgOlb0Pʳ~Q 0O$I1/Α-\$Do83" YעJH&iv1[
+]vQ +4? uoÿg5g,#Q^I,!S󃒋4`4 /Xa#~ky6sFW=e lx]QI0VӾ#^!#
+b4ZW!i&hZ5L"3J4gJn (~[ivwxR榟}beLt-TkwŃE[Y9Gn=4ۜozTJwMbgbT)w%
+`,e$VQ{4`R|r1K3?HrL$qCЯL:p$-+mᔧ(yѨRW8Э:#&ڑ) w?"Ē!Q>'
+;<Ȼј.wtD#k:K~xV|~ɯnjrpQp
+_;hc{=>6q ]{\0%GZUr}{]b7@-r#V#}=FE"z$k8x k [@-"Kv$OՊvVw=5(6kJ 6KcgƗP ljV8)],i}_RF
+`&qEH~nU vc;<"$$@B(b }K|>vN5C.[x# | ab.?v9}
+њW5w6 Tz[6RMK>YR޷SC^)3VN:!'ģBT f%GHhDfnFR ^ 2nmq &%|mׁ 6R+њVBr^ҕB`kKԆ h OW*;˯G^l3cs+K"\8
+q%'SQw`OilM?ڂb^ ]4FSp>T\?7<mi?WŝD*R
+L
+H~P ng$N\j^ЙLiUWPc8+M@7'_pjeGTڵ@C7C3+G"f0;!!?\avʐmxw×"v(|\khLdkutp/G!ֿn^dEWtWMwᵘ-&5Q=i˖\ǻV-X
+HߩFnP)gZ},jdKs=Ԏ1k AX_f
+[=u݇ m>{R'gɐHS8f5RWDXS \+}3[um+vzfѧz;5:ID+pX;z
+ȢO_
+?zm-h<yS5#P; z!ң) 2ǃx8vnΗxwtʲ!*/*$+1[@cQ܆ };=מTCw՟=T"Uе(5zq̲q~|f(jJݷг)(U\iKE-H(`{w?S܌rKʙHQj(}nؽ6Ua@%',&;mB
+N:f"#RiYE~k2DCT1əAl_S^#Oz-I˼E)"0S/E~ XefT<׃񠑄V^6+ŠQj_bl~/|G"V#P5
+GkhaLw},ALł돼A @ql\ڕK0"gV01e`zr"[1
+HEV@} .Ix
+ѭkuc,b*ΐr%9WЌJ4 L`5n6^d)H@4ҧ&V+Ѥ#Ӈ,Mryn:u§he%?PP14Fj@ldflw`*(+b}}uiYx*>Ck8F`Эˇ>6a;Z=DtVcZ'/ܫx rxw4%lN܅z Z)'?2^
+h1KŇ5j
+c:ڛ ö$t8Am5))1Ƅ577СZi-ܩxKq^UC8/8OE@DYt$$""!u/I,N9X n2P;бQ-#OsX©:j0qqdt;EvnI_TU֝{f!j{)X><W8A^Z=wa9Q] _
+F|uS%4C:Cz̨c,Jt-o̬>:X:|@gИC^K#,"x9UG
+9V6w<{!]MkM#HXITur fG}YRJl\r+h* ȑLY%50*
+2I_WccvFProViGʒsKqgR t6 q;& HO۲Q'W`+@ "=}:p8;`$2(뺏Eٔ0vj_tl0aHK6dTxjG@P6d[v]>pG=@+dDD|&)V2I6f)a6~+F(ׅ-psi"Д%oXȧhu# ^g 2Y
+Vk-8@s<7SWdU.".j#{\fs[dY%|P WDZc,;MCk"Z]sVK{D+#7:D{7~o+5`*DV{J[CkֵwԞLwFŕ;kCյ2Q
+
+3;<DLl͢5IZz.X+;k`E2$e>Em
+)gxEQ5X똫^l) zZG^ V"iKoǝä ȮS &,+K
+?2ZZQ CrŜu#A!,ccGi$kZ^Uӄ\lm^ 7rg
+2zdQ&nә3ݖ} Te"HLUq}P+C_&U'rJP -MBTHQTJ`ܽ>cWIHb/ 7;wѢ ε'}DdTsХdxgee5C1$jA6Egk g}+IȄrc(aѢ^65[l7Rs=x$0A~zjTR5M7Y:XJ"z}i[q1@ / ˷9ae9b!EHȏOp9Q,K&rW$58b6&&J!]=3I`BҪ,+u_kvy)YMqߪ0;dN*fX< ~K$5JHԃGc|Pxdw:H:A+`vzDy.Ő(( Ipg~sjE {;4$]X\"ssRa_Bο0K(uiy@Kܕ˲D@p{jI)0(.DԟȋY4Y{}n:+SB[$̐$fnwzrd$X&Gr[!4q>Ă V2氡[4=E$ac8B"6H,#z
+=; pUW"&;IܮԽdL1AOV搣Dx:t.-+4K`9ڔ`K?o~_r7QJ8LTM4|X*8 g^Us3Z*PL3]<k :鮺m5]Fݤo^)k$^GV..,J^ziАT@X;Mr)tVnBI薭S꘺iq+^"d-eiND䑦 daNr~(gνL·⫊UCܦŝ affK}Eb*B´XJ
+$tBS^DbV&*M%3YݨHX1v{"J- v/%-Np {X:8빈eƭuD<2]p6%ٛDR
+D
+f:?3 24FdrMQ&` (")D|AH
+e#d4RsVr;5,MوLV❫1 =Y(Q #ϡȁ&JD/A(DFIvRCEP<=UӖAh
+\E2QJEL06; _TOf@h_X[H@n%UѮުrjleQ$jͺ2wj@hPY|>XZ:eI`_,] O
+*φ(+v0^uH^\JM2qÐ ?fHF:$!uW+JdJєzbb:DQ,Mib*ۊ-,
+5Z9iImU(5E"f37Qz],t/_Hw0| 8!n
+AF魒sYRZ8L$KR:$\}I,%R$6߂hl)DAM/.4:D'\mկ6ke~>INcP.d3rv .itjiRp|6U>)&"S|Ϭ"
+s2jl")qs7(bsUTd6HR3)[51=P_=%&I-dD6]@TCD
++d²uu ?0:6Y1=i/,n>1;fAz/wd l>xAσLV:jX2-1 Ԏ ʪ%n@IKf{_i*fu sZFR B#'y,,dnF h6%Jb<o>tHae kF6GKIy^SIw rһWh%AI}߳?^a*FX2GF*/~ &I95Ǫ]e@98QPoIY/*<F@:ژQ5ժ18 Q+I$) AIY6Ry׺-& %x`iA(QI.<‚b5ߓ
+]xW2$;N<4ʶIJNXn:~u
+(JՖdvc%Uё|
+-%ۘFdfl"#C3G}@V.gFϽ&UgcYS2ؿJvgI g Fbe4!bB
+ I؏q
+r,Z-߫plYdd-,'˜ EVـKzUM7[ٰ+O%-Kbpt}/$^& k72\@3c5[p^%`5M3&P8fGcF=zQarsT"y/b^76uCVf7'z*|4XM7HvOQ"jR
+y1"Rfs(#h(F^AVå&84MMJz ,*gF<*VQu[mvC[AWLg
+a3"W"PhȍIE,aI72@&zR TQy
+ kQdiJeAnT%m2i6YhA"WH p*0*/Y.b&rSl (.j;Kѭff@DG.U4;AY18H5:B$JbPj5DѕE\PQ!,Z̧ep#BMSV9LA65%֓50JOu
+asaR," BI2ՊrČڍ (K{h8yˆoug?|(0,3x~繭k~$x"[)E jh;MV}w)?^ɪ*8q~̬94־^0MѢek H`LF]9eqܛ,
+ҙB=2b_T JKS|T}4jz Ch֪^4ά޶l4X] r§Gp8'lRDC:(̦IM^"9WXSMnV/VvPHvMpMirC*B"nL*V\[LMV.@nk
+yoVZŤ1 ' /4Ũ ! pKE{+&@B:Y~0Y-dx5Iz0]΢% ,iҿb=̲ę8ɑ8Z=J񔃔U-l!x jZ,p2q<&#UZG.6%@$a5pvrTx,SMbqF4шPamUZZV0IF1zYjZĊtS9X8U)*NU#gjO1N^NqMC̢jY)N )a*Ze!Z+ϑ
+V m!kHI7{]?fl`!-Dس s ʤ_DKMXb5}a2Ivl+ބse:jHY! 1XKOV~1f#Z b1iDYSī
+N9(@WEہ!6اee<IT{p2Q;G̢F*}閺
+!ID02 GJTsLsaF6j\mFP;ռv,>ΪKoEε
+: dyUn6+f̬Ʊ C2> #d)UN-p(uX|Qtg])!"" /;:d1i0'eq(p.X<j3+U3
+$s oٲV~]\`c e{7b.40
+ǃ#:-*A7"VDd+d5O
+QpTw3w1X5s9%0>*,Ee 
+ǁ]άr"a6p""(7qĜ).L؀*XZdPPE!CT0 DSCDDNM.yHl^JZ'R؃&\ [CVbk
+ZwܖYW=-F@.]͙"Lm#25^t
+8@u?0nۖ)7p+_-ft 8Y7NU.>b!
+##< hU} v ,NYWmpk3#i,C/@X8RDs͌% tůTE(vݦI^[&GAo  TnCR+nGid/+qiϩdNCRWı
+e<u Q〶.9CϹ(Ub@.xf -`%
+ܔclUl6.8Y$7[:q@P!6U44|LK"wMmgs!l+! .'eXtE 40BuZJO
+ĶZ#݊$s9=pćtExQƩ#6; H^27d;`R FfBS°#2Q,L@y\
+G2veX4,pY ]XظU"$zCUX2i3d3'Ķ^#9 k_=64oʲ^PU*+)7\bxg%jWr3g¡!$-+UkC*mM Hs<qwӉ
+v[Fo^O,.A_:p FH:w3hLP05
+і^l]LEԥX 9gg\emutbJhM#7>5"XUėu
+JEtMHmQPy<dX~AqȮՆ/ѦI`&EI6=&fW4/aj
+242Nˋ¨<BS<pMh]7u룷<oܼ~>k>ʐW |˧7ϟ$w+^S֤P p>`x ^ӭ}n:<y맷[?o^/7n1W[_3]K|ͧ|߯~mm~8_cO?=-gʄ0`Q9qǤ%b;]wudzDec%Pzy(ɇxq2r
+M[KH86qtWӘhwX\{.6bG\]Et6$BBpYh5J>I&[1dF&*7 zUWY rP&؏gw—|@a[SAC2LIţ@.Xt3"!&!~huuK:y\c/ۓ2SGc5E@B  pC`!jBGZ>L=o/dZ:/U| ]ȌqJi>D-`1J8ۼ'DÐCe: 842$
+0H *>}9Nݸz
+h疬GC=LJqG]/]f3QN ܺ~塲DmB 54=TmEE !e
+,,<r
+MEl $C&s2 i2QV |h
+Vavl8q'x:ۓG{~&&z`( \Q&JR'ze/!#ϊ
+,k7B":KvGx2UTc*I7( [f;˔Pxb @o1(eȥ ^BAb~(.\&)hcOĒVs D?-2upN[aJXtm85\`B2VzUn[zݠV$D,I
+!D5fJ{RVnQZ34fEf@)!I\I[>b5B*N? +TS*6/yaQcM`NE[ ]=Y(#@k&e0z5at_;]Ji:A#^yc\lF=и.usSRB`6I|?: @+y ><38l5⊧x"\$|Lhf #bUB^bY<vΨjX-0#?&>^NL},\KqmXv8my>t= POG7DPsJo.p\0 hIu1嘨؀OȌ)~gbiVƗwNtil_׿{ūgs&<\HAM8:H6&Fw h/^x_~~}|Ͽ~ÿ[{wAw3A
+bI6^>L?WRphO@Iq
+CHDE8Q gd켶[(a; vtPnT}ud?X; ~'XީhR5k\t
+7HD4 $F*3gw.Tj?;띌@P Qexٯ.! endstream endobj 419 0 obj <</Length 44253>>stream
+||U!["Nz2D\Ih}}8ы@"OحL\G-\H wI7f#9\ƑRNIG Tr("ݦx(Pg!= Qqft 7Zۢ5thhE="U:dD›@jKIq 0D,:z1ɛ+!=h+0*b逸cH+L
+:ikXuh,Wu!(k~AA(a%KĹdil03uWC,ȑj֭a4^Vns?ӖkW5iKvV«m'r, A.YHRuFF%8S94D4_)VsD ۭ&,
+!aIzP1,4s-^XlJ)B%cͤ| <Q/Co\ h3_<q`bp^\qdzgF3y!Yҷ, 0LT'|6Uӏߋa?}&6(rpDÁ08oMHcUSyDz%f}$"]h"fz;d
+P`3W{*]Kv~&AFE4Exb(l%E}*<oȵa EgBo;1XccceZ.>in | 4]yAX;.zE> j>VZd/Gex\䓫"9*d*jn c,2T5"Q4}1/zeZnA[bkm<߆Nx6VTIfxH/326z]r}캞̯/MXmPa(\VBpuU?~iB%@h[#wυ)hd 4fyX¶i/c
+h3LA'Յ>Eɉp6\zBa1eۏ)vy,,V5>n8HYWўI'e+~]ralS ڳA]7kuOT8쑩.߷Y4vYhWhᲘˎ;!XvLcSլ4<Vμ'gP7=mX_}mv+":ٰg?Z/_ p[p(U bwaa k"U5]pFwtQlP"B!
+n Ѵ)
+߱)DB2YgC(a|^Cp Cv5lipJ/\|>J10p/1RS&Q.~?2+|,yhH\e.UeQWzOp! d΅"5MJ\p{]@ŜT>=oFB;Ixi=8Y;
+*s.Ld^W}N(_p*J6ֵ.:e##汋8
+B8)si2$ffSb\'s!SȦW?f|`aK>k~Uw_ǧ.E9`&b=% ;)D*^\}zة>0C:P~z>=]ux 5G8Ʊ3p,d<96.ACl>&5C=R;؆yAٍ*wp!YA
+FHa82vm۟ӻV=Xʽ޿law̢Zو ~ "ΐ=GX?w[ !+&s~ E#5 swISG+ W<sIqvE1B4yzfe}DeB4lV\4ƥuШ3?SfQ4\3p " pe-9yԽ=tq'Vħu"+&*J"ɔ;vhb\c\|%(VZ$S(wBqY|" ]9OxYƼNA:B)!T[y"\n0 /JCQm-ZڐY+[-h<!gq2m#}14CR
+6ZJNx5J]cɬ]vjQv`շ[QEiI*TI٨.E GpJFW92R]VuBX 0=>$#(>|ʉ04zt<{O*;X:ͳTО4qK71V d)[!ufہF-vLL"Yg׭6ɯ݉@O^bAo;=&$jVBH4"ŒmSb1T'[8aIbٗۊ(N;+J(ޚֳ\,wȘQDi\UpiY߼
+xy`$;`Vu& Ub}U30ͫ<^,>"¥ !~/ w|mn|v-lOo<hlP6bQi3Xp>yMC3Ų7+0EGcxg2*1G1YGXxWTHF>6Mĝor0%{",%+e=@2=L<R8D &HXomnK:yO%tS&:Aľ'Xcc3ul*q^\8]FߡɺM[L? 8ܙR/\2f5ɮI:bW]:UGAc棁a2E`x.F i'ۢ>Sl*vY8&.P$skNC>i`nJQ4ٜH, E:wpb>2 u>X&"g͈#G좩’fnjcO;5v6 4lB)p<YBVb_a~2l[
+yOh,<s|k<S"PpemI|<eiߛE 8J{OC I{*tSÞ<';}Vbr[Xa+\Vbrno;Vbl% J,wVb9r[0V➘pX.`+[9l l
+/l%;`+u9lr[l%;`+\Vbrl% J,Xl% J,wVbr[J簕a+1[lEl%Ι[l%;`+˥Ĺ/`+1_Vb|[qј~[q%l% J簕|[ʂ|[(|[/`+1]VbrNΘ/`+:l% Jr[X.`+\Vbl% J,wVbr[NJ:t>\SASγT=\ңv~JS:gt)ES :^S٧X|qJ6.O{?M;;O)0V#_]v{q̧tN[)=StNظN􂝟!<;sAO]iO\USryJ?j)txJ睟ٌ)=2 NS)0~JO)E)0'muqJ?0x=SfSY3xJ?VC좋S:xJHO~*9#;p~J?P:&SτSZ?1NcO|E0})}ոo)[‹S)nViq}kp.i= a8A3}տ(ȁ<NE ;D<FqR/*F8Ӊ!IXC0{8S3E~'oO c JIx]4Nh'a.Nq=I5N~NX.{B;<0%?ce i:{0vR"(OuU;LB'bX4j!ԝ~P4+ڤ^Xu4 aAXf)4x4G4dNt+|~~:1cndӇ(NI:R^jqN"{{C<DiUkw. 80{]tidcq:;פgzj/X#?X88{}K/t9㤎hss9 8OB?YֻvN/V]>szy®
+G3jPaf\RJyhF BG <j0Qˮ Ζn0ݖ fР%X6eaM0Ë%$򀉊r#Pu͆qh)Ñl1)fJ0G(V7^=H8c*R61fΌ`)`~"f'iJ >=MP _DBÚd02/ I=2Ah B7'``BӼL%<vƿQ}{;mp;h0hٷ"vQJnOhp͠!PWd7F|IrRmqVϑLْ^x2=Z IBG3w3yD#Jg1ʪf$f p1ÉKhш=1^
+Ҿ܂A.Mc;:}-EzǶ<ExM]znFm&љ+܃SZOgvUsFsd1N ?p^ԏ+=l{wAޅcQ!PDU,ZtX4+|M9!Nx6MLBf*p:(7XdM] >%b3HL;ڰ*Qəp}G/]{dG8" S)XwLh,wx< >#`f wp:#F0L=1 gMvF0Gu3pRqhO12m-$S,bg$
+ŴLU^x\ Y$eIøy-|ROcഓRl&de562ґk*QRsCس@VX}@/MrNOۻUݿ qT8J2PCU|M#ۆ"XƂ4|ei%]_K~gAƦ è-2d3I&^}*rPy0Mf<' })qn6aFp9E S$oC47w 7gS;hF&20~fkz0gjg<;HGdybB}Iồ唢}8M {yRfܩC(f7G286>/aN|S#اm`<a_N=x_*do.ۍ|YElr lB *y`4|B&TrjR"/cُYhhvqS6 kkvk}Ax^#"t` jp_D{C~:$Yߢd8X&/.s-U -'!v]:v<PlJc{S[`2tq t8ޮ`^G9@D̟=Qxa2DX44v#}ܳt]Xf|\%/\ViW;USXX;# ^&&v Bŵ2= ytEH+(dn?Ӯ6܂~/&l:O?}da*2f/QH
+#563=ϴO}ruA}MIo?^o+~7b՗ۅ1~}n|ƼeVl g~U*۾^=:zjy6kY7x罿W])זzxi m=ur>W]*ks5I_|)}v||vbށvx|GNtv)/BniMjO7N3A V'?jx m|ۛ}/_%O>)p3>+>z+m{)IH&]?7cym⁗OOӯ_Ϸ~7kq{lnMg ˬa7o?&Rm_tճ7~ӣ's`=g?-z79wڛx_ޗ)͏Ϟ=3;7/aǦ?ݴMom3;g?7ީZ [ɏF)()_2UZ[?gO|_?CaAqc
+K
+< Kwi>[޻R^i ou }(CZKzPzJc+
+XƒϷf+_|7osQp/??_lm/_}*aVxzmٓ5`žnI[BQK-šVJbv ߓ^ٿ7oN?w߮ u!{<<ko
+B™TQ^H%-;b r1@ MIq
+I!YDJdT<Oϒ:-]UpkzJ&N kLPWzԘ0Qo(j""S3{MVXcmkѯ8x;JXC@vǽs;$,D_RFo5I6V7D8UJJQد"/9M0W].ʺ,ѹ:,3͌NkcWv5 ؊&R&jLpAЀT%߉߉_gЈ}iM:ͺ_xOynכ+N8ؐi26)D0)H3H(6h\a" <D_P>z`qز$tKm3=8כPo-B,>oboCnvk I#A&*DAa0?s{hy),KF+5oY^cY5ʠhЉocĸEv[vkjeJH(; PuWf'k.8gl8R,CM &_` t$Kc!*`:#P0 "'0:",N
+{5
+AB'` G`s
+wX D-W:qcTgē@#A:YAp/*C,LUX' @ ӑ0z8T IfOFfkH+)AJ!(:BX
+s* 1!BH@2JHGa; Ë5@
+ d+j%dYD(A X#$1ƒBWQEb4͈/00#O]GZZ\ִaAJ#O4@ sd\ 1F)$˰b fPgg%SBhf1K1g`KT'Rn:ׁAv R!F`3)B&)`W068LtO@1#9y"bɐd3#(35Kfn*R:^<h`Jt 8;IFS $V<c  $2 Y12zȈ"p@bPQ:İ?d?=D L>)NAn$
+.Y y4 A!P<I
+/"H&߀]_PlV<TX8D3
+8H>8?<Tx%h(DPx`RFAuRZNp`#G`4tA@gXMAfo;@qyEa\.!`UD<q>pyBPKqp ڀ)C!`\2nH0af ٦0% I<9 Fc0r9V|AS .IFh&pQ"'H>F$ȸAH3A [n`hn`h"z>A3,y #4<sR)sT܄L\pyKV,p2փ̙d}Dz38r ?
+VFG<tXQff&+
+fRAn'̕D;)4~䲌BQ4m%z%/^w *oO>0Q<D(c&M1Q``a
+๖Lqou;K^}'j"DD-q8ZI%ױL[-zx4;,d
+z`8,o܂<2NØl7?n$4iPEP ^)BO@^o `EV5,F?Nx^ XR""q<kh5 N`tj8: &}5[K ᘿG/ĹwE R:Nԫ#*s@YU&~#$KEEH,xUli-ۋZ fbg5+zwe~ڳn1?&<RXp{"xzcW~_V7Qp1
+ T9e!(_ǡ,i: ׆ %WJ0" -%V*#arl=liT$x';@]^qFo㒷b6{g(hUz<6[.zU?]+A%HZ
+ayi%L0/]~+ phɥI.L}OEuc^1!Ox$xEVZ P%1c51ks38 665yzFߕ)1'Q-nb?d<=̟|>VcMv,_nI-wyn{0!,#}/\W厵"t<8ٚ(Np'dϾ)RЏ$K
+wwт`#zđoBJB@NqG/
+t6&+.s4H{`#Ю(1?jUv x
+0ْy5*ӟj&8nef0;>PUG/ۢ>庺KZ'AYl)p<l V(ӓk7ՑEߒ7[2/=YwF 1+ѫpz\<G'>3 v|سCu<1p
+uKZ`[NZ'
+"߈&"
+B$Dvd k="7E+GIv@a`/`
+B3K%M9zU±j>Eί(vȃ-.c; f+A1tojZ־y"m.hAPzmt0w0D TlcÇf*-7C @*T|+*OOf){ x˺~U* ڱv
+l`HP5&~Nٯ^fEbn$7GkHOX7x@If/E$>-L|
+jF_`\["`;=
+8kA!8e=f1qL `us󸩉hum$O߳ؤ8LFbPfbwz`ۡhf[bN`^b^Ee7"[i,u޲vvb!J^s%sm *m wv5 ՐLn}!hޢȽax
+BZ
+@(\ؘ>KpTASq
+Ǽ!?1MJ2>XZ̈́ ^Z"_"O)Y|sZ)/yT@O(m^
+Tf=z 8VUzO],.9yw`gu{0N(Ģܥ;nFFkxq:xHHDڢ5Y:#sW#-ٲәˠ%f(/kKfs
+=6
+/v77h!Lfx,~f;$94&ZL_oFrkijqf{o82)$jù ) 8x ?|B˒pU϶+=XE֡=6n0֐zoI\
+M y[5_>W̓RGkԧ#0;.TFnp{^$4-=cTN;MR8iW#y
+LŒtxUjٷ7E217Pۑf;HQ'u^ٗLW5a(i<33:x,v[=dθq,-`Ԇ7nˢ lskўJ[F6k?%~ҶF%sl5)iBγVE=KN`՟-4BwvcͲ--:T0~ǥ>|T淭!=..M76![vDg*SW,0 G78 |;:uBST
+H~:b#v6OǫsQu%v ϩz0脘=.pY@OƐ
+poLV
+Vl?iX϶6QGö v;{߾؃aKm,4b=W>6 ?ǡW*|'}sƁgGǺtetꭑM:f΍09&TXVK=~ϑ h*E\>lZvg:GMչHcsX\x
+d< WZMnw~W;s5빜yr},X\ߋHm~{~Meݷ]${ugoq><DdĊ'M<wT{zU={K3ly=kKKw՛gpgvwAgY>-񅣾/u,&kcK>O5ߜ/ߓ~)`ON7
+(ߟ}{Z+'ft=tͩ̽O_|,0wC~P
++^"`)ن·ǵ-bt%S64(.݋ϒ]IR.Wu)}хmu ʉSno8Qq_wcW4}v6٪-G]>~\3Ì}c;OszrwO!򦛭kX=W[ bڷ6JCߛ&H~mNv?P3W 6wV`lhAڴ͖i޴Qg GC}xi%1kDqb}=ҭ<<Dl${o_u39 ;p'0輽s6yN/mot̹d~ﯣA݌m67nVm^߃}^7LgaC땜x7|z>\#a4oOd?X<{F&۰_J?_!-_]` x5'd{8?=&I$ Yo{<%Wi#|.,uf
+/1,}hM绯Mq,:|</Mk|'I;V9] X| r|ZO խFY{e;}?Iv.ۄ,E:oxm7f[`s#
+=3ד}=
+6e7fv۶Hx7h!n)y;SA:NNi=qև͢W,$URWAy򓻖7ģ-oxVDZ(mU/B
+dq!Qh]ǣ쐯 GT,҆!C
+-{ mj MpWD~TCZ4ٮIg:7g\eU '&`\}I֕;,OcwH-usIԕlX-Wjj5}xTFZR3AHM69V-s|{uy җ[dY56o,Vs)ڊ,k;5bRie"1%_}X(ugw/."GSikz1@HAtX(#|&tS(!6},{ֱJVi-߿)"}K)_ *Hm)#,t!X^ɷReUvlYVDY7c
+"dHxo,C }Eٙ6zײM0()Q:s/՞N <=f*o1{2]_){mn9Jj5<+=gb>isy UV=[B> OeupPTy;RovӉ㛖qD80(VJ+̷OlYi7sSxa{_>76EէG"}/<=rO HT`YcjЪm7K]\6>-\c)3q튪< \9ɞz[i#bN σ)2aχmnp4 1'1$v_3c07{ 7>zclLsok!񆏵 Αc +
+Z H?O:vL`+kr1L?_(3G#YK&U70?;hr$vFPv 2/Ôix2BXI>&E
+"D[':j/"=*Sg_OəEI&#~oE me>w>PQaB@j-ʽmӲQP x_,7cWg=y!UzOϽ
+eS |Tbr SҨ|+VZ2a
+T5;!IMIa#q+ @=d4rEJ;Cش1_ oDb&ŠD]]ӗ0ћ|Sɦ!@vO -dsc$MNܑ͗Mtzؗe"bC
+fDTN$@q[JtU$
+gOs
+$+MA.NǙAT/AOM6}540@`5>'tb~Kf1E]Gm7/h `L\ X4.z=Ńӷh&+H-,5%v8[|hyN~'`)yIqA})o b8Xn~8͐A,WRf&'YMpTQ,-⠀QmjR0pPP9 PVH VK䪙 l~ߋoiΎfD $^; wSg18jg1^ >!8
+>zUct6Ԟ ~=Jž|a^d;?عRyJ؆ C"f9jY
+:YЏk+M@ *RTAZ-xb vZ:
+:wF vZ:
+:jj+Pj۱g),άӮC~ dCFYÑWW6 I1ӛ߸6V/? {
+׬t?mDk|Y)斈VF_G$tO >,cC>9e8R"Id夢9C&'
+"9jVffjIct2Ϫ5b7NSH1fԖmQ^z| 9 T/ ɪ$ƀI`+6[јO
+zVR} I%fP?RZԙ^p$M?X*]U`"OI^v;?oWb$Kԋ`]=ԪFTRDS}tE0*H3g/իtb[aC2`oc-5Ic/~
+\|٣qūzS9o]/'`n
+ >w`tϢ`O |@ƙ?UX܏F/KM?`LIê4 HjL:e<Q<1W~dtwߙ`heDMJwB%S);:Q{Xɨ }NK益wOSLIJ Izd@qJC$2b|
+%I{w~QI;/StLedܥ<kvO<:귟32
+/ƶ:0\e}Fec5 5ev2q;.]:u)Cv ԳK'm]Pԫ;yUTWgpf]tTRX? Z<J"Rs^,RyWۘtz8{N?'pJKÝQgqB=hNDP"IvCq8.]'?wt=)Xjz8y,+ίDP=j=kC{"t7'u2hWo 1RG
+ Trdo`qzBx.ώoюgǷ@ȔP5x
+G¹ji+dTհ18i񢢠]4`4QGp.R t r6#uOCfe59,X|}n@W▟nY`U-=E+RNE*RߗHp.Q
+ίHP.Q
+;Z+C
+~hɛ\>vj|JإK~~=(S<o)v~B\yF) "T )dR8Md§^U#'K_',2
+(H C`'۝2|₨cp Gt^`ʕ<~qz|rಣ
+Ӄ8>v x!vK`p]}m".ga&T% 7RٌK FIlҫzY>-6gm1*삝gbQ@)o*lYCiGk( '/v >Ö́0S ːJ-*(:tՊ^Ζvv[:ԐVG{-zEzjHvhT²FX9lSjd$-ݪ!AWiNUJ㢤DOZc[ngEF԰/SڣCU5Q
+άҽSGtjesj:(~ı4k.VM\[}j:%
+ˣ
+ eϾᎫTjVvÝVj {Enӭ'2vS޹DMy竡 wҺ$#!?NWx7=V?_Xpa-
+(J(Ez6TgCPg'ΆR}J?OV pvVH9?^?e<K%gμOB ][LiwM~Bn iwHiOS,G:8c W*{OϼOsˠYiO:J^?PWqS*T.P~ҽ~P`i/ 9]^{\Mѭ~3!&Orf)nEӾՏ3p-H=^?~KIe\^?m"inN^>>6\'g>(ϩGi=z'O<Ľ~jsJ J맽,E{ܖG?M]@}[οH {5NO^z޽~ѭ~LRZ}"c'}٧63x }
+Wf-y1V?;N%oS;{wf맽IS~
+"O\8<o)5O*q KV)@λO1d.egvR~ߑ?f$+~Nde^?C>GxGVE?Ӟ48/VEG?(+5eNT͕WԮ{Y٢D8VoMҿ+(4Rm\AQ#]>ު3sfs?]cz"3}?
+|-MT ɣ+{?6gnOíJzW?k/|k_Ixu1Wԗѵm$W <桳
+^kɽo^?v~}`.^:|Ζ΃bo_/ώҒ_~R~1|>|Nݧ3{;gl ǧkW-۽EX=3ٻ<ٌoZOתlCѵ_pX߭!_[|g' $_/x2?E,",e"G
+on4cݙ^9*۫$]-N<x^m$曻E6ҽx!?,ma]Kea/6^sŅf~@q}7j/S_jW_<,~_ Sԭ *ܗVG{@I_=88_?\W[/N~;Qj/%<p-qsƢWDcHpo
+o' .vD XS2_(6K++|bb)dLɝJil8|0=n}iLGjFUGV~DY/xKv'|U~'b5y oe%}_㾷#=c3%<n:~bx8;t9>WG΍Ow'SQ'AwhVQL'2H)iaXž_{dV6<5U .;щ!G.UQ~~00L,,OL8D +7̫=a^R,數 Owq~<=;x_A߶n}m(v,\|EŎX+/\|c
+[2ZX])$$.4sH*uY|]F92sirˉg^-I|l6ۡͅ\q:wX[v;Z9m&~:,L-&sByT`G~Ľy0Q-[
+'h$vTr9>*JZJ;Q~FF-%F1ccx JseR\S[shk86W8%;A
+<|q4~Nօ.5@}Z?,(h0`-I&ά$N/oCM>qIJ&s&_n\_ucU&˨k䏁)-|iO@7a굋[*ǗGj _p2z>{O=Io-}C?~Jvt?O,^B7BлZ==eؽtߒ0⵨b_'@%yX|e}2R&z"ش}]INy]LKB|L:%ٮe*Gbtn[5/+s6x>r8 ~Dd߄ģrw|̗CmQ;rIÁw9 ]ej#pЂ&|2T*8$o6逽0'S~%$X
+kU4asI 'MNE55`IQ@<igaаKh:`0J5`Y3tCv
+nA5Dy)Gŕ tцcFu%՗Y{ܨߪae3[*Q1zܮQY~=Goz17#X}ߝ?8
+aڕIek"fXtÁr[$UYjSvISѯrYW(C k/=|j7{\SU,Uf67$z侑b7nǞ[kb> ^sj50Y:2Gas!9wњ夆sDiW߾Wּ_%a`f-.|/>MX8dÆs/ejÊ2wkFs6-1IrfUbp K:}{b88_ʗT"s/-Y;s5@``-;6dfQ܄Mo?Qy^ӆLmf'G'5e+|y׌.Di:?z5*z(&?5di3s5 T<_~6z?'r_rnw]%?4VV<\utȻ$v]9
+u}{t<=^Ύf3cOi-q0q~uR͝Biy<.3gV7I+ ^uq|uЗIx4+.Իsqsg(ҟ
++Kjp/^F uS_,Za<7g[C븾u`PWBiY@evds =zbRMs}DkϷ:)쑗V-{iA|od31$JsSa%}ӑnd mIL6Zfܨi?~4oy"*"xj6~O"\cH|T.F 3o/i?=FJM=P-5ƺ +WӅK8-(ʷFڮ[u7y|]Ռ_2~Z)ën31eOW.uaX{]~
+֢kOE;MGm7+f:t1bѫW-;0eY)| Ck͋b{US?P=r*RT2`lrA`}VC*Eq>Z܀gU]΍[sMf{+#`A:5oy-Ͼ2u.8ub5o*}?5cpHELI捐gsbe4cӯmG"|A뼚>!1G#j\"LӱMfxs }G0,o57 H8@Z0VBǜJ}[\}FD\p S}l̋ q[<\JɗF;jWx)=]l+K<*%T5k],G2U ›^^[KjKy>*뙽Erz=Cn@?EQs~<9@uԹw
+QƑոiaU$w,DyO&>Zq%I&%~L5&&zL
+V5%8I jK>P~ɪʂeW|IJT4MkHvwh~Esп<wˠho7Y$7VvSw/co<4L3{{e֓-Wv~SD7g} SCK3*'=d=T*=5_0r>KЭw2r; ;Q[ct`@ߊ=eN"cme.
++H--u+<yhʋUel׺M!ʳs_Ϻ6QrsZI5{.בWxd'Cqz6T9:qѵ%T儭ZZ$)<J'P
+儡Ć^ d! v7@t qXN6oA8bx\ͦ@ʃiwJ~v=XW!AO@rCOu@^$R 3G9A@ 8)au-C3V+iz%+Ht>C¸+|@%]Epy!:RUdC}@08(#/ a!4U]=9F)R4=G(T(q 9hW} i+#m%/ /8,W@Zą/.!
+- "i
+eԒk-!h'`0tyj. "0xy)m)k%Pqmthz-eCt|+5C_6 i<\ˎ$
+onʵaH \*XW Z41!*F@sd&Hw768aez 괆Pk)KC.B BaJie[RhQ\0 wҌ5HN@ByizJ3w=/\Bl
+S"ZZ<!!
+pF 85%y mTISYpx2TMiP!#i@|};@z4H$dȥxA4HZ2"Bn],,WB ¦\{ds"`Ȯ·1gAƁI:_;%
+撏McJXPSxZ
+ [4@X!"
+B&v<BEJ='C㛒5@> 0&%dpe `Yh
+2ƴ0hC
+| WGJ\aIR#$'0ap$Oc 2Zj\]OHvq+&x 6 βTBsO BU >)c_"0EsO B<ʔǠF\>EQl`Z֎$tABi
+~uM,  "y74>zɨMav .RF;C&Q]
+A>K]ai$h@u '"L=030g[ėZ:)3;kHI2$14oT( q'X|z# ^v@)t60O?h[`ԼgJ)nBA*WVQ:G"hׂ 0$~}o($MF1M)'vN tJR%a&zkb#? ")>RE: 6 }CF@za9'raᇒ
+R&z',¸9.R =="<ԩL%MB mҐĢ 6EVfC:=*2L(*3@C|3T
+Q%sx{by{ QCRz ?Mt6<]BLghG`+h1&Qۢr'tH pcd:}eBDT-*1+a:0A
+mI_& `H l"9\"LD!;l.񇌂.`.dGRPg`FP8PYƂxD pAbzJ,k-&2 ?L*7I&Y
+&!HCİ0`(?'@51mBVtb?~ Д)ȄR~!4&qAhD~O }&9b("Nh? d.R͖"̞kM%t`yVFe^ $ M=p8u$W8Oڌ5R4M@zh#t+ 06LDyXcǕ}DSň@%'J8^PQ.yz ~z Yt$Dein
+' l^: S:0JO( 4kle;q0JzB8[E(%O1c6c7dVL=^AYS=Qs5zGEԧbZ# 5L j1@ks}uǶ&!%J^bQzU @(LL?[p2ɒY%S_`R cCh=w<e,Ý&Xa!SIJ`NVڽm w{nc
+VڗВ;}؜po`,^X3D -6*LXAIpM0|`5i=:Pxx P<F
+D?h*}W)G܋3gIj
+MM*I>胾O
+M-2IIe@6"Ju BRyES~4gC~7@H{CJ#aO{I~/L'gBexM),)Ÿ=i O)8tdQ-.?r&NNpFs >Xۖƻ12exHΈ5xxXfc}t
+f]|bGd":I+. X:Z,_qs~?lw;+9ksֶ۵K翠}Ԙ_Y2л[sW{(ucR!P*ۅL^JBAJL|ؐxXqD &t3x:`T򳪀X)fxLYs( #DĻ k:g
+sgS1$Sxt5t_9F"dNKPt5Y-O<
+*m?1bc#f |T\|@cRrzG#G Is-薋goyttߐzt\vMXYtU
+v7T4ae.YbIAt_y2> UV#.aS(AяF,a}O NUz9_vfkrtK>yv_z"MNjōf3+ endstream endobj 6 0 obj <</Intent 31 0 R/Name(Black Blackground)/Type/OCG/Usage 32 0 R>> endobj 7 0 obj <</Intent 33 0 R/Name(SemiBold)/Type/OCG/Usage 34 0 R>> endobj 45 0 obj <</Intent 69 0 R/Name(Black Blackground)/Type/OCG/Usage 70 0 R>> endobj 46 0 obj <</Intent 71 0 R/Name(SemiBold)/Type/OCG/Usage 72 0 R>> endobj 83 0 obj <</Intent 107 0 R/Name(Black Blackground)/Type/OCG/Usage 108 0 R>> endobj 84 0 obj <</Intent 109 0 R/Name(SemiBold)/Type/OCG/Usage 110 0 R>> endobj 121 0 obj <</Intent 145 0 R/Name(Black Blackground)/Type/OCG/Usage 146 0 R>> endobj 122 0 obj <</Intent 147 0 R/Name(SemiBold)/Type/OCG/Usage 148 0 R>> endobj 159 0 obj <</Intent 183 0 R/Name(Black Blackground)/Type/OCG/Usage 184 0 R>> endobj 160 0 obj <</Intent 185 0 R/Name(SemiBold)/Type/OCG/Usage 186 0 R>> endobj 197 0 obj <</Intent 221 0 R/Name(Black Blackground)/Type/OCG/Usage 222 0 R>> endobj 198 0 obj <</Intent 223 0 R/Name(SemiBold)/Type/OCG/Usage 224 0 R>> endobj 235 0 obj <</Intent 259 0 R/Name(Black Blackground)/Type/OCG/Usage 260 0 R>> endobj 236 0 obj <</Intent 261 0 R/Name(SemiBold)/Type/OCG/Usage 262 0 R>> endobj 273 0 obj <</Intent 297 0 R/Name(Black Blackground)/Type/OCG/Usage 298 0 R>> endobj 274 0 obj <</Intent 299 0 R/Name(SemiBold)/Type/OCG/Usage 300 0 R>> endobj 311 0 obj <</Intent 335 0 R/Name(Black Blackground)/Type/OCG/Usage 336 0 R>> endobj 312 0 obj <</Intent 337 0 R/Name(SemiBold)/Type/OCG/Usage 338 0 R>> endobj 349 0 obj <</Intent 373 0 R/Name(Black Blackground)/Type/OCG/Usage 374 0 R>> endobj 350 0 obj <</Intent 375 0 R/Name(SemiBold)/Type/OCG/Usage 376 0 R>> endobj 375 0 obj [/View/Design] endobj 376 0 obj <</CreatorInfo<</Creator(Adobe Illustrator 15.1)/Subtype/Artwork>>>> endobj 373 0 obj [/View/Design] endobj 374 0 obj <</CreatorInfo<</Creator(Adobe Illustrator 15.1)/Subtype/Artwork>>>> endobj 337 0 obj [/View/Design] endobj 338 0 obj <</CreatorInfo<</Creator(Adobe Illustrator 15.1)/Subtype/Artwork>>>> endobj 335 0 obj [/View/Design] endobj 336 0 obj <</CreatorInfo<</Creator(Adobe Illustrator 15.1)/Subtype/Artwork>>>> endobj 299 0 obj [/View/Design] endobj 300 0 obj <</CreatorInfo<</Creator(Adobe Illustrator 15.1)/Subtype/Artwork>>>> endobj 297 0 obj [/View/Design] endobj 298 0 obj <</CreatorInfo<</Creator(Adobe Illustrator 15.1)/Subtype/Artwork>>>> endobj 261 0 obj [/View/Design] endobj 262 0 obj <</CreatorInfo<</Creator(Adobe Illustrator 15.1)/Subtype/Artwork>>>> endobj 259 0 obj [/View/Design] endobj 260 0 obj <</CreatorInfo<</Creator(Adobe Illustrator 15.1)/Subtype/Artwork>>>> endobj 223 0 obj [/View/Design] endobj 224 0 obj <</CreatorInfo<</Creator(Adobe Illustrator 15.1)/Subtype/Artwork>>>> endobj 221 0 obj [/View/Design] endobj 222 0 obj <</CreatorInfo<</Creator(Adobe Illustrator 15.1)/Subtype/Artwork>>>> endobj 185 0 obj [/View/Design] endobj 186 0 obj <</CreatorInfo<</Creator(Adobe Illustrator 15.0)/Subtype/Artwork>>>> endobj 183 0 obj [/View/Design] endobj 184 0 obj <</CreatorInfo<</Creator(Adobe Illustrator 15.0)/Subtype/Artwork>>>> endobj 147 0 obj [/View/Design] endobj 148 0 obj <</CreatorInfo<</Creator(Adobe Illustrator 15.0)/Subtype/Artwork>>>> endobj 145 0 obj [/View/Design] endobj 146 0 obj <</CreatorInfo<</Creator(Adobe Illustrator 15.0)/Subtype/Artwork>>>> endobj 109 0 obj [/View/Design] endobj 110 0 obj <</CreatorInfo<</Creator(Adobe Illustrator 15.0)/Subtype/Artwork>>>> endobj 107 0 obj [/View/Design] endobj 108 0 obj <</CreatorInfo<</Creator(Adobe Illustrator 15.0)/Subtype/Artwork>>>> endobj 71 0 obj [/View/Design] endobj 72 0 obj <</CreatorInfo<</Creator(Adobe Illustrator 15.0)/Subtype/Artwork>>>> endobj 69 0 obj [/View/Design] endobj 70 0 obj <</CreatorInfo<</Creator(Adobe Illustrator 15.0)/Subtype/Artwork>>>> endobj 33 0 obj [/View/Design] endobj 34 0 obj <</CreatorInfo<</Creator(Adobe Illustrator 15.0)/Subtype/Artwork>>>> endobj 31 0 obj [/View/Design] endobj 32 0 obj <</CreatorInfo<</Creator(Adobe Illustrator 15.0)/Subtype/Artwork>>>> endobj 388 0 obj [387 0 R 386 0 R] endobj 420 0 obj <</CreationDate(D:20120612190700-07'00')/Creator(Adobe Illustrator CS5)/ModDate(D:20120621184048-07'00')/Producer(Adobe PDF library 9.90)/Title(google_badge_de)>> endobj xref 0 421 0000000004 65535 f
+0000000016 00000 n
+0000000470 00000 n
+0000049434 00000 n
+0000000005 00000 f
+0000000008 00000 f
+0000242580 00000 n
+0000242660 00000 n
+0000000010 00000 f
+0000049485 00000 n
+0000000011 00000 f
+0000000012 00000 f
+0000000013 00000 f
+0000000014 00000 f
+0000000015 00000 f
+0000000016 00000 f
+0000000017 00000 f
+0000000018 00000 f
+0000000019 00000 f
+0000000020 00000 f
+0000000021 00000 f
+0000000022 00000 f
+0000000023 00000 f
+0000000024 00000 f
+0000000025 00000 f
+0000000026 00000 f
+0000000027 00000 f
+0000000028 00000 f
+0000000029 00000 f
+0000000030 00000 f
+0000000035 00000 f
+0000246390 00000 n
+0000246421 00000 n
+0000246274 00000 n
+0000246305 00000 n
+0000000036 00000 f
+0000000037 00000 f
+0000000038 00000 f
+0000000039 00000 f
+0000000040 00000 f
+0000000041 00000 f
+0000000042 00000 f
+0000000043 00000 f
+0000000044 00000 f
+0000000047 00000 f
+0000242731 00000 n
+0000242812 00000 n
+0000000048 00000 f
+0000000049 00000 f
+0000000050 00000 f
+0000000051 00000 f
+0000000052 00000 f
+0000000053 00000 f
+0000000054 00000 f
+0000000055 00000 f
+0000000056 00000 f
+0000000057 00000 f
+0000000058 00000 f
+0000000059 00000 f
+0000000060 00000 f
+0000000061 00000 f
+0000000062 00000 f
+0000000063 00000 f
+0000000064 00000 f
+0000000065 00000 f
+0000000066 00000 f
+0000000067 00000 f
+0000000068 00000 f
+0000000073 00000 f
+0000246158 00000 n
+0000246189 00000 n
+0000246042 00000 n
+0000246073 00000 n
+0000000074 00000 f
+0000000075 00000 f
+0000000076 00000 f
+0000000077 00000 f
+0000000078 00000 f
+0000000079 00000 f
+0000000080 00000 f
+0000000081 00000 f
+0000000082 00000 f
+0000000085 00000 f
+0000242884 00000 n
+0000242967 00000 n
+0000000086 00000 f
+0000000087 00000 f
+0000000088 00000 f
+0000000089 00000 f
+0000000090 00000 f
+0000000091 00000 f
+0000000092 00000 f
+0000000093 00000 f
+0000000094 00000 f
+0000000095 00000 f
+0000000096 00000 f
+0000000097 00000 f
+0000000098 00000 f
+0000000099 00000 f
+0000000100 00000 f
+0000000101 00000 f
+0000000102 00000 f
+0000000103 00000 f
+0000000104 00000 f
+0000000105 00000 f
+0000000106 00000 f
+0000000111 00000 f
+0000245924 00000 n
+0000245956 00000 n
+0000245806 00000 n
+0000245838 00000 n
+0000000112 00000 f
+0000000113 00000 f
+0000000114 00000 f
+0000000115 00000 f
+0000000116 00000 f
+0000000117 00000 f
+0000000118 00000 f
+0000000119 00000 f
+0000000120 00000 f
+0000000123 00000 f
+0000243041 00000 n
+0000243125 00000 n
+0000000124 00000 f
+0000000125 00000 f
+0000000126 00000 f
+0000000127 00000 f
+0000000128 00000 f
+0000000129 00000 f
+0000000130 00000 f
+0000000131 00000 f
+0000000132 00000 f
+0000000133 00000 f
+0000000134 00000 f
+0000000135 00000 f
+0000000136 00000 f
+0000000137 00000 f
+0000000138 00000 f
+0000000139 00000 f
+0000000140 00000 f
+0000000141 00000 f
+0000000142 00000 f
+0000000143 00000 f
+0000000144 00000 f
+0000000149 00000 f
+0000245688 00000 n
+0000245720 00000 n
+0000245570 00000 n
+0000245602 00000 n
+0000000150 00000 f
+0000000151 00000 f
+0000000152 00000 f
+0000000153 00000 f
+0000000154 00000 f
+0000000155 00000 f
+0000000156 00000 f
+0000000157 00000 f
+0000000158 00000 f
+0000000161 00000 f
+0000243200 00000 n
+0000243284 00000 n
+0000000162 00000 f
+0000000163 00000 f
+0000000164 00000 f
+0000000165 00000 f
+0000000166 00000 f
+0000000167 00000 f
+0000000168 00000 f
+0000000169 00000 f
+0000000170 00000 f
+0000000171 00000 f
+0000000172 00000 f
+0000000173 00000 f
+0000000174 00000 f
+0000000175 00000 f
+0000000176 00000 f
+0000000177 00000 f
+0000000178 00000 f
+0000000179 00000 f
+0000000180 00000 f
+0000000181 00000 f
+0000000182 00000 f
+0000000187 00000 f
+0000245452 00000 n
+0000245484 00000 n
+0000245334 00000 n
+0000245366 00000 n
+0000000188 00000 f
+0000000189 00000 f
+0000000190 00000 f
+0000000191 00000 f
+0000000192 00000 f
+0000000193 00000 f
+0000000194 00000 f
+0000000195 00000 f
+0000000196 00000 f
+0000000199 00000 f
+0000243359 00000 n
+0000243443 00000 n
+0000000200 00000 f
+0000000201 00000 f
+0000000202 00000 f
+0000000203 00000 f
+0000000204 00000 f
+0000000205 00000 f
+0000000206 00000 f
+0000000207 00000 f
+0000000208 00000 f
+0000000209 00000 f
+0000000210 00000 f
+0000000211 00000 f
+0000000212 00000 f
+0000000213 00000 f
+0000000214 00000 f
+0000000215 00000 f
+0000000216 00000 f
+0000000217 00000 f
+0000000218 00000 f
+0000000219 00000 f
+0000000220 00000 f
+0000000225 00000 f
+0000245216 00000 n
+0000245248 00000 n
+0000245098 00000 n
+0000245130 00000 n
+0000000226 00000 f
+0000000227 00000 f
+0000000228 00000 f
+0000000229 00000 f
+0000000230 00000 f
+0000000231 00000 f
+0000000232 00000 f
+0000000233 00000 f
+0000000234 00000 f
+0000000237 00000 f
+0000243518 00000 n
+0000243602 00000 n
+0000000238 00000 f
+0000000239 00000 f
+0000000240 00000 f
+0000000241 00000 f
+0000000242 00000 f
+0000000243 00000 f
+0000000244 00000 f
+0000000245 00000 f
+0000000246 00000 f
+0000000247 00000 f
+0000000248 00000 f
+0000000249 00000 f
+0000000250 00000 f
+0000000251 00000 f
+0000000252 00000 f
+0000000253 00000 f
+0000000254 00000 f
+0000000255 00000 f
+0000000256 00000 f
+0000000257 00000 f
+0000000258 00000 f
+0000000263 00000 f
+0000244980 00000 n
+0000245012 00000 n
+0000244862 00000 n
+0000244894 00000 n
+0000000264 00000 f
+0000000265 00000 f
+0000000266 00000 f
+0000000267 00000 f
+0000000268 00000 f
+0000000269 00000 f
+0000000270 00000 f
+0000000271 00000 f
+0000000272 00000 f
+0000000275 00000 f
+0000243677 00000 n
+0000243761 00000 n
+0000000276 00000 f
+0000000277 00000 f
+0000000278 00000 f
+0000000279 00000 f
+0000000280 00000 f
+0000000281 00000 f
+0000000282 00000 f
+0000000283 00000 f
+0000000284 00000 f
+0000000285 00000 f
+0000000286 00000 f
+0000000287 00000 f
+0000000288 00000 f
+0000000289 00000 f
+0000000290 00000 f
+0000000291 00000 f
+0000000292 00000 f
+0000000293 00000 f
+0000000294 00000 f
+0000000295 00000 f
+0000000296 00000 f
+0000000301 00000 f
+0000244744 00000 n
+0000244776 00000 n
+0000244626 00000 n
+0000244658 00000 n
+0000000302 00000 f
+0000000303 00000 f
+0000000304 00000 f
+0000000305 00000 f
+0000000306 00000 f
+0000000307 00000 f
+0000000308 00000 f
+0000000309 00000 f
+0000000310 00000 f
+0000000313 00000 f
+0000243836 00000 n
+0000243920 00000 n
+0000000314 00000 f
+0000000315 00000 f
+0000000316 00000 f
+0000000317 00000 f
+0000000318 00000 f
+0000000319 00000 f
+0000000320 00000 f
+0000000321 00000 f
+0000000322 00000 f
+0000000323 00000 f
+0000000324 00000 f
+0000000325 00000 f
+0000000326 00000 f
+0000000327 00000 f
+0000000328 00000 f
+0000000329 00000 f
+0000000330 00000 f
+0000000331 00000 f
+0000000332 00000 f
+0000000333 00000 f
+0000000334 00000 f
+0000000339 00000 f
+0000244508 00000 n
+0000244540 00000 n
+0000244390 00000 n
+0000244422 00000 n
+0000000340 00000 f
+0000000341 00000 f
+0000000342 00000 f
+0000000343 00000 f
+0000000344 00000 f
+0000000345 00000 f
+0000000346 00000 f
+0000000347 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000243995 00000 n
+0000244079 00000 n
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000244272 00000 n
+0000244304 00000 n
+0000244154 00000 n
+0000244186 00000 n
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000058243 00000 n
+0000058327 00000 n
+0000246506 00000 n
+0000049922 00000 n
+0000058789 00000 n
+0000058752 00000 n
+0000058638 00000 n
+0000054116 00000 n
+0000054262 00000 n
+0000054408 00000 n
+0000054554 00000 n
+0000053313 00000 n
+0000053552 00000 n
+0000053602 00000 n
+0000054700 00000 n
+0000058031 00000 n
+0000057818 00000 n
+0000057602 00000 n
+0000054737 00000 n
+0000054953 00000 n
+0000054834 00000 n
+0000057699 00000 n
+0000057915 00000 n
+0000058128 00000 n
+0000058520 00000 n
+0000058552 00000 n
+0000058402 00000 n
+0000058434 00000 n
+0000058865 00000 n
+0000059089 00000 n
+0000060124 00000 n
+0000067096 00000 n
+0000132685 00000 n
+0000198274 00000 n
+0000246541 00000 n
+trailer <</Size 421/Root 1 0 R/Info 420 0 R/ID[<12EE2A4941754B9AB45F47B3159D96E7><4C5D1FCC899F4CC99234C1558EBE0525>]>> startxref 246721 %%EOF \ No newline at end of file
diff --git a/docs/html/images/brand/en_generic_rgb_wo_45.png b/docs/html/images/brand/en_generic_rgb_wo_45.png
new file mode 100644
index 0000000..73dd393
--- /dev/null
+++ b/docs/html/images/brand/en_generic_rgb_wo_45.png
Binary files differ
diff --git a/docs/html/images/brand/en_generic_rgb_wo_60.png b/docs/html/images/brand/en_generic_rgb_wo_60.png
new file mode 100644
index 0000000..9a50aff
--- /dev/null
+++ b/docs/html/images/brand/en_generic_rgb_wo_60.png
Binary files differ
diff --git a/docs/html/images/brand/google_play_logo_450.png b/docs/html/images/brand/google_play_logo_450.png
deleted file mode 100644
index 59a1fcf..0000000
--- a/docs/html/images/brand/google_play_logo_450.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/images/brand/learnmore.gif b/docs/html/images/brand/learnmore.gif
deleted file mode 100644
index 70a8e6b..0000000
--- a/docs/html/images/brand/learnmore.gif
+++ /dev/null
Binary files differ
diff --git a/docs/html/images/brand/logo_android.gif b/docs/html/images/brand/logo_android.gif
deleted file mode 100644
index 169c764..0000000
--- a/docs/html/images/brand/logo_android.gif
+++ /dev/null
Binary files differ
diff --git a/docs/html/images/brand/mediaplayer.gif b/docs/html/images/brand/mediaplayer.gif
deleted file mode 100644
index 860d110..0000000
--- a/docs/html/images/brand/mediaplayer.gif
+++ /dev/null
Binary files differ
diff --git a/docs/html/images/brand/mediaplayer.png b/docs/html/images/brand/mediaplayer.png
new file mode 100644
index 0000000..f857d5f
--- /dev/null
+++ b/docs/html/images/brand/mediaplayer.png
Binary files differ
diff --git a/docs/html/images/brand/norad.gif b/docs/html/images/brand/norad.gif
deleted file mode 100644
index d8707bd..0000000
--- a/docs/html/images/brand/norad.gif
+++ /dev/null
Binary files differ
diff --git a/docs/html/images/dialog_buttons.png b/docs/html/images/dialog_buttons.png
deleted file mode 100644
index 81aaec4..0000000
--- a/docs/html/images/dialog_buttons.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/images/dialog_custom.png b/docs/html/images/dialog_custom.png
deleted file mode 100644
index b2523fd..0000000
--- a/docs/html/images/dialog_custom.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/images/dialog_list.png b/docs/html/images/dialog_list.png
deleted file mode 100644
index f2736bf..0000000
--- a/docs/html/images/dialog_list.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/images/dialog_progress_bar.png b/docs/html/images/dialog_progress_bar.png
deleted file mode 100644
index 3e74419..0000000
--- a/docs/html/images/dialog_progress_bar.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/images/dialog_progress_spinning.png b/docs/html/images/dialog_progress_spinning.png
deleted file mode 100644
index 501f4802..0000000
--- a/docs/html/images/dialog_progress_spinning.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/images/dialog_singlechoicelist.png b/docs/html/images/dialog_singlechoicelist.png
deleted file mode 100644
index 90629f0..0000000
--- a/docs/html/images/dialog_singlechoicelist.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/images/distribute/instapaper.png b/docs/html/images/distribute/instapaper.png
new file mode 100644
index 0000000..ffbf052
--- /dev/null
+++ b/docs/html/images/distribute/instapaper.png
Binary files differ
diff --git a/docs/html/images/distribute/mint.png b/docs/html/images/distribute/mint.png
new file mode 100644
index 0000000..50d90d5
--- /dev/null
+++ b/docs/html/images/distribute/mint.png
Binary files differ
diff --git a/docs/html/images/distribute/tinyvillage.png b/docs/html/images/distribute/tinyvillage.png
new file mode 100644
index 0000000..cde77f0
--- /dev/null
+++ b/docs/html/images/distribute/tinyvillage.png
Binary files differ
diff --git a/docs/html/images/systrace/display-rhythm.png b/docs/html/images/systrace/display-rhythm.png
new file mode 100644
index 0000000..a249161
--- /dev/null
+++ b/docs/html/images/systrace/display-rhythm.png
Binary files differ
diff --git a/docs/html/images/systrace/process-rhythm.png b/docs/html/images/systrace/process-rhythm.png
new file mode 100644
index 0000000..7498cc7
--- /dev/null
+++ b/docs/html/images/systrace/process-rhythm.png
Binary files differ
diff --git a/docs/html/images/systrace/report.png b/docs/html/images/systrace/report.png
new file mode 100644
index 0000000..a642960
--- /dev/null
+++ b/docs/html/images/systrace/report.png
Binary files differ
diff --git a/docs/html/images/toast.png b/docs/html/images/toast.png
index 223048a..b4c709a 100644
--- a/docs/html/images/toast.png
+++ b/docs/html/images/toast.png
Binary files differ
diff --git a/docs/html/images/ui-ex-multi-pane.png b/docs/html/images/ui-ex-multi-pane.png
new file mode 100644
index 0000000..188bb8b
--- /dev/null
+++ b/docs/html/images/ui-ex-multi-pane.png
Binary files differ
diff --git a/docs/html/images/ui-ex-single-panes.png b/docs/html/images/ui-ex-single-panes.png
new file mode 100644
index 0000000..dff24a7
--- /dev/null
+++ b/docs/html/images/ui-ex-single-panes.png
Binary files differ
diff --git a/docs/html/images/ui/dialog_buttons.png b/docs/html/images/ui/dialog_buttons.png
new file mode 100644
index 0000000..ed952a1
--- /dev/null
+++ b/docs/html/images/ui/dialog_buttons.png
Binary files differ
diff --git a/docs/html/images/ui/dialog_checkboxes.png b/docs/html/images/ui/dialog_checkboxes.png
new file mode 100644
index 0000000..8f272e5
--- /dev/null
+++ b/docs/html/images/ui/dialog_checkboxes.png
Binary files differ
diff --git a/docs/html/images/ui/dialog_custom.png b/docs/html/images/ui/dialog_custom.png
new file mode 100644
index 0000000..244473b
--- /dev/null
+++ b/docs/html/images/ui/dialog_custom.png
Binary files differ
diff --git a/docs/html/images/ui/dialog_list.png b/docs/html/images/ui/dialog_list.png
new file mode 100644
index 0000000..437fc74
--- /dev/null
+++ b/docs/html/images/ui/dialog_list.png
Binary files differ
diff --git a/docs/html/images/ui/dialogs.png b/docs/html/images/ui/dialogs.png
new file mode 100644
index 0000000..d45b0b5
--- /dev/null
+++ b/docs/html/images/ui/dialogs.png
Binary files differ
diff --git a/docs/html/images/ui/dialogs_regions.png b/docs/html/images/ui/dialogs_regions.png
new file mode 100644
index 0000000..2bfc1a4
--- /dev/null
+++ b/docs/html/images/ui/dialogs_regions.png
Binary files differ
diff --git a/docs/html/images/ui/notifications/activity_indicator.png b/docs/html/images/ui/notifications/activity_indicator.png
new file mode 100644
index 0000000..e21fae2
--- /dev/null
+++ b/docs/html/images/ui/notifications/activity_indicator.png
Binary files differ
diff --git a/docs/html/images/ui/notifications/bigpicture_notification.png b/docs/html/images/ui/notifications/bigpicture_notification.png
new file mode 100644
index 0000000..ced6380
--- /dev/null
+++ b/docs/html/images/ui/notifications/bigpicture_notification.png
Binary files differ
diff --git a/docs/html/images/ui/notifications/bigpicture_notification_callouts.png b/docs/html/images/ui/notifications/bigpicture_notification_callouts.png
new file mode 100644
index 0000000..e2d313a
--- /dev/null
+++ b/docs/html/images/ui/notifications/bigpicture_notification_callouts.png
Binary files differ
diff --git a/docs/html/images/ui/notifications/bigtext_notification.png b/docs/html/images/ui/notifications/bigtext_notification.png
new file mode 100644
index 0000000..cd6e764
--- /dev/null
+++ b/docs/html/images/ui/notifications/bigtext_notification.png
Binary files differ
diff --git a/docs/html/images/ui/notifications/bigtext_notification_callouts.png b/docs/html/images/ui/notifications/bigtext_notification_callouts.png
new file mode 100644
index 0000000..4cfa403
--- /dev/null
+++ b/docs/html/images/ui/notifications/bigtext_notification_callouts.png
Binary files differ
diff --git a/docs/html/images/ui/notifications/custom_message.png b/docs/html/images/ui/notifications/custom_message.png
new file mode 100755
index 0000000..00b7632
--- /dev/null
+++ b/docs/html/images/ui/notifications/custom_message.png
Binary files differ
diff --git a/docs/html/images/ui/notifications/iconic_notification.png b/docs/html/images/ui/notifications/iconic_notification.png
new file mode 100644
index 0000000..e72fe4e
--- /dev/null
+++ b/docs/html/images/ui/notifications/iconic_notification.png
Binary files differ
diff --git a/docs/html/images/ui/notifications/inbox_notification.png b/docs/html/images/ui/notifications/inbox_notification.png
new file mode 100644
index 0000000..fb182d5
--- /dev/null
+++ b/docs/html/images/ui/notifications/inbox_notification.png
Binary files differ
diff --git a/docs/html/images/ui/notifications/inbox_notification_callouts.png b/docs/html/images/ui/notifications/inbox_notification_callouts.png
new file mode 100644
index 0000000..2ec818e
--- /dev/null
+++ b/docs/html/images/ui/notifications/inbox_notification_callouts.png
Binary files differ
diff --git a/docs/html/images/ui/notifications/normal_notification.png b/docs/html/images/ui/notifications/normal_notification.png
new file mode 100644
index 0000000..9bea5fb
--- /dev/null
+++ b/docs/html/images/ui/notifications/normal_notification.png
Binary files differ
diff --git a/docs/html/images/ui/notifications/normal_notification_callouts.png b/docs/html/images/ui/notifications/normal_notification_callouts.png
new file mode 100644
index 0000000..6880e90
--- /dev/null
+++ b/docs/html/images/ui/notifications/normal_notification_callouts.png
Binary files differ
diff --git a/docs/html/images/ui/notifications/notifications_window.png b/docs/html/images/ui/notifications/notifications_window.png
new file mode 100755
index 0000000..0354ee9
--- /dev/null
+++ b/docs/html/images/ui/notifications/notifications_window.png
Binary files differ
diff --git a/docs/html/images/ui/notifications/progress_bar_summary.png b/docs/html/images/ui/notifications/progress_bar_summary.png
new file mode 100644
index 0000000..073e697
--- /dev/null
+++ b/docs/html/images/ui/notifications/progress_bar_summary.png
Binary files differ
diff --git a/docs/html/images/ui/notifications/progress_indicator_1.png b/docs/html/images/ui/notifications/progress_indicator_1.png
new file mode 100644
index 0000000..f4c2365
--- /dev/null
+++ b/docs/html/images/ui/notifications/progress_indicator_1.png
Binary files differ
diff --git a/docs/html/images/ui/notifications/progress_indicator_2.png b/docs/html/images/ui/notifications/progress_indicator_2.png
new file mode 100644
index 0000000..975c90e
--- /dev/null
+++ b/docs/html/images/ui/notifications/progress_indicator_2.png
Binary files differ
diff --git a/docs/html/images/ui/notifications/status_bar.png b/docs/html/images/ui/notifications/status_bar.png
new file mode 100755
index 0000000..f0240a5
--- /dev/null
+++ b/docs/html/images/ui/notifications/status_bar.png
Binary files differ
diff --git a/docs/html/images/ui/notifications/updated_notification.png b/docs/html/images/ui/notifications/updated_notification.png
new file mode 100644
index 0000000..f69fa4b
--- /dev/null
+++ b/docs/html/images/ui/notifications/updated_notification.png
Binary files differ
diff --git a/docs/html/legal.jd b/docs/html/legal.jd
index 3206503..1698af0f 100644
--- a/docs/html/legal.jd
+++ b/docs/html/legal.jd
@@ -39,7 +39,7 @@ href="http://creativecommons.org/licenses/by/2.5/">Creative Commons Attribution<
use of it must be attributed as such.</p>
<p>For more information about Android brands, see the <a
-href="{@docRoot}distribute/googleplay/promote/brand.html">Android Branding Guidelines</a>.</p>
+href="{@docRoot}distribute/googleplay/promote/brand.html">Brand Guidelines</a>.</p>
<p>All other trademarks are the property of their respective owners.</p>
diff --git a/docs/html/sdk/installing/installing-adt.jd b/docs/html/sdk/installing/installing-adt.jd
index 4fc2ca6..feec56d 100644
--- a/docs/html/sdk/installing/installing-adt.jd
+++ b/docs/html/sdk/installing/installing-adt.jd
@@ -63,23 +63,20 @@ the software can't be established, click <strong>OK</strong>.</p></li>
<h2 id="Configure">Configure the ADT Plugin</h2>
-<p>After you've installed ADT and restarted Eclipse, you
+<p>Once Eclipse restarts, you
must specify the location of your Android SDK directory:</p>
<ol>
- <li>Select <strong>Window</strong> &gt; <strong>Preferences...</strong> to open the Preferences
- panel (on Mac OS X, select <strong>Eclipse</strong> &gt; <strong>Preferences</strong>).</li>
- <li>Select <strong>Android</strong> from the left panel.</li>
- <p>You may see a dialog asking whether you want to send usage statistics to Google. If so,
-make your choice and click <strong>Proceed</strong>.</p>
- <li>For the <em>SDK Location</em> in the main panel, click <strong>Browse...</strong> and
- locate your downloaded Android SDK directory (such as <code>android-sdk-windows</code>).</li>
- <li>Click <strong>Apply</strong>, then <strong>OK</strong>.</li>
+ <li>In the "Welcome to Android Development" window that appears, select <strong>Use
+existing SDKs</strong>.</li>
+ <li>Browse and select the location of the Android SDK directory you recently
+downloaded.</li>
+ <li>Click <strong>Next</strong>.</li>
</ol>
<p>If you haven't encountered any errors, you're done setting up ADT
- and can continue to the next step of the SDK installation.</p>
+ and can continue to <a href="{@docRoot}sdk/installing/next.html">Next Steps</a>.</p>
diff --git a/docs/html/tools/adk/adk2.jd b/docs/html/tools/adk/adk2.jd
index d5be8ab..0b18583 100644
--- a/docs/html/tools/adk/adk2.jd
+++ b/docs/html/tools/adk/adk2.jd
@@ -28,19 +28,22 @@ page.title=Accessory Development Kit 2012 Guide
<ol>
<li><a href="https://developers.google.com/events/io/sessions/gooio2012/128/">
Google I/O Session Video</a></li>
- <li><a href="aoa.html">Android Open Accessory Protocol</a></li>
- <li><a href="aoa2.html">Android Open Accessory Protocol 2.0</a></li>
+ <li><a href="http://source.android.com/tech/accessories/aoap/aoa.html">
+ Android Open Accessory Protocol</a></li>
+ <li><a href="http://source.android.com/tech/accessories/aoap/aoa2.html">
+ Android Open Accessory Protocol 2.0</a></li>
<li><a href="{@docRoot}guide/topics/connectivity/usb/accessory.html">
USB Accessory Dev Guide</a></li>
</ol>
</div>
</div>
-<p>The Android Accessory Development Kit (ADK) for 2012 is the latest reference implementation of
-an <a href="aoa.html">Android Open Accessory</a> device, designed to help Android hardware accessory
-builders and software developers create accessories for Android. The ADK 2012 is based on the <a
-href="http://arduino.cc">Arduino</a> open source electronics prototyping platform, with some
-hardware and software extensions that allow it to communicate with Android devices.</p>
+<p>The Android Accessory Development Kit (ADK) for 2012 is the latest reference implementation of an
+<a href="http://source.android.com/tech/accessories/index.html">Android Open Accessory</a> device,
+designed to help Android hardware accessory builders and software developers create accessories
+for Android. The ADK 2012 is based on the <a href="http://arduino.cc">Arduino</a> open source
+electronics prototyping platform, with some hardware and software extensions that allow it to
+communicate with Android devices.</p>
<p>A limited number of these kits were produced and distributed at the Google I/O 2012 developer
conference. If you did not receive one of these kits, fear not! The specifications and design files
@@ -537,7 +540,7 @@ void loop() {
L.accessorySend(outmsg, outmsgLen);
}
L.adkEventProcess();
-}
+}
</pre>
<p>For more details, review the implementations of these methods in the {@code clock.ino}
@@ -604,8 +607,8 @@ implementation details.</p>
<p>One of the important new features introduced with the ADK 2012 is the ability to play audio over
a USB connection. This innovation was introduced as an update to Android Open Accessory (AOA)
-<a href="aoa2.html">protocol 2.0</a> and is available on devices running Android 4.1 (API Level 16)
-and higher.</p>
+<a href="http://source.android.com/tech/accessories/aoap/aoa2.html">protocol 2.0</a> and is
+available on devices running Android 4.1 (API Level 16) and higher.</p>
<p>The ADK 2012 provides a reference implementation of this functionality for accessory developers.
No software application is required to be installed on the connected Android device, accessory
diff --git a/docs/html/tools/adk/aoa.jd b/docs/html/tools/adk/aoa.jd
deleted file mode 100644
index 7884d6e..0000000
--- a/docs/html/tools/adk/aoa.jd
+++ /dev/null
@@ -1,186 +0,0 @@
-page.title=Android Open Accessory Protocol
-@jd:body
-
-<div id="qv-wrapper">
- <div id="qv">
- <h2>In this document</h2>
- <ol>
- <li><a href="#accessory-protocol">Implementing the Android Accessory Protocol</a>
- <ol>
- <li><a href="#wait">Wait for and detect connected devices</a></li>
- <li><a href="#determine">Determine the device's accessory mode support</a></li>
- <li><a href="#start">Attempt to start the device in accessory mode</a></li>
- <li><a href="#establish">Establish communication with the device</a></li>
- </li>
- </ol>
-
- <h2>See also</h2>
- <ol>
- <li><a href="aoa2.html">Android Open Accessory Protocol 2.0</a></li>
- <li><a href="{@docRoot}guide/topics/connectivity/usb/accessory.html">USB Accessory Dev
-Guide</a></li>
- </ol>
- </div>
- </div>
-
- <p>With Android 3.1, the platform introduces Android Open Accessory
- support, which allows external USB hardware (an Android USB accessory) to interact with an
- Android-powered device in a special accessory mode. When an Android-powered powered device is
- in accessory mode, the connected accessory acts as the USB host (powers the bus and enumerates
- devices) and the Android-powered device acts as the USB device. Android USB accessories are
- specifically designed to attach to Android-powered devices and adhere to a simple protocol
- (Android accessory protocol) that allows them to detect Android-powered devices that support
- accessory mode. Accessories must also provide 500mA at 5V for charging power. Many previously
- released Android-powered devices are only capable of acting as a USB device and cannot initiate
- connections with external USB devices. Android Open Accessory support overcomes this limitation
- and allows you to build accessories that can interact with an assortment of Android-powered
- devices by allowing the accessory to initiate the connection.</p>
-
- <p class="note"><strong>Note:</strong> Accessory mode is ultimately dependent on the device's
- hardware and not all devices support accessory mode. Devices that support accessory mode can
- be filtered using a <code>&lt;uses-feature&gt;</code> element in your corresponding application's
- Android manifest. For more information, see the <a href=
- "{@docRoot}guide/topics/connectivity/usb/accessory.html#manifest">USB Accessory</a> developer
-guide.</p>
-
- <h2 id="accessory-protocol">Implementing the Android Accessory Protocol</h2>
-
- <p>An Android USB accessory must adhere to Android Accessory Protocol, which defines how
- an accessory detects and sets up communication with an Android-powered device. In general, an
- accessory should carry out the following steps:</p>
-
- <ol>
- <li>Wait for and detect connected devices</li>
-
- <li>Determine the device's accessory mode support</li>
-
- <li>Attempt to start the device in accessory mode if needed</li>
-
- <li>Establish communication with the device if it supports the Android accessory protocol</li>
- </ol>
-
- <p>The following sections go into depth about how to implement these steps.</p>
-
- <h3 id="wait">Wait for and detect connected devices</h3>
-
- <p>Your accessory should have logic to continuously check
- for connected Android-powered devices. When a device is connected, your accessory should
- determine if the device supports accessory mode.</p>
-
- <h3 id="determine">Determine the device's accessory mode support</h3>
-
-
- <p>When an Android-powered device is connected, it can be in one of three states:</p>
-
- <ol type="a">
- <li>The attached device supports Android accessory mode and is already in accessory mode.</li>
-
- <li>The attached device supports Android accessory mode, but it is not in accessory mode.</li>
-
- <li>The attached device does not support Android accessory mode.</li>
- </ol>
-
- <p>During the initial connection, the accessory should check the vendor and product IDs of the
- connected device's USB device descriptor. The vendor ID should match Google's ID (0x18D1) and the
- product ID should be 0x2D00 or 0x2D01 if the device is already in accessory mode (case A). If so,
- the accessory can now <a href="#establish">establish communication with the device</a> through
- bulk transfer endpoints with its own communication protocol. There is no need to start the device
- in accessory mode.</p>
-
- <p class="note"><strong>Note:</strong> 0x2D00 is reserved for Android-powered devices that
- support accessory mode. 0x2D01 is reserved for devices that support accessory mode as well as the
- ADB (Android Debug Bridge) protocol, which exposes a second interface with two bulk endpoints for
- ADB. You can use these endpoints for debugging the accessory application if you are simulating
- the accessory on a computer. In general, do not use this interface unless your accessory is
- implementing a passthrough to ADB on the device.</p>
-
- <p>If the vendor and product ID do not match, there is no way to distinguish between states b and
- c, so the accessory <a href="#start">attempts to start the device in accessory mode</a> to figure
- out if the device is supported.</p>
-
- <h3 id="start">Attempt to start the device in accessory mode</h3>
-
- <p>If the vendor and product IDs do not correspond to an Android-powered device in accessory
- mode, the accessory cannot discern whether the device supports accessory mode and is not in that
- state, or if the device does not support accessory mode at all. This is because devices that
- support accessory mode but aren't in it initially report the device's manufacturer vendor ID and
- product ID, and not the special Android Open Accessory ones. In either case, the accessory should
-try to start
- the device into accessory mode to figure out if the device supports it. The following steps
- explain how to do this:</p>
-
- <ol>
- <li>Send a 51 control request ("Get Protocol") to figure out if the device supports the Android
- accessory protocol. A non-zero number is returned if the protocol is supported, which
- represents the version of the protocol that the device supports (currently, only version 1
- exists). This request is a control request on endpoint 0 with the following characteristics:
- <pre>
-requestType: USB_DIR_IN | USB_TYPE_VENDOR
-request: 51
-value: 0
-index: 0
-data: protocol version number (16 bits little endian sent from the device to the
-accessory)
-</pre>
- </li>
-
- <li>If the device returns a proper protocol version, send identifying string information to the
- device. This information allows the device to figure out an appropriate application for this
- accessory and also present the user with a URL if an appropriate application does not exist.
- These requests are control requests on endpoint 0 (for each string ID) with the following
- characteristics:
- <pre>
-requestType: USB_DIR_OUT | USB_TYPE_VENDOR
-request: 52
-value: 0
-index: string ID
-data zero terminated UTF8 string sent from accessory to device
-</pre>
-
- <p>The following string IDs are supported, with a maximum size of 256 bytes for each string
- (must be zero terminated with \0).</p>
- <pre>
-manufacturer name: 0
-model name: 1
-description: 2
-version: 3
-URI: 4
-serial number: 5
-</pre>
- </li>
-
- <li>When the identifying strings are sent, request the device start up in accessory mode. This
- request is a control request on endpoint 0 with the following characteristics:
- <pre>
-requestType: USB_DIR_OUT | USB_TYPE_VENDOR
-request: 53
-value: 0
-index: 0
-data: none
-</pre>
- </li>
- </ol>
-
- <p>After sending the final control request, the connected USB device should re-introduce itself
- on the bus in accessory mode and the accessory can re-enumerate the connected devices. The
- algorithm jumps back to <a href="#determine">determining the device's accessory mode support</a>
- to check for the vendor and product ID. The vendor ID and product ID of the device will be
- different if the device successfully switched to accessory mode and will now correspond to
- Google's vendor and product IDs instead of the device manufacturer's IDs. The accessory can now
- <a href="#establish">establish communication with the device</a>.</p>
-
- <p>If at any point these steps fail, the device does not support Android accessory mode and the
- accessory should wait for the next device to be connected.</p>
-
- <h3 id="establish">Establish communication with the device</h3>
-
- <p>If an Android-powered device in accessory mode is detected, the accessory can query the
- device's interface and endpoint descriptors to obtain the bulk endpoints to communicate with the
- device. An Android-powered device that has a product ID of 0x2D00 has one interface with two bulk
- endpoints for input and output communication. A device with product ID of 0x2D01 has two
- interfaces with two bulk endpoints each for input and output communication. The first interface
- is for standard communication while the second interface is for ADB communication. To communicate
- on an interface, all you need to do is find the first bulk input and output endpoints, set the
- device's configuration to a value of 1 with a SET_CONFIGURATION (0x09) device request, then
- communicate using the endpoints.</p>
-
diff --git a/docs/html/tools/adk/aoa2.jd b/docs/html/tools/adk/aoa2.jd
deleted file mode 100644
index bbccfc3..0000000
--- a/docs/html/tools/adk/aoa2.jd
+++ /dev/null
@@ -1,227 +0,0 @@
-page.title=Android Open Accessory Protocol 2.0
-@jd:body
-
-<div id="qv-wrapper">
- <div id="qv">
- <h2>In this document</h2>
- <ol>
- <li><a href="#detecting">Detecting Android Open Accessory 2.0 Support</a></li>
- <li><a href="#audio-support">Audio Support</a></li>
- <li><a href="#hid">HID Support</a></li>
- <li><a href="#interop-aoa">Interoperability with AOA 1.0 Features</a></li>
- <li><a href="#no-app-conn">Connecting AOA 2.0 without an Android App</a></li>
- </ol>
-
- <h2>See also</h2>
- <ol>
- <li><a href="aoa.html">Android Open Accessory Protocol</a></li>
- </ol>
- </div>
-</div>
-
-<p>This document describes the changes to the Android Open Accessory (AOA) protocol since its
-initial release, and is a supplement to the documentation of the <a href="aoa.html">first
-release of AOA</a>.</p>
-
-<p>The Android Open Accessory Protocol 2.0 adds two new features: audio output (from the Android
-device to the accessory) and support for the accessory acting as one or more human interface devices
-(HID) to the Android device. The Android SDK APIs available to Android application developers
-remain unchanged.</p>
-
-<h2 id="detecting">Detecting Android Open Accessory 2.0 Support</h2>
-
-<p>In order for an accessory to determine if a connected Android device supports accessories and at
-what protocol level, the accessory must send a {@code getProtocol()} command and check the result.
-Android devices supporting the initial version of the Android Open Accessory protocol return a
-{@code 1}, representing the protocol version number. Devices that support the new features described
-in this document must return {@code 2} for the protocol version. Version 2.0 of the protocol is
-upwardly compatible, so accessories designed for the original accessory protocol still work
-with newer Android devices. The following code from the <a href="adk.html">Android Development Kit
-2011</a> {@code AndroidAccessory} library demonstrates this protocol check:</p>
-
-<pre>
-bool AndroidAccessory::switchDevice(byte addr)
-{
- int protocol = getProtocol(addr);
- if (protocol >= 1) {
- Serial.print("device supports protocol 1 or higher\n");
- } else {
- Serial.print("could not read device protocol version\n");
- return false;
- }
-
- sendString(addr, ACCESSORY_STRING_MANUFACTURER, manufacturer);
- sendString(addr, ACCESSORY_STRING_MODEL, model);
- sendString(addr, ACCESSORY_STRING_DESCRIPTION, description);
- sendString(addr, ACCESSORY_STRING_VERSION, version);
- sendString(addr, ACCESSORY_STRING_URI, uri);
- sendString(addr, ACCESSORY_STRING_SERIAL, serial);
-
- usb.ctrlReq(addr, 0, USB_SETUP_HOST_TO_DEVICE | USB_SETUP_TYPE_VENDOR |
-USB_SETUP_RECIPIENT_DEVICE,
- ACCESSORY_START, 0, 0, 0, 0, NULL);
- return true;
-}
-</pre>
-
-<p>AOA 2.0 includes new USB product IDs, one for each combination of USB interfaces available when
-in accessory mode. The possible USB interfaces are:</p>
-
-<ul>
- <li><strong>accessory</strong> - An interface providing 2 bulk endpoints for communicating with an
-Android application.</li>
- <li><strong>audio</strong> -A new standard USB audio class interface for streaming audio
-from an Android device to an accessory.</li>
- <li><strong>adb</strong> - An interface intended only for debugging purposes while developing an
-accessory. Only enabled if the user has USB Debugging enabled in Settings on the Android device.
- </li>
-</ul>
-
-<p>In AOA 1.0, there are only two USB product IDs:</p>
-
-<ul>
- <li>{@code 0x2D00} - accessory</li>
- <li>{@code 0x2D01} - accessory + adb</li>
-</ul>
-
-<p>AOA 2.0 adds an optional USB audio interface and, therefore, includes product IDs for the new
-combinations of USB interfaces:</p>
-
-<ul>
- <li>{@code 0x2D02} - audio</li>
- <li>{@code 0x2D03} - audio + adb</li>
- <li>{@code 0x2D04} - accessory + audio</li>
- <li>{@code 0x2D05} - accessory + audio + adb</li>
-</ul>
-
-<h2 id="audio-support">Audio Support</h2>
-
-<p>AOA 2.0 includes optional support for audio output from an Android device to an accessory. This
-version of the protocol supports a standard USB audio class interface that is capable of 2 channel
-16-bit PCM audio with a bit rate of 44100 Khz. AOA 2.0 is currently limited to this output mode, but
-additional audio modes may be added in the future.</p>
-
-<p>To enable the audio support, the accessory must send a new USB control request:</p>
-
-<pre>
-<strong>SET_AUDIO_MODE</strong>
-requestType: USB_DIR_OUT | USB_TYPE_VENDOR
-request: 58
-value: 0 for no audio (default),
- 1 for 2 channel, 16-bit PCM at 44100 KHz
-index: 0
-data none
-</pre>
-
-<p>This command must be sent <em>before</em> sending the {@code ACCESSORY_START} command for
-entering accessory mode.</p>
-
-<h2 id="hid">HID Support</h2>
-
-<p>AOA 2.0 allows the accessory to register one or more HID devices with
-an Android device. This approach reverses the direction of communication for typical USB HID
-devices like USB mice and keyboards. Normally, the HID device is a peripheral connected to a USB
-host like a personal computer. But in the case of the AOA protocol, the USB host acts as one or more
-input devices to a USB peripheral.</p>
-
-<p>HID support in AOA 2.0 is simply a proxy for standard HID events. The implementation makes no
-assumptions about the content or type of events and merely passes it through to the input system,
-so an AOA 2.0 accessory can act as any HID device (mouse, keyboard, game controller, etc.). It
-can be used for something as simple as the play/pause button on a media dock, or something as
-complicated as a docking station with a mouse and full QWERTY keyboard.</p>
-
-<p>The AOA 2.0 protocol adds four new USB control requests to allow the accessory to act as one or
-more HID input devices to the Android device. Since HID support is done entirely through
-control requests on endpoint zero, no new USB interface is needed to provide this support. The
-control requests are as follows:</p>
-
-<ul>
- <li><strong>ACCESSORY_REGISTER_HID</strong> registers a new HID device with the Android device.
-The accessory provides an ID number that is used to identify the HID device for the other three
-calls. This ID is valid until USB is disconnected or until the accessory sends
-ACCESSORY_UNREGISTER_HID to unregister the HID device.</li>
- <li><strong>ACCESSORY_UNREGISTER_HID</strong> unregisters a HID device that was previously
-registered with ACCESSORY_REGISTER_HID.</li>
- <li><strong>ACCESSORY_SET_HID_REPORT_DESC</strong> sends a report descriptor for a HID device to
-the Android device. This request is used to describe the capabilities of the HID device, and must
-be sent before reporting any HID events to the Android device. If the report descriptor is larger
-than the maximum packet size for endpoint zero, multiple ACCESSORY_SET_HID_REPORT_DESC commands are
-sent in order to transfer the entire descriptor.</li>
- <li><strong>ACCESSORY_SEND_HID_EVENT</strong> sends input events from the accessory to the Android
-device.</li>
-</ul>
-
-<p>The code definitions for these new control requests are as follows:</p>
-
-<pre>
-/* Control request for registering a HID device.
- * Upon registering, a unique ID is sent by the accessory in the
- * value parameter. This ID will be used for future commands for
- * the device
- *
- * requestType: USB_DIR_OUT | USB_TYPE_VENDOR
- * request: ACCESSORY_REGISTER_HID_DEVICE
- * value: Accessory assigned ID for the HID device
- * index: total length of the HID report descriptor
- * data none
- */
-#define ACCESSORY_REGISTER_HID 54
-
-/* Control request for unregistering a HID device.
- *
- * requestType: USB_DIR_OUT | USB_TYPE_VENDOR
- * request: ACCESSORY_REGISTER_HID
- * value: Accessory assigned ID for the HID device
- * index: 0
- * data none
- */
-#define ACCESSORY_UNREGISTER_HID 55
-
-/* Control request for sending the HID report descriptor.
- * If the HID descriptor is longer than the endpoint zero max packet size,
- * the descriptor will be sent in multiple ACCESSORY_SET_HID_REPORT_DESC
- * commands. The data for the descriptor must be sent sequentially
- * if multiple packets are needed.
- *
- * requestType: USB_DIR_OUT | USB_TYPE_VENDOR
- * request: ACCESSORY_SET_HID_REPORT_DESC
- * value: Accessory assigned ID for the HID device
- * index: offset of data in descriptor
- * (needed when HID descriptor is too big for one packet)
- * data the HID report descriptor
- */
-#define ACCESSORY_SET_HID_REPORT_DESC 56
-
-/* Control request for sending HID events.
- *
- * requestType: USB_DIR_OUT | USB_TYPE_VENDOR
- * request: ACCESSORY_SEND_HID_EVENT
- * value: Accessory assigned ID for the HID device
- * index: 0
- * data the HID report for the event
- */
-#define ACCESSORY_SEND_HID_EVENT 57
-</pre>
-
-<h2 id="interop-aoa">Interoperability with AOA 1.0 Features</h2>
-
-<p>The original <a href="aoa.html">AOA protocol</a> provided support for an Android application to
-communicate directly with a USB host (accessory) over USB. AOA 2.0 keeps that support, but adds new
-features to allow the accessory to communicate with the Android operating system itself
-(specifically the audio and input systems). The design of the AOA 2.0 makes it is possible to build
-an accessory that also makes use of the new audio and/or HID support in addition to the original
-feature set. Simply use the new features described in this document in addition to the original AOA
-protocol features.</p>
-
-<h2 id="no-app-conn">Connecting AOA 2.0 without an Android App</h2>
-
-<p>It is possible to design an accessory (for example, an audio dock) that uses the new audio and
-HID support, but does not need to communicate with an application on the Android device. In that
-case, the user would not want to see the dialog prompts related to finding and associating the newly
-attached accessory with an Android application that can communicate with it. To prevent these
-dialogs from appearing after the device and accessory are connected, the accessory can simply not
-send the manufacturer and model names to the Android device. If these strings are not provided to
-the Android device, then the accessory is able to make use of the new audio and HID support in AOA
-2.0 without the system attempting to find an application to communicate with the accessory. Also,
-if these strings are not provided, the accessory USB interface is not present in the Android
-device USB configuration after the device enters accessory mode.</p> \ No newline at end of file
diff --git a/docs/html/tools/adk/index.jd b/docs/html/tools/adk/index.jd
index 4b9b042..d492e96 100644
--- a/docs/html/tools/adk/index.jd
+++ b/docs/html/tools/adk/index.jd
@@ -11,9 +11,11 @@ devices, weather stations, or any other external hardware device that adds to th
Android.</p>
<p>Accessories use the Android Open Accessory (AOA) protocol to communicate with Android
-devices, over USB cable or through a Bluetooth connection. If you are building an accessory for
-Android devices, make sure you review the information below to understand about how to implement the
-AOA protocol.</p>
+devices, over a USB cable or through a Bluetooth connection. If you are building an accessory that
+uses USB, make sure you understand how to implement the AOA protocol to establish communication
+between your accessory hardware and Android. For more information, see the
+<a href="http://source.android.com/tech/accessories/index.html">Android Open Acessory protocol</a>.
+</p>
<p>The following sections provide more information about the Android Accessory Development Kits, how
to use them, and how to get started building your own accessories for Android.</p>
@@ -24,11 +26,4 @@ to use them, and how to get started building your own accessories for Android.</
<dt><a href="adk.html">ADK 2011 Guide</a></dt>
<dd>Guide to getting started with the original ADK, released at Google I/O 2011.</dd>
-
- <dt><a href="aoa.html">Android Open Accessory Protocol</a></dt>
- <dd>Guide to implementing the Android Open Accessory Protocol.</dd>
-
- <dt><a href="aoa2.html">Android Open Accessory Protocol 2.0</a></dt>
- <dd>A description and guide to implementing the extended Android Open Accessory Protocol which
- supports audio dock accessories.</dd>
</dl>
diff --git a/docs/html/tools/building/building-cmdline.jd b/docs/html/tools/building/building-cmdline.jd
index 6154d96..e0d0d3f 100644
--- a/docs/html/tools/building/building-cmdline.jd
+++ b/docs/html/tools/building/building-cmdline.jd
@@ -261,8 +261,18 @@ adb -s emulator-5554 install <em>path/to/your/app</em>.apk
device:</p>
<ul>
- <li>Enable USB Debugging on your device. You can find the setting on most Android devices by
- going to <strong>Settings > Applications > Development > USB debugging</strong>.</li>
+ <li>Enable <strong>USB debugging</strong> on your device.
+ <ul>
+ <li>On most devices running Android 3.2 or older, you can find the option under
+ <strong>Settings > Applications > Development</strong>.</li>
+ <li>On Android 4.0 and newer, it's in <strong>Settings > Developer options</strong>.
+ <p class="note"><strong>Note:</strong> On Android 4.2 and newer, <strong>Developer
+ options</strong> is hidden by default. To make it available, go
+ to <strong>Settings > About phone</strong> and tap <strong>Build number</strong>
+ seven times. Return to the previous screen to find <strong>Developer options</strong>.</p>
+ </li>
+ </ul>
+ </li>
<li>Ensure that your development computer can detect your device when connected via USB</li>
</ul>
diff --git a/docs/html/tools/building/building-eclipse.jd b/docs/html/tools/building/building-eclipse.jd
index c73fe97..304aa7e 100644
--- a/docs/html/tools/building/building-eclipse.jd
+++ b/docs/html/tools/building/building-eclipse.jd
@@ -84,8 +84,18 @@ parent.link=index.html
<code>android:debuggable</code> attribute of the <code>&lt;application&gt;</code>
element to <code>true</code>. As of ADT 8.0, this is done by default when you build in debug mode.</li>
- <li>Enable USB Debugging on your device. You can find the setting on most Android devices by
- going to <strong>Settings > Applications > Development > USB debugging</strong>.</li>
+ <li>Enable <strong>USB debugging</strong> on your device.
+ <ul>
+ <li>On most devices running Android 3.2 or older, you can find the option under
+ <strong>Settings > Applications > Development</strong>.</li>
+ <li>On Android 4.0 and newer, it's in <strong>Settings > Developer options</strong>.
+ <p class="note"><strong>Note:</strong> On Android 4.2 and newer, <strong>Developer
+ options</strong> is hidden by default. To make it available, go
+ to <strong>Settings > About phone</strong> and tap <strong>Build number</strong>
+ seven times. Return to the previous screen to find <strong>Developer options</strong>.</p>
+ </li>
+ </ul>
+ </li>
<li>Ensure that your development computer can detect your device when connected via USB</li>
</ul>
diff --git a/docs/html/tools/debugging/systrace.jd b/docs/html/tools/debugging/systrace.jd
new file mode 100644
index 0000000..287abe6
--- /dev/null
+++ b/docs/html/tools/debugging/systrace.jd
@@ -0,0 +1,239 @@
+page.title=Analyzing Display and Performance with Systrace
+parent.title=Debugging
+parent.link=index.html
+@jd:body
+
+<div id="qv-wrapper">
+ <div id="qv">
+ <h2>In this document</h2>
+ <ol>
+ <li><a href="#overview">Overview</a>
+ </li>
+ <li><a href="#generate">Generating Traces</a>
+ <ol>
+ <li><a href="#limit-trace">Limiting trace data</a></li>
+ <li><a href="#config-categories">Configuring trace data categories</a></li>
+ <li><a href="#running">Running a trace</a></li>
+ </ol>
+ </li>
+ <li><a href="#analysis">Analyzing Traces</a>
+ <ol>
+ <li><a href="#long-processes">Long running processes</a></li>
+ <li><a href="#display-interupts">Interruptions in display execution</a></li>
+ </ol>
+ </li>
+ </ol>
+ <h2>See also</h2>
+ <ol>
+ <li><a href="{@docRoot}tools/help/systrace.html">Systrace</a>
+ </li>
+ </ol>
+ </div>
+</div>
+
+<p>After building features, eliminating bugs and cleaning up your code, you should spend some
+ time looking at the performance of your application. The speed and smoothness with which your
+ application draws pixels and performs operations has an significant impact on your users'
+ experience.</p>
+
+<p>Android applications operate within a shared resource environment, and the performance of
+ your application can be impacted by how efficiently it interacts with those resources in
+ the larger system. Applications also operate in a multithreaded environment, competing with other
+ threaded processes for resources, which can cause performance problems that are hard to diagnose.
+</p>
+
+<p>The {@code systrace} tool allows you to collect and review code execution data for your
+ application and the Android system. You can use this data to diagnose execution problems and
+ improve the performance of your application.</p>
+
+
+<h2 id="overview">Overview</h2>
+
+<p>{@code systrace} helps you analyze how the execution of your application fits into the larger
+ Android environment, letting you see system and applications process execution on a common
+ timeline. The tool allows you to generate highly detailed, interactive reports from devices
+ running Android 4.1 and higher, such as the report in figure 1.</p>
+
+<img src="{@docRoot}images/systrace/report.png" alt="Systrace example report" id="figure1" />
+<p class="img-caption">
+ <strong>Figure 1.</strong> An example {@code systrace} report on 5 seconds of process execution
+ for a running application and related Android system processes.
+</p>
+
+
+<h2 id="generate">Generating Traces</h2>
+
+<p>In order to create a trace of your application, you must perform a few setup steps. First, you
+ must have a device running Android 4.1 or higher. Setup the device for
+ <a href="{@docRoot}tools/device.html#setting-up">debugging</a>, connect it to your development
+ system and install your application. Some types of trace information, specifically disk activity
+ and kernel work queues, require root access to the device, but most {@code systrace} log data
+ only requires that the device be enabled for developer debugging.</p>
+
+
+<h3 id="limit-trace">Limiting trace data</h3>
+
+<p>The {@code systrace} tool can generate a potentially huge amount of data from applications
+ and system sources. To limit the amount of data the tool collects and make the data more relevant
+ to your analysis, use the following options:</p>
+
+<ul>
+ <li>Limit the amount of time covered by the trace with the {@code -t, --time} option. The default
+ length of a trace is 5 seconds.</li>
+ <li>Limit the size of the data collected by the trace with the {@code -b, --buf-size} option.</li>
+ <li>Specify what types of processes are traced using the {@code --set-tags} option and the
+ {@code --disk}, {@code --cpu-freq}, {@code --cpu-idle}, {@code --cpu-load} options.</li>
+</ul>
+
+
+<h3 id="config-categories">Configuring trace data categories</h3>
+
+<p>To use {@code systrace} effectively, you must specify the types of processes you want to trace.
+ The tool can gather the following types of process information:</p>
+
+<ul>
+ <li>General system processes such as graphics, audio and input processes (selected using trace
+ <a href="{@docRoot}tools/help/systrace.html#tags">Tags</a>).</li>
+ <li>Low level system information such as CPU, kernel and disk activity (selected using
+ <a href="{@docRoot}tools/help/systrace.html#options">Options</a>).</li>
+</ul>
+
+<p>To set trace tags for {@code systrace} using the command-line:</p>
+
+<ol>
+ <li>Use the {@code --set-tags} option:
+<pre>
+$> python systrace.py --set-tags=gfx,view,wm
+</pre>
+ </li>
+ <li>Stop and restart the {@code adb} shell to enable tracing of these processes.
+<pre>
+$> adb shell stop
+$> adb shell start
+</pre></li>
+</ol>
+
+<p>To set trace tags for {@code systrace} using the device user interface:</p>
+
+<ol>
+ <li>On the device connected for tracing, navigate to: <strong>Settings &gt;
+ Developer options &gt; Monitoring &gt; Enable traces</strong>.</li>
+ <li>Select the categories of processes to be traced and click <strong>OK</strong>.</li>
+</ol>
+
+<p class="note">
+ <strong>Note:</strong> The {@code adb} shell does not have to be stopped and restarted when
+ selecting trace tags using this method.
+</p>
+
+
+<h3 id="running">Running a trace</h3>
+
+<p>After you have configured the category tags for your trace, you can start collecting
+ information for analysis.</p>
+
+<p>To run a trace using the current trace tag settings:</p>
+
+<ol>
+ <li>Make sure the device is connected through a USB cable and is
+ <a href="{@docRoot}tools/device.html#setting-up">enabled for debugging</a>.</li>
+ <li>Run the trace with the low-level system trace options and limits you want, for example:
+<pre>
+$> python systrace.py --cpu-freq --cpu-load --time=10 -o mytracefile.html
+</pre>
+ </li>
+ <li>On the device, execute any user actions you want be included in the trace.</li>
+</ol>
+
+
+<h2 id="analysis">Analyzing Traces</h2>
+
+<p>After you have generated a trace using {@code systrace}, it lists the location of the output
+ file and you can open the report using a web browser.
+ How you use the trace data depends on the performance issues you are investigating. However,
+ this section provides some general instructions on how to analyze a trace.</p>
+
+<p>The reports generated by {@code systrace} are interactive, allowing you to zoom into and out of
+ the process execution details. Use the <em>W</em> key to zoom in, the <em>S</em>
+ key to zoom out, the <em>A</em> key to pan left and the <em>D</em> key to pan
+ right. Select a task in timeline using your mouse to get more information about the task.
+ For more information about the using the keyboard navigation shortcuts and navigation, see the
+ <a href="{@docRoot}tools/help/systrace.html#viewing-options">Systrace</a> reference
+ documentation.</p>
+
+<h3 id="long-processes">Long running processes</h3>
+
+<p>A well-behaved application executes many small operations quickly and with a regular rhythm,
+ with individual operations completing within few milliseconds, depending on the device
+ and the processes being performed, as shown in figure 2:</p>
+
+<img src="{@docRoot}images/systrace/process-rhythm.png" alt="Systrace exerpt of app processing"
+id="figure2" />
+<p class="img-caption">
+ <strong>Figure 2.</strong> Excerpt from a trace of a smoothly running application with a regular
+ execution rhythm.
+</p>
+
+<p>The trace excerpt in figure 2 shows a well-behaved application with
+ a regular process rhythm (1). The lower section of figure 2 shows a magnified section of
+ the trace indicated by the dotted outline, which reveals some irregularity in the process
+ execution. In particular, one of the wider task bars, indicated by (2), is taking slightly
+ longer (14 milliseconds) than other, similar tasks on this thread, which are averaging between
+ 9 and 12 milliseconds to complete. This particular task execution length is likely not noticeable
+ to a user, unless it impacts another process with specific timing, such as a screen update.</p>
+
+<p>Long running processes show up as thicker than usual execution bars in a trace. These thicker
+ bars can indicate a problem in your application performance. When they show up in your
+ trace, zoom in on the process using the
+ <a href="{@docRoot}tools/help/systrace.html#viewing-options">keyboard navigation</a> shortcuts to
+ identify the task causing the problem, and click on the task to get more information. You should
+ also look at other processes running at the same time, looking for a thread in one process that is
+ being blocked by another process.</p>
+
+
+<h3 id="display-interupts">Interruptions in display execution</h3>
+
+<p>The {@code systrace} tool is particularly useful in analyzing application display slowness,
+ or pauses in animations, because it shows you the execution of your application across multiple
+ system processes. With display execution, drawing screen frames with a regular rhythm is essential
+ for good performance. Having a regular rhythm for display ensures that animations and motion are
+ smooth on screen. If an application drops out of this rhythm, the display can become jerky or slow
+ from the users perspective.</p>
+
+<p>If you are analyzing an application for this type of problem, examine the
+ <strong>SurfaceFlinger</strong> process in the {@code systrace} report where your application is
+ also executing to look for places where it drops out of its regular rhythm.</p>
+
+<img src="{@docRoot}images/systrace/display-rhythm.png" alt="Systrace exerpt of display processing"
+id="figure3" />
+<p class="img-caption">
+ <strong>Figure 3.</strong> Excerpt from a trace of an application showing interruptions in
+ display processing.
+</p>
+
+<p>The trace excerpt in figure 3 shows an section of a trace that indicates an interruption in the
+ device display. The section of the <strong>SurfaceFlinger</strong> process in top excerpt,
+ indicated by (1), shows that display frames are being missed. These
+ dropped frames are potentially causing the display to stutter or halt. Zooming into this problem
+ area in the lower trace, shows that a memory operation (image buffer dequeuing and allocation) in
+ the <strong>surfaceflinger</strong> secondary thread is taking a long time (2). This delay
+ causes the application to miss the display update window, indicated by the dotted
+ line. As the developer of this application, you should investigate other threads in your
+ application that may also be trying to allocate memory at the same time or otherwise blocking
+ memory allocation with another request or task.</p>
+
+<p>Regular, rhythmic execution of the <strong>SurfaceFlinger</strong> process is essential to smooth
+ display of screen content, particularly for animations and motion. Interruptions in the regular
+ execution pattern of this thread is not always an indication of a display problem with your
+ application. Further testing is required to determine if this is actually a performance problem
+ from a user perspective. Being able to identify display execution patterns like the example above
+ can help you detect display problems and build a smooth-running, high-performance application.
+</p>
+
+<p class="note">
+ <strong>Note:</strong> When using {@code systrace} to analyze display problems, make sure
+ you activate the tracing tags for <strong>Graphics</strong> and <strong>Views</strong>.
+</p>
+
+<p>For more information on the command line options and keyboard controls for {@code systrace},
+see the <a href="{@docRoot}tools/help/systrace.html">Systrace</a> reference page.</p> \ No newline at end of file
diff --git a/docs/html/tools/device.jd b/docs/html/tools/device.jd
index d5fd581..61cd08a 100644
--- a/docs/html/tools/device.jd
+++ b/docs/html/tools/device.jd
@@ -58,11 +58,17 @@ the <code>&lt;application></code> element.</p>
<p class="note"><strong>Note:</strong> If you manually enable debugging in the manifest
file, be sure to disable it before you build for release (your published application
should usually <em>not</em> be debuggable).</p></li>
- <li>Turn on "USB Debugging" on your device.
- <p>On the device, go to <strong>Settings > Applications > Development</strong>
- and enable <strong>USB debugging</strong>
- (on an Android 4.0 device, the setting is
-located in <strong>Settings > Developer options</strong>).</p>
+ <li>Enable <strong>USB debugging</strong> on your device.
+ <ul>
+ <li>On most devices running Android 3.2 or older, you can find the option under
+ <strong>Settings > Applications > Development</strong>.</li>
+ <li>On Android 4.0 and newer, it's in <strong>Settings > Developer options</strong>.
+ <p class="note"><strong>Note:</strong> On Android 4.2 and newer, <strong>Developer
+ options</strong> is hidden by default. To make it available, go
+ to <strong>Settings > About phone</strong> and tap <strong>Build number</strong>
+ seven times. Return to the previous screen to find <strong>Developer options</strong>.</p>
+ </li>
+ </ul>
</li>
<li>Set up your system to detect your device.
<ul>
diff --git a/docs/html/tools/help/index.jd b/docs/html/tools/help/index.jd
index 447d39c..0f94395 100644
--- a/docs/html/tools/help/index.jd
+++ b/docs/html/tools/help/index.jd
@@ -55,6 +55,9 @@ outside of Android code.</dd>
<dt><a href="proguard.html">ProGuard</a></dt>
<dd>Shrinks, optimizes, and obfuscates your code by removing unused code and renaming
classes, fields, and methods with semantically obscure names.</dd>
+ <dt><a href="systrace.html">Systrace</a></dt>
+ <dd>Lets you analyze the execution of your application in the context of system processes,
+ to help diagnose display and performance issues.</dd>
<dt><a href="sqlite3.html">sqlite3</a></dt>
<dd>Lets you access the SQLite data files created and used by Android applications.</dd>
<dt><a href="traceview.html">traceview</a></dt>
diff --git a/docs/html/tools/help/systrace.jd b/docs/html/tools/help/systrace.jd
new file mode 100644
index 0000000..010cc78
--- /dev/null
+++ b/docs/html/tools/help/systrace.jd
@@ -0,0 +1,234 @@
+page.title=Systrace
+parent.title=Tools
+parent.link=index.html
+@jd:body
+
+
+<p>The {@code systrace} tool helps analyze the performance of your application by capturing and
+ displaying execution times of your applications processes and other Android system processes. The
+ tool combines data from the Android kernel such as the CPU scheduler, disk activity and
+ application threads to generate an HTML report that shows an overall picture of an Android
+ device’s system processes for a given period of time.</p>
+
+<p>The {@code systrace} tool is particularly useful in diagnosing display problems where an
+ application is slow to draw or stutters while displaying motion or animation. For more information
+ on how to use {@code systrace}, see <a href="{@docRoot}tools/debugging/systrace.html">Analyzing
+ Display and Performance with Systrace</a>.</p>
+
+
+<h2 id="usage">Usage</h2>
+
+<p>In order to run {@code systrace}, the {@code adb} tool and
+<a href="http://www.python.org/">Python</a> must be installed and included in your development
+computer's execution path. In order to generate a trace, you must connect a device running Android
+4.1 (API Level 16) or higher to your development system using a USB debugging connection.</p>
+
+<p>The syntax for running {@code systrace} is as follows.</p>
+
+<pre>
+$> python systrace.py [options]
+</pre>
+
+<p>Here is an example execution run that sets trace tags and generates a trace from a connected
+Android device.</p>
+
+<pre>
+$> cd <em>android-sdk</em>/tools/systrace
+$> python systrace.py --set-tags gfx,view,wm
+$> adb shell stop
+$> adb shell start
+$> python systrace.py --disk --time=10 -o mynewtrace.html
+</pre>
+
+
+
+<h2 id="options">Options</h2>
+
+<p>The table below lists the command line options for {@code systrace}.</p>
+
+<table>
+ <tr>
+ <th>Option</th>
+
+ <th>Description</th>
+ </tr>
+
+ <tr>
+ <td><code>-o&nbsp;&lt;<em>FILE</em>&gt;</code></td>
+
+ <td>Write the HTML trace report to the specified file.</td>
+ </tr>
+
+ <tr>
+ <td><code>-t N, --time=N</code></td>
+
+ <td>Trace activity for N seconds. Default value is 5 seconds.</td>
+ </tr>
+
+ <tr>
+ <td><code>-b N, --buf-size=N</code></td>
+
+ <td>Use a trace buffer size of N kilobytes. This option lets you limit the total size of the
+ data collected during a trace.</td>
+ </tr>
+
+ <tr>
+ <td><code>-d, --disk</code></td>
+
+ <td>Trace disk input and output activity. This option requires root access on the device.</td>
+ </tr>
+
+ <tr>
+ <td><code>-f, --cpu-freq</code></td>
+
+ <td>Trace CPU frequency changes. Only changes to the CPU frequency are logged, so the initial
+ frequency of the CPU when tracing starts is not shown.</td>
+ </tr>
+
+ <tr>
+ <td><code>-i, --cpu-idle</code></td>
+
+ <td>Trace CPU idle events.</td>
+ </tr>
+
+ <tr>
+ <td><code>-l, --cpu-load</code></td>
+
+ <td>Trace CPU load. This value is a percentage determined by the interactive CPU frequency
+ governor.</td>
+ </tr>
+
+ <tr>
+ <td><nobr><code>-s,&nbsp;--no-cpu-sched</code></nobr></td>
+
+ <td>Prevent tracing of the CPU scheduler. This option allows for longer trace times by reducing
+ the rate of data flowing into the trace buffer.</td>
+ </tr>
+
+ <tr>
+ <td><code>-w, --workqueue</code></td>
+
+ <td>Trace kernel work queues. This option requires root access on the device.</td>
+ </tr>
+
+ <tr>
+ <td id="tags"><code>--set-tags=&lt;<em>TAGS</em>&gt;</code></td>
+
+ <td>Set the enabled trace tags in a comma separated list. The available tags are:
+ <ul>
+ <li><code>gfx</code> - Graphics</li>
+ <li><code>input</code> - Input</li>
+ <li><code>view</code> - View</li>
+ <li><code>webview</code> - WebView</li>
+ <li><code>wm</code> - Window Manager</li>
+ <li><code>am</code> - Activity Manager</li>
+ <li><code>sync</code> - Sync Manager</li>
+ <li><code>audio</code> - Audio</li>
+ <li><code>video</code> - Video</li>
+ <li><code>camera</code> - Camera</li>
+ </ul>
+ <p class="note"><strong>Note:</strong> When setting trace tags from the command line, you
+ must stop and restart the framework ({@code $&gt; adb shell stop; adb shell start}) for the
+ tag tracing changes to take effect.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td><code>--link-assets</code></td>
+
+ <td>Link to the original CSS or JS resources instead of embedding them in the HTML trace
+ report.</td>
+ </tr>
+
+ <tr>
+ <td><nobr><code>-h, --help</code></nobr></td>
+
+ <td>Show the help message.</td>
+ </tr>
+
+</table>
+
+<p>You can set the trace <a href="#tags">tags</a> for {@code systrace} with your device's user
+interface, by navigating to <strong>Settings &gt; Developer options &gt; Monitoring &gt; Enable
+traces</strong>.</p>
+
+
+<h2 id="viewing-options">Trace Viewing Shortcuts</h2>
+
+<p>The table below lists the keyboard shortcuts that are available while viewing a {@code systrace}
+trace HTML report.</p>
+
+<table>
+ <tr>
+ <th>Key</th>
+
+ <th>Description</th>
+ </tr>
+
+ <tr>
+ <td><strong>w</strong></td>
+
+ <td>Zoom into the trace timeline.</td>
+ </tr>
+
+ <tr>
+ <td><strong>s</strong></td>
+
+ <td>Zoom out of the trace timeline.</td>
+ </tr>
+
+ <tr>
+ <td><strong>a</strong></td>
+
+ <td>Pan left on the trace timeline.</td>
+ </tr>
+
+ <tr>
+ <td><strong>d</strong></td>
+
+ <td>Pan right on the trace timeline.</td>
+ </tr>
+
+ <tr>
+ <td><strong>e</strong></td>
+
+ <td>Center the trace timeline on the current mouse location.</td>
+ </tr>
+
+ <tr>
+ <td><strong>g</strong></td>
+
+ <td>Show grid at the start of the currently selected task.</td>
+ </tr>
+
+ <tr>
+ <td><strong>Shift+g</strong></td>
+
+ <td>Show grid at the end of the currently selected task.</td>
+ </tr>
+
+ <tr>
+ <td><strong>Right Arrow</strong></td>
+
+ <td>Select the next event on the currently selected timeline.</td>
+ </tr>
+
+ <tr>
+ <td><strong>Left Arrow</strong></td>
+
+ <td>Select the previous event on the currently selected timeline.</td>
+ </tr>
+
+ <tr>
+ <td><strong>Double Click</strong></td>
+
+ <td>Zoom into the trace timeline.</td>
+ </tr>
+
+ <tr>
+ <td><strong>Shift+Double Click</strong></td>
+
+ <td>Zoom out of the trace timeline.</td>
+ </tr>
+
+</table>
diff --git a/docs/html/tools/revisions/platforms.jd b/docs/html/tools/revisions/platforms.jd
index 62ec422..178ab90 100644
--- a/docs/html/tools/revisions/platforms.jd
+++ b/docs/html/tools/revisions/platforms.jd
@@ -22,12 +22,12 @@ Highlights and APIs</a></li>
<p>To develop an Android app, you must install at least one Android platform from the SDK Manager
against which you can compile your app. Often, any given version of the Android will be revised
-with bug fixes or other changes, as denoted by the "revision" number. Below, you'll find the
+with bug fixes or other changes, as denoted by the revision number. Below, you'll find the
release notes for each version of the platform and the subsequent revisions to the platform
version.</p>
-<p>To determine what revision of an Android platform you
-have installed, refer to the "Installed Packages" listing in the Android SDK Manager.</p>
+<p>To determine what revision of an Android platform you have installed, refer to the
+<strong>Installed Packages</strong> listing in the Android SDK Manager.</p>
@@ -45,10 +45,29 @@ have installed, refer to the "Installed Packages" listing in the Android SDK Man
SDK tools to revision 20 or later and restart the Android SDK Manager. If you do not,
the Android 4.1 system components will not be available for download.</p>
+
<div class="toggle-content opened">
<p><a href="#" onclick="return toggleContent(this)">
<img src="{@docRoot}assets/images/triangle-opened.png"
+class="toggle-content-img" alt="" />Revision 3</a> <em>(October 2012)</em>
+ </p>
+
+ <div class="toggle-content-toggleme">
+
+ <p>Maintenance update. The system version is 4.1.2.</p>
+ <dl>
+ <dt>Dependencies:</dt>
+ <dd>SDK Tools r20 or higher is required.</dd>
+ </dl>
+
+ </div>
+</div>
+
+<div class="toggle-content closed">
+
+ <p><a href="#" onclick="return toggleContent(this)">
+ <img src="{@docRoot}assets/images/triangle-closed.png"
class="toggle-content-img" alt="" />Revision 2</a> <em>(July 2012)</em>
</p>
@@ -226,10 +245,10 @@ class="toggle-content-img" alt="" />Revision 1</a> <em>(December 2011)</em>
WVGA854 (480x854 high density, normal screen)
</li>
<li>
- WXGA720 (1280x720, extra-high density, normal screen)
+ WXGA720 (1280x720, extra-high density, normal screen)
</li>
<li>
- WSVGA (1024x600, medium density, large screen)
+ WSVGA (1024x600, medium density, large screen)
</li>
<li>
WXGA (1280x800, medium density, xlarge screen)
@@ -534,12 +553,12 @@ ADT 12.</p>
<div class="toggle-content closed">
<p><a href="#" onclick="return toggleContent(this)">
- <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img"
+ <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img"
alt="" />Android 3.0, Revision 1</a> <em>(February 2011)</em>
</p>
<div class="toggle-content-toggleme">
-
+
<dl>
<dt>Dependencies:</dt>
<dd>
@@ -592,7 +611,7 @@ the "Installed Packages" listing in the Android SDK and AVD Manager.</p>
<div class="toggle-content closed" >
<p><a href="#" onclick="return toggleContent(this)">
- <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img"
+ <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img"
alt="" />Android 2.3.4, Revision 1</a> <em>(May 2011)</em>
</p>
@@ -721,7 +740,7 @@ emulator skins are:</p>
WVGA854 (480x854 high density, normal screen)
</li>
</ul>
-
+
@@ -747,7 +766,7 @@ the "Installed Packages" listing in the Android SDK and AVD Manager.</p>
<div class="toggle-content closed" >
<p><a href="#" onclick="return toggleContent(this)">
- <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img"
+ <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img"
alt="" />Android 2.3, Revision 1</a> <em>(December 2010)</em>
</p>
@@ -790,7 +809,7 @@ emulator skins are:</p>
</ul>
-
+
diff --git a/docs/html/tools/testing/testing_accessibility.jd b/docs/html/tools/testing/testing_accessibility.jd
new file mode 100644
index 0000000..daf9b36
--- /dev/null
+++ b/docs/html/tools/testing/testing_accessibility.jd
@@ -0,0 +1,257 @@
+page.title=Accessibility Testing Checklist
+parent.title=Testing
+parent.link=index.html
+@jd:body
+
+<div id="qv-wrapper">
+ <div id="qv">
+ <h2>In this document</h2>
+ <ol>
+ <li><a href="#goals">Testing Goals</a></li>
+ <li><a href="#requirements">Testing Requirements</a></li>
+ <li><a href="#recommendations">Testing Recommendations</a></li>
+ <li><a href="#special-cases">Special Cases and Considerations</a></li>
+ <li><a href="#how-to">Testing Accessibility Features</a>
+ <ol>
+ <li><a href="#test-audibles">Testing audible feedback</a></li>
+ <li><a href="#test-navigation">Testing focus navigation</a></li>
+ <li><a href="#test-gestures">Testing gesture navigation</a></li>
+ </ol>
+ </li>
+ </ol>
+
+ <h2>See Also</h2>
+ <ol>
+ <li>
+ <a href="{@docRoot}guide/topics/ui/accessibility/checklist.html">
+ Accessibility Developer Checklist</a>
+ </li>
+ <li>
+ <a href="{@docRoot}design/patterns/accessibility.html">
+ Android Design: Accessibility</a>
+ </li>
+ <li>
+ <a href="{@docRoot}guide/topics/ui/accessibility/apps.html">
+ Making Applications Accessible</a>
+ </li>
+ </ol>
+ </div>
+</div>
+<p>
+ Testing is an important part of making your application accessible to users with varying
+ abilities. Following <a href="{@docRoot}design/patterns/accessibility.html">design</a> and
+ <a href="{@docRoot}guide/topics/ui/accessibility/checklist.html">development</a> guidelines for
+ accessibility are important steps toward that goal, but testing for accessibility can uncover
+ problems with user interaction that are not obvious during design and development.</p>
+
+<p>This accessibility testing checklist guides you through the important aspects of
+ accessibility testing, including overall goals, required testing steps, recommended testing and
+ special considerations. This document also discusses how to enable accessibility features on
+ Android devices for testing purposes.</p>
+
+
+<h2 id="goals">Testing Goals</h2>
+
+<p>Your accessibility testing should have the following, high level goals:</p>
+
+<ul>
+ <li>Set up and use the application without sighted assistance</li>
+ <li>All task workflows in the application can be easily navigated using directional controls and
+ provide clear and appropriate feedback</li>
+</ul>
+
+
+<h2 id="requirements">Testing Requirements</h2>
+
+<p>The following tests must be completed in order to ensure a minimum level of application
+ accessibility.</p>
+
+<ol>
+ <li><strong>Directional controls:</strong> Verify that the application can be operated
+ without the use of a touch screen. Attempt to use only directional controls to accomplish the
+ primary tasks in the application. Use the keyboard and directional-pad (D-Pad) controls in the
+ Android <a href="{@docRoot}tools/devices/emulator.html">Emulator</a> or use
+ <a href="http://support.google.com/nexus/bin/answer.py?hl=en&answer=2700718">gesture
+ navigation</a> on devices with Android 4.1 (API Level 16) or higher.
+ <p class="note"><strong>Note:</strong> Keyboards and D-pads provide different navigation paths
+ than accessibility gestures. While gestures allow users to focus on nearly any on-screen
+ content, keyboard and D-pad navigation only allow focus on input fields and buttons.</p>
+ </li>
+ <li><strong>TalkBack audio prompts:</strong> Verify that user interface controls that provide
+ information (graphics or text) or allow user action have clear and accurate audio descriptions
+ when <a href="#testing-talkback">TalkBack is enabled</a> and controls are focused. Use
+ directional controls to move focus between application layout elements.</li>
+ <li><strong>Explore by Touch prompts:</strong> Verify that user interface controls that
+ provide information (graphics or text) or allow user action have appropriate audio descriptions
+ when <a href="#testing-ebt">Explore by Touch is enabled</a>. There should be no
+ regions where contents or controls do not provide an audio description.</li>
+ <li><strong>Touchable control sizes:</strong> All controls where a user can select or take an
+ action must be a minimum of 48 dp (approximately 9mm) in length and width, as recommended by
+ <a href="{@docRoot}design/patterns/accessibility.html">Android Design</a>.</li>
+ <li><strong>Gestures work with TalkBack enabled:</strong> Verify that app-specific gestures,
+ such as zooming images, scrolling lists, swiping between pages or navigating carousel controls
+ continue to work when <a href="#testing-talkback">TalkBack is enabled</a>. If these gestures do
+ not function, then an alternative interface for these actions must be provided.</li>
+ <li><strong>No audio-only feedback:</strong> Audio feedback must always have a secondary
+ feedback mechanism to support users who are deaf or hard of hearing, for example: A sound alert
+ for the arrival of a message should also be accompanied by a system
+ {@link android.app.Notification}, haptic feedback (if available) or another visual alert.</li>
+</ol>
+
+
+<h2 id="recommendations">Testing Recommendations</h2>
+
+<p>The following tests are recommended for ensuring the accessibility of your application. If you
+ do not test these items, it may impact the overall accessibility and quality of your
+ application.</p>
+
+<ol>
+ <li><strong>Repetitive audio prompting:</strong> Check that closely related controls (such as
+ items with multiple components in a list) do not simply repeat the same audio prompt. For
+ example, in a contacts list that contains a contact picture, written name and title, the prompts
+ should not simply repeat “Bob Smith” for each item.</li>
+ <li><strong>Audio prompt overloading or underloading:</strong> Check that closely related
+ controls provide an appropriate level of audio information that enables users to understand and
+ act on a screen element. Too little or too much prompting can make it difficult to understand
+ and use a control.</li>
+</ol>
+
+
+<h2 id="special-cases">Special Cases and Considerations</h2>
+
+<p>The following list describes specific situations that should be tested to ensure an
+ accessible app. Some, none or all of the cases described here may apply to your application. Be
+ sure to review this list to find out if these special cases apply and take appropriate action.</p>
+
+<ol>
+ <li><strong>Review developer special cases and considerations:</strong> Review the list of
+ <a href="{@docRoot}guide/topics/ui/accessibility/checklist.html#special-cases">special cases</a>
+ for accessibility development and test your application for the cases that apply.</li>
+ <li><strong>Prompts for controls that change function:</strong> Buttons or other controls
+ that change function due to application context or workflow must provide audio prompts
+ appropriate to their current function. For example, a button that changes function from play
+ video to pause video should provide an audio prompt which is appropriate to its current state.</li>
+ <li><strong>Video playback and captioning:</strong> If the application provides video
+ playback, verify that it supports captioning and subtitles to assist users who are deaf or hard
+ of hearing. The video playback controls must clearly indicate if captioning is available for a
+ video and provide a clear way of enabling captions.</li>
+</ol>
+
+
+<h2 id="how-to">Testing Accessibility Features</h2>
+
+<p>Testing of accessibility features such as TalkBack, Explore by Touch and accessibility Gestures
+requires setup of your testing device. This section describes how to enable these features for
+accessibility testing.</p>
+
+
+<h3 id="test-audibles">Testing audible feedback</h3>
+
+<p>Audible accessibility feedback features on Android devices provide audio prompts that speaks
+ the screen content as you move around an application. By enabling these features on an Android
+ device, you can test the experience of users with blindness or low-vision using your application.
+</p>
+
+<p>Audible feedback for users on Android is typically provided by TalkBack accessibility service and
+the Explore by Touch system feature. The TalkBack accessibility service comes preinstalled on most
+Android devices and can also be downloaded for free from
+<a href="https://play.google.com/store/apps/details?id=com.google.android.marvin.talkback">Google
+Play</a>. The Explore by Touch system feature is available on devices running Android 4.0 and later.
+</p>
+
+<h4 id="testing-talkback">Testing with TalkBack</h4>
+
+<p>The <em>TalkBack</em> accessibility service works by speaking the contents of user interface
+controls as the user moves focus onto controls. This service should be enabled as part of testing
+focus navigation and audible prompts.</p>
+
+<p>To enable the TalkBack accessibility service:</p>
+<ol>
+ <li>Launch the <strong>Settings</strong> application.</li>
+ <li>Navigate to the <strong>Accessibility</strong> category and select it.</li>
+ <li>Select <strong>Accessibility</strong> to enable it.</li>
+ <li>Select <strong>TalkBack</strong> to enable it.</li>
+</ol>
+
+<p class="note">
+ <strong>Note:</strong> While TalkBack is the most available Android accessibility service for
+ users with disabilities, other accessibility services are available and may be installed by users.
+</p>
+
+<p>For more information about using TalkBack, see
+<a href="http://support.google.com/nexus/bin/answer.py?hl=en&answer=2700928">Use TalkBack</a>.</p>
+
+<h4 id="testing-ebt">Testing with Explore by Touch</h4>
+
+<p>The <em>Explore by Touch</em> system feature is available on devices running Android 4.0 and
+ later, and works by enabling a special accessibility mode that allows users to drag a finger
+ around the interface of an application and hear the contents of the screen spoken. This feature
+ does not require screen elements to be focused using an directional controller, but listens for
+ hover events over user interface controls.
+</p>
+
+<p>To enable Explore by Touch on Android 4.0 and later:</p>
+<ol>
+ <li>Launch the <strong>Settings</strong> application.</li>
+ <li>Navigate to the <strong>Accessibility</strong> category and select it.</li>
+ <li>Select the <strong>TalkBack</strong> to enable it.
+ <p class="note"><strong>Note:</strong> On Android 4.1 (API Level 16) and higher, the system
+ provides a popup message to enable Explore by Touch. On older versions, you must follow the
+ step below.</p>
+ </li>
+ <li>Return to the <strong>Accessibility</strong> category and select <strong>Explore by
+Touch</strong> to enable it.
+ <p class="note"><strong>Note:</strong> You must turn on TalkBack <em>first</em>, otherwise this
+option is not available.</p>
+ </li>
+</ol>
+
+<p>For more information about using the Explore by Touch features, see
+<a href="http://support.google.com/nexus/bin/answer.py?hl=en&answer=2700722">Use Explore by
+Touch</a>.</p>
+
+<h3 id="test-navigation">Testing focus navigation</h3>
+
+<p>Focus navigation is the use of directional controls to navigate between the individual user
+ interface elements of an application in order to operate it. Users with limited vision or limited
+ manual dexterity often use this mode of navigation instead of touch navigation. As part of
+ accessibility testing, you should verify that your application can be operated using only
+ directional controls.</p>
+
+<p>You can test navigation of your application using only focus controls, even if your test devices
+ does not have a directional controller. The <a href="{@docRoot}tools/help/emulator.html">Android
+ Emulator</a> provides a simulated directional controller that you can use to test navigation. You
+ can also use a software-based directional controller, such as the one provided by the
+ <a href="https://play.google.com/store/apps/details?id=com.googlecode.eyesfree.inputmethod.latin"
+ >Eyes-Free Keyboard</a> to simulate use of a D-pad on a test device that does not have a physical
+ D-pad.</p>
+
+
+<h3 id="test-gestures">Testing gesture navigation</h3>
+
+<p>Gesture navigation is an accessibility navigation mode that allows users to navigate Android
+ devices and applications using specific
+ <a href="http://support.google.com/nexus/bin/answer.py?hl=en&answer=2700718">gestures</a>. This
+ navigation mode is available on Android 4.1 (API Level 16) and higher.</p>
+
+<p class="note"><strong>Note:</strong> Accessibility gestures provide a different navigation path
+than keyboards and D-pads. While gestures allow users to focus on nearly any on-screen
+content, keyboard and D-pad navigation only allow focus on input fields and buttons.</p>
+
+<p>To enable gesture navigation on Android 4.1 and later:</p>
+<ul>
+ <li>Enable both TalkBack and the Explore by Touch feature as described in the
+ <a href="#testing-ebt">Testing with Explore by Touch</a>. When <em>both</em> of these
+ features are enabled, accessibility gestures are automatically enabled.</li>
+ <li>You can change gesture settings using <strong>Settings &gt; Accessibility &gt; TalkBack &gt;
+ Settings &gt; Manage shortcut gestures</strong>.
+</ul>
+
+<p>For more information about using Explore by Touch accessibility gestures, see
+<a href="http://support.google.com/android/bin/topic.py?hl=en&topic=2492346">Accessibility
+gestures</a>.</p>
+
+<p class="note">
+ <strong>Note:</strong> Accessibility services other than TalkBack may map accessibility gestures
+ to different user actions. If gestures are not producing the expected actions during testing, try
+ disabling other accessibility services before proceeding.</p> \ No newline at end of file
diff --git a/docs/html/tools/tools_toc.cs b/docs/html/tools/tools_toc.cs
index 850e0ec..cca9433 100644
--- a/docs/html/tools/tools_toc.cs
+++ b/docs/html/tools/tools_toc.cs
@@ -5,7 +5,7 @@
<a href="<?cs var:toroot ?>tools/index.html"><span class="en">Developer Tools</span></a>
</div>
</li>
-
+
<li class="nav-section">
<div class="nav-section-header"><a href="<?cs var:toroot
?>sdk/index.html"><span class="en">Download</span></a></div>
@@ -29,7 +29,7 @@
</li>
</ul>
</li>
-
+
<li class="nav-section">
<div class="nav-section-header">
<a href="/tools/workflow/index.html"><span class="en">Workflow</span></a>
@@ -39,8 +39,8 @@
<div class="nav-section-header"><a href="/tools/devices/index.html"><span class="en">Setting Up Virtual Devices</span></a></div>
<ul>
<li><a href="/tools/devices/managing-avds.html"><span class="en">With AVD Manager</span></a></li>
- <li><a href="/tools/devices/managing-avds-cmdline.html"><span class="en">From the Command Line</span></a></li>
- <li><a href="/tools/devices/emulator.html"><span class="en">Using the Android Emulator</span></a></li>
+ <li><a href="/tools/devices/managing-avds-cmdline.html"><span class="en">From the Command Line</span></a></li>
+ <li><a href="/tools/devices/emulator.html"><span class="en">Using the Android Emulator</span></a></li>
</ul>
</li>
<li><a href="/tools/device.html"><span class="en">Using Hardware Devices</span></a></li>
@@ -48,16 +48,16 @@
<div class="nav-section-header"><a href="/tools/projects/index.html"><span class="en">Setting Up Projects</span></a></div>
<ul>
<li><a href="/tools/projects/projects-eclipse.html"><span class="en">From Eclipse with ADT</span></a></li>
- <li><a href="/tools/projects/projects-cmdline.html"><span class="en">From the Command Line</span></a></li>
+ <li><a href="/tools/projects/projects-cmdline.html"><span class="en">From the Command Line</span></a></li>
</ul>
</li>
-
+
<li class="nav-section">
<div class="nav-section-header"><a href="/tools/building/index.html"><span class="en">Building and Running</span></a></div>
<ul>
<li><a href="/tools/building/building-eclipse.html"><span class="en">From Eclipse with ADT</span></a></li>
- <li><a href="/tools/building/building-cmdline.html"><span class="en">From the Command Line</span></a></li>
+ <li><a href="/tools/building/building-cmdline.html"><span class="en">From the Command Line</span></a></li>
</ul>
</li>
@@ -76,7 +76,7 @@
</li>
<li><a href="<?cs var:toroot ?>tools/testing/testing_otheride.html">
<span class="en">From Other IDEs</span></a>
- </li>
+ </li>
<li>
<a href="<?cs var:toroot?>tools/testing/activity_testing.html">
<span class="en">Activity Testing</span></a>
@@ -90,6 +90,10 @@
<span class="en">Content Provider Testing</span></a>
</li>
<li>
+ <a href="<?cs var:toroot?>tools/testing/testing_accessibility.html">
+ <span class="en">Accessibility Testing</span></a>
+ </li>
+ <li>
<a href="<?cs var:toroot ?>tools/testing/what_to_test.html">
<span class="en">What To Test</span></a>
</li>
@@ -110,6 +114,7 @@
<li><a href="<?cs var:toroot ?>tools/debugging/improving-w-lint.html"><span class="en">Improving Your Code with lint</span></a></li>
<li><a href="<?cs var:toroot ?>tools/debugging/debugging-ui.html"><span class="en">Optimizing your UI</span></a></li>
<li><a href="<?cs var:toroot ?>tools/debugging/debugging-tracing.html"><span class="en">Profiling with Traceview and dmtracedump</span></a></li>
+ <li><a href="<?cs var:toroot ?>tools/debugging/systrace.html"><span class="en">Analysing Display and Performance with Systrace</span></a></li>
<li><a href="<?cs var:toroot ?>tools/debugging/debugging-devtools.html"><span class="en">Using the Dev Tools App</span></a></li>
</ul>
</li>
@@ -155,12 +160,13 @@ class="en">MonkeyRunner</span></a></li>
</ul>
</li>
<li><a href="<?cs var:toroot ?>tools/help/proguard.html">ProGuard</a></li>
+ <li><a href="<?cs var:toroot ?>tools/help/systrace.html">Systrace</a></li>
<li><a href="<?cs var:toroot ?>tools/help/gltracer.html">Tracer for OpenGL ES</a></li>
<li><a href="<?cs var:toroot ?>tools/help/traceview.html">Traceview</a></li>
<li><a href="<?cs var:toroot ?>tools/help/zipalign.html">zipalign</a></li>
</ul>
</li>
-
+
<li class="nav-section">
<div class="nav-section-header"><a href="<?cs var:toroot
?>tools/revisions/index.html"><span class="en">Revisions</span></a></div>
@@ -178,8 +184,8 @@ class="en">MonkeyRunner</span></a></li>
class="en">Platforms</span></a></li>
</ul>
</li>
-
-
+
+
<li class="nav-section">
<div class="nav-section-header"><a href="<?cs var:toroot
?>tools/extras/index.html"><span class="en">Extras</span></a></div>
@@ -192,13 +198,13 @@ class="en">USB Drivers</span></a>
</ul>
</li>
-
+
<li class="nav-section">
<div class="nav-section-header empty"><a href="<?cs var:toroot
?>tools/samples/index.html"><span class="en">Samples</span></a></div>
</li>
-
+
<li class="nav-section">
<div class="nav-section-header">
<a href="<?cs var:toroot ?>tools/adk/index.html">
@@ -207,17 +213,9 @@ class="en">USB Drivers</span></a>
<ul>
<li><a href="<?cs var:toroot ?>tools/adk/adk2.html">ADK 2012 Guide</a></li>
<li><a href="<?cs var:toroot ?>tools/adk/adk.html">ADK 2011 Guide</a></li>
- <li class="nav-section">
- <div class="nav-section-header">
- <a href="<?cs var:toroot ?>tools/adk/aoa.html">Android Open Accessory Protocol</a>
- </div>
- <ul>
- <li><a href="<?cs var:toroot ?>tools/adk/aoa2.html">AOA 2.0</a></li>
- </ul>
- </li>
</ul>
</li>
-
+
</ul><!-- nav -->
<script type="text/javascript">
diff --git a/docs/html/training/animation/anim_card_flip.mp4 b/docs/html/training/animation/anim_card_flip.mp4
new file mode 100755
index 0000000..e885f98
--- /dev/null
+++ b/docs/html/training/animation/anim_card_flip.mp4
Binary files differ
diff --git a/docs/html/training/animation/anim_card_flip.ogv b/docs/html/training/animation/anim_card_flip.ogv
new file mode 100755
index 0000000..33cd86c
--- /dev/null
+++ b/docs/html/training/animation/anim_card_flip.ogv
Binary files differ
diff --git a/docs/html/training/animation/anim_card_flip.webm b/docs/html/training/animation/anim_card_flip.webm
new file mode 100755
index 0000000..a670d78
--- /dev/null
+++ b/docs/html/training/animation/anim_card_flip.webm
Binary files differ
diff --git a/docs/html/training/animation/anim_crossfade.mp4 b/docs/html/training/animation/anim_crossfade.mp4
new file mode 100644
index 0000000..ced7cc9
--- /dev/null
+++ b/docs/html/training/animation/anim_crossfade.mp4
Binary files differ
diff --git a/docs/html/training/animation/anim_crossfade.ogv b/docs/html/training/animation/anim_crossfade.ogv
new file mode 100644
index 0000000..7ec417a
--- /dev/null
+++ b/docs/html/training/animation/anim_crossfade.ogv
Binary files differ
diff --git a/docs/html/training/animation/anim_crossfade.webm b/docs/html/training/animation/anim_crossfade.webm
new file mode 100644
index 0000000..21e7228
--- /dev/null
+++ b/docs/html/training/animation/anim_crossfade.webm
Binary files differ
diff --git a/docs/html/training/animation/anim_layout_changes.mp4 b/docs/html/training/animation/anim_layout_changes.mp4
new file mode 100644
index 0000000..0709601
--- /dev/null
+++ b/docs/html/training/animation/anim_layout_changes.mp4
Binary files differ
diff --git a/docs/html/training/animation/anim_layout_changes.ogv b/docs/html/training/animation/anim_layout_changes.ogv
new file mode 100644
index 0000000..75f5250
--- /dev/null
+++ b/docs/html/training/animation/anim_layout_changes.ogv
Binary files differ
diff --git a/docs/html/training/animation/anim_layout_changes.webm b/docs/html/training/animation/anim_layout_changes.webm
new file mode 100644
index 0000000..a99a566
--- /dev/null
+++ b/docs/html/training/animation/anim_layout_changes.webm
Binary files differ
diff --git a/docs/html/training/animation/anim_screenslide.mp4 b/docs/html/training/animation/anim_screenslide.mp4
new file mode 100755
index 0000000..3e65026
--- /dev/null
+++ b/docs/html/training/animation/anim_screenslide.mp4
Binary files differ
diff --git a/docs/html/training/animation/anim_screenslide.ogv b/docs/html/training/animation/anim_screenslide.ogv
new file mode 100755
index 0000000..c45ebd4
--- /dev/null
+++ b/docs/html/training/animation/anim_screenslide.ogv
Binary files differ
diff --git a/docs/html/training/animation/anim_screenslide.webm b/docs/html/training/animation/anim_screenslide.webm
new file mode 100755
index 0000000..c72adbc
--- /dev/null
+++ b/docs/html/training/animation/anim_screenslide.webm
Binary files differ
diff --git a/docs/html/training/animation/anim_zoom.mp4 b/docs/html/training/animation/anim_zoom.mp4
new file mode 100644
index 0000000..4326c35
--- /dev/null
+++ b/docs/html/training/animation/anim_zoom.mp4
Binary files differ
diff --git a/docs/html/training/animation/anim_zoom.ogv b/docs/html/training/animation/anim_zoom.ogv
new file mode 100644
index 0000000..e5793f3
--- /dev/null
+++ b/docs/html/training/animation/anim_zoom.ogv
Binary files differ
diff --git a/docs/html/training/animation/anim_zoom.webm b/docs/html/training/animation/anim_zoom.webm
new file mode 100644
index 0000000..b3b7566
--- /dev/null
+++ b/docs/html/training/animation/anim_zoom.webm
Binary files differ
diff --git a/docs/html/training/animation/cardflip.jd b/docs/html/training/animation/cardflip.jd
new file mode 100644
index 0000000..ab3eb3a
--- /dev/null
+++ b/docs/html/training/animation/cardflip.jd
@@ -0,0 +1,365 @@
+page.title=Displaying Card Flip Animations
+trainingnavtop=true
+
+@jd:body
+ <div id="tb-wrapper">
+ <div id="tb">
+ <h2>
+ This lesson teaches you to
+ </h2>
+ <ol>
+ <li>
+ <a href="#animators">Create the Animators</a>
+ </li>
+ <li>
+ <a href="#views">Create the Views</a>
+ </li>
+ <li>
+ <a href="#fragment">Create the Fragment</a>
+ </li>
+ <li>
+ <a href="#animate">Animate the Card Flip</a>
+ </li>
+ </ol>
+ </div>
+ </div>
+ <p> This lesson shows you how to do a card flip
+ animation with custom fragment animations.
+ Card flips animate between views of content by showing an animation that emulates
+ a card flipping over.
+ </p>
+ <p>Here's what a card flip looks like:
+ </p>
+
+ <div class="framed-galaxynexus-land-span-8">
+ <video class="play-on-hover" autoplay>
+ <source src="anim_card_flip.mp4" type="video/mp4">
+ <source src="anim_card_flip.webm" type="video/webm">
+ <source src="anim_card_flip.ogv" type="video/ogg">
+ </video>
+ </div>
+ <div class="figure-caption">
+ Card flip animation
+ <div class="video-instructions">&nbsp;</div>
+ </div>
+
+ <p>
+ If you want to jump ahead and see a full working example,
+ <a href="{@docRoot}shareables/training/Animations.zip">download</a> and
+ run the sample app and select the Card Flip example. See the following
+ files for the code implementation:
+ </p>
+ <ul>
+ <li>
+ <code>src/CardFlipActivity.java</code>
+ </li>
+ <li>
+ <code>animator/card_flip_right_in.xml</code>
+ </li>
+ <li>
+ <code>animator/card_flip_right_out.xml</code>
+ </li>
+ <li>
+ <code>animator/card_flip_right_in.xml</code>
+ </li>
+ <li>
+ <code>animator/card_flip_left_out.xml</code>
+ </li>
+ <li>
+ <code>layout/fragment_card_back.xml</code>
+ </li>
+ <li>
+ <code>layout/fragment_card_front.xml</code>
+ </li>
+ </ul>
+
+ <h2 id="animate">
+ Create the Animators
+ </h2>
+ <p>
+ Create the animations for the card flips. You'll need two animators for when the front
+ of the card animates out and to the left and in and from the left. You'll also need two animators
+ for when the back of the card animates in and from the right and out and to the right.
+ </p>
+ <h4>
+ card_flip_left_in.xml
+ </h4>
+<pre>
+&lt;set xmlns:android="http://schemas.android.com/apk/res/android"&gt;
+ &lt;!-- Before rotating, immediately set the alpha to 0. --&gt;
+ &lt;objectAnimator
+ android:valueFrom="1.0"
+ android:valueTo="0.0"
+ android:propertyName="alpha"
+ android:duration="0" /&gt;
+
+ &lt;!-- Rotate. --&gt;
+ &lt;objectAnimator
+ android:valueFrom="-180"
+ android:valueTo="0"
+ android:propertyName="rotationY"
+ android:interpolator="@android:interpolator/accelerate_decelerate"
+ android:duration="@integer/card_flip_time_full" /&gt;
+
+ &lt;!-- Half-way through the rotation (see startOffset), set the alpha to 1. --&gt;
+ &lt;objectAnimator
+ android:valueFrom="0.0"
+ android:valueTo="1.0"
+ android:propertyName="alpha"
+ android:startOffset="@integer/card_flip_time_half"
+ android:duration="1" /&gt;
+&lt;/set&gt;
+</pre>
+ <h4>
+ card_flip_left_out.xml
+ </h4>
+ <pre>
+&lt;set xmlns:android="http://schemas.android.com/apk/res/android"&gt;
+ &lt;!-- Rotate. --&gt;
+ &lt;objectAnimator
+ android:valueFrom="0"
+ android:valueTo="180"
+ android:propertyName="rotationY"
+ android:interpolator="@android:interpolator/accelerate_decelerate"
+ android:duration="@integer/card_flip_time_full" /&gt;
+
+ &lt;!-- Half-way through the rotation (see startOffset), set the alpha to 0. --&gt;
+ &lt;objectAnimator
+ android:valueFrom="1.0"
+ android:valueTo="0.0"
+ android:propertyName="alpha"
+ android:startOffset="@integer/card_flip_time_half"
+ android:duration="1" /&gt;
+&lt;/set&gt;
+ </pre>
+ <h4>
+ card_flip_right_in.xml
+ </h4>
+ <pre>
+&lt;set xmlns:android="http://schemas.android.com/apk/res/android"&gt;
+ &lt;!-- Before rotating, immediately set the alpha to 0. --&gt;
+ &lt;objectAnimator
+ android:valueFrom="1.0"
+ android:valueTo="0.0"
+ android:propertyName="alpha"
+ android:duration="0" /&gt;
+
+ &lt;!-- Rotate. --&gt;
+ &lt;objectAnimator
+ android:valueFrom="180"
+ android:valueTo="0"
+ android:propertyName="rotationY"
+ android:interpolator="@android:interpolator/accelerate_decelerate"
+ android:duration="@integer/card_flip_time_full" /&gt;
+
+ &lt;!-- Half-way through the rotation (see startOffset), set the alpha to 1. --&gt;
+ &lt;objectAnimator
+ android:valueFrom="0.0"
+ android:valueTo="1.0"
+ android:propertyName="alpha"
+ android:startOffset="@integer/card_flip_time_half"
+ android:duration="1" /&gt;
+</set>
+
+</pre>
+ <h4>
+ card_flip_right_out.xml
+ </h4>
+ <pre>
+&lt;set xmlns:android="http://schemas.android.com/apk/res/android"&gt;
+ &lt;!-- Rotate. --&gt;
+ &lt;objectAnimator
+ android:valueFrom="0"
+ android:valueTo="-180"
+ android:propertyName="rotationY"
+ android:interpolator="@android:interpolator/accelerate_decelerate"
+ android:duration="@integer/card_flip_time_full" /&gt;
+
+ &lt;!-- Half-way through the rotation (see startOffset), set the alpha to 0. --&gt;
+ &lt;objectAnimator
+ android:valueFrom="1.0"
+ android:valueTo="0.0"
+ android:propertyName="alpha"
+ android:startOffset="@integer/card_flip_time_half"
+ android:duration="1" /&gt;
+&lt;/set&gt;
+</pre>
+ <h2 id="views">
+ Create the Views
+ </h2>
+ <p>
+ Each side of the "card" is a separate layout that can contain any content you want,
+ such as two screens of text, two images, or any combination of views to flip between. You'll then
+ use the two layouts in the fragments that you'll later animate. The following layouts
+ create one side of a card that shows text:
+ </p>
+
+ <pre>
+&lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="vertical"
+ android:background="#a6c"
+ android:padding="16dp"
+ android:gravity="bottom"&gt;
+
+ &lt;TextView android:id="@android:id/text1"
+ style="?android:textAppearanceLarge"
+ android:textStyle="bold"
+ android:textColor="#fff"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:text="@string/card_back_title" /&gt;
+
+ &lt;TextView style="?android:textAppearanceSmall"
+ android:textAllCaps="true"
+ android:textColor="#80ffffff"
+ android:textStyle="bold"
+ android:lineSpacingMultiplier="1.2"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:text="@string/card_back_description" /&gt;
+
+&lt;/LinearLayout&gt;
+</pre>
+<p>
+and the other side of the card that displays an {@link android.widget.ImageView}:
+</p>
+<pre>
+&lt;ImageView xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:src="@drawable/image1"
+ android:scaleType="centerCrop"
+ android:contentDescription="@string/description_image_1" /&gt;
+</pre>
+ <h2 id="fragment">
+ Create the Fragment
+ </h2>
+ <p>
+ Create fragment classes for the front and back of the card. These classes return the layouts
+ that you created previously in the {@link android.app.Fragment#onCreateView onCreateView()} method
+ of each fragment. You can then create instances of this fragment in the parent activity
+ where you want to show the card. The following example shows nested fragment classes inside
+ of the parent activity that uses them:
+ </p>
+ <pre>
+public class CardFlipActivity extends Activity {
+ ...
+ /**
+ * A fragment representing the front of the card.
+ */
+ public class CardFrontFragment extends Fragment {
+ &#64;Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container,
+ Bundle savedInstanceState) {
+ return inflater.inflate(R.layout.fragment_card_front, container, false);
+ }
+ }
+
+ /**
+ * A fragment representing the back of the card.
+ */
+ public class CardBackFragment extends Fragment {
+ &#64;Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container,
+ Bundle savedInstanceState) {
+ return inflater.inflate(R.layout.fragment_card_back, container, false);
+ }
+ }
+}
+</pre>
+ <h2 id="animate">
+ Animate the Card Flip
+ </h2>
+
+ <p> Now, you'll need to display the fragments inside of a parent activity.
+ To do this, first create the layout for your activity. The following example creates a
+ {@link android.widget.FrameLayout} that you
+ can add fragments to at runtime:</p>
+
+ <pre>
+&lt;FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/container"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent" /&gt;
+</pre>
+
+ <p>In the activity code, set the content view to be the layout that you just created. It's also
+ good idea to show a default fragment when the activity is created, so the following example
+ activity shows you how to display the front of the card by default:
+ </p>
+
+
+
+<pre>
+public class CardFlipActivity extends Activity {
+
+ &#64;Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_activity_card_flip);
+
+ if (savedInstanceState == null) {
+ getFragmentManager()
+ .beginTransaction()
+ .add(R.id.container, new CardFrontFragment())
+ .commit();
+ }
+ }
+ ...
+}
+</pre>
+ <p>
+ Now that you have the front of the card showing, you can show the back of the card
+ with the flip animation at an appropriate time. Create a method to show the other
+ side of the card that does the following things:
+ </p>
+ <ul>
+ <li>Sets the custom animations that you created earlier for the fragment transitions.
+ </li>
+ <li>Replaces the currently displayed fragment with a new fragment and animates this event
+ with the custom animations that you created.
+ </li>
+ <li>Adds the previously displayed fragment to the fragment back stack
+ so when the user presses the <em>Back</em> button, the card flips back over.
+ </li>
+ </ul>
+ <pre>
+private void flipCard() {
+ if (mShowingBack) {
+ getFragmentManager().popBackStack();
+ return;
+ }
+
+ // Flip to the back.
+
+ mShowingBack = true;
+
+ // Create and commit a new fragment transaction that adds the fragment for the back of
+ // the card, uses custom animations, and is part of the fragment manager's back stack.
+
+ getFragmentManager()
+ .beginTransaction()
+
+ // Replace the default fragment animations with animator resources representing
+ // rotations when switching to the back of the card, as well as animator
+ // resources representing rotations when flipping back to the front (e.g. when
+ // the system Back button is pressed).
+ .setCustomAnimations(
+ R.animator.card_flip_right_in, R.animator.card_flip_right_out,
+ R.animator.card_flip_left_in, R.animator.card_flip_left_out)
+
+ // Replace any fragments currently in the container view with a fragment
+ // representing the next page (indicated by the just-incremented currentPage
+ // variable).
+ .replace(R.id.container, new CardBackFragment())
+
+ // Add this transaction to the back stack, allowing users to press Back
+ // to get to the front of the card.
+ .addToBackStack(null)
+
+ // Commit the transaction.
+ .commit();
+}
+</pre> \ No newline at end of file
diff --git a/docs/html/training/animation/crossfade.jd b/docs/html/training/animation/crossfade.jd
new file mode 100644
index 0000000..99e879b
--- /dev/null
+++ b/docs/html/training/animation/crossfade.jd
@@ -0,0 +1,208 @@
+page.title=Crossfading Two Views
+trainingnavtop=true
+
+
+@jd:body
+
+ <div id="tb-wrapper">
+ <div id="tb">
+ <h2>
+ This lesson teaches you to:
+ </h2>
+ <ol>
+ <li>
+ <a href="#views">Create the Views</a>
+ </li>
+ <li>
+ <a href="#setup">Set up the Animation</a>
+ </li>
+ <li>
+ <a href="#animate">Crossfade the Views</a>
+ </li>
+ </ol>
+ </div>
+ </div>
+
+ <p>
+ Crossfade animations (also know as dissolve) gradually fade out one UI component while simultaneously fading in
+ another. This animation is useful for situations where you want to switch content or views
+ in your app. Crossfades are very subtle and short but offer a fluid transition from one screen to the
+ next. When you don't use them, however, transitions often feel abrupt or hurried.
+ </p>
+ <p>Here's an example of a crossfade from a progress indicator to some text content.
+ </p>
+
+<div class="framed-galaxynexus-land-span-8">
+ <video class="play-on-hover" autoplay>
+ <source src="anim_crossfade.mp4" type="video/mp4">
+ <source src="anim_crossfade.webm" type="video/webm">
+ <source src="anim_crossfade.ogv" type="video/ogg">
+ </video>
+</div>
+<div class="figure-caption">
+Crossfade animation
+ <div class="video-instructions">&nbsp;</div>
+</div>
+
+ <p>
+ If you want to jump ahead and see a full working example,
+ <a href="{@docRoot}shareables/training/Animations.zip">download</a>
+ and run the sample app and select the Crossfade example.
+ See the following files for the code implementation:
+ </p>
+ <ul>
+ <li>
+ <code>src/CrossfadeActivity.java</code>
+ </li>
+ <li>
+ <code>layout/activity_crossfade.xml</code>
+ </li>
+ <li>
+ <code>menu/activity_crossfade.xml</code>
+ </li>
+ </ul>
+ <h2 id="views">
+ Create the Views
+ </h2>
+ <p>
+ Create the two views that you want to crossfade. The following example creates a progress
+ indicator and a scrollable text view:
+ </p>
+ <pre>
+&lt;FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"&gt;
+
+ &lt;ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/content"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"&gt;
+
+ &lt;TextView style="?android:textAppearanceMedium"
+ android:lineSpacingMultiplier="1.2"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:text="@string/lorem_ipsum"
+ android:padding="16dp" /&gt;
+
+ &lt;/ScrollView&gt;
+
+ &lt;ProgressBar android:id="@+id/loading_spinner"
+ style="?android:progressBarStyleLarge"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center" /&gt;
+
+&lt;/FrameLayout&gt;
+</pre>
+ <h2 id="setup">
+ Set up the Animation
+ </h2>
+ <p>
+ To set up the animation:
+ </p>
+ <ol>
+ <li>Create member variables for the views that you want to crossfade. You need
+ these references later when modifying the views during the animation.
+ </li>
+ <li>For the view that is being faded in, set its visibility to {@link
+ android.view.View#GONE}. This prevents the view from taking up layout space and omits it
+ from layout calculations, speeding up processing.
+ </li>
+ <li>Cache the <code>{@link android.R.integer#config_shortAnimTime}</code>
+ system property in a member variable. This property defines a standard
+ "short" duration for the animation. This duration is ideal for subtle animations or
+ animations that occur very frequently. {@link android.R.integer#config_longAnimTime} and
+ {@link android.R.integer#config_mediumAnimTime} are also available if you wish to use them.
+ </li>
+ </ol>
+ <p>
+ Here's an example using the layout from the previous code snippet as the activity content
+ view:
+ </p>
+ <pre>
+public class CrossfadeActivity extends Activity {
+
+ private View mContentView;
+ private View mLoadingView;
+ private int mShortAnimationDuration;
+
+ ...
+
+ &#64;Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_crossfade);
+
+ mContentView = findViewById(R.id.content);
+ mLoadingView = findViewById(R.id.loading_spinner);
+
+ // Initially hide the content view.
+ mContentView.setVisibility(View.GONE);
+
+ // Retrieve and cache the system's default "short" animation time.
+ mShortAnimationDuration = getResources().getInteger(
+ android.R.integer.config_shortAnimTime);
+ }
+
+</pre>
+ <h2 id="animate">
+ Crossfade the Views
+ </h2>
+ <p>
+ Now that the views are properly set up, crossfade them by doing the following:
+ </p>
+ <ol>
+ <li>For the view that is fading in, set the alpha value to <code>0</code> and the visibility
+ to {@link android.view.View#VISIBLE}. (Remember that it was initially set to {@link
+ android.view.View#GONE}.) This makes the view visible but completely transparent.
+ </li>
+ <li>For the view that is fading in, animate its alpha value from <code>0</code> to
+ <code>1</code>. At the same time, for the view that is fading out, animate the alpha value
+ from <code>1</code> to <code>0</code>.
+ </li>
+ <li>Using {@link android.animation.Animator.AnimatorListener#onAnimationEnd onAnimationEnd()}
+ in an {@link android.animation.Animator.AnimatorListener}, set the visibility of the view
+ that was fading out to {@link android.view.View#GONE}. Even though the alpha value is <code>0</code>,
+ setting the view's visibility to {@link android.view.View#GONE} prevents the view from taking
+ up layout space and omits it from layout calculations, speeding up processing.
+ </li>
+ </ol>
+ <p>
+ The following method shows an example of how to do this:
+ </p>
+ <pre>
+private View mContentView;
+private View mLoadingView;
+private int mShortAnimationDuration;
+
+...
+
+private void crossfade() {
+
+ // Set the content view to 0% opacity but visible, so that it is visible
+ // (but fully transparent) during the animation.
+ mContentView.setAlpha(0f);
+ mContentView.setVisibility(View.VISIBLE);
+
+ // Animate the content view to 100% opacity, and clear any animation
+ // listener set on the view.
+ mContentView.animate()
+ .alpha(1f)
+ .setDuration(mShortAnimationDuration)
+ .setListener(null);
+
+ // Animate the loading view to 0% opacity. After the animation ends,
+ // set its visibility to GONE as an optimization step (it won't
+ // participate in layout passes, etc.)
+ mHideView.animate()
+ .alpha(0f)
+ .setDuration(mShortAnimationDuration)
+ .setListener(new AnimatorListenerAdapter() {
+ &#64;Override
+ public void onAnimationEnd(Animator animation) {
+ mHideView.setVisibility(View.GONE);
+ }
+ });
+}
+</pre> \ No newline at end of file
diff --git a/docs/html/training/animation/index.jd b/docs/html/training/animation/index.jd
new file mode 100644
index 0000000..9cc7e6c
--- /dev/null
+++ b/docs/html/training/animation/index.jd
@@ -0,0 +1,86 @@
+page.title=Adding Animations
+trainingnavtop=true
+startpage=true
+
+@jd:body
+ <div id="tb-wrapper">
+ <div id="tb">
+ <h2>
+ Dependencies and prerequisites
+ </h2>
+ <ul>
+ <li>Android 4.0 or later
+ </li>
+ <li>Experience building an Android <a href="{@docRoot}guide/topics/ui/index.html">User
+ Interface</a>
+ </li>
+ </ul>
+ <h2>
+ You should also read
+ </h2>
+ <ul>
+ <li>
+ <a href="{@docRoot}guide/topics/graphics/prop-animation.html">Property Animation</a>
+ </li>
+ </ul>
+ <h2>
+ Try it out
+ </h2>
+ <div class="download-box">
+ <a href="{@docRoot}shareables/training/Animations.zip" class=
+ "button">Download the sample app</a>
+ <p class="filename">
+ Animations.zip
+ </p>
+ </div>
+ </div>
+ </div>
+ <p>
+ Animations can add subtle visual cues that notify users about what's going on in your app and
+ improve their mental model of your app's interface. Animations are especially useful when the
+ screen changes state, such as when content loads or new actions become available. Animations
+ can also add a polished look to your app, which gives your app a higher quality feel.
+ </p>
+ <p>
+ Keep in mind though, that overusing animations or using them at the wrong time can be
+ detrimental, such as when they cause delays. This training class shows you how to
+ implement some common types of animations that can increase usability and add flair without
+ annoying your users.
+ </p>
+
+ <h2>
+ Lessons
+ </h2>
+ <dl>
+ <dt>
+ <b><a href="crossfade.html">Crossfading Two Views</a></b>
+ </dt>
+ <dd>
+ Learn how to crossfade between two overlapping views. This lesson shows you how to crossfade a progress
+ indicator to a view that contains text content.
+ </dd>
+ <dt>
+ <b><a href="screen-slide.html">Using ViewPager for Screen Slides</a></b>
+ </dt>
+ <dd>
+ Learn how to animate between horizontally adjacent screens with a sliding transition.
+ </dd>
+ <dt>
+ <b><a href="cardflip.html">Displaying Card Flip Animations</a></b>
+ </dt>
+ <dd>
+ Learn how to animate between two views with a flipping motion.
+ </dd>
+ <dt>
+ <b><a href="zoom.html">Zooming a View</a></b>
+ </dt>
+ <dd>
+ Learn how to enlarge views with a touch-to-zoom animation.
+ </dd>
+ <dt>
+ <b><a href="layout.html">Animating Layout Changes</a></b>
+ </dt>
+ <dd>
+ Learn how to enable built-in animations when adding, removing, or updating child views in a layout.
+ </dd>
+ </dl> \ No newline at end of file
diff --git a/docs/html/training/animation/layout.jd b/docs/html/training/animation/layout.jd
new file mode 100644
index 0000000..b8e0077
--- /dev/null
+++ b/docs/html/training/animation/layout.jd
@@ -0,0 +1,77 @@
+page.title=Animating Layout Changes
+trainingnavtop=true
+
+@jd:body
+
+<div id="tb-wrapper">
+<div id="tb">
+
+<h2>This lesson teaches you to:</h2>
+ <ol>
+ <li><a href="#views">Create the Layout</a></li>
+ <li><a href="#add">Add, Update, or Remove Items from the Layout</a></li>
+ </ol>
+
+</div>
+</div>
+
+ <p>A layout animation is a pre-loaded animation that the system runs each time you make a change
+ to the layout configuration. All you need to do is set an attribute in the layout to tell the
+ Android system to animate these layout changes, and system-default animations are carried out for you.
+ </p>
+<p class="note"><strong>Tip</strong>: If you want to supply custom layout animations,
+create a {@link android.animation.LayoutTransition} object and supply it to
+the layout with the {@link android.view.ViewGroup#setLayoutTransition setLayoutTransition()}
+method.
+</p>
+ Here's what a default layout animation looks like when adding items to a list:
+</p>
+
+ <div class="framed-galaxynexus-land-span-8">
+ <video class="play-on-hover" autoplay>
+ <source src="anim_layout_changes.mp4" type="video/mp4">
+ <source src="anim_layout_changes.webm" type="video/webm">
+ <source src="anim_layout_changes.ogv" type="video/ogg">
+ </video>
+ </div>
+ <div class="figure-caption">
+ Layout animation
+ <div class="video-instructions">&nbsp;</div>
+ </div>
+
+<p>If you want to jump ahead and see a full working example,
+<a href="{@docRoot}shareables/training/Animations.zip">download</a> and
+run the sample app and select the Crossfade example. See the following files for the
+code implementation:</p>
+<ol>
+ <li><code>src/LayoutChangesActivity.java</code></li>
+ <li><code>layout/activity_layout_changes.xml</code></li>
+ <li><code>menu/activity_layout_changes.xml</code></li>
+</ol>
+
+<h2 id="views">Create the Layout</h2>
+<p>In your activity's layout XML file, set the <code>android:animateLayoutChanges</code>
+ attribute to <code>true</code> for the layout that you want to enable animations for.
+ For instance:</p>
+
+<pre>
+&lt;LinearLayout android:id="@+id/container"
+ android:animateLayoutChanges="true"
+ ...
+/&gt;
+</pre>
+
+<h2 id="activity">Add, Update, or Remove Items from the Layout</h2>
+<p>
+Now, all you need to do is add, remove, or update items in the layout
+and the items are animated automatically:
+</p>
+<pre>
+private ViewGroup mContainerView;
+...
+private void addItem() {
+ View newView;
+ ...
+ mContainerView.addView(newView, 0);
+}
+</pre>
diff --git a/docs/html/training/animation/screen-slide.jd b/docs/html/training/animation/screen-slide.jd
new file mode 100755
index 0000000..8a7af67
--- /dev/null
+++ b/docs/html/training/animation/screen-slide.jd
@@ -0,0 +1,185 @@
+page.title=Using ViewPager for Screen Slides
+trainingnavtop=true
+
+@jd:body
+
+ <div id="tb-wrapper">
+ <div id="tb">
+ <h2>This lesson teaches you to</h2>
+ <ol>
+ <li><a href="#views">Create the Views</a></li>
+ <li><a href="#fragment">Create the Fragment</a></li>
+ <li><a href="#viewpager">Animate the Screen Slide</a></li>
+ </ol>
+ </div>
+ </div>
+ <p>
+ Screen slides are transitions between one entire screen to another and are common with UIs
+ like setup wizards or slideshows. This lesson shows you how to do screen slides with
+ a {@link android.support.v4.view.ViewPager} provided by the <a href=
+ "{@docRoot}/tools/extras/support-library.html">support library</a>.
+ {@link android.support.v4.view.ViewPager}s can animate screen slides
+ automatically. Here's what a screen slide looks like that transitions from
+ one screen of content to the next:
+ </p>
+
+ <div class="framed-galaxynexus-land-span-8">
+ <video class="play-on-hover" autoplay>
+ <source src="anim_screenslide.mp4" type="video/mp4">
+ <source src="anim_screenslide.webm" type="video/webm">
+ <source src="anim_screenslide.ogv" type="video/ogg">
+ </video>
+ </div>
+
+ <div class="figure-caption">
+ Screen slide animation
+ <div class="video-instructions">&nbsp;</div>
+ </div>
+
+<p>If you want to jump ahead and see a full working example,
+<a href="{@docRoot}shareables/training/Animations.zip">download</a>
+and run the sample app and select the Screen Slide example. See the
+following files for the code implementation:</p>
+<ul>
+ <li><code>src/ScreenSlidePageFragment.java</code></li>
+ <li><code>src/ScreenSlideActivity.java</code></li>
+ <li><code>layout/activity_screen_slide.xml</code></li>
+ <li><code>layout/fragment_screen_slide_page.xml</code></li>
+</ul>
+
+<h2 id="views">Create the Views</h2>
+ <p>Create a layout file that you'll later use for the content of a fragment. The following example
+ contains a text view to display some text:
+
+<pre>
+&lt;com.example.android.animationsdemo.ScrollView
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/content"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"&gt;
+
+ &lt;TextView style="?android:textAppearanceMedium"
+ android:padding="16dp"
+ android:lineSpacingMultiplier="1.2"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:text="@string/lorem_ipsum" /&gt;
+
+&lt;/com.example.android.animationsdemo.ScrollView&gt;
+</pre>
+
+<h2 id="fragment">Create the Fragment</h2>
+<p>Create a {@link android.support.v4.app.Fragment} class that returns the layout
+that you just created in the {@link android.app.Fragment#onCreateView onCreateView()}
+ method. You can then create instances of this fragment in the parent activity whenever you need a new page to
+ display to the user:</p>
+
+
+<pre>
+public class ScreenSlidePageFragment extends Fragment {
+
+ &#64;Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container,
+ Bundle savedInstanceState) {
+ ViewGroup rootView = (ViewGroup) inflater.inflate(
+ R.layout.fragment_screen_slide_page, container, false);
+
+ return rootView;
+ }
+}
+</pre>
+
+<h2 id="viewpager">Screen Slides with ViewPager</h2>
+
+<p>{@link android.support.v4.view.ViewPager}s have built-in swipe gestures to transition
+ through pages, and they display screen slide animations by default, so you don't need to create any. {@link android.support.v4.view.ViewPager}s use
+{@link android.support.v4.view.PagerAdapter}s as a supply for new pages to display, so the {@link android.support.v4.view.PagerAdapter} will use the
+fragment class that you created earlier.
+ </p>
+
+<p>To begin, create a layout that contains a {@link android.support.v4.view.ViewPager}:</p>
+
+<pre>
+&lt;android.support.v4.view.ViewPager
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/pager"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent" /&gt;
+</pre>
+
+<p>Create an activity that does the following things:
+</p>
+
+<ul>
+ <li>Sets the content view to be the layout with the {@link android.support.v4.view.ViewPager}.</li>
+ <li>Create a class that extends the {@link android.support.v13.app.FragmentStatePagerAdapter} abstract class. Implement
+ the {@link android.support.v4.app.FragmentStatePagerAdapter#getItem getItem()} method to supply
+ instances of <code>ScreenSlidePageFragment</code> as new pages. The pager adapter also requires that you implement the
+ {@link android.support.v4.view.PagerAdapter#getCount getCount()} method, which returns the amount of pages the adapter will create (five in the example).
+ <li>Hooks up the {@link android.support.v4.view.PagerAdapter} to the {@link android.support.v4.view.ViewPager}</code>.</li>
+ <li>Handle's the device's back button by moving backwards in the virtual stack of fragments.
+ If the user is already on the first page, go back on the activity back stack.</li>
+</ul>
+
+<pre>
+public class ScreenSlidePagerActivity extends FragmentActivity {
+ /**
+ * The number of pages (wizard steps) to show in this demo.
+ */
+ private static final int NUM_PAGES = 5;
+
+ /**
+ * The pager widget, which handles animation and allows swiping horizontally to access previous
+ * and next wizard steps.
+ */
+ private ViewPager mPager;
+
+ /**
+ * The pager adapter, which provides the pages to the view pager widget.
+ */
+ private PagerAdapter mPagerAdapter;
+
+ &#64;Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_screen_slide_pager);
+
+ // Instantiate a ViewPager and a PagerAdapter.
+ mPager = (ViewPager) findViewById(R.id.pager);
+ mPagerAdapter = new ScreenSlidePagerAdapter(getFragmentManager());
+ mPager.setAdapter(mPagerAdapter);
+ }
+
+ &#64;Override
+ public void onBackPressed() {
+ if (mPager.getCurrentItem() == 0) {
+ // If the user is currently looking at the first step, allow the system to handle the
+ // Back button. This calls finish() on this activity and pops the back stack.
+ super.onBackPressed();
+ } else {
+ // Otherwise, select the previous step.
+ mPager.setCurrentItem(mPager.getCurrentItem() - 1);
+ }
+ }
+
+ /**
+ * A simple pager adapter that represents 5 ScreenSlidePageFragment objects, in
+ * sequence.
+ */
+ private class ScreenSlidePagerAdapter extends FragmentStatePagerAdapter {
+ public ScreenSlidePagerAdapter(FragmentManager fm) {
+ super(fm);
+ }
+
+ &#64;Override
+ public Fragment getItem(int position) {
+ return new ScreenSlidePageFragment();
+ }
+
+ &#64;Override
+ public int getCount() {
+ return NUM_PAGES;
+ }
+ }
+}
+</pre> \ No newline at end of file
diff --git a/docs/html/training/animation/zoom.jd b/docs/html/training/animation/zoom.jd
new file mode 100644
index 0000000..5dc2b6c
--- /dev/null
+++ b/docs/html/training/animation/zoom.jd
@@ -0,0 +1,320 @@
+page.title=Zooming a View
+trainingnavtop=true
+
+@jd:body
+
+ <div id="tb-wrapper">
+ <div id="tb">
+ <h2>
+ This lesson teaches you to:
+ </h2>
+ <ol>
+ <li>
+ <a href="#views">Create the Views</a>
+ </li>
+ <li>
+ <a href="#setup">Set up the Zoom Animation</a>
+ </li>
+ <li>
+ <a href="#animate">Zoom the View</a>
+ </li>
+ </ol>
+ </div>
+ </div>
+ <p>
+ This lesson demonstrates how to do a touch-to-zoom animation, which is useful for apps such as photo
+ galleries to animate a view from a thumbnail to a full-size image that fills the screen.
+ </p>
+ <p>Here's what a touch-to-zoom animation looks like that
+ expands an image thumbnail to fill the screen:
+ </p>
+
+ <div class="framed-galaxynexus-land-span-8">
+ <video class="play-on-hover" autoplay>
+ <source src="anim_zoom.mp4" type="video/mp4">
+ <source src="anim_zoom.webm" type="video/webm">
+ <source src="anim_zoom.ogv" type="video/ogg">
+ </video>
+ </div>
+ <div class="figure-caption">
+ Zoom animation
+ <div class="video-instructions">&nbsp;</div>
+ </div>
+
+ <p>
+ If you want to jump ahead and see a full working example,
+ <a href="{@docRoot}shareables/training/Animations.zip">download</a> and
+ run the sample app and select the
+ Zoom example. See the following files for the code implementation:
+ </p>
+ <ul>
+ <li>
+ <code>src/TouchHighlightImageButton.java</code> (a simple helper class that shows a blue
+ touch highlight when the image button is pressed)
+ </li>
+ <li>
+ <code>src/ZoomActivity.java</code>
+ </li>
+ <li>
+ <code>layout/activity_zoom.xml</code>
+ </li>
+ </ul>
+ <h2 id="views">
+ Create the Views
+ </h2>
+ <p>
+ Create a layout file that contains the small and large version of the content that you want
+ to zoom. The following example creates an {@link android.widget.ImageButton} for clickable image thumbnail
+ and an {@link android.widget.ImageView} that displays the enlarged view of the image:
+ </p>
+ <pre>
+&lt;FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/container"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"&gt;
+
+ &lt;LinearLayout android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="vertical"
+ android:padding="16dp"&gt;
+
+ &lt;ImageButton
+ android:id="@+id/thumb_button_1"
+ android:layout_width="100dp"
+ android:layout_height="75dp"
+ android:layout_marginRight="1dp"
+ android:src="@drawable/thumb1"
+ android:scaleType="centerCrop"
+ android:contentDescription="@string/description_image_1" /&gt;
+
+ &lt;/LinearLayout&gt;
+
+ &lt;!-- This initially-hidden ImageView will hold the expanded/zoomed version of
+ the images above. Without transformations applied, it takes up the entire
+ screen. To achieve the "zoom" animation, this view's bounds are animated
+ from the bounds of the thumbnail button above, to its final laid-out
+ bounds.
+ --&gt;
+
+ &lt;ImageView
+ android:id="@+id/expanded_image"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:visibility="invisible"
+ android:contentDescription="@string/description_zoom_touch_close" /&gt;
+
+&lt;/FrameLayout&gt;
+</pre>
+ <h2 id="setup">
+ Set up the Zoom Animation
+ </h2>
+ <p>
+ Once you apply your layout, set up the event handlers that trigger the zoom animation.
+ The following example adds a {@link android.view.View.OnClickListener} to the {@link
+ android.widget.ImageButton} to execute the zoom animation when the user
+ clicks the image button:
+ </p>
+ <pre>
+public class ZoomActivity extends FragmentActivity {
+ // Hold a reference to the current animator,
+ // so that it can be canceled mid-way.
+ private Animator mCurrentAnimator;
+
+ // The system "short" animation time duration, in milliseconds. This
+ // duration is ideal for subtle animations or animations that occur
+ // very frequently.
+ private int mShortAnimationDuration;
+
+ &#64;Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_zoom);
+
+ // Hook up clicks on the thumbnail views.
+
+ final View thumb1View = findViewById(R.id.thumb_button_1);
+ thumb1View.setOnClickListener(new View.OnClickListener() {
+ &#64;Override
+ public void onClick(View view) {
+ zoomImageFromThumb(thumb1View, R.drawable.image1);
+ }
+ });
+
+ // Retrieve and cache the system's default "short" animation time.
+ mShortAnimationDuration = getResources().getInteger(
+ android.R.integer.config_shortAnimTime);
+ }
+ ...
+}
+</pre>
+ <h2 id="animate">
+ Zoom the View
+ </h2>
+ <p>
+ You'll now need to animate from the normal sized view to the zoomed view
+ when appropriate. In general, you need to animate from the bounds of the normal-sized view to the
+ bounds of the larger-sized view. The following method shows you how to implement a zoom animation that
+ zooms from an image thumbnail to an enlarged view by doing the following things:
+ </p>
+ <ol>
+ <li>Assign the high-res image to the hidden "zoomed-in" (enlarged) {@link
+ android.widget.ImageView}. The following example loads a large image resource on the UI
+ thread for simplicity. You will want to do this loading in a separate thread to prevent
+ blocking on the UI thread and then set the bitmap on the UI thread. Ideally, the bitmap
+ should not be larger than the screen size.
+ </li>
+ <li>Calculate the starting and ending bounds for the {@link android.widget.ImageView}.
+ </li>
+ <li>Animate each of the four positioning and sizing properties <code>{@link
+ android.view.View#X}</code>, <code>{@link android.view.View#Y}</code>, ({@link
+ android.view.View#SCALE_X}, and <code>{@link android.view.View#SCALE_Y}</code>)
+ simultaneously, from the starting bounds to the ending bounds. These four animations are
+ added to an {@link android.animation.AnimatorSet} so that they can be started at the same
+ time.
+ </li>
+ <li>Zoom back out by running a similar animation but in reverse when the user touches the
+ screen when the image is zoomed in. You can do this by adding a {@link
+ android.view.View.OnClickListener} to the {@link android.widget.ImageView}. When clicked, the
+ {@link android.widget.ImageView} minimizes back down to the size of the image thumbnail and
+ sets its visibility to {@link android.view.View#GONE} to hide it.
+ </li>
+ </ol>
+ <pre>
+private void zoomImageFromThumb(final View thumbView, int imageResId) {
+ // If there's an animation in progress, cancel it
+ // immediately and proceed with this one.
+ if (mCurrentAnimator != null) {
+ mCurrentAnimator.cancel();
+ }
+
+ // Load the high-resolution "zoomed-in" image.
+ final ImageView expandedImageView = (ImageView) findViewById(
+ R.id.expanded_image);
+ expandedImageView.setImageResource(imageResId);
+
+ // Calculate the starting and ending bounds for the zoomed-in image.
+ // This step involves lots of math. Yay, math.
+ final Rect startBounds = new Rect();
+ final Rect finalBounds = new Rect();
+ final Point globalOffset = new Point();
+
+ // The start bounds are the global visible rectangle of the thumbnail,
+ // and the final bounds are the global visible rectangle of the container
+ // view. Also set the container view's offset as the origin for the
+ // bounds, since that's the origin for the positioning animation
+ // properties (X, Y).
+ thumbView.getGlobalVisibleRect(startBounds);
+ findViewById(R.id.container)
+ .getGlobalVisibleRect(finalBounds, globalOffset);
+ startBounds.offset(-globalOffset.x, -globalOffset.y);
+ finalBounds.offset(-globalOffset.x, -globalOffset.y);
+
+ // Adjust the start bounds to be the same aspect ratio as the final
+ // bounds using the "center crop" technique. This prevents undesirable
+ // stretching during the animation. Also calculate the start scaling
+ // factor (the end scaling factor is always 1.0).
+ float startScale;
+ if ((float) finalBounds.width() / finalBounds.height()
+ &gt; (float) startBounds.width() / startBounds.height()) {
+ // Extend start bounds horizontally
+ startScale = (float) startBounds.height() / finalBounds.height();
+ float startWidth = startScale * finalBounds.width();
+ float deltaWidth = (startWidth - startBounds.width()) / 2;
+ startBounds.left -= deltaWidth;
+ startBounds.right += deltaWidth;
+ } else {
+ // Extend start bounds vertically
+ startScale = (float) startBounds.width() / finalBounds.width();
+ float startHeight = startScale * finalBounds.height();
+ float deltaHeight = (startHeight - startBounds.height()) / 2;
+ startBounds.top -= deltaHeight;
+ startBounds.bottom += deltaHeight;
+ }
+
+ // Hide the thumbnail and show the zoomed-in view. When the animation
+ // begins, it will position the zoomed-in view in the place of the
+ // thumbnail.
+ thumbView.setAlpha(0f);
+ expandedImageView.setVisibility(View.VISIBLE);
+
+ // Set the pivot point for SCALE_X and SCALE_Y transformations
+ // to the top-left corner of the zoomed-in view (the default
+ // is the center of the view).
+ expandedImageView.setPivotX(0f);
+ expandedImageView.setPivotY(0f);
+
+ // Construct and run the parallel animation of the four translation and
+ // scale properties (X, Y, SCALE_X, and SCALE_Y).
+ AnimatorSet set = new AnimatorSet();
+ set
+ .play(ObjectAnimator.ofFloat(expandedImageView, View.X,
+ startBounds.left, finalBounds.left))
+ .with(ObjectAnimator.ofFloat(expandedImageView, View.Y,
+ startBounds.top, finalBounds.top))
+ .with(ObjectAnimator.ofFloat(expandedImageView, View.SCALE_X,
+ startScale, 1f)).with(ObjectAnimator.ofFloat(expandedImageView,
+ View.SCALE_Y, startScale, 1f));
+ set.setDuration(mShortAnimationDuration);
+ set.setInterpolator(new DecelerateInterpolator());
+ set.addListener(new AnimatorListenerAdapter() {
+ &#64;Override
+ public void onAnimationEnd(Animator animation) {
+ mCurrentAnimator = null;
+ }
+
+ &#64;Override
+ public void onAnimationCancel(Animator animation) {
+ mCurrentAnimator = null;
+ }
+ });
+ set.start();
+ mCurrentAnimator = set;
+
+ // Upon clicking the zoomed-in image, it should zoom back down
+ // to the original bounds and show the thumbnail instead of
+ // the expanded image.
+ final float startScaleFinal = startScale;
+ expandedImageView.setOnClickListener(new View.OnClickListener() {
+ &#64;Override
+ public void onClick(View view) {
+ if (mCurrentAnimator != null) {
+ mCurrentAnimator.cancel();
+ }
+
+ // Animate the four positioning/sizing properties in parallel,
+ // back to their original values.
+ AnimatorSet set = new AnimatorSet();
+ set.play(ObjectAnimator
+ .ofFloat(expandedImageView, View.X, startBounds.left))
+ .with(ObjectAnimator
+ .ofFloat(expandedImageView,
+ View.Y,startBounds.top))
+ .with(ObjectAnimator
+ .ofFloat(expandedImageView,
+ View.SCALE_X, startScaleFinal))
+ .with(ObjectAnimator
+ .ofFloat(expandedImageView,
+ View.SCALE_Y, startScaleFinal));
+ set.setDuration(mShortAnimationDuration);
+ set.setInterpolator(new DecelerateInterpolator());
+ set.addListener(new AnimatorListenerAdapter() {
+ &#64;Override
+ public void onAnimationEnd(Animator animation) {
+ thumbView.setAlpha(1f);
+ expandedImageView.setVisibility(View.GONE);
+ mCurrentAnimator = null;
+ }
+
+ &#64;Override
+ public void onAnimationCancel(Animator animation) {
+ thumbView.setAlpha(1f);
+ expandedImageView.setVisibility(View.GONE);
+ mCurrentAnimator = null;
+ }
+ });
+ set.start();
+ mCurrentAnimator = set;
+ }
+ });
+}
+</pre> \ No newline at end of file
diff --git a/docs/html/training/basics/activity-lifecycle/recreating.jd b/docs/html/training/basics/activity-lifecycle/recreating.jd
index 3bbf0bb..1b88e19 100644
--- a/docs/html/training/basics/activity-lifecycle/recreating.jd
+++ b/docs/html/training/basics/activity-lifecycle/recreating.jd
@@ -51,23 +51,28 @@ the user rotates the screen. When the screen changes orientation, the system des
the foreground activity because the screen configuration has changed and your activity might need to
load alternative resources (such as the layout).</p>
-<p>By default, the system uses the {@link android.os.Bundle} instance state to saves information
+<p>By default, the system uses the {@link android.os.Bundle} instance state to save information
about each {@link android.view.View} object in your activity layout (such as the text value entered
into an {@link android.widget.EditText} object). So, if your activity instance is destroyed and
-recreated, the state of the layout is automatically restored to its previous state. However, your
+recreated, the state of the layout is restored to its previous state with no
+code required by you. However, your
activity might have more state information that you'd like to restore, such as member variables that
track the user's progress in the activity.</p>
-<p>In order for you to add additional data to the saved instance state for your activity, there's an
-additional callback method in the activity lifecycle that's not shown in the illustration from
-previous lessons. The method is {@link android.app.Activity#onSaveInstanceState
-onSaveInstanceState()} and the system calls it when the user is leaving your activity. When the
-system calls this method, it passes the {@link android.os.Bundle} object that will be saved in the
-event that your activity is destroyed unexpectedly so you can add additional information to it. Then
-if the system must recreate the activity instance after it was destroyed, it passes the same {@link
-android.os.Bundle} object to your activity's {@link android.app.Activity#onRestoreInstanceState
-onRestoreInstanceState()} method and also to your {@link android.app.Activity#onCreate onCreate()}
-method.</p>
+<p class="note"><strong>Note:</strong> In order for the Android system to restore the state of
+the views in your activity, <strong>each view must have a unique ID</strong>, supplied by the
+<a href="{@docRoot}reference/android/view/View.html#attr_android:id">{@code
+android:id}</a> attribute.</p>
+
+<p>To save additional data about the activity state, you must override
+the {@link android.app.Activity#onSaveInstanceState onSaveInstanceState()} callback method.
+The system calls this method when the user is leaving your activity
+and passes it the {@link android.os.Bundle} object that will be saved in the
+event that your activity is destroyed unexpectedly. If
+the system must recreate the activity instance later, it passes the same {@link
+android.os.Bundle} object to both the {@link android.app.Activity#onRestoreInstanceState
+onRestoreInstanceState()} and {@link android.app.Activity#onCreate onCreate()}
+methods.</p>
<img src="{@docRoot}images/training/basics/basic-lifecycle-savestate.png" />
<p class="img-caption"><strong>Figure 2.</strong> As the system begins to stop your activity, it
diff --git a/docs/html/training/basics/data-storage/databases.jd b/docs/html/training/basics/data-storage/databases.jd
new file mode 100644
index 0000000..3a717dd
--- /dev/null
+++ b/docs/html/training/basics/data-storage/databases.jd
@@ -0,0 +1,322 @@
+page.title=Saving Data in SQL Databases
+parent.title=Data Storage
+parent.link=index.html
+
+trainingnavtop=true
+previous.title=Saving Data in Files
+previous.link=files.html
+
+@jd:body
+
+
+<div id="tb-wrapper">
+<div id="tb">
+
+<h2>This lesson teaches you to</h2>
+<ol>
+ <li><a href="#DefineContract">Define a Schema and Contract</a></li>
+ <li><a href="#DbHelper">Create a Database Using a SQL Helper</a></li>
+ <li><a href="#WriteDbRow">Put Information into a Database</a></li>
+ <li><a href="#ReadDbRow">Read Information from a Database</a></li>
+ <li><a href="#DeleteDbRow">Delete Information from a Database</a></li>
+ <li><a href="#UpdateDbRow">Update a Database</a></li>
+</ol>
+
+<h2>You should also read</h2>
+<ul>
+ <li><a href="{@docRoot}guide/topics/data/data-storage.html#db">Using Databases</a></li>
+</ul>
+
+<!--
+<h2>Try it out</h2>
+
+<div class="download-box">
+ <a href="{@docRoot}shareables/training/Sample.zip" class="button">Download the sample</a>
+ <p class="filename">Sample.zip</p>
+</div>
+-->
+
+</div>
+</div>
+
+
+<p>Saving data to a database is ideal for repeating or structured data,
+such as contact information. This class assumes that you are
+familiar with SQL databases in general and helps you get started with
+SQLite databases on Android. The APIs you'll need to use a database
+on Android are available in the {@link android.database.sqlite} package.</p>
+
+
+<h2 id="DefineContract">Define a Schema and Contract</h2>
+
+<p>One of the main principles of SQL databases is the schema: a formal
+declaration of how the database is organized. The schema is reflected in the SQL
+statements that you use to create your database. You may find it helpful to
+create a companion class, known as a <em>contract</em> class, which explicitly specifies
+the layout of your schema in a systematic and self-documenting way.</p>
+
+<p>A contract class is a container for constants that define names for URIs,
+tables, and columns. The contract class allows you to use the same constants
+across all the other classes in the same package. This lets you change a column
+name in one place and have it propagate throughout your code.</p>
+
+<p>A good way to organize a contract class is to put definitions that are
+global to your whole database in the root level of the class. Then create an inner
+class for each table that enumerates its columns.</p>
+
+<p class="note"><strong>Note:</strong> By implementing the {@link
+android.provider.BaseColumns} interface, your inner class can inherit a primary
+key field called {@code _ID} that some Android classes such as cursor adaptors
+will expect it to have. It's not required, but this can help your database
+work harmoniously with the Android framework.</p>
+
+<p>For example, this snippet defines the table name and column names for a
+single table:</p>
+
+
+<pre>
+public static abstract class FeedEntry implements BaseColumns {
+ public static final String TABLE_NAME = &quot;entry&quot;;
+ public static final String COLUMN_NAME_ENTRY_ID = &quot;entryid&quot;;
+ public static final String COLUMN_NAME_TITLE = &quot;title&quot;;
+ public static final String COLUMN_NAME_SUBTITLE = &quot;subtitle&quot;;
+ ...
+}
+</pre>
+
+
+<p>To prevent someone from accidentally instantiating the contract class, give
+it an empty constructor. </p>
+
+<pre>
+// Prevents the FeedReaderContract class from being instantiated.
+private FeedReaderContract() {}
+</pre>
+
+
+
+<h2 id="DbHelper">Create a Database Using a SQL Helper</h2>
+
+<p>Once you have defined how your database looks, you should implement methods
+that create and maintain the database and tables. Here are some typical
+statements that create and delete a table:</P>
+
+<pre>
+private static final String TEXT_TYPE = &quot; TEXT&quot;;
+private static final String COMMA_SEP = &quot;,&quot;;
+private static final String SQL_CREATE_ENTRIES =
+ &quot;CREATE TABLE &quot; + FeedReaderContract.FeedEntry.TABLE_NAME + &quot; (&quot; +
+ FeedReaderContract.FeedEntry._ID + &quot; INTEGER PRIMARY KEY,&quot; +
+ FeedReaderContract.FeedEntry.COLUMN_NAME_ENTRY_ID + TEXT_TYPE + COMMA_SEP +
+ FeedReaderContract.FeedEntry.COLUMN_NAME_TITLE + TEXT_TYPE + COMMA_SEP +
+ ... // Any other options for the CREATE command
+ &quot; )&quot;;
+
+private static final String SQL_DELETE_ENTRIES =
+ &quot;DROP TABLE IF EXISTS &quot; + TABLE_NAME_ENTRIES;
+</pre>
+
+<p>Just like files that you save on the device's <a
+href="{@docRoot}guide/topics/data/data-storage.html#filesInternal">internal
+storage</a>, Android stores your database in private disk space that's associated
+application. Your data is secure, because by default this area is not
+accessible to other applications.</p>
+
+<p>A useful set of APIs is available in the {@link
+android.database.sqlite.SQLiteOpenHelper} class.
+When you use this class to obtain references to your database, the system
+performs the potentially
+long-running operations of creating and updating the database only when
+needed and <em>not during app startup</em>. All you need to do is call
+{@link android.database.sqlite.SQLiteOpenHelper#getWritableDatabase} or
+{@link android.database.sqlite.SQLiteOpenHelper#getReadableDatabase}.</p>
+
+<p class="note"><strong>Note:</strong> Because they can be long-running,
+be sure that you call {@link
+android.database.sqlite.SQLiteOpenHelper#getWritableDatabase} or {@link
+android.database.sqlite.SQLiteOpenHelper#getReadableDatabase} in a background thread,
+such as with {@link android.os.AsyncTask} or {@link android.app.IntentService}.</p>
+
+<p>To use {@link android.database.sqlite.SQLiteOpenHelper}, create a subclass that
+overrides the {@link
+android.database.sqlite.SQLiteOpenHelper#onCreate onCreate()}, {@link
+android.database.sqlite.SQLiteOpenHelper#onUpgrade onUpgrade()} and {@link
+android.database.sqlite.SQLiteOpenHelper#onOpen onOpen()} callback methods. You may also
+want to implement {@link android.database.sqlite.SQLiteOpenHelper#onDowngrade onDowngrade()},
+but it's not required.</p>
+
+<p>For example, here's an implementation of {@link
+android.database.sqlite.SQLiteOpenHelper} that uses some of the commands shown above:</p>
+
+<pre>
+public class FeedReaderDbHelper extends SQLiteOpenHelper {
+ // If you change the database schema, you must increment the database version.
+ public static final int DATABASE_VERSION = 1;
+ public static final String DATABASE_NAME = &quot;FeedReader.db&quot;;
+
+ public FeedReaderDbHelper(Context context) {
+ super(context, DATABASE_NAME, null, DATABASE_VERSION);
+ }
+ public void onCreate(SQLiteDatabase db) {
+ db.execSQL(SQL_CREATE_ENTRIES);
+ }
+ public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
+ // This database is only a cache for online data, so its upgrade policy is
+ // to simply to discard the data and start over
+ db.execSQL(SQL_DELETE_ENTRIES);
+ onCreate(db);
+ }
+ public void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion) {
+ onUpgrade(db, oldVersion, newVersion);
+ }
+}
+</pre>
+
+<p>To access your database, instantiate your subclass of {@link
+android.database.sqlite.SQLiteOpenHelper}:</p>
+
+<pre>
+FeedReaderDbHelper mDbHelper = new FeedReaderDbHelper(getContext());
+</pre>
+
+
+
+
+<h2 id="WriteDbRow">Put Information into a Database</h2>
+
+<p>Insert data into the database by passing a {@link android.content.ContentValues}
+object to the {@link android.database.sqlite.SQLiteDatabase#insert insert()} method:</p>
+
+<pre>
+// Gets the data repository in write mode
+SQLiteDatabase db = mDbHelper.getWritableDatabase();
+
+// Create a new map of values, where column names are the keys
+ContentValues values = new ContentValues();
+values.put(FeedReaderContract.FeedEntry.COLUMN_NAME_ENTRY_ID, id);
+values.put(FeedReaderContract.FeedEntry.COLUMN_NAME_TITLE, title);
+values.put(FeedReaderContract.FeedEntry.COLUMN_NAME_CONTENT, content);
+
+// Insert the new row, returning the primary key value of the new row
+long newRowId;
+newRowId = db.insert(
+ FeedReaderContract.FeedEntry.TABLE_NAME,
+ FeedReaderContract.FeedEntry.COLUMN_NAME_NULLABLE,
+ values);
+</pre>
+
+<p>The first argument for {@link android.database.sqlite.SQLiteDatabase#insert insert()}
+is simply the table name. The second argument provides
+the name of a column in which the framework can insert NULL in the event that the
+{@link android.content.ContentValues} is empty (if you instead set this to {@code "null"},
+then the framework will not insert a row when there are no values).</p>
+
+
+
+
+<h2 id="ReadDbRow">Read Information from a Database</h2>
+
+<p>To read from a database, use the {@link android.database.sqlite.SQLiteDatabase#query query()}
+method, passing it your selection criteria and desired columns.
+The method combines elements of {@link android.database.sqlite.SQLiteDatabase#insert insert()}
+and {@link android.database.sqlite.SQLiteDatabase#update update()}, except the column list
+defines the data you want to fetch, rather than the data to insert. The results of the query
+are returned to you in a {@link android.database.Cursor} object.</p>
+
+<pre>
+SQLiteDatabase db = mDbHelper.getReadableDatabase();
+
+// Define a <em>projection</em> that specifies which columns from the database
+// you will actually use after this query.
+String[] projection = {
+ FeedReaderContract.FeedEntry._ID,
+ FeedReaderContract.FeedEntry.COLUMN_NAME_TITLE,
+ FeedReaderContract.FeedEntry.COLUMN_NAME_UPDATED,
+ ...
+ };
+
+// How you want the results sorted in the resulting Cursor
+String sortOrder =
+ FeedReaderContract.FeedEntry.COLUMN_NAME_UPDATED + " DESC";
+
+Cursor c = db.query(
+ FeedReaderContract.FeedEntry.TABLE_NAME, // The table to query
+ projection, // The columns to return
+ selection, // The columns for the WHERE clause
+ selectionArgs, // The values for the WHERE clause
+ null, // don't group the rows
+ null, // don't filter by row groups
+ sortOrder // The sort order
+ );
+</pre>
+
+<p>To look at a row in the cursor, use one of the {@link android.database.Cursor} move
+methods, which you must always call before you begin reading values. Generally, you should start
+by calling {@link android.database.Cursor#moveToFirst}, which places the "read position" on the
+first entry in the results. For each row, you can read a column's value by calling one of the
+{@link android.database.Cursor} get methods, such as {@link android.database.Cursor#getString
+getString()} or {@link android.database.Cursor#getLong getLong()}. For each of the get methods,
+you must pass the index position of the column you desire, which you can get by calling
+{@link android.database.Cursor#getColumnIndex getColumnIndex()} or
+{@link android.database.Cursor#getColumnIndexOrThrow getColumnIndexOrThrow()}.
+For example:</p>
+
+<pre>
+cursor.moveToFirst();
+long itemId = cursor.getLong(
+ cursor.getColumnIndexOrThrow(FeedReaderContract.FeedEntry._ID)
+);
+</pre>
+
+
+
+
+<h2 id="DeleteDbRow">Delete Information from a Database</h2>
+
+<p>To delete rows from a table, you need to provide selection criteria that
+identify the rows. The database API provides a mechanism for creating selection
+criteria that protects against SQL injection. The mechanism divides the
+selection specification into a selection clause and selection arguments. The
+clause defines the columns to look at, and also allows you to combine column
+tests. The arguments are values to test against that are bound into the clause.
+Because the result isn't handled the same as a regular SQL statement, it is
+immune to SQL injection.</p>
+
+<pre>
+// Define 'where' part of query.
+String selection = FeedReaderContract.FeedEntry.COLUMN_NAME_ENTRY_ID + &quot; LIKE ?&quot;;
+// Specify arguments in placeholder order.
+String[] selelectionArgs = { String.valueOf(rowId) };
+// Issue SQL statement.
+db.delete(table_name, mySelection, selectionArgs);
+</pre>
+
+
+
+<h2 id="UpdateDbRow">Update a Database</h2>
+
+<p>When you need to modify a subset of your database values, use the {@link
+android.database.sqlite.SQLiteDatabase#update update()} method.</p>
+
+<p>Updating the table combines the content values syntax of {@link
+android.database.sqlite.SQLiteDatabase#insert insert()} with the {@code where} syntax
+of {@link android.database.sqlite.SQLiteDatabase#delete delete()}.</p>
+
+<pre>
+SQLiteDatabase db = mDbHelper.getReadableDatabase();
+
+// New value for one column
+ContentValues values = new ContentValues();
+values.put(FeedReaderContract.FeedEntry.COLUMN_NAME_TITLE, title);
+
+// Which row to update, based on the ID
+String selection = FeedReaderContract.FeedEntry.COLUMN_NAME_ENTRY_ID + &quot; LIKE ?&quot;;
+String[] selelectionArgs = { String.valueOf(rowId) };
+
+int count = db.update(
+ FeedReaderDbHelper.FeedEntry.TABLE_NAME,
+ values,
+ selection,
+ selectionArgs);
+</pre>
+
diff --git a/docs/html/training/basics/data-storage/files.jd b/docs/html/training/basics/data-storage/files.jd
new file mode 100644
index 0000000..dd081a6
--- /dev/null
+++ b/docs/html/training/basics/data-storage/files.jd
@@ -0,0 +1,382 @@
+page.title=Saving Files
+parent.title=Data Storage
+parent.link=index.html
+
+trainingnavtop=true
+
+@jd:body
+
+
+<div id="tb-wrapper">
+<div id="tb">
+
+<h2>This lesson teaches you to</h2>
+<ol>
+ <li><a href="#InternalVsExternalStorage">Choose Internal or External Storage</a></li>
+ <li><a href="#GetWritePermission">Obtain Permissions for External Storage</a></li>
+ <li><a href="#WriteInternalStorage">Save a File on Internal Storage</a></li>
+ <li><a href="#WriteExternalStorage">Save a File on External Storage</a></li>
+ <li><a href="#GetFreeSpace">Query Free Space</a></li>
+ <li><a href="#DeleteFile">Delete a File</a></li>
+</ol>
+
+<h2>You should also read</h2>
+<ul>
+ <li><a href="{@docRoot}guide/topics/data/data-storage.html#filesInternal">Using the Internal
+Storage</a></li>
+ <li><a href="{@docRoot}guide/topics/data/data-storage.html#filesExternal">Using the External
+Storage</a></li>
+</ul>
+
+</div>
+</div>
+
+<p>Android uses a file system that's
+similar to disk-based file systems on other platforms. This lesson describes
+how to work with the Android file system to read and write files with the {@link java.io.File}
+APIs.</p>
+
+<p>A {@link java.io.File} object is suited to reading or writing large amounts of data in
+start-to-finish order without skipping around. For example, it's good for image files or
+anything exchanged over a network.</p>
+
+<p>This lesson shows how to perform basic file-related tasks in your app.
+The lesson assumes that you are familiar with the basics of the Linux file system and the
+standard file input/output APIs in {@link java.io}.</p>
+
+
+<h2 id="InternalVsExternalStorage">Choose Internal or External Storage</h2>
+
+<p>All Android devices have two file storage areas: "internal" and "external" storage. These names
+come from the early days of Android, when most devices offered built-in non-volatile memory
+(internal storage), plus a removable storage medium such as a micro SD card (external storage).
+Some devices divide the permanent storage space into "internal" and "external" partitions, so even
+without a removable storage medium, there are always two storage spaces and
+the API behavior is the same whether the external storage is removable or not.
+The following lists summarize the facts about each storage space.</p>
+
+<div class="col-5" style="margin-left:0">
+<p><b>Internal storage:</b></p>
+<ul>
+<li>It's always available.</li>
+<li>Files saved here are accessible by only your app by default.</li>
+<li>When the user uninstalls your app, the system removes all your app's files from
+internal storage.</li>
+</ul>
+<p>Internal storage is best when you want to be sure that neither the user nor other apps can
+access your files.</p>
+</div>
+
+<div class="col-7" style="margin-right:0">
+<p><b>External storage:</b></p>
+<ul>
+<li>It's not always available, because the user can mount the external storage as USB storage
+and in some cases remove it from the device.</li>
+<li>It's world-readable, so
+files saved here may be read outside of your control.</li>
+<li>When the user uninstalls your app, the system removes your app's files from here
+only if you save them in the directory from {@link android.content.Context#getExternalFilesDir
+getExternalFilesDir()}.</li>
+</ul>
+<p>External storage is the best
+place for files that don't require access restrictions and for files that you want to share
+with other apps or allow the user to access with a computer.</p>
+</div>
+
+
+<p class="note" style="clear:both">
+<strong>Tip:</strong> Although apps are installed onto the internal storage by
+default, you can specify the <a
+href="{@docRoot}guide/topics/manifest/manifest-element.html#install">{@code
+android:installLocation}</a> attribute in your manifest so your app may
+be installed on external storage. Users appreciate this option when the APK size is very large and
+they have an external storage space that's larger than the internal storage. For more
+information, see <a
+href="{@docRoot}guide/topics/data/install-location.html">App Install Location</a>.</p>
+
+
+<h2 id="GetWritePermission">Obtain Permissions for External Storage</h2>
+
+<p>To write to the external storage, you must request the
+ {@link android.Manifest.permission#WRITE_EXTERNAL_STORAGE} permission in your <a
+href="{@docRoot}guide/topics/manifest/manifest-intro.html">manifest file</a>:</p>
+
+<pre>
+&lt;manifest ...>
+ &lt;uses-permission android:name=&quot;android.permission.WRITE_EXTERNAL_STORAGE&quot; /&gt;
+ ...
+&lt;/manifest>
+</pre>
+
+<div class="caution"><p><strong>Caution:</strong>
+Currently, all apps have the ability to read the external storage
+without a special permission. However, this will change in a future release. If your app needs
+to read the external storage (but not write to it), then you will need to declare the {@link
+android.Manifest.permission#READ_EXTERNAL_STORAGE} permission. To ensure that your app continues
+to work as expected, you should declare this permission now, before the change takes effect.</p>
+<pre>
+&lt;manifest ...>
+ &lt;uses-permission android:name=&quot;android.permission.READ_EXTERNAL_STORAGE&quot; /&gt;
+ ...
+&lt;/manifest>
+</pre>
+<p>However, if your app uses the {@link android.Manifest.permission#WRITE_EXTERNAL_STORAGE}
+permission, then it implicitly has permission to read the external storage as well.</p>
+</div>
+
+<p>You don’t need any permissions to save files on the internal
+storage. Your application always has permission to read and
+write files in its internal storage directory.</p>
+
+
+
+
+
+<h2 id="WriteInternalStorage">Save a File on Internal Storage</h2>
+
+<p>When saving a file to internal storage, you can acquire the appropriate directory as a
+{@link java.io.File} by calling one of two methods:</p>
+
+<dl>
+ <dt>{@link android.content.Context#getFilesDir}</dt>
+ <dd>Returns a {@link java.io.File} representing an internal directory for your app.</dd>
+ <dt>{@link android.content.Context#getCacheDir}</dt>
+ <dd>Returns a {@link java.io.File} representing an internal directory for your app's temporary
+cache files. Be sure to delete each file once it is no
+longer needed and implement a reasonable size limit for the amount of memory you use at any given
+time, such as 1MB. If the system begins running low on storage, it may delete your cache files
+without warning.</dd>
+</dl>
+
+<p>To create a new file in one of these directories, you can use the {@link
+java.io.File#File(File,String) File()} constructor, passing the {@link java.io.File} provided by one
+of the above methods that specifies your internal storage directory. For example:</p>
+
+<pre>
+File file = new File(context.getFilesDir(), filename);
+</pre>
+
+<p>Alternatively, you can call {@link
+android.content.Context#openFileOutput openFileOutput()} to get a {@link java.io.FileOutputStream}
+that writes to a file in your internal directory. For example, here's
+how to write some text to a file:</p>
+
+<pre>
+String filename = "myfile";
+String string = "Hello world!";
+FileOutputStream outputStream;
+
+try {
+ outputStream = openFileOutput(filename, Context.MODE_PRIVATE);
+ outputStream.write(string.getBytes());
+ outputStream.close();
+} catch (Exception e) {
+ e.printStackTrace();
+}
+</pre>
+
+<p>Or, if you need to cache some files, you should instead use {@link
+java.io.File#createTempFile createTempFile()}. For example, the following method extracts the
+file name from a {@link java.net.URL} and creates a file with that name
+in your app's internal cache directory:</p>
+
+<pre>
+public File getTempFile(Context context, String url) {
+ File file;
+ try {
+ String fileName = Uri.parse(url).getLastPathSegment();
+ file = File.createTempFile(fileName, null, context.getCacheDir());
+ catch (IOException e) {
+ // Error while creating file
+ }
+ return file;
+}
+</pre>
+
+<p class="note"><strong>Note:</strong>
+Your app's internal storage directory is specified
+by your app's package name in a special location of the Android file system.
+Technically, another app can read your internal files if you set
+the file mode to be readable. However, the other app would also need to know your app package
+name and file names. Other apps cannot browse your internal directories and do not have
+read or write access unless you explicitly set the files to be readable or writable. So as long
+as you use {@link android.content.Context#MODE_PRIVATE} for your files on the internal storage,
+they are never accessible to other apps.</p>
+
+
+
+
+
+<h2 id="WriteExternalStorage">Save a File on External Storage</h2>
+
+<p>Because the external storage may be unavailable&mdash;such as when the user has mounted the
+storage to a PC or has removed the SD card that provides the external storage&mdash;you
+should always verify that the volume is available before accessing it. You can query the external
+storage state by calling {@link android.os.Environment#getExternalStorageState}. If the returned
+state is equal to {@link android.os.Environment#MEDIA_MOUNTED}, then you can read and
+write your files. For example, the following methods are useful to determine the storage
+availability:</p>
+
+<pre>
+/* Checks if external storage is available for read and write */
+public boolean isExternalStorageWritable() {
+ String state = Environment.getExternalStorageState();
+ if (Environment.MEDIA_MOUNTED.equals(state)) {
+ return true;
+ }
+ return false;
+}
+
+/* Checks if external storage is available to at least read */
+public boolean isExternalStorageReadable() {
+ String state = Environment.getExternalStorageState();
+ if (Environment.MEDIA_MOUNTED.equals(state) ||
+ Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) {
+ return true;
+ }
+ return false;
+}
+</pre>
+
+<p>Although the external storage is modifiable by the user and other apps, there are two
+categories of files you might save here:</p>
+
+<dl>
+ <dt>Public files</dt>
+ <dd>Files that
+should be freely available to other apps and to the user. When the user uninstalls your app,
+these files should remain available to the user.
+ <p>For example, photos captured by your app or other downloaded files.</p>
+ </dd>
+ <dt>Private files</dt>
+ <dd>Files that rightfully belong to your app and should be deleted when the user uninstalls
+ your app. Although these files are technically accessible by the user and other apps because they
+ are on the external storage, they are files that realistically don't provide value to the user
+ outside your app. When the user uninstalls your app, the system deletes
+ all files in your app's external private directory.
+ <p>For example, additional resources downloaded by your app or temporary media files.</p>
+ </dd>
+</dl>
+
+<p>If you want to save public files on the external storage, use the
+{@link android.os.Environment#getExternalStoragePublicDirectory
+getExternalStoragePublicDirectory()} method to get a {@link java.io.File} representing
+the appropriate directory on the external storage. The method takes an argument specifying
+the type of file you want to save so that they can be logically organized with other public
+files, such as {@link android.os.Environment#DIRECTORY_MUSIC} or {@link
+android.os.Environment#DIRECTORY_PICTURES}. For example:</p>
+
+<pre>
+public File getAlbumStorageDir(String albumName) {
+ // Get the directory for the user's public pictures directory.
+ File file = new File(Environment.getExternalStoragePublicDirectory(
+ Environment.DIRECTORY_PICTURES), albumName);
+ if (!file.mkdirs()) {
+ Log.e(LOG_TAG, "Directory not created");
+ }
+ return file;
+}
+</pre>
+
+
+<p>If you want to save files that are private to your app, you can acquire the
+appropriate directory by calling {@link
+android.content.Context#getExternalFilesDir getExternalFilesDir()} and passing it a name indicating
+the type of directory you'd like. Each directory created this way is added to a parent
+directory that encapsulates all your app's external storage files, which the system deletes when the
+user uninstalls your app.</p>
+
+<p>For example, here's a method you can use to create a directory for an individual photo album:</p>
+
+<pre>
+public File getAlbumStorageDir(Context context, String albumName) {
+ // Get the directory for the app's private pictures directory.
+ File file = new File(context.getExternalFilesDir(
+ Environment.DIRECTORY_PICTURES), albumName);
+ if (!file.mkdirs()) {
+ Log.e(LOG_TAG, "Directory not created");
+ }
+ return file;
+}
+</pre>
+
+<p>If none of the pre-defined sub-directory names suit your files, you can instead call {@link
+android.content.Context#getExternalFilesDir getExternalFilesDir()} and pass {@code null}. This
+returns the root directory for your app's private directory on the external storage.</p>
+
+<p>Remember that {@link android.content.Context#getExternalFilesDir getExternalFilesDir()}
+creates a directory inside a directory that is deleted when the user uninstalls your app.
+If the files you're saving should remain available after the user uninstalls your
+app&mdash;such as when your app is a camera and the user will want to keep the photos&mdash;you
+should instead use {@link android.os.Environment#getExternalStoragePublicDirectory
+getExternalStoragePublicDirectory()}.</p>
+
+
+<p>Regardless of whether you use {@link
+android.os.Environment#getExternalStoragePublicDirectory
+getExternalStoragePublicDirectory()} for files that are shared or
+{@link android.content.Context#getExternalFilesDir
+getExternalFilesDir()} for files that are private to your app, it's important that you use
+directory names provided by API constants like
+{@link android.os.Environment#DIRECTORY_PICTURES}. These directory names ensure
+that the files are treated properly by the system. For instance, files saved in {@link
+android.os.Environment#DIRECTORY_RINGTONES} are categorized by the system media scanner as ringtones
+instead of music.</p>
+
+
+
+
+<h2 id="GetFreeSpace">Query Free Space</h2>
+
+<p>If you know ahead of time how much data you're saving, you can find out
+whether sufficient space is available without causing an {@link
+java.io.IOException} by calling {@link java.io.File#getFreeSpace} or {@link
+java.io.File#getTotalSpace}. These methods provide the current available space and the
+total space in the storage volume, respectively. This information is also useful to avoid filling
+the storage volume above a certain threshold.</p>
+
+<p>However, the system does not guarantee that you can write as many bytes as are
+indicated by {@link java.io.File#getFreeSpace}. If the number returned is a
+few MB more than the size of the data you want to save, or if the file system
+is less than 90% full, then it's probably safe to proceed.
+Otherwise, you probably shouldn't write to storage.</p>
+
+<p class="note"><strong>Note:</strong> You aren't required to check the amount of available space
+before you save your file. You can instead try writing the file right away, then
+catch an {@link java.io.IOException} if one occurs. You may need to do
+this if you don't know exactly how much space you need. For example, if you
+change the file's encoding before you save it by converting a PNG image to
+JPEG, you won't know the file's size beforehand.</p>
+
+
+
+
+<h2 id="DeleteFile">Delete a File</h2>
+
+<p>You should always delete files that you no longer need. The most straightforward way to delete a
+file is to have the opened file reference call {@link java.io.File#delete} on itself.</p>
+
+<pre>
+myFile.delete();
+</pre>
+
+<p>If the file is saved on internal storage, you can also ask the {@link android.content.Context} to locate and
+delete a file by calling {@link android.content.Context#deleteFile deleteFile()}:</p>
+
+<pre>
+myContext.deleteFile(fileName);
+</pre>
+
+<div class="note">
+<p><strong>Note:</strong> When the user uninstalls your app, the Android system deletes
+the following:</p>
+<ul>
+<li>All files you saved on internal storage</li>
+<li>All files you saved on external storage using {@link
+android.content.Context#getExternalFilesDir getExternalFilesDir()}.</li>
+</ul>
+<p>However, you should manually delete all cached files created with
+{@link android.content.Context#getCacheDir()} on a regular basis and also regularly delete
+other files you no longer need.</p>
+</div>
+
diff --git a/docs/html/training/basics/data-storage/index.jd b/docs/html/training/basics/data-storage/index.jd
new file mode 100644
index 0000000..4334936
--- /dev/null
+++ b/docs/html/training/basics/data-storage/index.jd
@@ -0,0 +1,55 @@
+page.title=Saving Data
+
+trainingnavtop=true
+startpage=true
+
+@jd:body
+
+<div id="tb-wrapper">
+<div id="tb">
+
+<h2>Dependencies and prerequisites</h2>
+<ul>
+ <li>Android 1.6 (API Level 4) or higher</li>
+ <li>Familiarity with Map key-value collections</li>
+ <li>Familiarity with the Java file I/O API</li>
+ <li>Familiarity with SQL databases</li>
+</ul>
+
+<h2>You should also read</h2>
+<ul>
+ <li><a href="{@docRoot}guide/topics/data/data-storage.html">Storage Options</a></li>
+</ul>
+
+</div>
+</div>
+
+<p>Most Android apps need to save data, even if only to save information about the app state
+during {@link android.app.Activity#onPause onPause()} so the user's progress is not lost. Most
+non-trivial apps also need to save user settings, and some apps must manage large
+amounts of information in files and databases. This class introduces you to the
+principal data storage options in Android, including:</p>
+
+<ul>
+ <li>Saving key-value pairs of simple data types in a shared preferences
+file</li>
+ <li>Saving arbitrary files in Android's file system</li>
+ <li>Using databases managed by SQLite</li>
+</ul>
+
+
+<h2>Lessons</h2>
+
+<dl>
+ <dt><b><a href="shared-preferences.html">Saving Key-Value Sets</a></b></dt>
+ <dd>Learn to use a shared preferences file for storing small amounts of information in
+key-value pairs.</dd>
+
+ <dt><b><a href="files.html">Saving Files</a></b></dt>
+ <dd>Learn to save a basic file, such as to store long sequences of data that
+ are generally read in order.</dd>
+
+ <dt><b><a href="databases.html">Saving Data in SQL Databases</a></b></dt>
+ <dd>Learn to use a SQLite database to read and write structured data.</dd>
+
+</dl>
diff --git a/docs/html/training/basics/data-storage/shared-preferences.jd b/docs/html/training/basics/data-storage/shared-preferences.jd
new file mode 100644
index 0000000..67f45cb
--- /dev/null
+++ b/docs/html/training/basics/data-storage/shared-preferences.jd
@@ -0,0 +1,121 @@
+page.title=Saving Key-Value Sets
+parent.title=Data Storage
+parent.link=index.html
+
+trainingnavtop=true
+
+@jd:body
+
+
+<div id="tb-wrapper">
+<div id="tb">
+
+<h2>This lesson teaches you to</h2>
+<ol>
+ <li><a href="#GetSharedPreferences">Get a Handle to a SharedPreferences</a></li>
+ <li><a href="#WriteSharedPreference">Write to Shared Preferences</a></li>
+ <li><a href="#ReadSharedPreference">Read from Shared Preferences</a></li>
+</ol>
+
+<h2>You should also read</h2>
+<ul>
+ <li><a href="{@docRoot}guide/topics/data/data-storage.html#pref">Using Shared Preferences</a></li>
+</ul>
+
+</div>
+</div>
+
+
+<p>If you have a relatively small collection of key-values that you'd like to save,
+you should use the {@link android.content.SharedPreferences} APIs.
+A {@link android.content.SharedPreferences} object points to a file containing
+key-value pairs and provides simple methods to read and write them. Each
+{@link android.content.SharedPreferences} file is
+managed by the framework and can be private or shared.</p>
+
+<p>This class shows you how to use the {@link android.content.SharedPreferences} APIs to store and
+retrieve simple values.</p>
+
+<p class="note"><strong>Note:</strong> The {@link android.content.SharedPreferences} APIs are
+only for reading and writing key-value pairs and you should not confuse them with the
+{@link android.preference.Preference} APIs, which help you build a user interface
+for your app settings (although they use {@link android.content.SharedPreferences} as their
+implementation to save the app settings). For information about using the {@link
+android.preference.Preference} APIs, see the <a href="{@docRoot}guide/topics/ui/settings.html"
+>Settings</a> guide.</p>
+
+<h2 id="GetSharedPreferences">Get a Handle to a SharedPreferences</h2>
+
+<p>You can create a new shared preference file or access an existing
+one by calling one of two methods:</p>
+<ul>
+ <li>{@link android.content.Context#getSharedPreferences(String,int)
+getSharedPreferences()} &mdash; Use this if you need multiple shared preference files identified
+by name, which you specify with the first parameter. You can call this from any
+{@link android.content.Context} in your app.</li>
+ <li>{@link android.app.Activity#getPreferences(int) getPreferences()} &mdash; Use this from an
+{@link android.app.Activity} if you need
+to use only one shared preference file for the activity. Because this retrieves a default shared
+preference file that belongs to the activity, you don't need to supply a name.</li>
+</ul>
+
+<p>For example, the following code is executed inside a {@link android.app.Fragment}.
+It accesses the shared preferences file that's
+identified by the resource string {@code R.string.preference_file_key} and opens it using
+the private mode so the file is accessible by only your app.</p>
+
+<pre>
+Context context = getActivity();
+SharedPreferences sharedPref = context.getSharedPreferences(
+ getString(R.string.preference_file_key), Context.MODE_PRIVATE);
+</pre>
+
+<p>When naming your shared preference files, you should use a name that's uniquely identifiable
+to your app, such as {@code "com.example.myapp.PREFERENCE_FILE_KEY"}</p>
+
+<p>Alternatively, if you need just one shared preference file for your activity, you can use the
+{@link android.app.Activity#getPreferences(int) getPreferences()} method:</p>
+
+<pre>
+SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
+</pre>
+
+<p class="caution"><strong>Caution:</strong> If you create a shared preferences file
+with {@link android.content.Context#MODE_WORLD_READABLE} or {@link
+android.content.Context#MODE_WORLD_WRITEABLE}, then any other apps that know the file identifier
+can access your data.</p>
+
+
+<h2 id="WriteSharedPreference">Write to Shared Preferences</h2>
+
+<p>To write to a shared preferences file, create a {@link
+android.content.SharedPreferences.Editor} by calling {@link
+android.content.SharedPreferences#edit} on your {@link android.content.SharedPreferences}.</p>
+
+<p>Pass the keys and values you want to write with methods such as {@link
+android.content.SharedPreferences.Editor#putInt putInt()} and {@link
+android.content.SharedPreferences.Editor#putString putString()}. Then call {@link
+android.content.SharedPreferences.Editor#commit} to save the changes. For example:</p>
+
+<pre>
+SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
+SharedPreferences.Editor editor = sharedPref.edit();
+editor.putInt(getString(R.string.saved_high_score), newHighScore);
+editor.commit();
+</pre>
+
+
+<h2 id="ReadSharedPreference">Read from Shared Preferences</h2>
+
+<p>To retrieve values from a shared preferences file, call methods such as {@link
+android.content.SharedPreferences#getInt getInt()} and {@link
+android.content.SharedPreferences#getString getString()}, providing the key for the value
+you want, and optionally a default value to return if the key isn't
+present. For example:</p>
+
+<pre>
+SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
+long default = getResources().getInteger(R.string.saved_high_score_default));
+long highScore = sharedPref.getInt(getString(R.string.saved_high_score), default);
+</pre>
+
diff --git a/docs/html/training/basics/firstapp/running-app.jd b/docs/html/training/basics/firstapp/running-app.jd
index 0c428e7..80603b2 100644
--- a/docs/html/training/basics/firstapp/running-app.jd
+++ b/docs/html/training/basics/firstapp/running-app.jd
@@ -40,7 +40,7 @@ Android project, it includes a default set of "Hello World" source files that al
immediately run the app.</p>
<p>How you run your app depends on two things: whether you have a real Android-powered device and
-whether you’re using Eclipse. This lesson shows you how to install and run your app on a
+whether you're using Eclipse. This lesson shows you how to install and run your app on a
real device and on the Android emulator, and in both cases with either Eclipse or the command line
tools.</p>
@@ -85,12 +85,21 @@ important that you understand how to run your app before you start developing.</
<ol>
<li>Plug in your device to your development machine with a USB cable.
-If you’re developing on Windows, you might need to install the appropriate USB driver for your
+If you're developing on Windows, you might need to install the appropriate USB driver for your
device. For help installing drivers, see the <a href="{@docRoot}tools/extras/oem-usb.html">OEM USB
-Drivers</a> document.</li>
- <li>Ensure that <strong>USB debugging</strong> is enabled in the device Settings (open Settings
-and navitage to <strong>Applications > Development</strong> on most devices, or click
-<strong>Developer options</strong> on Android 4.0 and higher).</li>
+Drivers</a> document.</li>
+ <li>Enable <strong>USB debugging</strong> on your device.
+ <ul>
+ <li>On most devices running Android 3.2 or older, you can find the option under
+ <strong>Settings > Applications > Development</strong>.</li>
+ <li>On Android 4.0 and newer, it's in <strong>Settings > Developer options</strong>.
+ <p class="note"><strong>Note:</strong> On Android 4.2 and newer, <strong>Developer
+ options</strong> is hidden by default. To make it available, go
+ to <strong>Settings > About phone</strong> and tap <strong>Build number</strong>
+ seven times. Return to the previous screen to find <strong>Developer options</strong>.</p>
+ </li>
+ </ul>
+ </li>
</ol>
<p>To run the app from Eclipse, open one of your project's files and click
@@ -118,7 +127,7 @@ lesson</a>.</p>
<h2 id="Emulator">Run on the Emulator</h2>
-<p>Whether you’re using Eclipse or the command line, to run your app on the emulator you need to
+<p>Whether you're using Eclipse or the command line, to run your app on the emulator you need to
first create an <a href="{@docRoot}tools/devices/index.html">Android Virtual Device</a> (AVD). An
AVD is a device configuration for the Android emulator that allows you to model different
devices.</p>
diff --git a/docs/html/training/displaying-bitmaps/cache-bitmap.jd b/docs/html/training/displaying-bitmaps/cache-bitmap.jd
index 94abe21..2a333cc 100644
--- a/docs/html/training/displaying-bitmaps/cache-bitmap.jd
+++ b/docs/html/training/displaying-bitmaps/cache-bitmap.jd
@@ -96,7 +96,7 @@ and leave the rest of your app little memory to work with.</p>
<p>Here’s an example of setting up a {@link android.util.LruCache} for bitmaps:</p>
<pre>
-private LruCache<String, Bitmap> mMemoryCache;
+private LruCache&lt;String, Bitmap&gt; mMemoryCache;
&#64;Override
protected void onCreate(Bundle savedInstanceState) {
@@ -109,7 +109,7 @@ protected void onCreate(Bundle savedInstanceState) {
// Use 1/8th of the available memory for this memory cache.
final int cacheSize = 1024 * 1024 * memClass / 8;
- mMemoryCache = new LruCache<String, Bitmap>(cacheSize) {
+ mMemoryCache = new LruCache&lt;String, Bitmap&gt;(cacheSize) {
&#64;Override
protected int sizeOf(String key, Bitmap bitmap) {
// The cache size will be measured in bytes rather than number of items.
@@ -159,7 +159,7 @@ public void loadBitmap(int resId, ImageView imageView) {
updated to add entries to the memory cache:</p>
<pre>
-class BitmapWorkerTask extends AsyncTask<Integer, Void, Bitmap> {
+class BitmapWorkerTask extends AsyncTask&lt;Integer, Void, Bitmap&gt; {
...
// Decode image in background.
&#64;Override
@@ -179,7 +179,7 @@ class BitmapWorkerTask extends AsyncTask<Integer, Void, Bitmap> {
rely on images being available in this cache. Components like {@link android.widget.GridView} with
larger datasets can easily fill up a memory cache. Your application could be interrupted by another
task like a phone call, and while in the background it might be killed and the memory cache
-destroyed. Once the user resumes, your application it has to process each image again.</p>
+destroyed. Once the user resumes, your application has to process each image again.</p>
<p>A disk cache can be used in these cases to persist processed bitmaps and help decrease loading
times where images are no longer available in a memory cache. Of course, fetching images from disk
@@ -190,18 +190,14 @@ be unpredictable.</p>
appropriate place to store cached images if they are accessed more frequently, for example in an
image gallery application.</p>
-<p>Included in the sample code of this class is a basic {@code DiskLruCache} implementation.
-However, a more robust and recommended {@code DiskLruCache} solution is included in the Android 4.0
-source code ({@code libcore/luni/src/main/java/libcore/io/DiskLruCache.java}). Back-porting this
-class for use on previous Android releases should be fairly straightforward (a <a
-href="http://www.google.com/search?q=disklrucache">quick search</a> shows others who have already
-implemented this solution).</p>
-
-<p>Here’s updated example code that uses the simple {@code DiskLruCache} included in the sample
-application of this class:</p>
+<p>The sample code of this class uses a {@code DiskLruCache} implementation that is pulled from the
+<a href="https://android.googlesource.com/platform/libcore/+/master/luni/src/main/java/libcore/io/DiskLruCache.java">Android source</a>. Here’s updated example code that adds a disk cache in addition
+to the existing memory cache:</p>
<pre>
-private DiskLruCache mDiskCache;
+private DiskLruCache mDiskLruCache;
+private final Object mDiskCacheLock = new Object();
+private boolean mDiskCacheStarting = true;
private static final int DISK_CACHE_SIZE = 1024 * 1024 * 10; // 10MB
private static final String DISK_CACHE_SUBDIR = "thumbnails";
@@ -210,12 +206,26 @@ protected void onCreate(Bundle savedInstanceState) {
...
// Initialize memory cache
...
- File cacheDir = getCacheDir(this, DISK_CACHE_SUBDIR);
- mDiskCache = DiskLruCache.openCache(this, cacheDir, DISK_CACHE_SIZE);
+ // Initialize disk cache on background thread
+ File cacheDir = getDiskCacheDir(this, DISK_CACHE_SUBDIR);
+ new InitDiskCacheTask().execute(cacheDir);
...
}
-class BitmapWorkerTask extends AsyncTask<Integer, Void, Bitmap> {
+class InitDiskCacheTask extends AsyncTask&lt;File, Void, Void&gt; {
+ &#64;Override
+ protected Void doInBackground(File... params) {
+ synchronized (mDiskCacheLock) {
+ File cacheDir = params[0];
+ mDiskLruCache = DiskLruCache.open(cacheDir, DISK_CACHE_SIZE);
+ mDiskCacheStarting = false; // Finished initialization
+ mDiskCacheLock.notifyAll(); // Wake any waiting threads
+ }
+ return null;
+ }
+}
+
+class BitmapWorkerTask extends AsyncTask&lt;Integer, Void, Bitmap&gt; {
...
// Decode image in background.
&#64;Override
@@ -232,7 +242,7 @@ class BitmapWorkerTask extends AsyncTask<Integer, Void, Bitmap> {
}
// Add final bitmap to caches
- addBitmapToCache(String.valueOf(imageKey, bitmap);
+ addBitmapToCache(imageKey, bitmap);
return bitmap;
}
@@ -246,28 +256,48 @@ public void addBitmapToCache(String key, Bitmap bitmap) {
}
// Also add to disk cache
- if (!mDiskCache.containsKey(key)) {
- mDiskCache.put(key, bitmap);
+ synchronized (mDiskCacheLock) {
+ if (mDiskLruCache != null && mDiskLruCache.get(key) == null) {
+ mDiskLruCache.put(key, bitmap);
+ }
}
}
public Bitmap getBitmapFromDiskCache(String key) {
- return mDiskCache.get(key);
+ synchronized (mDiskCacheLock) {
+ // Wait while disk cache is started from background thread
+ while (mDiskCacheStarting) {
+ try {
+ mDiskCacheLock.wait();
+ } catch (InterruptedException e) {}
+ }
+ if (mDiskLruCache != null) {
+ return mDiskLruCache.get(key);
+ }
+ }
+ return null;
}
// Creates a unique subdirectory of the designated app cache directory. Tries to use external
// but if not mounted, falls back on internal storage.
-public static File getCacheDir(Context context, String uniqueName) {
+public static File getDiskCacheDir(Context context, String uniqueName) {
// Check if media is mounted or storage is built-in, if so, try and use external cache dir
// otherwise use internal cache dir
- final String cachePath = Environment.getExternalStorageState() == Environment.MEDIA_MOUNTED
- || !Environment.isExternalStorageRemovable() ?
- context.getExternalCacheDir().getPath() : context.getCacheDir().getPath();
+ final String cachePath =
+ Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState()) ||
+ !isExternalStorageRemovable() ? getExternalCacheDir(context).getPath() :
+ context.getCacheDir().getPath();
return new File(cachePath + File.separator + uniqueName);
}
</pre>
+<p class="note"><strong>Note:</strong> Even initializing the disk cache requires disk operations
+and therefore should not take place on the main thread. However, this does mean there's a chance
+the cache is accessed before initialization. To address this, in the above implementation, a lock
+object ensures that the app does not read from the disk cache until the cache has been
+initialized.</p>
+
<p>While the memory cache is checked in the UI thread, the disk cache is checked in the background
thread. Disk operations should never take place on the UI thread. When image processing is
complete, the final bitmap is added to both the memory and disk cache for future use.</p>
@@ -292,7 +322,7 @@ android.widget.ImageView} objects.</p>
changes using a {@link android.app.Fragment}:</p>
<pre>
-private LruCache<String, Bitmap> mMemoryCache;
+private LruCache&lt;String, Bitmap&gt; mMemoryCache;
&#64;Override
protected void onCreate(Bundle savedInstanceState) {
@@ -301,7 +331,7 @@ protected void onCreate(Bundle savedInstanceState) {
RetainFragment.findOrCreateRetainFragment(getFragmentManager());
mMemoryCache = RetainFragment.mRetainedCache;
if (mMemoryCache == null) {
- mMemoryCache = new LruCache<String, Bitmap>(cacheSize) {
+ mMemoryCache = new LruCache&lt;String, Bitmap&gt;(cacheSize) {
... // Initialize cache here as usual
}
mRetainFragment.mRetainedCache = mMemoryCache;
@@ -311,7 +341,7 @@ protected void onCreate(Bundle savedInstanceState) {
class RetainFragment extends Fragment {
private static final String TAG = "RetainFragment";
- public LruCache<String, Bitmap> mRetainedCache;
+ public LruCache&lt;String, Bitmap&gt; mRetainedCache;
public RetainFragment() {}
diff --git a/docs/html/training/displaying-bitmaps/display-bitmap.jd b/docs/html/training/displaying-bitmaps/display-bitmap.jd
index 5eac04c..4572c42 100644
--- a/docs/html/training/displaying-bitmaps/display-bitmap.jd
+++ b/docs/html/training/displaying-bitmaps/display-bitmap.jd
@@ -103,7 +103,8 @@ public class ImageDetailActivity extends FragmentActivity {
}
</pre>
-<p>The details {@link android.app.Fragment} holds the {@link android.widget.ImageView} children:</p>
+<p>Here is an implementation of the details {@link android.app.Fragment} which holds the {@link android.widget.ImageView} children. This might seem like a perfectly reasonable approach, but can
+you see the drawbacks of this implementation? How could it be improved?</p>
<pre>
public class ImageDetailFragment extends Fragment {
@@ -146,11 +147,11 @@ public class ImageDetailFragment extends Fragment {
}
</pre>
-<p>Hopefully you noticed the issue with this implementation; The images are being read from
-resources on the UI thread which can lead to an application hanging and being force closed. Using an
-{@link android.os.AsyncTask} as described in the <a href="process-bitmap.html">Processing Bitmaps Off
-the UI Thread</a> lesson, it’s straightforward to move image loading and processing to a background
-thread:</p>
+<p>Hopefully you noticed the issue: the images are being read from resources on the UI thread,
+which can lead to an application hanging and being force closed. Using an
+{@link android.os.AsyncTask} as described in the <a href="process-bitmap.html">Processing Bitmaps
+Off the UI Thread</a> lesson, it’s straightforward to move image loading and processing to a
+background thread:</p>
<pre>
public class ImageDetailActivity extends FragmentActivity {
@@ -190,7 +191,7 @@ modifications for a memory cache:</p>
<pre>
public class ImageDetailActivity extends FragmentActivity {
...
- private LruCache<String, Bitmap> mMemoryCache;
+ private LruCache&lt;String, Bitmap&gt; mMemoryCache;
&#64;Override
public void onCreate(Bundle savedInstanceState) {
@@ -229,7 +230,8 @@ UI remains fluid, memory usage remains under control and concurrency is handled
the way {@link android.widget.GridView} recycles its children views).</p>
<p>To start with, here is a standard {@link android.widget.GridView} implementation with {@link
-android.widget.ImageView} children placed inside a {@link android.app.Fragment}:</p>
+android.widget.ImageView} children placed inside a {@link android.app.Fragment}. Again, this might
+seem like a perfectly reasonable approach, but what would make it better?</p>
<pre>
public class ImageGridFragment extends Fragment implements AdapterView.OnItemClickListener {
@@ -261,7 +263,7 @@ public class ImageGridFragment extends Fragment implements AdapterView.OnItemCli
}
&#64;Override
- public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
+ public void onItemClick(AdapterView&lt;?&gt; parent, View v, int position, long id) {
final Intent i = new Intent(getActivity(), ImageDetailActivity.class);
i.putExtra(ImageDetailActivity.EXTRA_IMAGE, position);
startActivity(i);
@@ -345,13 +347,13 @@ public class ImageGridFragment extends Fragment implements AdapterView.OnItemCli
}
static class AsyncDrawable extends BitmapDrawable {
- private final WeakReference<BitmapWorkerTask> bitmapWorkerTaskReference;
+ private final WeakReference&lt;BitmapWorkerTask&gt; bitmapWorkerTaskReference;
public AsyncDrawable(Resources res, Bitmap bitmap,
BitmapWorkerTask bitmapWorkerTask) {
super(res, bitmap);
bitmapWorkerTaskReference =
- new WeakReference<BitmapWorkerTask>(bitmapWorkerTask);
+ new WeakReference&lt;BitmapWorkerTask&gt;(bitmapWorkerTask);
}
public BitmapWorkerTask getBitmapWorkerTask() {
diff --git a/docs/html/training/displaying-bitmaps/index.jd b/docs/html/training/displaying-bitmaps/index.jd
index 78371ad..b91172b 100644
--- a/docs/html/training/displaying-bitmaps/index.jd
+++ b/docs/html/training/displaying-bitmaps/index.jd
@@ -43,8 +43,8 @@ exception:<br />{@code java.lang.OutofMemoryError: bitmap size exceeds VM budget
perform under this minimum memory limit. However, keep in mind many devices are configured with
higher limits.</li>
<li>Bitmaps take up a lot of memory, especially for rich images like photographs. For example, the
- camera on the <a href="http://www.google.com/nexus/">Galaxy Nexus</a> takes photos up to 2592x1936
- pixels (5 megapixels). If the bitmap configuration used is {@link
+ camera on the <a href="http://www.android.com/devices/detail/galaxy-nexus">Galaxy Nexus</a> takes
+ photos up to 2592x1936 pixels (5 megapixels). If the bitmap configuration used is {@link
android.graphics.Bitmap.Config ARGB_8888} (the default from the Android 2.3 onward) then loading
this image into memory takes about 19MB of memory (2592*1936*4 bytes), immediately exhausting the
per-app limit on some devices.</li>
@@ -75,4 +75,4 @@ exception:<br />{@code java.lang.OutofMemoryError: bitmap size exceeds VM budget
components like {@link android.support.v4.view.ViewPager} and {@link android.widget.GridView}
using a background thread and bitmap cache.</dd>
-</dl> \ No newline at end of file
+</dl>
diff --git a/docs/html/training/displaying-bitmaps/process-bitmap.jd b/docs/html/training/displaying-bitmaps/process-bitmap.jd
index d1e346c..d4fcff3 100644
--- a/docs/html/training/displaying-bitmaps/process-bitmap.jd
+++ b/docs/html/training/displaying-bitmaps/process-bitmap.jd
@@ -62,13 +62,13 @@ decodeSampledBitmapFromResource()}</a>: </p>
<a name="BitmapWorkerTask"></a>
<pre>
-class BitmapWorkerTask extends AsyncTask<Integer, Void, Bitmap> {
- private final WeakReference<ImageView> imageViewReference;
+class BitmapWorkerTask extends AsyncTask&lt;Integer, Void, Bitmap&gt; {
+ private final WeakReference&lt;ImageView&gt; imageViewReference;
private int data = 0;
public BitmapWorkerTask(ImageView imageView) {
// Use a WeakReference to ensure the ImageView can be garbage collected
- imageViewReference = new WeakReference<ImageView>(imageView);
+ imageViewReference = new WeakReference&lt;ImageView&gt;(imageView);
}
// Decode image in background.
@@ -133,13 +133,13 @@ completes:</p>
<a name="AsyncDrawable"></a>
<pre>
static class AsyncDrawable extends BitmapDrawable {
- private final WeakReference<BitmapWorkerTask> bitmapWorkerTaskReference;
+ private final WeakReference&lt;BitmapWorkerTask&gt; bitmapWorkerTaskReference;
public AsyncDrawable(Resources res, Bitmap bitmap,
BitmapWorkerTask bitmapWorkerTask) {
super(res, bitmap);
bitmapWorkerTaskReference =
- new WeakReference<BitmapWorkerTask>(bitmapWorkerTask);
+ new WeakReference&lt;BitmapWorkerTask&gt;(bitmapWorkerTask);
}
public BitmapWorkerTask getBitmapWorkerTask() {
@@ -211,7 +211,7 @@ one associated with the {@link android.widget.ImageView}:</p>
<a name="BitmapWorkerTaskUpdated"></a>
<pre>
-class BitmapWorkerTask extends AsyncTask<Integer, Void, Bitmap> {
+class BitmapWorkerTask extends AsyncTask&lt;Integer, Void, Bitmap&gt; {
...
&#64;Override
@@ -236,4 +236,4 @@ class BitmapWorkerTask extends AsyncTask<Integer, Void, Bitmap> {
android.widget.GridView} components as well as any other components that recycle their child
views. Simply call {@code loadBitmap} where you normally set an image to your {@link
android.widget.ImageView}. For example, in a {@link android.widget.GridView} implementation this
-would be in the {@link android.widget.Adapter#getView getView()} method of the backing adapter.</p> \ No newline at end of file
+would be in the {@link android.widget.Adapter#getView getView()} method of the backing adapter.</p>
diff --git a/docs/html/training/load-data-background/define-launch-query.jd b/docs/html/training/load-data-background/define-launch-query.jd
new file mode 100644
index 0000000..f7978f4
--- /dev/null
+++ b/docs/html/training/load-data-background/define-launch-query.jd
@@ -0,0 +1,83 @@
+page.title=Defining and Launching the Query
+trainingnavtop=true
+startpage=true
+
+@jd:body
+
+<!-- This is the training bar -->
+<div id="tb-wrapper">
+ <div id="tb">
+<h2>This lesson teaches you to</h2>
+<ol>
+ <li>
+ <a href="#DefineLaunch">Define and Launch the Query</a>
+ </li>
+</ol>
+ </div>
+</div>
+
+<p>
+ To perform a query, create the {@link android.support.v4.content.CursorLoader}, set up its
+ query, and pass it to the loader framework. From then on, the framework manages everything.
+ It runs the query on a background thread, returns the results to the foreground, and
+ watches for changes to the data associated with the query.
+</p>
+<p>
+ Pass a {@link android.support.v4.content.CursorLoader} to the loader framework in
+ your implementation of
+ {@link android.support.v4.app.LoaderManager.LoaderCallbacks#onCreateLoader onCreateLoader()}.
+ The loader framework calls this method when you <i>create</i> a loader by calling
+ {@link android.support.v4.app.LoaderManager#initLoader initLoader()}. You can create
+ a {@link android.support.v4.content.CursorLoader} anywhere,
+ but the preferred way is to create it in
+ {@link android.support.v4.app.LoaderManager.LoaderCallbacks#onCreateLoader onCreateLoader()},
+ because this defers creation until the object is actually needed.
+</p>
+<p>
+ Notice that {@link android.support.v4.app.LoaderManager#initLoader initLoader()} will only
+ {@link android.support.v4.app.LoaderManager.LoaderCallbacks#onCreateLoader onCreateLoader()}
+ if the {@link android.support.v4.content.CursorLoader} doesn't already exist; otherwise, it
+ re-uses the existing {@link android.support.v4.content.CursorLoader}. The loader framework
+ tracks {@link android.support.v4.content.CursorLoader} instance using the <code>id</code>
+ value passed to {@link android.support.v4.app.LoaderManager#initLoader initLoader()}.
+</p>
+<h2 id="DefineLaunch">Define and Launch the Query</h2>
+<p>
+ To create a {@link android.support.v4.content.CursorLoader} and define its
+ query at the same time, call the constructor
+{@link android.support.v4.content.CursorLoader#CursorLoader(Context, Uri, String[], String, String[], String)
+ CursorLoader(context, uri, projection, selection, selectionArgs, sortOrder)}. The
+ <code>context</code> and <code>uri</code> arguments are required, but the others are optional.
+ To use the default value for an optional argument, pass in <code>null</code>. The
+ {@link android.support.v4.content.CursorLoader} runs the query against the
+ {@link android.content.ContentProvider} identified by <code>uri</code>, just as if you had
+ called {@link android.content.ContentResolver#query ContentResolver.query()} with the same
+ arguments.
+</p>
+<p>
+ For example:
+</p>
+<pre>
+public Loader&lt;Cursor&gt; onCreateLoader(int loaderID, Bundle bundle)
+{
+ /*
+ * Takes action based on the ID of the Loader that's being created
+ */
+ switch (loaderID) {
+ case URL_LOADER:
+ /*
+ * Return a new CursorLoader
+ */
+ return new CursorLoader(
+ this, // Context
+ DataProviderContract.IMAGE_URI, // Provider's content URI
+ PROJECTION, // Columns to return
+ null, // Return all rows
+ null, // No search arguments
+ null); // Default search order
+ default:
+ // An invalid id was passed in
+ return null;
+ }
+}
+</pre>
diff --git a/docs/html/training/load-data-background/handle-results.jd b/docs/html/training/load-data-background/handle-results.jd
new file mode 100644
index 0000000..f8e003a
--- /dev/null
+++ b/docs/html/training/load-data-background/handle-results.jd
@@ -0,0 +1,104 @@
+page.title=Handling the Results
+trainingnavtop=true
+startpage=true
+
+@jd:body
+
+<!-- This is the training bar -->
+<div id="tb-wrapper">
+ <div id="tb">
+<h2>This lesson teaches you to</h2>
+<ol>
+ <li>
+ <a href="#HandleResults">Handle Query Results</a>
+ </li>
+ <li>
+ <a href="#HandleReset">Clear Out Old Data</a></li>
+</ol>
+ </div>
+</div>
+
+<p>
+ {@link android.support.v4.content.CursorLoader} returns its query results to your
+ implementation of
+ {@link android.support.v4.app.LoaderManager.LoaderCallbacks#onLoadFinished
+ LoaderCallbacks.onLoadFinished()}, in the form of a {@link android.database.Cursor}. In the
+ callback, you can update your data display, do further processing on the
+ {@link android.database.Cursor} data, and so forth.
+</p>
+<p>
+ When the loader framework detects changes to data associated with the query,
+ it resets the {@link android.support.v4.content.CursorLoader}, closes the current
+ {@link android.database.Cursor}, and then invokes your implementation of
+ {@link android.support.v4.app.LoaderManager.LoaderCallbacks#onLoaderReset onLoaderReset()}.
+ Use this callback to delete references to the current {@link android.database.Cursor}; when the
+ loader framework destroys the {@link android.database.Cursor}, you won't have outstanding
+ references that cause memory leaks.
+</p>
+<h2 id="HandleFinished">Handle Query Results</h2>
+<p>
+ The following two snippets are an example of displaying the results of a query, using a
+ {@link android.widget.ListView} backed by a
+ {@link android.support.v4.widget.SimpleCursorAdapter}.
+</p>
+<p>
+ The first snippet shows the {@link android.widget.ListView} and
+ {@link android.support.v4.widget.SimpleCursorAdapter}:
+</p>
+<pre>
+// Gets a handle to the Android built-in ListView widget
+mListView = ((ListView) findViewById(android.R.id.list));
+// Creates a CursorAdapter
+mAdapter =
+ new SimpleCursorAdapter(
+ this, // Current context
+ R.layout.logitem, // View for each item in the list
+ null, // Don't provide the cursor yet
+ FROM_COLUMNS, // List of cursor columns to display
+ TO_FIELDS, // List of TextViews in each line
+ 0 // flags
+);
+// Links the adapter to the ListView
+mListView.setAdapter(mAdapter);
+</pre>
+<p>
+ The next snippet shows an implementation of
+ {@link android.support.v4.app.LoaderManager.LoaderCallbacks#onLoadFinished onLoadFinished()}
+ that moves the query results in the returned {@link android.database.Cursor} to the
+ {@link android.support.v4.widget.SimpleCursorAdapter}. Changing the
+ {@link android.database.Cursor} in the
+ {@link android.support.v4.widget.SimpleCursorAdapter} triggers a refresh of the
+ {@link android.widget.ListView} with the new data:
+</p>
+<pre>
+public void onLoadFinished(Loader&lt;Cursor&gt; loader, Cursor cursor)
+{
+ /*
+ * Move the results into the adapter. This
+ * triggers the ListView to re-display.
+ */
+ mAdapter.swapCursor(cursor);
+}
+</pre>
+<h2 id="HandleReset">Handle a Loader Reset</h2>
+<p>
+ The loader framework resets the {@link android.support.v4.content.CursorLoader} whenever the
+ {@link android.database.Cursor} becomes invalid. This usually occurs because the data associated
+ with the {@link android.database.Cursor} has changed. Before re-running the query,
+ the framework calls your implementation of
+ {@link android.support.v4.app.LoaderManager.LoaderCallbacks#onLoaderReset onLoaderReset()}. In
+ this callback, make sure to prevent memory leaks by deleting all references to the current
+ {@link android.database.Cursor}. Once you return from
+ {@link android.support.v4.app.LoaderManager.LoaderCallbacks#onLoaderReset onLoaderReset()},
+ the loader framework re-runs the query.
+</p>
+<p>
+ For example:
+</p>
+<pre>
+public void onLoaderReset(Loader&lt;Cursor&gt; loader)
+{
+ // Remove the reference to the current Cursor
+ mAdapter.swapCursor(null);
+}
+</pre>
diff --git a/docs/html/training/load-data-background/index.jd b/docs/html/training/load-data-background/index.jd
new file mode 100644
index 0000000..574a32c
--- /dev/null
+++ b/docs/html/training/load-data-background/index.jd
@@ -0,0 +1,117 @@
+page.title=Loading Data in the Background
+trainingnavtop=true
+startpage=true
+
+@jd:body
+<div id="tb-wrapper">
+<div id="tb">
+
+<!-- Required platform, tools, add-ons, devices, knowledge, etc. -->
+<h2>Dependencies and prerequisites</h2>
+<h3>Dependencies</h3>
+<ul>
+ <li>
+ Android 1.6 or later
+ </li>
+</ul>
+<h3>Prerequisites</h3>
+<ul>
+ <li>
+ <a href="{@docRoot}training/basics/firstapp/index.html">Building Your First App</a> class
+ </li>
+ <li>
+ <a href="{@docRoot}training/basics/activity-lifecycle/index.html">
+ Managing the Activity Lifecycle</a> class
+ </li>
+</ul>
+
+<!-- related docs (NOT javadocs) -->
+<h2>You should also read</h2>
+<ul>
+ <li>
+ <a href="{@docRoot}guide/components/loaders.html">Loaders</a>
+ </li>
+ <li>
+ <a href="{@docRoot}guide/topics/data/data-storage.html#db">Using Databases</a>
+ </li>
+ <li>
+<a href="{@docRoot}guide/topics/providers/content-provider-basics.html">Content Provider Basics</a>
+ </li>
+</ul>
+</div>
+</div>
+<p>
+ A {@link android.support.v4.content.CursorLoader} runs a query against a
+ {@link android.content.ContentProvider} on a background thread and returns a
+ {@link android.database.Cursor} to the main thread.
+</p>
+<p>
+ {@link android.support.v4.content.CursorLoader} has these advantages over alternate ways of
+ running a query:
+</p>
+<dl>
+ <dt>
+ Query on a background thread
+ </dt>
+ <dd>
+ A {@link android.support.v4.content.CursorLoader} query runs asynchronously on a
+ background thread, so it doesn't cause "Application Not Responding" (ANR) errors on the UI
+ thread. {@link android.support.v4.content.CursorLoader} creates and starts the
+ background thread; all you have to do is initialize the loader framework and handle the
+ results of the query.
+ </dd>
+ <dt>
+ Automatic re-query
+ </dt>
+ <dd>
+ A {@link android.support.v4.content.CursorLoader} automatically runs a new query when
+ the loader framework detects that the data underlying the {@link android.database.Cursor}
+ has changed.
+ </dd>
+ <dt>
+ Simple API
+ </dt>
+ <dd>
+ The {@link android.support.v4.content.CursorLoader} API provides the
+ query framework and cursor monitoring that you would have to define yourself if you used
+ {@link android.os.AsyncTask}.
+ </dd>
+</dl>
+<p>
+ A {@link android.support.v4.content.CursorLoader} is limited in that the query must be
+ against a {@link android.net.Uri} and must return a {@link android.database.Cursor}. Because of
+ this, a {@link android.support.v4.content.CursorLoader} can only run a query against a
+ {@link android.content.ContentProvider}.
+</p>
+<p>
+ This class describes how to define and use a {@link android.support.v4.content.CursorLoader}.
+ Examples in this class use the {@link android.support.v4 v4 support library} versions of
+ classes, which support platforms starting with Android 1.6.
+</p>
+<h2>Lessons</h2>
+<dl>
+ <dt>
+ <strong><a href="setup-loader.html">Setting Up the Loader</a></strong>
+ </dt>
+ <dd>
+ Learn how to set up an {@link android.app.Activity} that inherits the necessary classes
+ for running a {@link android.support.v4.content.CursorLoader} and returning results.
+ </dd>
+ <dt>
+ <strong><a href="define-launch-query.html">Defining and Launching the Query</a></strong>
+ </dt>
+ <dd>
+ Learn how to perform a query against a {@link android.content.ContentProvider} using
+ a {@link android.support.v4.content.CursorLoader}.
+ </dd>
+ <dt>
+ <strong>
+ <a href="handle-results.html">Handling the Results</a>
+ </strong>
+ </dt>
+ <dd>
+ Learn how to handle the {@link android.database.Cursor} returned from the query, and how
+ to remove references to the current {@link android.database.Cursor} when the loader
+ framework re-sets the {@link android.support.v4.content.CursorLoader}.
+ </dd>
+</dl>
diff --git a/docs/html/training/load-data-background/setup-loader.jd b/docs/html/training/load-data-background/setup-loader.jd
new file mode 100644
index 0000000..4b40611
--- /dev/null
+++ b/docs/html/training/load-data-background/setup-loader.jd
@@ -0,0 +1,90 @@
+page.title=Setting Up the Loader
+trainingnavtop=true
+startpage=true
+
+@jd:body
+
+<!-- This is the training bar -->
+<div id="tb-wrapper">
+ <div id="tb">
+<h2>This lesson teaches you to</h2>
+<ol>
+ <li>
+ <a href="#AddExtensions">Extend an Activity</a>
+ </li>
+ <li>
+ <a href="#GetLoader">Retrieve a LoaderManager</a>
+ </li>
+ <li>
+ <a href="#InitializeLoader">Initialize the Loader Framework</a>
+ </li>
+</ol>
+ </div>
+</div>
+<p>
+ You create a {@link android.support.v4.content.CursorLoader} within a
+ <b>loader framework</b>. To set up the framework, you implement the
+ {@link android.support.v4.app.LoaderManager.LoaderCallbacks LoaderCallbacks&lt;Cursor&gt;}
+ as part of an {@link android.app.Activity}. In addition, to provide compatibility
+ compatible with platform versions starting with Android 1.6, you must extend the
+ {@link android.app.Activity} with the {@link android.support.v4.app.FragmentActivity} class.
+</p>
+<p class="note">
+ <strong>Note:</strong> A {@link android.support.v4.app.Fragment} is not a prerequisite for
+ {@link android.support.v4.content.CursorLoader}. As a convenience, the support library class
+ {@link android.support.v4.app.FragmentActivity} contains the fragment and the loader frameworks,
+ but they are completely independent of each other.
+</p>
+<p>
+ Before you can use the loader framework, you need to initialize it. To do this, retrieve
+ a {@link android.support.v4.app.LoaderManager} object and call its
+ {@link android.support.v4.app.LoaderManager#initLoader initLoader()} method.
+</p>
+<p>
+ If you do use one or more {@link android.support.v4.app.Fragment} objects in an
+ {@link android.app.Activity}, the {@link android.support.v4.app.LoaderManager} you retrieve is
+ available to all of them.
+</p>
+<h2 id="AddExtensions">Extend an Activity</h2>
+<p>
+ To set up an {@link android.app.Activity} subclass to contain a
+ {@link android.support.v4.content.CursorLoader}, extend the subclass with
+ must extend {@link android.support.v4.app.FragmentActivity}, which provides the loader
+ framework, and implement the {@link android.support.v4.app.LoaderManager.LoaderCallbacks
+ LoaderCallbacks&lt;Cursor&gt;} interface, which specifies method signatures that the loader
+ framework uses to interact with the {@link android.app.Activity}.
+</p>
+<p>
+ For example:
+</p>
+<pre>
+public class DisplayActivity extends FragmentActivity
+ implements LoaderManager.LoaderCallbacks&lt;Cursor&gt;
+</pre>
+<h2 id="GetLoader">Retrieve a LoaderManager</h2>
+<p>
+ To get an instance {@link android.support.v4.app.LoaderManager} for use in your
+ {@link android.app.Activity}, call
+ {@link android.support.v4.app.FragmentActivity#getSupportLoaderManager
+ FragmentActivity.getSupportLoaderManager()} at the beginning of the
+ {@link android.app.Activity#onCreate onCreate()} method. For example:
+</p>
+<pre>
+private LoaderManager mLoaderManager;
+public void onCreate() {
+...
+mLoaderManager = this.getSupportLoaderManager();
+</pre>
+<h2 id="InitializeLoader">Initialize the Loader Framework</h2>
+<p>
+ Once you have the {@link android.support.v4.app.LoaderManager} object, initialize
+ it by calling {@link android.support.v4.app.LoaderManager#initLoader initLoader()}. For
+ example:
+</p>
+<pre>
+// CursorLoader instance identifier
+public static final int URL_LOADER = 0;
+...
+// Initializes the CursorLoader
+getSupportLoaderManager().initLoader(URL_LOADER, null, this);
+</pre>
diff --git a/docs/html/training/training_toc.cs b/docs/html/training/training_toc.cs
index b70ba3f..1c85ae8 100644
--- a/docs/html/training/training_toc.cs
+++ b/docs/html/training/training_toc.cs
@@ -58,7 +58,7 @@
</li>
</ul>
</li>
-
+
<li class="nav-section">
<div class="nav-section-header"><a href="<?cs var:toroot ?>training/basics/supporting-devices/index.html">
<span class="en">Supporting Different Devices</span>
@@ -78,7 +78,7 @@
</li>
</ul>
</li>
-
+
<li class="nav-section">
<div class="nav-section-header"><a href="<?cs var:toroot ?>training/basics/fragments/index.html">
<span class="en">Building a Dynamic UI with Fragments</span>
@@ -104,6 +104,26 @@
</li>
<li class="nav-section">
+ <div class="nav-section-header"><a href="<?cs var:toroot?>training/basics/data-storage/index.html">
+ <span class="en">Saving Data</span>
+ </a></div>
+ <ul>
+ <li><a href="<?cs var:toroot ?>training/basics/data-storage/shared-preferences.html">
+ <span class="en">Saving Key-Value Sets</span>
+ </a>
+ </li>
+ <li><a href="<?cs var:toroot ?>training/basics/data-storage/files.html">
+ <span class="en">Saving Files</span>
+ </a>
+ </li>
+ <li><a href="<?cs var:toroot ?>training/basics/data-storage/databases.html">
+ <span class="en">Saving Data in SQL Databases</span>
+ </a>
+ </li>
+ </ul>
+ </li>
+
+ <li class="nav-section">
<div class="nav-section-header"><a href="<?cs var:toroot ?>training/basics/intents/index.html">
<span class="en">Interacting with Other Apps</span>
</a></div>
@@ -123,9 +143,9 @@
</ul>
</li>
-
+
</ul>
- </li><!-- end basic training -->
+ </li><!-- end basic training -->
<li class="nav-section">
<div class="nav-section-header">
<a href="<?cs var:toroot ?>training/advanced.html">
@@ -173,7 +193,7 @@
</li>
</ul>
</li>
-
+
<li class="nav-section">
<div class="nav-section-header"><a href="<?cs var:toroot ?>training/efficient-downloads/index.html">
<span class="en">Transferring Data Without Draining the Battery</span>
@@ -213,47 +233,37 @@
</li>
</ul>
</li>
-
+
<li class="nav-section">
- <div class="nav-section-header"><a href="<?cs var:toroot ?>training/multiscreen/index.html">
- <span class="en">Designing for Multiple Screens</span>
- <span class="es">Cómo diseñar aplicaciones para varias pantallas</span>
- <span class="ja">複数画面のデザイン</span>
- <span class="ko">Designing for Multiple Screens</span>
- <span class="ru">Designing for Multiple Screens</span>
- <span class="zh-CN">针对多种屏幕进行设计</span>
- </a></div>
+ <div class="nav-section-header"><a href="<?cs var:toroot ?>training/multiscreen/index.html"
+ zh-CN-lang="针对多种屏幕进行设计"
+ ja-lang="複数画面のデザイン"
+ es-lang="Cómo diseñar aplicaciones para varias pantallas"
+ >Designing for Multiple Screens</a>
+ </div>
<ul>
- <li><a href="<?cs var:toroot ?>training/multiscreen/screensizes.html">
- <span class="en">Supporting Different Screen Sizes</span>
- <span class="es">Cómo admitir varios tamaños de pantalla</span>
- <span class="ja">さまざまな画面サイズのサポート</span>
- <span class="ko">다양한 화면 크기 지원</span>
- <span class="ru">Supporting Different Screen Sizes</span>
- <span class="zh-CN">支持各种屏幕尺寸</span>
- </a>
- </li>
- <li><a href="<?cs var:toroot ?>training/multiscreen/screendensities.html">
- <span class="en">Supporting Different Screen Densities</span>
- <span class="es">Cómo admitir varias densidades de pantalla</span>
- <span class="ja">さまざまな画面密度のサポート</span>
- <span class="ko">Supporting Different Screen Densities</span>
- <span class="ru">Supporting Different Screen Densities</span>
- <span class="zh-CN">支持各种屏幕密度</span>
- </a>
- </li>
- <li><a href="<?cs var:toroot ?>training/multiscreen/adaptui.html">
- <span class="en">Implementing Adaptive UI Flows</span>
- <span class="es">Cómo implementar interfaces de usuario adaptables</span>
- <span class="ja">順応性のある UI フローの実装</span>
- <span class="ko">Implementing Adaptive UI Flows</span>
- <span class="ru">Implementing Adaptive UI Flows</span>
- <span class="zh-CN">实施自适应用户界面流程</span>
- </a>
+ <li><a href="<?cs var:toroot ?>training/multiscreen/screensizes.html"
+ zh-CN-lang="支持各种屏幕尺寸"
+ ko-lang="다양한 화면 크기 지원"
+ ja-lang="さまざまな画面サイズのサポート"
+ es-lang="Cómo admitir varios tamaños de pantalla"
+ >Designing for Multiple Screens</a>
+ </li>
+ <li><a href="<?cs var:toroot ?>training/multiscreen/screendensities.html"
+ zh-CN-lang="支持各种屏幕密度"
+ ja-lang="さまざまな画面密度のサポート"
+ es-lang="Cómo admitir varias densidades de pantalla"
+ >Supporting Different Screen Densities</a>
+ </li>
+ <li><a href="<?cs var:toroot ?>training/multiscreen/adaptui.html"
+ zh-CN-lang="实施自适应用户界面流程"
+ ja-lang="順応性のある UI フローの実装"
+ es-lang="Cómo implementar interfaces de usuario adaptables"
+ >Implementing Adaptive UI Flows</a>
</li>
</ul>
</li>
-
+
<li class="nav-section">
<div class="nav-section-header"><a href="<?cs var:toroot ?>training/improving-layouts/index.html">
<span class="en">Improving Layout Performance</span>
@@ -277,6 +287,34 @@
</li>
</ul>
</li>
+
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="<?cs var:toroot ?>training/animation/index.html">
+ <span class="en">Adding Animations</span>
+ </a></div>
+ <ul>
+ <li><a href="<?cs var:toroot ?>training/animation/crossfade.html">
+ <span class="en">Crossfading Two Views</span>
+ </a>
+ </li>
+ <li><a href="<?cs var:toroot ?>training/animation/screen-slide.html">
+ <span class="en">Using ViewPager for Screen Slide</span>
+ </a>
+ </li>
+ <li><a href="<?cs var:toroot ?>training/animation/cardflip.html">
+ <span class="en">Displaying Card Flip Animations</span>
+ </a>
+ </li>
+ <li><a href="<?cs var:toroot ?>training/animation/zoom.html">
+ <span class="en">Zooming a View</span>
+ </a>
+ </li>
+ <li><a href="<?cs var:toroot ?>training/animation/layout.html">
+ <span class="en">Animating Layout Changes</span>
+ </a>
+ </li>
+ </ul>
+ </li>
<li class="nav-section">
<div class="nav-section-header"><a href="<?cs var:toroot ?>training/managing-audio/index.html">
@@ -297,52 +335,38 @@
</li>
</ul>
</li>
-
+
<li class="nav-section">
- <div class="nav-section-header"><a href="<?cs var:toroot ?>training/monitoring-device-state/index.html">
- <span class="en">Optimizing Battery Life</span>
- <span class="es">Cómo optimizar la duración de la batería</span>
- <span class="ja">電池消費量の最適化</span>
- <span class="ko">Optimizing Battery Life</span>
- <span class="ru">Optimizing Battery Life</span>
- <span class="zh-CN">优化电池使用时间</span>
- </a></div>
+ <div class="nav-section-header"><a href="<?cs var:toroot ?>training/monitoring-device-state/index.html"
+ zh-CN-lang="优化电池使用时间"
+ ja-lang="電池消費量の最適化"
+ es-lang="Cómo optimizar la duración de la batería"
+ >Optimizing Battery Life</a>
+ </div>
<ul>
- <li><a href="<?cs var:toroot ?>training/monitoring-device-state/battery-monitoring.html">
- <span class="en">Monitoring the Battery Level and Charging State</span>
- <span class="es">Cómo controlar el nivel de batería y el estado de carga</span>
- <span class="ja">電池残量と充電状態の監視</span>
- <span class="ko">Monitoring the Battery Level and Charging State</span>
- <span class="ru">Monitoring the Battery Level and Charging State</span>
- <span class="zh-CN">监控电池电量和充电状态</span>
- </a>
- </li>
- <li><a href="<?cs var:toroot ?>training/monitoring-device-state/docking-monitoring.html">
- <span class="en">Determining and Monitoring the Docking State and Type</span>
- <span class="es">Cómo determinar y controlar el tipo de conector y el estado de la conexión</span>
- <span class="ja">ホルダーの装着状態とタイプの特定と監視</span>
- <span class="ko">Determining and Monitoring the Docking State and Type</span>
- <span class="ru">Determining and Monitoring the Docking State and Type</span>
- <span class="zh-CN">确定和监控基座对接状态和类型</span>
- </a>
- </li>
- <li><a href="<?cs var:toroot ?>training/monitoring-device-state/connectivity-monitoring.html">
- <span class="en">Determining and Monitoring the Connectivity Status</span>
- <span class="es">Cómo determinar y controlar el estado de la conectividad</span>
- <span class="ja">接続状態の特定と監視</span>
- <span class="ko">Determining and Monitoring the Connectivity Status</span>
- <span class="ru">Determining and Monitoring the Connectivity Status</span>
- <span class="zh-CN">确定和监控网络连接状态</span>
- </a>
- </li>
- <li><a href="<?cs var:toroot ?>training/monitoring-device-state/manifest-receivers.html">
- <span class="en">Manipulating Broadcast Receivers On Demand</span>
- <span class="es">Cómo manipular los receptores de emisión bajo demanda</span>
- <span class="ja">オンデマンドでのブロードキャスト レシーバ操作</span>
- <span class="ko">Manipulating Broadcast Receivers On Demand</span>
- <span class="ru">Manipulating Broadcast Receivers On Demand</span>
- <span class="zh-CN">根据需要操作广播接收器</span>
- </a>
+ <li><a href="<?cs var:toroot ?>training/monitoring-device-state/battery-monitoring.html"
+ zh-CN-lang="监控电池电量和充电状态"
+ ja-lang="電池残量と充電状態の監視"
+ es-lang="Cómo controlar el nivel de batería y el estado de carga"
+ >Monitoring the Battery Level and Charging State</a>
+ </li>
+ <li><a href="<?cs var:toroot ?>training/monitoring-device-state/docking-monitoring.html"
+ zh-CN-lang="确定和监控基座对接状态和类型"
+ ja-lang="ホルダーの装着状態とタイプの特定と監視"
+ es-lang="Cómo determinar y controlar el tipo de conector y el estado de la conexión"
+ >Determining and Monitoring the Docking State and Type</a>
+ </li>
+ <li><a href="<?cs var:toroot ?>training/monitoring-device-state/connectivity-monitoring.html"
+ zh-CN-lang="确定和监控网络连接状态"
+ ja-lang="接続状態の特定と監視"
+ es-lang="Cómo determinar y controlar el estado de la conectividad"
+ >Determining and Monitoring the Connectivity Status</a>
+ </li>
+ <li><a href="<?cs var:toroot ?>training/monitoring-device-state/manifest-receivers.html"
+ zh-CN-lang="根据需要操作广播接收器"
+ ja-lang="オンデマンドでのブロードキャスト レシーバ操作"
+ es-lang="Cómo manipular los receptores de emisión bajo demanda"
+ >Manipulating Broadcast Receivers On Demand</a>
</li>
</ul>
</li>
@@ -431,7 +455,7 @@
</li>
</ul>
</li>
-
+
<li class="nav-section">
<div class="nav-section-header"><a href="<?cs var:toroot ?>training/camera/index.html">
<span class="en">Capturing Photos</span>
@@ -451,7 +475,7 @@
</li>
</ul>
</li>
-
+
<li class="nav-section">
<div class="nav-section-header"><a href="<?cs var:toroot ?>training/multiple-apks/index.html">
<span class="en">Maintaining Multiple APKs</span>
@@ -511,7 +535,7 @@
</li>
</ul>
</li>
-
+
<li class="nav-section">
<div class="nav-section-header"><a href="<?cs var:toroot ?>training/monetization/index.html">
<span class="en">Monetizing Your App</span>
@@ -523,7 +547,7 @@
</li>
</ul>
</li>
-
+
<li class="nav-section">
<div class="nav-section-header"><a href="<?cs var:toroot ?>training/design-navigation/index.html">
<span class="en">Designing Effective Navigation</span>
@@ -596,7 +620,7 @@
</li>
</ul>
</li>
-
+
<li class="nav-section">
<div class="nav-section-header"><a href="<?cs var:toroot ?>training/displaying-bitmaps/index.html">
<span class="en">Displaying Bitmaps Efficiently</span>
@@ -693,6 +717,25 @@
</ul>
</li>
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="<?cs var:toroot ?>training/load-data-background/index.html">
+ <span class="en">Loading Data in the Background</span>
+ </a></div>
+ <ul>
+ <li><a href="<?cs var:toroot ?>training/load-data-background/setup-loader.html">
+ <span class="en">Setting Up the Loader</span>
+ </a>
+ </li>
+ <li><a href="<?cs var:toroot ?>training/load-data-background/define-launch-query.html">
+ <span class="en">Defining and Launching the Query</span>
+ </a>
+ </li>
+ <li><a href="<?cs var:toroot ?>training/load-data-background/handle-results.html">
+ <span class="en">Handling the Results</span>
+ </a>
+ </li>
+ </ul>
+ </li>
</ul>
</li>