From 0b5a1d62059bb092db3f3fa592ca45270b6917d7 Mon Sep 17 00:00:00 2001 From: caiosweet <24454580+caiosweet@users.noreply.github.com> Date: Sun, 11 Jun 2023 09:59:07 +0200 Subject: [PATCH 1/6] Added Type Conditional --- .../notifier_startup_configuration.yaml | 2 +- .../centro_notifiche/hub_build_message.yml | 110 +++++++++--------- packages/centro_notifiche/hub_main.yaml | 7 +- 3 files changed, 62 insertions(+), 57 deletions(-) diff --git a/blueprints/automation/caiosweet/notifier_startup_configuration.yaml b/blueprints/automation/caiosweet/notifier_startup_configuration.yaml index 73f8814..3ce7b57 100755 --- a/blueprints/automation/caiosweet/notifier_startup_configuration.yaml +++ b/blueprints/automation/caiosweet/notifier_startup_configuration.yaml @@ -1,5 +1,5 @@ blueprint: - name: Notifier startup configuration + name: Centro Notifiche - Configurazione Avvio description: > Blueprint per la configurazione del [Package Centro Notifiche](https://api.github.com/repos/caiosweet/Package-Notification-HUB-AppDaemon/releases/latest) per Appdaemon [Notifier Center](https://github.com/jumping2000/notifier) 🔔 - diff --git a/packages/centro_notifiche/hub_build_message.yml b/packages/centro_notifiche/hub_build_message.yml index cd1e263..a2f8ba0 100755 --- a/packages/centro_notifiche/hub_build_message.yml +++ b/packages/centro_notifiche/hub_build_message.yml @@ -1,55 +1,55 @@ ->- - {# ** NON RIMUOVERE IL SIMBOLO " > " QUI SOPRA * #} - {# ********************************************* #} - {# MACRO E IMPOSTAZIONI #} - {# ********************************************* #} - - {% set nome = states('sensor.notifier_config') | default('Maggiordomo') %} - {% if nome | length == 0 %} - {% set nome = 'Hassio' %} - {% endif %} - - {%- macro annuncio() -%} - {% if now().hour < 12 and now().hour > 6 %} - {% set annuncio = ["Buondì. ", "Buongiorno. "] %} - {% elif now().hour >= 12 and now().hour < 17 %} - {% set annuncio = ["Buon pomeriggio. "] %} - {% else %} - {% set annuncio = ["Buonasera. "] %} - {% endif %} - {{ annuncio|random }} - {%- endmacro -%} - - {%- macro modo_ospite() -%} - {% if is_state ('input_boolean.notifier_guest_mode', 'on') %} - {% set modo_ospite = [ - "Sembra che abbiamo un ospite in casa. ", - "Abbiamo un ospite. Attiverò la modalità ospite. ", - "Ho attivato la modalità ospite per la visita della nostra casa. ", - "Passo alla modalità ospite. ", - "Non capita spesso di avere ospiti, lascia che prepari la casa per la tua visita. " - ] %} - {% else %} - {% set modo_ospite = [ - "Sembra che il nostro ospite se ne sia andato, disabiliterò la modalità ospite. ", - "Consentimi di disabilitare la modalità ospite poiché non ci sono più ospiti. ", - "Ho disabilitato la modalità ospite e ho ripreso le normali operazioni. ", - "Disabilito la modalità ospite. ", - "Dal momento che non ci sono più ospiti mi permetto di disabilitare la modalità ospite. " - ] %} - {% endif %} - {{ modo_ospite|random }} - {%- endmacro -%} - - - {# *************************************************************************** #} - {# INIZIO SEQUENZIALE DELLA COSTRUZIONE DEL MESSAGGIO / NOTICIA #} - {# *************************************************************************** #} - {% if not call_no_annuncio|default %} {{ annuncio() }} {% endif %} - {% if call_modo_ospite|default %} {{ modo_ospite() }} {% endif %} - - {# Esempio di come aggiungere altre variabili - Chiamata da Automazione di Benvenuto #} - {{ benvenuto|default }} - - {# + Contenuto del messaggio passato tramite automazioni/script + #} - {{ message|default }} +>- + {# ** NON RIMUOVERE IL SIMBOLO " > " QUI SOPRA * #} + {# ********************************************* #} + {# MACRO E IMPOSTAZIONI #} + {# ********************************************* #} + + {% set nome = states('sensor.notifier_config') | default('Centro Notifiche') %} + {% if nome | length == 0 %} + {% set nome = 'Hassio' %} + {% endif %} + + {%- macro annuncio() -%} + {% if now().hour < 12 and now().hour > 6 %} + {% set annuncio = ["Buondì. ", "Buongiorno. "] %} + {% elif now().hour >= 12 and now().hour < 17 %} + {% set annuncio = ["Buon pomeriggio. "] %} + {% else %} + {% set annuncio = ["Buonasera. "] %} + {% endif %} + {{ annuncio|random }} + {%- endmacro -%} + + {%- macro modo_ospite() -%} + {% if is_state ('input_boolean.notifier_guest_mode', 'on') %} + {% set modo_ospite = [ + "Sembra che abbiamo un ospite in casa. ", + "Abbiamo un ospite. Attiverò la modalità ospite. ", + "Ho attivato la modalità ospite per la visita della nostra casa. ", + "Passo alla modalità ospite. ", + "Non capita spesso di avere ospiti, lascia che prepari la casa per la tua visita. " + ] %} + {% else %} + {% set modo_ospite = [ + "Sembra che il nostro ospite se ne sia andato, disabiliterò la modalità ospite. ", + "Consentimi di disabilitare la modalità ospite poiché non ci sono più ospiti. ", + "Ho disabilitato la modalità ospite e ho ripreso le normali operazioni. ", + "Disabilito la modalità ospite. ", + "Dal momento che non ci sono più ospiti mi permetto di disabilitare la modalità ospite. " + ] %} + {% endif %} + {{ modo_ospite|random }} + {%- endmacro -%} + + + {# *************************************************************************** #} + {# INIZIO SEQUENZIALE DELLA COSTRUZIONE DEL MESSAGGIO / NOTICIA #} + {# *************************************************************************** #} + {% if not call_no_annuncio|default %} {{ annuncio() }} {% endif %} + {% if call_modo_ospite|default %} {{ modo_ospite() }} {% endif %} + + {# Esempio di come aggiungere altre variabili - Chiamata da Automazione di Benvenuto #} + {{ benvenuto|default }} + + {# + Contenuto del messaggio passato tramite automazioni/script + #} + {{ message|default }} diff --git a/packages/centro_notifiche/hub_main.yaml b/packages/centro_notifiche/hub_main.yaml index ca1ba51..acd26b7 100755 --- a/packages/centro_notifiche/hub_main.yaml +++ b/packages/centro_notifiche/hub_main.yaml @@ -16,11 +16,12 @@ homeassistant: customize: ## NODE ANCHORS package.cn: - version: "5.0.6" + version: "5.0.7" customize: &customize package: "Centro Notifiche 🔔" site: "hassiohelp.eu 🌐" author: "Caio & Gianpi" + version: "Main 5.0.7" ## AUTOMATION automation.notifier_startup_configuration: @@ -370,6 +371,10 @@ template: alexa_select: "{{ trigger.event.data.alexa_select }}" google_select: "{{ trigger.event.data.google_select }}" notify_select: "{{ trigger.event.data.notify_select }}" + + debug: "{{ trigger.event.data.debug }}" + download: "{{ trigger.event.data.download }}" + beta_version: "{{ trigger.event.data.beta_version }}" - binary_sensor: - name: "notifier_dnd" From baf3fe8fd2b7d6efe5c1d6e7bf4eff4c934de997 Mon Sep 17 00:00:00 2001 From: caiosweet <24454580+caiosweet@users.noreply.github.com> Date: Fri, 16 Jun 2023 23:13:08 +0200 Subject: [PATCH 2/6] Beginning preparation for a stable release --- .../notifier_startup_configuration.yaml | 100 ++-- ...omations.yaml => example_automations.yaml} | 174 +++---- ..._message.yml => example_build_message.yml} | 0 ...lo => example_build_message.yml_by_Angelo} | 0 lovelace/card_alexa.yaml | 83 +-- lovelace/card_centro_notifiche.yaml | 63 +-- lovelace/card_google.yaml | 53 +- lovelace/card_impostazioni_assistente.yaml | 14 +- lovelace/card_menu.yaml | 491 +++++++++--------- lovelace/card_menu_hui.yaml | 299 +++++++++++ lovelace/card_my_menu_custom.yaml | 312 ++++++++--- lovelace/card_voip.yaml | 23 +- lovelace/dashboard_raw.yaml | 201 ++++--- packages/centro_notifiche/hub_alexa.yaml | 46 +- .../centro_notifiche/hub_build_message.yml | 2 +- packages/centro_notifiche/hub_google.yaml | 23 +- packages/centro_notifiche/hub_main.yaml | 158 +++--- 17 files changed, 1271 insertions(+), 771 deletions(-) rename examples/{hub_automations.yaml => example_automations.yaml} (87%) rename examples/{hub_build_message.yml => example_build_message.yml} (100%) rename examples/{hub_build_message.yml_by_Angelo => example_build_message.yml_by_Angelo} (100%) create mode 100755 lovelace/card_menu_hui.yaml diff --git a/blueprints/automation/caiosweet/notifier_startup_configuration.yaml b/blueprints/automation/caiosweet/notifier_startup_configuration.yaml index 3ce7b57..c095baf 100755 --- a/blueprints/automation/caiosweet/notifier_startup_configuration.yaml +++ b/blueprints/automation/caiosweet/notifier_startup_configuration.yaml @@ -26,7 +26,7 @@ blueprint: name: Personal Assistant description: |- Imposta il nome del tuo assistente personale. - Verrà utilizzato nei titoli dei messaggi testuali e in dashborad. + Verrà utilizzato nei titoli dei messaggi testuali, in plancia, e nelle notifiche di home assistant. Esempio **[Jarvis - 20:43:12] Garage** _Choose a name for your personal assistant_ @@ -252,8 +252,7 @@ blueprint: sip_server_name: name: Service Sip server name description: |- - N. Tel / @user: inserire qui il numero di telefono da chiamare o l’utente telegram. - [Addon](https://github.com/sdesalve/hassio-addons/tree/master/dss_voip) del nostro Admin SDesalve o chiamata tramite [CallMeBot Telegram](https://www.callmebot.com/telegram-call-api/) + Inserire il servizio utilizzato nell'[Addon](https://github.com/sdesalve/hassio-addons/tree/master/dss_voip) del nostro Admin SDesalve _Service Sip server name_ default: fritz.box:5060 @@ -478,7 +477,7 @@ action: entities: >- {# Backword compatible .endswith('hub') #} {{states.automation - | select('match','.*[_\s]hub|.*notifier[_\s]', ignorecase=True) + | select('match','.*[_\s]hub|.*notifier[_\s]|centro.notifiche[_\s]', ignorecase=True) | map(attribute='entity_id') | list }} - alias: "Creation of the notifier_location_tracker Group from Person" @@ -505,25 +504,6 @@ action: object_id: notifier_player_google entities: "{{ google_media_player }}" - - alias: "IF DEBUG - GROUP SETTING" - if: "{{ debug }}" - then: - - service: persistent_notification.create - data: - notification_id: "centro_notifiche_config_group" - title: "GROUP Setting" - message: | - ```yaml - ___ - AUTO GROUPS - PERSON: {{ state_attr('group.notifier_location_tracker', 'entity_id') }} - ALEXA: {{ state_attr('group.notifier_player_alexa', 'entity_id') }} - GOOGLE: {{ state_attr('group.notifier_player_google', 'entity_id') }} - ___ - INTERATION: {{ integration_entities('group') }} - ___ - ``` - - alias: "Set the default settings to get started" if: - "{{ is_script }}" @@ -716,7 +696,7 @@ action: message: |- {% set message = data %} ```json - {{ message | to_json(pretty_print=true,sort_keys=False) }} + {{ message | to_json(pretty_print=true,sort_keys=True) }} ``` #------------------------------------------------------------------------------------# @@ -846,7 +826,6 @@ action: {% set DEFAULT_NOTIFY = iif(CN_NOTIFY in ['unavailable', 'unknown'], HA_NOTIFY, CN_NOTIFY)%} {{ iif(DEFAULT_NOTIFY is string, (DEFAULT_NOTIFY | regex_replace(find=" *, *", replace=",") | lower).rsplit(","), DEFAULT_NOTIFY) }} - ha_start: "{{ states('sensor.ha_start') }}" start_message: >- {{ iif(states('sensor.notifier_config') != "", states('sensor.notifier_config'), 'Il sistema ') }} è operativo!. @@ -861,42 +840,35 @@ action: title: "{{ icon }} {{ title }}" message: | ➡ {{ time }} - - choose: - - conditions: - - "{{ 'start' in title }}" - - "{{ is_script }}" - sequence: - - if: "{{ states.sensor.ha_start.state is defined }}" - then: - - service: homeassistant.update_entity - entity_id: - - sensor.ha_start - - sensor.verifica_tempi_setup - - wait_template: "{{ is_state('sensor.notifier_debug_error', 'on') }}" - # - wait_for_trigger: - # - platform: state - # entity_id: sensor.notifier_debug_error - # to: - # - "on" - # - "OK" - timeout: 120 - continue_on_timeout: true - - service: script.my_notify - data: - title: "HomeAssistant Start!" - notify: "notify.{{ notify_name }}" - message: | - 📬 {{ start_message }} 🕵 - 🟩 {{ iif(ha_start != 'unknown', ha_start, states('sensor.notifier_debug_error')) }} - alexa: - mode: "{{ repeat.index == 1 }}" - message: "{{ start_message }}" - voice: Giorgio - type: tts - google: - mode: "{{ repeat.index == 1 }}" - message: "{{ start_message }}" - # default: - # - service: "notify.{{ notify_service[0] }}" - # data: - # message: "DEFAULT: {{ icon }} {{ title }} {{ this.entity_id }}" + - if: + - "{{ 'start' in title }}" + - "{{ is_script }}" + then: + - wait_template: "{{ is_state('sensor.notifier_debug_error', 'on') }}" + timeout: 180 + continue_on_timeout: true + - if: + - "{{ states.sensor.ha_start.state is defined }}" + then: + - service: homeassistant.update_entity + entity_id: + - sensor.ha_start + # - sensor.verifica_tempi_setup + - wait_template: "{{ states('sensor.ha_start') not in ['Error', 'unknown'] }}" + timeout: "{{ wait.remaining }}" + - service: script.my_notify + data: + title: "HomeAssistant Start!" + notify: "notify.{{ notify_name }}" + message: | + 📬 {{ start_message }} 🕵 + 🟩 {{ iif(states('sensor.ha_start') != 'unknown', + states('sensor.ha_start'), states('sensor.notifier_debug_error')) }} + alexa: + mode: "{{ repeat.index == 1 }}" + message: "{{ start_message }}" + voice: Giorgio + type: tts + google: + mode: "{{ repeat.index == 1 }}" + message: "{{ start_message }}" diff --git a/examples/hub_automations.yaml b/examples/example_automations.yaml similarity index 87% rename from examples/hub_automations.yaml rename to examples/example_automations.yaml index 9b9b5e8..a3c7b69 100644 --- a/examples/hub_automations.yaml +++ b/examples/example_automations.yaml @@ -6,93 +6,93 @@ automation: #----------------------------------------------------------------------------------------------------# # Home Assistant Start/Final Write/Close/Stop/Restart #----------------------------------------------------------------------------------------------------# - - alias: Home Assistant Start Stop Hub - description: "Notification Home Assistant Start/Final Write/Close/Stop/Restart" - initial_state: true - mode: queued - max_exceeded: silent - trigger: - - platform: homeassistant - event: start - - platform: homeassistant - event: shutdown - - platform: event - event_type: homeassistant_final_write - - platform: event - event_type: homeassistant_close - - platform: event - event_type: call_service - event_data: - domain: homeassistant - service: restart - - platform: event - event_type: core_config_updated - action: - - variables: - title: > - {{ (trigger.description | regex_replace(find="\W|_|event", replace=" ") | trim | capitalize) - if trigger.description is defined else "TEST" }} - time: "{{(now().time()|string)[:-4]}}" - icon: > - {% if 'stop' in title %}🛑 - {% elif 'final' in title %}🏁 - {% elif 'close' in title %}⛔ - {% elif 'restart' in title %}👍👍 - {% elif 'start' in title %}👍 - {% elif 'Call' in title %}📞 - {% else %}❗❓ - {% endif %} - notify_service: >- - {% set DEFAULT_NOTIFY = states('input_select.notifier_text_notify') %} - {{ (DEFAULT_NOTIFY|replace('notify.','')|regex_replace(find=" *, *", replace=",")|lower).rsplit(",") - if DEFAULT_NOTIFY is string else DEFAULT_NOTIFY }} - - choose: - - conditions: "{{ title != 'TEST' }}" - sequence: - - alias: "Repeat text notify" - repeat: - while: "{{ repeat.index <= notify_service | length }}" - sequence: - - variables: - notify_name: "{{ notify_service[repeat.index -1] | replace(' ','_') | lower }}" - - service: "notify.{{ notify_name }}" - data: - title: "{{ icon }} {{ title }}" - message: | - ➡ {{ time }} - - choose: - - conditions: "{{ 'start' in title }}" - sequence: - - service: homeassistant.update_entity - entity_id: - - sensor.ha_start - - sensor.verifica_tempi_setup - - wait_for_trigger: - - platform: state - entity_id: sensor.notifier_debug_error - to: "on" - timeout: 120 - continue_on_timeout: true - - service: script.my_notify - data: - title: "HomeAssistant Start!" - notify: "notify.{{ notify_name }}" - message: | - 📬 Centro Notifiche operativo! 🕵 - 🟩 {{ states('sensor.ha_start') }} - alexa: - message: >- - Il sistema è operativo!. - voice: Giorgio - type: tts - google: - priority: true - message: >- - Il sistema è operativo!. - default: - - service: "notify.{{ (notify_service | default(['notify']))[0] | replace(' ','_') | lower }}" - data: - message: "DEFAULT: {{ icon }} {{ title }} {{ trigger | replace('_','\_') }} {{ this | replace('_','\_') }}" + # - alias: Home Assistant Start Stop Hub + # description: "Notification Home Assistant Start/Final Write/Close/Stop/Restart" + # initial_state: true + # mode: queued + # max_exceeded: silent + # trigger: + # - platform: homeassistant + # event: start + # - platform: homeassistant + # event: shutdown + # - platform: event + # event_type: homeassistant_final_write + # - platform: event + # event_type: homeassistant_close + # - platform: event + # event_type: call_service + # event_data: + # domain: homeassistant + # service: restart + # - platform: event + # event_type: core_config_updated + # action: + # - variables: + # title: > + # {{ (trigger.description | regex_replace(find="\W|_|event", replace=" ") | trim | capitalize) + # if trigger.description is defined else "TEST" }} + # time: "{{(now().time()|string)[:-4]}}" + # icon: > + # {% if 'stop' in title %}🛑 + # {% elif 'final' in title %}🏁 + # {% elif 'close' in title %}⛔ + # {% elif 'restart' in title %}👍👍 + # {% elif 'start' in title %}👍 + # {% elif 'Call' in title %}📞 + # {% else %}❗❓ + # {% endif %} + # notify_service: >- + # {% set DEFAULT_NOTIFY = states('input_select.notifier_text_notify') %} + # {{ (DEFAULT_NOTIFY|replace('notify.','')|regex_replace(find=" *, *", replace=",")|lower).rsplit(",") + # if DEFAULT_NOTIFY is string else DEFAULT_NOTIFY }} + # - choose: + # - conditions: "{{ title != 'TEST' }}" + # sequence: + # - alias: "Repeat text notify" + # repeat: + # while: "{{ repeat.index <= notify_service | length }}" + # sequence: + # - variables: + # notify_name: "{{ notify_service[repeat.index -1] | replace(' ','_') | lower }}" + # - service: "notify.{{ notify_name }}" + # data: + # title: "{{ icon }} {{ title }}" + # message: | + # ➡ {{ time }} + # - choose: + # - conditions: "{{ 'start' in title }}" + # sequence: + # - service: homeassistant.update_entity + # entity_id: + # - sensor.ha_start + # - sensor.verifica_tempi_setup + # - wait_for_trigger: + # - platform: state + # entity_id: sensor.notifier_debug_error + # to: "on" + # timeout: 120 + # continue_on_timeout: true + # - service: script.my_notify + # data: + # title: "HomeAssistant Start!" + # notify: "notify.{{ notify_name }}" + # message: | + # 📬 Centro Notifiche operativo! 🕵 + # 🟩 {{ states('sensor.ha_start') }} + # alexa: + # message: >- + # Il sistema è operativo!. + # voice: Giorgio + # type: tts + # google: + # priority: true + # message: >- + # Il sistema è operativo!. + # default: + # - service: "notify.{{ (notify_service | default(['notify']))[0] | replace(' ','_') | lower }}" + # data: + # message: "DEFAULT: {{ icon }} {{ title }} {{ trigger | replace('_','\_') }} {{ this | replace('_','\_') }}" #----------------------------------------------------------------------------------------------------# # Accesso Fallito # Banned IP persistent_notification.ip_ban title: Banning IP address diff --git a/examples/hub_build_message.yml b/examples/example_build_message.yml similarity index 100% rename from examples/hub_build_message.yml rename to examples/example_build_message.yml diff --git a/examples/hub_build_message.yml_by_Angelo b/examples/example_build_message.yml_by_Angelo similarity index 100% rename from examples/hub_build_message.yml_by_Angelo rename to examples/example_build_message.yml_by_Angelo diff --git a/lovelace/card_alexa.yaml b/lovelace/card_alexa.yaml index 60bd5d4..b1d593f 100755 --- a/lovelace/card_alexa.yaml +++ b/lovelace/card_alexa.yaml @@ -1,40 +1,45 @@ -type: entities -title: Alexa -show_header_toggle: false -state_color: true -entities: - - type: section - label: '' - - entity: input_boolean.notifier_alexa_switch - icon: mdi:dots-circle - - entity: select.notifier_player_alexa - - entity: input_select.notifier_alexa_type - - entity: input_select.notifier_alexa_method - - entity: input_boolean.notifier_alexa_smart_volume - - entity: binary_sensor.notifier_alexa_speak - icon: mdi:speaker-message - name: Alexa Parla - - type: section - label: SSML - - entity: input_boolean.notifier_alexa_ssml - - entity: input_select.notifier_alexa_voice - - entity: input_select.notifier_alexa_language - - entity: input_number.notifier_alexa_prosody_rate - - entity: input_number.notifier_alexa_prosody_pitch - - entity: input_number.notifier_alexa_prosody_volume - - entity: button.notifier_ssml_reset - - type: section - label: Info +type: conditional +conditions: - entity: sensor.notifier_player_alexa - - type: attribute - name: Entities list - entity: sensor.notifier_player_alexa - attribute: entities - - type: attribute - entity: sensor.notifier_player_alexa - attribute: selected - - entity: group.notifier_player_alexa - - type: attribute - entity: group.notifier_player_alexa - attribute: entity_id - name: Players + state_not: unavailable +card: + type: entities + title: Alexa + show_header_toggle: false + state_color: true + entities: + - type: section + label: '' + - entity: input_boolean.notifier_alexa_switch + icon: mdi:dots-circle + - entity: select.notifier_player_alexa + - entity: input_select.notifier_alexa_type + - entity: input_select.notifier_alexa_method + - entity: input_boolean.notifier_alexa_smart_volume + - entity: binary_sensor.notifier_alexa_speak + icon: mdi:speaker-message + name: Alexa Parla + - type: section + label: SSML + - entity: input_boolean.notifier_alexa_ssml + - entity: input_select.notifier_alexa_voice + - entity: input_select.notifier_alexa_language + - entity: input_number.notifier_alexa_prosody_rate + - entity: input_number.notifier_alexa_prosody_pitch + - entity: input_number.notifier_alexa_prosody_volume + - entity: button.notifier_ssml_reset + - type: section + label: Info + - entity: sensor.notifier_player_alexa + - type: attribute + name: Entities list + entity: sensor.notifier_player_alexa + attribute: entities + - type: attribute + entity: sensor.notifier_player_alexa + attribute: selected + - entity: group.notifier_player_alexa + - type: attribute + entity: group.notifier_player_alexa + attribute: entity_id + name: Players diff --git a/lovelace/card_centro_notifiche.yaml b/lovelace/card_centro_notifiche.yaml index 076963d..08c2cce 100755 --- a/lovelace/card_centro_notifiche.yaml +++ b/lovelace/card_centro_notifiche.yaml @@ -1,29 +1,34 @@ -type: entities -title: Centro Notifiche -show_header_toggle: false -state_color: true -entities: - - type: section - label: Monitor - - entity: binary_sensor.notifier_people_home - - entity: group.notifier_location_tracker - - entity: sensor.notifier_day_period - - entity: sensor.notifier_day_period_volume - - entity: binary_sensor.notifier_dnd - - type: section - label: Modalità - - entity: group.notifier_group_notification - - entity: input_boolean.notifier_text_notifications - - entity: input_boolean.notifier_screen_notifications - - entity: input_boolean.notifier_speech_notifications - - entity: input_boolean.notifier_phone_notifications - - type: section - label: '' - - entity: input_boolean.notifier_holidays - - entity: input_boolean.notifier_guest_mode - - entity: input_boolean.notifier_priority_message - - type: section - label: Interfono - - entity: input_number.notifier_intercom_volume - - entity: input_text.notifier_intercom_message - - entity: button.notifier_last_message +type: conditional +conditions: + - entity: script.my_notify + state_not: unavailable +card: + type: entities + title: Centro Notifiche + show_header_toggle: false + state_color: true + entities: + - type: section + label: Monitor + - entity: binary_sensor.notifier_people_home + - entity: group.notifier_location_tracker + - entity: sensor.notifier_day_period + - entity: sensor.notifier_day_period_volume + - entity: binary_sensor.notifier_dnd + - type: section + label: Modalità + - entity: group.notifier_group_notification + - entity: input_boolean.notifier_text_notifications + - entity: input_boolean.notifier_screen_notifications + - entity: input_boolean.notifier_speech_notifications + - entity: input_boolean.notifier_phone_notifications + - type: section + label: '' + - entity: input_boolean.notifier_holidays + - entity: input_boolean.notifier_guest_mode + - entity: input_boolean.notifier_priority_message + - type: section + label: Interfono + - entity: input_number.notifier_intercom_volume + - entity: input_text.notifier_intercom_message + - entity: button.notifier_last_message diff --git a/lovelace/card_google.yaml b/lovelace/card_google.yaml index dc3326e..6a2b856 100755 --- a/lovelace/card_google.yaml +++ b/lovelace/card_google.yaml @@ -1,25 +1,30 @@ -type: entities -title: Google -show_header_toggle: false -state_color: true -entities: - - type: section - label: '' - - entity: input_boolean.notifier_google_switch - - entity: select.notifier_player_google - - entity: input_select.notifier_tts_notify - - type: section - label: Info +type: conditional +conditions: - entity: sensor.notifier_player_google - - type: attribute - name: Entities list - entity: sensor.notifier_player_google - attribute: entities - - type: attribute - name: Selected - entity: sensor.notifier_player_google - attribute: selected - - entity: group.notifier_player_google - - type: attribute - entity: group.notifier_player_google - attribute: entity_id + state_not: unavailable +card: + type: entities + title: Google + show_header_toggle: false + state_color: true + entities: + - type: section + label: '' + - entity: input_boolean.notifier_google_switch + - entity: select.notifier_player_google + - entity: input_select.notifier_tts_notify + - type: section + label: Info + - entity: sensor.notifier_player_google + - type: attribute + name: Entities list + entity: sensor.notifier_player_google + attribute: entities + - type: attribute + name: Selected + entity: sensor.notifier_player_google + attribute: selected + - entity: group.notifier_player_google + - type: attribute + entity: group.notifier_player_google + attribute: entity_id diff --git a/lovelace/card_impostazioni_assistente.yaml b/lovelace/card_impostazioni_assistente.yaml index b90d068..4df4031 100755 --- a/lovelace/card_impostazioni_assistente.yaml +++ b/lovelace/card_impostazioni_assistente.yaml @@ -3,10 +3,16 @@ title: Impostazioni Assistente show_header_toggle: false state_color: true entities: - - entity: automation.notifier_startup_configuration + - entity: automation.centro_notifiche_configurazione_avvio - entity: sensor.notifier_config - - entity: sensor.notifier_debug_error - icon: mdi:account-wrench + - type: conditional + conditions: + - entity: sensor.notifier_debug_error + state_not: unavailable + row: + entity: sensor.notifier_debug_error + name: Notifier Debug Error + icon: mdi:account-wrench - entity: input_button.notifier_reset_config - type: button icon: mdi:restart @@ -38,7 +44,7 @@ entities: - entity: input_datetime.notifier_start_holidays - entity: input_datetime.notifier_end_holidays - type: section - label: VOLUME di default durante il griorno + label: VOLUME di default e Periodo del griorno - entity: group.notifier_group_volumes - entity: input_datetime.notifier_start_early_morning - entity: input_number.notifier_early_morning_volume diff --git a/lovelace/card_menu.yaml b/lovelace/card_menu.yaml index 86cbf42..3c43c97 100755 --- a/lovelace/card_menu.yaml +++ b/lovelace/card_menu.yaml @@ -1,257 +1,284 @@ -type: vertical-stack -cards: - - type: markdown - content: > -
-
+
-
-
+
-
+
-
+
OGVRE00(x##V zUu^XDqU*tazOkiy19#I25 zlZ9xcA1m*xcj6C{rLGYg))ghbDa2#^^so}ew>Rvuoxe>P@JqhtzZvF~rx9glnGp8y zgON#XscRuJ9bBmd`z7hgNO3mn2A2Q2K27+5VtV0MZqe5V>8z;QtHI~+IS(*b!-H9q z8yU2j5j*hX+E1G?-Z P?Ze%z4U;kUwN*W3d;yF~vKrqlAT!Alwu7(r~caCvVO0Vh`C9;@W15R 4D5zB+AM7!yec=LJ zn_at$|HgqNwr6*7PZ$;>cU^`D{u14~0Iy|%g}WvO QV`Crlfl> zK7~+?u{S}rnSlCIt0M}%3AHbU%9U3U8Vq-b=#>;FOjAW?9C)hqd)Vod7svUA#8Ef# z)ptx0K{yfbyOIN-3bnYq5dQ(G@6dayHnK+Hp8z7O p?2pGQ<>!uKFXXO61^E3mV9}$t8K4Lo zlFFof8WubXx^xD~S{OckTkt8ujx Z=11nR@oP_3C zCOD6stl;Ud0gtzh Y8APe(wTbz<5tl^>x zo<@+mWX|M<5h}ERwQdnXjPEK#xAV#T3!>#hfVgV9_Uoh^0v5WE1%MMgo4 ly)7=Prkn5OH;30?0cv9OifTzQM_>mO-!DWH@=qiN?!b(5vo&gJ8cK* z&QQb8-b=Mr&@FgbF^621-otomldVMJ@XQV%*3-YpACOVQ?5n0Z*3g9Q)_-?~|s+ z#gBxfz3Ega7N|a %a^ z2cFg~_Bj&OKhg7Gr-t!)EA53)0sz?q8-;*Px!LE5&~{Ah_dnA^d5Za42VhKwBF2&M z(}|h{Aqg5I*XV(&2BP}kA!6Z*#9^kx4ee7+K5*RBHw(MP0&Z9L-Mz)VOC8V?K1Z%F zxj!hK=PobH$4x0=`b*f5E}B`ssHM%&ezpeosuyeJDzce$qS(O9LU5G7XY$tv6+D<{ z*8;+L6z!xO-R bpP!&$g*BJR7yN8QB@X2G(4mXaLU}z#RYHy7IZvQy zLz_q+FhK*CJlW4P1_N{5`2LYhIWe4r?5$KR0|vnz`i#{6(QShS9-HHCiAt8x9-VNk zOXgaY>jEP8ZJB`EFHvCy0dHn7qXmV$cmvZypDY5OzsS>KM;5dBh=(N@F*V6gjUqNv zU27U(0YWnDJ#Ho9gEWVrW`BMg?1 zq7; 1S(W*Dq^&e2;k_@HQ< zVsn9iE6tTnR^-nwy^tdVMi?EAujJNST~XAuXJrNxj>2KK_A?afpe$JD4ch*kR8;2c zv|Gjk08JM?X7upoMBM2yCb~-?7RF2nOtwzI{``$dg zq@ZjLl8YeZb+Z8;?EC$321Z;udLpp_`MaeD8N4{X+Ko>rPbg9!NlVGO!>y4U{|uP& z;>fpJH9AiozSjL0hFt~t=$qbHnOcC0 vlZuVk3}uK-a0n^TW9V< zgr%2+EmdWI%i**gyZ kX=O%7tgy#Kh0CSzUX<+*UWSLi##(vxa8MV|Fs;p zw$Sml`7!Bhj=MmY4D^$ITXc**>+IMtYo=O$ )IrEu^0ukT;IEdE*Sni0e_(r!|} zl=gRi+WAHH@as!Sjk~BiN{iT~)D=Fr-qR}kH*Q^RIy3xdfswE5Bi84tfv}`#f_1b1 zqu~=dY={jvcI&FC+*G<|0#_7BZf7^WQ5qNxj~2wxZf0=c$I57)kJVdr_7xxruu)lH zWUN{ybGwc8W3xgM`v!m!n?=}QNHlr0Bs5o WaAU1$!-s_C(VmZ#*7rNPCGW0!O`f7UF@K5}Fj5SVlTTr8=E|HL)I~+* z083hVOc4@yvy>C|H}3_K>FCJ_gcn``rBQPx&oz~=v?-xxfSI+>g@(h>B{mN-s4W7< zQX>pBc&p<@pQXfbq*xRJ8?r_?|J-~~nMxcoFfQcR4R>_r;f^lB`F>~ (Ocf@i{(TJtkM zbF=}zMPY-+S9t0$9~faTdU=1-OIqU>zoCI`FC_JiIRiwzEW|UKl4gFGuN>I>j3q|J z<*k*y?G|2Whpb4XskB21!a|t@%xLx|A3MmN%3`s1*w=byLxpIqqHM?8EUZ;)La7q> z$#-)g)^{wupE|c_!_TN3CFSW(%&R)@l(|27KA||W!owQA2xd$ez7wPR*l=l;Q0+i% zgjyY@AO=h6xKvp27M3C&IV!{D-BY@%BOsWOVRGpaI)e8GEa=6IX7C1ai`C({IfJ>n z0EGr`IiQfe@|wu%#PgGF)4b8NB%jSdiE9sR-p&Z6DmrIkwHD!b8>{A@3V|SYqAt3A zjhq=cI%?92Rk_5~c~1$vcwB0b2*FH{V%{yUF( CgAAU8e$0**>k zu-KIkz+44)KC}HeNA!dGtPTk2G;4TnkEhY)U~14h=NpsgtEHw4ppYne25^?)$hS5Y zdcKVKJ%KPGf%dX7VY|{JI4~nL7_M$G%;bKiEjc6U`NceH^*8BxC|aDR9>{@=J!6L7 z41!Nu{}Y #DA^{j8jFZl+SlZLesM46XZvhfH*r!L-R(U-=*rI=>7?1&GsrUIgWo{BNq95|9{ zuA%zFU^CB4)$9UczK_6&zjJ_UD{>!c#`YXtV_oTPUusl8{YySz>}Y?g3HDMI=jJC3 z19rsQ6)dlqA;(OL#p|eTG!aSZ*U<+W-2Vz7grTeT9)XxNEZtwOSdhZyuJ7W1$JAbE zHWJ-GYfM1#MQ&5_1;~4nz`)#|fOIqW@VGk8;TNM(hjgR{Kc_t{J%a{en9%k6>b?Uo z)I9~Erwqh8$TapBQ0|jgTM?^TC{W>bb+%oQs1_FEk!@m4>iF3z3ILl9J(sU2_*A>; zzW)iC6|_6K=DX;Bamt{j9DCQ|Kho7&{ cI z+muI@Rpk?!lrAF(qHG0oqf{^HK)*j3k{wt2wYK_8ST4FnJ8>djrRWKw1p?tE)g%o? zT4gd7sXVVjG;8xTQL*tMunp3W$u;q)VWZ?^&UjHLLGNY+OD7DmHGphq3soX;W53En zoZgsWVUvYYieQKsAL54yjDltoCpA|L91934a$n=a>$D;-%CI8%ap !e-S|mlZCFlh0EN^Q<6WD3!DQpq}~b%PjTWttFhcRf2q}Q zKVsm1_jfoxVwq+Vlp3p=f6&Y)M8%aU3Dt%)vLuFnV|z~;_r&P(iA$YTRnb>-mscj` zJiaex1yrc8Jmt9APhM=o^UT~#OGN8)ai_SDT_Wz}VK94lD;Cn82L~;DD+{i#?w9jM z<@qVPlT*S(fTvH}t*Y`q`B%g=;JAFJCbCNj;lVRStD?vJd1Brpqa@Yp&pEejoZfV( z@VD-tQ+p@KMNO!``8j;8Lgk3gjiAABXm-EzZ!a#u>;Gcc4Z =sZOwH&=jGPGX=k7Rh}-^TkW}@7NITKY!mqpg z-?G+c8|NE0d I^Kj#gztl1s53V(E~hhF95`F{KpzKNqi2F6ofN8R zf$$6Uc0(8i@?sKzUFEl T2z%Nx-wq zDwmIX@ipN?&U=p{vn(==UaR0}Izjl>K%!k)>x(z?meN)XWtBTwvi&o|&Q^Av@r)ns zDeHzvSy~Q#Iz@`@c|JjUnYVrXD|Q$B0a!}zM3a}|vCEu`&76+_-+rX@fW&^($)woD zTEZ7Z@)u&he^g0xW3nTdopT=q (QNaCx1Wi7P1n+-gFt68O_KdcZ zLa<-QwD6>M Tz7 z@K7TGSelhjJL{4YA+DjF(p*DtBJtjtfwYB(KOxt&ShE%Mr%GkiKsb!)<3S@+j!k29 z2nGpqSQ3Rss+>CEKrQCk_B%Xs@oyV17XNNA%S(Oxm`SOSRe)r8UX31nvCq_z6cTI5 zxndQGIj#K(5s+jOb_gQEIkAk*uAP#>aRy-4Wmxx07f#WuL6cVd;Z-5!JwC}k+62gN ztzTUH2&Sh&XPA6#;jdd6X+4O=l*kjOSm380ATGWF9w6P*9_eST9UNpfbXS6nTNcX^ z2zgq&vZ^n{DBrkc&+5!(U)a^(^~WFeOJ(pHd|`O6M$kH0oopfnFQn*lmQ!MBh)uxJ zY29H-o+u*41`K77FH~Gm8U}1@1wdD#19u~ARt|9CGc((}W?m>L8TLMfN?scQH-Ux1 zH~I5X+`itdI`Yv6t`_qTDxp-qWuF7H_)Ab~#T||*?CUl#s1755oTz)Z9V%q?E~p&& zqgSmD(ZqqGDv)pxwGPJq#=}=lK~|M@ByF@!qF3MfSO@bnwnH%#E0bra4?AiU%j<>8 zwCklrqtSdImd&HK={-3~XpaN^kWsAEjGCmN3N@SF#WuG02Yu=ZTKw+Rk!U?n$|Tz~ z0JJlKyy=CkK6Kc?KV&^r_gRtA#$PA Gp^WwE8DA7DfkLowc=W2w zFO3jHASjbeHFS+647A>HSDbXu)hr(CoQDx31P1F)-z~E=OC0d1kqmXP499Y$2FtqZ z78}8aX)N$j e&Fm^jn{*Wo%OUy1;U!plA*94*RKC% zMtHi9 >wWjMfb?fEs!5zlctkFNeK(}A7%}XF<|vV0PgPtR8ulehH@W}Z0Ni7{ z>;9a68_DTHjH{Pi&nodke~iFAF&c^~e>BQtVLlqc3HkKe@+!eXL-7Te<^ti%M{oGP z8G{F@xzU`nNqvV2CD!LZLx;XfudtzQoQNp2A y zUZS67VBnBZn(!Bop5Z=u8YIGGc=l8vy2{Et>m!mbHXk98SwsDAwJ=7 p%U7KJ0i_L)^*LW=9TiNyGcan0L-b^PkZ&HtH#WA6|x z_{r>(Wj43N|n@IoS{smsrZI?4b^h;%SOWK^aZ~1+EwEb}WU@J|H34{{8 zb4StESfrussglK2KkB*yVy!h7TlXs(Bv@j3G3iu-Db>7CLMq-AVN63t%ab|dU NN`+PVt`KG3GzmwE%k^EnZO(V*6Y>wIdQB3YC8$|Rhj@}!KS;b?N06cvWbxLXQG z)s&q>ZMTOPW}w-6|L)$WDewJwQHDOu`O>#b0#fq2MSISosS<_d{NJbgzp281lWH9} z`JmQ2>f0x>(k)&VOq%tv4Kjay@VVaiET^sPo}xx;?$6?ER7A0}xDs(_)->bt9u0oi zgapyTuEOoo>lD+MLZjglPdfac?af&@*(MYzoQ# 4iidWxd<(iM)(bqSX z;qWzdeIpH_`F3j)uwGS X~kA;SC0;GgnDVh_37>MS;ZfVVbO#u6h+Bo@}kgUr(PxQ7=*VNiYhzoZ$7Jt zTZsotW3n*2&9cX_GIvMoEl552Kq_F>nRgu_c{rC`SV}h `XlA!L{+vFU5`ejA7Rpo)ola zoE`T8MI369HJpb5?5Qbw+J)>QY(A(Z`Jz}wqvn!rc}}dXV-;zmjEV7~M-UTo@OXy0 zGV=gF&L<#sb)IGK_H 2#9~Xl2K_68nCbt44yoqB7=u6>8UoDc}&VMir zJxlEHce{8S8|xcV_pz9bQl$A!!XyB!77PS$u6#)RSn+5uK=Rs`K<$3AfRF&aqW-|> zIX6NayQ6u$|Lr7Vi*+L7!Y7GBsQKfEk1f(l^naf><*-5XeaXPN#7ei<$A5dBst42? zd-;9y?PQ7aR@Rbf0l!dgs}&(l>XITwtf8dWwJ{NYR)KX44B`WK9bp}WC#r-oVAWX7 zIKk_~?fFWt#FDHel4%hABU7#A0~!t!pgRLXzXK=d??EF^lvTr?*s?%-km6)uB|GJ} zd#(JbF?ll36jG1Q0lX>K`#hLJ$oaBdFvAmn#wUBi{=HAGXY?A8#J;vrEU!ESW&6G9 zfT0S#QO@=JL$W072U@rX>CFW8=zFn(amUZw1s;u}W3}8a(|BnxZ$i4b@kA}*EEsiv zL-{fR$44dIu8%>xK$(TlB+dMJc`qzXQXXR;QpoPJL Ae_~DuMcADtQAK6X-Pv2)zI)jTv(LCA5@dlX-K|SI0-AIBiKWuh|lY^O)X`M zSal3-PaG=t)I|in(~0m0C0id0!0&Z^H-Z&H$eZ7(%dY<61&|Ly$;b{%WK`bi>_sA0 z4Tv1UG7Y-notn(!Bw+%i^W>H)dPMAEs(`g!#naE`kNsE`rJi}S`cE!)BBiGYe#bsY zL1ErvRF}5VTc^GY59zC+PiM>UCt2sm |FdnC=^zL+j@Yj zy6pJucWbQX;C^z6u&7EW=@sLB^*deCBk@m=YA9AW@JZ8?PXO;$vQ56skvV5XA2o7W z>=Gxwd;EaeQ!hr^<|lW+oI2m1MIcb=cWV|ke#57)D-#|`@;wqi&RBCl|F{~Z5?T8t zC|{NQ22RI0Lpgu;J` to|~!v40?2xbc2bh!b!#s1Fx<<5HgC|Hh}0sT}m zbdW4&{DHd_u@_Qvc7No|WXI`o&u)~hsZDGSPEf4s 98L zNhDKT_!j;JH*V>twN+1e<>s-rCd!NpXqOF&b)bM{{=dvn0E2P@ngS4UC}M)K&W)~L zTKM*V&13n^3DMvb2R `mCOt^EufY@ceM ;3f(I#a+SG9lqogTdMwEQ>{ zAQXlzjSM>0#kH3<8%-%3>|tCQ%J%5>#&z01<8Ay_W p0Y6{Yh z+Pb)Fd &%Sq-W$*I?Tpswhy%1bZ(~S4geIC7A`bGn} zf(Oqt{qb?(dVOcip ~7cN6@d%klCGGji)g8C)+NTZsw0|+Js%Wdjyj$b<6 zG$R5j2t*aeD~A!Y+xIgmu%2zA&%eM=XgY~CMj$YEPtolbZKeiAV1rc1;7 GEEX1wa`M}eNWyQBv&07JG(5to?9`Vp>*Tx(^jO` RHA4vc4_U!IcxPbp`M8!lw6eV*i{5lr$lZS?OSxYxzJ5e-@@m zbo+X%RU#j8iPkY|4D;61?w`7fUHKAZW8yTm;!D4e0aeP|j)>t$F@w{pwH}9_8hAiq zsJ~W~YcQCpC SNhxi+#?2F%Dv~*j9Srhh6?sQ zTM~cgAuU~us-}Tz2c%a&Blc%j9j!mDg(V(9S>M!dTmx!dmd8*#1TCbroD}XIFdz(^ zpJU;L54QWFCNBlsAyJEQ#X73jTT%b{8&fAOoiujcUVdfO7-zXq#}=A)B!b~B12n9u z2_*v8Vw69eXS`7&pu%scYXz|43U>SWz%B~Eh@@v!9Y?58xzM1D+OFHpSWaST3* z#N?Af-JQx0WJTS`pBW1(YyH9S(gry|C>Ti0@?2p|x1d-h*SB>@!ER;F=Mh8n56a< zUTzMs)8fS0#8Y_56j8uyttbERF(i6j!5vx+1`AJw972r=v2wzsgl7UzV1^2yXOCF} zo)TRvS?$2tFE2NLIUhi+IL=%6(TTQ*xo2KCB`XdwJN;=u(LK0yx!) z_y%$BT|oVQPanyFf`K^iW8Bn(x v}c1o?XouF<#yq` zBdHR&kwM~hRua#r)GB7LAJsh_fK%_~ZIY;}(*V7~@B0ToBRv|@PV-v6dhcWdEI~F^ zN!G) 02o`D8{EW;Zjh=9Z)p;%%bsl zx$+lHg&1_jH4``L{jLNTX|K!ccHEOLyY^NmEt7Y1p-ct#ewgxCd*pH!+h=6I5=jS0 z3H{%q(gFRYEf)kIH~9<^du}4)4}*`-KIF05#>~+9&e`8Hgz^2PsbP-rJUO}CBo``w zu~M&sN$d>NK^5$P?3p5J3yY&vzF}f>F1Q|t{PBD*#$&F~EsSFTgg#tj9L?Z?xuZ;< zuNJ-Z$o 5(Y-%4LUC?d1G)H-9AQ&j-E9+_n0&?ib) zlhBNyej>=Ws3iyso6;De&5ChuF4_w2Np;i=Y44m8e$IYEGUmlwnFov&v8vmwnl69b zu{O1w0@5dTA0*bKBD>Pu(n9&tA+cU~$2rZ6fVBwTcs>&7hAjbiE_p6h@QrLwzI(j^ zAdYvH!R%W ~YhQu}Y?k24tQR5RXx>ZJ83PQ8n!ac6W@v-Vf#EBCh)IP~K8 z)Ll1z3l8fIp++}X+EbKOU-6M+`VQ7!({Y4w;!vcq;}2O&0Vx6!xp9}kvD_hq&=C#< ze;S}(2d7{3{~t^ox|(EA*6lm !%2a2G{2GKga@qlLGLsHnrkdZ$A)40+U1{OT2`Q5~9xZFzr01ttQf33|_sTLow} zvL7yiz-Jr<0iTB84n!aiK_O5H@}4{x8dK0U -LfnV33^X>^Smy~uk+Y6Ao 2U~#q=X(SGmqz!F@8yw0 z5fDp2T$xuXu;{Up4FHUoQ4l-bwpt)ak0IW8hqm%g4S3yM5IRM&an9J*|6ito_O_0$ zKhXeG O5S|A<_FQD>h@B1r5d4<6KzBtwi=BjfRpx05Q!x|L%} z`AN31wScCk4v=bv6HsbwPrb>zQKHycX9yjNpRn;+_gTumO8Mm48vMO<2=F`xP(r#` zkV*0Dm=1dISrURD1l(nz(B04?-Sl{gW7eHdP*Ms%aE7h1tTOe92wWHz7QR`kPyNK} zXEY)=;Riw7pUz6fm3e49J)akZ2(~Q4`Fw`a|LsRs@$jb}u;PsI@6t}?@=;q%Vwngh z!IY7bFs3&YW?6{2WcvesE(CcQ{xMFLdx;13O_yGyJfX!O`;@_u0X9gy*~t4Dc$$@y z <06`@29CiagB*2vy(I+f#f^SPZ-;CMZd!34f-9KB-r5*Jp9BaV6I z+oUuj28H+=S0ogRy$y$JO_KX|HszTB%K`fukf*f3+YEDx*Oq<>+HNjpdKs>^YF zL*BKERoZq%`OW><*H2@ vD5|@UCN#SF ziH+hm(n~RaAe~7=zeWVpvkf#)e#5O};~5|Hc4uTSpI4mA+|!9dv{)R$gzsHY>BGdP zRlJE% $rI5c-NYmNRDmX*n6pW25VKiyG2!Y{>J)(q-JcPhLw#rZD zDID(@?ms`sc<_MHly;!>592ETL{7sG%VaA2uQN62nap||s;`A`U-}+CHh%B9$f?%w zw^1`noaA5%Pyaoe-IF2K%I$CUFC&?AvcG><%$8S*{#LK>J2xc!Pj2L8T_UDepU;}% zVJxi{Aw8w+1;oGzJ6w_+zO%!pp$}(FL%Ji?ZIt67ai878EMrK! 7;SV>DSKmH#Ct z18@GDh`f5Jg)J0eq*{+LKw1o_{%2Hd%hLXq`)Akx-q~*@M%T-L6-~EivoEcq#h1-5 zy~no~4<~|7^&FpFnCNYlnZi%CPr{=3AFYiID&0bORmE%_a*{hCK|)FaWbn9WN?(V* z8}-h?Hn*m3J5qyt1gdVu-|P}aRqwLTIV#PaP&e^kmOW;>9B#yj{EXan2KN76EtWFs zLGCTo@6YFNXZk&WQ^efdYE@r7zD*sHv`*u{{ TE-mNHydh1izk(m``T>& zyxudmW3}&?w&8|v%Jx{aCu21F=EauYY;A3fKdsR=YRBlYSRJeFbe J(F~f3TOA$bN|t=$YX{p5Kcs z57E5uA2(iob$dQQ8&9;WUHSP!z?99$!*AoUvnIdBk=10 !FpAB5iHCgAXwmSzl#QcgQq~-PIoPMa(;4(}3-P;xI@Ry> zLc;*{)VO2Q-a3+0H}%2qr)X$edoc`|iyAy!G*&DpbJCFW9qu#;K-!Opsx(DcVYWJz z@BOxw$-BAl1sC{f8Eq* )*NL2+nvnUKK-utZ5~AtG$GZ1Ab2_qr z)}*vzr8E&EMm;5U!UoT&RgZ^`1*?GWw#b})pV!{__`LA$kF)#`{?g5q@mF%{jhW!w zGs9&A_;;7!KpNVj=UU+k$=DXxmoce-`}1?0POm24yL@I;pk{O8bd_S4I;e_Mc>dmx zjjII7c6o70NxxTbzjp7DAw0)_kNbkkF0%%vSr_n(D<#p?r f=vKMtNis4V_;VBRq@gY07PoJyC6V7QW+SBEypWjP<4|0a5h)?;+@v?|&dclj> z6!+(HGgHZ|T0N2*{da1f7+7L$0~?yXGQwOQ+-H`X)zJdCkJp*pL}LD)oxYloBPfl+ z^rl$14YB;g%=_5Ya%v$G?tY@us6;~MFgzY!dxt4?rT>DQmzr>?!s0rZT6Ditt75GR zfsI-`1fE|A73KyJLx7RU4+a12Wa0zfk`rbg)sKysiOb8=AAB5VN8PG-{@x&^m9-|$ zxH-<2yLJ9M{3kwO-?aHXy#4kiN5aNbu47XOkX;$2V%b6!sm_<(62+|dLF+31yN9_( z3C<-*73Y8wI21R;d7$y4mhv%&%4L)O-7~u@YW5mO>JzDhkS|uci_!y1!~W#Urm@}u zemzIwZ~lZOqn=U%MRY*@!sO78stDr$iD5uT5ys*>gHH2NPce!xp~?XOy# j2vS9ms->0MZU{|~!gc6VlXc4j}_xzBUXdEa^Oz2}~H=FFqlYo>xg z-50Um1S=JL5%l0q9O2)QdRKySs?qhHsA~6h;^Z9FmH;q^h7?IFP*uwKh}qvV6WMa& zhCdBmfT2}>UrWO2uUe6DDv^Pym$yc$DMGu3lWD+^V$Z_uXT)mieXQV(wD6*pc>__0 zA~JgkIUzb (HI>&u;M_=oiYQ zFwsoYX;55ZqNYgw0sx`r3?iHqiV+P-CC?BhC>+!^TqBqvqk&h2&<6EYqfWRwO0ykW zZf4LTy -6&p3hWf_1 zq9SNtZuh6`>5jBfm =jc34`qifAawT_zA6gi` Gqsxy>(NQeD)a+WZ!hQm<>gJbl)BbPp?E(Ne#WJ z+6mEBfHE0iZA)r&<@3AaEFtdPocw%rTZNWB@eRxbn;dLuZq?`42i)F-+G(17xzTsi zod?zRTA%~Bx^G6$y-?nnkk2t}XDxXh#Wto*io|rnWcJ~j5Y%;Enrv1wjpz~}1eu~K zYm&&`OU$H3qvik-rbqaUUR&%G{=VT$z!LRVkr-lwlFXhsUN=59r7MG>!7N(LE?W {i+8(U=aFD*m6rAk5K&z*YAj$5DiQeg~@C1M7 zPp+z%vKIN+g8ZFj@MRN^;YEz_%U3V*u9RZU72h%Y#0O}9;w6pcR;hzfy>@In5~6lX z#I;wi+OTi;$#x5{;{gMEc+7~O>?C+rwVf&t=_C B4QOB-EQU>+fKZ(-by1c^3q>< z(PN*BM3y4TNE1!=L4+cnt?|>lca0=3wtuXSN~?tl%SO(IXwcZi{&bcr&*Sm4N`!W9 zUw4cpRmj^zg-tXlkxv7pi*L{Hw`$=#OA-chtA5@^HB(D&*+6V+8TBe=*)YT+V6d2_ zUSNPt3qw4J@l n3!8MJWf}E8?^%K;Li)AjIVA5 z(g+=C0F(s!s$+alc0HBXYn}y|xMDK9_3V#?IgeYsGqkFPUyB+#Ji_09pdjy5bBkiI zs9m4G>4Na{<{*PlzR$25%C3x`Q9r?(9r5n=fp+`qVU%aWC80ITEL)~LHVLN82B$$( zR~ihLAJhn?ywWL*<~mP@rN>aAaWK&(iY#0{|9*E 2;+FJ|#~)f{(zKKJEA?AZ$vJ0%_it(4l) zpQyH)Z2xX$muN {L~(vs3}I11 zJOZfL1U$z@h*LUkJnsKxvP`cRGEnw+?j0JH5*@L|XT<}CTK%lHUHj9mqkHr+H{!h@ zDkU47u)Y2(@Zt7M#Qg2~mEM}U9POk}-TQ-+P@+$@FzSI+-D=5u7AcU}OGUcT%P1Ky z)0fp9k2aMynn`HYExV6g4#QAl*AKkpZE~y9Py!o1)r$}_)jQ B`h_D%sb6 zTgP<(0!i@iL!%{oBpQ4-;CQ^IEkwRoE+5yFZ~TFV?Am0yKRKbN{^NTYFR@vH`f(~k zlfS;a=W^welqKf2#q(g96%ffe5qRUw(C$59lr?2H4Mth)0&k9fl&5Nbuodc%<2xXP z%ZybqoV>Unx?j0R$knvvUPe|OOV07tED%Sh@h8724lNu8zFh?|>xde@@YqYe+Uz_} z-7rBTKPFGyk~pv$rL6f~%aI1;DK@n2C?_TqnY%pC_91wBX1F$3QJ^-_qvN>uiZz$t zm26HWW^iO-TqUo6y#Z*erq21qV9oEW?T8LnczHD~(b;|iaafFY6jrT{87kH@^(oXA ztD~+9vv;TiI!fx|{kW%|bwIgRj%Q`a8~Qc|5oE0*%rHm?oYB{6nI`qQ%cA=FXn@SG zR^vxMo@^kCRo96 zz4wn^-fy-IHGd>C3Gvl8D% {IM)%9V<&r=BD=mC4Oaf`ecrBE;X8|AMw z%mMM|jjg1~%TnH=sQd_-6;5JLqx+2JyR&z%lFn+J8Uprz &xfKgRP5h(aM7s zs7DI}DVWiU2@0xbq+INz=DClGw&x)rfNVm24ZenKk+ivcT?nMjvdk)bWEXKi# 83yLYLQufY!Rx`>`7Dy}M9Gf3*2aEU9vrgg*UST6i zw%|Env=W}+x+j^0e;v+S*PsQ&?2M;>?08)axjo9dIioTI2(|at>w?C6hei8Al=?WR zid#`oET9vba177bbJ2_0W~dIN6I#vLAQWre>E%hRaJYx^4xq?r+oxKok|hhKbV?6M z5q-D;CqL>cy$si1wLq(IPIk#%8;`7Qe>O^iZ1t~auRnSbTG(fxe0t7Lwr~CfPI7ji z_vM}o()dO!W#d2GbNoq>%;v@vUl!WTEFidASpP?5a`DZp3>~{~$>VeFQGLbw>VIF; zP`hn3C4Vx}3 Hf{8S53T1?z^izZc&;SDh>reRDXm3e4csKDd&VJ4YK`%p46c!>t zi@>@8uydY`agafDAZ5%|_)&G_jX-K4wZ)NB-(gOKdH;X*`|+P%Q>JI$W%t5ZbTeg> zNIh;Q2R8?jYDYb}3BR9$bu!JQtESsZE7^&y>d71XqpL`l`S0c7qfCd)UF7MvW#Kkr ze9I+Xv 6)tSQXI zIe;v)Vf{w3kB%6sOo0e%J4}W6$(R1aw^=Y~7ja~Yp)Qpz7ufrZ+DrY*v*bDVUOHIY zdw1FCAOTF)?l1n@isl5|u|EY^A5>*n%c1&em)q^#>2-}zfhJ|U2Ccu0i#ZVI?3Dt| zSztNmmjG)FiyIL`%*>CoJj8`3Q|p6@7%wGPw(WJeTtsl#X6n`9!oLxoLCjS*8#Z&7 zg&d6OV{?LSC#YhKq &bw+U%q0IuLln53H%!^d z(Z&4-&1>36$73IpM$WrY^ra<)bU2IX4OlkhmwkJ9p904C%*T6io^3Q4MS$GVUuH^E zK8=vC zeXl6H(wDy5yaO5V4G8WdD9rbD^h%LQR+YdzWam0Rb^DAUot>0flFHPQ8Xm-T@vHAD zFPFJNm!FRn)*fY+l)pbfG&e}a=5h@}68w;jaiYYTcspolArpb63<7q&5pK*Y04zfc zNC`P6uGa{lhdKRo`v~xsfp*uPKwZdn+T5AK1@bHYku_AH_;4`|qP(-e3yWp;+_?wi zF$pCs9;!t!GSqF-nG62jK{`hY%5Kqaq_# 3r6-J@5iAi#g zZX-iksuf#w&NA41Al*Xt3!g^uRW=bptrw bgUs*>(Fdzi_nIYrZ1C7}$9qi_S zkqtT@qLwOIzFAHsznZA;nYreCvh(9m>PA{Hr-L2@N4xPQ$Pqb!?SgPKGK|f{Wqlt4 zIoP+&KQay7f7W!kKC!$PxZ|Zwz<5VY3b%01{Syp72&jGgzN_%p-V;ufZON9}5a&x< z$=1OU)DXQ%Q7! Alm4+T(s(@I_F|g%RnWmje1tM% zGgUfdX{M~(Cl2Hq@{cu$724jhB0|Tj5i`I^jatl~W( C!0W6UzO4H^Te^ z_(*j5x|v`ZTJ{fIHqP#zLG{$kyQY)~I(z`mA-6`hG <*(->Y_Y#>&P7%ifA@R8 zNp5>Y-P-rSD8Gi1bjZ_SEB%WZwRU%0^g?`eG~R;+j=mb%G}U7WcDj_wkaNT1(-6+S zT8y}Y9u!?ug*XrMvt9J aN(}NhxZKdg zeHt-J2Iy@Fg$Lm^aesl#Q*r67h02p8QN%bGK{H6zsB{fp;j6Hw=3;Nf(4J)g^O$uJ zq9G^fx@dCLWnC`D2Vg(VEETs>XFG#$F8f@8KjD1uj*34GTmb>RXU`y7;&Lw)q+K#t zapb|aNKF~FmLLaHOnLKVQ0lzYQM?#&kK*JP$?c7P7|ZGD_gj~MQqp|28e;pmuMh<# zO!K2|Bb;%2vQBdIIbQPV?SluC;|Fx76t5V4qMw5b;@VKF3+TDQl#QH%85iWkL455N zFu+iM#ScOlyI*$&-TNYuWqJcWSprH~y4_}IehNA>4yM(*JmZtx|42FUwT}%0qAf47 zR#4n$o8xgZhM0CaGE>qtsr#fZWb^n)@r}Y_%~5Etwk`U-VIqzEO$xbljTZ-B)VI CbItnGPg&7RO-KNyleP2%>@k~8f zS~HPpS1TT$bv1ADu2)~B+*0|dMN4!8?@Drz7{8sHw$1;HS9&lK(f#Mfr`X766+iq} z5it?3C)!5Wa3Vxw2>t~qAU$mTf=`O>meW^g0ryXS*Yi`6b9Ln9VO6N>vcpk_Hh@o( zTuE;1o8#SsROAY^pfyjxZzG*Bjn*+J)<2G=mXJ@9DTk-5t%h5{s)3!&`DLZ-k}$OyoR z2O^ dGf+L8IY6f@B_gBJ?ciIbCtQ9J!$@g53FA5*Tp<6tV@z!POO;(eH1 zr@C9_0^!xOCTkJY3_umkfXh5Z7i(Rb%57h^B-1CsaYU_vd;4Fts@}gzr%5rt(;{;< z170!9&3YKYbiR&y#n>#=NfdVdg5=bLQ#^|@E9KyXIT7sC@5J46bwk-yeIKeIWBo)D zeXL4(pWf%rMtFL?|6SN_IxMVKnI19pu(ud~w~!s)zN-{1zeQ4L+u68a(oJI71ObRO zgdAfdX_h#~zj*(Hh{tc(*z?54dtbc3{=dDAuaJ}7TtpC?7h2jM7}9-Xru5rBI9Q{O zIF05LLy3k7-8?tXPHb$S(JJKva5)jqnPT*`nbs1hSR(L8j_uC#ICa2w0%ncg+nmhk zR)%w`roQJg0Le)%Hws_euzM7DEv|Ng`GY+5LFo;T6V*z~iEFi7CDyQE$WlBM6G!3X z1;35X=TP-un$Za8YP@#I@ aesNPzOt^ z%a?v)91! E)UlD_C;!$Wgq&5y7$ZBa%NRro6(LL;Rw#BU3ZtsS6Mns0ua zDc0dB>3dKSHi>(qhx%|y%8W1tr=~QX_u^Icuh@wCRe!J|Um)AJe&wAe!Dv5I3>jaJ z_XkjyR7!udyt 9c^s!iz?&v8%T-j`%+>pirYm-j9+Ly)I13BiW8W#fht_K z9@IHqS?U{B^Zapxz{hPTZ|O! i>bjd{Wd2hqp#&L@z=~JvRs@o`m z7sfmq77t>&wUYgNU2Z{FpFlt6`yVK`a*or2g)PcY?Ij_OmiS2|??ZM@btd{9fU4BW zi9UxiMNq76mYA3JRFH28yYy<>1lpZ?9`zi7HE}6??6 x$kC6k zk-)qEUizA2+!^&z)hq{kO^a3L1dh~;#2l;6Kd(Mx9P3u; ?0m_*%*(jbjBT jQj^60$F+IhW@H~tftgzCve3DJK1lzHv39AJW7NL^|DA+n literal 0 HcmV?d00001 diff --git a/assets/images/CN_card_menu_hui.png b/assets/images/CN_card_menu_hui.png new file mode 100644 index 0000000000000000000000000000000000000000..6ec8cd122c1f5f666dc91afbeaa6bccbda8e0775 GIT binary patch literal 23943 zcmd43byS>96EBElfG~Jq27(4iuwk$S2(BT71Sbq(2DgOZ?vf0W!67&VhXi+b2G>Av zch}&y^S aObQU)5t1tg5U)O!$}(3k!=_@wJ>f78WiD z3k#6;02f2y8}07IoH$kAYRZ$7lhe`Bv9q&3fBrnnkLRpSdTDW?t*y=5+dDZq`L(8j zQqI1LeWK}49Ts9=OlJhOqMWp*EB5a9Ar0CdsxES2Dsz=>hPL8I0?{RXsqr)+xVgRx zy5Dz-0+PXPw3DODZ%n#!ZPSC4?bM%&Hj!%w4d^FK2(Uci<9+~BZ;qYc@O>_h_%(66 zbUjbh&ihXhAj)FoGiG)?;OFam)~Qt4Oz61w(Cn@2#gFD`1^K7n;G?JSz-9XUoD%ue zqH1~HmrA}Jv1Cfkq{EQdSw%`O)3?fU9!W03RHYvgg&{e5TMuzZU%cZ|hJ8}YQA*Ua z7W( )d*){MqK(okU#i?m1K7q~DTDsmBjtx_7A(c<_gIykd_rykMW?Kl$sEk}{qww3#n zrtn&TKnrpx+C#4U*yj=pJe% _Fx7-%lbIiJ@PMVSdI0*i6}s8-zoi&d1APR%$rGVQ7O*`d0c_t@ zq-9;$6T@=UrI#kQt)>v7JECMto?F9@|Lm HekyxKBqQX El9 zv`Y=PvpjM7L87iaJ^ja=8?*}Bt+0u^{fMHa6z1;;U~ 6d4SFmA$(@|C`vCW^%VRWjQLL|ze;S{gsp*JFsk`R26u$(Vj zxxyi3a3xG=iRjPtZ@mAdx;q}_s$I@91n682<+{VS{b}!~ocPYs?+5r@DN--ObW8@@ z5+N2G-5#o+hB^=eUDvACx|00l`r1D|A`*bZ7=wDA=geBL_9n!*5OwKp&wE0LxDh@< zP~7Wbq{?$0$m$+y#G*d)rlCfcHD2WAdzMgleE=&*C4b&$yIg=x9Gt)@C+@jk@Q#;< zIMP+ E_M;2sNJh0jWwBfwrd&GWQ7n$Byfgct~bfcI*5 z*}*&22>4ID@o`f+4@Act)RDFf4yoEG`=pc&H?f(??<^gcKNS+<+~#o<#k9x-_Sr+r z#vs2+l`*OX4Sa|Vs)rjuLDul(?+$(`Tx7bR7y$)NYN3|rJ?IbBD0QeDuJ+JU;a2-9 zX5i23xUw|CE8omyBT>=KT+n%ac&vk;hw?~Q_E!1o *OPePUiVht8V+!;ncY{ zszmtb)+c8iqY4})6Uca3u+!5lhWGWcDJay95?{TFwcdA!Qi3j}InfZKQq*>|(TCkL zh)@1HAG7YH&*9Z*lJ**04CzSj&F>Y3gF*x)c)EAZ{cM3tjoj0Idd5R##@|~Tfu;S1 z=HX{&wUqpP*n`G=*Tzk$AS&PTU5@5$s`Ngjg|w^{i{AjWqxZ+M@ZDfz<+QKt>5)@v z(0jfH-TSdM8Mw6QtM$?; }I7C$iIT) zdbckxWmn9bwLAG+6i+mOi`njN@4pLXst~_Oe^J{q(3PX|yHgLWS8+9aPpKd(IfNAF zH^H?(o_Ej^OZn( ?&Y9>kqLx?z`8%`)gIS9y+{^liT-m zE3=|>LcWHx`qqMN`lYUu^}CS0vo&)F2Tk#J?sw3RT0$b?0;eT++VY)&p{>9nbFHDB z9>BNhk9dF1WVQ5!B+qVBKo4@le|NqItGip9zC^dq*2sa6$1TsBnpYg b28F f!3h;X9?Zhxzvz{!{vd%yC(;MLEs(;Kk4i{;lvo!wyf)XeVy&KY_*{v$% zGOPg%a@GK&?FC;6MhybHKMP6=N*CZ0e3DFyOj#7F$ u_AgVU zvWL-iNw&y94{9CV5K@o|I(2~_c&acKaDpp?z@AQx2{<8|v9l(eAqDz?XH4?4kFZp= zmZ+1+{ymjR`a8RwMSYdvlL~B|Jh<}D$={uBlP!=Ka%#Km(A;5OAUAJDudd1i)cTr} z^A5cym1%8tB_HH5b%yJ43O_rDEir?dFq!u?C_^RUzt1%6{mb_mG*2NHL7g&x6aG8x z_(aE~mc}xLqv54eqh3k^SAQ1eE=wlNVnzK8Z?QPnhIY~@&m$Ui+pB@Ut7`3{@`)NV zPWvTiZi#ob2{Ha2CX~RvyNE%ArF(zENvQ)M5kqt^K^hr)u0+u`yc9sA%R7!jK0nJg zpwlsgtu~bp|55cmF%_^lXjSBoRxb&iB`_hsxLLD#a)M61l}}4h =Bu{bE& 0@N;B+A|2KsGQ(wz( z{?SH%b^kjritg&hRv^tSLPb`d2{WAw`F%aoax7iLNno1WFwj8ucmH~E*sS=&GGAT8 z652^I0s=wSfwzjSQ2Tq G6L}5nNT~%&dK8qB^hESRs#}vrJF;lMYPHBUXP5kNV3F19BXI=iC zl`x=BSL;J&hFzRT+?os?9gf7T6h_|1BGYtsS|xT`mj7@tL97{Seg1Rg6+*2>3!Mc+ zQs-CX_8I#JGCVIw3wCwH?q4NnYgLlwY%&hRAc6oZ mY*Ii=phzlf=}{McMPAx*!`RN))1)JKo4p=f-}F83(m-b%R_; zn;MiS{~`Z-5Dolf{H|Q68g2i2sIl}B>IXZhj}# kQRAukoxx z1i^KUf_viEH^6V7Q$J};CjP0p_U~N&%%HzKQDR}1aV-f$=J;6+^x~L}452S}QGDR- zVSeG=A3m~?N$R&%ah-ZvnO7njtbeZCf7Ugpa@zXb!a_z6?ab9D!~IB^Qq`owLahu2 zm*LK S&W z$f5Lc%B}RtCr4kbNXd00WIRgi)G@EH*8LZAsfC$Lk^m_L<>~4axPhYuScbDk Pa8^UHjM1a1N)t! zQS0zxlvZdB4g-{wzPa{Y87U~PQzkCge$Iv*@ |7cMT}Fd23_m*5y|$pFe(<>R`BI za1FnWr<|-THL2#hoBP!@=la#t;pkHc$3_BhX2)rC|3$xySBY?$xnaFm^iBNuL?z!$ zBhR_$PFG1u)hmGkB=;_M-?HYsF&_|BV;*yr%RLS3Z*xAFSt)8M9o7V;*h2QFt#kX) zVh|E7t#DU(SH{ndvp*X&L+CTR^SaD_H0?L^)a;u~7-WCgVM#r&;latat>69|(86~P z^&jS9;QHTpq+QGNFRUdTtVO80kD-oKKjhW_1fHq*8L6d&HwQVSYvweh9>FV~+d{^| z2h2{s75EQ|aCo{!=i=DBl9ymqi6zDk8(j5%b);fr4{3UIJsPpCvK5&>fN95<3sS{d9UO$%x zy}WU&d=?*VeNY$lS??bG56qFht9lmif$Drt)B5&JE4MwHq22Yrcvrn12rv{3yZ>hN zAMD)t0D5U?oEY`p1cTRL43>7|@O@%5CP~64xo~7k;NX~)-^XD13Vj96XNC%#*+@zZ zbT)S*;(38&2PNfFCoNbmtZ2*_JjXg%7}DX`m;TK6z9Lco$iv|O(|()|OZA4AG gq(vOZ~t*HzWqiO;@9tKub?^B?J0Lhw$^I_%+mdLuUz1$Uht}S4UhfpQLlD zVqp6%OEr#8-YnyI!O{BaGT5rYP!SX3sv>7{nSj?BYz2I-4n|O({0@_Ccg#pD-GpeF z`u0!evTpqe<&W%LVBh}FAlsh!RwXq%!LE3d*Yeuwyk>giqdPJo3KN#;P|pfvIa+r` zU!LR-Y{dnK7#o_~)@_QMxbqAooO5c4Bt6THSLB#fcvVK`<^SKAfxQOlSP%EAAMlH` z^OO&2#t4^=C-~^HgQkZo&I+O*O(?E(1Xm9B&&ZUPBnT9iys;{;)tK4%_zm$&XdqUP zk!@V0+y;o2nX%!BqA=f{HK{O-5qKf4T;OCj7b{bmc7QO=vEBWesIxUI7yQUF &Zt z{sG^nzB5|gtd9L6?-3M!!CZ%WAm?4a_igd^t&f(w ge~U z$_U7D+Vsfwyc5>9%xe5z#qS%Mropyl1Rhf(GdPx#?p|rhnr_Nku>@e$a2$OTcSRun z0cmVBXSj+E02W3B2GUK+o>eV*;8-f;GY4aM#d?{kU}1084ajHPmuA{Lgdq}e &;rFxkukXFiuDj>CT)BBy8sj_>gWQ-^#Q>zbbAuIX{B^PC0lh&x$Bj&s5T%_rB zeuY+TQoR&Sd6rGjXYK23OL(;d7#ZY04}|Z^gM;0JloK`xkW1>ay}hnw+X1kUrM|X? zWD!b1YIo+&z1dqBG}CjbTQ*EBME{ej&NrOvlkJ#H(p|_~H~Y}#qod}W!1w6%tF&&V z++<3(7KoIoow4R|xJFnkRp&C$_;928xG(npg<>1oNLG$Y*fW1vL>)BaxPK;xuG76C ze824CW#s6?q(Dt(Q2djNfMdFJQIht*l)iwR*hs?dbRzHkB<5#BHx`MDs-Rire)8`( zC)-h(r2epyho{_ej4z44JR?Ab#slQ#NKI8&Ui+<2m9u|G%jl3vOW!5U3_Mj}{94i? z&NItTeQ)mCKY-I$dqXiItJM_5$sBGbE%GZJVsb6OIo7Y-zieGn!uVE}u*Dzd%vuu2 zY#}xp2FMxE;Fbt1OH;=uhm?$*euNR#{qUlWI3k}5%{xl;6Q>;M6xf52RXOwj?iLJ) z$rc3kf|j|&Ie@0XhB<4%SN!$}oD$XZDGB&2#8w8R3I8Nv(B?J5(*=W5fcgn;NOcz} zdd=G-L?ltvK2DIV*a6EBo^P$y8fB_1-!jR<4DuTY$V2~r4mM3653_qNd&~}sce6x1 zIZo^avzbPUi{1Hs6@}SyUbbJf*_L+~4S@wZ{k@ifEDuqSu4R;S>boTScz!==1`6M0 zoC|y+pO+=yIs<%>f~8V}_AWjB*6Iu(9g>hc@umjsrueRN)m62(`Ygx0UVO&xX5 rdO z$}6nl*;En+{x+8m$x+!s?Y;NzSc0tYlLHK&B)nSNf(>iWOL&XR==5JVC;f;)o7d7y zNFI}sy otg~nSneyV1>%aVXWCN(gF@RI zBKye0-^mUk#u=o>+l?^3EOUlDM$Us>)F7JhM8G~Q%>o1)LNE(VuWf!I)4!Rzy=0Q~ z4l?tr-NuV-YYuErD|FL*c|073F0e|yB0l9oaX#p%A{xDrNm_!=gV(Nt8 DHn&AMk20(RLG`weE;KJCqY% xmF {97;2){kZJ~)R3g5z1baQ*2(?$ZCGg}W?I8pM{>(5{5(ZIx~C{;8_68$|`rdZSp! zxNIKJ^g8_|P9cNG-u(^x``YHsFW0jLKbMqcy^f~$!g|#jLXq=E2Vdpyt{L#Wc|+NG zQE~HgdamcTL;lx>2o2*$(vY*v6R&=Di7ZN@ur>oAFUo9T$d~4{xJq)DHK|vx;XA-h zze#En7+A{P$9-=ZwK_fL#BzT>hUg3kr8!`Tf)W@0Fwq+g4Jeg5=m%T0?hYdjW!!@G zv@N|;CbZ;8>*Etbu={0;#=t<03{m10U2Au xprRrp9YC$|<(#rBfu0HBo zHq>`MjWg-i3o~!p{WpV8z 67J ) zlur8o7CUqUGM<61^@|Of7Qyx3dNQlDBQqezt6MPM#}=g(P29B>?5L@WkmEszoU*!- z@}L>zweDQsNfcIJx>lmt28U8^d3lWrt9zu}bJ(C(yYfLH35l%X#S~#lqI?ti91q z5HBNBa``5FiEZZCkE>a|4*q3zk3><_$Bq8RP^0EWYD}z3PAh 0s>{ZX8gZM8vAC@gH z2Ws;)T*$d8Ys6w=cVu9bm6Of&w%YZ-FrB!o>e-`X)%lMf*e`=m-1I&t8fp%$ K&)+kte@6ZVAy)<&+UU|ZLh>#e8dRA7O)}8!132Ha&--H6jy|=qm_rBh`Tt22 zlyyKjrM#*YpBS#uz2}5$nazj)PO49a3G~*fwtuPE=-_d2R0_{x9k|aPUjE~sK6;=K zfc73$4zT*Tzx*{O?x#MA0~ojNZXGpwoILG`V~C1l|5vy^C<0As9u$l|?dVu`H!`vl z=PRvAjfcTi-a?Alo`EJFJwojS|5uu&Kz&*? SeDgji^3^nV%;%pm#nU! #>Vkung$(t; z>8STxrU0FOT;6VOL i<&0h zo))Y(opw?6H_o7vd@PfZA-u-MlFqa8r;UwLJ&rsMhzX}H4jtqd!0ws9&hArO8y+`+ z_;_=ZA~AmS+iB(X#454GUM2h7* CY}DYxEi52SSzlE9py}-G(*1TUON3B z_Pjk7HA=A*&G>8i1jQ+>sVAcW22o>#0N{DM2%~LOziH(D &T%|l*)0Lcwz;Tr$bj~Wz$9q4Pz!Eh5k zO3eT%2_&Ix@t<4#D)8npjvEaNH*oy=0Ds|LS(VxdSZ|f(t1k9>I_IY$5?hCCgWxE7 zw$j@o1RP=FMb^5UStbvjQkaPF=aCs<@0T3gl~r!V@C{c$F6t~UZ)qN9Vk?eglCa63 zD?Twp+iw?b!>__V_{p?Q`Vx~GOD9*4s~p3x4J<-%m~|MxmUlaD*xj;*r_uv)n+PsL zGp>IswV=p4{eLxBTeh%j?0re+;|#(KJczSHo=r~H)#h8i8LroZ-gZ#|W!0lYPt@X9 zon5V@fGkf@;d4Po59-91VAN8e*Oc >&yxmXGZ8=Ywe0;=Se}!iM&GpsBD&u8*t@%pyQN z^Uhbi4ZJjRf8TWcgc0ahkUS;p=_PolQ-mh2<3_WclH_6pZUakMS54Y>+r!)27uz(6 zU^RG(Av_c%s!gunfBaIue+o0HNqYZKr~k}p_)%#@lP!c<1=Q>eHg~20L9Dw-aDmZw zc=}n!BcDJbEF<#{Z^rRI!X`<)fYE%S6CrPQfPa(JJ-qe1wU^4oB#5AIUwK3IA-j@? z2CdH3vr`S&8?$plLZ1!IWmW}t?vr5iLe0C*3pUI^4HXL<`wuU@$p+i9ahcslN&FuU zZPMs4{dKB-ROlXSeG%w$*#YYSb!Jky6mAll>i^i4BuG_*_906a-FtLFRjUNV<0+ z^5nYIz~kRfq;LqY7dLfEc=UFM0!t@paWT$@$xKcTRCniBbqGNx+HR$sT5R`bHW(hd zeA;ITbS3}c`dWU$3iBL;#4GV19dx%{q UpYJj z^^^MmnLR-9x7UKH0E&G7v!qw_?GJio@cuyHEQHTq+7NdNgMqA_zkLA$J>i>ea#RJe zQ-@KFA1W_OFDjGNly$M5R QEW;)<0lkNQVd@epD94T@;&}{U;A?tH8nb!;4jDm zWq0bxSvcys`((a j4DJxi7aoXQsJ@cYE~rRs}L~C@l`1CPdrW?#*PxQ&I^UomK&w- zStY)QW`3hrMkcRokJ-#x3tN&~b%Mfef(bRAFtnwOyO&EPRY1H?1Ya3}+NkU2$}gH{ zKur+Aca23HdF6Ky+Yg}08S0-piwMbib*daAJeqp^H?5H2XB?=~y}5sIPZ+crO-gv+ zB|WEcuF8=NQ0`j>>l?G0``wi*sAY4#MF;%Bb?5yGfGkG!_;KX5Q*Y^*=(iRfnoFm# zY(Iw4z5VH5&hgLMK!7o~Z66!NpF#_`NCh*B{Lxsiko;$-RR8!@dBk{k6!@7D37y(R z>vAlKAhMmB&Crh;^%vQ*;mfiu0!u4+UoRup7pjJhnbeM%U)m4?9~iUbgphQ49ON|9 zC<+>`p#X(+a@YO&@$sKURxc6OF+8k!3~Fcmg6R^BMnC=k?1(Fhx-Zq1sJCM2dmLyd zlu)lO o*lzzkiYjb5v&S7jI8!Rl51{0Y&_*($+rv=@iV_SG7RKtzYUIfGn$% zxp`5Qx`Uv2^fb3QFsVldB(gU)B~@fLh2RKy1`}TT-8J+OqPo3Z2eJDkLVA?e{gDH8 z0lE{*Bdc;8v!Lnw$bjR72oCTPa!FtSBCjeg%mpAHT7N?z0LXkEmlJ+H9Djr&_K}7k z;h21DapxruBhk8dAQS3!w=kquUqFJcdXv@^^4VmBzEvX#gBn4%c|~g`nTPq4+JH_r zs0y7H@Y5dT(Cm$tyLg}GcVx&HT`vnI`SI7n)y!wx9|X5$HX`MnUbHgXf-!2u8a)wR z{wr~cx#u4~%9m;pdTKvYp!M*ram$%c-cH@ha_5$r!eOrQ97>}xcjD}~0={04-KTUs zppui#yI;%LB_%e6QITrh%uOSmrV5Fg)YS?UGI8`y2ifEgxjYBeM ;xXEbj2CPy#D4&v#Yy^+)1+N| zV|8`jQd}iO8~97YHTl%A58ye~gS ryrXspuDo7m z1}vabf`D=SoSmWv#Kg`ZAUT^J)o*o?W?fiX7bYjhuOsY>^R4~4erUOctjN59RGSI9 zT;Ymp_WQjWd5*PE0d;&TxU~i683~qeC_Ou&>kJ_tw}P}I@2p|_A`S?D3-^&*U~_&C z4kxqeNTXkpXq0JtaRflBh3YMUm1*M)t2ibQWvhmynIp@lZz2K$%L4BCgn23DNE~Ge zC_Ik7uyx7fHl;z8V^9lSih0*#Qb`j$EJWBOrGH<3Sxvu}SNxIJjPP{S`Bnzf z>X(rbLQ1FCD%VsJ13jth4}Fr?^9@1ndaRWF25pL*tPc{#_QE0psdOsRB9|SdHiQ90 zAEKS DxCxClO*bS;gH{|R>k`q6wx{@+JWa4@ zegI?}Vs5+- g&DQ9A z;1gMzucL}Z-8f%JMyH}3ENMaRKDq`m4Adm;8`v8kEp8T6cfx+8=n^kCcDy1d5#C zINF;3{*q0iH0(`};CloyYL}Tn4(4h^1FU0{=1N*q=sR^X^ZRhpUiIwu)H)HNE;{MT zP(wv^-mZmplP{!Yo=O Le@R49I~iu-+uI?b2L5c2IyIp(P}qSCi2kkB z@8so%nc%u0ITr)W<5f35D&}b@0} hPKeENM~-oW(v>>s9i9)0O_~QEq^(riBJSu_XCb!n zenLKr@i4tZPWbTY26_V-BpEFGl;l-W=DwUu)(%bq;Fpm>PXpN}rn3R$n{62>#yG#Y zk`|Y$->56TmhyrJCZ-^ElaWS&lWVLhohk+Tmi~#8WgNQNm({L?Ob?#pGYo9L*OxEI zNrDSNQg>u_^SOKt@>KyWo)6NwaHzhHR;RI-JWoMPZpf@|;|PB7jv7Zw;JYQ@d+u(A z#~J(S8izr&cf%PlEApO9kK-*s_;CVvdjWJAlQ4RcsBQlKLlgYon2#qt@R1XC!;*i? z0(t+z_!oa#tcM!sqt#ORDFEk~hSwVaI46Me#OVoxCbcPqDOq$5=M*>THrPE(*%|a9 z)hsezkRxSKEny8px;XhoQ>x-3rJs8oEure0vXsIwXKSbV+$pS}Cxe?aFC~{qh?wFt z6)UT5oZg5;u(PvSm?Z!0F1w}WrAF8%ok5?0M3;}hboL3rx^l xR<5s}o#9Ds-Q4&p|Me>NRkNCC>| zRzZNCp6cqRye#G J$M$V!sFuG{g3&d?44jI22Az34{?lW^=t&YWBrf-= z&?Gm-=WXCpQD51tuKk8i1xjbExe0}PvW}koDne`Z5~0(dF{K! dG3x0{~wR9lyiJ=x!F3E zV9#Ce#*T<{J|DMPr>&V>Q-I29Pi7QQ^F?VK;j|W*OibQkLxphx-kZa1on~674hl_? zbnw*RNV2Q(i>-X46XcwmP-7MrM_-&!6IRv2|0@}}`P`1?Y+cUqg`Lk@Lx)Y8sah~{ zx4?VgY~3uk@#;l%d7O&?H|h<9w@kdYcggnZ21U5D&j}uw+vyLt#O2mD_KPgc%Sav3 zb2E3bglHRM1L~u`G%ll9&)@e>q)syTQR$TEN%#AQ#RKRuQP~LOh)L&ybcV^x(^$-; z75;Ar&HPG)B(ssVyVCqIISPU_ z70>*Q{l$Q~m#2hNqsGR4u7w;VZ_et;td~@FN-ug!F6zfdHYCSWqEEXYUo`?tgOGDv zH+JHnI(e;+>T%75qFg&8*`(jT!76;wMfx!6{tU&bJB5Redn+{rEVE62!q`w%O#FM| z)q%;AaE~Gj`g71A%7_p3>_tb3)q)2x$jLqCw)OIN{kwUW>qhM9o8Q+#Hj>wj%;oN- z`+r|>Y_Z_ ^I8H?OC$vlanvn+l&Fa1dW5JoY{_T`1_BFvP1?zRNr z }A=)`^#uCjlT)2BmMFqwZclu!1%0%>B43M>H@1 zyGnxIAPf-(fWPm4UEdEk9#ad`{n$~DU39*X*eaRHcnDG~`G^qi&a#31y&q #v>d^nwiYATrS^-ud<~RY^Ah1)0ae4FSbI2YFP9 zVhl)_*#IE|dfqkPQ8iWU3pC%FV@duf6!jzi -r2qXg|Maq@^#pjYG9*SVF_dC89hNB$IAx37ctu6 zpz({Nt*vWe&KECwWQ=US2E4o>-l+PRA9rxd{n(lcwc>CyI@-?k@cj_7Pk`WYncx^i zj*<8FchaR3Hz-#nxYIP}nTO`i@oeSQfo@#mW=B{4@rd{XvfJ{^$pubOJ+%%a(_fq4 z21ivX1~In_b44~V&mA|Ax8)lrm{<;bn&6wa@5TWQ`%5MBr(VtY@<+sXXK>dG?|aX= zOH0i-G8zyTrR?KfzE=++jun{I*owDObAn;s(89(mxp>kgb2EA{CsT}*pKH)|wR{cc zeRXxGZ)2|H6um~|b+2pz(kbz}zX2Oy4>fxWLOMhj?uD;cwjs%4-*R*FQhTb*!<6Pz zx2uo6=V~qC)?EX7Y^`Q$>%T3%Qch;JA>N55N9XGA*XkTjm!puav7LG;=oMDf!48T0 zwPp&M6(ht+bU}i9$jE$dyjmF!{x9gI<^(E;1N~PZ?0*n-{+l2#^Bd%@UGMU*U?Dg5 z&6yQLN$(`ZWoCUaCzZ8Jj=CFFD|URc#@F&wNuY1hsD;>(tRLc^zc+3nji8KIl5_CYSUacA=KS31ALBj# z;jSN?>j>AFpVMDW4DQFRGan2G$=uyKQZTh(fAoB#vU5?iyGy0?HI}ztKNXeC&ny-= z19c9^e*A-ikqg~wFl KULG zHlrRNicpvQ4SDEyy>*j9Pu>M_J#tPw)wqzEaG}4_&3qJ-(w1>Z0louxf9;TGA^b`I z#f8fISE}^wU!F(pN=bnq;_l8!ni8x}2G7O1(VjFT=`Y{FFT^H{cpV@9vf3Ou<#!(t zXxOC$DJ&a>SDihv8_8XBJI-<;`cu_f(~2wM>;AgD36Xo6B&vVH3w8*6 X0q^ogdf31o z70sUrh~KnI64j?Y4p!dW2%5$&d}nblp`-`y=p3vFzc!T%WO%`0-+E*lq_^(BQe-^Z zS;fri)Jpr;qIxw$;kH(qJE5w_d@#q0Z1U9DdH^nv{Dp=N&iaFq=!7VAlkCdMS#3qz zK4{cwq=kBN -^+5g)QZhbu?);3}Sxw h3W(bxT@DYA=-Qmxq*pybB zQmAY6;h(xRZ>&Ro5xbasb_Z!Eaw-jQwHDF(gAE<9lk*5E?t-f9^d}*kZJhqO*LO{< zPNktXhKzd+t|5$zPxprDg!GN3GvDr@h2T;Mxb`~I9C5Lm5sOxa3Qe@m1`pQ651 E12J^N2*f!#;sUyI8{O`G@vRm3w{fq=~Xmr&HzuPtjIxM*iUS>cSYg?^7 z9dwg{SL%{+s0|D5JQN;9Vbb+7+;d2jCv}-ze++GXF@GJf5sjgRI8#tLApW)s>W|4g z5-rLr{6l;jPur$Y5m)JAD2!Xbmvo(7e|RKt++y?(06%aY&psJRm%1|+v737Mfw{Z3 z`1iV{_7V*%^!FMO%3iJAtV6m4CH`2CakJ;;SkI8Y;{;SxTB##zuLotZ5;rbim29X6 z#h|hS*=n1Bc~T=tv)^(v`oXCC5nv*Z_sXzrinD1!u s`ZPcroThg~+a_be?!g6!wwa=C%%eZ{D}pLWR$X_vK z4=+2aX;KPLI`Pso39kMiQG4Vs>_j;sF-ZCV;`qUmt5$ELjw2wyv+dbi8U zg<)m`Yl1?T*h`Rh_dEH*)I=6AUGQH$x$QSjoFHFuBGHTDvXgT7<8=bhFZ5q%cbRnu z7gv`9E2UoDC2tr_tT%tJ5oY1}B3uYuNFI5vlV8Vl#XSi$c1<4p#}qyCM8u*km-hGd z9)`K2e1;-CVnZu|&U#}dweL?d#?x=xMyu$Pwi>!)1%zt}7OCo~k6LOZaYWM?MuwTd zw=1htEH{|<4we1Ke?l3K@(jQ+!3EH=HKH(RKrqlJ3>84!l6fgr?Dc9Yuy`zE+F*Xz zjbL+VXQgeUvtOK3BtvPN8G)IvzfZi07parAToqL$%E}XX%^J84-g5nF?rjqaSFOJz z8sY#n^3E&lWJGbB!$MGnRgJ1H%l5m5uZ 1c)O+0FQsE*Jg+I#xW$U9!hIa&`7#%jy zDb<=e);DRpyO4xX`k7Kg&PK_BicA#SE^|OYCTd;W#Zs!y@L)aoygdA6?F9*(n#ET; z3>qUQT+0N!v!&E!`3E$FYpHWr0zSmlu`>vPS?cqM{-BvL&e60Eh(ls%3gDHU7RHc2 zXc=24zV!d>&GwH}ng8rfI{3}Yy=8?dzhWj5=uLVoTE@;c9YXE&1pj|lQ2^hY7ZZ7p zzG@OKYTOTQ{ViDPj-7Q^S4)#sA$@6nmH#|q{{8plC|&2LkKJeF2;W-!QW7rz2(p*G z%RFl= @ zsYk+G=OKHvLri$k3{Ekge`=l3tMM2F>zALXCNi5TdH(o1+pn0 V}Y0A;930#|*0zq6m{zR`+CoBR%Vz#5Cv8PG0mMJM6KOTurzC+^m>OX;$IIJBHX ztBKVT==iW$K`Ni}=-)`4AqeI&Y$Tt?p|}w>K1&C>7gk uby%rO3}O zKWanx2vy)AbDi1x$oGmvz#Y$ziO*Jz_^QGUeGziwRWZc2U!f!hJ4(|}l}He{69;Op zV|ZfU82?7{ff*kwg&XoiL32I!JfF@ls2}8W^K4uFL{Lr-Y`-=Wq!t0=s}eYlNYI8H zP2Z~1zo6?zu6gTS0X4vnx_;R>ms$h~cbsCO3aSp;0 w3M4ZAX(m%F%# z^?lh|3t}XB0N#J2J!%Dq6#-w^+%rNKUVyn?js5`pq{UtjeVl;snJ76Ss3|`9`ivPr zS3Q`qr<5ol?}tCQZ#_stz}v!Oespk4oU5K*etXG&1r4JueBU>)dpLfAGgIo!ClPmi za??|u?NPPN69Sil>~8gsw8E~{#OniP$*@c@Pb15J6FA!sXDf49Gp6Y4m-TSm4LP zdfd7QkBwzDT`U$Gp&Ei$$Fpcg^QB)KvJt5AhrDm=O%&4|{5HnQ>vh^xAJhs*y>pSb z5wsrxS1~Ns6f~1-OJXg`Ox&d`B(>F&52Dn6#yIyx$=18(B4E_Gj!Q1s7E4{BYm&V7 zOF XvXPHRBK~qP+1wG%iR}*OpjUTfRg>pv@cEt#~*9w$&&c-^OaaE2aB`C@E zVf2`bp;a%Mc8;_a0BRtp3@;KMUMwOx6gWt!u#Bai2K;5V#g--mHHdwVNh4g$;IWRw z&yED%NZ(BCl$eZigr%)l-Ec~@Xz=NiuD&~(ckz2Sh9^#w&1CcGl>GIu_;v<=l)k|& zr*al upg= zDuy!RZ(s}ApACPM!KZ?X@QZG?hpg3ZptKYJ`fnbNk}q^|416%?NHtiZ*z#yIe2o1S z^r{Kf#SL${7xP)($!5!6BLIthd~)^P?2;P>95>Jd9W5siBW}W=S8elcXyC%bdU=Zs z6`SwUA#gDQqRzKL822gY2*`0`FBfG!YwZTWN^;7Z1j|;=>AUAusuRwBel%Lesf)(@ zFjfSWqkT4QI-Q#noPbL3R*T ~x|r37;Jgpp|F?WbPZoz#PvFal zNk&zKpIyD~m!HP>2*vze0qbf;{8_CYOSTC-%d24GVSO6z|CS;v2L0?zj(b!SUxuO% zLZg3H=c0Of_e4~gNWfK?dibw6XL@$BK-88QcqPe6D7|hsgAN4@Lcap11fhBsr;?mb zRi;guTJN9`8z6WD?pXAr@lsD~6pH)s%!O~RQ{KD~W%E(n4^Omym{8{H=0Pe-((QwV zvy |M~-Xaq?gIG0r&^ z0GG1!@!Xx){FIXP7(V+)M0~cMc1+p5lCzs;oGJ@nLaWQ5zu2K;ADW7A9eGyy_eDGk zs_E*vF@!q*^-Z!y`*Z^^e)~W#4`o1H 3N%{dyUQ=~$%tdULY1iTIEjNCEZv;^z#6EWeK%n|C=aKrlIvnsE z5_m%$L|{*@w-Kbj%G{5hl?T>_tursnZ1^Ksg?Um}m#uM#^tu7{7umHn<1;8Yo#7rA z5WM6R7Bqr1jzAry9AJ8pe`wWjZ6Nqp2^oye3B29thZ1Meuc5u1lf?f@M UD91y%mQF2~_SK7dvOJL3Vt z|C$rXML{GL)HE3bq*~1=vXyYuv>|g+yZc!u+1mtcB*& wgW `;KBOCF{Y9ao6VnkATRHLX6zqKtu+5h;0)dS#~Wq6 ze4cq;`E@fsGn2$~dkXU#Y|PP64XxX|?VoW_dtaz+8jx-i2fwbx?|**vo81x5F~KHI zpb =S1h>Wp#)9nM2pt_UAga9L<8J z(Ie=yxfS@>ZLZY`6YqrS_tn*%LkGTfu92<`esjmAx#HD~d*@@>!qw&WOWZHG#)-%n z^VEaDSf1KJo#qm@pEfr|p0kP7TMNDGGDfA}P D*IIi#Kjgz54WvbVhtt(ei!;Xkb<2T^B{?m9ALovOtv(J(EWNJg zne-^sOP>DG$hh7d+k*^6zkybiA`8O+Vtin|k8{iQktoUIB*$S2FxAdVUiR6b)@dc7 zhNii_UG* mvzX0oqvHK^_1Tl0YQiZ1g-oKKIa?g7=%IFF4*{HHId)-< zPK$%cX?^6yZQrE@RB*y2l{b-Tar 7^_k zr~LE96py+SGG2dwK(kr!H1~z+2LM`0H_ycG7p3g!=lT_S&{u=wA7eBsS>fI?d#6TU zkT&lvA37C3D;N9nqcD}8fkb(`*REf3s=`ENY)^XI%05JP4>=lz#0f3>#W{4!u1=uL z@q%&kztaGynP2ahJ7y1R=f{?^7=u%KF=avDwObr@c5`9&C_Z)5)L)>j!M0~zr@7;m z>zo$1axZcFkHu_s+&KIdj{W=Nj++-n^NZwadIf1(@5wQ^8&l?L1?dKP?-3{+X}uWn zrjZ9-nOV)I)r)_G4ce1l+%7PR$Y0gtHV4U2KQ8>VrYL1wg#M!v+e)9jm4&60R>fzO z_T~c$T1x!%eC)&;$NiS!4FW b)j$xk z#FnJ^w5{=7=bZ$=8r<^~T~Pn-fmndo^4x7Z2&f1G@^#os5I6d9i-VKWL92-=dIJE- zjqBj71X4eE8E=f-lgL`hwHygD!?(v<9<(CJHlOPU?J}^>T@wM%WI$t@YeSG>k! EsRfz2>~*=Uz4F!cI>FL=pA0k98LiVhmX-1q|7c_5pC|X{Z)tNt L=-S z5$-Zu2ft+C#{NesPZ%V+GVSE?w-(-5Hz-p7dX?*MyHD%u$Q@zORQC@-%N|90^O7JH zGd4Y=y6&Fs9%$I%VL|}k_|g;acE8afe>cdBF0EY8PL>b#0aEWQ_6kus1)IIt4*3ME z<2hP|m`o^gezt79XB=}RZ?Yv<#8ET-*SC|WsyHMHV}i N9Ec)H}T|Vit*+HZPYL- TF9_>_6+G6wVCh?lG*m zruRQ9Y~45un9$++NG>iB66#k30O#45u?LSv+n=|>YP=j#mAh9!pFB_zT?;w6hqEOI zCZ9*9nV4KqcCT1Yn5zK>i^c5tv7h^yWe=bUnlFH5eBQi80l5X`pxl^x+K*?TMYBB zi_tnvOG+_G5F~%Yw*~|t@QtQ?D3fmspYOcW`VDKD4 Lstac9(f~B-*18t~Xerx-g|rAj(Q kNxL7?Enf{awUR-tG(}IcpX;$3v z)s*5(=$$bN{hg&T-G^VTXVMWsNcM#6B%STaN}lkl)S`^BQa~@5mAYXvuiGxXLGvmX zt0v;e69B3@Dk$w$^G#u6iY!u;WP}$_yV _p{l-7_yW}`GKMdBccYlSm$TZAf z8!N%x*9Q^$77AHoy&dXKaf9f`c3Xt0bw7jvWkD!vNQ9Ll6>Db0z=Go1Axhd%9%owt zJt x$$1mJTX1_(HL*r;*lFZ{Oj}G%dzKI8s-uRA;cV2 zf)gbuF2DDIf>}D)QmR44Lw)JC7woC+e1S?LeenP`U}u}V9{K$0+ ({6vMX7d>-L)Xo) }?##p6F;Rza1BMX(t2zpzseZpX|c#7UpKE8Gh*lpD%HpdTc8bi=mLjCXonP1n9 z$_CbLvfd^1ubupw-hl3}c*t;gbx~yoMs45;Yjei_HUhmGQ;rwQ?)!VuHs|oxwA@X0 zv|ny*3bcqg{^){EWV*+LCnT@+uV*RTX1UdB7|Sn>JduT#C{O=UIjA^AkhQJP8L? z+y%(?-ch3};Z7Vk!bVozC9Zl3ls_`QiN0#>aDZJ@>GtV1zfhR0y*(C#5q#3t!QXXx z5(FO|E-EqciwX)YznKH)c`tS|uA_7RfG?P2eo|#AzIc36rb~Dvn19BIU?_u@cW*+v zKLx_g6HB4Cw%KpD=peUz43syetSM;L?e|+|2Y)1i1Wjt7b J1JaaZ*6b%!!Ku9F zmR0Mf$M4@j_O~egU
C!>7;>{YnQEKfu!Vbi0 zPTgq_yaJtA)fLun-rtny!xkb}*OmOq9yTit;x;`i8bi-wnqFe;Z5+`nx7F4!orxM^ z!{Fy?*TzS!$#fkac;UUZhQ?g!_?E{N`oLB75v8^XVQrAHDR*(`bpA!`3l9UlY} BaVW94IF@X7=@AExh!N!NrGzZ zUuHsz$x~%4gvqttEV;8$h`?$?1?2vaIIQ~9({^X+y%a H7Im$v%}Ns#?QatzLl~)wGWTJ#x>FZB zaM#H5=OebN72yU8ubGU{59DF2sAFgt#J28^knC! 0w`;e@a!`wg~ebH%K?+q{GG@5h3X_mB0fpQ{`o_xSID;FTZ;Rq zvHdAMZ#-@%(*QOj6KM{QFOi~)AJOOHm|zj!x#^R-VYK)@e;$Jr4&zmd)^OxxDTlh8 zasThKs|cE?71-NdUSHA(6N~8@9m<)W5 unFmT0P6+noKG`Vo)umZoEaMDqcBD> z8IHud*#oe-_KF`5kMsUo2GW?DiLsy5A4khP5%PF^k>>&ZlYFStk6Xt}K9^OB@-jr= zoG-2f0;BmK=HniJyAh!X(+wpaZN_vgus?j2AnfKGA7t$n#ZIS(uNdTpa~`!Z eSjS?1P&`m)O2>=p1!_pt{HF9KOKDCDp4dB&IC&95+ z_h1Q2uR6r`iF3O*d1T-mGbYY^;M>2Y{-ESn0^40w->ODpU}E>y5Y)hYKzPs)Hx})x zCDoo#qQT-1&b}*-%T5=qsuM01 2n z!QbTsvpcL;OH>%8;*Vt^{Dw9H9W4{%vGU@{TTv%}76cFXUz43q?uyII-2-k2WEfbP zlVpQfuIj04tTU+E+;@5ZlD2bf?Sy?jQci5=waabsS>xB83lhu4)X)Ln)W7~3(7Qk0 z0O{xM6;ArdC}~>)Pcr<%YMFO2azMi^Yz1iF(=RJ&S+m$$13r+|DtLu_5Ymkm(V&=v z3$M#o;}y)HMOMDfR#op3-)SEGzFp8V;mV5qx)6`6vuyv;2WNl@J0P{4i3{s$&?3ux z@iSv^Ms;>6)Lify8w=?87WMX?aVNd&mOoPaww9rWlF(oy(Gb02Pe}9bPvqH~0!50% z<*S&RjvR-{XA;3=Vlpv#a%Kq@xLPH (6QHB&Z?PZkI^&J2}fz zLXqy+{`hzB)GjSveB_Agl;?|04T%I~3(_LrI#)rn+zWT^r_x?+$QaOwq*Z14z^h?f zIs~)VD}lDnN(GNdJWy|c$u|eGtRYevNgvx=Sxe-Pfv(U(CD$SYVHYu&Bl`S3+J!U` zr4f7MU~l7JtZ(WPeA1!ioK?j;v}$=2xG&6?{XsCx 5?_L#dTmEJu~3xqfn88Rwj)e%Uz`6A<;|8k#>myw>PIA1&)`3WG~a% zyzFq<_8&M%3bgTQ? *C*~O@O+tEL;c&m8BorUe<(Rp_UyqI`YY!5px?!RGL&WP`RRcVob{M$ z%*g|9ug(l#CJ3(!oN{HRrp!E|Z7Jk%0S*){=f8jO=9ag4Mr~)<2awNvMlA%Otq8l? zj+-ox6S8Hw5hbg|AYd1P H#9sw=pkWsk+yyyB1?b8U`xnB9bT{V A9)=m5o{kV5huY@ME0JW)i zV=<^+7Zz8X?Ji1dUa@G?Zh+nQ3#2err0RRYqlvy|AWb|h;eqTj>kuf(xkzMRT!}^* z(8b|h^;I`mp;AgLLnAE}&mScY|IIIaR@0W8k%~TKO4*>5WAo_ +QT9>s5n_XXU552$(g_kSy}!aqqsfs1soots7#ilP1TO!m=bF zc2vh)`JJ11HA{1;FLl08e0@YEs>->}3|o?+=N$F+5NtmE+7F+evz^KQ)3nkj+;VNF zKSeU}x`X8v#O6Xvrja0i+_3dpt>;k$>6{IHHLoIU{m5jl)+#3V!kg!(1%-c{`a_uo zFjM#GACGm8-J5&&A0E4kSRq ^qy*Y4=l z4Cd*Y6xyezyRTn$ho>4pyy@*Jt=9Yx!zgJsErr%}k9}wWTg7qy-7(duD5sReZJ~zL zQw2%DCVLF78Xod_v&ivM=fzw&?7vYqJz&9Dw}k~(8gOTYc&Rf_J1W>8> z^jRDcy7;e)E*KAv$ZZp;dVYPE`>Pl*R!?}ACU}me*?JzCis7C;6%mf{WM|)tUo|lH zx17-bs8XLKw%X5yCZq3FJW@4xLSCEfTG6cY(>xdYyS2PAEPLEz?uq(t09X0|eP8Ge z<0&dmew;)DFt)3@mX|Ox(XsMSHh1>EMytlq^AU7lg?1iqRIo$#1@_Icj|!5I;!Iq@ lP-@p1m)QR-pU!qd-oo-P T<^Dl@DFhGF8Ly)<+1r6?l4#6c5f(3VXhY6MdVXzPg5