From 06f543ed96edfd3d155ce7dd3a4a93892d35ef0f Mon Sep 17 00:00:00 2001 From: Jerry Date: Sat, 3 Aug 2024 19:05:57 +0800 Subject: [PATCH] =?UTF-8?q?=E7=94=B1=E6=96=BC=E6=95=B4=E5=90=88=E4=BA=86?= =?UTF-8?q?=E5=A4=9A=E5=80=8B=E8=A8=AD=E5=AE=9A=E4=B8=A6=E6=9B=B4=E6=94=B9?= =?UTF-8?q?=E4=BA=86=E9=83=A8=E5=88=86=E8=A8=AD=E5=AE=9A=E5=90=8D=E7=A8=B1?= =?UTF-8?q?=EF=BC=8C=E5=8D=87=E7=B4=9A=E5=88=B0=205.0=20=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E6=99=82=EF=BC=8C=E8=AB=8B=E9=87=8D=E6=96=B0=E8=A8=AD=E5=AE=9A?= =?UTF-8?q?=20`=5Fconfig.yml`=20=E6=96=87=E4=BB=B6=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. 新增 macstyle 設定,取消 mac / mac light 主題設定 2. 整合搜索相關設定 3. 修改程式碼區塊設定 4. 主頁文章新增多種版面配置 5. 新增說說頁面 6. 適配 hexo-blog-encrypt 加密插件 7. 改善手機端目錄的開啟效果 8. 新增平滑滾動功能 9. 支持以程式碼區塊方式撰寫 mermaid 圖表 10. 可自訂文章標題位置 11. 新增程式碼全螢幕按鈕 12. 友情連結頭像改為圓角設計 13. 優化程式碼,使用 hexo-util 的參數和 hexo 內建參數 14. 可自訂搜索框提示文字 15. 未設定選單時,不顯示側邊欄目錄和按鈕 16. 螢幕寬度超過 2000px 時,增加卡片高度 17. 根據語言設定調整字體:簡體中文使用雅黑,其他使用正黑體 18. 更新 plugins.yml 19. 全新的側邊欄界面設計 20. 新增 giscus 的 js 設定 21. 調整 utterances js 的設定位置 22. 新增 utterances option 設定 23. 修改 giscus 的主題設定 24. 多個界面元素改為圓角設計 25. 可選擇圓角或直角界面風格 26. 圖庫加載按鈕新增圖標 27. 改善標籤頁面的滑鼠懸停效果 28. 調整側邊欄的滑鼠懸停效果 29. 微調部分界面元素 1. 修復 Hexo 新版本下 Prism.js 無法正確高亮的問題 2. 修復文章標籤為空時可能出現的錯誤 3. 修正 mermaid 圖表可能出現的錯誤 4. 解決未設定選單時控制台報錯的問題 5. 修復 Algolia 搜索的每頁顯示數量設定無效的問題 6. 解決 Algolia 搜索結果出現滾動條的問題 7. 修正滾動條出現上下按鈕的問題 8. 修復圖庫遠程連結未加前綴的問題 9. 修正 label 標籤外掛右側多餘空格的問題 10. 解決 APlayer 報告內存洩漏的問題 1. 優化 PJAX 下的函數調用 2. 整體代碼優化 3. 提升兼容性 4. 改善 Lighthouse 評分 5. 在 PJAX 關閉時減少不必要的全局變量 6. 優化 Waline 的 import 兼容性 7. 改善頁面進入效果 8. 優化程式碼區塊工具列顯示邏輯 9. 改善不同螢幕寬度下文章標題位置的顯示 10. 優化標籤顏色生成算法,避免過暗或過亮 11. 調整 Artalk 和 Waline 在夜間模式下的字體顏色,與主題保持一致 12. 調整 Algolia 搜索加載動畫位置,避免換行 13. 優化 Algolia 搜索結果為空時的處理 14. 改善系列文章的滑鼠懸停效果 15. 優化 404 頁面代碼 16. 解決搜索和側邊欄開啟時窗口抖動的問題 17. 優化 tabs 標籤外掛的代碼和效能 18. 改善 tabs 中使用 gallery 標籤外掛時的圖片加載邏輯 19. 優化目錄滾動效果,使當前標題保持在中間 20. 調整螢幕寬度超過 1024px 時 gallerygroup 的顯示數量 --- .github/ISSUE_TEMPLATE/bug_report.yml | 25 +- README.md | 15 +- README_CN.md | 15 +- _config.yml | 919 ++++++++++-------- languages/default.yml | 4 +- languages/en.yml | 4 +- languages/zh-CN.yml | 4 +- languages/zh-TW.yml | 18 +- layout/category.pug | 6 +- layout/includes/404.pug | 12 - layout/includes/additional-js.pug | 6 +- layout/includes/head.pug | 2 +- layout/includes/head/Open_Graph.pug | 4 +- layout/includes/head/config.pug | 59 +- layout/includes/head/config_site.pug | 17 +- layout/includes/header/index.pug | 2 +- layout/includes/header/nav.pug | 13 +- layout/includes/layout.pug | 43 +- layout/includes/mixins/indexPostUI.pug | 125 +++ layout/includes/mixins/post-ui.pug | 129 --- layout/includes/page/404.pug | 8 + layout/includes/page/shuoshuo.pug | 103 ++ layout/includes/page/tags.pug | 2 +- layout/includes/pagination.pug | 34 +- layout/includes/rightside.pug | 6 +- layout/includes/sidebar.pug | 34 +- layout/includes/third-party/aplayer.pug | 4 +- .../third-party/card-post-count/fb.pug | 2 +- layout/includes/third-party/chat/chatra.pug | 4 +- layout/includes/third-party/chat/crisp.pug | 4 +- layout/includes/third-party/chat/daovoice.pug | 4 +- layout/includes/third-party/chat/index.pug | 21 +- .../includes/third-party/chat/messenger.pug | 4 +- layout/includes/third-party/chat/tidio.pug | 4 +- .../includes/third-party/comments/artalk.pug | 2 +- .../comments/facebook_comments.pug | 2 +- .../includes/third-party/comments/giscus.pug | 30 +- .../third-party/comments/utterances.pug | 40 +- .../includes/third-party/comments/waline.pug | 2 +- layout/includes/third-party/math/index.pug | 29 +- layout/includes/third-party/math/katex.pug | 18 +- layout/includes/third-party/math/mathjax.pug | 4 +- layout/includes/third-party/math/mermaid.pug | 18 +- .../third-party/newest-comments/artalk.pug | 14 +- .../newest-comments/disqus-comment.pug | 6 +- .../newest-comments/github-issues.pug | 6 +- .../third-party/newest-comments/remark42.pug | 6 +- .../newest-comments/twikoo-comment.pug | 8 +- .../third-party/newest-comments/valine.pug | 6 +- .../third-party/newest-comments/waline.pug | 6 +- layout/includes/third-party/pjax.pug | 3 +- .../includes/third-party/search/docsearch.pug | 3 +- layout/includes/third-party/search/index.pug | 13 +- .../third-party/search/local-search.pug | 2 +- layout/includes/third-party/share/index.pug | 14 +- .../includes/third-party/share/share-js.pug | 2 +- layout/includes/third-party/subtitle.pug | 6 +- layout/includes/widget/card_author.pug | 17 +- .../includes/widget/card_newest_comment.pug | 2 +- layout/includes/widget/card_webinfo.pug | 4 +- layout/index.pug | 6 +- layout/page.pug | 24 +- layout/post.pug | 4 +- layout/tag.pug | 6 +- package.json | 2 +- plugins.yml | 38 +- scripts/events/404.js | 4 +- scripts/events/merge_config.js | 294 +++--- scripts/events/stylus.js | 1 + scripts/helpers/findArchiveLength.js | 58 -- scripts/helpers/getArchiveLength.js | 45 + scripts/helpers/inject_head_js.js | 6 + scripts/helpers/page.js | 35 +- scripts/helpers/related_post.js | 37 +- scripts/tag/gallery.js | 5 +- scripts/tag/label.js | 2 +- scripts/tag/series.js | 2 +- scripts/tag/tabs.js | 19 +- source/css/_global/function.styl | 21 +- source/css/_global/index.styl | 50 +- source/css/_highlight/highlight.styl | 32 +- source/css/_highlight/highlight/diff.styl | 4 +- source/css/_highlight/prismjs/index.styl | 4 +- .../css/_highlight/prismjs/line-number.styl | 2 +- source/css/_layout/aside.styl | 45 +- source/css/_layout/chat.styl | 31 +- source/css/_layout/footer.styl | 2 +- source/css/_layout/head.styl | 16 +- source/css/_layout/pagination.styl | 51 +- source/css/_layout/post.styl | 8 +- source/css/_layout/relatedposts.styl | 8 +- source/css/_layout/reward.styl | 3 +- source/css/_layout/rightside.styl | 2 +- source/css/_layout/sidebar.styl | 18 +- source/css/_layout/third-party.styl | 54 +- source/css/_mode/darkmode.styl | 20 +- source/css/_mode/readmode.styl | 2 +- source/css/_page/404.styl | 99 +- source/css/_page/archives.styl | 15 +- source/css/_page/categories.styl | 2 +- source/css/_page/common.styl | 2 +- source/css/_page/flink.styl | 4 +- source/css/_page/homepage.styl | 117 ++- source/css/_page/shuoshuo.styl | 53 + source/css/_page/tags.styl | 10 +- source/css/_search/algolia.styl | 7 +- source/css/_search/index.styl | 7 +- source/css/_tags/button.styl | 1 + source/css/_tags/gallery.styl | 19 +- source/css/_tags/hide.styl | 2 + source/css/_tags/label.styl | 2 +- source/css/_tags/series.styl | 5 + source/css/_tags/tabs.styl | 2 + source/css/var.styl | 9 +- source/img/butterfly-icon.png | Bin 0 -> 275383 bytes source/img/error-page.png | Bin 0 -> 35850 bytes source/img/favicon.ico | Bin 0 -> 15406 bytes source/img/favicon.png | Bin 323 -> 0 bytes source/js/main.js | 354 +++---- source/js/search/algolia.js | 216 ++-- source/js/search/local-search.js | 8 +- source/js/tw_cn.js | 72 +- source/js/utils.js | 132 +-- 123 files changed, 2226 insertions(+), 1792 deletions(-) delete mode 100644 layout/includes/404.pug create mode 100644 layout/includes/mixins/indexPostUI.pug delete mode 100644 layout/includes/mixins/post-ui.pug create mode 100644 layout/includes/page/404.pug create mode 100644 layout/includes/page/shuoshuo.pug delete mode 100644 scripts/helpers/findArchiveLength.js create mode 100644 scripts/helpers/getArchiveLength.js create mode 100644 source/css/_page/shuoshuo.styl create mode 100644 source/css/_tags/series.styl create mode 100644 source/img/butterfly-icon.png create mode 100644 source/img/error-page.png create mode 100644 source/img/favicon.ico delete mode 100644 source/img/favicon.png diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index c3e26b6..d12e9e8 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -7,11 +7,12 @@ body: attributes: value: | 重要:請依照該模板來提交 - Please follow the template to create a new issue + Important: Please follow the template to create a new issue + - type: input id: butterfly-ver attributes: - label: 使用的 Butterfly 版本? | What version of Butterfly are you use? + label: 使用的 Butterfly 版本? | What version of Butterfly are you using? description: 檢視主題的 package.json | Check the theme's package.json validations: required: true @@ -19,17 +20,17 @@ body: - type: dropdown id: modify attributes: - label: 是否修改过主题文件? || Has the theme files been modified? + label: 是否修改過主題文件? | Has the theme files been modified? options: - 是 (Yes) - - 不是 (No) + - 否 (No) validations: required: true - type: dropdown id: browser attributes: - label: 使用的瀏覽器? || What browse are you using? + label: 使用的瀏覽器? | What browser are you using? options: - Chrome - Edge @@ -42,7 +43,7 @@ body: - type: dropdown id: platform attributes: - label: 使用的系統? || What operating system are you using? + label: 使用的系統? | What operating system are you using? options: - Windows - macOS @@ -56,8 +57,8 @@ body: - type: textarea id: dependencies attributes: - label: 依賴插件 | Package dependencies Information - description: 在 Hexo 根目錄下執行`npm ls --depth 0` | Run `npm ls --depth 0` in Hexo root directory + label: 依賴插件 | Package dependencies information + description: 在 Hexo 根目錄下執行 `npm ls --depth 0` | Run `npm ls --depth 0` in Hexo root directory render: Text validations: required: true @@ -75,8 +76,8 @@ body: - type: input id: website attributes: - label: 出現問題網站 | Website - description: 請提供下可復現網站地址 | Please supply a website url which can reproduce problem. - placeholder: + label: 出現問題的網站 | Website with the issue + description: 請提供可復現問題的網站地址 | Please provide a website URL where the problem can be reproduced. + placeholder: 請填寫具體的網址,不要填寫 localhost 網站 | Please provide a specific URL, do not use localhost. validations: - required: true + required: true \ No newline at end of file diff --git a/README.md b/README.md index 2939151..dfa63f8 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,10 @@ 中文 +
+ + + # hexo-theme-butterfly ![master version](https://img.shields.io/github/package-json/v/jerryc127/hexo-theme-butterfly/master?color=%231ab1ad&label=master) @@ -10,13 +14,15 @@ ![hexo version](https://img.shields.io/badge/hexo-5.3.0+-0e83c) ![license](https://img.shields.io/github/license/jerryc127/hexo-theme-butterfly?color=FF5531) -![](https://cdn.jsdelivr.net/gh/jerryc127/CDN@m2/img/theme-butterfly-readme.png) +📢 Demo: [Butterfly](https://butterfly.js.org/) / [CrazyWong](https://blog.crazywong.com/) -📢 Demo: [Butterfly](https://butterfly.js.org/) || [CrazyWong](https://blog.crazywong.com/) +📖 Docs: [English](https://butterfly.js.org/en/posts/butterfly-docs-en-get-started/) / [Chinese](https://butterfly.js.org/posts/21cfbf15/) -📖 Docs: [English](https://butterfly.js.org/en/posts/butterfly-docs-en-get-started/) || [Chinese](https://butterfly.js.org/posts/21cfbf15/) +![](https://cdn.jsdelivr.net/gh/jerryc127/CDN@m2/img/theme-butterfly-readme.png) + +
-Based on [hexo-theme-melody](https://github.com/Molunerfinn/hexo-theme-melody) theme. +--- ## 💻 Installation @@ -59,6 +65,7 @@ npm i hexo-theme-butterfly ## 🎉 Features - [x] Card UI Design +- [x] Rounded Design/Squared Design - [X] Support sub-menu - [x] Two-column layout - [x] Responsive Web Design diff --git a/README_CN.md b/README_CN.md index 7105630..bda0400 100644 --- a/README_CN.md +++ b/README_CN.md @@ -2,6 +2,10 @@ English +
+ + + # hexo-theme-butterfly ![master version](https://img.shields.io/github/package-json/v/jerryc127/hexo-theme-butterfly/master?color=%231ab1ad&label=master) @@ -10,13 +14,15 @@ ![hexo version](https://img.shields.io/badge/hexo-5.3.0+-0e83c) ![license](https://img.shields.io/github/license/jerryc127/hexo-theme-butterfly?color=FF5531) -![](https://cdn.jsdelivr.net/gh/jerryc127/CDN@m2/img/theme-butterfly-readme.png) +📢 預覽: [Butterfly](https://butterfly.js.org/) / [CrazyWong](https://blog.crazywong.com/) -📢 預覽: [Butterfly](https://butterfly.js.org/) || [CrazyWong](https://blog.crazywong.com/) +📖 文檔: [中文](https://butterfly.js.org/posts/21cfbf15/) / [English](https://butterfly.js.org/en/posts/butterfly-docs-en-get-started/) -📖 文檔: [中文](https://butterfly.js.org/posts/21cfbf15/) || [English](https://butterfly.js.org/en/posts/butterfly-docs-en-get-started/) +![](https://cdn.jsdelivr.net/gh/jerryc127/CDN@m2/img/theme-butterfly-readme.png) + +
-一款基於[hexo-theme-melody](https://github.com/Molunerfinn/hexo-theme-melody)修改的主題 +--- ## 💻 安裝 @@ -59,6 +65,7 @@ theme: butterfly ## 🎉 特色 - [x] 卡片化設計 +- [x] 圓角化設計/直角化設計 - [X] 支持二級目錄 - [x] 雙欄設計 - [x] 響應式主題 diff --git a/_config.yml b/_config.yml index 8ce3b49..cd7b323 100644 --- a/_config.yml +++ b/_config.yml @@ -1,99 +1,109 @@ -# Navigation bar settings (導航欄設置) -# see https://butterfly.js.org/posts/4aa8abbe/##導航欄設置-Navigation-bar-settings +# -------------------------------------- +# Hexo Butterfly Theme Configuration +# If you have any questions, please refer to the documentation +# Chinese: https://butterfly.js.org/ +# English: https://butterfly.js.org/en/ +# -------------------------------------- + +# -------------------------------------- +# Navigation Settings # -------------------------------------- nav: - logo: # image + # Navigation bar logo image + logo: display_title: true - fixed: false # fixed navigation bar + # Whether to fix navigation bar + fixed: false -# Menu 目錄 menu: # Home: / || fas fa-home - # Archives: /archives/ || fas fa-archive - # Tags: /tags/ || fas fa-tags - # Categories: /categories/ || fas fa-folder-open # List||fas fa-list: # Music: /music/ || fas fa-music # Movie: /movies/ || fas fa-video - # Link: /link/ || fas fa-link - # About: /about/ || fas fa-heart -# Code Blocks (代碼相關) +# -------------------------------------- +# Code Blocks Settings # -------------------------------------- -highlight_theme: light # darker / pale night / light / ocean / false -highlight_height_limit: false # unit: px -code_word_wrap: false - -# highlight toolbar -highlight_theme_macStyle: false # use mac style -highlight_copy: true # copy button -highlight_lang: true # show the code language -highlight_shrink: false # true: shrink the code blocks / false: expand the code blocks | none: expand code blocks and hide the button -highlight_fullpage: true # true: add button to toggle full page - -# Social Settings (社交圖標設置) -# formal: +code_blocks: + # Code block theme: darker / pale night / light / ocean / false + theme: light + macStyle: false + # Code block height limit (unit: px) + height_limit: false + word_wrap: false + + # Toolbar + copy: true + language: true + # true: shrink the code blocks | false: expand the code blocks | none: expand code blocks and hide the button + shrink: false + fullpage: false + +# Social media links +# Formal: # icon: link || the description || color social: # fab fa-github: https://github.com/xxxxx || Github || '#24292e' # fas fa-envelope: mailto:xxxxxx@gmail.com || Email || '#4a7dbe' -# Image (圖片設置) +# -------------------------------------- +# Image Settings # -------------------------------------- -# Favicon(網站圖標) favicon: /img/favicon.png -# Avatar (頭像) avatar: - img: https://i.loli.net/2021/02/24/5O1day2nriDzjSu.png + img: /img/butterfly-icon.png effect: false -# Disable all banner image +# Disable all banner images disable_top_img: false -# The banner image of home page -index_img: - -# If the banner of page not setting, it will show the top_img +# If the banner of page not setting, it will show the default_top_img default_top_img: +# The banner image of index page +index_img: + # The banner image of archive page archive_img: -# If the banner of tag page not setting, it will show the top_img -# note: tag page, not tags page (子標籤頁面的 top_img) +# Note: tag page, not tags page tag_img: -# The banner image of tag page -# format: +# The banner image of tag page, you can set the banner image for each tag +# Format: # - tag name: xxxxx tag_per_img: -# If the banner of category page not setting, it will show the top_img -# note: category page, not categories page (子分類頁面的 top_img) +# Note: category page, not categories page category_img: -# The banner image of category page -# format: +# The banner image of category page, you can set the banner image for each category +# Format: # - category name: xxxxx category_per_img: +# The background image of footer +footer_img: false + +# Website Background +# Can set it to color or image +# The formal of image: url(http://xxxxxx.com/xxx.jpg) +background: + cover: - # display the cover or not (是否顯示文章封面) + # Disable the cover or not index_enable: true aside_enable: true archives_enable: true - # the position of cover in home page (封面顯示的位置) - # left/right/both - position: both - # When cover is not set, the default cover is displayed (當沒有設置cover時,默認的封面顯示) + # When cover is not set, the default cover is displayed default_cover: - # - https://i.loli.net/2020/05/01/gkihqEjXxJ5UZ1C.jpg + # - xxx.jpg -# Replace Broken Images (替換無法顯示的圖片) +# Replace Broken Images error_img: flink: /img/friend_404.gif post_page: /img/404.jpg @@ -102,22 +112,68 @@ error_img: error_404: enable: false subtitle: 'Page Not Found' - background: https://i.loli.net/2020/05/19/aKOcLiyPl2JQdFD.png + background: /img/error-page.png post_meta: - page: # Home Page - date_type: created # created or updated or both 主頁文章日期是創建日或者更新日或都顯示 - date_format: date # date/relative 顯示日期還是相對日期 - categories: true # true or false 主頁是否顯示分類 - tags: false # true or false 主頁是否顯示標籤 - label: true # true or false 顯示描述性文字 + # Home Page + page: + # Choose: created / updated / both + date_type: created + # Choose: date / relative + date_format: date + categories: true + tags: false + label: true post: - position: left # left or center 文章頁標題位置 - date_type: both # created or updated or both 文章頁日期是創建日或者更新日或都顯示 - date_format: date # date/relative 顯示日期還是相對日期 - categories: true # true or false 文章頁是否顯示分類 - tags: true # true or false 文章頁是否顯示標籤 - label: true # true or false 顯示描述性文字 + # Choose: left / center + position: left + # Choose: created / updated / both + date_type: both + # Choose: date / relative + date_format: date + categories: true + tags: true + label: true + +# -------------------------------------- +# Index page settings +# -------------------------------------- + +# The top_img settings of home page +# default: top img - full screen, site info - middle +# The position of site info, eg: 300px/300em/300rem/10% +index_site_info_top: +# The height of top_img, eg: 300px/300em/300rem +index_top_img_height: + +# The subtitle on homepage +subtitle: + enable: false + # Typewriter Effect + effect: true + # Customize typed.js + # https://github.com/mattboldt/typed.js/#customization + typed_option: + # Source - Call the third-party service API (Chinese only) + # It will show the source first, then show the content of sub + # Choose: false/1/2/3 + # false - disable the function + # 1 - hitokoto.cn + # 2 - yijuzhan.com + # 3 - jinrishici.com + source: false + # If you close the typewriter effect, the subtitle will only show the first line of sub + sub: + +# Article layout on the homepage +# 1: Cover on the left, info on the right +# 2: Cover on the right, info on the left +# 3: Cover and info alternate between left and right +# 4: Cover on top, info on the bottom +# 5: Info displayed on the cover +# 6: Masonry layout - Cover on top, info on the bottom +# 7: Masonry layout - Info displayed on the cover +index_layout: 3 # Display the article introduction on homepage # 1: description @@ -126,36 +182,20 @@ post_meta: # false: do not show the article introduction index_post_content: method: 3 - length: 500 # if you set method to 2 or 3, the length need to config - -# anchor -anchor: - # when you scroll, the URL will update according to header id. - auto_update: false - # Click the headline to scroll and update the anchor - click_to_scroll: false - -# figcaption (圖片描述文字) -photofigcaption: false - -# copy settings -# copyright: Add the copyright information after copied content (複製的內容後面加上版權信息) -copy: - enable: true - copyright: - enable: false - limit_count: 50 + # If you set method to 2 or 3, the length need to config + length: 500 -# Post +# -------------------------------------- +# Post Settings # -------------------------------------- -# toc (目錄) toc: post: true page: false number: true expand: false - style_simple: false # for post + # Only for post + style_simple: false scroll_percent: true post_copyright: @@ -188,43 +228,52 @@ post_edit: # Related Articles related_post: enable: true - limit: 6 # Number of posts displayed - date_type: created # or created or updated 文章日期顯示創建日或者更新日 + # Number of posts displayed + limit: 6 + # Choose: created / updated + date_type: created -# post_pagination (分頁) -# value: 1 || 2 || false +# Choose: 1 / 2 / false # 1: The 'next post' will link to old post # 2: The 'next post' will link to new post # false: disable pagination post_pagination: 1 -# Displays outdated notice for a post (文章過期提醒) +# Displays outdated notice for a post noticeOutdate: enable: false - style: flat # style: simple/flat - limit_day: 500 # When will it be shown - position: top # position: top/bottom + # Style: simple / flat + style: flat + # When will it be shown + limit_day: 365 + # Position: top / bottom + position: top message_prev: It has been message_next: days since the last update, the content of the article may be outdated. +# -------------------------------------- # Footer Settings # -------------------------------------- footer: owner: enable: true - since: 2020 + since: 2019 custom_text: - copyright: true # Copyright of theme and framework + # Copyright of theme and framework + copyright: true -# aside (側邊欄) +# -------------------------------------- +# Aside Settings # -------------------------------------- aside: enable: true hide: false + # Show the button to hide the aside in bottom right button button: true - mobile: true # display on mobile - position: right # left or right + mobile: true + # Position: left / right + position: right display: archive: true tag: true @@ -242,64 +291,72 @@ aside: content: This is my Blog card_recent_post: enable: true - limit: 5 # if set 0 will show all - sort: date # date or updated - sort_order: # Don't modify the setting unless you know how it works + # If set 0 will show all + limit: 5 + # Sort: date / updated + sort: date + sort_order: + card_newest_comments: + enable: false + sort_order: + limit: 6 + # Unit: mins, save data to localStorage + storage: 10 + avatar: true card_categories: enable: true - limit: 8 # if set 0 will show all - expand: none # none/true/false - sort_order: # Don't modify the setting unless you know how it works + # If set 0 will show all + limit: 8 + # Choose: none / true / false + expand: none + sort_order: card_tags: enable: true - limit: 40 # if set 0 will show all + # If set 0 will show all + limit: 40 color: false - orderby: random # Order of tags, random/name/length - order: 1 # Sort of order. 1, asc for ascending; -1, desc for descending - sort_order: # Don't modify the setting unless you know how it works + # Order of tags, random/name/length + orderby: random + # Sort of order. 1, asc for ascending; -1, desc for descending + order: 1 + sort_order: card_archives: enable: true - type: monthly # yearly or monthly - format: MMMM YYYY # eg: YYYY年MM月 - order: -1 # Sort of order. 1, asc for ascending; -1, desc for descending - limit: 8 # if set 0 will show all - sort_order: # Don't modify the setting unless you know how it works + # Type: monthly / yearly + type: monthly + # Eg: YYYY年MM月 + format: MMMM YYYY + # Sort of order. 1, asc for ascending; -1, desc for descending + order: -1 + # If set 0 will show all + limit: 8 + sort_order: + card_post_series: + enable: true + # The title shows the series name + series_title: false + # Order by title or date + orderBy: 'date' + # Sort of order. 1, asc for ascending; -1, desc for descending + order: -1 card_webinfo: enable: true post_count: true last_push_date: true - sort_order: # Don't modify the setting unless you know how it works - card_post_series: - enable: true - series_title: false # The title shows the series name - orderBy: 'date' # Order by title or date - order: -1 # Sort of order. 1, asc for ascending; -1, desc for descending + sort_order: + # Time difference between publish date and now + # Formal: Month/Day/Year Time or Year/Month/Day Time + # Leave it empty if you don't enable this feature + runtime_date: -# busuanzi count for PV / UV in site -# 訪問人數 -busuanzi: - site_uv: true - site_pv: true - page_pv: true - -# Time difference between publish date and now (網頁運行時間) -# Formal: Month/Day/Year Time or Year/Month/Day Time -runtimeshow: - enable: false - publish_date: - -# Aside widget - Newest Comments -newest_comments: - enable: false - sort_order: # Don't modify the setting unless you know how it works - limit: 6 - storage: 10 # unit: mins, save data to localStorage - avatar: true - -# Bottom right button (右下角按鈕) # -------------------------------------- +# Bottom right button +# -------------------------------------- + +# The distance between the bottom right button and the bottom (default unit: px) +rightside_bottom: -# Conversion between Traditional and Simplified Chinese (簡繁轉換) +# Conversion between Traditional and Simplified Chinese translate: enable: false # The text of a button @@ -313,130 +370,187 @@ translate: # The text of the button when the language is Traditional Chinese msgToSimplifiedChinese: '簡' -# Read Mode (閲讀模式) +# Read Mode readmode: true -# dark mode +# Dark Mode darkmode: enable: true # Toggle Button to switch dark/light mode button: true - # Switch dark/light mode automatically (自動切換 dark mode和 light mode) + # Switch dark/light mode automatically # autoChangeMode: 1 Following System Settings, if the system doesn't support dark mode, it will switch dark mode between 6 pm to 6 am # autoChangeMode: 2 Switch dark mode between 6 pm to 6 am # autoChangeMode: false autoChangeMode: false # Set the light mode time. The value is between 0 and 24. If not set, the default value is 6 and 18 - start: # 8 - end: # 22 + start: + end: -# show scroll percent in scroll-to-top button +# Show scroll percent in scroll-to-top button rightside_scroll_percent: false -# Don't modify the following settings unless you know how they work (非必要請不要修改 ) +# Don't modify the following settings unless you know how they work # Choose: readmode,translate,darkmode,hideAside,toc,chat,comment -# Don't repeat 不要重複 +# Don't repeat the same value rightside_item_order: enable: false - hide: # readmode,translate,darkmode,hideAside - show: # toc,chat,comment + # Default: readmode,translate,darkmode,hideAside + hide: + # Default: toc,chat,comment + show: -# Math (數學) # -------------------------------------- -# About the per_page -# if you set it to true, it will load mathjax/katex script in each page (true 表示每一頁都加載js) -# if you set it to false, it will load mathjax/katex script according to your setting (add the 'mathjax: true' in page's front-matter) -# (false 需要時加載,須在使用的 Markdown Front-matter 加上 mathjax: true) +# Global Settings +# -------------------------------------- -# MathJax -mathjax: - enable: false - per_page: false +anchor: + # When you scroll, the URL will update according to header id. + auto_update: false + # Click the headline to scroll and update the anchor + click_to_scroll: false + +photofigcaption: false -# KaTeX -katex: +copy: + enable: true + # Add the copyright information after copied content + copyright: + enable: false + limit_count: 150 + +# Need to install the hexo-wordcount plugin +wordcount: enable: false - per_page: false - hide_scrollbar: true + # Display the word count of the article in post meta + post_wordcount: true + # Display the time to read the article in post meta + min2read: true + # Display the total word count of the website in aside's webinfo + total_wordcount: true + +# Busuanzi count for PV / UV in site +busuanzi: + site_uv: true + site_pv: true + page_pv: true -# search (搜索) -# see https://butterfly.js.org/posts/ceeb73f/#搜索系統 +# -------------------------------------- +# Math # -------------------------------------- -# Algolia search -algolia_search: - enable: false - hits: - per_page: 6 +# About the per_page +# if you set it to true, it will load mathjax/katex script in each page +# if you set it to false, it will load mathjax/katex script according to your setting (add the 'mathjax: true' or 'katex: true' in page's front-matter) +math: + # Choose: mathjax, katex + # Leave it empty if you don't need math + use: + per_page: true + hide_scrollbar: false -# Local search -local_search: - enable: false - # Preload the search data when the page loads. - preload: false - # Show top n results per article, show all results by setting to -1 - top_n_per_article: 1 - # Unescape html strings to the readable one. - unescape: false - CDN: - -# Docsearch -docsearch: - enable: false - appId: - apiKey: - indexName: - option: + mathjax: + # Enable the contextual menu + enableMenu: true + # Choose: all / ams / none, This controls whether equations are numbered and how + tags: none + + katex: + # Enable the copy KaTeX formula + copy_tex: false -# Share System (分享) +# -------------------------------------- +# Search # -------------------------------------- -# Share.js -# https://github.com/overtrue/share.js -sharejs: - enable: true - sites: facebook,twitter,wechat,weibo,qq +search: + # Choose: algolia_search / local_search / docsearch + # leave it empty if you don't need search + use: + placeholder: -# AddToAny -# https://www.addtoany.com/ -addtoany: - enable: false - item: facebook,twitter,wechat,sina_weibo,facebook_messenger,email,copy_link + # Algolia Search + algolia_search: + # Number of search results per page + hitsPerPage: 6 + + # Local Search + local_search: + # Preload the search data when the page loads. + preload: false + # Show top n results per article, show all results by setting to -1 + top_n_per_article: 1 + # Unescape html strings to the readable one. + unescape: false + CDN: + + # Docsearch + # https://docsearch.algolia.com/ + docsearch: + appId: + apiKey: + indexName: + option: +# -------------------------------------- +# Share System +# -------------------------------------- + +share: + # Choose: sharejs / addtoany + # Leave it empty if you don't need share + use: sharejs + + # Share.js + # https://github.com/overtrue/share.js + sharejs: + sites: facebook,twitter,wechat,weibo,qq + + # AddToAny + # https://www.addtoany.com/ + addtoany: + item: facebook,twitter,wechat,sina_weibo,facebook_messenger,email,copy_link + +# -------------------------------------- # Comments System # -------------------------------------- comments: # Up to two comments system, the first will be shown as default + # Leave it empty if you don't need comments # Choose: Disqus/Disqusjs/Livere/Gitalk/Valine/Waline/Utterances/Facebook Comments/Twikoo/Giscus/Remark42/Artalk - use: # Valine,Disqus - text: true # Display the comment name next to the button - # lazyload: The comment system will be load when comment element enters the browser's viewport. + # Format of two comments system : Disqus,Waline + use: + # Display the comment name next to the button + text: true + # Lazyload: The comment system will be load when comment element enters the browser's viewport. # If you set it to true, the comment count will be invalid lazyload: false - count: false # Display comment count in post's top_img - card_post_count: false # Display comment count in Home Page + # Display comment count in post's top_img + count: false + # Display comment count in Home Page + card_post_count: false -# disqus +# Disqus # https://disqus.com/ disqus: shortname: - apikey: # For newest comments widget + # For newest comments widget + apikey: # Alternative Disqus - Render comments with Disqus API -# DisqusJS 評論系統,可以實現在網路審查地區載入 Disqus 評論列表,兼容原版 # https://github.com/SukkaW/DisqusJS disqusjs: shortname: apikey: option: -# livere (來必力) +# Livere # https://www.livere.com/ livere: uid: -# gitalk +# Gitalk # https://github.com/gitalk/gitalk gitalk: client_id: @@ -446,26 +560,29 @@ gitalk: admin: option: -# valine +# Valine # https://valine.js.org valine: - appId: # leancloud application app id - appKey: # leancloud application app key - avatar: monsterid # gravatar style https://valine.js.org/#/avatar - serverURLs: # This configuration is suitable for domestic custom domain name users, overseas version will be automatically detected (no need to manually fill in) - bg: # valine background + appId: + appKey: + avatar: monsterid + # This configuration is suitable for domestic custom domain name users, overseas version will be automatically detected (no need to manually fill in) + serverURLs: + bg: + # Use Valine visitor count as the page view count visitor: false option: -# waline - A simple comment system with backend support fork from Valine +# Waline - A simple comment system with backend support fork from Valine # https://waline.js.org/ waline: - serverURL: # Waline server address url - bg: # waline background + serverURL: + bg: + # Use Waline pageview count as the page view count pageview: false option: -# utterances +# Utterances # https://utteranc.es/ utterances: repo: @@ -474,21 +591,26 @@ utterances: # Theme: github-light/github-dark/github-dark-orange/icy-dark/dark-blue/photon-dark light_theme: github-light dark_theme: photon-dark + js: + option: # Facebook Comments Plugin # https://developers.facebook.com/docs/plugins/comments/ facebook_comments: app_id: - user_id: # optional - pageSize: 10 # The number of comments to show - order_by: social # social/time/reverse_time - lang: zh_TW # Language en_US/zh_CN/zh_TW and so on + # optional + user_id: + pageSize: 10 + # Choose: social / time / reverse_time + order_by: social + lang: zh_TW # Twikoo # https://github.com/imaegoo/twikoo twikoo: envId: region: + # Use Twikoo visitor count as the page view count visitor: false option: @@ -498,16 +620,16 @@ giscus: repo: repo_id: category_id: - theme: - light: light - dark: dark + light_theme: light + dark_theme: dark + js: option: # Remark42 # https://remark42.com/docs/configuration/frontend/ remark42: - host: # Your Host URL - siteId: # Your Site ID + host: + siteId: option: # Artalk @@ -515,73 +637,66 @@ remark42: artalk: server: site: + # Use Artalk visitor count as the page view count visitor: false option: +# -------------------------------------- # Chat Services # -------------------------------------- -# Chat Button [recommend] -# It will create a button in the bottom right corner of website, and hide the origin button -chat_btn: false - -# The origin chat button is displayed when scrolling up, and the button is hidden when scrolling down -chat_hide_show: false +chat: + # Choose: chatra/tidio/daovoice/crisp/messenger + # Leave it empty if you don't need chat + use: + # Chat Button [recommend] + # It will create a button in the bottom right corner of website, and hide the origin button + rightside_button: false + # The origin chat button is displayed when scrolling up, and the button is hidden when scrolling down + button_hide_show: false -# chatra # https://chatra.io/ chatra: - enable: false id: -# tidio # https://www.tidio.com/ tidio: - enable: false public_key: -# daovoice # http://dashboard.daovoice.io/app daovoice: - enable: false app_id: -# crisp # https://crisp.chat/en/ crisp: - enable: false website_id: -# messenger # https://developers.facebook.com/docs/messenger-platform/discovery/facebook-chat-plugin/ messenger: - enable: false pageID: - lang: zh_TW # Language en_US/zh_CN/zh_TW and so on + lang: zh_TW +# -------------------------------------- # Analysis # -------------------------------------- -# Baidu Analytics # https://tongji.baidu.com/web/welcome/login baidu_analytics: -# Google Analytics # https://analytics.google.com/analytics/web/ google_analytics: -# Cloudflare Analytics # https://www.cloudflare.com/zh-tw/web-analytics/ cloudflare_analytics: -# Microsoft Clarity # https://clarity.microsoft.com/ microsoft_clarity: +# -------------------------------------- # Advertisement # -------------------------------------- -# Google Adsense (谷歌廣告) +# Google Adsense google_adsense: enable: false auto_ads: true @@ -589,13 +704,18 @@ google_adsense: client: enable_page_level_ads: true -# Insert ads manually (手動插入廣告) -# ad: -# index: -# aside: -# post: +# Insert ads manually +# Leave it empty if you don't need ads +ad: + # Insert ads in the index (every three posts) + index: + # Insert ads in aside + aside: + # Insert ads in the post (before pagination) + post: -# Verification (站長驗證) +# -------------------------------------- +# Verification # -------------------------------------- site_verification: @@ -604,7 +724,8 @@ site_verification: # - name: baidu-site-verification # content: xxxxxxx -# Beautify/Effect (美化/效果) +# -------------------------------------- +# Beautify / Effect # -------------------------------------- # Theme color for customize @@ -628,63 +749,93 @@ site_verification: # meta_theme_color_light: "ffffff" # meta_theme_color_dark: "#0d0d0d" -# The top_img settings of home page -# default: top img - full screen, site info - middle (默認top_img全屏,site_info在中間) -# The position of site info, eg: 300px/300em/300rem/10% (主頁標題距離頂部距離) -index_site_info_top: -# The height of top_img, eg: 300px/300em/300rem (主頁top_img高度) -index_top_img_height: +# The user interface setting of category and tag page +# Choose: index - same as Homepage UI / default - same as archives UI +# leave it empty or index +category_ui: +tag_ui: -# The user interface setting of category and tag page (category和tag頁的UI設置) -# index - same as Homepage UI (index 值代表 UI將與首頁的UI一樣) -# default - same as archives UI 默認跟archives頁面UI一樣 -category_ui: # 留空或 index -tag_ui: # 留空或 index +# Rounded corners for UI elements +rounded_corners_ui: true -# Stretches the lines so that each line has equal width(文字向兩側對齊,對最後一行無效) +# Stretches the lines so that each line has equal width text_align_justify: false -# Website Background (設置網站背景) -# can set it to color or image (可設置圖片 或者 顔色) -# The formal of image: url(http://xxxxxx.com/xxx.jpg) -background: - -# Footer Background -footer_bg: false - -# Add mask to header or footer (为 header 或 footer 添加黑色半透遮罩) +# Add a mask to the header and footer mask: header: true footer: true -# the position of bottom right button/default unit: px (右下角按鈕距離底部的距離/默認單位為px) -rightside_bottom: +# Loading Animation +preloader: + enable: false + # source + # 1. fullpage-loading + # 2. pace (progress bar) + source: 1 + # pace theme (see https://codebyzach.github.io/pace/) + pace_css_url: -# Enter transitions (開啓網頁進入效果) +# Page Transition enter_transitions: true -# Typewriter Effect (打字效果) +# Default display mode - light (default) / dark +display_mode: light + +# Configuration for beautifying the content of the article +beautify: + enable: false + # Specify the field to beautify (site or post) + field: post + # Specify the icon to be used as a prefix for the title, such as '\f0c1' + title-prefix-icon: + # Specify the color of the title prefix icon, such as '#F47466' + title-prefix-icon-color: + +# Global font settings +# Don't modify the following settings unless you know how they work +font: + global-font-size: + code-font-size: + font-family: + code-font-family: + +# Font settings for the site title and site subtitle +blog_title_font: + font_link: + font-family: + +# The setting of divider icon +hr_icon: + enable: true + # The unicode value of Font Awesome icon, such as '\3423' + icon: + icon-top: + +# Typewriter Effect # https://github.com/disjukr/activate-power-mode activate_power_mode: enable: false - colorful: true # open particle animation (冒光特效) - shake: true # open shake (抖動特效) + colorful: true + shake: true mobile: false -# Background effects (背景特效) +# Background effects # -------------------------------------- -# canvas_ribbon (靜止彩帶背景) +# canvas_ribbon # See: https://github.com/hustcc/ribbon.js canvas_ribbon: enable: false + # The size of ribbon size: 150 + # The opacity of ribbon (0 ~ 1) alpha: 0.6 zIndex: -1 click_to_change: false mobile: false -# Fluttering Ribbon (動態彩帶) +# Fluttering Ribbon canvas_fluttering_ribbon: enable: false mobile: false @@ -693,24 +844,28 @@ canvas_fluttering_ribbon: # https://github.com/hustcc/canvas-nest.js canvas_nest: enable: false - color: '0,0,255' #color of lines, default: '0,0,0'; RGB values: (R,G,B).(note: use ',' to separate.) - opacity: 0.7 # the opacity of line (0~1), default: 0.5. - zIndex: -1 # z-index property of the background, default: -1. - count: 99 # the number of lines, default: 99. + # Color of lines, default: '0,0,0'; RGB values: (R,G,B).(note: use ',' to separate.) + color: '0,0,255' + # The opacity of line (0~1) + opacity: 0.7 + # The z-index property of the background + zIndex: -1 + # The number of lines + count: 99 mobile: false -# Mouse click effects: fireworks (鼠標點擊效果: 煙火特效) +# Mouse click effects: fireworks fireworks: enable: false - zIndex: 9999 # -1 or 9999 + zIndex: 9999 mobile: false -# Mouse click effects: Heart symbol (鼠標點擊效果: 愛心) +# Mouse click effects: Heart symbol click_heart: enable: false mobile: false -# Mouse click effects: words (鼠標點擊效果: 文字) +# Mouse click effects: words clickShowText: enable: false text: @@ -721,113 +876,47 @@ clickShowText: random: false mobile: false -# Default display mode (網站默認的顯示模式) -# light (default) / dark -display_mode: light - -# Beautify (美化頁面顯示) -beautify: - enable: false - field: post # site/post - title-prefix-icon: # '\f0c1' - title-prefix-icon-color: # '#F47466' - -# Global font settings -# Don't modify the following settings unless you know how they work (非必要不要修改) -font: - global-font-size: - code-font-size: - font-family: - code-font-family: - -# Font settings for the site title and site subtitle -# 左上角網站名字 主頁居中網站名字 -blog_title_font: - font_link: - font-family: - -# The setting of divider icon (水平分隔線圖標設置) -hr_icon: - enable: true - icon: # the unicode value of Font Awesome icon, such as '\3423' - icon-top: - -# the subtitle on homepage (主頁subtitle) -subtitle: - enable: false - # Typewriter Effect (打字效果) - effect: true - # Customize typed.js (配置typed.js) - # https://github.com/mattboldt/typed.js/#customization - typed_option: - # source 調用第三方服務 - # source: false 關閉調用 - # source: 1 調用一言網的一句話(簡體) https://hitokoto.cn/ - # source: 2 調用一句網(簡體) https://yijuzhan.com/ - # source: 3 調用今日詩詞(簡體) https://www.jinrishici.com/ - # subtitle 會先顯示 source , 再顯示 sub 的內容 - source: false - # 如果關閉打字效果,subtitle 只會顯示 sub 的第一行文字 - sub: - -# Loading Animation (加載動畫) -preloader: - enable: false - # source - # 1. fullpage-loading - # 2. pace (progress bar) - source: 1 - # pace theme (see https://codebyzach.github.io/pace/) - pace_css_url: - -# wordcount (字數統計) -# see https://butterfly.js.org/posts/ceeb73f/#字數統計 -wordcount: - enable: false - post_wordcount: true - min2read: true - total_wordcount: true - -# Lightbox (圖片大圖查看模式) # -------------------------------------- -# You can only choose one, or neither (只能選擇一個 或者 兩個都不選) +# Lightbox Settings +# -------------------------------------- -# medium-zoom +# Choose: fancybox / medium_zoom # https://github.com/francoischalifour/medium-zoom -medium_zoom: false - -# fancybox # https://fancyapps.com/fancybox/ -fancybox: true +# Leave it empty if you don't need lightbox +lightbox: -# Tag Plugins settings (標籤外掛) +# -------------------------------------- +# Tag Plugins settings # -------------------------------------- -# series (系列文章) +# Series series: - enable: true - orderBy: 'title' # Order by title or date - order: 1 # Sort of order. 1, asc for ascending; -1, desc for descending + enable: false + # Order by title or date + orderBy: 'title' + # Sort of order. 1, asc for ascending; -1, desc for descending + order: 1 number: true -# abcjs (樂譜渲染) -# See https://github.com/paulrosen/abcjs +# ABCJS - The ABC Music Notation Plugin +# https://github.com/paulrosen/abcjs abcjs: enable: false per_page: true # Mermaid -# See https://github.com/mermaid-js/mermaid +# https://github.com/mermaid-js/mermaid mermaid: - enable: true - # Write Mermaid diagrams using code blocks (以代碼塊形式書寫 Mermaid) - code_write: false - # Built-in themes: default/forest/dark/neutral + enable: false + # Write Mermaid diagrams using code blocks + code_write: false + # built-in themes: default / forest / dark / neutral theme: light: default dark: dark -# Note (Bootstrap Callout) +# Note - Bootstrap Callout note: # Note tag style values: # - simple bs-callout old alert style. Default. @@ -841,64 +930,65 @@ note: # Offset also applied to label tag variables. This option can work with disabled note tag. light_bg_offset: 0 -# other +# -------------------------------------- +# Other Settings # -------------------------------------- -# Pjax -# It may contain bugs and unstable, give feedback when you find the bugs. # https://github.com/MoOx/pjax pjax: enable: false + # Exclude the specified pages from pjax, such as '/music/' exclude: - # - xxxx - # - xxxx + # - /xxxxxx/ # Inject the css and script (aplayer/meting) aplayerInject: enable: false per_page: true -# Snackbar (Toast Notification 彈窗) +# Snackbar - Toast Notification # https://github.com/polonel/SnackBar -# position 彈窗位置 -# 可選 top-left / top-center / top-right / bottom-left / bottom-center / bottom-right +# position: top-left / top-center / top-right / bottom-left / bottom-center / bottom-right snackbar: enable: false position: bottom-left - bg_light: '#49b1f5' # The background color of Toast Notification in light mode - bg_dark: '#1f1f1f' # The background color of Toast Notification in dark mode + # The background color of Toast Notification in light mode and dark mode + bg_light: '#49b1f5' + bg_dark: '#1f1f1f' +# Instant.page # https://instant.page/ -# prefetch (預加載) instantpage: false +# Pangu - Insert a space between Chinese character and English character # https://github.com/vinta/pangu.js -# Insert a space between Chinese character and English character (中英文之間添加空格) pangu: enable: false - field: site # site/post + # Specify the field to use pangu (site or post) + field: site -# Lazyload (圖片懶加載) +# Lazyload # https://github.com/verlok/vanilla-lazyload lazyload: enable: false - field: site # site/post + # Specify the field to use lazyload (site or post) + field: site placeholder: blur: false # PWA # See https://github.com/JLHwung/hexo-offline # --------------- -# pwa: -# enable: false -# manifest: /pwa/manifest.json -# apple_touch_icon: /pwa/apple-touch-icon.png -# favicon_32_32: /pwa/32.png -# favicon_16_16: /pwa/16.png -# mask_icon: /pwa/safari-pinned-tab.svg +pwa: + enable: false + manifest: + apple_touch_icon: + favicon_32_32: + favicon_16_16: + mask_icon: # Open graph meta tags -# https://developers.facebook.com/docs/sharing/webmasters/ +# https://hexo.io/docs/helpers#open-graph Open_Graph_meta: enable: true option: @@ -915,29 +1005,24 @@ css_prefix: true # Inject # Insert the code to head (before '' tag) and the bottom (before '' tag) -# 插入代码到头部 之前 和 底部 之前 inject: head: # - bottom: # - -# CDN +# CDN Settings # Don't modify the following settings unless you know how they work -# 非必要請不要修改 CDN: - # The CDN provider of internal scripts (主題內部 js 的 cdn 配置) - # option: local/jsdelivr/unpkg/cdnjs/custom - # Dev version can only choose. ( dev版的主題只能設置為 local ) + # The CDN provider for internal and third-party scripts + # Options for both: local/jsdelivr/unpkg/cdnjs/custom + # Note: Dev version can only use 'local' for internal scripts + # Note: When setting third-party scripts to 'local', you need to install hexo-butterfly-extjs internal_provider: local - - # The CDN provider of third party scripts (第三方 js 的 cdn 配置) - # option: local/jsdelivr/unpkg/cdnjs/custom - # when set it to local, you need to install hexo-butterfly-extjs third_party_provider: jsdelivr # Add version number to url, true or false - version: true + version: false # Custom format # For example: https://cdn.staticfile.org/${cdnjs_name}/${version}/${min_cdnjs_file} @@ -998,4 +1083,4 @@ CDN: # utils: # valine: # waline_css: - # waline_js: \ No newline at end of file + # waline_js: diff --git a/languages/default.yml b/languages/default.yml index 59ddd22..bea841e 100644 --- a/languages/default.yml +++ b/languages/default.yml @@ -36,13 +36,11 @@ post: search: title: Search load_data: Loading the Database + input_placeholder: Search for Posts algolia_search: - input_placeholder: Search for Posts hits_empty: "We didn't find any results for the search: ${query}." hits_stats: '${hits} results found in ${time} ms' - local_search: - input_placeholder: Search for Posts hits_empty: "We didn't find any results for the search: ${query}" hits_stats: '${hits} results found' diff --git a/languages/en.yml b/languages/en.yml index 489b57b..26be42b 100644 --- a/languages/en.yml +++ b/languages/en.yml @@ -36,13 +36,11 @@ post: search: title: Search load_data: Loading the Database + input_placeholder: Search for Posts algolia_search: - input_placeholder: Search for Posts hits_empty: "We didn't find any results for the search: ${query}." hits_stats: '${hits} results found in ${time} ms' - local_search: - input_placeholder: Search for Posts hits_empty: "We didn't find any results for the search: ${query}" hits_stats: '${hits} results found' diff --git a/languages/zh-CN.yml b/languages/zh-CN.yml index b030079..18206ba 100644 --- a/languages/zh-CN.yml +++ b/languages/zh-CN.yml @@ -37,13 +37,11 @@ post: search: title: 搜索 load_data: 数据库加载中 + input_placeholder: 搜索文章 algolia_search: - input_placeholder: 搜索文章 hits_empty: '找不到您查询的内容:${query}' hits_stats: '找到 ${hits} 条结果,用时 ${time} 毫秒' - local_search: - input_placeholder: 搜索文章 hits_empty: '找不到您查询的内容:${query}' hits_stats: '共找到 ${hits} 篇文章' diff --git a/languages/zh-TW.yml b/languages/zh-TW.yml index 4ac63b8..929df60 100644 --- a/languages/zh-TW.yml +++ b/languages/zh-TW.yml @@ -15,7 +15,7 @@ page: card_post_count: 條評論 -no_title: 無標題 +no_title: 無題 post: created: 發表於 @@ -28,8 +28,8 @@ post: copyright: author: 文章作者 link: 文章連結 - copyright_notice: 版權聲明 - copyright_content: '本部落格所有文章除特別聲明外,均採用 + copyright_notice: 版權宣告 + copyright_content: '本部落格所有文章除特別宣告外,均採用 %s 許可協議。轉載請註明來自 %s!' recommend: 相關推薦 edit: 編輯 @@ -37,16 +37,14 @@ post: search: title: 搜尋 load_data: 資料庫載入中 + input_placeholder: 搜尋文章 algolia_search: - input_placeholder: 搜尋文章 hits_empty: '找不到您查詢的內容:${query}' hits_stats: '找到 ${hits} 條結果,用時 ${time} 毫秒' - local_search: - input_placeholder: 搜尋文章 hits_empty: '找不到您查詢的內容:${query}' hits_stats: '共找到 ${hits} 篇文章' - + pagination: prev: 上一篇 next: 下一篇 @@ -83,7 +81,7 @@ aside: link: 連結 code: 程式碼 card_toc: 目錄 - card_post_series: 文章系列 + card_post_series: 系列文章 date_suffix: just: 剛剛 @@ -99,7 +97,7 @@ rightside: readmode_title: 閱讀模式 translate_title: 簡繁轉換 night_mode_title: 淺色和深色模式轉換 - back_to_top: 返回頂部 + back_to_top: 回到頂部 toc: 目錄 scroll_to_comment: 直達評論 setting: 設定 @@ -110,7 +108,7 @@ copy_copyright: author: 作者 link: 連結 source: 來源 - info: 著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。 + info: 著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。 Snackbar: chs_to_cht: 你已切換為繁體中文 diff --git a/layout/category.pug b/layout/category.pug index 234a0af..092be9a 100644 --- a/layout/category.pug +++ b/layout/category.pug @@ -2,10 +2,8 @@ extends includes/layout.pug block content if theme.category_ui == 'index' - include ./includes/mixins/post-ui.pug - #recent-posts.recent-posts.category_ui - +postUI - include includes/pagination.pug + include ./includes/mixins/indexPostUI.pug + +indexPostUI else include ./includes/mixins/article-sort.pug #category diff --git a/layout/includes/404.pug b/layout/includes/404.pug deleted file mode 100644 index 4a022c8..0000000 --- a/layout/includes/404.pug +++ /dev/null @@ -1,12 +0,0 @@ -- var top_img_404 = theme.error_404.background || theme.default_top_img - -#body-wrap.error404 - include ./header/index.pug - - #error-wrap - .error-content - .error-img - img(src=url_for(top_img_404) alt='Page not found') - .error-info - h1.error_title= '404' - .error_subtitle= theme.error_404.subtitle || _p('error404') diff --git a/layout/includes/additional-js.pug b/layout/includes/additional-js.pug index f37d860..785e934 100644 --- a/layout/includes/additional-js.pug +++ b/layout/includes/additional-js.pug @@ -5,9 +5,9 @@ div if theme.translate.enable script(src=url_for(theme.asset.translate)) - if theme.medium_zoom + if theme.lightbox === 'medium_zoom' script(src=url_for(theme.asset.medium_zoom)) - else if theme.fancybox + else if theme.lightbox === 'fancybox' script(src=url_for(theme.asset.fancybox)) if theme.instantpage @@ -38,7 +38,7 @@ div != partial("includes/third-party/prismjs", {}, { cache: true }) - if theme.aside.enable && theme.newest_comments.enable + if theme.aside.enable && theme.aside.card_newest_comments.enable if theme.pjax.enable != partial("includes/third-party/newest-comments/index", {}, { cache: true }) else if (!is_post() && page.aside !== false) diff --git a/layout/includes/head.pug b/layout/includes/head.pug index 364965c..56c29f0 100644 --- a/layout/includes/head.pug +++ b/layout/includes/head.pug @@ -45,7 +45,7 @@ link(rel='stylesheet', href=url_for(theme.asset.fontawesome)) if (theme.snackbar && theme.snackbar.enable) link(rel='stylesheet', href=url_for(theme.asset.snackbar_css) media="print" onload="this.media='all'") -if theme.fancybox +if theme.lightbox === 'fancybox' link(rel='stylesheet' href=url_for(theme.asset.fancybox_css) media="print" onload="this.media='all'") !=fragment_cache('injectHeadJs', function(){return inject_head_js()}) diff --git a/layout/includes/head/Open_Graph.pug b/layout/includes/head/Open_Graph.pug index 8fe04e0..abde7e6 100644 --- a/layout/includes/head/Open_Graph.pug +++ b/layout/includes/head/Open_Graph.pug @@ -10,5 +10,7 @@ if theme.Open_Graph_meta.enable - != open_graph(ogOption) else - meta(name="description" content=page_description()) + - const description = page.description || page.content || page.title || config.description + if description + meta(name="description" content=truncate(description, 150)) diff --git a/layout/includes/head/config.pug b/layout/includes/head/config.pug index c24ecc0..f47a21f 100644 --- a/layout/includes/head/config.pug +++ b/layout/includes/head/config.pug @@ -1,28 +1,30 @@ - - let algolia = 'undefined'; - let env = process.env; - if (theme.algolia_search.enable) { + let algolia = 'undefined' + if (theme.search.use === 'algolia_search') { + const { ALGOLIA_APP_ID, ALGOLIA_API_KEY, ALGOLIA_INDEX_NAME } = process.env + const { appId, applicationID, apiKey, indexName } = config.algolia algolia = JSON.stringify({ - appId: env.ALGOLIA_APP_ID || config.algolia.appId || config.algolia.applicationID, - apiKey: env.ALGOLIA_API_KEY || config.algolia.apiKey, - indexName: env.ALGOLIA_INDEX_NAME || config.algolia.indexName, - hits: theme.algolia_search.hits, + appId: ALGOLIA_APP_ID || appId || applicationID, + apiKey: ALGOLIA_API_KEY || apiKey, + indexName: ALGOLIA_INDEX_NAME || indexName, + hitsPerPage: theme.search.algolia_search.hitsPerPage, // search languages languages: { - input_placeholder: _p("search.algolia_search.input_placeholder"), + input_placeholder: theme.search.placeholder || _p("search.input_placeholder"), hits_empty: _p("search.algolia_search.hits_empty"), hits_stats: _p("search.algolia_search.hits_stats"), } }) } - let localSearch = 'undefined'; - if (theme.local_search && theme.local_search.enable) { + let localSearch = 'undefined' + if (theme.search.use === 'local_search') { + const { CDN, preload, top_n_per_article, unescape } = theme.search.local_search localSearch = JSON.stringify({ - path: theme.local_search.CDN ? theme.local_search.CDN : config.root + config.search.path, - preload: theme.local_search.preload, - top_n_per_article: theme.local_search.top_n_per_article, - unescape: theme.local_search.unescape, + path: CDN || config.root + config.search.path, + preload, + top_n_per_article, + unescape, languages: { // search languages hits_empty: _p("search.local_search.hits_empty"), @@ -31,7 +33,7 @@ }) } - let translate = 'undefined'; + let translate = 'undefined' if (theme.translate && theme.translate.enable){ translate = JSON.stringify({ defaultEncoding: theme.translate.defaultEncoding, @@ -41,7 +43,7 @@ }) } - let copyright = 'undefined'; + let copyright = 'undefined' if (theme.copy.enable && theme.copy.copyright.enable){ copyright = JSON.stringify({ limitCount: theme.copy.copyright.limit_count, @@ -54,7 +56,7 @@ }) } - let Snackbar = 'undefined'; + let Snackbar = 'undefined' if (theme.snackbar && theme.snackbar.enable) { Snackbar = JSON.stringify({ chs_to_cht: _p("Snackbar.chs_to_cht"), @@ -67,7 +69,7 @@ }) } - let noticeOutdate = 'undefined'; + let noticeOutdate = 'undefined' if (theme.noticeOutdate && theme.noticeOutdate.enable) { noticeOutdate = JSON.stringify({ limitDay: theme.noticeOutdate.limit_day, @@ -77,17 +79,18 @@ }) } - let highlight = 'undefined'; - let syntaxHighlighter = config.syntax_highlighter; - let highlightEnable = syntaxHighlighter ? ['highlight.js', 'prismjs'].includes(syntaxHighlighter) : (config.highlight.enable || config.prismjs.enable); + let highlight = 'undefined' + let syntaxHighlighter = config.syntax_highlighter + let highlightEnable = syntaxHighlighter ? ['highlight.js', 'prismjs'].includes(syntaxHighlighter) : (config.highlight.enable || config.prismjs.enable) if (highlightEnable) { + const { copy, language, height_limit, fullpage, macStyle } = theme.code_blocks highlight = JSON.stringify({ plugin: syntaxHighlighter ? syntaxHighlighter : config.highlight.enable ? 'highlight.js' : 'prismjs', - highlightCopy: theme.highlight_copy, - highlightLang: theme.highlight_lang, - highlightHeightLimit: theme.highlight_height_limit, - highlightFullpage: theme.highlight_fullpage, - highlightMacStyle: theme.highlight_theme_macStyle + highlightCopy: copy, + highlightLang: language, + highlightHeightLimit: height_limit, + highlightFullpage: fullpage, + highlightMacStyle: macStyle }) } @@ -108,7 +111,7 @@ script. homepage: !{theme.post_meta.page.date_format === 'relative'}, post: !{theme.post_meta.post.date_format === 'relative'} }, - runtime: '!{theme.runtimeshow.enable ? _p("aside.card_webinfo.runtime.unit") : ""}', + runtime: '!{theme.aside.card_webinfo.runtime_date ? _p("aside.card_webinfo.runtime.unit") : ""}', dateSuffix: { just: '!{_p("date_suffix.just")}', min: '!{_p("date_suffix.min")}', @@ -117,7 +120,7 @@ script. month: '!{_p("date_suffix.month")}' }, copyright: !{copyright}, - lightbox: '!{ theme.medium_zoom ? "mediumZoom" : (theme.fancybox ? "fancybox" : "null" )}', + lightbox: '!{ theme.lightbox || 'null' }', Snackbar: !{Snackbar}, infinitegrid: { js: '!{url_for(theme.asset.egjs_infinitegrid)}', diff --git a/layout/includes/head/config_site.pug b/layout/includes/head/config_site.pug index 94cbb51..f457549 100644 --- a/layout/includes/head/config_site.pug +++ b/layout/includes/head/config_site.pug @@ -2,20 +2,17 @@ const titleVal = pageTitle.replace(/'/ig,"\\'") let isHighlightShrink - if (theme.highlight_shrink == 'none') isHighlightShrink = 'undefined' - else if (page.highlight_shrink === true || page.highlight_shrink === false) isHighlightShrink = page.highlight_shrink - else isHighlightShrink = theme.highlight_shrink + if (theme.code_blocks.shrink == 'none') isHighlightShrink = 'undefined' + else if (typeof page.highlight_shrink == 'boolean') isHighlightShrink = page.highlight_shrink + else isHighlightShrink = theme.code_blocks.shrink var showToc = false if (theme.aside.enable && page.aside !== false) { let tocEnable = false - if (is_post()) { - if (theme.toc.post) tocEnable = true - } else if (is_page()) { - if (theme.toc.page) tocEnable = true - } - const pageToc = page.toc === true || page.toc === false ? page.toc : tocEnable - showToc = pageToc && (toc(page.content) !== '' || page.encrypt == true ) + if (is_post() && theme.toc.post) tocEnable = true + else if (is_page() && theme.toc.page) tocEnable = true + const pageToc = typeof page.toc === 'boolean' ? page.toc : tocEnable + showToc = pageToc && (toc(page.content) !== '' || page.encrypt === true) } - diff --git a/layout/includes/header/index.pug b/layout/includes/header/index.pug index 33e01db..b72d14a 100644 --- a/layout/includes/header/index.pug +++ b/layout/includes/header/index.pug @@ -4,7 +4,7 @@ if !theme.disable_top_img && page.top_img !== false else if is_page() - var top_img = page.top_img || theme.default_top_img else if is_tag() - - var top_img = theme.tag_per_img && theme.tag_per_img[page.tag] + - var top_img = theme.tag_per_img && theme.tag_per_img[page.tag] - top_img = top_img ? top_img : (theme.tag_img !== false ? theme.tag_img || theme.default_top_img : false) else if is_category() - var top_img = theme.category_per_img && theme.category_per_img[page.category] diff --git a/layout/includes/header/nav.pug b/layout/includes/header/nav.pug index cf50db3..3ef226e 100644 --- a/layout/includes/header/nav.pug +++ b/layout/includes/header/nav.pug @@ -5,17 +5,18 @@ nav#nav img.site-icon(src=url_for(theme.nav.logo) alt='Logo') if theme.nav.display_title span.site-name=config.title - + #menus - if (theme.algolia_search.enable || theme.local_search.enable || theme.docsearch.enable) + if (theme.search.use) #search-button span.site-page.social-icon.search i.fas.fa-search.fa-fw span=' '+_p('search.title') - !=partial('includes/header/menu_item', {}, {cache: true}) + if theme.menu + !=partial('includes/header/menu_item', {}, {cache: true}) - #toggle-menu - span.site-page - i.fas.fa-bars.fa-fw + #toggle-menu + span.site-page + i.fas.fa-bars.fa-fw diff --git a/layout/includes/layout.pug b/layout/includes/layout.pug index dde47c5..b240726 100644 --- a/layout/includes/layout.pug +++ b/layout/includes/layout.pug @@ -2,6 +2,7 @@ - page.aside = is_archive() ? theme.aside.display.archive: is_category() ? theme.aside.display.category : is_tag() ? theme.aside.display.tag : page.aside - var hideAside = !theme.aside.enable || page.aside === false ? 'hide-aside' : '' - var pageType = is_post() ? 'post' : 'page' +- pageType = page.type ? pageType + ' type-' + page.type : pageType doctype html html(lang=config.language data-theme=theme.display_mode class=htmlClassHideAside) @@ -16,32 +17,28 @@ html(lang=config.language data-theme=theme.display_mode class=htmlClassHideAside !=partial('includes/sidebar', {}, {cache: true}) - if page.type !== '404' - #body-wrap(class=pageType) - include ./header/index.pug + #body-wrap(class=pageType) + include ./header/index.pug - main#content-inner.layout(class=hideAside) - if body - div!= body - else - block content - if theme.aside.enable && page.aside !== false - include widget/index.pug - - - var footerBg = theme.footer_bg - if (footerBg) - if (footerBg === true) - - var footer_bg = bg_img - else - - var footer_bg = isImgOrUrl(theme.footer_bg) ? `background-image: url('${url_for(footerBg)}')` : `background: ${footerBg}` + main#content-inner.layout(class=hideAside) + if body + div!= body else - - var footer_bg = '' - - footer#footer(style=footer_bg) - !=partial('includes/footer', {}, {cache: true}) + block content + if theme.aside.enable && page.aside !== false + include widget/index.pug + + - var footerBg = theme.footer_img + if (footerBg) + if (footerBg === true) + - var footer_bg = bg_img + else + - var footer_bg = isImgOrUrl(theme.footer_bg) ? `background-image: url('${url_for(footerBg)}')` : `background: ${footerBg}` + else + - var footer_bg = '' - else - include ./404.pug + footer#footer(style=footer_bg) + !=partial('includes/footer', {}, {cache: true}) include ./rightside.pug include ./additional-js.pug \ No newline at end of file diff --git a/layout/includes/mixins/indexPostUI.pug b/layout/includes/mixins/indexPostUI.pug new file mode 100644 index 0000000..fcdad2e --- /dev/null +++ b/layout/includes/mixins/indexPostUI.pug @@ -0,0 +1,125 @@ +mixin indexPostUI() + - let indexLayout = theme.index_layout + - let masonryLayoutClass = (indexLayout === 6 || indexLayout === 7) ? 'masonry' : '' + #recent-posts.recent-posts.nc(class=masonryLayoutClass) + .recent-post-items + each article , index in page.posts.data + .recent-post-item + - + let link = article.link || article.path + let title = article.title || _p('no_title') + let leftOrRight = indexLayout === 3 + ? index%2 == 0 ? 'left' : 'right' + : indexLayout === 2 ? 'right' : '' + let post_cover = article.cover + let no_cover = article.cover === false || !theme.cover.index_enable ? 'no-cover' : '' + - + if post_cover && theme.cover.index_enable + .post_cover(class=leftOrRight) + a(href=url_for(link) title=title) + if article.cover_type === 'img' + img.post-bg(src=url_for(post_cover) onerror=`this.onerror=null;this.src='${url_for(theme.error_img.post_page)}'` alt=title) + else + div.post-bg(style=`background: ${post_cover}`) + .recent-post-info(class=no_cover) + a.article-title(href=url_for(link) title=title) + if (is_home() && (article.top || article.sticky > 0)) + i.fas.fa-thumbtack.sticky + = title + .article-meta-wrap + if (theme.post_meta.page.date_type) + span.post-meta-date + if (theme.post_meta.page.date_type === 'both') + i.far.fa-calendar-alt + span.article-meta-label=_p('post.created') + time.post-meta-date-created(datetime=date_xml(article.date) title=_p('post.created') + ' ' + full_date(article.date))=date(article.date, config.date_format) + span.article-meta-separator | + i.fas.fa-history + span.article-meta-label=_p('post.updated') + time.post-meta-date-updated(datetime=date_xml(article.updated) title=_p('post.updated') + ' ' + full_date(article.updated))=date(article.updated, config.date_format) + else + - let data_type_updated = theme.post_meta.page.date_type === 'updated' + - let date_type = data_type_updated ? 'updated' : 'date' + - let date_icon = data_type_updated ? 'fas fa-history' :'far fa-calendar-alt' + - let date_title = data_type_updated ? _p('post.updated') : _p('post.created') + i(class=date_icon) + span.article-meta-label=date_title + time(datetime=date_xml(article[date_type]) title=date_title + ' ' + full_date(article[date_type]))=date(article[date_type], config.date_format) + if (theme.post_meta.page.categories && article.categories.data.length > 0) + span.article-meta + span.article-meta-separator | + each item, index in article.categories.data + i.fas.fa-inbox + a(href=url_for(item.path)).article-meta__categories #[=item.name] + if (index < article.categories.data.length - 1) + i.fas.fa-angle-right.article-meta-link + if (theme.post_meta.page.tags && article.tags.length > 0) + span.article-meta.tags + span.article-meta-separator | + each item, index in article.tags.data + i.fas.fa-tag + a(href=url_for(item.path)).article-meta__tags #[=item.name] + if (index < article.tags.data.length - 1) + span.article-meta-link #[='•'] + + mixin countBlockInIndex + - needLoadCountJs = true + span.article-meta + span.article-meta-separator | + i.fas.fa-comments + if block + block + span.article-meta-label= ' ' + _p('card_post_count') + + if theme.comments.card_post_count && theme.comments.use + case theme.comments.use[0] + when 'Disqus' + when 'Disqusjs' + +countBlockInIndex + a.disqus-count(href=full_url_for(link) + '#post-comment') + i.fa-solid.fa-spinner.fa-spin + when 'Valine' + +countBlockInIndex + a(href=url_for(link) + '#post-comment') + span.valine-comment-count(data-xid=url_for(link)) + i.fa-solid.fa-spinner.fa-spin + when 'Waline' + +countBlockInIndex + a(href=url_for(link) + '#post-comment') + span.waline-comment-count(data-path=url_for(link)) + i.fa-solid.fa-spinner.fa-spin + when 'Twikoo' + +countBlockInIndex + a.twikoo-count(href=url_for(link) + '#post-comment') + i.fa-solid.fa-spinner.fa-spin + when 'Facebook Comments' + +countBlockInIndex + a(href=url_for(link) + '#post-comment') + span.fb-comments-count(data-href=urlNoIndex(article.permalink)) + when 'Remark42' + +countBlockInIndex + a(href=url_for(link) + '#post-comment') + span.remark42__counter(data-url=urlNoIndex(article.permalink)) + i.fa-solid.fa-spinner.fa-spin + when 'Artalk' + +countBlockInIndex + a(href=url_for(link) + '#post-comment') + span.artalk-count(data-page-key=url_for(link)) + i.fa-solid.fa-spinner.fa-spin + + //- Display the article introduction on homepage + case theme.index_post_content.method + when false + - break + when 1 + .content!= article.description + when 2 + .content!= article.description || truncate(article.content, theme.index_post_content.length) + default + .content!= truncate(article.content, theme.index_post_content.length) + + if theme.ad && theme.ad.index + if (index + 1) % 3 == 0 + .recent-post-item.ads-wrap!=theme.ad.index + + include ../pagination.pug \ No newline at end of file diff --git a/layout/includes/mixins/post-ui.pug b/layout/includes/mixins/post-ui.pug deleted file mode 100644 index bd545e4..0000000 --- a/layout/includes/mixins/post-ui.pug +++ /dev/null @@ -1,129 +0,0 @@ -mixin postUI(posts) - each article , index in page.posts.data - .recent-post-item - - - let link = article.link || article.path - let title = article.title || _p('no_title') - const position = theme.cover.position - let leftOrRight = position === 'both' - ? index%2 == 0 ? 'left' : 'right' - : position === 'left' ? 'left' : 'right' - let post_cover = article.cover - let no_cover = article.cover === false || !theme.cover.index_enable ? 'no-cover' : '' - - - if post_cover && theme.cover.index_enable - .post_cover(class=leftOrRight) - a(href=url_for(link) title=title) - if article.cover_type === 'img' - img.post-bg(src=url_for(post_cover) onerror=`this.onerror=null;this.src='${url_for(theme.error_img.post_page)}'` alt=title) - else - div.post-bg(style=`background: ${post_cover}`) - .recent-post-info(class=no_cover) - a.article-title(href=url_for(link) title=title) - if (is_home() && (article.top || article.sticky > 0)) - i.fas.fa-thumbtack.sticky - = title - .article-meta-wrap - if (theme.post_meta.page.date_type) - span.post-meta-date - if (theme.post_meta.page.date_type === 'both') - i.far.fa-calendar-alt - span.article-meta-label=_p('post.created') - time.post-meta-date-created(datetime=date_xml(article.date) title=_p('post.created') + ' ' + full_date(article.date))=date(article.date, config.date_format) - span.article-meta-separator | - i.fas.fa-history - span.article-meta-label=_p('post.updated') - time.post-meta-date-updated(datetime=date_xml(article.updated) title=_p('post.updated') + ' ' + full_date(article.updated))=date(article.updated, config.date_format) - else - - let data_type_updated = theme.post_meta.page.date_type === 'updated' - - let date_type = data_type_updated ? 'updated' : 'date' - - let date_icon = data_type_updated ? 'fas fa-history' :'far fa-calendar-alt' - - let date_title = data_type_updated ? _p('post.updated') : _p('post.created') - i(class=date_icon) - span.article-meta-label=date_title - time(datetime=date_xml(article[date_type]) title=date_title + ' ' + full_date(article[date_type]))=date(article[date_type], config.date_format) - if (theme.post_meta.page.categories && article.categories.data.length > 0) - span.article-meta - span.article-meta-separator | - each item, index in article.categories.data - i.fas.fa-inbox - a(href=url_for(item.path)).article-meta__categories #[=item.name] - if (index < article.categories.data.length - 1) - i.fas.fa-angle-right.article-meta-link - if (theme.post_meta.page.tags && article.tags.data.length > 0) - span.article-meta.tags - span.article-meta-separator | - each item, index in article.tags.data - i.fas.fa-tag - a(href=url_for(item.path)).article-meta__tags #[=item.name] - if (index < article.tags.data.length - 1) - span.article-meta-link #[='•'] - - mixin countBlockInIndex - - needLoadCountJs = true - span.article-meta - span.article-meta-separator | - i.fas.fa-comments - if block - block - span.article-meta-label= ' ' + _p('card_post_count') - - if theme.comments.card_post_count && theme.comments.use - case theme.comments.use[0] - when 'Disqus' - when 'Disqusjs' - +countBlockInIndex - a.disqus-count(href=full_url_for(link) + '#post-comment') - i.fa-solid.fa-spinner.fa-spin - when 'Valine' - +countBlockInIndex - a(href=url_for(link) + '#post-comment') - span.valine-comment-count(data-xid=url_for(link)) - i.fa-solid.fa-spinner.fa-spin - when 'Waline' - +countBlockInIndex - a(href=url_for(link) + '#post-comment') - span.waline-comment-count(data-path=url_for(link)) - i.fa-solid.fa-spinner.fa-spin - when 'Twikoo' - +countBlockInIndex - a.twikoo-count(href=url_for(link) + '#post-comment') - i.fa-solid.fa-spinner.fa-spin - when 'Facebook Comments' - +countBlockInIndex - a(href=url_for(link) + '#post-comment') - span.fb-comments-count(data-href=urlNoIndex(article.permalink)) - when 'Remark42' - +countBlockInIndex - a(href=url_for(link) + '#post-comment') - span.remark42__counter(data-url=urlNoIndex(article.permalink)) - i.fa-solid.fa-spinner.fa-spin - when 'Artalk' - +countBlockInIndex - a(href=url_for(link) + '#post-comment') - span.artalk-count(data-page-key=url_for(link)) - i.fa-solid.fa-spinner.fa-spin - - //- Display the article introduction on homepage - case theme.index_post_content.method - when false - - break - when 1 - .content!= article.description - when 2 - if article.description - .content!= article.description - else - - const content = strip_html(article.content) - - let expert = content.substring(0, theme.index_post_content.length) - - content.length > theme.index_post_content.length ? expert += ' ...' : '' - .content!= expert - default - - const content = strip_html(article.content) - - let expert = content.substring(0, theme.index_post_content.length) - - content.length > theme.index_post_content.length ? expert += ' ...' : '' - .content!= expert - - if theme.ad && theme.ad.index - if (index + 1) % 3 == 0 - .recent-post-item.ads-wrap!=theme.ad.index diff --git a/layout/includes/page/404.pug b/layout/includes/page/404.pug new file mode 100644 index 0000000..9444204 --- /dev/null +++ b/layout/includes/page/404.pug @@ -0,0 +1,8 @@ +- var top_img_404 = theme.error_404.background || theme.default_top_img + +.error-content + .error-img + img(src=url_for(top_img_404) alt='Page not found') + .error-info + h1.error_title= '404' + .error_subtitle= theme.error_404.subtitle || _p('error404') diff --git a/layout/includes/page/shuoshuo.pug b/layout/includes/page/shuoshuo.pug new file mode 100644 index 0000000..745b048 --- /dev/null +++ b/layout/includes/page/shuoshuo.pug @@ -0,0 +1,103 @@ +//- - author: +//- avatar: +//- date: +//- content: +//- tags: +//- - tag1 +//- - tag2 + + +- page.comments = false +- page.toc = false +#article-container + if page.shuoshuo_url + script. + (() => { + const loadShuoshuo = async () => { + try { + const fetchContent = await fetch('!{url_for(page.shuoshuo_url)}') + const shuoshuo = await fetchContent.json() + + let start = 0 + const container = document.getElementById('article-container') + + const addData = data => { + const cLength = data.length + const end = start + 10 > cLength ? cLength : start + 10 + let result = '' + data.slice(start, end).forEach((item) => { + result += ` +
+
+
+ +
+
+
${item.author || '!{config.author}'}
+
${btf.diffDate(item.date, true)}
+
+
+
+ ${item.content} +
+ +
+ ` + }) + + start = end + container.insertAdjacentHTML('beforeend', result) + + if (start >= cLength) { + observer.disconnect() + } else { + setTimeout(() => observer.observe(container.lastElementChild), 100) + } + + window.lazyLoadInstance.update() + btf.loadLightbox(document.querySelectorAll('#article-container img:not(.no-lightbox)')) + } + + addData(shuoshuo) + + const observer = new IntersectionObserver((entries) => { + if (entries[0].isIntersecting) { + observer.unobserve(entries[0].target) + addData(shuoshuo) + } + }, { + root: null, + rootMargin: '0px', + threshold: 1.0 + }) + + if (container.lastElementChild) { + observer.observe(container.lastElementChild) + } + } catch (e) { + console.error(e) + } + } + + window.pjax ? loadShuoshuo() : window.addEventListener('load', loadShuoshuo) + })() + else + if site.data.shuoshuo + each i in site.data.shuoshuo + .shuoshuo-item + .shuoshuo-item-header + .shuoshuo-avatar + img.no-lightbox(src=i.avatar || url_for(theme.avatar.img)) + .shuoshuo-info + .shuoshuo-author=i.author || config.author + .shuoshuo-date=relative_date(i.date) + .shuoshuo-content + !=markdown(i.content) + .shuoshuo-footer + .shuoshuo-tags + each tag in i.tags + span.shuoshuo-tag=tag \ No newline at end of file diff --git a/layout/includes/page/tags.pug b/layout/includes/page/tags.pug index ed7d22c..b579112 100644 --- a/layout/includes/page/tags.pug +++ b/layout/includes/page/tags.pug @@ -1,2 +1,2 @@ .tag-cloud-list.is-center - !=cloudTags({source: site.tags, orderby: page.orderby || 'random', order: page.order || 1, minfontsize: 1.2, maxfontsize: 2.1, limit: 0, unit: 'em'}) \ No newline at end of file + !=cloudTags({source: site.tags, orderby: page.orderby || 'random', order: page.order || 1, minfontsize: 1.2, maxfontsize: 1.5, limit: 0, unit: 'em'}) \ No newline at end of file diff --git a/layout/includes/pagination.pug b/layout/includes/pagination.pug index 2af0e00..7cbe946 100644 --- a/layout/includes/pagination.pug +++ b/layout/includes/pagination.pug @@ -12,27 +12,25 @@ if is_post() nav#pagination.pagination-post if(prev) - var hasPageNext = next ? 'pull-left' : 'pull-full' - .prev-post(class=hasPageNext) - a(href=url_for(prev.path) title=prev.title) - if prev.cover_type === 'img' - img.cover(src=url_for(prev.cover) onerror=`onerror=null;src='${url_for(theme.error_img.post_page)}'` alt='cover of previous post') - else - .cover(style=`background: ${prev.cover || 'var(--default-bg-color)'}`) - .pagination-info - .label=_p('pagination.prev') - .prev_info=prev.title + a.prev-post(class=hasPageNext href=url_for(prev.path) title=prev.title) + if prev.cover_type === 'img' + img.cover(src=url_for(prev.cover) onerror=`onerror=null;src='${url_for(theme.error_img.post_page)}'` alt='cover of previous post') + else + .cover(style=`background: ${prev.cover || 'var(--default-bg-color)'}`) + .pagination-info + .label=_p('pagination.prev') + .prev_info=prev.title if(next) - var hasPagePrev = prev ? 'pull-right' : 'pull-full' - .next-post(class=hasPagePrev) - a(href=url_for(next.path) title=next.title) - if next.cover_type === 'img' - img.cover(src=url_for(next.cover) onerror=`onerror=null;src='${url_for(theme.error_img.post_page)}'` alt='cover of next post') - else - .cover(style=`background: ${next.cover || 'var(--default-bg-color)'}`) - .pagination-info - .label=_p('pagination.next') - .next_info=next.title + a.next-post(class=hasPagePrev href=url_for(next.path) title=next.title) + if next.cover_type === 'img' + img.cover(src=url_for(next.cover) onerror=`onerror=null;src='${url_for(theme.error_img.post_page)}'` alt='cover of next post') + else + .cover(style=`background: ${next.cover || 'var(--default-bg-color)'}`) + .pagination-info + .label=_p('pagination.next') + .next_info=next.title else nav#pagination .pagination diff --git a/layout/includes/rightside.pug b/layout/includes/rightside.pug index 377813d..01c8021 100644 --- a/layout/includes/rightside.pug +++ b/layout/includes/rightside.pug @@ -1,4 +1,4 @@ -- const { readmode, translate, darkmode, aside, chat_btn } = theme +- const { readmode, translate, darkmode, aside, chat } = theme mixin rightsideItem(array) each item in array case item @@ -22,9 +22,9 @@ mixin rightsideItem(array) button#mobile-toc-button.close(type="button" title=_p("rightside.toc")) i.fas.fa-list-ul when 'chat' - if chat_btn + if chat.rightside_button && chat.use button#chat-btn(type="button" title=_p("rightside.chat")) - i.fas.fa-sms + i.fas.fa-message when 'comment' if commentsJsLoad a#to_comment(href="#post-comment" title=_p("rightside.scroll_to_comment")) diff --git a/layout/includes/sidebar.pug b/layout/includes/sidebar.pug index 66c67a9..c4aefff 100644 --- a/layout/includes/sidebar.pug +++ b/layout/includes/sidebar.pug @@ -1,18 +1,18 @@ -#sidebar - #menu-mask - #sidebar-menus - .avatar-img.is-center - img(src=url_for(theme.avatar.img) onerror=`onerror=null;src='${theme.error_img.flink}'` alt="avatar") - .sidebar-site-data.site-data.is-center - a(href=url_for(config.archive_dir) + '/') - .headline= _p('aside.articles') - .length-num= site.posts.length - a(href=url_for(config.tag_dir) + '/' ) - .headline= _p('aside.tags') - .length-num= site.tags.length - a(href=url_for(config.category_dir) + '/') - .headline= _p('aside.categories') - .length-num= site.categories.length +if theme.menu + #sidebar + #menu-mask + #sidebar-menus + .avatar-img.is-center + img(src=url_for(theme.avatar.img) onerror=`onerror=null;src='${theme.error_img.flink}'` alt="avatar") + .site-data.is-center + a(href=url_for(config.archive_dir) + '/') + .headline= _p('aside.articles') + .length-num= site.posts.length + a(href=url_for(config.tag_dir) + '/' ) + .headline= _p('aside.tags') + .length-num= site.tags.length + a(href=url_for(config.category_dir) + '/') + .headline= _p('aside.categories') + .length-num= site.categories.length - hr.custom-hr - !=partial('includes/header/menu_item', {}, {cache: true}) + !=partial('includes/header/menu_item', {}, {cache: true}) diff --git a/layout/includes/third-party/aplayer.pug b/layout/includes/third-party/aplayer.pug index e049ea0..cf875b6 100644 --- a/layout/includes/third-party/aplayer.pug +++ b/layout/includes/third-party/aplayer.pug @@ -14,10 +14,10 @@ if theme.pjax.enable } } - const loadMeting = () => { + const runMetingJS = () => { typeof loadMeting === 'function' && document.getElementsByClassName('aplayer').length && loadMeting() } btf.addGlobalFn('pjaxSend', destroyAplayer, 'destroyAplayer') - btf.addGlobalFn('pjaxComplete', loadMeting, 'loadMeting') + btf.addGlobalFn('pjaxComplete', loadMeting, 'runMetingJS') })() diff --git a/layout/includes/third-party/card-post-count/fb.pug b/layout/includes/third-party/card-post-count/fb.pug index 75d6b4a..fb504d3 100644 --- a/layout/includes/third-party/card-post-count/fb.pug +++ b/layout/includes/third-party/card-post-count/fb.pug @@ -1,5 +1,5 @@ - const fbSDKVer = 'v16.0' -- const fbSDK = theme.messenger.enable ? `https://connect.facebook.net/${theme.facebook_comments.lang}/sdk/xfbml.customerchat.js#xfbml=1&version=${fbSDKVer}` : `https://connect.facebook.net/${theme.facebook_comments.lang}/sdk.js#xfbml=1&version=${fbSDKVer}` +- const fbSDK = theme.chat.use === 'messenger' ? `https://connect.facebook.net/${theme.facebook_comments.lang}/sdk/xfbml.customerchat.js#xfbml=1&version=${fbSDKVer}` : `https://connect.facebook.net/${theme.facebook_comments.lang}/sdk.js#xfbml=1&version=${fbSDKVer}` script. (()=>{ diff --git a/layout/includes/third-party/chat/chatra.pug b/layout/includes/third-party/chat/chatra.pug index 5cc7b5a..928ac19 100644 --- a/layout/includes/third-party/chat/chatra.pug +++ b/layout/includes/third-party/chat/chatra.pug @@ -1,8 +1,8 @@ //- https://chatra.io/help/api/ script. (() => { - const isChatBtn = !{theme.chat_btn} - const isChatHideShow = !{theme.chat_hide_show} + const isChatBtn = !{theme.chat.rightside_button} + const isChatHideShow = !{theme.chat.button_hide_show} if (isChatBtn) { const close = () => { diff --git a/layout/includes/third-party/chat/crisp.pug b/layout/includes/third-party/chat/crisp.pug index 6c8b6bf..24c8c1c 100644 --- a/layout/includes/third-party/chat/crisp.pug +++ b/layout/includes/third-party/chat/crisp.pug @@ -11,8 +11,8 @@ script. })(); $crisp.push(["safe", true]) - const isChatBtn = !{theme.chat_btn} - const isChatHideShow = !{theme.chat_hide_show} + const isChatBtn = !{theme.chat.rightside_button} + const isChatHideShow = !{theme.chat.button_hide_show} if (isChatBtn) { const open = () => { diff --git a/layout/includes/third-party/chat/daovoice.pug b/layout/includes/third-party/chat/daovoice.pug index 5a7c33d..41ccfeb 100644 --- a/layout/includes/third-party/chat/daovoice.pug +++ b/layout/includes/third-party/chat/daovoice.pug @@ -3,8 +3,8 @@ script. (() => { (function(i,s,o,g,r,a,m){i["DaoVoiceObject"]=r;i[r]=i[r]||function(){(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;a.charset="utf-8";m.parentNode.insertBefore(a,m)})(window,document,"script",('https:' == document.location.protocol ? 'https:' : 'http:') + "//widget.daovoice.io/widget/!{theme.daovoice.app_id}.js","daovoice") - const isChatBtn = !{theme.chat_btn} - const isChatHideShow = !{theme.chat_hide_show} + const isChatBtn = !{theme.chat.rightside_button} + const isChatHideShow = !{theme.chat.button_hide_show} daovoice('init', { app_id: '!{theme.daovoice.app_id}',},{ diff --git a/layout/includes/third-party/chat/index.pug b/layout/includes/third-party/chat/index.pug index 4b6bda6..6fa1131 100644 --- a/layout/includes/third-party/chat/index.pug +++ b/layout/includes/third-party/chat/index.pug @@ -1,10 +1,11 @@ -if theme.chatra && theme.chatra.enable - include ./chatra.pug -else if theme.tidio && theme.tidio.enable - include ./tidio.pug -else if theme.daovoice && theme.daovoice.enable - include ./daovoice.pug -else if theme.crisp && theme.crisp.enable - include ./crisp.pug -else if theme.messenger && theme.messenger.enable - include ./messenger.pug \ No newline at end of file +case theme.chat.use + when 'chatra' + include ./chatra.pug + when 'tidio' + include ./tidio.pug + when 'daovoice' + include ./daovoice.pug + when 'crisp' + include ./crisp.pug + when 'messenger' + include ./messenger.pug \ No newline at end of file diff --git a/layout/includes/third-party/chat/messenger.pug b/layout/includes/third-party/chat/messenger.pug index 3d244fc..41eef4a 100644 --- a/layout/includes/third-party/chat/messenger.pug +++ b/layout/includes/third-party/chat/messenger.pug @@ -22,8 +22,8 @@ script. fjs.parentNode.insertBefore(js, fjs); }(document, 'script', 'facebook-jssdk')); - const isChatBtn = !{theme.chat_btn} - const isChatHideShow = !{theme.chat_hide_show} + const isChatBtn = !{theme.chat.rightside_button} + const isChatHideShow = !{theme.chat.button_hide_show} if (isChatBtn) { window.chatBtnFn = () => { diff --git a/layout/includes/third-party/chat/tidio.pug b/layout/includes/third-party/chat/tidio.pug index 20104f5..a4194c4 100644 --- a/layout/includes/third-party/chat/tidio.pug +++ b/layout/includes/third-party/chat/tidio.pug @@ -1,8 +1,8 @@ script(src=`//code.tidio.co/${theme.tidio.public_key}.js` async) script. (() => { - const isChatBtn = !{theme.chat_btn} - const isChatHideShow = !{theme.chat_hide_show} + const isChatBtn = !{theme.chat.rightside_button} + const isChatHideShow = !{theme.chat.button_hide_show} if (isChatBtn) { let isShow = false diff --git a/layout/includes/third-party/comments/artalk.pug b/layout/includes/third-party/comments/artalk.pug index aadfabc..646a424 100644 --- a/layout/includes/third-party/comments/artalk.pug +++ b/layout/includes/third-party/comments/artalk.pug @@ -25,7 +25,7 @@ script. artalkItem.destroy() } - btf.addGlobalFn('pjax', destroyArtalk, 'destroyArtalk') + btf.addGlobalFn('pjaxSendOnce', destroyArtalk, 'destroyArtalk') } const loadArtalk = async () => { diff --git a/layout/includes/third-party/comments/facebook_comments.pug b/layout/includes/third-party/comments/facebook_comments.pug index f0cc916..b6617ec 100644 --- a/layout/includes/third-party/comments/facebook_comments.pug +++ b/layout/includes/third-party/comments/facebook_comments.pug @@ -1,5 +1,5 @@ - const fbSDKVer = 'v16.0' -- const fbSDK = theme.messenger.enable ? `https://connect.facebook.net/${theme.facebook_comments.lang}/sdk/xfbml.customerchat.js#xfbml=1&version=${fbSDKVer}` : `https://connect.facebook.net/${theme.facebook_comments.lang}/sdk.js#xfbml=1&version=${fbSDKVer}` +- const fbSDK = theme.chat.use === 'messenger' ? `https://connect.facebook.net/${theme.facebook_comments.lang}/sdk/xfbml.customerchat.js#xfbml=1&version=${fbSDKVer}` : `https://connect.facebook.net/${theme.facebook_comments.lang}/sdk.js#xfbml=1&version=${fbSDKVer}` script. (()=>{ diff --git a/layout/includes/third-party/comments/giscus.pug b/layout/includes/third-party/comments/giscus.pug index 3e1b518..b55a4ec 100644 --- a/layout/includes/third-party/comments/giscus.pug +++ b/layout/includes/third-party/comments/giscus.pug @@ -1,13 +1,11 @@ -- const { repo, repo_id, category_id, theme:themes, option } = theme.giscus -- const giscusUrl = theme.asset.giscus || 'https://giscus.app/client.js' -- const giscusOriginUrl = new URL(giscusUrl).origin - const { use, lazyload } = theme.comments +- const { repo, repo_id, category_id, light_theme, dark_theme, js, option } = theme.giscus +- const giscusUrl = js || 'https://giscus.app/client.js' +- const giscusOriginUrl = new URL(giscusUrl).origin script. (()=>{ - const getGiscusTheme = theme => { - return theme === 'dark' ? '!{themes.dark}' : '!{themes.light}' - } + const getGiscusTheme = theme => theme === 'dark' ? '!{dark_theme}' : '!{light_theme}' const loadGiscus = () => { const config = Object.assign({ @@ -30,17 +28,17 @@ script. } const changeGiscusTheme = theme => { - const sendMessage = message => { - const iframe = document.querySelector('iframe.giscus-frame') - if (!iframe) return - iframe.contentWindow.postMessage({ giscus: message }, '!{giscusOriginUrl}') - } - - sendMessage({ - setConfig: { - theme: getGiscusTheme(theme) + const iframe = document.querySelector('#giscus-wrap iframe') + if (iframe) { + const message = { + giscus: { + setConfig: { + theme: getGiscusTheme(theme) + } + } } - }); + iframe.contentWindow.postMessage(message, '!{giscusOriginUrl}') + } } btf.addGlobalFn('themeChange', changeGiscusTheme, 'giscus') diff --git a/layout/includes/third-party/comments/utterances.pug b/layout/includes/third-party/comments/utterances.pug index 0ca01e7..1fdc0da 100644 --- a/layout/includes/third-party/comments/utterances.pug +++ b/layout/includes/third-party/comments/utterances.pug @@ -1,34 +1,42 @@ - const { use, lazyload } = theme.comments -- const { repo, issue_term, light_theme, dark_theme } = theme.utterances +- const { repo, issue_term, light_theme, dark_theme, js, option } = theme.utterances +- const utterancesUrl = js || 'https://utteranc.es/client.js' +- const utterancesOriginUrl = new URL(utterancesUrl).origin script. (() => { + const getUtterancesTheme = theme => theme === 'dark' ? '#{dark_theme}' : '#{light_theme}' + const loadUtterances = () => { - let ele = document.createElement('script') - ele.id = 'utterances_comment' - ele.src = 'https://utteranc.es/client.js' - ele.setAttribute('repo', '!{repo}') - ele.setAttribute('issue-term', '!{issue_term}') - const nowTheme = document.documentElement.getAttribute('data-theme') === 'dark' ? '#{dark_theme}' : '#{light_theme}' - ele.setAttribute('theme', nowTheme) - ele.crossOrigin = 'anonymous' - ele.async = true + const config = Object.assign({ + id: 'utterances_comment', + src: '!{utterancesUrl}', + repo: '!{repo}', + 'issue-term': '!{issue_term}', + theme: getUtterancesTheme(document.documentElement.getAttribute('data-theme')), + crossorigin: 'anonymous', + async: true + },!{JSON.stringify(option)}) + + const ele = document.createElement('script') + for (let key in config) { + ele.setAttribute(key, config[key]) + } document.getElementById('utterances-wrap').appendChild(ele) } - const utterancesTheme = theme => { - const iframe = document.querySelector('.utterances-frame') + const changeUtterancesTheme = theme => { + const iframe = document.querySelector('#utterances-wrap iframe') if (iframe) { - const theme = theme === 'dark' ? '#{dark_theme}' : '#{light_theme}' const message = { type: 'set-theme', - theme: theme + theme: getUtterancesTheme(theme) }; - iframe.contentWindow.postMessage(message, 'https://utteranc.es'); + iframe.contentWindow.postMessage(message, '!{utterancesOriginUrl}') } } - btf.addGlobalFn('themeChange', utterancesTheme, 'utterances') + btf.addGlobalFn('themeChange', changeUtterancesTheme, 'utterances') if ('!{use[0]}' === 'Utterances' || !!{lazyload}) { if (!{lazyload}) btf.loadComment(document.getElementById('utterances-wrap'), loadUtterances) diff --git a/layout/includes/third-party/comments/waline.pug b/layout/includes/third-party/comments/waline.pug index 0b0ce4a..47ef32f 100644 --- a/layout/includes/third-party/comments/waline.pug +++ b/layout/includes/third-party/comments/waline.pug @@ -19,7 +19,7 @@ script. waline.destroy() } - btf.addGlobalFn('pjax', destroyWaline, 'destroyWaline') + btf.addGlobalFn('pjaxSendOnce', destroyWaline, 'destroyWaline') } const loadWaline = () => { diff --git a/layout/includes/third-party/math/index.pug b/layout/includes/third-party/math/index.pug index 2b16302..cf4741d 100644 --- a/layout/includes/third-party/math/index.pug +++ b/layout/includes/third-party/math/index.pug @@ -1,18 +1,19 @@ -if theme.mathjax && theme.mathjax.enable - if theme.mathjax.per_page - if is_post() || is_page() - include ./mathjax.pug - else - if page.mathjax - include ./mathjax.pug +case theme.math.use + when 'mathjax' + if theme.math.per_page + if is_post() || is_page() + include ./mathjax.pug + else + if page.mathjax + include ./mathjax.pug -if theme.katex && theme.katex.enable - if theme.katex.per_page - if is_post() || is_page() - include ./katex.pug - else - if page.katex - include ./katex.pug + when 'katex' + if theme.math.per_page + if is_post() || is_page() + include ./katex.pug + else + if page.katex + include ./katex.pug if theme.mermaid.enable include ./mermaid.pug \ No newline at end of file diff --git a/layout/includes/third-party/math/katex.pug b/layout/includes/third-party/math/katex.pug index 4303063..c38a4b4 100644 --- a/layout/includes/third-party/math/katex.pug +++ b/layout/includes/third-party/math/katex.pug @@ -1,2 +1,16 @@ -link(rel="stylesheet" type="text/css" href=url_for(theme.asset.katex)) -script(src=url_for(theme.asset.katex_copytex)) \ No newline at end of file +script. + (async () => { + const showKatex = () => { + const mathElements = document.querySelectorAll('#article-container .katex') + mathElements.length && mathElements.forEach((el) => { + el.classList.add('katex-show') + }) + } + if (!window.katex_js_css) { + window.katex_js_css = true + await btf.getCSS('!{url_for(theme.asset.katex)}') + if (!{theme.math.katex.copy_tex}) await btf.getScript('!{url_for(theme.asset.katex_copytex)}') + } + + showKatex() + })() \ No newline at end of file diff --git a/layout/includes/third-party/math/mathjax.pug b/layout/includes/third-party/math/mathjax.pug index 0baefdc..75775b5 100644 --- a/layout/includes/third-party/math/mathjax.pug +++ b/layout/includes/third-party/math/mathjax.pug @@ -1,4 +1,5 @@ //- Mathjax 3 +- const { tags, enableMenu } = theme.math.mathjax script. (() => { const loadMathjax = () => { @@ -6,12 +7,13 @@ script. window.MathJax = { tex: { inlineMath: [['$', '$'], ['\\(', '\\)']], - tags: 'ams' + tags: '!{tags}', }, chtml: { scale: 1.1 }, options: { + enableMenu: !{enableMenu}, renderActions: { findScript: [10, doc => { for (const node of document.querySelectorAll('script[type^="math/tex"]')) { diff --git a/layout/includes/third-party/math/mermaid.pug b/layout/includes/third-party/math/mermaid.pug index f2590c6..21898c3 100644 --- a/layout/includes/third-party/math/mermaid.pug +++ b/layout/includes/third-party/math/mermaid.pug @@ -11,18 +11,12 @@ script. const mermaidDefinition = mermaidThemeConfig + mermaidSrc.textContent const renderFn = mermaid.render(mermaidID, mermaidDefinition) - - const renderV10 = () => { - renderFn.then(({svg}) => { - mermaidSrc.insertAdjacentHTML('afterend', svg) - }) - } - - const renderV9 = svg => { + const renderMermaid = svg => { mermaidSrc.insertAdjacentHTML('afterend', svg) } - typeof renderFn === 'string' ? renderV9(renderFn) : renderV10() + // mermaid v9 and v10 compatibility + typeof renderFn === 'string' ? renderMermaid(renderFn) : renderFn.then(({svg}) => renderMermaid(svg)) }) } @@ -31,9 +25,13 @@ script. if (codeMermaidEle.length === 0) return codeMermaidEle.forEach(ele => { + const preEle = document.createElement('pre') + preEle.className = 'mermaid-src' + preEle.hidden = true + preEle.textContent = ele.textContent const newEle = document.createElement('div') newEle.className = 'mermaid-wrap' - newEle.innerHTML = `` + newEle.appendChild(preEle) ele.parentNode.replaceWith(newEle) }) } diff --git a/layout/includes/third-party/newest-comments/artalk.pug b/layout/includes/third-party/newest-comments/artalk.pug index 03ad068..bec42d2 100644 --- a/layout/includes/third-party/newest-comments/artalk.pug +++ b/layout/includes/third-party/newest-comments/artalk.pug @@ -1,6 +1,6 @@ - const { server, site, option } = theme.artalk -- const avatarCdn = option !== null && option.gravatar && option.gravatar.mirror -- const avatarDefault = option !== null && option.gravatar && (option.gravatar.params || option.gravatar.default) +- const avatarCdn = (option !== null && option.gravatar && option.gravatar.mirror) || '' +- const avatarDefault = (option !== null && option.gravatar && (option.gravatar.params || option.gravatar.default)) || '' script. window.addEventListener('load', () => { @@ -25,7 +25,7 @@ script. for (let i = 0; i < array.length; i++) { result += '
' - if (!{theme.newest_comments.avatar}) { + if (!{theme.aside.card_newest_comments.avatar}) { const name = '!{theme.lazyload.enable ? "data-lazy-src" : "src"}' result += `${array[i].nick}` } @@ -60,7 +60,7 @@ script. const searchParams = new URLSearchParams({ 'site_name': '!{site}', - 'limit': '!{theme.newest_comments.limit}', + 'limit': '!{theme.aside.card_newest_comments.limit}', }) const getComment = async () => { @@ -69,8 +69,8 @@ script. const result = await res.json() const avatarStr = await getSetting() const { mirror, params, default:defaults } = avatarStr.frontend_conf.gravatar - const avatarCdn = !{avatarCdn} || mirror - let avatarDefault = !{avatarDefault} || params || defaults + const avatarCdn = '!{avatarCdn}' || mirror + let avatarDefault = '!{avatarDefault}' || params || defaults avatarDefault = avatarDefault.startsWith('d=') ? avatarDefault : `d=${avatarDefault}` const artalk = result.data.map(function (e) { return { @@ -81,7 +81,7 @@ script. 'date': e.date, } }) - btf.saveToLocal.set('artalk-newest-comments', JSON.stringify(artalk), !{theme.newest_comments.storage}/(60*24)) + btf.saveToLocal.set('artalk-newest-comments', JSON.stringify(artalk), !{theme.aside.card_newest_comments.storage}/(60*24)) generateHtml(artalk) } catch (e) { console.log(e) diff --git a/layout/includes/third-party/newest-comments/disqus-comment.pug b/layout/includes/third-party/newest-comments/disqus-comment.pug index 93feec5..e62c5f7 100644 --- a/layout/includes/third-party/newest-comments/disqus-comment.pug +++ b/layout/includes/third-party/newest-comments/disqus-comment.pug @@ -15,7 +15,7 @@ script. } const getComment = () => { - fetch('https://disqus.com/api/3.0/forums/listPosts.json?forum=!{forum}&related=thread&limit=!{theme.newest_comments.limit}&api_key=!{apiKey}') + fetch('https://disqus.com/api/3.0/forums/listPosts.json?forum=!{forum}&related=thread&limit=!{theme.aside.card_newest_comments.limit}&api_key=!{apiKey}') .then(response => response.json()) .then(data => { const disqusArray = data.response.map(item => { @@ -28,7 +28,7 @@ script. } }) - btf.saveToLocal.set('disqus-newest-comments', JSON.stringify(disqusArray), !{theme.newest_comments.storage}/(60*24)) + btf.saveToLocal.set('disqus-newest-comments', JSON.stringify(disqusArray), !{theme.aside.card_newest_comments.storage}/(60*24)) generateHtml(disqusArray) }).catch(e => { const $dom = document.querySelector('#card-newest-comments .aside-list') @@ -43,7 +43,7 @@ script. for (let i = 0; i < array.length; i++) { result += '
' - if (!{theme.newest_comments.avatar}) { + if (!{theme.aside.card_newest_comments.avatar}) { const name = '!{theme.lazyload.enable ? "data-lazy-src" : "src"}' result += `${array[i].nick}` } diff --git a/layout/includes/third-party/newest-comments/github-issues.pug b/layout/includes/third-party/newest-comments/github-issues.pug index 59f7cd7..46d9547 100644 --- a/layout/includes/third-party/newest-comments/github-issues.pug +++ b/layout/includes/third-party/newest-comments/github-issues.pug @@ -35,13 +35,13 @@ script. } }) - btf.saveToLocal.set('github-newest-comments', JSON.stringify(array), !{theme.newest_comments.storage}/(60*24)) + btf.saveToLocal.set('github-newest-comments', JSON.stringify(array), !{theme.aside.card_newest_comments.storage}/(60*24)) generateHtml(array) }); } const getComment = () => { - fetch('https://api.github.com/repos/!{userRepo}/issues/comments?sort=updated&direction=desc&per_page=!{theme.newest_comments.limit}&page=1',{ + fetch('https://api.github.com/repos/!{userRepo}/issues/comments?sort=updated&direction=desc&per_page=!{theme.aside.card_newest_comments.limit}&page=1',{ "headers": { Accept: 'application/vnd.github.v3.html+json' } @@ -72,7 +72,7 @@ script. for (let i = 0; i < array.length; i++) { result += '
' - if (!{theme.newest_comments.avatar}) { + if (!{theme.aside.card_newest_comments.avatar}) { const name = '!{theme.lazyload.enable ? "data-lazy-src" : "src"}' result += `${array[i].nick}` } diff --git a/layout/includes/third-party/newest-comments/remark42.pug b/layout/includes/third-party/newest-comments/remark42.pug index 2e2e432..680f826 100644 --- a/layout/includes/third-party/newest-comments/remark42.pug +++ b/layout/includes/third-party/newest-comments/remark42.pug @@ -23,7 +23,7 @@ script. for (let i = 0; i < array.length; i++) { result += '
' - if (!{theme.newest_comments.avatar}) { + if (!{theme.aside.card_newest_comments.avatar}) { const name = '!{theme.lazyload.enable ? "data-lazy-src" : "src"}' result += `${array[i].nick}` } @@ -44,7 +44,7 @@ script. } const getComment = () => { - fetch('!{host}/api/v1/last/!{theme.newest_comments.limit}?site=!{siteId}') + fetch('!{host}/api/v1/last/!{theme.aside.card_newest_comments.limit}?site=!{siteId}') .then(response => response.json()) .then(data => { const remark42 = data.map(function (e) { @@ -56,7 +56,7 @@ script. 'date': e.time, } }) - btf.saveToLocal.set('remark42-newest-comments', JSON.stringify(remark42), !{theme.newest_comments.storage}/(60*24)) + btf.saveToLocal.set('remark42-newest-comments', JSON.stringify(remark42), !{theme.aside.card_newest_comments.storage}/(60*24)) generateHtml(remark42) }).catch(e => { const $dom = document.querySelector('#card-newest-comments .aside-list') diff --git a/layout/includes/third-party/newest-comments/twikoo-comment.pug b/layout/includes/third-party/newest-comments/twikoo-comment.pug index 7ea418a..35caf59 100644 --- a/layout/includes/third-party/newest-comments/twikoo-comment.pug +++ b/layout/includes/third-party/newest-comments/twikoo-comment.pug @@ -5,7 +5,7 @@ script. content = content.replace(/]+>/ig, '[!{_p("aside.card_newest_comments.image")}]') // replace image link content = content.replace(/]+?href=["']?([^"']+)["']?[^>]*>([^<]+)<\/a>/gi, '[!{_p("aside.card_newest_comments.link")}]') // replace url - content = content.replace(/
.*?<\/pre>/gi, '[!{_p("aside.card_newest_comments.code")}]') // replace code
+      content = content.replace(/
.*?<\/pre>/gi, '[!{_p("aside.card_aside.card_aside.card_newest_comments.code")}]') // replace code
       content = content.replace(/<[^>]+>/g,"") // remove html tag
 
       if (content.length > 150) {
@@ -19,7 +19,7 @@ script.
         twikoo.getRecentComments({
           envId: '!{theme.twikoo.envId}',
           region: '!{theme.twikoo.region}',
-          pageSize: !{theme.newest_comments.limit},
+          pageSize: !{theme.aside.card_newest_comments.limit},
           includeReply: true
         }).then(function (res) {
           const twikooArray = res.map(e => {
@@ -32,7 +32,7 @@ script.
             }
           })
 
-          btf.saveToLocal.set('twikoo-newest-comments', JSON.stringify(twikooArray), !{theme.newest_comments.storage}/(60*24))
+          btf.saveToLocal.set('twikoo-newest-comments', JSON.stringify(twikooArray), !{theme.aside.card_newest_comments.storage}/(60*24))
           generateHtml(twikooArray)
         }).catch(function (err) {
           const $dom = document.querySelector('#card-newest-comments .aside-list')
@@ -54,7 +54,7 @@ script.
         for (let i = 0; i < array.length; i++) {
           result += '
' - if (!{theme.newest_comments.avatar}) { + if (!{theme.aside.card_newest_comments.avatar}) { const name = '!{theme.lazyload.enable ? "data-lazy-src" : "src"}' result += `${array[i].nick}` } diff --git a/layout/includes/third-party/newest-comments/valine.pug b/layout/includes/third-party/newest-comments/valine.pug index 55f0a91..e0159b9 100644 --- a/layout/includes/third-party/newest-comments/valine.pug +++ b/layout/includes/third-party/newest-comments/valine.pug @@ -31,7 +31,7 @@ script. for (let i = 0; i < array.length; i++) { result += '
' - if (!{theme.newest_comments.avatar}) { + if (!{theme.aside.card_newest_comments.avatar}) { const name = '!{theme.lazyload.enable ? "data-lazy-src" : "src"}' result += `${array[i].nick}` } @@ -63,7 +63,7 @@ script. }, } - fetch(`${serverURL}/1.1/classes/Comment?limit=!{theme.newest_comments.limit}&order=-createdAt`,settings) + fetch(`${serverURL}/1.1/classes/Comment?limit=!{theme.aside.card_newest_comments.limit}&order=-createdAt`,settings) .then(response => response.json()) .then(data => { const valineArray = data.results.map(function (e) { @@ -75,7 +75,7 @@ script. 'date': e.updatedAt, } }) - btf.saveToLocal.set('valine-newest-comments', JSON.stringify(valineArray), !{theme.newest_comments.storage}/(60*24)) + btf.saveToLocal.set('valine-newest-comments', JSON.stringify(valineArray), !{theme.aside.card_newest_comments.storage}/(60*24)) generateHtml(valineArray) }).catch(e => { const $dom = document.querySelector('#card-newest-comments .aside-list') diff --git a/layout/includes/third-party/newest-comments/waline.pug b/layout/includes/third-party/newest-comments/waline.pug index a5eb0cc..b1888cb 100644 --- a/layout/includes/third-party/newest-comments/waline.pug +++ b/layout/includes/third-party/newest-comments/waline.pug @@ -23,7 +23,7 @@ script. for (let i = 0; i < array.length; i++) { result += '
' - if (!{theme.newest_comments.avatar}) { + if (!{theme.aside.card_newest_comments.avatar}) { const name = '!{theme.lazyload.enable ? "data-lazy-src" : "src"}' result += `${array[i].nick}` } @@ -45,7 +45,7 @@ script. const getComment = async () => { try { - const res = await fetch('!{serverURL}/api/comment?type=recent&count=!{theme.newest_comments.limit}', { method: 'GET' }) + const res = await fetch('!{serverURL}/api/comment?type=recent&count=!{theme.aside.card_newest_comments.limit}', { method: 'GET' }) const result = await res.json() const walineArray = result.data.map(e => { return { @@ -56,7 +56,7 @@ script. 'date': e.time || e.insertedAt } }) - btf.saveToLocal.set('waline-newest-comments', JSON.stringify(walineArray), !{theme.newest_comments.storage}/(60*24)) + btf.saveToLocal.set('waline-newest-comments', JSON.stringify(walineArray), !{theme.aside.card_newest_comments.storage}/(60*24)) generateHtml(walineArray) } catch (err) { console.error(err) diff --git a/layout/includes/third-party/pjax.pug b/layout/includes/third-party/pjax.pug index 0872385..55e386c 100644 --- a/layout/includes/third-party/pjax.pug +++ b/layout/includes/third-party/pjax.pug @@ -32,7 +32,7 @@ script. document.addEventListener('pjax:send', function () { // removeEventListener - btf.removeGlobalFnEvent('pjax') + btf.removeGlobalFnEvent('pjaxSendOnce') btf.removeGlobalFnEvent('themeChange') //reset readmode @@ -43,6 +43,7 @@ script. }) document.addEventListener('pjax:complete', () => { + btf.removeGlobalFnEvent('pjaxCompleteOnce') document.querySelectorAll('script[data-pjax]').forEach(item => { const newScript = document.createElement('script') const content = item.text || item.textContent || item.innerHTML || "" diff --git a/layout/includes/third-party/search/docsearch.pug b/layout/includes/third-party/search/docsearch.pug index 9adad8b..b8e3140 100644 --- a/layout/includes/third-party/search/docsearch.pug +++ b/layout/includes/third-party/search/docsearch.pug @@ -1,4 +1,4 @@ -- const { appId, apiKey, indexName, option } = theme.docsearch +- const { placeholder, docsearch: { appId, apiKey, indexName, option } } = theme.search .docsearch-wrap #docsearch(style="display:none") @@ -11,6 +11,7 @@ apiKey: '!{apiKey}', indexName: '!{indexName}', container: '#docsearch', + placeholder: '!{ placeholder || _p("search.input_placeholder")}', }, !{JSON.stringify(option)})) const handleClick = () => { diff --git a/layout/includes/third-party/search/index.pug b/layout/includes/third-party/search/index.pug index 160df79..a9d0c69 100644 --- a/layout/includes/third-party/search/index.pug +++ b/layout/includes/third-party/search/index.pug @@ -1,6 +1,7 @@ -if theme.algolia_search.enable - include ./algolia.pug -else if theme.local_search.enable - include ./local-search.pug -else if theme.docsearch.enable - include ./docsearch.pug \ No newline at end of file +case theme.search.use + when 'algolia_search' + include ./algolia.pug + when 'local_search' + include ./local-search.pug + when 'docsearch' + include ./docsearch.pug \ No newline at end of file diff --git a/layout/includes/third-party/search/local-search.pug b/layout/includes/third-party/search/local-search.pug index f22f05b..af96ab0 100644 --- a/layout/includes/third-party/search/local-search.pug +++ b/layout/includes/third-party/search/local-search.pug @@ -13,7 +13,7 @@ .search-wrap #local-search-input .local-search-box - input(placeholder=_p("search.local_search.input_placeholder") type="text").local-search-box--input + input(placeholder=theme.search.placeholder || _p("search.input_placeholder") type="text").local-search-box--input hr #local-search-results #local-search-stats-wrap diff --git a/layout/includes/third-party/share/index.pug b/layout/includes/third-party/share/index.pug index f8122c0..447c589 100644 --- a/layout/includes/third-party/share/index.pug +++ b/layout/includes/third-party/share/index.pug @@ -1,5 +1,9 @@ -.post_share - if theme.sharejs.enable - include ./share-js.pug - else if theme.addtoany.enable - !=partial('includes/third-party/share/addtoany', {}, {cache: true}) +- const { use } = theme.share + +if use + .post-share + case use + when 'addtoany' + !=partial('includes/third-party/share/addtoany', {}, {cache: true}) + when 'sharejs' + include ./share-js.pug \ No newline at end of file diff --git a/layout/includes/third-party/share/share-js.pug b/layout/includes/third-party/share/share-js.pug index 612332c..50d5528 100644 --- a/layout/includes/third-party/share/share-js.pug +++ b/layout/includes/third-party/share/share-js.pug @@ -1,4 +1,4 @@ - const coverVal = page.cover_type === 'img' ? page.cover : theme.avatar.img -.social-share(data-image=url_for(coverVal) data-sites= theme.sharejs.sites) +.social-share(data-image=url_for(coverVal) data-sites= theme.share.sharejs.sites) link(rel='stylesheet' href=url_for(theme.asset.sharejs_css) media="print" onload="this.media='all'") script(src=url_for(theme.asset.sharejs) defer) \ No newline at end of file diff --git a/layout/includes/third-party/subtitle.pug b/layout/includes/third-party/subtitle.pug index c5fed4c..4689340 100644 --- a/layout/includes/third-party/subtitle.pug +++ b/layout/includes/third-party/subtitle.pug @@ -3,7 +3,7 @@ script. window.typedJSFn = { - init: (str) => { + init: str => { window.typed = new Typed('#subtitle', Object.assign({ strings: str, startDelay: 300, @@ -12,7 +12,7 @@ script. backSpeed: 50, }, !{JSON.stringify(typed_option)})) }, - run: (subtitleType) => { + run: subtitleType => { if (!{effect}) { if (typeof Typed === 'function') { subtitleType() @@ -24,7 +24,7 @@ script. } } } - btf.addGlobalFn('pjaxSend', () => { typed.destroy() }, 'typedDestroy') + btf.addGlobalFn('pjaxSendOnce', () => { typed.destroy() }, 'typedDestroy') case source when 1 diff --git a/layout/includes/widget/card_author.pug b/layout/includes/widget/card_author.pug index 0a1e71a..c4f01d4 100644 --- a/layout/includes/widget/card_author.pug +++ b/layout/includes/widget/card_author.pug @@ -1,12 +1,11 @@ if theme.aside.card_author.enable - .card-widget.card-info - .is-center - .avatar-img - img(src=url_for(theme.avatar.img) onerror=`this.onerror=null;this.src='` + url_for(theme.error_img.flink) + `'` alt="avatar") - .author-info__name= config.author - .author-info__description!= theme.aside.card_author.description || config.description + .card-widget.card-info.is-center + .avatar-img + img(src=url_for(theme.avatar.img) onerror=`this.onerror=null;this.src='` + url_for(theme.error_img.flink) + `'` alt="avatar") + .author-info-name= config.author + .author-info-description!= theme.aside.card_author.description || config.description - .card-info-data.site-data.is-center + .site-data a(href=url_for(config.archive_dir) + '/') .headline= _p('aside.articles') .length-num= site.posts.length @@ -23,5 +22,5 @@ if theme.aside.card_author.enable span=theme.aside.card_author.button.text if(theme.social) - .card-info-social-icons.is-center - !=partial('includes/header/social', {}, {cache: true}) + .card-info-social-icons + !=partial('includes/header/social', {}, {cache: true}) diff --git a/layout/includes/widget/card_newest_comment.pug b/layout/includes/widget/card_newest_comment.pug index a7a213c..3a0bb18 100644 --- a/layout/includes/widget/card_newest_comment.pug +++ b/layout/includes/widget/card_newest_comment.pug @@ -1,4 +1,4 @@ -if theme.newest_comments.enable && theme.comments.use && !['Livere','Facebook Comments','Giscus'].includes(theme.comments.use[0]) +if theme.aside.card_newest_comments.enable && theme.comments.use && !['Livere','Facebook Comments','Giscus'].includes(theme.comments.use[0]) .card-widget#card-newest-comments .item-headline i.fas.fa-comment-dots diff --git a/layout/includes/widget/card_webinfo.pug b/layout/includes/widget/card_webinfo.pug index 9ff3de0..acf3048 100644 --- a/layout/includes/widget/card_webinfo.pug +++ b/layout/includes/widget/card_webinfo.pug @@ -8,10 +8,10 @@ if theme.aside.card_webinfo.enable .webinfo-item .item-name= _p('aside.card_webinfo.article_name') + " :" .item-count= site.posts.length - if theme.runtimeshow.enable + if theme.aside.card_webinfo.runtime_date .webinfo-item .item-name= _p('aside.card_webinfo.runtime.name') + " :" - .item-count#runtimeshow(data-publishDate=date_xml(theme.runtimeshow.publish_date)) + .item-count#runtimeshow(data-publishDate=date_xml(theme.aside.card_webinfo.runtime_date)) i.fa-solid.fa-spinner.fa-spin if theme.wordcount.enable && theme.wordcount.total_wordcount .webinfo-item diff --git a/layout/index.pug b/layout/index.pug index 2655cb4..7705655 100644 --- a/layout/index.pug +++ b/layout/index.pug @@ -1,7 +1,5 @@ extends includes/layout.pug block content - include ./includes/mixins/post-ui.pug - #recent-posts.recent-posts - +postUI - include includes/pagination.pug \ No newline at end of file + include ./includes/mixins/indexPostUI.pug + +indexPostUI \ No newline at end of file diff --git a/layout/page.pug b/layout/page.pug index 6c810ef..eb2663e 100644 --- a/layout/page.pug +++ b/layout/page.pug @@ -1,20 +1,32 @@ extends includes/layout.pug block content - #page - if top_img === false + - const noCardLayout = ['shuoshuo', '404'].includes(page.type) ? 'nc' : '' + - var commentsJsLoad = false + + mixin commentLoad + if page.comments !== false && theme.comments.use + - commentsJsLoad = true + !=partial('includes/third-party/comments/index', {}, {cache: true}) + + #page(class=noCardLayout) + if top_img === false && page.title h1.page-title= page.title case page.type when 'tags' include includes/page/tags.pug + +commentLoad when 'link' include includes/page/flink.pug + +commentLoad when 'categories' include includes/page/categories.pug + +commentLoad + when '404' + include includes/page/404.pug + when 'shuoshuo' + include includes/page/shuoshuo.pug default include includes/page/default-page.pug - - if page.comments !== false && theme.comments && theme.comments.use - - var commentsJsLoad = true - !=partial('includes/third-party/comments/index', {}, {cache: true}) \ No newline at end of file + +commentLoad \ No newline at end of file diff --git a/layout/post.pug b/layout/post.pug index f54ab7a..07c696e 100644 --- a/layout/post.pug +++ b/layout/post.pug @@ -8,7 +8,7 @@ block content article#article-container.post-content!=page.content include includes/post/post-copyright.pug .tag_share - if (theme.post_meta.post.tags) + if (page.tags.length > 0 && theme.post_meta.post.tags) .post-meta__tag-list each item, index in page.tags.data a(href=url_for(item.path)).post-meta__tags #[=item.name] @@ -26,7 +26,7 @@ block content if theme.related_post && theme.related_post.enable != related_posts(page,site.posts) - if page.comments !== false && theme.comments && theme.comments.use + if page.comments !== false && theme.comments.use - var commentsJsLoad = true !=partial('includes/third-party/comments/index', {}, {cache: true}) \ No newline at end of file diff --git a/layout/tag.pug b/layout/tag.pug index 9f99658..3d4c067 100644 --- a/layout/tag.pug +++ b/layout/tag.pug @@ -2,10 +2,8 @@ extends includes/layout.pug block content if theme.tag_ui == 'index' - include ./includes/mixins/post-ui.pug - #recent-posts.recent-posts - +postUI - include includes/pagination.pug + include ./includes/mixins/indexPostUI.pug + +indexPostUI else include ./includes/mixins/article-sort.pug #tag diff --git a/package.json b/package.json index 8235a6b..3945458 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "hexo-theme-butterfly", - "version": "4.14.0-b3", + "version": "5.0.0-b1", "description": "A Simple and Card UI Design theme for Hexo", "main": "package.json", "scripts": { diff --git a/plugins.yml b/plugins.yml index 60f69ae..8ff8f85 100644 --- a/plugins.yml +++ b/plugins.yml @@ -1,7 +1,7 @@ abcjs_basic_js: name: abcjs file: dist/abcjs-basic-min.js - version: 6.3.0 + version: 6.4.1 activate_power_mode: name: butterfly-extsrc file: dist/activate-power-mode.min.js @@ -9,7 +9,7 @@ activate_power_mode: algolia_search: name: algoliasearch file: dist/algoliasearch-lite.umd.js - version: 4.23.2 + version: 4.24.0 aplayer_css: name: aplayer file: dist/APlayer.min.css @@ -21,11 +21,11 @@ aplayer_js: artalk_css: name: artalk file: dist/Artalk.css - version: 2.8.3 + version: 2.8.7 artalk_js: name: artalk file: dist/Artalk.js - version: 2.8.3 + version: 2.8.7 blueimp_md5: name: blueimp-md5 file: js/md5.min.js @@ -62,26 +62,26 @@ docsearch_css: name: '@docsearch/css' other_name: docsearch-css file: dist/style.css - version: 3.6.0 + version: 3.6.1 docsearch_js: name: '@docsearch/js' other_name: docsearch-js file: dist/umd/index.js - version: 3.6.0 + version: 3.6.1 egjs_infinitegrid: name: '@egjs/infinitegrid' other_name: egjs-infinitegrid file: dist/infinitegrid.min.js - version: 4.11.1 + version: 4.12.0 fancybox: name: '@fancyapps/ui' file: dist/fancybox/fancybox.umd.js - version: 5.0.35 + version: 5.0.36 other_name: fancyapps-ui fancybox_css: name: '@fancyapps/ui' file: dist/fancybox/fancybox.css - version: 5.0.35 + version: 5.0.36 other_name: fancyapps-ui fireworks: name: butterfly-extsrc @@ -91,7 +91,7 @@ fontawesome: name: '@fortawesome/fontawesome-free' file: css/all.min.css other_name: font-awesome - version: 6.5.1 + version: 6.6.0 gitalk: name: gitalk file: dist/gitalk.min.js @@ -107,21 +107,21 @@ instantpage: instantsearch: name: instantsearch.js file: dist/instantsearch.production.min.js - version: 4.66.1 + version: 4.73.3 katex: name: katex file: dist/katex.min.css other_name: KaTeX - version: 0.16.10 + version: 0.16.11 katex_copytex: name: katex file: dist/contrib/copy-tex.min.js other_name: KaTeX - version: 0.16.10 + version: 0.16.11 lazyload: name: vanilla-lazyload file: dist/lazyload.iife.min.js - version: 19.0.5 + version: 19.1.3 mathjax: name: mathjax file: es5/tex-mml-chtml.js @@ -133,7 +133,7 @@ medium_zoom: mermaid: name: mermaid file: dist/mermaid.min.js - version: 10.9.0 + version: 10.9.1 meting_js: name: butterfly-extsrc file: metingjs/dist/Meting.min.js @@ -190,7 +190,7 @@ snackbar_css: twikoo: name: twikoo file: dist/twikoo.all.min.js - version: 1.6.32 + version: 1.6.38 typed: name: typed.js file: dist/typed.umd.js @@ -198,14 +198,14 @@ typed: valine: name: valine file: dist/Valine.min.js - version: 1.5.1 + version: 1.5.2 waline_css: name: '@waline/client' file: dist/waline.css other_name: waline - version: 3.1.3 + version: 3.3.0 waline_js: name: '@waline/client' file: dist/waline.js other_name: waline - version: 3.1.3 + version: 3.3.0 diff --git a/scripts/events/404.js b/scripts/events/404.js index 02491ce..17a05e9 100644 --- a/scripts/events/404.js +++ b/scripts/events/404.js @@ -12,7 +12,9 @@ hexo.extend.generator.register('404', function (locals) { layout: ['page'], data: { type: '404', - top_img: false + top_img: false, + comments: false, + aside: false } } }) diff --git a/scripts/events/merge_config.js b/scripts/events/merge_config.js index 8aa538f..ebca510 100644 --- a/scripts/events/merge_config.js +++ b/scripts/events/merge_config.js @@ -1,3 +1,5 @@ +const { deepMerge } = require('hexo-util') + hexo.extend.filter.register('before_generate', () => { const defaultConfig = { nav: { @@ -6,33 +8,36 @@ hexo.extend.filter.register('before_generate', () => { fixed: false }, menu: null, - highlight_theme: 'light', - highlight_theme_macStyle: false, - highlight_copy: true, - highlight_lang: true, - highlight_shrink: false, - highlight_fullpage: true, - highlight_height_limit: false, - code_word_wrap: false, + code_blocks: { + theme: 'light', + macStyle: false, + height_limit: false, + word_wrap: false, + copy: true, + language: true, + shrink: false, + fullpage: false + }, social: null, favicon: '/img/favicon.png', avatar: { - img: 'https://i.loli.net/2021/02/24/5O1day2nriDzjSu.png', + img: '/img/butterfly-icon.png', effect: false }, disable_top_img: false, - index_img: null, default_top_img: null, + index_img: null, archive_img: null, tag_img: null, tag_per_img: null, category_img: null, category_per_img: null, + footer_img: false, + background: null, cover: { index_enable: true, aside_enable: true, archives_enable: true, - position: 'both', default_cover: null }, error_img: { @@ -42,7 +47,7 @@ hexo.extend.filter.register('before_generate', () => { error_404: { enable: false, subtitle: 'Page Not Found', - background: 'https://i.loli.net/2020/05/19/aKOcLiyPl2JQdFD.png' + background: '/img/error-page.png' }, post_meta: { page: { @@ -61,22 +66,20 @@ hexo.extend.filter.register('before_generate', () => { label: true } }, + index_site_info_top: null, + index_top_img_height: null, + subtitle: { + enable: false, + effect: true, + typed_option: null, + source: false, + sub: null + }, + index_layout: 3, index_post_content: { method: 3, length: 500 }, - anchor: { - auto_update: false, - click_to_scroll: false - }, - photofigcaption: false, - copy: { - enable: true, - copyright: { - enable: false, - limit_count: 50 - } - }, toc: { post: true, page: false, @@ -110,7 +113,7 @@ hexo.extend.filter.register('before_generate', () => { noticeOutdate: { enable: false, style: 'flat', - limit_day: 500, + limit_day: 365, position: 'top', message_prev: 'It has been', message_next: 'days since the last update, the content of the article may be outdated.' @@ -118,7 +121,7 @@ hexo.extend.filter.register('before_generate', () => { footer: { owner: { enable: true, - since: 2020 + since: 2019 }, custom_text: null, copyright: true @@ -154,6 +157,13 @@ hexo.extend.filter.register('before_generate', () => { sort: 'date', sort_order: null }, + card_newest_comments: { + enable: false, + sort_order: null, + limit: 6, + storage: 10, + avatar: true + }, card_categories: { enable: true, limit: 8, @@ -176,35 +186,21 @@ hexo.extend.filter.register('before_generate', () => { limit: 8, sort_order: null }, - card_webinfo: { - enable: true, - post_count: true, - last_push_date: true, - sort_order: null - }, card_post_series: { enable: true, series_title: false, orderBy: 'date', order: -1 + }, + card_webinfo: { + enable: true, + post_count: true, + last_push_date: true, + sort_order: null, + runtime_date: null } }, - busuanzi: { - site_uv: true, - site_pv: true, - page_pv: true - }, - runtimeshow: { - enable: false, - publish_date: null - }, - newest_comments: { - enable: false, - sort_order: null, - limit: 6, - storage: 10, - avatar: true - }, + rightside_bottom: null, translate: { enable: false, default: '繁', @@ -227,42 +223,68 @@ hexo.extend.filter.register('before_generate', () => { hide: null, show: null }, - mathjax: { - enable: false, - per_page: false - }, - katex: { - enable: false, - per_page: false, - hide_scrollbar: true + anchor: { + auto_update: false, + click_to_scroll: false }, - algolia_search: { - enable: false, - hits: { - per_page: 6 + photofigcaption: false, + copy: { + enable: true, + copyright: { + enable: false, + limit_count: 150 } }, - local_search: { + wordcount: { enable: false, - preload: false, - top_n_per_article: 1, - unescape: false, - CDN: null + post_wordcount: true, + min2read: true, + total_wordcount: true }, - docsearch: { - enable: false, - appId: null, - apiKey: null, - indexName: null, - option: null + busuanzi: { + site_uv: true, + site_pv: true, + page_pv: true }, - sharejs: { - enable: true, - sites: 'facebook,twitter,wechat,weibo,qq' + math: { + use: null, + per_page: true, + hide_scrollbar: false, + mathjax: { + enableMenu: true, + tags: 'none' + }, + katex: { + copy_tex: false + } }, - addtoany: { - enable: false, - item: 'facebook,twitter,wechat,sina_weibo,facebook_messenger,email,copy_link' + search: { + use: null, + placeholder: null, + algolia_search: { + hitsPerPage: 6 + }, + local_search: { + preload: false, + top_n_per_article: 1, + unescape: false, + CDN: null + }, + docsearch: { + appId: null, + apiKey: null, + indexName: null, + option: null + } + }, + share: { + use: 'sharejs', + sharejs: { + sites: 'facebook,twitter,wechat,weibo,qq' + }, + addtoany: { + item: 'facebook,twitter,wechat,sina_weibo,facebook_messenger,email,copy_link' + } }, comments: { use: null, @@ -310,7 +332,9 @@ hexo.extend.filter.register('before_generate', () => { repo: null, issue_term: 'pathname', light_theme: 'github-light', - dark_theme: 'photon-dark' + dark_theme: 'photon-dark', + js: null, + option: null }, facebook_comments: { app_id: null, @@ -329,10 +353,9 @@ hexo.extend.filter.register('before_generate', () => { repo: null, repo_id: null, category_id: null, - theme: { - light: 'light', - dark: 'dark' - }, + light_theme: 'light', + dark_theme: 'dark', + js: null, option: null }, remark42: { @@ -346,26 +369,24 @@ hexo.extend.filter.register('before_generate', () => { visitor: false, option: null }, - chat_btn: false, - chat_hide_show: false, + chat: { + use: null, + rightside_button: false, + button_hide_show: false + }, chatra: { - enable: false, id: null }, tidio: { - enable: false, public_key: null }, daovoice: { - enable: false, app_id: null }, crisp: { - enable: false, website_id: null }, messenger: { - enable: false, pageID: null, lang: 'zh_TW' }, @@ -380,20 +401,48 @@ hexo.extend.filter.register('before_generate', () => { client: null, enable_page_level_ads: true }, + ad: { + index: null, + aside: null, + post: null + }, site_verification: null, - index_site_info_top: null, - index_top_img_height: null, category_ui: null, tag_ui: null, + rounded_corners_ui: true, text_align_justify: false, - background: null, - footer_bg: false, mask: { header: true, footer: true }, - rightside_bottom: null, + preloader: { + enable: false, + source: 1, + pace_css_url: null + }, enter_transitions: true, + display_mode: 'light', + beautify: { + enable: false, + field: 'post', + 'title-prefix-icon': null, + 'title-prefix-icon-color': null + }, + font: { + 'global-font-size': null, + 'code-font-size': null, + 'font-family': null, + 'code-font-family': null + }, + blog_title_font: { + font_link: null, + 'font-family': null + }, + hr_icon: { + enable: true, + icon: null, + 'icon-top': null + }, activate_power_mode: { enable: false, colorful: true, @@ -436,50 +485,9 @@ hexo.extend.filter.register('before_generate', () => { random: false, mobile: false }, - display_mode: 'light', - beautify: { - enable: false, - field: 'post', - 'title-prefix-icon': null, - 'title-prefix-icon-color': null - }, - font: { - 'global-font-size': null, - 'code-font-size': null, - 'font-family': null, - 'code-font-family': null - }, - blog_title_font: { - font_link: null, - 'font-family': null - }, - hr_icon: { - enable: true, - icon: null, - 'icon-top': null - }, - subtitle: { - enable: false, - effect: true, - typed_option: null, - source: false, - sub: null - }, - preloader: { - enable: false, - source: 1, - pace_css_url: null - }, - wordcount: { - enable: false, - post_wordcount: true, - min2read: true, - total_wordcount: true - }, - medium_zoom: false, - fancybox: true, + lightbox: null, series: { - enable: true, + enable: false, orderBy: 'title', order: 1, number: true @@ -527,6 +535,14 @@ hexo.extend.filter.register('before_generate', () => { placeholder: null, blur: false }, + pwa: { + enable: false, + manifest: null, + apple_touch_icon: null, + favicon_32_32: null, + favicon_16_16: null, + mask_icon: null + }, Open_Graph_meta: { enable: true, option: null @@ -539,11 +555,11 @@ hexo.extend.filter.register('before_generate', () => { CDN: { internal_provider: 'local', third_party_provider: 'jsdelivr', - version: true, + version: false, custom_format: null, option: null } } - hexo.theme.config = Object.assign(defaultConfig, hexo.theme.config) + hexo.theme.config = deepMerge(defaultConfig, hexo.theme.config) }, 1) diff --git a/scripts/events/stylus.js b/scripts/events/stylus.js index 4756318..15ca4ff 100644 --- a/scripts/events/stylus.js +++ b/scripts/events/stylus.js @@ -19,5 +19,6 @@ hexo.extend.filter.register('stylus:renderer', style => { .define('$highlight_line_number', highlightLineNumber) .define('$prismjs_enable', prismjsEnable) .define('$prismjs_line_number', prismjsLineNumber) + .define('$language', hexo.config.language) // .import(`${this.source_dir.replace(/\\/g, '/')}_data/css/*`) }) diff --git a/scripts/helpers/findArchiveLength.js b/scripts/helpers/findArchiveLength.js deleted file mode 100644 index 152b15e..0000000 --- a/scripts/helpers/findArchiveLength.js +++ /dev/null @@ -1,58 +0,0 @@ -hexo.extend.helper.register('getArchiveLength', function () { - const { archive_generator: archiveGenerator } = hexo.config - if (archiveGenerator && archiveGenerator.enable === false) return this.site.posts.length - const { yearly, monthly, daily } = archiveGenerator - const { year, month, day } = this.page - if (yearly === false || !year) return this.site.posts.length - - const posts = this.site.posts.sort('date') - - const compareFunc = (type, y1, m1, d1, y2, m2, d2) => { - switch (type) { - case 'year': - return y1 === y2 - case 'month': - return y1 === y2 && m1 === m2 - case 'day': - return y1 === y2 && m1 === m2 && d1 === d2 - default: - return false - } - } - - const generateDateObj = (type) => { - return posts.reduce((dateObj, post) => { - const date = post.date.clone() - const year = date.year() - const month = date.month() + 1 - const day = date.date() - const lastData = dateObj[dateObj.length - 1] - - if (!lastData || !compareFunc(type, lastData.year, lastData.month, lastData.day, year, month, day)) { - const name = type === 'year' ? year : type === 'month' ? `${year}-${month}` : `${year}-${month}-${day}` - dateObj.push({ - name, - year, - month, - day, - count: 1 - }) - } else { - lastData.count++ - } - - return dateObj - }, []) - } - - const data = this.fragment_cache('createArchiveObj', () => { - const dateObjs = [] - if (yearly) dateObjs.push(...generateDateObj('year')) - if (monthly) dateObjs.push(...generateDateObj('month')) - if (daily) dateObjs.push(...generateDateObj('day')) - return dateObjs - }) - - const name = month ? (day ? `${year}-${month}-${day}` : `${year}-${month}`) : year - return data.find(item => item.name === name).count -}) diff --git a/scripts/helpers/getArchiveLength.js b/scripts/helpers/getArchiveLength.js new file mode 100644 index 0000000..1ff35c8 --- /dev/null +++ b/scripts/helpers/getArchiveLength.js @@ -0,0 +1,45 @@ +hexo.extend.helper.register('getArchiveLength', function () { + const archiveGenerator = hexo.config.archive_generator + const posts = this.site.posts + + const { yearly, monthly, daily } = archiveGenerator + const { year, month, day } = this.page + + // Archives Page + if (!year) return posts.length + + // Function to generate a unique key based on the granularity + const getKey = (post, type) => { + const date = post.date.clone() + const y = date.year() + const m = date.month() + 1 + const d = date.date() + if (type === 'year') return `${y}` + if (type === 'month') return `${y}-${m}` + if (type === 'day') return `${y}-${m}-${d}` + } + + // Create a map to count posts per period + const mapData = this.fragment_cache('createArchiveObj', () => { + const map = new Map() + posts.forEach(post => { + const keyYear = getKey(post, 'year') + const keyMonth = getKey(post, 'month') + const keyDay = getKey(post, 'day') + + if (yearly) map.set(keyYear, (map.get(keyYear) || 0) + 1) + if (monthly) map.set(keyMonth, (map.get(keyMonth) || 0) + 1) + if (daily) map.set(keyDay, (map.get(keyDay) || 0) + 1) + }) + return map + }) + + // Determine the appropriate key to fetch based on current page context + let key + if (yearly && year) key = `${year}` + if (monthly && month) key = `${year}-${month}` + if (daily && day) key = `${year}-${month}-${day}` + + // Return the count for the current period or default to the total posts + return mapData.get(key) || posts.length +}) diff --git a/scripts/helpers/inject_head_js.js b/scripts/helpers/inject_head_js.js index 417d851..574d18e 100644 --- a/scripts/helpers/inject_head_js.js +++ b/scripts/helpers/inject_head_js.js @@ -1,6 +1,12 @@ /** * Butterfly * inject js to head + * + * addGlobalFn + * pjaxSendOnce - remove in pjaxSend + * pjaxCompleteOnce - remove in pjaxComplete + * pjaxSend - run in pjaxSend + * pjaxComplete - run in pjaxComplete */ 'use strict' diff --git a/scripts/helpers/page.js b/scripts/helpers/page.js index 6c773e3..72ef5be 100644 --- a/scripts/helpers/page.js +++ b/scripts/helpers/page.js @@ -1,18 +1,10 @@ 'use strict' -const { stripHTML, escapeHTML, prettyUrls } = require('hexo-util') +const { stripHTML, prettyUrls, truncate } = require('hexo-util') const crypto = require('crypto') -hexo.extend.helper.register('page_description', function () { - const { config, page } = this - let description = page.description || page.content || page.title || config.description - - if (description) { - description = escapeHTML(stripHTML(description).substring(0, 150) - .trim() - ).replace(/\n/g, ' ') - return description - } +hexo.extend.helper.register('truncate', (content, length) => { + return truncate(stripHTML(content), { length, separator: ' ' }).replace(/\n/g, ' ') }) hexo.extend.helper.register('cloudTags', function (options = {}) { @@ -32,13 +24,26 @@ hexo.extend.helper.register('cloudTags', function (options = {}) { sizes.push(length) }) + const getRandomColor = () => { + const randomColor = () => Math.floor(Math.random() * 201) + const r = randomColor() + const g = randomColor() + const b = randomColor() + // 確保顏色不是太暗,通過增加一個最低值 + return `rgb(${Math.max(r, 50)}, ${Math.max(g, 50)}, ${Math.max(b, 50)})` + } + + const generateStyle = (size, unit) => { + const fontSize = parseFloat(size.toFixed(2)) + unit + const color = getRandomColor() + return `font-size: ${fontSize}; color: ${color};` + } + const length = sizes.length - 1 source.sort(orderby, order).forEach(tag => { const ratio = length ? sizes.indexOf(tag.length) / length : 0 const size = minfontsize + ((maxfontsize - minfontsize) * ratio) - let style = `font-size: ${parseFloat(size.toFixed(2))}${unit};` - const color = 'rgb(' + Math.floor(Math.random() * 201) + ', ' + Math.floor(Math.random() * 201) + ', ' + Math.floor(Math.random() * 201) + ')' // 0,0,0 -> 200,200,200 - style += ` color: ${color}` + const style = generateStyle(size, unit) result += `${tag.name}` }) return result @@ -84,5 +89,5 @@ hexo.extend.helper.register('findArchivesTitle', function (page, menu, date) { hexo.extend.helper.register('isImgOrUrl', function (path) { const imgTestReg = /\.(png|jpe?g|gif|svg|webp)(\?.*)?$/i - return path.indexOf('//') !== -1 || imgTestReg.test(path) + return path.includes('//') || imgTestReg.test(path) }) diff --git a/scripts/helpers/related_post.js b/scripts/helpers/related_post.js index 9a46f68..46f4381 100644 --- a/scripts/helpers/related_post.js +++ b/scripts/helpers/related_post.js @@ -8,9 +8,10 @@ hexo.extend.helper.register('related_posts', function (currentPost, allPosts) { let relatedPosts = [] - currentPost.tags.forEach(function (tag) { + const tagsData = currentPost.tags + tagsData.length && tagsData.forEach(function (tag) { allPosts.forEach(function (post) { - if (isTagRelated(tag.name, post.tags)) { + if (currentPost.path !== post.path && isTagRelated(tag.name, post.tags)) { const relatedPost = { title: post.title, path: post.path, @@ -24,13 +25,12 @@ hexo.extend.helper.register('related_posts', function (currentPost, allPosts) { if (index !== -1) { relatedPosts[index].weight += 1 } else { - if (currentPost.path !== post.path) { - relatedPosts.push(relatedPost) - } + relatedPosts.push(relatedPost) } } }) }) + if (relatedPosts.length === 0) { return '' } @@ -52,7 +52,7 @@ hexo.extend.helper.register('related_posts', function (currentPost, allPosts) { for (let i = 0; i < Math.min(relatedPosts.length, limitNum); i++) { const cover = relatedPosts[i].cover || 'var(--default-bg-color)' const title = this.escape_html(relatedPosts[i].title) - result += `' + result += '
' } result += '
' @@ -72,29 +72,14 @@ hexo.extend.helper.register('related_posts', function (currentPost, allPosts) { } }) -function isTagRelated (tagName, TBDtags) { - let result = false - TBDtags.forEach(function (tag) { - if (tagName === tag.name) { - result = true - } - }) - return result +function isTagRelated (tagName, tags) { + return tags.some(tag => tag.name === tagName) } function findItem (arrayToSearch, attr, val) { - for (let i = 0; i < arrayToSearch.length; i++) { - if (arrayToSearch[i][attr] === val) { - return i - } - } - return -1 + return arrayToSearch.findIndex(item => item[attr] === val) } function compare (attr) { - return function (a, b) { - const val1 = a[attr] - const val2 = b[attr] - return val2 - val1 - } + return (a, b) => b[attr] - a[attr] } diff --git a/scripts/tag/gallery.js b/scripts/tag/gallery.js index f8bceb6..2753eed 100644 --- a/scripts/tag/gallery.js +++ b/scripts/tag/gallery.js @@ -19,6 +19,7 @@ const gallery = (args, content) => { if (args[0] === 'url') { [type, dataStr, button] = args // url,[link],[lazyload] + dataStr = urlFor(dataStr) } else { [button] = args // [lazyload] const regex = /!\[(.*?)\]\(([^\s]*)\s*(?:["'](.*?)["']?)?\s*\)/g @@ -39,9 +40,7 @@ const gallery = (args, content) => { } return `` } diff --git a/scripts/tag/label.js b/scripts/tag/label.js index 4c9e692..cae17ca 100644 --- a/scripts/tag/label.js +++ b/scripts/tag/label.js @@ -8,7 +8,7 @@ const addLabel = args => { const [text, className = 'default'] = args - return `${text} ` + return `${text}` } hexo.extend.tag.register('label', addLabel, { ends: false }) diff --git a/scripts/tag/series.js b/scripts/tag/series.js index 4a901df..8108836 100644 --- a/scripts/tag/series.js +++ b/scripts/tag/series.js @@ -63,7 +63,7 @@ function series (args) { result += `
  • ${ele.title}
  • ` }) - return series.number ? `
      ${result}
    ` : `
      ${result}
    ` + return series.number ? `
      ${result}
    ` : `
      ${result}
    ` } hexo.extend.tag.register('series', series, { ends: false }) diff --git a/scripts/tag/tabs.js b/scripts/tag/tabs.js index 6ec87de..29321fd 100644 --- a/scripts/tag/tabs.js +++ b/scripts/tag/tabs.js @@ -9,7 +9,7 @@ const postTabs = (args, content) => { const tabBlock = /\n([\w\W\s\S]*?)/g args = args.join(' ').split(',') - const tabName = args[0] + const tabName = args[0] || 'tab' const tabActive = Number(args[1]) || 0 const matches = [] let match @@ -18,8 +18,6 @@ const postTabs = (args, content) => { let tabContent = '' let noDefault = true - !tabName && hexo.log.warn('Tabs block must have unique name!') - while ((match = tabBlock.exec(content)) !== null) { matches.push(match[1], match[2]) } @@ -29,34 +27,31 @@ const postTabs = (args, content) => { let postContent = matches[i + 1] let tabCaption = tabParameters[0] || '' let tabIcon = tabParameters[1] || '' - let tabHref = '' postContent = hexo.render.renderSync({ text: postContent, engine: 'markdown' }).trim() tabId += 1 - tabHref = (tabName + ' ' + tabId).toLowerCase().split(' ').join('-'); - ((tabCaption.length === 0) && (tabIcon.length === 0)) && (tabCaption = tabName + ' ' + tabId) + if (tabCaption.length === 0 && tabIcon.length === 0) tabCaption = tabName + ' ' + tabId - const isOnlyicon = tabIcon.length > 0 && tabCaption.length === 0 ? ' style="text-align: center;"' : '' const icon = tabIcon.trim() - tabIcon.length > 0 && (tabIcon = ``) + tabIcon.length > 0 && (tabIcon = ``) let isActive = '' if ((tabActive > 0 && tabActive === tabId) || (tabActive === 0 && tabId === 1)) { isActive = ' active' noDefault = false } - tabNav += `` - tabContent += `
    ${postContent}
    ` + tabNav += `` + tabContent += `
    ${postContent}
    ` } const toTop = '
    ' - tabNav = `` + tabNav = `` tabContent = `
    ${tabContent}
    ` - return `
    ${tabNav + tabContent + toTop}
    ` + return `
    ${tabNav + tabContent + toTop}
    ` } hexo.extend.tag.register('tabs', postTabs, { ends: true }) diff --git a/source/css/_global/function.styl b/source/css/_global/function.styl index 85d96db..a210c52 100644 --- a/source/css/_global/function.styl +++ b/source/css/_global/function.styl @@ -15,12 +15,16 @@ text-rendering: auto -webkit-font-smoothing: antialiased +addBorderRadius(x = 6) + if hexo-config('rounded_corners_ui') + border-radius: unit(x, 'px') + // card hover .cardHover - border-radius: 8px background: var(--card-bg) box-shadow: var(--card-box-shadow) transition: all .3s + addBorderRadius(8) &:hover box-shadow: var(--card-hover-box-shadow) @@ -37,11 +41,10 @@ .postImgHover &:hover .cover - opacity: .8 + opacity: .7 transform: scale(1.1) .cover - position: absolute width: 100% height: 100% opacity: .4 @@ -96,6 +99,12 @@ transition: all 1s ease-in-out @extend .fontawesomeIcon +.verticalCenter + position: absolute + top: 50% + width: 100% + transform: translate(0, -50%) + maxWidth600() @media screen and (max-width: 600px) {block} @@ -112,6 +121,10 @@ maxWidth1024() @media screen and (max-width: 1024px) {block} +minWidth1024() + @media screen and (min-width: 1024px) + {block} + maxWidth900() @media screen and (max-width: 900px) {block} @@ -261,4 +274,4 @@ if hexo-config('avatar.effect') == true transform: translateX(200px) 100% - transform: translateX(0) \ No newline at end of file + transform: translateX(0) diff --git a/source/css/_global/index.styl b/source/css/_global/index.styl index 1f55e41..0a4373f 100644 --- a/source/css/_global/index.styl +++ b/source/css/_global/index.styl @@ -15,7 +15,9 @@ --tab-button-hover-bg: $tab-button-hover-bg --tab-button-active-bg: $tab-button-active-bg --card-bg: $card-bg + --card-meta: $theme-meta-color --sidebar-bg: $sidebar-background + --sidebar-menu-bg: $white --btn-hover-color: $button-hover-color --btn-color: $button-color --btn-bg: $button-bg @@ -39,6 +41,7 @@ body position: relative + overflow-y: scroll min-height: 100% background: var(--global-bg) color: var(--font-color) @@ -52,6 +55,12 @@ body user-select: none -webkit-user-select: none +// scrollbar - firefox +@-moz-document url-prefix() + * + scrollbar-width: thin + scrollbar-color: var(--scrollbar-color) transparent + // scrollbar - chrome/safari *::-webkit-scrollbar width: 5px @@ -63,11 +72,6 @@ body *::-webkit-scrollbar-track background-color: transparent -// scrollbar - firefox -* - scrollbar-width: thin - scrollbar-color: var(--scrollbar-color) transparent - input::placeholder color: var(--font-color) @@ -104,11 +108,34 @@ h6 overflow-x: scroll margin: 0 0 20px + if hexo-config('rounded_corners_ui') + $borderRadius = 5px + border-radius: $borderRadius + + table + border-radius: $borderRadius + + thead > tr:first-child + th:first-child + border-top-left-radius: $borderRadius + + th:last-child + border-top-right-radius: $borderRadius + + tbody > tr:last-child + td:first-child + border-bottom-left-radius: $borderRadius + + td:last-child + border-bottom-right-radius: $borderRadius + table display: table width: 100% border-spacing: 0 - border-collapse: collapse + border-collapse: separate + border-top: 1px solid var(--light-grey) + border-left: 1px solid var(--light-grey) empty-cells: show thead @@ -118,6 +145,8 @@ table td padding: 6px 12px border: 1px solid var(--light-grey) + border-top: none + border-left: none vertical-align: middle *::selection @@ -147,8 +176,8 @@ if $site-name-font #site-title, #site-subtitle, .site-name, - #aside-content .author-info__name, - #aside-content .author-info__description + #aside-content .author-info-name, + #aside-content .author-info-description font-family: $site-name-font .is-center @@ -183,10 +212,11 @@ if hexo-config('lazyload.enable') && hexo-config('lazyload.blur') && !hexo-confi blockquote margin: 0 0 20px - padding: 12px 15px - border-left: 3px solid $blockquote-padding-color + padding: 7px 15px + border-left: 4px solid $blockquote-padding-color background-color: var(--blockquote-bg) color: var(--blockquote-color) + addBorderRadius() footer cite diff --git a/source/css/_highlight/highlight.styl b/source/css/_highlight/highlight.styl index 370390c..16d3ea3 100644 --- a/source/css/_highlight/highlight.styl +++ b/source/css/_highlight/highlight.styl @@ -1,6 +1,6 @@ -$highlight_theme = hexo-config('highlight_theme') -$highlight_macstyle = hexo-config('highlight_theme_macStyle') -wordWrap = $highlight_enable && !$highlight_line_number && hexo-config('code_word_wrap') +$highlight_theme = hexo-config('code_blocks.theme') +$highlight_macstyle = hexo-config('code_blocks.macStyle') +wordWrap = $highlight_enable && !$highlight_line_number && hexo-config('code_blocks.word_wrap') @require 'theme' @@ -47,9 +47,10 @@ $code-block code font-size: $code-font-size font-family: $code-font-family !important + addBorderRadius() code - padding: 2px 4px + padding: 2px 5px background: $code-background color: $code-foreground @@ -66,6 +67,7 @@ $code-block figure.highlight @extend $code-block position: relative + addBorderRadius() pre margin: 0 @@ -104,9 +106,10 @@ $code-block background: var(--hltools-bg) color: var(--hltools-color) font-size: $code-font-size + overflow: hidden & > * - margin: 0 3px + padding: 5px i cursor: pointer @@ -124,7 +127,7 @@ $code-block if !$highlight_macstyle & > .macStyle - margin: 0 + padding: 0 .code-lang flex: 1 @@ -133,16 +136,17 @@ $code-block font-size: 1.15em user-select: none -webkit-user-select: none + padding 2px .copy-notice padding-right: 2px opacity: 0 transition: opacity .4s - if hexo-config('highlight_lang') + if hexo-config('code_blocks.language') .code-lang flex: 1 - else if (!$highlight_macstyle && hexo-config('highlight_shrink') != 'none') + else if (!$highlight_macstyle && hexo-config('code_blocks.shrink') != 'none') & > div:nth-child(2) flex: 1 else @@ -168,8 +172,6 @@ if $highlight_macstyle -webkit-transform: translateZ(0) .highlight-tools - padding: 0 10px - .macStyle display: flex @@ -191,15 +193,15 @@ if $highlight_macstyle .mac-maximize background: #35cd4b - if hexo-config('highlight_shrink') != 'none' - & > div:nth-child(2) + if hexo-config('code_blocks.shrink') != 'none' + & > :nth-child(2) order: 8 &.closed .expand transform: rotate(90deg) -if hexo-config('highlight_height_limit') +if hexo-config('code_blocks.height_limit') #article-container .code-expand-btn position: absolute @@ -228,7 +230,7 @@ if hexo-config('highlight_height_limit') & ~ table, & ~ pre overflow: hidden - height: unit(hexo-config('highlight_height_limit'), px) + height: unit(hexo-config('code_blocks.height_limit'), px) @keyframes code-expand-key 0% @@ -240,7 +242,7 @@ if hexo-config('highlight_height_limit') 100% opacity: .6 -if hexo-config('highlight_fullpage') +if hexo-config('code_blocks.fullpage') #article-container figure.highlight.code-fullpage position: fixed diff --git a/source/css/_highlight/highlight/diff.styl b/source/css/_highlight/highlight/diff.styl index 83f3e17..6d8db97 100644 --- a/source/css/_highlight/highlight/diff.styl +++ b/source/css/_highlight/highlight/diff.styl @@ -1,6 +1,8 @@ figure.highlight table - scrollbar-color: var(--hlscrollbar-bg) transparent + // scrollbar - firefox + @-moz-document url-prefix() + scrollbar-color: var(--hlscrollbar-bg) transparent &::-webkit-scrollbar-thumb background: var(--hlscrollbar-bg) diff --git a/source/css/_highlight/prismjs/index.styl b/source/css/_highlight/prismjs/index.styl index 1b73837..1427826 100644 --- a/source/css/_highlight/prismjs/index.styl +++ b/source/css/_highlight/prismjs/index.styl @@ -6,7 +6,9 @@ if $highlight_theme != false #article-container pre[class*='language-'] - scrollbar-color: var(--hlscrollbar-bg) transparent + // scrollbar - firefox + @-moz-document url-prefix() + scrollbar-color: var(--hlscrollbar-bg) transparent &::-webkit-scrollbar-thumb background: var(--hlscrollbar-bg) diff --git a/source/css/_highlight/prismjs/line-number.styl b/source/css/_highlight/prismjs/line-number.styl index e37215b..97b2133 100644 --- a/source/css/_highlight/prismjs/line-number.styl +++ b/source/css/_highlight/prismjs/line-number.styl @@ -10,7 +10,7 @@ position: relative line-height: $line-height-code-block - if hexo-config('code_word_wrap') + if hexo-config('code_blocks.word_wrap') white-space: pre-wrap else white-space: inherit diff --git a/source/css/_layout/aside.styl b/source/css/_layout/aside.styl index f9c1bae..a716c01 100644 --- a/source/css/_layout/aside.styl +++ b/source/css/_layout/aside.styl @@ -8,19 +8,14 @@ padding-right: 15px +maxWidth900() + margin-top: 20px width: 100% - > .card-widget:first-child - margin-top: 0 - - +maxWidth900() - margin-top: 20px - .card-widget @extend .cardHover position: relative overflow: hidden - margin-top: 20px + margin-bottom: 20px padding: 20px 24px if hexo-config('aside.mobile') == false @@ -28,16 +23,19 @@ &:not(#card-toc) display: none + &:last-child + margin-bottom: 0 + .card-info .author-info - &__name + &-name font-weight: 500 font-size: 1.57em - &__description + &-description margin-top: -.42em - .card-info-data + .site-data margin: 14px 0 4px .card-info-social-icons @@ -61,6 +59,7 @@ color: var(--btn-color) text-align: center line-height: 2.4 + addBorderRadius(7) &:hover background-color: var(--btn-hover-color) @@ -86,6 +85,7 @@ a display: inline-block padding: 0 4px + line-height: 1.8 &:hover color: $text-hover !important @@ -112,8 +112,9 @@ .thumbnail overflow: hidden - width: w = 4.2em + width: w = 4em height: w + addBorderRadius() :first-child @extend .imgHover @@ -130,14 +131,14 @@ & > time, & > .name display: block - color: $theme-meta-color - font-size: 85% + color: var(--card-meta) + font-size: .85em & > .title, & > .comment @extend .limit-more-line color: var(--font-color) - font-size: 95% + // font-size: 95% line-height: 1.5 -webkit-line-clamp: 2 @@ -158,13 +159,16 @@ a display: flex flex-direction: row - padding: 3px 10px + padding: 2px 8px + margin: 2px 0 color: var(--font-color) - transition: all .4s + transition: all .3s + addBorderRadius() &:hover - padding: 3px 17px + padding: 2px 12px background-color: var(--text-bg-hover) + color: var(--white) span @extend .limit-one-line @@ -288,9 +292,10 @@ .toc-link display: block margin: 4px 0 - padding: 1px 6px + padding: 1px 8px color: var(--toc-link-color) transition: all .2s ease-in-out + addBorderRadius() &:hover color: $theme-color @@ -397,9 +402,9 @@ .card-recent-post order: hexo-config('aside.card_recent_post.sort_order') - if hexo-config('newest_comments.sort_order') + if hexo-config('aside.card_newest_comments.sort_order') #card-newest-comments - order: hexo-config('newest_comments.sort_order') + order: hexo-config('aside.card_newest_comments.sort_order') if hexo-config('aside.card_categories.sort_order') .card-categories diff --git a/source/css/_layout/chat.styl b/source/css/_layout/chat.styl index ea12227..6b9551b 100644 --- a/source/css/_layout/chat.styl +++ b/source/css/_layout/chat.styl @@ -1,17 +1,18 @@ // chat -if hexo-config('chat_btn') == true && hexo-config('chatra.enable') - #chatra:not(.chatra--expanded) - visibility: hidden !important - width: 1px !important - height: 1px !important - opacity: 0 !important - pointer-events: none +if hexo-config('chat.rightside_button') == true + if hexo-config('chat.use') == 'chatra' + #chatra:not(.chatra--expanded) + visibility: hidden !important + width: 1px !important + height: 1px !important + opacity: 0 !important + pointer-events: none -if hexo-config('chat_btn') == true && hexo-config('messenger.enable') - .fb_dialog, - .fb-customerchat - visibility: hidden !important - width: 1px !important - height: 1px !important - opacity: 0 !important - pointer-events: none \ No newline at end of file + if hexo-config('chat.use') == 'messenger' + .fb_dialog, + .fb-customerchat + visibility: hidden !important + width: 1px !important + height: 1px !important + opacity: 0 !important + pointer-events: none diff --git a/source/css/_layout/footer.styl b/source/css/_layout/footer.styl index e398510..69553f3 100644 --- a/source/css/_layout/footer.styl +++ b/source/css/_layout/footer.styl @@ -5,7 +5,7 @@ background-position: bottom background-size: cover - if hexo-config('footer_bg') != false && hexo-config('mask.footer') + if hexo-config('footer_img') != false && hexo-config('mask.footer') &:before position: absolute width: 100% diff --git a/source/css/_layout/head.styl b/source/css/_layout/head.styl index 79274f5..06e89d4 100644 --- a/source/css/_layout/head.styl +++ b/source/css/_layout/head.styl @@ -146,6 +146,7 @@ background: rgba(255, 255, 255, .8) box-shadow: 0 5px 6px -5px alpha($grey, .6) transition: transform .2s ease-in-out, opacity .2s ease-in-out + will-change: transform #blog-info color: var(--font-color) @@ -345,10 +346,10 @@ margin-top: 8px padding: 0 width: max-content - border-radius: 5px background-color: var(--sidebar-bg) box-shadow: 0 5px 20px -4px rgba($dark-black, .5) animation: sub_menus .3s .1s ease both + addBorderRadius(5) &:before position: absolute @@ -364,13 +365,14 @@ &:hover background: var(--text-bg-hover) - &:first-child - border-top-left-radius: 5px - border-top-right-radius: 5px + if hexo-config('rounded_corners_ui') + &:first-child + border-top-left-radius: 5px + border-top-right-radius: 5px - &:last-child - border-bottom-right-radius: 5px - border-bottom-left-radius: 5px + &:last-child + border-bottom-right-radius: 5px + border-bottom-left-radius: 5px a display: inline-block diff --git a/source/css/_layout/pagination.styl b/source/css/_layout/pagination.styl index 6d729e3..3deedeb 100644 --- a/source/css/_layout/pagination.styl +++ b/source/css/_layout/pagination.styl @@ -37,47 +37,40 @@ .prev-post, .next-post @extend .postImgHover + position: relative + overflow: hidden width: 50% + height: 150px +maxWidth768() width: 100% - a - position: relative - display: block - overflow: hidden - height: 150px - &.pagination-post overflow: hidden margin-top: 40px width: 100% background: $dark-black + addBorderRadius() .layout - & > .recent-posts - .pagination - & > * - display: inline-block - margin: 0 6px - width: w = 2.5em - height: w - line-height: w + .pagination + & > * + display: inline-block + margin: 0 6px + width: w = 2.5em + height: w + line-height: w - & > *:not(.space) - @extend .cardHover + & > *:not(.space) + @extend .cardHover - &:hover - background: var(--btn-hover-color) - color: var(--btn-color) + &:hover + background: var(--btn-hover-color) + color: var(--btn-color) + +#archive + .pagination + margin-top: 30px - & > div:not(.recent-posts) - .pagination - .page-number - display: inline-block - margin: 0 4px - min-width: w = 24px - height: w - text-align: center - line-height: w - cursor: pointer + & > *:not(.space) + box-shadow: none \ No newline at end of file diff --git a/source/css/_layout/post.styl b/source/css/_layout/post.styl index b5a8583..589ad2f 100644 --- a/source/css/_layout/post.styl +++ b/source/css/_layout/post.styl @@ -87,6 +87,7 @@ beautify() margin: 0 auto 20px max-width: 100% transition: filter 375ms ease-in .2s + addBorderRadius() p margin: 0 0 16px @@ -98,7 +99,6 @@ beautify() margin: 0 3px padding: 3px 5px border: 1px solid #b4b4b4 - border-radius: 3px background-color: #f8f8f8 box-shadow: 0 1px 3px rgba(0, 0, 0, .25), 0 2px 1px 0 rgba(255, 255, 255, .6) inset color: #34495e @@ -107,6 +107,7 @@ beautify() font-size: .9em font-family: Monaco, 'Ubuntu Mono', monospace line-height: 1em + addBorderRadius(3) if hexo-config('anchor.click_to_scroll') h1, @@ -181,7 +182,7 @@ beautify() background: $light-blue color: var(--white) - .post_share + .post-share display: inline-block float: right margin: 8px 0 0 @@ -203,6 +204,7 @@ beautify() padding: 10px 16px border: 1px solid var(--light-grey) transition: box-shadow .3s ease-in-out + addBorderRadius() &:before @extend .fontawesomeIcon @@ -238,9 +240,9 @@ beautify() position: relative margin: 0 0 20px padding: .5em 1.2em - border-radius: 3px background-color: $noticeOutdate-bg color: $noticeOutdate-color + addBorderRadius(3) if hexo-config('noticeOutdate.style') == 'flat' padding: .5em 1em .5em 2.6em diff --git a/source/css/_layout/relatedposts.styl b/source/css/_layout/relatedposts.styl index e064202..744ca14 100644 --- a/source/css/_layout/relatedposts.styl +++ b/source/css/_layout/relatedposts.styl @@ -7,7 +7,7 @@ font-size: 1.43em & > .relatedPosts-list - & > div + & > a position: relative display: inline-block overflow: hidden @@ -17,6 +17,7 @@ background: $dark-black vertical-align: bottom @extend .postImgHover + addBorderRadius() +maxWidth768() margin: 2px @@ -27,11 +28,8 @@ width: calc(100% - 4px) .content - position: absolute - top: 50% padding: 0 20px - width: 100% - transform: translate(0, -50%) + @extend .verticalCenter .date color: var(--light-grey) diff --git a/source/css/_layout/reward.styl b/source/css/_layout/reward.styl index 4043aa2..5cf3a62 100644 --- a/source/css/_layout/reward.styl +++ b/source/css/_layout/reward.styl @@ -14,6 +14,7 @@ background: var(--btn-bg) color: var(--btn-color) cursor: pointer + addBorderRadius() i margin-right: 5px @@ -33,12 +34,12 @@ display: none padding: 0 0 15px width: 100% + addBorderRadius() .reward-all display: inline-block margin: 0 padding: 20px 10px - border-radius: 4px background: var(--reward-pop) &:before diff --git a/source/css/_layout/rightside.styl b/source/css/_layout/rightside.styl index 7d2832c..45c9726 100644 --- a/source/css/_layout/rightside.styl +++ b/source/css/_layout/rightside.styl @@ -32,12 +32,12 @@ margin-bottom: 5px width: w = 35px height: w - border-radius: 5px background-color: var(--btn-bg) color: var(--btn-color) text-align: center font-size: 16px line-height: w + addBorderRadius(5) &:hover background-color: var(--btn-hover-color) diff --git a/source/css/_layout/sidebar.styl b/source/css/_layout/sidebar.styl index e058f7c..1f30593 100644 --- a/source/css/_layout/sidebar.styl +++ b/source/css/_layout/sidebar.styl @@ -26,27 +26,33 @@ & > .avatar-img margin: 20px auto - .sidebar-site-data + .site-data padding: 0 10px hr margin: 20px auto .menus_items - padding: 0 10px + margin: 20px + padding: 15px + background: var(--sidebar-menu-bg) + box-shadow: 0 0 1px 1px rgba(7, 17, 27, .05) + addBorderRadius(10) .site-page @extend .limit-one-line position: relative display: block - padding: 3px 28px 3px 20px - border-radius: 6px + margin: 4px 0 + padding: 2px 23px 2px 15px color: var(--font-color) font-size: 1.15em cursor: pointer + addBorderRadius(6) &:hover background: var(--text-bg-hover) + color: var(--white) i:first-child width: 15% @@ -55,8 +61,8 @@ &.group & > i:last-child position: absolute - top: .78em - right: 13px + top: .6em + right: 10px transition: transform .3s &.hide diff --git a/source/css/_layout/third-party.styl b/source/css/_layout/third-party.styl index bc3226a..aa20ed4 100644 --- a/source/css/_layout/third-party.styl +++ b/source/css/_layout/third-party.styl @@ -79,31 +79,45 @@ if hexo-config('mermaid.enable') margin: 0 0 .8em padding: 6px 0 16px -.katex-display - overflow: auto hidden - padding: 5px +if hexo-config('math.use') + .katex-display + overflow: auto hidden + padding: 5px - if hexo-config('katex') && hexo-config('katex.hide_scrollbar') - &::-webkit-scrollbar - display: none + .katex-show + display: block + + .katex + display: none + + &.katex-show + display: inline + + if hexo-config('math.hide_scrollbar') + .katex-display, + mjx-container + scrollbar-width: none + + &::-webkit-scrollbar + display: none -// Mathjax -mjx-container - overflow-x: auto - overflow-y: hidden - padding-bottom: 4px - max-width: 100% + // Mathjax + mjx-container + overflow-x: auto + overflow-y: hidden + padding-bottom: 4px + max-width: 100% - &[display] - display: block !important - min-width: auto !important + &[display] + display: block !important + min-width: auto !important - &:not([display]) - display: inline-grid !important + &:not([display]) + display: inline-grid !important -mjx-assistive-mml - right: 0 - bottom: 0 + mjx-assistive-mml + right: 0 + bottom: 0 .aplayer color: $font-black diff --git a/source/css/_mode/darkmode.styl b/source/css/_mode/darkmode.styl index 2251ee8..de4b749 100644 --- a/source/css/_mode/darkmode.styl +++ b/source/css/_mode/darkmode.styl @@ -16,6 +16,7 @@ if hexo-config('darkmode.enable') || hexo-config('display_mode') == 'dark' --tab-button-active-bg: #121212 --card-bg: #121212 --sidebar-bg: #121212 + --sidebar-menu-bg: lighten(#121212, 5) --btn-hover-color: lighten(#121212, 40) --btn-color: alpha(#FFFFFF, .7) --btn-bg: lighten(#121212, 5) @@ -139,4 +140,21 @@ if hexo-config('darkmode.enable') || hexo-config('display_mode') == 'dark' #card-toc +maxWidth900() - background: lighten(#121212, 5) \ No newline at end of file + background: lighten(#121212, 5) + + // artalk + .artalk.atk-dark-mode, + .atk-layer-wrap.atk-dark-mode + --at-color-font: alpha(#FFFFFF, .7) + --at-color-meta: alpha(#FFFFFF, .7) + --at-color-grey: alpha(#FFFFFF, .7) + + .atk-send-btn, + .atk-badge + color: alpha(#FFFFFF, .7) !important + + // waline + #waline-wrap + --waline-color: alpha(#FFFFFF, .7) + --waline-dark-grey: alpha(#FFFFFF, .7) + --waline-info-color: alpha(#FFFFFF, .5) \ No newline at end of file diff --git a/source/css/_mode/readmode.styl b/source/css/_mode/readmode.styl index 906b50f..8ead478 100644 --- a/source/css/_mode/readmode.styl +++ b/source/css/_mode/readmode.styl @@ -37,11 +37,11 @@ if hexo-config('readmode') z-index: 100 width: 40px height: 40px - border-radius: 8px background: var(--exit-btn-bg) color: var(--exit-btn-color) font-size: 16px transition: background .3s + addBorderRadius(8) +maxWidth768() top: initial diff --git a/source/css/_page/404.styl b/source/css/_page/404.styl index ea8e056..5bd23c4 100644 --- a/source/css/_page/404.styl +++ b/source/css/_page/404.styl @@ -1,69 +1,66 @@ if hexo-config('error_404.enable') - .error404 - #error-wrap - position: absolute - top: 50% - right: 0 - left: 0 - margin: 0 auto - padding: 60px 20px 0 - max-width: 1000px - transform: translate(0, -50%) + .type-404 + .error-content + @extend .cardHover + overflow: hidden + margin: 0 20px + height: 360px - .error-content - @extend .cardHover + +maxWidth768() + margin: 0 + height: 500px + + .error-img + display: inline-block overflow: hidden - margin: 0 20px - height: 360px + width: 50% + height: 100% +maxWidth768() - margin: 0 - height: 500px + width: 100% + height: 45% - .error-img - display: inline-block - overflow: hidden - width: 50% - height: 100% + img + @extend .imgHover + background-color: $theme-color - +maxWidth768() - width: 100% - height: 45% + .error-info + display: inline-flex + flex-direction: column + justify-content: center + align-content: center + width: 50% + height: 100% + vertical-align: top + text-align: center - img - @extend .imgHover - background-color: $theme-color + if $site-name-font + font-family: $site-name-font - .error-info - display: inline-flex - flex-direction: column - justify-content: center - align-content: center - width: 50% - height: 100% - vertical-align: top - text-align: center + +maxWidth768() + width: 100% + height: 55% - if $site-name-font - font-family: $site-name-font + .error_title + margin-top: -.6em + font-size: 9em +maxWidth768() - width: 100% - height: 55% + font-size: 8em - .error_title - margin-top: -.6em - font-size: 9em + .error_subtitle + @extend .limit-more-line + margin-top: -3em + word-break: break-word + font-size: 1.6em + -webkit-line-clamp: 2 - +maxWidth768() - font-size: 8em + .nc + margin-top: 5% + padding: 0 20px - .error_subtitle - @extend .limit-more-line - margin-top: -3em - word-break: break-word - font-size: 1.6em - -webkit-line-clamp: 2 + #footer + display: none & + #rightside display: none \ No newline at end of file diff --git a/source/css/_page/archives.styl b/source/css/_page/archives.styl index 309e00c..35efa6b 100644 --- a/source/css/_page/archives.styl +++ b/source/css/_page/archives.styl @@ -78,8 +78,8 @@ border-color: var(--pseudo-hover) &-time - color: $theme-meta-color - font-size: 95% + color: var(--card-meta) + font-size: .85em time padding-left: 6px @@ -88,7 +88,7 @@ &-title @extend .limit-more-line color: var(--font-color) - font-size: 1.1em + font-size: 1.05em transition: all .3s -webkit-line-clamp: 2 @@ -98,8 +98,13 @@ &-img overflow: hidden - width: 80px - height: 80px + width: 100px + height: 70px + addBorderRadius() + + +maxWidth768() + width: 70px + height: 70px :first-child @extend .imgHover diff --git a/source/css/_page/categories.styl b/source/css/_page/categories.styl index 8b80107..9e65061 100644 --- a/source/css/_page/categories.styl +++ b/source/css/_page/categories.styl @@ -16,7 +16,7 @@ .category-list-count margin-left: 8px - color: $theme-meta-color + color: var(--card-meta) &:before content: '(' diff --git a/source/css/_page/common.styl b/source/css/_page/common.styl index 32096a5..9e25c20 100644 --- a/source/css/_page/common.styl +++ b/source/css/_page/common.styl @@ -20,7 +20,7 @@ +minWidth2000() max-width: 70% - & > div:first-child:not(.recent-posts) + & > div:first-child:not(.nc) @extend .cardHover align-self: flex-start padding: 50px 40px diff --git a/source/css/_page/flink.styl b/source/css/_page/flink.styl index 57dd50a..db01b6c 100644 --- a/source/css/_page/flink.styl +++ b/source/css/_page/flink.styl @@ -14,9 +14,9 @@ margin: 15px 7px width: calc(100% / 3 - 15px) height: 90px - border-radius: 8px line-height: 17px -webkit-transform: translateZ(0) + addBorderRadius(8) +maxWidth1024() width: calc(50% - 15px) !important @@ -56,7 +56,7 @@ margin: 15px 10px width: 60px height: 60px - border-radius: 35px + border-radius: 7px transition: width .3s ease-out img diff --git a/source/css/_page/homepage.styl b/source/css/_page/homepage.styl index e81311a..84883f7 100644 --- a/source/css/_page/homepage.styl +++ b/source/css/_page/homepage.styl @@ -1,21 +1,39 @@ -#recent-posts - & > .recent-post-item:not(:first-child) - margin-top: 20px +$indexLayout = hexo-config('index_layout') || 1 +$indexEnable = hexo-config('cover.index_enable') - & > .recent-post-item +#recent-posts + .recent-post-item @extend .cardHover - display: flex - flex-direction: row - align-items: center + position: relative overflow: hidden - height: 16.8em + margin-bottom: 20px + + if $indexLayout == 6 || ($indexLayout == 7) + display: inline-block + width: calc(100% / 2 - 8px) + vertical-align: top + + +maxWidth768() + width: 100% - +maxWidth768() - flex-direction: column - height: auto + +minWidth2000() + width: calc(100% / 3 - 8px) + + if $indexLayout == 1 || ($indexLayout == 2 || ($indexLayout == 3)) + display: flex + flex-direction: row + align-items: center + height: 16.8em + + +maxWidth768() + flex-direction: column + height: auto + + +minWidth2000() + height: 18.8em &:hover - img.post-bg + .post-bg transform: scale(1.1) &.ads-wrap @@ -24,36 +42,77 @@ .post_cover overflow: hidden - width: 42% - height: 100% - +maxWidth768() + if ($indexLayout != 5 && ($indexLayout != 7)) + +maxWidth768() + width: 100% + height: 230px + + if $indexLayout == 1 || ($indexLayout == 2 || ($indexLayout == 3)) + width: 42% + height: 100% + + &.right + order: 1 + + +maxWidth768() + order: 0 + + if $indexLayout == 4 || ($indexLayout == 5 || ($indexLayout == 6 || ($indexLayout == 7))) width: 100% - height: 230px + + if ($indexLayout == 5 || ($indexLayout == 7)) + height: 17em + else + height: 230px + + if ($indexLayout == 5 || ($indexLayout == 7)) && $indexEnable + &:before + position: absolute + z-index: 1 + width: 100% + height: 100% + background-color: rgba(18, 18, 18, .4) + content: '' + backdrop-filter: blur(3px) .post-bg + z-index: -4 @extend .imgHover - &.right - order: 1 - - +maxWidth768() - order: 0 - & >.recent-post-info - padding: 0 40px - width: 58% - +maxWidth768() padding: 20px 20px 30px width: 100% - &.no-cover - width: 100% + if $indexLayout == 1 || ($indexLayout == 2 || ($indexLayout == 3)) + padding: 0 40px + width: 58% + + if $indexLayout == 4 || ($indexLayout == 5 || ($indexLayout == 6 || ($indexLayout == 7))) + padding: 30px 30px 25px + + if ($indexLayout == 5 || ($indexLayout == 7)) && $indexEnable + &:not(.no-cover) + position: absolute + top: 50% + z-index: 2 + width: 100% + color: var(--text-highlight-color) + transform: translateY(-50%) + --text-highlight-color: rgba(255, 255, 255, 1) + --card-meta: rgba(255, 255, 255, .7) + &.no-cover +maxWidth768() padding: 30px 20px + if $indexLayout == 1 || ($indexLayout == 2 || ($indexLayout == 3)) + width: 100% + + if $indexLayout == 4 || ($indexLayout == 5 || ($indexLayout == 6 || ($indexLayout == 7))) + padding: 35px 30px + & > .article-title @extend .limit-more-line color: var(--text-highlight-color) @@ -75,7 +134,7 @@ & > .article-meta-wrap margin: 6px 0 - color: $theme-meta-color + color: var(--card-meta) font-size: .9em & > .post-meta-date @@ -104,7 +163,7 @@ display: none a - color: $theme-meta-color + color: var(--card-meta) &:hover color: $text-hover diff --git a/source/css/_page/shuoshuo.styl b/source/css/_page/shuoshuo.styl new file mode 100644 index 0000000..b7f8609 --- /dev/null +++ b/source/css/_page/shuoshuo.styl @@ -0,0 +1,53 @@ +#article-container + .shuoshuo-item + @extend .cardHover + margin-bottom: 20px + padding: 35px 30px 30px + + +maxWidth768() + padding: 25px 20px 20px + + .shuoshuo-item-header + display: flex + align-items: center + + .shuoshuo-avatar + overflow: hidden + width: 40px + height: 40px + border-radius: 40px + + img + margin: 0 + width: 100% + height: 100% + + .shuoshuo-info + margin-left: 10px + line-height: 1.5 + + .shuoshuo-date + color: #858585 + font-size: .8em + + .shuoshuo-content + padding: 15px 0 10px + + & > *:last-child + margin-bottom: 0 + + .shuoshuo-tag + display: inline-block + margin-right: 8px + padding: 0 8px + width: fit-content + border: 1px solid $light-blue + border-radius: 12px + color: $light-blue + font-size: .85em + cursor: default + transition: all .2s ease-in-out + + &:hover + background: $light-blue + color: var(--white) diff --git a/source/css/_page/tags.styl b/source/css/_page/tags.styl index bce33ae..d8f407a 100644 --- a/source/css/_page/tags.styl +++ b/source/css/_page/tags.styl @@ -2,12 +2,16 @@ &-list a display: inline-block - padding: 0 8px + margin: 2px + padding: 2px 7px + line-height: 1.7 transition: all .3s + addBorderRadius(5) &:hover - color: $text-hover !important - transform: scale(1.1) + background: var(--btn-bg) !important + box-shadow: 2px 2px 6px rgba(0, 0, 0, .2) + color: var(--btn-color) !important +maxWidth768() zoom: .85 diff --git a/source/css/_search/algolia.styl b/source/css/_search/algolia.styl index b2f4067..87f36c4 100644 --- a/source/css/_search/algolia.styl +++ b/source/css/_search/algolia.styl @@ -10,6 +10,11 @@ background: var(--search-bg) color: var(--search-input-color) + .ais-SearchBox-loadingIndicator + position: absolute + top: 18px + left: 67px + .ais-Hits-list margin: 0 padding: 0 @@ -66,7 +71,7 @@ #algolia-hits > div - overflow-y: scroll + overflow-y: overlay margin: 0 -20px padding: 0 22px max-height: calc(80vh - 240px) diff --git a/source/css/_search/index.styl b/source/css/_search/index.styl index 669428b..79986d5 100644 --- a/source/css/_search/index.styl +++ b/source/css/_search/index.styl @@ -7,9 +7,9 @@ margin-left: -300px padding: 20px width: 600px - border-radius: 8px background: var(--search-bg) --search-height: 100vh + addBorderRadius(8) +maxWidth768() top: 0 @@ -53,8 +53,7 @@ display: none background: rgba($dark-black, .6) -if hexo-config('algolia_search.enable') +if hexo-config('search.use') == 'algolia_search' @require 'algolia' - -if hexo-config('local_search.enable') +else if hexo-config('search.use') == 'local_search' @require 'local-search' \ No newline at end of file diff --git a/source/css/_tags/button.styl b/source/css/_tags/button.styl index c4b2c3a..51ff9da 100644 --- a/source/css/_tags/button.styl +++ b/source/css/_tags/button.styl @@ -10,6 +10,7 @@ background-color: var(--btn-beautify-color, $btn-default-color) color: $btn-color line-height: 2 + addBorderRadius() for $type in $color-types &.{$type} diff --git a/source/css/_tags/gallery.styl b/source/css/_tags/gallery.styl index 2c0aa95..fc817e7 100644 --- a/source/css/_tags/gallery.styl +++ b/source/css/_tags/gallery.styl @@ -6,13 +6,16 @@ margin: 6px 4px width: calc(50% - 8px) height: 250px - border-radius: 8px + border-radius: 10px background: $dark-black -webkit-transform: translate3d(0, 0, 0) +maxWidth600() width: calc(100% - 8px) + +minWidth1024() + width: calc(100% / 3 - 8px) + &:hover img opacity: .4 @@ -95,8 +98,12 @@ padding: 0 0 16px .gallery-container - margin: 0 0 16px + margin: 0 0 20px text-align: center + opacity: 0 + + &.loaded + opacity: 1 img display: initial @@ -109,18 +116,20 @@ button margin-top: 25px - padding: 10px - width: 9em - border-radius: 5px + padding: 8px 14px background: var(--btn-bg) color: var(--btn-color) font-weight: bold font-size: 1.1em transition: all .3s + addBorderRadius(5) &:hover background: var(--btn-hover-color) + i + margin-left: 4px + .loading-container display: inline-block overflow: hidden diff --git a/source/css/_tags/hide.styl b/source/css/_tags/hide.styl index 2442e93..a379397 100644 --- a/source/css/_tags/hide.styl +++ b/source/css/_tags/hide.styl @@ -6,6 +6,7 @@ padding: 5px 18px background: $tag-hide-bg color: var(--white) + addBorderRadius() &:hover background-color: var(--btn-hover-color) @@ -35,6 +36,7 @@ .toggle margin-bottom: 20px border: 1px solid $tag-hide-toggle-bg + addBorderRadius() & > .toggle-button padding: 6px 15px diff --git a/source/css/_tags/label.styl b/source/css/_tags/label.styl index d7b814e..5b08c50 100644 --- a/source/css/_tags/label.styl +++ b/source/css/_tags/label.styl @@ -1,7 +1,7 @@ .hl-label padding: 2px 4px - border-radius: 3px color: $btn-color + addBorderRadius(3) &.default background-color: $btn-default-color diff --git a/source/css/_tags/series.styl b/source/css/_tags/series.styl new file mode 100644 index 0000000..5c9139e --- /dev/null +++ b/source/css/_tags/series.styl @@ -0,0 +1,5 @@ +#article-container + .series-items + a + &:hover + color: var(--pseudo-hover) \ No newline at end of file diff --git a/source/css/_tags/tabs.styl b/source/css/_tags/tabs.styl index 2447a1b..0d176a6 100644 --- a/source/css/_tags/tabs.styl +++ b/source/css/_tags/tabs.styl @@ -6,6 +6,8 @@ border-right: 1px solid var(--tab-border-color) border-bottom: 1px solid var(--tab-border-color) border-left: 1px solid var(--tab-border-color) + addBorderRadius() + overflow: hidden > .nav-tabs display: flex diff --git a/source/css/var.styl b/source/css/var.styl index 09e4129..4605a31 100644 --- a/source/css/var.styl +++ b/source/css/var.styl @@ -13,8 +13,11 @@ $code-foreground = $themeColorEnable && hexo-config('theme_color.code_foreground $code-background = $themeColorEnable && hexo-config('theme_color.code_background') ? convert(hexo-config('theme_color.code_background')) : rgba(27, 31, 35, .05) $theme-toc-color = $themeColorEnable && hexo-config('theme_color.toc_color') ? convert(hexo-config('theme_color.toc_color')) : $strong-cyan // font -$dafault-font-family = -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Helvetica Neue', Lato, Roboto, 'PingFang SC', 'Microsoft YaHei', sans-serif -$dafault-code-font = consolas, Menlo, 'PingFang SC', 'Microsoft YaHei', sans-serif + +$chinseFont = $language == 'zh-CN' ? 'Microsoft YaHei' : 'Microsoft JhengHei' +$dafault-font-family = -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Helvetica Neue', Lato, Roboto, 'PingFang SC', $chinseFont, sans-serif +$dafault-code-font = consolas, Menlo, 'PingFang SC', $chinseFont, sans-serif + $font-family = hexo-config('font.font-family') ? unquote(hexo-config('font.font-family')) : $dafault-font-family $code-font-family = hexo-config('font.code-font-family') ? unquote(hexo-config('font.code-font-family')) : $dafault-code-font $site-name-font = hexo-config('blog_title_font.font-family') && unquote(hexo-config('blog_title_font.font-family')) @@ -59,7 +62,7 @@ $sticky-color = $light-orange $theme-meta-color = $themeColorEnable && hexo-config('theme_color.meta_color') ? convert(hexo-config('theme_color.meta_color')) : #858585 // sidebar $sidebar-background = #f6f8fa -$sidebar-width = 300px +$sidebar-width = 330px // aside $toc-link-color = #666261 $toc-mobile-width = calc(100% - 80px) diff --git a/source/img/butterfly-icon.png b/source/img/butterfly-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3992d7740488b06e1e1b2e268f3a6af72dc23110 GIT binary patch literal 275383 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 z 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%0DKg^36uq^-XBeg839qsa&^Ed6%fof>heHs z6sD)s9D+0+4dLMHvGlMCFA8n=Y;y0*kj1~EYxg@yPgG9HxOlt!dI{Mf=ieltkK=7@ zBACu4gjIj&&_`%bjeC1vyRCZ4>N&zd;EFOA);4=t85zSm?7=|x5+X4~rAO3vQrZd$N3{&c=;H8ym zv%M?g98Aj8-06^e~>z^4LreKkA+y@Xm__H9R3Ky zM~(`>f#7)*0<~_C2@KDGW;kMVz&jDZue_ulS#yzi-qh>Zs>1`6J^k;ooH|h(AJz_( z1^O(1ksmJE*d#%#=7}fo%2O{M{PKOm&@je9=4TThI6CS%_mN`!eUqB;OA1AO@y8_N?D^8CiwOoO{T;^+p zWR0mZC8V;*uF4<0J8CuSvH{cakzA)d$a~aHWi6^P!z0szEIRS+#oorl2=&Ik`m++` zicpXR$8AkpeM*sRF5Rw3z4)0z_ zu_7w$91s}rnT+Oey_+bIhXYRC0;(N&EJ>Q1me6rq3YG|bj0m_C-CUbSPok~b6WBP` zZNd*{#_u>qh)sO|?l}V322Su34`zCah^YtHY^klfmVsge8+uHsPhgex)`^ttesEb{ z{Dn7ha~Rc6vEKgiF?{QUFHRiyvzXq#;2)eFILgm^yP1*5w@G>Nvjio(^5A!6 zN^7z5e8`_T1Ahga3`sxfQS^Hg^i#PujAG1JJa-~~xQ{bNAX>eC#ZzMAA^-3&|97hh zzpgu;(co$lkmMx%LqgD?GK5Eu(s!arVZaAb$TKzE8exyD+A;8z28Z1wL?<&AurZQ* zwWf9dLnO2bVX~O3F7c2lUylxGE;38Jh6<36R8?bIOu6=YeOf_5FC_S;|7$)%*zst+ z3#-v0YL>%TCd3>6>36@P)O5yg=`Zgbn?gQ$;?Q!ml3bGZZ2943sz;VFnK*e8%3*Ah zfNE)V-j<1O#srn)P@IZCCkEVOPOt+DY)zEioMuCuReK8$GayKV=R-K)zzo+&K&l&c zKS0&*h&QHSP2Znvi7ZV6&#~lE#MDHpy7^P*=|4KKjo1eaxGmhiCO|tr2U<{%T#ze9 zfuZsW#Y`BkW9H0r=(nxa<`Fc$z5aHRrlJWj^vfGu7Nq^F$R%_WgNJj@L)^BJiV!O4 zDYdUS>6ok6``x4Lw;6|1L_IVoI7dDFSnsg$Uv~>xgkvgs@q^(v6NA&rormx9p9x{F zE1+-{&=n+UndeB4^ZLJUucyl)eEAy}1Qrq+K#^M^QqfELsZVEHLuey<8wPg9sY7gZ zKH`9wcFKc(T5Bwj@I-hK`bV516wyz$b1zpAI0VQ;27u7o#c`}U#wq6n2z5-JQ?M4} zMpdu>lAt#jWla#iVNzShn0LD4Sh1EyAcydhIV##pKv6X&`(E*n(*s{>^_$;pMpM&_ zV}sS1LG>-Fb@W@S969RO(?`a07PZf;lKyM_PP3u!c6?ayNC(RnLob|iLM^kw`p-`@ zrOdi_*QS?CMHBHkA{ED@DvF5)qID=J>q1#j4LvC{+L6Z2k|rx9BC-S#b$zQOC@}XU zW(ol{!~mA&n)hgE@EG;trlhDPWQrg@Oms7GMwsAy0X;rI_L5$Wz~^G%$$a z8=(!aHLl09g1!aVfeTB1uxe~aCYB#pd8)4*akTw~Su@V>1=k_mBPMX|?8LHZtA=&x zuM0cs8`7F=I-!!ftcls55wa+10j1Z1e1Mq~71X^E{v(j1f(2DIVdrFzxp|C}_EsrE zH2*~Xjbxe2e1#huXSIB~E0Z7@b}WvzQfy14BVI=cOoiAy;~|SkgAXV+gd%Yep_=WN z#09BFp3b88=?qzCmB+mA584G`w_JnYpRmx1TyHixuhn|P4p+{Nb z@G1*@{%(=@^KO^&9%2@~k~*)7IFmGnXfr?KqB>wVe{fa)6#Qal$jPxWcz{=LFw zv<>qT%o%T&f|)X^{V`I<3GB7y^NLKn$(JsaQ!GBZWF6$21(dccEQ9$N*EjEKZmiYs zFGffmbe!DN?5q=`X2mejW(S|TVNM1~Q&G_OfyS+6=qn#mci?g}aHSg-oXc^#%rIe% zBA-8Oea%W_?T-BCLHy}^IS(X2^MYSdI-PUm{}AwDy>qaYNz{-4uidA44U$_y4accvf;E(b-Y#j; z`N1pP`KRNz0+n{xgbM6a7)X(Rnl z`a7+oLn%i}k58bT=q1+a%x!sU`Y?{q9kQ>zjR206}@is zabxK5UFX~xK#z7inVv;FmuV@QiCPq8LLjR4p(ai}0Mn4PDG!LtNRl@fBvgx?Vl+XW zqIDT?I^GlE^NL1e747?kKfHkac>;y^x#SvH8*`G@)@~k}$Y-X$W+g@Qk-ls3mTnVe zevMv~+%p$9Q`9ut`h+EFfcxyz*kzLlFQ)(6qBnlIlzcs!X-CrlM_NrVM02UhdBh)L z&TN+{!sBb2lrgG9T2N7-lF0{3CR9&#lZzc_F`hlj@AR7&<$)hhU=^YC3l9tyAL%%| zG@V|NfpdabzDkJ2%Ap7epDdZ$YM}Aie`S5Z&6+I~oYRE%%x;+YrAse$--eP*X=m(L zw_fCe(t@GZZW-7JTx51jMY`bI-gBeYd4>#VK~ykRW5c7)E2)}&ay z9@HBEq0UfDXoEmu(E6tl{iEevm+De!5Za)ARaaT+)Jn^V_bgXw~Ea=ObfoC#_Xy%rU zP~Fx3G=+(yPiwr#&N^Q?NfR7IV6W99hK-Kw|1$Y|D;=5foh_@O;u#S?s4t9`r)1g4 zr3%??kGTpr6l>42M^Qw)m{04qaR zmyv-j>QEEr$pNGa{o{a}tL6-9FW;h?f~IxGpLOTev#k({P|Sz2OA&!<0cj+OzCVSk znAc-Zn2U$jJe5Gc+UyY=Wl&WHoY7!hxm+PtptX9>Pa!&=M( zQDh&*yIha(Y2o$i{tblrWFt)_g~B`_V7Qnje1578Dtl zpWKnbf5>=?_qRU8OuQzeq?%QWPP}DC789=0+k>9my>&JkMZh?g^h7OK43Lm|UWcq? zzsC$0|DgX86mmeKmCXyHX`=0|D3eJ9w`BS9MyQV?AY&;lX(W{epqVJ4Ul6+;5bQT z(S*CDe!m1@y_}V)yJ%o;iX0HawP|PKx$?uWCv11PRDal`KZEqDbjpkQCn|>~zRxmF z{99_DCf5Fsg|RLLS6OV~$9sS1Ih0WKcqKWuMIi3x_Hk?aKG~Sv2o{a$?-pOi_b2LU zUWQLD*nRHv!dLz~s#&&S1HGQt<`<|3-1geG|NNb|s+vD}#llrI2p(@8BdcZCouyN?5zzKbP zcGGq$!<>aqfT`*PB3(w=J2Y11xrlNaE7g@tjuRnntp}>fEpG3&hovXwJnBwyzhu93 z$-U$|zs*2$y2GpD0a2| zcmqj8F8cE*M3RgQyXwb}fysKkL6enhdX1G!#ZSZQ{SO~>)ke=GPuE1hFyd^7m!qdsczP~rHVN2t-WU8?77-=LlwakgO% z|5KQ?z0p;ae7M$q<21JJ+Rukfb3Ahz`;~vx6t&6>YYPu_1ZC-gz(S8WtJFOR&xn_T zBUnz1KN<(epNn${}19i0H1j9S3s2m1XqLWEAji< z2(th8GYRI+XwV4UR(f!xMeNqqCaXqSpPSW3-o6?N_^}mw{BZ<~tjf&h(xfE!Eq>>L zJ9^KR-wbGfxMs{%RV>zlBVH~QFu)^$x^Z|7AR0!*h8T@en-&^=TS-0V)KZEpRCpuo>R7z zcl<8~l>h`{fGR-QGJRCwKNh|PgBC@Ik^)ULAqLo{&OJ~QlGmQxLd*XL5vVk-iw`wO7Rv{dgTtBpi1M42g8LJLfDral^?$%`z4AV9vV@+_<5b_UR?z zGi}a&=?OqD2MGKvAl~Pn2;rZ^MR!~L%Vmg%PvRl)vrdrNFn|-hp(X3ERcRn(ZX>F; zFH!3t5(Em9p%|A|YOHDul(AQ%0p({ zifS)%G{3)F!)Fkf!TN4EyCu|I@olKP13WRnVJZkJ+q}MJApm}*qMjEFUjtKWl|ic! z^nlJtVH3OD(~<=?%i*$F{Kt%RhJYLAf~Qsr4$rxGx{MD=3h??DuX31r z;u?$wTJEEX(g$`6;qS-C&R9ouA0Jla%D^+Ry1nx3e6!-zkg6xPn`!KDQ%+v^&Orm4 z#Et5^eJ{m-dF=r#AZ#z)QJ8rtxUamwNF zOtgE4@#A1<`EyAn2gjMvv(?CCA zhPN_B)#$cxEoa$oQ6~{d*sDQsxI}_ z3I1sw%(*e<6M$my^X&pMKFq_PzL`)*EM`OARzP_0OnRQVNjL?gpyF{zcZrLBm_O;$X1T8^N17>)_k#XelzGF@Aa3<{|EH!pe$3}ksd}o2UE@D!zi{yg+DZ8%UYTs9Wbo=BP#3x3q@p`Gd@KeX# z4;6m8d;MRDpU3#m+$FsRNzPClAK~NI>LZnB7WrH--z5++{cq%Qw^41 zKWa9h_bW&Zv^ipABXRK(7k1{caeR1HLW5CIJ^I&%X&hK@LI9tVd0f3P#D~T(X%0m8 zXh5Ww_aHY$Fxp!HKElqZJ{@pVV$<{(Bk{n03$^DB$oEiHx!MYH0}%=LE^n&|FKPP3yVf21QKTGcno3HjJorEh^ZQ9^{PfWeU>Vu+0l=7fC5kJL})8^u&&y{ zN6~i%-a|_8MCHiW5~>js(d_-NvuKc!fuoh}V{fg#K}LJk8{%ZKtKk+sy|12-g}Q=sZhFus6Z_(_V*)~tz56#SUZ#&v2TD@5RtaZ)%WLSCrL*MJA&;NB1 zE{X|q4;$qwLdy!ld{0V<`*l2T)YkWwX{g>8hnl3rl?QhtcST1cdZ;?kk@q~g=U;UA=R>b52@`$PDnO1O)mx z*4ezj$`J1%O?5-3v>qH|y$`r=@qg376&Qjs$G8Fpy-WdEQ}w z-&V8;^{b{elT#-cPLfks?9l+}_~S(_5(h|!(yMm~zQ>CtI35ga7SjaMpY4#f>+Gt$f^grs8>b`Z~wXb(yP9 zQXU{lkNY0256`gUrsum@K=x%rI9rO+&I7m6ilbi1m6hI*+vlqA)q-8J!865oI0%yD zJCuJ_{j=n1$dgU3{G7ZmVxc>LO~EIj=!QPeY>?{d~;Uqu7ylS`)2P~s=nc_ z_wzbkj>3>^9D-Ov6}@;U*VW1aUVh{vG+Rftt>rb~tXrB2J&<=5a*+QmDd9aqACm2v zgm}@UghsDulzx)nMTW@TKKfSEWhZV$F!;Xdjfm}1a~HBtfQL!uD-ypfzn`)M^|QdE z?tvf`5Pvh=$B=&7T1L{2Vot)vh!zfq$O~fR_HXcKPEX8mEED)nk7Ct17G{?Ld`roH zY?Nr>4Ww}+1jucFhtO>~8K>K%bn31p!9EJa`BkZ#6?lr5lbfNZTo8>=dib|t9VONu8{3K_>F`%ev=#uCWI$H zu|^)zoklh}3=1zhc{UbQ`}4{pVSc|Y%KY2p^+|%agC^su{-4$UqRR1`6_l;I-7|ok z1JzQq2S3PmSZDW~TgQjXXc$V_#gFh8&W*FQFV!D|$_dZtz!w!8UVDTdJ#;(iZBj?$ z`z#$pK+{*}D}whlbP@mddl`+D*?Q67{6>`1&3aHuB}5oA;*m59@;o0|<%9@$9JLyr zl8$_X2G;MRKWZkAMm(}4R^6M8`JSK4jg$oV>ze8IKf-mMkIMbtkYH7;-nH4HD@%@< z&a`2mp)qJ-wI=UBf3QXUsY>{xT}lkw%1lO<#49I7l-=3YmN`1gn{o?aTs; zb9relGgjG6{lDwyYw^6F$dM z81ZuH*5Q?>E}X+TTRp0_`02>MNK@VUzz^SiUN3HNXQE}?@hZXJI=;rs+ZCA6!~Z9Y&mjOY^& zUd!RfYl8S6ZeLV>Ln{J!lskS`M?`0o!$K`E=PTcRG zN~&cEn@=%i`agzs`y#eyvW<<6fB$atK;a?`B3WzW^lgpwKn-R@-Z|0rm2S?;P5!%L zui`@DBDLLkrtwxE?9!93pJ0%&G5KWJDnEanF_<~^roQ|?bM+rtci@(LqvG#^?Pe?? zn=D1rVib#~>SAkUPs7=ae`thJSokR=J#CFvP1(Tml5I5WI%A>FiBk@%flLKL{0C|G zyv$7%F5mu7jjDKq`>Djw9#)Mk*i#`Aelgm-@JOn2n(@K~*R%Vhw=!i z9I1VGIW8_q;vMLUuPphSo0CZuR=Qf0`N^{!=4?J0K{+isRo?tNg#3)CJ73q=g zNjlDw+J+1Frfj8fN>q%PoO!^qPu*>=j|1I41ZMp+0hV7f&kw%R39cGeSvAf)uW>7# ztz}HmC@%ix{ob7|1;^%qqmSL=TqC!945gTh3NN)|$l799O}cc11j);bniz4iFy(of z)UV>72c~wPWv;RJQf>xUo%wp*Kb*+5?JDiFjvLR+iMNJ%!@*?zRV4$Hr03MATc!MC zV}FdJDZ>Q{%vGvj7 z&NH0Dr_Ya>4LH57(5X>i^Q*CPSF9l&sTeC8~*AT%|g64idE6R97kjr8_4!fNM zM7LJ^N5ZbRVft~wPPXYnz59%JRX@YnW$u+U^m+lKn_(v+K?w!=H{^RNzq8|??h@Dt zPv}UR_8@f}Ua^44{x{JC1`x(6Ij zlUk0i{4G3%ACsC9BNw|QlNvERIkSX(XzGJ44-00Z{BD&2x$?sfwT`|FE^uFuEHNA%0 zVK*Bg6Y=7hbpNNT9JNx@?@V&e&55wRoW~lC@=&zmo>pSdpWYIF3CN;IX6)iCHoW{5 zB;@{ap6=Q8@swej%rBpH{tti#9k)>9mH=KU7EIs-3H~)a_?E~V(E9_dZ=@}UOVMJ2 z#lQzwpLr}!3Vv|n`9G%!D;>W|B90IjO~^r!G#CVhZbfVR3cZ)ut~Xx1sk?ZKbm9Qe z?JGPXptAj)2Q5~*f4w{6)N}fr{e!zJOVtC|$OBRJbmPCH?{;1(nD&~jJXbWZ>SD_J zM9Tkzuv!>}h9}l|C{`jebC_Q$W>T) z2FWFjEZ~_^v&Xo zzY>{bJl{dhm4S<>10$K?H^RoI1(P}TO!t||*Cvkd`P>*gd_rg39N+s*Q(x&#;L^`$ zQh0ohH9qWpAmTC0^It%WyZC8YSDg6!x_Pd+ZrZJkynDOz%HNSL?N@gpd}2W_2i7G; zwiTAeJ|sf@9DDtWi;I9nx?2m zFGG#{y%vk#$VhX&cylURo=Jl3W3WTSy=#0xS!$*MlQ#qMKS*YpYXK3tGoLgr%nX86 zSl|=iNM`O+6sE10J!7B*Y5LIn3P{YUlYvHZkUcv_doW1+ICE;J0t>6=<}rJNcPOT) z_*_i|e#wBi{Gy^SZ$t79ryKrEORUA79sYa5IX!iq9I>H4r6rXZHTTJhe4)dDcnG|9 zT;;lV&l&y&0Ui-{5MAowl~_C|H?MQJIZ)%gCqf#Y%lZQb68+IAelu*eT$%Le{sSBO zWs%9e*EH@2G}P369Ez^XQxbnev)Nn4gn8liyD^6wocT;bb-BSb{{ABrFF3Gc0*LlVDYS`Dc1(x4k4Q6nmQp85OeK6ElZ;#@U^b&?p5w68KZWR zdoMl{3`8x~vNV})TN{7R6Q+llKKORerE%0jmLYlkXnFD92atHCt42yRg@uL5`+mny znVO&57ADw+ z0gXN;L|=G1DJ`r`{27-X8XuRJb={v$(1Ahrb?4X8t0B00TTSPh)J#Dv`;iXrWp>He zy1EyJn5Dt=v|Fyrlov+!q5~{hG=-H zAc)b!AVaTig#h**_*HU=pW!`^+Y7(0ogx9&fSx8IR^A^VUPG1G$wYR z&P>^dINf>wTRDH&kp!y-XFDAdeX=CgXge_i%H#$z`0^^{mO zZ+W2`F=Uwp6Ru*9C-Qe$zV@_nO$1Cjs_WB5UPFfeS~K$h7!(;dL0^2fKcHtspfd4y z$g<^Ap@sbp_B!jso}$0K6|EYE$gWg=EMt53O_8o!o&l61rT{Lvpf2a@&q;5u3&<0e z8!>Doq8BgNnMETYZ`%bIO-zzWuxk)$ihKuL1qs@28I6nQ9D{mQ-5|a31hN8A@nwG@ zhFha>fZ$&|zObwX+D8ZP6ATH`boNVEuh3mCYnnEvdV`4KV7>A7r+kAxOQmsos;y=(_z*@r0b5#N70`s*9nv zI`k?w>T5w9T{$BjT|~X5`?Nw&kojc~O=azbPyBt`5EWYAx2;QUzuk7X5c1-r{l>MY z_mY#tfnKX1l2AR7pz?ZiM#V;AyRhV~`!F68NBB|l(#APWVe+R5M9hNv@8O|CHS@p} zB|Bhot5M!^?Vuqo?BkA!Ya4u|n{mJpnM+%sc9gz%#C3&pV=|#frJ}5zy=MAL;mkej z+fZ{sZFg4#zuuX(gK5j;&9rb5x!}jh2?=c~3-4`3PKR5vtZuPOe@%P??z!5zE(^Lw zxB_suTguj}lN7i~OW!ME7CEd@``aU?jl_M9VMTi5_bskL@u}ANc)ray38^RtB#gm~ zc(e}U?hn}|v4GHE3FHa@pLZ12i}6H0^xI=55@zDr>;a(|#CvaQ!3={a%lXpQNN~Rl zyNXY6Qe+=~nNlOHg)m+VT5w%Y>EId|o$R1mcl@*hv=pJGCWM2to$5}*f7$#O#R$c1 zZ@t^5tCmkWRt<9=47@szwBSk-4NEQ3%~Bn1JGB0K#_S!UkB>oa@f(LVC`YFI$6 zj$fLq-DFbQ&zg^<6`OyTmXebls*{?spCNAIBYYym8dQEQWIuaSJl$PPc;vthWpb;R z5HYd&_4h2BP!s0bYsGdPcjIL{G=J!?avK6;^i)$q;?@4|MzcsoZ~RlLm>B+0d#alS zZzk9o<-odp3FTbmqxV zX=sy?W*HRZDhbHKFYUD7U&4KH{b_96aJ9z$h{;OZ*{Al6E)>w`JYo?1x zHvsXjqOPu>pt1PH>G8-%T0f`H;qs28<55iY+Pbt%6qI>~fW!QE|-hX1F zBaPk(IAH#1LofU+OD>8HA7T(lA&zb@MsC)*2z0~yul)<9L+6NAGsc_6Upfsy z(O@(fH?9N4xu59foUbWfC!w6#tZ#;AJ8**I>xYm|0zW0MzWLhT#Q99^mj`MR^YQGeEKIE`33m|F!G8elCxDo+e=^ZjGL?1B|8<;ZKDkgjk1I z@UnUN=3LlVIb8F+Uly+6jXmGr6}@7KqeT^eX)((;#l4sR??s_Iz~vS!q>*OBO48JO z(t^vfW&8Qp<`O9@3taoz*Oh$suB!$VH9jmnHzm}EntfV(eP;a6cTvYXii^?2QKxqKVKZ!aSMXS%+kq?23NrG3-TiA$`wPKA4qm zj%L>6a>*4gwOCXE(&Hb}fgLPj&sAUjWTqXuQdaun<>FFK8dYwhkG<4GFhd7W$eG1o zWdPj7b-|y@5V`dp@cz{1w?)8?5_cC0-jS3xN`Y-G8}tqnIJE@0k&P*fn?TkRCi)cE z<9*_*FV&?$BCG=RUpjWf0oXc&Sr!!+o_%+shWdk+Ps5M>FM(*a8-(etb#j~lj#W;v>SACm>1dv5X0 z<%;9u8ruD`K~$#N51DZ*vOnfC2>*g|y)E#OzQ3Lji#kC61)rAN^uE@Mk^Y(Pg6RO6 z>7eaw67WVkc|>EUw{E+q(gIs9u6%ez&#QW8^wJq5CqEhwB?o6mT#0pi;tOI8+vX^w zfCt23DO6Esbj59u5Zinic6r28`0FnL4ziAh5A=uO1Gn=1mC&EFGTjeoQwU`{4K?(v z_iM=9yT9YA#aQAe>qjR4t{w)aiLD(~^<3_azH)r4N-`??Zq5NBD@tI4I5b{qttwPH zC9@{_gPk0Bx|#l5*|}3zZz{s{Y5GCg=HeI}U({2CaWt`p&c65zREx`_ybycv( zG!)d|_@0VBhOu8yVYn!;RN8?F{D$= zKSp=k_(zP#aw%+rq);K*-qdc4`PBd73TjFrS1fOb0n@<+m{tJS7%PnxkfcE%Q1-0# zE)HJ#1x}@uR;N>Z$K}T&?9UK<9j*d>90FS=-uo>z3_46j*gRct2tI4 z@O}6QdhKYaviNbWtG7$xwe-L1v3bawuYLE=gg-_Vkppn-hN6Y5SV>I>%#UipF89>j zU6N|QvwF29xScnZUb0(RX>vYlCEnSd`6^AWIx4XI@h^BzvJ@nqc*5*7_EFiO9DGA# z-c74PH^!U_&S(@cq}QK7oCT@DU7ChFV3hl?sSB#mx<&?=XL!5eqjJD7&Dj4Zl~+tO zEJGNChY-96cIVzY?)fy15jMieu=$h~Ew)XE5CflCj=e&Xs z8M3v>_n%Y}zU^+?Te@k&^5jC??i8IEEJD6OK8hi4c=9F8CL5&t`tEE983zn7s02m@ zMx8T|HEUiyoHbF)$`aWcwT$Tp( z0{B6EA++M+QRth$15$ck=Y9r6qzIpU>FPhsi~Xii=qLhgDB$eglY!Sl;0+VeyBZrz zwjCeq5J-w`@W0hXsZNXBFy_n%Z~HJOJ>q|ItoHbO(HsfkEiuRZ<6^*#I*9VFYZpmp ztoYWa_r??4le9tQ0+%vds9cCD3SdIO_OG@Nl_O!Fx|7mXJB%;XS20;(h`47Vw9fSL zz)+(Mi$PX$=NJAfa-lCM-M6XoL6g25y8xdb1FDIvUNg0T7tT^}1{2X-E zBj+w>fg$I;faUk6K5xEKiQOqten5Ov>Q_GeUymL4HA4aJSK{`dE>{V5Fqcfy!( zSz>J5I5izm?M<4rN^XpRK%VDi%b`tvv1P`+q$Az@cqsi>i)BA&s`}bKVpYTJj?lA> zZvuj)<0dUo!*7c}kIvWn0y8~?PAnRsz``Q@cMXj`mtVPWr=aTE2s{7Nm^YJ%k0zIw z=*x9oxk0~GMauLm&!2OKo*Ezx1TU0*k4ICR_Ol9D&8)sE=c^evpZ9WP{9J?hKHNIH zHAm>O<$0gQ&v5rVJx&}T{!=in7_pQXkaIikE>f2zK)8dsr&<;Sery8pa^&j7M;l%X z0bI#5W~bcm?~HwOF1+|iF^o606+LT1|6p)+7uaxJc-+OcBa@lhs1y?U1YwLgcJE3U#UjXcLaf9y8 z7Uf@yjY`$J19N3fVYj-P|DpQZcKb`8{8x0g!4*R#Q}vdL9!zNf*%RU=TP}n~7}3I5 zM9|pMBMWY+Qcm3=5>t=*1Be-W;EH)vbhv%&T}>*M7k3t*4ME0nx>Q>r(zCUBMnim+z$a9h=`Z*}kKGe|0mKHeYsItR!O zWO5Z&mM)N2VsK{(B(yjUP{r_Eu3|fKtIuaJ+W$uR2fBcU=&zcD?z^3gX|}pgVJh3nfOeH>cigw zo3xJ-NWZA{&wKw$L)^uAcIz-aQiSZ$L3xJG2Xjy^Ar*^$S=k_$+Tg(n(y%osDR2q7MjC{GZVrG z9fA}PMC_Z`NU9sOKgrO{Xr`=BixRLGwub1we8CIFFVI$pVIHF=lh?+6K)RtgZ5K%P zD6G-Fm1A`y^ z=$9q653g8|uH^JA6ROrpMEy@9X{+bv)aTPZ%ZqqSDd0N#-8q-C9U!CB&_|OGmqdLX zY@6qWf_9SrA_yhe?y>V#JAfU_n&UA(f=p!+7)Un;y_&q5@Pf%v=gp-*kK)8bB!s?o&V-_a19W4BsR z+$*J}7&}AG?Ys_W*zG$L{qbY3Jy^gzr=}LmA7R?I4&lnO~x&0`p_zqG4@qPLN{lk(PGmmTX?$rAIKP{t%7Y7=P^ ztBb6n*-F21xt~WC76|P0mCo1B0){201%y>Obl>yb&uF1Yx-mE!5WlWWT9}iOQW`~E z54j!$30a>qkA&`fS$pMcsfW?uf&cB-zW1M9s(?g7dv+0CPjF6H>ld)7B|G z9Pm8o3WKdEmG9F#lryaBP+St_wz>Asee}zyi=PjRDRKY{jFb|$h=&4OXgQ1hI>0xL zxuC+ILSI}EWvsfE2u#KSVX+6+;KlwKL{q`M7){jsbi>tM#&h}gEx$MRk4)fe@6t>s zr7_oe1Jt9}wKsJErqS-Ft(;zmt7_TsH8vm~KAoD*QvYgkY=EOZID~~f-{ex+TpM9M zVQ-h_IP*j09hqfqcwg%REN-ZHAW%OAOA*-4n3~w=JGcLY8 zZ2L|c+p;6Ois?j=4vmU5_0YH8?8_;^;zzp%B(qWCb&GLJZNO3Lgd7d+dJ1} ziG){Pik5c;<=~ZkDGLu6uWsa^!BIfF=VHG~1N7|6EaXiK@#q$vc2J42BgzOR;?(xZ zL2NGiu;=kDGn|Ms8xdRqiB~i|00AjHpbwz08Sr3X4A;Tu!|vUV&;)>IV+M%r{~Q_j zjK<7Kp&`a=5m3^Gq#bozC?4^zGu{n0^tc0hJ&PlbWVy~co5}n1`>JLWi~XJ0)0@>m zS4WuZ>`i~%hh`F+pUyD6(SMgS4zKSF2$D^IaTjgdx!dc$Y2j#xg>iHTo0fZuay}hm zl`Z&SiubQp>s;Vx3UIkNMn~XF3H4H7!g3=Gd1{z(-x=x~s#cqOk=~jeu-SFI^X~%r zuTU3>32YF=il_rILCc(aCp%8~@_yx91v@rZ zLjqv!{IpDj$uMvh23HiOuc*0_ZmLcVz66GmYHG}UEt&c*jS3D%waSyL{<&i0Y(L=i zIOC)l`ASN%+Ltif-I-@+Od3Yh)6>I2RHE6JnL9r3?Wvqmxp_WouFrYmtl|$Y2%2nK z05P(sIuqoSKfuG0TPyhE|Gj=Gp*cwn#tfiqLlNDtHB&h-_?qrPl1% zd0am3>|58*O^vr4GBo+9Zp-QmM#22!k*mjGLuJA3?bP}cj+965KI=vOl9=||KVCz0 z?}yfzm!upEPIa)u-u%tFzGj&Gx!QszOKyUya9dv^n0nu=p+ZbTvZ1`meFfi{#LL|I zV=L{b9Hq%PMf89Nyb1peENGnymt`!KB?dljVxC`7F*Meq1opije>(de^f~jqkCN&& zKj!}!;Bw%Ly(GCx(BXdp+kvRI!R)oWOUNIv$(ed1FlC~I1C%ScowDVzD8zx&Exd;B zZ@Tu_T!(6A+LS2hKJTUbBSZGK+`Df7mT>$pp@D#o7>op84`Sc~4(?GS#5HjAw4Fad z+BI`@JE(4&Ph}$(!UBBmc@AY@+MER2g-p4J@s}@2Eq@WwAnTF>`q+Hun}YF8jUYWf zR0n!*&Shwh=&9{zE;e|usXO!&8_)_7K&jkhyVPRB-Nre)vETSk%JyT-t~#4|o^Xf3pfuNnLRH ze97XKf3<(wwphj#a+jqCyG25=KfN3!t8{C?dsnwdNme>R@4=E3XbAGDd#@}7tGYD% zO%Pa9CK@xxD^HLAjjDwzXvM%ytPfyEkq~fThrpB*{h(z#cvQ{zUye%nv9H$k_}oMG zDw1n}<;M0WOX@{YW)RNBBf*Z+2q^<;bueofP)b=)SCE}e;)D#ZHHE(+UYqj;1L2Sx z`In-94|W68ZwZ;Z4L_TItI~6D^UAN-Ofj$Arv}gYiyWoiVJY&vOEEtM$OfJP|LIvR zukGJ$ZYRHuc740!g4%gRAiIE!t=y0$`PB~Jb688km)8T+JO9EVGl3YH;ctk?4xOP1 zf9w8G+QREJ=6waNeid7?7N))^iS*YX&1}DHTiiqH3sEDZH!N>C&p76N_bQfe<#A6p zseH)uR{fd^4M0m>MGh3rUj&@2bzSgEN($O3DY`BlS4CFP)BCfkEWOFZnug|FUEx;0 zy+mkl?^E`c9UviCvdI`7S>08Yf*8L3!YfuwKijmFl=HQQsq37&ow0rWrutpCS%)(l z8zc8TvbJ{3)ADQx1u(5p(XI&4JGNv8+>7T1JK~JRB}I`^Lp|nAQTf@r`PV45)|EZk zasy9B3cMI|pghD7huS{p)(_GUZH&)w7&!Z@25~q=00O4^mNYishT}|{O?d@` zPQ*hXq3aj{UZ8c)z757aDVl&VjOJmeh6S}eZ6--k)Y?<-WiRpleQ%G2BAoKt%KUNO)7C!DHb|o+(QUL_s3F~1za;efHV8H)n+t|DV#PDpB z2`^}QQfOC90&E}+6!m%l3J-{N$>sN26=VW zEpU2I3)XO4HQq@|QM%L;`~X5GO@xp?r0MSArE+eNHcQumUZ`9xDZWZ!`ZM4m6R>|R z)!)i;^6>?VE2E8)PH<#?_ea0Gv*yg!b2UG(7s#xE=b;SL{Espo37SQ_ueII+n0tEF zHU=K~25ZnbYBjaGcwexLO%=;1eUj+X`D1ChL*!ysmKR8#HUIGra?$9&q=H&2HBG;c z<(VqE=x*)Z+5`6{zi=OyNg5K~C&eetBTINVxfTfwO3!06ncguFXJ_?~RSI6h8SF@Z z)1~hFTB&{I!}@M#<$viQKYVm`K*5XQcT*WTa--qH2N&NUEqk&0+XAcSs);9BWbMpb zoUC0?^IK{T{7fK~`i9SiiTlJmfopDV2WZHjDDz`Q7I6I7te;Bk>5fs*D~;LbZNyyn zWHqzuN!dF4$SxE;Mm?jdis7cg#$nPNiONJh_$4KdDwnauXk5SW4I)G`h_E^-4fr$z&>=5-Tg!UfHz7A!j~OeS5h1ueRm2 zT3l%RSqJJ}Y)6hjOVS0Iv9WQV5a;Cyb6@n??@HtwU7v^S6(U)+qhDs$?XSwNc~;DC zbLpq1G}kvnP5r#s9VY(adhpjIl2Eq=Adj_9oH(l3gn*jQZ>{{dS8x*Nj*j?kx=Dh= z_!_jJY2k0XMPR!N8pDfK+YiW^S`B#?fR5v;_qnjYcSGd`FE=@k8q6@36aBl2!*BE^ zg$gb@%;E77R-{03$J^0%A-+v}k8$n}?zb=+cgI0%5Zq2o)eIH%Lt6^JHsv!p0p8 zJq&-iJMz+JQh~fVyjXxQVSfCi3*f(izO{3l&? zYhh)~xI~1@y7k%Aqknqgg8A?%?a)+8$@!ni;$YgiLhavudfWe&3(fwBu&m;jmX;ix z^rnr*KuU6?hT7HsL00GRn=7R(O4OxUL3=hoP4pWb36Ro*zCw<(4JT3zna1+J#!~Q> z?yWw+!R~=95h-}u#po}Cw1s(3`Uj!oC7l?Nf2&dQ;YKP) z`ce3S!uxtp=x1-Rb2`uO%!G5^HZ2^9*ZD)E^i2V$-PoAc3&s7{r$5yop1g|Q%up&7 z`L7TPw73+|(Z|il78$U8=|7cr_3w!5m;Y{ID%~AtW3eVQm3+=t?~g`dMNcQu21mkW zQq88a+wpSKr%jL8*T^eTCy`H)a>AeLkAAM!pxbU6SvJPhDMy`Fj&I`dwpeF6#nT=Y>TMT%+C)x`o7+lruvnW?MsRIe;N*8tpVM(CmeW?Jnbs21|Agx_T1FR zZ0E1szAAebUC>C)EHjwmK3@)qtH|*`r-|DkL?iLn0qW3QG?N~G{-GOctrx^I1O0;9 zCKi0JcEzt2hu#=VrmEk(ny&-$IY3+;W(FEW35RZ7`NPx`R)Z|0-mAY!0-hl|9rnL$ zO<5)uH*++cYJH|ijy*_MY(!u9D(DLvr$0c1VyL-4FUki^vRJ~E@VjiHCN zD~b<>^xMDGw*c-nHrAz&-CzxnLOw|%)7K1R<+=KuIltSjT7l5u|lww03pyM z#D6EPmY2Kp)wAzf$BH`H+eG>$>7WxEWn;vv0!+EbX(}} z4=5gsn9>o==@2}2w>s}()prc2_de39% zSGDX7qolS&_m^pFl*^o+EIQ(GejVRcC2${8Rcu~b61@%avSG?G?;Wi-K3WENnGX>h z?P4bD5IGJGQM^pd*F9A{?o8V*v?=T;An@h{b~S?Afo?g2EWSTLW2}HM+dMz=@K`y` zj*PVL9MOMtLQ*3g4QEjNd+k!*d}=@(v5XpiV50c+?du|!L{&v`@v~Jq z7QA@>?XHsk+w8bLatjC(qyf%>HiklB;Xr{EhIwhP3Sao0A5gYs`C17l3ADtC8~Lvs zQ&3t=l3^DdF%zN##gC!Ui9kNB?hbHvAl>JH0Sd?uf&XZ`b6tW~n&NMx;=uNQZ)F-^ zj+^bJMcwsn#_rITwY!Q)e$ik>m^(VgIP2yuOtjGowNiS0FF>f3y;RiOa}XYb_IkAP zlPU5yk^`~pD6Oym7Mo>nsn|0N4F^7zrTqfa19wQbP1Icxl6FR;gVm=i<@;oYR<{ag z^qq?2y?o4{>F@r;J@;9@IsouM4&oJywc~KwzJFd02mM3bMW1~R$CZ^ekl5+(HJr)^ zBW;8E9rFe&?+`qWLg!8YLSAs#>FXmfb)+Xsri|oe;mX|E7AR(|#bnLhVn^WURZ&A$CU5P2}l=z5SGcg%UZjlWmN)r$)z;tnNgHvU|tA2a6)B1`$O^#B4ZbPyNGThE#=1XQZb~wIJiy%NGP#2 zMAsP%coRsNabpI|cqooDnQU7n0x~n=z(tg3wN+8or+gQW`X1ObV>n;(jxx zJPty7k2lF)Bi4fqzGeWmNep?p+>5@aM@@)U;2Yu^Qo*5a-$ONT2$xo8!^V?ICe@uK~Vj(y-R` z_P20KRqN~wFoT2NnLfxSg2S7s^ zR-1MR%g>jWo{ueIfGLMlAOwK$+#GVWdW>#NDMjKDA2s+#S1a+*!Au0t^WDbgL52%N zTj!xJrVMzPKEvb(2!OZ<2+#A2j=xY`tSQ(&T)w*{vkcuX^@rnML1&5~_(!L!C-lI% z(c_@T0}9|=yPr^`;ohdqJp#vL@cvdI*@3r|n*~X^hcs|d_&H-&13tq)Mv1#@y@530 zr6}DVam&}*%WIa%td-%Sv`sEAd-GG1v=F~8=vUQsHEI^c)cX3`5W(EGxQH}IVpEla z>vEDwymoToyF;QgHu9CHokFbaOhiqyL)g+4r2}^<(%JuKSB^!~qQBUqCERGe_m7%^ ztT&63n}!4sUd1iUZ`+KL>9bfL5nR-S)ktBww;=dqLic982paY1+4}}D=F#-`W2B6ime1?DOiteJZQEENbJ4#>JB9BT@@LZltZXb6`Z zEMrD9GzrD<&u3Ap1(ZLsFRNaBth)T_#R$Qf8S!A~A6L;6SH`-Q0P%Yf)3t*OCCgC6 z9Yg>&utFv_QnDH-#Z$fI6-^3AAu?p(1z8|t4a~$^7Q6!a#Cn4vqOMO5UCIEP;6%$z${ml)V(bw!uGffS$}yy16b?%Uxoi{W|7nwkHFn z0D0it{(Hf1=f(hJI?^DMpGaizsnLi@LsoM`en5D-w1kf_)PEhA<{Q(n)>>>9uZ&2x zjwvZc&vLYBG&FPwTLJ!7)8od6clc%^muUuGS_RXJboh7RQmsVG-_c}I|MOp-6<;BA z`JMGcjyFc(aryDqXJ&Gds&q@qdwu<-(l=Au3+eJqff++n!L#R{93>}+2n_9CW>17X*Kt47`04Q|A>EclU$@s;SPUbN) z3^cnl52d5FzcDvl4gS$&`QPFkdA_Yn++n#GbZbgsfGwtUJD1{F`@jW6xiY=f+Md z%Y$nxQo_(kIVV<1@Nq+V=5X2PLwd?sO;G1#l3!S?-+H6vTQWa1L(U`|>~R&gLOo~! zLjeUTo|)j~U^Tnl)#?n2x%U|{udBqD7_WI!K$TM282DZ__&lV=wPpuOlu(2LZR6#Ot)|kye#D9?bN0oK zm$vJ~NrE1#e~o;F0Y33k#1n0x)voLrLl#g^+-?kaevSm(l9PgkbV{La&Hwm?WA|)@ zmj3~xaDXF|2poTW6cn%(ed1Rp%l_=fZ^ydQ&>xLNxVBwQA&o~O*2QEeKO=e+g9?SX z{^?47#<1E`&v$KJumXP*1||ej_wD`sJ@z;k zDfz2ptC+vi+5x{L`(_R_vTVJ-{Fg1^V(k6o3eq*#MN|u)C+3P)Z`n!y(^Sh|`i%O= zW2-Sp+)a=fwCm>dHR%((k~aw)9rd|wt6wl0VZp<9Lq+Axv#t1J!@@OEaGj47?H;Hh zb(YFJ8cn=ksXoZyh2x0UE6-v(h%5}if@D!3k>u(}Ei+=sthbLJS{d@B3Vubr$Zu_J|j_~Kd7?e{Uzw-CvnK5mXt0YA&dM5s! zn9EKKc=t{pKafzNn4~YN@lMj9uS%-7-Y~6*- zH8KCdhYJ3UwmpSEC9A;@)$S2Z65$K}ds{IenKRZJ&JMw_f^s)EHQw}hpbQqr2ULFL zNW}Kh)ZF-?$aBt%fm1Qpbcl+Yk*`Ex4ld`5OsJ*oGow0wxRK$!v zA9j2)qrd`6E7Mzfg+%cHw?H8JC0QR6|43q}OzGr z`0B{(Xi!QDEmS%t1t}7NeSVM>2u=Z~_Xzw)f|0QbPo~5U;G7{h$p8Zx5G%raJ<)@i z&?gl2tqu{aK`Hh@p-{G&C1F>Ta7+f9WcB19p~|xCynn|{gD832WlM?H{Zk?7u=B&2 ze=k57nr*5Z1pg!TXw#GIPRPy=n@?|{$q}Cv#0?^-Z{odC(6JV=QzN@adOs6y?^#%-%J9Y0!u3@>O$+bf>t2EGHBa5=sX?39>{ro9sTP8(U#r1wb&a!KD z6|9CGb{mot?)G_z=q>v;{O41RzJZs7xTPFk9ur~0miOatDG`JLn{j`GzzGrFT*r$z zLPsHZ-4-UeSUD>t{x7B2{h0wK94oRoFL zg#upk_O!&fnQX_uj1z3$v}Wf~{+Zt((QpM#nTs+?xmcHulCrbI!l9KRUCP;v{f77M zeRND!+8ufLfdt<6^WdFI$d0SlKwZqMCya|+y8idKD3EFq$0EiEgZCs+nNM{kk0 ztM5g}<=!zF&e0A&!bf%}@*_%Bf(^Zmw!X-lx>GDLZXb@1e<&8Y;#$E@8l&9K~W`M5c(b%JZ~4YJ)+mq&gNcjQ_@vC3tM@I&xKw67CD_7aNFwjGRkDlY5l7I>%xN>v(Lrxb)@M7*T%=`v*?n5 zi;*q0@|43|uavnD5hQpC?@BxMK%qx2>R8lpf@9EUTva@VABORN>VV^@zOUIT^)o0d zVM^A7J$-s2>yr*CzE`6s$l|5-WTcFUP}LuIXAD-6g!$GL;`I@YmX~U9T^7aQDg{G} zlZ^o84)q6Z|3u0enE&OdRU+U=rZ+gR$t&MhhV8SkO=jdI`Gzd~^APo4TK0_Lq=x}@ zV6*=^d%Q)C1lK0&H8BtXTn4;k5I|D3l;HM=j>nlJycZdlJ6SIkq?a8O(Z-umU*`t9%joa#yJJ zCld*$k?l{!!%+#=yIST=e^XwA=72 zvS>x{I^->Qvl*~LCjr-j;gGbzUv`@infF-UL3DT^O0?wdsztJZCg`pv0Puw72Q1s*! zrhKb%W+2+f(xJqPyI*xU(W^Sd$q_dlS&cwBo(dln5l7SDZt?>nIzP zy;quBP5pZ}--(bmwWDb!gp!yC`DyE-&QAd{I5a7t5~LYDk0}RE*-bdm_n`0g1N0i! zPUp8awh);;28$%|#4O$&3Y?Ww{?RnANSfl=T;0g-`AF#PDiP=xerga(WqUqNto(*< z)T}MVfFD}p%1*#AM)Vz)6Jp4CJkoShMyzz+A~qJ^Axak3XPBT5Yx<$Gk?lvYXi-2E#Hzj0;X#&ExmUd-7b z#ooS7+)35fz=PkPh7X0kcd*o9YYmL=Me;ZS%X?(|6uTkW1PmMxc~tHka?~D(O%-)H z{H)|y>aH;BysdZUFV&A+hlOCt?cHwsr{tb|{Cc{~$jD$q*YM0U;X3aA$B!QdSL5g6 z;@V>PzY*Y#Z#s(~$s}BSoXNkc9}uf5l+Kl%^pc71I-&nw9UTKcwQA9bwR(vGci(k$ zU6B=nI}SkqfzH6O4em$NF`Mf`8n1aei^hrFA08E1Falw}MA>!o+P%EKRQZp@hzr=d z`vG`K-mIlKo{B=?0*<-A62{m6e`vo^g<$06MZGlv6v#pGuFgdY9|$Mu(m+fK1H}!i zmAzA!@Jlx-Q`z~$I4Ju4JTQH$(W?84H>LjhVcC@7z-)}6#9cQ{^V(7bCyi>@@@mb$ zM@*v0QdUd=r=yI3{+(t_T5ig~pNW@S#>k=NAlJKnns4rFcXO++?Ule*-Y@lBNo~_} z4DhQik*2v7cej`u12xP*;VvyF*&=PE?@X`TA&ouMTly%%Eok^7X6>4qnj_ZE0{yok zHBJQCFMywG-ThkYcM5~y64QjuC$B(a*IkJS7`?#PC0g&O4s!|BK`A&mHcyFOeD7$SRwRjB9J)W@YAD5ei8p z+z&})MnaL>LXu5pu2CsM*<1N4GD7yczx(^^{&^pd`?>GWDcO!UkncM;ws1&SqbM)sebwzntzJdE|w*tlPM zxSVXDcHXhtr(4^EJP~W8`oN78gdYDc=94YjDJ)@NwM}^2J0brVh2S4{#X_W!pRHS7 z${)~Fn(CWk>o4HL`}+av(i!*&mRvOkVr$khy_L<>>h}W|1!QA}3}kS>b(J9xAj2Go z`DxcVuyxWaP;mJ^@jJU_w*pPm02cqlEYCj9APPD`z)Tyj0X0RE+1cU)`aWG0KyCfD zEdM_0U!FMpKFI%=@1~KRo#N$%6bUg?&Ga8XHzj+<58Iv;@jU8<{T^>1ud5E0JUSny z+dpV`_-Sw|ZcNsZCZ5oV1jT3WotRrSs$a3uZ`u8()!lGG%4+mvXsFemtU)14VpAKbL(~YpIgL!^Ja0?Um^EAK zVSqXqq_XZBZKNj@4e7sYM&5&`#036K`_YgfRLfGwn17o2^n^Hivbu(=Nw>XYoZAjZ zfjFKA#!!sr^qa;omH~w=53r}_Uuft`Z|DV_smLG?eR}W_32y$?SYNj#J(A3+X6gVA z!58XW8AbXoU8mpmpaXto-^nd3u-+DL<_!P5loEL?2Bssww^YCvjcIFrK84rU9`@qK zP)vpUO+QOM3H!W}z8Uo3p1k$zI@-=6Kkx2n?wrgrIm%} zf`E?|No`&}hc^&GDtPSDM5_`y@Zq7%(pQw2!1ZSr z1b88;1^a{od9>E(-><~6(76*!jM#w$opgySoPby!81sx{xQ>>4$USgZaLMynYCIf# z0V@c31K9-F8rfdbBw$K6jOe3t=yGA0@&pwrZHI0obPp0n_ zj76;yD1wRvt(wh}Pw!NCPDks9Cb5ih2f4-!I|r>CeT|$P?7>Y7U{2sNPB)Eg3alEO z`PZag+hlgNS^fHDb|g3tHAS-I4cec1X%&U&`Y6nrQ48fw4jkenfxyU?`#WJl7@-JX zfqlsf8vC?Tccs0apaHX7C~9fkCidjnm(MlkG8m|%AOGl^?Q`)FZhtJ;`FdhThM=g7 z#HEzF1nv(U%QdC7S=0VAL&7QFu|x;PU@A@R?PTyzOh|XG_U&EI%=2aiQ0D7L)z^^x zs4@igwlaT|A+TcZsuvRvGU!F$xem^Tz@PTsTG-J8ymw4M7Q_D01h|M*U4jhC&Yv9d z0hQ zmBksT+j z!$@N&Z+&C=6A||@n&b1#6iV zV}B>5s{>*|M+KY6!eKTalCc)HmBn8dOrF{<%KjQ%`D$lc9w4&YmM&4Lqt(s=sKpmv zZ0pjKim9PhZ+C^Jz6pA`Op3UvjtbJw9Zy|7i@FQa5Pw@g=G@&_3H9iVveX9)AXLD1 z;N$b8>Y+QhevbBK<%{BOBgC|?@=aZ+@n@Tk7ch;PVoeQuEtthXwE&7_8Y{FS&(sj_ z#y_PIknaNM@Rxy^-Za-sjWs9a^jg3r&LeOZ7~OB9X#k$G>Ni2udl{U;A4lEkir6b&lsDTEexFdh*VPh^*|Chn!_UKpVn$ z@M6?nu-`0$iKkRc%v6DvOEnPfRv1!R-upUcaxrhTdY7uJ6Zm`lT)qp#R-UF5n%cJA z%nhkvhrdNFiNfrjNx*xZK3?V__MJWkCGx*I(AA|^)kRbkhzIXgl~_TW7<@RouI+wY z%4}Ax@i9F^`1TV7fZ&S{9QdH4EARXxcb=lH@)MuxlDl&>{vExl1(_>Mj$ONGnBn7E zanwpi^@kzm3mChA^~f+&Z@Fl>)A#g9)?uXz56~dEY7}9NE>t1v%dfW`ub4 zd&oF*r^r&f#SPQWOz}8u?;czeEpo45qu8de8EM^jyV2;g+TCzz=~}d%uBjnM_+(CZ z;pJ6rv%O{YAOV%8nyCcRVaFD`>|AEEMUug8Lla}=qYPER(XHu<)^Le94mn7=d zUwQE(#+fB$0$=1NTn-Pu4ZIQ7s9vXDcnFnRIoQk#PAet9^;Q+g?f2=M%#%Ud-HYy% z(W~{eh63(6dgh{QrC32dvjP?*rhA=@&dwY~ff7E|vk-Vq6*Idn;}O=TM`z zGw7?C_VO_j(%R@nD9?S=*HBkmF5ax75_5JI)p%zuD--ed+dH z^1XWZsEdJneF80*@w$VW+aZ62)JG;}Khlgnt=`{b4KbB-+WhcC00puTL}`G4f3XHA zHFqvb*Qn{5B(2cJ^ch!kK%udo`?LROXh9ky7go6Jz0lr<;(^JnujaxCU-t0MnRL~$ z8eQ$N?mOS3gJLy3<_W4;?uXFBr|+5ni{_g&kE1b?cu@Q9H*4 zfMNXLU4mo|OYqA6RBhPC$5(GI3TyAo?BSqPw$$$^Ist@2%@_z#v#df`pspALdrqBPzL_ys4psXzJog z(9(0xkWFO(*^ciWBJY1NP{RXW?W^7UN&kMIbg2KYeLiA(j?%sKz!)T1W+MQvoTLCj zCA2>*@@!1`5%2Rn^mgT+>#l_*fDMnJl)>iz&8E;cG5wK zgk^LQ!Og|)tEh&yE-+9cIt#o>Mia2D_bVg{N>9vh6=DJVX-lE-cxC3R&AbFGEDF+K zyLtQNVL_K%?DhYoZo&sqgHj<`6OJ}6 zF0BjzB1G*f0HC}~#Nh9g%zkni8)~`GY`wuQ52HHbO%+z7TUP~gXy<&a+aPKn(21NHsmj6!7c} z6vO0a3HpJYW+|5Ngq69&4^7S+@9J?yo#)a+tH}Onz5*#=NbCWNjo)TICOv5rCw+Uq zBam|Vha|~n^{}EU+W{2S@^aqdG=RQoZjP40OqV6uMCCWmQ~1~bf@l*rYU62hy8L7F z=Ztmh=h^pU?N{8g^={_8GmRU2QM1+NY|zVylvYS?bNjFm7F2PoX8T(~ZH-(&6 z`tiq|dmI(<4m*3z4w(55-%);wFBpcGXM@KzL@U@svoxj!n{*?KA(AB%IQpoh)LC5w z=TdodYYGq9Ug*+(cq8&1k$hnr1I6q&Cudwgly|PWG5_7@joPs~T1b$WJD#*m0@EvD zj~V?=F3}i(9lFZlCcqVZi34)qjldIr*c`Ej26YHfasg1dqpD`BImMaTv&>6hkQ>GC zGcps&3#0$8Toy}JMJr$xex`NWBLq)-eyI)Y%TIc83RB}fldl`Wd8TAaQt)b~BIblz zFT-5>`?B2X3xY;rSLhC#@9b3ol-Rz7Iz^cSP$RbqjH z*ZlVZ6I$TEh|EAy(*eM6?4m-0%=BI&AMM=`!%k{sMK^*MDB!54D6b(?K7}bR7)xmY z5@^#Qur`RC(XK>L%+A96;QLqIOG>uUk9EFKzQ}~Z@>6$MNMF1GwTiFr*U86Z9}Z3E z#O?dJ*Is&kj45pq(-eGE{lnK?E5SoG15eH1TlVLL=Gj@qu#+jfYsH_9%5&|;FSN~7 zwj6mWCmqoqbjSf;V<1Rdb0O-5V{N6zqAW2a4q~wa{~c43jq||h)nSWiUvCl`pO(&s z=S!V(?Amy`g@A~tIe~4j5dYy6+h!wsQxgDS;&8&pmU!g@0LC#mz@^-|xlOd=dkghq_9Toc3#m1D^FfR*}fx$v9DV{hIUq9?0zR9LdAr z!iuHOk~Q?!lba!n_M-muE!-z%wJ}FwnnHauOlU!cj~Mw5CZNC-adQdilKfWhwjmO@ zx0vV9R%l7*c)q$Ikl5nM^-baBoZBOd3njTe*%&1og6B;v{;fg-7G`Uc44$nF)}^BP zK!Awa?NJ0A4~*%tg#`FGdV8E^iA>e{kk8n`L|I0>Y^U;Vdj-H|yd>9)&oC>M>C7L^ zv(-FR?gIrI?0D!p`@JI^`9&3aLLo;R21Wza%;~cf=Fx7QZ(VDge=gvO4?W8Vp9+7y zB!XqlzkAo0>5Br-Iu{3iKIC>N{}B%s19>tQFKY@wZa@i(-Ol(EBGbvoHZC%N$j@G= z4*;b|M(FCqts&(s)|={S4#RCFeiAQr?xoMx<`MZ(yp%WK4B4_>S9ZAvOHE+@o_d-A zN83^ayxT@0Ugbx`Y_R;Xo?3|G;do&pVj9m&?RT*Hv!8(m&s6R8~;>FH& za#Ck?)Kv#@h@-_~>~Fj6^)9O@aSUlV5O>(zSTBS(h$=sk^s8+JqPNPe{X!I~KAUH; zOXPlbL@pf4i*6n#Aw)J!@05f2?0H;sF6V@vsY6S%E8vVd8vjA=1SVn4Vs_n+Wi~pFyPlTgE_z11*RGV)9xka)iMpst*TFC|tIr z)EE4xFU?B743$*^jWX%(E+oP*VQXT4p-Cr4N$)5U0ZR|1P!uTJc=x7pb|z46cP zQAxuAsqBbkMc+^|4rl>9r~}rg*iL)))SaRiDC~Cn$;7>cdmWHE8{G!Gr_$b0h@2Kk zMz)i3PSlAmzZCnHc#Pn3e}KC?<`L(55~*S(rqXOU1b>(^PnI}TJ=QxU0mYT8DoXed zw>#s6g6-a&Jm#A;*z@vNdIy~HZj0$}Fi%kG+e7x6Tbi({~8=9rr{C(g*jP ztWjHBougH{jS)BIUmL|~OLn^;Xc&axc3)D+B}D<@_J0dG(a9sf#3CqMcLLo(ucjpce() z9oTWr(7H8eAhj~>S}N>}n1S)Ef8I=C*dHPqlOl=T@|o7E%y(?j9$Qt(}L z|H~&D@&4S;68M^XgrJq8Y)?4p``Ve*^5mt+O^tr2&|rE!z*%QvWbsE&L*}dC=x|e2 z>7%2GEpTr6b0s;}_!k1syf6*(^UEK8M?E8*;gQ)Di66)?-&n;rHNpem)3q`F9CAQ` z{*EAP3tksxAbj-S@eh2!`22BAo}fk_nMV}dkFN=?6%&WhVr_4sAveR}0o%$nG}T93 zkwjm5tX(gQF(M4o78V>Mu{3}4+T6L}eiG#UN=iNTFw+Z4B~$paa9$_aZkq0=1pXC` zr73$wRb=;k$2eTZz(=J3)Udhi)pOl=B%QF%%hK|<$;s;1zt{WCl}qgZ(TW{Z$lc+? zImgfal6P)en6nVBO)(=pK)3bv&p&7VQj}3|F9u%0^5&`c?*z&?bP49I-`r)ByU9Vt z(}bD8#Uw#SR0kT=7G2Txq*uQ@-e7zAosJSGE&R}s;+IanzAGS$b4K*5Qu|NACmpDl zKix+F2^(JI@a>*jK6m-18($i4DgXMKrRa6|TqDR_)}dnFLhYTqY^oI!E@9|ka{YMC z6&vHae$;03^PIU^YOr9yydM2x=nE4fJd5UWnGvFt-2C^iC(vB@N5j20jQu|KPLXLJ zg1#pLhR2a<=f>1|L8&ybukq2&CIpbhp;V^QB$GFf{3AE*Zg<3+Uot%9I#QRPmz+c{ zHMW74m)zMDR>o@NN_Deex}^k*kX|Ju?oWO)XDdVZva?aOEetS(&8sGh2%y517XHh1 zacQkqAjfs_KaF>{>{T;C(YKF?^5E=Kd@q=1u?aJ6Nm|ef&LHqIvodt(vArC{!UD`e0DEX$#AAg8kT}$O zCM5c|?pfNA%#*JB8p0fN^e#?KNc*5^uOv4qU6=)5EdqyuaEyR6-j|K4)^sZ9(8~y% zo=S@nZ#{KNr^XTy#dvukgp5 zpg;W~539P@79aAxFzF#S-+2|Zasr6eVtgF^5OZ9Fv~#ao?~Y8j zzi-wpuaseX_808uG5Z{M>8cWGeITub6IQ=``KT?AS&_W|ME50FetzYaOp{bJW|i^a z=oi1`a(ia!j-`QMnE1~iMc75)x9!h0I?5@a>0LfJXy@!aqjU;6zx6;)=HXcQsSmGN zXZ{8hv76cmr)W#+Ft0uoC;3PbZEQs!ovE6tkJqL)?Bc-qx51g9e}30GF5Ev?vBQ109)1LT_TiR^d=I_zu+z3y99p6gX zCx>gsWgZ@M)!6Qj9XV?a^~MD4>^2{TEPvBt?#^~J43=si%6oIE#Uwb3yt_n8`l3KOu!(hK`;icum7-+tQ%UUF-NTS zQx)zq#rN=1Tka{cX=s<`9MQ`W4n0JA#T{YqVqbg`_#dOv zQR=ZDoi05&dzR-S7-J8ZjApnP=ytk4K65m+64F8Q5k-|WBWDGy7{~?Zu_w zGMca`&1-D*Q5a6eD~X4u_5{#>pYsUf*@RO2MgcK!EWYe?yWH`X`_5p;KBjT|Abi%s zY0*aOyw*uytCz3;ftM_LQ_adrIZoYdJ-#`8x>7$B_AM(NVz z>Tvu;z*zxpmKzxW_zh#>{KxP#NNi~%M*U*||2*vvbh)8vRft-vd&!%g*8B1z^n?vA zKao!cC#f#W&I&i_GbrQEBZ(e(JoQ^25p(?p+FnfA2;7Q#Mz^|^g!A5@JkoDeQ$3bi z^?<%hq9_smiU1}9I}rDOE+jXPPAmrP5+z?ag})m0Oh17rOM>?4JZ#psvmwk~_yP$L zQZ!okpZa!CnG(^U(URR2D8 zGD`b^-sOddx*XY@{&9MZ<#$fx=ML#?N93`JppbWlolN%&1LD?&KQxOTzZTnVyiu_v zNZX1w?6XRTQH660Z*1)F~elqV7?F$DOMi8R( z;Z`Y4xTiWeR%_*!aQsUZc^PPpfhnYh%z4=C&D|k+M6z}7N+Co!QoBmky+pt&1j_)D z%<uWea3meye@bm16(|#>35v=EC({<+O)3fkn4JYup^E zT``X-!%U&}Y#JWRs2QLvIN;R(bk?^OZ0p9>tq^3_0&vnH)GTH9b z)IR$*O|Z=3G7f6DLz5(NNA!Zq`AJ1erbCVp^(>Pur+VhUYsZ*sj$qQ6C{0Sl(WsqT z(@>BN6s);DtR(=E6=+axUfaV@^w1LEKQTrLibosr<(VCeBH+Nuo1XzZh09hW-DS4a z%;+N3tz%`tB;^<@e{bS9DJTu6Wwu)$WG=$K7wBKEn|Le|3l+!U*@p?N0=7Eqwo^at zstj${zHHh#(yPrgU#(M7kHZ_d9u9o!Ulx+&A9beubG`mF9M%${{wPz3CSG0JtGmoL zR&MHWpQlSkKIu_(20vaHZs+HW{!{eGpDa`)&KhaLSvZq0yvaLP*NZ4o$I4MBco~P; zdM5Ym&P^xVQ)TA=mF`VNNSc{bF}{0F)IHJ`ZA|ED{Z>P8NioG|BwYKeomTK2Xf*ml&`og zVGJ0q4Lr0Qq(p`Y??-O-zm9|K5cGkmw#XNTJsS640Yxs*^*kWBy87gks4m9jhh%H| zso0q2nvQn0f|>30xcI3QSIUFGEmMboRlx{atM=V%Rf`qFcRXv&4-maw(i(@dqP{-- zb8n{hzC9DTd_IcSceyJIqIt2EdHj5CREQAVVHN+CF33ng(KS1AyF5O1PrEbNb@Yr^ zidC7tn1BGG*O{VCRD(w+ep z>SY*z|F)FYq1N)~Y?$IvtvD4ajc~KSDeOxZIKU@Z6JPQBZUgHtwacB?1OcvH#7;7F zMb8`5^jqY|UT5s10g~++Ev%m=pw_&Tvrdc1JtmXa9TGG8Ouo=`jV&KjU#}XM*6oTU zauo8VL35mM>2}m@T>wm4T2;}*P(@i`u|f^~VX?B6p45l=H4Q+ffIJ^(%xR&$r3V8E zwr?F&k^UN7VD3->0j|R@D2T46O{LHD+wbYz%M%=wB!QL5kU9udD&e*o2V=7NVQ%2D z=AZbIKIRXgb3Jul2r60v(F;nf0K8NvOG>m2lQ0+&D+d? zf(o6v@*NJ`_66|Pzs#0wiiwbY)x1UCRSW9Bi2JOjeZ14gW73NOAtbsmrnuPK>Rk!zyYFuR#O?u@3| z`4OqK1RAFHAbm$S)J&G1e_7gw9@=o-*R_kf9$(|ClCe&XPN<^guyF}!rCQE@dElVJ zv${Znh_2OP(X;0e`W(EB1c(j+o^rV;NKRGqtY9>fpX5fXbao zTfTVvZ}utA^;atg->PmQpyH3wtScSgkDEk}4IWv;dsroxmITO=>K7SJ%h-4m#7-Gu z37}UQ`Z%#v6g7Xq|WWb%0EaIS~I*T)GlP5OvoB&bb#*pi&uccNXQHiXUiX(#uC7Iy_e1OQ2S+4!`e z`SanqKdV+nANOf(6S=A%B3G*PWM3W*t%$ncaio_MyyJ<70#47mYbs0s+7H<|n}2Ru zJ-gS*0%j8c_K<}&V6Ao3=lpH8Yvd~?Cee~c3gXFsH`W+O_yjUfG~c?>w{H_f+|HEd z8gA!1!iVY5qFO#fI4Rx!E|U#fJ8-A0H~_91wQmS%J^+)`=T++cs_>ozCdM8GRJj*;o+0SKZTlv+F|=dXT4&isF5co%TXT- z>be%08`H3aQ~0+i)%w=w-sd{kzV_%2Ph1iVGztG<$}<|3q4k<2YBH=h!BZb34Jh7v z)AFk9=N31faN)wO7uJYC3k1DZwmfypHOW~I$R>@+()T<`SSYf8 zFylrn<}0V`%cJieZ}OzP7vZBWYc~jK*;%oiJj--WGBc#UQ53<%_`PPR`|6?VttLYd zrJwU!0h^0tFX|L{MnfOup&WdOed0Tx5TNnDr#mh4rT4T%xAV&P*XxG17EuRYoG46U zK>B&`n;nF4OC?2ryIYNOi(3*$D@19s6dVffU#~m3Xq&;qqt;xzMSZUECSbeop!y6a zEIJ(?12CJS80x5u2PlMAwp)=yi^24x6a-EOlNJo|_keQ0o-#{vV#0AmEkB8hoz|aO z=0_Qi7=a=Ng+G0H<`8wD4Wb&29$+}C~+SFvrNXL<%i}-l+&2y$#-ijku zdQ(1iYVeAi{ZaQ}FAsI@T$?Br_BH9}SlzgxpdnRLtpy zdK6Tsa3B7_Ge3W2@AwCJ&*B0W_&KA-_0|~zK8~>~eb&^k*tsA`JCO;vq|qd&+8SW}iQ_;C_NpLw>Bl6BYHxW(FFn4-dkolbL(H{tn4qHF8>$&D1iJHO%?1; zxqXvPml2VKYEg%JmWTS(9``^b>mXYxx7%2M+mkXfS1FyeWzkd!{? zjVi~p0QfaYh-NI@Pk8EWpkRZaMWGfGz;;GbpjFE9N4? zcmJq-lM10t%|)>;LDSc|icys^QFee@?-@l$gKPK4tPxpiXb9dU^Fo9NP!_6KCvfHm zDMp$;y5yJq>j`9|o>91yOf9Qba2%x2%CsnNQXUt@KIQg^8_|h~H4PP=V=$ciV47>D z+UqL4<#`Ude#`V;ewtj9 z`)yXu$lSHu{|=8M!R7bS-msj*SwWiKj)lM4V;kFxTWvEve)jhBoICPp@TgYGE7zKD zh`g8DQm1Bp-EbZ<1bu*8nBDUY_CQPT~c#20Ud}c&FN{?sE?CsTwui`m+91x z=6c?qpKtuiYXfcu4uBO#X~bhJo*6i$a)Vw*6qu8vsmx2w88(g^luQdpZ2X!Ms&^FxR6J~Vp9K{^ecXi1tY0?vESfI5UEz9NT=<_8=~MZ| zU7rOeo@f?R&>@B{J8PP*r+!6AD3zB1pqTFeaqB$geyXtU`%>m%W8Vow@t{FRXOre` zE~dd&&T+-kJ_Vw5?;Dw%@^Ufb3a2;k_4)&rTwmMA!_X-waF9cIL#6fU!a>{k58og~4m2oxo^{|kK< zLtp~2b5Np3OAkNfROkZ_*{MLKeCh1$ct=)h6?h9Mw}otFQ`uP{xRcawF-uD`6+x<3 zfgd!(D(EdB%n*A;V}Q$u!wki+iI0)<16zOaPUlH;ddfz)*VS-+M!FaJ781^8v}Vz_ z=Zk&is-D*Q<&myeNAe5I^R?D{4ennvDxpBiQxW_zt1$^u>n7je|L4hz$>@t(*Ywz zWIkkeRo4v-b5N;{do5SjPD3ZQKWW$GYGft~Xw*{{CpPi#fbkDnsJQLv`QZmKdQPqEdB_TUUAPA=fn1D=F?R_JvZ!A5UcU&4i zj)3h&!9vK(>F#!bfJVYVm9+?c+$KcLe1=j$3R1o)vHEF7seHp|1^X~QLJyiUOe;&n z#ksDspM*Chco9_}6%5z}+S6lawPp zF9c;=eYdm?mNg|aVv7LPfyy^4Oq z0)~}YwXfay^f>Plf`Q;nxpb7Qcj!0@QwErn+zx1Gy$fSCAN%y$^aLFg%s<&3PADX) z&&ruo_EYW}_`dmb`8(~^a_J7O?JMy3NPCQG=K{MYj$>yA_0Yv)?W%W0T)xoS=r-hG zXguW8x1Bdckfq3ahN@meQ9)6sX$pxbIgK!WC(1})Y15{|=lu;wyK4YW$o2FeJQAwcs6 zLmV5~;OODiv6=?*OrPVOCcV-=gCN6bZn<@EEgZ>5y~+YkH33e7l=ZiM4`E0h3xr%j zjEML)6Cd!bn0UBEmeZ7#NzsD}-!Ds8n~ZV}mn>cJVG>1DdY&6|6+I^t>3tp6OSKz0 zQ1D@Wn-uk#H-nRwX)-ASuaeIJm=AbxMGcN!y2}!ZI}Z3DJlE}=#A6_iznSdDSVaD( z9>rE5%!MRLnRO5Zu>|31^g4t?1n|Qga7{wxFOY?*b%Nj#PNjAiOMb!^LuR}e51?O2 z1N;Pfn|F=&hAuxCofbVp_pBI!7xds~cBxzh0LHHxK$|t>YX6D8Fio)nH=!6-&tr&F z`FCwpFhC&Fnw`{=Snf^-SmkE-z8t*bR(}uyM5zy^sxUwH_<_@C=zjWlzGwyT2JkX} zEFo+{Mn+1d<`madEH|k9Z#?*7im0>7B_7|2!+qaHhT3ml=YHC~B}O0PP)~R@?3KPI z^UCo!k5Dl->;i@`J8$F1694gq5)YRbAFy?BJeDw6T|BXA8B!`gGW~W%B3);G(Q`y- znRps;X}G$;UyT(BEyc^NY~d6QwMtAgKV>XlX_!e0dN)P4KVR1!?vE^64tfPzXIL3> zm5|}gny~D*!jqRCYzotx3);{-l{COociC$g?Uux%%{)E(;qb-hERR~H2h*D=%aVD+ zm6g@}Xjoq=8PD9dPG&ezBcphG=xi06>_FyQm#tsr8I0|FT!*~?yfRERTgw!A0%@_0*hT_Of zDeTF)MUd0m%aG~nSNhEx9YsS?IHtvnIsI6~;2+je!4aZCB6bWQobZGJj0F?+Kbu`N zl*u4Ei}+BL6&Mw40YRWm@he6gYDw9dH2*IX`0#|Fv ziiUVzGHL#S{I>ICWhP5Sr+1?LmFB+6oReJ&)DMHo z22jZH5CH>@VmAF}bgw2eGf`OF)=WrA6=5XY!Rm4}E8YVEs~}`Hqvlio<$WPYZuzsm z2pK+7OrhNCPMn6m&6)%G)SI9gc^=3E-@-CsE}_Ncm_JHMkDa=4`-bxt;^ z0#KC8A@fCS-PQkSR~x53Bv^c%VYtJXL-U>*e_vTc4>2~PxCVNi5CaaEI0(Pw0`h56 zb}I`dC6{jRx73&$$`qZIR`y`ydFau&E#$iyF*An{q*)oy?DGJkVO3yb8f)QYM5dhc z_4Px{as%6q>2tkUSYp_7lwkle@sLGO50tl%rU=$bndo6-P&k*Of9|Q|;axiOgoHDd zRXT`hVQW-7O-Ti@?ZE`L^H`C<_?cfEO@JT&bbA|C3~kQc>qDur9^t)3m23{2i!Hb6 zMdh601^G#*k_f!?`;$AX%QIysbGqjcsRBLMuB$gfjjGr)a{ooct2<>;${${ipy98m zsf@qjTF+M>eH`T;%L@xWcl)kDdHF>y1hJVRv-?S;Z@R;q9I7R%YPVTHO$9k_>QJV- znAp9C z>DFP&MONT;)F-n%mSU@=5O3-@z6B8JenZBpQ1Y2Y3fAQCDsxkoMKXO#5F;RS8 zF$b`XiDnFaV-DE?6)cGvglAoT#fLPtK=vi>b?&EV1F7}%zEA|XLwNUeGE_Q^92eyS z6#VcIY=eUN5{UOlhW<++Jxz)sjaPs64J<>6Eqvq*ZN^i(_MNA`GZFTiaS~$wf&)n} zwBK1tK{|%N9th>#@vW{sY4Dcy2^b*0nS75yMG!SN2qG`w*#qL`15Nwf?aPEy;w@<00cxoA6)P}&Fxd& z`BS2ISJT^Brhh$gV5%DnmB7Kjr6CG7-BLCrsN&QQ=xt4!L`Iftj*Ay|FzPJr2OqeyyYZ_)aq94YKfN2^Fn_Gwkli7O{61ig8w9rvSAHpS{pxe0c$picLKR&OF{4nU8P^t#kbcZFjou{*f@-u^%+52ju zXnUOKt_d5Sxm}Up$^>O<}`u!ES4Zwjuw>kbKmcOKowQyVXztb_Jd0KZ+6trBaCV)0+<%e$?OVCUd z+GtDhsD=H_ZJl(VPYOSpTcFpmD?xZ^lO38!7eDEM9DK$8$7A}y>aqloy`QWR67_v& z2S+Q=W2`-iOS(!9Cz~ifZ(B#j#|STWz`s_+B!GI@FXhWNfc^te(6-e3Vr@KvI zDTjGE_!>IDAnGKR)Ip6E@<#(jN116NiX=%B3kc2!?_NH-b4i=&BHrK>=$J!LH@LwZ z7hDPIAox-23oa1eu>u0rnh3s3Bw@(OZ3)52u8s+iZX}=Nz$1|=sPj1%cc;ZnJ&vvD zeExMFOVEATJ}^-CH@o4ct$TKr(tFvpki&H%&RXx`9uJ*ew9eq>dRT3(Rx%N}|LPtN zr9ROei)FZZ>}A*dYc=Wbe3H|?4YqLRapmT=_zXR-DUY#=Moosl_Y}WK07Dx-O2enW zg#8raq#Pn3nt6J3x1p&6DwE!xIlx?lu5!HewD7cIhbj37cacaX2AGrD!){f@WBp_N zx2_kU+Zi6ecvsr+y0DPQ4;1qIzqRiE`S|D2lT*53ex6?C26MVHMSL}2PGJP6gTC@{ z{j;ITmVF#+^{K&uiBK zZRUSte+fJQBzClow>?8|wbv3Yls--|U<+8gz4etFqz2LfB_Ao%o_dE`LZbrzDUiyJ z=vCsoML#xd?flfYSL|0F&}T2uEC7evZvYP#@iGD4qBsA!UMT#Pcr>s~md{M2S7-D$ zR{iy~L0bb9&{(-Ww`;$jN3WU*UQog#I%tJ#`Y_HZ9+I*eS@`$MMaTxP@v$MZV$ z+{IEm1EhvKE}H+vtAR!2ecH^G2*E_^$I;v6G9U?q8H{|coO$CiuRDJKZNty$WBz#5 zbVY9zIhr*q5f&H`Sp4(H$7c_Lq!)(N{Ci<~$l@43yKXFCRVp@WwVXM7 z?m?w=)QSaA6bY5lR{pCkGlWKauV@yKb#*k`6SOrc=KBD5<7dpIQ2H2vWDp7)bC^E; zn0N-FW>pDM4}3J{OjguxnSep<%YJ+1+cc5>)9RR)?+whtyK#u_M9{vjLkAOrgbDPG zOE!Fp&6}fNvzu=W{iT(uew$^ssWoM+S!CWoXAf=M@YB2cmgVQuBe;4d5b(7eHXc+jhDH)&gh(vI^b^0`~BgF zA?J`|vC*%w0r7MncT;CIZKhiku4YTkM)X!dz)uP&e3xV=p!BYtF`<8nFEdc-27iKt znp)lrpHb0*UFi-MFn5!3YBih$6wiNx=I8QKs(x&I7-XR@3VcUyua<7fQFnSW@V0$U zpbln5X-@yqJq+{hND>8n&c*_`kF4@@XYXn1RWvkI`R#kOryn2Q&Qt?V8oUUJ7jarg z0A3M%OfZzf-qzx2zWw*NUiXdbW^6?{q>KDq40M+ESbX7)`(pRlknyVESyx)I(4 zHE4={J{j(jdno+yNv@h$u7_gx?$R&Hcb86F^GSU63&WYZFL?Hkh$~{t-~QV@Mhd?l z2q-U0?mba@@L4*MOT)mM|F*u~L%J}%He#Z}m_@JSJycjuO!HK_#haEo%MEo*5W!`0 z;wi@Fis#S22lqU^I*AJma8>lY=ltiFn{@tsdAdM>mXhbB$}G+5{9pSn04vY~cQ(iT zk>K(jCLju559jW(oH^_G$E?Q~&WZ;>j9`0$VDW(*jH9|vrdlG-Apu9P44N*o@B2VA8Q&V|!-6<4;saEARiyhE$~Rw` zn5$tlbp9BuU+vO6k{fdI`4!rXowP zu$D?KX2TbTjXrfUPl6eH`}=1Xio6f^sCAKOfVo6q1PCvU zv%p$=JyzR!IiT;+Cq-mGr>y+RJQe!`-1IXNASLkG!lbff2mWVeM|FgSphP-E{S$v! z7uWwu=q`;`hW134k+Wz$tp+R+SzV)Mn`?QE3I^cMdZr$A)Xw$F!e&Ts2{4Vn6%V<& zo8$5v z?68}(?DQ6d=0f+r1YsI!yxlZ<>tMzVyFMJntlUfAqEpe!mIOj9?a4DrJhO!PlOUhN zDDvV0mhN7oh@mY+Gt8-5y?YYDEj5i^{OMq~(5TQbN#jxE$ zojhn_oa1M;Lax_qnU=|n(cXJ0OA|IKpw!r>ngF~_wN(HYz>Nk&hZ8mfoozI39T`3M zca_g;k&Cpbs|%6Cb`Gr79JaL81IM3YYe(wAIe!Z7;f5+&+ zR3DgDjiX@f1m`)^&qzhQR$!U>Sh0_Qr{A4}eB)n(#{Gw=Ime%b&BnzN-tp0eAY}10 z+L$qeLM9d1o*g-oV6ra2}VACLa5+!-#XB>xlTWHcQw2&>Rval{Jbh$?TvoWK+9OGz5^M>$`Uai~W zX>Blw%IDmCT>oIfrtMA4)rrpvP&Wi6J|kZR&PEPE4PK0)KmGRcA-fDXW zOGfl!X~XzqA*#bZ1t(!7`!NdvkR?w*w1X-vOXH|{>w+&981o{=F*-?tx~w7W07x4} zGOip2h%yEkHvlZT5SM!rwgFT}_~U~VgRS4_#s4$=49a9zRn&W+%>jX$8u9uVpJ1*e z>*+fm?dp0rB<_l}ewru|?Sy_?ggnWzv;i68j2ffZNx$Ty*h4p&z|gOc8;l>-&zjcP z^eP!YW2fB9@3x0Dd1S`Ey5H=?fsq&QleNJkMm=k&h#TvvBBzDzWPW!=IK}bIL`}nE z!Rbpp5W*f-3;n695oaf2$-> z;Z`J#?Wd{F4-`}9+1+-1=Ym2gBjb&V7wtpNu~@hIwT-8N4@RYma-=YT-Hw(Fdvn2C z3$s>Q8}(`WbDIXTFv2hv6L~_sZ2c>l1ZX~X(m2vHvL2u8v4_s)%t;>i`&6VML&ApAa-TYbR*TN#@hfa0N zFfMaQU}HnjVCknVL46PCSOLe54^Qh=Ero)L2lsz?H6CLyh%Hd|2Jh!xfilbb_?m%; z)>{JE+c5IS`-%@G6%QZ29TTVW4?fyh&99JZ zn4{?0H+eYJa3|)@2SEJe`soL&JuHPM@AGrLX4cg?`SvMgn{#cH- z7xfCc6IGZx-vNjFEt|@FF>foHIL|9u8@+ea47b`(D=2Ew9VcD?Gkv~YDSE~{^rY6p z^jloqcFOE!+u6v9><(cT`KYm`y)9+KXx>Xx-S>+%8~2ujV|IHVQjaw~P4)S>_W&jT zTo>HcG8gS{-DbTcRQ=BUsTV+6%Y3nI{7y$(^jdYE3XxVa-I@!u$?pp50sG!F5AA{> zp+_535hY4I) zJyOk>!-5*FA6bciH#|xFN0OVy&Dnw<3sE8;i`bhb=dJyC?x!#uGiigV!Xs+?DC$D7 zSOm4DeLAHfzu#>8&6VxaM)wYIEs6a&M8IyE0xz2uV*&CvkO8}@cdmTg3{C@OQs*^N z+^}K@pxtv|2aIYHu$D|I*`L7-N|>l`G`})vZvnZT4_)#115?-Kf8t}1$U{|Yk$eFX z{7eogQ+$l8uW-L>abk)xYv=>?pKcg{KXr2Maf{7T&G*;GU)pr$;nqL%g6>=7=Gz;x zNGwxz3FX2mwb$1+lN)OPi8H!h2J3HCo)f#aF?-|Ed_aIfqxwwf>u0mg`rJ1#;8t;x ze$v?Z+w)6*A7qFpWmnw1XD&)5*(4mg6czq=`A7OceEx=I#^b;`kTJkd1UYC3RaIP>P)+Jz=)mXT`F@v#a6 zZtDKcN#~=e%fQp_n%l4EDw>?{GSd8_LgYb@f`yTlJYpZIGTz6L4hka@ghAcpx%~I3 zz?1{sj6u(|!7+$pgx#uULPnCw0)mD%`s`m}k{t31rZxBhmtQo$dve-bZ1!#nM`@MO zYd#9t`vp4&yr7yy^G$+j8lI4KX*y3o=^ZuOnkcYAUe)9IJ+l1e&#Q}>2Mr}e4nv!z zK+Otc1|b797v9r5#eq>L^!6$beqI=RQM^sLx;-#DT9KPeX`Q4;C@Q=mP`E_fPw42B z=C%fLE$$^glevidtNu&nB=hypp)$lC+gFbmuNH)2c#7yr`0SzA#z(sx`qtPppxQsp z>>#A0Wt4J)l;lWn&cvJppy86J)^bXG3sqnxrKUie;b&lfod<6S`5*PMeiEY)LrW$C zXLfYHi|FvSC7miOFYLY&ZJN_gJa!`Z>ebKjyM4Z*;}Ic|57i zA5_`Bdf^D5-*`+wy2b}=Uin&`pU%rLycM$MT)gL*+Ei8yL}y1um6i9W%rL%$_L&aD zU;%)WOu9?yd5eu}I#tkpSnzNZV1+(yyn#R_OiNiV!U!KF_Rp2;g2`VYkq6>#0<=Y7 zLcLSIGE^qy1TT<+Har4AL~%Hco!zt#Ca7=LQ`1@fBoNnm|?Zx*mrz0OGFrhUsJF zol}|b8Jl0GCWD)|M)nqJrbi|F^8FNQ+a^k zB@ig6E5CtB;|v$=*W&Nzf1nG~2a4m2KW>j1;fYlxx%T%RHk)UVrg$);*n}2Irl+6=&Oar z?&ly5q}p#}RVo8*HTsTSWA{h;N(AMI%#gxyASMgH;JS)YMcgk-ajzDe{dh5QgjshF6JRcJ$VsQ3=-vP?Fn;bWtjVm2k9b~V zJz1sMZR|R7RV(cGQ7{g+NJU3uL)a)hi!}gVbuC7Rsh>uIe@32t!f#pDKCs8bfmXa6$eWzvgExsXL zZ}ZE`-8mPFuCrDTUBS!)wixtIaF3b-BXABA@=tzm*=gQr?E~yri3Q6ck(P|pI<24q_>_{Gf@o5SwL6+oakCZu*kU^x~-R#Jf!a*%f^_rxI}h%)BuHa{QC zBT(4np>pUJDrx6Kj*?M1+Y{OZV+fFEki{+mV8Ui2YzH>)yX|dmb1KqIsW*8OqaR4) zGWIK0_&-RJq2J>?NVCTQ+Ik-vrUwp9)Akpz4~EYh4EvvQd?Z8O3j_shX*Z~4=F-n= z10;kg4)PiX|99O-Lrt@uX@jRAF$yIJpbbpOzy<3uiwOOFtRX90@5$R zyc<2wk3MHoR`NKiD~u8OB>1R;%{w+RZJPIKp3;lth!8BveRm=OTP@?#u=4RnZb0LB zG8IO`KPNptfZMk_IvQnw3RB|+1GB~YwRmA#8S7daegOrHYpTIi+d9>4A%qz-&rK5p zS+_qODPy9*V59jfTAx_z<4sr#&2W~-K)z!x@)jVszzYm;jO79fqU2#iqBi3dq;eZe zNt$@-(PG^b>ZSa^7X|@XlCdQ@qUASl{!vbFuHq7LDEMw1NXJHS^yZ8%*A5HdliLNl zv;3Dgbh*j0#)r?ysWKZ9udgsZ-e|}>60g5Eyd=$U20opybxksx=LJy_$Ra$icx3{{DAJxccSMjf_-KDO+(|+&^Ad>(AOSepH+7 zhsTK%OG}!Z|LKICeczsjzeSdPmuBaliQKtwd~`#mEV#e=S8ten$agQb-~vxW7&-~c z1N``y5YEk*N2+EX%Rk5VUPdeRN*S;Br`Jmck&AMu!#^;Dh>gFK@)JHU!EiaMiCA`C ze9}wnL9%$bj(>eMJT~NnL7uS*(b^gkRjr-VKiyX-6Wc+>mK$L$#WfOuU5*B?K_s4Q z)BSUnSc>I3`nD$Xvmx7zbU-_1zHfu04O4X%D8Q(5*%FXBVD1oabH3Fs%}o4~m>s6` z6t)V3tdFax0b=`*1+-rU=~_~Wpcx!_f0BX){K5g=EvWf}%uH#C?K={g{Pqks9@VwQ@;e#Dq{lrJ6SCSD1%&xlRVl%i=gI!9yWGC&H!viO}`7h zs|C{>YoCgXe~_;^@=8PapV0Fs?775a(L)cH5}W!Nh0N5`@fQ8Bn?h_lhssmx_6L)B0;;F&jI1vB2Wn2=-o0IdN@Mx?5 z7wd!kNGVLb*h`D7c!^=7$b!{|wv=xNn0;FX+4VdwV=~R650sZ)5foO7xSFqDUFreo zBYNAB#>Zy@YsO-Wk#qbHTu|81I;TK<4Ck?`O#VrD)vWB^KD26^V*ytJ1-3CE3yke5 z><4WU8wUCXhK(!gCz3e?ISNx#+UQ#Of1?1-6;TMXcDHjhu&Z-+YF#!3rMv%H~fCaZ&uS**SMu)@fkdvrAG`f;@p-NaYxRfx48=79uqu#Q=!My*4I&ya1$FLx z76KvQ#t@6|)eSjcuY0Df<7*07Ri30{UUN^g7o|kYQm#>xCYGf_zp5jYjG^<=R~T4i z_;cXa-vJ8G1u}k7kc?gGeEb!2&|SCNPFe8GM*bNSYx{St6}M{6Rpm91%mK29Psp%I z5|R4;`qqcn`o}VOLF?Q0gA5Nq{&@cQWP+2^Q6K5%sHAdJFydx4a^F$-fqK}^-NOfq z4gh`M`qObjubBbLOsj6Zv|V^4mq%8O1!zgT^aCVcn_04zY3IE}735@?o_)VGii7yN zx-?sCqt|QQs_7P>JcDwiC>bY(56c5ztY9j1r5~7mzu|@6ow#?u`f1Z7_6&-c&_F?5 z3{c8YLfqM4HLx#23-rW+OWeqP-1SovjCpf#R!C4C*$&c;`W)BWr{sp}mH}(uSrW*( z&N%yN#!V1w9-%8yYhO@qSY}}mDl>QwCq4{3(f=#J`hrc4xeK`^Iv8XL?m|@E*YYV)(o_09d3$z!8Zs;qi^7edp5q|1& zRaggVlY)yj$YN6PacNX_{jH&3HyhG`wKr4Hs9Ikj$fecC3AEG^Al-bHl=mH35AUroNCsj-`wX;ot@(e+RnLcR8(UFK z+&ml%#7+}JA7*l7@dBnrocD?;TaO~>VUf#7II_R}%`?^tzffCc@;w&|L6M;?Sf;oA z{@XDo^dOzgywDq)`G(gDm;gsM(hEwvEZ+1+RV6&dgsh`#sbVJLT#KR{avXQP2-Uu9 z&{iY)jOlUiRCwaBJ z+usQmf;spb?njhP+2HfN;J=+5q{77~L+dPMnfiAKVN~XC zuU9HA*N|?7$HycUf3K^zMcZ9B%wa%FUs;I>kRbnN`R~r3K?cuSZio_L^s_Bl!O^Xu z=GBwu|F$MShie)xk4;*$uP&=~;1czo+bpu;b1*iH?e=Fki#6Kta^zwq7Q-dJ_@5GiwMY+T$&@)yxJW^9f@k%lO@|>H}+fI05UM` z<&v;MGWpUl@a18a1$FZ**}(KI%IIcpw~ZuEPMyemvD*2$M&??7xb=wwm-Yz}f&!y! z_!Xjg#c}*%%H`#<)KmqgKi=d5E99j4fSQkdLTP`^cavfBQl6`QRtJkU`_DWuPjh+t zr@VqimiVEVrO@l5tWF!d&ugpt8I2pC+On^Ndgh`X;VUEKMGIF^lF`@R(UVfpxR`>>@|xgDWf);9G#ab8 zQAIQX^gqL`(B+MugNqH*YNk+h&Ggb`m#Bpi5sw(u9NAt9*N5ZFdDgtRJEtzH;|Pq~ zn5@a<%xb3XuEH-+YTW?YNxpSY+=5e?1puAgbej7UB9b*l_7gc$f9A5EUUVoi^f_;a z95w>=jdyM^Z3t&L{@5K<@r9%>lKr;EoLb8h#a^gLDtf%p{CoB#1blk18KFqN{)>#g z^jIphAK4#E*4RN8*DmtFk_%@B0fn7B8*F1Y7Tkw`li&ryGPvW0%-$Ow0Pd=P!$K#2;tkyjDL$zl7+O=6evymxh8%OvM5P|mceQXL5;)^k&HOX;h^mw_X^IZH;H(U z)~P*4Tj_*pHk;m@;iU65dUfaTTi)&da6zmSfSXeEOwWawx9^*CDl=ze$_*w~V!f3a z873kc7L_kmciVo$=?7W}vE-t;8Q#J3SbmDx3^@T%3{MflsW)mhu7`zT^srz+Y^Lkl zfrI#5Xm3FL;ovPPV1ld%&b<#^*W6omS|3^K`eU&D>*lt8!!toY{eC25bgC#weeLIq zpf73sbgmmn7b~rJQYXY-!sd3FF@EVplo{yRT6Nfz|3Mh`Nd4vfQp3tPe5L5pl|#ah zZ`mAnSN5)RFKX^Q}a_)I9wyT5**<1Ot zygc-4lLtQkWFc|K!D~=j2bElf+upQqbUef*w>Xz#4D7hNFW#|0UU?-_NIO?8uDb0{ zbwh|Mh>J-QG%y--K_PDC%SS%)S7?>jtg(~WnzpFZ=wZs>j5#A5nV>g3`Y$hE{47t% zL;=1glyHL^Yz6Ti02@q)kc$5fEtP6&+GoYXQrVpH@`S`(|L?y_=@%Ppo>i)r<-Nb4 zbV$Nx`>WZIV)=ZKcKw+^+2CmI0iAA{h?L56_IL|>z!x9S4f;pA{4eh{1bd~QzFDdD zgDKd#sTU>kgn0UpQUGL2%nL&<|NR3W?3Y;lS6kR^eBrG5?APcaz)*yMBxnb+Vi(F~E35ZMv36=C^Jg5>@+|pn z$ibyiJuYdF4)gwgx}Sr~J(CVRi(vD8OW($bAcqIJ;&BiIM4_CURE0Z;C7>iDlYo+o z<~%=yfdXXR2SU;yB;ce&rxHvNC&%P3lg9M>0B{jvzQ(+1=5!ni&!4G{X4E$`ac!?V<}-V#4$_m zAVc6{QJmGQrtOebiRH!g)vK60ey9DfDD!|2I|32VzNpcj9sIJqAtwd-TqNv`Z<7w) z?swEYdZflfFy*Lo+~T{R(WPwo&PbxNNxXL9@YZ&W?&@A}bJJW8@-po7iF49A%M!Iu*>#-%C+f}}Ww9pw+mV{c*~K~0~^*}iH|JZ+Q_CEVkJiKqw2 z2Uzte*jhS=URUa@OVOJ*515w(UCEw*ud&;n70ftsEjHVa61F3Jc-UV0q6F5p7MoEiGv`sj*h^XbeGpW+AB|A@{vSLUZgU*QH<3_Jkf z%J2a+7NP@UzQPSgBC3mrSp%D#%f)lN%9?Ak!&Cs}EBlJ0Q3DTbDBR2Z)|-TFWs0|v zWDh;#`;Ul)zoB0*r?Zk1KGh5FDKDIOAJXH;BB3^Vk@_@XxF+z1%V`b~-MTrl*BoeG zF}~qado($Ae{<{yY}o6tok$fEO);mUU+?XX4B*b)b0Xj}lBEcSzacPJqua(oDd5c# zy(Yca@_sk}(sL9uN1J8CwtCTFwyDpb^W0wa*Ie>CfFwxOC4fhAS(-`vZ`t;PbT$6M zb90g)RhgeVC`^xp0`IDq1B06aib=8asI@V+%pzv2)CT9ub_k5MlOdBA1F9(QFvKbP z3@=o6FjUT~CXoCQtIAFD(Sb8K@-J+AV@Zm|gihrWDZ#A7lUOy>`ok`K&H=-DjqBH@17YIzE}LdJ2x!= z*_aj3Lyf*I%-`}g-2Jl21NEG>;s8ZdG{H#oSMWrfnA%vn`lHPG)!2>0SGMOK1%L~O zW7=jfd&!H}G8r@$U#em=F+r;kWO7^U`<`w)j5mqGHcyzMfHH+sH@`VKbn-n~x|QaJ zk7lfwe#(!UxOwo?L&o>o=#Qc@`gHRG%m(b&a`PQ?@t3^0SPmlpss?q&sf7>eLmt^M z?V}&=c-&7CNU42*!kM9@v2i%}a4C_GC{BdbxJDs@a1gf|~ z5wT!(SD+YQu(--1tV9(BgPa%@Tn{(xY6WU>t6o=y5Et=7Z%qiG0-(}g;4+>GXcnth z>DXN6vliHlTNsr8$p-H~eGzk~N#qhYwRFxEup$%hDD>^@~?CU|IXH zvI>zVk&!w(r7`25Gj;FxrJmP2ETVXaKzS&;WBCwQR&2|cHJYV7xq*f*h7hO1wi0E6 zLm2|1kXE-dSv6oS<1E(TR=DWZ^9O4(i2q7;Ble4Zef6=a_qRkU?v~+fVHNL!xJ@!G z7CG&GY4>hhePZI>=lJHW&wAT8Zq&{XzVPZ;+S~2;d@aB!z<}`z5pI;|2j85VPn#h> zBSIB}q83)os;|2w{JK&Ghe&cYzA32JzNOk}YJ+U_Ia=7fJWB3p6E4&|#~AG0zKSpS z1@qv!$%9A@H!{TB%|^~avg~5TmT>+MdG~V&NWDV2c9h3jJ$ij~zr|E{j$a?XN069H zEQj}|VjaG{Vb`X4?t^^CYVX9h|6#tCcm^~1G6e=0DEHan%aM2ff3jyIvllE3Et#tV zi2mZIXGXw2d}k4;F{AK7S-0x<aS`kvDpNER zTBL}#4DNML$^#pzk-yi34ia9Q3#)xuUkV9~=1!c-FlQj%8F<|unku7O=M2#s&NGOorEK(PYO-sza}*TCN1gJK<|cS6e8=&NuR zK9(Vwcn&X0n--7wd1MeikKmD%P_dKxjkhDhN9A*p!qm|q1@>qCMzPGOx@!>rHB&_qUV!xZ9D zMeP{-;yHF;(aHm=oH1l0p^<)=_xbaEkS#=)Mjs#q{u{mbvB~-vxEV^>yR8n>ByphR z@qMx+a|xg?ANL2!uWn(AOwiJDgmL0COywba=6|2~7V{JRd=>%E!(Wbpe%LvB^7_$r z-Bq(UU4Jf0a5!)y+PeRk&4JAX)%sk-d}~PXDehXU7ujk6g%RCn%*k^NR?uB2w- zwX9jhyZC_;6LhD_6Mz%iL4<@*)n<;on-;}PBxkp@*OZIGSopHKPQgaH-WVO{^!g0( z3%<^~TRcE-t%LV%VZb*|cJ^1CuPQy>G>ej|u0}AFZ>6!*_hEG~yZyW*8MP7Q+tL-a&bz$b0;;C7hN^Z0XXU$YhS zI{2-(c0Ub>QOBWfv~(VC(@}$ft2O#}(>C}J<NqqHkXmLFVj}*9Xx1a@djdsA(O7_1 z22Uhs8Wa2E@>YQ(*v9ZEVRK?1=S)yDKZVKQZoQ;A#J;U5lIguXUg|kDwQ! z<>@v7SYqfCK5zLvk3_f6=p*4Rww@ZwA>yGw2k>2H+!wxlZJ9<^MCdeK`ZV(8Iopg<){l;cn2ufe5)fmKxi9O;V#!XxCVDB1M8VHu( zijRrF8!H`r>9hVb=)sB+H|=r9onHPwiw#vxn$9oy2CW#i>`;3p&dx}wiw{t5oa_z# z-7-L^V||48y$O89R7%s|g~l)>6<{(i_G~_e3pgrtoc}exXt>Wz1{N?Pj(lNyx9cOf zObd@f{|yTlp38xYM+R$;u`He12f04v!ro3{0y(G|^boj|(*5-%fI%*6_rcQ|RlOKe zZ}LqbGmkx<8z^A&0YMed*mvZ!LKbY$sh?zNm`3bTT#q_`dJva*`Ekc>ojZ3fJgMS% zr>q++ay6Xs{l(V<8hY{)EO&0R>B@6M0FJ;8ti?r-EnXOBTsrx^c1Y*VNzUwsob%J4 zi#0%GY{8dgN>U=(`C=JUYeIZr(~-{y4$X%DqeR^MhuV^_goRQL%23lE=+$1;vyOJb zLlnIQ<3E1_f`#<=N}rnsQ~S~$7zU(D2~H8l1?nF>Op9W)AEGTM3$c;Av-M=J$TIcg z=LT-WGam5{&7aDnzVpz%gRSeAZip_W845`|s|M_kxyZJ7_%Ff+dKiA?5HV&_p-Ld} zjA`&dj4T9X8zM#N7^h27e?HyUwB;wQkTX&-1uPp!S>jb$xj@xgEpIOInjoM~mcmFf zJP#2aiei*Zbf^7MYamf^Jro@cG^q}LK#kzvS_t612EDr8571fk%hhQ=FVMdUp$&U% zU$sA3142%oY$Nv^)L-L*=x73xfcQ2QP$jz^mS z=ipj>d*a-b9Lu9YT1i}%|7!F{%#@&h0{J0%GlgZ?!BX<2#_O;e6LRjW+vBSrmP1zI z^)(H(&StV9VxztV*aPPxYYo1Bn`skdtzk@@w!^*_8~DWe(4e-#i@@9I{GE9R;$bD=TAiEpNav0K+hCLqJBB8`gd!}RF zcx*xq>#?|V%SG=yaXsE-Kntef_)yR#8ZxNMCDpb3x2gn8FzUS70qV?0X5q&F^rGB` z^GYDHB?eS}&k{j4-kf5Wc?o{PrKZ5CC>wnJfr|EVsG}k&j}21bF?afHPyc6&QIq)y zR*uxUOo9kN#Eh=w9ou@V9m16(1A5x8X5E-4cHg~okS|Ej9LU;+{?yemu%UHll;%3Z z-t4KTY5w_RSJu9j)t%W9FDw+;jQ*61_uZ8b2bw>Zss2gs#PC+*7E}_<1=jtY-A;vT z3bqJ`&Pe`uPVlFca_3x!$e(Z4^R5Pbf#R)yIcpdHC$Z%N)z46qQ~h%@WR+%}e%gY0 z;>+8L_!J$AWMFYWRK!Gps3nieWSv>LxfUQk3G8B93HeqE78oJPNMjkiP_76rO&?#) zmSHlx36^}kp`Lzocz%hu0iUixqb*_$gD~hUi&R`1Q!+ z5zEH=U@B|pDI~EBQb3{Q-9Qj3N&ridq1Vy~YHu+w@IZc_4F-7(5z!q>-3UP9fPV2O znCMPnMz)Y|(sl^S=|>|kc%U3WKJ~)oeho9Fajb&LmkAaaqX|*IY#xLWX6)JW!7A^z z@k+@@Ub0UH8jB@HCGv5qG{*5=8St(^#e#9}@XcJx`}-7>g6^oq4dyo=oD&0#j;^qQ z_T5qu=pF2f`#BQpPM5uua4!xkbrDtH`WFbf?(Q^qaA@#LPIdT_E=-wQ8a&!MslB#- zb?upG^5yW(UW0dd_HP?jbHmqzzBB%a*IqyJ9{f%y^aD$);g8hm!BIhJc zgL;CNvqvw79M%S*@vgqT{ht6U5C{kwc@UJ5b}g+#Z1|+`yPBoqm-oyUvX!v(;9fPT zuKU%03vaT3jXjHc#-U{>yXWEJ);^j4fNU0Tf2@VD=j73iF<4l)wYeb~{UDKxJQUMs zGtAZGF`UtSYvJ_Rt+_pepumeT(0#v4*VYw1;+FXQ*&D6e=Esd`QGrhBDNTsq#~f30*Wx5bTF=s3oaMB0aC13$egIC?E{Pe z8Kx?f_U{LBMFtlmrqA)}A^}T1U}>4{DEUL|?@&}jqGpH5_(eVC3(E_V4qK3lecxR| zigA=Ntl2)>W?^+Q9|#(lHmE#Y4u}`1Vb0i*ux|(PwBMc%p~Wf#P3E_r4c|l0y1swj{1KFRm7P-TtKB!%Glc z(?i2t+6dtKa2^YtQS~K`r-$Qr%I`x)k{L#WNmk!SlhO@VQy@g3Okf5JlNGA))$bGm zvMDWX(I*4cnxwmT)`*am5OpSpagELnR*Ik+edN?uC*JylDA~EJK$aql}wsr9vdYT?GThh8HlkKrq zEE(m@Bpg|UDv9`AXHF7ALZgROk=qyx02aby9IztFOz1}4hK+8%fX(%LrS`Pt>B^#N+(O3fIly;%UTWt5vuw5p369z4p=5dQ+C{WUHXUzXN zAeSZO8kbi7JH0--lPk>{j+$zjX+oeB;y?p_H}+x#Y(-ZOX~68T84L9nN@}2?D{vq5 zF>v_cL0!tq+>P?T|81Ww0&9Tc59*{KB#-hhA|ll^^~7RbpW z_+E!jVj8zg6(HvnL=G(F-j&Z*KGhtjfOyu99S5YLmv=3u4JGeOlMR?GB%d(Z*xOaTlTFj;{ilrBfy3Py_kCNMHM(Y@8LC@)^*{n4 zXQ|M>Paf=Og(?PxXD%PuPXb)^;?fDa-c}{&6|HS zvr$b}gT?F;T%Ulzz6Af@b2+FBmN># zgq#|JXpOqJ!?FcAbgAuCpJ&$^?6}D{7^x_Lk;A`p^kSC?K$@hI9ulO$$f4H=qb-ul z7vpl&kUxD9?)>@=tZ^ggs&!NCq*K@Bw{Drbi2NOZwB`Fr0u1;fN96R~+7O~0A+d$0 zMR6maf~Dc7i`HT!IjE<5(}0OX#6-lT?42*SWY#My0f zcyN7nbnUgy3_ST$fN|q!;nzPNIx$=yz{VLh4*STEl0rB{iDNYX>*6mN{&VgK7dMLax}fmyZnIwragID#-5W+APbNPRHaIrl85NpOce6Xt6+`2 zDFnDdGt0TeT4Ai20OWf8w5K-Rbw^wc9X;qyy4YYaPxgW>i(>5#AVqQ_Y8KG5r&(9t z?0sl>llscCeX|b&ivam0-+WW z|5#6{J)&VVYdYsO99FvCHu+~_g9&0ImbKHS`tl7DV#$^L-~ZzPWW=B}I2JpSRjbn} zP46N8vZX)Tve~(x8TCUyIDztWeEkD~e$+WT4dRDHn+at|!_xvQ4%Lt~iy!-;r0r<| z>~q1L&}D?h$IEp~m2#_`uu{(=swAFec+M05ku9mu${yd8TY|*Of$!jI^xpGhqiZ#_ zZbvn^4xr}9lMTnGz%nTcaS{Ziy~(+~A)H4-#2*;bF(wZuR->9IPNDne6Gh3dE|RrLa= zyrt&XR4^fp5nVD^>dkIQBcp(gi>lT6X^LwD`S?ne6G;KInIW%d+*vEzw;xu%m%DyI z3n11(uOzxUB)1KEV5O=)iOl{7Ht?m0WNyIL5%4?tw+cgG!ur5QjN6aj7jvNB?VF2p zw>DjsHm{s}0M87!VGwUXjAV0@LQ}!pm6_V~(BV(7%_~;h6n_Ps`TVi!C$OpFn{LJ&wxpf$f7k3HF<= zGMP1qlhm)Foed7AtA{lGjx>XhMPAe5`63-+?K9Z*q~E9YCu}5`)p6p9ew{f~O_~w$ zkGrJ-$^?{uiwaFO3=4F z8Daul{FZ=raVL2HWQ;MyCtT`!J*5B|8~~O~NZwuMx{ZHhHde^~Y#{{Dy3x{}0}#%* zET>crT0&nRTc3phxfI-u_P9J|H~n4nS^IFT3FyV#H{nZ?j9>A2C6ZLNnFJng+Btc% zKs1r~HG6G4LQz)WxKOa>I?fgi1Ez67$ezalQz+GV{L_EHIayo#Zo?HzpBTggGDTee308GbBi<5$X~a`=2Rg?xzL`+`VU5EP$Vq4zPfb`5{BG zgE=hC%`w4?Nk&`=0AM?VN+sFe1S|vAIDkmPpt<^u?m_ljpY_Jizvi!vW|My+pok6+ zMa?zU!EbmpaxC3M(7qV3DoP-|xS!}X*0Brick%(~8=ncQydU6?4sGr+3y{Y5G`Nv| zw5RUAt3kDf&dULry;=p_e$7|qfO3t6(uL7DV#o%Q*$^wB6Lp7~#)H`68(h-iv81wq z-p|>K5W8$@yqnM$7t4;{_RPP|SwFk_*CcIjbm!}pEA0#jRDNUX*bw7 zpyzty(cO0*sXi${yT}M%L>RPrfsVrl8qTpnZ2P$2o~{fG-!Bv`fCW=KCpdvrcH!50 z_COFseaHVgT-d0HiJD+|l!vbA(R_701_Bc(s%8**uS8ab%qqH{54M>Cu2np`kwS!M z0w1+Vdo%z(3Zbi`qht&0k~Rj^oJEO%kD;=UAe)D%>{$b-2F`3MfDoqyX3&sdR5-r> zV~+y*J!7G3xHTF^62NTDUu|_j^OE!EZTi<;KlZx853Y4GKpz5NOE{p z21g~onv~%`$P46=vdq~w6W~Hg>j0uldt7BPgZddKP=#A%yXu6J?=1><)xAIgW)~%9 zQ0Frj0Rn00;hKeeMoFizR6za$6vCAc$)cNiVhR#u3N((AVZbLN$LgrN^y@}Y)8BUK z!)J>y$kWU()MS9RJA8(FBQmmnz3Jc*S6#Mqg-5B(sM2^_C zXkn0X067Z_8FCSgP>{t1U?E8|#EFT6q94pA6P4<49nXto&1;(tzOeI;{Qc{9M1d!0pBm-P zu!j-twZoh73s~9(w>CcfY#`w_E0qQ6{XUg@z3dB~ZFTY&Kc_BQw1b01*km-$8(ck4 z8=m~T>ea#h#OpzY^H^e-B)iprT4iN)ofnkoQ*Kd5cb<1NXz(`-_ zI0Ykokm6P7#UN{tCwM80l6Mmf6%?q|gsQ=QkY&h&f?to9#pdk2k%Mv$AjyC$Ty)RS zqG<4Di4_m9R0y<$kkrKlFG5Pd3X2SpY^roq_J%EY5dc-klgK}~^KXHYLDgelkKe2^ z>W5#a>oy#AITlF1jlX>#`R!j7drNG&oH+uyi~$W1rt1ROI=^j$^wkDf>|6{Rup#L6 z4jjxE6!T{pu;+X<4^4A^oh_apezt6)s>rO&JB@}Tal2q3oB;(#&s5##g~@Xby03YMxu zO8{F3#_Fq8pQ$0MfZ_?VEuZhhW`f{dNeEo7Yq|;8uqdBgj`pk^VlrVxR1S34W$+Jv z;|4mhJGmbS0zXWp;m*7hhb53GEXX@1!#qR6BFej015!cHB8KxUiHD4R&OCM-z;)&ADa*jUx|psMs!&PeCtr*tbQt<$19o& zoR5?l6@(YnKV};@;3F64x!U#G+i~CFKvKc{j8A@YckCKMFR)odNxOeLuEa1l9G@ zia=fJFpKv`sG2b>1BqZf*_N1taHp51L-ok6cCV2a_o6l#_M**!17#Td54Di$aR zY9vI9PLlgE_3ryGF1)K-2lxn1iwd^NSu1C%}#VVz8ZwajL>^yU3otIMn>hD;i z7dCLH1pFUG*Wn1||HnVi4bDD$WSkMQM@CsEiZZj}n{h=YTM=bFNJLg4MLAJqWK>AT zkwS#Xp4lVW+3xrJ{)Ol6^ZC5ruNmr;p5c{q*Oob74=@4mmUL7X3=AQ>*Y;n8Y@mo` zXzXM@-JnI@SH?9`X(BQFb3>JeN( zk5##ZKgJp*0)B?jADOAr12j96Y815Ukq#1gW$DE(3SOWnNYIN+4Dq^hmp=gdz-?S- zu;D|iC@hV^@<3!75+G#o5#3lQEfJIcH@7=6z?Q}%l&Fuaon}H8lF^7DhbMGop!HGK zw(R!7-)1!VwRJ3^RPo1Ywe@N*S~HUpZpKUVBi;!ea#F1~kV><;NL6V|43QnNA&=G^ zi<%C-iKc(?$Kv@QzrAhxQdQ2W057gxgxNS8uBmYY->vOHE_c~8K0XjEsFvb(HS z?44I)_Ti!k@LV<-_C8X%bKqR7$dLd%aKMZAn_#zF6Lo?&#fIX>r;ditk`vCT<7{Y* z6;UqlPID1nEgmQYplO&9?a}B}*Fe#>T6E zpJ%_9-%ZR59RB>bI%)~ox$g+WLl=d?s^}whIBmYM;^nQ3%Odb4M5B^6^ZbNnkaM5N z#I;qKaK6KYyz2XZf2_mFnKoEw&ioXunJRUBU z9K;}pcBzm9RJ!nedrgYt`e9c#ZBoh4bqb-L;p~)jmR|iYbZbvX zHiH8uCO04M?CwT>Tx(AF_#h-TRQ@pQy~5MJP50c1fNdLbD7$=UY}U;pqSu_%%yl2Q zCa8;yEU6*>eP4l}q4GkFcxrtVzLe@td)4tTUia3D?|$KbV?lBWiy~LUt^-aLF(~ET z93!!5>Gg_bV7O|pybL=>pwx>x+qTyIsh<(oRu}Hxu^`w`4YI+WZuv2pFa?aZ^Kx2P zB?09#jflID1x=@f-QkYQ`Ui6VN_vd@ zW78_ud5lpzb|YJRpXtEIyKS@1s!be#xYgEz$^AhCNCto3lrJXSFg;`Pxhk)@e`>?w zKcG-IDRyae*nhe`?YjEWhCN4u1<}u^^hCAS=Fa%#&$O`ukPt^WD{7)hLZHP>jTIV; z0HkKmEN?~)O30S=F5Y%0TNu6u`wRCv`O+45xk!@V2%h62S(*f;bhQ5oPM#2t#n)f)wykb!#W~W$yi@+ zdp_PMMM^9Y>YJ+CJXdEa=g9IM{7#$ui#$~VhHoSFa|q}U=Q#;Be{N%IMnke}go*qt zMl|q#z6;3N&wjk1XOmbiJ_$Dtgb$nj@p6|sCI;ad;qJX^lARlKfFON|E+-Pm?E;KBv#Qk3xF-zk`PqicQ)DZ5!HFnA7>t^pq` zL==Igtq{5G&1Xoqxe+(%w9DD?Ejs{25CsXycX4EJrK4J7&5_LoeU4?ot*<9bPF@{m zrW8c&{IOg8IPFs82IB`#M4evJZm8-~$r-um`n9#;2O50z z3M3*kkyk4GtiKAvK1vZo(FF-_KN_b`M%_45LKzO69{l0CTlf?OmA`_1UjJ#1B1}JJ z1%jU8uaxiPe<$Q9ojSOC9@&@E0|8LqQ)J1vgvC(yFW#_|zjuqF$V|k`l2#-Hr#a6| z0`SxOE-ypqVY3Oln-JWQMFFX(8a)W{v*M4IzEbTV3g<&rG7YllQIyVsp+`Ie(um%O zkF0_skS{2@9U7(4o-%E z;CPn9GhtO*KW~4|0bs!6R=6UIF}0a9;pJNz*wo@Y1d-{CVV(FZh;JM-K@;EZ0aFu8 zaQ#9n=0zG|9yfyYBy+`d3!)fG-*H<5bIw}~w?&F2yoc2~wzeYYsFL&`Cujd(4V5U9 zId#LC{etb+ri4ircgi3G2QGS8d ztc8I=6nF;rumc|f3wQw`Hu_LgilOvfn?Od4;B13rzIR;&Ly(%xbl~ce&RWzs4z!oL z0QSC!V*A$L462ZQ$C()0*PDP*f|$|Ytl1#c;FuJ68{wh_P^;g=g)$b{4p=<}Z^6L` zdGzsfmX;FNQi4iih2Nc6HiXqZy-4oeEe)=i;Piucm zw(noKgJ|0flCfEVm+S7WT-d4O*A+ijd)i+Ne1^vShC{NBzA@!Ph(_fxdcxE>Rf7}i zhG4lI<;?3oo>?ecQQ&~CdJqX$W0Gu{U1bEogf2*`1uF=O`AstaKCej~Euv+ep#H;= zn4ot`ClIj;4_2nttZ=U=5NSH;b&>XdSExbT;#dCq!2Vg*0Av&H8- z{;dzXpu`K|_bIFZAp$pWJjVR=7xXx=d~xSxKXtdB9a;bTgJj7JzNZ&*-SG}_a|%LR zfY+>io)40lcMOXL;v(fn0$1CQMmG;XuCb<|&drDe%0?Jf=jTt#K*oD1nyc)aFw02j zyPV?eaAo9s;x#EGhtfl%0Ste~f**8_Y5dlr@p11beyD!+1~k9dyGYFii@!9SptKO; zq0V_*8vy$yj`1T>p}YX-I>~7s3%Bzyu%b9BLpR1!ZCOsfV^aU34`yW_av-Kt^mtVU zCu}{1;E3+5q{dkDeN%$YT~97RdJEZ~1Mp3eq%oF`I4uw(hP2ce04wZ|B-DIPmXO_f zaGJK|0@L&bEe1&zCRz-f^_Vt=9!xEQkyb`(G@s$6#J0u1eUal=0A=|&6VNBmnI=}u z>CR*^YdML+rl@XFa4y{S{oPnH6E4;G9c!>!U1f8=idhuXO>N? zoWXRP+~nUzZcI;jScMhFmBw~Yv{RR%3C_31;Q5`f5hu05TLcrVzDEf(@gE0d2h86U ze}s2)lL%N4*x;}U#)^jEev{94{+`_DC-RT4hCf1-KBf5ZKWIP~?Z==nNb6GJ_r;(t zfcqib#|M9;k9mxcq8;_YLV1^}d-reNuc%RY${_rADlg#NM%y(W;?=OgdN<5uks%A9 zhg@_^AE$X1%zDA+gj|&oeTv2jejsIw)*Ry}ldcHobKQK7Ou+)2hVK`A>Xdv-bdQN$P6etgw>C++c+FHum!SgaG9AcOd zAOjCS4Mj}utFUm`=*FqB3+F!+5Tf{4-gThkEonVU88s1dF>?y0>QE0hYBlm{BgT0K zukb;cS6fBMj;#q^(I~iY9N{k8k6ons)hhYOu3j-5vI zO|q7l;6ZgvDIQFpSEtm73z?${K&GXNn@BGw?X};!%^WrO$E*!yd=~V9gED6`QbPp* z&Ok+`gPx!q-in+G0?`iY^VPZSC)3vx*=U=<%?h99m4AEcuE&?-=-+=MZ&c_X<9i+y zh*8Ge8dZe8j7ZXQ=8>Kc~s=HmPVzKbIiG#p#e?*eE zLNk!h5)iohD0mbmE~3Hz^2?!K&U4Vm^6t*b0ghhq<98OX>HM4gz*&wQ+EQnSkdX6Z z<=5^NzW2bHMgwmi7Qi#D1Qgos2-6X6=E1=j@(;v92X=0R9d;FC!2P2FzOSu*(kOFo z4tr9U<$b!`bKzo`D#zWhJAl;g0*Z=mc%W~E=dE8o4|!1+gYs!F(Bo^Kv+LfIn4bnf zJNr6H30w8|^nu!d*aZR&aD9&2q<>L6kOwsPc5@lPPoe13ND^D1Pp8;aA^I7h$ z;kSU)c(i-c8XRX3d>}|k7~`{ncGK1V@5_*WlcHm)rNax{3(@_XA(4Eso z-QQjr4*lDtleOf|NLxx3;X1Zz-NvN6R#VnZmYE}V+E3^8ikn` z{I12;g=}fsoo!e?SB(9nUa@(w;8&AfC)gI=yKD9y1&%w!&-Hu|pZ8b`vkjKVI0R)n zt_tQCiv<&AsNYg1Pz$g=0s?p)Zp0f&GUg+C2qPv^0$aXq>-Mx3%i+wx@_gEHd&7!Xvzse@iag3KpQF;8yz(l>^lx3uIyuzK`qr>(-6;2Ug-<)@A+ zdM7Iov{+p=X%S$0%>ST7duLU`JDR_xmmQE^u}ytHWz=>1)PeT=U=Vtt&pi(dBrbeD z#-dqMTgfMJYD6fyS`7LgScF4Oyez=!p9Nk|Nh+T>o~+mIztoD5`K+wg6)BkNDLF@Ra<*9!o3%?Vx@sh*_l8Hmc4&@wT1lz`gyBPIukHt(>+VjV!Y2sY0EQv9|vR@CmsUI zbW}h#iUBq71kUBm_fkOq_SJ%JKnDfLG_DNb{&4F0m!sXe3eGuleOBnFwBAe?)Fdm7 zmZ0X-U>;%OB_M_+09R#WB}FWLLsG8O?UvnHynA4UX3a>7s2hJ~E3I;J7J?$ygozx`VoJWzJ5AbA!XCJzl5wqs^#y`fZ&95bua~ z!0{c%f&0-mgz4^ceJZIczbJfs6I2tXB~@yK9?{&Pu-mWjMEN5>5q5U-?+}GAW>a8P z!@{z%s7|E*{>_XKY#0C0LmWsRexr+`{9UGwUC<>$fIj}XG|cR5Y9eTTjd)|4vK)lW zMG?bO@#*y7!*RCMTiRP=oe?;q2`GzVgCswHM}cpDEMY5$)i#MY;NBuPfC-Lnpb=AZ zCJ;=Zt|y~b<9rXCxqu=@6z*gNvmIZlzh6NUAHVOfp;kr2(Qp%gQe8O?@TM z_|#%@XSzI`J|Dhyh)>QGbZce>HIUZjtLkt9weTXv@gGKAMAl$syq1~0rZb1xP|1Ao zO}-U`w8MlpZI786cQ^gV!oPo@R=>CH9r|yZg`dYg-hV&np1qdVp_f`33d8>*Jtf$u zGa>NUFck%udQJS9LgHD^1zE-WX3&~Sh& z!6^D?8rqcwJf_}2BZ?Mq*$`07mb_ZRySA0jf;g_$KgV4`QDfd3)lUWRsMhHkC2GuO z(68q*+B()*HG*O$u@#al<5rFh?4sx0X!N*v zhPpJNnGjZj{tmiMk0sl(VX#7~n9?SW^?={7S|3kblrCL_*gfYZ+csNwcXwwQwkvKg zdKTUlO)q*nncc_>A}uXTOfC)axgB%sIw-m6R^VP>R~c1ELBHew{a`^|aESr4Db@Qk*dVmAF8N%VUMdz9+q_^?DCL zjmWb~NxRPrjP9={m;J@@v8Li%SO4t?l5Ja$|D`$;lJqQtP_dt1YGSW}4veJ)j|;rm zF#mVoOfYtHVtysTdiQFoZ87)4*g$+|i~&BiQ*RI)FLQG7Veu_CDs=|DY@a zzo4U{(x55^61C`9wu{wgz2vL@^keEIR||()iKC5`Q{#&S{C-wcRl68u zaTpZY+in5=peY_b8?`u4EpkO-Buj-jX?OYyGw&#^s(Cnl+YKEa@X+VhApYmmhlC>Rqfpl7|(rvQn<>7BdX zV_^v#sB_kU#P=4F0KOT13jTZ`rtil6Zsh_NdLR|Z=wpc898Xa=P-M&kF7?=Y+uawZ zu<(8H`uI&T1e5fb#_E(-s)ce1Q(rWV5kty$=ecKrZ)>udgtV(&W>;ZUa{ z`X*vx)+~+i_xQ;Z_oyxQ_i&&Kb;sr^J!zx5q8lGeC9!9NF0S}-s)P^FhO} zrH44y{QW0*C)1QgB=d0X&7Q~~>^D-D1%|sN^!01z7_(+>z;=sd?|~pmEY2mq^-tx$ zg>EK=5M>#qSc!iH;>QoZhdI9IcL2gUxmZvq|JDMTW>++jTUTmA$`bnl4Q3Fyx6%x9 zjD13VT?GN-gA$1J4gxB_OJZRn{4|4)L=Pxzh*xwP3ho1xTvi~9c(*K(*7?IQ2GGJ$ zdbIk$EQuD`VPifbzyu|ra##1Nf8H#x`RVpvi2Qw}S%3AN)1T#Hxu^+;^XEgg?fH6M zzrS$<1yn3lGn~>8pPBdD*m9D}BFHoSC(MKkLccQ%gI|kUGqfnCJj>(`K6!on>D#AI zrbKwjYX9lo#47^g{$Gig?(sW~W#Qp5^+M+6c6N^%9$xS`pLivJu%n`wA{TV;p477n z^~*>&s88m96B9_~rXkd<~+ANEcFP!?4WSn_F@SgYPMaWl)i6 z@p_c#$pRkr7uLxI-!H6&O&oBjP~<>B(Tcmo9hL@aMnuD#>S|X#q$%v+8SP~xiPK=9n=N z1q-0kPY^VpX&={ClcEVcuL?kCf1P(a1t9;868n$zLSYg5L@WqK+AUHb@7g)VY7+hiQ$Bj42 z%{9N!-SslJ0aoEbuH8Tw_X>5eZY1;9h7%X3hRdP(yDyz5$O+Hy{n?T{5wYFb)8x6l z@NHjKJd*PM8Cs?opzh!AiurgQALaAR1}U~99fN_wY7iDEBf%niUhKwWsV=CHwdQF^ z7)9g-trTk-@D8~^o*&1Q(gFncJ%PcqSU-nvs{kB(k|%M*nkk8$_y(7bNYfBIUDfQ6 z`@5fX=k{>_|H}C;bsLOGKqwRVgDOHXO*}}1agt{#sa%L8Q=Yz^&Es&n7?H7++zNE( zpD6Vjo?IxouBjDu?DNZD55(D+l`a;CN%pv2v^Y0zOJKyB=8(HA50PX6i| z87rIFiHdZNuZy{aKbMAYJ?*ZBLlvn8)RC4~GtUc{-Hq$HIFAbuI92~zYskt#gkTAi z9IP;p)FO5xdUWp0cZEmRQ+?M5wCyp#$QxFT$avQ_oA z(>?DXS4Ni&yQBEBHDVJJkW|G$~2(OaY+?43MNR#3*B`$z~>+ifpqP| z-7YJF=41H>9ukLVo=As(m8m82G=~c_Y$hYr4`MHE3AckLkV%l!Ru{b*DgH76*A%Cc z(pT$Xm6~kv?}cXF`^rz^LO64|qKSz0!S0ih ztT>0AR)1gtl#C=?ZYN`QGL_sSI?t;|UTcd>HhQNt!~BHTJi53AuwO%RErdS+*X#%L zr)3xf88os5ht%(^Za8TK9W*`cY3_6k3|`8%<@{9NjnUr_>8CqRN!6ItGr0!fMOQsb z0X(dzYy$y9S`v?4>s+^J3eUBirfhBRXs@H6w;I=z1F*|PQSu3AJ;H5&!j@*?@!)T3Z7zqz35o^-HAnE7|A`NDFR0YeWF>Rlk#&NOe;LRgTa4CZU($tfvyH$TyS`zJQM#Y^I_+yz0|2^bT9)s z@^OLA$od3(M$kooqX`FHw<<53>gbm9R*YiW=^mUpd$ujMs(1R?lL0q;gJ%BE#P*o4 zp9~=$h+~X(e@#!C7n;XYXh7~M6Y(w~9RoY_3J5}G$=KhmJ33pGM^wa*=tCG5A-Q3Q zAl=BM)18UkoEspToMY`YK%Zk%;0;cFc@n?@{~!|q7*M9h(>cK-F@?X~7!0rvn;9NM ziz{@5@qB=L`atgQauit2Kp&F-oyrW~)Thw-AD`6bxu$MS?=bc^lB!*|zq?3sbi^KH zsnp(W+{t_2Gy7%Kw?Tt$@Xfyv&(qk6$bwU^RhY8hJf9ua*w+3xpIp`lr5r~S=I$P> z%E++XCQrY#w=+KJ6FV4$O$^gUIJi$1{J6`Brn+niyB@sh=6?6nGKH5L{o6_xvBKm#cKALB`!t^q9QXBYmU zvaVLDsfPbob)6~HIu*DHg;s{2X?ghyRK26Kc!V`apFMeQy+TpfJ#|&Wm&m2fU?@}E z*>>5+ss1#Nj(^Hy@v+HF-|PDVr?-k!y3gA7qLG9(nHD=g7_ zENF4OdG9}35mUn(WOj4AsEW_%i>mkwz8&H}FjjvaOTUryv3vI9iu4WC-pg-$!6%@{ z9QSL(vxi>XVE%Ww*Z%4EsKBzPpZgf!(A1oQ)UO!)>+gDepybj1XZ zagjgkP?=k!Z>zVZ!X%n!>b1PctjF4Mv)%r7!m%!f~Jt81O-()PoAHx0+L!+9Ruw;z$8x%DZ;I+XX-)_1@s#A|lT zh>36+5NrW765rhM$K#wY8_Pvpv3u;9A5&&#jLrSU?(T(!U(kKOY%cZH-CfBEiSKA3 zT3eg3NCAV694zr)m+4``OUr4b>^)&|t6f^_@>sd2@dfIp!t~bnXc9eO2*4 zyVW);>+rw{RI4J^8u&RNF*Z|+uIaUFTVe3Niagn6JLz zE+WHt(+aK+yaw&iKh4d)&zEYKrSw66+isQ>%_R|@Z^kqP_HZPT`yES5MlY2PY5Y+D z3bLLU7_kSYa1a{Mf!iN@5OsMMuKh7B`Q5rpAh3W+`5tHKA9>%TMIr_u(1Ho&J_lVd zrOUq*nFqoBu3+bHc1*u)Lh3oL_Wu}+|AdIO_N2yjCoCnri!{?Id!KWsXYrusmLK}U z#KyNDR{#i&QO1%;cw*I;2^K{xz^6#9wTu56`KftXt^97AGE0_bj5>w;TYhcZXpWzs z`RzISdcyn-T=W9!=-Q zl1y4H{D98^5^i;?_bhPa&@hk3(OCy-pQbr}yoD+~sgV`JzZ*6%^C~p9$8#jC8%H(= zq<$Um-Hr9ar}Mojsv*R$W)ANFiSsjHL>XfU0I@$CW8(IQA%Le;FexyDH%1r|pvYlM zWl@d2uW|XG0Y5Db7?_8QH$!{SU1w(L0S{(%i+8Hf6bt&OhJeK6Q^rT*!qf%8%0WX$ zEfE7>_TF!!W!b%@`D@ywo~3E%+@)t~OFH%?E4R1|s_zJBeGb?r+^>sUG&0I&6>ALJ z+`TJCJC)B0x}3oQdj)DH+!WM0%|TrqGP1I+5h}lm;u8N11TDU$4fx0(`&(8*LmZVv zUibYE^q#IM?)g;mTPA;!`t>aEyO@`;r;_ZzvJ#V)>M4~&7J3Dn3)JNV2C)~JXdc@< z@?Uzjx?V9qJ0-DyHAzL!ol!vF20TB5c_@yebS30f-f_+-cmh_#PUeM*CI4h#KnD_9 z9v+QH-iVIoTeRVh;sBI^C%@(OCr+Q3C4@zsekV6^kXRud9$Q}Ac=3aV?Ci8UQ&j51 z2IFA`V`ZX%n=x))fdl`6^>QAki@WH54`XG-r0FF^=_9^NmWPPuY;v&PjJ?T=wKdRa zKHYr!zr49mD;gW?iW{x2{?Ar2pu;fMIqemPm;3fxLCWhJgpMyfTUFXk+sf3C)e)!I4#>8KOnv$8}2A|{u2 ze4@_W%+7up9(7GjJU*Q0TP3EGXzF=n^2?+n^zhmh++PVC$q`?_Eqqty6sLgbT;JUD zpjQ{!U@=~2&)(!SmhtBxGC|2#Lrq%auF zViqBu=s+dhQ)@pw{I)r7WqrrQ)YnArbVO9N`Ki-M$=JC1VO#&Jhb-JH^x#ngwd@3$ z&L-j1^NMrd29^(}zVt||b+)S*X%XW0xfg10yQOuXy`&s`}mtD+H`(B%2NhlHQ+uie$E5MIAJ8X%Y$X!y~0 za5t>`H2F*T8A7h^8IE7eUfQ(~&ecsyGbKL2Sk81OGnnVh-htj~AUm!_8Vd%mt~Ain zhZ~~^>P}!z-T*2VVPuvq+Tu~1=$?GGJDa9kihdS^*{!Yai5xLrT31hTro+2xcJ&53 zA6&gq3|^ek`*Lgb`)fK?P}<9aj>FFM{$5-Z!BB0e-YyDVeQGu8Tw8h0*Y?&8rE|gB z*(L>J?sMJ={?TsA?xSweeYKbW6M10wte&1Zrh{^WC^pLe@6O{6&Xou(+F(FkA zu4Npgm029%4CjF0P!>y8m{IxLLs-T~+zfJ2iD^Z0Jp5J%X?OMZMl`6|?x53z9&k9_ z{dSuK;6(oDcW4RkNv-(7So_#-E@0 zGYG-DpVNaM^p{a60@5h28+`%3UC-<;FD(sG$a*RV^)-_AMBh%g{{joCPp53|?))0$ z3cKfbXRE19m836#Co|K~Q*O4vpAM-ROawk?q;F+J_+tH@zR~Sne%%|qx%3Cwf?YHxk=Ge{=$oJkMTA-5sX%EC zG#%{?{)e9a56=Y|Gfg}sp?;RILvYD5mGi5Zr3mfq} z_$CueS@!@iD~QrX0KeyedLW=jNbi_xt(+WQKpbxxZg|je{G{?%-~DdUYI71B%fqU_z0tT zVpmN3IX6YDhHaU7>JApoi)#&GUjYW~TWug8F2)`9yOFNOaTVfc4o#sRYn zm}cz??rE{-Sg>S1kzX@-kSXjGvhnrn!rB*C2NFshobWk#Lh&PBZ&bqKl)9d!zQ~9h zPw^#qhY^w-27c+>`ui`n?A=RAhB)oSwZqRSa1-qp!odn(lRwL*1^D`V4KV~wFhfI$)>HrQx`@lab5cnBTR4?mp zJ-G?;HR{7s>F3Gf&%{bYRcRCzcwdIjzSp7E!smk3kdx?}X*iNvSeGvdlobJNLndLP zUK#^w0XfGU=jfEA=7jmra42l|XQ-u_J?iwc5|D+}=Gei+!S2wl_qU0%r|y?rD|{mU z6QNCb$THkD_4HSW$8+F5=O&o_X&qmU(a!!tfoY1@ZhECV|?A2ZD#G^u|WQF4C0 zmU8$=+2C32#RN=JM>Gz;OXRV6WZ=sNT$j|hwz&>yyN1shBey1f*Xg>Gg8~I-B#!9=DC#Pi75SJ^| zfy>u$VmB%_^xE8)^_GLLsO@LI)jHAC5#g4PffudKX`}82aWmU6#Hjz^S^P&MgoKwky;nd_e_LUV0c}<# zo|KUhGLQcfuIZ9)_ibuCM+7u6DKK&o1KGHz;Mj zmrSY)O&APw5Uuy;0zY4~2Azp`d)`$4=I-Eb?olssvG|q$_05sxxF@+s*ZNMsi0zAv zRt!2<&I!&uM)}nug>=mpTV|_acb#A1c7FAT%|x#Bv4UZ6Pp9+*isvF@p%?;R?@*nq zt{Ry3G;vTcAWfU>uQtIfOLO%H^cV%dK?3aV_{akY9u8mFzjGc=6I1q*zb@7=$%-(O zg5V@Jou9{TQ=Q4Lz^+EUhCk2k_}fa4y7vSSL1{eTkwVEi<*RAcvST5A1^#;tyYv3%wap7eP`g2+#br$~ zm6~VZOZ-gHzkf!6uUDSaL9x4Cu3dpULv5Fj_6kcXR9{)x$`&_PIOkLLU?7O(zL^=>a^CF+0ZQ>L(Y~?ZZ03L zA21v`DRx8qm&0u|?Z5u%8EiQSLK>Rhm1Lb;9iMU*W(fnYpQx=h{uROESfK}e+6-Wz zS(3xcI~{&_3b+9b+_`{*U%`nLv%n`P5~#9*5J$~cq>Z7p4_Of?wHms#kCth2eF;Rm z2Yho+gOmVSfp8Z3B#_QZVGqzu1_WyDs3QWhCeh_OeM7XT)boJ|aAt*B_6#6`@g(eoY7P42&T6!dFplLa}Pke%r^j zoZj9+>=i&PQ-Z(-gdWYyuP%4qD?x|p1N^!3rPk`eGZzFN;MLa7$XlUyf|Qlx-cEO$ zRE{tGX0N-PMQbKZTfp>UK~FEa;X!!Zv8P9xp*uWc9UJpUEmZW~9jIqjY`5-T*ooGO zSF_ysh=#C>*0ju2B*bv=uV9w(k;~qzYsS|q{wu!~`%FOP1hGXY7myNZz;jtZX5Xm6+!^b`~{HMNy~CKdr3qO?rwi4zStVe|0T z1>x>U9}doM5SfhGE?AF!qm6UF>KS(YJLH*afp>M+=~GnF4BqXYtad?{C$%jTwf{tY zA`C}e2Q|kl%40tPZ41@Cl=l^VKVd1N=+J~dd^H}z0L{RKjjZU<%gyt93r0DA4lh+W zJA&hYvE$6ClAh)0oNBh868_Br$Es56&7W`X-(_yAVA0B$xu0ZFEqZcVYfMR@zD!lC zeaOk*IbAt8oSz2*CkEai-sDhg0dVmdjw*tcM6m`P{MusRmdFr3T$0|{jdb)lDKmAD z*jy$646zTNJ_MOZJfMa;6{g!&FAFpy9utJ9-wnnNJpdThsS`vR^#oh?>P<049Swm9 zKIMp7eo91qvTg6BT$G`Txfg(jS7IAzS;- zBv$wXsF((UNwf%OagFx(e&@MH4l}5Ve*^=*KjNn-`_Zpn)dw#v65B`tjl|O5Sc&O- zd))b~FUB6)T=bN+FIN5WFh_n`Qb2R8TT>%o=1)|Hky?kWyr>|L0PnL!SI?OS#|Yku z*vF5ns~lGO^X>LE)Z1JeXEE3k>Yi3HAoIu}}Sa^noY zjxd&Z44+2COmfQKU)&RtvqY1{=byHpBtyUm1E^uz5UGm+B=Hf?0Q^*zhd_O@lOm_y z^;a&@7g#%f)M>&nUq%z;dXG`id;a<1%&xLfjn8f0PE|bDK;>o%V+k&Lk|{KM=*->!Ge$sgVPzuM z;*PI>m1OkSdVcFT>r-&|)rP0H=m+nmD*n|h^7vX|vvxFmV~+OuQuf}IUpVXW=(^@- z>cUsK5r;OBlkr7pnK0G7Ew2ut_arR-#vo;uWA9lI+vklZ=+$`);z4Ys-nH}C&{r_@ zKUw!-3bK81YvoBk6B05gh(wPu0oxziD2gL85eSK*0`c@QC}4w2GW)&RcZVbbGztGI z&-2hI@!~~AmJtX2Z~mVxobm|c9I48qd%TxG49CHzI`Xe+240z@B1hBe$$ZaekryJ$~|F! z27cd>n-ygO;^l+u2+0c zaJEG>(i5U~Q$?!?XsU z%(86Jys%O;t>>OnT)AcVj^%cbLRgg0Yt8)k*ycY`12#8Lp5BrDKvJ`jWBIb5c*W(D z2tTo=@d5)5?5Zz+-EFOFhm0;)oN8^iA?e65UyDxOPPC8Q&JsK}zeux8i*{;KFFYg0*>kT`G<#xbwUssp3g;dg ze+}XL-tf}G^?(sY2e9v-+}^k(_tMUGyo&B5fj{$fR2LBc*Yb+u$e@XfA%y zHHXpxmenmE9-<7fLmCNNTV{Annrc#21<^iOauRpull^&%Aaef?YvI$MMaO+~e1>ayR=HzeW%nE|E#*>R|J8T(wX@psn=01^G6vF#uA zn!9g1N14GqRUD8Bne-SA7ig^&jgsH%7ix@BU>(3$^-pu)Hh zPrI&4(7DK>5Ldq&%DWgyX#r`V8TIr6w7M$}$er%gN~D63`J5frYA$!L^bOdve1B7< z_4GYj<4KD;GaOZ}N7rZax3Tjz!V_;7CTz0ducfc$On(M6?ygT$C_G&go2kk-Alk~~ zr}3J^cM6J%y;fh-$>kST772K=AmM@YQPI+Y~T~rrs!;U5MJ~bg;Lz*BxS6p`EEOd!^X!eUg^5&xhHB ztMXb8b9SFp)&f6VR7h{^(71caroWT2|M}T=&QSwDefp2OdV`B$o;6|84y`qwCvOk| zjDv9#H^xT}T|Pj9WiQH@R`*J3*jd4AAO;iwxd03!L7os&j0F##1w+OdWY#VFK~!2| zP(I3%L3nGQWCTdz8sdgLucK5&fda|>K%SSv1z;oz4$l~P(j8=B!Mq%-1vDkNpi-J7 zk5i><{uv>{-(mO7`_PW8Z-i~0Eb|K7B1tK_R;?YiQS z%b;gO?w?s;D!-Y0Ra4IAC$DFn!ssQdcoAayZ$Bk~%jrs($!ak!80up8C~%jNoTmsv zO1Cs$dlZkv;mM*2Py^v$yk}UN7^|(baf=0Yg5#i01$_Iu*xS}4wHi&mbZKMf#yHEe z=Eu(t5n(q0Nr|Dxs_z)VkqSP7XhmLi|(oc~b@_y0IL??9^m|BJuwzV^M@ z`%-4I_q?(tgrZVNL@E-JdF?$@_K55XWsh7dY1pFTV`qfy&HcTWXf3jtJR#&xL+xetcmX3DVWtoA+;-Zy|aQvM=O z@{@r;O&9yiC~7739qd)6xcvICi;A*_moOVVlpj6M?Ja+}?gUYRg@}J!>lGn#c$%_A zzNtH5rhmefl@G(DkB4jaa?=akT1PQoBwu?UWD75=n!8u2>>;`Mwb$OXzL$2dE~$dg z0&Gzd+R7;Kw)wb~<#mkG+3>Szci&`9wLdv#s#KzFIc!3KGTxXo%AR#xpY2oL*J^MV ztIr5g5)!9SF!OP1#} z)Rg+KP9mn=M8@-*rlOSn<|NGa85pF**)I77jj=uWHL}ftUVFr@O{gX^0Zw zgPVHc_`qP0Uh8}}62v1yyzR`9(COAT3F;fy*uHf16J+c@%W$0L_TJGz}KE!_zWUf)mWx@?*oydHU!wUm)APQYQFesC?E z?u2@kVU?E`hJjc8cmzL)O8p^m=PS8xc_UCqh%E6!KR0G3LQ^r#T~1|>_3w7^vwN=g z!jiP2L?RcDfm{%oEqn!r7!mNCJ1?yOd)5#*Z-`hfOO$$}0jDbPU7|S8>$v^9zW-#@ zu`wwrap_;!zYvESH{aF4ZK|lF(ko)$G43y1toFb5_I~}sx;M%Kx)msV>~eC?*u}8& z??aS*)|5L=d;XyBlK5V;*2I1fRy}ChfA`g?Q0m{p{2=|uTj$-(k(KNq9Kwen#(Iwq zyqC9H4-Wd4m`EKUGm2PR2=0gi{o4r1h1Q=8$FEy5&A~c&jdrtvlXT9E@c>BOdJ7wO z=J*VV`IJmZuOgMg)5M_@>f9-YSHQ#s5As%jZ9%o$z*16m;d-B$9AIGFe+}{=f{QcF zc+b;e^s6*k*+=_XXQld|yWef>YQ8N#787hYb0J3eIzCeSB9`Ur7xc}29*wQ1ZW!?k zCLhrK#f>m#X(1zFaK(x<1ek_7y`dqA6S0cl(9@D1g0@O%=;?j5@^%SKQwnVb8v0CA z?R+eC7H+nMbRQ1mpQ{YI{V@xC_Sj3u*o#Qp>srNC8G@KY%v+?^S;CX4%aqk?<0sge z=AKsVr*S}qUtPT2)~zo`l8sJd+a82-`S`pYHX^$cKTS%jP)6efxQ+u)xAw8dr`H-a zXcDZop}k^Qa+QI6vgOgrD?xAiTn*>l{%Yl7zn`PvyIVHDtm>sTl=@?nZ6Zx$Lvu6v z(q1+U$yQm>1gx7;lD!==5wEWcvAh)_>f?j{i^AISLi*LYepOd?Je(22q^wmqLnnS9 z26^M*>ul^)=bDTy0nc+T@J&(jJfxbD>=D3-5t1LBveDyqFz_2oj0O;xZO6z8VH68& zdthKxlL;=#bX>~|2cgJ)>&A~40Mx!n%?}u2+m5n#Afd5c`Ph!HO2xZyAe4)+R@fHw zCy`CYC)8w2+7pSxp?0*ZBKsbRy|dOjVfeQZPhWdtx;~rFEgACl{M|TQ?8O;WJ!={f zwANUM!RM%ULZppe0z-HS4Ufi*`<;_0#tT%_m|gdDz0z_fYe#BYQL~m1&7gEFIejtP z`uN+0&L3UZ*8>!Vac^ER$#u!R$-@!^8_T zit5pBCC5iuuOjQ1Uf}mn(`m{T#BZI-IKLQNnQbuXkTDLtCc^Yqx$;@H2E&OuXouZB z!QBkol6aS^Gn|m6!O?YJCYbJx{GwOEY^vCom|WU~CP2 zEmaM;v6wO_3RMDI1K3m^KU{5<0Ei3-XbVq}1VnW;7~y-;;^gle`8n}nR~`Vq%X|PO zV0+uD6d_b8F}I`Zw|=_j=ZDt!c!xmaKFj@ zF|=Ax8g^^eYOc6!@-C zmKvn~98X-~{rf6q_b+PE1I?a-52{^>c)XrG-pkM4Cls>VGjov+&=;dg-bmYUuzH82 zh9vD7;1g9z#bnA0cK$>)(D@sB1j4-YEo z0K_CdUu?e#R1iUS1f(T#@Cfpn&`IcLnBvKg;AFuMQ0}3M!w7na`ml3y#vh`9nI=h= z5q1uZ`XhI%_iA*l^rlf7X4X$!{P#OorKo@(%Jcz=!OAzLTjNSrVn(L>Bc`d+y~Cs% zn~l-?$xzHqIOsNCWnN3Ep&W+3KoExr8bNtsF@KYs6{R@9!rhx{i(T%nBDDOUY5=L6 z$snoDC1C06<+$rX(fM!ED6^l=KhjymhtdF`H&E~(yIzfD2bpcF{_I~K;@YM6=hW+^ zVmtI4NV;8Hnt{3giW9SXM32)7h17S!Q$imrLISuBSN5-xe1sXJl^Sm-CWQ>CX8|pxbd1J zrWB#0Qvcq_cX?EQOi&mNlz+2I<|mwMtK^!yfCO@MPUgsJD6Lus2UJqz+W%aAP*hug zZ(9Bcd2Ui$iTK84kv=ZIlB)Gw-RuY5zue~cAHC^ALcAj^d0aXoHct(67R%NqEnd+* zd!$JFJ&}LAs?$Ok*kkhoRDL126r8jS@@nFe$g$`k9THLIQ-tATVFR&X?TH|{NwJ?* zm(y7 zv`P$oK4AW2b8Y19)$o&BQ~NulZN9)KI{mhZ?Q*d^eD1Cg(0Nl=a+s1P5TByL3_`;_ zSZ#B0=8MPPo!`w6reIwp3h2Z0Cm^%}eV#Wyr;Yl500&6G!xB4*USs^AH3iyqQ6!-| zBII7~aB3$ETo40Q`Ypn)%ZIo!0L)bh+}4omvpT2&g%;jw0!S0Sq14R_4N_oT`b6$y zt|)j-pmX(pRn?S;8uCF=8-C5-q04)p^|L^W9^G;>vDP~NN#uInYK>LGD*{ze)j{UZ3Y0)wlrthyl1xuo+HBG;W zv;3>8djQv*-#KspK}}0*VnXrsERUG-z2NqgZ*%?}g>et5rfh#>BBQE;O@pQ>Rq|6$ zoeMw3jOSBel&U#b7LG37eDIBMD>rJjuw-kmvJ< zvdXG5Op#CPs|%$fo+>xpb2Z-MLt^{i!|%kx=F$b*+eXG*1IjnAbuSM3wRCs23h#x- zRF#{YFRWVp?AdMYEzYOVy^7m@T6A>f6|F(4D~l#&ru=G5;2+6mUY-8n=-S3gkHhE< zWH}Wg$!cTP%7*aUXDzb{5PJtoyUyEB?fa-{(PQ+rOPUPP;d&g8qpPrSqO(yd`Q{iB za!)~ooG1u?eA6?Fwwf6X-vUz$xjuD^Fs>9~TNyx3hOGNv>W!%LYF9+A5HjTn-{j#q zHQ)t9!WQ?hfw6QfAjZ6XNQ?p&v`NiW`j_Tl1C)PX?+u~6p`s=yN?^5n04~TB;T;15 zr`0=jCXmI0*P<<#!vx0fSN`95@IcFXNX4I7BJ~mM5m5cktR^k|U*IDjZ|x+jj=1sC zTR|x-GP`~emTcy1rrf2t`?|h`#jD*f z_T6mMB%w+)e4Jb-sl6DNry{Hsy4d2Y==rxWq}`rx@i(XQ!Nf>Z(I;}i)qCa&x7|C; z={R6S!J_m21tmcD*x6WqK&eGSIUtYQyYPefDZ?E#GeW}i^Yot^%N@As-%VaJ(`fW# zWpO1eQoijYzvKzqS-`uX`nRo1Z3ulv@%&eK7}V}I8-63#D`1CQs6KyQY;S^+^Re{r zy-zpX_M48?k2f6Ppyar6pAY0+osO&E^@3@Hmp8P#yo#8Uv6sFUD0 zu1j|@5(l!i^vIfIKhz2u2pCoDsPa>A>VE>i*@Jntc##A`@h z`Lx1-?|~@zp+sn?W&9f3>^004G<{4z8sy;bm`JQi&aD>YzlHY8RC_M>4LLg6-$rb0^$OR)2Z@7D9WGoS zE_XXleO$M3kd~M2$mdfI7H+SilRzVsz( zluwY8zb1#|8JB)yZ{ZxFhyQ{SmUPW{v8Z*0xP3F7}P?)#Ce|8AMTMO_3_AuLai zkieS>5Bdyo+Q4@2$#d%9sb3KsWOF*;ZH)xb8ujEj^R%M*{lI%>cY+N@3OR*j@lf^; zxnOT8f35SV$}m&K<-TayV?_D8qIzAVVu$GOZr$HmcX9&tzW$CMa5l+mtbSixU+=?N z+t^rL>n?un+~20KAv4jSEIuT_VcSP6SRMc2K6wBlNhl2sV?hzwxk&F#U5h6Ty63P3 zbBph-TV)2G#h<1plX z>hfHN_uBVBIRx&r=t`#5^<34TVJxJ{gqMiF0h_L8Kj#_^4c+)|FcEs^A;iQgL$Ax! z!t6J<;jnsvJLE^=41T=|lO|BDB0!2;p(^1dDQ{h~>%@$W(}(7OgBvn{tpCeaMpasX zdV;DF(8sSYsjMA&(1A3F{xG(Jp6aQvVV60rxQ0k$nyT{BAr(J#Mo6Pghe%C$Hwbj> zO-zQX+S~_bThbu${wi;+02*hiZ~F6-^OrQnt2;&y-h_Lt&;9IjSr72qzjXip)S>KE z>tf1Kndf*yFmMbypU^W*@nl*j+j4TUDgOKx#Mg`KwNd&Iz3F(sMVZ779-Fu)@V^9_1Ud|6V-tl%(ansL=orKqNger8-AQd#nt3rhG;Wj z`QtK^P2_k{OGJgP8&jDq-<(Yi7?qxbPYhggl%sV((`|^q%NcL8=2Y%JnHGt=J$4?W4PcC1` zW_Maz-fi&1OVH(1IQ@=K8xnjHSiqDEfzi$oir8juk@omddBTLa`?m6$;PXWz*nbtj zN%*vqL6D4$b5uSw&xiWm#O+rAJYP_E+*&j`6XSA?=h{r>(j z191T*auhXuANRZ~z;F0aOlq*Y2g4SRad4Ud8vrfg=~20vxPfQHGB}U&fjln+vez-2oqI zfZ~j&0oIlg_8JRr8cD2OeNy90Kb_U!KSB58@A-nW-OC(FTU+Z2FBy5O&JrsByTyoA zxLD?R_n3nvIPbp37$a4icd~M!b1%1I8ecRm409u+n<#LjCBCtJ(UMQY&^{H1mu(}` z=E_tGR)GUKo(z{zTU$q@TKiX<8%+nJeIva8c5F9rre8Iu+`~;#`|elem^6{#PIVI- zHqzF%KJUF}XeQa(xU9V1@EN)BI!dz}Vee%;~8GAagC7- zxr5dg#kLj_xQfz}ZHgMN!l>*=vL{a35vrT$MXcMvwCG)MduGSKG+1Z2UGqIxdn>&eei{(QS& z=lSr;I^_1lMVPIxD9N>`m|@SBR`XtB$@_urUh7A;EM&<3=gGKDOqPOeq@zhtN5C+0 z{HU`f8Ga50w(fBnkjE~I)pG8)MN{vObwAQV@-tvX02-cCY7zAGrbUp02rzmIBi9K6 z)m$)j=?D5X=69O&nd=`DV=+cu_ucP=^b%f%(`H>)mWv;uU7jvUKX%sr zfXn8yL!+$1SBGSfH|Q7kh<9mxnq~PazktjkMjd-PY9&5iA!@Yb6_AwG7rR$ynan=S zc1;F(wS-|RS%m*8OJ|oqVv3t8gp}5=vAHmLJp1ByM68}Szr)mp*K~4Ons^W+-EoFe z9`OhDqtYTuoOtW#-j6@aRaD=;{!!M8MVf|K-wZAzCutgOUOu&JlRR>yA39138kYK9 zA)Z=<`9L*$oP0PWJl%8e`Ui`&kb6s~52F$Fy{v};R3fC?2dOknCBi-55z%s&vl`W? zCS)b9`;bKko;<}e{CXGrr0&%9KMvzh_cQMU?;!)T`_kYNHjikV3dr~5{s(@n6o8K% zXuzP-hbAOR5x?kQGVWpq{I08LRJ}2hYpwqzE z>TeR}8Ki-;(1CV@B;;ojA#q@a0q$`F8R^Ca#{f?D}=vCsnLuOHw}dA-YA>H>eZj z1mW-|B@Zg6=f;kI#tC?_iwIg++$I8CI8Ob!exC95vrlpD|9-b!0LWpvoy*pz+Y%U& z*3}Ca1g?HseX7hUetTI$IQ+xkGkMS2M=M*!it8Jf%D)CajC^g!sF>FKE{{{E)%Y|~ zHCuJB$+0gm?PCS|$;^RIyhbc1AK}lo&Zm_>s`IMbCl*yH;HHjV0oAR zw)F=aXoHE_2O1lw2fsN9+KeCgD~$Gf@@JHRzw!;Ml;^G0O{(c}wTz+C-%x6LckzQT z9_*u_nOeZ|lK@+2$hpo>1JaA;vPb@5+_5TiOpL6W-Fw|hm%1s+J!HG+B^1hNLf;LpAImZ_#(zFW|^XPJpS zJFP^nO+Bi0R|uEA-m9MxFgJo-;{HS9|t35*+c-{Go7`V zybEg-77lU<9rSGCt~Zj3(CZ&lqj-qz!jLVHFswahKV2K#q5%0J{shA>9 zCFCEBAq67_htI(!5zrHS4po}!i>?=7p%d7c!?!u0jPkz!20i6)?tdPQCMGf)CE-Ev zo|((1f9GA)TNKp>sRu+$ew1|bcAwdcaOt>ty>LX%i8gs7;K3ZzLAe&*L_*q0u~mQQ zexY)Je&Cg=Yj=}JMe;+96Cd8Ui|o2|g;mvmw|3?HTDdayKX_GrSxrGjg$W;#S=R-N zc|gV0g8G}ucKWq_B~NCNfB3VYwQIW2q7Y!>`zi5Rb2-0}xq0h1-4ipmE9A~E2WZ|u zvDb~JKf1FVn$RE5J%5ODE_`D)fFt$h zw;nvW@&zwOQZ=ZOy_7gM8)Qa?)hojN#jN;QItRfA3|ni)i|!lXRLgHN%ztQ9BIm)n zUA8I5Jw9&ha6vuN+ll!qlOdBL8e4woxzr1J!3Uat6+q183QgM~ul`{`yavCK3941# zBr)^=Sl5<6vOg_v$sKjn#33LL1&qXP64(gHP_y)umKor5aPt>H0c!{p2Hd*}xHF*( z9~)Y@GG&#Vfw6s1e)wJl-Z)klesmMEb|8V&keMU>_o*y%@uan&|7Alw6;JVH(UhU1 z$If5B{F&}sXIZnMy>a=bMm(hfwit#E2`DbFQ@BAb{nqkAr_7*0)zi0gzv&GFcs9N$ z8?#Oh7bdNRKYxQ23vyFc9?=WikW@(Qk6Omj5caw;KCr2cjuRUxsTPm<*R1@i+57gw zpHXLctvfWZKv;r4@-SgD@HV!G8B8rcIvM+9WfIyb%2kER`?1%2^i*MBuF3CCmdb!+ zTf$G>YIWy0Kc)zSWr zPXCd3?P*HN+*+z4!QLEit8sg_=volhm*2TbF-G|W&I3!kq0XAPs+W)Se2OtL>E}>g zfhpde6>F}JV4ja)%M^qKPDW7nNR3)Ly~~?>xYist21Kbt>0KT`HEh?X|fRcWR^T~I;@sx$&m&GX@T!nyS z+VSGjiKh|FDkm}%>U*p=r2dk5SdqPS@j!D-F72GxcEIXU;L%*v(ngd>DCdiZ7XNJD zCm0A?97*<(P6frfEB!j%*Ykrp7(J{o2dYk2aic9j-qUc61NJ^X$m;@G!(eySK11l=A+v^$s+n69DWlV_6&U#ptpCG6cfmtP z@Y5ie{i5W3$VcwAVss5wpWAg(2N7{EDN{ubWmuuS7wt#16K~NG1%qm27n>%jz!-`L zY_rzt0^j|%GXx7wPwFY#fD6AQUZ%%0`2=~*7R2UGNdKAHeIb`+bF^jT61IIjb>e+i zw8ByfxL6oAC5O}IHR8*cTyt|)qZEhyOn)r2Yost%A+vm?AJCGC5As6Q_K;e%;|zr= z8j1}$xbXPQ%LMXm5|%dVUk46U*VJj5XCY)h%F?g!PZG$I;hK`u5BC3xIKjzd`H~%E z2vE9WIlN<|F|pc*^c}+tPoMUNrv}cCGIH-zKGazbSee1GriMk)Lw)_cwCxvtG|c=v z8Bt$w=)86lS#kvoH5}JE_~X}P-xVxdk5#*#7Jkk9r$n{BH~77{3_ z%ba98e_Z?1di&%_pnbvG!M(ex=gx+FOo(AIfA=cu7X329bMbqE_3yMyZuj;;Zk~_X z=ZFIBo%H?@R4}pd3QiG@{YRw?t*i^CpV^nzmN}jiZGAkbVe*@6_oKZ@)TU8VbGxTW z^E#oFcfWoSx`GoQ)dx#=Tq=xz8MdVUK6#14a>We}4vah*T{NQhhb9&|^0y))wm#RL zy4lyaHdoPUJIZrOO=mfsIc9BJ*s#D_3%9!*s++@ffpx--fRwfK6RDE8d z^<1$a#gru_HnXURb;0<@y<{ss4u_c|DJx2aD5&qcy=<442*^1LD^Yr&UOxR)n)Fz zr!#1(X$htZ^HII>L{(2?%}( zQe#j16(+>bb@CKZzIJfOjT|uad@WQz(P9JZCz1E6RNKH@{i53w(UNzbbHCc>9wZD! zp{=jiWmxYy^%>VGTzfxrcvX|3(fj@>_!3Zm%=d-|-!p)!#^@bpP*=9o3@Di_Dhs1x zZEi%QX(R+PjKD8lV(v^y`m*5iU)rPlchNY>wF>2+H`M%Yu5h5OX(+a(v@g^&j#G9~ zYLTB9xY7Nb=Mzh7S9L93bPGbvdtTwg>6V>-#^2@4_g3eo3@aHCCq7oX{rR%g(DUi7l(?WeGP~EiLAbExD zmeP~=|2)p6LPK%j{q7h1pnq;# z;UzUtr5Ymrz!Kx1jzeP1D0*C^)>03Q(_w*WW1h%Un8H;^DX6x>l9@=^eXpU945?{F zB?%F`{13}H^3bHo?nWS`=E`_F>5H7oug>P=$QoD+qDj4S5|PXGnOI=h1=!DEIw8;p zd{f_DLieSr`y;#e-9o336EsCrDU02(jI(x(CvRE!3o6GW3Ms6%>~&a4!oHq{5-LOY zEQORa5@Tlf^)B=HcIg_AE6SMudty&t$)ev*(J?Leo|0h6zQy$j&O8Pc_Tiuw;E?}- z87Yc$!S}cq8)kffIU4lMjt@WRnveQe)Cd<}de;xgyC2n0gM`Na`<|@+CVT)K9#8Kv zUA$TSUh5M3?Z&F=#wxcz$6TR)HwkX)`f~QiJ5FpNgxTqDpMFUbR-L?TDM8I-Mt26O zoL?qLTa(1_LjoiCZ*Ku6xPLOY-sGCm;AQuwD@N{5fJg}(J~Q}_r3o@uJimgZzJ4D- z8;N)g8gw8OOBzZ0rn97N3e*3Rt_Gx|nU~c~G z2`i=5iv_iV+xPzuNBwv_YV`cAFCJwyW9jcSE13xgdZlM}+)X{2-*8foY1tMsJQk~I zdbYMQxX9$+YOK7;hTQ+Q?Du3iM3dWepTy?89?&aQiH&p%a0_sF-HexNkYtLjx|?Kf z5m4S-bZ2?F%SS^VAM!TRmFPi{)++JO$#ClGC6sW;yH5PMej#1jA|*XakNb`n2%U9lP{<<;bMNAeG^pjYuku7!wDS1-3<)fwA+@Os@UDp$|6Zd#w6W@iRwFgBWp_NTz!FMZp_JcqcxMbr zc7E^6U3F7dm{d6rf>hyu`6^^&20257~m6-dfl$RY0r@ z#XLa%jm9J3z{w{=M(4v4H2_>?s{D%s$3rzqHO(rd zI3-J&!*mjnJ@NhDJbqT_GwFY2I4S*Dv$zfSr)HN{}^}?BlI_W$rQ8q(vJSuTiuW~5scf`S*X?svYgSofTLP% z(Cj>$T8PDJCXOBxO%U!X`VUz2CwMcc=?IT``guU?fNv7q34)p@aGoJ`yKZ_GQrU9C zut4<|g3O4A*>XXRowg}NF)X1b(B6?F@~-Vk-DM* zka^LQnxvnuL%eZ+M?)pu>8YPUN%PIKx1PiZeY|m%>+|Q&SO3cmV#uMedq=av+_yHb zP`=V6!iL8J?{hC`^eU_r$G8@KF={udnOqiNg-}&diEck6>(nr5ApkHRqPb zSd5OLC$f|5B<(qUnrW?XISj9Rbj7uwYW^cHyP4NtQ3@nCa^bFdR5un??F@&#du3Xb z`*%QxqAk03cIW%OzPQ~Nma>0{a!|ZEO%M-+o-E&8%r$f5=2qNI|6B3);wFg32;G!y z=yS~|XX<%Etvrx|^~%3B`ZXEb$Ta@za-w@9Zgw~~>!y{;&Q&5f3_1`vSUDZaA;*I+ zB(cURGeHM7V`j6UQYyaD9v@7==Y2aVyzof*_?jHj?S}eB_YU~agunmEa~Qb&Wpr3k z@?6_)3)%;`2L0oNJU~2v$6j@k8i+8#8aTvyk>@}fJ)x33NR3n@Lnr7*Xwt$e5lM`w zOGTy%aYAA2JnEodTXiUs-dXBA;lT*X8@T68g9M_oGmHEJY zg9_+1I)cE~Y8hbNbR?_%p@ zrMVdzq(x>a5^0IAS9T8cX_Q;)RsWm37T?%6gLpVKG~X@w@0Mvouyjm=#UznCkZ^k|0}XT}-^aswA8 z`og!MJ_5FP4`EYnaHt(L*#-WP5&BU4LhvMr%NxFZkJhFdLn`iuTF+*a;DmFP3$SxV z;N}yMjU4lU*_p@y(vZyu*ngX4|Ab&9HSc~|;KnosRlv;hR3sxLeQnpMz+!<9YYF4O z+?;pM_5%&*tWJrf*a(etj@~a`G4MZ>rY1A{zAdN|Y6@o?;ji{oNrOw~yKQEtHS$F> zQx;?s9{kisNzR0v85sYxxt^+Wh}(_%to}%*+tDS0Tx-B-YUk?QMiE?oNH*y7`lCD;Q zR_#BvJXa*%zRPV1zRP=OUeD*^=YYY)D7Sa7}r!)LVfS-Zr`=TJa#jLHpcDw60g!l30a4`pvjZz1MK!AlW%v+nE_F_C3V(j zT*Cl4wI>57^F%c3!f(p24T7AKjSVkHYp!dJh(wiuX!d-Q< z{`BB1H1F7q!w)T@gUi7?DiB9rVvXESS*wJCuot z0NVfwpxoayY+MGE=tB+cOKTa{ssmRNGxhXX>n0!kd7BnSBLL^BP#W<(>#}84j=zZN zZ#R@?Cw{>~TT`s&`{L1r|5Tf2=f>d4lwHxthqX0c04kW3S8ws*7zs=@?>uC}Uz1q; z#F*9aVaP_KLEifMEu&X6ir~Q`6rrs`dCy81Rm z^1@G@WMGkExpO(r*hHd2Y~oW@Ut}xnhF+3WXSct$xRa1_2)zQ6c4bbe#?>Ts+pzZO zUvtTc?5|P2KUY>>dku`WQ;Wisf)Ll0`0?mDX4=n^y5lcy^4tu6rh{`7UJ1$IGYsmr zy$@-1P?Me&YJi~LG|~0UL^yN`9TL(8cOa!1K&LpRX_!6}K?J;e$WMxZ zrih!3D!_Zm_$tD?d*Lc8Fn;JodO!mthrycfB)5bdSnn*>FaYELB{w+S3Pxfvf!AJ! zjnT|W@94Fx`q~@}=G@wM{tbX&&^lDA8WFEDEp`L{`IY}#4j_6>v?)4qEb}xyyHnQ8 z)}S$ABMnaOD#bW8%ni-i!)+bsjVu{9DLKMurhnYvj*I>!ZeydfL3(U(&ZMgSb))Vo zF9Fg2+T>szPKxq-DM~78D@VRFO~=$w4tdD|JeHeL`rqc2b(5l(q%3_63_m)%y6`8jR$iMjE5uSE`!s}% zDaE5{W^OzB3b7u}SiI%E$+ecJt8~pZvx@|~O%3K^OvRhLY8&(vv2dWtdfeJ{q>mdp zJd3zj0d2Zl%lU#<4Nh43%Wo3C%PVY?`3FiE>FE{_yfGcfIv(2`G3DJxc zaW*MY4?DEqfB1gz=ij(cE4oOp%a6oNESOP5%r}gt;^!UsRn@?`>m%|fvxKsI_R*(134Zc&#B~mgdiJi>V-+*;Vf@wkZq@w1h22;yN2oG2*H z^4|tE5B79&K0P_Z&*~i@8N<9;?YW|3K8XN#@KuOqArUCza50==L4zbh9CrpxwTEDCxYsK|;J`aa?A_$bE6-!rLf_EZ1H2?d8Yu3If4rmdX`-P}10k|gA)X$}r zl3Bele`+NG-bD1pP-*Ff)^*??U&v6z3wK;to8v zH^&qqS;p++xt=rn)yM5U$;}y5uEN*FuaGW-L?6!eTPm}+NZk1tvI=X+^@nDNS0m$H$mx#fwkqIKH21H)E40i_J4xZgKy4+A$7lVgYY2e^ zR$ubx4I;+&EXHJZd+t}Zwy*)*wvWfSn4Z&@IE`{54&%k;%=4x>O4i12P5)WIcbIpB z(m~wActE~+)_B;$BTEZTN>YwLjV$%5cA(jjf2G0b_>NZ)huVPo1UUPDCEK`Wv8{DK zYO!Cf+%y~?J8n|^5jVgc-{I*F`W0V(q4YSec)Xw+hqft8F5Mj0UAVKkDFK*fnU6kR zt+-GkQ1A1YsDea>md`G3kLF*|X!UtkU2%qnURVcE{$)09pAOw}K!V%^BfSc=-P-xR zFHfg+q_9)Vd_PwZ{=7ye+Kt^Ty>S*{N$@;AvNCWcB@C&tWuSu;@hX`2f=3 zSO}*h>@WdOaEWtW9eS@{5?mml0{L0~Ld#D;f^HYN3Vkm*KtAcNH5v1$8$sY+e3cNe z-B!VO2B%3<<9P6$;puY%7B+Rgj~_H2*RO*+QCqvv_m%hEzDsq4^5;kRQ5k|=aBuQ{ z5f%#+krWB%_B*RQiC${zx#k{fVwd#3(fB_9cWXOhyo6GI5-0X%uc|H4c?by z#TBERE$*7=pn8VyewgTdH*c`3{Yv|$;vk5O*Q{&K2fyr#ABlaFOVJ!*J9I4k?2{H! z*~Ke!ef0gqFZTOZCB*QHC0GFK&Ea$wrTxI@CajV=L_~s&wNDwxF&-pI#>$!CvJKAS zoB8xmdgGx*iwv>q;z80Gw3Q7F*iVO|ed|3F31i*wQ(j;aWiR`Gw^WCkE^1&NDBGLB zdp#RAbt*CfP0vX%Fm9fSPQen;P^b52!T&y@q5m6HUT5!=SzX zAVFgK-a`cF^F}`>-BXM4g`MvHnZ3g5`O1Pj(JKK=k>_`>lz#AC*>wxlq5JRN!NI46 zRTzO+EU#Te?8jQ$c4ZxHm#{Kn((9?Kc`62`B#4c!(vzBUy7XJq8+B2u2%A{N0el5M=A1rU$(8Ri46uG&BIogD70sge0W0(X1fnL!n-`z;%RV_rCN+GU+Z z&EWW<5M@&Fy5v4jJ?bHKda%a^GewXt$q%Us1Eap-k(9Z7keD!*%Wyji5ME|~ z=O+%8#{J}B`tEQxwVMyP?FrI(znds{;iV9J!u_`O^xDAb!loS$C8E37HCMML39p>q zH2klI37@3j4{M|SMC=>cD2l%Cyrc{$~#RuJdR3H`X@UX~#XgnoH!D7@I+ zIQ=T8Dr`QztP&fp$p~JaqgEjrUgKd5J@yl&3m%khl%K@uFenJe3NCZ#liJP;d>uEW zo`Y^qPyy~3+OP8(kSr>;#KVqfo>GI?bS3Fz5k0W?ABq6jctG}OE!y@ss-AKU5Pwgq z!)>8L&A-ARxAOo6nBM(_RHi$8|F;s(pu0Dmw3|Ix=W4*F(v%5aj&P;bznLY9XiRSt|Zj>*~)dS;v zf}O*|M0CLDnn~csoju2gH{Q0&PfWONemRp&xpsfOrakm9VK#7nKS=W~cMA0&<(ch!0hxviVIz#?Ii z$22y!9c}5c{fhm{PX#G|`dRNQ4-_BUGH&3F8SlSB#C2&}iFRVd`BCTD9Q;yjvyyVE zcIHbP-RPOyN>DG8WT|HbRNI~wBm%11ZlEW1TtI#P;p>aqs9Rw;Y5(g zM5^`YT$iFi6FOg;Ls4efifIPP07ibqm9|ALfruMyuods)*^Sn*bZzGTZORnIdn)~% zYYBi}bs;xj!9)Q3C~NW^HZZt0h6tT> zJMoq}iay_Ekj(_fom(8f-%Hh7 zCXk~vb0iD*ABxe^5HM-MvTm|goMJo4_%|Lg&a^VY=l*&rcPtFXhCBKZw9I%&p!k6Rr7X=|}!dvk>WDCJIPCBcZ5gGH6Tg z-en$T+KzifJFGX*ypGC#Be}TiW@zln4~CGYBH%%Z(lzAx+vg{5cQj7s)o`f)wl)Gk zvVy$(q!fhAZna7u{CE#fzGU;J81~OsLu_xp2m)wKG14M_vcL+_fQN(vYnjc|gd#jd zRz?D*m;*aq)|B|bZqccNnjUwuUXN`5#|htLIKUIZ)O953ANO8kR*PnW0gTIQ=_B{$ z$ZZb=T9KOWQMm@$aSQVTcEB(iZrQ^RA}t+QSVK{7U_SGvS z@SMJ=|K$DQJ(tA-&9M+ZvhEY6361T|t|PfRHV06&*Sl@{y7=Ju*S3Y8$_(XWX{scH z)9T+e5?4fZ*%u82?o*Z*L7O}8xiJplbQ3k)g-9F@6U zL^T0xvoQTPY=IGBe;y5A8ON@35&7HrtfFzYatdb9Ra7U)C*v}8UW~sX+O~W(NNoRI z0%eJ@>@?!Y{2Y8r0JvFd6J{x;df=KGXcRyBT}I<01mTjK(LjyVvb`TJImdm!$LqST=Vk9+a`EH5-Msf~@Iu(cYS#YVv;Akes*UoSy~RtN9Syy^ zS8{g4$QxNV9E(%NnPsvki>RkyUg5;c;(FV3IcGnreZ=HzowD8N`Vna%Y?y_T+GaO6 zb`yu_c5Lcz-l{wOD3I=Jlw4xhPJO!daUHAA&*Ww8<>tn__9TH0ix&^O{~k}O%TLgj z{5P~~lwSxkwq?-3Kb4r)s9Wwdm@rsy+G*9mX0Ug{`1t&G(8GpI$_vo&%+v4#o14;E zMXZSjsk!woP8ju@2b;&mm>r8ee#1*v;p8tJuIb4v zcO%9(Z#VvGmo~L=VcU#65_-KkDGMb%`$rm+99DTPTAr(7M@tv*RKc*Yz?u8lZG}z{ z#h{B>E0;M5oA9KT7oi1RLMW-8(T#TgsDQd5@RGWs69bTr!(NN8kT>doJNOIiYPkuT8}vu5DGDec$nQ9t>8vfX9hIves`T=EE`Du@j54D^;NT&BEn1q zgNmRBO}_n}M?Y5>bbRhv(!vbX#!kj@(~l!FiGZU?&t6eBWQ62WH4rB$xzZ4sU&VEe zpr?NAANk|$-nuA%myJz_mbTdW(F23g+-R-MD0ed2>S%R^HoyyiiFVHCQfIvI?>|<_ zmKYsycu;~%GIEjz87;TT@CT0WUQc*_coOKn=0~smuz~?kmG|CqN2+_e5bJQmkpF>JT~+Q?P)^H;fq%PD z0Q$YU*Ag+jVjeiFWRcgI60DDaqKK;3?!2tnk64NX1~91% zQY&Bm({#EkNT3Y_SDMy*ETQ>}5J3zJu9$;Rj?y)!d@Asl`}EK2l!zDiALNwG^FH)f zdvNPFszpa9GxERV5~PiXM96C?oT@PgyE=c zf5);T<#;lE($^{9t_N4u`2)zTW$X*M5Kq16l+#MFO1#Z5UmpL0My1s-C|XABK&1*g zcSwfczT`^BP%~J{x0d4mx=7_Ao#jt?^Gz4-ykSl{xw-TCpg;2}gWrN7cjd(je1g1Y z?X$D^_TlfXtGNp^&L`s16C)QFU&-QML1qH78p!+hy2ci3wONf+l4-KEc=soM)iF`} zAe_Blh1iP)fd=i!!R+aHaKT;>9@^u-9}U3k=Dpdso*?gyza2V{2k|Q*M45SV*_Xm< z2n%vPv5>sMHzFpJ3dlTZC9r|o?j~x28_^mv8~|ki)uPCONiW;&d7CXA^*wUW!%um=F(kbUmJDzk#>h;0re62mL<_TW zNdIa-EfIm)-IHtiGJM;JMI4tRTkx6i16LTK}C%$iM|$aGWz)l~pv zD8x~{NQoUvmMJcJiuFC;R^2x|xDZ!p2EifaWHx<>5~v=LkwNC%W=!mbUx~j*OY^Ta z5JoXmvE^@NE+8#`Kp%d(*nSCpL$6%Z<9h!^cPv0uA}9jyI&;89&!@FLQgvqZvu(lq zsD+cH<=U3%+<#gNWQa_*LeBkI?^%e?~^8`&)}Z_(?T2Q z_i=+jryvlQmTiL^2u+6H+VQbxl~o82gvy%Q)~#JnKa9CHMLNT;V2v@wA|2Z%`RgC% zf8HvTkZJXeT+4p;WmNb~d`yq1+{)Vr&J@0AYch^2h5WF`9I z@$4nBciPGF{nG_kU0YkX?-Yuo$5jScsPDY{+44q}2}AC>FR%ni-I7kqV2bY?pq7V7 zE`XHYMAa)s9S>yR(AE;r%na<$aZ^RKJt_4CTreQnh!XgEib)u-0R8<1^S7wTD(K_s z<%6J{(i=#5P`^6(zy&iV-@x|Rpq+R~(xgP}>fxI1y$dqaZH3nr!NggHE=gbw`yOuv z{k$1Ec#K$%mk!_(mb}ZQhArweJ1)P(%;{}d&-{*yJ=Jcz8+XwQAllQH=Ol{qF?~Al zZ25zNBtzJzj6`2g4gZC)jvMaeC$xBSUE*8bezNA$5$bE6;NNq)=6X7m+|`+%RJL_i z6o0p^X9;DXajor+e_ri44$M0r+`(ZWaGh;vXSI3lXSJQJZMys4Omq0&lBy2)6rg-o zn>`h0`JCkriINDUngVFFNxy#+*iHr4-JyH(Z?DFO>U{yz;#rs>uaxhQBOc5gjT!(! zmQH;!lcz)5A0*IMbozu&J^H{4!L#f)zH<%$qG;dDJ%rS_Cm@8?$i8IWsEAjXe73wX*KifVu>T~b6jWU$g;y3AI!isImcThll) zoKZ$kAD>0p<@xg9_Gn+p{CM%hQv|iqa}kuFCJX>c!IJP&`Np~+NM(aAO8}xPspl`7 z*U>G}+>sxSuQ)*GB6Gq2TtzH-FJJnTzkc=P7YTB(QVj4oGFEDC=*nn3!$Xexcy}-= zz@(nzJ=uNdL}qHQeIe2+&Q7SkM$*~j)>$b1UO&ZzX~p)4tD0Bl@f2{rc3q$*9bpID zy@tj$bmsU)IBN&^kdv(+L$VtYx4EED#yWk@(d`%Q@%zN2)b?7EgGw4 zU{3b&4=3C|lb9x{lW!__3N2oL)1N{a8yafyvNleDRD+Pe;ye1VvNptH2T5rdhm=uX;3Fx}SRy|53r0ez*3qw5BKYe_ z12^BHU_El}+R?mhpIYu z)2oOCsQS@t@c7MY_!$4Dszu#yY4b@p_#+|` zo&XJsmjC@D{paG^&M$T6|F8wmySrW#;DGFZ?6j**-?Tvw@9374xdrf8MW?6m^Yl0j zKEcumI15B4e8@Z`zUa}JGj=iS-kq+HHg0zTka6+h=9R z4cj0cpDN#FA`pGHKV|OHIhkV8z+(nrw~UzRAn&j>YsbcPJ*RRc<0X%;An5_wYc60* z>JU%DfxpKJ1`==rU}40AwZ|z0Y$)Rg{85PyChu75KlDqH5|R#*X0jwe@Vh_(lKgg; zg0S{i%&pB7x;Jev^^GxLa^68f`zqI8+sRRBDWW26+`Rz6AO!M`=*b(cm-^93EK>zI zOb3$mOpLC;SO#p_Stn&-&PL7AKz;wspS)-iD4iE5n>>+ai87#2nx0Dc(XwkF?PKES zt&5x`dilzPoXovGgTAHN?PiTyvtrNEAhq-V{H3$IyV%uCXgz)fP}az&tQ&qC)y|K* z7jeUapLg;U+2UJTVM+;*dtfIcq8_s3cz>{2zK2>cy=RB^Sj|A1hda*r8yAsrR{KDO ztHhT7tQ@{1pofv1C$4n)>==J*?W)z0A#pGK1q5FI#}$|Lv-ZWiVgl20bELa0?gBPI zG+(`g=6aVAh6so_hO8qYKzMxED+Idi8)sik3S#X(! zEY4@SMCWB0=T#>0`(;q;EAg1>@|6K!?>`k98Bx5I!O|!5@>jKH_9&Fu{tHo>PjX=U z^*FGgDoxSg(S&^H#-)Z)N84;$$3$^`BFRqhNcjbv8whzs8c3>%t(^GS=g}WWd~4d0 z;=Q~d!z#TN^ZAAj5LV~Jz!WeGNC~AKFl3T_X;q~L#vZJ* z+-6&(U&N}UB#S_>TeUaxWrdx*j}dWFSZcTl^0Heyq+?%Q!-05p2~ZpUf*E1hfKXlt zhyX13h7>|otdnUHiAA_Ph}3e+Z(`pbN#J&5JwxiI@>QlCyS6&O7_-_GD< zPizbQnAR@$rmq-_cFjy|-`^|$)c9-Kwr9nKlHoR~%6FzMzlV!RI&p|n?N`cv{!JO* zB3FrJPHZ)I1?3`0$!~a#MuOZ_r-&uUWrUbMjD}jYy49v_`!)`YEmHsYr-LF>UsT&K z95^vDG<-??s#Q)7Fz@-)g;;D6HeLqS1&7!qx&a~(lcRtWEinVG&d;m%A??pV9-!8h z@h8}r{U-$fd?gPdw0A(9i++Q&qY4XUTqjX9ZA=~Th%_R{*_&ix&~WS9+sHwUnaBK3 zlT)4}FdaxFYV9MsWufJi+SuzAnM(=!HrE-5vf#%*MxyXo*h)u5FZT>z%Cqswtz`|t zF$w15iA3kbm1Mg3!_Su(PC^1Lw-;wxTlgXlYD+#eJQPHKlv>R%`XXv;J9I(ax) z@TJ0eCyer)UwBOwvHW=J54|8BU|eHleMi2~r&Q9KTQ z6)#omLnW)M$U^``6bo2WMFCHc%^l-h(I<_vT-S;caeoiL>cxX#30SG2f%$!&eXYm! z=Q(x5fZ&6~zhuNv-uvGs#SUYN6>hSfKbkzlOf+egpaWb>!qCuDR#r|X*oTuC^+y4G z(Z=k|hL7eVf7)eH(|Ni{hPkVs4TE04yK{KPT_)G9wEeBax>*Qev9Mn3taNP9kVW;;@s{GkdJMY(%8JnTX?2rwg;e|!8Oeq2}k z;d+gzOv1X81;gDn4sFt8&ka^hzi=}XHR>2%Daxhsko~>ipgq2E)bxwQ4~wrC3`ECi zwlrd;Q=@OJBt2zg)8S4!>gocPe`O@4;ySOB%MH%5uyj&c=4+_6PVyGt;Q}3#HqwkB zrQjJ&z0}%Shh6~Xu551S@^nn6gSPR5d;1ywgJS0x#5_J5`6WpIeWZEEA z6iKDx1QmX8;_o^ z9(|kS=cBu7eOdF_EBCWFuw6Bj?Dsf4GPts{c_VVKSp!UYR>vAqF|-Ji_WVeT=d%=- z1>o4o(hT!CUroiDyJNWC_&*`-?(WAbM?!>?pp~}uD4zbPigCn7@9B+cFV=awV`Mfl ztYh_|T`78^MXbD4jf5O4#fxh$9AO!{Wc*`fYrZ_Lqe3 z01$rus>FcxrKEnXSRWH_rji zqg(*GE517(ja!heJ&}ep%rK+~#7`4iT8PhhhX1nms}oH`%=m=XQ6I>uU+@h@DhAdM z$w+E(mjQeOxC}vRC0zhM#!j%WIiU^G^3Zukq%Ch#@HdILb0>Kmb4C z_k@UgYK^Lwn`jCoO}3!!8q1-q0J*%em8Gzu|8v$pB7WUR2foT}iP3&XsF#cM^e?{E zFvhm4JXhUisC#&2omrKTg*WE^XU}WLGGvOE34{1P#>u3aN zz<3Ms(~)usBV6}K!WjpWE{?%FrUb6}Xxp+pNrJi~nxtcf9&S6A2T0$d_Ip-isCnEa z93O#g-2jf0%{HApTdMi*KcydhpDV$TCdjXNRFGokJ|8^LEU)S8x$01+VyyD9=#+Aw zaJ$wmvSR$f?~{ZHa=)1DF1PMz_Dr~s)zr&f?p*^P5)u9bu-`uOS=6E+5>aF)?BH9X z!r|n?v9%y7ETKjK&k#*kwmIh|YOXcG)>HJOXm}-!dGQZtvVp)deNJLhMjw zEa!;19Quh)kE;s2bj6aH!?Ysf@6crw_+7+&P3%%Bu@3VrL5sVbYMQ=1Qo5p;&zFb! z(xD7Lk(JOVHrT%-L9BiwF0RWv1BS3;!XWj7bO2QahY!gyV%B*DHw^N`Nww?mKe@BT z^XZ_RZUMhxT-x-{HN@i4RZWWrPV7kIv{RG+fw83!Z4uuv53)TtasDs*#3hT4W@W&- z@~_ps{_!sw=9zk}h$1krAxp-v1>zX?OF(Fp=yls;HUc!f|+QHTPs-0GeO)7*$uj+mbt+ zlf#jZ2|?VWnmvVHCaMCgab;&<_K>A7pKdi3P46x*uZq8x-25SrW{~Iem5lz%1|X7! zxvLRNjVj*DVM2*z=grquW3_?YK(4Z_(z(AkeSJ?U-7*r%tFFck5sk5d`P}ffJ_nuO zi|qJqr!p5qL!^GWJNtTEm%mVTmVuC96J1AD_KA|bc08zEd&%+I{F3YF4abozdp<*J zlsN>CD}X5kVNq4G{yVD7F<4n{fTsGODLZV0R*I3N>{!QxU%SOjW=1a^@z>CRscZ@o z9v*}}l{szqV{}r|Cl=CfH2sLCtn|CshaW7j3oFco=Fvi3HG+j`IFJI>L@tS-xoDA@xT~HapO!x@WXdfv2L7lPp2u z*pyM)K16D+;NIP!T$W?kok?@oT}PYdWKGIBUzN+rwXEF1`#mwzZq}n(YZ0u_%q0O) zEesv;)KjQ3oz?ax9U&SNCyCKVTnU|h9+MgQ6*#>==6*xkNf^8~R(hEC_JIZ@A^S9t zw_*APO#jCJtw}dtSKdw^%Aj5N;`Vv0|F#%C&yB6P3Wq#uYt31v|5UzV)XNhI<8S9l z5{9v?th2Lkq@*4-l6or?HCQ5=n}LO!Vs5iSyd2>|#5G&YfNyLMa&i8M@4!z1FqIP| zZv{!XHge^fEn#nkwn%1^%g_vffY+Iv-+opNoCex^!fL!YWw)`!x|2g{r%rS#L zECEDVq5;{EZ-)`c{Mji{2Zy2v?%hv3^o|Egn@JB5xB!9QE(E%AtS=iKu@?uGJ0RX9 z3-t8wRo(1%CSo|J5jgeko@fE0Xgw4BANxgjJXRN>W}vOb7z%@CKTO#D++()eO;~cA zJKW2ind+(K?&<-E>!D+VW4VZ-hv&D<*O%IEB-7txG&i+?(pJ6PQ&aB#dilHTD8ee15hIH$)>ej3 zYcJes4Ou-L^rfeZ-AF2>xN6}RU9zc4m=-X*1c!<_}=VD$;W_+egp{b ziAoNL%`u+y3_Oa4hyH)~1A%}D+3Ce(Fs0~AzLHO!_uNqmi9_CY3_)$zlw!1#$cxw) zZA-=o7QyDjW9kc105RNG^t^Pi_6Pdd$n8JrY05Vn9gP)lER%S$wkD$D^6#Pt*3bS!Mt2UVl1lTT-9nl0 zlRmnqLBI0OAuV;JTwhmrP0$SSLUEMHApDyl8n)8!c}g*PssNFdW|0paM2j>Na0ppY zAe@${$Eb!huqFb*>5Zm}P*D-6RtJr|9H8Q_n=j(ANuMT3-kY)>!xN7jyD`sJt^Pqs z%ZhLJO-u#VM^c)({R?4jw){7O?g|hs>tD^ksAlr9)^Yb${>9a{Y{qCy52T=*##s4* z!Hwi|Cg~H+OzwkT=Ko<_F_t=fBo*<-E26t)S6(sK^#?R(A3DZzrnj7W_4eWZWMA_8 zvmeRl%TOy5H>ujA=#>`^8!ot|6236Trg*kELxOOH>Ao`gkTZf8B*Slwg>ciN9 z+7Kk!6NtTeQd8->(k}T}i|4G$lCA(DiG{QtAv>SaINq5sXNoSkMGH)982ji@9KQ&P z_BvstH)0g;-iTyBmtjt8`>hB%LUj=#D5xg_kSzFgs0ikoLO`88vC8vwhyTYWJnHl{ zOohuF9#+!8*8UR3R7}!!;gOUdi#+*ps=K>P*|=pX{chf>EQ+E60-sWyTz zXnv$em_0^9Bgr7g{WJRG=>l>rMj=-b@IvElctRm66?sqe3D`bGfE>-ctFXXl!-s=! z3fXoazXbmZTi8u0fSy?yB-On8+K#@~(&oY|{JS}h`or1#Ki(S9P8|!QZ0;|HdkcYZ zTgF zumW)0Zh#M4ET~QGhpeLPq#XU4n?tA3^lPj|6#08H+@5OfH~2V%LuSKu%V(BeoWE;o zZaQbVK~Lw{-EPHCiE67jgX|i?1d-2q9_kw-YJ8gNGbjpFc#^Jy0VCK|$fFO{nE0>l zm|(IZql2%QDZe&?LjX4adiEfIZ9O*Vt!&k?@nit91cKJ{e;}3mLk@cxDU=h6`}|oe z@^2FjfVFfme!cHo9gi3RaR(~XQK819ZZzwFaPqZm@8l?6NQEBhKiKOq$(2K}P#IWc ze2U9>M%8sc0bDtdqy_vh$~n5(Kp>yf)K`R2$I>T?%3HNKjVcqoeu+`cw(QZe6ALa^ zHTJ9sushl~9DdubzQ%R~|F%u|#3tY)W#V-(J~`VazE)5_cFdvirU<^_G{S&>z z-Ydc&-pj5a=$3lhNrJqeD_tMv#o>C;K~%V#F7@e7ITC4P+aT4AM-cUH%oSf5E7A9BHJXltx{GuBMH zBKP3nfEXQk0Rzf0u4ZD%H;N_DC?|am0CZb8JwN1szZBp7$?fzAGfV8F>%nz0|LrQ% zH_CnC11~YBBtWpH(lHnCtMR+-efnN$i=ACSygGpnjTD{^vQQu^KMg&R|5(BWm~Roq z=kGUO`HFX-<-hV7{_cqP9=s8BISa`l_E8vFXqjnEXeb2+ui zz?~Y@VqN=G ztRReC)#YaZ6*MQgqBxk0M!+=(Co(5nYU6Zs>ZppuxY>_ky{nvBXNRXK0E;RWB#gC_ z02S{xhWlN8AX_CZcL`eg6!x5jJBECFFH?`z_EbJcc^{N}G8SM+q>j2%DkrWPjg&eG z1r49{L;mEWeFiI|{H=$AYOTId$hZ*#{-hTy2Zhlx=A4Ke9L=Kwc<~%S{Cr6i#A25C z+riB(Fp>o9qeULhJ&ksVQX3g*claG$MkA(3`&_ew_0}&YOdgYLv@uXHixZ%s8A*CG zCzeu4yI(Q9wc?6I0l-U1h^2(tps!Q-JrtEfJmD+w`n`Z5t~*|BSv5Mkvch{N6Xy%GUL%L$&WP}(O;WYlA|U{6VL9ZOp}?E zPcQ+_vl;de6-C&xhM|hu=Ftf(@Vm)7Rh7`~0i8Rd0v(&5pTuEJFtAUwNF=A**vP;n z>Z}iuc;*oV!JQuG9nQ~-b3XPu_|5#>L8z7EGrF&}dx;3mXW37%DE5(gK7M`%~|B?Lp%kH&2)UOgTA!g(y z**HIA9v??F5AEhriO)7y8i6r*2IZ^GUvYCs5pa#$n9)aThRpDsgVM`Q5m}ibG};JK za*;7yOidYc>16tNJpSbMKj`W*mf^&an|VP-Si#=2pzq}EsD^)X*Q666n|c%VRi~3& zCHm^rd6O^dE&h*BR$II<;8pwBsbgBVFp;$=#J3i0mn9Jf&!LAtlfNF`*-d}3%-{Td zaszHIE|n^^!o^|w#cKiD1LNncbw?us%^9Y);qadrq3?b$$;^}@@WOEPM7$Kz92k>_ zv6-I>HadEK{bq*2Feab6!c{kb@9Y=`G4qnNF%^}vZ)<1&7QFdBC1FMZ)UBj!yD;~R zfZt~qv*up`yY<=_7b@A5r%K2rvutvsFH0NkM3o1KgRmcBX;N*zJiq`wN0TA|*lu{_ zLpu8i0>FC*H3CRHEKm^DTD}A$Y{pIu0io~igCwciGwWov1n>n2QTO2ClV+FirE1Ol z7q_6*|I|jVmpmXHrin6C$I{*-zs8eZ*Eee0)~@eel)}n9!jqhtDs0fiN;amn2WM`~ znD50{QS9Q+5aP9_C`vvqtACC%JyD$6lR5Re#CbjC5&3cB$k#>PmEICZ08^cOzh!O@ zDw3cA0EK+gbdp4lEiB>RgsKZ%N*d^#C%ki`LPfRkQ}EuNipgTrn=K?EmzH_V;_ z_+=@gLOaLPB}DTOi6V6T z=q}Jhf=(4K->IshoO%^$1Ses z2TB;<-qxYn`o?NbH>M^1q^f2o=i}D?37*YcYYlELtEFkSw?F^KH(5y*%-`4isP{LfhOYE?dU6Wf1ABv$3>uev?F!bn3Z)F< zma9)>6Cc?*^?=3TE9E&1Q5IgHFb_KiLT#$Y$8Jq`)g?SQIgkW!Aaqr#w)91*+t&EQ zWxMTJEKrf1RWgnH@=$4;hOh1xa`dByo*aAq_(O%~;HY1#8Fmg-Q{hS_;9jww-PyZJ zZLGh@tfrbJl--YECSF#z_B>}#nSAb{mMWyATSXrsnSuoakD^{7kWX0`=Q;4*$5Ab9 zbA{)Sg?KJng7Q}Hg6`^pq#BF@swi1^G_b<5NH{$J$=1LXS-?%%oyt-0&o6`WLm(6> zKpD`(tUa_fdx$o6L@Ou&S9fi3H0L=e_^J~nWJzJe2w%phzs|$!Nl(3MKAuvo089$R zD{q*ii=i?D%-ZQP96nryK7$jodcmKQ=x$NL_yOinb;z`N9#e<{{6*7A4}y{^Hw91s z=&ckO+zOSvx{`g4EF&XxuR&VNj`aNzhj_c;qkUSFyhhM{y0#jEcu-Y9+j6Xc1RqO$c?JA1*}wu1!*#H@a@ zB8o(&1UD<8(hr|9uocXx57$uPA^~W`7|7sty!SLaoDK0v?pY_s@PCq(H6)JE+^_<7 z$qHF`qOse1y~zq-O4*0tif56c6*R~QzbB4)4)BVK8q+$;>_dJUvd80>a|=sO{q_%QK^CiTlCS^Ju~%V zqrG6Hp$<&lz5mEB5f47RGhvqapA|NOSs3EUyFR)v&el)BOYHh_5YoxE{xrYJ1^9WO zU*u`T?t|W^*p3<^b9veu9%(ea;qHoxBcOm$U*}Gr9R5Dnw{!P5_)2?|1!_| z=d81|c5Dy+@UpVhY)uNH_JsVK?zfPyi}!4=9uKz4Uz>Jg+(7NkM{3;%mn8?}4qgd; z*3KTj_`;M`P5xBZINvqpvD|V#DaM9dw-+&|pv!!+0RMMsym5NtVYTOxMQrG%=0#pT z(BXfvfcr%HPyX-qELX+CJKMLIoaPq1-{S}h%P}!7OO!tM>!4N?D8f0R5rY(LswxY0 zQ2e*W91loHt%ocxDi0_1DCjb^p7DKeiYq6^ZIzd(NOZsy3$M5&AbDY(pg|*A*x!j~ zF6y;8G?#}jwv9y$uUAEg`rtkWL`q4Jc-BDW;ov+i=-XVzKxTl5u{3oe5RIu|ZmBv} znxe0y%M4Ut@9z)3vBw`QJwe3F9mp|Kxr8`EyHT(LYKT-6BXW#On1B1OZNI~o{t|y# z4Sh>m$$n0NwE>DqsUIDj^M&ZgkBd={j}E$j@m%PkYz{LVSe`~!stnOldRtu>yp<_T z)?iqR_7pMxHFU(H9bn(9Y^8o3amwVGx+asaOHJ^+kxWi2NsQ#IzZMk4J*_NlwuJ^s zWLwdr=IX+z)rHM=i{-dTzbhA?Y(XOwdh)VXKNu$OnEmuLD-K}NYREkID%jS-N-ACz zdSWN^k&WkfH!pHDMbM(ET{5wj_?lG7UXzC^yDo;*pS!OaWSLw|{O=}k_lt@JIv8;& zNw4M;l?vRyCl=#cx|r0(YChUJDRg41=w#5}m5^qg@5q%Dg)BuEimKJOcHaIua$yI6 z)Wn7c;evVE;3hK`)DEV}w0xF3Z0<)JqCn54+8i2^V}WQVe*h#-g3#y;L7tB!ieokR zGamU5zNCUpJUJ~5K**&nc;-FNCQQ9&vC~vTMqhQRh#mwamvS5g%EZ{$>Z5XbcHUio zS}8TJ4`05q9o&vMJr<7wqYj;sN1XqltZuPY3gtcC5k?B2;QB0(y7$#EZ7G+JaP_tY z!}khmp@RC5_UVkI>*D2*$lOrE&80&j7A&Cz%{=pHZL+BE8eRF&f4b~F#vU}=G*^Bp z_g^`WOl>z<81pLfDlt`S@;^pR+TU4Z(j(j$I46XBVoMG_>R(*$F4RB&pFdh~K(M&< zjpvOU92(&fY8&&?8eqxhd-|%5YRrux6#eD1CeHzmo0-|m_Y5tE+U>F+jzMOgl#M$@ z_e)MO2s2ZuHxx0~<1!y+|LrDl9(=$7mgaZQdEUS&$k&A=hkrv?uLHk3uf?=#u&ROL z8=NK-;C}k7p9D$LZ#4ZigVPf_;BmDU+1LLZsL~m(fg6vn-P1#2#TiP3o-iXwt_G?9 zW{}I-U_yg{NBYDSifZH-yZvLcll=nO!WqppmZM3F*yjjAGI)W<2|zDev+~+=2uz>2 z6D-lB)h4iStXwCOcxzGT!s^J&e(n{`fIxYrfA-HvJAm-IboEkxDIC^HKr5fG-_+Pc z&I$On^VQrR$ZKTRS0zV^va)a!`OO}OXVkRiG5+eTPB?!{)YFWmKkQ`ofGg;!k4~$Z zDazLg!E`up^N+(qC!s+J|M5}lbsQ^?uA@T3vel?GX!MAi@K>RQIT56(P z(HN+ZodGAcZWF)y&=uQJq9rP603du)avdGf6Zju_0hp|YG)Ww0$-%lH!}lXFW?G_) zAtwIM6k~(=pa&8dh({AI!EhMi{^90B6o6p`Qvv~gS2A`T?wegb+)Af^gRXb^t!l#R zbmh|_B{F$#*gW<|Pu(ljK^!!61wa|;s#feXL+lMFCJO{9f~eyO#Tn-kqey2{~gfNN< zbVQeBp-=DjQ&91O?qk3Z<_C~1kXA8z^#~2X)2BDaqrw{M$DZ&bS?Bjuc2YAanaHDr z+phIzjz1qvk~*qB*d|YHtx}dp$C+oepzIxthaz?+WKM&p;|=?x&f=L#-X2q#tAFI4 zAePBX3yZH|bEK~%$mukJ^_UF}PoB4wS=Pn^#tQ5hMX<)15e}+t z0W11C_dzNK?|?g(J$%08ade!HIo>lVxQZLxS*?$F8N`7diCB0abHnfT(22EbwzkfK#vQC&1ZCc_FV4ALNkI9F@NFcB_0f&dh~^rac!6WO>fwpM6j2K92Gr? zcGO!5Z}TZgMotirfJT%cD+q)P17BtQ6c4zfDu$$*V>@Edn1TP<$p+5>6zF3N`@SfQ z^h`UcHUl^{+6*t-P6Zmc$We4Fy+$Z_;H)7pg&>8;f`aTo)a4HJr{p!(Z~DxbK{yGF z&?r10@?xaixl_-RkU}X50%ewWZy?gDqSSx8P3czwA^X5qbZGt`Sspn;!}T3lNeO9( zkMGC_`_&w%s6X_KKn{5}YywjpZ(TL*A@9&F96O#xVEOAGE?kLjes=%$ZN7v1zjsv? zk6SY!y_3fd{X6UJJ0VIo`cIfr5g~h%eVDbqH-|ss=$Dt*)K<+}@eK8uxS3oi93V2 zG0w}U_24R@#U6gTnOJt3-8ienzD$k$?94JKG{$UxlJ>59BMKZD3S<3-C}u7RZ(S>| zraMpZg-nZ5Ne1HzJmM`%4AA_q=eq3oE;QPGG=lFSl^s!cMS+eT0QceEK_DwnOSpqC zb_b^c_^h$3r@r z51!C`cosV~Pa{C&V+o{6^}3=lvdEpko1SjssHVlw-S}?z{t5jqKL-cz*^uqMy{o=7 zUlX}?f)XlOtZ!C!P2?QtU*rOWkNh{rgTovf&N8_jrd+seW!jm$)X8sf$JM9%++HJq zm3C(PvmNV$C)4Yd&2m(@-G_7k5&Odx>c<`cP}vm+o0otYaUY>W$B~y5ThZa5+YB>IrXF)*=LW z&{y&y(tj8tAFM?Mh{pWEz}4^Yr3mxlPwxmME3k}AQjyaFCFa!vwx&^px%2T&_R6=uchW|_uBhlGwsU;b-+DFrv04FkJO0?YVW3p7`~0!m z58iua=ImpI1O9#-*}~I*8M4KfqEGFb3*tvUHaE*Vb5E$epOwG&dQ^PhaH;a>SQ)t+(UzB+U4=&VeY&6CA$@L!H^ z8gVZ$tH~`9RE%da!Z>)VMf0>98~C7`Nm&d{iLD}G1T$~CAL~))RM(I~QgDSCY#kbZ z$4u2(FfbsOIFc~1)e%Klk3j2WAU1qz2dP=`Swq-hL0s^syb-#s56hn2zDjQgEJOGp z%RP%O^hwFRPTZ zmU4$nXcpCfBpf-BbhFNRUMk}uplBtU|l zg9@k&cwXhEXlTiA$UkVn>468|qZ1{-6amOK1EsoX)PrgMu}2@gNB{6_A+4dHjP{fC zH{Hn-$;-Juq%SU{E(p#*p2s8`;`UX3WLfCSMS+@MXV?XRF-S%-9f&|o_f?uSepbe% z(efHnj|^&FVd42HTRBS7faqjV5FfD@{Wuo8ZA)3blFGn zQ$^=fZZwJ(9~8fT{0RG;71WC3{aq^y5&>~`lzr?w*ptmC$kCHje&({@*)z2-lbJ$+ zJ%ZkY_1w)ha{s%B4%c$kwaje|e zm6DEx=2q4*u4$5rTya@##^sLpPdXbR17ar|3b5Aq8A|(C&a<4tVsoC-*3t|!G^{Z6 zMCr>Y9v}B{yh%D;2vn5Id@Tz9+_$>vvoI07&QuiV`#Zdrm7lbb_ik4Rmq*^@e<@=R z5e@&E&9?YAym{CY-;v=@)fX)SA%ys1w5=Q#PrO<(4gpdbErhs{r`9Y^-bGHlzXL!x z7f`;~`)xGfuSO!ifk(<|Bu#sYwFi(4V-^>E4y4)ZkzEW6GKCi9_I)nM%0_7U581qw}fK9&JGG=f_Decw^aWc#TcrZ(~RmNUKB zVFZVu&%tqymypnp;9sFzf0XbiU%ssW$ECNF;(v$hkXh#DikXC-Q-ra`U!X689T?`{O}y9;F>jMF6A(36Lr{^$4XE23Yfq(kLQ6JODFa^^N5N zDYbU`4(i$ekD~Jqg!=#E`1^Br+}UT8&7nbLRAf7&XoyfKPzGq0UPeLv{IBrNGOU@YY<{qLvEU#0WCFuT{7m zhd@Gh|NJY5i_o_G9b)c?9m~g{C=`a0^iAW}A;V_!%2StqZ);6&jB`$7<3E>#*?Mas zdG0w5z1A2lwM}x?D@J)Qp_b9zC3&OI!C?j>YPKIUFnlN9duJv7oj+bruVH$5MrFw* zBbGi7kUj$Cjig^5LCf3RH(lnK=j1UTu2V92qs|xS;UHNyrH6mQ!omUvt71U1v+`bZ z1yciMZ_o8n39o6ZV}*7hw+pA*?%4&=e>;xs>~|c+aFWZnr18PT9BdYv^}_wO7NWie zLvRf~g8Pk9P!S_s>AeQjosyGx9ZWHujLvuITftusx%lsfzP^BIavU?m(G1fC%yT0Y zC*h_G&23l8{~(qVOK-aY2H+=^FblXKgdl}>I022Y16ZaG0$jl}{Z(afP)%tXB%&7nJ`gJ1jidq^jg?3Q_Mmoq@_vUtac=4UX z0dYSHkN)bqi)dSG+J}6k3*r2~lyKM6%=rQ1`Ou@$k1xXJXQGRpC-Aw;i_#pJqUb@d z$=qi3%H_3mbf{tB-saPnAd%#YUz8O(AGJHTv2m99@OgH#M(PIz#B?eIk2jI4U*;Cq zU3TA@JViOhiu%dRk)_)GU(utzQwFVyZ|^CdDa23#5m_Owe3T<`l1g@0=kJp}^VuJZ zIWf1=_T^>dv~k^x*6^BGj?4A&Goo|5N2~|YHiQVx%mc-Di+e@Z{wks)@7|qmB9HTG zJsb#E&;62g65#pPw&k1j14Gf|k$%fZWR02(=q&=pq~KbWD4i&?@b5y*K3N6e6Jk9# zIC;xZbgU}lJ$2pWG8#_!X|8)Zfa4f+-ARgI&2X6qvSa@b{=F>#s@K0D1O`d=&yB#y zj(J5z3N^M`nF@C#_0gvb&I3;#1a5?UHnp4^IhhB|ZWz)_nR%r!vop85q-q!m*N8ok z>Aolf)qgd=AB|{soNzj00uNB3+LCKE+Kn>0ivLx4o?t22>V9jjQlHz>Yz7F=h1#oP z`H$2^uY=1dO0DUC^j;rsMtyBjwlnv3yUUs${`*iHnzoJp`BQj~({vhlxU7*Ih|6OT2MB_a&UGM_F`Skeg*~(Dej`ObWUcqvbI}d>c%(XV5)1Dt z@L`6_$;g_r_F361^HmwX1JRY+5_FD@CtrrU%05ZT=T+u8DxZ3f#HiN8xney9x~F9y zF=TBwL%=%sJHXFO$*-I;4op2+tp`$gNTcJ z0}}Y?Tsnk*58S(v*h}!6@CIvU0nt%+;fo3lG1BF-7nYv_=@U zVfJmqvCl_mFoedpo8$~jga2;dy{aw3^HyAt6IK1G-8TAKb>lQ|YJ9AyYiltF?+KD| z^DoAeE3=zi?+3+Uof@kol)E5cph9tpXsUiSD>DU|LAP9^6h&09 z08Bgj?R*;^V)Jj_{JYrVp{N?HKb$$wjNgg2H@I&mV{%*!yaSZQu!OvCs%#XOH_%C( zM0850YW&t1?xp2n8X*egAKL%HaRj!Btsx$ya5NyR;dW*4qr~45P zhrBk*fB|OkeotkZ802VEn4YNukWao5G^sd>&`Q2&YaIpUxDNHkk-KbEKov*C(Fx`9}Z*uM^X7vTfmC zCVpsXtX6a;0$EFTuH?AW5kUALByV@sE-B&%1SqFI3Q@q#w<*czUH)bd^|hl&Mia-I z>6UfmTljfD-OhWz-toMo)r;~K(Gh((JNNK84~|zkb}LYyKzPapB?CN5L1*UcP)tLBFRkiHC;fvB*Do zP%cG#ua@3OKVBR0U8fhUg<-=#iQ3K_6%Qag2^v9kDrbOIkT``HiU~9r zp%Kd|_>l-C*zfT(gsfMwc&NF63&2<#R=7|0M!x}6Rv4k>JvU}(RR%FjIT%iGV5N*qvGvLG0yCjM6!`#{S4Uay;#KhJH7 z1un79{h#CrSrV_K)*a4hW?pOV-rAin}VC5)PxohA)`MAB3M1lr2&%1RYF zg7SY0|CT(0>Q=XS&#Mi)wC`pL9IPJ$E2BAX@eGv#jT7c?Yg79a-A625?ZP~4k7bFv zUuI^x-4dj&B_yCKX9g$yO0kcsUaZ&I8zH3@?!&dWQnwZZCvFg^2QD1@K5DOy*XbU` z^A+RrFcuoyGfktyo14-scX&JwACv(?8KuN-D^|h~Cmk|2h=MQng6VSF3a`k}spV|{ zgvlTDH=l;IjOe~TpS782U&n9rCO819175iXL)w598M^D5nNhAtScoDH|Ep(&FEsI< z%s7OUfv|Y!=dl@x;{o+EI^Z+wC7m44UAMx$%wq)G6Tm0M9>s|(*`a0Nl3g(ZvwC`9 z27Tfh<>5w<4J%0FAu@&x;Pw{&8d~O(+7ZCgrA!1VopW4tNb%JtrL(s*d^p+h+jN%2 zk(`tx=+P%jW@3!rx;lDwW7vtu{Er;T?X7x$)D$l$RNgYst z$cN8?e~|lIWKnUkg&xsIDp=C^uD14{pbhZe!exDXcJw|165Qnmn)LQZwQT_rA@xRC z!iBB{H%Q4=fDz)HL7mYzW>9{|mZ85S+qgJVkxqHip8DpDiH=2oKd;wjb*yb8%;`X& z4oHyIyUpTsNZzEv`*jt0>I1y57%S#pkin>toc(R+`_&1oAth zc9CE7PPhA3$+vgYBCbW3Hpv3mV8py^NfQm++4Kq&rvJboUbIgrd3!=V7p~2mk0c6p zBY=+KMFG$aO`f4G0Fow8aKRd|c?o?$>UF4Bgt8>yK5>eb7lr^5D#cxcqadz&%Ftm7 z;!PqbuArM4xJlVjz=?44Ml`sMLi!TQhQp(p+IT!1H^>&X2dZ(MV=D@c34RHm!ec>ZQexTAkE$E)g%=WF2O zv&m;;40Cp(cy4{Nz+LzDX!z4jMn#UnHQ|$?dvudzYQ6txi=ko8V2#?n23s}q?+W^Q ze89^$^#X5P<&GQg z-{pCf%+glhYM+FZ{uIjm3B!R=73`5RSPm^4|n~ z;v_EM#X++yx<;IUk&ufFgB=FxsFKrWUP-ikiCEwBft>iEZBq=KDu$|?IOoK0`6x=j zcO^X>IzsPvsG}CC>F^pbQy|ilFrY3+AyB2InAhIv`X4soCPE1G_c|~ZL`kvy^`JH~ zYC1T(@5-U69%C+IflT$9F!QysbmGcm(AHCAwD}e z$?mzn3am#7aQzP@JZKu}`w?*{Lu0fp?o;Oc+@(v17pf6T!0B8lFV59yn&_=PW|Vqc z^iPvz(3a{5C!m#Jex7TUeXRd$uArsOeQB5l@cB-D3H?Jn>?A$y_qh>|{*Y1?T&!*e zR^O9MrW&vm#6VA+?tA^FQTwoU78-u&Cb8l)QatryOM9V*_%!}@A zn=e0^_r&u#YCX4IWO#r8R{SCNx5m&9eQ={f*9XY`K-$=W_;$6@Sq3Cb!wHKp`ia&@ z$Xl{%wyl|02&M@@e3*S>EunAAgn)z~xqv-DUa}G|T zu8pdvh;98(wQ|@n4V+Tc@Sz0B|3WhT;>HK8BRQ#(eUImhXa?0v0&a2MOPc#WHvtro znrfgl{D|btcafe@rCAc|_deDQTiUcfG%zqwqud;OVfRD2Os^Iw1uZN+^60GQVlhvwFz&3Jg-G0v&(?Vej$!GfJ zCqxKG5Q9C@re`0^B7^V#+j0qIA^YRqoS-{qr;5e;)!e6OUT=3$+b8dSrRT1ir_e>A2(Cito87s1dM9c{6BZ)?M~ETRT!qFI49Ve2PEPeyO4oqQA-j2LunxPSR{eqBj(Z zBOopzYjq`CZ}c$;sOP=oLSJ4dqu@g!+s3h4x0rCJ-Mg4UfHr`OT1cS?DZLDSqk~^* z8mC8`18CsKN5!G%j{a)iIq>ex%2`oOkzc;R$o` z@@UB-e~QEWwf1;8$U@;?_){hbJl~s-hT!n}@DQ8Ze@qy84jc0@0+O7(Nf@4zOP&s- zp>97E%ksuJ{!qDe;TzXCM_nrK%(}_#{Jhl_T16(|iq_g2Bkg1Iysl!lbz3w?5y3Y_ zrt?TmXBeVW6hzW>i|^A$I3;V|jUIxg0ja&UmyaUW4ITLrVH9!BgfLrr9O>@E2XAvBzR)^E$hkrlOq7CUAwE`lxe`E;Nk=s-DCQs| zzaRCI9L>4N&_l%vjX7R;Tdkm57FvNsoWc#YPDt!E{;-*~$^fL09y+M;ibP(14dgI(^kLp}del~>7nt|w6V zm*=mZb?5uo*GDwANUMqhz24XjjogLFzlwo--E*n8F5S6u0;J)f0mL^wt(t3e0XO!Ix|oOeso9eI{=6LqmSA z8-1ylq)%RRe3N?hs!PpJDMY9cw)`%RNy z#_9A-AK%?+BNElAeK%nFk8jQ+*Kf1Cn)I*Z^aGqXBO=@ldL%{~J{-)uc4sgiir~RP zq^r3bI_Eg$TNZ78Aq%iGhQ@u;KeG-os!`GE=M?c*^J}<*SCj00uQ_2#OLjh^a~iPM zv@W8`lr9Cc0cCE;!30gIir&%^wPoaVuJ&Q^o0&iLDD9Q}4Xi_22wgCrlT4?LrYIkIiWme>q7LjtJ4? z)N;6q$^W&Nitx7MLxf5wbq`8793_=5O;lm%ZFfGA9lFp7XtQ3P>*l=PdF%#k8p+VF z;?CZ?gNZX$H&{N@NF*Ubb_+hjQ(eA}h&;fej&dz$Z|_gbO9bIS!uO`>$+DpJ-5ibbW(g>Qz*PR0d;d`6LDdpS18`%)PEap+ z!C>`$=_?mVyZ{@VF?IXMeRrmA`Rwphx?FaS`*CRc6$%_-y7o#W@YxeaBt0$2LVb>v z7e?HT#!Xq`V3nMQpb>hJwny1JL^ZI|!3=sa4cdUv$YxM=9_)On6&>MQ7f6GE8gF|c zDu2+~BiLqpEWRU=B#bJ|zU0Sg>;?T)ChFr96fUgsw-XssR4J1^nliW$$?hguvmbrD zvNw>MuzvB#v}*w#zD}}K^r<#X`XVxakEGQqTKwiEefKm27;J;qRvz3(CQ}X}r?#wd z1KT^E$2q~=ZS`$=Hskogd|lovtVaa|1e|r#ipLfI2!Ry{YS=n|^6G%gm})GMxx@{NS9*%uixd(yGi|WE4Icb)5+Q-JSKM|3 zS~Lvo1JO=%gh2p9rx=!HmTULul zJcocN4$qzgDC#jl{V$hwXF`E4KQflXFywNn7$q?*9lZ1-)L(zD8~cGs7$CAlpoTuW zdsUh3SVkz0DEk(_R@3*kJ5jDQBTAgI6zpE2H}e3h7UZjmAG%@_vht zuI`qv8Ms-9I?|PM5)|&(ojpqN-xw{ zx%>HRC2!xUL)ums<*-`wZd$1iX(=CHHdu5glCzbpHn@GiHMSgMf5i;vTpo% zhL~Xg)z}1_3lnt4=GiFQ`n=zsRdX+6z|Ocg3*IfgQb0fJ(2ufuIb!<*zKMqxc8+@q zyl+Y*4&)pH-IykW8_D8?f*hSu(et9tgL@yv^`2U>Bo3Lpq)?ba`L=W#Mu*$upKu8p zSpvH;ipXC$)j*RtgH<8^ccM@j$&7B;U1d0E$Y4PDo<}?}Bqdl^$0zqUWPrf_C>`Wl z04J^PJ$ellZc+-^NOI_*wqP@U8v6z+zIo0+5sd?Bc&Znw9}jGpmE`#rMS4@zPp4n8 zO#;O7Ze39^8SJ|UC7f5PYj6k6Jk#_ZhD63rK1`YetvK&7^9ITPA8{cP)iw{RPs9Q$RU4LPLcrg6t#7;m;YQh%bAr}LLZf?e{woV<;wdr5SS0tWZA zbeLJ+?#}y(ZdAG3*@quO`-C`3A(NL4g$(RG)%H(OhlTr=2D$k}8#jJDcl&t>2L?UC zVJU7pRsy9L!6{$G9qjQ&bXo_o#y-l>J`xSYv4@4<+jKWPl>Rkc>P(S=h%BVt7iF4p z644K+w}I2igicQQZvb|S?2vd6+F!&6wB|c8dN{3AkkEsc7o*BdAiv3tZ;~ASoYa$5 z-x=`0$6Xe{c(_+w7;Gddq9}t9b-*(bH$8y+pvVR`xZA0(bJ=3fQ zYW;`@!2LMbBXQ_I3)~j90Pl=&9#CY+>%{ztPn~JD* z-5nYt1PNmY7Wq59%(Bvx5wjzl^TPNC)^M zw4~odLm99q6Y%^+J;qSJ)3B-k0}#bv5v)z&E65XZjsW@RIMM`^#?W$49fYJuJtQg7 z$+gike15=3G?5NRCyxAYZ z(%J7;2m!gX-lGS)WG9L7UPRs3Oyg#UmEN-wR&3F*K7un3=#;DeP4rU!9(eG(skBSE zHu&Q$FLK3BLC>7U^57-?@PMGpVi;}AUb!G>c+QEq5y#25jEs+s6Slv@Y>??DjqCk% zFlzF!RP@K80i2Wm-|vVDFndf5rCiH6Vwn7C(4s`R;KM&+oOu`+BGlA^l7$ipu-#;F z^=XN#tekVHS_Bud4(X1-p8>S<_zTF&g*y)vSQA2T?<|H5vHLQ|54|6fJE?O}5j5F4YH~}G4!e`zv)azS@N#s4>-Qxk-YN{#;a1*A_H17dM^n%Ho&okDt{Kc0FOAWeYMBY68+w7r zviVDa1g8PLU#98Z^-V5S5+8bs`P4Uyt#GnmVcEM9v)bT0cVmDTs@z5#PO&fKzjaL) z)hh0k?qG!f#tBw_2aoeYPbky-uLzsDsUhv_UVz3iEi+uV9~?inZXbj237k$b=Klm! zUk5N*{J;cF%s5O9H{~QMK%Rye_=Oq+sHz086^c3{=x`K*rKmdF%`(^vpY{Td{gw>R zxys$y3u2VZ3Gf@Xc1Z#<4RSm@nFhYZn;v$O=npMtfiE@B7IUN-0Uwo=#}CwqMi$xu zeNqU*oW}G^diCMn-p*}P&+peC1IiW`=+x_uO)my{tlcJ7Tk$>*Jx7N*)V&^f#N2!+ zb${P>9X$66mGt13WMbWY&u6PT5Iq}MJ(qY`R~3G}wZN^<9dwoOmn~kn(R+J9&}xCN z9ssy(%je(gt4ZHl&QFYIFUIR$WOC#{Xnvl(rcI-Vbcr360q>wlfaJ z>|zU_R@(*0;1_VgKkNcX+#>}pK%B`ZGz#RiJ6(PW{l!s*!Ac{)YI&e8Y<>7L zjJzx!+PO!8OZxR31U-VA)K&RN&_}=$1k^hgybt79nKzaq@xd!mhi9b9qP zDZGdJG{{bTcfeT=H;xczq==X4^Y7aVgnG#DS^yYlWay6%d=j*+SbJnYQjDnZvW2$i zW9(91RMgbuKFOy8>m{6|2E!9lIs0LrtK@UZtQdJN`NM1a0b|+wkgF@0#g?>@U^2jqc* zi|=%!wp*=BpfNE$TD7Tb7>+nJff!YFaY_@l?AAnexk-CGiaM|0b52OE$qplr&~o9Mw(AZ8q9JRA5@;6{5c(Ia)6;S1vG@mq&(XP;VRiUY*Z5H3s$8d0!*e=$)9 z2LebF1cR*0A>!a=H)N9zl-x)=LG?0xa=KWXxOBn-_TSf{*fgxqgIkAu`%`elCqSGf zOo;ZMKmNgPoVEIfKnb_B_7gWfUa0IM4LE1-GRuns_|0lmUes4d@~{S9 z6eDAsQ^g&X!_tyuPCV^H62ex0#( z0+vXjjs!e}yElq!&Ai4IaS$)K_h{*)&k>05eDanNG=iX}=6PtfneJU*uc?C!2&6U= zPX7cO$uCS8%5~stf>!KHfm6!CuG9Xrqd-r(^#@7}Oa;zFzk zau10fOE+VSC&Y^;);F!19+Y3&*u9FTuuHP;gP9$7P5;Fj$gZlys|(ap^a`Dx_x~X*x0Rk54d2Z$rYH(q{LT;0&@=>q*kk6GAi5gO!26&xBqv40HmhUx9QN*>{9mOEg zROLtHUuHk+pM6P#BEG&2M}!HR;A1q$I9;^CGUmfc!{4VQK;31Oq1NuTmtTuOA-jiq zI*vFOu*8XE5*jSUK_4(thpl2zPA4F{PpABxWIWl3-%#yerLdHA9-42_0+UgDK{sRC zqyF7^3J%$MI-Y|MMX@z7etJsNYG#j7%3<7HfGAYKgq$_I+9@JAa5e8#1X@lU%pg_c z@PFy5gpC<(J$-)C?*U65l}Nim3Y3vOt>!v_ z#uN4Ywu??$OtUPs1Q-z_dZxy19bSI>3g|B}J^A&M^Si7Je17LyM}gll=m>w$iH$h8 z>uHhVw0~F#T63HHfm^=Zfv;(2vE~n>tm<)j=B>~Hvk-nb$DW_Y^%OGYCwj*cKcYUp z1Yl&QAhcVTC9fWSBx*&x#0EItu9j!Pma@Wd?D$q@S&2nQPmVSm@U8?Tm_K<#krQY0 zcz1)<9t-@jAl07(KFImqADucV4r;iG{IjYvzsD1^QIm))`v-s!4talOq6U1HEcpK- zz>y>7-HgCeA8Z7^f0*2YlwlgVu>?~`Z}L;`$*$B12ACpJ9{TMAp2K@ zoGFG>29fTH+D{p`z0)%E{+XPb!i!+x%MAdm;-Dl2JD`(a2u7TPo_*zR6KM*l9OZB$ zkfryu)@=2_T^lpxqMBtbNqn8;&-!<>_Sy$uC37575uxoDsCYb4Zoz%4I&4_%GW#c( z!{s6ah*_WSUpp#A{bf6*D75jceJ@jzf4SM4^0w(Ej+5bXECUNSrK+?d=LptynCWS> z(;QHpYx~;J7}v`9w;|8$ODKQBs|IpD6B{6#>x z;@g0H^|;8lP@vU#&GdodQ0N89vu?B@H#)=p3#7+7(|){yYckHalDm7G-YEkHIyFE> zBt7To@Yw}Uxb|HHC;`;%z)v{fKpAI^J_uP$_I)7^}{7ts*3-Y*{ ziG(!jDvHXWN-E%iQ(~^J`X7GwEF}7dnT2(K^*X0KO5@F#!D}w+jvNwaXJ^=xpL{h& zI05>p&`hrevdpJN^_%Oa;TOvu%Q+&)#Du|sP($Eyh1A5s)ZTO|3Kng|I(mSKOKH!K z3gcgVH)ag!t!s~Qwgb$eXU_H;id9~KPk-1H7Ux_@SE_JDgH%rKebXaK33If;?)?Gt zp#Jeb)J)@dUzPt}aOPC>S=+^`&o`)TZU!nLm*p2tz9Tpkle;|;UQbL8~_blMok!x8$8z(R*!o1k**nVe9_sOQ6o z>=uZ9q2mcs3^X*M1xscJ2?E%lGC<@yk`4J7gk~*xhrYbbPFCbA{F;H5ye5xA`X5N7 zYfrCy)ueKyp(h7jKy;E7)i4te!K}Eu#z852mSV69OFMIlaPan|(Z@`4JMr?EH^h`w z_tx_G;!Q_nOPa!vay34ReNd@#d6ip(4SnznqLUk#_3mAlLz(Mej}FceIF}IQQB{J# z5#`a8mUFi@t@+T-Mwq$+b*@&`p0MorCcy{b*v9nHvdhdK+iLCtf9)|!81ww!@sHle z%L(zd*mP$w+o7+2f=_M#$P~Esvzq~)Vsdy&9hHOsn`ykm2v|M7;^~#mhc=5jGWQoe-ri#m*QhDv!W%!n$@J8kQrZOJHt`C z+*ErDqo`8UJ<(!lbN}-r@4gp1Y^7Hyw{_n*yFd183fN5W_Sf8C2{Z>Dn`&jEf5i?@ ziN<#Y^Ztf8th0(=5q-|xKbj7FTANmmaWbaY`_MbYL?`eUF)S9A-@n?RSLy&IXuNUb z?ceWj_cloGo>DiYT#E|$H2KAm{A~ut%;JnfOJw`gDx(;s$96rZq{>&2#{s?^MRay0 zfL;Tyk=>cUcji+pYv34u!xcmQavr=;pIQP+a{5~qipuLy4DoT2q_ET@Xm~c$LKV=G zvtL7S)|lW*+A}Fsw>40g)<%4r0Cp!&oMr|wyTj99krVMWC#M?_?`FTikQl&=l!9Fl zfb&i?j5PPrst|z#fvZCmf;o7IAzadViWU;SH7m2e?HI??_zF!0GgRzObaAT8uN0CK z`V@z?vk4r7Bg(=he6kF<-k-4~@f!5bev4fU_WeQCU-HgzrFZOj&*)%MUZxP-C5|E< zHF6r93_eUO;U6yVs?oHtCp)i&926m~Xm4aNpC_U4Cb~ zyXqT6L<~BGumIp@>Xc*KGjL(f1#FyIVESg7K(7%6y=gZ0um zZ1P1_;7i{)NU z0Yp58(q{bN2N&LupYIskmNEtjNi)h@?OlY2QCJq7k$MtUB^>sNwTcBIKaWsLG*>U%lKzX+b+J`Y>uS<_` zcjwjP)~|XXhWr6R7P_KO#87iiHh)>#tuowjH-c6sZVM9aAkiKcpIQwRrRWcFE&qGc z&S&QnD_xIrIVi6nHWclK47#NdmB?B*b;)-BVAnr@@5EOjl!X{-5Tv4gDkRDUHCB9l zzZAC~eNsty{17|=vagzglp2YA>@NyRGv*v}(OIq>+BY8X(ApcRkrEd&HO>UG|7k?c&)h`BO(|{M7ig4jP^ka zgGx)>?m_kIw@oPDbLSX}!Y(V~fZIdFP_p|YGLG=&*pzw=(sg|gC%;&e>dBT3CC^>a z^xl_ehJU`ilMIDVyx&eiVKHDNmM<2NG+0YHK%qf<;M*fafOaeIfYN#vgv?m^a9rQTvkOkWCCoong&58T7&O9hK}&A zu<%o!{i%5#`%@D2ThEdzK!CsyX$kRMA7YTyk!PB%%zj-JeQw>mdqnDSq$*&6=qkXc zn(j_)7CQ9g`!`)ICCTyhd(TaTIkNlIuM+Q26d0O^70xQqkYyjT)v~N;_Qe=AdkSdCxm0z?ousokbf7vJ|12} zo8^Rs#_MsC8Stskj_c%~>)#A*xrxfi!$LY*+Y5;-C42!eCp=33_amk7!xVi@Bh3a@ zH?fANop8oKVEYw+Va7r(Qe{GvaPU^pOsZ|idy85W2=RCzk`_Qy{2a8lCKtG#y4(^a zzi#yW%^zdIZe7LTu+e_@_zzLcH=_V*kFT|-km^%=4otl=r0;b#?6aW(~Sr2cYqJ9+Zu6ISp!CF0f>|4Y`NSP}0r zGQhIH@&z_on3OkE8Hh14&fU$R9?{xwGM$3ALK)j*!9PYYc}{=RPyz{kHwku zXC;8a_6@0rJOUGX(OSv~ONH3c)O?>jW-0|BSl73vHMr~z8zXZ-?)O)ZHu~E11QP;C zQS7fD{`&gdZJ6RefX`Qb_uw|#Je!AC^10A$g(qz7Rr?~HJecx#E?**TMKuS8Er(i} z;eps4&jpZnL~>EXpF+s*9MF)1@i*B81%IhV$O^C%O#3o2l1Elx4jDuM@bSR4vBh%d3g}jc zA8~;d7WeblNhY98oN|qipvwgh*j9FEgW5&0q0l$Wa0NsAgcF$Sb;!1~d2J9<6 zJs@MvbwtzzTicR2IXmI{j_2fs5hIBtb@I+ze%T(PGT_Iq}b8a2~m4ox0w|i zkd#YSf-mX{kB&0|3l%-C@+i@^Ip?cA^#=nT+OEvQ#)5i><>4PAKIhJVZZL0U^l?Zy zmGzWT4R-7?K&q?d?5*~nnZFe(VFh+YqF4d}P@^NnA{JXBfXP@F?@qy}EuakxBX~{_ zB)DUXmzP|jaQi_1T$Hl{yoR8h?FpWhQlx)~HW$u`+FotO2a( zWE^MDcH#A*)l~`G^s0LbTFy%#;jIjL;_rCCO4py)MHtxSowIE&N|_DfTfBj|0=d}| zvdbE6vlks0;K5@knhnek0s8kbA&a!=^w!&$gx4m30JDH{Wzye+B6CygTotYkUrDZw|0jhXRTOnAlf6 zAivB9%xieHGbj^MC(+l4pt#AY{POu2RINE0Fw=23JjQq?1&U*heR|?{lKd z8AuSwet1_<0eK1?rJH{SU1RQysOgZ8N#_|H1iRTlmMK6HOD{mlg~|j(A2gMqUSakw zzsm{w9(Ql|M4+55MTU+=$+;rZ*wwVo32c99wz*KgGs=ktxYA*s#x8VM)uKo@` zt+w@T)%lHeyndAHbeT|zq^z8bO}wzS{gs2VOZ2}K;uQ8M6Oo@&)WCIatYLlUPqsGs ziu8x-J+De3h0e|D+6+7T?7PaN%#@4gm~`Nl(PmBcpTpRf_tGKCp)X3ya~8ZQc1qjE zjla`{e(%V4vc-8K!Kzw9f$rfh2p63YY2U@WjhkSt##e%Mw9b}o@{9`F!t>- zKj;r8pzu;e0`cnl2aF}cu>wK6+LxHRIibr3WuE7opppNSgG5ik4=IqP;Vk;W>B0c~ zdbI$-g1BygIjrdM5P9DctPPnGcGr*sk4Vgi%!yfd9iV)|!8caCyERi7kWy~35q;|b zb>s*b@eYkabv=KLCo*yHS$gn#t^`>Xu)u;%ccXPyJU60N@-GMx1b-&79HzboyfcEx z8sn5!EPF{L5r>+g`w?&|)cH1UO-}E`c1`~;QX~;$6PmEPAKT^aomQRmfP_v=tnB>+ z9;9Mhg`4jN18N_c;J6gCwdBXw2wdm*?%}R7ge$p4*Rp^#ae}`8Mfq2ucZhDv;nKAI z2iJ^onE3$9-MN*T9o@?Zxw?}toj8)c`GAf3VIzx$@L*N}%@4r^X(BQkC6%#=G@;;=fv!UMVfkFPEH0 z8DHf0=m6Qs;^e9MXRAwav{O9>##1Uw@6SE;BtXWjW{0(W*(_TaKw`tu=L)~i;6H6{ zXXauXVgTtTYsulqlO5+N4Y9Arw$jyd*pA|Jp{gejU!RHuooz#^jIbbE={LE|MsS&M zt4oo%dSj8kVJHlx2>_{v^eA`%HKUe_o(ZsA zvFZ2Gf8*tXPf)vRcQ&7p&vw5jzL=MUB235lgA!0>so9a~dRF>dJ_vwSHf9lAfbG(OcS_b!ke9 z9(>*TAmBkXQh}A$IDRxZ#A!EOYq8{Yyy+cE+VzerghaUh;tc!W3#d0b$(v4JzN zoDC`OiF!pii4hK)G2Z$Ut40JNyQwXY^@3FZyWPneefkoz2_{|x(#MsS{p`0$?Gr3W zdFPnI1&}SoWXHO1R(aH=C9MzEtNHW17afLxhZZZMB3HUZf$?lU1yLhml^Iy1RV@t%1s|ob%M#BBv&TG%3wB5A{xYc(c}W@Wm+N}J4c?bBXokH z08MrEmX>{^PzKYcV%J%do}SGxfr&NC;>XNKoy2WepQ-jjanBp+x7+Z2J6BI+DZo3I z*E$A!Zp_+PwNJk&Vg_G=Oz5V!R991+C;7=f#S&RR1aJ(Bh$}wEj{0h>aqC&x{TlOD z3e#We_g{8SYndq${eu1X-eK-gls@b!2tzB{4~cu@e(~16CE=1&AKxbN1Ft*8qI)e9 z-T55J$t2YFPFzuKm(B(Hmk<9`0;K+tuLIIw=+`z@q|cCaRPrZZ<1f7NCof5S@yFlhYPl(oXl+A|86^?$g$X5)Ao)Ffdi&JqkfXP z1@BzA5!?kxUm&58ugC)8PvGKfB#i#wF-j~JE_=e#BH3#V-{$NF@M=JKFewO8TtlIH zJ|_Z52?GJUHiZ|1UmpUU|6x_ANz(buBn(t7KO^u25@-GUe7V_$zd1&-**Szx|P%bMHBy=ktEQUgSx&D{Ac@P{Zzr5kR_bB56U)_lnkZ;Wp5@ zHO%JH;*pNhjjv^Q=C#j}HD0B5SK?^*q>$&jgxDKQ=_Me;q2v6~^aI-X1H`-eaaOP) z6QFyVRZdSV>Uz`xH7+_I0Kp3RkMdOGp$2wNxGJ>6D5T1!T(n?`*qJ7Dg6-qT)HgvF1FX97?9t`UFA!8+lA{| z_RPc1^xrGXohDJ@-p5Y(s@RTwD{n zxH=-rv=ZrZ?BX#%Olm9mtYe>?w&HVTeehfRL?#T*jr@p>M)uH~`^XHlao|Gp#u>$> z%Ynty6Iu8|%~-TiY=LGchk8@E5mTgF7Hj6z%+MH;-&FawFwqo&!Aa2qKF8!&wD&R( zv;?UWN!gxLN6CU0c)m!c@`@BzCq;_x^!@b90(j4o^b<{2p};lgoVPd%j2!>7g|ZUd z`G37S%6cu8uf!Cm%T90TXE0 zs~!{4qmg)#oXr^d`b~ehBPq4F|H06|AqlPebI)8(b(UsWfIpLNg>Qb=W|Y`RY(@6Z zo@@6j##sD)2NH+@SXSw*ywJKEVTqwXA|nY4x10DL)fGhRNrPLy9j6aIBj41hxX#)v zj0oMHiZ2i_yZd;)RliE4?IPI-*rpYs*o0EMrNT>~_)D-F)1Mu!&j+wKR0q!sT0Lho zJw!PNt9G4?2aeoRJ_$@Kh~A$ACpPuUtQ6*!mrvOUZg z4nY1%?iB-;gmjRA!LiJ~)zU>@oSe=KO_eLyf-9(irEY6DW@TrSRq-i=`rO!b%(0*q$+0v8;ftt#zEc0d8c~L3?cPv0lvO zQ!Tg6t~k7C3GS99gYsAAY%AV(nnwxHoHKeFZeN(7Z-J%6?XuW3D|BIl?H&t6xw@X8 z=qfuQ7ZyeeX45}_JPsUyWw$QJzWJ9orAgahkHvPmf*{93eKER@?D70$`uC*jgDvRD zbdE`+OF}Pz1Zuwl79hN}tg-Jl;z3wpm*gh#(Y}7)uZ~oi{nZ7x*?m#Ot3Ej!_$aCc z(~F~;O?8*a*WBprkwcl5i5&FnPix;+R#Xv5XBug5)&IF(B+_=Pk6i||Jtv~$f8c!R zy{|CfVUn;E1Py(^yXNV;;x%R~K025HSb$on?T@{TM>H=J^`FKu>ko*ZIsU{<2SDH= z6n^<9_76fy$T1$#vDE^iW=kGrJtezRUlGQ@S18NJ^}~JDb9= zG^;NI+-e(W2+ZP=pJ}`4CBHgx4g=V59JbcLBkIE6$K@y3mL`>+viRcTc*}npkvbs{ zJ?cjO=>w+udO4N_eM|=KRmB|eqn(MyYR8}Avc>)PS7RbRRLHYjybQW=+&texEGcRV zX&0$(C$Ai=P$%Yo&e!FS>)V1m%qK6{RH?i)q%K74?02roA^hhre~7hZ&ByH^!)$T; zHw{NVx^B+NN`QF5W4fILayKIbZLbpx5_OnB)dB6;TEVxV6h^$P3=aeO%h07u3Q_%P zmub;Y&*NT>DK1(tBH@kazDqXiJjXnthl#E=ovq@&sfY&3B&eoVpJ3px0?5uz8ei;f z`(3`otaEArQTf*_6XR*&|J~9``%UZgc@E8%L6JbO#7V+A_HTzM$r;#_VE;(k#D=UV zpz4zzV~aVfwb+MJA#*gC&n9V#edH5>DP%$G`d~ZD2kcsLI`WUj34kmje-|W}{pzeQ|d$YI&&rp%EtEjUC=U%1C zjf+!csP!3{#+bI3KR%Xuq5cUFGZr8yl3Qm2di-C!kdu`@afazQu+1FE>wTC4j7c6+ z!8g{9cb$|u_lff5RPNq%@;z1nhzsx?_phOC8H*e|-N&qE%YQaM%&|> zy6o<%m^fIWUt|QwS`PIJGft%2-{pOivFSI%t4}(O*5s^EC*?9lriSg%UfvdC_4-cT z7s5iMaEqmH z*x$W;Ch>FA-2McmXMTV8i=~P!#wA{nQssQ$MtGr4teJ`AJLdT*x=Q)gL)Q}ki(VS` z>4aV)++KHKMP$!SAfh+}-WpnVeg0#auRdxt}1wlOBbfxXM~ihpuZqLQNYCqWOLtOcnBIw*9{UK z`kgZNz(xbToB(}IfNU8NGB5yGNbmdp_r(~DmT&YOmGRu>t>99+z;sOVqi9djk-=dX z7rPs88*x=R-S0hgZ#+B>dz+`@?I>598lMEMO!?J|>V>_Qm`^?^7DzUapo(8eIF5okt>hEM|Ct_uT2NU3 zD{=4coTq_gS@MdJfsUBYzs&YOQ?*-qdhs(HWjU3z{aTAr9Q;%oC|UOYp1S~?KJ^U%v^#$JLiCdPs!>HSAJruDf+ica z{!-GMG*Sk-EB^!e7}*n8ssi~E)akb8_eMfCCQ^u!KtlSVI~Xfb;q1_T&VakWrcE%) z51;=me|nr%U-pr8Y~q(B(Olmb`UI=0u7l8F$ZE<6(|`YiJtOe4b?-abz!(Y$INhss z$xE>zmn1J$C|=CVQ3a$ie*SeFL;WIycjK$LLou6rM%za8>gRRY5OvR4@JR+s+}3r4 z+@H`Sy5@^sU-4htw-Z`=urc4vsjTxXJ-&cb#ipeNH-nubjS+tx5EC~r*@9-SAIA3% z67Fiv@N9%##Jv~go#8fa%_AHaid@%==7A}Xvw+90n=zg=tM{DcBmU(8Oi_Y~oJ6_Z z%)`Hqzv_6;yi*hZ|k|AQPZq zb$5aRrf#|W;-4@oR3~tdKa8ULYY4=AMh45#ll(@7)w!nxs6r;o9O9?@+&gOY>Dy!1 z`m#L!q<#3I3Ko1b4Acm*P1SnzStzltN9S7jk;8&M*(nL2%IpuFKP|N5Fx7H^fV?r4 z!)T1}F&gQ)=Ru%|?b+T_vIt;$|8pTz6Jgg4EV-1>1=R!URb!Bjp$|k2Jb}^ht^Wz8 zd_O_(UvjKt3i_9)xH78o8J`Ny!^gL30V?{0s3^o;y~xtM*HUgS0grYoz>4Vat}c#1 zM~(mm1<#;sjG#E>rkuA82bJI24u4&Nj5}3!Am96`u9dff4cFMeA+azugQtbsX9yNrqoWsLH1T%qB|o;*sr{7q zs8K_?pT`_EPcCnsP;m0+En@>A6Eat2WSXGBlK3TKw`0dtA{i}%i9rHsof2N3jnh+UM;uJ737Lzp(cajj|hgCX>q5TAQNk(Y7 zI@{50xc^&Es5-*fe{=k!o$=JJ?08&l4vR9EYc!NfPty(gz2p(#jM^EjQykE@7LSuf z7JI0v+=dnWQLMw+gve`<4Xq%;R)fZu>%1WAqMm z2U)a_{S7n2w3PzVhd005f2&$LR*v@%hlbJ1QcfY<-0+2?HYs2EE&TSr1nHFlH)Glt zGn)L!@`}vP_6}`r3w`*!mV4Uwr+ntM5Fucv9E|8Yk00cTVwO?u^EBoJfgi{69-o`O7eE{ zFP$fVCx${T;{MVLix&rOLzYahQUUS5s_~6?w)Q>)FN-;odV;+$lh&+PEyvbRxWx$H zX<`BvOyrL&z+ap4SN)P=MT5!qu1lCH$r$Cj_($1iAI?`sQ)BahG!Y*Rfwy%86MG5_ z-jYigD39^k7oJ1Kzmd=Oh^MAK)U6R;0?(;?M>3IoNu|!`j;2>OhwahOujG|HG=0m= zL4Ji=W%GF|_O!<7&9lXAp&IOHb4s`0)q*+M4*+f>!Rkj5#I1m6)($(q(W-o3eKS5J zEZbbB*W*KNG%xA57%v@KL6S&MSe^s;ZPnRZAfO#J76OQ140H&+S)|J zZ&KX7ZXA2>cQ>qpfdndYWf)7W8E5|JEv{ z-9-a9c6t2%eVonSY4p`)F5%dk{ zq6(AnCRk)5570hih{s8WxW+S5ux3ssA%6U&|Jzv(YSdPJ#J=qji-!cdXadB`%+QK%vM|JBOFfMYri3P^XUb3M zIrGB@A#t`T{oZ%KwT)rv6sP-?!xZQr(2Vmf0ct&`veP)QYP{5?q6~SdQhg$@e0;}m zNAB8Y+w6LvLU!v)up^Ors!;fBFFoj|)dfqz2S#6m#f#|6>=v? z=&plwthA1;e|1|k(!rGKyuMmEuy?5SA)=zO-2DXJeyp)C@B01K%bId!2d7aRi9S6h zqfb={iI&XVH-=?4rcdP`YK>^-X03=5vap8Q>eDf8C5L7vzItV7;uVgQtum~;2_k#E zsCo7PBjw?FHbj8Bl`<{+al)+k%~I4OdK|b(sLckn8G3kgs=70vV5y!zL3d~g>{LwE zcy7r`#_GGUG!4O^(w+rCz0Q(MB`HV?_Pj~ddo9MFw+K9m9V^f_}?aDxS%S>A~8 zPz#JSn3f9kDl4*^OCcb3t#J@{2>qD2rQSlr6T(MNErZi`kGIE8r1f0ikx^7|R6@^m zK<<^*Xmxs#fW9AE|ETaWUikXxR<1A0m`@#eEBjL`s)-AXD41V_{OkP=tiuia_lB4e zIb;BVY;4ZTL zM(?Uig)>3v=u7>h<$o9UukV!UqU&Ov0_@E+ideHNw>*+mB$EuBh~$`}OP|>(Kjo_9$nm;B=SsbF94$rS8Uw(O(|5Q9AdJ z$nE=k#sqkNEV*P2CIxvOW>x%?F14a$UlU}kn%x#-20VYx^W?Da1&5tz;kz5hbVr66 zt1vHr_We5~)~Zwe+8Lbx>`fkjkltyXpBa&JGTQL}UU+M&_Dj4hBRH$ErKkI6-~w2< zl)oA?%3_gM9dwNDt=%|%352(QnqOIF>45=77@v(pDK)h)vN47TBEEz{2vPb&|30;K zx3F7v@|jAdCy3Ov`H`leJ#Pvg;0R1)UILfCnM1Kao!OYClf6MG+2AA1-L1uN~yh(fvb$$G0v43}B&namx+)@TA{fd$Mr<#UqUe;7r);`0B z+IP@dc0UPST>2KVm$Xc;!XoF$LwHB^trINJX7o=5S_Wxu`Jw>i)j1tNtCZ*TYg&xX zdl|RU1AsUefs^`Y(E~#{DuKSy>9EN5&G)IpKjqv5j?_(4-ezN?_44Ak%x&yLqtNtYn>)-vq z?S9L@?jKK)5lZS1Hlfl1_SyFxxt63g>yySlKkv3@6Pp?0%v|DF!(4LI@o zm{TC8>%0)JTuz`(gV&=_Ixa=|IhIAlO0;z;#!)+s{KUV~x0xEi#Y4W(f>}C2ZsbEJ zEaV-QOxN4#W4P9Eqzj{WmkkVM9_G%SA@xJ`+0E)iy826m2{mZWdC2oFy9+=>!c&v8 z5b1bDN=AMnHJ7ZSI263_qg{kS@x7H;QmZ z#1=^DX8t-%DoZ^G@N{0juYGFDNhqftwj8e#ME;L5sH#~;$MO6uZS)G-W4cs1$d}a# z3uPR@l768`la5Bz<$eTr8|BACY+SM7=$e6ezXX(Ta~A`91lZ#%5`ho;{mC?CWTl=) z9;meUn7#=omR&OCYta9R@z)IU<2yWXrbz-`npZ^sFYu4j>89xG1ix7ReOaqNbw4gS z{jg#h3f=thjH^gXkn=!s0?F;--(25DNGvKA_wr}jmnN5yBgZJK(Z(Q%6&&QfyLWdf z(R|6(m=9M`&cdZG61!L;g&Wadqk$Yd=)e$lWLpf99$e(`i_$o@g&6% zI2}u=b=Oc4F8Q4pR7fu%$v#m*cK;S_(ASyL=#7oxK~holp|@D&&ZdZu^B}(t@EYo) zYyl=2MUS=Bh2}t+5b7nvJA|Fv-!TY3GgToZE&BY4@%8VPGJ~?tjBiY%_D=ba@S7b% zHqaBJi8&hvwB>RrD!SnJ?qK1mcLK^lyKq?LyU6(gZcrNCheLCvXVf4HN~THHMiQ8< zu^!kZ^f~AV$QFb9E`S;@{ryFpiF^MHW?~A3`XpK7@^v@0zAzr-k<@cT4Fdofap>K< z2bR#o@QbGmp2N>`D}2<+IfFATcUfUmM!R@(&i^oeWoO21*#4ej1%*T}RP!D2cZO~z z8>p`-{2c!Yxt|?LruH|s4$42)cw3~yVIaNu%&B@?VY^pDUjO&5JYQJDp1!5kEVal=^>rEF0uB zYs_JM2G!q@75A=ac4G}fT~*=xPg%kz-ybL}3UD_R)v#dAZfP3pad!u~WFceJ*p2w!6G^`_4_Vq;CbOfyA68q1{76 z^S8MMt(Xqr!0}Xa7HXO$e;v-;$q}aY!Qi&2NE&H`rb0z!BFyv7yiZU*U^SXqj}(XaV)mS6Tyg(_$P zuZdr4&V!9f7pNuL{6uoHDiJuC5J*zs1MtAy9h+la$@})0#Y?^XyI@aQ#Rix2y4$h( zm)G{5*uYdyp4gH%p=DyO*{v)o-pv12ny@Ub|9DfsSGR>6r8O5>vG9u-i{#}nMH4r? z7H4%=R@+;(YDPzIToXHT`GNpNu_KlPgs7>hHA3x+1&Joql-@AMlfH*=cMW;;cNtj) zLF&7XySNHQ6ow{UQ3bv1GvNrxx=t7x3-)v4i)ZkdeZ>S;rBC`!_@(*fHtet5o7lfQ zK(aT8)+JNnAv;eu#__-D_fdMsh5Pd>cI!7x>AiR15j3Wos7Sl{vYkhQ z8$KD1zj{#k>#Z|epT5%DLvZ99w22nDJ4UL=;!z4R2}*Np6EsN`;0z|60E|Fsd5d{AE53Ck#}?hu6_u`Am4+}VD0QE)f``szTE1pf8ia} z>tSdWW6Q>+|9*Pf>rOm3#p%{Z15{$e6gapec8G^`sxa;z8ioWFafg7*68%9_=+0^S z?)5&@I8JE|7m+~{u^x;#I~FSvZ~G#vpXN%BtHjWnb8SeprZe=x=8a5{Un}#KPo7)0 z12zat3pY<|`MKz@@ln0E6V%p0(PPSy+pD=c1w$>MJ?`%t-SuRpL zQcAc*)kut+6RcMgi<N@=4B5?*#jMI9Bl;CVg?@xDV4K4c`4|u*ItaPTNJhnO?{?nffl6ic zFFL^a<-I{lXgAeR2GHEy;UCp8Ll70smVR>L&H!Xfat3e(NLbj$v_!I#@){J*=k#B# zUVy{mpf3{!Em$rPwz&-uOC`>9`2%Qqu;OAu71TzA15a3GiTCGvb3xUks>T{l&!Fe; z0~g9$EvRo9UL7h=6!BDn8KJ`S7uZ*RpEzkN%L|C=6ophx_geh=-_dt|bF|5{7pFxV zR{P6O3Xi_q>9&1P=Gs&{(Oa#)IxaFjC10{)vyqmveLhse_0@-tGWAFALPCi1;}sde zNQZjr{E^)2FJrCL0WH&^QVn{=9}lelcps-xl+&MVvKb52(IfI@99Z|+%hy6;R>y(K zh>+cAH)ALBgFCJHSDbz^Cq7N?-OSBhaC6=6ixtsgUmpnLeUSWR))z zeE3YLW&`xQsD}*W(v*QilH|kK-SHI=oA16~rPI6lSSheHA==FT;~B_I|YD7T^el7cO^YP;MN z5(Xr`7(^0`@7^3_=HV9xe1HV=OE38{5VCS6;UBL7gB&u_R_Z}^wN#Zt&Jrse@Nfwc zmNnl;rG*p{+91t`k6t{Iet{bHH~E}A9o-UsPd)o?mZ@+K)INQlN>S4YS^XzbZ+yw2 zfL02T`@VKJ2dGcSRig;h8O96ejvoEi{;Ik@Dyl|g}=0jNs^bvRLIq1$8++0>R$XG#UZAregpr6?+{Sawgl;hYRa26to@jZ+9r2g;SU7G zN;R?xh%ad|-!q0^j;(i!KJ+b}g3pr41_=+Tgca^YxpwJx}APlPQmdb%IdM z6d(H{d0{+xvZ?A>1NZh#m6sJJ%4y|e!lyOUtMI7WzHYxMQyFCD&=CQUdM#nNIZ?rC zah`sa|Do01$F0Iw=dnzVRTHOUM$z5wYaSWv8MoPd!iU$k_B@Wr2!jzX&1qAQCGT^D zM&*BuG#2nkSo$eKnwNeKv=;h?b9;?O0YqnjX*Kp(r|?Vtx`5<*~TV2 z7&lYRyt7Ps3Flp0-jwBEDvipwN+NqU05X;Vj9jj_Ob`B95kEB9Jf zDsoJrRl}r&bGlPMT__@=KW-UN8fty5zm()y5qcRo+^M6!`vIeZEnDg&AP&rM`7%Rs zMx=pcyZjCRd@xUIu8-Q;-u`hcXjA>;mvWh<%qqvzeD^~PAkU9S6wD?M{5>({|0Y87 zGhmjsq|OrZ0a*#)K;9x_T)XX`+K2oNV|U?GS@9GibdHRiiw7#T`;nL83(}#tl^uRs z?7Kg2^U00I(DxqXHZE;uVzjQz4-c?!oVaV7*sRyDow||pUsvM2H1UskbYn*V^q^)XPaus`sH3H^k_8`I35}|Y0RKRMoLRR9E9bYk zF7pY3E_*=fKFOeB-g4`iBHw%}MTUnejUI{snwK>CxPK#fW%`|1Bu$3?!-zherpA8( zdd5e_($W;xp|jfy<@^71h#y4LGf(;N2k3Gq5hskBis!(Ku=+$KfwmB5VQY4+xifA5>2@esYe7SZx~eCm({;&jEv znW5#cr)ZJ^=kB|6?@BPz1j&~4U}20|7v|V-B>Tefs|nCZ+u5Ldu8TWRxnXU^zV*)Uj3J@>}!p9U4kVItBR)ExY=SHiG3Rq?H31M6sWWU;^fX$eiqj(LmF z%N!M7f2ZlYvfK-2&l^|bXL8@?iG!xPK3fCguf!beh33)!H-D(=>)7UF;>^@s)P+O( z7E`>lkJ(dwbxCxq{m&rZoKijuLxBS0qY{QIu|pwYACCE)J021}xo@*(Woec2#WuRf#|q(|13~D2A(|qKqt=akK8VCXgn`M zLYDPJc_lVv+0P@3UBjzS!^T#`zxGYecXI8z9eLq!2yh~n1OT#vSZ+Lc!$=k5@2q)v z2n1rl>|{NJ&P6JK!tb>(lEaEtrXVol5MMO;@wFo-foPRp+!OOEr0G;2{u#ZJu+%X9 zvT^ToRMRrGqbc&47oSAGutDfv`kk?@bHrSAvvlUORhh@s#M;osze4;8RU0{CKe*x+ zhtb3I)3NM#ddYzw_n8^$ZocYBdW@{4LXHe}O0gNN0p9qlp-O?Xt+fHljV0y}XgSSs zhivFGyZ=OTX2!R68EORy>0j}xfBe^PO$ z_M91NBmXv@(9?<;ty2xo*qEMhe~#ruqco11^nOhFu|{6$Q0?7kgnZO-0tJ46ltMsA zk*pNPzuRMI`=cTpju%HpxH)bJ#sY9+->u9~@kSa@KuO}Xr|${0iwk^;G4aZvyJK*5 zlys(y5eKL$`ZxKyzwRqbA^hJR!jtHh!*9sy5%+&yv^(y{eYC)v#r2N8(+@oVY(kZl z9BWa+6*KPQoCmgA)bpXgIDSa|8fjzYdDvwq%r_d?)$!=2!s7?Y{=QsSLfJ%u>olhe zgI9#tiiN}arz4u=={eObr#l`MF*g13`@d$f(SrvNh1h=wfWIs( zXYEHF4cptye*EfI##44fpv5qcz4d|NmxYjz_iWo#YfS-9?@*u8yT%LK{r3~`&M@)* zP5DvwZpIc8*uXzZvyGMM@0@sK;VI*rU-Q6Q?^9i)cC&WxuD!^R>gN8R+?}ni&nrHC z8IYnDQJ9VWY$)ds-k6clm&V{E2U!AHbi2ap4oYy5BP*K`B z!ELpejFDANG{9FGdW1<$+=tHW41d=&{6ODYZ6fP@dtmr{Bk$rla`j3Y3B+foz3Ij0l8fqtXS@yZIbf&hX_(HkI2#W0qOq?SbUQ=B%+xWqv7%uru z-moRX(*Rg~RLLDbEY#%utV4gAZ>32}w_-9@Pi<#) zE0D(hCrg2We7XLRm>F!-*?E1uMI2EYB!Fz#j@s52VU5zOr4>Xq*(4>=7pV(K%_WX> zrR)C8&1-bpC~2K6{2g(-2n@AyJa$HEF8+z|%9 zm*_v0$KC>tHK9S6YmH9@>I|Xde(>u2^yd^&_?Y8 z7q@j>@CQH46M$TlZ|$F74`soxLWiS&V;mmO)zw3o)_T1#Ek{Hp9x$UlLM(*fLAgH2 zXGDbH2D7rczi1Fk1x}YnKEqw-h&4A(fr_bnxCakus5|)~Om6r22;gIk{{dn#{=cH8 zlDK8-9i-7QNdVkIyg@3T!9_9~C7HbY%YxQoSra3Gfkqcgj9I`7H4Y?865C3Dk4tBT zhV?B%A#zGPZrXrkK2pYW^N`{prela?{F{?*73Tyx;R>aU!sPjwi?*&RBy91U{+c&g zg<5hi9d17e29&W!*RJ}>UB4&)&`f|swopzGqJpchMD*w)fYe4{!6H$MkwIlecW!D5gUPsw^u+$a65q@$I|#q9 zNA43$1$Q9sgfy)ztMKMs)xDC*c88Xm+_D)65$t+x+&v!rldf+|z9?W4s-76D5C1UW zB(9Oqpdc7W#dL7ASI`_L5yDaWDPHiBXC^mf)w}qO4cy4>F*?GybR1~x_$8!sQ2#KY z6Enw2F6)Qn=7Z!z@X7)oo?nY+*Jk9Xcy@v}YF#?)3eNIgwq0sDns;nP4vplfIg^l! z=YRo~Gy4GMorp*NtyPAsx@hlv&=pxprbwa93V~ke_b?4z+hgJWjbb@Gb2Hphjc zQZ~(*6_8x)GPs8$;wD@4^H=0tD%ZXjd9YujUx}1E`(sF1o(+(hDkjqO_LO9C6lSYc za<29x-|-tU2e5#1o%Ol`D1@h<9z0WizPWa_tHAf+t=)D3W@@)g^C%y7S*dYnJKN#`&L%$@5;|IkhhU`mU+2z}H zm(HkELuX(LD@9mJp^e@?1yrUxPZ!{p&@}?t2UNgnO@*M2KmN4tzamsbk3)gHN}jw! zW8V5r$@l3hOzDf6%;+~vxKt->FV_Aw_EOv*;BlspTszsAZ+W_DW6bj~Cgt5IYv8pr zT#}05JHm|@Z2Va!c8jG$yky;e!3a#ih%0A0(jhwyD;_b%)-E)}3Y7b1?VJ7k^0$Rr z`KD`QT+k}v?9(7}bhP=qL!;pk;GndQ?Vtv|ECCUtdC^l!Hen?jcGG4@DyFt)9tMJR z0?j8XCQ`~6y$SQ#k{;R__?&-x=fo0zRjn$Pg?t$J4-m6$7mF|8#he-{=<`V1_?cYV zj%V&p<;S@k5bsWUTI4Cf1P1eT-(FF%&wU^M%GH4X(f+s&_tNjx2NBB$&x*lFR3gXr zp#8*?ixL(#J@w07OjLC_t+-PM)Alnfr5WK`CAgSdRpB%P*&AVkv^QEHgrMM$C9;78 zKk~!Lq!%(^rX3(PixTX>fgJ&XT7c{Xc>Fm?vTzouDfcivyf7Zj`u}TIo!q~AL>u)< zlDg?%_SE};S3|nrnYX`7qVn_!`#T5OzAk;6KbzHkQ5_uw4-e;NJb^%LYbq|r_-2_x|nm>n3>t0b5v?vkFUmBuiEPV z`M3M~rK4EM)N=B6)01~jjXr`8XayoX$cx5TFBX2iz4u3!(Zrh^g2rm@Q8^dJ_9l5w zTy(#1bQKgig7n*-7lvl#6&F%cD#7fLa;7YttR`%w1MXl~jsqref3_zD28pqU!@<&A z^2h-@ewbSc>X4IOf20?%e)=?^nTNpOb*$GI!hH`xSjZod%}G9Gmmyi_H^GyL!Ga3GtBQ%BS~Mn0aPy(v3hJiP zQp4Rao7I(eUT9R&MQ`BE_R#)QD$a~?sW#4g&qE^5UzwEju#p$e`YgB$*ELo^PIG4- zU$=Y=Jt?E|z5n`8@M^%#&%4E%97s^iSqwKd(klAp;;c&r#LUZJz291*=os8DJll*m z#Myy%BzRFIxz zA}kX<(M{ncCMyFh7_a#QTZ*TjEDD1mE5 zaJTPlkt+Db5Ht0XrzpV=`Vf}^wbRj0)Ddjg3-}TT6%}AVJohbgs(9z=#Otr|z?`-( zD$>Oau%MWU?4B;PP#5}_l&RBJx-YS?e?x%)vw)?LgE_^#$C{sZ!9+~IddNAoS{#Wo zgRDkJIF)$g=MNEKiCtz!a4vD{Ea`9Qo(;+5WuS(xIFhYq7x4i4Z{cWPd4|_#z(cM&n@0 zKc%iQ_S7pQJY-P@vPDiz0V!q#24V7SqWh3E zP_~AUtq#N;AU_vMj@f~0ES$X=5yh~>6LumKcs+OXjo;W-drsCm-2xMchHe-@|MQ!3 z5H~M$2oAi7M0CU)09~wlllGSZ5n@956oVqb>R8}RV((Qf^+jk*=+&BKDas5=nIN&} zAI@T#WOXJdJ-ht#{>O#AY2}Z353!+#Z!@<6DhWxCts}x$XNK~|Ls&CrKfG1ZlN%AW zmA)LWfAt^5e@~<1IZ3zUUKc#X?AY7?RY}AY;d?d}=8(Y#_MbgaX$BaeyaaCl`xV3V zuf`xT_|w2dn7@!;+6B#*BfRw(0u7YeY1=D(LSg0WScj9e1^_9Qa* z+|GeWeZG$y1pOg`S?bnsG9-BhNGE}{x=cNnU&+mJuc63pg+y}B?KBgY_wp3{DS z9kIogb)Xp4Ob(xsF?>D?HWTl?y%Q5O{!Z*h2 zf9eSx-PHPhII{!4%KzY{-u`Oy9a(jaA}gq^oJSeZQp0L_#~A*bH#`QhQJ>W(6~L74 zKDu%tsPOt);RRjCfSfpaHb@Ah|I9SIMP~%sbjxC)3{ae$GjtRgt9-(NykI0?dj(PM zJyQ;5^F3J<5aCTpy2+z=^CLAuya-Uxhp5@noS$)ly&v=yG2#D6VT$Su`8!d+kb;*~ zGb~{CjAeI`I6xj$wpadMV68-coF&3Ie-{mz4gU9`r?Y5K8vB3`2XqelmN_z?uhh6x zNFMu{baK(PufNaK*vb6J2b;3YG_c^vQc37JctdS0-Wa6vSA>7ReM_y*==22A=TLZ+btit1t9C%2b}G^I;iwLCAO&;;M> zBg^Dt8yJ+3rw@OqvnBfbauzqbfJ&vLtv#a%o3%o$MS!NH%2QfccXuj2z9Zw1T)n@uLfXTn*j2Mfd(!pf>8i zqquP#IDwGC*iD^WJ!ugz^Dg!{`4(__FYf{Tg{&k%4^uPM8^#-f1zG9~EXG%t%pdpx z9JW=u%cz=;XG1HW_#nlkwSN(|((Eo*76rPo1D~)$y$qlWdtZTLsRVHR{Fpu@chc4F zu*>sv4u^Wpd_B%R?4Ie8Xc~>uJUr3+%#ewsW%zPu#oru$W(3w3>>FKBwt27k0(v$G zQ<;3>`rzTIDaSg^l!en#Cd*oKKZc@B|9k)TPQW;oK;j0C*H-Go4u1SHof?!+l4Stj z`0=+6c4JxY5^D`6p-(Q96bvYgdp|M$gP8>iT$zhuWdcV5^0{zpae9lL&7&|zW%v=x zN!p{lVwS8t2BR5(lQ!lgX@Yy*TLFt@JGRUXf(NNDZuio^!&TAG&lqFcZh^Dn90&x2 z0JQ@G^{m`IW@%tVmjsa`z&yMuj*hQn4lC4Tiaxd#Q1Swr9Jbxufg|pTkjE6p+E0matH5UkzdPzR}NE zPV)U>?xJfk-1kH1>=(Y!Z*SaQSC=3VQh*CKJz#fP&z+TiTDcdheHLYN`rE-jbT$lC z(1e^~#8idIKjJ?XqJku;(u}Wst8X^syzWfSD>yRuiuSzrO^nV>R`k*2Ug9 z&i~ZlVurz1&I$ke#oo2_j(lx`l)l{yf%DJqUJqSK$ks7!$9S!g#@rb?cR#)dLyvB~ znRqJ3Zci;}`fzE%MEkz#3ZfuJ2s9(AQk9c}U#;`!;Qz5D@WS7v+Co$|4*5mRY_7eq z!p|2Ndqt;k!4`uvO&XxKzW>cyXZA^*gyb{enV{u7q^q!U>D2n zo^r~)cT=^@=)0ts{);&8sZUC0xUOIu|0_J4&Ms*p69j6o|D)*4AEA2NF#en~gRzf& zjS1PwzGazgDQl@Op-d4XTV!XBrBWhfO_)Mdgk)ESgtC?;LI_1fy*L5jU?iH>2rAnN<(=51v|6pz`68M+Esi#=QG%QQ;__?B~0RI^(eK`HgW*#L` zsdI2|=3ANPlDD^(P(j7gw=2%^E=AUuy8%?Vteyxm%&D5 zJCCRf6L3KzjgF|mvm|>}z{g5ulvuyEOVwl6iLTkuhSgIopSiZc(g%|cW*?oKxAU~# zO}cW@kpn~BFoyVvOH-ik9Z`K5p3k#jBVRb>i9^$(#<3_R7GyUgI*Xeuh78gq6!M-y zT|i*S7L`vBB0btZdx`bGX%^JHMY#}Erw-Pk4PbM};Fl4&hHCIPh-Qy54HQ?UcWL|^5V5e#t0FVgMu_ZdntkE;< z`%2w+Dc`@{eA2-K#X#Vfe!-BWyeN*-h{bPnfuY>-c2dY#;6K#bSq022ME`wW&c}xy zr|BY1YxjUid1ru^4Uj-dw^H~-uFe>Poj)H?UwKla=PKCEXjNF0&4%1GZVr_S@@X7g z;&k(>%bm0-FKV>q(FDGTB^S{}4h%M6hWeA1=yYM?eCJ+NEFF-I)>LRDyjrF1wC?V? zJU!w>WSUxs)F}z+s4sip&HyFbB&uiBE(8?F*|c+DD@k0={V31J15r984vl}bIjMfn z{mSLXuVnC8bU&35u8CN_GkCk#nb(0XaFe#Uz6!OHuRTBfP06Aau2bt_kYj_QHR%;Z z9r7^|*$;>N7zXvp31u5z7;` z?1n2J#H^?^#wf4cA!{d%*z5Pspztm0X1}?)w|#vl^Uky>3B{$?%F_j1RU%EN6IzxepvR|PddRx7r5bi(cu9M!qk8m)eD3{JRPuwnW#ocXDfwgi zsh9RY3Qg^w1PFR+)8ni&g?G8gfuGQk6K@E7qC+@A8kclhOdk6ZTjEPW~`2 zhWFp;vOSu(XC1o}g>po8UWNBYT^l36*$TIEp-Az3*gYR$r(R=WKB1z<~~X7W>218gKW_T0d~(l4z48b3?f9{XQ)pQ=IXb zQ8fS5PV;s_$&KaW%UWo-pKaXlq-~@lO7MKwpP}1p3&(p|eu;iExb=XoZ7*LY>Jt|4 z>*71`Qpg{uP%WjzYN!*v<~Uf%-8Z8>(sSOfahX>TVTax`p5Hmljvafn=E}6-ce0)9 z45oE?5`8&b;>68$?w_LnLA+|y2j$;rMTO-pI&U;ib%YAFZGXI>oIb=J1kN(!XyXRI zipApgO^N}tu=QD#vXE*(TmSI4Y z;6QkxNI>{`z{o^v|KgnTM8C=oBfS*;dBuW>EO!#e4)k4N44v|3%4?MQ>9b|Y_`RGARG%&^Yb5zZL&W`kO(lcJ2=dnex0pDH*XD% z!1ggrWQIx>%s!G0{Jh^e$)XHFFuU2wCqn;01ejp9c~18@Clu#HzfM!K0F&Oh59ZGG zwaG+)$F&7bb-D7#7e1|&Azz%KF}^WS1c48n-|iQ>^Oc*dQXDARxkVIYY*~#wqug_n zgjkI!RN5YJ)YG5xG%v8#7!)&6F zd!s@r^qajvmH!Z*8vM7|9?-`&tmVd^R zURVUO0gz4lk=?JXn^81Gbe8=79?R4(YnMbFH>Ns$nb}Rdn@7tsPTR=m3F#fIK3z1Z z3IP{EEuAbY{>BXslG$dt+n@Lvpp^cXh><+*Shcm$Cwi$-JLlx?kQdR^97dGq@Z}%5 zGM^Od4HI{U!+jiXt~t#ghJYz8YNI_UeLSkywBK0k`*?f(b2?4l=>~qs`0xN{#yozf z`swfHc52Ara=z1K2XwaE@-r>j(;Y`Dux+!3mcNDRJYkVN01N zqFL7$f;QjG#lDUpD*=p!!oqplS732>n1s&9Scx`7U9hzs>p}yYYOe~pB?oSJQ&qoR zE=#s#(iFd;g%&D-dd6}Im8iy*}V_?|7#!LxuRFVhyolDh`I7zP$)E-`5 z`{3jl)~g>*AdEiNlcutJTbZP0yR!L4@}oM}0^Ti}`$73Ux;NH^V>`9J;P#3ELY+# z?{M9H?O1gc6u#@dc8>iNW4GWjqt-+nS{*l*TFVpYc$gpE)X)*{vmKPRVZcmm|4L0` z625anKJ)fZs|%!-F=BA742qW?tVWF|L#{J8*0$AC6KP^jP6je>U#`2Ep`QuV5gJk$ zd?k*3hLL7={@LBndFKaYFfpgiXEp`AE#-z+LYE~zQ+u-2xNTm1i7yx91RS?QrC^&a zr9U7~^q#lDL4nIem%EX@Y%;~DfDJz}d#N^p&}B&f)Vz!qP(4{^Q1!L)0{+B=A|{!y zne7LI#Gygo*4(|lKIR0Vs|T*YZwl>FzO4ri9v-R#1Mno_cTLJXFXU~?kp-_V!|BZ6 z_&*P1Z>k1%jydsK-(P88n9EM-460?Uf)EC>Q@JUa2H%0%eW;72x1Q!+rXx8 zB4lWBp8VkA?$}<2)eg~?Yg6;fjT3!4M0#D$6bC>U zJANdaX^8bM}!0(ZB)1&YU`b5zh<8ISCcqBNut;n7$!&-|JeZ+yzc6J!DYw zH;fY2TG@ZOc!9$KMK-8ZM=Z;^^nfXix&T;a>4W|2(XI6B4rP_GTn=PmvM z67lKdYv$UcApIn7Pq!wVdzm!Bfk;f$`~~IYVTJter|2iE2Ikw07P_@SrNW-LIjThg+xs<+(xa`9!&qRKyVc!ZI}L zQ^JQGwrAsA`hm4CK$hHbc^WJ>`(wY>y(~(f%7w2}ZvqQFQHXS1BZ>kXiU7co~<57R0gB zH>}g&K@&7_pFYxo`W9mgJr6P53bh+$lboySzK}9zK$az|VxXp5(+&)-$11$)IT*s1 zavDli|d2o$PIG5a#jW<(|OSlf=6-eI8j%IP(4c z7m^~p9kk2gEtZHy8hf;KaF!wY%G=Ip7cPU0rNE}Oc6U+zcrNU#GYcT4aFc43_F%BE z({lat&DDRZ!R9-@X8|7yIPWin4_^y5y}^igp4g#hQd}m`)w-XuI^ewsvd&DQ1{1_c zXX)ScOJ(A!jfbp{imXc>pZL$Jo`ND8IdFZ&@WTt1Qe^!B!jM+8a(OH5e8v7N zuW#WQT$mG#djC>;0GUUJ$pGGc4&cF4gPMntNm&|LxU(wBjr}aScMt4*nmbiiV4wEXX^CjpeLPA=l~v5F=uB@NiQR3hbq*1*7A`}37Of9g4dIBox83* z{kx`>5NblxckVDwOq%0JeBA=OANDCbV@BV~3{RE%H+=bYmD@VU)9Y%Jhbci+*VTh` z@3F>B;?9=`d&9lFOAJdl4C$5{Y=f7D(kVn1AwQ;^xx*0=aEUPs^uqLI2V4$I_hNuhNFWs^n;ke@2%J`{ZS3X^Sg@ zTH6jcrqxmECAA}8tI}KbIrU43rNr0Mih3I6AR+dGvE{}ykG2~+oL00$jJ&e&x_~XK z&Y+wkL;fTI*)q6ZpKCfZ3O@rj*~j5$!DRx-tteY`@}@x{gI~rLagEziO^!B=p@7v5 zI-tttBuNXwrDtJ4Xu!&CONa%e(I|o^7*bs#19+_n%2QQG|HA>&xz)iUl%1dp4{xDG zDf4Jx2VdU-&kX)f$Jt95@SKUvO9+t{{&jv!ZYb*}F%EK5&lAI+tmrbQ>^zzgz2jxBR|8Fd9k@qq4!GD6fhAb^ zeApE&Fi9g99#NL!6L@n z2KVipg|56%k$HN?@UG^Ep0km|m!B6>X;Z}wl8V8&dV=y_Q^^k* zZ2mc;01ei}ix)*;2<>p>144|#2c_p%MmXCRGvx9lgfL|eZ(%k1ep4`l2s8iqXmVw= zbNBi#=xi4{!mK!Yr~vw18|p#>u_y5?f)MRLw%BOW_!ueEu-^1o&Qbp;z5nv~$?l#z z_ZrzBL^k*KN-m8Emz0azS2CfqI@rZgNh*-lv*r0Q?}ZHM%@nu#@)nXocL-q%-ro)i1uJaN&%~9L61+N%zw9?&wEk?;iQ{W?v}| zT;oVti5G}?a^@%ddxS;7Qj1a^{&US+Jja%?kg9YYNE|uY!D$4_FifXo0414~-~v)(XSJCi>e_fLwaU01U>-qgUx6ZYV|!FoWm-a?vU9`wji7 z8#6eAW`YqyZt}g~7APNSpahesw2Vk#le*ufj@7;dHFUD^D-rQFT!)68K{Pi(=9 ze{RB7qhC1wgI_xjDBBoRKWbMOU}ahG=0+H}{%+h;>?7?+@kL(*$SoKWbbrelSQ-TvYr+0_vVpUs2`&ui3b>4(>wK^Gu?nycj|i zUHOsRzQf}DR?2|9gF?!`mM_Bm`0s#c_}nLLWaD3ah6-idXmmE}EpR{nST1iRk2-Xj z7AT9KSXB_!s;J9toS^bwB zh$i!t+%`ioKqCRPv%!`oM&1XZ2*ULoCW#P9{X5XYnx2;tH1LQY-6DcZm zjb^Kx`)tkuTfBapSWl2eFJ>frzG4O{WRtGr-*0_$>2JQRh)?UP&>podWU^WMVDj9O zv+C`q7N_SLDWms-$dT-Z@(f*TizhhRf_ptG(%Se!SaXJ*0vLdXbaSRkJP@0d z2r|Ipfri`LYK>c^lN(E14_6BQiF)SuQ;hzy%OuNF{b^}qy!ryA>65Mx&L_z~2f+#p zFPAk0kgp(=@0A#w#XFU9yC0f5<#Qh(UUWaKnUF@#ei)BI0Z9&g#rB3H5s-c*q2$;R z1zqK`9onK#i>l3Y4F(2kfXs~qCqlxqexH6NP( zs!ioI@4$`zen4$!D#%n~Vp+C$a<;%s8I2!ZQGlUUs@DqTpxT+Zp7g~&JfO;4uDz%v z+aN1m!&X!#MQ}X$_sR%MiSH%)QFzJ1@bDR3a6(AU&npnZ?m*Wfderod$9Gic6Xkc; zNM+TPE{BQV^!#p$KBi(+RC*%Er^U%tg z#E^S#<#+p5XOut|t_tvikl{vkAOZ9x3D>ica+dfU7mrdfVKVR$mh{3O3K$!CAdxBMMty-z+P{bYnfNWB?y<9R`&;iX6UV&`$hmvo~a9%R0I z^R%+8XeOpC+}hyQSWU_orw7uOe`2e86FqEnfz29mPGuwfAMyLx*>%QY7-m2+tS8|cZ@DjKKN>E~qc(xG{>vmcjw%jFSOKs)pla-Xpkb~49dG^0! z*)gqwERS2HDF39NAsf7!)zvrceJ;97>9wfpH0ft1PhDg6-tx{>TSoi-rG0jmC=4s% zu4B@7sVY1DS1G5$zFoHLDp-~VAtk?H&;a7dn^B9Y)VQF()_ualZ6~u*F}SnR zDYN;pn#(V(n!R}0dS$aFP~ zR#RuSPAKYU51GAZ8}92AtJhk#m5VB&e>?Sx;bWxfu6Ny+t)kPIVBZhdJf-5>FbD2$ ztKV+@s|hOoUg5qH&`qfXs|Wl$rqT`B)~|C08!Q#Q6pf>|lkcDF@crA-LPs-?98&M( zAFO9K?+@AVRwoy3Zaj&pe|BH;v}fqjbhSn_t8w;s{zXytXvRvn3mte{>r>WJ4g6(q z#w=z=Mj&XeS`hB(@mSX%1W%Oty~ojLw;3}Icu`W_Z|#p zR_uHL!IF-f24|UK28H1N*pN#Mv@{0=e0Sbeb-i?CVSk#|*4bECzAQ|L=a!C`GzCRN z)bZXN;SSH=@2g{EkRenB4W`Q9F$APm6v!4AoT0L@6Pl2GyJGHnFVvnbWGg>CQKbuy zVDXlFN;}SC16fsB=%&*n_;Wk2){VedpvXAChc$)Smdw_@!m7*RIE^WLwogN2sSzg>ja;yJoiqyI+qsm2G$WrQakpq^h`Wa3CU!ieyCrS}ffAxdALZ zl5L807D7kL(uQhXGp>}kv;Tzi+8%4>NOsCLb?*%)nuzh}t zcfXi*k>5g99Gd+6acp2tNYy{-=0 z;)zHP>hN|zZm=A?A$(G(%=UHs&Kiq>Ab-}{n@mU?LHSXC>@NC_(_EYMP1>=sve{L8 zM9*dWSGse@@DonMq-R`+v|bAGZ|hNWQ-(PH+vV_W>!`3UK6d91Y>rH=SCoojQe_o8 z=L0PdigyBZ`1ABEcK*eZ@gb_BHh3{KA)IfYT(mfD`SCNH5kpnC}0|Rt*>mNiTb1^Y>z;8I=j3Rue50w>7NTPc;Vvb^}z5UZufLjt> zvGVE_mP}3$~kq5$AIPrs!sG@;i#l5ytM_CGJl>)pPt-+E7tY%?J8TeOKbDf4&wV3i)3l zRhRKZQkiR(sjUUudVzroMZ}7f=E(5g<>q2${4#OrzR+z2I`r{)K9HP#S=iBnRpjt% zkEZkfqsD0pai_hwxmr)ivfyI|%161nzs7J!R?pcV5$7-y>t`)FCh%wV%I3*t#F#+& z6FqFjvYwz`eG$cEGd>wHU>1k}RuHB0BmHASpJVea>Qh^5-8byZ`3kl^|$g!5Wg>loMyPlWc`Cct1L+@`4#{3Jx@JjPziq z^OSR9e%cr6gd)PpXucMa>$NHqi=kgnDz*{_AunVA8Gj(cCwkP(?Ba$E{nTTuEIL58 zqTzl*jBeL&5a9lemA>|D`ng(;vHRGuvGL+vuP}lrAn!iN5;SdHm$JcMmr_=k8g! z`T70*VnF%38S6Y!b?cCBBPWc3J}jI;=j5s{Ppko!YbVa&kGI3xsL=Kb@n7^^(NnO+ zuj8*KE8q4{O6>6g65W%}9G963ZmpC&c>3SNtEX7Tx4WlW%AeHl{>rCpvUeyR?)E3; zp7zl#K!$C_%B`e&Qf2+Fk*WcJfnNk9MwcGsECn=G`*1Rq|1;@xMTsTrS4~PEi zSq75)tWfSIO{3J+j1Aj|U!mgu|V9B&A+yUr}rN&$dIlCXhE;sl%6puvsLdks^HLd(c>} z^}#~R@ug<}#l0;)r;*AA7Xo3+^Uhv;3M*UuiZe1FOkK0x{z7+0!(HWih+>58^G$xz zKtd>^&AUOL=a1Xv+PfVF0$&m*j$}^kB}h%~zu0enWWIK)6_UM6^$Mt*{ep?~!XDxn zJgp16QXC%&N6qd|9{En3xTC(YtK$eo6%+V=ZQ1>HDC8>;Tvgp z4P+?<{!^|OmCcdcbk=`_cX1?FF4*tc6IHy71lT4B&|aQDUZQ~?*P~8Sc*r-sS`jTn zfz|Xn}r2^AN1;sbz!;Pl1@&hMk`pBUDW#B!OBA)2@SL7=7`&W^ohV6im!zMH%|UhA zNXmgKEXh*YHkyVLckAM@mtaU>D^Foqy)mK7FxX#OI>-1@sh+7uxy4qSdh6WBzNp$? zQR@*=?t?ltw5Ps(z_si7-l@C8-i?1}2exyg{$bBfRS69@uSN2eW;KU>e8a5hq(`LO z=5wl`RIMH!7uMM#Z%A3M0%6OP{a(u>qfV+UYFadwK!`&MyA`8)`A3SFtZbjb$J@7Zy#Ca0q;D1Ec_Sukavp*9&pA|9Q? zxp5^MgN(Fi|G6AYUT$SZj(-&ZS3vqa_3{2HeputS7fOjilIK9}#SWvQCpO z->nn=WAeOoq(cJ7RLDsjMr%bBr99tg`pjx-C*{wF+L~7^9PlHW@{0-a%9-81Ob(O~ zPVKyYFK(m(>6C@;rH#*jk9}xxOY|pl7+&LJU-c`J&#CTbD>H;X@(#619pbxO7elV) zA#dNFDHaXc;dpWw@^|#SZt58$(p&b62F^`y^<6YjNWB8adFElJAHdR|Wtr=@r)LCO z470KL7 zSCPcdel}Mgl3Ul1v(Co1D-V3H$a*|S2MW@Y4>vG=Ulb)F?HXvtKWL2(v}Sy+hiaTP z&C~0b;z&4rYF}!-tAyp1*CYR&eEdBA*2LE8t@qnn8~9J6*mbwZ1B&xw^;X+9*e65R z+s@7$2(Z0dU$s7#ib0h`GO)>ud}I=Gmt0|p{f*< zv$m(I{2AYur)Me_UM5iXe5eTfl;~^#uqh3Myg0?mChC6JVf6EBPe?J|Z~k)wQ3oT-(~9#z z7Dax{4H-LM285lFhx!q&KZF7K%!2lGtGE;bT#W`Z9RPnh%8yqXX<9wm0eWQxK-=%3 zP?}9qhwZ^f9M>)7cu`<@A1Q%sct*G(2*k)ofr>xGU+ek)(YGY0F7RUHSv=ULFmW;h z{bewJjuZ!3R{|2%-N+%bHG8cuWnVyp>UuPA1xoi(%8WZ!8X|pdW7l+b|8Sm)d3KsA z^QxupO?MloQrFnzh=}E}$4^ND_2`>Hqm-7XPoGwc$G5PH=!R|1A2P6uh+Jg;CfYss z#=bv4#U#D-yK;DP?8A_&Nz{`4#_N|9X$4UUG8tH{6cc{6t29-Xlb@TN`eEdYaH&Fw zFaKMv9hK^ChI6A|o~FdcN8~lH)D~Oo?Jup(V2Eu=1|feo1Ge?3gP*tRH7iC1`#(Fhrc&Gdvm%Zi8}cd?49D#3OO&{4fR$ zQbHkZkA>)!E7I|MNC{o*>?$n?2#p0wJe~DZj>~)dhq0@g0qXmP5s;{5V#s6B271TBitqWyR4q>~t(bDqQV@=(iW3xEMLBH$;zSg!^84Velbgr}CO8_U=y3DeUe zy(8jpEn@eC-~DZyk+Rm`>^BPj8MU6$VLcw?CmKQYP|IvNo+6>nWj~tlwfvzwc1YC< z`?hrXsd&`Oq3;CPhERXb5oEXQ6A_sFF@g7j97F#WRp*CPH0-z3xb5pu@AtW>hy^?+ z&t8QHN$kL){d0m2F^jr!&~fRBkW)UomxK@h`|TG(9KhoEacBXM50Ph)%EWLDx=OEP0Qfm8BFXGeOs=eVY7WxFHE>B8UU#rU!0Q34 zK-=}>1~=!}^9~kG{u2v%euTMjp9=~(2xhkx^$XFQZ5dWSrP)3Tl(G?ZKJfMxuOHUa zMIPb9S6u;rZv2fbWHg?^(6xPh>YdVaEkJu*+nTS(_sJ@E)3vEtA8 zYx4e~yku^5Bcz#E-_#!D;gT_Y;IEX)$l*izQXuUUI;EPzgjYYEyuc7qWY63AwFb2s z#PXN_S=on3hM2s+qrxO5$qSFg*%hkT- zeyJ91cGvtby0`7AO|c3tkoZH=Ztb8vmfXF%S{YuhYg2#o*nPy@pN|Rm`f7jizg=P; zH8v;Yy*iavk^_gBTvq_<4L{-tAf!5<0ecx8SKDZUXQw%N>pmL;u3SNq5uFksDV)}& zxp_M2Y34^5_Tftot~!dZy}iE9q@Iq6c+n1ixpk+xa6Do>?ZVbA&(sia8(sJRuxcAt z(62_&)`5aA-LhwKEcZiu-EI%aLF@UhFi zU)*wg#wYn>a#&)HjQjOrc9T1z3WbUMm)XkP#tUXo9OE(eFAyk^xkNQ;={w!`)2!Tn z+kV@J7c{(FJa6=Ml)+He=GMgQ>3J}|k&aTAb1zGiMAE1P3+P~%_>={6D5|MUU)>@I z+<0x|fC&RqO^>DJiwIvJ&;u?AT#*6Yx*ZeZ@KcQabP;&tT+!|RZ}O=&w@Dc*+88he zCYjdpf@6}TdMugrhldF?Xw;=11y{j%R=PrWCd3v&YfBS?hE%0SFPxO5L!SPX3q=Cq z<*=owK=|rkiBC3$1{Fc2`Gpl5Lz7;^edSsxU7b7M?f2UQ1@rv^Yj>{mT~9zCCLen( zAwSg79Q-8>^b%gM*`Mn1>3K=XLVT@uic@>c=*wn4WO_J5w(c<_&F>h;p<$>`Ptm%k$ zh=B}}1!0fcutP6dIA}=MPvY{U9ZK+uy%zg#gC^n+`6`BZ42}^o28v*Cgk4soy^H#B z#T$)h_NV%_Tq2?oIgzt18}|`Y&Tf_Hgj3)%I>P&7y{{%fOkpn&MXTklp;KeWw7wyW zk=Rg=CVCa}DLlHy z5fs~S83Qnx*aJM*k1hI9zhRMJ)+8g{AL@-c32aM7;3`>d5cF09a@1wo{Z1Ph2J_vD zJRy%Ey*HuT2jS$ZDzym_SvoJz6nx}$;6 zRgfhnFsilsi=a0Oxk07jRZ&?5yn9f)9)J@nyC1Pc?M826S%X|;KcR^BDV#|-r%3ARk=eKT?IPfWcVN+__0y!{R8Hh z{MZ-ZDPE8AXYcrfxuE%%N}+tL9G%zc8Y;{&IE>jXw;!c;-4{b<*(9M`7XpgdO1#PS z0q-zmo0#B8YNf)7tG_--M861o8#OcVUGB8HP3(=eiIA^sZv}!H)9Bi!mR=amD) zDG&Je`M0fX6Kgt-AnZzOGPj8Ktus7(&=fI_K}EzHdGIkJTd+O2)c5`qj~K~&)@h;5 z4u=1dWX2nOL}NaNE$w5zw(nS76_x1VJtt0MU`JM$OlI#6oM#*{1)J3D3tyofeH~Cm zxvj0*3;YC*7+l+Zr$!MW`JjS|5$8XvNIJ@6B9FaD!0G&fxj4AX95?Z!u1UR|fp8)E zgG5UVM0orKg#!_3CS*<=j%1wD5yMwcTN3KjF@SS?X?1wnl3$y(nr`SMLtJ@;((-Y0 z*llfZJ(PsH(%c+|d*RhwXKRZxwQV zWW~+%gUVu3g2^MJ7L%`TT7;KFgN69kR6NJC2Oi#`ED2;qy_)b(VrrnD|Je)fiZ&_@ zvGg2#c*j@g-}WnZ!WN4(xB;mg{w{v7Y|ShS{^0N-^ix~Z+o)0%r0DVB6e=5!Myf8C zfmH|L-(2@m_-xt%u3joR<>;&gR!@|(Yqdv+_vwRWo@x!cx@;}2<0)P`1pi!vEZg&Y2c5Xi8h0m>lec(p^NNM?W&J4r0Ae2 zhRXAp{=rAfzP4v;jpjA|>78bVQ)WFE42tee-Yy0vx`)IJdb2cf_TG@VIQ*Nwj!I*( z*+Z5A=bLo*pM*g@9Dy=VXnj2Oz1(yihU{;r8Jvq(@(rjwZ<2e3PUqIRcT@eyt zmr(>fG|s<|=qGT%RWo$89Kpinz1no4x3R-TN!EidW2u7SN(TRNE$ixO=e9w0IP!e$z3DaT+#!?CKP^5rCD{Yl zt&JD6hNbr_3|bHMLwdi-JZGmg+=mgi8#)0G|Aq5asH0m|K3IfpI0S;sU+%LzP~@ruXln}0iQn*X>Y>o;nw z1UaujNGU`9d?|f)$;l6Gy1+xIe~^w56vF006@!9^;04qM&8Z=V*d?kzgG~n0nd2D- z>}5RY*4?BkEO?QP{O<^Q{){9vkM3@#nkk?-*DVE-Ri^C)-p7r>+B}0vTrr^k^|XP{ zF&JN2kPS%ht*g$;^n@_=)IF>ZKPR#rZ5PPlQUGHA>q{g5$=t|z^8PHJ9$f>te7_t@g%Js604k6>tE30yAMlf{{!a=58 z^o$|e@-z`82Rhxbry*C~soUSclRNnALsRCG zRU=s^MaT|4+yk^~yeW&D5SB?Ao_~ft3I4&g&TwSK`a#nZy-Pbb=km&iJP&*S8omgW ze#ic;Rr;i2t1&lL>1;Ef@ji89S|f^G=}Z-NwOR8R$EaAI?v(q1WG~<;7Cl~lCx{HZyw@!6+$D51AoSu&@1jqk8ep?v!<(bJNCoYiX#Cp^QkXL(%?=5&C z8@jd!pmkQ~uEs|ch?wgUf1Nmn(lvKSA{z1L(a>ILL_NS?T)m#f_@4+l&JRcjj3G*N zz!Jhj2U4`@_oUAIXNVN1vGnL=b&q}`PIpCyPp9MEc%QtRMqs`5HvJ?i_2FG*f$CDCxN-% z>jzY&Ohm4eSLSn0|A^ao)ns3E&^f3fvMofve7I!DGb-lK%(0Zsb_?n>yYN`#mydkT zO=c3$BomcCQLn7Do|-cXo(Q8#)=|!!hmHY~3}r9>zCE`BSnZPI4gC57 zqGzK^@u_8l>*6Qdr>J*GCk>}kNb+Z07Z`$62)A*^~>WX;n1OKNcPvTlwWUf(qex%2l{%7*V;(JP=M9{gQV>0)X z>=gx7+`r^nUa(!bA%;nOXJd1=MMlsr>Bw(-4tEEMc|-I)oV4`GqFfV0X4%A?IxP2> zbVY8Hz=FJh$wTUJ*M4)9EDz6J$L6RDKb?m4R@i>$g?C(FC!VHG1}B%UzVD}AFA*vT zbJ}M+f<%3$`E)x0nJaT1xlQwh2JLCyr&+!GkU%q=cQ+gBJr# z(1R~wIBdKG!5{w_#6XWx{fGXR^X*e~8Bm1`+DI;tnD%ne)yyN|vRhjk*?G-iCYjk=fz3c!FhUO5;3+ji#6@`D()FFY=`Wj6U-*`!FIpH(Smb`}{d!yFkmslSoTVB-1 zzoB4s9^+?4FK}d-KJ7ZG0>ghMrrN|3JT9Vbuf@7E6o6a+buZlG=hlBHf-p`r_hIn^ z%H1t4b|nN$qmEU0LtMRcV_Q(48ARe!X;8C19q_DP|2iO=AF#`8VVR{QXyDhpG6W#Mdk2Lo0CE8R%hN2-tFqjeR;7vraS}{SeY~HsO5J4?sqx z#q_fqvv2LpEUq*+Hu){KM8A0(%YdSuS|cKc=eVl*G=6AZc!sgL@RPVk{EIe25x(|P zagdg34t+OHo`aw_*%~P3crql^8o+J z!0<(=PN>QGE7&0N!GjFovL?x(rYajvkeoW*jgIL0B?`d9y|U?ES#=(UlL7>8_t~XO zCSjx!zc-@nV>hd5;edrq7h_F$7cxq0vUnH|SclVNoZ8P@?elFLl$p|j9LT1{D2eBV z4Ci1a=2{XH#abcG5eNSZoGWl-x3V^3Aba55WKl`lDT&T`4l}Z=;?gK4hW>ggltGcl z#J`Wax{Ra}hUC9c1t>H3gbt%?e_13^`<2(cG&ygW;Gb?ysj#!3Lwpix%XgB5Bp`)> zxC}QONdXOh?*@4}q0_QS1D_a@UIBX0*vtQX`I+w@O5Oba1x5&q>aOBi9fJi=u+X|A zP_4Ua06BT2&{Tu0E@jHBb=#GZJ4Mix zZ|BKMP6f(AY~r9o5nt|dMEw+_1ZQDaEWPxU9W+b7y$!(h&}zlXo+P(VDDYAz_--#f zc9#P0$dMKLr%|MT1WKQyB~8aXj1Y1(6T&?!qVZFAjhl{%aMhZS+Qpv zxO-e@kJyLYnyIn<@Zj*b3B6eta`=XWEC=lXzvn@;UneyTS<}Gju{^pIA(x7SU;qH@ zPYWPhv7$$O*ufx;Nt1``9;yT7zdAmjo@{(5^_|{=$9saKG#F;okd0_rwpMG~b~w#3 znj6&6terNlycxWI0K;BzqNsrWzxhYWnDmAuY?Jf`?Es>UYH7bKWL>XAH<0b}u%-}O z%5%lhzbCKh`!M6=j{oh->}IUM3_beXS#u{e>`j9E#d9%~-`5z1nTu|#$SmM_hq+WO zXXGF->AGDTM7`}77n!Kq59;<_^i5v6_;~o<>ig>j;JQsGH;F}wyk3{sXZH=eUx4l` za7OTfO(m%Av%V-F$%I1tR**K0=K7WI6YFiN+kT{t0&t$$1a zt&7kMp8r*fvnP45f-oSSGP6;w9Z-3O#GWxukA|~8eMQ63f8ZyIvu7Ig%j>xMt1jZE zZp6bn8Nce%P#sU%BuR=VfLkLTP>VPMg|{}Kj2Tt&uZ zHc4gs#Fs9TyI~nQaU-+$7!I`;@M5ypNEdfjQaI#y;spS*DeTP$yUVULczJj%t#54; zBf_pv4=*sOAbT(^vmM;E9VZPl5Z%R9DJy;+-H~d(g8H%xNsptuB zmEWtiwtNY~V!!OJ6{f50X;K-0#Y-Ed;5)e!Rm|b=a6WbGu5Swir#B9?AkRU>%b`MS z-NEuhYe38Tz}oS~gADja!MK}M#`NB&P(RvLTd%@Q|Jl&l;IFO3jm?2v&3vgZ62M;n zgF6DE0xFVYe|@El{+ypH*JYrV_wOG89%up%2W<4U&N_xI&T34y)pRMjY}LJT}Q3W_{~s2 z4(`vQx(IQa;GIJ$=7B)&3F@iNjoihYvqwX$>;L^}57(kfvE$J8IlH=KImzM;7$^w_RdSBW48NHw%l2X8KT$EWKEU31PqsT|3LDFrRYHWMW-LWX6he`)%f9b3_cy=4VD7!Ix%Yg|bDrmU2flMGdaOtYDU}EM zn@&HBFc1aQMjwP9fp1R#5sWNEV^blkQ7Q@7uKd;I*IsmR3Y}kY%rWxDNqZ0n|u;QvxS2Pks`Z_xd^ge>b>^Jht=tO@^X`dyw2={B^^vb``Xd z+{9P;xN1^%>G2(3>n8VN8+kHLmDaft3!3=t*MqJq3QeNhVFF(Kg3vl`ioDlA~oUwnz)s%3UM5&{OPTqU_@gQq!vx1v;irm{P%c55TE9QHdxu?Ok&d;yU z6n;ziv9)KL^l72yiSds&?y9d|#EkSd_L+=`O_#T$s$$b0q-&bx)@UqL`Img->3;C%6*1&B9;z>&; zB}2_mpvF&@cIUy2Y#$D&7%P7e1)!vxKzaTwBM{!}VNPV0;0wZ9T%GpVgKGatQ!7A0 zzdf_w&ByZ0pvoP(MF|;>QtuZRJm{Rlzy5-QF7zXkFS_WJxCj0OK6d@F?-*}h5$>(j zWhRSZF7eo)Qy2u(jlsK1aW)Y5zIafH23(%VtCH)LstaQca#q!q$DeF>6#L+b&m+5% zUQfw@Y3SbF#@G|eE%E)=CubCLpyN49!$quKBiV?_bl~)yTARCOY65`5S25 zn~k7=aB|IwqR2H@EO`gmjZ(R@E(H?9#g)4xKMq!=N{_#>g}a}>QI&v?7aNK!Y6~u`T^H+RLXE}4rk=4lQRnN*i)*g#Hx>Ur_#c66b z`w*^_z-VDXe>R;gPyxK$l%5vTuolfKR{-+b4mVf#P6z8!N$J&E%4Cq04iTF z_KJWDhL+rFj|;fX&?(8WqR7AB$qSw^fK1<--pa0)MVc;#5W~~Ca`H+c%Xd$Uer3Bn z7gf*gvc8}wAV0TKE7@so!_Ukyxyqg&E^rdxe}--MtmP%QpDf{fj&y+EnH(Ih{lrV3 zKD0wI3gvf85TrT$9#n7y6Rc|Ky`YDcl%MSvDLupb_w5^yULPi`an`p0NgH*@@3s(J zjP2wlFN1Wny#Vv>TDHhRT7RGRuNP}Up$``#G7}O1a-&g*yc2M$HZH( z7B`IU8!VW(;UqI>#T)gC2r-Yn#w+}r@m^W?P3%zdiJo}BDGN)|{+5)WAa*6qokLsn z+abfZGtvzI!bhR6*@76%NaGf?Vp1-@76A>moL=Ue?62jYf*T^VFJUY6AN;v4zyQQ= zbAhxQ90nYzYp=n+j&}_>@V#aiM#Hbr)q(8wU?99#M-Q@py&Fkrp-Mx{NAW`I{I=cV z1I8PQ5|FOs$?yw$JX}Vq}^H291CuAb46*0RBHin zDatq|2#_&;E+A8WzYYq1=nudLEeJl0&Pu7((v1}9J6%s3+H%2;#3utjU@QHq2^ZD( zvJ29E%Lmc|E(1exm3rS-kPU&BPbjT^^QNL=d-AhMCO0EAY?eD`x0v@8CDP4w>pkbo zI%DgKcsi$Uviu?VS63-5xl3?g+#fC-g1b}fNYQ5~s(eQy?L+%sawB1q9 zd6_#Szv6R4P0oPF&}&3CoT$w=u*Zm;Y`>opcnIt@A1Vxn2!4OM5^Mx0q_{)D?UkcQ zuVATiv4MK&Mq5Sk4-U-h%98c3ymA9Ya32>+C0C=5SRwk&g^Gm`TNtvfCoz zKh_lvK`*0wB-&6EF)SlQ9`W+oK;VGnm2JBo3`GuJ-a+edz&CS)-6FdGZIl!bZX~>) zDpnPalm!!^^T%Yc+`CZVW3>vA<7NAoS)-qe3YxvT1J$lZ_G(7?1(}<-8DYL%1#MKX z&-mlArOAVlKaenv*6-H!tP{t0ktjgg*r?JQ&03AMDea29qMr!J$8?`WK6_>uD7I>1 zp5Dyj(E{X_dO7#dJgwoa7!+Cfy1{Hts2CAP?*$ovVZv#9qHTlOQwXXfSk^hFB(7L(7b&f~EibwQJ2RAJVg<49TGdzQ0v$W)Vn(`OYkmhPJ$wG$uEFc7B5V%7MIY8xM%yUE3ydFKIuWcDFXH}i&sefFW>NcZ z+sjIuYp{fe5m(;4r3RFleO5YAGcC^w>izh%s6XlHPNW4edW8S^bLSj*ugAySJPg|7 zql1sId>{BLWBoA1OvD*gG(`;Vo~5@&eLHRJ4e`N$+Cf^$>oSb#I_>#(y8u!SN(_Yj)$du8<|DM@s?kDlbgX_;p(#}FAIC!U~|Z)80af&;f(dBI50 z53c`1PFzB?L}8)NG|qlWa2-2{;Bn6K`JDE#}#fKz}h5rBN(;$57wA6`cJ zOJ3yVYpw|;V9MOQt3o#TxTN(T!7Ui<#bugdI@3qka$oz#?Q)Qy2X1PiOG%y-n7{-a}6OjMOcy zWZxG>tt}s&o7#i1k6R~4aT+PN7r&O5AGhCGGg`-KBkbD?ZV8qiY?|Hdwjke!Bcih1 zwM7R6hH0k$QRzA94JBk$K*&3kM9?y6C1i=p@exQ)a z9{IvU6j7&%eY6`g>v+r7LX}EWaD?Zq-HNknD6$M-)>iUk;T-_9g!)}dbKIQlp>9g| z|Ea){rG6aI4g`ML&q1*gJT2FI2GcGy!+n1{dkoD;Uje%J9f{|oVvf?>|JJb{;tN-d zt|g+o&Q2K$LYtfI+~-v7S0d*tE-*3qC=Ef32Gv_;Um9SV-49B@*tfP!soR1 z1EL^v6j@%0N(8oN!sZ@`z! zPrJR!JqfSYc0hPuiYM|BhL^XVb+%lE7WIynJentALkOK&Y}i`b$o0XC>thoSW|^eo zDv+}#>n2|5p`Z52o!*N`?4B{M zNLji?ADHS`&VN?bqAb0b=T=z++KNKgMNS{tvfQlhAAw2D&1Z|qB<@SK7ND%Q%Q^KQL6FCq zz-Nqo!4_4BiCiFyf_J#IArb~;A-1eQKKq1I&VX^`5}W#DH+)4#-hmNgT`cft zsc@?O@?6kxiwFoXDJ?-bfB|ugC^#Uxd@LD*7W1=y2S;ESuHJu569Z8XuP)q?@OXbG z5(HNplM^7azNGWLi<$V)7Zl6`1$XLt_dq-M#MGarm}d0!ZXnp;(0(TGP3?C5d-Va+ zg^&?pgj^2moSORY1&hnk!gNAo0uQbNt$FGyoo+{)(@XhHM&zZvh;1NVDOf7{y=M zFW=)q$jl`mjDMVlSyv?6nJFZO!@`f{ViI1{WAzxo8mi#es5)w#<0e*0wrKyLuH7bf zPmqABGL;s%$_;*=aM|6@)whzppPey#oxz%V*l;c9UOi;7rLaM7M0k?*?h8{6?Pc7X z!|dE&l2yyc2fuw$$v(|G8SbjWIZdSOxdL8{$25_&UnBg+;F>6CTdPN=KWD$VcY~yY%}+IsUyjiLPSIRqO|B z(Y&kG4=zbFIzyV+M?aNJo1WW3&cov3!rlLnGiZV&dEW?9g($H}1PqhkzGbWRYa+;= zeaS!!v)nuzHWG#uRL}LG634O+g92XY?v%O(FC0CD<3lpyeGVvmbdPNAzKa)ZIa<~Mz=Y;Ye19M&vcOrM@=;+YS_&MPiu^_> zwPB6^R$XyC2ne{XP4ZX5>lW0DT+th=>$)xw8D1p50l(#=!7!R}>4?Dt>~=8gZVQiu zgh0Hat%MbEHheVMhYM_9`->>UWBxcr^g+N$_}gB+arwgZd~$aOLMo;;IV~(w!>ri? z1oF*H@Ce5YCM_cbuvCKrM20wg5PSxvdnQqLq{!hDaYZkE#_XI0O|+CDLJU_a(4Pzdttzdp|v-X%@YyE zQYyaRYB*oH58VJzkDwU*tB@t3{T|sn@T~(~TEnKrlvsJ%SrRqjY=6iqS}jj5_U7pz zg{^6MBKhDDwT8aI86q*Dhewj9S|Qr}UB>E-G8xK!vhzzJxEEm$WbTN(K9_hOHR7*3 zh&)56D=W*?F~mR>EX-Px71)xmthh?86U?_{-Uz(`-dRqhZxFc#mj=lFWxg+g@#JAg zPFe{`4I%r4h5@phjiJ%UGK>)}kssu8_X$~p>)}WE?IotyHi2M1IEQjq0`r~GPDX&( z52!CKjrnC`d%RIYuF`?KwbTcs+)w*Z0ZAU z+F7T++6&0C{#UAQ-#$Qb6u+O{P*SiDTK~d&*X$wp}RN#guV+BG)!{gZBE3TGGDX6wJ_>=XZoqPE|cb(_JYh%eYB#;S7Dgz zKn9X=T(>4t##!n{wLL{$a4l9iGkW3tk=g9tskzM(5ooW_<|7*)$Ysgf!<*|IFh+Ihu!2WZTnN8&dKq{QuR=Nl)0t~ zR>zmTBUpccf84t0og@T8)T=A^%c^*GKaL+lQXw-WCT}=zi5k9|d+V|0m?S=6v>hby6I#FZkLYguYMWSmCDtZ9iz@#5vk=1pUjwYLY9OEq5T(e=Y8bFzpJRh2Mr?Bl zkzL(|DG4ea2^}9?wA%NF@j(u%&d;c~FXvXK8DL)KvC(;xKUVNCK#S~xjQ5lK6ds&~ z_r+qgwY6?;qTav)f@sk=CVJFCJ2S;6U$or_w@$}#9^3rFbRdSf9u7TMa4|W9oVmu^ z-%Z70oWF@W|$d^d)Fkd~LN=$a_)+{;;F2Q=1{`k*^(Yp#+@j=Ts!xt3L)O zd7$mV#4l;a)3rcXdf7=Hiwr>?5okjPsOI_~S zoT9V0m&lwYse~V1n?%m-t6^GQiKGXAErr_=J2H?HE>~+?x8v4MQba;mpqdrKL16FFzaLcV=-= zm}qjeb8htXNkGNf8@f(TkX|<<#awA(P}+o(SH1Ji$*jK~$I!pJ!1s8LQJsC|uRi6B zguQB=BqaM@fXc(Z>1tSfR^=-yIDsf=U$E9{uA{&WN(U(?Z5;5gx(TA3QCN11i6b)l zh5`lgaG5gGmoF2^-~_JZOBVvbmkA<95<`5Vf_1}JO?n5)45md>&3=3jiFlgWv!3|@k7ATQX5ECgKK z*{kWb18TnmpJqG0x-Sj4uH9+!ay<)rv`pddJe;5vnB^P536VLILn9i1`2kv>zZ<2` z!bEHP;BhG;6HP!h$93~A_b_I=nt*uNf4H8LAHr73eW+;EH$LOTi3LK&x`mSV9fM4< zV)V#JwPPL`z%Hkc9D;k0-U$C4aPMD9E!Ay2YJR(I4hu%SF6fX}J}1n*-gR=PHxn~V z0@2rb=R}ehEoQpn4UK^AzVE-YZQ0jRQPz$kPhz^xg1= zn6E6-eCr?uqAv=4Lz}y($2drO(-=okEH26u0Q)FR?iwM ziW0{{DY=rwggSEC3#@gZhUt@Xzp!)CpR{bZ9LtaAoqjHFDABv zBPybQNMejI)lWXa@9$xEVw;S`|FeFvZ_7?$Azn)&1~_iEEXCWDA5^0GQ5oJ9Pm2$Kh{K|5sqa67G9;RCPJD}$ z5OEU4H_W;$ZeQ4VvA;Y({TWQku{;6$zyH_17c{p(;OY)QK1h2wTaD8l?E*Jk#8tL+ zkFP+4qC;xr%NZ8cw7PNB0dW)L90rs0KJ*1gi`ZTgpli(xerK2yVRaEB=B3X}bZy0P zGzu0Aue;kYg0@$GJV6EkP79woSw=YcL~Ge(L0&Ca5whC8$R=toB1} zp1}`202*p{3whuBK_vi}Ngf~YRlq2yvF86(L5k=bhfeHKM%g^!TfR&FC8;Y&n~V8l zQ2~f^%oPuu{m^d)+8!Uwc2eT(t+sF+&eMdvG>X@l;1>=$p=xbrO3s;UcT|Xn(7DQS zZ{(2zU^2#XS8+KwM1Qf>WgxoZ_Gc*yyC)5tLy-2aDr9IGQU9uhVC@9r=?9`I0z*iW zr$@!t?SYF3g)0pO-vJ&QZ6>U1|6aN@TAP?jx^rYS&IovWC*?|!5SfAEJz#Eal`G10 zD~43iWG`b75OfJc1f~9_aAycSy%R2jGP!g#_&?4|Yw`XbHHU?&k67UDCr5=z&d1vw zS6eRN?1K|3F+7rE#FcTurRzG%)Z z-4>A8de8Qe3)>#q#O&eCZ0&ZA(a-h4BJ%GRpxMf3tmW*5qqN09LhgKm6o_Ltusuch zORqS|hvyxdE*k#lwQg##d9#uIu)t~Q>IgEaP;|^oi&3$cXnJGKrW0$Ez~Rae_zXY* zFE6l1_Z$K?ZO|@YGleGb_p}9U8sV6(a=hHV|Z>R4puwE*=-4s!d+90VeVUX0aW_~@`{Sy*M!31 zAiKXeh8Dw3G@-!G{Ys3=m$1|u^IEq5v#5NQW-ke1RGB6r>D$wzG=zbqaxNNML(c}w zy~TQU>k8ZqffD)Ka~ae4qYZE=1pIwCu>*#gG`lN$yrQ-Kq+D&7BKgVFEO!jA;Y=PH zEK--D0`0I|ZB*%7awV7kDGuus{woQHgi?R;!{|G2;m5m(^(Pge%%!EGCX%NqC>4Gn zgvz}QB~_q@8+;DHb9Ak>GK_AM49m0FmX{XMsnn{)f7@~1dFyDOx!wN6FDDFq_R7KC z)sNFSj#UL!o}f>oBpp=^W_iIX@;7HVp@eRUSZ{l3PA%vd4s0Hf7Bm5ah=M0|QUgQ2 z3s^%)_~K{wKyStpl68m=48`c6MnXRJ)dyCw4P_x}{#}!TegB1G$V!5M*1)MRp4*G~ z5`eNE&;07MAYot}q>ZuPUz$S>Jy7vZu`pZf>V6ZOkTgdOEcD#$gj&!6!q8Klq-}mO z?}ejh;Hga;ytY8&Qk}6BXOliep)ekmMtSxJZ@p-GXYgv`{_Y~|#!)T4Ygt!5V4|^s z>l!!LeR*)xa*t*`yX_@-ZduTGow?Y-N!Y$-RaN-S|2mBAC23=UJL()@jM5$;`FDVdZrTetw56K?MHB>C^UK z6v0^_?d}P|*A@55#V$}z$=-`sEHRBJOnYV_cy+S)&pj~x+T*H!^dZW_tvNux74;J% zh#0o;m9Y|L1~|E{w#9*u|1P#7Ewy2X88s{ChbZSyZ@kyZHVUk$v09yTc{`bkwDa2B zMc%G873g4xxZB4Nm%KN^FsBN(1^#)Laq1-F`+aGKXqJ!w2f3Ad_3GbQYoLg_Z@ZEe zb|@2-IfW)qZ9#qa&ki3T@79%rJ1Vs9O*f6hP8 z5{L!)ib581L3eh7Z1gV0Jpur=>ygO%?C0@h=sNM3)NfpEskIWJBsV}`zzZBRusLvu& zu>K$DLIz{QzN*a>x%e*+zV%yM%V6cMuAIB0o$d)LtMs-%yUukz{Q@*A}U*#Fo22~ZfnqxRjcULD`ZqUNO_`&|l? z@xx~a;-SLfDVY~&3K#K~dm7@unc70n9m$?^ztq4PNo};a8X?aGl8VJ4?{|F*l`&5(o3w9jlB@zu0i? z>UD!BqIZi0>}IURLi11m+YdgPn6jieHiRDjSFKvwI!Zi1m2jpmLBVQ~)DXY??A@97 z=cjMKp24DKzR+2QTZm%}?Ya=ZJpiMr85a^rAHOaREFM1}mGJLkpY38$eFrionK*(7 zwBTsUc^fsW*`}5#!E8q)PTT8+wbUIB@*xl0h8Vvfiixo7FWhv%J+h&dJ2(PO8b%u8 z;A$QsXh)$ibxmDsbHs945|n;bb`jw7=t7jIC`8tLLR0in{2ln{ z^l8Dw{nE6PTfs7Tq}HLfinl zm1x7i)X~NX+mAkXn&@f%&N-MXNm8;``H&zq`G%06x6SzLSTt52(Y8W-r-g(NSC2dE zo_TuBwe%8S6hSa4qIkP$U~Uk{Oszv?<_3SZZTzeyz%Q2Gn}JBw{PTEr_0m8i^$fdB zjT0vqNI-W!-%6T!KSKZj%yAH1^GT-`&j@1S+5S|wMp3vN^uM=uNkCfl>%Y*T%SHT@ z!Z_z$+GrPbqMK+g{6HIaKs_6TOL!u!j|y zMIz4x^Lw&=B_1YLJM>%d+It~)1&MFViuB2xCW9262bG?+YeVTD$`kgmsL&wY73nr? z?ieuHXxR&K>@_uRr~U?S@QfjSLaw(#>@U{xy5U;)RiTpVDTQoAHv`3;Ks^a1C;|Gc zudk)gQUl@$DCc(CK;OpAd@$gOFjN~)pfo~^SveKV@L>VyO;_Z|ainTL{F=AkM2=Vf zZy$ffYwefFN?3H5Gtf3ypj=@cR090eMTjQAtO4>lwT@!}^W0dJGhuzcaWqCiVrkFz zjj=C|y(1Ox)Yd`K7dE|@wdW4;-ByE`vm(pV!0{*2WVDUUE-n^yC>(t(H)Cy#tkl2W ztlU)rJ|pz-ve1gJn+m&LuRmTZCcGN9^Gv_=j>P+RW~oe+lfy833~jRGUEUm4ouOTDJfie3ZDd+Kj|C>p#9975>>7_fP5Z z%x$duWWAMZywmIcE5(l7an!D#Z<@tB8N!M*$_}x!9aoR+*fD*0hlMD&__dNsruN%B zakucSrK~xVr7_Mz{H3jCGTrxM`l0UZqvNJ?8zJBQUDm#{xic9FUuAh3AI{a-1b0c2 zy`rDX8HM66GV*SJ@{wrgOYA7h^Hq^{au1WD{bZ8_Y2y0cGKqPlSok!8jN}waDCj6{ zH_f;G_YjFnSkignyzi^r!n=)v^O;BjiE5I-N0x*>+Q`}?O*eJh5yQEdUKuK$h6k$$ zMKMgQ_z@!J@$|xeS%y!y7?g;o#F^LcB?q3Gcj&_%_>J_9p8?GLNP~l*OX#R>Bw%pF zO1Slu)bdwXAM{ZE*h45~j=!zRA_u^;r{6H7(Ay(sM25yVDzqj*m+bo0-4@r3Pn;Pn z#3=ElxjNUFm{18d0n@f#YY%f%x(GzgrAWrDx5-GWB|B&f)~dcVi<}ouG~b|V)>H3e z1TyR9+fYH&c#AEnC{^Oy_CMs)VSdACBPX`bBgB7grT45K`eu9{*?vN(y8)6 zlp#vK%u{Lzog1fL#r^1L`S}L}2>NuHU*1-j(7pG-aSRxPIE7uDa|lbY7os>|u7mcE zH+K51Xyvy~vhU_Ge(#2_N0}{(^$+Zf(v3%nerWhdJ2r6VbS$)Zwww&dFFh;U}=u*T;?T!rJue z(+b$Bl2D>)p#iW0KKYQrNj%8l^5Eda-4ctrnD}mjvpkB)Z7W2MgKKu*a;2U3ZT^%& zRY%bbRH5(z$`@HkA@%GUe&Xlp*}~_Bkmw`?8m(K9ApKVa9Se~ulscDN=EG*^Zt0%U6wQm04PpGP43QnYm`gd#P%3!GyrB;G? z9x#0YcO`o2sSw%nl2<0`a!lJ*TMUIjc};)P%S`?QrwB}x&E=zSCeODIeWAo*e;-gT zymEO}M_s`zT;F{n(m_KyYOlPk6h!_BVsBrP_Dhn6(xJp^gvzc&%yyrA^}tgfB~-BgG^84Flw{$6?(Y!DJS`x^M#BOQ6K2w)&(wu zQl~ed${;qbAq_`XpAfth$$PxxAG@Q#U+TzTkx%tQ#OksAgDJ>)%sj`77NghjYfe~{ zVO5H&)!#=Qu1Q4htp8D;qiPtlT9?&jc_slic=PAbny-9|Kz$FIDA4mtM#VmRbM6Qn ztO-zH{yS9_G)~nOV`(l`nvYrC1CZ{~_Hm9w1Wz2v+5|MSgOdp|_=u;Vbd{I3PaL(7 z9(lF(T?q9<2q1k9l<;^W?kz|eq68;#8m`5)f#5Hwboa=Q1_2(+$M~LTWB41k=du(8 z?8H%mamNPs?GL(mZJ|ry*iC=og`GPiSp{t)xy)aIs3eGT@)QG6lIkh6s}! zwO{D}I))q>m)B8Z#VjgZ@kW&h^;_>|a4d5O-A!AkmSr}H%(VuI046(Ggi(7kiDPu2 zsxGY^{qVOEbiBez?yVGt7%%S_zUr1_&oy2pYoVmUtx8TrLqd%RahCeF*9K_#6T2;F zGxBwt%-`3~cwy~0F;70=w@_q2{}}G^`NN!Gb)LwGgAS^NA*Co#oTf z1YZXe#$DQ|JgAXHMe$zKKGlEaQEF5KAnfTK?=$qrk>SfJ)0rDWNUeX_Q{MKGG%OCn(c#y z+w4)dN>1}p8X(SM-%dF|R9x$P0K)es;=vz+qYnoYhGNQmLY1rRr!2h?r0tLtyvI=n z_;HQ%k6;KBK8$)Okl1|yL_>xj*J7g~V^M}zLim?;>Dy=)C{4wUCQTP3zNx5ki{0!*Z-rQ^2Z zXAfJb9a-9Cfigr44(Eo@5b==<4EYF*r(>x%<`n<2ZczqF17KUw<& z1U-oQr+P62!;{utkA7iNxS-*)dVJNrI@rsx)AEJYg{f~KcYeEhBA4xD!jKAb2eU?tlAl!QA@6r_ENHy?Q%5a_qx z`IU7G_-_Y|7o>fT)x8u+r^9cdcg4!@#&g6Nt;xxg9v8iQj^R7muBmrrUMyURy>fNd z>0x~4SN-{=X~Hei?#-rQDhJd`bwHjrI*n{?tDKZ>VwqN7nQ5k_<1<{V6(A zNC;`OV55kBC28#z6@xWJg2t&yA@pP5Yr`tQ3p;(hs6UM++vK_PfXkc{-P?tPG(BL` zg@PZW7&q{sMoQzYBhWq47)h4Ze`g@+2)(qA?#m(@(_=uftMDY8%da~v&8c}N%hBR9 zloI;4Tf(Se>;Jtg=qY;^WS0uaw%p9tVDoc0yJvE+&|s6!v8Nl33ahxsE-rfbRK5+z zHAL)5|@-@l!6+d`CRD3a)xkO9^W_sfXB_yq`KEl5d}?jg3H` zeX|gxTU1uMzLimaw!aXuL>b*fqOrsXUi*Ek<5wXpIeq^V;C$l67x(Sbdkdb$58tnC zzAaIE`d`(TwfyPx_YP6UkF_G%-E_zw_kFxJbKrGl>7pVvU``IC6Hex zI1vRi9Mp6laV6}G;sx_(wFTHyGMxJ(1i}k)`hnCo2W23!8QJ0AG(M~2@!l+9gTX7^ zjTbmx|KuWE6KwpR)6-CP4?))6qR(dX2m>A-Q$_MNYR^rthpd5`Dw|o-0i@;8-?;QG z86{;c!ISo#=kq1xw`FJO{S6J#j}WI-ye47Y83 zyUJR@TzltqGM*=OjKQ)#lhBdP_3$X9UYzvSKxVcgtoI{*qs1#IM3w4(wOmiCJ!s|9X2=Ss)&hO=R}H`cbDUtPH!qke zk_0y*D!=cg~0)fV1u9U03MgoR;S=&Slp$-C#&f;X`^?(;>og!*&h~u zg$a=Q8a&9Uk0CBdO`boA0JkZNkik6aKd#{Ut?Z*Sz8H0lavvw@86YL}{GZZ7=t*d% zX_9o~oXgJn1%~-iF8Vo88g@oZm#6mDT!GBB7Jd0$$=_?QAA5idcd|4IYY7GPr$~Kk z09DK^?T=(svUS0@_$>SO4E@+s_K7(|o?L1P+jTgc8g^F9Hti#M{l2xR=- z0hNra=n@`a#J6t2*)cA7`PWX} z?-GY}1#Ak@x@(4q6HjnUn^dZj?yv8rE_^;uBs)b)0s6)H2!jmKl-G}^`FBa=bHGBo z*n^)o_T&Z3%7~U7^5OzNxa$l8G2eD=kGH5_j0=u4^D%&4ssY_TI5mycu=VrT=bwt_ zkhr*1-3@Am>DMpRcy=C|^6Q|Y*K`1dO%?5@mQwez3@b+&&?_MS4Exq&ARIAlz|+xi zoQJRGrQ0Z2qSY#ir?;;Aea?-kfk8{T%A*HaLj;bO*BrPN{k}rxRHs3-R2m@eVEm4O zoX*~X-ma;s%}4G+#daVQT>zXWoAwW0;U#E9h7^mut<2d0l4)!55%Uo-ose;l!1Fn$ zGvqSCQ}1}sP|_P2st%|N#{|yl%HGn^{|a_Wf77bpbz=!~MT6iiLTlAX2eo=<_0Lzi zN~sYpSwA__%47P$AXv_{`5iTt_5LkAlcf%LH)5zU+eiIUMV@Dxtb08x{LEgMsk-VW zJG|(*jNljUH&R~(;O@HEb(2^~D+&L`>pX#6YNv*=Z(uFUjX)Vf2pc)D(RJ7U0!tGe@NE&4Y3 zF7){VHDGbj(msl^UL$8^PK&{qKWXBY75>n!clnqRq!T5Q80j7Cc_DQfo#WebGU}gE zZixV>4?lGl@(2${p(3CEJQwx7?7GTU?44YY`F(liJSB6Bq`#sTiljbBo%352NJ5$+ z<7So+FY~+FTYih{I>(VSLhq6MwgKu|nBgFjh*+@_$hy_9piSrMibw7>YFOUEN`Iv=%yu0@cz z{o=`ea>6}{RYlSE%0`|-7^4(F84K7^l*7h7u!s4@`u3U>W|_UITMwReVoqCe38p9B zy{L!I6ZRXe@B9aa7xW9)MPy!i%%{4Cd<-#ogvv~C-P2khiOg3dh6K-BbKRsuAc@uV zk*;q*msYHBdlES-kbn%QZGEux5U_R67FeJLM_`~%w#W>!6h~b*`AN-0dcXsYU{>2f z%^TtPSqG4Ri}Hg`xiE9P>b?Q*1ueGSer9(8ciI`ueEq&7oH_Wp(qX@QZReB(wV#6> zrChw=7hTZr{L363d#Wnn-I{$s=${x#kh`H>}G z!#eGNao2?l%A>?MHwVrT)i7VU)+al^Rq3Ut*z&iaH`mf@SfRgSdco6`t}E}`FI>8# zvE1o|;f;<+SRZEJ6b10(e?OaTj^qbim|S^(d|PwRW_KUy5nIC>Mf(-GM1P5&x0g>| zMpk;`o`$*p$Fjzd3G*$;)8(zwja2=Wv%VY84R#C0o}`B)@i?ZUg55BE_RmnXY21B? zxkpbRjr$x)I0(%R^sNsvbgp==-C%Z!LYJ;^>mO++80^*Uh2B(rT7mo)lFma5DTW-= z?L&J*>C3oHXT#6Yr=!z&jW$N2*TQZI(SDg5`H7&;(LUYL*%ccJgX^f*-@nf(XpDZ0 zJbGh`DEdZoId(HH@{omjHsJ?tgd6sK=pww#?p*6#i;l0jY-X|#-8J{=h`&8cL5opb z_Ui~YJRd%c9KsL{wf&X$1qW;vr2b|9j_=)O&d%1I{>EPXZ6f&@8AB=#AVJ!`_T+Kj zGZL_;p(|Q`H;CRC_zl`icL0hI`CgX78gx9lt@9pdLIh$BC-1yS{BqIr0=69Nx|zAqd{Aw{dne93M*rSi#$5t z)^TWqbWG5+OCQ}XMy~y064a%uAmJ!vQo;pN0-=c?6=Q9ZT>?6HKZLM{U*H*>;B4tC z0nTcBxw_#w;HRryp8w)LMG5Ml7UN^}VviAop=F_T2sVH;WbcOsjnDQsR4bUQq#Ax) z9eJi)h}6}4RtIIxd(adP9v`qCA-$`{l0q6kcEO5~irJb++= z;L**6J566f;&G++8fEyx460Kb-8qR#J2;r42;}G2h=PJo?eCz%yM&3m&Bskge~cZ3 zHo}8FX#DNQyi?z@LzmV(Ll!4&Qh8XaT+Hayw0L~3}^x*?P4MN|ZX}mGh#8D*u9dglC#1 z*5XG+T{^&eNMKBmol{3AffEkwz5_9h&uBz?F;dUcF?{bjcU-?=Me8^6aK1VzG zp8jRmD;rFGDYM`%*PFffC28l$PiL;awJy~mTY@JOw{`FL#owW%D7$mm zs3(9f8Y61L{j8q*$&IOKaiZ9wusGK<)mWm0yScwo-lx}Hj$#KcN43{}B{EWe?5@oPIbc^!D-5`+sq;9QVAx*)08#6ku)i-uN37x&!u$ z{9|^0zVj<6{Sd`fJtoSS_-1exTu}dLVd39;fqcRS|3dc1PniU2%%BS@KwK-FpYIgV zNf6WT>8+8u56^CY>UH&{3AStYgFf%bt+*XJiI>cIQEu|OcUh;?MC2!0PLm1w-^(t{ zH4T$E?q?B@w3efKA6e?08z%k1w;UUz<=y*@5H2CU#$y8kQsEIf>{xbo3+r@k;6Vts zge{!f9{i{m3P2(PmK@mNJF6^?489=g*!g_NWLBFP?4~wn01eL7o;uPis*$(QeNG7e z=xT=Q$sG864L%xe2Wb7Awd98km^gA>DAAVY^-P<=1;Hys5CXzGFQ8v^cb~$QR_!*+ zP?#>BjH$7qJsR0@5gy=eZeT9v3m)DJn;658k;?^o=*pL*wU#-Pwiqk2fJZHnX82oi z*MAI7ACPafl#$6wE6bb9qF=3GY|}GvM$m1KzjucaL-Jnu=3vCipeO%!gWmrrI`2TJ z|38kuZ#sKquQM_dQ50p|A)`rFqH>Z5Un6BCcOP3(G_6F43b_!8Uz zS?N8+8^D;|d|$8G&zHy6o+n0Q6cl&W439Sm6SqdU|K7=0#*Ofiwk6nnzLaGChcKQxNZs z`2NrN_3rX=c*oJ9XTmXh==NG31t+wwWbTUR)>v)~ zMwtoio=WMezcICbHM7&4Yyv%ss>Smc{`!SrTvec+Y>a}tS~HWruqC&;ve8=6x7o^( zvlY8umyd3RU0)G-z`kpiQO}N+VKv%kmFOMt%V$rbb=328Y>zWjez6BUvb|ZMd7Emx zCdC(Cv$U#<*49Y^$+ss-3v$;P%XIdcOw^dY=avnw^!xIE68);q6|}H_{>6lQIYNN@{bGmglMB&U_G+d z(JcgnL4pNbeNq8C=En|cWober9oKduUn4mr@RdH(t;B94Kgp)yPp@I62gAF~cBhCp zfE`^y3cp86KDe{RMf#Kw!x&YDO}qZ#x%=-ec7#q*jaUu>^NH-NESw2v@-?RW<0mgr zc*+MZ@?GI{(*zGcR1g#|eTOQ23m?(hL3swg=|Pi8@A!hGVKp<%k&D1Jsx)X1K8FYB zyx}Edw{Iz;QzoNYU~+n6kQ?7#aQd~Pa18=uAoz_suV%}Ce7)=g#FEu?_1NySg8wmc z323BE9z5k!2NeD!dacX#6+Pg;vM$j>QnO+|h2cG|j{Apk-LrblQYoU0!tZo^C)sS+W5Au) z;)$P3h?lLnba(<~j-O z`^zQHVn7+7z#VVz!9Xx3md^0!7{iCno>IGa#WRPt8Y=tLh#)I|24fI(Qj8~6PR#tro~s8556WK(zWejySg)JNw_U!U zW|9cK8)wOx&4a@JMQrpd*lg<=GI=GSAg5I0-jN^ueUCg5I)*xdw^>JgNz>DXJzJ9~ zPKicEc{qEf`_M-(+4>}`=IF7#s&7s%Ob=oQSSm=+2V_GIUQ}R>X8}k876zy$6j9jE zzphr2WIW+;YwL>&7yt5B|16I001!E(1>nvj6oeYA_V{4!W9|#ao5-;buR8x{Vyo~; zvK6MtlfDB8`*V#tdv_!4OY!TdyP!hc?ycDRv zH}$xXRGylxxy2oGrqqLmWW6bRc{}olkiZQc!gsmCo_O@e5Ly?+lqd;py}_I>H;art z2$Qtde|E^rs^Q?FRmRIVL)Bxf8AiSXTuV@dG|OJ1^{tIoUrvPE+`J_#_itp>LW9H~ zy((1>`%-~r@88JXO^c|Mr*lBO_yK8BU>`Iad%;!aw0|~lCW{(8}oL=jap~H ztH-_y!!*$2g=cdvN;A4vVDJYygE!o}Zmwsf)GXTgeg(4%&oZONuxClDtf{Gv(D)Il zR~NS2nmJ1TSw>AaLR~=2&{C~1g|p_F%c^Kw?cdE=E~M#yCths+BVFF3G0lphx$!`H z!t4#~1Keiv6649d6fb+@+uM0kjnf5ivADX0%ZEq$g_s5YLr4y$azaOFn!84Vum?a@ zhxXMdzJUho%+z#ld(`Cw>ftk@72%buj}lthdQ&?F-4w~E(*P)ZH=fXYe#F^_Kecd~eQ-=hqpY~Q^qBVTPHCpjREy9RU$Z4y!Y zS=OAzINft5v>^79+vD9LNrv_aD0PT$qx?3agBI@s-3trwa{>Q`g zrw{>`*eFX`U%|CBUp{G; zbVvz2-aJhJCC-< z$%cJPPXYmbyTN*58-)Sx{CF7N-?0`f1_?g=5AhxDCl2)b1i=>!?ai+Xr~+3E;rCQ1 zJeytZBP|2~;;Xw(Y}Lg&{%bl`v29XF(Mq&r=Ij3U@5e9~2^5qfA@c*kgFHYRJEV@e zaUdjZ?XlmCt9%ZC}a=v;dN@t9$@DC z8UcU%33UDO(5yxP^|YS3%G0_>nDzhj+;&3rCzbs7IGX}DZAi)lFZWv3+T-*g`= zJZ}8n5cH%)_s{E6N)$|w?Q&9OhMB#HTl*pSj=ZAJ#m3@Xjt{1&$w2<2q=%nIP5z&p ztu*5u(6(*(@6cvER^$M1wyGI;{Kl3*Ob0L;CJTdz=NK& zjMv~!?|IeT-P$UNN(~PQ+8q8>W*n~f$Mvc>-YoSmtYKFoDNib~IOZSzD!i8p&ha(9 zrv1WFj7Ya{jt_zpYwYG<&75<0w_W4#gd1)q6@ zTozCuNT*0Sur7y>&&62O;M9LCFeK79B&?Fu7sXT<5|X#VA72obw3W45Nf}@_O}gf? z0=_KE%PJ#jmRq5JaN86^di}4_)hnBN@;V8ihlNv9Wmc*_3>*AGxhM7^h>P$+e43p# z&ElVG9jZbgqowf{Pr4Nh$X9sC-w;4l=Li;*7^l-tl@trmX7>&dP`4gp1U!J7vO2{A z4zsZ>zY?KfBQ22A#o8{_7ea~_NPxccW~mvDsM~SkI^$Ischdc2o>8~kfy|ck*S?=F zd^(ZVk_chA!ilf0+3O?k-e$TPU&hvXZ}@K=vDt#*S?bxGG}1_tq!l)Gt9RE5{e3Cx zW8~735}n1zQcD*&W4$BDDxb@#t-sghh`<6~s6r-LFHpjxBJKlxIU$;IKTFq~-GPZX=to|=D zR~+*|I+Yrky`zUHa{O6*PT;DvEx{ar44xDk@aK8XfLn(m?%H9UJ{#c`lc!&W)4b?> z)os{7=utYkMW}~}4?OP~V<+$Ee0icJaTrZhDI9*)C&dS6D zT>as{@?=KyM#30#`zdW*8~I_6%emJ$tIeCqSS_2hAO>k`YTr7`aLtHuU6XYx$Z{XG zuDa(~@dK9d{N#V{f50o}*u7QT_8Tgdj51^PrzfQAitNxeSnkU|`S4R`yQrf`(`XFz z7e;RYpaav2WQ6&EyrYm|sikl(5o5cRQUN>1vj(7mw}+yuyp_f>R$<#8d>60j6E-*Y ztFal?&2bOp{4k;ko9p)oLNID%jQfr4+S5RBIrcNmQ&M=$NMUT`1GY{Nu}HO>lF{;h z+N|)fv~;aQ*SYeu65y!o@5|M`?Q|Ur5Ldu2=Ht3ItIr${nbd9jtfbu48l{(P$Z|O( zO3!&7K8tc->8x;laC^df;L?XRIJ)=i33+zSHn}uM6C*FzhC7V>#f}Rdy&btJc@r0! zL_7at$;Q5@XhDBu?rwlE)JG3}QDzL*h;{Bn>%KIu1E)Z8z?9Zo=W0eDeLC7$f665X z9UzWZh5}`EkRa0%eCzUG*GavwYD9)p(Fq)wkvmImiW36_=T@Yy_Tp~Gv_D2fXS=pu z^P)t^-Fvww;<$cYXkK-K^H?6q{L3WWU&V~wpbclr`#(K#-b z^pi|od$+pHuyY2KZfg-s(HMn8#Cv`W-}1fsMLP*a$Jsw57A)2Te^NfiarRxU3;jA5 zB)3ben-*WP8jmXsZfj{bY?6F)*$B3N(ky%R$^w=jp~?9`l8c1DKj6#!p@BzLWW1Q{<4R_~_RC&osA>CO^Vfg z?7{b(tKh|IS`jlVRE@F;w&(5wCje!Jusl`-O`Lo!eFb3z#C6jb=M4eP4*2f|xT$~w zQBcB5-UGTTUxM6^MDKXsFTj>0MeX=Vel3Ydh7}$I94&}TmQD;)6XH7SJAJw6@DR5T zEyd0F?%}3{h>O@<{KvtdFYr6_Vje=d^T>aXbjBFNDh`NucQV|;&F1n8-k!mss&^<9 z5;SQhD=8A}5T<(Um2Zm9vZf`LSV%)s+tnqvUkwHu2zBynEUx*R z8XNPh_+Pc(c;<}LWdYu|C%|z><>}?YZF_c_EAtt7ha>QU!~tFi7JC@%j2+=t;uy89 z|MMkoP6EK7>E<+I-_;zb^ancjU40M1P2zLMpFk6X;V7c2jt)m8@QarE83~#tZ%+B1 ze<^by9Eia`@ywu-BTAslkxjBZ9PFABc{;s|z{?l)&Y|`3l=ze;Fho3-51hc*YQeeTpgNlnNPt zo-xF)0*(#xseS-xzhZ6y)hw6\VyKE(sbCH4xy^MF(yCFm!QFekL6|Fbx(pytL+ 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 TGK9|&00000NkvXXu0mjfIGrd$ literal 0 HcmV?d00001 diff --git a/source/img/error-page.png b/source/img/error-page.png new file mode 100644 index 0000000000000000000000000000000000000000..9d1de96575394474a91f6b05b7e935245be3869c GIT binary patch literal 35850 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 literal 0 HcmV?d00001 diff --git a/source/img/favicon.ico b/source/img/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..56d07f553d8146f3ab6e7105dd1c53ba51082363 GIT binary patch literal 15406 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

    K7CuJ&%|?G?@*^}@_>b;isra+!+)w(A{tmG( z*|O{s6E}#Ct-Y2#6Stv{SjXd$UPDvHEt~~>3rEs!gKhVp5Gr4)^vDd$`1|!cZCz{C zVx4Id8|q5ENMk|Cl}3rbJmXE`nt~$cn9|P|{wMlu%vWOkZ|Y$;=~2KcAI& z#P-RB#x@hbbHguUwlao2N!O&G>Sn*!x&1)|tJb0VH+KzH&Vbu-j4L73G-w1o&eAtWEDvqf9 z#y+3eobmEDGBScl$=e#A82+D+fY?#4FSCyY3m8w5|CQT5GPPCmJ6#TLcqJDQDd_CYH)y{+FR z)^Y8Al(EEpjBmPm&G266c4xoFSTqsGi7$}8qWC}z+SCF4f;b6?S(@vz8I`4;xwx;fvQ zir!8$55iGbM*NI3 z#dk?AEcnO7pkemlv)FTAM1MKVxN&tnM%Q_p%{Nmv>Xo0uKe5d{v>nb(zkqA|J?NKN zP+srwABVSQm&$q@=TW^!I19vkMfTepGtsi*`=sF&%4TAAP39(iS-;WVzU;I1WmjLN zv%u{EC#o_((bz|LZ{?5%zp2eyHRaZ57z6#BV+|jpt+|@>uO{YnrhkhwA7yc#No=Lq z*ZlHrb1mi%6W3%OX@vG_GwhtH5#Q@czeweN4Bv=f za)S`(U4*w%6BK?+&C04_S#?jDACuVDv*9OWcps-h-p}7U>N&3^v3nAa|Mt&k&`p2h z+4ev5U*C-Hx9+*>actg=GZb1=qWmOdw`dTWgf^+ohDv6T$3}j{?l>hT*)bVyRSOca z!`}tF*k3thUO$R9%8x(uF3Qut>ORQYS|eJ^x=dRO`UXd|PiSFIK5Gq;xmj=T0Dbl# z{TAoq7@N1%twJAd(GX{IG`<|?cmH<2TiAIPTg*66Y?I_ZeUW4O{|nKw_nGT0;oOZK z!~DIYlQZ|^b24u0v*4FQdYip{gBTk5OlM7H-gIR2&+MD@z+SpT=Pp9c)w-8|5A35S zzd%ksE{Ir$q;GDyg>|IPnQR+*u zRpqN3TWhz{rbsV&yv|yDH~lZ^ftg-_g&)msY$l5mQ%FsS>&*9B(ot^I~MZ)jT+THTJ!Po7)`NIZjx+{ z!EZ2+?>~;ALF&>H$%4>_}@GUuPnd79_ZT(}ugR|9(5!i;&^ z*wgFKI*i2P9U=BwIlo@LZ7%D3)3i)a zjq^8@52Y1AVL$mmw+?Nzu z$L<4TJ*C6&MrcqvXtU&hXk4rh%Un{$mboZSdl?58Jg)Qcx$_?8?DaF;ueVW~wF35< zLjAwAAp4A3Lr`8M_^o}EuZZ2^_r&;3Z)pq-u~=2}X5C{$gYr*!XdN>56Z>pr!hF}y zyl%~RNKZ@TL}i8VHrP#EVDxWdnK?IJOMa5i=;{3AY%ILYJD{;PB{N*_w_f8<+6Jr*;p5Ud0 U+d9i{91r@(-#<9;H*?^B0n>H*u>b%7 literal 0 HcmV?d00001 diff --git a/source/img/favicon.png b/source/img/favicon.png deleted file mode 100644 index 862ebe85838eb999f7c19e80c498ebf286110f7e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 323 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dy_5nU2u0Wcv`79p9)p$mx`$FuR zdwxr9SM7fM=imQFAAVZQy!QY9{}12)TyeDX02;wv666=mz?bQ;=D+fU_m`TaQ^daj zg;#jGIEGX(Zk>E|A%h|ht9beH|6%(N?0Ow@e}U&LO$Mh6ZyF2~C325VDg4BqUSi4? zFhNZ5ppjed9W8+~{LfREj%SqpX!)kK`S4UFT`%8rjY}5vs_I_L2%6wJp>*nJ#cNXy zE0%|~Oj*4k$xoiEHTU4mrrSc3@;%F2->mt0c-Qage|{}K6Tk7qo(T7+ZO3_o7Z$C3 vs$!dWYwkApgz^G~9mZ8}L!Y(F_x;!B{we0yHh)JS(9H~ { let headerContentWidth, $nav let mobileSidebarOpen = false const adjustMenu = init => { - const getAllWidth = ele => { - return Array.from(ele).reduce((width, i) => width + i.offsetWidth, 0) - } + const getAllWidth = ele => Array.from(ele).reduce((width, i) => width + i.offsetWidth, 0) if (init) { const blogInfoWidth = getAllWidth(document.querySelector('#blog-info > a').children) @@ -27,16 +25,13 @@ document.addEventListener('DOMContentLoaded', function () { // sidebar menus const sidebarFn = { open: () => { - btf.sidebarPaddingR() - document.body.style.overflow = 'hidden' + btf.overflowPaddingR.add() btf.animateIn(document.getElementById('menu-mask'), 'to_show 0.5s') document.getElementById('sidebar-menus').classList.add('open') mobileSidebarOpen = true }, close: () => { - const $body = document.body - $body.style.overflow = '' - $body.style.paddingRight = '' + btf.overflowPaddingR.remove() btf.animateOut(document.getElementById('menu-mask'), 'to_hide 0.5s') document.getElementById('sidebar-menus').classList.remove('open') mobileSidebarOpen = false @@ -72,7 +67,7 @@ document.addEventListener('DOMContentLoaded', function () { const isPrismjs = plugin === 'prismjs' const highlightShrinkClass = isHighlightShrink === true ? 'closed' : '' - const highlightShrinkEle = isHighlightShrink !== undefined ? '

    ' : '' + const highlightShrinkEle = isHighlightShrink !== undefined ? '' : '' const highlightCopyEle = highlightCopy ? '
    ' : '' const highlightMacStyleEle = '
    ' const highlightFullpageEle = highlightFullpage ? '' : '' @@ -111,9 +106,7 @@ document.addEventListener('DOMContentLoaded', function () { $buttonParent.classList.remove('copy-true') } - const highlightShrinkFn = ele => { - ele.classList.toggle('closed') - } + const highlightShrinkFn = ele => ele.classList.toggle('closed') const codeFullpage = (item, clickEle) => { const wrapEle = item.closest('figure.highlight') @@ -124,47 +117,44 @@ document.addEventListener('DOMContentLoaded', function () { clickEle.classList.toggle('fa-up-right-and-down-left-from-center', !isFullpage) } - const highlightToolsFn = function (e) { + const highlightToolsFn = e => { const $target = e.target.classList - if ($target.contains('expand')) highlightShrinkFn(this) - else if ($target.contains('copy-button')) highlightCopyFn(this, e.target) - else if ($target.contains('fullpage-button')) codeFullpage(this, e.target) - } - - const expandCode = function () { - this.classList.toggle('expand-done') - } - - // 获取隐藏状态下元素的真实高度 - const getActualHeight = function (item) { - let tmp = [] - let hidden = [] - function fix() { - - let current = item - while (current !== document.body && current != null) { - if (window.getComputedStyle(current).display === 'none') { - hidden.push(current) - } - current = current.parentNode + const currentElement = e.currentTarget + if ($target.contains('expand')) highlightShrinkFn(currentElement) + else if ($target.contains('copy-button')) highlightCopyFn(currentElement, e.target) + else if ($target.contains('fullpage-button')) codeFullpage(currentElement, e.target) + } + + const expandCode = e => e.currentTarget.classList.toggle('expand-done') + + // 獲取隱藏狀態下元素的真實高度 + const getActualHeight = item => { + const hiddenElements = new Map() + + const fix = () => { + let current = item + while (current !== document.body && current != null) { + if (window.getComputedStyle(current).display === 'none') { + hiddenElements.set(current, current.getAttribute('style') || '') } - let style = 'visibility: hidden !important; display: block !important; ' - - hidden.forEach(function (elem) { - var thisStyle = elem.getAttribute('style') || '' - tmp.push(thisStyle) - elem.setAttribute('style', thisStyle ? thisStyle + ';' + style : style) - }) - } - function restore() { - hidden.forEach((elem, idx) => { - let _tmp = tmp[idx] - if( _tmp === '' ) elem.removeAttribute('style') - else elem.setAttribute('style', _tmp) - }) + current = current.parentNode + } + + const style = 'visibility: hidden !important; display: block !important;' + hiddenElements.forEach((originalStyle, elem) => { + elem.setAttribute('style', originalStyle ? originalStyle + ';' + style : style) + }) + } + + const restore = () => { + hiddenElements.forEach((originalStyle, elem) => { + if (originalStyle === '') elem.removeAttribute('style') + else elem.setAttribute('style', originalStyle) + }) } + fix() - let height = item.offsetHeight + const height = item.offsetHeight restore() return height } @@ -236,7 +226,7 @@ document.addEventListener('DOMContentLoaded', function () { * justified-gallery 圖庫排版 */ - const fetchUrl = async (url) => { + const fetchUrl = async url => { const response = await fetch(url) return await response.json() } @@ -254,10 +244,6 @@ document.addEventListener('DOMContentLoaded', function () { // useRecycle: false }) - if (tabs) { - btf.addGlobalFn('igOfTabs', () => { ig.destroy() }, false, tabs) - } - const replaceDq = str => str.replace(/"/g, '"') // replace double quotes to " const getItems = (nextGroupKey, count) => { @@ -274,7 +260,7 @@ document.addEventListener('DOMContentLoaded', function () { const alt = item.alt ? `alt="${replaceDq(item.alt)}"` : '' const title = item.title ? `title="${replaceDq(item.title)}"` : '' - nextItems.push(`
    + nextItems.push(`
    `) } @@ -284,16 +270,14 @@ document.addEventListener('DOMContentLoaded', function () { const buttonText = GLOBAL_CONFIG.infinitegrid.buttonText const addButton = item => { const button = document.createElement('button') - button.textContent = buttonText + button.innerHTML = buttonText + '' - const buttonFn = e => { - e.target.removeEventListener('click', buttonFn) - e.target.remove() + button.addEventListener('click', e => { + e.target.closest('button').remove() btf.setLoading.add(item) appendItem(ig.getGroups().length + 1, 10) - } + }, { once: true }) - button.addEventListener('click', buttonFn) item.insertAdjacentElement('afterend', button) } @@ -302,8 +286,22 @@ document.addEventListener('DOMContentLoaded', function () { } const maxGroupKey = Math.ceil(dataLength / 10) + let isLayoutHidden = false const completeFn = e => { + if (tabs) { + const parentNode = item.parentNode + + if (isLayoutHidden) { + parentNode.style.visibility = 'visible' + } + + if (item.offsetHeight === 0) { + parentNode.style.visibility = 'hidden' + isLayoutHidden = true + } + } + const { updated, isResize, mounted } = e if (!updated.length || !mounted.length || isResize) { return @@ -313,7 +311,7 @@ document.addEventListener('DOMContentLoaded', function () { if (ig.getGroups().length === maxGroupKey) { btf.setLoading.remove(item) - ig.off('renderComplete', completeFn) + !tabs && ig.off('renderComplete', completeFn) return } @@ -342,29 +340,30 @@ document.addEventListener('DOMContentLoaded', function () { ig.renderItems() } - btf.addGlobalFn('justifiedGallery', () => { ig.destroy() }) + btf.addGlobalFn('pjaxSendOnce', () => { ig.destroy() }) } const addJustifiedGallery = async (ele, tabs = false) => { const init = async () => { for (const item of ele) { - if (btf.isHidden(item)) continue - if (tabs && item.classList.contains('loaded')) { - item.querySelector('.gallery-items').innerHTML = '' - const button = item.querySelector(':scope > button') - const loadingContainer = item.querySelector(':scope > .loading-container') - button && button.remove() - loadingContainer && loadingContainer.remove() - } + if (btf.isHidden(item) || item.classList.contains('loaded')) continue const isButton = item.getAttribute('data-button') === 'true' - const text = item.firstElementChild.textContent + const children = item.firstElementChild + const text = children.textContent + children.textContent = '' item.classList.add('loaded') - const content = item.getAttribute('data-type') === 'url' ? await fetchUrl(text) : JSON.parse(text) - runJustifiedGallery(item.lastElementChild, content, isButton, tabs) + try { + const content = item.getAttribute('data-type') === 'url' ? await fetchUrl(text) : JSON.parse(text) + runJustifiedGallery(children, content, isButton, tabs) + } catch (e) { + console.error('Gallery data parsing failed:', e) + } } } + if (!ele.length) return + if (typeof InfiniteGrid === 'function') { init() } else { @@ -399,12 +398,18 @@ document.addEventListener('DOMContentLoaded', function () { const isChatBtn = typeof chatBtn !== 'undefined' const isShowPercent = GLOBAL_CONFIG.percent.rightside - // 當滾動條小于 56 的時候 - if (document.body.scrollHeight <= innerHeight) { - $rightside.classList.add('rightside-show') - return + // 檢查文檔高度是否小於視窗高度 + const checkDocumentHeight = () => { + if (document.body.scrollHeight <= innerHeight) { + $rightside.classList.add('rightside-show') + return true + } + return false } + // 如果文檔高度小於視窗高度,直接返回 + if (checkDocumentHeight()) return + // find the scroll direction const scrollDirection = currentTop => { const result = currentTop > initTop // true is down & false is up @@ -444,10 +449,7 @@ document.addEventListener('DOMContentLoaded', function () { } isShowPercent && rightsideScrollPercent(currentTop) - - if (document.body.scrollHeight <= innerHeight) { - $rightside.classList.add('rightside-show') - } + checkDocumentHeight() }, 300) btf.addEventListenerPjax(window, 'scroll', scrollTask, { passive: true }) @@ -487,13 +489,15 @@ document.addEventListener('DOMContentLoaded', function () { btf.addEventListenerPjax($cardToc, 'click', tocItemClickFn) autoScrollToc = item => { - const activePosition = item.getBoundingClientRect().top - const sidebarScrollTop = $cardToc.scrollTop - if (activePosition > (document.documentElement.clientHeight - 100)) { - $cardToc.scrollTop = sidebarScrollTop + 150 - } - if (activePosition < 100) { - $cardToc.scrollTop = sidebarScrollTop - 150 + const sidebarHeight = $cardToc.clientHeight + const itemOffsetTop = item.offsetTop + const itemHeight = item.clientHeight + const scrollTop = $cardToc.scrollTop + const offset = itemOffsetTop - scrollTop + const middlePosition = (sidebarHeight - itemHeight) / 2 + + if (offset !== middlePosition) { + $cardToc.scrollTop = scrollTop + (offset - middlePosition) } } @@ -504,21 +508,23 @@ document.addEventListener('DOMContentLoaded', function () { // find head position & add active class const $articleList = $article.querySelectorAll('h1,h2,h3,h4,h5,h6') let detectItem = '' + const findHeadPosition = top => { - if (top === 0) { - return false - } + if (top === 0) return false let currentId = '' let currentIndex = '' - $articleList.forEach((ele, index) => { + for (let i = 0; i < $articleList.length; i++) { + const ele = $articleList[i] if (top > btf.getEleTop(ele) - 80) { const id = ele.id currentId = id ? '#' + encodeURI(id) : '' - currentIndex = index + currentIndex = i + } else { + break } - }) + } if (detectItem === currentIndex) return @@ -527,24 +533,21 @@ document.addEventListener('DOMContentLoaded', function () { detectItem = currentIndex if (isToc) { - $cardToc.querySelectorAll('.active').forEach(i => { i.classList.remove('active') }) - - if (currentId === '') { - return - } - - const currentActive = $tocLink[currentIndex] - currentActive.classList.add('active') + $cardToc.querySelectorAll('.active').forEach(i => i.classList.remove('active')) - setTimeout(() => { - autoScrollToc(currentActive) - }, 0) + if (currentId) { + const currentActive = $tocLink[currentIndex] + currentActive.classList.add('active') - if (isExpand) return - let parent = currentActive.parentNode + setTimeout(() => autoScrollToc(currentActive), 0) - for (; !parent.matches('.toc'); parent = parent.parentNode) { - if (parent.matches('li')) parent.classList.add('active') + if (!isExpand) { + let parent = currentActive.parentNode + while (!parent.matches('.toc')) { + if (parent.matches('li')) parent.classList.add('active') + parent = parent.parentNode + } + } } } } @@ -630,7 +633,7 @@ document.addEventListener('DOMContentLoaded', function () { btf.saveToLocal.set('aside-status', saveStatus, 2) $htmlDom.toggle('hide-aside') }, - 'mobile-toc-button': function (p, item) { // Show mobile toc + 'mobile-toc-button': (p, item) => { // Show mobile toc const tocEle = document.getElementById('card-toc') tocEle.style.transition = 'transform 0.3s ease-in-out' @@ -655,10 +658,10 @@ document.addEventListener('DOMContentLoaded', function () { } } - document.getElementById('rightside').addEventListener('click', function (e) { + document.getElementById('rightside').addEventListener('click', e => { const $target = e.target.closest('[id]') if ($target && rightSideFn[$target.id]) { - rightSideFn[$target.id](this, $target) + rightSideFn[$target.id](e.currentTarget, $target) } }) @@ -673,15 +676,17 @@ document.addEventListener('DOMContentLoaded', function () { target.classList.toggle('hide') } - document.querySelector('#sidebar-menus .menus_items').addEventListener('click', handleClickOfSubMenu) + const menusItems = document.querySelector('#sidebar-menus .menus_items') + menusItems && menusItems.addEventListener('click', handleClickOfSubMenu) } /** * 手机端目录点击 */ const openMobileMenu = () => { - const handleClick = () => { sidebarFn.open() } - btf.addEventListenerPjax(document.getElementById('toggle-menu'), 'click', handleClick) + const toggleMenu = document.getElementById('toggle-menu') + if (!toggleMenu) return + btf.addEventListenerPjax(toggleMenu, 'click', () => { sidebarFn.open() }) } /** @@ -749,62 +754,45 @@ document.addEventListener('DOMContentLoaded', function () { const clickFnOfTagHide = () => { const hideButtons = document.querySelectorAll('#article-container .hide-button') if (!hideButtons.length) return - const handleClick = function (e) { - const $this = this - $this.classList.add('open') - const $fjGallery = $this.nextElementSibling.querySelectorAll('.gallery-container') - $fjGallery.length && addJustifiedGallery($fjGallery) - } - - hideButtons.forEach(item => { - item.addEventListener('click', handleClick, { once: true }) - }) + hideButtons.forEach(item => item.addEventListener('click', e => { + const currentTarget = e.currentTarget + currentTarget.classList.add('open') + addJustifiedGallery(currentTarget.nextElementSibling.querySelectorAll('.gallery-container')) + }, { once: true })) } const tabsFn = () => { - const navTabsElement = document.querySelectorAll('#article-container .tabs') - if (!navTabsElement.length) return - - const removeAndAddActiveClass = (elements, detect) => { - Array.from(elements).forEach(element => { - element.classList.remove('active') - if (element === detect || element.id === detect) { - element.classList.add('active') - } + const navTabsElements = document.querySelectorAll('#article-container .tabs') + if (!navTabsElements.length) return + + const setActiveClass = (elements, activeIndex) => { + elements.forEach((el, index) => { + el.classList.toggle('active', index === activeIndex) }) } - const addTabNavEventListener = (item, isJustifiedGallery) => { - const navClickHandler = function (e) { - const target = e.target.closest('button') - if (target.classList.contains('active')) return - removeAndAddActiveClass(this.children, target) - this.classList.remove('no-default') - const tabId = target.getAttribute('data-href') - const tabContent = this.nextElementSibling - removeAndAddActiveClass(tabContent.children, tabId) - if (isJustifiedGallery) { - btf.removeGlobalFnEvent('igOfTabs', this) - const justifiedGalleryItems = tabContent.querySelectorAll(`:scope > #${tabId} .gallery-container`) - justifiedGalleryItems.length && addJustifiedGallery(justifiedGalleryItems, this) - } - } - btf.addEventListenerPjax(item.firstElementChild, 'click', navClickHandler) + const handleNavClick = e => { + const target = e.target.closest('button') + if (!target || target.classList.contains('active')) return + + const navItems = [...e.currentTarget.children] + const tabContents = [...e.currentTarget.nextElementSibling.children] + const indexOfButton = navItems.indexOf(target) + setActiveClass(navItems, indexOfButton) + e.currentTarget.classList.remove('no-default') + setActiveClass(tabContents, indexOfButton) + addJustifiedGallery(tabContents[indexOfButton].querySelectorAll('.gallery-container'), true) } - const addTabToTopEventListener = item => { - const btnClickHandler = (e) => { - const target = e.target.closest('button') - if (!target) return - btf.scrollToDest(btf.getEleTop(item), 300) + const handleToTopClick = tabElement => e => { + if (e.target.closest('button')) { + btf.scrollToDest(btf.getEleTop(tabElement), 300) } - btf.addEventListenerPjax(item.lastElementChild, 'click', btnClickHandler) } - navTabsElement.forEach(item => { - const isJustifiedGallery = !!item.querySelectorAll('.gallery-container') - addTabNavEventListener(item, isJustifiedGallery) - addTabToTopEventListener(item) + navTabsElements.forEach(tabElement => { + btf.addEventListenerPjax(tabElement.firstElementChild, 'click', handleNavClick) + btf.addEventListenerPjax(tabElement.lastElementChild, 'click', handleToTopClick(tabElement)) }) } @@ -812,7 +800,7 @@ document.addEventListener('DOMContentLoaded', function () { const cardCategory = document.querySelector('#aside-cat-list.expandBtn') if (!cardCategory) return - const handleToggleBtn = (e) => { + const handleToggleBtn = e => { const target = e.target if (target.nodeName === 'I') { e.preventDefault() @@ -825,10 +813,10 @@ document.addEventListener('DOMContentLoaded', function () { const switchComments = () => { const switchBtn = document.getElementById('switch-btn') if (!switchBtn) return + let switchDone = false - const commentContainer = document.getElementById('post-comment') const handleSwitchBtn = () => { - commentContainer.classList.toggle('move') + document.getElementById('post-comment').classList.toggle('move') if (!switchDone && typeof loadOtherComment === 'function') { switchDone = true loadOtherComment() @@ -865,28 +853,45 @@ document.addEventListener('DOMContentLoaded', function () { }, 'lazyload') } - const relativeDate = function (selector) { + const relativeDate = selector => { selector.forEach(item => { - const timeVal = item.getAttribute('datetime') - item.textContent = btf.diffDate(timeVal, true) + item.textContent = btf.diffDate(item.getAttribute('datetime'), true) item.style.display = 'inline' }) } - const unRefreshFn = function () { + const justifiedIndexPostUI = () => { + const recentPostsElement = document.getElementById('recent-posts') + if (!(recentPostsElement && recentPostsElement.classList.contains('masonry'))) return + + const init = () => { + const masonryItem = new InfiniteGrid.MasonryInfiniteGrid('.recent-post-items', { + gap: { horizontal: 10, vertical: 20 }, + useTransform: true, + useResizeObserver: true + }) + masonryItem.renderItems() + btf.addGlobalFn('pjaxCompleteOnce', () => { masonryItem.destroy() }, 'removeJustifiedIndexPostUI') + } + + typeof InfiniteGrid === 'function' ? init() : btf.getScript(`${GLOBAL_CONFIG.infinitegrid.js}`).then(init) + } + + const unRefreshFn = () => { window.addEventListener('resize', () => { adjustMenu(false) mobileSidebarOpen && btf.isHidden(document.getElementById('toggle-menu')) && sidebarFn.close() }) - document.getElementById('menu-mask').addEventListener('click', e => { sidebarFn.close() }) + const menuMask = document.getElementById('menu-mask') + menuMask && menuMask.addEventListener('click', () => { sidebarFn.close() }) clickFnOfSubMenu() GLOBAL_CONFIG.islazyload && lazyloadImg() GLOBAL_CONFIG.copyright !== undefined && addCopyright() if (GLOBAL_CONFIG.autoDarkmode) { - window.matchMedia('(prefers-color-scheme: dark)').addListener(e => { + window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', e => { if (btf.saveToLocal.get('theme') !== undefined) return e.matches ? handleThemeChange('dark') : handleThemeChange('light') }) @@ -896,11 +901,7 @@ document.addEventListener('DOMContentLoaded', function () { const forPostFn = () => { addHighlightTool() addPhotoFigcaption() - - btf.removeGlobalFnEvent('justifiedGallery') - const galleryContainer = document.querySelectorAll('#article-container .gallery-container') - galleryContainer.length && addJustifiedGallery(galleryContainer) - + addJustifiedGallery(document.querySelectorAll('#article-container .gallery-container')) runLightbox() scrollFnToDo() addTableWrap() @@ -910,6 +911,7 @@ document.addEventListener('DOMContentLoaded', function () { const refreshFn = () => { initAdjust() + justifiedIndexPostUI() if (GLOBAL_CONFIG_SITE.isPost) { GLOBAL_CONFIG.noticeOutdate !== undefined && addPostOutdateNotice() diff --git a/source/js/search/algolia.js b/source/js/search/algolia.js index 9ce7b0e..814a00c 100644 --- a/source/js/search/algolia.js +++ b/source/js/search/algolia.js @@ -1,43 +1,51 @@ window.addEventListener('load', () => { + const { algolia } = GLOBAL_CONFIG + const { appId, apiKey, indexName, hitsPerPage = 5, languages } = algolia + + if (!appId || !apiKey || !indexName) { + return console.error('Algolia setting is invalid!') + } + const $searchMask = document.getElementById('search-mask') const $searchDialog = document.querySelector('#algolia-search .search-dialog') + const animateElements = show => { + const action = show ? 'animateIn' : 'animateOut' + const maskAnimation = show ? 'to_show 0.5s' : 'to_hide 0.5s' + const dialogAnimation = show ? 'titleScale 0.5s' : 'search_close .5s' + btf[action]($searchMask, maskAnimation) + btf[action]($searchDialog, dialogAnimation) + } + + const fixSafariHeight = () => { + if (window.innerWidth < 768) { + $searchDialog.style.setProperty('--search-height', `${window.innerHeight}px`) + } + } + const openSearch = () => { - const bodyStyle = document.body.style - bodyStyle.width = '100%' - bodyStyle.overflow = 'hidden' - btf.animateIn($searchMask, 'to_show 0.5s') - btf.animateIn($searchDialog, 'titleScale 0.5s') + btf.overflowPaddingR.add() + animateElements(true) setTimeout(() => { document.querySelector('#algolia-search .ais-SearchBox-input').focus() }, 100) - // shortcut: ESC - document.addEventListener('keydown', function f (event) { + const handleEscape = event => { if (event.code === 'Escape') { closeSearch() - document.removeEventListener('keydown', f) + document.removeEventListener('keydown', handleEscape) } - }) + } + document.addEventListener('keydown', handleEscape) fixSafariHeight() window.addEventListener('resize', fixSafariHeight) } const closeSearch = () => { - const bodyStyle = document.body.style - bodyStyle.width = '' - bodyStyle.overflow = '' - btf.animateOut($searchDialog, 'search_close .5s') - btf.animateOut($searchMask, 'to_hide 0.5s') + btf.overflowPaddingR.remove() + animateElements(false) window.removeEventListener('resize', fixSafariHeight) } - // fix safari - const fixSafariHeight = () => { - if (window.innerWidth < 768) { - $searchDialog.style.setProperty('--search-height', window.innerHeight + 'px') - } - } - const searchClickFn = () => { btf.addEventListenerPjax(document.querySelector('#search-button > .search'), 'click', openSearch) } @@ -47,11 +55,9 @@ window.addEventListener('load', () => { document.querySelector('#algolia-search .search-close-button').addEventListener('click', closeSearch) } - const cutContent = content => { - if (content === '') return '' - + const cutContent = (content) => { + if (!content) return '' const firstOccur = content.indexOf('') - let start = firstOccur - 30 let end = firstOccur + 120 let pre = '' @@ -70,108 +76,98 @@ window.addEventListener('load', () => { post = '...' } - const matchContent = pre + content.substring(start, end) + post - return matchContent + return `${pre}${content.substring(start, end)}${post}` } - const algolia = GLOBAL_CONFIG.algolia - const isAlgoliaValid = algolia.appId && algolia.apiKey && algolia.indexName - if (!isAlgoliaValid) { - return console.error('Algolia setting is invalid!') - } + const disableDiv = [ + document.getElementById('algolia-hits'), + document.getElementById('algolia-pagination'), + document.querySelector('#algolia-info .algolia-stats') + ] const search = instantsearch({ - indexName: algolia.indexName, - /* global algoliasearch */ - searchClient: algoliasearch(algolia.appId, algolia.apiKey), + indexName, + searchClient: algoliasearch(appId, apiKey), searchFunction (helper) { - helper.state.query && helper.search() + disableDiv.forEach(item => { + item.style.display = helper.state.query ? '' : 'none' + }) + if (helper.state.query) helper.search() } }) - const configure = instantsearch.widgets.configure({ - hitsPerPage: 5 - }) - - const searchBox = instantsearch.widgets.searchBox({ - container: '#algolia-search-input', - showReset: false, - showSubmit: false, - placeholder: GLOBAL_CONFIG.algolia.languages.input_placeholder, - showLoadingIndicator: true - }) - - const hits = instantsearch.widgets.hits({ - container: '#algolia-hits', - templates: { - item (data) { - const link = data.permalink ? data.permalink : (GLOBAL_CONFIG.root + data.path) - const result = data._highlightResult - const content = result.contentStripTruncate - ? cutContent(result.contentStripTruncate.value) - : result.contentStrip - ? cutContent(result.contentStrip.value) - : result.content - ? cutContent(result.content.value) - : '' - return ` -
    - ${result.title.value || 'no-title'} -

    ${content}

    -
    ` - }, - empty: function (data) { - return ( - '
    ' + - GLOBAL_CONFIG.algolia.languages.hits_empty.replace(/\$\{query}/, data.query) + - '
    ' - ) + const widgets = [ + instantsearch.widgets.configure({ hitsPerPage }), + instantsearch.widgets.searchBox({ + container: '#algolia-search-input', + showReset: false, + showSubmit: false, + placeholder: languages.input_placeholder, + showLoadingIndicator: true + }), + instantsearch.widgets.hits({ + container: '#algolia-hits', + templates: { + item (data) { + const link = data.permalink || (GLOBAL_CONFIG.root + data.path) + const result = data._highlightResult + const content = result.contentStripTruncate + ? cutContent(result.contentStripTruncate.value) + : result.contentStrip + ? cutContent(result.contentStrip.value) + : result.content + ? cutContent(result.content.value) + : '' + return ` + + ${result.title.value || 'no-title'} + ${content ? `
    ${content}
    ` : ''} +
    ` + }, + empty (data) { + return `
    ${languages.hits_empty.replace(/\$\{query}/, data.query)}
    ` + } } - } - }) - - const stats = instantsearch.widgets.stats({ - container: '#algolia-info > .algolia-stats', - templates: { - text: function (data) { - const stats = GLOBAL_CONFIG.algolia.languages.hits_stats - .replace(/\$\{hits}/, data.nbHits) - .replace(/\$\{time}/, data.processingTimeMS) - return ( - `
    ${stats}` - ) + }), + instantsearch.widgets.stats({ + container: '#algolia-info > .algolia-stats', + templates: { + text (data) { + const stats = languages.hits_stats + .replace(/\$\{hits}/, data.nbHits) + .replace(/\$\{time}/, data.processingTimeMS) + return `
    ${stats}` + } } - } - }) - - const powerBy = instantsearch.widgets.poweredBy({ - container: '#algolia-info > .algolia-poweredBy' - }) - - const pagination = instantsearch.widgets.pagination({ - container: '#algolia-pagination', - totalPages: 5, - templates: { - first: '', - last: '', - previous: '', - next: '' - } - }) - - search.addWidgets([configure, searchBox, hits, stats, powerBy, pagination]) // add the widgets to the instantsearch instance + }), + instantsearch.widgets.poweredBy({ + container: '#algolia-info > .algolia-poweredBy' + }), + instantsearch.widgets.pagination({ + container: '#algolia-pagination', + totalPages: 5, + templates: { + first: '', + last: '', + previous: '', + next: '' + } + }) + ] + search.addWidgets(widgets) search.start() - searchClickFn() searchFnOnce() window.addEventListener('pjax:complete', () => { - !btf.isHidden($searchMask) && closeSearch() + if (!btf.isHidden($searchMask)) closeSearch() searchClickFn() }) - window.pjax && search.on('render', () => { - window.pjax.refresh(document.getElementById('algolia-hits')) - }) + if (window.pjax) { + search.on('render', () => { + window.pjax.refresh(document.getElementById('algolia-hits')) + }) + } }) diff --git a/source/js/search/local-search.js b/source/js/search/local-search.js index 0eecff6..0b21774 100644 --- a/source/js/search/local-search.js +++ b/source/js/search/local-search.js @@ -301,9 +301,7 @@ window.addEventListener('load', () => { } const openSearch = () => { - const bodyStyle = document.body.style - bodyStyle.width = '100%' - bodyStyle.overflow = 'hidden' + btf.overflowPaddingR.add() btf.animateIn($searchMask, 'to_show 0.5s') btf.animateIn($searchDialog, 'titleScale 0.5s') setTimeout(() => { input.focus() }, 300) @@ -325,9 +323,7 @@ window.addEventListener('load', () => { } const closeSearch = () => { - const bodyStyle = document.body.style - bodyStyle.width = '' - bodyStyle.overflow = '' + btf.overflowPaddingR.remove() btf.animateOut($searchDialog, 'search_close .5s') btf.animateOut($searchMask, 'to_hide 0.5s') window.removeEventListener('resize', fixSafariHeight) diff --git a/source/js/tw_cn.js b/source/js/tw_cn.js index fc3d4fa..9ac846d 100644 --- a/source/js/tw_cn.js +++ b/source/js/tw_cn.js @@ -1,57 +1,42 @@ -document.addEventListener('DOMContentLoaded', function () { +document.addEventListener('DOMContentLoaded', () => { const { defaultEncoding, translateDelay, msgToTraditionalChinese, msgToSimplifiedChinese } = GLOBAL_CONFIG.translate const snackbarData = GLOBAL_CONFIG.Snackbar - let currentEncoding = defaultEncoding const targetEncodingCookie = 'translate-chn-cht' - let targetEncoding = - btf.saveToLocal.get(targetEncodingCookie) === undefined - ? defaultEncoding - : Number(btf.saveToLocal.get('translate-chn-cht')) - let translateButtonObject + + let currentEncoding = defaultEncoding + let targetEncoding = Number(btf.saveToLocal.get(targetEncodingCookie)) || defaultEncoding + const translateButtonObject = document.getElementById('translateLink') const isSnackbar = snackbarData !== undefined - function setLang () { + const setLang = () => { document.documentElement.lang = targetEncoding === 1 ? 'zh-TW' : 'zh-CN' } - function translateText (txt) { - if (txt === '' || txt == null) return '' + const translateText = (txt) => { + if (!txt) return '' if (currentEncoding === 1 && targetEncoding === 2) return Simplized(txt) - else if (currentEncoding === 2 && targetEncoding === 1) { - return Traditionalized(txt) - } else return txt + if (currentEncoding === 2 && targetEncoding === 1) return Traditionalized(txt) + return txt } - function translateBody (fobj) { - let objs - if (typeof fobj === 'object') objs = fobj.childNodes - else objs = document.body.childNodes + const translateBody = (fobj) => { + const objs = typeof fobj === 'object' ? fobj.childNodes : document.body.childNodes for (let i = 0; i < objs.length; i++) { const obj = objs.item(i) - if ( - '||BR|HR|'.indexOf('|' + obj.tagName + '|') > 0 || - obj === translateButtonObject - ) { - continue - } - if (obj.title !== '' && obj.title != null) { - obj.title = translateText(obj.title) - } - if (obj.alt !== '' && obj.alt != null) obj.alt = translateText(obj.alt) - if (obj.placeholder !== '' && obj.placeholder != null) { obj.placeholder = translateText(obj.placeholder) } - if ( - obj.tagName === 'INPUT' && - obj.value !== '' && - obj.type !== 'text' && - obj.type !== 'hidden' - ) { + if ('BR|HR'.includes(obj.tagName) || obj === translateButtonObject) continue + + if (obj.title) obj.title = translateText(obj.title) + if (obj.alt) obj.alt = translateText(obj.alt) + if (obj.placeholder) obj.placeholder = translateText(obj.placeholder) + if (obj.tagName === 'INPUT' && obj.value && obj.type !== 'text' && obj.type !== 'hidden') { obj.value = translateText(obj.value) } if (obj.nodeType === 3) obj.data = translateText(obj.data) else translateBody(obj) } } - function translatePage () { + + const translatePage = () => { if (targetEncoding === 1) { currentEncoding = 1 targetEncoding = 2 @@ -68,13 +53,10 @@ document.addEventListener('DOMContentLoaded', function () { translateBody() } - function JTPYStr () { - return '万与丑专业丛东丝丢两严丧个丬丰临为丽举么义乌乐乔习乡书买乱争于亏云亘亚产亩亲亵亸亿仅从仑仓仪们价众优伙会伛伞伟传伤伥伦伧伪伫体余佣佥侠侣侥侦侧侨侩侪侬俣俦俨俩俪俭债倾偬偻偾偿傥傧储傩儿兑兖党兰关兴兹养兽冁内冈册写军农冢冯冲决况冻净凄凉凌减凑凛几凤凫凭凯击凼凿刍划刘则刚创删别刬刭刽刿剀剂剐剑剥剧劝办务劢动励劲劳势勋勐勚匀匦匮区医华协单卖卢卤卧卫却卺厂厅历厉压厌厍厕厢厣厦厨厩厮县参叆叇双发变叙叠叶号叹叽吁后吓吕吗吣吨听启吴呒呓呕呖呗员呙呛呜咏咔咙咛咝咤咴咸哌响哑哒哓哔哕哗哙哜哝哟唛唝唠唡唢唣唤唿啧啬啭啮啰啴啸喷喽喾嗫呵嗳嘘嘤嘱噜噼嚣嚯团园囱围囵国图圆圣圹场坂坏块坚坛坜坝坞坟坠垄垅垆垒垦垧垩垫垭垯垱垲垴埘埙埚埝埯堑堕塆墙壮声壳壶壸处备复够头夸夹夺奁奂奋奖奥妆妇妈妩妪妫姗姜娄娅娆娇娈娱娲娴婳婴婵婶媪嫒嫔嫱嬷孙学孪宁宝实宠审宪宫宽宾寝对寻导寿将尔尘尧尴尸尽层屃屉届属屡屦屿岁岂岖岗岘岙岚岛岭岳岽岿峃峄峡峣峤峥峦崂崃崄崭嵘嵚嵛嵝嵴巅巩巯币帅师帏帐帘帜带帧帮帱帻帼幂幞干并广庄庆庐庑库应庙庞废庼廪开异弃张弥弪弯弹强归当录彟彦彻径徕御忆忏忧忾怀态怂怃怄怅怆怜总怼怿恋恳恶恸恹恺恻恼恽悦悫悬悭悯惊惧惨惩惫惬惭惮惯愍愠愤愦愿慑慭憷懑懒懔戆戋戏戗战戬户扎扑扦执扩扪扫扬扰抚抛抟抠抡抢护报担拟拢拣拥拦拧拨择挂挚挛挜挝挞挟挠挡挢挣挤挥挦捞损捡换捣据捻掳掴掷掸掺掼揸揽揿搀搁搂搅携摄摅摆摇摈摊撄撑撵撷撸撺擞攒敌敛数斋斓斗斩断无旧时旷旸昙昼昽显晋晒晓晔晕晖暂暧札术朴机杀杂权条来杨杩杰极构枞枢枣枥枧枨枪枫枭柜柠柽栀栅标栈栉栊栋栌栎栏树栖样栾桊桠桡桢档桤桥桦桧桨桩梦梼梾检棂椁椟椠椤椭楼榄榇榈榉槚槛槟槠横樯樱橥橱橹橼檐檩欢欤欧歼殁殇残殒殓殚殡殴毁毂毕毙毡毵氇气氢氩氲汇汉污汤汹沓沟没沣沤沥沦沧沨沩沪沵泞泪泶泷泸泺泻泼泽泾洁洒洼浃浅浆浇浈浉浊测浍济浏浐浑浒浓浔浕涂涌涛涝涞涟涠涡涢涣涤润涧涨涩淀渊渌渍渎渐渑渔渖渗温游湾湿溃溅溆溇滗滚滞滟滠满滢滤滥滦滨滩滪漤潆潇潋潍潜潴澜濑濒灏灭灯灵灾灿炀炉炖炜炝点炼炽烁烂烃烛烟烦烧烨烩烫烬热焕焖焘煅煳熘爱爷牍牦牵牺犊犟状犷犸犹狈狍狝狞独狭狮狯狰狱狲猃猎猕猡猪猫猬献獭玑玙玚玛玮环现玱玺珉珏珐珑珰珲琎琏琐琼瑶瑷璇璎瓒瓮瓯电画畅畲畴疖疗疟疠疡疬疮疯疱疴痈痉痒痖痨痪痫痴瘅瘆瘗瘘瘪瘫瘾瘿癞癣癫癯皑皱皲盏盐监盖盗盘眍眦眬着睁睐睑瞒瞩矫矶矾矿砀码砖砗砚砜砺砻砾础硁硅硕硖硗硙硚确硷碍碛碜碱碹磙礼祎祢祯祷祸禀禄禅离秃秆种积称秽秾稆税稣稳穑穷窃窍窑窜窝窥窦窭竖竞笃笋笔笕笺笼笾筑筚筛筜筝筹签简箓箦箧箨箩箪箫篑篓篮篱簖籁籴类籼粜粝粤粪粮糁糇紧絷纟纠纡红纣纤纥约级纨纩纪纫纬纭纮纯纰纱纲纳纴纵纶纷纸纹纺纻纼纽纾线绀绁绂练组绅细织终绉绊绋绌绍绎经绐绑绒结绔绕绖绗绘给绚绛络绝绞统绠绡绢绣绤绥绦继绨绩绪绫绬续绮绯绰绱绲绳维绵绶绷绸绹绺绻综绽绾绿缀缁缂缃缄缅缆缇缈缉缊缋缌缍缎缏缐缑缒缓缔缕编缗缘缙缚缛缜缝缞缟缠缡缢缣缤缥缦缧缨缩缪缫缬缭缮缯缰缱缲缳缴缵罂网罗罚罢罴羁羟羡翘翙翚耢耧耸耻聂聋职聍联聩聪肃肠肤肷肾肿胀胁胆胜胧胨胪胫胶脉脍脏脐脑脓脔脚脱脶脸腊腌腘腭腻腼腽腾膑臜舆舣舰舱舻艰艳艹艺节芈芗芜芦苁苇苈苋苌苍苎苏苘苹茎茏茑茔茕茧荆荐荙荚荛荜荞荟荠荡荣荤荥荦荧荨荩荪荫荬荭荮药莅莜莱莲莳莴莶获莸莹莺莼萚萝萤营萦萧萨葱蒇蒉蒋蒌蓝蓟蓠蓣蓥蓦蔷蔹蔺蔼蕲蕴薮藁藓虏虑虚虫虬虮虽虾虿蚀蚁蚂蚕蚝蚬蛊蛎蛏蛮蛰蛱蛲蛳蛴蜕蜗蜡蝇蝈蝉蝎蝼蝾螀螨蟏衅衔补衬衮袄袅袆袜袭袯装裆裈裢裣裤裥褛褴襁襕见观觃规觅视觇览觉觊觋觌觍觎觏觐觑觞触觯詟誉誊讠计订讣认讥讦讧讨让讪讫训议讯记讱讲讳讴讵讶讷许讹论讻讼讽设访诀证诂诃评诅识诇诈诉诊诋诌词诎诏诐译诒诓诔试诖诗诘诙诚诛诜话诞诟诠诡询诣诤该详诧诨诩诪诫诬语诮误诰诱诲诳说诵诶请诸诹诺读诼诽课诿谀谁谂调谄谅谆谇谈谊谋谌谍谎谏谐谑谒谓谔谕谖谗谘谙谚谛谜谝谞谟谠谡谢谣谤谥谦谧谨谩谪谫谬谭谮谯谰谱谲谳谴谵谶谷豮贝贞负贠贡财责贤败账货质贩贪贫贬购贮贯贰贱贲贳贴贵贶贷贸费贺贻贼贽贾贿赀赁赂赃资赅赆赇赈赉赊赋赌赍赎赏赐赑赒赓赔赕赖赗赘赙赚赛赜赝赞赟赠赡赢赣赪赵赶趋趱趸跃跄跖跞践跶跷跸跹跻踊踌踪踬踯蹑蹒蹰蹿躏躜躯车轧轨轩轪轫转轭轮软轰轱轲轳轴轵轶轷轸轹轺轻轼载轾轿辀辁辂较辄辅辆辇辈辉辊辋辌辍辎辏辐辑辒输辔辕辖辗辘辙辚辞辩辫边辽达迁过迈运还这进远违连迟迩迳迹适选逊递逦逻遗遥邓邝邬邮邹邺邻郁郄郏郐郑郓郦郧郸酝酦酱酽酾酿释里鉅鉴銮錾钆钇针钉钊钋钌钍钎钏钐钑钒钓钔钕钖钗钘钙钚钛钝钞钟钠钡钢钣钤钥钦钧钨钩钪钫钬钭钮钯钰钱钲钳钴钵钶钷钸钹钺钻钼钽钾钿铀铁铂铃铄铅铆铈铉铊铋铍铎铏铐铑铒铕铗铘铙铚铛铜铝铞铟铠铡铢铣铤铥铦铧铨铪铫铬铭铮铯铰铱铲铳铴铵银铷铸铹铺铻铼铽链铿销锁锂锃锄锅锆锇锈锉锊锋锌锍锎锏锐锑锒锓锔锕锖锗错锚锜锞锟锠锡锢锣锤锥锦锨锩锫锬锭键锯锰锱锲锳锴锵锶锷锸锹锺锻锼锽锾锿镀镁镂镃镆镇镈镉镊镌镍镎镏镐镑镒镕镖镗镙镚镛镜镝镞镟镠镡镢镣镤镥镦镧镨镩镪镫镬镭镮镯镰镱镲镳镴镶长门闩闪闫闬闭问闯闰闱闲闳间闵闶闷闸闹闺闻闼闽闾闿阀阁阂阃阄阅阆阇阈阉阊阋阌阍阎阏阐阑阒阓阔阕阖阗阘阙阚阛队阳阴阵阶际陆陇陈陉陕陧陨险随隐隶隽难雏雠雳雾霁霉霭靓静靥鞑鞒鞯鞴韦韧韨韩韪韫韬韵页顶顷顸项顺须顼顽顾顿颀颁颂颃预颅领颇颈颉颊颋颌颍颎颏颐频颒颓颔颕颖颗题颙颚颛颜额颞颟颠颡颢颣颤颥颦颧风飏飐飑飒飓飔飕飖飗飘飙飚飞飨餍饤饥饦饧饨饩饪饫饬饭饮饯饰饱饲饳饴饵饶饷饸饹饺饻饼饽饾饿馀馁馂馃馄馅馆馇馈馉馊馋馌馍馎馏馐馑馒馓馔馕马驭驮驯驰驱驲驳驴驵驶驷驸驹驺驻驼驽驾驿骀骁骂骃骄骅骆骇骈骉骊骋验骍骎骏骐骑骒骓骔骕骖骗骘骙骚骛骜骝骞骟骠骡骢骣骤骥骦骧髅髋髌鬓魇魉鱼鱽鱾鱿鲀鲁鲂鲄鲅鲆鲇鲈鲉鲊鲋鲌鲍鲎鲏鲐鲑鲒鲓鲔鲕鲖鲗鲘鲙鲚鲛鲜鲝鲞鲟鲠鲡鲢鲣鲤鲥鲦鲧鲨鲩鲪鲫鲬鲭鲮鲯鲰鲱鲲鲳鲴鲵鲶鲷鲸鲹鲺鲻鲼鲽鲾鲿鳀鳁鳂鳃鳄鳅鳆鳇鳈鳉鳊鳋鳌鳍鳎鳏鳐鳑鳒鳓鳔鳕鳖鳗鳘鳙鳛鳜鳝鳞鳟鳠鳡鳢鳣鸟鸠鸡鸢鸣鸤鸥鸦鸧鸨鸩鸪鸫鸬鸭鸮鸯鸰鸱鸲鸳鸴鸵鸶鸷鸸鸹鸺鸻鸼鸽鸾鸿鹀鹁鹂鹃鹄鹅鹆鹇鹈鹉鹊鹋鹌鹍鹎鹏鹐鹑鹒鹓鹔鹕鹖鹗鹘鹚鹛鹜鹝鹞鹟鹠鹡鹢鹣鹤鹥鹦鹧鹨鹩鹪鹫鹬鹭鹯鹰鹱鹲鹳鹴鹾麦麸黄黉黡黩黪黾龙历志制一台皋准复猛钟注范签' - } - function FTPYStr () { - return '萬與醜專業叢東絲丟兩嚴喪個爿豐臨為麗舉麼義烏樂喬習鄉書買亂爭於虧雲亙亞產畝親褻嚲億僅從侖倉儀們價眾優夥會傴傘偉傳傷倀倫傖偽佇體餘傭僉俠侶僥偵側僑儈儕儂俁儔儼倆儷儉債傾傯僂僨償儻儐儲儺兒兌兗黨蘭關興茲養獸囅內岡冊寫軍農塚馮衝決況凍淨淒涼淩減湊凜幾鳳鳧憑凱擊氹鑿芻劃劉則剛創刪別剗剄劊劌剴劑剮劍剝劇勸辦務勱動勵勁勞勢勳猛勩勻匭匱區醫華協單賣盧鹵臥衛卻巹廠廳曆厲壓厭厙廁廂厴廈廚廄廝縣參靉靆雙發變敘疊葉號歎嘰籲後嚇呂嗎唚噸聽啟吳嘸囈嘔嚦唄員咼嗆嗚詠哢嚨嚀噝吒噅鹹呱響啞噠嘵嗶噦嘩噲嚌噥喲嘜嗊嘮啢嗩唕喚呼嘖嗇囀齧囉嘽嘯噴嘍嚳囁嗬噯噓嚶囑嚕劈囂謔團園囪圍圇國圖圓聖壙場阪壞塊堅壇壢壩塢墳墜壟壟壚壘墾坰堊墊埡墶壋塏堖塒塤堝墊垵塹墮壪牆壯聲殼壺壼處備複夠頭誇夾奪奩奐奮獎奧妝婦媽嫵嫗媯姍薑婁婭嬈嬌孌娛媧嫻嫿嬰嬋嬸媼嬡嬪嬙嬤孫學孿寧寶實寵審憲宮寬賓寢對尋導壽將爾塵堯尷屍盡層屭屜屆屬屢屨嶼歲豈嶇崗峴嶴嵐島嶺嶽崠巋嶨嶧峽嶢嶠崢巒嶗崍嶮嶄嶸嶔崳嶁脊巔鞏巰幣帥師幃帳簾幟帶幀幫幬幘幗冪襆幹並廣莊慶廬廡庫應廟龐廢廎廩開異棄張彌弳彎彈強歸當錄彠彥徹徑徠禦憶懺憂愾懷態慫憮慪悵愴憐總懟懌戀懇惡慟懨愷惻惱惲悅愨懸慳憫驚懼慘懲憊愜慚憚慣湣慍憤憒願懾憖怵懣懶懍戇戔戲戧戰戩戶紮撲扡執擴捫掃揚擾撫拋摶摳掄搶護報擔擬攏揀擁攔擰撥擇掛摯攣掗撾撻挾撓擋撟掙擠揮撏撈損撿換搗據撚擄摑擲撣摻摜摣攬撳攙擱摟攪攜攝攄擺搖擯攤攖撐攆擷擼攛擻攢敵斂數齋斕鬥斬斷無舊時曠暘曇晝曨顯晉曬曉曄暈暉暫曖劄術樸機殺雜權條來楊榪傑極構樅樞棗櫪梘棖槍楓梟櫃檸檉梔柵標棧櫛櫳棟櫨櫟欄樹棲樣欒棬椏橈楨檔榿橋樺檜槳樁夢檮棶檢欞槨櫝槧欏橢樓欖櫬櫚櫸檟檻檳櫧橫檣櫻櫫櫥櫓櫞簷檁歡歟歐殲歿殤殘殞殮殫殯毆毀轂畢斃氈毿氌氣氫氬氳彙漢汙湯洶遝溝沒灃漚瀝淪滄渢溈滬濔濘淚澩瀧瀘濼瀉潑澤涇潔灑窪浹淺漿澆湞溮濁測澮濟瀏滻渾滸濃潯濜塗湧濤澇淶漣潿渦溳渙滌潤澗漲澀澱淵淥漬瀆漸澠漁瀋滲溫遊灣濕潰濺漵漊潷滾滯灩灄滿瀅濾濫灤濱灘澦濫瀠瀟瀲濰潛瀦瀾瀨瀕灝滅燈靈災燦煬爐燉煒熗點煉熾爍爛烴燭煙煩燒燁燴燙燼熱煥燜燾煆糊溜愛爺牘犛牽犧犢強狀獷獁猶狽麅獮獰獨狹獅獪猙獄猻獫獵獼玀豬貓蝟獻獺璣璵瑒瑪瑋環現瑲璽瑉玨琺瓏璫琿璡璉瑣瓊瑤璦璿瓔瓚甕甌電畫暢佘疇癤療瘧癘瘍鬁瘡瘋皰屙癰痙癢瘂癆瘓癇癡癉瘮瘞瘺癟癱癮癭癩癬癲臒皚皺皸盞鹽監蓋盜盤瞘眥矓著睜睞瞼瞞矚矯磯礬礦碭碼磚硨硯碸礪礱礫礎硜矽碩硤磽磑礄確鹼礙磧磣堿镟滾禮禕禰禎禱禍稟祿禪離禿稈種積稱穢穠穭稅穌穩穡窮竊竅窯竄窩窺竇窶豎競篤筍筆筧箋籠籩築篳篩簹箏籌簽簡籙簀篋籜籮簞簫簣簍籃籬籪籟糴類秈糶糲粵糞糧糝餱緊縶糸糾紆紅紂纖紇約級紈纊紀紉緯紜紘純紕紗綱納紝縱綸紛紙紋紡紵紖紐紓線紺絏紱練組紳細織終縐絆紼絀紹繹經紿綁絨結絝繞絰絎繪給絢絳絡絕絞統綆綃絹繡綌綏絛繼綈績緒綾緓續綺緋綽緔緄繩維綿綬繃綢綯綹綣綜綻綰綠綴緇緙緗緘緬纜緹緲緝縕繢緦綞緞緶線緱縋緩締縷編緡緣縉縛縟縝縫縗縞纏縭縊縑繽縹縵縲纓縮繆繅纈繚繕繒韁繾繰繯繳纘罌網羅罰罷羆羈羥羨翹翽翬耮耬聳恥聶聾職聹聯聵聰肅腸膚膁腎腫脹脅膽勝朧腖臚脛膠脈膾髒臍腦膿臠腳脫腡臉臘醃膕齶膩靦膃騰臏臢輿艤艦艙艫艱豔艸藝節羋薌蕪蘆蓯葦藶莧萇蒼苧蘇檾蘋莖蘢蔦塋煢繭荊薦薘莢蕘蓽蕎薈薺蕩榮葷滎犖熒蕁藎蓀蔭蕒葒葤藥蒞蓧萊蓮蒔萵薟獲蕕瑩鶯蓴蘀蘿螢營縈蕭薩蔥蕆蕢蔣蔞藍薊蘺蕷鎣驀薔蘞藺藹蘄蘊藪槁蘚虜慮虛蟲虯蟣雖蝦蠆蝕蟻螞蠶蠔蜆蠱蠣蟶蠻蟄蛺蟯螄蠐蛻蝸蠟蠅蟈蟬蠍螻蠑螿蟎蠨釁銜補襯袞襖嫋褘襪襲襏裝襠褌褳襝褲襇褸襤繈襴見觀覎規覓視覘覽覺覬覡覿覥覦覯覲覷觴觸觶讋譽謄訁計訂訃認譏訐訌討讓訕訖訓議訊記訒講諱謳詎訝訥許訛論訩訟諷設訪訣證詁訶評詛識詗詐訴診詆謅詞詘詔詖譯詒誆誄試詿詩詰詼誠誅詵話誕詬詮詭詢詣諍該詳詫諢詡譸誡誣語誚誤誥誘誨誑說誦誒請諸諏諾讀諑誹課諉諛誰諗調諂諒諄誶談誼謀諶諜謊諫諧謔謁謂諤諭諼讒諮諳諺諦謎諞諝謨讜謖謝謠謗諡謙謐謹謾謫譾謬譚譖譙讕譜譎讞譴譫讖穀豶貝貞負貟貢財責賢敗賬貨質販貪貧貶購貯貫貳賤賁貰貼貴貺貸貿費賀貽賊贄賈賄貲賃賂贓資賅贐賕賑賚賒賦賭齎贖賞賜贔賙賡賠賧賴賵贅賻賺賽賾贗讚贇贈贍贏贛赬趙趕趨趲躉躍蹌蹠躒踐躂蹺蹕躚躋踴躊蹤躓躑躡蹣躕躥躪躦軀車軋軌軒軑軔轉軛輪軟轟軲軻轤軸軹軼軤軫轢軺輕軾載輊轎輈輇輅較輒輔輛輦輩輝輥輞輬輟輜輳輻輯轀輸轡轅轄輾轆轍轔辭辯辮邊遼達遷過邁運還這進遠違連遲邇逕跡適選遜遞邐邏遺遙鄧鄺鄔郵鄒鄴鄰鬱郤郟鄶鄭鄆酈鄖鄲醞醱醬釅釃釀釋裏钜鑒鑾鏨釓釔針釘釗釙釕釷釺釧釤鈒釩釣鍆釹鍚釵鈃鈣鈈鈦鈍鈔鍾鈉鋇鋼鈑鈐鑰欽鈞鎢鉤鈧鈁鈥鈄鈕鈀鈺錢鉦鉗鈷缽鈳鉕鈽鈸鉞鑽鉬鉭鉀鈿鈾鐵鉑鈴鑠鉛鉚鈰鉉鉈鉍鈹鐸鉶銬銠鉺銪鋏鋣鐃銍鐺銅鋁銱銦鎧鍘銖銑鋌銩銛鏵銓鉿銚鉻銘錚銫鉸銥鏟銃鐋銨銀銣鑄鐒鋪鋙錸鋱鏈鏗銷鎖鋰鋥鋤鍋鋯鋨鏽銼鋝鋒鋅鋶鐦鐧銳銻鋃鋟鋦錒錆鍺錯錨錡錁錕錩錫錮鑼錘錐錦鍁錈錇錟錠鍵鋸錳錙鍥鍈鍇鏘鍶鍔鍤鍬鍾鍛鎪鍠鍰鎄鍍鎂鏤鎡鏌鎮鎛鎘鑷鐫鎳鎿鎦鎬鎊鎰鎔鏢鏜鏍鏰鏞鏡鏑鏃鏇鏐鐔钁鐐鏷鑥鐓鑭鐠鑹鏹鐙鑊鐳鐶鐲鐮鐿鑔鑣鑞鑲長門閂閃閆閈閉問闖閏闈閑閎間閔閌悶閘鬧閨聞闥閩閭闓閥閣閡閫鬮閱閬闍閾閹閶鬩閿閽閻閼闡闌闃闠闊闋闔闐闒闕闞闤隊陽陰陣階際陸隴陳陘陝隉隕險隨隱隸雋難雛讎靂霧霽黴靄靚靜靨韃鞽韉韝韋韌韍韓韙韞韜韻頁頂頃頇項順須頊頑顧頓頎頒頌頏預顱領頗頸頡頰頲頜潁熲頦頤頻頮頹頷頴穎顆題顒顎顓顏額顳顢顛顙顥纇顫顬顰顴風颺颭颮颯颶颸颼颻飀飄飆飆飛饗饜飣饑飥餳飩餼飪飫飭飯飲餞飾飽飼飿飴餌饒餉餄餎餃餏餅餑餖餓餘餒餕餜餛餡館餷饋餶餿饞饁饃餺餾饈饉饅饊饌饢馬馭馱馴馳驅馹駁驢駔駛駟駙駒騶駐駝駑駕驛駘驍罵駰驕驊駱駭駢驫驪騁驗騂駸駿騏騎騍騅騌驌驂騙騭騤騷騖驁騮騫騸驃騾驄驏驟驥驦驤髏髖髕鬢魘魎魚魛魢魷魨魯魴魺鮁鮃鯰鱸鮋鮓鮒鮊鮑鱟鮍鮐鮭鮚鮳鮪鮞鮦鰂鮜鱠鱭鮫鮮鮺鯗鱘鯁鱺鰱鰹鯉鰣鰷鯀鯊鯇鮶鯽鯒鯖鯪鯕鯫鯡鯤鯧鯝鯢鯰鯛鯨鯵鯴鯔鱝鰈鰏鱨鯷鰮鰃鰓鱷鰍鰒鰉鰁鱂鯿鰠鼇鰭鰨鰥鰩鰟鰜鰳鰾鱈鱉鰻鰵鱅鰼鱖鱔鱗鱒鱯鱤鱧鱣鳥鳩雞鳶鳴鳲鷗鴉鶬鴇鴆鴣鶇鸕鴨鴞鴦鴒鴟鴝鴛鴬鴕鷥鷙鴯鴰鵂鴴鵃鴿鸞鴻鵐鵓鸝鵑鵠鵝鵒鷳鵜鵡鵲鶓鵪鶤鵯鵬鵮鶉鶊鵷鷫鶘鶡鶚鶻鶿鶥鶩鷊鷂鶲鶹鶺鷁鶼鶴鷖鸚鷓鷚鷯鷦鷲鷸鷺鸇鷹鸌鸏鸛鸘鹺麥麩黃黌黶黷黲黽龍歷誌製壹臺臯準復勐鐘註範籤' - } - function Traditionalized (cc) { + const JTPYStr = () => '万与丑专业丛东丝丢两严丧个丬丰临为丽举么义乌乐乔习乡书买乱争于亏云亘亚产亩亲亵亸亿仅从仑仓仪们价众优伙会伛伞伟传伤伥伦伧伪伫体余佣佥侠侣侥侦侧侨侩侪侬俣俦俨俩俪俭债倾偬偻偾偿傥傧储傩儿兑兖党兰关兴兹养兽冁内冈册写军农冢冯冲决况冻净凄凉凌减凑凛几凤凫凭凯击凼凿刍划刘则刚创删别刬刭刽刿剀剂剐剑剥剧劝办务劢动励劲劳势勋勐勚匀匦匮区医华协单卖卢卤卧卫却卺厂厅历厉压厌厍厕厢厣厦厨厩厮县参叆叇双发变叙叠叶号叹叽吁后吓吕吗吣吨听启吴呒呓呕呖呗员呙呛呜咏咔咙咛咝咤咴咸哌响哑哒哓哔哕哗哙哜哝哟唛唝唠唡唢唣唤唿啧啬啭啮啰啴啸喷喽喾嗫呵嗳嘘嘤嘱噜噼嚣嚯团园囱围囵国图圆圣圹场坂坏块坚坛坜坝坞坟坠垄垅垆垒垦垧垩垫垭垯垱垲垴埘埙埚埝埯堑堕塆墙壮声壳壶壸处备复够头夸夹夺奁奂奋奖奥妆妇妈妩妪妫姗姜娄娅娆娇娈娱娲娴婳婴婵婶媪嫒嫔嫱嬷孙学孪宁宝实宠审宪宫宽宾寝对寻导寿将尔尘尧尴尸尽层屃屉届属屡屦屿岁岂岖岗岘岙岚岛岭岳岽岿峃峄峡峣峤峥峦崂崃崄崭嵘嵚嵛嵝嵴巅巩巯币帅师帏帐帘帜带帧帮帱帻帼幂幞干并广庄庆庐庑库应庙庞废庼廪开异弃张弥弪弯弹强归当录彟彦彻径徕御忆忏忧忾怀态怂怃怄怅怆怜总怼怿恋恳恶恸恹恺恻恼恽悦悫悬悭悯惊惧惨惩惫惬惭惮惯愍愠愤愦愿慑慭憷懑懒懔戆戋戏戗战戬户扎扑扦执扩扪扫扬扰抚抛抟抠抡抢护报担拟拢拣拥拦拧拨择挂挚挛挜挝挞挟挠挡挢挣挤挥挦捞损捡换捣据捻掳掴掷掸掺掼揸揽揿搀搁搂搅携摄摅摆摇摈摊撄撑撵撷撸撺擞攒敌敛数斋斓斗斩断无旧时旷旸昙昼昽显晋晒晓晔晕晖暂暧札术朴机杀杂权条来杨杩杰极构枞枢枣枥枧枨枪枫枭柜柠柽栀栅标栈栉栊栋栌栎栏树栖样栾桊桠桡桢档桤桥桦桧桨桩梦梼梾检棂椁椟椠椤椭楼榄榇榈榉槚槛槟槠横樯樱橥橱橹橼檐檩欢欤欧歼殁殇残殒殓殚殡殴毁毂毕毙毡毵氇气氢氩氲汇汉污汤汹沓沟没沣沤沥沦沧沨沩沪沵泞泪泶泷泸泺泻泼泽泾洁洒洼浃浅浆浇浈浉浊测浍济浏浐浑浒浓浔浕涂涌涛涝涞涟涠涡涢涣涤润涧涨涩淀渊渌渍渎渐渑渔渖渗温游湾湿溃溅溆溇滗滚滞滟滠满滢滤滥滦滨滩滪漤潆潇潋潍潜潴澜濑濒灏灭灯灵灾灿炀炉炖炜炝点炼炽烁烂烃烛烟烦烧烨烩烫烬热焕焖焘煅煳熘爱爷牍牦牵牺犊犟状犷犸犹狈狍狝狞独狭狮狯狰狱狲猃猎猕猡猪猫猬献獭玑玙玚玛玮环现玱玺珉珏珐珑珰珲琎琏琐琼瑶瑷璇璎瓒瓮瓯电画畅畲畴疖疗疟疠疡疬疮疯疱疴痈痉痒痖痨痪痫痴瘅瘆瘗瘘瘪瘫瘾瘿癞癣癫癯皑皱皲盏盐监盖盗盘眍眦眬着睁睐睑瞒瞩矫矶矾矿砀码砖砗砚砜砺砻砾础硁硅硕硖硗硙硚确硷碍碛碜碱碹磙礼祎祢祯祷祸禀禄禅离秃秆种积称秽秾稆税稣稳穑穷窃窍窑窜窝窥窦窭竖竞笃笋笔笕笺笼笾筑筚筛筜筝筹签简箓箦箧箨箩箪箫篑篓篮篱簖籁籴类籼粜粝粤粪粮糁糇紧絷纟纠纡红纣纤纥约级纨纩纪纫纬纭纮纯纰纱纲纳纴纵纶纷纸纹纺纻纼纽纾线绀绁绂练组绅细织终绉绊绋绌绍绎经绐绑绒结绔绕绖绗绘给绚绛络绝绞统绠绡绢绣绤绥绦继绨绩绪绫绬续绮绯绰绱绲绳维绵绶绷绸绹绺绻综绽绾绿缀缁缂缃缄缅缆缇缈缉缊缋缌缍缎缏缐缑缒缓缔缕编缗缘缙缚缛缜缝缞缟缠缡缢缣缤缥缦缧缨缩缪缫缬缭缮缯缰缱缲缳缴缵罂网罗罚罢罴羁羟羡翘翙翚耢耧耸耻聂聋职聍联聩聪肃肠肤肷肾肿胀胁胆胜胧胨胪胫胶脉脍脏脐脑脓脔脚脱脶脸腊腌腘腭腻腼腽腾膑臜舆舣舰舱舻艰艳艹艺节芈芗芜芦苁苇苈苋苌苍苎苏苘苹茎茏茑茔茕茧荆荐荙荚荛荜荞荟荠荡荣荤荥荦荧荨荩荪荫荬荭荮药莅莜莱莲莳莴莶获莸莹莺莼萚萝萤营萦萧萨葱蒇蒉蒋蒌蓝蓟蓠蓣蓥蓦蔷蔹蔺蔼蕲蕴薮藁藓虏虑虚虫虬虮虽虾虿蚀蚁蚂蚕蚝蚬蛊蛎蛏蛮蛰蛱蛲蛳蛴蜕蜗蜡蝇蝈蝉蝎蝼蝾螀螨蟏衅衔补衬衮袄袅袆袜袭袯装裆裈裢裣裤裥褛褴襁襕见观觃规觅视觇览觉觊觋觌觍觎觏觐觑觞触觯詟誉誊讠计订讣认讥讦讧讨让讪讫训议讯记讱讲讳讴讵讶讷许讹论讻讼讽设访诀证诂诃评诅识诇诈诉诊诋诌词诎诏诐译诒诓诔试诖诗诘诙诚诛诜话诞诟诠诡询诣诤该详诧诨诩诪诫诬语诮误诰诱诲诳说诵诶请诸诹诺读诼诽课诿谀谁谂调谄谅谆谇谈谊谋谌谍谎谏谐谑谒谓谔谕谖谗谘谙谚谛谜谝谞谟谠谡谢谣谤谥谦谧谨谩谪谫谬谭谮谯谰谱谲谳谴谵谶谷豮贝贞负贠贡财责贤败账货质贩贪贫贬购贮贯贰贱贲贳贴贵贶贷贸费贺贻贼贽贾贿赀赁赂赃资赅赆赇赈赉赊赋赌赍赎赏赐赑赒赓赔赕赖赗赘赙赚赛赜赝赞赟赠赡赢赣赪赵赶趋趱趸跃跄跖跞践跶跷跸跹跻踊踌踪踬踯蹑蹒蹰蹿躏躜躯车轧轨轩轪轫转轭轮软轰轱轲轳轴轵轶轷轸轹轺轻轼载轾轿辀辁辂较辄辅辆辇辈辉辊辋辌辍辎辏辐辑辒输辔辕辖辗辘辙辚辞辩辫边辽达迁过迈运还这进远违连迟迩迳迹适选逊递逦逻遗遥邓邝邬邮邹邺邻郁郄郏郐郑郓郦郧郸酝酦酱酽酾酿释里鉅鉴銮錾钆钇针钉钊钋钌钍钎钏钐钑钒钓钔钕钖钗钘钙钚钛钝钞钟钠钡钢钣钤钥钦钧钨钩钪钫钬钭钮钯钰钱钲钳钴钵钶钷钸钹钺钻钼钽钾钿铀铁铂铃铄铅铆铈铉铊铋铍铎铏铐铑铒铕铗铘铙铚铛铜铝铞铟铠铡铢铣铤铥铦铧铨铪铫铬铭铮铯铰铱铲铳铴铵银铷铸铹铺铻铼铽链铿销锁锂锃锄锅锆锇锈锉锊锋锌锍锎锏锐锑锒锓锔锕锖锗错锚锜锞锟锠锡锢锣锤锥锦锨锩锫锬锭键锯锰锱锲锳锴锵锶锷锸锹锺锻锼锽锾锿镀镁镂镃镆镇镈镉镊镌镍镎镏镐镑镒镕镖镗镙镚镛镜镝镞镟镠镡镢镣镤镥镦镧镨镩镪镫镬镭镮镯镰镱镲镳镴镶长门闩闪闫闬闭问闯闰闱闲闳间闵闶闷闸闹闺闻闼闽闾闿阀阁阂阃阄阅阆阇阈阉阊阋阌阍阎阏阐阑阒阓阔阕阖阗阘阙阚阛队阳阴阵阶际陆陇陈陉陕陧陨险随隐隶隽难雏雠雳雾霁霉霭靓静靥鞑鞒鞯鞴韦韧韨韩韪韫韬韵页顶顷顸项顺须顼顽顾顿颀颁颂颃预颅领颇颈颉颊颋颌颍颎颏颐频颒颓颔颕颖颗题颙颚颛颜额颞颟颠颡颢颣颤颥颦颧风飏飐飑飒飓飔飕飖飗飘飙飚飞飨餍饤饥饦饧饨饩饪饫饬饭饮饯饰饱饲饳饴饵饶饷饸饹饺饻饼饽饾饿馀馁馂馃馄馅馆馇馈馉馊馋馌馍馎馏馐馑馒馓馔馕马驭驮驯驰驱驲驳驴驵驶驷驸驹驺驻驼驽驾驿骀骁骂骃骄骅骆骇骈骉骊骋验骍骎骏骐骑骒骓骔骕骖骗骘骙骚骛骜骝骞骟骠骡骢骣骤骥骦骧髅髋髌鬓魇魉鱼鱽鱾鱿鲀鲁鲂鲄鲅鲆鲇鲈鲉鲊鲋鲌鲍鲎鲏鲐鲑鲒鲓鲔鲕鲖鲗鲘鲙鲚鲛鲜鲝鲞鲟鲠鲡鲢鲣鲤鲥鲦鲧鲨鲩鲪鲫鲬鲭鲮鲯鲰鲱鲲鲳鲴鲵鲶鲷鲸鲹鲺鲻鲼鲽鲾鲿鳀鳁鳂鳃鳄鳅鳆鳇鳈鳉鳊鳋鳌鳍鳎鳏鳐鳑鳒鳓鳔鳕鳖鳗鳘鳙鳛鳜鳝鳞鳟鳠鳡鳢鳣鸟鸠鸡鸢鸣鸤鸥鸦鸧鸨鸩鸪鸫鸬鸭鸮鸯鸰鸱鸲鸳鸴鸵鸶鸷鸸鸹鸺鸻鸼鸽鸾鸿鹀鹁鹂鹃鹄鹅鹆鹇鹈鹉鹊鹋鹌鹍鹎鹏鹐鹑鹒鹓鹔鹕鹖鹗鹘鹚鹛鹜鹝鹞鹟鹠鹡鹢鹣鹤鹥鹦鹧鹨鹩鹪鹫鹬鹭鹯鹰鹱鹲鹳鹴鹾麦麸黄黉黡黩黪黾龙历志制一台皋准复猛钟注范签' + const FTPYStr = () => '萬與醜專業叢東絲丟兩嚴喪個爿豐臨為麗舉麼義烏樂喬習鄉書買亂爭於虧雲亙亞產畝親褻嚲億僅從侖倉儀們價眾優夥會傴傘偉傳傷倀倫傖偽佇體餘傭僉俠侶僥偵側僑儈儕儂俁儔儼倆儷儉債傾傯僂僨償儻儐儲儺兒兌兗黨蘭關興茲養獸囅內岡冊寫軍農塚馮衝決況凍淨淒涼淩減湊凜幾鳳鳧憑凱擊氹鑿芻劃劉則剛創刪別剗剄劊劌剴劑剮劍剝劇勸辦務勱動勵勁勞勢勳猛勩勻匭匱區醫華協單賣盧鹵臥衛卻巹廠廳曆厲壓厭厙廁廂厴廈廚廄廝縣參靉靆雙發變敘疊葉號歎嘰籲後嚇呂嗎唚噸聽啟吳嘸囈嘔嚦唄員咼嗆嗚詠哢嚨嚀噝吒噅鹹呱響啞噠嘵嗶噦嘩噲嚌噥喲嘜嗊嘮啢嗩唕喚呼嘖嗇囀齧囉嘽嘯噴嘍嚳囁嗬噯噓嚶囑嚕劈囂謔團園囪圍圇國圖圓聖壙場阪壞塊堅壇壢壩塢墳墜壟壟壚壘墾坰堊墊埡墶壋塏堖塒塤堝墊垵塹墮壪牆壯聲殼壺壼處備複夠頭誇夾奪奩奐奮獎奧妝婦媽嫵嫗媯姍薑婁婭嬈嬌孌娛媧嫻嫿嬰嬋嬸媼嬡嬪嬙嬤孫學孿寧寶實寵審憲宮寬賓寢對尋導壽將爾塵堯尷屍盡層屭屜屆屬屢屨嶼歲豈嶇崗峴嶴嵐島嶺嶽崠巋嶨嶧峽嶢嶠崢巒嶗崍嶮嶄嶸嶔崳嶁脊巔鞏巰幣帥師幃帳簾幟帶幀幫幬幘幗冪襆幹並廣莊慶廬廡庫應廟龐廢廎廩開異棄張彌弳彎彈強歸當錄彠彥徹徑徠禦憶懺憂愾懷態慫憮慪悵愴憐總懟懌戀懇惡慟懨愷惻惱惲悅愨懸慳憫驚懼慘懲憊愜慚憚慣湣慍憤憒願懾憖怵懣懶懍戇戔戲戧戰戩戶紮撲扡執擴捫掃揚擾撫拋摶摳掄搶護報擔擬攏揀擁攔擰撥擇掛摯攣掗撾撻挾撓擋撟掙擠揮撏撈損撿換搗據撚擄摑擲撣摻摜摣攬撳攙擱摟攪攜攝攄擺搖擯攤攖撐攆擷擼攛擻攢敵斂數齋斕鬥斬斷無舊時曠暘曇晝曨顯晉曬曉曄暈暉暫曖劄術樸機殺雜權條來楊榪傑極構樅樞棗櫪梘棖槍楓梟櫃檸檉梔柵標棧櫛櫳棟櫨櫟欄樹棲樣欒棬椏橈楨檔榿橋樺檜槳樁夢檮棶檢欞槨櫝槧欏橢樓欖櫬櫚櫸檟檻檳櫧橫檣櫻櫫櫥櫓櫞簷檁歡歟歐殲歿殤殘殞殮殫殯毆毀轂畢斃氈毿氌氣氫氬氳彙漢汙湯洶遝溝沒灃漚瀝淪滄渢溈滬濔濘淚澩瀧瀘濼瀉潑澤涇潔灑窪浹淺漿澆湞溮濁測澮濟瀏滻渾滸濃潯濜塗湧濤澇淶漣潿渦溳渙滌潤澗漲澀澱淵淥漬瀆漸澠漁瀋滲溫遊灣濕潰濺漵漊潷滾滯灩灄滿瀅濾濫灤濱灘澦濫瀠瀟瀲濰潛瀦瀾瀨瀕灝滅燈靈災燦煬爐燉煒熗點煉熾爍爛烴燭煙煩燒燁燴燙燼熱煥燜燾煆糊溜愛爺牘犛牽犧犢強狀獷獁猶狽麅獮獰獨狹獅獪猙獄猻獫獵獼玀豬貓蝟獻獺璣璵瑒瑪瑋環現瑲璽瑉玨琺瓏璫琿璡璉瑣瓊瑤璦璿瓔瓚甕甌電畫暢佘疇癤療瘧癘瘍鬁瘡瘋皰屙癰痙癢瘂癆瘓癇癡癉瘮瘞瘺癟癱癮癭癩癬癲臒皚皺皸盞鹽監蓋盜盤瞘眥矓著睜睞瞼瞞矚矯磯礬礦碭碼磚硨硯碸礪礱礫礎硜矽碩硤磽磑礄確鹼礙磧磣堿镟滾禮禕禰禎禱禍稟祿禪離禿稈種積稱穢穠穭稅穌穩穡窮竊竅窯竄窩窺竇窶豎競篤筍筆筧箋籠籩築篳篩簹箏籌簽簡籙簀篋籜籮簞簫簣簍籃籬籪籟糴類秈糶糲粵糞糧糝餱緊縶糸糾紆紅紂纖紇約級紈纊紀紉緯紜紘純紕紗綱納紝縱綸紛紙紋紡紵紖紐紓線紺絏紱練組紳細織終縐絆紼絀紹繹經紿綁絨結絝繞絰絎繪給絢絳絡絕絞統綆綃絹繡綌綏絛繼綈績緒綾緓續綺緋綽緔緄繩維綿綬繃綢綯綹綣綜綻綰綠綴緇緙緗緘緬纜緹緲緝縕繢緦綞緞緶線緱縋緩締縷編緡緣縉縛縟縝縫縗縞纏縭縊縑繽縹縵縲纓縮繆繅纈繚繕繒韁繾繰繯繳纘罌網羅罰罷羆羈羥羨翹翽翬耮耬聳恥聶聾職聹聯聵聰肅腸膚膁腎腫脹脅膽勝朧腖臚脛膠脈膾髒臍腦膿臠腳脫腡臉臘醃膕齶膩靦膃騰臏臢輿艤艦艙艫艱豔艸藝節羋薌蕪蘆蓯葦藶莧萇蒼苧蘇檾蘋莖蘢蔦塋煢繭荊薦薘莢蕘蓽蕎薈薺蕩榮葷滎犖熒蕁藎蓀蔭蕒葒葤藥蒞蓧萊蓮蒔萵薟獲蕕瑩鶯蓴蘀蘿螢營縈蕭薩蔥蕆蕢蔣蔞藍薊蘺蕷鎣驀薔蘞藺藹蘄蘊藪槁蘚虜慮虛蟲虯蟣雖蝦蠆蝕蟻螞蠶蠔蜆蠱蠣蟶蠻蟄蛺蟯螄蠐蛻蝸蠟蠅蟈蟬蠍螻蠑螿蟎蠨釁銜補襯袞襖嫋褘襪襲襏裝襠褌褳襝褲襇褸襤繈襴見觀覎規覓視覘覽覺覬覡覿覥覦覯覲覷觴觸觶讋譽謄訁計訂訃認譏訐訌討讓訕訖訓議訊記訒講諱謳詎訝訥許訛論訩訟諷設訪訣證詁訶評詛識詗詐訴診詆謅詞詘詔詖譯詒誆誄試詿詩詰詼誠誅詵話誕詬詮詭詢詣諍該詳詫諢詡譸誡誣語誚誤誥誘誨誑說誦誒請諸諏諾讀諑誹課諉諛誰諗調諂諒諄誶談誼謀諶諜謊諫諧謔謁謂諤諭諼讒諮諳諺諦謎諞諝謨讜謖謝謠謗諡謙謐謹謾謫譾謬譚譖譙讕譜譎讞譴譫讖穀豶貝貞負貟貢財責賢敗賬貨質販貪貧貶購貯貫貳賤賁貰貼貴貺貸貿費賀貽賊贄賈賄貲賃賂贓資賅贐賕賑賚賒賦賭齎贖賞賜贔賙賡賠賧賴賵贅賻賺賽賾贗讚贇贈贍贏贛赬趙趕趨趲躉躍蹌蹠躒踐躂蹺蹕躚躋踴躊蹤躓躑躡蹣躕躥躪躦軀車軋軌軒軑軔轉軛輪軟轟軲軻轤軸軹軼軤軫轢軺輕軾載輊轎輈輇輅較輒輔輛輦輩輝輥輞輬輟輜輳輻輯轀輸轡轅轄輾轆轍轔辭辯辮邊遼達遷過邁運還這進遠違連遲邇逕跡適選遜遞邐邏遺遙鄧鄺鄔郵鄒鄴鄰鬱郤郟鄶鄭鄆酈鄖鄲醞醱醬釅釃釀釋裏钜鑒鑾鏨釓釔針釘釗釙釕釷釺釧釤鈒釩釣鍆釹鍚釵鈃鈣鈈鈦鈍鈔鍾鈉鋇鋼鈑鈐鑰欽鈞鎢鉤鈧鈁鈥鈄鈕鈀鈺錢鉦鉗鈷缽鈳鉕鈽鈸鉞鑽鉬鉭鉀鈿鈾鐵鉑鈴鑠鉛鉚鈰鉉鉈鉍鈹鐸鉶銬銠鉺銪鋏鋣鐃銍鐺銅鋁銱銦鎧鍘銖銑鋌銩銛鏵銓鉿銚鉻銘錚銫鉸銥鏟銃鐋銨銀銣鑄鐒鋪鋙錸鋱鏈鏗銷鎖鋰鋥鋤鍋鋯鋨鏽銼鋝鋒鋅鋶鐦鐧銳銻鋃鋟鋦錒錆鍺錯錨錡錁錕錩錫錮鑼錘錐錦鍁錈錇錟錠鍵鋸錳錙鍥鍈鍇鏘鍶鍔鍤鍬鍾鍛鎪鍠鍰鎄鍍鎂鏤鎡鏌鎮鎛鎘鑷鐫鎳鎿鎦鎬鎊鎰鎔鏢鏜鏍鏰鏞鏡鏑鏃鏇鏐鐔钁鐐鏷鑥鐓鑭鐠鑹鏹鐙鑊鐳鐶鐲鐮鐿鑔鑣鑞鑲長門閂閃閆閈閉問闖閏闈閑閎間閔閌悶閘鬧閨聞闥閩閭闓閥閣閡閫鬮閱閬闍閾閹閶鬩閿閽閻閼闡闌闃闠闊闋闔闐闒闕闞闤隊陽陰陣階際陸隴陳陘陝隉隕險隨隱隸雋難雛讎靂霧霽黴靄靚靜靨韃鞽韉韝韋韌韍韓韙韞韜韻頁頂頃頇項順須頊頑顧頓頎頒頌頏預顱領頗頸頡頰頲頜潁熲頦頤頻頮頹頷頴穎顆題顒顎顓顏額顳顢顛顙顥纇顫顬顰顴風颺颭颮颯颶颸颼颻飀飄飆飆飛饗饜飣饑飥餳飩餼飪飫飭飯飲餞飾飽飼飿飴餌饒餉餄餎餃餏餅餑餖餓餘餒餕餜餛餡館餷饋餶餿饞饁饃餺餾饈饉饅饊饌饢馬馭馱馴馳驅馹駁驢駔駛駟駙駒騶駐駝駑駕驛駘驍罵駰驕驊駱駭駢驫驪騁驗騂駸駿騏騎騍騅騌驌驂騙騭騤騷騖驁騮騫騸驃騾驄驏驟驥驦驤髏髖髕鬢魘魎魚魛魢魷魨魯魴魺鮁鮃鯰鱸鮋鮓鮒鮊鮑鱟鮍鮐鮭鮚鮳鮪鮞鮦鰂鮜鱠鱭鮫鮮鮺鯗鱘鯁鱺鰱鰹鯉鰣鰷鯀鯊鯇鮶鯽鯒鯖鯪鯕鯫鯡鯤鯧鯝鯢鯰鯛鯨鯵鯴鯔鱝鰈鰏鱨鯷鰮鰃鰓鱷鰍鰒鰉鰁鱂鯿鰠鼇鰭鰨鰥鰩鰟鰜鰳鰾鱈鱉鰻鰵鱅鰼鱖鱔鱗鱒鱯鱤鱧鱣鳥鳩雞鳶鳴鳲鷗鴉鶬鴇鴆鴣鶇鸕鴨鴞鴦鴒鴟鴝鴛鴬鴕鷥鷙鴯鴰鵂鴴鵃鴿鸞鴻鵐鵓鸝鵑鵠鵝鵒鷳鵜鵡鵲鶓鵪鶤鵯鵬鵮鶉鶊鵷鷫鶘鶡鶚鶻鶿鶥鶩鷊鷂鶲鶹鶺鷁鶼鶴鷖鸚鷓鷚鷯鷦鷲鷸鷺鸇鷹鸌鸏鸛鸘鹺麥麩黃黌黶黷黲黽龍歷誌製壹臺臯準復勐鐘註範籤' + + const Traditionalized = (cc) => { let str = '' const ss = JTPYStr() const tt = FTPYStr() @@ -85,7 +67,8 @@ document.addEventListener('DOMContentLoaded', function () { } return str } - function Simplized (cc) { + + const Simplized = (cc) => { let str = '' const ss = JTPYStr() const tt = FTPYStr() @@ -97,8 +80,7 @@ document.addEventListener('DOMContentLoaded', function () { return str } - function translateInitialization () { - translateButtonObject = document.getElementById('translateLink') + const translateInitialization = () => { if (translateButtonObject) { if (currentEncoding !== targetEncoding) { translateButtonObject.textContent = diff --git a/source/js/utils.js b/source/js/utils.js index be1f32b..3ac6f0a 100644 --- a/source/js/utils.js +++ b/source/js/utils.js @@ -47,12 +47,28 @@ return throttled }, - sidebarPaddingR: () => { - const innerWidth = window.innerWidth - const clientWidth = document.body.clientWidth - const paddingRight = innerWidth - clientWidth - if (innerWidth !== clientWidth) { - document.body.style.paddingRight = paddingRight + 'px' + overflowPaddingR: { + add: () => { + const innerWidth = window.innerWidth + const clientWidth = document.body.clientWidth + const paddingRight = innerWidth - clientWidth + + if (paddingRight > 0) { + document.body.style.paddingRight = `${paddingRight}px` + document.body.style.overflow = 'hidden' + const menuElement = document.querySelector('#page-header.nav-fixed #menus') + if (menuElement) { + menuElement.style.paddingRight = `${paddingRight}px` + } + } + }, + remove: () => { + document.body.style.paddingRight = '' + document.body.style.overflow = '' + const menuElement = document.querySelector('#page-header.nav-fixed #menus') + if (menuElement) { + menuElement.style.paddingRight = '' + } } }, @@ -69,28 +85,24 @@ }) }, - diffDate: (d, more = false) => { + diffDate: (inputDate, more = false) => { const dateNow = new Date() - const datePost = new Date(d) - const dateDiff = dateNow.getTime() - datePost.getTime() - const minute = 1000 * 60 - const hour = minute * 60 - const day = hour * 24 - const month = day * 30 + const datePost = new Date(inputDate) + const diffMs = dateNow - datePost + const diffSec = diffMs / 1000 + const diffMin = diffSec / 60 + const diffHour = diffMin / 60 + const diffDay = diffHour / 24 + const diffMonth = diffDay / 30 const { dateSuffix } = GLOBAL_CONFIG - if (!more) return parseInt(dateDiff / day) + if (!more) return Math.floor(diffDay) - const monthCount = dateDiff / month - const dayCount = dateDiff / day - const hourCount = dateDiff / hour - const minuteCount = dateDiff / minute - - if (monthCount > 12) return datePost.toISOString().slice(0, 10) - if (monthCount >= 1) return `${parseInt(monthCount)} ${dateSuffix.month}` - if (dayCount >= 1) return `${parseInt(dayCount)} ${dateSuffix.day}` - if (hourCount >= 1) return `${parseInt(hourCount)} ${dateSuffix.hour}` - if (minuteCount >= 1) return `${parseInt(minuteCount)} ${dateSuffix.min}` + if (diffMonth > 24) return datePost.toISOString().slice(0, 10) + if (diffMonth >= 3) return `${Math.floor(diffMonth)} ${dateSuffix.month}` + if (diffDay >= 3) return `${Math.floor(diffDay)} ${dateSuffix.day}` + if (diffHour >= 3) return `${Math.floor(diffHour)} ${dateSuffix.hour}` + if (diffMin >= 1) return `${Math.floor(diffMin)} ${dateSuffix.min}` return dateSuffix.just }, @@ -109,7 +121,7 @@ }, scrollToDest: (pos, time = 500) => { - const currentPos = window.pageYOffset + const currentPos = window.scrollY const isNavFixed = document.getElementById('page-header').classList.contains('fixed') if (currentPos > pos || isNavFixed) pos = pos - 70 @@ -121,22 +133,16 @@ return } - let start = null - pos = +pos - window.requestAnimationFrame(function step (currentTime) { - start = !start ? currentTime : start - const progress = currentTime - start - if (currentPos < pos) { - window.scrollTo(0, ((pos - currentPos) * progress / time) + currentPos) - } else { - window.scrollTo(0, currentPos - ((currentPos - pos) * progress / time)) - } - if (progress < time) { - window.requestAnimationFrame(step) - } else { - window.scrollTo(0, pos) + const startTime = performance.now() + const animate = currentTime => { + const timeElapsed = currentTime - startTime + const progress = Math.min(timeElapsed / time, 1) + window.scrollTo(0, currentPos + (pos - currentPos) * progress) + if (progress < 1) { + requestAnimationFrame(animate) } - }) + } + requestAnimationFrame(animate) }, animateIn: (ele, text) => { @@ -179,7 +185,7 @@ loadLightbox: ele => { const service = GLOBAL_CONFIG.lightbox - if (service === 'mediumZoom') { + if (service === 'medium_zoom') { mediumZoom(ele, { background: 'var(--zoom-bg)' }) } @@ -243,7 +249,7 @@ } }, - updateAnchor: (anchor) => { + updateAnchor: anchor => { if (anchor !== window.location.hash) { if (!anchor) anchor = location.pathname const title = GLOBAL_CONFIG_SITE.title @@ -254,33 +260,37 @@ } }, - getScrollPercent: (currentTop, ele) => { - const docHeight = ele.clientHeight - const winHeight = document.documentElement.clientHeight - const headerHeight = ele.offsetTop - const contentMath = (docHeight > winHeight) ? (docHeight - winHeight) : (document.documentElement.scrollHeight - winHeight) - const scrollPercent = (currentTop - headerHeight) / (contentMath) - const scrollPercentRounded = Math.round(scrollPercent * 100) - const percentage = (scrollPercentRounded > 100) ? 100 : (scrollPercentRounded <= 0) ? 0 : scrollPercentRounded - return percentage - }, + getScrollPercent: (() => { + let docHeight, winHeight, headerHeight, contentMath + + return (currentTop, ele) => { + if (!docHeight || ele.clientHeight !== docHeight) { + docHeight = ele.clientHeight + winHeight = window.innerHeight + headerHeight = ele.offsetTop + contentMath = Math.max(docHeight - winHeight, document.documentElement.scrollHeight - winHeight) + } + + const scrollPercent = (currentTop - headerHeight) / contentMath + return Math.max(0, Math.min(100, Math.round(scrollPercent * 100))) + } + })(), addEventListenerPjax: (ele, event, fn, option = false) => { ele.addEventListener(event, fn, option) - btf.addGlobalFn('pjax', () => { + btf.addGlobalFn('pjaxSendOnce', () => { ele.removeEventListener(event, fn, option) }) }, removeGlobalFnEvent: (key, parent = window) => { - const { globalFn = {} } = parent - const keyObj = globalFn[key] || {} - const keyArr = Object.keys(keyObj) - if (!keyArr.length) return - keyArr.forEach(i => { - keyObj[i]() - }) - delete parent.globalFn[key] + const globalFn = parent.globalFn || {} + const keyObj = globalFn[key] + if (!keyObj) return + + Object.keys(keyObj).forEach(i => keyObj[i]()) + + delete globalFn[key] } }