_say. For example, for google_translate tts, its service name default is `google_translate_say`.
{% endconfiguration %}
The extended example from above would look like the following sample:
```yaml
-# Example configuration.yaml entry for Google TTS service
+# Example configuration.yaml entry for Google Translate TTS service
tts:
- platform: google_translate
cache: true
cache_dir: /tmp/tts
time_memory: 300
base_url: http://192.168.0.10:8123
+ service_name: google_say
```
@@ -91,7 +97,7 @@ The Google cast devices (Google Home, Chromecast, etc.) present the following pr
## {% linkable_title Service say %}
-The `say` service support `language` and on some platforms also `options` for set, i.e., *voice, motion, speed, etc*. The text for speech is set with `message`.
+The `say` service support `language` and on some platforms also `options` for set, i.e., *voice, motion, speed, etc*. The text for speech is set with `message`. Since release 0.92, service name can be defined in configuration `service_name` option.
Say to all `media_player` device entities:
From 427379c2363b957e2dbf7423dfadfcdcb12a9952 Mon Sep 17 00:00:00 2001
From: Mauricio Bonani
Date: Sat, 27 Apr 2019 06:13:03 -0400
Subject: [PATCH 12/44] Update broadlink.markdown (#9324)
Fix the visibility of the template code
---
source/_components/broadlink.markdown | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/source/_components/broadlink.markdown b/source/_components/broadlink.markdown
index 91bc57e07e2..21bbcaffe7a 100644
--- a/source/_components/broadlink.markdown
+++ b/source/_components/broadlink.markdown
@@ -435,7 +435,7 @@ First get or learn all the remotes you want to add to Home Assistant in E-Contro
```bash
Property: msg.payload
Format: Mustache template
- Template field: enter '{{payload.data}}'.
+ Template field: enter '{% raw %}{{payload.data}}{% endraw %}'.
Output as: Plain text
```
9. Drag a Debug node to the right of the Template node and link them.
From f21824d00d7ebab20a60b33dd326e0ce2c4b9ac6 Mon Sep 17 00:00:00 2001
From: Mike Miller
Date: Sun, 28 Apr 2019 02:58:38 +0300
Subject: [PATCH 13/44] Use the proper name for manual speedtest service
(#9337)
---
source/_components/speedtestdotnet.markdown | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/source/_components/speedtestdotnet.markdown b/source/_components/speedtestdotnet.markdown
index 6ff3c58da95..285897846b3 100644
--- a/source/_components/speedtestdotnet.markdown
+++ b/source/_components/speedtestdotnet.markdown
@@ -90,7 +90,7 @@ action:
This component uses [speedtest-cli](https://github.com/sivel/speedtest-cli) to gather network performance data from Speedtest.net.
Please be aware of the potential [inconsistencies](https://github.com/sivel/speedtest-cli#inconsistency) that this component may display.
-When Home Assistant first starts up, the values of the speed test will show as `Unknown`. You can use the service `sensor.update_speedtest` to run a manual speed test and populate the data or just wait for the next regularly scheduled test. You can turn on manual mode to disable the scheduled speed tests.
+When Home Assistant first starts up, the values of the speed test will show as `Unknown`. You can use the service `speedtestdotnet.speedtest` to run a manual speed test and populate the data or just wait for the next regularly scheduled test. You can turn on manual mode to disable the scheduled speed tests.
## {% linkable_title Examples %}
From a031d2667d4f4a447a2579f5b0a2e6db862aa546 Mon Sep 17 00:00:00 2001
From: Martin Hjelmare
Date: Sun, 28 Apr 2019 01:59:58 +0200
Subject: [PATCH 14/44] Clarify mysensors versions (#9336)
---
source/_components/mysensors.markdown | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/source/_components/mysensors.markdown b/source/_components/mysensors.markdown
index a373f5f04f9..bd5861b72aa 100644
--- a/source/_components/mysensors.markdown
+++ b/source/_components/mysensors.markdown
@@ -76,7 +76,7 @@ mysensors:
type: integer
default: true
version:
- description: Specifies the MySensors protocol version to use. Supports 1.4, 1.5 and 2.0.
+ description: Specifies the MySensors protocol version to use. Supports versions 1.4 to 2.3.
required: false
type: string
default: '1.4'
@@ -93,7 +93,7 @@ mysensors:
{% endconfiguration %}
-Not all features of MySensors 2.0 are supported by Home Assistant yet. As more features are added, they will be described here in the documentation. Go to the MySensors platform pages under "related components" to see what message types are currently supported.
+Not all features of MySensors 2.x are supported by Home Assistant yet. As more features are added, they will be described here in the documentation. Go to the MySensors platform pages under "related components" to see what message types are currently supported.
If you are using an original Arduino as a serial gateway, the port will be named `ttyACM*`. The exact number can be determined with the command shown below.
@@ -110,7 +110,7 @@ mqtt:
```
-The MQTT gateway requires MySensors version 2.0 and only the MQTT client gateway is supported.
+The MQTT gateway requires MySensors version 2.0+ and only the MQTT client gateway is supported.
### {% linkable_title Extended configuration example %}
@@ -153,7 +153,7 @@ Present a MySensors sensor or actuator, by following these steps:
4. Write and upload your MySensors sketch to the sensor. Make sure you:
- Send sketch name.
- Present the sensor's `S_TYPE`.
- - Send at least one initial value per `V_TYPE`. In version 2.0 of MySensors, this has to be done in the loop function. See below for an example in 2.0 of how to make sure the initial value has been received by the controller.
+ - Send at least one initial value per `V_TYPE`. In version 2.x of MySensors, this has to be done in the loop function. See below for an example in 2.0 of how to make sure the initial value has been received by the controller.
5. Start the sensor.
```cpp
From a9073f6052068e9096a54caabb2ba927a27ff03e Mon Sep 17 00:00:00 2001
From: Villhellm
Date: Sat, 27 Apr 2019 17:11:00 -0700
Subject: [PATCH 15/44] Added Section to show which lovelace card to use
(#9327)
* Added Section to show which lovelace card to use
* Added 2 cards, clarified setup the process
---
source/_components/stream.markdown | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/source/_components/stream.markdown b/source/_components/stream.markdown
index 8858938527e..ad7be616a05 100644
--- a/source/_components/stream.markdown
+++ b/source/_components/stream.markdown
@@ -55,6 +55,11 @@ action:
filename: '/tmp/my_stream.mp4'
```
+## {% linkable_title Streaming in Lovelace %}
+
+As of Homeassistant version 0.92 you can now live-stream a camera feed directly in lovelace.
+To do this add either [picture-entity](/lovelace/picture-entity/), [picture-glance](/lovelace/picture-glance/) or [picture-elements](/lovelace/picture-elements/), set `camera_image` to a stream-ready camera entity and set `camera_view` to `live` in one of your lovelace views.
+
## {% linkable_title Troubleshooting %}
Some users on manual installs may see the following error in their logs after restarting:
From 77645798a4839b3eb014ec8ab27f16fdbf98cb29 Mon Sep 17 00:00:00 2001
From: nickidw
Date: Sun, 28 Apr 2019 18:44:14 +0200
Subject: [PATCH 16/44] Update raspberry-pi.markdown (#9338)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Added additional dependency libssl-dev to avoid "fatal error: openssl/opensslv.h: No such file or directory” during pip3 install homeassistant step.
---
source/_docs/installation/raspberry-pi.markdown | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/source/_docs/installation/raspberry-pi.markdown b/source/_docs/installation/raspberry-pi.markdown
index 2e412cf0756..a8a9c858923 100644
--- a/source/_docs/installation/raspberry-pi.markdown
+++ b/source/_docs/installation/raspberry-pi.markdown
@@ -45,7 +45,7 @@ $ sudo apt-get upgrade -y
Install the dependencies.
```bash
-$ sudo apt-get install python3 python3-venv python3-pip libffi-dev
+$ sudo apt-get install python3 python3-venv python3-pip libffi-dev libssl-dev
```
Add an account for Home Assistant called `homeassistant`.
From 5c7a001feb072bf19639c84872e99cbf0d20cb55 Mon Sep 17 00:00:00 2001
From: kbickar
Date: Sun, 28 Apr 2019 13:05:54 -0400
Subject: [PATCH 17/44] Corrected attribute name - MQTT Cover (#9311)
* Corrected attribute name
* :pencil2: Tweak
---
source/_components/cover.mqtt.markdown | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/source/_components/cover.mqtt.markdown b/source/_components/cover.mqtt.markdown
index 05600527804..5b0a3894d4f 100644
--- a/source/_components/cover.mqtt.markdown
+++ b/source/_components/cover.mqtt.markdown
@@ -163,7 +163,7 @@ tilt_opened_value:
required: false
type: integer
default: 100
-tilt_status_optimistic:
+tilt_optimistic:
description: Flag that determines if tilt works in optimistic mode.
required: false
type: boolean
From fed9e8d5a6686bb4237e66621d476581c562a91b Mon Sep 17 00:00:00 2001
From: Yllelder Bamir
Date: Sun, 28 Apr 2019 19:11:21 +0200
Subject: [PATCH 18/44] Add visibility with a note (#9314)
* Add visibility with a note
Just as the top of the page is reported in the "note" format of a particular change in a specific version, the clarification at the bottom of the page should be in the "note" format as well.
* Remove note
---
source/_components/google_translate.markdown | 6 ++----
1 file changed, 2 insertions(+), 4 deletions(-)
diff --git a/source/_components/google_translate.markdown b/source/_components/google_translate.markdown
index cb052015c4a..7dc9826f101 100644
--- a/source/_components/google_translate.markdown
+++ b/source/_components/google_translate.markdown
@@ -18,7 +18,7 @@ redirect_from:
The `google_translate` text-to-speech platform uses unofficial [Google Translate Text-to-Speech engine](https://translate.google.com/) to read a text with natural sounding voices.
-This platform renamed to `google_translate` from `google` since release 0.92
+This platform renamed to `google_translate` from `google` since release 0.92.
## {% linkable_title Configuration %}
@@ -40,7 +40,7 @@ language:
{% endconfiguration %}
Check the [complete list of supported languages](https://translate.google.com/intl/en_ALL/about/languages/) (languages where "Talk" feature is enabled in Google Translate) for allowed values.
-Use the 2 digit language code which you can find at the end of url when you click on Language name.
+Use the 2 digit language code which you can find at the end of URL when you click on Language name.
## {% linkable_title Full configuration example %}
@@ -60,5 +60,3 @@ If you are using SSL certificate or Docker, you may need to add the `base_url` c
http:
base_url: example.duckdns.org
```
-
-The `base_url` configuration variable was added in 0.35.1, so make sure your Home Assistant version is **0.35.1 or above.**
From f99f70fd7a3370212c5db417fb055b02a6df5c7e Mon Sep 17 00:00:00 2001
From: Sergey Lanzman
Date: Sun, 28 Apr 2019 20:12:40 +0300
Subject: [PATCH 19/44] update broadlink docs (#9289)
* update broadlink docs
update broadlink docs, new learning command service
* Minor change
---
source/_components/broadlink.markdown | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/source/_components/broadlink.markdown b/source/_components/broadlink.markdown
index 21bbcaffe7a..61aee2d9d1d 100644
--- a/source/_components/broadlink.markdown
+++ b/source/_components/broadlink.markdown
@@ -210,7 +210,7 @@ Information about how to install on Windows can be found [here](/components/sens
### {% linkable_title How to obtain IR/RF packets? %}
-Choose Call Service from the Developer Tools. Choose the service `broadlink.learn` from the list of **Available services:** and hit **CALL SERVICE**. Press the button on your remote with in 20 seconds. The packet will be printed as a persistent notification in the States page of the web interface.
+Choose Call Service from the Developer Tools. Choose the service `broadlink.learn` from the list of **Available services:**, write in "Service Data" JSON with 1 field "host":"your_broadlink_IP" and hit **CALL SERVICE**. Press the button on your remote with in 20 seconds. The packet will be printed as a persistent notification in the States page of the web interface.
Example config for `rm`, `rm2`, `rm_mini`, `rm_pro_phicomm`, `rm2_home_plus`, `rm2_home_plus_gdt`, `rm2_pro_plus`, `rm2_pro_plus2`, `rm2_pro_plus_bl` and `rm_mini_shate` devices:
From 1655f9e72a1418479c3799099145d4911ee4f765 Mon Sep 17 00:00:00 2001
From: Allan Persson | Marathon Pepe
<46043392+allanpersson@users.noreply.github.com>
Date: Sun, 28 Apr 2019 19:56:29 +0200
Subject: [PATCH 20/44] Update local_file.markdown (#9297)
* Update local_file.markdown
Example of full path after struggling myself
* Move to description:wq
---
source/_components/local_file.markdown | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/source/_components/local_file.markdown b/source/_components/local_file.markdown
index 7a59c9acdd2..d5cdd4e298c 100644
--- a/source/_components/local_file.markdown
+++ b/source/_components/local_file.markdown
@@ -32,7 +32,7 @@ camera:
{% configuration %}
file_path:
- description: File to serve as the camera.
+ description: "File to serve as the camera. Use a full path, e.g., `/config/www/images/image.jpg `."
required: true
type: string
name:
From ab784b41cb647ce2aea021e60f40cb1ae25f4cb2 Mon Sep 17 00:00:00 2001
From: Klaas Schoute
Date: Sun, 28 Apr 2019 22:11:58 +0200
Subject: [PATCH 21/44] Hue sensor support (#9084) (#9344)
* Stub documentation for Hue sensor support.
* Configuration option was removed.
* :pencil2: Tweak
---
source/_components/hue.markdown | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/source/_components/hue.markdown b/source/_components/hue.markdown
index 1aefa830a7a..60d5ba0f198 100644
--- a/source/_components/hue.markdown
+++ b/source/_components/hue.markdown
@@ -19,17 +19,18 @@ redirect_from:
- /components/light.hue/
---
-Philips Hue support is integrated into Home Assistant as a Hub that can drive the light platform. The preferred way to setup the Philips Hue platform is by enabling the [discovery component](/components/discovery/).
+Philips Hue support is integrated into Home Assistant as a Hub that can drive the light & sensor platforms. The preferred way to setup the Philips Hue platform is by enabling the [discovery component](/components/discovery/).
There is currently support for the following device types within Home Assistant:
- Light
+- Motion sensors (including temperature & light level sensors)
Once discovered, if you have a custom default view, locate `configurator.philips_hue` in the entities list ( < > ) and add it to a group in `configuration.yaml`. Restart Home Assistant so that the configurator is visible in the Home Assistant dashboard. Once Home Assistant is restarted, locate and click on `configurator.philips_hue` to bring up the initiation dialog. This will prompt you to press the Hue button to register the Hue hub in Home Assistant. Once complete, the configurator entity isn't needed anymore and can be removed from any visible group in `configuration.yaml`.
When you configure the Hue bridge from Home Assistant, it writes a token to a file in your Home Assistant [configuration directory](/docs/configuration/). That token authenticates the communication with the Hue bridge. This token uses the Address of the Hue Bridge. If the IP address for the Hue Bridge changes, you will need to register the Hue Bridge with Home Assistant again. To avoid this you may set up DHCP registration for your Hue Bridge, so that it always has the same IP address.
-Once registration is complete you should see the Hue lights listed as `light` entities. If you don't you may have to restart Home Assistant once more. Add these light entities to `configuration.yaml` file and restart Home Assistant once more to complete the installation.
+Once registration is complete you should see the Hue lights listed as `light` entities, Hue presence sensors listed as `binary_sensor` entites, Hue temperature and light level sensors listed as `sensor` entities. If you don't you may have to restart Home Assistant once more.
If you want to enable the component without relying on the [discovery component](/components/discovery/), add the following lines to your `configuration.yaml` file:
From 5ae391513ead5bffe906e877534d939634ea72d4 Mon Sep 17 00:00:00 2001
From: Conrad Juhl Andersen
Date: Sun, 28 Apr 2019 23:39:15 +0200
Subject: [PATCH 22/44] state_topic is required in the config. (#9277)
* state_topic is required in the config.
* Update mqtt_room.markdown
---
source/_components/mqtt_room.markdown | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/source/_components/mqtt_room.markdown b/source/_components/mqtt_room.markdown
index fe18eb216b4..3ee3c59c805 100644
--- a/source/_components/mqtt_room.markdown
+++ b/source/_components/mqtt_room.markdown
@@ -40,8 +40,7 @@ name:
type: string
state_topic:
description: The topic that contains all subtopics for the rooms.
- required: false
- default: room_presence
+ required: true
type: string
timeout:
description: "The time in seconds after which a room presence state is considered old. An example: device1 is reported at scanner1 with a distance of 1. No further updates are sent from scanner1. After 5 seconds scanner2 reports device1 with a distance of 2. The old location info is discarded in favor of the new scanner2 information as the timeout has passed."
From 10861d95abb342e784f0de223b29f5af4cc2e137 Mon Sep 17 00:00:00 2001
From: akasma74
Date: Sun, 28 Apr 2019 22:40:06 +0100
Subject: [PATCH 23/44] update value_template description (#9276)
Description of value_template updated to clarify its return return value and relationship with device_class
---
source/_components/binary_sensor.template.markdown | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/source/_components/binary_sensor.template.markdown b/source/_components/binary_sensor.template.markdown
index 4fbb5a6bae4..3d9d17c7b71 100644
--- a/source/_components/binary_sensor.template.markdown
+++ b/source/_components/binary_sensor.template.markdown
@@ -60,7 +60,7 @@ sensors:
type: device_class
default: None
value_template:
- description: Defines a template to set the state of the sensor.
+ description: The sensor is `on` if the template evaluates as `True` and `off` otherwise. The actual appearance in the frontend (`Open`/`Closed`, `Detected`/`Clear` etc) depends on the sensor’s device_class value
required: true
type: template
icon_template:
From 26522a37a2a09662993cc473270970d9ea4c694c Mon Sep 17 00:00:00 2001
From: Emacee
Date: Sun, 28 Apr 2019 23:40:22 +0200
Subject: [PATCH 24/44] Update n26.markdown (#9341)
* Update n26.markdown
Change IoT class from local polling to cloud polling.
* Remove quotes
* :pencil2: Tweak
---
source/_components/n26.markdown | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/source/_components/n26.markdown b/source/_components/n26.markdown
index f54370ddab7..b4ea134c675 100644
--- a/source/_components/n26.markdown
+++ b/source/_components/n26.markdown
@@ -14,7 +14,7 @@ ha_category:
- Switch
ha_release: 0.92
featured: false
-ha_iot_class: "Local Polling"
+ha_iot_class: Cloud Polling
---
The [N26](https://n26.com) integration for Home Assistant allows you to track your N26 account.
From 01edd663896354f07108b775ee5845e1b0d4a0eb Mon Sep 17 00:00:00 2001
From: DubhAd
Date: Sun, 28 Apr 2019 22:41:00 +0100
Subject: [PATCH 25/44] Added another troubleshooting step (#9268)
* Added another troubleshooting step
After a chat with petergebruers, these error messages are good ways of identify if you've made the mistake of running multiple things that access the controller, which breaks your system in strange and mysterious ways.
* Minor changes
---
source/_docs/z-wave/installation.markdown | 12 ++++++++++++
1 file changed, 12 insertions(+)
diff --git a/source/_docs/z-wave/installation.markdown b/source/_docs/z-wave/installation.markdown
index 136329e448a..10b11875174 100644
--- a/source/_docs/z-wave/installation.markdown
+++ b/source/_docs/z-wave/installation.markdown
@@ -263,3 +263,15 @@ If you're getting errors like:
openzwave-embed/open-zwave-master/libopenzwave.a: No such file or directory
Then the problem is that you're missing `libudev-dev` (or the equivalent for your distribution), please [install it](/docs/z-wave/installation/#linux-except-hassbian).
+
+### {% linkable_title Random failures %}
+
+If you're having random failures of the mesh, devices going missing, things randomly not working, check your `OZW_Log.txt` for the following messages:
+
+```
+WARNING: 500ms passed without reading the rest of the frame...aborting frame read
+WARNING: Out of frame flow! (0xfe). Sending NAK
+WARNING: Checksum incorrect - sending NAK
+```
+
+If you see any of these messages repeated in the log then _probably_ you've got something else running that's also using the Z-Wave controller. That might mean you've also got the OpenZ-Wave control panel (ozwcp) running, a second instance of Home Assistant or something else. You need to stop that other process to resolve this.
From d5b551732a41474e0aa102eae79ddb64dd5a89ed Mon Sep 17 00:00:00 2001
From: DubhAd
Date: Sun, 28 Apr 2019 22:42:33 +0100
Subject: [PATCH 26/44] Added details of `device_tracker.see` (#9272)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Turns out, we don't actually document the service at all 🤷♂️
---
source/_components/device_tracker.markdown | 14 ++++++++++++++
1 file changed, 14 insertions(+)
diff --git a/source/_components/device_tracker.markdown b/source/_components/device_tracker.markdown
index 6f63703e70f..351cf4a37eb 100644
--- a/source/_components/device_tracker.markdown
+++ b/source/_components/device_tracker.markdown
@@ -115,3 +115,17 @@ If you want to track whether either your GPS based tracker or your local network
## {% linkable_title Device states %}
The state of your tracked device will be `'home'` if it is in the [home zone](/components/zone#home-zone), detected by your network or Bluetooth based presence detection. If you're using a presence detection method that includes coordinates then when it's in a zone the state will be the name of the zone (in lower case). When a device isn't at home and isn't in any zone, the state will be `'not_home'`.
+
+## {% linkable_title `device_tracker.see` service %}
+
+The `device_tracker.see` service can be used to manually update the state of a device tracker:
+
+| Service data attribute | Optional | Description |
+| ---------------------- | -------- | ----------- |
+| `dev_id` | no | The second half of the `entity_id`, for example `tardis` for `device_tracker.tardis` |
+| `location_name` | no | The location, `home`, `not_home`, or the name of the zone |
+| `host_name` | yes | The hostname of the device tracker |
+| `mac` | yes | The MAC address of the entity (only specify if you're updating a network based tracker) |
+| `gps` | yes | If you're providing a location, for example `[51.513845, -0.100539]` |
+| `gps_accuracy` | yes | The accuracy of the GPS fix |
+| `battery` | yes | The battery level of the device |
From f8a68d8aa7b7913f8d6814326d26ed5f7c17e18e Mon Sep 17 00:00:00 2001
From: vMeph
Date: Sun, 28 Apr 2019 22:44:04 +0100
Subject: [PATCH 27/44] the action exemple wont work (#9264)
* the action exemple wont work
the stream source entry is not allowed in data, to work got to be like proposal
* Update stream.markdown
---
source/_components/stream.markdown | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/source/_components/stream.markdown b/source/_components/stream.markdown
index ad7be616a05..f96e12ebe5c 100644
--- a/source/_components/stream.markdown
+++ b/source/_components/stream.markdown
@@ -45,14 +45,15 @@ Both `duration` and `lookback` options are suggestions, but should be consistent
The path part of `filename` must be an entry in the `whitelist_external_dirs` in your [`homeassistant:`](/docs/configuration/basic/) section of your `configuration.yaml` file.
-For example, the following action in an automation would take a recording from `rtsp://my.stream.feed:554` and save it to `/tmp`.
+For example, the following action in an automation would take a recording from `rtsp://my.stream.feed:554` and save it to `/config/www`.
```yaml
action:
service: camera.record
data:
- stream_source: rtsp://my.stream.feed:554
- filename: '/tmp/my_stream.mp4'
+ entity_id: camera.quintal
+ filename: '/config/www/my_stream.mp4'
+ duration: 30
```
## {% linkable_title Streaming in Lovelace %}
From f99eb576c9eb28a7668d0942809106469775a0ec Mon Sep 17 00:00:00 2001
From: Oncleben31
Date: Sun, 28 Apr 2019 23:44:39 +0200
Subject: [PATCH 28/44] Add custom_component syntax usage in examples (#9265)
Because this syntax is not visible else where in the documentation.
---
source/_components/logger.markdown | 3 +++
1 file changed, 3 insertions(+)
diff --git a/source/_components/logger.markdown b/source/_components/logger.markdown
index 4f4daf1e73a..50d6b8394fc 100644
--- a/source/_components/logger.markdown
+++ b/source/_components/logger.markdown
@@ -34,6 +34,7 @@ logger:
logs:
homeassistant.components.device_tracker: critical
homeassistant.components.camera: critical
+ custom_components.my_integration: critical
```
To ignore all messages lower than critical and log event for specified
@@ -48,6 +49,7 @@ logger:
homeassistant.components.rfxtrx: debug
homeassistant.components.device_tracker: critical
homeassistant.components.camera: critical
+ custom_components.my_integration: debug
```
{% configuration %}
@@ -106,6 +108,7 @@ service: logger.set_level
data:
homeassistant.components: warning
homeassistant.components.media_player.yamaha: debug
+ custom_components.my_integration: debug
```
The log information are stored in the
From 8ca332c5fc9ce5902d5a18cbebbd58238d146511 Mon Sep 17 00:00:00 2001
From: br0nd
Date: Sun, 28 Apr 2019 14:47:50 -0700
Subject: [PATCH 29/44] Correct example automation for vacuum.xiaomi_clean_zone
(#9233)
Replace repeats_template with repeats for xiaomi_clean_zone automation example
---
source/_components/vacuum.xiaomi_miio.markdown | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/source/_components/vacuum.xiaomi_miio.markdown b/source/_components/vacuum.xiaomi_miio.markdown
index ddabec52c3d..43cdf5fdb97 100644
--- a/source/_components/vacuum.xiaomi_miio.markdown
+++ b/source/_components/vacuum.xiaomi_miio.markdown
@@ -129,7 +129,7 @@ automation:
- service: vacuum.xiaomi_clean_zone
data_template:
entity_id: vacuum.xiaomi_vacuum
- repeats_template: '{{states.input_number.vacuum_passes.state|int}}'
+ repeats: '{{states.input_number.vacuum_passes.state|int}}'
zone: [[30914,26007,35514,28807], [20232,22496,26032,26496]]
```
Array with inline zone:
@@ -144,7 +144,7 @@ automation:
- service: vacuum.xiaomi_clean_zone
data_template:
entity_id: vacuum.xiaomi_vacuum
- repeats_template: '{{states.input_number.vacuum_passes.state|int}}'
+ repeats: '{{states.input_number.vacuum_passes.state|int}}'
zone:
- [30914,26007,35514,28807]
- [20232,22496,26032,26496]
From a07e670fa685171b97e06bfcef3b5a8763052f14 Mon Sep 17 00:00:00 2001
From: Tertius
Date: Sun, 28 Apr 2019 23:48:21 +0200
Subject: [PATCH 30/44] Add comment to value_template option (#9256)
* Add comment to value_template option
When accidently included in the config (as seen in many examples) it may cause a trivial sensor item not to work for a neewbie of HA like me
* :pencil2: Tweak
---
source/_components/binary_sensor.mqtt.markdown | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/source/_components/binary_sensor.mqtt.markdown b/source/_components/binary_sensor.mqtt.markdown
index b766216f130..6b045b509e7 100644
--- a/source/_components/binary_sensor.mqtt.markdown
+++ b/source/_components/binary_sensor.mqtt.markdown
@@ -86,7 +86,7 @@ device_class:
required: false
type: string
value_template:
- description: "Defines a [template](/docs/configuration/templating/#processing-incoming-data) to extract a value from the payload. Available variables: `entity_id`."
+ description: "Defines a [template](/docs/configuration/templating/#processing-incoming-data) to extract a value from the payload. Available variables: `entity_id`. Remove this option when 'payload_on' and 'payload_off' are sufficient to match your payloads."
required: false
type: string
force_update:
From 1399c324a06941ba5c1d9a3ab9839e868500dfd5 Mon Sep 17 00:00:00 2001
From: timfosse <32069841+timfosse@users.noreply.github.com>
Date: Mon, 29 Apr 2019 00:19:00 +0200
Subject: [PATCH 31/44] Added info for HeatIt Scene Controllers (#9023)
* Update device-specific.markdown
Added info for the wall switches/scene controllers from HeatIt/ThermoFloor:
https://www.heatit.com/wp-content/uploads/2018/11/Heatit-Z-Push-Button-2.pdf
https://www.heatit.com/wp-content/uploads/2018/11/Heatit-Z-Push-Button-8.pdf
* :pencil2: Tweak
* :pencil2: Tweak
* :pencil2: Tweak
---
source/_docs/z-wave/device-specific.markdown | 42 ++++++++++++++++++++
1 file changed, 42 insertions(+)
diff --git a/source/_docs/z-wave/device-specific.markdown b/source/_docs/z-wave/device-specific.markdown
index 845dc0fa1d9..aacb9b3da27 100644
--- a/source/_docs/z-wave/device-specific.markdown
+++ b/source/_docs/z-wave/device-specific.markdown
@@ -624,4 +624,46 @@ switch:
value_id: "{{ state_attr('sensor.scene_contrl_indicator','value_id') }}"
value: "{{ states('sensor.scene_contrl_indicator')|int - 16 }}"
```
+
+### {% linkable_title HeatIt/ThermoFloor Z-Push Button 2/8 Wall Switch %}
+
+To get the Z-Push Button 2 or the Z-Push Button 8 working in Home Assistant, you must first edit the `COMMAND_CLASS_CENTRAL_SCENE` in your `zwcfg` file.
+
+1. Go the Z-Wave control panel in Home Assistant and make a note of the node number your wall switch has been assigned.
+2. *Stop* Home Assistant.
+3. Make a backup of your `zwfcg` file, just in case.
+4. In the `zwcfg` file, find the `Node id` that corresponds to the number you noted in the first step.
+5. Within the `Node id` you identified, highlight everything between `` (inclusive) and paste in the following:
+ - 5.1 For the Z-Push Button 2:
+
+ ```xml
+
+
+
+
+
+ ```
+
+ - 5.2 For the Z-Push Button 8:
+
+ ```xml
+
+
+
+
+
+
+
+
+
+
+
+ ```
+
+6. Save the changes you made the `zwcfg` file and start Home Assistant back up.
+
+Button presses will trigger `zwave.scene_activated` with the following:
+
+- `scene_id`: the number of the button you press from top left (1) to bottom right (8)
+
{% endraw %}
From ea948837aa38afd660a509140078f2efb6eedbef Mon Sep 17 00:00:00 2001
From: Fredrik Erlandsson
Date: Mon, 29 Apr 2019 00:22:10 +0200
Subject: [PATCH 32/44] Daikin documentation for 0.91 (#9134)
* Added support for Daikin AirBase units (#9033)
* updated text of supported hardware
* updated documentation
* add note for zones
---
source/_components/daikin.markdown | 36 ++++++++++++++++++++----------
1 file changed, 24 insertions(+), 12 deletions(-)
diff --git a/source/_components/daikin.markdown b/source/_components/daikin.markdown
index b927240b3aa..c01d5d8dff3 100644
--- a/source/_components/daikin.markdown
+++ b/source/_components/daikin.markdown
@@ -1,7 +1,7 @@
---
layout: page
title: "Daikin AC"
-description: "Instructions on how to integrate Hive devices with Home Assistant."
+description: "Instructions on how to integrate Daikin AC devices with Home Assistant."
date: 2017-12-10 21:00
sidebar: true
comments: false
@@ -30,17 +30,17 @@ There is currently support for the following device types within Home Assistant:
## {% linkable_title Supported hardware %}
-This component supports the European versions of Daikin AC (BRP069A[41,42,43,45]) and AU AirBase units (BRP15B61).
-
-The Australian version of the Daikin Wifi Controller Unit BRP072A42. Confirmed working on a Daikin Cora Series Reverse Cycle Split System Air Conditioner 2.5kW Cooling FTXM25QVMA with operation mode, temp, fan swing (3d, horizontal, vertical) which is powered by the [DAIKIN Mobile Controller](https://itunes.apple.com/au/app/daikin-mobile-controller/id917168708?mt=8)
-
-Some models do not support setting of fan speed or fan swing mode.
-
-Please note that some AC devices may report outside temperature only when they are turned on.
+- The European versions of the Wifi Controller Unit (BRP069A41, 42, 43, 45), which is powered by the [Daikin Online Controller](https://play.google.com/store/apps/details?id=eu.daikin.remoapp) application.
+- The Australian version of the Daikin Wifi Controller Unit BRP072A42. Confirmed working on a Daikin Cora Series Reverse Cycle Split System Air Conditioner 2.5kW Cooling FTXM25QVMA with operation mode, temp, fan swing (3d, horizontal, vertical) which is powered by the [DAIKIN Mobile Controller](https://itunes.apple.com/au/app/daikin-mobile-controller/id917168708?mt=8) ([Android version](https://play.google.com/store/apps/details?id=eu.daikin.remoapp)) application.
+- The Australian version of the Daikin Wifi Controller for **AirBase** units (BRP15B61), which is powered by the [Daikin Airbase](https://play.google.com/store/apps/details?id=au.com.daikin.airbase) application.
## {% linkable_title Configuration %}
-To automatically add all your Daikin devices (ACs and associated sensors) into your Home Assistant installation, add the following to your `configuration.yaml` file:
+The Daikin component can be configured in three ways.
+
+- Automatically via the [discovery]({{site_root}}/components/discovery/) component.
+- Via the Home Assistant user interface where it will let you enter the IP-address of your Daikin AC.
+- Or via the `configuration.yaml` file by adding the following:
```yaml
# Full manual example configuration.yaml entry
@@ -62,11 +62,15 @@ hosts:
The `daikin` climate platform integrates Daikin air conditioning systems into Home Assistant, enabling control of setting the following parameters:
- **mode** (cool, heat, dry, fan only or auto)
-- **fan speed** (on supported models)
- **target temperature**
-- **swing mode** (on supported models)
+- **fan speed**
+- **swing mode**
-Current temperature is displayed.
+Current inside temperature is displayed.
+
+
+Some models do not support setting of **fan speed** or **swing mode**.
+
## {% linkable_title Sensor %}
@@ -75,6 +79,14 @@ The `daikin` sensor platform integrates Daikin air conditioning systems into Hom
- Inside temperature
- Outside temperature
+
+Some models only report outside temperature when they are turned on.
+
+
## {% linkable_title Switch %}
Daikin AirBase units exposes zones (typically rooms) that can be switched on/off individually.
+
+
+Zones with the name `-` will be ignored, just as the AirBase application is working.
+
\ No newline at end of file
From 78402c7487cce82ce3dbd63a920c21015a03b8d4 Mon Sep 17 00:00:00 2001
From: Klaas Schoute
Date: Mon, 29 Apr 2019 00:23:25 +0200
Subject: [PATCH 33/44] :pencil2: Update the AWS documentation (#9345)
---
source/_components/aws.markdown | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/source/_components/aws.markdown b/source/_components/aws.markdown
index 6b92f58ff3c..3ae8e046576 100644
--- a/source/_components/aws.markdown
+++ b/source/_components/aws.markdown
@@ -59,6 +59,11 @@ profile_name:
description: A credentials profile name.
required: false
type: string
+validate:
+ description: Whether validate credential before use. Validate credential needs `IAM.GetUser` permission.
+ required: false
+ default: true
+ type: boolean
{% endconfiguration %}
### {% linkable_title Configuration for notify %}
From c090e74c56b13a61d5923080b90826451a48894c Mon Sep 17 00:00:00 2001
From: Jason Hu
Date: Sun, 28 Apr 2019 15:28:09 -0700
Subject: [PATCH 34/44] Rewrite the Alexa Smart Home Skill integration
document. (#8958)
* Rewrite Alexa Smart Home Skill document
* :pencil2: Tweak
* :pencil2: Tweak (last round)
---
source/_components/alexa.smart_home.markdown | 200 ++++++++++++++++--
.../components/alexa/account_linking.png | Bin 0 -> 459258 bytes
.../components/alexa/create_a_new_skill.png | Bin 0 -> 623661 bytes
.../create_iam_role_attach_permission.png | Bin 0 -> 266805 bytes
.../alexa/lambda_function_env_var.png | Bin 0 -> 270668 bytes
5 files changed, 184 insertions(+), 16 deletions(-)
create mode 100644 source/images/components/alexa/account_linking.png
create mode 100644 source/images/components/alexa/create_a_new_skill.png
create mode 100644 source/images/components/alexa/create_iam_role_attach_permission.png
create mode 100644 source/images/components/alexa/lambda_function_env_var.png
diff --git a/source/_components/alexa.smart_home.markdown b/source/_components/alexa.smart_home.markdown
index cfe4552233a..b0d12b61cea 100644
--- a/source/_components/alexa.smart_home.markdown
+++ b/source/_components/alexa.smart_home.markdown
@@ -13,12 +13,6 @@ featured: false
ha_release: "0.54"
---
-## {% linkable_title Automatic setup via Home Assistant Cloud %}
-
-With [Home Assistant Cloud](/cloud/), you can connect your Home Assistant instance in a few simple clicks to Amazon Alexa. With Home Assistant Cloud you don't have to deal with dynamic DNS, SSL certificates or opening ports on your router. Just log in via the user interface and a secure connection with the cloud will be established. Home Assistant Cloud requires a paid subscription after a 30-day free trial.
-
-For Home Assistant Cloud Users, documentation can be found [here](https://www.nabucasa.com/config/amazon_alexa/).
-
## {% linkable_title Amazon Alexa Smart Home %}
While the Skills API described above allows for arbitrary intents, all
@@ -32,9 +26,175 @@ Amazon provides a Smart Home API for richer home automation control. It takes
considerable effort to configure. The easy solution is to use
[Home Assistant Cloud](/components/cloud/).
-If you don't want to use Home Assistant Cloud and are willing to do the
-integration work yourself, Home Assistant can expose an HTTP API which makes
-the integration work easier. Example configuration:
+However, config Amazon Alexa Smart Home Skill is not a easy job, you have to allow
+your Home Assistant accessible from Internet, and you need to create Amazon Developer
+account and an Amazon Web Service account.
+
+
+With [Home Assistant Cloud](/cloud/), you can connect your Home Assistant instance in a few simple clicks to Amazon Alexa. With Home Assistant Cloud you don't have to deal with dynamic DNS, SSL certificates or opening ports on your router. Just log in via the user interface and a secure connection with the cloud will be established. Home Assistant Cloud requires a paid subscription after a 30-day free trial.
+
+
+For Home Assistant Cloud Users, documentation can be found [here](https://www.nabucasa.com/config/amazon_alexa/).
+
+
+### {% linkable_title Requirements %}
+
+- Amazon Developer Account. You can sign on [here](https://developer.amazon.com).
+- An [AWS account](https://aws.amazon.com/free/) is need if you want to use Smart Home Skill API. Part of your Smart Home Skill will be hosted on [AWS Lambda](https://aws.amazon.com/lambda/pricing/). However you don't need worry the cost, AWS Lambda allow free to use up to 1 millions requests and 1GB outbound data transfer per month.
+- Smart Home API also needs your Home Assistant instance can be accessed from Internet. We strongly suggest you host HTTPS server and use validation certificate. Read more on [our blog](/blog/2015/12/13/setup-encryption-using-lets-encrypt/) about how to set up encryption for Home Assistant. When running Hass.io, using the [Let's Encrypt](/addons/lets_encrypt/) and [Duck DNS](/addons/duckdns/) add-ons is the easiest method.
+
+### {% linkable_title Create Your Amazon Alexa Smart Home Skill %}
+
+- Sign in [Alexa Developer Console][alexa-dev-console], you can create your free account on the sign in page.
+- Go to `Alexa Skills` page if you are not, click `Create Skill` button to start the process.
+- Input `Skill name` as you like, select your skill's `Default language`.
+- Select `Smart Home` and `Provision your own`, then click `Create skill` button at top right corner.
+
+
+
+- In next screen, make sure *v3* is selected in `Payload version`.
+- Now, you have created a skeleton of Smart Home skill. Next step we will do some "real" developer work. You can keep Alex Developer Console opened, we need change the skill configuration later.
+
+### {% linkable_title Create Your Lambda Function %}
+
+Alexa Smart Home skill will trigger a AWS Lambda function to process the request, we will write a small piece of code hosted as an Lambda function basically redirect the request to your Home Assistant instance, then Alexa integration component in Home Assistant will process the request and send back the response. Your Lambda function will delivery the response back to Alexa.
+
+
+There already are some great tutorials and solutions in our community to achieve same goal "Create your Alexa Smart Home Skill to connect Home Assistant", for example: [Haaska](https://github.com/mike-grant/haaska/wiki).
+
+You can follow this document or others, but you cannot mixed-match different solutions since they may have different design.
+
+Amazon also provided a [step-by-step guide](https://developer.amazon.com/docs/smarthome/steps-to-build-a-smart-home-skill.html) to create a Smart Home Skill, however you have to adapt its sample code to match Home Assistant API.
+
+
+OK, let's go. You first need sign in your [AWS console](https://console.aws.amazon.com/), if you don't have an AWS account yet, you can create a new user [here](https://aws.amazon.com/free/) with 12-month free tire benefit. You don't need worry the cost if your account already pass the first 12 months, AWS provides up to 1 million Lambda request, 1GB outbound data and all inbound data for free, every month, all users. See [Lambda pricing](https://aws.amazon.com/lambda/pricing/) for details.
+
+#### {% linkable_title Create an IAM Role for Lambda %}
+
+First thing you need to do after sing in [AWS console](https://console.aws.amazon.com/) is to create an IAM Role for Lambda execution. AWS has very strict access control, you have to specific define and assign the permissions.
+
+- Click `Service` in top navigation bar, expand the menu to display all AWS services, click `IAM` under `Security, Identity, & Compliance` section to navigate to IAM console. Or you may use this [link](https://console.aws.amazon.com/iam/home)
+- Click `Roles` in the left panel, then click `Create role`, select `AWS Service` -> `Lambda` in the first page of the wizard, then click `Next: Permissions`
+- Select `AWSLambdaBasicExecutionRole` policy, then click `Next: Tags`. (Tips: you can use the search box to filter the policy)
+
+
+
+- You can skip `Add tags` page, click `Next: Review`.
+- Give your new role a name, such as `AWSLambdaBasicExecutionRole-SmartHome`, then click `Create role` button. You should be able to find your new role in the roles list now.
+
+#### {% linkable_title Create a Lambda function and add code %}
+
+Next you need create a Lambda function.
+
+- Click `Service` in top navigation bar, expand the menu to display all AWS services, click `Lambda` under `Compute` section to navigate to Lambda console. Or you may use this [link](https://console.aws.amazon.com/lambda/home)
+- **IMPORTANT** Your current region will be displayed on the top right corner, make sure you select right region base on your Amazon account's country:
+ * **US East (N.Virginia)** region for English (US) or English (CA) skills
+ * **EU (Ireland)** region for English (UK), English (IN), German or French (FR) skills
+ * **US West (Oregon)** region for Japanese and English (AU) skills.
+- Click `Functions` in the left navigation bar, display list of your Lambda functions.
+- Click `Create function`, select `Author from scratch`, then input a `Function name`.
+- Select *Python 3.6* or *Python 3.7* as `Runtime`.
+- Make sure select *Use an existing role* as `Execution role`, then select the role you just created from `Existing role` list.
+- Click `Create function`, then you can config detail of Lambda function.
+- Under `Configuration` tab, expand `Designer`, then click `Alexa Smart Home` in the left part of the panel to add a Alexa Smart Home trigger to your Lambda function.
+- Scroll down little bit, you need input the `Skill ID` from the skill you created in previous step. (tips: you may need switch back to Alexa Developer Console to copy the `Skill ID`.
+- Click your Lambda Function icon in the middle of the diagram, scroll down you will see a `Function code` window.
+- Clear the example code, copy the Python script from:
+- Scroll down a little bit, you will find `Environment variables`, you need add 4 environment variables:
+ * BASE_URL *(required)*: your Home Assistant instance's Internet accessible URL with port if need
+ * NOT_VERIFY_SSL *(optional)*: you can set it to *True* to ignore the SSL issue, if you don't have a valid SSL certificate or you are using self-signed certificate.
+ * DEBUG *(optional)*: set to *True* to log the debug message
+ * LONG_LIVED_ACCESS_TOKEN *(optional, not recommend)*: you will connect your Alexa Smart Home skill with your Home Assistant user account in the later steps, so that you don't need to use long-lived access token here. However, the access token you got from login flow is only valid for 30 minutes. It will be hard for you to test lambda function with the access token in test data. So for your convinces, you can remove the access token from the test data, [generate a long-lived access token][generate-long-lived-access-token] put here, then the function will fall back to read token from environment variables. (tips: You did not enable the security storage for your environment variables, so your token saved here is not that safe. You should only use it for debugging and testing purpose. You should remove and delete the long-lived access token after you finish the debugging.)
+
+
+- Now scroll up to the top, click `Save` button.
+- You need copy the ARN displayed in the top of the page, which is the identify of this Lambda function. You will need this ARN to continue Alexa Smart Home skill configuration later.
+
+#### {% linkable_title Test the Lambda function %}
+
+Now, you have created the Lambda function, before you can test it, you have to set up your Home Assistant. Put following minimal configuration to your configuration.yaml, it will exposures all of your supported device and automation to Alexa. Check the [configuration section](#alexa-component-configuration) if you want more control of the exposure.
+
+```yaml
+alexa:
+ smart_home:
+```
+
+After your Home Assistant restarted, back to `AWS Lambda Console`, you are going to do some tests.
+
+On the top of your Lambda function configuration page, there is a `Test` button, click the drop down button at left of `Test` button, click `Configure test events`, you can `Create new test event` using following data:
+
+```json
+{
+ "directive": {
+ "header": {
+ "namespace": "Alexa.Discovery",
+ "name": "Discover",
+ "payloadVersion": "3",
+ "messageId": "1bd5d003-31b9-476f-ad03-71d471922820"
+ },
+ "payload": {
+ "scope": {
+ "type": "BearerToken"
+ }
+ }
+ }
+}
+```
+
+This test event is a `Discovery` directive, Home Assistant will response with a list of your devices Alexa can interact with. This test data is lack of `token` in `payload.scope`, your Lambda function will read the `LONG_LIVED_ACCESS_TOKEN` from environment variable.
+
+Click `Test` button. If you don't have `LONG_LIVED_ACCESS_TOKEN`, you will get a `INVALID_AUTHORIZATION_CREDENTIAL` response as the execution result.
+
+Now, you can login to your Home Assistant and [generate a long-lived access token][generate-long-lived-access-token]. After you put your long-lived access token to the `Environment variable`, do not forget click `Save` button before you `Test` again.
+
+This time, you will get a list of your devices as the response. 🎉
+
+### {% linkable_title Config the Smart Home Service Endpoint %}
+
+Now removed the long-lived access token if you want, copied the ARN of your Lambda function, then back to [Alexa Developer Console][alexa-dev-console]. You will finish the configuration of the Smart Home skill.
+
+- Sign in [Alexa Developer Console][alexa-dev-console], go to `Alexa Skills` page if you are not.
+- Find the skill you just created, click `Edit` link in the `Actions` column.
+- Click `SMART HOME` in the left navigation bar of build page.
+- Fill in `Default endpoint` under `2. Smart Home service endpoint` using the `ARN` you copied from your Lambda function configuration.
+
+### {% linkable_title Account Linking %}
+
+Alexa can link your Amazon account to your Home Assistant account. Therefore Home Assistant can make sure only authenticated Alexa request be able to access your home's devices. In order to link the account, you have to make sure your Home Assistant can be accessed from Internet.
+
+- Sign in [Alexa Developer Console][alexa-dev-console], go to `Alexa Skills` page if you are not.
+- Find the skill you just created, click `Edit` link in the `Actions` column.
+- Click `ACCOUNT LINKING` in the left navigation bar of build page
+- Input all information required. Assuming your Home Assistant can be accessed by https://[YOUR HOME ASSISTANT URL:PORT]
+ * `Authorization URI`: https://[YOUR HOME ASSISTANT URL:PORT]/auth/authorize
+ * `Access Token URI`: https://[YOUR HOME ASSISTANT URL:PORT]/auth/token
+ * `Client ID`:
+ - https://pitangui.amazon.com/ if you are in US
+ - https://layla.amazon.com/ if you are in EU (not verified yet)
+ - https://alexa.amazon.co.jp/ if you are in JP and AU (not verified yet)
+
+ The trailing slash is important here.
+
+ * `Client Secret`: input anything you like, Home Assistant does not check this field
+ * `Client Authentication Scheme`: make sure you selected *Credentials in request body*. Home Assistant does not support *HTTP Basic*.
+ * `Scope`: input `smart_home`, Home Assistant is not using it yet, we may use it in the future when we allow more fine-grained access control.
+- You can leave `Domain List` and `Default Access Token Expiration Time` as empty.
+
+
+
+- Click `Save` button in the top right corner.
+- Next, you will use Alexa Mobile App or [Alexa web-based app](#alexa-web-based-app) to link your account.
+ * Open the Alexa app, navigate to `Skills` -> `Your Skills` -> `Dev Skills`
+ * Click the Smart Home skill you just created.
+ * Click `Enable`.
+ * A new window will open to direct you to your Home Assistant's login screen.
+ * After you success login, you will be redirected back to Alexa app.
+ * You can discovery your devices now.
+- Now, you can ask your Echo or in Alexa App, *turn on bedroom* 🎉
+
+### {% linkable_title Alexa Component Configuration %}
+
+Example configuration:
```yaml
alexa:
@@ -57,12 +217,6 @@ alexa:
switch.stairs:
display_categories: LIGHT
```
-This exposes an HTTP POST endpoint at `http://your_hass_ip/api/alexa/smart_home`
-which accepts and returns messages conforming to the
-[Smart Home v3 payload](https://developer.amazon.com/docs/smarthome/smart-home-skill-api-message-reference.html).
-You must then create an Amazon developer account with an Alexa skill and Lambda function to integrate this endpoint.
-
-[Haaska](https://github.com/mike-grant/haaska/wiki) provides a step-by-step guide and necessary assets to help you create the Alexa skill and AWS Lambda.
The `endpoint`, `client_id` and `client_secret` are optional, and are only required if you want to enable Alexa's proactive mode. Please note the following if you want to enable proactive mode:
@@ -70,5 +224,19 @@ The `endpoint`, `client_id` and `client_secret` are optional, and are only requi
- The `client_id` and `client_secret` are not the ones used by the skill that have been set up using "Login with Amazon" (in the [Alexa Developer Console][amazon-dev-console]: Build > Account Linking), but rather from the "Alexa Skill Messaging" (in the Alexa Developer Console: Build > Permissions > Alexa Skill Messaging). To get them, you need to enable the "Send Alexa Events" permission.
- If the "Send Alexa Events" permission was not enabled previously, you need to unlink and relink the skill using the Alexa App, or else Home Assistant will show the following error: "Token invalid and no refresh token available."
-[amazon-dev-console]: https://developer.amazon.com
+
+### {% linkable_title Alexa web-based app %}
+
+The following is a list of regions and the corresponding URL for the web-based Alexa app:
+
+* United States:
+* United Kingdom:
+* Germany:
+* Japan:
+* Canada:
+* Australia:
+* India:
+
+[alexa-dev-console]: https://developer.amazon.com/alexa/console/ask
[emulated-hue-component]: /components/emulated_hue/
+[generate-long-lived-access-token]: https://developers.home-assistant.io/docs/en/auth_api.html#long-lived-access-token
diff --git a/source/images/components/alexa/account_linking.png b/source/images/components/alexa/account_linking.png
new file mode 100644
index 0000000000000000000000000000000000000000..21de02ca2f3a26fed33ac9a9df8ed2b9a957bf71
GIT binary patch
literal 459258
zcmbSzX*|?z`#w@iMVn-=R6;1S8>FJhZj4=J-}h|>qZD_tRLDMK-^P-i8A}n8W$c5&
zWM2k@F~&asZ};;&pa0wXy_pw2Gv>OkIj{3P&f_@F?>ikWwX@8e%ye{gXP-WKq(?`0
zTA7aSl*P#tz+Y~j>CL30yGr-;(E|g2i-QDwD5X
z4WVN=`Ij$WW%-rq_EH7em>&Q2qJeEP^eP`ffx+VS(M@+}C5J^YB=#^{0ed%xG;`iZ1*wBr=too@}
zUdf;l57zMpA2-B2`xaj)oUU@yxP{;P)LCg^J8i8vk$V;#YOKPPb;TSK?V-axrnum}
z?3Gg<<#=aTpQ^Ln(bTkrT7)2sQYJ~{c|S{3Jy3*0M5
z-z_4)>c4k`tw&~gs?MwLc>1wWgK96nczfTxJF4w=?_0_GFo}NGgbCMyBp;NI=aTcg
z?d{3i;!J-PMXv%+Gcuki@O~86+>C-eDJ0I#ydFU+x%6hB*97ZxsSqf0PN&Zp8St>6pGLlCpZ
zSVd5NxSdwCDw_pxw{_ozNf&z8&@cvLS2^MR26M~-<5^=lcdbE
z;ZNtw-z0o$O>VLbxBi}{Grlk3ZA)Z*lTHSoKf(W3@%hW_tK%u1(I572PlU5;kwFPXT2aA+WgcOy0)JA|uejtmnaPE6t~rVFSCPuCXH5EILdZA)7r>>Po&w)!7ny
zj^)nPU1HoQNo8i1c*#3v57>l-v)3e<8w%eQO`S*hBuL3WK=yCc-0C}p{)N3D{CA}(
zoz5x!dX|vz?YosmPT4sEME{j*HY5G-DYB=bGRwL;4+uSZyp0=M@ZTrsUS$%oENwBY
zw}v0V4-CZda%E-nDMFh4P&V?hzXJSh-#@0msUdifi!qoEyUZL}boKa&y7=-m#heji
z{x~!|W&u`b9#8*wrOeETLDdeQzX^^A+L1*Gsh*VE9{EPDzIdN<+k(VLSvLnA@P)9P
z(c3+`cu6lW17Fg${oOy!qDse3DmW`rzx}j#0=-SA@BtbR-t2+dh@78-ieM&I=z^T*
z-339#%KPFRe|OftTAG6!BcTg}Ng&W2%DO?Jdz&sRL3UsAce(-R
zYQWzT`c2A>(vV}WkYy$K@+{X(obSpP68f&`9p;FVLeH2e1D$xsl4B#jDHocIbM*PT
z;wEg#X?KOM{Z**B)1QnJ)PFE_^Ji+TU$XyvoK~6~R0}aNno*#(Aq1oW7tjHFNVU-=
z6O!ZOZ9cL0l3$k!R((@G!FMe@geP^N&XJ^Mtg$@jwZ#aqLE*p*b1}U5j_B(VU(>K?
zEO*9iT1pU{g)kg7^mnl9wiLt7W{m>prNx(CylyO>;-ac{7qnp#RU_RQKyJP<*g~bO
zo6?POUdZ)qP!rnPbV~KJsK&?FQ$+wF+FMxTeU1)PP<|JIy4P&lY&(8dD(L%hfjWGDd6;d(c9?4>#!Ju=kd#0xU#(5
z<(;mDxOzKz^Yqi%-PV7Dd|sV?kZv}r&V2g4jF_vWprD0-)@7~SKFjBWEtchz#TuY`
zFE8m%CHh4=)KAv5j1L-)@)HDvzlqwdZJOADv!9<9A<(t#_U*lw@qBXT!xwI*l_YIa
zU3pRzl*>m0E5uNLmlE80ncswk374D2lb3s$UB5nEv3^DeD2OC1|J5MHtxQ7KYUo*Dgdi9
zxp7nSX;~T5L1T=P)VdAmz(dh(IGeX;s1O`A+^aa@13v5uYc;JV4WF(c3>+Q1H>m@=
zpI1BBvH%plp+a#g1+pXJlB$y3&fQy<5Po}R&?DwcAn10wb3i;C8o?keM;m%NEsb0r
zoK7l7^3zv3aam+MF4dMO$n8!mg)B6XoTP@muDiqAr8p&KpOOcHu~B^smZj~>O0Pgl
zMIVP8hpKrngBu@@YOjWboPM?O5IGpMDnXkVt#pxYWi
z91$FtQ;YqpjePfHtVUl#R&NXI+w
zf7r6blPVUnX$_`oc2RMwTTit=3vb?IOn+a($e5mnzZfElUig%T1<^C~E?9KS-1`&M
z%8pjHwzhd27I){|!wRmF{t-J~2@J^2{N2-zy&$Y&TI73(k^MiTXVL23yJq|Klq2=-
z*Ee44PO9kWYVcbhOl@nX=LAykUCNrb!k{azL;BWjj{&(F4YqLl-#;Sr|NTcS
zSMK=7Q;6sMoa6)V)+a&hd$lV)SkfKy90xBYcZ|h*Tbx7x7Xj-klkT#a+-_V1m{6Ox
z&>d2{V|4R7a^2Q31KXhu;b(HSr4E?d$+5x^-WuZ)7!(sGzAD(@+6vys3+SAq0Oa@#x}fM
zqMdNdH+9<;cs5$=g;o*x0HJ-oV~;UCsCjYdI&e}I=R>xaKfdfgE(DMU3?d3OQGb%w
zWQG2l)+~_0&0Y;dd(~XsyNEDkg%oCYFAQoku0KyxNc)hF;k{Dy=8c2}vUT)(+~AGY
zHs1AJ^pVkBCCc6A8B3A0g8m%!<(&?h2@euof*SPT+xGIIvi#_(ug|K4ko;Xxz|KX-
zfKJL-?W!MzQ(-g<&)J`sg06Ba0KpHlL>ttg_XV7KcTHjfugzXj_yS?4ERK&&Z5`Ku
zIG~x7Zm;{gSy|}ffV8-{dDtdA`;&OXc(Zn7dghXRP`)1Pf$=#BWcS$;6Mfxd0-c
zW8ac}a}M?@qPsWU7$zao59!7rpLQ+7=_7PYN~zLq9yiJI4eys1=JFo
z@mQ)Y1v-c_Hz##-i@a~mWJ5I$*E+b#E5PG_vQ=)bvfES{ZLO6LK?8cGS3KVGgh)v#
zS`w$aTP|{P79B5*G$_^(>yex|nLzdTO#KwA-(W0d=@n7VtH`RX7L%6u)xKS%YQX9U
zyb}3BJqDC2b`^e>C9*I(pZ=m*DmCP#DrF0|t!SP=SE(&auDU{RzhK6gPNv+xx5L1G
zl`iO&65Y7spCrYF56brTwbwhr8++dmdDrsQ&{dKPtUR>B-`S!O$INo7AEIF=sBp&s
zzN(ZT9mCQ|6nhcGVPb7nU)=tMp0$uXQInFEhN1Fh0WWiP;o5|>LZQAn
zpPeT~CVqTzL~-nDdZ*~i;ldA}U1xJBK(ixltY$0}9(qHT4ar~mvc
zSX{f~pOfv6Xruzv%?NF_pjM^9O9~~#V;vM)JAWsDJ1Lbn9{ZHlO<_Jnkir~ww?B8F>RL~G
zYEprJHrZIZt9bX~A0g&nui5_j=O2TDf1Z?*XsZy_{09x4afxw7xh^nRLl0281}3^w
zlF6i%qso`j+*GKD-9_zoK1g6a2}hZGa9S^>imyI1-_yohNYtXnZ%r&^0ufYMl#br8
zbAg@d`_|I#$%DBK6i*l^aM$coo5^G2-=!HPjel^^+0Oohwcl-9}1ugb46duH&
z{#nnO;K5v?i=8rpnIyApyR7>1xG}{=-!527!xy@|$FrGd)T^kxX1j9kLqqEMN|5{F
zm$t_H8U(lTY0s3`jOlzU-Z65O4jF}DA(TOfdqqye#(Nfi`+6smCDijfV=F>t$(({!LsZ8-5g|oR!z(9niz9`w{A}B{9#tf3yqXw@jUKKcL|58^rXidV>$4Lg4c3
z*RL76W!r30R}ID;f(~1>Id_}SG=+tQZv`3DNH@hUh9X?>y*N$AO
zs3Ix^Gg|VJi-aD19w@sgur-+9p|!w4;Xd?Ml59l35>iV5AVi|<@JR=*ZDR0v{#2}m
zFV~Z8DY}VYn`4}t-}wtIR$o5;EF61iaRc#Gobb-Ak&s?c+D%?;Bsoq#Gbhyv<3L=J
z80y+^AyoG!c~_hyBBB`{%{{=XbK3lp*M09WEJnIGiu7(?nvkC2W?zJ^a!g!E-tS>DXsFgG{2
zX>xuli2x2$3!LU?pd4N3Ml}71#e=(-hwj@9J|9AF>5*a5L~+Eckr{!l)*2=I$;>%9
z|DAvElt>euqQos}TzyD3_;+)VI!_D-7Uxd{zBf<^AO#ADHrqKWtEF
zr{aW7pT2l;-U3#%?_Qk*##gTTfuu$PqB|x|m;)dOyAAuwz5TsHe`{c#Fs|7_U3mI*
zL(XHWqU{>|&bnSPBz`_b`JwwLYZ*a;3>anjvc5EN%IDsCh#%H$U}68XI`@?o3`*@8uBZ8?PM|aMe68`GPS-m
zE9`9G_>7&;(X>tS-Js}!4Itp6N?J%=fe#?VsF_XfB@T|{yDrs}=GEd@nJoNL*pNo~
zvGSR`?qNJ%;G%a!mBu`3ua!LsiS?i1kx&lYu5#%1wDE!YGFiX*m@+xhy)Xfb>Rl?Y
zv9(1Gjmk#zC}q%!_btrj$6Z*KsN+|HjwsNCcB$svi{Y%F`d0BnRWOpG4{Ul#fofP|
zs2Q}`<1{~*m{sODR*jOsMJA(`aYOym;>Q-6NTVnWUtsf8y@_O@(-ca->s%?Sb1`w;
z>sQ5CwN=f)3t%fqu3ilg#`h;ny}ar8NjASF(39|(T9yLax9U;pMIKl$3vPaX`;}#J
zGx@ERysR?Bp{LWh#IbTDJ%m_dM$SR-t{y0jcs911^TE|?2;QN*OT)4;t^M&R%J}yL
zP$35OVD9JVVR;D)owQEJTC>iRCvXiNyD<+Az!Ed*V#c^!p1+(X77P3e)^6u8fhiXJTQmSqo
zmqJ%5Mu61ZKJ$l?$kD}oovD|{kK0PcZOxCB`@WKOS*=kbCV7-XE8fWFJ+2^bHUHB%
zucRd5`gu4Q(?_gI)qJL*J=~W?+X*zc6gBFFTKhnydIqh2$sD4sN)5#Vjr-WHSNRd>
zebywKr##+Yrwh6^$ghNLYoS)@B6)c(T}d1blm>wwR!u=`%)a`nAJ-zL5yU;>X^$CHc~J^R^GYbeLFq`Zo0QE}36b
zhgb%@9p#WCipvf9E{+oHe8g2Uh>C&I5S$gi(Jr0@>(c6GhZI=*{)`fWNMRAj!eRyr
z#hQGepFe6-bz@+7J9wiXA=qW2OarsM0=6D4cl3YEV-D{IkG{g4O{rNvYJ9j^R1-XR
zeW1D4#3#t0O>Rw;e-S$46V>%1C@gxIof!N>Vy^lY&Y@>;V|1S@tx4K-7u>WuW_2_=
zS0y&UBTY!;*}0D%lX9G#bf}pH&POR#NuNSIf?uT(9^RX;cv;VlS
zoLnI6kI)^W2R2|Y#-I1-IP`EyH4|a9JyRI%NX_s)m_i)VYZyzg@pF|@Y0@0?9eNk*
zA?lz6b1QMg6(J50u4CINzH6hXCfY78Fs9UPP+9efBr*B!p=7sZee)_T@L*Q(@n?}(
zP|so`4;RdgLke^G&Tj7#=Nclk2wU1%j+jh2)bl;3gsRw^;&1QjY3-ZKGLS{TR!@k~
z(esSp93LK@>OU$;@*o&1UB26Rk)@5h&vKtNkq}>wAKFQ@uP~k~HyR{ECdvb_(<`jWzZ2?IwDA%cfFa|EB;*eeK{@T*IxAgM>Pm(RW8aum9}7EveRNzE
z;sc#b)CElpVNuwq4=&^sx50KKym&UwI?w42+$opS48d{oa5{yuOkTMXZbjw_LCE{0
zx;jA{>OP+@4{~0AlJ@i`EV_gL1WG^U^SlfsV~$;w#jqVC-p-L0;O2@0;bfg~^#;hs
zeKbd=q)MdpWDt@=&f9xps6J_XRmnc=Nt!u@IM^StTTvd0u5xu=y8kAHz%W;NPoxmsKE&X9b<%q?&5q2`cpEB3aaJ;N%BaOKJhfnx;bR?ENnE3yPkEx6_*!gv>Y-`TuzVpzwlQ
z*g$?P`uxq7?zIugLYqcuw|eR;i^TX{9B*pSoB*B6;9D8
zoSYL&k_TbrsYh_urEM)x>LhKH-aZRM{`zsI$^jp(;8kc?lFdf8wPm6;9UTdPr0lZ?
zs^qI(GuTyaP7Frzi7Sl2^IPshF@`lxKNmA>SEF3NLL}Yn8ky`YWeGDy*vLJtK$~b5
z?#)%|{9X*Z5c=hDFRqr^3<0DMXSQ^3+{ceEI=v>F3zPbm4y%s8-`ac4%H6n-#Y7o8
zmWEGSz*DhJj=`iB7N=^@Z%%~}Ozv)=A4&QVmz0~AiD{Nb?fI{M-W=FpVPK7Nc|Ebi
zSuc?ERF1;KsOX`Ab{2i2d~y!X-$mAa@9LBty*xy0;Y)ega__JoDrNmuVbT!
z{@c5Ij-wlt*|6=_{Pr~)WSjX&B_I!qkYL}ZRt^A+^kD(g$)5P)nc9oF3hAAV3RVNf
z^3>gSimU7D-CBph?UuavHg5u>Iu~{1*XBm&mAI}c^WRAv(i}6UP6d8Rd`Ljtd#YKA
zX**b80qvt#7*>|XWFP)i)v47b`?7>0jfouJdTVkue<+5d=(d_6d5IH_Q7G!K^Lw6$
zC-U0SnBC%JDc8i^-5Mnq1MI6LTB;X;FdSs-+a@W;hHDTcTTb_sq`q2u+iB>yHJB6-
zrZ||>psFy`en4hJ4KF5@>8F+0c{fQdy9^GWEVmpe&uS^#J*Dh+^z!Yf%Si1QXb`s|
zx4OLNIm%FBRq9daiRBOqTA~C%S63g4;v}Ed1XcB~Y`ZYpq)ZNIsztZSrII^oiudIY
zIA5){70U^VDt=oUE7ju6`CKz;9lTbg;n71K8G$udjzVD_YNA+TcQ|!&LhoX@-BEZJ
z>gyLw)#)tTQZb`!pwaLOxHJPgSWVIH?)g>1a3l|G>&SEc*VGkBCt3&w@3psk0J*iC
z+t${!kS$9JP8TedJEB(}X1Ivp$roK+6Q?Z{RuSyK{y4>g>(Qng<0GMPSD!ullXU&+
zv{t(MoXK(YLSHDf&>Yp3>q(`;ECAR>c5JY5(=v#11bfR})9oI!vqc_w@F>j6bpM
z1L4K%FCdb-brxCHr`*>yE@8|!Ebr)!d*Z%TzeaqE-E9gYzf*bm(ENlZ`C>?qo4bsi
zf3-%bK-DfTjU~qXa9YTu!XLpAA=#Xwx-f0&x7H_Y6~0t*xhC1m@X#&oMC27xhYN;h
zfc9|>x>?rM)6~O|yw
zM%@(!SPZFRW7p_WN;?v`)ibU*NtN2Eo6V^w3<&-Xsje=cMq6Pc-xDgW=N7bZ2isXx
zpulGuCpekx8Gd4=1+nX{=Le
z|LY{NWcVeo+5F^5ucj7>SpkFOD&?N9%L0~x1$nA-hc}!z=n%iVz?C
zRnNLLwF@`)pTAiZuo^yZmi6B6&=g;L@bS$((fcy_TDra6(G?d
zE=p#QX(wuaSFPHOusjVAyL8h_9avqCBS%}*mv*qm~n(1D(
zXn{$qgHeSo#c?lC*H)Q^J!Bdz*U%1kGQ{M6YBbx9-W}a0_!S(s9P&i(&$NqmmHgtW
zafRU8k-o6T)EC{THT%4sH{TV!6wWF)$vA$ItL!;bJW25TBIP_e?+dq5HpF@GKQpOW
zN@H30PgHfRUl`k)YoDiiUp9g-?Pj3!hIr<$@EZhg8l>VS>;jxe>cLbh&nLUU;7O~R
zl)5V)z{Hk&YTo*oH472&xMTH8fH5&Hjov++zC+jG-*ex5;1@GFc*5s}UzjJEg0r98
zdOF{(p=eS3BGzL2hui#{^JwyRm!(KGJioMBe$gF)v>O64n3{C+)jyMGmG$P-C2h)N
z>=lw((;k;b>82$oBua!u!@-tC`=c|XIT{Ir&Bj=ix_5w=7WK%g(h6tEi^XDRLj>KQSV$DlQbfLH|ILH_73>=Qo|k;{i@uTrRjY|ql6_3?CR*M0Mb6ALclOZL+r
z6ek9YgEUHy{ipu^bcg-
ze0ls?e7dTy_rE-UWiauqIxOCxwaiU0y>e!o&?am3uii9S1t>kE6)K2EW@S5{xJmMY
zVpXG(MA6Ff&(S*H|FRaH8+;9ig(dm1`=v5>Ro=B(z^JQ!HEHe0n#M!h?!*tH3Vtf9KWPN5y
z9enkc2#6WMWyRiuC~S-3Oa!2(Z$jkSke%i3srdO+jMao4^Qlu(q5Dy!l~lWlIk#?u
z&`x4vT437SQY>PNh(qQ-GRjYFfW18*QgV*X;Y53sQ;Qhh8;<^pAgj$*%
zPbazH)h~vh{n;2_I!w#%)3;q(|H#kFwG~i{Lae3jT7_m<<=O8RiYX-H$&JyRQgb-O9b8T{|`)QOgDCg~kb9%&2;Aq5J%K$Ypq?A<$Gp
z_)pl*PqZ~EX!Di$jz6jXjo?&3<3sWb3#u9KbF(h^5t?a`eDpH_^^QcGpbds
zdVha2II?PvZHm5n`);op
zt~T;Z?Rie6{muJy4FG5G81m0gNaDx{@$JXZp^cKRo<1stH(wL)J1ZNSm(gD#a8&8|
zF7szR*u*4xd2&z=izdL!jo3QXlHqF(nk^b{l4jtejrvr@ZEJ+&X@0ti%+aXi!{#eq
zBpYN&U&TzGT;Q$o!xtW?BmsK+8AKZkN4hHysmBKfKRS$=7ct4rK^A%7GlJV{ryM5^
zE_*fRDcRm_n;hIR>4w{6%DVMMXy4y#<*-mf9YHN8hElPAX7qh^=M^)XsG-ht+uWk7
zkfw0?<&Um3WK=SFO)Z)FEf27ndeu6UO*x4jYI1gd!BQsF
z&xoQdHQGk!Sffd0I>qQ*gF1nx1$1(BM*t|J%ut0w!Almd2
z{o?5i-rXS4Okvf+Z*ZlPBis8Ht=t{>Cz4H0P`So`rJ%|p!}wJ><*Dv9Pbh8a9!E+aol(|>LP_)OYM>Tbs$3W
z=w>?g|5p5|B?45@{XbCLQ~Uuj|^
zSy%GP(Ev5=t_=@MkNq_5Go5WWDvb>BFMIM}xv#-W_$;&@wc?8b^l=p!_0S3N)!t;U
zDMzBqd2CII))y2L)8$qETPGw@)-w+t%jEzeuuoT+-HVR8M47$8@xop$0mN^%646+v`Q7gEIhmr_p34gUDN0@4Y5*OqbYu-pf6g5ppeefR
zq*Nc~hK5@iEg
z<|eDx!A-S=LZ4&A(;~$nGe8`ToiuYh+_ds)aFO>dnBhO1K;W+YdP=vq$`L!bg?8$q
zM7oX?6fE%;yPT18U;Ho}yq`6&A&bnh2n{2mNbnxs{ZW_~7-Q>0w$zGBuJPksUK!4a
zYEz8e?M(YkY<7}@H+KRZmK<0@+uIlbU@r|XQ_0bId|Ou57&87z{`>0k)fT4h;TEco
zc=(wsidv|~11YS#_QM=I?XETVmF#2Q!$|`Y;#<>Q(hA$+CywfUFv0jL0c>jXNoA$p
zf?`$Hp1^9tZxW|FF{QM^?yM+KEP*btHavt51t|VmOmZ~?Ike*w6>Hu34oExIIcP$;
zV&|@?v({|T
z*U4_$)YhR4iU`n5!Mb~k1#m!#MEOQJqF4I6PK3A3m7d#L+L?)n5vz|zBgSc?fKDCW
zC%ZFnT>sL!bLp*o#Y3k{=Uq$2asw_#!EzJoCI)c?T=Sfhr;9m|n8L2lj^+oK
z!?oEv7qwP^NG$6h5g{qxrj)3BI-R1R)0->vNnG6A*+__(1V)-G0}l{~Z{LO`%}iPz
zy;Idpn(}N)odEw^SCsBOQH2<)L5O&_;mA`-O+p($+!@*7sK}HlA|MiadtugiNBu8^
z@Ji;F@~({cn3V#NSn1O48Z*3YtwVW_vS0mF)14t3iU-6ODW?}^rtp39G+v%x-gUyn
zq5g<~(qv>4W{bb#Sc#aZ_OV{17*t;p1(84|b-LP5Z47(mMGv@WO2|hMytVy!6g_WX
z&D@Ul;+u>e6fr$=?xn^DpB>FS%Obxxr`;-6P^>_`0)UuQaQc^nV&nOHjR$LL6khS4
zs0#L)dCa*3lZPo#t
zlJnM&QY+$R=!?N~UMs?GcY3>OHhrh5TmME_U)0@`e`f2wo1FdI?U*{_+BL}#f5%wG
zoa9hqSR*x@!y*SlYCX9x|4?jyg==+$k|1PwJ1=Plu?;)9xAQJkUCZ~N<{b=H+K5w<+L1}pFM9Vc&AyqX`y9XPZMtw)&r{PCmLob}A`M=OEy@Jo;B_5w@Pf|2ig
zd!LK=+hjYMLp@3gev=v?1b5!-?BIcD5@`d#_<#WwNOpq``T31AX@16^?hMC`y4BUgESb`!0TRJi
zJNmtL?@%{>-$2pM&wzinW)DTG+&h#m$2{;`qGU_a&;v^di|Xtu2wbiQXL$C$IbsVT<-
zpS*Pl+NY~NeC;r7F;BBcKA9^6n?@)RZx3#IQ2|xhEz<5;Z~$uThuty5v~gb!tlW4W
zsj);ZVaS~$b^E>nbo(rAV}^a+3*$w#s9N24#2XVZAh0}7ES01kMA-VJyr8|d0Ai@e
zm}m|^D3D@RSQ{#PZ`#d#A*6@luCrnyxqKN{Y<1KJA;R@aztz!}qf;Nuv)gqKnXzIP
zS(oEIfZ+D!SZPSJhH*`ZK_1)baUOI5+;Af-Z)9
zwm!uIHYlB9E+C9Jj2QW1^s3!-R#MB#^K#}+cc*;&%}9(Qu(GT+Ts-gnocrI&&RAK>aV_PazttI96pcrhoXxFJW$V}u?CA|g!P
zYtjw7FXuS&wd?u%Pf5$=rM_6Q`|QEBmRSz3t@-_=iR#myY^ro)GM0wLQENkI-JBM{
z{+QaKE_QnRmRoiUTZc5>{?#<-tWZH;!T1h~WXXYdpCxTWR-(l|A{Cp{P63`^(GGh59#a0UgAoT_BWrEUj0S4ThM-!9nv2mEs%8fI(yL8
zTZ=%Sj80R>01Ycm-pO`u@}4}OV-F@twyBv#840)yw*ySX?E*_!7G-g}Go{CDzf2$@
zfN#!?-ro2QGiKT(o+xj4*(pT-A;2{Zu5$S}E)mt`p}pGX2_npeI!`|awF!MG?_0)C
zuPgk25C5Tebe9W2AJ)6N^p6}Y3{$E72qkJ=U|S$h2=DrjW1Q=3Ki
zCYo;NKCg!pdE_unvJ!4b>6W^ieJ&b
z!Gi}69JpzN58np
zJV%*mKiv(_$j!-F`e}+suN=8JD+GLh?&CPnuh3#=8CWc!rs?gENX^jGezpXYQFNa>y*{yr4a3@{~c-$qs3p*cr|MW-Z_yx0x9
zldD&A6SLaK5m*Sly;T;W$<(G%ny{ovm^F+x7UxuICb#)9Zo^SfJ
z8`#Dj1sFO{%GCN#T`#hX>Z)=2OaJ7*d@)^m&f6@o=)$!2rS~vzzkdz}
zXR>z1^2Z+cMSwiiyD`>Mliq&aX@F|uq63k_m}`!0>v?)Q`qJ%%M>Q3az9fu`ya-mz
z)|U2hBIx~xNMAU@k4}iV1BquMNPhodz%MsnJ*O)-($12Jl@FZ46z-3yR3k^Ad5=yj
zbKSE-fo%nxqi9py-(4YN-b+H)J=J-WoF1(iXMsv?6f~Jad7+QY0ZQ(CdT%!L0UCtX<>O<`sOSNx}Ms
zq^3p=+9nDLdpa*BUf*z3v*lv0R}~=}v@&Q6wHs}(`}~vRgOsAbC|wr{TDL4#@l-L*H{)plK?
zEk@_Jd`IMokj?zr$JVXv+JYzDlfQw%0CMyBG)DGVuWEY0uAQYl!07XY#Ya)*pK)ZF
zrkJ@+;?R8XVSeqiz`IV{HD$L&mE2dN?d_k19wh1h{IRacXl_Kmm^x)M!@)uBeV*CozOzX@|qjddi%afdO}*qpV-i^x_>(bOd$%QRVXjL2t6vj+EGav
zq2bX`pPt05{kV^a`JwSROIq}6pkfAwn+3)1xi
zXUNZzVmT?VT7#38hLVNm*;sb0L};$+Rj-bA)cv`t0H8b8$=aiMd(Aivp?5_JeRb!|
zYOeUnSwLzQf2~(Xg_QLPj@3r$tmXsOG(lNSCFik~yB`89F~gj+75z~s4*H>myq?}+
zg6|x2nrgf-%5@c=?}EaEbMzjY_pOvD5J7m_JrI=EFmD1FN3wibDL(#fFno3Y_ZOjE
z*htYP>B$MOfOhK~XNrW5<9K^|U+mV*yo-2`M`sickl%2N(YBghS_86TmM7Bj)wP;p
zF+rlR-5}b5Fuy_L(SoJ-%Fd|?Z*zW$tN2Er(;U|pQxi~hl>lK{JGK~i2qePFtysyr
z=2&`q!wGjEe#)X}Oi2^^RpZV)>@4)?cumay=oQ>xyFvPAi9o}
zFi4gJB+UnW#TF>Q4VjOWa{GAxq!gmG9p$5uE
z0MSq~F4k;X8=P!9GHelE&R_C@pr+=0e01a0m)G4bIb3B+oAZ+ZpDv&ss{%~m;4qIo
zWn)>4GMYe)OHSTb(u%T!J|U=;!;Sj9etGR}=V`JaS4$!FS%vY!Ho?f8Jg1*U(v-er
z+S2!qF4FxO`8unV%g{pHLt7m}?fBujU+==vj=eLW?y@$FJh9j>KK0Y|R`|)rU`xR<3a*vXi7H|0fU)DE@Ggu?EA
zfX+THyu_1}V#)|{5X=vIX2T#70HJZHmr!OLP||7@RjO10d$Enoulw%nH*op@hy
zf+ItjKaq!rAS{-sNoioS-7W0zTf6Vps*e5m<}$Wn80%OSDG+pv|O1}4XWY98Kh
z$rBt{>}w9O{BLtf)L0)5>_c_+2nGg*&B3;lt(-iGJm#k@(=yv2(p{9k|JoLLqNN$W
zx@o3lUwDyGrzpM5^So-lpgjWYwAE#Vqj`LipgZi`PMeQ8Gj872L>KvMrw0U^I1ApF
zC-r`Rp}pX7Po<1wX$jz^dsx2Oib(yB8mu}kLFdA_nis>9EANI~;appD9B#z0@G4HP
zcO4b|j#-i9iTqKq$PThuPIh)O{PJbaPbe+RzzT~XL^nur!FonMppPiF03}3Xqx?o|
z%T=((UcRe`8dRlwKjx@bJtaNHH0;C<_n-C4GNxDW-#7a>S9nP{
zvEpGbKw`%HJ0nPQdu>$Y+TZaa!U_~PrwZcMFa(^n89``ZvaYI|{`Y9yEQBziL~GlL
zn4FSp&EP#^RR$!*vfC@0P6qQC*O>pgJyU(LvcRV1_gMBjrNELmZiYfL-^&8u#ELLS
z7Uq{vAjMm-ZAUC(Rxvv=JaDJXQTnlwio2!Xw6_dOnb5PResTcQ_XI7dP4wr|J(bgT
z+Ta=0vt4T~04!)-Iv=$@%O$4ygXIBN2AH1?0|@zA3xlQl8suDUgHiDu^U1xbM1H8-
zu6lQX-_sHgLeLgM=rQCz&3T<1O96)M&}Qw6Z!iwsdT+yQPnhu>4~t?M^|DOTfsewapxmb*T?mj2Xk{eL#ocFn**J)MIt3^dks(OYnXufX=rjQj&M79;~J~M
z0x|Pxp!`md-}3IaL-P}TQ42&W2<|v+GAUbldC*g~-H043Y3T^GZQLhbM1>sKk-G2UuKX9Okyo+AJtt1b
z`JMAxO~(}OZTNJDZNm&=e6R;4m|PpRaGn;dl(B+c@@|*R=`&of=AO174FL;+6nuPY
zMVz5e6|&*r#qR%IG4Qz?XfP*hz;9G02C!enOMCg*`Bm>^O~^UuAl1s{Gq@J&>PO8*
zvC}B(P!^Z%xj##!?w^$n48U(0!`XxrgyMzm{b@|y5}Jv-(JZ`j$))6+>|26T+sZ(n
zo$#%-jQ4m|2JhPOV%nUw%i9m3BBGSrsdSYu+{*GFwQzywj|6N)<{k(v7C}dy)hBn~
zM>k2CY*%(^rHP7V&1|(wf^&&<$1U_UE~AE))*}Z5*lO0<(nj|lW`rXvSZut}E`i`6
zbD!3^@)JgsnOu>*fKFeIDTtdGeK)l%Ama)L1j2n_mFolhgG&jbOrla627QPPrt6}0qz+4Nfv}xCJ89l;a@S^3|sOLv>RgTFEr6xB`
z!e2%^Qjz;xhi#V34Yo(B_RtAQ^yX%#L6xV?<2MN(L|Sq~)uQbe)|9H2Q9ir`w_(|{
z7$A%dVu>ZgV91~Z0WX60TilN_rQl0I786=I5p40Fl8Y`1%qSp8KxoaJ<@o0h2Je8k
zJdxwWu&{@(RZl9K4Yrud(z>z$-?XHmNIhL;UCQGO3TMGe%R>-}(WMI*`jbDDy-8~v
z&3SX)m!;vrF@E))!LVLVjN-5V&5GBU;x2#
zV5NcrsO!I1%9tK->krj$#&heXfcX7E=yU0<_W}XRG~OI#6n<5TN4DCMW69yTNnXAH
z@W_x7<+a0taQL$B4&XJ|2PXDMwPH};MO>`QjJlpz4s^Ognit-CFK5+|Pka`+d_3+>
zR(`M*oA*(r6cw=f$k!f+PhMmU34tpG&m&x$)uY-%gl-$u!ocy0Y-Q;%g|DIeh
z?e`@xbEy`mj?-QPv^V_k9dH)i3FoR9Ch)f}D3*qBl8*cUGk2Sk0Z(U6TI!_H=&RKBnK4|2yJDV5sjsJ@sCCxlno!us%7f
zKD&puS?P`dd%h6y3t37S$cY=t^S%!BewVZU;3mtM%Z#E!%5OdaIufaLN=mXLK?&>M
zUs65O*3fG&Jb&*dXX7-V-!{|u6?LAuWzzyyY|$<-qP&Z5hSjqY!MD{s)B3$M$^d(U
zrTnh|FTQdd&{CB5+>hjr2>IVWPu3zY7Zq6>veF;r8RhIH{
zZhm~9uu0J$tNA(9$vF~ei4?8vc<^_p?H~W{#Wf1~qRFbbq4TtKposP9jTB%C6FSWX
zCI^sKlrQLOW1r>FWwTN(agiB0%j*2i4w`@F2AY4G_4IK4f6aP;=4Wh7%D?&IKjpKZ
zdEftdUt5MD5}^nKth3ZIBufOtiz0V#$u&PA+*>_AkInM+)};s9GVA&OO_QNB64y>`
zLsr7>0mfI}kK1e8|KYI|wJS8k=O0rp5022C1x%K3GGt;WmVN*3xPVS=thB4lp8(Z~
z55M?{riMmB;s@ua-QD4PS^ngG*??6_*GT)0@1-}ysff6LcWfxhIhL9JG|7TiLa>~G
zTUX+z8w#7_vPP@3x3zB5=CN+%oRe-8eSPNdl~VsyssEN?XMdy!G~}J9JqL2uwa%M#
zb5+U(2InIH`Gle}Pn0!)oMg5-+r$dk0AQ+nZ2q|x{x1DnmPAGs`u@Sads;F`oM1AT0TP8
zIzR(7E`{m;o8$J!SH3s{Y;Tcd8N7ds1NfKR^Hm(k?f=1Y`(uzIq~DOaU(T-P{5R+1
zk6ub|ZfUX!aZ$^^UqJkKr6YYAa1G?6aIg7WI`4l?TX?{}!f&bL;oq9ye+iU(6u@}N
zy%|XQPiE?81{t|Ee(F>3e}Bo}|4EKrnylgM;P{n){hYt^8BJF!pN%%RZA@$ZN8?RK
z5zGVpcIW1C+W+LYpFe$dGH;dt#91=v+jVv_qdM$b$lo8T|DGGFOTfcq5`}mEnGgPE
zA20A|R6|CKj_C{9->8LQ@h5|r7_fQ=_(xoG2m6dUBg@@6E9E&lIO
z`1?P-r~`7z1x(uX|N5A}Ip^7Arw_mB)cQLs@?U?!JwqU{f^q$h|Knv3+5Eg%K-!}<
zE{8Q#;+HPRQJ1HAV^LMLiY4(f2o0$IOfAF7VweJ;x!{={;<^TMQzrExxg#Zsf
z+Prc7Zw~nX%H_XwfnD=7M(jQ&|!;NctIQ4#-1kZl3EK`fv-<>r4fVDE2#FsB@h
zmE5jWVZrJ$*Whm_R|H(ACeQoJkadQho$|%;y7u;q_JUfEJ)vcf?85)Q?<^fgA&T|R
zoAOXl+M6xPl1-<`lhb5>PMs}$*c8xq?RkRON5dw6?Vb_ar)R}d{hpsisU?dLl$48kW2f6<2uZcJH}ny)wF
zLxou6l_n?%c3Sbn71soKhAh4+K5;vKJ#2hCiIx1!t#fyYexK`-DrBog?*?Lv`ou(5
z#*|x5wzw5=X&)%}d|6ey7EG~c&s;eRM`E4ZX*DV)N{35i9EKXMACc-Klg;tR$b1XT
z@kTc{aVH8CDve|9ikZ0_Rw(_tftu^boOtSFh|OQP(qPiww3f+e^iEOrT#|o1$0&O~LG?ub}W4(V5JPNdtZ^&~Uf
zE_>2>Z+B?>*?_%(4e<_>geT-JAHAS@0EKpMa-z7#6sz42A?Lu2ULM!QDXN_gTwtQFbK_7yk{3U_l!&=f%lu9<+7celiSATgN|Je}$paajS!fJf4u$0I*C
z*7IMkmsm!~m5wAMV{S$M97)ltq*y@}e7pmaxVdI+>0N|mxviQWcSVccpzz}Muj=x_
z3a`D@N&Ng+akVS)FgZr@yz+U{i{tXZ>duStRX5E`8
zyXzHGCg6g8$|T_E`zZ3mt9CJc(iwxtmbb14z1`bZO1ikx2anB=U(ymu3tx_pqm{_Tk_`3qO$5qtNdEFTA$=!1oCeKqQR2O~~@R%m7C|A&9_!3oCj6N=Z
z#9DKTlQu}=(}*4JdV{KxiMos?(rjjBG6%nEwo?5s0ZVE6o$IoOa*ZneFDuIwDh1LL
zR9XjM1$#Gz``2plQyinIa5tpbpnJkZ_hWts+Ldxw2&`?
zlDZFdl<{qRuS#e(l4&+tG43<|v%S4-F|1DQc8~dftk4fKEOjaJ$y^Om<$w%DYVO;45}KR#x@
z>UzAFY+^AouU};rTiSwa@x#Zji<2U1Hu$~X;^qh@fd{Gr3p}jEYRIO+d@KJQ#K!DH
z$~i7c@@Wv!N&kLq;d2KDH9whd-4e(zgBO!m0wvyeO{w4@y=oF
zQx>Jo_p7yMvTit&oq*<3Bok|xwCkS=-~Lvu-e?tnV?dKx3)^T~yxdzGJ?W*Gk!18u
z{>FGw^$1MorRUl>cg3jFRpM^0aL_c4F)hg~G$xIUgR4IRZC`${0wK4i9kau5=+v**
zOwNCS+w`>*$r)IbW8tz|l7&0_Itu&X2<;|!JUmJ{z!6VrjT8;VdO@{xTGTEK(aYY8W2~gfZapT7
z?=6b!I&tr(Cv3zCeUTI}s&j?y-Vo@p3VyCp7rO0r6zTc9cLnX{I6h$WX&_yLA`-D93swRZQOn8r7o_
zak~;bTOAgz7(n~m;lQStp>r(tGmNMcGt!{o_ar6Y@Vs?$f)kQ?i62!}A)3&9AQd@7
zb?&v}Pz$vVpMeS&J>DwQMRSSo#!~!VqZ-W@v5S9EaT$tI5LFUHT#E=5F4rB()N#dE
z{BD!2+h4F@*goW*oF`5?B`E7wbfYS?1oX+3eqB?%0@R%6r3})ncZQkbxxMIi)B}T(
zJa)L1Tbk5USqvLlPY##2zSn=0)q6l2#xjX$Yf8sBPTPs#mIcS$W|~Q#95X~)Yn6}p
z51dHp6jUE6d57PTX1Kkk;xq<)JSLe>*B50sSNY62X$2=g3F0zGl@m(f>J;jQ@o|%S
zO0ua>M2jWgz&ZV0Y8iux+EC4Q{Yp~~UO7w+zp?T$kY?^)pK
zGv*X@V!7&8#k#OueF|FG0Ho>Z;zJ{chJ;$034HSbUv~yan!n30xOE-B9gMGnWOuG>L`ZxC3dp%=)xK
zmT4IL;D@oVal;QG51Iw339lCqMjU3{a;_YJ6I*d6@OBfm+FaB@M_r~u#z5%ol~!qu
zI&|slM@zVeOl%1it$PDY%?<^_au%yy$CmBxD^gD_`5;W7r4(o4dqtSvvY1t{Bq04;Je!X1DLFObg4@I
z0A}<-V*EK-U#2xRXlVBuXX!6C$*w2zw$ty@dEarrCU>YeG7(!2{qas-J!yAkSZTdy
zVWBfCASpe#r<*PCFy&sdG~s(C8kCak`wpyGrK%^nDhrA8x*S&!^z$&SF-9op2JAhThL!
zrj)QGb#kb@4Fm@x$S52UENuVVd|)kJ(16QFLYZriP&>1*yrsE4J~UTIC1WDjE>h2i
zv<((@X6WhR_k)^8@Z#m$;=OQ3~~CWN;A
zvE2QhqkGo%-YZqN9=rEh@sRc#)eM{**OrP6oa*H=yHbo?Eqd>c3s?y);gGSc3AB@*
z9TTm)kWIr(?q{_@Nl%oqN%g&kG6B3&hr4cN=nYCocIq(Aug}REZ1>^?T&$f0Y4NcX
zLS^Mk^t=stql5jMSv$jn&5j1mnXCLxAbr7t$!_`E-{0y}OjR7-d=!}0gaQu+>#GmvTg3_t8^L$|E;D?8Ni~d*aFAVy^
z{2%Djb*BjDnIq%74b9ZjC3*1pd@p(hp_g?PGE#9LJlP0ga>TfOs6VNUARUQL
z^1G7*DGZ#Vr!BNzkr9ee)S@16-s#y5J{4blLo?**#&G@VVv@5bZ3
z^MN+FavxWVq%}tkauT8hTgRH>UISRk_*LGWmW_CV9+n)MhFt`Q=&fPT+asvzTr_ah!uRlhnXDnlON~^pWc}8b$G%R-i6mL!AGa1CnTJ>O8lk
z{~?dBih{^~;>KATLG-r}R=fOpLqKB*`(pLluk+Hltq)?Ol+^bJkCHb+8|dwZtjLeX
zj3OnSRBn!|D>2-+j%och%IuqM$MRwHU34oB4!ukJ$qHH4=|x?CFd%MmlEbmRGHaIW
z@e?bTrQ5>*eJ)_72%^UZRus2`{bu9s$G=SCp?2n^i-muI&puONA5%%FC^)-h1Vb-L
zY}MhW+jvE1?6Hg+*pqsn*!hb0sluBd>jep>KA9g3W37ZeG_qKapAv8Vp5hQ(XnxpG
z23qXpNnusCt9nA3@r(5*^n1C^4qNEAE>I@KozqGmk)i3iv?}qdhl@J3)l#&!BHfJI
z58nR-Rmo6w1e>Gvb^W<1l-hy2
zX{?epkD;*tH+Lp+v!GpjjLNEZ>D}6C&(f3)o{uw+a%=(%0I+AiUqrQ!J;%TM((>Ir
zqv};<1qT6R6KBzlK~1z{0J5(_WhmKvpe|>z_242K=&I!rM%z7mh5Ed7DgOO!aK3-I
zu7CM)K`CZ_{FkpCQ?WsS&(t8D_Y9MFmK#)fEYFF=P`Y7mfG2d&1ciyPQBmGWnZ5Uz)7rDy!2
z&WJa)97@((Ri_Xd@qzacsb1T97ai&wRP!1-(2dLeS_{+;<|j)E`F3d?!@mi(xu&1$
zB8<}omq4Zg0}0}x7gxq*wk6{P2WGv1Qw(9!J<_AvB12cGFLky)cX7eEwx++YR|j8Z
zbyB2J@G|OPs>O9tuRDu$KWlQF*=w$bK3}a=RCatMYEBkNult0ag?ZTVbl(`ktf9U_
zY9IeA*!V+mf3?_ZxB>YO*MuFBiur_AD4K
z)#YlhcG?z*O<+>b#&I8XpSk%49h=NWkK;v3d=yXW_nJ9jpQetEU$8R*pV#}bg7}@;
zh>!P5?oSk=FStV6{zKcBj)^y6iBFX{$t9`t=o1;74_PukS0LTeWI1GPHz>c`GWy`0
z2ff8K%}VI2*oFId0B|7j;_?I<8a+`54IQx=|M9S}6_*7*EMU7)>$D$o4P?lUwj8ue
z_vBcFvfUaWJQ+KX4@BmnDMI&~D&`DG6o7^xPCpVWLPCrh^E&vlRx;97)~txIFUQ8s
zna!y6?1arDjBz0y^sBSSm6IE}Y!ZkSenmQ8u$O-4w@^Ql@()o+_svlrrJ^KSRn9Vo
zW+^@5z+yHMLyR30CbI!Py3it?7#C^=uArU>X~`UQzXfKbU1R1LgRH|
zfZ6Q%oisXe8$Bn@&_cEk`wy7s?T5eA9@OjO{oXd~{6K6F_nKd>Yp+ZeL|b3@hLw{F
za6Gn@%3`|{y7TZx*Qc3xjDuEp*8xvQr)eZ1KtAgP?>)2PCtV#qn==JeR(ybD#f
z3Eu~kBvrrOhpyQT7**xMwEc??3u0cg+wmaeRRPOaBt7JLEY4&e;p@750Tb$YT#njr
z^sVvED{LBXcwQz37?15M>o|?w;l-}uGlOe}C7aZ(NSzBrA3GzbirZ%96K@yVoUA+k
zg_k`2>y>cn$`r1H*P%P*IybR{zGIMzkCB`?1im?|zU0}fmJ#T2?_}pHYGR*JC|35a
za>wp)of<-q(3@I2Y#(ju)zte&bTW0{%ptKucWBcsw#}*gm-bEnV^$Rw_w0)~t@f`C
z8$Y$ofOK=ix}ElUid|clx7_MH27|EeasujNj{6e&%{GnhPLo;@*ZSD(gmufNANDuy
z3P&Fk0qoe=_jp{d-I}3X;|N`NyW;zcD;8vsb|k(p%^VW?C8FkyW}zp_+kxC>c+gm*
z!2f>rS>o59`&61LcA35}Bz1F@%5;ngJa0zbxIQICA(n$q_TuIWBjp|Vwdi$tCp2`z
zSED5$sp0cdi4V?xUOS00p>G9o7Exu
zgzr;uSx_uGG?(cOTIc11BtA>DvcdZC@1ILt66L+6CJ(Kbhs9rH-k=+qZ@AcoeR$?{
zPuokIsdgr+mRd15zWh>4jeXMr0C^{y
z1PYsSgNbnK8zjWO!_$e~ynW9&F>MoJUj3zqdgwFzgy8I!8zYPmK}No0K1%t$bkE98
z#me@B3;5;Uli6nRw1r`GwXoj)!biKsu@N&Zrw=8<;c)iLB!zYEgY
z+gi%voV-x(<{ceTU@?`Q$@QUR$=G33cgf|XnUtCxH<}B;FgF1v;ly}(rH+^;0o)zb
zZnHo9l62vyHq&er^Pru(?}O=8%TIx}A2g6YsXuC;^6p>m1Mu$FjagBL8B+>UV%OQn
z=cJKL;(9&Tc)z_NkWW!@D1T3nYZ8wUT_S7+Q{!s
zB_qXP+_+O&aiag8T#A&-`@N!yogh^G=qYTviWvp0#{04!yQ#%wNtjV6)>m1$(41!|
zH{=0a#Uq6EkFI!6M(A%mN~CrZs&mE|d3~}=zaC#DzkB^n3=z>${DUBAczPf~l%)#~
zNC++;6^9^qA$iTu68RuwMlZ8TkC?9@B2ac)l%#1Mnwq)>+lH-U(5e}l6|kBL%9oXmCIncLR$p&A
z)wTIs=kj)}x>f7s>ao?V>{QphalpH9rsLcyNzp+RgR>HN95v#p_x?qf8L(Fx{m1^D
z?<>`d4O_q5e5N{!uzB-5`ogb}0&!y|70EWwRv|N$Ndd1Wu=YIA8t*`ialQKjk6WwG
z>c^*xOmg_S?d0+emkJxOn=t_24$+(7FlB2p739|IK|EtS9)`Dn_GaNf+}sTe$W$n!
zs-&OeAnvkc!@CjNKe{z7#{jfLO{1{M
zXj>w#*J!B-)9~%%YO2*khm`*36p2Z|CSQNoo`rx-dzNjh4PN^tiKc@TG*n
zLX}P6pmMO6mHJ#8Vf+rRww6PK7rku-&C#y%<=CkvhQUo|wcKb?W~869d4=V2v3{`D
zp><);i77qax$l_cZ~p&ESOct|;#mNGsX_{lcp>)7%_k$qxsr1&mNL~6I*t!3U^s&o9LR2L@vNg6&*FYTU3x8DYn2!01C+ia^*t0Kxg78L|+|H6u}m4JV^V
z`t2&|2x(vXtV`jtylXah8-RMZ_RyYjl+u;7|D&)VwI2_?hcIy8wmz!IhiwT2EC#}^
z8qC@L);EEyUbyCPWVyDxx6y5zE#u{X1d;Bo+(McE{(hpS7&m3=vENY5r;jl940L^=
zmI(&cPWeX`|MrakTALN+0ck)X^(qaMD*SZeRAPag{0t;Qazno`QM?Zb+l5rlX`y
zzI0i6gCDh+W}`1h$^qCQ_gd$V&C*PLQ@kvRqzvFUJMj
zafD+jUzO=(Ot#4T7JsqrHptHQxVT;sqwSG^LhQ^`FwggW=7(cucgJQut22TX4-zVuc~7&^s1EmVqK%*Eg_5vlki*&r5j2{1
z-Kb*HX?w)+*IKXuwCy};dqve`vcqEvwm4~W9QwI}t(V{+@Gx8>UHnEw3T{pl9ui&$gU%-#fp
zeJ{s3N0uZqcXRr)4jHW{Y5bPC99#p5IdfnVJ+~X`(Ii&2S4B@-mQq!WD8%NdCr9~Z
zr-MFjO{BR^%jjB@aAmd(@naQ6lHfF^u$RGG0$p#>sp13H4xX
zOf#zG4i0{sm@vT
z6N5(8n<6eD3RF1(XInhm%-x(y3M^5?DvQpIE_^m-wo=Q9HHuiXLaS}g`8nPSZt({sk
z4uDDXegee;;8&ZT$BX@o!ghVqR~azBpi=pPk>4BaD(sn8M{;4V7@MQQ^v2BszZAj~
zhn}wE#apFF-#sPmow1}iZ-yo{dPG=7jiejN8Z$M5v4OVz=+*6)SfhRX+fU>?Y3in0
z##2LbYolXN)m5e1PnMQO5cd_HUaZTg!Gv;}e1$TS$lI5-E9>LOl6dTZ`ehSO>NYH7
z74z6QF>dl!@0@Y7Eu}`}dv)qqUW1{mF?L}JdE}7JUFQ;-X;KlG>L_QO`jD7N_8
zeM4I67k`mb^B-KYB@;{cLVzcQ6GWnMsig0;uN!*yVJ8+L@X)>bxenWaCF{BT@iG
zYi)K@=iEQC>SIc5>b*4VTe!{)JU}SujI6cN*
z;j-Jixu_?&2`v3>4&@;QhXgD`x0rQ?t|5N*P73!Z*?v@Tuf=vc=VCKlJGIGJo7&UP
z>bN+iSdIsCdY0=G&@cD{lKWh0N=@6rSoX80=C1p5ck*R`bMb?V0GUSs=}6xa%yG9hvc{4^N)mmULvGlUi{{D1A?5>%lgFEN{^0M87YG%
zrLyeOfp*rlia&7plh#N?YqAD))KHz{v@
zQ4`WhH5HJ6ft!K!>jRX_y2lN;F^o&t+x|FOn}y8?d{!8UUaMzaxF4UDr1(!e1pe
zsL+ZMeq$Ol?m?1EWN4vl2JCSc8f-yYJFUmOM>nboD!N
z_L-UkY5m`xYtXxcw+_5)IDq>@9=-c<{n7AdwXr(fo5YYk{T-CGvHzmOglFVkV{L*w
zqBM23iE?nL1${=~C+Xx2fQPPkddv~Q{#cG$@4S%R^|e)&JIcpb3X39Nl>ZQGLA_v_
z6p#pdML9Tev#Uc+vtOkdANpqw6LL7#SOMENA^q%)ECVr8+@x{lmczB?(Zv8`DQ~}D
z3%b*6g7W`_HFc(fcbY2HfV9OEwcCQy{o?CBG}AzL%SN@0mRN6^t*Axr`tK0hv?r
zuPZ+e{PyU+et!0z^v?yQ@>m`CSZr|J0ExH)Q0@xiWDXUT^hLFI4jRU@;=~9{52_tt
zSQOM;0bkmHvU5>C@ppON&&(Xd7Kaw`Zq*IEN+V|uT
zCCFh7gNs;O(4P<8FV}J7hN$P^1ua3w_cQkEefeq_4;tHiVU2Z^!*N~AkBjL?Erz`G
z_tlgmD`My7CYT&sk3^oFbc>+8yLvqEN+`8*c39Gj)jt!2DS)DL=+ms@!G?Et@?Dy<
zhJC-~iKA22^PZq@QT2Ab9(M4yC0U~85FwkW1rK4e^g+%cs%$8N3})KlS|KVrz461V
z{zMXX#uKrY$4hA!CZk+heq`Rg8vTW#^Z1usvJdiD9m?mrlti1asjOQYyak9FXL6}FHD72s@Ddu
zlhfF$+sj;F|Nogrt<2VRB8dV^k9P30!md-{zHQE4cqTyRFyj;wmGOXs8%eBxGa=Sk
zGf@bnxgW!B%X%bdwYN-j)Sk)A9}T&Eph2rR%69=72Fg34wyCCTum`rK+55w)k*!H`
zFb4Ko|4LGEwy)8{+lM8RA)*Z8ljZHfs7
z&Ss?K(J1a+srbZa(u;OnbW|OjX%MHaIvb>5oO?sF432{U)ES%QEMYmSu!Xy~Gk}-#g_f1^9y0R^fAj3ror3Az<
zg1NWlT_`k$O_xkevRqgu&(Pv_r8Ng6oxU)qyg|PPNNVZcSee|Bk?xG#y*d$e>)m
zR19+zrobIEFzJZO$}PLqs;x5T)0_G33|WyA{FCB?
z>{|2HLkrdiP;o>e1Hmq>b%lmT2YH4VlndP;=oVdCuFDeitSojL?YIMH?Zj3!pz}7y
zE5Da18G0Da0_l&90c>R2!hw_it}@;rSeUy{Iop=nk0q)-!7?H41&U&k5J
zt_1ItqcbVPO26nqF)pSjo>w*2#a}l?Wz`S%iC)pCEF$C}On7+mXxv42Xo)N#+UiTw
zH>B@*49=QgrCcvl1L$LY8Wt0u;Uj$c2X`CPCo!ddvEL6SewR^iQ4$mxyB^24ayO8{
z%MA^0FAoc+dJ8qPJU<(VvYmlvx;q@0;O;=;j+GYnB@Ha#qMe!R!5V)Mis|nE&^~=p
zquxTahrBN0UDGLjp<%0A&OSlN(}sI|z^vAafFjCXOLdpcY`2(qCmL5-^t}3pK6
zx}TP$B08sLQrQPLoG*pj?S}yTYQo-|r=4Dq-5W>t2ev5RwRBD=<<6FNv*?Cbznt%H
zxssz?O*Xz=e`XL-oBS#^?o}v>5&LDPZzb4u$4}g1AYL0#U}E)nEev|sgt}gvC^#62
zn>D~)QT?Jl<2%XofIr6dgWkp$l!H2#-jcylU=gu)eV_ud?GNzBO~K_#fwTT|fE`~b
zHjGW9x*_gRz8h#)>x&M^q5>Z`Iy6eG54bka&3y+
zK=qBh!9Gaqi(2{|{rZqGpeTABP#b!SJn`Eoi5A|8V5v8#!A`j$tJKAhu=Qh6*$DoY*;7)
zBxBJ>qlWCbv(l4U&A3kY1Vq}5Aaz`wqai2xF`ryi**aW#X?ukY+ulg6vJfJv~
zakxw9+0=t*?gh>cUk4DH67%j)ZPOg`LKK66sHIa^
znnUU*vC9rA<5fC^Ur|ex!g~SRrT3L1O>oLWk4m2OFFM0T^O*(OF
z+b{Q`G%nRH)qnl)`L^O}=+veCw{iwl1nu#gs=Tyc)+U=&G{DZSDXIuA{wnB_aaQ$I
zbHEq#fla-ymMvLOv1EI_WwCSPX|UJ|7Li+^qlkR_FHZ{#=wX}as)K}gg#`wsW9kA#
zA0L{2e_jP4%0cFf4x`yM?vCSKM$apHHvw4+*O^+&9Y6QU8v_HE=K)lds+3bUFkx_m
zRcPw-4{o`&!j$uO`S7c6B72Z4^Z`;Fn+HGoEP8cyd#%vy~G
z=(UsaC(Yd)Wb5Xj=;KE^WD_Q&PT%Sy0Nak|@zdGi*UZty)fu?OKKuG$glsq4k^hv5
zlO)MD-pcvByskjx8|3aYWQWSv`CfE}?6xcq9+cxoYBCxNd=rQ+G0dp^824Bg==^XU
zl>REi;P&yP8>bcVAvvCN?!2_Z0c39E?W`dM5VvT-_nNiI#!#b{$1W2WS^tdH&u$G8
z7ncm!#{g-MH$Ic>v`SuqemMW^4p6RUEMjh)<@TS3;keag3&
zckvh^+quN&e;*tg6%Nk1>G)ymonOzi*R&0>l-ndg7%j;h?&kE_<9twzA5@>vy|}O#
zJcvEYN^z8hRhbd|cY>N)S-*Xwm5yDW?lw~2g&c_hDpwpwqco@AVw8ZRGd=2Qt+vo%
zlliC^lb}OD6J~}6VjS=nSIfV>epUpPkD>=CcQ9$*Tz@?!OVOM*9UWSzo~%Q3a3u`a
zxE#C`~dLCxKTI5oYebn$%?Tj+CMun
zbT_{(h6zW6xVb}N@r1qjT$qgAmn?Jm^$!4kl*$khPTiaz$FndJq
z3#&$|Ox*dbz59LYQDG?3v6I8JLr8+^ZL|I+$KIWnoBx$E-
zQl68hnPPd$`n826LoMHPC#Gue$cXh_sNV){ky=}~ixXnEtaI#CS{w`lMN&t3wN!sC
z3vJCD0Agg)udw(}bv|p+NTDN4?c@2vBB9b`PMmjOo`a}QU^1Ti*)8N7^8ed=7j)*@
zX?R334>Up!4raCl7kdGWZpCXIV~=(8JGy9|WU-d8OMI(J_vSo|k(Q&8Uu lM2bkU<=;ICr^gqo_rLvK
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