From ce397c81dcfe1b531ea1b77abb4ddf26ea68c0da Mon Sep 17 00:00:00 2001 From: Yoshihiro OKUMURA Date: Tue, 19 May 2020 19:24:25 +0900 Subject: [PATCH] initial commit --- package.json | 54 +- public/favicon.ico | Bin 3150 -> 894 bytes public/index.html | 41 +- public/logo192.png | Bin 5347 -> 0 bytes public/logo512.png | Bin 9664 -> 0 bytes public/manifest.json | 16 +- src/App.css | 40 +- src/App.tsx | 31 +- src/bulletin/Bulletin.tsx | 120 + src/bulletin/blocks/BulletinRecentNews.tsx | 88 + src/bulletin/lib/BulletinArchive.tsx | 92 + src/bulletin/lib/BulletinContext.ts | 191 ++ src/bulletin/lib/BulletinStories.tsx | 49 + src/bulletin/lib/BulletinStoriesPageNavi.tsx | 66 + src/bulletin/lib/BulletinStoriesSelect.tsx | 91 + src/bulletin/lib/BulletinStory.tsx | 58 + src/bulletin/lib/BulletinStoryItem.tsx | 51 + src/bulletin/lib/BulletinUtils.ts | 43 + src/common/AppRoot.tsx | 67 + src/common/XoopsPathRedirect.tsx | 40 + src/common/assets/images/mlang_english.gif | Bin 0 -> 175 bytes src/common/assets/images/mlang_japanese.gif | Bin 0 -> 126 bytes src/common/assets/images/no_avatar.gif | Bin 0 -> 985 bytes src/common/assets/images/pagact.gif | Bin 0 -> 121 bytes src/common/assets/images/paginact.gif | Bin 0 -> 121 bytes src/common/assets/images/pagneutral.gif | Bin 0 -> 121 bytes .../assets/images/rank3dbf8e94a6f72.gif | Bin 0 -> 905 bytes .../assets/images/rank3dbf8e9e7d88d.gif | Bin 0 -> 1276 bytes .../assets/images/rank3dbf8ea81e642.gif | Bin 0 -> 894 bytes .../assets/images/rank3dbf8eb1a72e7.gif | Bin 0 -> 856 bytes .../assets/images/rank3dbf8edf15093.gif | Bin 0 -> 789 bytes .../assets/images/rank3dbf8ee8681cd.gif | Bin 0 -> 779 bytes .../assets/images/rank3e632f95e81ca.gif | Bin 0 -> 475 bytes .../assets/images/smil3dbd4bf386b36.gif | Bin 0 -> 210 bytes .../assets/images/smil3dbd4d4e4c4f2.gif | Bin 0 -> 204 bytes .../assets/images/smil3dbd4d6422f04.gif | Bin 0 -> 174 bytes .../assets/images/smil3dbd4d75edb5e.gif | Bin 0 -> 204 bytes .../assets/images/smil3dbd4d8676346.gif | Bin 0 -> 176 bytes .../assets/images/smil3dbd4d99c6eaa.gif | Bin 0 -> 207 bytes .../assets/images/smil3dbd4daabd491.gif | Bin 0 -> 170 bytes .../assets/images/smil3dbd4dbc14f3f.gif | Bin 0 -> 210 bytes .../assets/images/smil3dbd4dcd7b9f4.gif | Bin 0 -> 278 bytes .../assets/images/smil3dbd4ddd6835f.gif | Bin 0 -> 202 bytes .../assets/images/smil3dbd4df1944ee.gif | Bin 0 -> 678 bytes .../assets/images/smil3dbd4e02c5440.gif | Bin 0 -> 263 bytes .../assets/images/smil3dbd4e1748cc9.gif | Bin 0 -> 209 bytes .../assets/images/smil3dbd4e29bbcc7.gif | Bin 0 -> 492 bytes .../assets/images/smil3dbd4e398ff7b.gif | Bin 0 -> 205 bytes .../assets/images/smil3dbd4e4c2e742.gif | Bin 0 -> 4959 bytes .../assets/images/smil3dbd4e5e7563a.gif | Bin 0 -> 736 bytes .../assets/images/smil3dbd4e7853679.gif | Bin 0 -> 273 bytes src/common/assets/xoops.css | 17 + src/common/lib/LangLink.tsx | 26 + src/common/lib/Loading.tsx | 12 + src/common/lib/NoticeSiteHasBeenArchived.tsx | 15 + src/common/lib/PageNotFound.tsx | 54 + src/common/lib/XoopsCode.tsx | 140 + src/config.ts | 18 + src/custom/ContactUs.tsx | 43 + src/custom/Footer.tsx | 32 + src/custom/Header.tsx | 130 + src/custom/Page.tsx | 174 ++ src/custom/RssFeedSites.ts | 103 + src/custom/TopPage.tsx | 75 + src/custom/Xsearch.tsx | 34 + src/custom/assets/images/blockTitleBack.png | Bin 0 -> 475 bytes src/custom/assets/images/cbs-banner.png | Bin 0 -> 7101 bytes src/custom/assets/images/facebook-icon.png | Bin 0 -> 439 bytes src/custom/assets/images/flickr-icon.png | Bin 0 -> 419 bytes src/custom/assets/images/go-page-top.png | Bin 0 -> 149 bytes src/custom/assets/images/h1-back.png | Bin 0 -> 1269 bytes src/custom/assets/images/h2-back.png | Bin 0 -> 973 bytes src/custom/assets/images/incf-banner.png | Bin 0 -> 1209 bytes src/custom/assets/images/incf-logo.png | Bin 0 -> 5131 bytes src/custom/assets/images/indent.png | Bin 0 -> 150 bytes src/custom/assets/images/links-aini2018.png | Bin 0 -> 10391 bytes .../assets/images/links-hackathon2018sep.png | Bin 0 -> 14638 bytes src/custom/assets/images/links-jnodepf.png | Bin 0 -> 35506 bytes .../assets/images/links-newsletter-e.png | Bin 0 -> 32239 bytes .../assets/images/links-newsletter-j.png | Bin 0 -> 30947 bytes src/custom/assets/images/links-pfreport-e.png | Bin 0 -> 30316 bytes src/custom/assets/images/links-pfreport-j.png | Bin 0 -> 29117 bytes src/custom/assets/images/logo.png | Bin 0 -> 10582 bytes src/custom/assets/images/main-banner.png | Bin 0 -> 113952 bytes src/custom/assets/images/mlang_english.png | Bin 0 -> 2665 bytes src/custom/assets/images/mlang_japanese.png | Bin 0 -> 2588 bytes src/custom/assets/images/niu-banner.png | Bin 0 -> 1871 bytes src/custom/assets/images/riken-banner.png | Bin 0 -> 1445 bytes src/custom/assets/images/rss-bmi.png | Bin 0 -> 2755 bytes src/custom/assets/images/rss-bsi-ni.png | Bin 0 -> 1771 bytes src/custom/assets/images/rss-cbsn.png | Bin 0 -> 2785 bytes src/custom/assets/images/rss-cdtdb.png | Bin 0 -> 3420 bytes src/custom/assets/images/rss-cerebellum.png | Bin 0 -> 2711 bytes src/custom/assets/images/rss-dynamicbrain.png | Bin 0 -> 2307 bytes src/custom/assets/images/rss-incf.png | Bin 0 -> 1407 bytes src/custom/assets/images/rss-invbrain.png | Bin 0 -> 2687 bytes src/custom/assets/images/rss-mpdb.png | Bin 0 -> 1661 bytes src/custom/assets/images/rss-nimg.png | Bin 0 -> 2022 bytes src/custom/assets/images/rss-visiome.png | Bin 0 -> 2514 bytes src/custom/assets/images/search.png | Bin 0 -> 955 bytes src/custom/assets/images/sitemap.png | Bin 0 -> 354 bytes src/custom/assets/images/twitter-icon.png | Bin 0 -> 544 bytes src/custom/assets/images/xoonips-banner.png | Bin 0 -> 3641 bytes src/custom/assets/style.css | 664 ++++ src/custom/blocks/LinkBannersBlock.tsx | 35 + src/custom/blocks/RssBlock.tsx | 95 + src/custom/lib/RssFeed.ts | 72 + src/functions.ts | 136 + src/index.css | 14 +- src/index.tsx | 6 +- src/logo.svg | 7 - src/pico/Pico.tsx | 133 + src/pico/PicoCategory.tsx | 81 + src/pico/PicoContent.tsx | 112 + src/pico/PicoMenu.tsx | 91 + src/pico/assets/pico_main.css | 140 + src/pico/lib/PicoContext.ts | 161 + src/pico/lib/PicoUtils.ts | 22 + src/xoonips/Xoonips.module.css | 78 + src/xoonips/Xoonips.tsx | 71 + src/xoonips/XoonipsAdvancedSearch.tsx | 48 + src/xoonips/XoonipsDetailItem.tsx | 76 + .../XoonipsSearchByAdvancedKeyword.tsx | 56 + src/xoonips/XoonipsSearchByIndexId.tsx | 72 + src/xoonips/XoonipsSearchByItemType.tsx | 47 + src/xoonips/XoonipsSearchByKeyword.tsx | 48 + src/xoonips/XoonipsTop.module.css | 19 + src/xoonips/XoonipsTop.tsx | 40 + src/xoonips/XoonipsXoopsPathRedirect.tsx | 42 + src/xoonips/assets/images/icon_conference.gif | Bin 0 -> 427 bytes src/xoonips/assets/images/icon_folder.gif | Bin 0 -> 1508 bytes src/xoonips/assets/images/simpf_button.png | Bin 0 -> 6596 bytes src/xoonips/assets/images/star.gif | Bin 0 -> 538 bytes src/xoonips/assets/images/tree_line.png | Bin 0 -> 112 bytes src/xoonips/assets/images/tree_node.png | Bin 0 -> 1251 bytes src/xoonips/assets/simpf-links.json | 1 + src/xoonips/assets/tree.json | 1 + src/xoonips/blocks/IndexTree.module.css | 91 + src/xoonips/blocks/IndexTree.tsx | 124 + src/xoonips/blocks/Rankings.module.css | 28 + src/xoonips/blocks/Rankings.tsx | 181 ++ src/xoonips/blocks/RecentContents.module.css | 28 + src/xoonips/blocks/RecentContents.tsx | 98 + src/xoonips/blocks/Search.tsx | 86 + .../article/ArticleAdvancedSearch.tsx | 153 + .../item-type/article/ArticleDetail.tsx | 124 + src/xoonips/item-type/article/ArticleList.tsx | 35 + src/xoonips/item-type/article/ArticleTop.tsx | 15 + src/xoonips/item-type/article/ArticleUtil.tsx | 16 + src/xoonips/item-type/article/icon.png | Bin 0 -> 428 bytes src/xoonips/item-type/article/index.tsx | 13 + .../generaldata/GeneralDataAdvancedSearch.tsx | 76 + .../generaldata/GeneralDataDetail.tsx | 59 + .../item-type/generaldata/GeneralDataList.tsx | 58 + .../item-type/generaldata/GeneralDataTop.tsx | 15 + .../item-type/generaldata/GeneralDataUtil.tsx | 7 + src/xoonips/item-type/generaldata/icon.png | Bin 0 -> 326 bytes src/xoonips/item-type/generaldata/index.tsx | 13 + src/xoonips/item-type/index.tsx | 79 + .../journal/JournalAdvancedSearch.tsx | 73 + .../item-type/journal/JournalDetail.tsx | 42 + src/xoonips/item-type/journal/JournalList.tsx | 30 + src/xoonips/item-type/journal/JournalTop.tsx | 15 + src/xoonips/item-type/journal/JournalUtil.tsx | 16 + src/xoonips/item-type/journal/icon.png | Bin 0 -> 345 bytes src/xoonips/item-type/journal/index.tsx | 13 + .../item-type/lib/AdvancedSearchBase.tsx | 190 ++ src/xoonips/item-type/lib/DetailBase.tsx | 52 + src/xoonips/item-type/lib/ListBase.tsx | 54 + src/xoonips/item-type/lib/TopBase.tsx | 46 + src/xoonips/item-type/lib/field/Author.tsx | 21 + src/xoonips/item-type/lib/field/ChangeLog.tsx | 28 + .../item-type/lib/field/Contributer.tsx | 18 + .../item-type/lib/field/CreativeCommons.tsx | 56 + src/xoonips/item-type/lib/field/DateTime.tsx | 21 + .../item-type/lib/field/Description.tsx | 18 + .../lib/field/FileDownloadButton.module.css | 21 + .../lib/field/FileDownloadButton.tsx | 56 + src/xoonips/item-type/lib/field/FileSize.tsx | 17 + .../item-type/lib/field/FreeKeyword.tsx | 18 + src/xoonips/item-type/lib/field/ItemFile.tsx | 48 + src/xoonips/item-type/lib/field/ItemIndex.tsx | 26 + src/xoonips/item-type/lib/field/Language.tsx | 20 + .../field/LicenseAgreementDialog.module.css | 38 + .../lib/field/LicenseAgreementDialog.tsx | 113 + .../item-type/lib/field/Preview.module.css | 23 + src/xoonips/item-type/lib/field/Preview.tsx | 84 + .../item-type/lib/field/PublicationDate.tsx | 19 + src/xoonips/item-type/lib/field/Readme.tsx | 15 + src/xoonips/item-type/lib/field/RelatedTo.tsx | 74 + .../item-type/lib/field/Repeatable.tsx | 21 + src/xoonips/item-type/lib/field/Rights.tsx | 23 + .../item-type/lib/field/SimPFLinkIcon.tsx | 25 + src/xoonips/item-type/lib/field/index.tsx | 41 + src/xoonips/lib/AdvancedSearchQuery.ts | 202 ++ src/xoonips/lib/IndexUtil.ts | 95 + src/xoonips/lib/ItemUtil.ts | 490 +++ src/xoonips/lib/XoonipsListIndex.tsx | 58 + src/xoonips/lib/XoonipsListItem.module.css | 11 + src/xoonips/lib/XoonipsListItem.tsx | 241 ++ yarn.lock | 2748 +++++++++++------ 201 files changed, 9834 insertions(+), 1064 deletions(-) delete mode 100644 public/logo192.png delete mode 100644 public/logo512.png create mode 100644 src/bulletin/Bulletin.tsx create mode 100644 src/bulletin/blocks/BulletinRecentNews.tsx create mode 100644 src/bulletin/lib/BulletinArchive.tsx create mode 100644 src/bulletin/lib/BulletinContext.ts create mode 100644 src/bulletin/lib/BulletinStories.tsx create mode 100644 src/bulletin/lib/BulletinStoriesPageNavi.tsx create mode 100644 src/bulletin/lib/BulletinStoriesSelect.tsx create mode 100644 src/bulletin/lib/BulletinStory.tsx create mode 100644 src/bulletin/lib/BulletinStoryItem.tsx create mode 100644 src/bulletin/lib/BulletinUtils.ts create mode 100644 src/common/AppRoot.tsx create mode 100644 src/common/XoopsPathRedirect.tsx create mode 100644 src/common/assets/images/mlang_english.gif create mode 100644 src/common/assets/images/mlang_japanese.gif create mode 100644 src/common/assets/images/no_avatar.gif create mode 100644 src/common/assets/images/pagact.gif create mode 100644 src/common/assets/images/paginact.gif create mode 100644 src/common/assets/images/pagneutral.gif create mode 100644 src/common/assets/images/rank3dbf8e94a6f72.gif create mode 100644 src/common/assets/images/rank3dbf8e9e7d88d.gif create mode 100644 src/common/assets/images/rank3dbf8ea81e642.gif create mode 100644 src/common/assets/images/rank3dbf8eb1a72e7.gif create mode 100644 src/common/assets/images/rank3dbf8edf15093.gif create mode 100644 src/common/assets/images/rank3dbf8ee8681cd.gif create mode 100644 src/common/assets/images/rank3e632f95e81ca.gif create mode 100644 src/common/assets/images/smil3dbd4bf386b36.gif create mode 100644 src/common/assets/images/smil3dbd4d4e4c4f2.gif create mode 100644 src/common/assets/images/smil3dbd4d6422f04.gif create mode 100644 src/common/assets/images/smil3dbd4d75edb5e.gif create mode 100644 src/common/assets/images/smil3dbd4d8676346.gif create mode 100644 src/common/assets/images/smil3dbd4d99c6eaa.gif create mode 100644 src/common/assets/images/smil3dbd4daabd491.gif create mode 100644 src/common/assets/images/smil3dbd4dbc14f3f.gif create mode 100644 src/common/assets/images/smil3dbd4dcd7b9f4.gif create mode 100644 src/common/assets/images/smil3dbd4ddd6835f.gif create mode 100644 src/common/assets/images/smil3dbd4df1944ee.gif create mode 100644 src/common/assets/images/smil3dbd4e02c5440.gif create mode 100644 src/common/assets/images/smil3dbd4e1748cc9.gif create mode 100644 src/common/assets/images/smil3dbd4e29bbcc7.gif create mode 100644 src/common/assets/images/smil3dbd4e398ff7b.gif create mode 100644 src/common/assets/images/smil3dbd4e4c2e742.gif create mode 100644 src/common/assets/images/smil3dbd4e5e7563a.gif create mode 100644 src/common/assets/images/smil3dbd4e7853679.gif create mode 100644 src/common/assets/xoops.css create mode 100644 src/common/lib/LangLink.tsx create mode 100644 src/common/lib/Loading.tsx create mode 100644 src/common/lib/NoticeSiteHasBeenArchived.tsx create mode 100644 src/common/lib/PageNotFound.tsx create mode 100644 src/common/lib/XoopsCode.tsx create mode 100644 src/config.ts create mode 100644 src/custom/ContactUs.tsx create mode 100644 src/custom/Footer.tsx create mode 100644 src/custom/Header.tsx create mode 100644 src/custom/Page.tsx create mode 100644 src/custom/RssFeedSites.ts create mode 100644 src/custom/TopPage.tsx create mode 100644 src/custom/Xsearch.tsx create mode 100644 src/custom/assets/images/blockTitleBack.png create mode 100644 src/custom/assets/images/cbs-banner.png create mode 100644 src/custom/assets/images/facebook-icon.png create mode 100644 src/custom/assets/images/flickr-icon.png create mode 100644 src/custom/assets/images/go-page-top.png create mode 100644 src/custom/assets/images/h1-back.png create mode 100644 src/custom/assets/images/h2-back.png create mode 100644 src/custom/assets/images/incf-banner.png create mode 100644 src/custom/assets/images/incf-logo.png create mode 100644 src/custom/assets/images/indent.png create mode 100644 src/custom/assets/images/links-aini2018.png create mode 100644 src/custom/assets/images/links-hackathon2018sep.png create mode 100644 src/custom/assets/images/links-jnodepf.png create mode 100644 src/custom/assets/images/links-newsletter-e.png create mode 100644 src/custom/assets/images/links-newsletter-j.png create mode 100644 src/custom/assets/images/links-pfreport-e.png create mode 100644 src/custom/assets/images/links-pfreport-j.png create mode 100644 src/custom/assets/images/logo.png create mode 100644 src/custom/assets/images/main-banner.png create mode 100644 src/custom/assets/images/mlang_english.png create mode 100644 src/custom/assets/images/mlang_japanese.png create mode 100644 src/custom/assets/images/niu-banner.png create mode 100644 src/custom/assets/images/riken-banner.png create mode 100644 src/custom/assets/images/rss-bmi.png create mode 100644 src/custom/assets/images/rss-bsi-ni.png create mode 100644 src/custom/assets/images/rss-cbsn.png create mode 100644 src/custom/assets/images/rss-cdtdb.png create mode 100644 src/custom/assets/images/rss-cerebellum.png create mode 100644 src/custom/assets/images/rss-dynamicbrain.png create mode 100644 src/custom/assets/images/rss-incf.png create mode 100644 src/custom/assets/images/rss-invbrain.png create mode 100644 src/custom/assets/images/rss-mpdb.png create mode 100644 src/custom/assets/images/rss-nimg.png create mode 100644 src/custom/assets/images/rss-visiome.png create mode 100644 src/custom/assets/images/search.png create mode 100644 src/custom/assets/images/sitemap.png create mode 100644 src/custom/assets/images/twitter-icon.png create mode 100644 src/custom/assets/images/xoonips-banner.png create mode 100644 src/custom/assets/style.css create mode 100644 src/custom/blocks/LinkBannersBlock.tsx create mode 100644 src/custom/blocks/RssBlock.tsx create mode 100644 src/custom/lib/RssFeed.ts create mode 100644 src/functions.ts delete mode 100644 src/logo.svg create mode 100644 src/pico/Pico.tsx create mode 100644 src/pico/PicoCategory.tsx create mode 100644 src/pico/PicoContent.tsx create mode 100644 src/pico/PicoMenu.tsx create mode 100644 src/pico/assets/pico_main.css create mode 100644 src/pico/lib/PicoContext.ts create mode 100644 src/pico/lib/PicoUtils.ts create mode 100644 src/xoonips/Xoonips.module.css create mode 100644 src/xoonips/Xoonips.tsx create mode 100644 src/xoonips/XoonipsAdvancedSearch.tsx create mode 100644 src/xoonips/XoonipsDetailItem.tsx create mode 100644 src/xoonips/XoonipsSearchByAdvancedKeyword.tsx create mode 100644 src/xoonips/XoonipsSearchByIndexId.tsx create mode 100644 src/xoonips/XoonipsSearchByItemType.tsx create mode 100644 src/xoonips/XoonipsSearchByKeyword.tsx create mode 100644 src/xoonips/XoonipsTop.module.css create mode 100644 src/xoonips/XoonipsTop.tsx create mode 100644 src/xoonips/XoonipsXoopsPathRedirect.tsx create mode 100644 src/xoonips/assets/images/icon_conference.gif create mode 100644 src/xoonips/assets/images/icon_folder.gif create mode 100644 src/xoonips/assets/images/simpf_button.png create mode 100644 src/xoonips/assets/images/star.gif create mode 100644 src/xoonips/assets/images/tree_line.png create mode 100644 src/xoonips/assets/images/tree_node.png create mode 100644 src/xoonips/assets/simpf-links.json create mode 100644 src/xoonips/assets/tree.json create mode 100644 src/xoonips/blocks/IndexTree.module.css create mode 100644 src/xoonips/blocks/IndexTree.tsx create mode 100644 src/xoonips/blocks/Rankings.module.css create mode 100644 src/xoonips/blocks/Rankings.tsx create mode 100644 src/xoonips/blocks/RecentContents.module.css create mode 100644 src/xoonips/blocks/RecentContents.tsx create mode 100644 src/xoonips/blocks/Search.tsx create mode 100644 src/xoonips/item-type/article/ArticleAdvancedSearch.tsx create mode 100644 src/xoonips/item-type/article/ArticleDetail.tsx create mode 100644 src/xoonips/item-type/article/ArticleList.tsx create mode 100644 src/xoonips/item-type/article/ArticleTop.tsx create mode 100644 src/xoonips/item-type/article/ArticleUtil.tsx create mode 100644 src/xoonips/item-type/article/icon.png create mode 100644 src/xoonips/item-type/article/index.tsx create mode 100644 src/xoonips/item-type/generaldata/GeneralDataAdvancedSearch.tsx create mode 100644 src/xoonips/item-type/generaldata/GeneralDataDetail.tsx create mode 100644 src/xoonips/item-type/generaldata/GeneralDataList.tsx create mode 100644 src/xoonips/item-type/generaldata/GeneralDataTop.tsx create mode 100644 src/xoonips/item-type/generaldata/GeneralDataUtil.tsx create mode 100644 src/xoonips/item-type/generaldata/icon.png create mode 100644 src/xoonips/item-type/generaldata/index.tsx create mode 100644 src/xoonips/item-type/index.tsx create mode 100644 src/xoonips/item-type/journal/JournalAdvancedSearch.tsx create mode 100644 src/xoonips/item-type/journal/JournalDetail.tsx create mode 100644 src/xoonips/item-type/journal/JournalList.tsx create mode 100644 src/xoonips/item-type/journal/JournalTop.tsx create mode 100644 src/xoonips/item-type/journal/JournalUtil.tsx create mode 100644 src/xoonips/item-type/journal/icon.png create mode 100644 src/xoonips/item-type/journal/index.tsx create mode 100644 src/xoonips/item-type/lib/AdvancedSearchBase.tsx create mode 100644 src/xoonips/item-type/lib/DetailBase.tsx create mode 100644 src/xoonips/item-type/lib/ListBase.tsx create mode 100644 src/xoonips/item-type/lib/TopBase.tsx create mode 100644 src/xoonips/item-type/lib/field/Author.tsx create mode 100644 src/xoonips/item-type/lib/field/ChangeLog.tsx create mode 100644 src/xoonips/item-type/lib/field/Contributer.tsx create mode 100644 src/xoonips/item-type/lib/field/CreativeCommons.tsx create mode 100644 src/xoonips/item-type/lib/field/DateTime.tsx create mode 100644 src/xoonips/item-type/lib/field/Description.tsx create mode 100644 src/xoonips/item-type/lib/field/FileDownloadButton.module.css create mode 100644 src/xoonips/item-type/lib/field/FileDownloadButton.tsx create mode 100644 src/xoonips/item-type/lib/field/FileSize.tsx create mode 100644 src/xoonips/item-type/lib/field/FreeKeyword.tsx create mode 100644 src/xoonips/item-type/lib/field/ItemFile.tsx create mode 100644 src/xoonips/item-type/lib/field/ItemIndex.tsx create mode 100644 src/xoonips/item-type/lib/field/Language.tsx create mode 100644 src/xoonips/item-type/lib/field/LicenseAgreementDialog.module.css create mode 100644 src/xoonips/item-type/lib/field/LicenseAgreementDialog.tsx create mode 100644 src/xoonips/item-type/lib/field/Preview.module.css create mode 100644 src/xoonips/item-type/lib/field/Preview.tsx create mode 100644 src/xoonips/item-type/lib/field/PublicationDate.tsx create mode 100644 src/xoonips/item-type/lib/field/Readme.tsx create mode 100644 src/xoonips/item-type/lib/field/RelatedTo.tsx create mode 100644 src/xoonips/item-type/lib/field/Repeatable.tsx create mode 100644 src/xoonips/item-type/lib/field/Rights.tsx create mode 100644 src/xoonips/item-type/lib/field/SimPFLinkIcon.tsx create mode 100644 src/xoonips/item-type/lib/field/index.tsx create mode 100644 src/xoonips/lib/AdvancedSearchQuery.ts create mode 100644 src/xoonips/lib/IndexUtil.ts create mode 100644 src/xoonips/lib/ItemUtil.ts create mode 100644 src/xoonips/lib/XoonipsListIndex.tsx create mode 100644 src/xoonips/lib/XoonipsListItem.module.css create mode 100644 src/xoonips/lib/XoonipsListItem.tsx diff --git a/package.json b/package.json index 33edff8..454ade5 100644 --- a/package.json +++ b/package.json @@ -3,17 +3,43 @@ "version": "0.1.0", "private": true, "dependencies": { - "@testing-library/jest-dom": "^4.2.4", - "@testing-library/react": "^9.3.2", - "@testing-library/user-event": "^7.1.2", - "@types/jest": "^24.0.0", - "@types/node": "^12.0.0", - "@types/react": "^16.9.0", - "@types/react-dom": "^16.9.0", - "react": "^16.12.0", - "react-dom": "^16.12.0", - "react-scripts": "3.4.0", - "typescript": "~3.7.2" + "@testing-library/jest-dom": "^5.7.0", + "@testing-library/react": "^10.0.4", + "@testing-library/user-event": "^10.3.1", + "@types/async-lock": "^1.1.2", + "@types/jest": "^25.2.3", + "@types/lokijs": "^1.5.3", + "@types/node": "^14.0.1", + "@types/react": "^16.9.35", + "@types/react-dom": "^16.9.8", + "@types/react-helmet": "^6.0.0", + "@types/react-html-parser": "^2.0.1", + "@types/react-overlays": "^1.1.3", + "@types/react-router-dom": "^5.1.5", + "@types/react-router-hash-link": "^1.2.1", + "@types/xregexp": "^4.3.0", + "async-lock": "^1.2.4", + "axios": "^0.19.2", + "lokijs": "^1.5.8", + "moment": "2.25.3", + "rc-tree": "^3.2.2", + "react": "^16.13.1", + "react-app-polyfill": "^1.0.6", + "react-cookie": "^4.0.3", + "react-dom": "^16.13.1", + "react-ga": "^2.7.0", + "react-helmet": "^6.0.0", + "react-html-parser": "^2.0.2", + "react-image-lightbox": "^5.1.1", + "react-overlays": "^3.2.0", + "react-router-dom": "^5.2.0", + "react-router-hash-link": "^1.2.2", + "react-scripts": "3.4.1", + "react-spinner-material": "^1.3.1", + "rss-parser": "^3.8.0", + "split-string": "^6.1.0", + "typescript": "~3.9.2", + "xregexp": "^4.3.0" }, "scripts": { "start": "react-scripts start", @@ -28,12 +54,14 @@ "production": [ ">0.2%", "not dead", - "not op_mini all" + "not op_mini all", + "ie 11" ], "development": [ "last 1 chrome version", "last 1 firefox version", - "last 1 safari version" + "last 1 safari version", + "ie 11" ] } } diff --git a/public/favicon.ico b/public/favicon.ico index bcd5dfd67cd0361b78123e95c2dd96031f27f743..973f2b4400f88cbe8fc375c1bd61406d65142cbd 100644 GIT binary patch literal 894 zcmZQzU<5(|0R|u`!H~hsz#zuJz@P!dKp_SNAO?vO2_8Otc>n%A2)cLg-h=!1acKmq zd~pBXp0x|6l}EJ48BI(zTG*6_E;#hlHogQ92cKg;XxRxhRo*X&6C)P$L!;-7gnYGoMxi^?&Ry=F+6m$C})(KlO z7iI}Oym|y~%bh#7BK?dD{I#FlzI@@phD(Pw{rLLn(w@0XiZ~{B$@fjuUsuGuwo>`Y zqX$4MUcGv`c)=83Gr3f?PFj$=l~{`x)8q)&Nx9r>@))n}oeWfe<>JmG%`6w%7)~}a?5<=uFwG0- zO<<@*23v;tN;gMxEl6QX=#bx1$Fgd11W^6YZy(pSi(KtvxY)sPw2onCtLnYGcON}^ z6d!FL6t5D|Vp`s)?!F;2e_3SIirB9|z5=zJp67OLBE!{QhSN<9d)ich>R-QpU6L0T zl%(R>?`Xd|KKnp##>r_hCl(#PcM+)m>e1<2mKa}~z;L#O;qWw9U>tq>_HEVN?!++h zlyW(T)$w*aie2~D=p31lb#%+I^JfkoTD^a|3{XAL{0rN=Uc7h?3?g8>W<==6rHQyq z(6(D-;pNwMn=x(6e3b zXtUn4{BYOaYeyg5y?K69;n^clh4BF}AWe{lcKhxhN% z6vMf{fB*jU@gp$Of#Ci7_usyKg-bygKjhaqK44$tcz}70V*?`uGcc@i#D-z=AhjSp GAiV%vkBeFW literal 3150 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 MDeX2GIKR{Qf5okjU;qFB diff --git a/public/index.html b/public/index.html index aa069f2..f205a90 100644 --- a/public/index.html +++ b/public/index.html @@ -7,37 +7,26 @@ - - + + + + + + + + + + + + + - - React App + Top - INCF Japan Node
- diff --git a/public/logo192.png b/public/logo192.png deleted file mode 100644 index fc44b0a3796c0e0a64c3d858ca038bd4570465d9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5347 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 b{|{}U^kRn2wo}j7|0ATu<;8xA7zX}7|B6mN diff --git a/public/manifest.json b/public/manifest.json index 080d6c7..f6406c1 100644 --- a/public/manifest.json +++ b/public/manifest.json @@ -1,21 +1,11 @@ { - "short_name": "React App", - "name": "Create React App Sample", + "short_name": "INCF Japan Node", + "name": "INCF Japan Node Portal Site", "icons": [ { "src": "favicon.ico", - "sizes": "64x64 32x32 24x24 16x16", + "sizes": "16x16", "type": "image/x-icon" - }, - { - "src": "logo192.png", - "type": "image/png", - "sizes": "192x192" - }, - { - "src": "logo512.png", - "type": "image/png", - "sizes": "512x512" } ], "start_url": ".", diff --git a/src/App.css b/src/App.css index 74b5e05..3a6841e 100644 --- a/src/App.css +++ b/src/App.css @@ -1,38 +1,2 @@ -.App { - text-align: center; -} - -.App-logo { - height: 40vmin; - pointer-events: none; -} - -@media (prefers-reduced-motion: no-preference) { - .App-logo { - animation: App-logo-spin infinite 20s linear; - } -} - -.App-header { - background-color: #282c34; - min-height: 100vh; - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - font-size: calc(10px + 2vmin); - color: white; -} - -.App-link { - color: #61dafb; -} - -@keyframes App-logo-spin { - from { - transform: rotate(0deg); - } - to { - transform: rotate(360deg); - } -} +@import url("./common/assets/xoops.css"); +@import url("./custom/assets/style.css"); diff --git a/src/App.tsx b/src/App.tsx index a53698a..2809684 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -1,26 +1,17 @@ import React from 'react'; -import logo from './logo.svg'; +import { CookiesProvider } from 'react-cookie'; +import { BrowserRouter } from 'react-router-dom'; import './App.css'; +import AppRoot from './common/AppRoot'; -function App() { - return ( -
-
- logo -

- Edit src/App.tsx and save to reload. -

- - Learn React - -
-
- ); +const App: React.FC = () => { + return ( + + + + + + ); } export default App; diff --git a/src/bulletin/Bulletin.tsx b/src/bulletin/Bulletin.tsx new file mode 100644 index 0000000..4b61b22 --- /dev/null +++ b/src/bulletin/Bulletin.tsx @@ -0,0 +1,120 @@ +import React from 'react'; +import { Redirect, Route, RouteComponentProps, Switch } from 'react-router-dom'; +import Loading from '../common/lib/Loading'; +import PageNotFound from '../common/lib/PageNotFound'; +import { MultiLang } from '../config'; +import BulletinArchive from './lib/BulletinArchive'; +import BulletinContext from './lib/BulletinContext'; +import BulletinStories from './lib/BulletinStories'; +import BulletinStory from './lib/BulletinStory'; +import BulletinUtils from './lib/BulletinUtils'; + +interface Props { + lang: MultiLang; + mydirname: string; +} + +interface Props { + lang: MultiLang; + mydirname: string; +} + +interface State { + loading: boolean; + context: BulletinContext | null; +} + +class Bulletin extends React.Component { + + private isActive: boolean; + + constructor(props: Props) { + super(props); + this.state = { + loading: true, + context: null, + }; + this.isActive = false; + } + + componentDidMount() { + this.isActive = true; + this.updateContext(); + } + + componentDidUpdate(prevProps: Props, prevState: State) { + const { mydirname } = this.props; + const prevMydirname = prevProps.mydirname; + if (mydirname !== prevMydirname) { + this.setState({ loading: true, context: null }); + this.updateContext(); + } + } + + componentWillUnmount() { + this.isActive = false; + } + + async updateContext() { + const { mydirname } = this.props; + const context = await BulletinUtils.getContext(mydirname); + if (this.isActive) { + this.setState({ loading: false, context }); + } + } + + private str2int(str: string | null): number | null { + if (str === null || str.match(/^\d+$/) === null) { + return null; + } + return parseInt(str, 10); + } + + render() { + const { lang, mydirname } = this.props; + const { loading, context } = this.state; + if (loading) { + return ; + } + if (context === null) { + return ; + } + return
+ + { + const { location } = props; + const url = context.getUrl('index.php' + location.search + location.hash); + return + }} /> + { + const { location } = props; + const params = new URLSearchParams(location.search); + const page = params.get('page') || 'main'; + switch (page) { + case 'main': { + const topicId = this.str2int(params.get('storytopic')) || 0; + const storyNum = this.str2int(params.get('storynum')) || 5; + const start = this.str2int(params.get('start')) || 0; + return + } + case 'article': { + const storyId = this.str2int(params.get('storyid')) || 0; + return + } + case 'archive': { + const year = this.str2int(params.get('year')) || 0; + const month = this.str2int(params.get('month')) || 0; + return + } + } + return + }} /> + { + return ; + }} /> + +
; + } +} + +export default Bulletin; \ No newline at end of file diff --git a/src/bulletin/blocks/BulletinRecentNews.tsx b/src/bulletin/blocks/BulletinRecentNews.tsx new file mode 100644 index 0000000..b41a26d --- /dev/null +++ b/src/bulletin/blocks/BulletinRecentNews.tsx @@ -0,0 +1,88 @@ +import React from 'react'; +import { Link } from 'react-router-dom'; +import Loading from '../../common/lib/Loading'; +import PageNotFound from '../../common/lib/PageNotFound'; +import { MultiLang } from '../../config'; +import Functions from '../../functions'; +import BulletinContext from '../lib/BulletinContext'; +import BulletinStoryItem from '../lib/BulletinStoryItem'; +import BulletinUtils from '../lib/BulletinUtils'; + +interface Props { + lang: MultiLang; + mydirname: string; +} + +interface State { + loading: boolean; + context: BulletinContext | null; +} + +class BulletinRecentNews extends React.Component { + + private isActive: boolean; + + constructor(props: Props) { + super(props); + this.state = { + loading: true, + context: null, + }; + this.isActive = false; + } + + componentDidMount() { + this.isActive = true; + this.updateContext(); + } + + componentDidUpdate(prevProps: Props, prevState: State) { + const { mydirname } = this.props; + const prevMydirname = prevProps.mydirname; + if (mydirname !== prevMydirname) { + this.setState({ loading: true, context: null }); + this.updateContext(); + } + } + + componentWillUnmount() { + this.isActive = false; + } + + async updateContext() { + const { mydirname } = this.props; + const context = await BulletinUtils.getContext(mydirname); + if (this.isActive) { + this.setState({ loading: false, context }); + } + } + + render() { + const { lang } = this.props; + const { loading, context } = this.state; + if (loading) { + return ; + } + if (context === null) { + return ; + } + const module = context.getModule(); + if (module === null) { + return ; + } + const stories = context.getStories(0, 10, 0); + return
+ {stories.filter((story, index) => index < 3).map((story, index) => { + return + })} +
    + {stories.filter((story, index) => index >= 3).map((story, index) => { + return
  • {Functions.mlang(story.title, lang)} ({story.posttime})
  • + })} +
+
[more]
+
; + } +} + +export default BulletinRecentNews; diff --git a/src/bulletin/lib/BulletinArchive.tsx b/src/bulletin/lib/BulletinArchive.tsx new file mode 100644 index 0000000..77c0fd0 --- /dev/null +++ b/src/bulletin/lib/BulletinArchive.tsx @@ -0,0 +1,92 @@ +import React from 'react'; +import { Helmet } from 'react-helmet'; +import { Link } from 'react-router-dom'; +import PageNotFound from '../../common/lib/PageNotFound'; +import { MultiLang } from '../../config'; +import Functions from '../../functions'; +import BulletinContext from './BulletinContext'; +import BulletinUtils from './BulletinUtils'; + +interface Props { + lang: MultiLang; + context: BulletinContext; + year: number; + month: number; +} + +const BulletinArchive: React.FC = (props: Props) => { + const { lang, context, year, month } = props; + const years = context.getArchiveYearRange(); + if (years.min === 0 || years.max === 0) { + return ; + } + const module = context.getModule(); + if (module === null) { + return ; + } + const title = Functions.mlang('[en]Archive[/en][ja]アーカイブ[/ja]', lang); + const titles = [Functions.siteTitle(lang), Functions.mlang(module.name, lang), title]; + const stories = year !== 0 ? context.getStoriesByMonth(year, month) : []; + return
+ + {titles.reverse().join(' - ')} + +
{Functions.mlang('[en]Archive[/en][ja]アーカイブ[/ja]', lang)} |
+
+
+ + + + + + {[...Array(years.max - years.min + 1)].map((v, index) => { + const _year = index + years.min; + const evenodd = index % 2 === 0 ? 'even' : 'edd'; + return + + {[...Array(12)].map((v, index) => { + const _month = index + 1; + const label = BulletinUtils.getMonthLabel(_month, lang); + const style: React.CSSProperties = { textAlign: 'center' }; + const num = context.getArchiveCounter(_year, _month); + const xmonth = (num === 0 || (_year === year && _month === month)) ? label : {label}; + if (_year === year && _month === month) { + style['backgroundColor'] = '#ffcccc'; + style['color'] = '#0000ff'; + style['fontWeight'] = 'bold'; + } + return ; + })} + + })} + +
{Functions.mlang('[en]News archive[/en][ja]ニュースアーカイブ[/ja]', lang)}
{_year}{lang === 'ja' && '年'}{xmonth}
+
+ {stories.length > 0 && +
+
+ + {Functions.mlang('[en]News[/en][ja]ニュース[/ja]', lang)} + +
+
+
    + {stories.map((story, index) => { + const topic = context.getTopic(story.topic_id); + return
  • + {Functions.mlang(topic === null ? '' : topic.title, lang)} +  :  + {Functions.mlang(story.title, lang)} ({story.posttime}) +
  • + })} +
+
+
+ {Functions.mlang('[en]There are[/en][ja]計[/ja] ' + stories.length + ' [en]story(ies) in total.[/en][ja]件のニュース記事があります[/ja]', lang)} +
+
+ } +
; +}; + +export default BulletinArchive; \ No newline at end of file diff --git a/src/bulletin/lib/BulletinContext.ts b/src/bulletin/lib/BulletinContext.ts new file mode 100644 index 0000000..4faa40a --- /dev/null +++ b/src/bulletin/lib/BulletinContext.ts @@ -0,0 +1,191 @@ +import axios from 'axios'; +import loki from 'lokijs'; + +export interface BulletinModuleData { + name: string; + dirname: string; + storyhome: number; + displaynav: number; + disp_list_of_cat: number; + stories_of_cat: number; + use_pankuzu: number; +} + +export interface BulletinTopicData { + id: number; + pid: number; + title: string; +} + +export interface BulletinStoryData { + id: number; + posttime: string; + topic_id: number; + title: string; + text: { + en: string; + ja: string; + } +} + +interface BulletinIndexData { + module: BulletinModuleData; + topics: BulletinTopicData[]; + stories: BulletinStoryData[]; +} + +interface BulletinCounterData { + count: { + [date: string]: number; + } + year: { + min: number; + max: number; + } +} + +export const BULLETIN_TOPIC_ID_ROOT = 0; + +class BulletinContext { + + private isInitialized: boolean; + private dirname: string; + private database: loki; + private module: BulletinModuleData | null; + private topics: Collection; + private stories: Collection; + private counter: BulletinCounterData; + + constructor(dirname: string) { + this.isInitialized = false; + this.dirname = dirname; + this.database = new loki(`bulletin_${dirname}`); + this.module = null; + this.topics = this.database.addCollection('topics'); + this.stories = this.database.addCollection('stories'); + this.counter = { count: {}, year: { min: 0, max: 0 } }; + } + + getUrl(path: string): string { + return `/${this.dirname}/${path}`; + } + + getStoryUrl(id: number, page: number = 0): string { + const params = new URLSearchParams([ + ['page', 'article'], + ['storyid', id.toString()] + ]); + if (page !== 0) { + params.set('storypage', page.toString()); + } + return this.getUrl('index.php?' + params.toString()); + } + + getTopicUrl(id: number, limit: number, start: number): string { + const params = new URLSearchParams(); + if (id !== 0) { + params.set('storytopic', id.toString()); + } + if (limit !== 5) { + params.set('storynum', limit.toString()); + } + if (start !== 0) { + params.set('start', start.toString()); + } + return this.getUrl('index.php?' + params.toString()); + } + + getArchiveUrl(year: number = 0, month: number = 0): string { + const params = new URLSearchParams([ + ['page', 'archive'] + ]); + if (year !== 0) { + params.set('year', year.toString()); + } + if (month !== 0) { + params.set('month', month.toString()); + } + return this.getUrl('index.php?' + params.toString()); + } + + getModule(): BulletinModuleData | null { + return this.module; + } + + getTopic(topicId: number): BulletinTopicData | null { + return this.topics.findOne({ id: topicId }); + } + + getStory(storyId: number): BulletinStoryData | null { + return this.stories.findOne({ id: storyId }); + } + + getTopics(): BulletinTopicData[] { + return this.topics.chain().find().simplesort('title').data(); + } + + getStories(topicId: number, limit: number, start: number): BulletinStoryData[] { + const filter = topicId === 0 ? undefined : { topic_id: topicId }; + return this.stories.chain().find(filter).simplesort('posttime', true).offset(start).limit(limit).data(); + } + + getStoriesByMonth(year: number, month: number) { + const key = ('0000' + year).substr(-4) + '-' + ('00' + month).substr(-2); + const filter = { posttime: { '$regex': ['^' + key] } }; + return this.stories.chain().find(filter).simplesort('posttime', true).data(); + } + + countStories(topicId: number): number { + const filter = topicId === 0 ? undefined : { topic_id: topicId }; + return this.stories.count(filter); + } + + getArchiveYearRange(): { min: number, max: number } { + return this.counter.year; + } + + getArchiveCounter(year: number, month: number) { + const key = ('0000' + year).substr(-4) + '-' + ('00' + month).substr(-2); + return key in this.counter.count ? this.counter.count[key] : 0; + } + + async initialize(): Promise { + if (!this.isInitialized) { + try { + const response = await axios.get('/modules' + this.getUrl('index.json')); + const index = response.data as BulletinIndexData; + this.module = index.module; + index.topics.forEach((value) => { + this.topics.insert(value); + }); + index.stories.forEach((value, index) => { + const key = value.posttime.replace(/^(\d{4}-\d{2}).*$/, "$1"); + const year = parseInt(key.replace(/^(\d{4}).*/, "$1"), 10); + if (index === 0) { + this.counter.year.min = year; + this.counter.year.max = year; + } else { + if (this.counter.year.min > year) { + this.counter.year.min = year; + } + if (this.counter.year.max < year) { + this.counter.year.max = year; + } + } + if (key in this.counter.count) { + this.counter.count[key]++; + } else { + this.counter.count[key] = 1; + } + this.stories.insert(value); + }); + } catch (err) { + // ignore + } + this.isInitialized = true; + } + return this.isInitialized; + } +} + +export default BulletinContext; \ No newline at end of file diff --git a/src/bulletin/lib/BulletinStories.tsx b/src/bulletin/lib/BulletinStories.tsx new file mode 100644 index 0000000..55cd505 --- /dev/null +++ b/src/bulletin/lib/BulletinStories.tsx @@ -0,0 +1,49 @@ +import React from 'react'; +import { Helmet } from 'react-helmet'; +import { Link } from 'react-router-dom'; +import PageNotFound from '../../common/lib/PageNotFound'; +import { MultiLang } from '../../config'; +import Functions from '../../functions'; +import BulletinContext from './BulletinContext'; +import BulletinStoryItem from './BulletinStoryItem'; +import BulletinStoriesSelect from './BulletinStoriesSelect'; +import BulletinStoriesPageNavi from './BulletinStoriesPageNavi'; + +interface Props { + lang: MultiLang; + context: BulletinContext; + topicId: number; + storyNum: number; + start: number; +} + +const BulletinStories: React.FC = (props: Props) => { + const { lang, context, topicId, storyNum, start } = props; + const topic = context.getTopic(topicId); + if (topicId !== 0 && topic === null) { + return ; + } + const module = context.getModule(); + if (module === null) { + return ; + } + const titles = [Functions.siteTitle(lang), Functions.mlang(module.name, lang)]; + if (topicId !== 0 && topic !== null) { + titles.push(Functions.mlang(topic.title, lang)); + } + const stories = context.getStories(topicId, storyNum, start); + return
+ + {titles.reverse().join(' - ')} + +
{Functions.mlang('[en]Archive[/en][ja]アーカイブ[/ja]', lang)} |
+
+ + {stories.map((story) => { + return + })} + +
; +}; + +export default BulletinStories; \ No newline at end of file diff --git a/src/bulletin/lib/BulletinStoriesPageNavi.tsx b/src/bulletin/lib/BulletinStoriesPageNavi.tsx new file mode 100644 index 0000000..b991075 --- /dev/null +++ b/src/bulletin/lib/BulletinStoriesPageNavi.tsx @@ -0,0 +1,66 @@ +import React, { Fragment } from 'react'; +import { Link } from 'react-router-dom'; +import { MultiLang } from '../../config'; +import Functions from '../../functions'; +import BulletinContext from './BulletinContext'; + +interface Props { + lang: MultiLang; + context: BulletinContext; + topicId: number; + limit: number; + start: number; +} + +const BulletinStoriesPageNavi: React.FC = (props: Props) => { + const { lang, context, topicId, limit, start } = props; + const total = context.countStories(topicId); + if (start > total) { + return null; + } + const now = Math.ceil((start + 1) / limit); + const min = 1; + const max = Math.ceil(total / limit); + const prev = now === 1 ? 0 : now - 1; + const next = now === max ? 0 : now + 1; + let rangeMin = now - 3; + if (rangeMin < 2) { + rangeMin = 2; + } + let rangeMax = now + 3; + if (rangeMax > max - 1) { + rangeMax = max - 1; + } + const link = (num: number, el?: JSX.Element) => { + const label = el || num; + const url = context.getTopicUrl(topicId, limit, (num - 1) * limit); + return num === now ? {label} : {label} + } + const items: JSX.Element[] = []; + if (prev !== 0) { + items.push(link(prev, «)); + } + items.push(link(min)); + if (now - min > 4) { + items.push(<>...); + } + for (let range = rangeMin; range <= rangeMax; range++) { + items.push(link(range)); + } + if (max - now > 4) { + items.push(<>...); + } + items.push(link(max)); + if (next !== 0) { + items.push(link(next, »)); + } + const rangeS = start + 1; + const rangeE = (start + limit) < total ? start + limit : total; + + return ; +}; + +export default BulletinStoriesPageNavi; \ No newline at end of file diff --git a/src/bulletin/lib/BulletinStoriesSelect.tsx b/src/bulletin/lib/BulletinStoriesSelect.tsx new file mode 100644 index 0000000..1632bcc --- /dev/null +++ b/src/bulletin/lib/BulletinStoriesSelect.tsx @@ -0,0 +1,91 @@ +import React from 'react'; +import { RouteComponentProps, withRouter } from 'react-router-dom'; +import { MultiLang } from '../../config'; +import Functions from '../../functions'; +import BulletinContext from './BulletinContext'; + +interface Props extends RouteComponentProps { + lang: MultiLang; + context: BulletinContext; + topicId: number; + num: number; +} + +interface State { + path: string; + topicId: number; + num: number; +} + +class BulletinStoriesSelect extends React.Component { + + private STORY_NUMS: ReadonlyArray = [5, 10, 15, 20, 30]; + + constructor(props: Props) { + super(props); + const {topicId, num, location} = props; + this.state = { + path: location.pathname + location.search + location.hash, + topicId, + num, + }; + this.handleSubmit = this.handleSubmit.bind(this); + this.handleSelectTopic = this.handleSelectTopic.bind(this); + this.handleSelectNum = this.handleSelectNum.bind(this); + } + + static getDerivedStateFromProps(nextProps: Props, prevState: State) { + const { topicId, num, location } = nextProps; + const path = location.pathname + location.search + location.hash; + if (prevState.path !== path) { + return { + path, + topicId, + num + }; + } + return null; + } + + handleSelectTopic(event: React.ChangeEvent) { + const topicId = parseInt(event.target.value, 10); + this.setState({ topicId }) + } + + handleSelectNum(event: React.ChangeEvent) { + const num = parseInt(event.target.value, 10); + this.setState({ num }) + } + + handleSubmit(event: React.FormEvent) { + const { context, history } = this.props; + event.preventDefault(); + if (context !== null) { + const url = context.getTopicUrl(this.state.topicId, this.state.num, 0); + history.push(url); + } + } + + render() { + const { lang, context } = this.props; + const topics = context.getTopics(); + return
+
+ +   + +   + +
+
; + } +} + +export default withRouter(BulletinStoriesSelect); \ No newline at end of file diff --git a/src/bulletin/lib/BulletinStory.tsx b/src/bulletin/lib/BulletinStory.tsx new file mode 100644 index 0000000..c0cc1bf --- /dev/null +++ b/src/bulletin/lib/BulletinStory.tsx @@ -0,0 +1,58 @@ +import React from 'react'; +import { Helmet } from 'react-helmet'; +import { Link } from 'react-router-dom'; +import PageNotFound from '../../common/lib/PageNotFound'; +import { MultiLang } from '../../config'; +import Functions from '../../functions'; +import BulletinContext from './BulletinContext'; +import BulletinStoryItem from './BulletinStoryItem'; + +interface Props { + lang: MultiLang; + context: BulletinContext; + id: number; +} + +const BulletinStory: React.FC = (props: Props) => { + const { lang, context, id } = props; + const story = context.getStory(id); + if (story === null) { + return ; + } + const topic = context.getTopic(story.topic_id); + if (topic === null) { + return ; + } + const module = context.getModule(); + if (module === null) { + return ; + } + const titles = [Functions.siteTitle(lang), Functions.mlang(module.name, lang), Functions.mlang(story.title, lang)]; + const stories = context.getStories(story.topic_id, module.stories_of_cat, 0); + return
+ + {titles.reverse().join(' - ')} + +
{Functions.mlang('[en]Archive[/en][ja]アーカイブ[/ja]', lang)} |
+
+
+ +
+
+
+ + {Functions.mlang(topic.title, lang)} + +
+
+
    + {stories.map((story, index) => { + return
  • {Functions.mlang(story.title, lang)} ({story.posttime})
  • + })} +
+
+
+
; +}; + +export default BulletinStory; \ No newline at end of file diff --git a/src/bulletin/lib/BulletinStoryItem.tsx b/src/bulletin/lib/BulletinStoryItem.tsx new file mode 100644 index 0000000..8f5c03c --- /dev/null +++ b/src/bulletin/lib/BulletinStoryItem.tsx @@ -0,0 +1,51 @@ +import React from 'react'; +import { Link } from 'react-router-dom'; +import PageNotFound from '../../common/lib/PageNotFound'; +import XoopsCode from '../../common/lib/XoopsCode'; +import { MultiLang } from '../../config'; +import Functions from '../../functions'; +import BulletinContext, { BulletinStoryData } from './BulletinContext'; +import BulletinUtils from './BulletinUtils'; + +interface Props { + lang: MultiLang; + context: BulletinContext; + story: BulletinStoryData; + isList: boolean; +} + +const BulletinStoryItem: React.FC = (props: Props) => { + const { lang, context, story, isList } = props; + const topic = context.getTopic(story.topic_id); + const urlTopic = context.getTopicUrl(story.topic_id, 5, 0); + const urlStory = context.getStoryUrl(story.id); + if (topic === null) { + return ; + } + const { text, rchars } = BulletinUtils.getStoryText(story, isList, lang); + const remaining = lang === 'en' ? rchars + ' characters more' : '残り' + rchars + '字'; + return
+
+ + {Functions.mlang(topic.title, lang)} +  :  + {isList ? {Functions.mlang(story.title, lang)} : Functions.mlang(story.title, lang)} + +
+
+
+ +
+
+ {rchars > 0 && <>{Functions.mlang('[en]Read more..[/en][ja]続きを読む[/ja]', lang)} | {remaining}} +
+
+  {Functions.mlang('[en]on[/en][ja]投稿日時:[/ja]', lang)} {story.posttime} +
+
+
+
+
; +}; + +export default BulletinStoryItem; \ No newline at end of file diff --git a/src/bulletin/lib/BulletinUtils.ts b/src/bulletin/lib/BulletinUtils.ts new file mode 100644 index 0000000..8ef01fc --- /dev/null +++ b/src/bulletin/lib/BulletinUtils.ts @@ -0,0 +1,43 @@ +import { MultiLang } from '../../config'; +import BulletinContext, { BulletinStoryData } from './BulletinContext'; + +class BulletinUtils { + + private static contexts: Map = new Map(); + + private constructor() { + // blcok to access from outside of this class + } + + public static async getContext(mydirname: string): Promise { + let context = this.contexts.get(mydirname); + if (typeof context === 'undefined') { + context = new BulletinContext(mydirname); + await context.initialize(); + this.contexts.set(mydirname, context); + } + return context; + } + + public static getStoryText(story: BulletinStoryData, isList: boolean, lang: MultiLang): { text: string, rchars: number } { + const pages = story.text[lang].split('[pagebreak]'); + return isList ? { + text: pages[0], + rchars: pages.filter((value, index) => index !== 0).join('

').length + } : { + text: pages.join('

'), + rchars: 0 + }; + } + + public static getMonthLabel(month: number, lang: MultiLang): string { + const label = { + en: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'], + ja: ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月'] + } + return label[lang][month - 1]; + } + +} + +export default BulletinUtils; \ No newline at end of file diff --git a/src/common/AppRoot.tsx b/src/common/AppRoot.tsx new file mode 100644 index 0000000..cf7df19 --- /dev/null +++ b/src/common/AppRoot.tsx @@ -0,0 +1,67 @@ +import React, { Component } from 'react'; +import { ReactCookieProps, withCookies } from 'react-cookie'; +import ReactGA from 'react-ga'; +import { RouteComponentProps, withRouter } from 'react-router-dom'; +import Config, { MultiLang } from '../config'; +import Page from '../custom/Page'; + +interface Props extends RouteComponentProps, ReactCookieProps { } +interface State { + lang: MultiLang; +} + +class AppRoot extends Component { + + constructor(props: Props) { + super(props); + this.state = { lang: 'en' }; + if (Config.GOOGLE_ANALYTICS_TRACKING_ID !== '') { + ReactGA.initialize(Config.GOOGLE_ANALYTICS_TRACKING_ID); + } + } + + static getDerivedStateFromProps(nextProps: Props, prevState: State) { + const params = new URLSearchParams(nextProps.location.search); + const param_lang = params.get('ml_lang'); + const cookie_lang = typeof nextProps.cookies !== 'undefined' ? nextProps.cookies.get('ml_lang') : null; + let lang = param_lang || (typeof cookie_lang === 'string' ? cookie_lang : null) || prevState.lang; + if (lang !== 'en' && lang !== 'ja') { + lang = 'en'; + } + if (cookie_lang !== lang) { + if (typeof nextProps.cookies !== 'undefined') { + nextProps.cookies.set('ml_lang', lang, { path: '/' }); + } + } + if (prevState.lang !== lang) { + return { lang }; + } + return null; + } + + componentDidMount() { + const { pathname } = this.props.location; + if (Config.GOOGLE_ANALYTICS_TRACKING_ID !== '') { + ReactGA.set({ page: pathname }); + ReactGA.pageview(pathname); + } + } + + componentDidUpdate(prevProps: Props) { + const { pathname, search } = this.props.location; + if (Config.GOOGLE_ANALYTICS_TRACKING_ID !== '') { + ReactGA.set({ page: pathname }); + ReactGA.pageview(pathname); + } + if (pathname !== prevProps.location.pathname || search !== prevProps.location.search) { + window.scrollTo(0, 0); + } + } + + render() { + const { lang } = this.state; + return ; + } +} + +export default withCookies(withRouter(AppRoot)); diff --git a/src/common/XoopsPathRedirect.tsx b/src/common/XoopsPathRedirect.tsx new file mode 100644 index 0000000..aaf8a18 --- /dev/null +++ b/src/common/XoopsPathRedirect.tsx @@ -0,0 +1,40 @@ +import React, { Component } from 'react'; +import { Redirect, RouteComponentProps } from 'react-router'; +import { MultiLang } from '../config'; +import PageNotFound from './lib/PageNotFound'; + +interface Params { + module: string; + pathname: string; +} + +interface Props extends RouteComponentProps { + lang: MultiLang; +} + +class XoopsPathRedirect extends Component { + + getRedirectUrl() { + const { pathname } = this.props.location; + switch (pathname || '') { + case '/index.php': { + return '/'; + } + } + return ''; + } + + render() { + const { lang } = this.props; + if (this.props.location.pathname === '/') { + return null; + } + const url = this.getRedirectUrl(); + if (url === '') { + return ; + } + return ; + } +} + +export default XoopsPathRedirect; diff --git a/src/common/assets/images/mlang_english.gif b/src/common/assets/images/mlang_english.gif new file mode 100644 index 0000000000000000000000000000000000000000..4ff614eb6e91a3a1bd15910b176062815e5e1fa6 GIT binary patch literal 175 zcmZ?wbhEHbPMvkT)|82+yPeNgyybHcp!flwkm& zGzJDBDu4Ix-QBx)ckkZKfEVb1WI=W@aF{SiTS!<4G&VGI@N=oWIFP{5!q2Lsl3}3e i)W)i-G-pQOVg^=GC!rM&J|-NUq!GL-=B1$mgEau6X*loz literal 0 HcmV?d00001 diff --git a/src/common/assets/images/mlang_japanese.gif b/src/common/assets/images/mlang_japanese.gif new file mode 100644 index 0000000000000000000000000000000000000000..57682060bb4f074227d132cebc5647ab3937e8bc GIT binary patch literal 126 zcmZ?wbhEHb=Ksu@|I=pvKXV2sbcVtBE>PAu?ToQ8 z0}{{yu|awnIE)z>Ib=LGEO2CC<`YwyuwWrmD+7DFy%l literal 0 HcmV?d00001 diff --git a/src/common/assets/images/no_avatar.gif b/src/common/assets/images/no_avatar.gif new file mode 100644 index 0000000000000000000000000000000000000000..62fff0fda9e71efb4049f128f71b9702f2675e28 GIT binary patch literal 985 zcmbWy=}(#m0D$pVxs;g|l?|hgFtu73I!cV0n=!y9#no=oidxfnET-$6OCc;rZgJO%o7Nf}UeiqoatWxL*`w>_Hu*#aC4A>bnO!LY|` z(N~O#xp|pNx1L{?oth&%(b$vIC$%Q&Qr>2$b!gW=LW9l1gc#G^scy2*o}R^v<_Qui z4;_k|n!duUb@Rg0BK7jRR&Irq8rit{$IfX;Kq|;VfD{hO8Ho3*rh;~NOj54$Jnz|s z_~Dei%+58i4DHhv=1*BLrN(*2JZf#l)+{mlFI@wyYg8^eAd#YiTe9sONRS99j4)kZ zWbl$!PG)zd^n+@K-UPN^ho~BV?ME%TsHqwjL7If=+cU!QR@SPs;`=w$cu5II4U@9PQdmcEZvneS9_1~@6w{g4 zWC=Ll&+SZ-`d^=_lY({m`P?rF^2AKuhPS#?z2Vyu+gu`fopuNMOq28HfW%Y~00qAK E56O(&lK=n! literal 0 HcmV?d00001 diff --git a/src/common/assets/images/pagact.gif b/src/common/assets/images/pagact.gif new file mode 100644 index 0000000000000000000000000000000000000000..3f5b855afc641760ce695f2cdb70dcde94ec0a09 GIT binary patch literal 121 zcmZ?wbhEHb6l4%#Sj56`W$%=jV8>Y#>i<65`~Uxc1{hHM$->CMz`~#d5&)@XV7Bwv zbZ4W=D#z8l&K`-s4@4fR6qV?EBECk-i^)L1C-eF>v)v%yu4|?rc<9 z<+z&H*(34yfyg73q7r>i#Mel9F&PN>WM02!)*Jl&-0R)*{3Tc(b+{+Tply-5Ihh SYU2u#Ws#BVZ-g>2SOWkpSt^47 literal 0 HcmV?d00001 diff --git a/src/common/assets/images/rank3dbf8e94a6f72.gif b/src/common/assets/images/rank3dbf8e94a6f72.gif new file mode 100644 index 0000000000000000000000000000000000000000..1c7c979b8af21c0d2aaa8490fbd36066cede5a74 GIT binary patch literal 905 zcmV;419tpJNk%w1VMzcD0QP?X;^N}-^YiiX@#Ev;>gww3?Cjs)-`?Kd>FMe4@bKp5 z=GxlY^78WQ>+9s?lq{^z_`^+~?=#@9*#b+ELrv+x7MJ#(+WDePo+tK9poG z;*M?q?Tx~GWazlK{@hWUdT_*~mHzOG>$*|)_V)bDALYu8h;C%%!C=gYIM|YgpLb{W z$3geRB;IITo|1^GgJ#^UTHCFo>9DNMy}Y$_SJ9qE^2J*J`^v$Wdi3acjAKlpgLu4) zS@qLQ|HvEv+EBlJV*cJx{oruJePR6VfBx@^=;-MG$r!|mNdC+>xq?vHi(IgWZuQH4 zzJ6t=eQ4vbljoz7wvL9pw6u3-ViH!{l1&xl7l8KLzl1*`6WJ@hqm71KMppp)Jetf7B zm8Yt!t*R8LdxI}s8FpG&IVUzAP(pBmx4FB$zrn+Q2Lk|o00I$y27T77e+JIb3>Vba zeb@&8&(S4(2G0-JR49o(V~y?a@re!=iG2o*4%mbGjRyD=^x%M`6>>sULWEG^LO}`w z?0fh}0Rw{+BThu561O*flBoH7V0X2+*AWVokb0(jH zE*0?UIrHYADNkf*V8KL9nJkTvDrM>vY9a&_5G***rvL&6jS%obV1cVwuvfE|?fO;H zoEc{3DE@gHm*NBh1LPvXtCw#jJW|{^p$J$oMLz^e065&>!s3UB9VaT1!pNNwUfy&# zB4!7hHi9Ty#;lpMXV8Bh6bQgN0D}k-Tr1cj2*Bz9uwUb5Fd>hit_)fWXE0lk2o)y6 z07>Fv1B^z;lP_=nJkf*!sZjY@@EFkq0Di*zDZstab@AcL52A5~2#GW}!1$=rh`oFG z^66V5AfNyQKLP+ifFt}Bpa6ga47i^F4g4p-00?6IOU(h8rdV fK_3eY_|pInG@<~BCia11BM<}znE*YdzQtV<4?nDPgPS46?+U;KG|I2 z8#EJIWuJCQtd&Wm%gY)jW1dUfmeBR99JP34L#cob%GGHaG&Z2$TGwyQtCl9#q*8;9 zBcG?sIirTP&Up@Vkqhb--AmJ~4dK%r?F#|es+ko^XGSF4Au(e_KGUa|>V{u!ZplWq za@H(+0%C)(dT8bO@Jr6*3dEZQJ2z$+YO!d8&l7Q9=+_7I@`CgibdJ^ zr3MnQCqfA}p`?$mF&VnW?y%a6DLW3m-t9MgvL|}`mb*%-t^HeuU0fZ#ev-T8JFk4M zD9JDcxrdVKc|~y>^r-%5{3u>JY+2RL-P<#CmJxWSR7XD9NRRvLxA!LoA+G?hzuJtVUKY=O66bZiSrWS2ggYKQZ%z=A;Kd8lT&Eti>H#Tzjap; bTJsN4-PDq|2WeEo1x8nU**9lxfJ^@Y9kgU9 literal 0 HcmV?d00001 diff --git a/src/common/assets/images/rank3dbf8ea81e642.gif b/src/common/assets/images/rank3dbf8ea81e642.gif new file mode 100644 index 0000000000000000000000000000000000000000..50f3de786e3763d6643cb1cefad69d6d322aae46 GIT binary patch literal 894 zcmV-^1A+WUNk%w1VMzcD0QP?X?d|R2;^N`q;qLD4^YioLgwv>-{0Qe z-s$P-^78WV@bK&F>*nU>|JqUH(T3?T!85aM7Md=(xC#eRlQBe(kMiwRBg;fI;1WWW0-65fJk=T-k{?9tunL43^c&wC-!=_T%%EtWAJ;aGf|NF}K$*|?-cXxwXxWQg_rxUp?SJ>=q|Uv(@9*#B%8jsxZsoyXtAl3St)r)XXw|WCu3K8w zdt?6bivR79h;C%`=y?0#a{ls(jAKmv%pbOnhMQzQytK5GWG?Bjtjvfwr-C^D$Q$C0 zZRf;o|JqRg@QS{EW!ZgX=;-L%+uPXK*w@$B-QC^x_V(G?+5i9lA^8La004ggEC2ui z07(E106+)-fPaF5AYfO6h>3-ViH(bmjSdqBkcpC%kW)HGG#nc%m71KMpqZPUpOp~< ztOEcNs;pS9e1ktGcVQ`3JXs_fc1==(x4FB$zrn+Q#k#z{z`}wF1pxv93`hV80^P8G z3IWyu27Lnw))e1rWQjH*jqL95iSmf=jS=620tt-;`vg%?0BJ@K43!WWM3_*}!iIt# zFdzu=0RexBfP64g1OgohQB=SQf=DArk03>o9AvWN$B-itU8sPiK?4If2MmWq2PLCBdhIG6}> z3|TT|%a}F);T(B#<;$4`1vo%}fCUQ-EVyP+L64xX3|i}M&EUZvK}p`E84^bcl{Q2g z1s`7gc=ANci5o}Ws6qe$*Z~}vfH+Zw0@<;1N91ON2PidKm^s0wQTg-f*SAmf9=&?@ zkq{U-@Bn~;0tn=1fCCr!SHJ>@$Wa0sF8q-L7dv>-h=L3{2%&_DP}tyu5jOIG022f_ UfB*$h(8vV=_#q;R7zF|VJFmCidjJ3c literal 0 HcmV?d00001 diff --git a/src/common/assets/images/rank3dbf8eb1a72e7.gif b/src/common/assets/images/rank3dbf8eb1a72e7.gif new file mode 100644 index 0000000000000000000000000000000000000000..64d8f29673326a090371735557325997306696f3 GIT binary patch literal 856 zcmV-e1E>5)Nk%w1VMzcD0QP+V?d|RJ^Yj1OQR3p_?(Xj6(U^cW2+<-`?Kdo|1^_>gw{vTK@8hn|g4+ePXU#TIsN?{>(S~;c};fIREX9 z^~-+Pl7|2L%8z|^=fAqEgJ$B6ZRohTj(TOrfIHhJG<-uUVmwMEIUEHi%<;soz+)=}QVgJb({@zf-rc&8`WaF@t z_vED8t)u_zmHf;f#ED3hWGd2i)q7+9`s4lJaR2R)|HvD) zbXVER#=Nw&{_l$Z@QU~3)2DrC_Qyg0$QtJ6=Ire3<>lq@@bK&F>)P7d^78WF;Nb7? z@7&zn3-ViH(bmj)stlZf|RoC?*VB7-%h+nw*}Xo1LGKnWdwU zbOZ!)1OR-4FA7dvMo=C|VJBG?R)V#+xx2l;!F|KHy1c%?!nVxD&&dx10|x^JcmxjF zadUz<3yE4EjpXL&iRy^w>E-Y2hy~(^aSxCkW)zc%{QUhB6mTHHeg^xf3E-en5g;y- z2uL7+NeT@l5Iu}IvEs#ygEmT}Xc41Eh$B6k9K=Qqfi?!(zy#nxpCBF_j;LthLkEo- zjd1GZ=@V!op*ws244N}((MCe#2&wbnz#1WRAmNB|CE?bt2ETgcnlMj<0{=if=>o%` zTDESr*R~z_cJ4m_5$+5~q=d+iA!WWu*+6Cjf+jWu_5B-oaN)y=`z!`5n6P2Qiv3b{ zd^xgJH~~V74gg2Z9zio?Oi2S~36?4l8l_&{`gQC?vst@_EnBs2+l}-T06?7ho4tcB z1o5(BhlC6)#xzpS+&OgViKsV!9)0@q?bjQ*iD1AD8vq6h2tg#GM2{SO#Dt)7rcwL% i@#oi1bRWKa`u4f!pMH(7F@PNr^g+M@1vJ!0AOJfF<=RUC literal 0 HcmV?d00001 diff --git a/src/common/assets/images/rank3dbf8edf15093.gif b/src/common/assets/images/rank3dbf8edf15093.gif new file mode 100644 index 0000000000000000000000000000000000000000..704398e896f9b1406e07ec0ceb8b7f89cdef35fa GIT binary patch literal 789 zcmZ?wbhEHb^km>=_!iIb|5o6>y3~IkyZ&6T{eLUq-@SlCH7R%2ME(2J`R}~d)#~KK zwTb`Ucg>sB@$ZcJ>s^8WPe||Sj@;Q4FeOFrW_Qf72FE{Vnr2@=9j1MuT8o*&+YBn z^qaLQFLvx$*j#aU_VjIiZ3m}Ub>yYo%ZQnspK+wq-9ZSU;u?(J)v&^2j- z2(uC=pF_mt=`&}~oi=0EoOw$YE?=;$DcIJBOWH)s$&iiFGi2@hjhnY_-?@9krY+lc z?22D^c;B&uC-)rLf4nImsM9aD_v-bVowqw~+`9JQZpZ!RhrKc`8k0L-zkS#A;nU|g zU*o@Y271{WGq5m-R2VK|RjT{Pz@?H=AaJOjkzLH@2LGc&oqXC_Q*M0d?iXSYQkd9~ z*wOAL@7$+TX%y%+QN?!=3+LpgK2r^&)v6X9<+ht=_nPtV&B+-79#$1=ZUpJSytK?~ z=BZ+>tFl*JxJ@Jk6%M;iljRW*;Vg0qxVAQSf17Odx6_g9;))J-sb+_1$80UWz0X&B z`dS6C7@dg52IV6yY`qNJYB>^xN=KWy<^5zVijq%tt6GbtB%SPK*IRd`qhL|s^YaVc zr~8#iZOOQ_%yxH}tn}B{SDTDNc3gPK%_9)%VRGs0ZS#VMogLr*$=3XM_w@K&@$^0$ H0S0RT(G+NM literal 0 HcmV?d00001 diff --git a/src/common/assets/images/rank3dbf8ee8681cd.gif b/src/common/assets/images/rank3dbf8ee8681cd.gif new file mode 100644 index 0000000000000000000000000000000000000000..95428a8b96f24e07c3fc77cfe68812bf7998de9b GIT binary patch literal 779 zcmZ?wbhEHb^km>=_!i9Y_vNGicTRk}cH3%z@ir~(MW*}j6q^O*O@EWE?j(0y zNp4-ASAI8U^4BJISR&j8$8R_W3rwe!{7jlKUrAW8G;#fK+XZhi39uphTx_q7Du+`j?UKh z&ff0czP1TnlO|ZIn`oNqc}$)@bN1Y6GiJ@1w`Ae+1hv>whWQ@sNm4mq!u$n z@TmJF9tAU#OD8TWdra)~DElK(^yJu7_1I}CokoHz>{1`@o{7v~?l;H2(n-sKk)gZF zrB_L}DkSdGvUl^;Hho;k$i%|ADXw+_bC<%Zu#H)+2d=&r*$}>2?Z&OI*;ltDXPn-} zyL#H%NN&Fdk(r=}dHdMf=xqh}k5=;k Jm*rrv1^^~_L`?ty literal 0 HcmV?d00001 diff --git a/src/common/assets/images/rank3e632f95e81ca.gif b/src/common/assets/images/rank3e632f95e81ca.gif new file mode 100644 index 0000000000000000000000000000000000000000..224fbaaa5c0f968fb105353d0e15ede8c3634735 GIT binary patch literal 475 zcmV<10VMuMNk%w1VMzcD0Q4UK_V)Jm_4V}h^z-xc^78WW@$v8P@9ysI?d|RC?Ck67 z>+0(2>FMd{=;-I?=jP_-<>lq%cU3-l=!2?hupIPif75fcIuB;Wd#h)y! z>nN*~acOw({w~DA-Ne5k zW2S)oL!}>_K7QhR J+g6#u8UXBwP#gdN literal 0 HcmV?d00001 diff --git a/src/common/assets/images/smil3dbd4d4e4c4f2.gif b/src/common/assets/images/smil3dbd4d4e4c4f2.gif new file mode 100644 index 0000000000000000000000000000000000000000..ee53c7d186c7113f84aaa0c12d1a9b6d4567aa42 GIT binary patch literal 204 zcmZ?wbhEHbFp<&)wLfCdgn70NsH>R{#J2 literal 0 HcmV?d00001 diff --git a/src/common/assets/images/smil3dbd4d6422f04.gif b/src/common/assets/images/smil3dbd4d6422f04.gif new file mode 100644 index 0000000000000000000000000000000000000000..9a75a92b33fc6aeb42ce95b0dc293089925d2681 GIT binary patch literal 174 zcmZ?wbhEHbk^W_CtmW{!ey zW_oFAj*dcvzkfimf^%t7s)AEdVsT~;gW^vXRt5%k1|5(lkbw@&eif^(?e%F%>e|Z0 zlhijeL^My(oS4DpgY&^ Zev$gu%th963>Qx8O0E9lJduIH8UTjBLEr!Y literal 0 HcmV?d00001 diff --git a/src/common/assets/images/smil3dbd4d75edb5e.gif b/src/common/assets/images/smil3dbd4d75edb5e.gif new file mode 100644 index 0000000000000000000000000000000000000000..b1baee2b73b59b56adeb7bfc88660a8de77e94b1 GIT binary patch literal 204 zcmZ?wbhEHbTqjKs_w1>el{($pLsg$RHDfM5mZ(xg-cr=rB-%p3;ApDe5l3_J`v zAZ;Lv99TjocuHo?6=^(cZOAAr<8++U*@Kt);V$QeLEcRn(QEoDcK)0nknllR!n;MJ xEor8%_SVCSPkB^4)Ta2P{GMyZa`QwA7vD)4*N79Jaz$=s9dI!3P#0vd1^`?kNjCrh literal 0 HcmV?d00001 diff --git a/src/common/assets/images/smil3dbd4d8676346.gif b/src/common/assets/images/smil3dbd4d8676346.gif new file mode 100644 index 0000000000000000000000000000000000000000..5777f687dd2a7c9c97ae4e8f973770c0ba509053 GIT binary patch literal 176 zcmZ?wbhEHbY42nNlSQ!}D8FWBeKn6N62UM)Ow%3Q@QHF5hjN}H* zgb0aSPHY)gQ=VOkcztYVQbx*c%{PDKP6!-lPBIcuW8$6Qyr98OS?03kDz~Y=D@v#2 X@Gvzko1uP{Q^roLc}o|gFoQJ!@8~}@ literal 0 HcmV?d00001 diff --git a/src/common/assets/images/smil3dbd4d99c6eaa.gif b/src/common/assets/images/smil3dbd4d99c6eaa.gif new file mode 100644 index 0000000000000000000000000000000000000000..87a792e89feed8fc48b155565ad06d33e12b61ae GIT binary patch literal 207 zcmZ?wbhEHbTqjKs_w1>el{($pLsg$RHDfM5mZ(xg-cr=rB-%p3;ApDe5l3_J`v zAZ;Lv99Y69cuHo?6=^(cZOAAr6Lp+d(UiyKHlM4PE@u!^fz>po>&){55*U7nvNADo zId42ML-f|ehAK88_9gxkgs++%lUFn|n%U%R>~1KwPUM8#ZtIm2@7O-6FfmvI03ESJ Ak^lez literal 0 HcmV?d00001 diff --git a/src/common/assets/images/smil3dbd4daabd491.gif b/src/common/assets/images/smil3dbd4daabd491.gif new file mode 100644 index 0000000000000000000000000000000000000000..95a63f2d6ae0b68ec902399c3dd2089ce07db543 GIT binary patch literal 170 zcmZ?wbhEHb;Wd#h)y!3=HfHIv_nD109&XDppD8a`~Zt<8 literal 0 HcmV?d00001 diff --git a/src/common/assets/images/smil3dbd4dbc14f3f.gif b/src/common/assets/images/smil3dbd4dbc14f3f.gif new file mode 100644 index 0000000000000000000000000000000000000000..77c71c07be59af34beca0c77f39fa48450c37fb4 GIT binary patch literal 210 zcmZ?wbhEHbgxLc6$23b2ZD19|4%af-@@>3F2nzSlmGt}{{R2@|NpQ5 zKLsg(0L6cbzM0t>iJ3VHzM1KzsX00d5&r%G!3xf$NvR4>MTy0kISh(FSy&kuco}p+ zdO#LAutaU}gxLc6$23bKgaNIF2n!7!vD80{0DM@;NRr`CxMLP|FjsU zO`B$HZ2T{m`TzgdAk{Y z42nNlSQ!`u8FWC#f*j_+ny0|vvLs{D#7LG#g$-|4OE@sA9Od4AFkm|Kd~XH`0k@Ux z3pZ%2iEupR+#)O!v+;FKh)h+ioyaK_q2&^4CzK|B=)BON`e3KF9OGFDp4B_lquALE i8kwS98TqUY_-bPunK&j+WODORWni1hR<5DQU=09d9aH20 literal 0 HcmV?d00001 diff --git a/src/common/assets/images/smil3dbd4ddd6835f.gif b/src/common/assets/images/smil3dbd4ddd6835f.gif new file mode 100644 index 0000000000000000000000000000000000000000..01b5a602484a21464d341220b76478fc7f9ddfb4 GIT binary patch literal 202 zcmZ?wbhEHbY42nNlSQ!{N7<52dK^8f%1PORnX3Y&@ zNw$_a(kLTcE}^CobmYN4myU^UnGK&Z7VlA9v3Od7hJ^@M`@yVh2Mx0KT`0QpdS{Ay h9Bb%L&z+$mfm&}QCmv{?5aIJo<5k2PrA`J0YXCI9L-YUu literal 0 HcmV?d00001 diff --git a/src/common/assets/images/smil3dbd4df1944ee.gif b/src/common/assets/images/smil3dbd4df1944ee.gif new file mode 100644 index 0000000000000000000000000000000000000000..49697c5836b663192aeb9625e1586f6c02fb26be GIT binary patch literal 678 zcmZ?wbhEHb*M`@asCm_c;uIPci)3%;4(k%D}+z{}sdUjEw)=xBr_lEGr{}g>QvojJia}<0t(@RrxbQB`| z{R4s(oJ*5Z6`YC^i!*Z=6o0a?iU1YsfD8e-)qyotL7^)+vM)v1)BkDMxm|t-js)cU zxtd7+Js`it-AP8OH$257Nk!8_e2dV;3u==*xV;K(6l_FJx`<5g;bB{EV|k}&s_f>u zJ^L4(7CQX8p?bBdc0#QlzmPyjxP6NrpHohRk+X{;*k&#U9tIso21W*6AY@?io#46c zf@Si#sIDK(hLLB|jTV+nc{WpV-hopJg%y_~`3@%XG)#LS&cVUKx%gy*iij|mQ#ONd z2M0^D4-G#6m>0b_;>)%Af23QQ*s z8eFuP<{P|M&}7zuZ03z8u6&y-w~ou7quC&4QM9g7qK#5t+|!e59Bd}td(1V_!$!_S ipQ-JH%7pfSCl1~&f*I!pryqR$W0%*HueV$k8LR<8EC4|O literal 0 HcmV?d00001 diff --git a/src/common/assets/images/smil3dbd4e02c5440.gif b/src/common/assets/images/smil3dbd4e02c5440.gif new file mode 100644 index 0000000000000000000000000000000000000000..004261bd7ff563a35837e8009b80ef0d9a2029b4 GIT binary patch literal 263 zcmZ?wbhEHbd~CZ#Gk6(tsD<}fJ!WMO4z5Mj^(nFw;218cm3YF9vH-xG&5r(OwpFa=InV5a|2 z!Z`DfP)ot47ZVv88?#b1CgrU5&=Z>N$kP($mmxFLPeY$YQ{cm{2@MLzOO}NOeOnw+ geDv+r*Ifq_l<(NHHVL*k`6Y37a+a_wDKc0C08ds}VgLXD literal 0 HcmV?d00001 diff --git a/src/common/assets/images/smil3dbd4e1748cc9.gif b/src/common/assets/images/smil3dbd4e1748cc9.gif new file mode 100644 index 0000000000000000000000000000000000000000..50f9984accfae423e00821df1debc9bbfc79aba0 GIT binary patch literal 209 zcmZ?wbhEHb3F2nzSlmGt}{tp7j|Nnpe z|0z%&3Kah-`etTlBxdF)_-3Y;rsn7d~CZ#Gk6(tsD<}fJ!WMO4s;APMO zX#!c~z!JH^Q!;C=NaI;+O-EswSqEkw5C}T#u;+cknk$PGZmF$L?qp)RtS%zKAndWE zVZosQ9h3BBz_d(VUkEmTJ8JaPph?Np-m?PgEat8 C@lb65 literal 0 HcmV?d00001 diff --git a/src/common/assets/images/smil3dbd4e29bbcc7.gif b/src/common/assets/images/smil3dbd4e29bbcc7.gif new file mode 100644 index 0000000000000000000000000000000000000000..4a96ea1baa5a12561f5e74249bf8a56e512f93ee GIT binary patch literal 492 zcmZ?wbhEHbUIrbI z7LY{_Eb$vWBeUj~a4;TtCbv<ZNFNG`%&x~-ghN1jI!qx8vO+NrF0VTVs}xtQ<<3~Rm0OB~N#Xj;I3@;b047&}1^@s6 literal 0 HcmV?d00001 diff --git a/src/common/assets/images/smil3dbd4e398ff7b.gif b/src/common/assets/images/smil3dbd4e398ff7b.gif new file mode 100644 index 0000000000000000000000000000000000000000..15402e7b7c22082d75c6497226300f918e910ae8 GIT binary patch literal 205 zcmZ?wbhEHbTqjKs_w1>el{($pLsg$RHDfM5mZ(xg-cr=rB-%p3;ApDe5l3_J`v zAZ;Lv99TjpcuHo?6=^)XouNh0;NZv7I|f0A9rnBrSaW5P!Y#G+sdZ%w0}~j2h&pQV y9CZo~%V}?3CFwCEph5QKvxgjZEs>nuBD^PET_bJ;)$GrDyCi9a^pVLN4AuaK4ow*V literal 0 HcmV?d00001 diff --git a/src/common/assets/images/smil3dbd4e4c2e742.gif b/src/common/assets/images/smil3dbd4e4c2e742.gif new file mode 100644 index 0000000000000000000000000000000000000000..99368ba26abf66bbf3cad6436aa012f1dadebc6f GIT binary patch literal 4959 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 { + const { lang, className } = props; + const params = new URLSearchParams(props.location.search); + const flagLang = lang === 'en' ? 'ja' : 'en'; + params.set('ml_lang', flagLang); + const url = props.location.pathname + '?' + params.toString(); + return {langResources[flagLang]}; +} + + +export default withRouter(LangLink); diff --git a/src/common/lib/Loading.tsx b/src/common/lib/Loading.tsx new file mode 100644 index 0000000..13ec917 --- /dev/null +++ b/src/common/lib/Loading.tsx @@ -0,0 +1,12 @@ +import React from 'react'; +import Spinner from 'react-spinner-material'; + +const Loading = () => { + return ( +
+ +
+ ); +} + +export default Loading; \ No newline at end of file diff --git a/src/common/lib/NoticeSiteHasBeenArchived.tsx b/src/common/lib/NoticeSiteHasBeenArchived.tsx new file mode 100644 index 0000000..c44a297 --- /dev/null +++ b/src/common/lib/NoticeSiteHasBeenArchived.tsx @@ -0,0 +1,15 @@ +import React from 'react'; +import { MultiLang } from '../../config'; +import Functions from '../../functions'; + +interface Props { + lang: MultiLang; +} + +const NoticeSiteHasBeenArchived = (props: Props) => { + const { lang } = props; + const notice = '[en]This site has been archived since FY2019 and is no longer updated.[/en][ja]このサイトは、2019年度よりアーカイブサイトとして運用されています。[/ja]'; + return

{Functions.mlang(notice, lang)}

; +} + +export default NoticeSiteHasBeenArchived; \ No newline at end of file diff --git a/src/common/lib/PageNotFound.tsx b/src/common/lib/PageNotFound.tsx new file mode 100644 index 0000000..309ca2c --- /dev/null +++ b/src/common/lib/PageNotFound.tsx @@ -0,0 +1,54 @@ +import React, { Component } from 'react'; +import { Helmet } from 'react-helmet'; +import { RouteComponentProps, withRouter } from 'react-router'; +import { MultiLang } from '../../config'; +import Functions from '../../functions'; + +interface Props extends RouteComponentProps { + lang: MultiLang; +} + +class PageNotFound extends Component { + + private url = '/'; + private timer: NodeJS.Timer | null = null; + + goToTopPage() { + if (this.props.location.pathname !== '/') { + if (this.timer) { + clearTimeout(this.timer); + } + this.timer = setTimeout(() => { + this.timer = null; + this.props.history.push(this.url); + }, 5000); + } + } + + componentWillUnmount() { + if (this.timer) { + clearTimeout(this.timer); + } + } + + render() { + const { lang } = this.props; + if (process.env.NODE_ENV === 'production') { + this.goToTopPage(); + } + return ( +
+ + Page Not Found - {Functions.siteTitle(lang)} + +

Page Not Found

+
+

The page you were trying to access doesn't exist.

+

If the page does not automatically reload, please click here

+
+
+ ); + } +} + +export default withRouter(PageNotFound); \ No newline at end of file diff --git a/src/common/lib/XoopsCode.tsx b/src/common/lib/XoopsCode.tsx new file mode 100644 index 0000000..033d295 --- /dev/null +++ b/src/common/lib/XoopsCode.tsx @@ -0,0 +1,140 @@ +import React, { ReactElement } from 'react'; +import ReactHtmlParser, { convertNodeToElement } from 'react-html-parser'; +import { HashLink } from 'react-router-hash-link'; +import { MultiLang } from '../../config'; +import Functions from '../../functions'; + +interface Props { + lang: MultiLang; + text: string; + dohtml?: boolean; + dosmiley?: boolean; + doxcode?: boolean; + doimage?: boolean; + dobr?: boolean; +} + +const preConvertXCode = (text: string, doxcode: boolean): string => { + if (doxcode) { + return text.replace(/\[code\](.*)\[\/code\]/sg, (m0, m1) => { + return '[code]' + Functions.base64Encode(m1) + '[/code]'; + }); + } + return text; +} + +const postConvertXCode = (text: string, doxcode: boolean, doimage: boolean): string => { + if (doxcode) { + return text.replace(/\[code\](.*)\[\/code\]/sg, (m0, m1) => { + const text = convertXCode(Functions.htmlspecialchars(Functions.base64Decode(m1)), doimage); + return '
' + text + '
'; + }); + } + return text; +} + +const convertClickable = (text: string) => { + text = text.replace(/(^|[^\]_a-zA-Z0-9-="'/]+)((?:https?|ftp)(?::\/\/[-_.!~*'()a-zA-Z0-9;/?:@&=+$,%#]+[a-zA-Z0-9=]))/g, (...matches) => { + return matches[1] + '' + matches[2] + ''; + }); + text = text.replace(/(^|[^\]_a-zA-Z0-9-="'/:.]+)([a-zA-Z0-9.!#$%&’*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)+)/g, (...matches) => { + return matches[1] + '' + matches[2] + ''; + }); + return text; +} + +const convertXCode = (text: string, doimage: boolean): string => { + // TODO: implement + return text; +} + +const convertSmiley = (text: string) => { + // TODO: implement + return text; +} + +const convertBr = (text: string): string => { + return text.replace(/(\r?\n|\r)/g, '
'); +} + +interface TransformParsedNode { + type: string; + next: object | null; + prev: object | null; + parent: object | null; + name: string; + attribs: any; + children: object[]; + data: string; +} + +const cssConvert = (text: string): object => { + const ret: any = {}; + text.split(';').forEach((line) => { + const line_ = line.trim(); + if (line.length === 0) { + return; + } + const kv = line_.split(':'); + const key = Functions.camelCase(kv[0].trim()); + const value = kv[1].trim(); + ret[key] = value; + }) + return ret; +} + +const transform = (node: object, idx: number): ReactElement | null | void => { + const node_ = node as TransformParsedNode; + if (node_.type === 'tag' && node_.name === 'a') { + const url = (node_.attribs && node_.attribs['href']) || '/'; + const download = (node_.attribs && node_.attribs['download']) || ''; + const rel = (node_.attribs && node_.attribs['rel']) || ''; + const klass = (node_.attribs && node_.attribs['class']) || ''; + const target = (node_.attribs && node_.attribs['target']) || ''; + const isFile = download !== '' || /\.(zip|pdf|png|gif|jpg|gz|bz2|xz|mpg|mp3|mp4)$/i.test(url); + const isExternal = /^(_blank|_top|_parent)$/.test(target) || /external/.test(rel) || /external/.test(klass) || /^(mailto|https?:?\/\/)/.test(url); + if (!isFile && !isExternal) { + const style = (node_.attribs && node_.attribs['style']) || ''; + const title = (node_.attribs && node_.attribs['title']) || null; + return + {node_.children.map((value: object, index: number) => { + return convertNodeToElement(value, index, transform); + })} + ; + } + } + if (node_.type === 'tag' && node_.name === 'img') { + const src = (node_.attribs && node_.attribs['src']) || ''; + node_.attribs['src'] = src.replace('`XOOPS_URL`', process.env.PUBLIC_URL); + return convertNodeToElement(node_ as object, idx, transform); + } +} + +const XoopsCode = (props: Props) => { + const { lang } = props; + let text = props.text; + const dohtml = !!props.dohtml; + const dosmiley = !!props.dosmiley; + const doxcode = !!props.doxcode; + const doimage = !!props.doimage; + const dobr = !!props.dobr; + text = preConvertXCode(text, doxcode); + if (!dohtml) { + text = Functions.htmlspecialchars(text); + text = convertClickable(text); + } + if (dosmiley) { + text = convertSmiley(text); + } + if (doxcode) { + text = convertXCode(text, doimage); + } + if (dobr) { + text = convertBr(text); + } + text = postConvertXCode(text, doxcode, doimage); + text = Functions.mlang(text, lang); + return <>{ReactHtmlParser(text, { transform })}; +} + +export default XoopsCode; \ No newline at end of file diff --git a/src/config.ts b/src/config.ts new file mode 100644 index 0000000..0b26444 --- /dev/null +++ b/src/config.ts @@ -0,0 +1,18 @@ +const SITE_TITLE = 'INCF Japan Node'; +const SITE_SLOGAN = 'Top'; +const GOOGLE_ANALYTICS_TRACKING_ID = 'UA-2365647-1'; +const XOONIPS_ITEMTYPES = ['journal', 'article', 'generaldata']; +const PICO_MODULES = ['aboutus', 'aini', 'hackathon', 'joinus', 'link', 'nbni', 'program', 'publication', 'resource', 'tutorial']; +const BULLETIN_MODULES = ['news']; +export type MultiLang = 'en' | 'ja'; + +const Config = { + SITE_TITLE, + SITE_SLOGAN, + GOOGLE_ANALYTICS_TRACKING_ID, + XOONIPS_ITEMTYPES, + PICO_MODULES, + BULLETIN_MODULES, +}; + +export default Config; \ No newline at end of file diff --git a/src/custom/ContactUs.tsx b/src/custom/ContactUs.tsx new file mode 100644 index 0000000..13a024b --- /dev/null +++ b/src/custom/ContactUs.tsx @@ -0,0 +1,43 @@ +import React from 'react'; +import { Helmet } from 'react-helmet'; +import { Link } from 'react-router-dom'; +import NoticeSiteHasBeenArchived from '../common/lib/NoticeSiteHasBeenArchived'; +import Config, { MultiLang } from '../config'; +import Functions from '../functions'; + +interface Props { + lang: MultiLang; +} + +const message = { + ja:

+ INCF日本ノードの事務局は2005年に理研BSI神経情報基盤センターとして設置され、2018年4月より理研CBS神経情報基盤開発ユニットに引き継がれ、国内外の多くの皆様のご協力を得て、運営して参りました。 + CBSにおけるニューロインフォマティクスの新たな方向性を探る中で、神経情報基盤開発ユニットは日本ノード事務局の任を2019年3月末日にて終了することとなりました。 +

, + en:

+ Secretariat of the INCF Japan Node (J-Node) was launched in 2005 as the starting of Neuroinformatics Japan Center, RIKEN Brain Science Institute (BSI). + In April 2018, J-Node secretariat was inherited to Neuroinformatics Unit, RIKEN Center for Brain Science (CBS). + However, based on reconsideration at CBS, closure of J-Node secretariat at the end of FY 2018 has been decided. + Accordingly, the collaborative development of neuroinformatics platforms will finish. + Each J-Node related site is going to be transferred to a new managing form. +

+}; + +const ContactUs: React.FC = (props: Props) => { + const { lang } = props; + const title = Functions.mlang('[en]Contact Us[/en][ja]お問い合わせ[/ja]', lang); + return
+ {title + ' - ' + Functions.mlang(Config.SITE_TITLE, lang)} +

{title}

+ + {message[lang]} +

+ {Functions.mlang('[en]Please see the details[/en][ja]詳細についてはこちらをご覧ください[/ja]', lang)}: {Functions.mlang('[en]Closure of Secretariat of the INCF Japan Node[/en][ja]INCF日本ノード事務局終了のお知らせ[/ja]', lang)} +

+

+ {Functions.mlang('[en]Thank you for your understanding.[/en][ja]皆様よりの長年の多大なご支援、深く感謝申し上げます。[/ja]', lang)} +

+
; +} + +export default ContactUs; diff --git a/src/custom/Footer.tsx b/src/custom/Footer.tsx new file mode 100644 index 0000000..f7e2d5f --- /dev/null +++ b/src/custom/Footer.tsx @@ -0,0 +1,32 @@ +import React from 'react'; +import { Link } from 'react-router-dom'; +import { MultiLang } from '../config'; +import imageCbsBanner from './assets/images/cbs-banner.png'; +import imageIncfBanner from './assets/images/incf-banner.png'; +import imageNiuBanner from './assets/images/niu-banner.png'; +import imageRikenBanner from './assets/images/riken-banner.png'; +import imageXoonisBanner from './assets/images/xoonips-banner.png'; +import Functions from '../functions'; + +interface Props { + lang: MultiLang; +} + +const Footer: React.FC = (props: Props) => { + const { lang } = props; + return ( +
+
    +
  • RIKEN
  • +
  • RIKEN Center for Brain Science
  • +
  • Neuroinformatics Unit, RIKEN Center for Brain Science
  • +
  • International Neuroinformatics Coordinating Facility
  • +
  • XooNIps
  • +
  • {Functions.mlang('[en]Site Information[/en][ja]このサイトについて[/ja]', lang)}
  • +
+ Copyright (C) 2018 Neuroinformatics Unit, RIKEN Center for Brain Science +
+ ); +} + +export default Footer; diff --git a/src/custom/Header.tsx b/src/custom/Header.tsx new file mode 100644 index 0000000..3625948 --- /dev/null +++ b/src/custom/Header.tsx @@ -0,0 +1,130 @@ +import React, { Component } from 'react'; +import { Link, RouteComponentProps, withRouter } from 'react-router-dom'; +import LangLink from '../common/lib/LangLink'; +import Config, { MultiLang } from '../config'; +import Functions from '../functions'; +import ItemUtil from '../xoonips/lib/ItemUtil'; +import imageFacebookIcon from './assets/images/facebook-icon.png'; +import imageFlickrIcon from './assets/images/flickr-icon.png'; +import imageIncfLogo from './assets/images/incf-logo.png'; +import imageSitemapIcon from './assets/images/sitemap.png'; +import imageTwitterIcon from './assets/images/twitter-icon.png'; +import imageSearchButton from './assets/images/search.png'; +import { HashLink } from 'react-router-hash-link'; + +interface Props extends RouteComponentProps { + lang: MultiLang; +} + +interface State { + keyword: string; + menuid: number; +} + +class Header extends Component { + constructor(props: Props) { + super(props); + this.state = { + keyword: '', + menuid: 0 + }; + this.handleChangeKeyword = this.handleChangeKeyword.bind(this); + this.handleOnClick = this.handleOnClick.bind(this); + } + + handleChangeKeyword(event: React.ChangeEvent) { + const keyword = event.target.value; + this.setState({ keyword }); + } + + handleOnClick(event: React.MouseEvent) { + event.preventDefault(); + const keyword = this.state.keyword.trim(); + if (keyword !== '') { + const url = ItemUtil.getSearchByKeywordUrl('all', this.state.keyword); + this.props.history.push(url); + } + } + + setMenuId(menuid: number) { + this.setState({ menuid }); + } + + render() { + const { lang } = this.props; + return ( + + ); + + } +} + +export default withRouter(Header); diff --git a/src/custom/Page.tsx b/src/custom/Page.tsx new file mode 100644 index 0000000..f18e04b --- /dev/null +++ b/src/custom/Page.tsx @@ -0,0 +1,174 @@ +import React from 'react'; +import { Redirect, Route, RouteComponentProps, Switch } from 'react-router-dom'; +import Bulletin from '../bulletin/Bulletin'; +import XoopsPathRedirect from '../common/XoopsPathRedirect'; +import Config, { MultiLang } from '../config'; +import Functions from '../functions'; +import Pico from '../pico/Pico'; +import XooNIpsIndexTreeBlock from '../xoonips/blocks/IndexTree'; +import XooNIpsSearchBlock from '../xoonips/blocks/Search'; +import Xoonips from '../xoonips/Xoonips'; +import RssBlock from './blocks/RssBlock'; +import ContactUs from './ContactUs'; +import Footer from './Footer'; +import Header from './Header'; +import RssFeedSites from './RssFeedSites'; +import TopPage from './TopPage'; +import Xsearch from './Xsearch'; + +interface Props { + lang: MultiLang; +} + +const hackathonPathes = ['hackathon2018', 'brainhack-global-2017', 'hackathon2016', 'bah2015']; +const ainiPathes = ['2014', '2015', '2016', '2017', '2018']; + +const Page: React.FC = (props: Props) => { + const { lang } = props; + const goPageTop = Functions.mlang('[en]Go Page Top[/en][ja]ページの先頭へ[/ja]', lang); + return
+
+
+ + } /> + } /> + } /> + {ainiPathes.map((name) => + } /> + )} + {hackathonPathes.map((name) => + } /> + )} + {Config.PICO_MODULES.map((name) => + } /> + )} + {Config.PICO_MODULES.map((name) => + { + const { pathname, search, hash } = props.history.location; + const url = pathname.replace(/^\/modules/, '') + search + hash; + return ; + }} /> + )} + {Config.BULLETIN_MODULES.map((name) => + } /> + )} + {Config.BULLETIN_MODULES.map((name) => + { + const { pathname, search, hash } = props.history.location; + const url = pathname.replace(/^\/modules/, '') + search + hash; + return ; + }} /> + )} + { + return
+
+
+
+ Item Search +
+
+ +
+
+
+
+ Index Tree +
+
+ +
+
+
+
+
; + }} /> + +
+ + + <> + +
+
+
+
+ {Functions.mlang('Neuro-Imaging Platform', lang)} +
+
+ +
+
+
+
+ {Functions.mlang('Dynamic Brain Platform', lang)} +
+
+ +
+
+
+
+ {Functions.mlang('Brain Transcriptome Database', lang)} +
+
+ +
+
+
+
+ {Functions.mlang('Invertebrate Brain Platform', lang)} +
+
+ +
+
+
+
+
+
+ {Functions.mlang('Visiome Platform', lang)} +
+
+ +
+
+
+
+ {Functions.mlang('Cerebellar Platform', lang)} +
+
+ +
+
+ +
+
+ {Functions.mlang('Mouse Phenotype Database', lang)} +
+
+ +
+
+
+
+ {Functions.mlang('Brain Machine Interface Platform', lang)} +
+
+ +
+
+
+
+ + } /> +
+ + +
+
+
; +} + +export default Page; diff --git a/src/custom/RssFeedSites.ts b/src/custom/RssFeedSites.ts new file mode 100644 index 0000000..ddd08f8 --- /dev/null +++ b/src/custom/RssFeedSites.ts @@ -0,0 +1,103 @@ +import imageRssBmi from './assets/images/rss-bmi.png'; +import imageRssBsiNi from './assets/images/rss-bsi-ni.png'; +import imageRssCbsn from './assets/images/rss-cbsn.png'; +import imageRssCdtdb from './assets/images/rss-cdtdb.png'; +import imageRssCerebellum from './assets/images/rss-cerebellum.png'; +import imageRssDynamicbrain from './assets/images/rss-dynamicbrain.png'; +import imageRssIncf from './assets/images/rss-incf.png'; +import imageRssInvbrain from './assets/images/rss-invbrain.png'; +import imageRssMpdb from './assets/images/rss-mpdb.png'; +import imageRssNimg from './assets/images/rss-nimg.png'; +import imageRssVisiome from './assets/images/rss-visiome.png'; +import { RssFeedSite } from './lib/RssFeed'; + +const RssFeedSites: { [key: string]: RssFeedSite } = { + 'incf': { + id: 'incf', + name: 'INCF Neuroinformatics Portal', + logo: imageRssIncf, + url: 'https://www.incf.org/', + rss: 'https://www.incf.org/news/feed' + }, + 'visiome': + { + id: 'visiome', + name: 'Visiome Platform', + logo: imageRssVisiome, + url: 'https://visiome.neuroinf.jp/', + rss: 'https://visiome.neuroinf.jp/rss.xml' + }, + 'bmi': + { + id: 'bmi', + name: 'Brain Machine Interface Platform', + logo: imageRssBmi, + url: 'https://bmi.neuroinf.jp/', + rss: 'https://bmi.neuroinf.jp/researchers/rss.xml' + }, + 'invbrain': + { + id: 'invbrain', + name: 'Invertebrate Brain Platform', + logo: imageRssInvbrain, + url: 'https://invbrain.neuroinf.jp/', + rss: 'https://invbrain.neuroinf.jp/rss.xml' + }, + 'cbsn': + { + id: 'cbsn', + name: 'Comprehensive Brain Science Network Platform', + logo: imageRssCbsn, + url: 'https://cbsn.neuroinf.jp/', + rss: 'https://cbsn.neuroinf.jp/rss.xml' + }, + 'cdtdb': + { + id: 'cdtdb', + name: 'Brain Transcriptome Database', + logo: imageRssCdtdb, + url: 'http://www.cdtdb.neuroinf.jp/', + rss: 'http://www.cdtdb.neuroinf.jp/CDT/cdtdb.xml' + }, + 'cerebellum': + { + id: 'cerebellum', + name: 'Cerebellar Platform', + logo: imageRssCerebellum, + url: 'https://cerebellum.neuroinf.jp/', + rss: 'https://cerebellum.neuroinf.jp/rss.xml' + }, + 'nimg': { + id: 'nimg', + name: 'Neuro-Imaging Platform', + logo: imageRssNimg, + url: 'https://nimg.neuroinf.jp/', + rss: 'https://nimg.neuroinf.jp/rss.xml' + }, + 'dynamicbrain': + { + id: 'dynamicbrain', + name: 'Dynamic Brain Platform', + logo: imageRssDynamicbrain, + url: 'https://dynamicbrain.neuroinf.jp/', + rss: 'https://dynamicbrain.neuroinf.jp/rss.xml' + }, + 'mpdb': + { + id: 'mpdb', + name: 'Mouse Phenotype Database', + logo: imageRssMpdb, + url: 'http://www.mouse-phenotype.org/', + rss: 'http://www.mouse-phenotype.org/index.xml' + }, + 'bsi-ni': + { + id: 'bsi-ni', + name: 'BSI-Neuroinfomatics', + logo: imageRssBsiNi, + url: 'https://bsi-ni.brain.riken.jp/', + rss: 'https://bsi-ni.brain.riken.jp/index.xml' + } +}; + +export default RssFeedSites; diff --git a/src/custom/TopPage.tsx b/src/custom/TopPage.tsx new file mode 100644 index 0000000..74629a3 --- /dev/null +++ b/src/custom/TopPage.tsx @@ -0,0 +1,75 @@ +import React from 'react'; +import { Helmet } from 'react-helmet'; +import BulletinRecentNews from '../bulletin/blocks/BulletinRecentNews'; +import Config, { MultiLang } from '../config'; +import Functions from '../functions'; +import imageMainBanner from './assets/images/main-banner.png'; +import LinkBannersBlock from './blocks/LinkBannersBlock'; +import RssBlock from './blocks/RssBlock'; +import { RssFeedSite } from './lib/RssFeed'; +import RssFeedSites from './RssFeedSites'; + +interface Props { + lang: MultiLang; +} + +const RSS_UPDATES_INCF: RssFeedSite[] = [ + RssFeedSites.incf +]; +const RSS_UPDATES_PLATFORMS: RssFeedSite[] = [ + RssFeedSites.mpdb, + RssFeedSites.cdtdb, + RssFeedSites.nimg +]; + +const TopPage: React.FC = (props: Props) => { + const { lang } = props; + const title = Functions.mlang(Config.SITE_SLOGAN, lang) + ' - ' + Functions.mlang(Config.SITE_TITLE, lang); + return
+ {title} +
main banner
+
+
+
+
+ +
+
+
+
+
+
+
+ {Functions.mlang('[en]Latest News and Topics[/en][ja]最新ニュース[/ja]', lang)} +
+
+ +
+
+
+
+
+
+ {Functions.mlang('[en]INCF Portal Updates[/en][ja]INCF Portal 更新情報[/ja]', lang)} +
+
+ +
+
+
+
+
+
+ {Functions.mlang('[en]Platform Updates[/en][ja]プラットフォーム更新情報[/ja]', lang)} +
+
+ +
+
+
+
+
+
; +} + +export default TopPage; diff --git a/src/custom/Xsearch.tsx b/src/custom/Xsearch.tsx new file mode 100644 index 0000000..c655139 --- /dev/null +++ b/src/custom/Xsearch.tsx @@ -0,0 +1,34 @@ +import React from 'react'; +import { Helmet } from 'react-helmet'; +import NoticeSiteHasBeenArchived from '../common/lib/NoticeSiteHasBeenArchived'; +import Config, { MultiLang } from '../config'; +import Functions from '../functions'; +import { Link } from 'react-router-dom'; + +interface Props { + lang: MultiLang; +} + +const message = { + ja:
+

サイトアーカイブ化に伴い、本機能の提供を終了しました。

+

このサイトのデータについては、こちらから検索可能です。

+
, + en:
+

Due to site archiving, the across platform research search service has been discontinued.

+

You can search the data only this site here.

+
+}; + +const Xsearch: React.FC = (props: Props) => { + const { lang } = props; + const title = Functions.mlang('[en]Across Platform Resource Search[/en][ja]日本ノードプラットフォーム横断検索[/ja]', lang); + return
+ {title + ' - ' + Functions.mlang(Config.SITE_TITLE, lang)} +

{title}

+ + {message[lang]} +
; +} + +export default Xsearch; diff --git a/src/custom/assets/images/blockTitleBack.png b/src/custom/assets/images/blockTitleBack.png new file mode 100644 index 0000000000000000000000000000000000000000..8d9269511531c7bb17f80eea485c3147fd1a0f0a GIT binary patch literal 475 zcmeAS@N?(olHy`uVBq!ia0y~yV7>=rJ8&=q$=l}f+kw=L0G|+7uF$Dmp;Nd*CUXZ* z;trn39Rx%ZxC8sS1N(RadU*nRc>KG0{JVJkx_Es%czxS>ecE`vTY0@(_`I6=Je&AD z8m0Xj!;AV7tETdKG}Ls>+P3@f;ggs6-RoDZ*?#)cy*p1n^1Icp-Ms(8jb{&E{o;46 zS-Ell>8sD~JO{F?m#p1)^up7tkA4WaRLx(xXaAYU=kI`b^~InfiA>!(PXH2RKwP6`8>F zg$)GluI$#nYAWzz?&AI{4hzcdMHiTVu;06W`sb%n!3>%REe`n?q#^KM8_*sQM7FDd Z{cYdF_f_0~-GDw}@O1TaS?83{1OOM#*b4vv literal 0 HcmV?d00001 diff --git a/src/custom/assets/images/cbs-banner.png b/src/custom/assets/images/cbs-banner.png new file mode 100644 index 0000000000000000000000000000000000000000..7e1f891e1122878f7a6591f007baee2d241f865a GIT binary patch literal 7101 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 literal 0 HcmV?d00001 diff --git a/src/custom/assets/images/flickr-icon.png b/src/custom/assets/images/flickr-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..7bf5e7df1e1825115f27ff99c41c3acc9351a568 GIT binary patch literal 419 zcmV;U0bKrxP)>2fPI8}kA0bS;2z_Sdx900Ar$s~zo^QxBurHbkftdLmKG*~ z*C7Xp<5&d%riwEm2jHAj*L6z+;7s6P$^oJ%(hq>mDgfXu1pwu$08Uj$`ZaPrSz>80nl(#Kk0`O0Q@!!VEwOP z<%e*)2Q*y8+5zy%R1iquIS&A#0pUSKAn|=)4uAlO45uiPVSRrQVBGYH0EvR7LMgo9 z32*5HhGBTb#;I72ztJ3t(Hvuk7d+uD1Ay*E9Y#GZtOLBK0W@j@_y^e6-ad#~#0CHW N002ovPDHLkV1ip3u-yOv literal 0 HcmV?d00001 diff --git a/src/custom/assets/images/go-page-top.png b/src/custom/assets/images/go-page-top.png new file mode 100644 index 0000000000000000000000000000000000000000..693d091550186b841b4b52ad739d1c23e47ab9a5 GIT binary patch literal 149 zcmeAS@N?(olHy`uVBq!ia0vp^A|TAc1SFYWcSQlI7*7|+kP61+AO4IB);$Y68!o?B zJ^1svV*irj>vH=)PD(l3f4_$D6^qjAPrmZ||0(%yPCv}Iz>mXgZqW>uv%RO!H*QtD xaObW$XO>%qsBj{i9CO(EM^4VBt-V=n46kiVqVDeX&<5JW;OXk;vd$@?2>>VkHJ$(f literal 0 HcmV?d00001 diff --git a/src/custom/assets/images/h1-back.png b/src/custom/assets/images/h1-back.png new file mode 100644 index 0000000000000000000000000000000000000000..3c085914ade6e8d8c0b7b2e61a9ef3c640dcb8d6 GIT binary patch literal 1269 zcmW+$eKZql7=PWmmvZE)TS;k$(}yd4ry}LjkW4z_jXbjlB>5#doy2JUWO~GCe24&^SBC3c;aVaa@LI|t3 z8p9RM2AAiVPt%Oyo-Z%Z8M~w}R-X?$))LFVv1?hoidpERQmL3ux^v~C5@}VfCNX%` zSNb*o?4|`!i^-rV4yt|tpfBJ()mGj9SlICH7yv`eH<1huZ)3S&2>^4K151j$QceJn ze6_g>MWRMSg~W34m>mk!Jv7uhht`_v_@mrcK8mFP;439Z8Jte$765jMIhRD9mp0b=5fRbptk)_-YEi-bWF~{rC}B^kqC^mE)?;aHTLf1BQJI z>d*xGWC52fPrG(cJ8j8nqFev#gn^6?ABao@9W``dPOMk$lr0V;5T6wpzZ(y`y&X+!3^+Qn(^%z^;6w`1iI>`e3B5~1|vm(~jBE3{Klb}8%9 z6y2D`wlUAC^Lhj+x|}xKK&5navweO%G&O;DM=`5*fkgOoSXpp(qqw0MW%#*HOPgCC zaAstK2brQwNLu7qE-cQrA=n-0&9Ii)Vt<`y>AGxAwU^|pmK&!x*B!V`y2c#AVNj64 z{ccqrT3_3(@o_P#dKk$QItuKzvtqUArp^#J;zu1!^VN!*e%$`gHJ0F5H0CLH_M^#? z@;LUp(BY~A%&X;{09@}B`~Ei5jSGArvdtVd;7Qa zt@IbL*Vo?~@R2QrPx}2Gc29**NNFrZRu;T)V&sABZ|IqzmOew6D*&n;sc|~*JS3#M zV6qo$N+cS0JGMkn*!P;~QMM_%>~-7K;hVNB$FfCINIqm#ys+`p`tPBspP1lXzFk1( zQ4x?I&x?Dijv{b(j-R($GT+2~1KRi4{<`TW{O WyoufFyx-vXMWQ2Okd5KVH~t40;BWB& literal 0 HcmV?d00001 diff --git a/src/custom/assets/images/h2-back.png b/src/custom/assets/images/h2-back.png new file mode 100644 index 0000000000000000000000000000000000000000..99efe6be4cd295c8d8e9a163cab441931d0b3dfe GIT binary patch literal 973 zcmV;;12X)HP)^1EiErEFEB7LFfT7IE-or5DROafLqkI~G&D9gHZ?UhF)=YHC@Asq@hK@O zGBPqaI5;;qH#9UfEG#Usv9U8VGk}1AudlE0@bH(Hm#(g^%F4=2Oib_Z@9600>gww5 z?(XE|+9#|=jP_-?d|QXtgPwj>E-3+?Ck90-{wzaizZ*R=Z z%z}Y|d3kwwczCI(sNvz^;NalLMTJ5D00N;&L_t(|0qxp_cGN%sKvCjpg4SJDvFf@T zPXGUV7@BEM)(y$bd3W9Q#h(Gtm!UKO<`g1t6Mzn^QREG18aH_Zy0%T;fUa%Jye-uM zuqPpJErGUW-nQxhIFpdKmO$GwZ%1_i+)2n=Cm?O|2J}x`=IsJdlQ)}|c>|;^^Nw8- zkBN=+JphU2&$kiJ+jVT)l5AVqzyZn@fA!z?K$Sw_Rj9!gZ+cUBg6L8=^LQxc-k`WFcSEValCtS zDxIBQJh#0d1n?hiE+sWAmbYgc=}h*wTvo`xeP_A;@^1jZ|B#Y~^WKbvBJb_@S>g1< znK(Y%`DnVq^k)H(5SLR-%KI#Jb&?Z#Uz=W-QVl@YvApH|Qh{S`XU_8Zd?uB;xy^~Z zEpPJ@K;qmjM&wEOeAB z8o(eD%e#2#3~#k|6V@6%l>jsy6U)0(X!@Vhv2D&jyLatQPZ{C*@9~UT8lk6hz!*n$`r!TPO>Uo61nNRzThoU26{HJpeRB-h%`H@N-d%=DpO5 zCk%k;c@s6DgYmq{8qi2AZ^8yNW5~QITT>u!(oQDee#Fvwub%e(e*|D|-u=M@R1K(O vnY;-bP|qTH6E>i%@x0@ViA(^BFyejz`}LBf2@>}B00000NkvXXu0mjf!C?4c literal 0 HcmV?d00001 diff --git a/src/custom/assets/images/incf-banner.png b/src/custom/assets/images/incf-banner.png new file mode 100644 index 0000000000000000000000000000000000000000..ff18077fba1049567d228e56d8f7566590f726f4 GIT binary patch literal 1209 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 B24DaH literal 0 HcmV?d00001 diff --git a/src/custom/assets/images/links-hackathon2018sep.png b/src/custom/assets/images/links-hackathon2018sep.png new file mode 100644 index 0000000000000000000000000000000000000000..ec496a731a1035b951fc30c95ba3d637ac750f1a GIT binary patch literal 14638 zcmV+}Inl<6P)8`N#usol6qQzMu(_PMjRz56{ehwlIqVq=*rxsofn zei8%z=Mlu;ItGFuF%Sfafgnf>1VLgT2oeK9kQfMp#6S=v1{XRaGVH-})LZd0W+$p` z_@6?M7#x{e)vPD-mPbU@cB(eJAwy-+Px8|Cer0_v!v7G0>=|SlCWG*HdxDznh-!Zr zjduDFC8&Bv*5#(M={?&E(gX2tkHKNEXm)w2m%g?K$l}Lbd0%(!>t>r@HQJbanTqf8 zz_;0v_wBG7_bvEp&xNvEaiHnO(+5_{>!paM< z>KUxVU>X_1LKM>Y??jLooLI2i!@t;y5A`&cNF14R_zKckp`g%|~EC z@R|=&kC>2Q=lIQzs;V5t`$A;!5dDyWW;BFqtV%O}AEVK1GFk8oYPH&8HsfE5AThY? z_=655xL4S=x!SY|J;x1OGI{XDxqaWx>B5@P*nMmR*4QTESw&xWDfO^(y$^%iJ{>yn z{p1F+ZM2&{_aPyX>%1tH{{uKxk zgUdl%=_t&);Bw|#5uNy@G}PTn^my`or}RoY->DGR9SZw{tu4^)K{o)D{UNUt7}`NW zCr~mUbq7@&$ZG;wwIQh-h|7YwI>fc9LyegdxcMCKQJgO2>;FyDw7*|)bX1Z=obhQ3 zNKr8?Rsj2dz9OLr3F1$P!K^@S1m<&48-omEic5C9Ky==mz6;Y&>M-K7Qw3xd1TSW7 zs&>00#MK3LEx`7lltA^W#h%`q-FNiGsw;27cDE6e)@&U#c<6wB14p&!x^%*{ozG6M ze6(lA^YuMh^J{WO0Iwq?*8q805LJYjwmswKomSiv(y92V7%Dz8I$kJDbGa}lJIB+5 z8yrM=d2$ts4E(j!bOAT$O;ETO6~pxp{TM`fBBI`)_4Iiul_%k+c#*6GK80UM5k=p6 zdg8&Wvx+PUB5JhCK*~Kh!Yh#SV6LoyR|TqU{2HB}_6vFMAL{1E`(>;f}sh{(*ndoL~;O*;G~e0lFDF6k$h zCE(9vwiu;p0=iIzU*JoknSbC0z5bJ8FeIb&I7-f-^f1Z~W1a^p9x(4%WG8jH!-zXD z=bG`7;Ay+4sSw=|a?1nV1j75axjDMu>|sM2_g+y<3S-RwfQY?+tr!|U)vPp*x5xx5y8Bt*7=r1B6`86rB37p!CJ zLRA8lno?$_=I3kZP#)#&&GGZ&@pzF=mje-*V<(%lQ_k+$O ziy|Ul98;+^Ojz6!Kh7`o-;isOvop0C^8ufzmEn&v0&WIQp@84<=bRJc#;|OR! z3@Wt&&NmlNvM91iA80x7lV7deIUN6Z0!eJcUeIrHWsAjxh(l)9n!BzC{tU;jtSQzI zQp8dCQ#Kx)T)G*gWe5>*&7RQ}TR~2q0)L4IuTMc8pkjRS=TT&dt9O7`?$_`O!4clf zKiqzH_m+&hR{v2Zt@dU?Ng*bv}XfQ)hw+oApA zX*N?d;2 zKsMKh%?-%T$+OxVGFfJPg3x5P;4fq_>iClXvt|`=QKnz_*--w*w%y&`-C!$9DzO#@ z7Tw(~Ytz^YDlH8b9a2koH-dDX@A}RM%XXe0(=%^9_r$%#+d8Pu+Bn$V_jY!EGJyEx zSF86AnZBMyB?JN3B{5lE_YhZP@e@|CgD2)><|a~!-+gKg;9c5Vs&&iTiiIUv1;v?} zxk)^|>_=N$OGZv&Ldt968`TZ^kW-LK`u#RG0DUMa&n>OY2k<5~FrVtI5A7YT(TO21 z!X9RmS@of`qM)=QucxQ`RdhgAZ3zY-D?fRM__*;am|y69079o1p3~TkK13yigh%@R zN~d2mHNSWBxjl6q>sRZR)(-(M-Rb-I6%1`p6Z79U)$u5_n4eYGmV;-5Z#zLo33qdZw~7y77|6G}pDePv`q7_9~U zDlEe9ZBHn@jhU{qio? zeNaQYW=V_VyY{G>XJU3IzdCewq>%kSbLVwVPRp-`tGG+DU1!)qlM&JmOeAr(c28PE zXJJ=UU{y;DvZI62+ zRKMi#H&I#H1u@adp`nqXA#cmetMHHD5#T&}G3zh2h`7M5Vq^G^Owcly2C)CwOhp4> z05@E*9~bmB$r z{o|H@bdpz5-T*3VN;Vw&X35S^*Bh1|E8U5{+nvq|W&Wj%xGi9JCZXWli#%F!0>MuFsH|6e~%0eJ}5elQWF#zqx=@iOaVodDYuIGD6)d_ z?EO#{vq;EVIY=h{y$sq7Q0stVD^MmP#9elkWBeyR*?)}hpc<1lVy9%;&VYjt-m1OO zV*4LWQ1BlsTdW=WA+)LDaekFoabsj-ed_y))U>9Irlyw-H9n<{;WfzULOWVAn^QfL zu06Eh_FRG`Z($`1SmN{zQAZwzKC22TNqC(c^78eo@CdiZ9$}%RI=%S&Al0GLq`(6X zRPL+y4|RTQCU$NaT}o;B^~y$K0Mtz-7VP+h-oXIGCWTQ=A2>cs=*+?$;uB6NZtm>t z_{|(oapjDf05}AMKYo`M+1=9}lNj>Ne0J4Y1AwN5^r%J57{3&b6rDKcXt<+;OHeRzbFHM{uP-Kix?gGt0*tZ52n}7qYvb7>jl5M<7Ro}!b++P zVi)}ZFui`^i`nc&*n@=BS2H#+iHj=%_=eseKAQ?uo6_A@kx?6kzOAe->FMcNEWjsq zX&nG6RwAe6ZFvlU)osOPyFRDFqT}3f_?ttg=GE0#@-AIvO)+V|XP^`9%RlT9fIIG1 zL#BV+0?D&~*kjrej|__i20!$;x<_iNti~Y_I1?c2$Sq8zlclsq{IRxE;xbaUXMpp( zt%GgsRWkG5(IN2y>b$LkE@{zUm*kZ0?(V#Qrr$!IfNCDUv4M);MA** z(`eI2l?}=bP^OC_4OIJ)hXi;qsXIe2ShC}0!{vPE+`P(Ut-d_-V5%mnT9UQhg2yRl zjMDBg%|QY>L)zM6n`;Bh>qF|A-=aOSqbs$g;YCH+-JFV>xhUx7q@|~;uq*R-AB)_rEhk1b^cZ!YuqL_=Cmq5IMmb?UvW^AQQ1y^EA|XB zxN@3DwuL)BC;bLsZLds{TwYZKAUZLKb}gf_?U?+AB?5yfZvfD;_WGIxVQ=&Y#fxPtz)F?wvK9ZwtPzY0raN5GKE7r zfQ;-!`c%_gno9QGvnvbvnZVIW_zA?Ti;MX`rP8#!Zzz3v-4>CNL{|WB@<)d%><0I6_0I+_O@e4>KBu<)71w1rjs_;jpJf&TN1xk^``NZtNH!pmLn zT~2UgZ6#vR>E7AwU;iPjs`_bRXI2ZEdz)X@wnjCyHFdmi>S$-*DL{sNXceonZ6e^?+&yYMeSA&1)Nl+2j^@yp~jthg+P3Vply*u$shYME21 z!Q$p+(yCt!Kq!Nftv~R%ia!JYkufKgwg4z9%UQ(Fw`|v7lWXVg9vH6NJIMH|ERSsK z1&2|n0O0(@oQ|Qj?Sp^#qc7(&v2)9>yJ~4!9Gkz5FFxfJ7n7vOzIe%gu>jMxJ~@yK zbGLjX1F7I1>FJ{978}@}0YGs}QC|=o=zvM@YwIc~U91-z(%IS0Nx1ctwT$X1BF=v? z|Df;XHi({E`myCu-*?49wHLkUgTWOU$}QBf05H38iMYq>3Md5~y|D7Buif3JHZwPT z;t}8kK;q)+of6}IO@`TSjr!tyTL5_n#Lz#>ACG zhU){!5K8Yn@wo{=(_CuBZa$s^Pg_e)s|F5wHYX^~0f>wbqP2U;B~MCL0!Jp&Y5o}* zdhsC@xwgpBK!F@et$M1gJD><7H)obRl2r_y;dL_PTrn=8<37qQQJ{}86`rCs_u?H@NZ;|s~ zuNQvE@r81%hYw1DB2?VTY49lKUG}=h54q*_*?G0O1$Cum?~6(s-0m8go%q^ah&dcv zw*Ss4mbjGVjvb!7=0Rov>hTXiUP*O8K2A;W+gN{IAx6IorI*wh10WM8jii9V%@h5; zp2t*-#VOv9k0++S<~7h1Mt_k(`%T|7&?PSUB`?R%+{olO%k~Yq$Hp?M2Hs?r5!$!H>Ct4# z;+8zGd04*tD{%N;ZsXFOgJ}CskIX1~IHM}CnE&$+%?(vGCEqPzH}C4A4^=g# z16`Mtc)>PSQl1Au$LhqgU7rDPd}P8VP(GnefdUd;t7m@p0EqKn&!^*Y2hh}9pIwmJ z-#}9xAKfn=Dpl071N^pT;p zwHW|8u)xvj;IL}nw})ls0|<@qptdk9!lRE2lm46xgrWz?GDWEtN+{GQ1F}%QYtITs zu<~y=KUU4u3@&|qD(0zJ+0~3{GZfjNOcAwbkgL|^XXpKcm#j(<|K)^TDzEoz`ybZx z6*BM@*5m&4d4GN%{|x^BPej*SNX=upR1@_!G|W}J217#DvYZJlVvo0+sUM zsZ8|jl9hY-DB06ubB>?2cn9AW;Zf!{FN@1A=bOru4MjN_lUcoQgvgo2^hXk_ZzBWX zq32bqDr#-%%j*QcqS5V}SbqT2M1He?aa!0oWCo*~I}wXDXjReOg}-^uI6RZYZ4FJ))dc2am-BEUyRgaNp$ zbC7n*8?Dl)iuza5k&K*#$*XDmGpWVeDKTm2EJpMIP*GL1O>_zwk;vI4q%4-iOc1e+ z*a()E84G~gT;g6)X--Xj#d^UJ%Xbe|&=(RuvxqK&yuJ`PG&MH}o}5FzvF_kE3(=n*y~F$aNRN*%xj&8-zC!2SS1I^zh{^CC;8NWstrbOe zm1Pz6l~s+|`Bk|^brn^ud3n`o*%c+#AIe@=IG8w2c(#q@PGnIdbP{giZ-OQ&>Soeb zb_(_n42`ayqbLl3I!H}(*(|OmC@iTMpQEv6zt~e_eOzIawA_Y(mrno`m*=RPo})U$ zZ-GL;wVm2Ag^e^+^$B)GAAZb=KC8Y<^5UAHSMK%?^n8PfB=}eXr{|NVN?uxH_`_L} zd~kT;ef{vM#iae=kzPhWT%@7_;1%d%a-FIQ9i43kwwHZE?hRCNJ)27;rQGu}4YLbA zL3jGpH0ZeECJH~i0K-FA#8V-eRn$DZiG5*o^%Ad9;gsH#{y{+@N6AnkJv#vdKqh(X zu36)UdH|F?>>rr7a$QG!O2|cRLF!V-FkRiu)3V~g;eBJZm7NMP*5vBtO0MZj%Zj&k zG%l+w;7lM#+fp$(J(9cNSsG@?FKF$h(B%sDTPI`M z1$PQwjt|XgP~LZ%!PFSY=?bN0MD`D|t?dkH_RaGj>Jq87`x7#BR8rJIu{nxw0v333 z_chBI%gVpro?c3kD z`&7o=UEkDu>)t6Xbf)fJpv9#jz)*v_(7~oSrDzDj-Q8)BkRS;$lHd?K@05>Z^78Ee zzskKUdwnbGM6k7f`#ZAt!7go~I|EO-Id$SE&iY0V)}Lg+rx;Jt0|}rf1{LFnlQ-MP zE<2R=MHV|;oeCNu;L#H>MkGxm8c_9$`kPvXoUT4zx2&a2P}jt3 zm+%&*?j)5jlfpN$^B;e9^vMS}vNw4{PvRnywk(o@sOSBy-I zUpd2{XPJ?*$Db*iGpHPde?wpyfK?eaqM0%<8TER>IVF^|JxS_5_~UpsID+^(4BQ1A z9Kkm5i_TlqaeVX?^jd4KhdbL9%yCaLpE&Uw4ayz^GO*0?ErTw?D4?zhl1xy=gR%K| z@mHZiS4WS5m<}y=&}yscJw48EQZ)4Ndqo2PnpRFvL0LlspVualNc$#_KBuw$vAiEi z(Sw^?+`t4A{w`$T4f9FS=cN1DE!REZ7|5=JEEEJ60k%R^bPSObq9n=Tg|G)w>7@=i z3u(;thGQZscAKb?C`!;NR!}FNrKgQKMFWFJ{N(+>Ib}6|tUe%Ad|t*q1sod{_o!Aa z&iU4r&Y{+_p^FM|P!D$~y2 zbTc#psZ`@RMGPa`9J&(y!@aKrcq;m(|0iqb&;>twEXyDMTA-v@g(Ks?4Qg66_=TT7>azYnfeiKiEu{1VQaAndsc5hT z;d$Vn2FXqkxsJXn#mN$RrS+9(+Ma$uL9zoH;3OoT&9Kj!M^84>CjlyOH==}r$e?G! zpTVRYp<_$ZMu+@$eqld%Sd|J~pxYJL$H#hn#|Ddm;|V+$;MhU?X%L)O@m#cQN8q_B zTYnoF?a=^0ZbJbn|A1t^lH(Qv0E!#=><5p@PsBt282qb&(^7QBP;wZ;*3%*&^6dQy z`o2#oJA=GmVz%#dG!#)|TzqOtTPKr?VFF%PkK4F!rsA8yZik&#f&ozYLkol6U}9)D zsA(*r>~}_J=QZM6paZgwksgeW66BRetI_))D(edkl|;QCPH(NnKBuy-#L(X2ed{D8 z|5eo&0T=^+8S3X6LZ%R-G&!}%@GF}}${zTr(!4)d({mm=Y0%~hU;~GWtw=wa(K2IN z`?Q&@Gl_z1$=iu+Y4KE_k38&@yAYFuK{J5o+khAp2Mh?HlO3q431iG2m=peF&WXJ5 z?uJG7AA(kEXt&k298k+^l*0wu&J!TG3@CVaxIyn#Xg{UxaMAL;RUBuPFbXKl$=OH5 z&(HN*55M!X7I;NHw5{$P;v8R@qT+_JYX`Z;74#GLoF1|58Ux49WYqhg_? z2S-f$iU^s5vvVp&)42P^17HB0)1#oq>t-7XDSK=dTGBQmsnC0i3LOAs7A9T|@(7AL zgX+g|SF?S#i>M^S;WZs~UWt+)YR@Rl14#L?eBq^nZ}zmjk#_Fb4gtFvx>(UnmUVJS2GVsg5V7 zw@*hh;Pn*e$;U;HRbB5wK15thuuYpqXW@bV^YmjtHy)?ziYQ8rref-otjW*QbxMV8 z?(Bfzb3$w2o`eps@u4E^ST~Hcfbg0cGnMEvNX~-fJakBZ_h3$2Cu&cBa4A9&%cqlo_I{Uc6krci|DowLA1^;64T( zO)90B?f)E!ie^>Z`$M}mGGW4tWv#acp(>B8z$FT$N;z)>YQVeEoQu{b{6aM9)i;+; zh}OTlUD!7v$uU1)^k`J#4JwU<#$H5%QGbP-&mL6wbYfpTvT3wATDiJV|UpqMb39Qw%K5=(FgZq)GUlPh-g3m^~iAtv=qF*KgTXQ>oe!Jue`Kl zDwrB@_1;ODVbA;8`iGwd9m3;Wkc=%?mds-^%MZFwJ0tTRY@3|V}f&qFxT+i>oK(3Ii+x;=J3x5iB zJ}Iu_63@((>+L zdW@U+p7S?O%P(Ug18F|Hrb^GC9nq*t2B2I$x9$*WdSqLeEg;ngwEYPJC{+zNkGiGUYH^tYk%w+&a=I|J^)Cr4z-H=iJml>6DU3y>JJ_)1Dye1F_PgZ=IH2w zA2=TUL$)*)8ldMOZ@g2fXoLkBW7Ij6LNCPB*-uQsq7nC^y zkzdNRo!EkkOt^j}$O#M(7JChUA}%VRK@c|+@Rz~7gtjZpQMlHOx$(?(tEoZ;C1*qv zB;(v|ezzkOPL-jFy>%Lp;=U0FVl0s6#t4 zmg#CFYPe+RP%;+UJPbad=LYrkRN{KOlqD_0^<$oeZLit(?YcRT)z1rrt{~{T2A$_X z>Nl7ly*eS}V}1ZzdTpXiat6LH2%RgL@1O7@TURVxLxhW7Xn97+wPx(i^!Un(we33J zDFKF+@UI4z)L6%Z4%vnAXrwVPWvpUlN9xINg1&(w1C}nh&!E30BhYV$lrXRuB@XGf z^7q>{w-T?z(+mKlpiwk{d>jDEb+$&RSR6%#VPhYc~Dr5jH zK&dt%E{W8=`Ebd+dkM{urIzQ2qzOEzgR6>bq>W5(pJ7A>Ob!pTAD+pbIjS86fVh%d zR`Hk|bZxYuhM?D&@uFI1yX%!@cUQ$9_U;0RYw~ zv)9kW)wBH4l-j0J?5**KV#7e$%c-RcYC{dzAu0 zP#d`#M6-6Ym`bD7G4QL5B9%|PU$~_|draF5gJp76!w87Ll52?>V0xRrMl!hCrV%zd zBRc~Cy#fJRR-F=8P;*tvtA|YRpb~`vL+E<-%_uogBuU!jkheIz=v>I#o);e5lJJRR z`ojn0zR4N|bXtPM8zk3&M+2cJ2(W=ZtL0v_Zj*UkJ9ahD3AfvL(f=N0O){ak|oU?+2VM58pGls1()w4-u5c{;zsGi zF48Z8U`!4FI%u{3FDha+|5tpUzXG@KUOYkR6($&wL7pNK1hhby#+Kzx*suPWxu&o9 zsDe{4TnmHQ5(v`#QnJaA3>Zvro&E^-5yB^rvmZAvG-p;bsok`8ZmVO$3g^Vt9)A)5 zFGIt&f$YHiKlzlB%w38XpS^kV%BR5xpETS4(2860X^OILen`3WQjW5yZLn3ty9Avc z(C(n_uTYPcLx(+d-yRW%cMjFc0MRtm@XGnh2R-+$-9q4-C$4@I_nilnDu(uFs>0X+ zCgA-(^z4n3@V~=EhEeXYJi8aLH^{q9YM*+$@R#9YsisLgglVB|9D3j&`vBqIFOz0q z+t51gLEeK%gBO}!*j2JCuPh&UhBr3|%JHy{pJgDx=>!L+zC|`x-}L$euEn{sRyn3v zRF)^TCL~^2dD-Rd{pY@SzV!OxP_n)F$s?U#(Lt#g?0`-m;9Y|;0cga-!eF5^rBf2m zktg>8fSS=Ede2w=#@$%|U^4ji6FCc$$rfO=1Aqy7!C0mKe+&{#M!j}OxSK>O-g>C| zyY@UjWI|sCUy;H`GMtf~C9Pyy%QVtONH=+{{x!=I%c_bh-~)xy9)^4R`r6(sjGNo* z>=G8cGS=$*X8L3aq_gq;uVz)fIE}C0-vZ5Fdpp@j6#q4FNXhTlEMKzUL>8WS$Smvw z>w?dn+244o8pUdT|(NPu}HIpN`P{ZM|DCZu$q`eL^W0MPbpgHnGc=UB|KqeUN`WWp1QCVV=33X=9F>6k|wy%@b0}ukLpxU5&F+bl(I{3%E zsEYQ8LP>DZPz*yT=-bR1H`)@#L8TNLFS=XOi+yNZC&vQWF_W_$yqiT2N&uEF)=8 z;>uX@3{vqV$sv22y#PQk-h8L-tTS`Pk*Mz-;#SG@_pA00SPj-Mji&OLve{)Ls@d;3m5cG#Wl z^q*lL|A<}l+gDYYU4W#m8&VN}#r)#wXi%cea?!!>@L2g`zz z3k-)s)H?ss=pQ4hkU20qpgPamXP3Cp13QOgLm#Vtnl$+zVr;V(x<_w_`H`0S)Y+I< zX@Sq$g)F|X+w z2ll+=cW-e(DzOt^tSmmqJVX}RJ!BR%|5SfW3;VO*o8R;izHwb0-l`gg@uneF$Edn- zd@xlcOBD{YRs9`GUU_aug}h6_{YcUrz=j zs35bLVI4mQD*7kLrkaittD>>KSq#UYKj;9R_#|mF6Tt(O~c%k3n)~F&^ z0$TVx!2}Z-5F^0IjXV)Q*N%Y`By%HCnQ94~<5#&Ptr{Aa0|2u;*fQ=X^cv|Vs@O)G zxuh+%Nu2MUc%-oNG*e*@jgj}*!NL!0ntt>iO6dU|q}ftY6sM2XBW3kS z@G(uGDC!&K0XrwJxo~@1)$XcHm+mUbP~$jc!0og+w3d*fZ_7jSRq+aOVvlz8@5lxd zOk_X|;m&xnYux&i%-OC&{Gz!*{+-y%z)kQc)kBVeXi?96xr7xz;6P>FMP4 zXJYmy#p?+7iRICU;rf6qm^WO}4;uKp z!UPi;5K3sSZ@I~Ibxc@pn>^2nxr~;yo}P5SAD|xXLL(EHnc$N=?KkXH7Vl8Y7i{N#n_?oZ&{n zRbuilvWkur;IOWAAkXeEbcC9HadjkA?G?(MVNEn)gP0y-W(cU$(3yo=xV_~SrpGUX zJ67GU1_Pug;*f!nF zGz)Q6IBUp+hN92}Py`P&zs~f#v*Ep7{rxj&gf%6!=}$90;ygOgvcg$w;d!V8)`4&f z@tjZYuC>*=#|2+)${cECrt8{y+5fDSi%@eetshj%~y;bpEC#Sqx5X?yC8 z8*(EPog0O@ezZUGq!}AB=-)UcxjcTvvE;zR9_;7BIG+s&2BNqZ#)l0JofRwUr_ZVS za$4C3)5_nUUGe$C%AW^D+eIm5vrXpxUNTxb^047^rayog|9f23%|5l?=8UU#*1m!9 zKs*X5klYynNQ{JC%Z;9Ld!$Ve^@%_=zAtj7`ooEVsC$uVa*iQki~~TjE9_Zf5^9|O z2B*KoAsNzAZxU)jUo&=2=RKGc*yuj@&V5Ci<_<4+C0YU?u7Tgkw;7o=a%+MRdcZnn z2AoEYc($hVL2tm8LqO@-=z`qyknmabV7WYbp3;x;78wnBt^^|!1p|>3gSZbO?o7lj#)WJq3P?gw=xQCX)S0eqe3of;WSZkI zTlnD2IrDTnhtV4BQ;&7@4+mYbcx^yfY7N(W)8p}2tKh5mM0&!KUW^SU0`*>hmB(FR zahF>r7fwV~fs83BEH(?(4u7@XwPYMLNl1WHnEtwc+TZ(5W~S|!>hNcOct@P(%GO7m zg%kMdNeZu7NXE_JM#n2L7@{!7;FUW%N}{<@5*h5_aftjFuN0PWJMoH=xT6#!Q2;w} z%TXbRoIGA)Cw|0!J_>oNQXA?)NxWhY50*+t$I0`7rkEDU6nqH0;)>+4Tt1dk8&zDm zD2gmoOnQVUY=j)N0J*zT2|jD+Jd{qjP~F zP%o^}(U~V)+yfros1prJ+rYg98QLBmM+pq%yHp#XB&B$Yov4#Gl{TC6^dLTklgX_O z2j!Rq8S%T^A-K$+r3GA04!@MwNK*{$G+P>!%6*)6E+i;WilgK7kmrC@f`Q;lV^KEX zd5QLMnD`|PJQ@3(;okTA&vOIQVcaZ`~e08lok5KCa7I7eZa%jednB%W|`1Yzu(3m)r4G#u_K^9>UNoL|%84Rpeo2s*K ztYz%9&ik2u*T-wV)XZ5v>zyO#zr9a$U5VM^vpT~@OHgNVySx#wW|N%}e}yO17WR)o zf5R8{k@M`jue};E(j5yo`669Hwj&IBK=MX~UpwZXs=AkH_hqVovd$yUU3BM)?-pmK zxzh{X$?+(qs5K?B8g2#;E!<_1S4KYC4|&`opH_w|a&CDBz>fp~)IbmNjVFbFrj3SE zE`%3g*eL%f4!&)H+NRyDZB7h1v1pO z!NHJ))G8Q6Q<+3olvexVz@F~D;)2S~7465?+|EXKe_l1W=d0(--eCB>gnxW=v)LsY zEP-KzXT<0YjYkryV6e{ZtC$oTJYjXxJ2Yk+`puzL1xM2RvLHt}J`+zhB(NX8-W4OAyWWz=T_HjfBEW9FxlptNuX8DwI0?)su-~NDl(^ ztZLn$uI>G}>8F#s?_rw5S^qy+=g!;IpL1{3%N1=^V8{T6pHqx$BiWz?YfJo~DL*IB zYe9Ju;FhK8h4a|t{*7YfsRS5#?aPx7IX&JbUVf0^NAsy@%Ry9ADRY$47v%*WZ**o* zdb6^&kw3^!_S|;~^Tczj@)apFCpF5+$dFC2UpZU32DzcgfEy4DB9=ti+@2?;QYlD7 zmA0969L6*Uyr%s%Q8UuEVy3EJ?VJocoPkg>0a4MLZ*wg&_?B8TH9=4V)B>Qt^<=u6 z2fl2Xeu4H0rag%bZ^N|Pu(l(Qt-0x=x^H#8T5!VpCEQD1`|@anO&;*5>W~L`p3t$$ zeT7R>Ma}~oy-MOk;77b7&qFEkc~-~%ox<@S(?AR zC{pT_H&jK2<#*+$UdkA9qGxF!+8tiG$*oPMBhB;^M!th&oT-6f1Ct1l8cbeU{0tl1 zh4mfwjP4h=B@F?9Nf7OjwgD1^0NMb?01{x*+m}`pKGpKcF{(S6_Bb}S4a3%d_t3~fnE$cjS=}l~CFE+UA z?&_;vG=4Y3P*OJD(=@JabqrJ`yMFR7ecbcKiKF+j?laiPp3LwcHn0tAIdreG%Wj$f z#I$e!a5fpi2b%*?il?9RZ&^e~QrM)#lg9rM7(_8^vrIO(cAC`2u*Umr`G^0kKa~ya z!FvD6`gUjiN3wyFSl`i1wI5S$&$|B3y0&BO2mQ13tkW0X{!;U&%jyb-zvzm5Wr9Ea z;Mu%9i8t7CXe({{GD*s2y&i8CvdG5=VvFZ4dt&9AXV%`mOT#6s;dIt`3Tr&|9}VXo zR(Hb{wNJj<`uU8)1s&hj$4gxh0wgd(tTvDuOrU}-o3_$cFc9H!I}nb9?I9RTNyhlZ z;8>TcyRECey{AJxp!VsVV3i;Qkp5r$bU*_D0D~~hziIe&kTytQ_4{#RXi}Jp0mJ}e k05O0VKnx%T5W~;R4p;TMKC=0M<^TWy07*qoM6N<$f+-Yn0RR91 literal 0 HcmV?d00001 diff --git a/src/custom/assets/images/links-jnodepf.png b/src/custom/assets/images/links-jnodepf.png new file mode 100644 index 0000000000000000000000000000000000000000..ad7c1bf3b1a72fad295b6c67330a12c88d3e323d GIT binary patch literal 35506 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%0A9$hWQxmCvDKF~*Ri)8{n0z3*<5e( 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�|H}EvR^dSNu{SmU&g%AqokFiD)Nm|=!VYLs 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 KMNUMnLSTYzbm9I0 literal 0 HcmV?d00001 diff --git a/src/custom/assets/images/links-newsletter-e.png b/src/custom/assets/images/links-newsletter-e.png new file mode 100644 index 0000000000000000000000000000000000000000..b22f41ea42bd6e47cbcc15a1c05c43451963039f GIT binary patch literal 32239 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≪k&8yO*!s+Q>9~N=&SiMv^NmXn?_J75ZWa>3(lHaL z4pZ1HihO-#HZ64$Yd#E#p&3f%v?8*-Z^u}74}JXg518%YRKI9Sw41`*x8 z#)g@cQey#&B;=m%t6vyukvhh*v9X@MxXp;#*Z6mTwcl-Brma8#&}H6whCf_tRofd* z{d%_a$lcw&f2O_-{odLJq#)1+E+i$FB+}*9MUV9S4Z%t?PX&yu4M%0 zxiE;$0$aGzC~y4=5!|E}{lkiS*03c16zZvnS8M6qWCyx*_AuYlB zm(OX>p!LJ=f9L=DKmWh+3;~f(M2SyJ9J|x2fY9~z1OZVIg_JNQCYxm$sa7aegUqec zoK?ATT~ISf0gN-obY=j81#8)y(5KE9DW(|wkj9TbaG^CuQUoAr8{si^)ax;}icG-3 zNG)Sh%h@3ze(O8ms5yDf7qfCvUc0t0yL)*`n_HWA!lJIPG}{lL<-WOP6sf9YjI-9% zqs|mis|3a)#O1NA+Wi7x`>nNod-KR2Y}sK{v!nn#C-(En+SO0v&ZVy+!u*&ut^*MO ziFlA;h@lp7K-BFS186)PPaZjUo`?aIR1lh*Vn4zadQk*C8|M926>SMoK#7uK%p4hr zRsuk3+mEKQvPAEF@V?74%JNx=v*C$iL%~P;y99wPI2+anIAmR6H>7OEj5ab@Gn&iY zs;mrtU&`dkU%IftBR3ejMKw26MUosdXE`Pz(xxx4Ad!OUY+BO3+8dy&<`e>y=C434 zB=FmpUWRO?B;|%6Ds|@ zjAfdQFs^c*4NRU<9z?jA>_du85H^C!!qdE*<;K~JFAmZ}4?lQ10k<^;NQT=s4xo}6 zO<+TUKnfya7&S%%=&JxIfBmP={~!PV&%#1hW88JP|HRJfS06~%Z{GOu+SYd-&Ipwl zRBcF3z*T z>Yzt?_0U*5o2(A9RRrN?deWYJ22q#R2PB$|$C-21*{B`U#8Q*xrG1|H690B`4~Tsj zyH716Lfg&SDjhUZGlZV67Bx5CAry7?w2qO-JGU0|+3ISsHmd!E!HUfX$d0%HK$qBd#*{z?RhM9|m#f~d5e&6iJ| z_x|u;s*0e>#9|mwmfA%VAv7Kz18Do^KK9kNo|jfh5ZfFJxj{&oSFNfNBY`1dB<40u z)LOP}-039nMfRebJol|t{fcSx_#|J%l@RPNn(*>gNiA|8thb6lC7|FPE{-Kt&sMv0jT2d z*DRdPK7r7` zEX!jVKmrn>_7NczAO%`l8UF1_m$F1w%-C23N`eF`DoG)8SMKhX*oI+jI!^PP7O zW>_%_T7wRRV^Z{)C1)f5RySkmPM7B$9BeJ~*b-6C zxSCQr0hR^{F^Xv2&c_@d)Es+P##)zXg~8wisg)&yv2}~QC9WhsDSHU>^1(P5TGQ-3rZ=OB&(>Vn)~1ftE1uC z`r}(n%vKKxL-mP$&Z3P7*D`QCdsD!+(f zQ93p;dIjCu*$UCCq#=y|%fI>2s2D1wcG!TXTUT#h`+PPyw}XfW`}=kJd3UdlL0zcN zc1#h20*En;5K~H&S!X!QvctoM28UhEClJE1M!=52`u9@^eLMX>+_$E+bPQl+vQ)jw%9PCln~g~tb|)TJNrkUHF^Am#O(kR zKv0TkUVi7}>fNg?O-=Kor?J!Sdtxg~GxbuXfwu3l$;06Mm-TlbzkTbSTgTVts}E$HNsK2>BU1a)-BNS^ELK`09EJ+0hfGaeW)uZw5xqHsfXZu$V4(?xBaqC<8 zR8r**JmY9HGXtI*9Yfp3zBL*u;r*CI>Y?yO7(i^JUL{9}!6*N@oka{ozON zMGhMoR0cwBM9frHnbs?T%7)7L0ahtmgtpD32&W*&0jIVwpz|1wkh9jpASeQZ=MY?m zuCUpFtxc4o`c#(8oIqkqN?@Ed#3qyv4`<)|_76b-+CVxopo}NSxA&_>7RAWSB1=21D2d$=K?=>`n*o}ZC_0WE_m^Kah&4%fy zTr2?5FtvVmH%ER61*D!CU%v8rRn5vEoddj0-mva`K&HZ6CivIqO#$2G<0Q`fHDc=wA>=NpeTvy?T44H}Y|l3+7m zN=he5hSk-R_7q!dwYPA6ULl|l0TErE0VZp0QRLQGY$VU~VV)x);^d@Wd~G#znfD$M zV@h@Ud3}=zu?|l~z;ZTD>?>c<+yFxeVHRf0tgSwptSAbra%pV^5K~klpe}%cA6>mR zr92m8V-S&I(3E`gb6JRbMGJ$jgJT;((j;wyqMvv~L|c!MIK|YTcR1}It*T9wj1wqH z5>OmdbDw?o`8U7yBoR4w9x7FB!%#j1w%O|H z3R8}Rm9N@!+q(t09EL=NKE&CX0KH&ux3{l1M2nb8!b^L1ZzatJ`6xnEz>d5V1yI}B z8MF(i<*ROWJ)5oC6AWvv(Z{GT zW|tCFJ|>&Vpk@$R5JK+f=**T0p=}OrH~NO5D-L$U8)G0@ zBt(#wccX57vVXY$!j;eNz4zWS(BY(1V_gy?$}vwVhB7$k@+=FK>ItD4-vI^7&^sYr^30=Rf(8G5qyso_gx5 z;gwh4xRR>9V63r&5nsBnmb;vY6d_28lHU37!*cb~V|C@{)mwk@{MUzTtKYwKr^t)s zEBow)jrCC?RWMZK)MgCYFGeJp0wF7@m>;j56NN@-DNoypwYCn0@9ysXf1lr0D*+CB2h6WITR0-SeQ(gbp00`|(kx)^I=VgU-vR9Ra3e=p@ zR&xMRfDrU_eQEyw^GLN=)M&{+?lY`!Y#3t^2^v|<=ZPI@Vv;O3hzZ+9eyGm6?VauB zYGan=3c$`5#lS1DW${3r!!5*3qSpWlv=PxZ<|Cj=o$?XT>8U44%CS{EhMJ+QRsHXIAHh%6qKM0}H7hk&y zYdbo-ykdX&y>E5xj(`9K1muK&d-sjEKN>jq{13j7SqlhAU=97`x$k^&?dI>^c<0mG zi~H_1Pk!xb%}kW87AXOIad+Qd-a0(E{lI+}LYxfq{Nnj@&DD|m|Dq_6v=+i;k52%o zU5t#PD7sKdKdyRZ&>o(lJ&jVIWc$+8s{zm$P8vK{mG>byXP1#2x>OypMA&OlEizf-5>qvIS@fYB5oJr+R6TOZ*pu<7zV>a)q`}?91*pJ zX(Fk1asUPZeL(`K03bGLa#GP2naT=C$iQvM9-cNfJO|Tf9)HL=W1ac-*PdFu{?-Ak z*y-YTZ@vBXXP!oYK0aSZ$zJ>2yKGm!@zu+9>l0~@SKFbd_uqTz(#3PXdEu3Z9=zYV z3`CO%8On@%@57JBgL79t`>f6_T)BGXv1jf91x6F2H`WlciV#t2(YF8h!>CgWh4#qs zhFFH#yxdD^9Q;I*A;4KaWF}_wB$hw^);F9nT|;$AL=;2yvzK1`1lApy9B~9z z$|)dBQI#@rG#|Q^c@>c*AgF;x1O!@;5Nak2(qZ>OJmP|Aj)WkRPBxj*+E_if0T14H zZwsF}zrFeVH=lm>t#|H7QQn#C{`6;m`okX@V-U0^Ap7O7Uc6hb4Ndy=^DEoiYjvO# z75X;606=Vh{QM6T!AsNz=g-Ed=zAZ3&YMqMx*+56-ZX+W_Zt8KMI;o75E;k{5nvz% zA_M}J7GSbGp7qS=KDnJ)DYOSiFq4g7zFOdL~ zlb;YnUgXU#Nkz`)8QRT%RS^-Zsoz8*CgfsN^D@lFP<0WB);6Xt2CSeUDM{0eK06#w zJKE~za}c^HUhCINgD^En%-rry5)ct65Rw8AnJ%WM6#Pk9^TzhNwazvHD_^DAbgF9S zip=~Co__C{Cu(*_6-C1S+E%_wq8uwRoTAKBMvjTdfd#RU5GWxb^d#&GqC$GMyD2jx zV2Y^HT~BI61sUX#?C`ta{5~wn`R%PAee>C0zxu}Y;HC@n|NZhefBvKI*Q4dd*WSD{ zE7;O3(&3$O_|sP}ZmoR(yWenZMHN6gKNB$}F^;88tP8yL{)abwe!eJ>1}C&j+zcep zl%h4ZOPdi2NI%pFnz?038K?`>pKdF{mmoj!OT&wZcvcyJiYSP#tfcCCb&DXhYTc~{ ziXIRmASsfd5~Cn#o6x6#4HjeX>iOaD6S9k_*10GGsEVvainN~gNO5Af5YedbGX&jX zA~l=K3rQCf=v?pi2XOg-^bb-;NuO?PF)6JWW;TXY0L3*)CT3W}#bRjYvoz4SE|4V& zA^~mll}LK8Ou>gLGYG)52q1(&0@8u{RFFuLQ3NGopx%1`1OaI+7y+ejd4PO%Wr5lL zzW2#iQGJ4iHbfVyIgOt&@V&1-@xcA}MiBrYQ93r`&ios3@s9lPVw(yE7udRy;xyW;Ub{B}tl*L?-1FFonm5KHgby?SHf2YBo5q0I7PEjJjY7HvEV$@4-b`jBkqpt0qe5g3sGTEJY_j}(#s z0x3{y+j27iu=l51->sKrC@U_P47AatUhkGIuip#K1D?&-wOj3zf?>c4nO38DuALnl87APV!cs#Bh|8$D=o(xhz($ES6y`|5S$G60%PCz2$ESZ57F z@Vk{(l}A_s0Ay59;zXwLW&sJ27!f0pG7_Q+MLZEQY^^Z_kP`;anCB^`5KfW|Aq0`6 zjXZ7jyN^Hi=mQVw5*eI;60}0ry1)4G56`{-;p;bcKZ2bllxB0^CJ0huYXDGH&LoFK zL{UY1=tAo#sA{qjA0GHW`QG=MvIOIR(U;zQ`>wrU%$$kq<_syu+?e-2_;_BWy2fp^ zwqh(3lQnd1eXT=(l17wfR|ZrGVslKiNV+>NqcI7X5E&9_LTSzj8bnZ34Z)!*k5sj< zCu@GS`O`gSzJzbC&js|1#emR#3Z6;B^<7q{^TmCGA!#DCD(%wVzDrt-5ukq=dkI0> zxPc;R*B?k25=mGooF%e`kq|^{Pju$v@noJ7tYnUi1&jo;vAMOnzMjZ{&Aiajl`ni* z4L1hY4?Y}EW-okxRHMWk-;YctW5Hktiq`mwjmrhV2aje^46-IDUYSe)(U8p@7MZi` z5J(j`r6iJ+5@cu$#lWfjW>)^?_n)h+BLL__5Y(eq0b9QvfWQ8gube-BVdJ;&yeAvM zSe2L}B48q{xW0k06uXL?{*;pI#T`X_{7RWT@UJw|O^BWwu# zh-gUThtIFp?2NtrK#Cw*`Ra}LKAem$!wH|#q$movSg4-Bz3$oAIVkVeMb#;#o$c+z z!`*T|Da&$gl&PYswisImAR-YZQpC79dPGJ44Y6CZ&JJSi4-557h0@0Q z{lEI{do%bl>8(j*L2l<$R%J~tEOyo}aaT7}3*5MU2lGuOi-<}hiXx&QK#D3IRyj!$ z2uaJNC*JnTN?|^;09KVjRU)W&0sjM%7anH^2YQ=i10FXb&P#B>m~ne^plHpZ)L$>uVeB(x=S;XlYXa>bW2A3opK_ z)s#nx#FJW13r?AXMA}09RS6Ij@n|wfGcaUGi4{x==jeDl*B^Z6d20+dd+x`Lo(R79 z+G`&lS97zHloFBxD>F7Q2|cUmZ_J#)YUUMnwdq_K;5`2_huGM!(Q77mkwn zKuStLpo)o_KcIwiW@hZ02?{7S2ikj}rq3^*NeC!l-vdy4#Q&M9oTXNoF~tz1R`kVW zj%?c3SYzsA>j$V3F9W%I+d4V<#N5`P}L~N<|{`4)1-B7O6@_PbLsJ6^=IGvM$JefAf$*2%U1sX^NSbWIhaM!@T(WU`IW~We)y5rg_P3+ zwATD5KY4!i${VlEc^_O079!?8Di7WIa3cH1W63ut(pq)AqsQB;#nWGTYA`Gi`ow&{ z`T!8U@ak(H)F=_o5rB}CNP(12q(?rBsA@N+SknDr@9U30^3eVFsRDJ&Qp=$)zj^VM zFL*lyU|)sOwlRa2DA2 zFXm0->58L(y`w`Q4x=;N!+QzPn2cc{u?qrO14bE=2T&$T0>~6%^ihCq86+a?|tQ`MSRF>RU5&6^F?QfF_rO005!LHhR!_n;DyVVo&*7f1aQ_GXfN4|um1L(>*XE0N@NUKAWqT^!;_mRH!6pc z6cQ3_$@reaKlk153%b6{1K;$yfp)O|czps-nn%Mig>q*9PuzJWeD+2EZs_A_h@X#bwh8vA0a1 zH<^|^UvswBtlvEQ|Jm(c`i4Tm2j`rKaC`j!BE(6~AKU0l%9ir*p&6i7z-SwalLT6w z2K$*XsfvIc9Uagh!!jaM5T5MA{@$(4lPb2HnF-OijSdjA%r)$yOoUwy0i|(&1wlkr zK#2&6Q%nEGXowP062Ta$d8Y!#6iL&gEAT+(pMLbg$LeZH&}F-m2wEIW4DtW{<*(k} z$4V_DG9o~{v*7UQo$>Ve`RASk=w~r%_DMhf{&(xSH|+a)A0z6E(oe%E-+J~L1ys>L z$Rvc=ke^O}`Qq!JFV>IKFwp{;fV-+0(f;#VxGN-uRV^>U@v~oj?1B3(D~O7!_MvH1 z)OSAq^zDPiv0JCbJZs=E8gz~`B8n+277I`<@}eR1PV?DhKARJRoZ21M8ddNqDggC` zmIxqfjLEaCSKzZIK^JB_Yy9*@(S7+q?=y5C-d>M(qqn3~q1|jxK)&xj0!;T?tZ%nI-h66;5iez2sBd|H1&8@Ym8K@KC1vx>75uD46v-9Yw zNqkj4Me*dUVJE5*5d;&cvJfGX66&QaeCxv6kG}f@1k}#QQ-YrGf`n2HaQOKvZ@x9o zJZB)C?~7y*bpmd3B=p+rKlt`HK@dn06a^Fn0BU_0y!GDupC4bHBy=H3OE`c`)Rm!h zr=}Ot?hcip5&ihH&)%+kO2y5DIcMqzY+n)ygnu;&xYmKZ^W+gw%9&a3(pj zY#w&Yg#b!QkkVI>YBBH?H_T2!GfgU(%6*E6)X z0dtrBVFEr8@*xlw&N(zDNeq%i83~8O(QH1cCqHXVp655bd+YA}!l$3rHDcJsOp&mg ze3GV5KKbmGk3V~VY5^M+Go(pUlGZ;H)q}(@?|FUY_2<6xEm#U;v_o(24)20!gfG+i7YWB5!$BTJxs`TC0)(AZKM2%ZSBr zu(}QhN5@H0-FPohR^N~^RZXZKqJhYOK@}i^c#JKNAQB>5tzpVF3c3u9w<#r136RQAvZZXLaOya>wy^ut{b>voi2Pydr$4}doiakU8+6MKIYVjV$a~(g;|#~4X0{>O>dYi z%epuN!bfoj5l1p1qG$#!9ug5O2|^pH{=FKv)5ODRo&lkK97+2!w`DlV-&+VEK}4Y> zOkI?N0Gu%iwAp!|sn-^--m{So27?+CKN<~h-Mkf35)mZ<1wCasMT9)de4x-=S8K>+ znR7W=vs#SKU)aub7yR5=91U~BFiq>Pzx&?b{N%@CSVdBl-@W z07!T03HuolM1k~n%HKTlYwvyVjjuk|u7aO@`q>Lt4sYYyCX`5Y1ljBFee_p57o2k) zYL*m$mIHzF+3e#hSFhf@dvnUiv|%hVC2oQDN}#CNF?$0NKvGpUrpR33Oaw-+BL|&+hEgJ&$h@iAq^j!Iz8KtZDoVOr{ppcKyH*0=rtQG{eGK zSFfchCTohO8HESPB}ua~q(1tKL?|Lj$Y6becF>jwli4Cg)n4006}u67*3{`S8U3RM zRF@%5r+xt}>%wx-wU5kdXIHh$A|jc&PmaN~W+--MFl$291WoL+{jg;;$3KPK-P>K( z5QTR43UCI^-6?=IM0j*?dp6nM-Wt`0fgwTk(~Y&yu6+8? zgAd-gv-|q*-nz-_2ZMXEwQ;N#3Z%-0ZL1PdV^C3K0aai`A|(R4Et_xMI9|!FJo@kh zAAS1SuRq_rrCWL;*dD@LRfM1Y=0E$ZKWkwH0??8J?C#$E{QAw^Is_y3dTB#Er>NFY z!Xy}#P#KbdBm#hedcuI1tbsh^)nPsyWQBF}@tn>*_?zFn^rt`h;pw>-RoK0=_x1-L z#+B`{8|I5~JxudFPZn}JsAjn@%gXzD%+9Mym>p%rEP#rVn#Dn4XB#`!KTe=znGS*1& zD;Ym{aedVgE{=$3W=5(hgO-S%>WkN-2iq16F3VbC?fPC-m`Tw-qpO=gIqKU7oF$SrbT@`xKZZgtO!)EdEwfTJZ#*N)iWL;IXk@hMI^BZYn<)zoY z`ISem-MDjSay<7sujEdZm5voRQ9&pX@o5+-wt+DP)ZR)KCFZ=yRz}&{YCW_KHjJxP zRXH}ge&MZm-hKAzClO%2SiJYahjXcM+21%AAN%pmG@Z3mI}v0&%JRHEMpZqYOpnIX zMTjw`rlFA!3ci-$1Jb$SYArsL*4iv{&1nY$?2cNL2-B&_-kyiHkYkB&^-HLdmaXm{ zjkXaDp4E40z+0FWpnf+#A&1lC?XJi771N4IHfT%1oS6>XCum=Q>4eX>PFg`{Yd z5C{^e5J1Cwvw>kyz;ILyhpxzhH2PRYzbG6yqi(o*w10i~?(T=5eU?yHE?gRLzF5=& zgDGgp+<;Lac}on{oRV10v&?0~Vm)(n@2As68GT_bII@}J%=!=_X%z9A)DSo`557uq zK&U}Lgir}70*Yv}BqM7gRbQ17DoBFJ+F1sQXXpAqW|x>V8Q$hzK>to=c^^$u5!KE{ zGt8LUuI_)AK+;*g_~#QgoKnIjDssXPYw`_?DG7J1x+)U-SY->iLI7i|h}25ptj$k) z-w$HClSB-FwXPVs;ig;N=6q#{lmk&qF=P!kMX)i3K#hUy0ellxbcV3SJ`n{~@Lt8W zu^NB!zdGj!MX@>@%txv28dK+^LX3!}4{typw`l|kZ^3$!N>xz=iCTbH7dTSAB`XWX zyl?<1Nm3QKo$_x<{Vel}vvEXEQ0RmY#t90dSPj~wNIBtMI#IVWVj5TGD@-- zfLvZ%dGgYZpHL3_W3m_^PVYdi!Ib#pdL?k&zJeUx#Vr5 zS!=Q^Zz1vX`MhrDQJ258vv`*#BJ4vC*03}_eP8+6x4t+n;-prvQ~IihFgN#0S=nw@ zQzSHe^20=foJCY5sdU&AW?~}eY@aB?rT$Ttg%GHg_NCokz%ZY}%VP|oMavRlIxg#z z;|ub>94N%;?16jkt*Y{nYV!I^CdQgT^RbRQtP}*)Yx} zYnn!2j26?DZDT1y{x`Fvl_Ad6`q4j%%^O zIFQddubg!-&-apq)Z;~Vh-RPcR=zdwegD=T*3kpuH_e=F@l<;&4=WuwqsLiDef!PV z?y1g-F+3}shqkT9kkQO705f`PH3!nmUNfI7*CwF_K*30n#d3Kshgzsyx)iXkz`3VN z6QC=&!BC(p$nQ=MX@u(NBuJqaPT3WLMjWJ?CNQJ)ZSvQJ(Y+Hc9 zZVHyA8Ak8@wzW75IKOsjwWw?m&SGxOTa1Bb5yQ+!gk3`H{6$y_P27M6cF^FD0tqio z;Oh>X<;`F?V^}CmEVF4 z62^J1wZ08Yp{p(^a*N)P6)_P~Yi$oS{oi}<_&QGO`oaDEh&c8BmfZ`%L>eJVl#~g) zOF$j)eU2}-rTHRxgjqYTt4ZY#VfDt9+#6I!P=%Qc&9dl(1(#CGnMnZh=x>rQBgNZW zNW#A?d}BQ=!zDt}w_QeSgzAtv!x!3jXDNU&hNPNP`ItT5Xn8@SwdOR-X|Vkm;h7cK z%ncQW_JbWo$lNY3bW~I%0QlmQ1vo};3D$Xd!{XfEq z0NpGL@>ZjWI(y70nu2boP>{WkFx#WgPfrg5d|95(;Z+JH40O_}B#%El_lIx3+sn0@ zO~3(TyA1F-7!w`QO@H)~>9!cA$K4aIOCRGLqGC6YVRM%4}U)Ljl@^4wV-a&vS_T2U$?8EcJ7U5`qWHw@Om>WX@TcdsdxcxBj)zkAw zZ{OV;|M&iT>yMwqozkS1G_o`zw{xD&r(p*8H9|0NgMKlZH2WnnhPnSY=HvO9Emvw( zMErbIK!9k+(*`q3|57Euk(g8fRE}-|=9LL1m+wg#;~Y*5v*w-^DaROYc5wkJKr_L$ zD&}x<9xj6#7+!@(uV+r$aGaP5m+PEMJ#hYt#~9@?ygK$8(4Lj5RyhCEX4cpvb#;Da z9>!w?Shn*@Ls<&e%-40j&qVq$-d>i7H@>VyD$|LMb2+K8+lTl2J8<8hil$t-hB?9$;%pu93r2Ucnt#cJtH1L-|u05`sT|M2*~kKZLMo9gK+ z1FhZs@Z(b-adUUm>Ff6V{zvaUK0OX$>+!ff`CVIMYfFkqE<-bydV~#r4cjUTyVmgA?I)(@kYY2q--5t!CEvg z8*!WvNvr0%BJeuPfmQ!fgNX09H?w7hjcjE{Z$ zxGf8OJFUEVOG|rLU*49Xn0+~1oqYtC+qb^>c70Oo_wRiA@ciDx5Brn8n{|A+v`;s& zP(l{i;!wg%Os~3=hPw4xq-m2TuAH$qA3Ui?jd3SY{rkhh`klA@PASf0Rk2a;eLW4# zk=SCj)N^x-5$>L`aU(|z9V4Yb-WDb1e!KkQ@v6^1Xg8T_^Oj#cp%9@rS7wx4J$YQo zSDMbL1r=4LfGSJamZkSjvvl6(;vQ3KY4qOX<^Sk?oE^FWfM#>I6spS?u2o&O0{;&< WUQ=1quENd$0000HChEnVFff=!)SAj+q%BGcz;8Vm2?#G?cL|bzdy6E03!F z`}0(n+;X?oD0%RoZh!Tf%SWvhLaG(&Gh36-PCT^QT~e`tV31;GLk>h7p-~L3-g{Nj z?oDmY)N8dWkDOim;D&uSezY+;+!&o&odj(cs1h35w(&-0RPDAFtSK36Y`cPr z2~8L4?Si>FT3d}lEm9-e(AGwwT(1R1NEjQH<>}e72@W0FbLO?T+sn~4Hyym;n{Q5% z1SELy^g_uX69Wp;4v-L7fc!0kDga|W2zM2E86tg&c;BB6y_Y zDxyxj01)L9;yJreGHjhg^=76@!g8^`Lq#227>uD0PA}mr?@S%L{vde#%`3nE^5m0^ zLcLO{X>0+ZY{H(}5RDH>7^E+dfXp>}ZmQz4=zbU!EGxh*`Ic24 zndprj3n#W3!_BSrC9~I5LW|{nLzTHrMhy&Y4)0sV!dEPxn&}ZNK6Jnh6a)~y0GLS$RW&Pyv`_hhDHUtw(g<8I zUVV3(f8u9<{otO4s{X?5KQOg+u38vCG)bHQasVcZEhvbfRR&}$J#@rSI z?J&Bb*>i^vmR8$#zNrO_6_I@N6982OO{qAiz9O=AV-q(zT0ePWvDxh~8w9Ei6|VZ? zL$)V2sC@bK-v=wxAFf`1y4UEH4~>Ogo;`V{cWB8C*W2BCr(5Ev6*-iGI4XzjOJM%& z%%F-I63cCcus7Y)?OugUTrEYlMzhn_+2y`V#<&#DOwU|?VDHk)Gxf0nv%ha|p)j%3 zOnkmF0;!@Zi6R0afwdqiNZ@>@bV>?_n1$Gf++ensKy0l7fVzMXfeG1(b0VOCf*?*) z!_TLmh&t~OwV;l~fr=`K6-Y%KD1dcN6`T{NDKnLF=N&1MQYY4ds8g3to!9JK_5iBG zRMfvK{n>QZT9-K4p)PUB4t3{6R3TL(nYbvVx8T&Pa?Xl~=09+XBF>xOjZ?5*Dz{4z z*(Hff^$RE=LSmidEAbYo6R$iM5rI^Xf54`qsWw&Y_PX8PX0k8m_Q^=aWQDHtjd5v1&bwWgh4sdj9CwqDToCM_LM>8#Xspw!eI-8H^8wgfhA2ilm?H z0)mL@J(&%>jflQT;-34mFTEt`It8(j9X~v3x8o=%UNrr}(9($y=MS7}4t2(lwrw1o zIP-4#c&`-fAMOrZB%Nww%?>8*T5}s(v0d#9R@Qq%bMp~G#9B9%5|4(Lj@Ay0sRD1d zc)3{}8QmTkXs@sC z1BxK@s)arPu!L;Us%u6)MmVuPsl=tY*bBEloOxj;T0U66>TKLsWCbAv$blapA)ybKfGQy? zL{WUx%~#%e-#d~(xu5&TD%NqKw{>jt@sFT(1}-aH$_LLrccQo79vZ%W-$t>f%e_Vq z`?h*DFks`rsbR56vgwb|$24{A`@ zS2nLqz4=eK-~3xYcyNFQ=Qt8JAWl(0(PtYgoIh!(1t0=6Oe6x#f|^bNSP^1UmlYC7 zcIw}?9yKM-Iz@B=A~A|fNP!KjqM##GQZ&ejAmEr;tV3W%0tF&c1twM}K7nKh*@sxb zp>s|&6#-GN5I`I;F_Q1TmKi<;+5sW~0)mR>g}Dn%!QKYUEkXTwOwr|Ksw#qrqPe*_ z7fnFE?J{F<*^55;rNMxCVOxuNMPCel?LGgK&zdV+uyqbfB+y2Ozdm~ zVgkcVj6jGIP$%gLY7|Fp*IjO{#2Rf&3^r+0MlK)w;<`E7#BjuYtBs>~*PgiJ-GAD4 z8(Y!JzRJP-e&z7hdkZsL@sY~vUw*@Zk#gyVi}qZ5@LP`9mp11ozvjB3$4<0sAyC$@ zyqTYBIS46V6%- z7}T@T$V>BAy|*yli$)IZFF4m1u?bO&yhE_(ih;&~GYx8$8G2Y`V}eM6z$DdhrvmDS zFAD~$3U)qphrj)BeTdrYo3+aaVr{>B$77}t+%Q&;#O19SovJuF9}iT-Jj2y9e2}a^ zKBUy9g5(3QpVtNuG}r7oia`)yR$7F94>v@JfCOaN03vfb2dYfxJMxYQ6B2P&9y_<7 zxjJ-|&2#6T9xnBxfPzhIs*uGcngmLTp-NcP z#F_$=qjITyZewaa?nJ9`Xu_|!T9S6(SpT2s8YHN76}KYV(I;%a>y&c3#J z#S)Z;E3s8rYD=tr2S$=k3xvyCEd_S%plbY?+$zTuXc83_Y=Iqc7&#<@UQ8p^(l#bb zOD9T|!Rs$|&%WAfZ>}N~=PFxE>z9r6y)@HQVPVTkn56^=pysu!p0yh!fV{aW2q{Y{ zL|M{#iBAL1TWy#?HA<3V7#g412pBs{nExY`J($Be2da#eIJ+Z(0EPn)5mn0dic7CB z2mwJviNQMe*)=3_f(QaYfT~JF*^)lKMitS#rRA&s^w}-z;Fw#gDv$#a6~NjAg;HfI zjJdpef`F;nsG>XAb*8E~7X|?U=ITJ#>4k*=orK0j zy(laOPL&XQQLj>{i-qZE)~*L(SlC0A(eZ(?V!akr?q7U!cyMH8`O3+u8)~(s`yab$ zqf^@3xajz?{akB9H2KhpL$m8A$2yC@d&ezb`6He2%JNqX9{=|1zHiSHFV>DO&Uv5NtLC5A41c0g6KRq ztdC9qs;MlDs#!kdEMg-*HF+(zrMr|za@Xm5 z{VVV83%f~nU-#1$>dT2hIR4XyQYb=4j_p!*$BN)5Y| z9Jr?7SiW&;{y=AYyt?Kdde6z@cQ4+vP&>P`V@yIIiUNS4poR%DLJ$yH$}N=!h_ExTW6tkh zx^=tgvT{sml2z&)jc|PN@`Ws`inmBlww9iH-mQc6)vtK>NgW}aJb(1Lw{GY5>eVyv zZQk+Rt@VrR{;t3Ao%O-O)t~>AZ~CkEcZ+6!yoGT(UhmYh#qw@5z%xO@L^L2QkAQ%1 zQeKB6|C!IbQQ95U@6ip6P8GiyhIEJ>q!A_+_S2M^TUyxdF%GVeNeA+J%MrIo%D-% z=VX8XE1v)U_y5<)3(+X&`D&byMhF5cpfGENg$-96fRbZ2#)NPqLXq-|7XWsG*VSf1 z&p;@vzAt0K1A}vhh^1885G;5NM5Mg4UOWLYvw|6fU=R%PTG|4Ry(Tn9mvXF~LY-h5 z_%cb5W>*l-Et#lzUtUAWH;_oYpS~{8l|Uw(^Maz4LR0|{g|6Y5rwJF-=TIYH*XGgt zqP*5Xeh?U@t2E$16ip$tb(U}j*l<@HEsvFA1O+#=wDTT-9N4mtc}uq|@)W z()o5)+Zt>RilSMqj1ewfyQnM4W@kgErrYfkDy5-T9lY*6-_aY!vEri02SgVy;lcd} zzVTCEx>So7>b18&VedQg@h`vW0D$@M*|SZ(T(~|Iqcl4Nz@a5vZ|%|zrqD5He3tpS zt$LD}_|(O%?aRaJ?MM0-t|pCG3az3M*`~ogY4`5RmM(^%=s738mcLki8LOMi6}gX0t(4H zAMUpI9vDMD-~@6ouqGV>nSe0Zz%#{Dm(?nOB2-2TGXxNYVY^aV@|wj5UM(!3ga|zo zO!FbU8!15w?jiVHL^)V{rOM7BmxxF!9eS{LPC!0VfI(vKtXQ~#MHVD?t|+|EIi<82 zH7X`694Eec-=1eJq>Y_oWTLcPX>9ho=hiQ-`N74lYX#!kR+m(Qghr=q?_S?98VASb z=@ai-`I;BE7aB(&c;rj|@qJ6b@Tw1f$Jc-53a)+Uiw=DI$L{&rzk5fA9*_DbfBNGN z|N8@1qe=tCg`NsLL9Y`gc-?BrBBjj&5n+}__qOUMI$NjRlC%EGZSxlzM+)1x={Mw*R+$bEdEj(80R4CoSE4Sg6*_@|lTNGxIpVM_wYCFPcE?-IeeT7_^ z*R|!Ozm<+gwS|4Ox}lz2^}6P&Jilk*YPWy(^y>^%rVn9cxAWJ=6a<_Axi1BLw}k_4481RDX;tQLl@DTv@_q(guSf?pj_^%R`U z*tilQo^|0#43${}G(9D}X&GzIIYgv#F>^rVVG$}|nh2@Eq}B+kL}r0ImH&hthZWkw zGbm!&d=!yZh*&avm@Sy9SP0WikrlSy3Iab(hO>n#ItUOww|&FUyQyZ7y||L zFrj!dQ9G`)I|=N;BQ=eTrFik4rB`k5h;G~rU3jXp!dL21QLPNs{7SvTX+zE1opU?2 zaV(Zp+vmetyXT5^T1p2;>GH+Z%+sEl5i=&eNY!4{r}<&s+tIkjCcBpBhoEalx!s`g z<@2;WpR5hz(gW}rd&AoeD`HtANNr8bfutFv5cY{7~&MQS> zav_L}AQRFw%lm*O0!Lb()9(Ly`~zmBqCbh!A+HyU3LIhB`_( zyRw-VrY2H7kW#t~L2=IET`x2uo5DeRt(tcN3KLZFdq6*mTBcP4* z4g#YH&mit%CP*KF7ZjnOM#RWy1hm#7;x1&RFf!(bk|CiOP{n9E#b6~{1cI@r_0igg z-u0Af#tU<1ZKJa`+HSV0GM2e&&4G^-wYAef);{tHw|_D*bc(I_pM7|>f8o?qP4DYQ zW0nSwoNhk4eCqtpXz%MxWBdKD`lZdzRrb|Jim!k0!Kd*^YrX;w#FW905bk`?9O$Dl z9$_IO7gNLxhboQ!_VxwjYU~#A>ipb@kM8ZZ_AjXM(n2*-`DWBSTiv&?*4wPcLk$+G zUtk=q#%kGiJ9c65(B8&qn+M3=jkJ}9>hw0+RqNbbPN^Lgq@rWvPGp-2<}A%jVoXk5 zJ-D}hc|ET-)61u?KIi#|Gd7J#7tS*QVVMs!k(B^x>Ntn^F1?5#!v>$hi}*6Sr$vCv zTq&J83rN5LIF*=(2+OGl3~7X6)W>TgLSkSN1ZGqeBnJ%&hy|EPF>{$Bpp|ysDy2|@ z!AzbRiA0z*PG{jTWTQt#+OwZg{g8Fx5Iu{O$`25G1VN=r@Kb^r0MA~NE^9P02Me44 zr?ore606b)3E2r@(!w+C?hG>>DF|QQlh9OW+r0wnE0idR^bIA$*t5^aUaS4h{Y|w; z9I{il*Oo_na6LZfobKe^M!g0uPQovsD0wp+TFK5(aeeqS3dq{*T4U+`o|7NNn~$2UAeCsN8}4uT8An` zG~3QIHa11sDv-HSpH?Pv0t>Nii0)Z?sj-3(=V_eAZK0&Tl;~>IjNA!W$}D$}B<+~b zvDz%$7^{)XJGtCBw{w=7N2`rGjXH&g9;iW~l1Mc5D@Ioehx&4MH0}4>GBwK zDi+ZY{N(aKNE2r^s5BhHiFv}xr?aI%A?Oj2vf)#;JB+X)DJ$)WwXD^1n8=&^Gr2GsGa62eBirmStJi}$bG z9izTDSpC422P0B35k_hmR~GAY-C=iaJgimD)+!s_VYOXP_O)w|oLaBwq*d8`YU8ne zwY}2$>JP3q*qcwjuYKn6YpBta)*-7yB~%390FW8Xv^@%x0*#-l;0{8W}+R zE!o_uLBBiPer(@!=Z!zu??T)-Tfp;b_4jS@&?l}Y=Q@==jm^QB>QN#iy-D26MYRSi zi@DEWzEMASaVR`g1D_9RabaVFOinEsL%)EYPL}s)u+i;CEHeB!P@czr2XP;R8P|x-OwILlTO#sOH(EPrx?UF+0AcAykqh_X;>e(Y_H?qWxMV`KR zJg>j$#QFP?tWG3S#b{VWkqRu?mtQX+?JkF5JyS8q>3)^CEYd8Z<9KfjHm`JGv~7nw z(z!4?l#PnY(4Adxu5LGVRIKjQT8VR#=Dt237ne*AhPdFi3(BJOWTfuMVn|G%haDbg zgJixlvY0|{D^R#JHK`r;5Y${v$3}Fq+UcEm@_cipZKQbN{^j`MWz^3pptrx0JjAZT z5h&!zwa@sWlwMY;ss=SIB)6~+4B&c8gk5P4l>Gxy1&_%)A__KxLd6n>+>t%2P#MFl zU&$iMBML=2oQQ~1$8SO~DA0*OR8Ru+2n(f*PO&yLsG!0sQL;M(6_Lmk`2m zov0O*S?iGS5KpY-T`HnT*fKJPo&eWd(_W{P@(4JM7E(8q3_4P>&em*%T0ivU z13g&#yifUfi%N5Pbl<**&ph-m5B*IcP&3tL)E+~zHRw~UM%D@N)&5pJra_TcG;VC( zLfBlKGml@m7DcfWrv=*N3izChPU0k2E=HrSZglEtZ8XlyE7ZUM+L!e|C~g#5{%-dP zCn6mN>?}kz9egai(A_${bkle=Q2FZO+{*FRQ&t~X&}oh6*5%R0aDH_Id!DN`o5J{F zFB(`l(2wU~Gio@gcALgo%*T1UxNv3IYYkjoM-3dXsgPnRXMbq0-t81cGih9X>M}N~ zje|@5N6tKVf9sz0ab!@&PC&OR>g(@2^7oHkn82Mi^0m zvTLYqQh6PS#&AO*0EXaL1=b8A!CSyt;Rr~7R~f-@aGeQ{S(r|TKm+f`*=qs@LuK^j zhd~+;yyw}(D^Bb5^xru9oa-+M5*7x!7_eM9Ni{ivr7Q!xbXA^AD6xE$d) zH?s62Pd|}1makp9GEQ7tg~f&DOYi&Yr>rxsM8;fQWJ{|b2rY5 z|6Y++iHR)RBke<*gY%uOqP8>|tUZ6ZO^=^jPhtbWB)~!+zPb|WgB86k5{q~Q>Pyn3 zaThRVFQkxWoDnsK`vBp=sep*PB8AIaVw6IqHXnX4z4!M1s#`VrZL!SHVFfFD<_1@K zbH@*^z2ia~lCwt_v)-uUJ!|907ELb;1+$C$satNSmHO7&xb5`uwP8MAySOs+7q&>X zY8BMZc&Ejus)z`pbZ5PXt#p2+8C~6)8;uXto7WDe=ay^FUfpOcwMNdJ+!`%b_0_%= zp)iva!h=~HI3yrc3a}KB$@;*CNm#;OEqg%JjI%hJ{DdqV29AqU?F|Km5JIL%ursD( zJU6~TBv@P=25F^CL);Z!gvdNof2J*OIte?8!r-!pi`qp4FfCL^T1eGSdM;0D0;$k_aLB5+ML^Cu!DS@X4$H z_Qs}8Z(Z76$~Ldy?V0TiWB+*0n2gT!8_a3lFu@9XSggy_o15obqkU^tb6z%J`C76w z1lb;E=<7Nza*H~u33=bO7( zMIqLcJBHO~uQbL@eW}Bgo9(Bs*5dlI7i~dpjB6V^)OAI_hYL}=P%9VqwJ+w2>!+5x zF52vMz)7m0m+B&pl|meibmHonP5sD?owhE?Ol)H57jd)JyJvs*=KakVAAjo1rKDCd zI*j`8Vm<5h{fzk&O;S2w*~#x?!Z$XXoD&F-PS8JGj~51!Q!66GF#n_`sHTJ%3IMg% z?0vYMG#i)=>?9BX;8~W=N_Xf$))pc`%ir~bppXQLl-61)6&bVZ#L3)tNz*YrI9)LN zpV=6eOtvIbl@=$`X_+C0C^dSTsG-&2?EJ8NjclK5W;PwGJyz%n-v2L zR8G4jt%c!u)T~wuuASX(bfDfy#Ms>T8;z`yk87=r&adw{$ZML011QksA}j6cKunY- z`TEw@aGcwnMDNM0LOtlEO&JlHSj7XYbS?Gu@nA5Q*wuANE2>rR$K1Z_7CZLi(de$d zd*a+#CK0E~@--F+gVstB0r_%tPZKix@I9#jg$YdnB#cUxHQ#vzG)8;x147!J3!so# z9EQU(ZFKm}7l+YQ(d8SKi2_QgAj2DDm>DqGfEY&1ExRO53`oDv2x9;W#oiby)tia7 zG_9|*iW{iSu4&Vc(sRP_WtN&WNjlv@9BDEz=-Cnzs|i_V1e%?Ks1>bV>s`3E^P+nX zj0<=DfZv53W`vuNV0w=N$C*fAH!#AzeiAdQILe136A@})$KH-R9SbiS#`4av2u%i*!%n9`5Kyx(Ffw32<@S{`o5l8MP@anY(fH_6 z^MMoF1r~yIZP*@TKUOM@qIMFm_r_yqd*sCq5*6#bu_x=j|+%p0wpvql?stPQp5)vx)1zrA>VX}pvditN^)RCc^;+_Mzw)}@`Hg=cod4~g{DU{W<(((q`H$bcv&A7; z!vL$A&fXCLV67Ja-5VbhoaH>lE;GKsBU9m`k4?PExDfokF;QMUkpx zscJMEN-IRu?ezQoVa|D6_0?)(BC{`DtVInwaE(Ug@Ig};cX;k#QS=yHXFSN}4}Rdi zpD59YBQ+|P>usslV7Zo8fD9BP>jigq28E}_{tn4)li zMF@(*{Bf8*MPbBH*h74T7^HIkMeXbfnJ&y#1;`lE zT1Un#%(wO|&P5SH$N+S*z7sa>xo6w*ROrk_YakwUQamiJw#r-pT8KnXDmYLxkU zHrGgrh|7y)mPkp2mHB!cH(LN4ZkSdwUr*}Qc=EgH&{SrstJ0c+2dQY6E-y@gr1T9X z!^&c#)oLO_tycHW6JeHB(5Wo0YMpZ5D6Kwx_VFu&tDeTaoUX2&zqqr#cCGp7V=vvl z`juDCeUatd0BSY9w0g(5_iREd;5mrXK@(u1Nm2l^5Eo9RS%f9J4KKq0kHYg)hJ-k& z7wD0+$XuiqsD(-tp&$dXjGVQU^mLXx0L8j&iW+=Az`}t8>n$XZ))c0w*NV!85jyr2 z5Tm?RU>kPKgJE7bMzi;RM8;9!Y))zJ)2d-AgsdtU$Cfcm$4DlNl)+}26ziS6t(v;L zJ`hAABWOL}vd|iXC<#^%(?k`LvUG=U%d;;t0R@GrB*x+EEma#9e#YFTHx^aX6kY(}j{PlbO>rJO$`4zwShWDMxQWFAHVM$|x(M$}r?63aiT}icuKmvqb zNEIUZ>EH4fU;Mp)6Dwmx3y3jvb*p&s7ya^sXI7&~LAjKXV&q@&g}?u!zwxR@BgGKs z2s{Nu2ws>$m}YbGbN&T2T}T7{@80isLGX);c-3wD;jtXOgN^ zvW2sceeM&Fe5xP4aC7Zzx2}CoZs+o0WN2H;5iS60p?3aCLqowKahb(4Pdfz6<`kW` zNu*SE%LFCRNDpwB~Z@`|OzI7ywx zMoKr&B`-g|?-fUv?>W3MXIRiugjvNjV@--+U%TfDVD{p3R0lKDKpcx=5$8ofT)9}7 z*<0tzkx%fxJhZOtlWyd!Be4JdybEPDxGF(Qt5?!r{H=feoUi=l_FO$l%)h_p!Q;oi zW^=3iUvE9}?2rH9)tnYmO9pC(S|NdYWdyneSz2Cm~u5Uhc_^a1< ztfF97l~*c)z!U09sO?+c@nmy8`u^|zi__OeTItBhg{#{?|5N|`7ytRdpZ&_~UjOjP zs64&fAARVNOTE1Rk}vx8v|43dm2X?6=~FQnC|cJ}G#_eO?AGjJAn1P8=I;6OA7|Am2^C6yC1i7&d~68PYwiUQclZI!@>tq_O7gWbY(z!|K9TLnlg263$?o1@`ET_0^l4sj%cTBof! z@1WAqjuhkyb(oYQ_iw03jx&l_J6d zsc@i`A_OlM;@WTh=^GlgH1}wPBaLTPyWjT}KmWB~`3WC<`VT(krFRc3XvMIR|IROd z)$88$BXiZ*vwXxX_vFyCr@#1xuetfi5@eMNXV#Qb0E!48$@s&600-J{e$x|KrV#1a zq2=HBi7(iufL1WZ}oda{GUHoZ}R7ZAh45Lj~(2*xB1== zT{K|=2g!~{Z+^q0ullX8`k5d4tUvhsw=1QD-5~FueCVlH|Iyd~;5U6jZ@dlQiQR>B zm)9OT{rf-uMThP=_PX~zW`NliY#s6cR1F0v&O7T^MA-i?GZD$eDvI@uIncDziQo0! z6~Llan;Q-s5{~mxLOLa#A!Ve~2zRy*Z|~Fz{H+HbI;ftE|37PA0U*h7Z24Y9W>xpl z&N7KD$;_7dJ~QJnGcz-OW@cvQZ}?1RnQh6^N-J0%o}PxP%!q@mh8@H0K?6KA~9jh*nCL4R>E8D{(u@?~sleE4R z?>lv(ze3BCmgc0xf_44czKWz4;9^zO7m6)h_;=BCf%suhFh5apjCpf1TUfp8*l+&9 z!^ox@LJU#mE${je)=&K1zw*g3pts`Y1{VZu?Tj~X3{?(mj?85D1R{0yz!(0fpZc}8 zqmG;wQr&@-3OKm!^!lZZy{d|;^3a7#pZgjA>7hrSM%2=nb0E8~EY(#ocx!?(N+PXA zJW8aQj6dOJ_x|$lJy`b?4y7Hmjt0w1@yxl^X7d10g|)VX!SLL%BWI2*WmCXJz)RUA;x5R ziAlxwCwu)W*46IH@^CclU$}O5Z)Ih3YdJ`Az>)o2~Tb{G9d6U?IBo#MnFa8f>PcU1(Q;q+8w^++&XDNbvPJn)@-7# zd)LMv+_@}utQ1kG)Ze`FC`4k2p_1#HJ5`WaRcdwvt>&wSh`Q}EkX&C|+uq)b5`;Nwe9MCuuszy)=tp_?my}7xqBS-d z18bKyc0cp@GrjdX$`AbfJMMbbeSi3q|K$AHzXb0lrCPLZEijo$rMg?r!cO>ce=_-N zU-DVs^Bu3#2cA{H2FoF$3hg9sZYCV5iJTewIzfMFZ#dd(S}ApQx266HHn0EMul}dA zXZvd*><=epMLVQ%R+Irm#1<_fw;hxG7KRv5*G_GAcZWxoR*&_L)QCA}OPM*X*7cyt zN7qLuPrk=;7#*B{^7_5bNyj_UPP*0{O_M+GwVT7y^WskYb$(iW97YR00u1l{!c-YRC+RB8#UXGE^o(>ZKq&Xho4#WP3QdaAW6r zr&p6Xz$jW#g9cH$GlU?bs!DiYL$A=FCG=xeQ8c5HP={ED7%7J#?L<#PKU5<1-sbMV z`1_yrw%_b~1g8i@BWIwY}PUEmzS1K zz3dxAQ)35pU z?J?>qU;)`d(9BXwZQHtA&UqnUD596yEaMi2kTx9J-roAL_4^Js9@rji9!!P@&7{fR zW;X5QWPg1XtEWzFKKHqQARHSrTY7ePqZeDVc8rBa4;A&r)*}4X7r9#I4eYw*$GjHGpNx@$3&epfyNMfZj%_o?qsY^q3>mT zWOH=KiREmlMFdEeGdxh#Y3`W81>ETfkO1pAogxJS)TU%NRarS6wZq{A!X~woX0)}H zKl$a)!g_yud*ak)?4R`U&pPw+XMEac|A+fO@jw2~?>tn8m|d~Av$wmyvp>!VA*j2H zqixzc=&L{dx&QF5e9CZ;nuHfT^R`d?f){wBpY`WnxhRt95v!8Uw`SoYtd-i#+x@XuVIND^-xqIye_n+-o)%jQ7UU(-3cT^-L-FfdF zr(bmc2_XFWKmUsR?>g7!hQ{r|{x5v{->rcMUUcs3{^b{s_s0|&O`0G7roUL*!8iQd zKmFWithd>y)&6+$zBl}9%gsCA`$S*b4AEEKuX{QFQY6-VS?jewK zyztJKyV`bB-E*=E6F%|8_1^tG(MW6C!T10;QJrq9D|g-dhQ}{_iXp+~#^F-bt@%5ZVmK0yDU~s7zAc zZN_KnC5M-0>tNXC|CJj9pnx58jqV_4+UljBZv{pV5FVTXG(tctdJ`G~7S*X(UTrRv z-5}~%Af`HcRjmS04$?Sl)$?$5ces<<9%NAtuLB!W%nVvOaNVydP+`&QwJ0);6^)<} zWsFA6mwxVxKKB#v-P+loOxjO;iZcr+@4_|K`=}H+FXh6SF+o`mLY(7r*$+ zZ@qYFEb z(ePk6w*InYcTDnIf9zjvA8hRH@5az;Q&KkXef@vdJkj3gZEPN7v%SIi-~Rp2iXrT` z_T=w=*|q<5vO}Yq0oWZjf9FrXq6)9Mwzc(x|M@RAHrUxs&fKKx$Pz#BhJPJRb`K7+ z2htCQ%}eh;zxj@@YMT7_{_HC^_a}spCUW=5BTxUHt4z#y!J*PCV=#rz~R!y#*=%3x**=UznPxY5W467Nd{obX`W@~@nt#*tG zfW?g>l0B7aJRGh)dEups)i(X)a{Q!Gx>wkWsX4rGWZi?KsFep#Fv1F$j83QDq)RS7 zZ)wh3itdqITj~R7Q_f%o9yHA)TTeQ1kg_m1%U__w1Tq)pb9dw{QsSdRs4SM^+O3rf zUPmZWSOHE~7phNr`XWS>ltr{vS9&m!&B^2-kvUPy=ToQY8{u6`oy9|x8)t`P^8_z? zMu8GEWKYw+E>lX+y61cqL(?>>;qJ3%@4NlBy}{(}^Xt#K>&$pE5qNIvy}kV}{JaM$ zVtaTnY1>-(CqDgwNy>RHv{2xHzO}h$o;&`fo9DQ*Htr&<=EmmuU}rxI zLV%Gplils@Oosgy$mMq#?2koMfhz}N-h`Gbcf?>YbUI~K(YieQoJ1)2YZ{6lxkpbKvdjp%FJ+>JEu~`8PnmGlL%mfTNrZu zOu*D^XXE^S9_(EH)Fb^n0oxw?xMk4Q;h=f)>5X20E!o697|q;ZUA?@NuFbHr_PXu; z~4-lrO_Fg1*E8mprj%~7a|4$huJF8F4B<{ zGZZPaD!C3y)ys1-%diFBy_5q=kx?=u;B4EJvH{-ZPL7#9G%2}zN@>_OgYhKOC&?yl zTcjom!E7>W_6{1$1vP=uB&B3|I&P}Zf$+}H1f>RLho;XkjGEyWe*Vkf{m!o&><>zE z1yV#bsK&Yqm5Ezncb4o>kWoHu4v290!ouigMfxR!z?6<=1>_31sk7@!4TLDBl7T`u zYb{%wv(M|MoRi`$o8{~Xpg?{fpd30 zI$3(x{-j>>$;0n|a`leJhR;S4NGh{NXwziCk+{+y?CpH^@ndh@-rOH;KRd4eQW}3T zJRyt0EoG%J00!3*d|UVU%D-4tn!~JCPz3ZuDJ+&kz$3XiW_E+aJ!`CP+}NRr2|Kt9 z#R!?EB%DG1OXXXp=nrzr_3G3hjO7O|3ls|z=oFRNf$a$q7Fp&ZbsA8a8wj^_$Eh`L z><`>qvlcE$un0WYS5gsxf22Cyojo}cO{DA9hOW;;=dD02;z!vSpXirXq1765P$)i1IxR^qd720T&G_;#~#R z+qOj&r7X`Orj#ZvK+g1OC1?qM7v_DzPzBIcZ%rLzfA=^Eu!ym#RLLeQ!2nH9K6>BT zJL;->`-O`Shu%qyKJDp^lR+m_msy^&Acsj4@4EM~t*ghMzUtNb*)vC<+}JvggU_Ju zdtL&~#WC$cmx#zbJH3O>Q{6%FnV1+k^)BS1D-+Topf$y#yGPYa*Y~4_;vu@Egv2}t zR&j%>u$%vIThK6`dl(lpM0Ge^RXg^{9EA)s7XdqYZ7(IRY`F`4;Co{{=jh7wkM*A( zOkRHC=x98g95mz6_@HSICX?Z$X|m-eX=XATwT)#HxVtyW&0PuYFzRJwQ5DbTpl4D8 zKrWz|0U?!2B3lBWq>2J1dNvJ0XNmR<$d)1@qLyt|kRc)EF$m}CBPivJ=-m?%c%Erg z!sjhg3f&&6%jy)n>_zi6v8d@1uweu zQ$FF@lS%GQlMtCHJ6TRMfme2Bc5CFGW>h1L%nLTuVi*thb4nrTJ}X>);;z-BE2rKKq+$kOyvKKt5d&27Kla{XyhUbG?-oAb5=o7gSM2{9+=V~zKUc!m&n7z@C z4I-ThaE?|Ll`?s4t|#lHINyX*L}$U5W!Kn+NhS9#1?U+~ zQH(6SOzA*h*<6G(;}nrjXuUW;5I~6nJ!)Wn`XIgep-U?l91e$zKIxu!|6g7iks(Iua{Dw(sRZ6L%}V|U?%A05{QU6 zN|_xZCF#g;P>NN|U`I%8yC`C=L32t?(-z06q9#5Is&9spJKWsNZ&8w-^nxohZ~G;s)nd$;1}oC5`roSLnzp$c6V@&yVz zg6-_tkm{~ZE0V2nWFd=lB}_$CsoDj{K+>Sry1R3pgOn=>(xtOlCj=fPw1V6wQ!#i9 zS{T|Om@LCY#jGSP0d8=*I4LPJ8eF?TE_oAFgy{BcNZGnQ-JHlEfeg1o6B0Ne*|TU1 z6qE<4=FCFr#2%50>sK*=Q+9kNrOQ4IMf?KgrbWR;@?1ST8-=M&(@Hogl2e*GegU&; zU^a*Q)W?NR61Y1xUGP0y+f{%li}V~-{csi=-7U9nH&vO%YJixc7K+O>cb%%_&zA)t zHxoEqZ>^eSu!1%wMBJ|L^>?@xWGh!xz+mJX zTRU}cbxH%8F<$8qnX+bKCQ(U-NR?^*Xu6mO^%$iWMT3Q?a4|E7+?3RJ2aD+$#fxyA zB^>~cFQ*B z{&%(Yj@eX93TWHbxd6>Ltk5SCsNvRf2D*#oN=Ide5|HRcmgUfu=%2bFpc2h^s@*oa*jQYqNK; zqZ@<}8eByvTc`%%qF^aaJ%~or33Pc>xo7iV! zFCNgG0Q6)2aZZ(`WPZ7WhlLd;Y{Vbkf6jpx7h*WkUbkMbqlmP$YQt}1B@sXC2Kh|g-}7< z$y+oAWMHYEVr&nFanxe$;ps=uz2e1h{osYWuReKi45=V&3_e{LP-s<6lGW9%PkhOl z&Am&ndd~VU{l>Cu6uPs6=9zUM3HM-AKDoJ(VwT;fTn2-6(-ow+&pA~(Eh`Z+b*)|7 zE~iw*aPiux#@l{F;a{B(t4*+|K$ z)k7LwQg%RWZ>_XS5HcB$Ui-k4z0iC2BPZVT(8^O+t5@H30bKp1Y?~^)W$c-D`LF6lkF#8lR+sm8A?K?HBu>$0s(|bn;FFVf$#m$OZ+(<2c<2~%(;4^w(@!LBb+~()CJE-~bjR40v@|GuzV}ZtlAt=@=9v@~2Zgk3 z&dy(v(3dZSu@} zo_ghT_b+W#<3aCO)jNM~oDwX17wTs-^QM(M*7jcg;wx+6;K|L6?1L+p%|uYVaq%75 z3$GYh)ejE!_y)7A^WQo2${mt89bW5eLUK1|PG z@!k01abbEadc}`2IJ;UkwKGuCft_UAWI#8B4f`I2(@ zF=0`dY#ygB8sHQkx%fEf5TOWt;Q@(A2qDH0LWomAZypxsv(jBO%UnEfCL$qLx3)64 zby_%S<-xb#yZWjN_uO$~WohkQkDYkt`6o`Dc;w-S*6GP}bXsywhPdypjaR*B@9OU8 z+Fnz&`zMbayUNEdZ>%8I$rWIxMYia-p4Y8SE)=SV)Ie1P3F~W`lF&t2(!wl~rxPQV zYKn@wny?UuI^ahXaheNuC+TP}y#MmGVcV+oOr0W9ps>v9D&l~7sSG&GoH|pb?eaaq z#Z|=3)M=iw2Z_jFfX@t*T|5L7XlvL07e*;&7R1F>MiZkrHE1@>hf$E7B3b=SD43oUGk!(wTGZznQ0Tg45l- zN)!+PC~^UuY6ukdnP|SS^hrFooC=mvqXXg@0)b>pv)g!XV+by|l_4ODln5nj;2*x} zj=j;izq)M;(=~4FKVlZ=Aip`(+luM^iU-`gOS1w-JIv8x;cjmU+*N@$P z?DSpd8;^tgpZnl5p7Td9c+SJ0`U#hprQd0=xwpn17$xOYhdAl?m&TJ8pnEP_fpg{R zk{QYZ5QAQ-5F%R6D1CR_YE{4KeNQunlDmm2gyQA8=_1?Nx-7^Fc#|gmp5K0c?T*{m zmRDeIs(#1G{{43zJGtD?Wlw#6^mwAn{Kee5RX#{1?Tv8~Wo3tGxNs}FTM!8`#wo0W zGXbO!gNWR`jQHYS9(0sSrBJF^#VUx%R8_4DuFbPMrW{(I6)Vk*BBC@a)idpWpE*Yv zQo>QPLz=jC-I_TH#^=uae~s)0;Ls|xfFVQaC@lUx*OXt}l6`t8D%~w^Qk|kqb<>=j zDoa6BW-|XBymzM5pEGX`tD3g8oNsMqfDzW+O2!TJ($zC}-+oDa?bPkpFF$=3Y{|5B z(`-0$)W+@8H}-did)4;d-gE9dzQnZ{_x|whr#H6y&w9?o%W*3Wo_Be3{gDsE94*$# zT~e~!Pwd}z_XYLp(&gLh-l^4oSX~<47*;veSwrwd=rrJrrLO~)L%=+!P-YwB34jI| zx04S%bycfMG9Xm66Ksvf|3DS2my|u>gF)-;D+w=y+a9^#ZHH-K#K>EQYPtSxKTdgW=NO-2r|P?2Q0e21JGLY&@p3=ao>?zdK%K7wvO?(6O&-8mu>Ibwc}MUMM6?^AGUe*+O^f? zBP+d?D}sCa+T4BS$({Wt??2rePEMmo*0x2m(*YIIX#hh|nZbw%F)<*Dzkhdh zeb82+@*?F{=GV;m$eeOn05CLWjPHBS$)l^1niT6UWFjn?v~ZfOKm*(R?>c_r$?ak5 zgb=>CLa-Dcog%a9izqxJY>yH=@>~bI1oWIKy?S6>AkK`0-Cy<#%xtUF+(1ap~jE!Ij zYK2B@mQz+$%!kV@Vv|lDU3q$IM`@j`zE0|;{Lo{)=ih&Pf09ft4M%A_IGLIiq3@5v z?)Hk}iGE$Z?1goo1ebpIZM{S}e{5qdUW)blyB|8P+BNL6Pwu;S<&JYZZ+cK8R?qZ# z>hAp}UogG*@?IONSce_)rxvG{aSQcsN0y+noV0)9?uf@y-PQ9r>IaQ41jL$(gDBS7lR)BQEKyg_4 zv!copiCLa0$d&YwMkQUfRCwIyQ6Z-tawv1oQDd@1r7+~&0;ucSEE~atAm#CVROPpkBJIq>=b3xUdOX5VKGB~@Z zW+|7)nLWoU6e{CP)vtth1=|}{%bA5V$zrT=3qwBj<@XJSld=xF=ORI7zYL5$Bs9`n>YIM^eJks=Sr>#u3bluei?ny1lW-U6V6VM;c{CpSV9%~xIdCTn z*9I1ZF~n<|?S&@?Z+U3ve`F(#3(VXP?I`5sR%ObT>qFqRy@5mmD6u^bZ?Noc=>C7! zBR2@xHP<2HQV1A6%}TpqcP>^Z-H*kMa6eS4qPw%Zr%&1zK-;z;o3?G*w&3T-%_Lba z`z4oc3*9`msZ80Na!%O^Gc$8I1XNKK5lS~yB?vxjWXm(9cohlS33~wust#8PN);AT zS_m3GT%)pcB?aX(ePotR3V{Tak_C0y%;BshgwPcN7Dmpg3Vqzd2%q=b=l;;^-kMUD z4tN7M)|%e)xW{<@&b#FLV6?jz&8V8qT_I___JMalZ`|6}!P%XG$KJ@>dNRbujbp#{ z*vkF4HB}s^%oxOtRaDh6QMHz9ksCYl%Fgl&?l=j@l8!4G_VNU}B;20ZGecZgp(=tb zhafqpoEf7!WN}JXQ6GHIqoaN6_2M49%R@;PkVP4AER1B1H0m!MxqRvRrN?8`o@$+) z*|JjLP-eOZjW-6PyHBmHuO5H+iOmF8a9V_#b7VR;#1ynwi#)YIQSV~8S^0a)(qQ+3 zoJwU00NhERHg0FWeYzW!c?=pT*$i&e?9&aflnf~Hm8zY8CB@BW+k5&v3K#F3G)hn> zG8MWL(omAClJZY?8h4p%1JhuZOs1bn&dM5oxHm^GR(%tU<-GtYo2r;42aBQ>9TN0V z-(a@#FT!$(E^fp0CFqBhlCw>@^k(qReipoh)N$#Sj3Fia&VTtOpYspD`}~RZX>A{H zUygY2L(LP{R$lee@X$3~?uW@JJFD#3LAotR9qgO9St8l&jilaRZ`zSF$SH7Ox@Ct8|I>P(Vxc=t9jP1<L)^Yy`%JMo3bV(y*_6}7Rzb zHeWbay^!PrI>1ASQv;utF@rpQ@ydsu*gST0ZR^6;^4gjykwK+&ooxe+g`7?(htHcPR+94;OUJ1@u1{#T|In# ziwH#SP)zgpHHEl(!8FJ$=3;@|b*VnfxtSwW4We0!k1j}Q2Zd$8Or0+3@aZjtQw35H zI&N|JVK~O2?ZY~)Sc+%~q&cl39KO2ydMHCw%)KbM9QynMx5+7mk4Vy2QGS^Gxay)z zcV1X|%N2!eSqjjq%sH1V#XT?g*6Ps5t&Q#reZ}AV+Ol#N9-h1N4Q)g_lw03lO{M^;29=$!cwRs}TTQMqLCv0wK#JHfMqEaV5yRuQwH#T?z-x#fjOFjfDE0Sc62lFJOW26J;N z&3)z@%&fIM<%~{MJY0lGXqmdA%*RGv%&-rRS&)XV-amb0H|;D5a9a2Lh`W7~odQiK zD3FalxvLz!_mRv0;A?;8o$r6LiUDNqP+4&IoZS*L8GnPG#KjQ5XB zMzwnr`}=LP4pVA&bZ#_;Dn^YlYK_&kAnf&eeWAbTnP)flaw}4ggtW?lc=-?ti zdJ1)Mp+a&Op?Q~Yke$Px_oRvPQ7l$qD0e9z5;V+KBMNa#!*fb-i=isVGfa4HnqGf- zb?Ic#3b#D|@WG2=@%Z`oo%^lt`1=n(e&sFizvymFayZ>N!@tATjMm9rI6@|6x}5q< zRj^CZRD?>JYJ2=N5B4Hi3+>$5Q#UquVioIN0z{-ABUM6>BJEMKVG$BITyF>(kB;`g z@gIIB`!z)fiBan18qR5N%M1Oe16xj`b`cRsNhnp}%tRL>E2VQ+gp>;cJ7jYAPnjYF zlZsZLvg;oAC5$cKb81;B>ZY^V;?Qn7&XX4@)oVhXvq+;Xq!e;W<`XYib~VcsDY18O z$4vdfJB)6}Zt=zY%){k{YL-l)K;_2WDiuU1umy;nU_mjM2G~NDTqIPDH&JC5`53ci z_2O8_ddQCo6yza%niK!~TqjrN4lNI5J{VT&Vj=&hBP<@=*xG&lAG~j4XXLRKchaZO zmqPOc*oN3vJadCw?1rCu}Q=)tG z5-TkCdy`3^j|Sr)604}ef(Ejn87wilp-D+vnNjdW2oa}}RA(k90uh&>5dgiX zJsIW{=*~Rz1w?C3H}PpGO(?qZXeN9?%tK(sann1Oo2;N2)H2;#p|^m;3RJOB_$0yM zD@(m9xTuy(XA>=@Z03_DnK@86vepGe9SaoMjmBvS%rlDB%|3;s!i-Xyd$Z89{5*FS z8Nxz}H<12QO<1>&9r-u9NQspFH3Y|(Eto;!Q|(jS4#~P zF<)8kefhWi`jeM7VhoGBx(NB4`_A5b_o+|+_~*u`JA0!=aqj}$@J0DT0fAUdMZKIC zC)~;+*jc#GYXXk!PIs3s<5i%ruX8Esg4U6$-OWu!XJCoK&F&nWCAJ9&IP z$tAbmc+?kb+jv+Z(>^jSpg_4+jomLfpT3+&=H)pZ9%V z|F`-yO35zF;Zz~sJr&b{+pkA)!8*C?chejV#7 z7%&)&q$>(`q1t#j{KtRtzu?#^f})Dp9o%)-vC%;igaDxw?POQYQm7bFkFCX>-BG5v z8`<$rRYa{64H2X;J_V$?udl33_6~voorqp%2~zsrGpVLd*p=*TB(c~Ayo;cxrY|JR zmG1LLAfXFNOU6ws_m_V5SKo2rosXjqNCvZ;YL6)c_^W^av%d4c{rS!PgV|?!7rv46 zs!=Irmw#uLQ_^Xr&ej}rUo76w6ikYhnI#b^T(c7H6>#FzKWTCLq@!D)x@VQ?0Uf12 z)BAN4)PPU&LC!V{(R@~j@P&@%G?7s$Ce+!uyOGSf9oev7->N-?81%;W{`()_II`Yn zMwZ%PU5{PU(Vngy%U7?CT05JQ5R|5YMTk{>1B0832vQ8%^p~npLaY^aL>)n%IlZ2< zm3-^k#cRlhME?J1A0*QZXb z>=f;+o>u>#zHx$c!)(fBUZQt^@ znx+{IFd8R<6SG-_of0Y)4OI|{l8>$}@9dALN=ip=1SKd5p;J&Ya&;PQDTd`BEudwV zcl8dZm#k#kRg=!cmO~Ns>B70lH0zE^_977HtX~1lRQ9B-CH;PdY?9JQe^KgfUduD|D?6{li?v7FdLOJTHTq0do zW!5D>Ldw*x1m2}0Qtm12;wy;iET>U+OmKqzI=t}@KKLC!@_WDV>kt0=kN*8nd+l>Z zO+&)%!)v*aE)SdUapRV~gX?++T=1r8wYoJpMj-j7_ddS1+EZ_-s$ELPY&>@?RCU|> z@W|@Pojs4W0U3ynqSF)mH7AK6b3m=AYm2Optq=xeJAQKgmw)V^@9YglV+a}pe&-L~ z|F8eq_hGq*!T8I*@%8`uAAQ>BU_uVS1eCQl1P_iZaH1ngbw+knOMG%_Y# z?)AR!JAN7NXxh4}#<3MZK!f-C@qHh-h!`-M{LR1i*~@i5P4d>pz9`+ZFqBDG{vILG zElTJwp{iNcQmQPZql=EL)cHk(1wE@}Ql);BHsvlxn)=cb36ry~gUb|*>uxjAnW?0* z&E`XBZ?0x{Kju zbrBNMQLABQ(}=J@$*QmY&NsaA=iiEy>ktK^P|tSLqSQ_ILfx_HNh`|{+^p+3c2$t3 z9fc6(7NnEHrR&>T$&%8kaA1lNUps>3{&3VZl)BeLJqjY_#bvGcm-=dxbYu;dt1H)o z2>Z3ItTt;)^5`Y$G9k0kFb@Y=)igjQe8wld^y1&S_FdohYv@%acI@j+1O z&zSp^ebEt9M`SIv?OqjPR1wM9+BP>$n_Z3_U0qt)R`*J!4l2t%YZ6k5BC*s+NCj){ z1he2CgyO!^@6|^M>dwZ9>cVLeQYFLbzFdc#?O<=BQG$9A_jW?4f!3v;oy^sg0R;A| zILaMBLm(nFx2dXSnLu4qW1V~;I~X%&!EPwwzLapH)99aTpOGr^~FYvo{zI z^JqA3d`ijxx_|wrU-vuj`{4VY#QM@NzV4l`e9@gv(_vFZWVU_if~qXd9kUrTA-qYpfpE_`$t~2E!p7GA-FKd{Tsr$U!+acDZbvD>d(ATi7fYwq~2Z_MadgW)6u4V8x~ za9VUwT@s0+t!jj0dAT2>yzV#O^`7@#eCqP%v+g_p+-KeK>7VeN?St&iS|xe z@uX$Ym42uz**_S z>T16i<8U-tTB=9QWH6l2(68g#Y9DO^piy`BM{UZ&X}0g)?^kO}eS?oDZ56!MYLe6N zU~C4=gKYZL(%_Dp*^e{qIz=!YciwjVgYS6)Dvv+Cp$MYV(H)5O-VzWTi69Vw_Fytu z+&@UjrFyx%mxIZ{a=lcPSxWvkZU@-JoSdxP>q&!>T%1 zDr+4R$t){NW*C4y&&%{))Epz>Mq#f%NygOH!-J+?>m$a~$E&M5NEU;yishA9cQ#J; z>)zm?$(br4AS--#r-QXuF)YWWeYVk8i7-u%S!pyviS_m6UwOkj{@kDcY78eZ!?be~ z&K>{VU;VH5+|K8qLz(=ub z|7U&M-719^cXzkq?#{coJ}&O=6nB@4ySux)JlqPsxI=xVyWQ^pdnPyYnX->R{kf6P zK-)|v$z;yS(VR0jGBOTW!7#Xwcb~z_H6SBK-L+Fw;$v)jZ=-LB2@&0U4qA5c%Hsrx zGyy)Da;EFqsb=raHQs!PmZIIznKFkxA#0&-*s)3!&AxqA{~LE-wC*|&ICk&+48#eZ zJa^BAZ5JHQ#H}m)RVT-d_%GZcWYaDT;E3DEb*|95&OUc*-?9O zkS4hcg$UxrcW}ltD?fknnU*ENStw72BqA&nYtaDs(;3Il-?wP(>2J?JfKd452C8>Kf>0%9$n2g&m^?P1%h0j%V-HSwrepEx2!GFF+nz%d&;H z9!R3?AGUGLj?1wxK4G+gtZ6#7C^u*HZ&2JJS0Ha@)SL3x7#SI30qgVW=7J=*y-KU8 zXLnw4JNFNmv~kP68!>Ssy_=m`xIO(rX>&J^5&{Q60mgM1xk zBT@z$ai-P)E?%G@fXQq&BsjfP0C8`%*=S51WSG8aC4(l?>B^rwy~Ac^NmiC*R7BlY za~=d{698ztdSh6+RM7ml>{usf_Oxd%KD>P57LwqVuQWLN?M65AN@Y^NeDa#bSQwO1 zYD`J}{{9PE1#7IIo+0&^`|Vd2#_{p-K7H;%>xSbI^-mTFikH$Mna^{8uIpibd6%Y@kpTx1^7Yr$S6w` zAlTvb_cax(GCbnqLlTP82ifB6qq;80nEIBcpi{Kg!&U;kUU~cfS<{r z!JcbmqKuxq^ZD&RNfm9icloWN9hwi~Dj`j3O!<0R-+X20R|kTjih1^7`o!&XSDvtj zFVT^W0`nrzZRhikpMreT1o>2LJ?+ev^O!t(0|p%2b5*nNy6yccAdD0Nh!<+(vYli}~Q*-7!^U_SbE^C=4s z1SJJTe0usGXv`8orxS!ZGrIrX#rIH=#u_7`1L-f|}r54-+3E zsp$0#N=!78PMl%ePwizinZ2oSr8|_80se{bmqWm2w~Aa=`M5|me&u@j&ASn}u3Y+XlP@om2UO3v5zv-+pV|a6F+(qHDp*zAs*`yMA{`&ca!lulJp^_xlcC zjSZVn9qt;Ebq^Q?!rc^<%Ag0h*RN3w_7Dy3;uc0v<=d>|oQSh`>vXI!azYz;<h zIuF!wFU~(~)o+;}4wWz!EexsjajE#F7J@Gd=G?yjs;m_TXD&Y|bLgOq({mM zpV$80t1j{DarP|bN0DSGL~uO_HFBQ>`Hr5ooqdT#n>v3BMg4>U4bNVk9a=Fz;Xtf) z_MA>9PEFW-Y)aw08JsRM3CfpBp*-L90H9qB3}^d`w_|D5koTY;xQenqg;RPQBY@mX4Mo^*Yx;nTMbE9Uzg zPuzKeN!Ox5>7#otqMz5q1T!zArfO)uR3=}(6#?k$R4*D8WyM4-HbnBOiJC=k>>X=m3`}=(t!CGb3t$88+u;4Z2l++C z+hE2#wRKpI(81k?HE&d_C=!Zs-7Y^c%Kc5g*Ns3w{_^t|nUV1EBFlqT?Vrkb)22an zD;KfYZ9pVo-_9e~Ki+=@XdXAIUH8`2?1`AHt3lP`3m5&pPoI^qZ$%uvaHn>K{B}xE zEtris+tN(~y0@whno*)aPN+NmgW9pQ0oM-Rh_}W=9D+=>bmNJHci({LEjm=4HmsE^ z$$@z;o80M1#K&`IAAEZ7YWJ~gO>31%a5`l6hB(ZryK1!xJ-TiPDj-@E%by9WoG#5- z<|0Rc(2_Yz70SsNg#aV@L;$o>Oj63z!pf68v#E&gks@S}a;H)hES(w|0Mt4oPI>wu zA-mZGC)*@Tf(gEGBt{53xs)%^o#>#4v>ITn6iPJ-1k;4GD0-s~1W_cZNKUU3UEU!9 zH7ggIIQ(zHseA#fP`8pdzn01G#1o(4f@oBuVxcD03iFo;Fzch@od`XD@6l^a8H>dk z1|!iSc*-U+VNb&ENt7d>AQ+xpjE-=Lc_ca!DZwqJw1Kt!^2u9J!((=>8<&rZu}kqR zDWZ70mK8UwJ%NpR&%x{6+Elj_Fmhy8SwBX#?cX@8PlFG!c5Yn;gz?z}Vy4Xgy>gKp zUt;XAOXtlR!b8hrir4p!{X!ut-59QT;jFthpTR4@bDn420(~IDW%QY`^ib<2W%J=d z;ySd^_m)6TvN=&)BDT0V0K}~Y8c~5_b2M&VE_e2{PAsyQe$vEkpb1#;sJn}C)0$ux z?KDd^oB*wQJ zu0hGmmmUN3_n)}ax=}eS&GIc5fPq+qk)Q_Pv%nFN_RT$_XPtA0Z(+pcn=dr2Ra&h` zaqY4>Lb8Vd6M#7`Qm_L4>AYm3Fw{yy0(689Y2#ObJt4*qTyyyym7-F_xUOn?&xDTMTDSw5rwInjaBsmoz7tMRM@3J`+{wrI4_X;4%= zP;GEX;G^)_U%$oS0RXt4k2e$rb}XvZX|dS6U|*3mn}iDjTmf6sMXF_Q9dh6$jGMh{ z*P-j5fCCmAlXAHdV-sVM{e8>^Bc`uFZs0a|@suJy2=93A=1DK>a)T{=9R3!25yX{% z^r=knEwZ{fxIyhuFmEP+5#Ia4wI_YM)O0w7rV1ZSuUkH|%cpq27T0wCb<~ujdafKH z38c=zKtdsqloS~3hqgd&@{ScA&M5SnlH+Cm%)uE;=6dt^jgztbd4KoImA*;s5-l5) ztW%*NnMz!EP%U^~Nm}LBD}@7=gbWGYT34!5u`r_oVd=xp?HBP022b5OYs7EL!}I5_ zJq7avk~MtB4rs3UNl_Hi;RO2wE$=;kO9LdS<%kM6`|;gTwu+^4T|WB&r1ILG7p)r+ zhjZupGm?lBlM3WX56BkrsS*q3$-o!$%#|nK@$ujokFM{}r1(fb@=H|)L;Fd@P5}_S zv4P8V%5RCc<(cfepjO6B;BNn_{#=Xr{=0CT}083k+Ux z%FyY7JAefd4-JB~#h~R5_z6&+SsmON6=nkf2Y1e-+j6KM3`cR{p|3RTK6<-l(=eEY zC9%?{aHWD}isghbdgRD;j+~rhh8s4pM}A+BB_JfAh-a|SYvmO|y$blp2&6SutAp>d zpo~W1VtE@i+W3H{mm=EQYzaDoY&Ta(;!9`Go6(DrmQ8~So&Z#3;Wg>aFd&9K>>GTG;xD#TA@qvQG={8& zo`dqPCrB%OT?O9IR6XlcCNrqjpp|y;6H*joFO>lg>y4Pb9zbHyyF|zuB{Faq5j22v zE6AFIVrMxdKMXAe^^%>d^eTX$Y_=rW5u7NHfs`>x;_hF9kz{hz>s7H9Ct*T>2~`)) zj1MiEjrY0v;Ef}@FEX(}Iy#vErbk|5ObF;hst~>c1_iL{)M!tRZyv7H}=SxMO5w zoORue2F^I zDKM6=wz4Z4+eJF#AI6qdiT@S#%DB!-ekggsR%JbZAVq8vH0dxi@N;M=U{JtGFqaRd zv)7|egE|iVKPXU}=!vV7T^j8v+Y_#`#CqN{RdP0P*2aTYrdK8Fst z(jhY1O1BbSMGIu6$LT3oa;lh=3<3y~WpG4S!W86Ic!i44@fzM##0bCwqwtKkfj-^? zI@Z8NIDge8Z;i1TugW^Dfe+ z3;girEAX#x`#X8DBe=@ zEfR~V#$x6#kOhAWL00wMF+e3g%Yr+RSaG^GSp$V_L75y#S$Ms8N(6gjDX}x?DUP(5 z9h9uFkZX9JO5T|`m*UCWiJd?=vFNn`9^sK9n3H6j8-)xZ*dqr_kwGkcj!`5oh(kr9U=D7@dMGFZ(1t93AP=d14Tf~75-fK6 z%TI4U#iUK`hjeRvnK$gZNXpZ1u}y201doGrM^4EX0T&+xUW!TpM1NxP(*GzPsEAJ7 z%2SfUPK@`0W8nMGv7=`0oHgpV06%XhY#>@!>jq_aw79u<&lNm?_z7r65{t6n1Bpaz zoTx(J<57f#H8_9fPwyiEvNM+-9@4EYKR?j0dXYbt9f9uh%+<$L%H%~$K4J-zFN6_%0tOf;cp*3dzUX~db#e@zAJFJgnqnH&0@T!PUS*dx10qv+qCy; zk9JjMd&qk5e)wKCN28iWIUIYi`hsF9?((HF8c4X8gW7wB;Sk2=WRX));v6-RBg(B-IUX{GqM!qATeCO3>9=MGRyaZRvEgG*78SEE+;Uz8D5_|U6JtdzHT zsuR!V%bAWu1wZcz^Y%8WQPfKkT$=V=d}iA@mMIO8f!lgC1XfC7s=9DJyh5p5j1js2 z%S%TfAxIRu2R`t!cw)P*9cIJGRjbX6M<*w1jdWw@;ag83Vw#OX`LmQQlEvvHRc|8A zU;YeqKrH$9O!f!dm8Ke)}=<#D>8J9rt2j7jJ}1 zhn>iCo8l-YXH(Tbp!>@2{l}CJjT@8i`p^kmfDGIwJ!f>QKW6QQ5~6nd*$Lq*WvJ~m zWTiVYcKy7)*d3E013C;a=Pxtx^uh5}%I5v>DLQ+lp=8Lj*sC-PHRyF5$QFgQ-MaW7 zOBdL4#2OhH;8r|&>UOfLe2JMnxS8_U+drK%?~1b$5XV<-JHIHbohJ%?hZvrFG;i-& znIac%@a~X86{8s$9Y4~^YAWHx`~S`TBKBf*$oDEfI<)3Ld`7s7$>Oiv^tXDYTBY&B zir>BUT;=z6+R{aZCGgFR*S z_6u>JqgizPu(0+#g`p=SARA#thu?qlMm37*(givpSjSoCuQ}1LQw@AXsD@@O>N&XE z0!K)I%D+YP)|G=(`|dh&>tpyk2G6kE8CK2c%#^vN%1Y+)!_ak`4w6`re$TFl} zyy(E}Jy85%NUBc`pNzI6Yn7>lw^yw#2lF%zEx-939~KM-gG{=4di zJ(raAFwtTWSo*fg$_exLF$U{Zt;XFJ$dw>-1#68)|1<$zear!`fGLfdwd-dqhqoIb zyl0^irLNuENCd-O&Sl`sPW*hkxl1K(ldk_pIK2KH}Bq|Ekx-!H)x{ZcmuM zcgcoR=dVBgPZ;s$y%#ICo*O@R&w*2S;^J+*(i0g13-^+1uHA|FX}9ODJ(=;x;km1h zUAv9O|N8Rs?HBs=F8cKU#mMlh{3=Rh_+MXu2x|7L{3^eSEI@ly{wlwUu#^d1{{Q+y zk)H2`e}Ix65rx>V@~bG+FLXjMO)4*c#11k&efjlkRQ&&HOip^AK5<00K0A$ P00000NkvXXu0mjf8lHMe literal 0 HcmV?d00001 diff --git a/src/custom/assets/images/links-pfreport-j.png b/src/custom/assets/images/links-pfreport-j.png new file mode 100644 index 0000000000000000000000000000000000000000..69d923cd269276046fd489446565727345904dd6 GIT binary patch literal 29117 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 literal 0 HcmV?d00001 diff --git a/src/custom/assets/images/main-banner.png b/src/custom/assets/images/main-banner.png new file mode 100644 index 0000000000000000000000000000000000000000..371d2e2e6c468ee3cc28d94bb982df7a1e18a7d6 GIT binary patch literal 113952 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 R6*#*=C!+bvDfe30{f% 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 z z+9)~ST`E8nhO6sqVWO(#>Tmz%?{&KE@qN3{N}+8T0?9`(}ho*t?wLKpV@8lL|EJ~%+#CTc=I#QUg!p8Gc_Usf#|EQ zom(?oytv114K4L|V4z3;eh*C!r6H`JFV1O$Xl6(D(O* z06-U$vaGm=mOeRNe?bb*cScs7u@!qf6xju5=Z(Q9(z4YO8HPxj3_^(v5b9Qci=}dE zqlWz&b&IE-9(WIr{K0T}(V3>Loh^Ok;hF-`;CaT0QSyI!=U*E8@cGOQf(UvgIH9Lo z3*NK z1;2ErJNS!BDk2UFz=*&McN%^}TMn0R%v9%NGXUoDq#UOx5rBBWY;A}bcoHRMS=uvZ zS117>4yRf^*Ab!897G73Eq1btQ3^DG6u`rfIZry-m{~cD{?+&s_l?YLg#EkBrMd3Z zrFMVLjEC$iQ=<0U>(^Nc&6S6y^0O(CJhyn$hRoeP^73LU^ZEMZM1Emhm)HGLOWRX! z<%qY^7Bh1hJC$zrV?ZDf5C}CR1T?R-Adx_L?FsX1zAjK2a<=)M2Zo7JB8eNldmypi z289>`0x*nXK0d}rW^~Z*nYVnaPii_PHpn!nWWLn(jpN zmJqP3FTEpc_q*oaQtIvlmGjN8-M5E@DJTHt$|_*Hir#A zjw7|dFBQcykP488K&Ukr-~v0o+_`r+1vXn;idKT;V%4ABXmt{OvK=tMiL`U?w6{O! z>=?+zVe;NTJ@J9veTN3qtL=~>5pg7qMutrtq!*rMgoH%IwpJsBhK;7J;~0?+StJ?*xGL@_M7*)H43eXCHj|^ohagDdxCbpyOED zWZI0mtGKPW!KCIYVWy%?hWrSkE?E{!d0;RodTfl_ov0~UvfD9zP4z^13>g^pt}$L5 z*)h3iYajyPl?ng}0Z(08EU(PvGyREaoNH>EC5`~8k&qKYDV3V727mh8(mx!?*_H!b zXkxeCc-?*X?)~kLy)@_+7F#M$NF`NQXb;Ct@*umAF$&%CtI z_CroYuvvEW8r#i!_dDKyB%AdB;P*duQVA{u0%-t5y0+HeG&1j9ntqV1Z?p{8G&u+Q ze<4kxJ-Lw3AcQ5_XLgv6i zdVj#|sxkQVz&od^FMevzzs^Lpbg)=JlT>eB{#Y%wqh%EuMqk^^6IetT zb9+5Cy{rDhGkx#S2wbCq(xITkQxbp!>x~mKcooC|2yh^rPbc*&sq0KlngIeTfSj!R z=!GIjy+kC`uIyxzYC2xa`Q@FJXBysU(O=NSn>;`7?yBYQFFWJA>d$(r+2$!tzzIjf zOGj2d@!a6M=hFK$F^0W+34-AMjv)f*xkWG}`b$(v0Z)IW&k@0E3EJBGaoAZ4Q&rh^ z47diSb)3Sv@%->e{b2v)PE9}Cp4o^-Q&88k^X1AkWAgr?m*zUVt~4j#F#h6r;lkqj z-j!yy8pFNCg}rv;ygz&-S1pI`q}ASUuY7OeazhXN!lm0EYz&=m7iVP=NP^`jNc}vj zX+tKADcI=b1HgpKPq#}lF_OpzAq(k7q^TS6W1+Jn+Xhg=h_WJls5S)J03&Wm76C|P zjZO-Br;LU#ymlXAH8SJKtF#IbWYSLK?-nn-F~77^tPB~oXR3Q1Y3MWqY%T{#xl<9s$17I5i8W$LABKN>M8J0s-tVd2@0v3E@zQme0VM$Y23P@+Dz_Gc@QKxCH;@LR;~9I3-p&2#KRL5LlC%ENebbOA0JyN;{-+O~J2II1 zw(AC~orDo12B3)mP)cKLhgmAgdKYY)18Sx=OB>4sVL=%7-ay?%O=qm@OX<%q*7_W_ zU6*gugKruE8_-x9QTDgzG8lBbm3mnMoI7>#b6oaz6&AGzbd{P!;kfg0$QydbHGi1yD60>H|0ZDFb6 z*-R5K+8i0WDpJ@qX=c5$YGgS3#(VadrVtE~Aw#%0S8aAeLoj%)v+b8CnbEtiea-H= zgw2{{YtKpwfFlqA0;^erAD#XeySpc*D^K6C_0jX)YI)*xLe4^TA_V zT_cB}dw)E7jZPMWCeZq@-{lN?l?uE9QL|`h4zd(g6MLt#ey%(InT`GbVCN?&v37fF zr<%hC@Nqsn)4zVHJ*jm!R-Od@-J?&R?v5X;+k=i@CilzjL4x@ECcaeZ4nAK$a5Bs+ zwo0H(X82lKpv;_CvAMp@XdiDBTT!MZVpl{+6a+RfG`Unv27XE+fDv4f`LJsOBgJH+ zn>I+06-c7h*ix}GnXdCxs~UJ9t%Lb>!DucqVr5unGMcNl6Jw)Q`0@Dg6Yb&q^K;)i z^4y-{+Cv-D5tjpf6&|~vSU-F?wG@T!xVw=r&YiomTj*fesg79ltHBL!ZQR1-M1AVv z+TMNH>L4~#j{oG0d1bC}=zN_?CdFpAh!7$MLo&Ip(_KwxK*Ck4_}4UvCX3-)ca$u{ zNFv2i6CyAMTc+j&K&TmL;-)!y5HtZY+Ul}Zg5<98{0|}g_Q};}R~valOqA>o?H)QZ znEk@V%AvvZ8xHg(on)mGSE6XC6|c2|D|Pet&aUn$rR%XwGt3&o65KJ_On*9v)zho> z`>XjdRs~12nz|FKvAm;*0jMpjD#WkI3qu5D3x2lRy)K{0rR;hu43rL~s&4-Oi9h?`~~eAM$5t=pdlMe0!t3MnmU0j zI;kTE@BMRcGTMLc*M9HmfBb!K{K4jV4$&j(z?hkxKV{`7OF#)h&4 zuSvGqd=nBfV(^y{Q78bwo?-;q)?JWqO)P340LBO|xYu1AKTt@@eg2hw)hB0aFG$1A zM{8w!isRXBzk@4^xQ$&6}el8PwO3x%|G+5kwvVbj2z z5fJ{RF7J@r2+%84UxWJc-kAYI04layOp!)>)eK+0EaRQ*$-$AkVZPrC4rbTBu)gO{ z=k9nz-+7CJqtwpST*0Y$X3*_s99KJWJ!Q~ofBLvToT5g_Txu(E#9ZsQgA>8dKU~`V zOl|UtbjGtG{MS|<^t7(rX92<`w0h%ojzVjt04( zSl|2E_UJv?)m?Tymi&`z2U;>?lH@#j=Yfw8+qL5hcSK3*@W2Z#twB16`&XCb@RuqF zG~s^d$~~poE1lAUP8v4cc&mp$9;_r#QC6fCpk88?q)e&p#ZM-czn9aB+~C=IdFwNQB`oLTQgQoXp^{`nUd zqeSoS_x{zbledoLgIGza2pJ(m&;T4sDFDe#Ha&%>Uj(g*^`e{CV!o+Vz&Hphjb^Cf!i7tx&s-=D=B!Lw8{@4wV}y`) z>Yer!lYK_o7npCA3oKVQoj@TYPHE2K1iUO13v#thQv+t?#s$$3us9eeRK$C~6AZ(SQW{udof}$j~)^@wcA&(7SFN8p{6Q_uljE z-~Ag=BCn~JI3s}?000GOjs)~dy#j!*MC~E;#yxazHQy+=E?h1nBShqkGr&qM@En8S zHOzKZPI$Gc1N4{ZegeTON9JrZ;Nz9K#mzcZBWi%E(O=CDuDH9V+AkldeECTHXvLXs znt6?;?j^GWG|fIGY05uy#oa?Fnj+WYIoixB0+WFkRh}Mxe@fP_t2`!A;49((Uu{N% zHvfq>%;D#U-+lf1!wcy{^O+k0VeM$0G<5Lf=(onm3<8ClRU;v}TJ35)|Hbj|0zeIP zje{gjw$Bwii;L;~PvpO8%^ge7WVC5V-rLZ?Rw2Gs6K$5`_?NR3jd*X1j#m>xUrY4f zQ%FEithbT$SH47&2FtI@TaTAl-kUlej!ft{E7~6zICio={ISLT85<7g*ZSR!l-uB< zo%7SDmT%eL_w+{&{p_WU+hOJ23(eeTD*K1LcF7LURr~+#gh9|bJ{)v#F1tL};#*`HszC)IekK6u$rCt9Njz9l~*jxWw`k5D(D(yID z8BzlvZib-|1E8;5b$L5hZ=B41^upSc^NpXne|N#*0^r%DW(U+y+`l&~z_SfNluE}$ z7Q%8nJigxkXSa@riEM-#LHE?Fo@1OWcfY()WeD%t-G9eeb|CEpiL3=N0s>?#Bh^NC^G}9o zFxCpY)i45p>4{P%ZPjWW+cB```-aF!Gs0f-0_v+`fX_X6=6nC`A3L_e1?&CNlxGzS zp4Rl5?BxM$L%69Hqs^`+d~NWW&-7J-20$Ys0B(sG+D74I;l34b*X=7Gd(+~tSB(Bs z{r9gq69hyE39~O1@4RmP!G)0(0iU6cnbj$F-E#qMzgCg`dV!`eZ5V~n0W}a`D}<2>er&J76L%F9I#h6 zB9MS$i7AWj8MxGTqI0V|_ZEVChA%u@AE`w4hsVC$#kA(S+090AU&dW3C0;&T?gpiz zuD`ACOK%;rp4ixXxi*B1J)dOLw*N-A&KTxR?#cBPqxkE!{mVf%u)<-XT8gJQ?oBm4 z5uWZAT$G{2qFvu%CqB8~mp(ma#g9cpi;62{)ME~A>l~RQJo$jPcrhrP*Xa+8zWi8a zrcCK!uM;S~!>jseo%UVS+F|OcWRJ;psk?MJz?Pg`4^xJK?<=kTLUr_*@7$cyJ2Sz% z24CPdGcl_8gO$qOmG`FR7&~ESHconj>xjd zCbqVMgu3U5Kmtuav1&e;3;%3tYyhFdEIixXN;B93sdKl3AROihhVR(j_t}fp+lO<*8MD%jI-RJOXP`-!TH+tRb%eTR=uxKL!Ac~+B+&(%w3;@k;2Y?n9 z7G6B|lAX$NyI{IqFWVGW+lS>y7)qmQcO17~VBXNk8JF{l&v=As5CeVcmJyj_PNbYl zEF0RN$k_~aq#^~N6XXC8YQGatjvTpZ-@$e}2osVLHK{}^!O#>ocZ^5Q!MSx#*+^sh z%zCO8am_RV7oapy2xuT00E#f<*r%KIm*=X3L;X?+M%dq1y77j+M^8Pfv`;+K^QZfI z|2lxgKn(WTzxlD}-~Z0*ZnI<$k&A!24$v4t1k=@!zXrbky zwa>pa{1(NGo(#oP^+LF^tND_dv>zY+<}2Qw-dHsPX+VT;BnfbOWe6MLHHgOEI%2HH z>?`H=y%|}hxHB5Jb9UrIinU{9UT6>2z#2>i1DWQbr91PgKTE)zYV8=iYP|fj{5McGbRx@Zbj7v1YM0xx@gQ7;EixCj{J( zFTbg<>~i{_OZyE0Z|-0BSeWJhGqsU3-BJ+SmKk|Ob!naMjPTt0^}IIYR^D2=REx}q z$T*bV_<_mewZy#C>dRO$^D|3ffqhn`^?NnUn z5oilFyZS~U4lE&OLjt~1`XRigky@8*>%d?-R=tUgtx_EEngT*oEP0_MM#ps&;Md$X z5>#3C(oB3pKt!?12aX(Xap*jaQ8(14^OSt{lw->N^Kd8GxnoT z&0VR7%%G;yzjvytT6VML^X5W%uFQm?(IQ6qpae3U6;RZ zp;uorCN;|a5x>{VVJGPNZJ!~3_PJxr>-Eu@J!GUc5@Wz1L6z{t)Y3qX{g&w>x6xok zfLd^zF3IbLK`S$$J=LUsx^>~kVqeL&90YWQ=Q#3=~7qWC-2@r;71PcEqwBcpi{MT zX(Ie9*tv5c3Ca}CdeHsP|MS7m{@xFK`v-6R!ow#4fC-MEfiRnMzx2d~MkC1OobUg( zJ3jm9*?J=^WgP{`h!{ddiUTru^}Yac^W$~HHnf#Yso)!(15ZHMYsC-|K)~F^)XZ{f zXVV_MYvqsA#W$TT+$vG{Jbfj1{Ydw0#kvatGqQF=`HO*(d3fw25%YT61_gM{peOwW zx(VtPDMShw0amPmCkNl_Dt}Monc?=i3IBWoeBGMpShIy}VT2f4p&hAFs41 z^TnVKwf)9ir5PB8NmEWR={ELw{FLu`NF^R#3^Nm={l=jy8QxuuihFbOMKe-pHt z%b7wL8~0}EvBs`bosw-YD#VMCm&3?J`PTf#t!5=Am?%)gRzUOM$0#&cy_jUJA4Oy#$E}=vBM75ZF{F z1Sx?D&=Owj#9Gg!?Yt$VQUG|>eTK8G#xODflo9WrVSQ67>=F^;*BWO>P+C<2Igz*j z*)3zu!=pd+<;&mm>68EQ?&<3W(tzxp)BT@5UwLT0{-MLeNvM)U{nRs8URrDa;LQ^m z8^^P*A(+dVB3+9lGL8V66fk1MK?5OOn|a^+8X5B?C`i8Lx}gVllpda|xiz1&*ugI;Q{KRf2&vR8`%x%OStsNILCJv^BpBOEp9ZO~f*=AkfyKy7!&+@d>-AQ;kYijVQ9M3AvU_^y=;;~&hd_A0(g=VF zpugTt3vT+9<8a=4w$Z&YMMm;(&Q*y3B!EEFNJKcB+8+%Y z`)f}P`RChqzt1wH@rL!!da7fpRw}IdX8y6!Zwk5F(~0QKczUF-wP)1VTr3EBv-AT9 zxbsr+{iyA5TDD5{6(DIPeuue-);>o}DB<`bb*%J;hCS3W`}OA5;%YDu z!8aI2y|Vn3CMdlY{maF8&>qk-WcccDDk5~;gBM+!&DC$*m%q{pL^Ue5DV2vt*6I3? zoNw+hR5CI0eA;f<)f>;Q?a?8tBz=oPVHSoyR~{Lo;Jt%q7UO(PVad?D2AeafiXq}- zm4OSb;Tdl|k@Cf4xEM!A?8==J=hGN3w)=MH%ae8seCO%r@HxML4DZh@`PzMBZle~s z9t#h8%|0Vs4QyNZ42%cMW0#wQMFP&`N;}m`GWSg!J>MSs%-l^+cKXNd;GOw1yPW3p zwH;j{d?mV}{YYox4cQAv?2DO#c*oF753cNezBRhXs0|urkGGm=`qEn{j}I1Luy9cT z&aIDh0{dijZ@(3skG!+(evaBT@t*A2f!&_ZGfXSuU-2G^fQ=-9m4p#;0EE{%iK6kW zo#H5g5o#b}q_0V>L_i>7AW%$90yCKo{}L(H$dI%K0?~<78>A!HkH2~6|9ooU-#jvV z(`fpZ(cHnJyQ}DY?A*q1#y-B*dSro<=N)pwS8VL{?FpYkV87UAp zfqvCqs<*!)K&B)F^(bA4y0KvJE!Xvb)Be6Q)$rww*2T5vY^~eTq!0=M=NnOi^pnqA zZbuLSxr_~a{GZ-3cE@NgAz1IkfP{!Z3`u>>*Gm8t`eJZgj7-RLmsG|C)C@S9DbT&A z)*IF)B2BZCow03oMT*91S8l~!79 zw7@B>kCv=K+gJ$XYOEa-bAn}=-3oQ0vorZ!ry8eQvbr&zJh?cO}p8clUH6am0MkN^mjFaQZAAt4A&o)EL0 z;NogyW@@B&*xYgeI^ z0szt)fichsEaTb#{Z}8`zpL+UZ$9{~AG+!A!O@RB`10BF<*pz17u?%#nf~+_&piIz z#Z=1rdRz9dCAML}Gyno|iaC+OzY%kEAnYCG5D@}O#D&z}WpC$%f1%XAR1D@^6)bu) zkaTNS-|6BTt42`)3BsQ5;il#hHKVW53u1)5|KycpWR9Q-8IVGXn6vJTp)+y?t|K5M z4ai_Cy^I5DBp}e(+e{$BmJ}V42pQ;acn?xhw(?-L_EnfUQIP(nz}fo0lFibo*Fi;9zb!LUY<%Jd$6?TRyEBuGS@^Heb&?)0jE! zmu{<9o@kUnTOLN=J$h!$uFSOuUThVrfv2>wEFDDfrO_|skX?zT^)3DF7n?(;>Z6}n z-C3acCCXh$oI|Pgey?+*tlpWQV$JufFW95mDAsBqv#yiW(#lO2>!Y0fQl^$_bz61iaP+~lAV?$Z8NAZJCw)m> z&q2~xmR%BgI+3X)iIBe@*62jhXxj2jQH>-6tr1Bh0wUtI3TiMdKE4lhPkjbo3sjmA zkwEu;ik}dX`oY`B-!Pf~_@&Apom&4SAY-7F{>2v-ik|tvRPpUIeJM+E)HRP8d6RTVu`TOkz|hNXvy< zo0%pPlFyYXQIs%knG8VNh7l|AZUv9ay|$$K~~!%d`;#MWiJlA|wb5!3K(n6oNL;_vz9~GnUeE zP;o{AN_{z`5LE;M;FrxxZq`Mg=(Y0jVQIJ3>ZP>L+Vg~q65 z>N|4_=aa%mYkM3_#?9`GT}i9%4%-4D+eEwE>T~tNqm3N{2p3|nChc12xhxvC!b5KR zvGUBVrL~+$A`ycT44CneT&2&iU05sD?etSgF(cF+U@k=YwAD_V!R2<*w9V_%v$tkf zlc-Qu>4`%1Omm#LIN+8aS>JWO-SpybLuE5lEt;w8aI}q26?$ zK>!4e44~KO1xjKu+HVvFNlGH1uRRJ&i0qYRqgUmJN`-;mGvNK`Xs+(ZtKCQgIvi6b zAMi{GR10J+jM-*u86?|sh_ZP+e-1P^4rO$!_GcqlHz!~KxaCB(6)-OvyYEzfl><{+ zH=_WNBLN^;9Cr14`x#@1y_HN7MN&y6n~G6yULOHAS4i0WgkO8nSI98&&GB7<`#7nX z5Rh>&)4ktI*EmkR`loHz<=cc|O5>1ev$z{Zk(5f!Uc4BDVb<*vOiC&Dw*g3OQVQDZp=4{RxRXa%oXgKh18rWU5N0Q~w2DlhYX)$oPwuBr{4Gb7lFRpEr zlW1UQa%(Nv+S+b?adLM3>=MqD_~G&M6UEMpSNfh^+80P+phDn+l#jpwOaKX>0XZNc z2w>-`UB4ZsGZZt&<~Cf{W`G(rAf$87?|$Z`RL;(L-is#}9M2+#8Z~Ilq^xc?`cFUpxj*>W z(Ko$u@63+UaKYn3tk;9fmp2~%@|kSTA;h$6|Ke{wIXsv8t40Rtdn zIx=*unE8#Z`q?$J#l6V|z4;|_0KHidvlz`+?fmeX2L$wum{$S%ON^W=hOeaaVeh0I z5j7G1jij6#6mRVo7;K%(!D|jXR-AOq;nhgNb4_z%5hNTMcy-Y>+XUY_R*+! z+(ElCo%XMEiy2Xkxc94bd%k_};%(`TnfzKSa$JnhtQ0`8F-v}OdEckjC;QUvHxJF; zXZTvjD?vVQ1#|7vsdnL%zw2ao@~wU6Z}wI%u1}A7&D#nWcbVdhIXUY1&4%%d3kUW) z!R^J%b>HROXfu1Q>t@srQ^fBZf8mMBfoW@b%w@+bBPHIw-Rpd*%YUJ|=k{p%R;PZh zJyPp9Gnti%{D$DkQg=Wn93!-$T}#qUD!gm-a|Wv>L(G^|>N3Zaf@{!-b|MX_!G6t# z@Z&YBl`B}vdPmMeYXJ^jI?Hi#DIvl zx&@J>2-Kf{a*bbq$BZ=ea`q!Wv{U4Za=i>3QE)U2*bFJw2uuSA(u7=V+OEsD*oGk1 zDZ@;W(y`Q1$Nz_=l~pFVAq)UQOmWlEiEp`nCd{riM0a3e%*YT8QW6XlqXcw2g2Ak5 zB=UUi%5-+_rpY^Y3=f~%cwwP=K|o>(NSpb+#XGyrOu6v#p>Vv$Y)}u`};B}*F+6OkRW-k ztz-E^KmLVCQzm1S3Ry)ONE3i2@*Kl;%quI6AOE?BIYY;?1VA&4Bc+B4p5vHW>uk#U zAHVWw5UEt!8tAzqzJA!IS8@U}(kWF7*&ux5&`1Qpw*rZ9bEk_0lpru7{J$?Tfi_#? zfJB@?BlIeBwrMc_4aQbo0>sz$X%s^hrWQ9wOTnN~~RJpT1g)PU0)u8|L zjgcLWKOy+@wf?*nHGTeT%lmI}t9Mv)8=;ppN3KsVnIh~r>#h-%I5xrfr@LQHQ!GKH zp`CG?dC?hgl77~iHY;tB-iV#&%R{5Q+n1^@G}E2DIo4l`8tZ-Bzdpze8~&rM^lhGQ zMb{cYc`uey_ctm(tTV_x|FsiFW2Ij`Uj7PONeG%r&RtoVPZsB`L-zxz zuj*Qc>!Db zdY{LKjcio&tC2rC!uqq??5NYt`1ta%Bv7~RyyFcs9}H!)8?~BYOH1I|IKS}J;>O84 zuKQL~*aUz;o1!sdTeSntF4x*ZFC~LXIeW?P<04KAtuzDDoOA+cXdu!Nq5)(O#l1;T zf$cz6TU`XkI3hqg<7Lx!wb?~b1RSrqvJ*s8X%k>*Fb#m5KxwG}nARrX*l>|R6QI(X z6EgrM0w~E0HZYoFgb1XR#;s@+MgRl~!EuG_XK+MY2T4>#$t_mahAM1N2_}Jafs?R(d<1xGbTywCKIGXrlje&juN9mS1HZgIo!J1Cd_s6BRDr*bJ7sRr!#{B)(;zsu`%nL5(9Vs_}cr4bI`khaPH zY-Pqm*ljJY>ilXaU6JNdKR;%+cNxK$5za|(g{)G@h4!DR?oLC{$D0GL9CVYa%v&s( zvYO*wTks0Rz%#MY7Xg__Us1FXqKGAz3J_nrTEk7>Fa=~IT8wG>Gf@hRZ{{k+p(yl= z;c*>CKy0&Pjep%!#lQGe5Ro)#1Vr0QE*{t27C0`cUe?pA_XS9slO)I(Pi5rlx>}v( zyKlk>6d?ATAO8mFExZCip-8c@0|ZZi65v|MIBr_Uu+4)*U+QPyD%->|tt^Lw zCaD0i(QI|PU11u?I3i<6l*m9rCNf#3ZHhQpooO|iYtHgQuH!ciFH6J2J}D~!W{R-d z^iN~W=h(Gy zIOKLg{QuZ{3jjHeENM92%PeRbCTRpC*_O<>jK}mdGcz+YGcz+Y@A2I-gKaU(f?;YZ z$b9ir_h?M(^M0!XtwIc`&aTc%MZJuO7XYh3Cu&55R6qiz6a$06fi>yCwqO{z+mA34 z@c@!EpPXn~*f9pt1bjeF969a}CV)^35CIe#lu9#D00*JO2oDkvQrv@{*8~q_1EkOc zppd4Ha9+eb6+{F@pfD3CMaeiWX8q*hF-Tyd+C&o%gO>+Dqxton<`1sxpekQjsZJ~) zOa72H8LsN)t@Z4Uo7T#U7f;36iI92)_z-%wWY!-m*<_sfPCQZ&s7s0-hO}LUH z#kk5#@9sR&y3@eKjY0c%Z|1r7y|rqlYmL>=x>zA3^Q-j>|NXiv zME>=&zxh(@-nQ!cFfVFfN;0f{8bSacvv^%lmVG?WIp2 z@i9rO-6%iTT5V|fSZk+?wC&5|>EKU3asg7_-&>pwMIq@IyJy?hUv@k9WJa_;o`f^m zK1E+h_a-F_&CjwIoDM>I*E*NhCg)qdbJgsbyl6Q8%F_2-Hb5n4@A{*+i06TTLon5( z2(C7$JgUA=0UQK0gE&zS9HzShiU>pj0fAV_+_IZFX~h6=CgG1=BQ5d{LCU+M;;8^N zwXz#7ou_(fW;7lUaUPz6C_n-fr&(L7y1MwC=9y1`qQc*=kI*7TBmLqrH#-|Px|(L< zJZONCN&wK*aeK%?Wh(gnf#Na#kRwX4Me&(gO;SYr{a!sR67M1?gwR42%@6@|m|MB} z{Kvob+_C+*`|{eISBAY;lg5*sc5LU>R8CQUadrL9{`!^u>;Km8{ICD?|N5W*Tfh77 z|JN7)&o6FY{O-=Ji`zR#=Z`-7#4`X?1dwrg%!CHu+@(8L*0%CAuR%(rSOCP}%^-{r zH8WTZkOm@%f~1j2wOf&gF#+MPc*$awZb0YKqeu1&(QfBw2Ze>?g1mCpb0<@T4}Oa_Hu zoYeToHp#JMWweGHu`9wy+*7TRRpz5n-gzwu$&TFv2r7bi+2Do6Z^8Uz7A_7Z|C8IV z{Ew^8UmZ>^a(g)&CT`fq@aeSs$;R-M4-)(Y+@C&u@6SGR?q{cd@aG=;oj-l~2Y<`T zSO0|h*MDXD^?&in|LLgozEZySz20+o_S)yF$zLBnS*rV)*=zslv;X^l{md6WIkS$+ z|9fw}^sn7{;q{H>&9IO*lA-u-@6BD+n<@FO;G411>V)|dZ_Q`+m=BLEz>8$&ixobav>RW%)bN|Pm zIQOl8-BY&2N?Jy(SaTjcUSy-|a8`FFQ}nXVoinyH75% zOlPM(>fq+u!>1R&3ji?%V*1o|(VPK?L4^zEYI{^`$q$#!jVn-kb_%96*K|8 zPmUjhBxD34y6D?;;xb_^5E?0X8;k@M5GwPgrAfGP4SV-2 z&4m!c9x^j0WONmao}W9SOQ&qum9$}AA&2bsj80{{Ul&zSk;nD&#{dL~QdW5i7a5J> zMT=rk*Hx-56#*F$qvbwUgG!o1nVT4%K0erQyQ^;b^!oQkl)&9eEovlT9>L;3I$r!>G!U>yBodF zJZEQ57@!lJ*5yxSU0sxxVT@rG5ZjT@+G_ixHkr7zKbtGB2GX6aU@YK>bF7CZ{ zlpd+d#B?kT@}EDuk%c2E0&R^bw!%Il?M>soJeK?Y}=x2ig^ zcGbi5S2vGeE;?^^m!3-JeBk$s=_gx*XL=JCMQ$rb^ZA(v%R5f z~23eZQwUo79FKw_}o>?D!SVA0VD$n69ZE+m>KA40hZDrjAB*bfn{7(z4Npvj2vrw z0T4F2y$Ot>NJRvsP&jG{_~U@!4=aR96(9-}0Lgd7&k`a65GrPXz&S)hqNsx4kDJSh z#5xSi2!V(+GOtcZJSrFwOd(7;*}E&im=FIba@9CG${9VqB)3-cH*O|x-lCas?0JGf zK%-mTo%-*;8joHWe)Mel?1?C% zBt+g^`+t=!XO9;ztQ1cz15g4#lI}|ZiVDmi3Tu`dGNM!z$fH^D6w&}d1cpNxK%b#3 z6(9hE7!Bg$r;hyQ{eEX_CtK;P-YOP$V{$hvyga${dAT;7mW69h$F)u#W*gN~XRX~R z&TlWTZlC@?uRga~4^K|-znm8T$KdqWcIFlv`_DD^O5^Vi=T4>lKWXCLRyqCe-u#%4 z^+zXfPUhjyJz9KwKXhZJE;eOwr@#116YDcBzCP?+?zewtdhN(U_gru8JH4q-x9-8o z0>V>`&F3fYILcbz-Q78a(KywkiE)GL1!1 z75?`9iQSF)?)E~S1VRBz5&MIQ%jiEX_+v~gAjj0*9M8p9EK{5asO;1$F2pC8cQo$(nU=52vDyk3z zMUHec z>L!pMw{t@!ta?fA8k1~+dd)tj)|Bk=2UVi?ikY`>H0g(1^w1zrPhLQ0t zCv|9k<(z;0hU*pp3}EVUYN>zbs4MF1(j8sh(Xtj&F22>ev!UDj#mi41OUI{8@5BCo zsE&o>@AGn3po9S=L)+Z+X z`)>N>$&DBCyJd9h`GftH&SvMt)b6o~d;Kzhed7$wpP0Dy)5qWV*7~cxI{y=v|8wN~ z&s1NBDO^1Y{}+J~;!wwIZp$~TGB`oN0Yo%VjF3lJ3?+bwI7PpV!`d7~#(NhbDymK( zWLfwVFUiD&)d8S@q*Cxuxw!~QO4bP1Uawd0i&OQPBn`0$fG|MbA&C)?0BA^3$#QKp zt7}){`W?4$D#jti35bUX3e-S>Fbs6@NjEj4t^t=2Lm@;+r~-+T`-8ey$9Cp^VtM&v z$RRQyAT1U&QvmP;eUhlCg}@l79#zwUp_zC{}gz#pOWJOL@HiR<_M7vJz( zJ!@rHS*lhR>xId%JR2Li0D#obog$d7?O=5~yR(_x+iraKdVc<`;ftrr=U3v=i~$}n z{P+<8$8lYMuh%$#EC23Q>EqIF7zFQvygxOMBHk>hIx{EM9&QpOAkgt3K7tkVXktd?VGoNz zv+1FBD%1cPKm{>agsCPw$B%py0O(!#b630V_2JywaQWEOS{U@N^`5!AJyRCkmg#=f zDL-7E-TRzuFK2sS*?DSv*g6$?qByc08^7K?x?Q&yle#7Ge;>?4xRjJP%I1H0@7XrP z9Z6oyi%jiUI$RwlQFy;>KarNF^In_oSkk}Jn^-NIMkijJMu!N1l{XRr2A2gu(y=z2q%_bQvyzcLE4tCIX5;;O-4W5#m(tAM^5` z@M`(^bV^iRSyzJ?b9JI3jb=0TNmW)1(bQRpn(j)R8Lk~IwUs35($Z8JMHRKUX!NY4 zn9;>fr?FiPmiD$kUGB{^lHKTBG*t{Yw&(reGb=MMzel-C2*_Yy*Vi_)M%hTKLG1#^ z=iszR2%$y=T!aucDKJ_LU}_`{W}eLd--#!~B7_*~It&H{L;(ePxWX&rOtxrouUq}| z|G=O8@mG!ma^vRa-}(>yk3(4EJswe%brkX+{+oXO6CXJp0RjJ&f9JRV`~UNe#f7$v z6~QLrsr!RsX>syD{n!57Ml%)2KlQKw`mg@Rxw*NC#25rWUQ~5hTxdP@#KI_TI`uI| zJW>!L45olu)v9-0b{s$y;{6|TNSc|diUq$7A!>X;`zN0)EKJ=7_%GQ&aqZ^!H567JF}p+ zkd#ZUwLB>%5?xBS7MeTj<>HXjyLJEa&hc|wM^Cjj8WwxQsm~wz#*0h83IY;fb|}uy zL25ui2O5%LcBWtauD+)(3zUOG(j%D`WuO3rZ1sye8bn|a8Hbw)ECe?*?T;K|U6Z6h zX$r9enK~&hlV*oBh8i&-1~48z;QH{FPbfsz3Ojeo8yB255No6jx(qfH2m#@H5gmd? zbzYN~>jeC0sl%5o^Fl^M_cGL}`RSa5QiU5Fc0`CSJTdmXC3&)m@9a`Im({VLRFSd@BQUOpaHHo$iHm-db;-yIGuEK&M5)j~8mt-CpbFD$Bb6 zQ!fk`r!-Fw2btN36OHH0@jxK7aO_I$gs-)VHMuI>*fd(qD~w@%MqxViI0KTaLZ z*87%bjtkjNBdMQk^v_JMZiWWS{F(jf8^v55ol-(=^VwdNBKMfo{z6u}CU>Qk(3Z3P z319DqtO$;jnWT3wOg7SLA?^+;*$eGKY@E%vJo)mmZys&-?-VopWg?4gAoeX^GxbbX z8k=O&t-}+OH_T(Bw_JxjPxeo?cXoSO?eb5reAnlD9&Vv?0WQD*M2tX4c(75AlxD#% z3&6KgGs3(?72uJTnA@Q($T{8URdpR5Bm%@(9VLoTxal+L!pT?-OvYo!mqjS%6ApI6 z)o*B;%EXMerd)H{(l!k~+DJ=gBngXRW{i+g#*~sIIC``s4)#Mag-V*&7q5i1d#*8y z!4?`R#^PIn^4-luMIsF}W=tC4-pz3Dl0WfU9P9{0ASNadaGao~AfOZhj5L9& zgE&zU)u^fv1x!@bq3*~2X5HW6{%$Pm^wdk5Brtox3B&*hjnVwk6R{dv9S9?!Dg?Zf zjb6Rls~S!p^YX_SLy@@6y6Tz1i4rzDJu^AcS=-xJM_UOF*EIXes;^Hd`Q zbOfO^ppJD@s%6dYRJ(ZypqPjPbjH+|&brT?oIiVd5dh>po=eYPy?KAHJ2$Zi=Th{` zG8Z~SjDR{n0Xq^2r6O~td;ns>6Z77G_yD?i~Vjlb%{U}`hLgts@nJU$EtDIVK(GX1@g38hau8|f`En72>Dtf>gf6p+X0PwC} znkg5jt*#Sw1oYrxqm@_Bp3J^>f!C%<>+=cmv;GO@K2>S4cmY3+0?@6I+iGp|kW zy$lnTiM-n_8$dDRh-b(gg znYn+b+nUXG;CQsTdwZ}@h4yS?cfPSUtde_!EbCa-I_!r1HS2H2-JP)C)%`Aq-B|W*cT1glpq9N{jHMrdyw4Hm*%O7J5L8Gx(Z|{Zx2NjW->B*V7+4}kok_ZN} z4kq2<0BXUjL{g06NJIjWUMLZg4ELtRKksC6vbjCzO+uqUVcaW3YyHHTBU#>fztf^0 zTz{+5IE=GW+Awq~GLcBYfeL{MKp1Hzw8#iXXQUy3DpJ>RGEbLhIuI0970kN5!R}sP z+@!$a!%+`;PjT=8u@(XOe(z)a=RB;Q7m^s)%jLau-^TGAKdS7F#P3-%H;#uMdv5=# zzvQ$3Yn3B11^di)&nLFLFp<*D&3h!22>94ZKtI6UT$R!o9g zTo~RNOMsPN#3&Nb1Om8W+4%aodSSA7;j|^HA-WLDJW)tY9Fpd^A_{_|Q|BK+^q^`Y z>YY8DqqsUx^+6sB_+g6G9RDQ>M8p9uO-(?+0cMn{j# z?{FNp8AUq9Mj8fq;T(@`Wt0PDN$WTF+v1_M;M9V?w~HBHJvvxC8(owU8D^?dfKc8 z1cxAo(W!5Yns%fyWBY5|8_4#)#aIi~YvDXJQFYR3=u}%e)7qNT_MA>kYP+S)Hrg}V zm{Rcusu^gYfnqUAl5qR>@a7fCy)aOmX8HIm`#o}X3E{}SW8#~Vgn&W{2r)=BK|VWlU$SO_Mm=bhUZcR1Lh&4_Y$K>Nr5U3!2uxuPG-IGyS)E>< zT%4bdQ9@OdymxnPZ-0<9j+uCn@9rP={@}Y=0%_5xDxylh`|rp*tLGx)pA*qk6)FJU zFKKH`$Ri`5A|m)OFh&rnN{A@Q-;?^6#M;{K($Z9`nf-%*>(Bq`f8~Et6fw&j0Y^D3 zS{={)eJMAM2J_;fLh^&D7hz@uRNU_+$6Gj}XlA5E0pvlDB1Hs$l)#C4Lm^SY zOFZHr3^7r2qC@~e2QiD1H>$?M00H3pXSk9O9bIx0sDeb`Wb?+)oc{0LcgQxtiMCGNG;;c7XZrF+ih>-&?}x+nHc-x^H) z;?m{MEPZdYnB5&Tc8bZ&Rr_@|mu{z#{W#M~ieW4>DT^{|rGw?P+8@|fak5`e&18Ge z9=SL_^#)vt+Cfst5SBtBSc549@8ab=sA(iet~3ASp`H^0l8M5NFOlHUMxuJBU-yko zfsU%zA`mjVX6BEa6(jL>h?tm~5(4klyO?;*G9WvU=Lw^LG_&n)*xVDl#ZZgY%rj}X zeBMAliLB$MCUm;3lQX`#D3kM+r|J`JE)?JRuI=o)tThTj%^C_A!1u0}jn7nR&Sgkj zhTs6n8}+?)yL;I`KOc4nsA~-S>~4hKM(plzyNhn$hWjk{Y}mKnkX0?3h|9#OIT3XN z2j|p_%V8LI3m*_k4i%FiB1$ziAs#@)Ss;|^2`XrW6I3x=UGE2~2^>KHc+ATmgJ?DO zHEs_Fmd&VlNs`zzXP$0njTnM=35ZzMaMI#j6-<38rcvogM21*ftSAnNPhDm*T;Fh+ zOqJSmkqNXi7Q4I8J+plJ)Di$Pinv1rmVjKnexZe{C#KJ?GL1AbWC~}aPMpTzX$dJH zXaWN*T2wQofwT}93PoAhHA4(e z)h9lL$cQA>b~8;=f53lLWWQe)MNP2PNIRWuIIIVQx~`*FsB>i*e4@=pnm7Dmhsx+x zicp0ZLP)&#&Q&3pG0%Lfk*295A4qQcgQ_>E0OYBknrswh-S1aLU3=$5q^?7jCGAG` z|Bd4B<-y~B_@BP_XZ`6PnVawY!p}VSC;arY|HH4JJ9cD(q`}_VenlXBFjxiAI2_hR z73wOaiBs>YawsBcs;y?0cqQK>3Z^K+U|3gGon@XxUB@)_RULl_w^l(6q1&&E5NK>9 zzK#qrrm1T;^DG^`(1FMy;txA!`frVoEocx31wudt>GgZb{hi)Vzs$t5s3yK~fhxtv zo(YKuK$;(0m~DK5^P_F%0w_@{l#qw;ysxA0A25Fb_+h%7Kt_Yd!ZHda3UsOypE%n3 zo!5siKM_wKsgBS0gQc%u51)O(WeG4Er6L9bx-`74j6Vr(A#-9P5IL}^Fna0ixy73Z zKa@>MfMhTO1S;b$^d8Zrjg8k%{`SJ|{Xu`?JFA~LHgmg?^zZkM*Y%)Rb#mX%WmuJI z9h0TWn?B#$={=FjzPRROv!8R2ByPE}vPFpE&S0t^{oSJ7@WrI>XF$vvRh8tx@oayi z$S>}k?ANXq?AM)+muD9)HuEr_Zgq$4y>cqi;i>8CD|6?*b?2vN8+*I;#C}MZ^FCbR z({k3YZSyant&Yhb6YM$-@LDwL`FHJ0t$@+ zfpWArY2rjd6QNKkd>=C@iBagY5LOv4Z1+=$QV2e-mp{e`&E~e~wQjdRIo;7TNi43c z9G{+?+^LE*%gtyESz}pTu2wT7P9jArgR!m$g_5T$FP;44D<@xh@z~64 z$0sh-;mYOJ|KqnV{npp74686Xks}%)MHPSXlV_eev*4Zo)|zj^Nd_F!qYWdvX*5-L;3Ctp4J(dU;x^6JUynNH$e9pa@6 zcmL1dz5H8WyIR#Y(Mlr?ko|u7sh3ZF;)UaIa_Q>YfA?!|W{LZSPo4Rbe)0L0Cl>@* zy|?#2f8huJ+wYt&Yd6`-j69$?0=|><03!08H{bHP|9^BW0RF+h{TILd{Tt;lG;$vf zS__TA5wC^;suJq3x!pgrGXJxmeCo5GesW=P(y10j@$K*2`ob44ee?ToCApt&WwqJ3 zL6jJIO5e(_KE#pmZ2CkfoUz4br*>g)gIfA_84pgO4K%L8wkc#-{KS$2mX zd+pTEe&)=lK7Kk+lW4qlbMt@u)z^RXYgfw(6P*l(AR-1)6B7#lFr!)RWUPjo8dX7z zO6Ec{e`m9L=0s>`3glPs>)xRE`4^cbf)VU(ks{yz z1L=+s1gqtFR3W``cX(u48hLeM!QWcXuHUboIYEdC$E!dhFi~&*L?moQMz5v<5*TZU z=>3T>AD_Q|dFQCp=rnE??a6GIE1l|GW2@n262E19R%gjFQ1WC2StUq?;HwJG>Cc{lbq^d6euMMfpPmVQUDo8 zGKv9E5h#m6vb5NF^%Gb+1M%FsQ~ltJ)r}hnO&b)vzkzU3^GusfHIhc>By9LJbKcR&STvq_!9DwNomxUD>f3LW-}|QR_nmJU z$WeJA3Q3XC-9-VQ2l+Jw(+nySNdZZDPg^!Px>gX9PGwm0(r#gTc!PY*%OAtwo1xt} z-`!u2)r5CGs4g!pEH59ud-43l)C?`Erp~u(GYSBQ7zvbCO=Zbn@@M?i!t6vOCE`E( z_5Yi_w}6lAyw3lhbKXmXVriM#Yi5YqVRRZNO&W%#!7?}0UzyYX8&1Q}FgRw$H7$6V zNm{W+!x!Fj{)#*!%h_$?H8siV>-*8%f!sGc(tYo_=RN0n?r%${uDp7L ze@^?w=br*VAOt3DHf2DGxE@BMV~6IXWh|+6cJG~)Ngo_(+f(AaXS1FiD04joSOW-| zqz-Wfo+_z|h^n%n7KLj%gEN-R0!+DHOKe=JRQDe^1oFs9DVQL~b%Co?!j9JTKYr-t zFT8Rsp2!7fEq?Rs&;Qo<*MIOM->a6ROxm?VwOaI&D^|VknsWgB=NIn2{`xJS{_AUA z_43m(jjJwO{p+tj^S3|z{f*oDy1Oy}*J{bcC?EgWt1iEI#ZjXydg~i6{MPp#{=<*{ zuvU#yDPJI!VtC;>i~iufR{^;3j;&w&?)uOC`)hvv*UrWiXW*4DJ>|PUUjMs){@r3F z%w#-*(&T^8V+T%->wfvaANb9;Tm+((D`&s!b?1HT<2TQp)k36zk}7n1_JJ)~7p7KA z3WdtMUw`3mzw6@p3p+54i_csBfp=Z@rLV91lYhQ$q*(3DXX*lmHJ~HI<7Y0L`%fQz z#kuD!!4#)2xcU{RpR#IRp-@Hx)~2hoLs~4=!T8u8y!btDy~Obinw)p$!Z*D7%i z{&zn7gYiPx+7d7X1p8PxhF@rmwM)y7Zq1#^5CH+O1VDo=2gvur<#Sl!^bVOL!FO>U)PrPTe_tW+BYCyF(6F zX1RyjEX-28BNx{no! zx&hZ$weq3z-2O_3g{Hl*6b1pyoJ@bluQ=B1E-W@CS&$p<%#8MqwdegYSiNQI3o~h( z^5xKItJW5F=SSzY>|M~d4Q?H=0}_xllL?9@PwHC`a9W+VIJ7PVLIMS=My``M+z`w9 zRmT98SoW3@-!VX<5Cy3Se0V*Jm@`&~0j8h*?v%kI3eQ!?0UF_Hv-N5E2O$kJZw1(v z#=T|BGcS7!_bdh*5`a(fPC37N^Ebo$?~rt!;5(`Sh(LG0!hkk4kCoX?K^v=vdej`D z3LeKx-=TyG)IXgIvbVeJU z6A==r6-$?#f6DK^`)W*593A`YH?F(v zqElY?%1dx89*e?hO8uW2>FS|@?X|*zLbPIjXX%2~2X5JVUT@ihCao#CYIXn4!PXRK zM=HE~Nb5CtWC>7Ft0GXS7-(FJ7SEnFZ}w~zTPu}7bnw8Ty}J*lGTmwdJ?^egvZR$- zc+P2y0Tj#Orfo<14v%Eg-g##&?&!z@c+D$MhsgW>{M%vV7zd&| ze&NZJ0xwmo+TE4`0l-;jEc(%x-f`7y|8wtwk=Blkh*+DPeA3*3Mrupvpgm`^fiqY@dp;qM!axbi z8fEGu_|-=t8hT#rI4mKccq~Q$xH|#k=|YMKFqqf9abCyPfw8rPa$9eCP9btyov}iB zc4uy&qrEs9c6dp3PVSIPQ7EZ|oRR9>-s+sJTTP`yBFWjhszOAn*fClv)nbo1QE`MM ztecLxu!)3KYS<9b6RWvFY6T9dvP()LBu1G4OF|$z`d(Wh^@`ionZEiR=vZt^V^h^H z#&6BO{GD1D47cy1RN4|q34nz{#bH;yjDkR z=;Gk=H=zW?_C1;Ej#T^-M`{uoN>wz%kfK&lxg{s!0sEv}VPG4%gRJB~JR4P`n zb=!{N(Msq1ZjcMr5UfN|{p7AaD#EeBw*@zUZoxUC#s=_YdE5**ky#n^sA|mSELRFGz5}2S>)= z^XnH(1?3N~Kkx@1`Qetm0|Z(yr}blh_`(-naT0*bE?)J~_dWl8AN^i7m8(}{&%wWZ z>{Sy%xk3r_qaSVjhtJ=6pm!|qnJX__^|3#CNoQvs5P*rGP@{-N$BWS)z30-$g7UFK z`CWhh-P>>5sunKuOJ8vEzyIB90?)bZl9g|L?K%Ja`8(!yw&%Ts!lYy)&UAtlNk~e^kVha@C9p8L%1pMo zWOJ-634;|Xuo8#PDd#)gOOml6hLJ`oBPZdwC{?kT6NXhv}gh=@)f zrm?3`X*?~C7e0T(;qUBST9jb#z``%wx2kTFyoo5X2$RhRz5lvb@7QEc=_o8}t1Ro_ z$SRVARaiu=WszdBymn#dW#^s*V6<2W<9Kwm_`m}j*vWFxB5+g%PZ}jKz$#r`*-w4( z{=fYAP5r|~R=A#%_Pw3^NB-phU3;Xzh)FKJXgNq#NQo1hOxpSVR*VkM4 zo&WcPu|gG-JpZCKMh(O|P*^k|Oa$exd;8}<^|gEU4~_5XAN$LHzW#6i<@%{?#|y4n zQ?Dj!Md@edN~X_}#+Y0_efzpS6V)u3y zRhVSo{*hmM>lf~Qbie1b7x31-gRg)07dLJ`gh}51rt_b7`of{HdbwQtwdbFD#+i!% z5a_!<-tfBjfBBJZhb2yiD&fC=`nI=y@GEhnU=iB%e;F^;PdjPOAHVlXO!9jl`@y%r z{ZKXtGA$`iIiLUf{r~pK+c3#nUvo}pE~tkwkqYz|K9D7VyQ+t}!hTjIkPrk2hQ{O0 zykr6Ze&0y4pexL$?aUl{Y)C;0go}FEN-#98Ks>J#_1G)d6tHL%V$CaWA)EjxK~Z(x z$QVcHaSeBn+gZX>!vpfoEdyi%_$hd4q#R@cU%~Yt-Am4RDl^cM?RB^UvLFipVjxKQ zeREsZ&GHAkQ=|D{wACrK_+zbJDd!EQgT9PEoOeeu?r<)c*y(Ha##;R0tSO|uk*>^8 z#!Ke3Y?+t86QpoPgH&Ixr7xA)pU)rgy($DS7RnGt8ptQe3-Xx!86zWbaQqNNp#;Rv zoV^Sm2~-(?qgwUcx@#ah71aI8$L0G=@t*N;Vuux$NE_>{d`vGlhLS)@2`bDc-vS#- zser^bVs+5bwH!!ba#?5YED7UgCn!tfPLL(6nC|7A&MGWJn=2Y1RrNi%K2(T66M%6P zkG)6}$YWwD2C7dKbG2?y4{|LMR|TB#RJ1K*BlS{d)(Vxn1?m6Lo9-wy6k8l))J--| zARz||AyqK`R|1C*k5)JLmol!gq|<`(nYerg0@S4-n%%X%G`_7=hC}RnUMdK#xa@fy zt+`66LQJu(APE(glf)z%*6J%3%{}$ZMs>m9!0^5UM}`JRKl-c%<{dkCA82Wt!<<$nf*z-C zIaxr3TJvsaXWDhVS|VX39xK*E#E(9@f8&Nm+_`4$Y-SjMp;i@5{=YBW{qV*^OXhW? z0>|^6IkVdj4UhlJr*D%)G0DrXIytP=NXQE3vOz~j)^pr?5>+eF$auA!B%62iuX|`8 zCYe9CC71IOYZU}hH2LzkAG-IE{R`)JW&^(?o9dq1`kfoLjEvSW$-`e)+1-t{f)$?3eC6 zJY1aD)8e}h8}8}KmXrA7pS%l?LHx28o)U(klX71EvQsfhr5gS7r|%G#XSe6Pz@&Yr zXKwqCZryg%ojV?%?-UByM6SAMxtDSQ-21@ZZ~b6XOFk7Q2o$rN0Lzwk zpR#stu~a89jrP=Ec!H$ZS=}EKSyF~70p(gUt6hnVwNkEy3%VE}%y2AJNtFOG##`_@wgpPapgEYy1D=?Y+PIn@2wQzTuC)y>i33unUj}d_V{>AOJNz z>XjxpkSV$D5#v^}{-DFvL?!DEwg>0H}P*OHP$#bg?Lz?vwzv_65s@U~|r6^HDOezX(v@4P-$uZ+p zQi3YtIQ6`jr(gXW-m0~VnvRdzC{)`t`yy44J}&)WiA}>DQDs%VH@5i1NFVvm$S!cYcJGglzB zih9kCkBMi4(@$%;=H1TeS7~HP5+cyC0uKdr+HS@%hpNf8u`uHqB{+BjGj%L82uSAk zl(rwZcVO_0T(;Bk98x*?%u_Bt@0{=a_(rd%%b3I_MKS?66irYsUv}QwjJfoyVRs3f3=XAx$7$ShVJs50uB)yJ>;$YTmGR2UPM-hLE6xBgFgQ>yRiZdq_rSXG ziq7xq0RmE`qoz@X0%V{h^e(ND8a2;YLRZ!r$!{gPyfzgik zxd3wMAn-U=^_n8_Qz%qPr#tw!wx+l48T_|T-}V>3|6%~AteyRq*PQi_pS;b+Qme(7 zL`gM~mX_3+Yv*HbN8*^(?2jitEUCPX{+Y6x1{sg)LExD z{#Q5Nx@G(B{`P#zO2chG}=QEg89EUHzWF;oqxpz?6&Y9E7>L?UY z$5jRm4wYujYGH?$F6zGRo;?j8S`r57FY=8r)Q^g7m4l}3d{t7w5v3?e+Oq(7w8Vy! zwk!Ywj!ys2AT*`J2-}u-b{*y@R?oG8YYNqf0DuLp@o;CgPoZ=|l-x_d=M~7zQmaG& zBv$T$=^mPX<4@Ja?n{#<9 znUm7zjA!5UXvb?GrnWtZfC|Ad)B!~xg(M(M;(E?7RDmkUg2<=^IZ%tor(XgpY(@ZL zz+r_3F1gS;>{J~yH$JHXR^$PAmD|rReEp>Q-Am&`CMgL!YFZ7oiqjsOj=^C0VQ&?j zg^9mpyE}Iur3k57qlhn@+(6AE1F%4Ip#|V}(Og0mRu6y%kb{nAJr^23ev?D^6-JcO zp0mEcT&Tsqi(10d43>#-EU0M)mPC~4N}cx_IqNFv+n?-wB;3A128Xm7s-I)e2UI{x z3S+cfwnHP%T2E@kBmh`dNkz#xsid$4^)kbqT1QooiX!lcdFsqoQo_+RLw~j8r^$HQ zbfja25WzFa;DAi&kg=Hu7gir-{_zAh>IpM7N8zLJV z>OF044=-N8>o!m&lEiAtS`v<7i}iYo!LMI=vgc>QdTn%Ul-b?0d*=fWZ_ecAsN0gL zY0ebKTE|gUKi7G{^hGO+0?Q0A&8lw1jQ89O1)Bz*)`2$ ztC9wuQy3`q4VE5@%R5?9oo%@zg^~$T7_YtJ$~CWf(Wx)K>f}_`!%?^fOxm0e(LfQ^ zV%K9)g_1&)lnKT03ML_DVut*j8aE~aK%%WJ!Dqj=?sYFeYx#<90PlbM^S<_j^`%-8 zM;1-QYAWl`o!5d%_8b@-9<8v$3MB)gR>U$$DxvGtLBvjKO$TI+_fDDwN2^h!#41}}lds>qH z*?8mX+P>N0W)p2sYc-=avat~A4$27BX%RRCZKMp=B$DzljOQ*mjTWr& z&whTqZ&S2=Q?hrbEsU@qz;lT_HBfS*%@26zTwyXTR2f&O5Fi9M1&`{R?vY9jnY=*F zREiJc_&)K^ndi0nlhne?7JM>Lt8Z7D6B6Vxe)tr$@wT7@_oJCP*i+8Zui{rpQ# z128l?R4Lc$QFznMclHn0<}I9OIjssKDnxi9)KDlPRTZ87Iw_ddMpav{$A9-HFMaph zpNA#~`bM^H9T*)gUwH14MGHFtK&O)Jc1nsdNkGIz0$73rRRtNqGKR*gn8fo<;Br(? z*yvyX(M#X|o0p);!Na55wht6W%V(dpV9Ao6rk+yM*Gv@+l!yURQUX|2Q~^x$Y-%_v z(Epm(p+?N2nUp^;Q2fY0Ui;NgzZJlO1zo@S`t$$hled(s;q*Ma>p30mDNHiZUyMW@ zCQj2&_M2eQH(PGilEl0D!i% zq$W1}&-k99rY61o5~P?3L_Os_Q@>FY#b8n<2B;pB>ljc%%GwYzA z3W(=O6q6NkI0o7(2U6k42~lhhg%FGzcY8!o2!z!d((I} zRy>T*q6WYPh12@+>{L|J*ik)Z%+fS1n4arw?t|f2WPrl5p?|w#jQ)Cf&!MrCd$NcGpyND4No|sphry(Nt8@Ab z{Zp^BecPkGTcWLx#QjI4R$?dMOg=t%uzu~A(=T}w+B!81Nx{BP64vkjcKGmv@Uu+n z2!Wd4zo_~t7ze6Ps+m`Xa{=8`SRl3AK0or(9;lNK}VIQ0agRxaU{XZTA`FpmX&= za|0*Hx;I{bd$m?|Tz~VHJ%wsCG+eszhI?xD*bVre2X`iLhX#u`Tz_vZiUlwP5$PYT zZryum^WMIFV`a`{(zzBGwkkIE!o*$FRlDT$Eyx_&U9J#&ff(|~mz}nKR&Mb_yPQO0 z*CqxUt7YhsvEoHby5Il$D?mZ9JU%oq#B3hjwEd2I9&T-&XM)a{99Gq1sfemR?hR?6 zN4axou@wH^J1?CI%5S-C%in+Ujy=6&#bRx2wEWfoc;jPnxi^>e)Uh!Usxiq z4vPi}oP5RjQEW*8VL-VyG2NcQZEhlT;S{J%Xc0$g)&0+s|6VX5O4R?|RFd4)pc*_8#tP%eXekq{4e2 zT7TcVtqFt-t2z>-zj4F;-@NudOXRRqXLbG5KYs1TBuSvK1R?@+ET}7)l$U93A;(V$ zR*A$3g1D<~?EE!{7tG%?P{xX^R}jq_NhC^VMy$+FtTHP^RK+7HR-!HszkAI^U9)B- zNz#9$zgGV#H{W#Ic+t+9H%}tGTQsl~AsS-qs|ci!Dd z_W$4~8(;UHFB->b$p*~oxDFFxI;09H0c)4;W0W7?u=(n@f8I^Gt(ky{T#uE|V0xz#6B;zjIY8PdM-c$ZI<1Ht)J#zQoTeB+ z2(4)TNhagZpV#r47o9fHJN|f}ZxGd^fx&TL9)RV`dvd8@AbiY2SQ8=z z5``CdD_3`8lHT4zy_S?JVJy~x1E4#f%6P7b8s^7_CQ^yT3%EHDgv4btTB?U4nB>6? zhd%me-%BrU2M7uS2tied3=z~yF7Icv9w(4r_&`=cLc##6t{T7Z{?3;W2#%wo34s;r zFxRE=3qO|G#0&BaQ;K zz9^G5Dhl5i549uSp?5vMbo;5ZKJp!R;lrrY(d+rgQ%^+DX6*_CK9a%NLw|kE;D4?X zR2@L1l}9uI!$1uTL5&p#xuQncSaL$sX{jgSRyZxz$y=wj;&k=$oI}nmHEoI8no!3e zXdDqx1MIZ_a|yU@h*BjWFGw5}>pGQO04pFs8@^{JfZ`FdE^isEY#*vD?#PVSljCXC zP*tMF9TPJ|h#*!g8708tzyh?LQDb@?f~(VR!yKc3nF%V(XSO zS;I_1LdqgjewnJ|cxf_5lLY?@M9npAHUty+NptOynH5lis2VRV*4A#hp}y{Br>z5( zYIOJzjAwdgyNegOE6;M5tT8R~Y!Yi+N3kSO(#9W^QQBEydPy%f&mNN ze`I_tPUd(4kqVlp>?AXB`3wpqpvG=XXKm@c2RH6tnQeKM>vE6^ROFn~PyfI>-ubux z{_#R_pe;8aoDSnK0mQftm>tKE)~!uILdFmq*NvECQDxUK5g9PSkYUs2dDd|pa+L_y z2F5&Z)kx>8L;LKJ!%lQ~ukqM;27Mv5JG8tb=``-nqAOOABqE6tN|icC;h+Bc#g{zq z3;=^e1EXW3N_^{W_uR8?eM{RC_InaItjelF3I&5LbXr{?sS;RgwK$Ux=5%E-$yhZk z*CJ!+wAJ%kTG9a2+Angg+IFI(J&Np|iV9xvAWg38EPbza&BaL!qa+uG8#dX&xt zP_VL<1f=u2TJac4q%baxl&S{~78cHJ2XO9b3)+@-`YAV^@*oO=Dk&HwJXOkSp^ab3 zFFHmWKGchc9(=Ilg+i{Rd{Xi1apJq0&G1--NChA?5-c-35i(E(l*mM}0P4C5GPOuj zJ~IQF(t2y97ph=_;#V1+x^LG?F5S?~U{bgyI}EBIL8F*NEr_6mx}x6v%i=nDhs-RP zIcT!EDcE9=010bC8WSSXdP*vDwcKhWPwGBuoYWnSSS?8r(UHz@+kAK47Eld}qau?h z?+nX;HtxI}K|Fixo3F3l+1-B8KJKi;8%M70WWhN?nvfQgQj-!+C6u+4DSO#6=SC^l zPri~%a4kFq62M}L1gJJ&peK%Qf!wg^9#wQ1glsi*ok}JJ5ujnhj$d`(PbC;=#&vfT zs_O@eYkG18B_bt-Og@+=G1E443i1RaCQ(QvaR_G0&v(yVU{1X(dw556=lW>p=J?<~ zh--3r&Uj>?unRmBc^I6^0#8j8Vg$!(hWiE;GQytcJksC=?dzaN^{$_0_AlbmaPX zA8@vhcv1^2**NlD>mN$PHI;&!DkYBZA*x26Ad2H~y!?BwI{!_-{(OK(3!_K+kC5o@ z9ecj>ooi#swYM%*lU7xLK-5f6su2ZoEQpiHWk(E2YzGe)UjO>@mM-bWBd2Qf-p#k#Bio1`!Aoq{Z%hH zb^iR0(@vhhVp%s7AP5LdP`c^PUGIL|#Q*{Ht~XxzgB!P$t8q5%DiGGA@sY~A-guGg zIGE(tyLMQ`NTG7`Z9Crb8|MKy?UZ@1c>datf9{UC3!RkXir52($Io0d=S5ep#w1D> zAR-gnJSFxsA)kSf2<#?wU&~}4PcN53IGDA zW_T2Y|B(o&8Ze$7wmE?-Vj#2~uls)2`wMUrH1gX|;_oAAX2AuhHtP-*PZDDz)H(te z{{u5|`3#CFMEthe+SP~eSof1dhdLL#OAIH*bB*u5{_3madh~_=`d(=a>GoELG9r+# zHfiV%fr(YE1u-#L0FW3Y3IbIhEbth{l>R{bg-|`Gw*bD+Jp=s z&?j7fh$w-$j`7tSELEd==)t-2@-=_BBEWY@0# z>u%e|UHL=3qnN~a<^@-tblq)R6BQei)RPbW#miT%n1x9kR(gt)06ob}D}ew*s){6? z^ZSmB|J{Gw@*jV94S;mYpQ?>BkoJz;t@rM}^Pb%oU$`8=gjMGszW<89`S%;giw-f@ zs^NRzdhu(oJ_D0H^2ovKZ`(GzGdonM{r7bn9*fHXeB}3DG;pN&gIhM&V}a3=mv{fu zhhN##(=yeS3nmsD_|Erl-tvKWT{3rGhcWzjfBp&^+HYRBX-F%nz!Q}yw4UqCo7WOY zRz&ejf>*bem%rF3vC|XiRRQ63=S4 zhM#{j4exNQDfs(_IJfR62*{n87YL-y=Y${Ui`U z2&9036nL7;JdM6^z(5nE201r~1P!5dp{Dbr;_+S~3-v)3NSY;1nB0j0dJ1Mh+$sbm zA>ZP#F9vU2Caars{hyJmcaW|%g+34!9d zi;An4K2qwtwzqGzT={7fYk_=w>$~3e=C{A;HB513WSk`dSxAB;)+AD!KohbFX$*-q zNuUC?WGzHgRm8Ft5{UpOQ7^VeY*cpk9nNg&GozzI<8C+}=x__y(wg`#bWvCJ)Y(bz zZtdM$P3kpUEx-FkXMgDZ*97Tw7}a`v4~>_q)mruY-~R4B_dL?tvD{0~5oAO`3W5q$ z0ai6iI_YTBolk$^U*7P&&%W)yKlAqQefb?f`P#eIte6d8QnzvaZ4d6trc&9Id+&xr zyAO;20Q9%sdhw_KuAra^07H^Bvcm_vWk5`oZVk@gINtYnbH7K;Z))`fg3c@pyK7=HC1E zeByI=VUo6v%s2k)Z9n?byFT@I*L>~Y-*n5j-hc5$E4FSsa=3R4026x#7MjikeZ%G7 z`HSx*u>k1o%zoh$Z~F0<-u3_f;Kgsd=Ir;p;k>{5)0cervv2#sXWqVIVMnq3Q5o$9zlK_8Ym`WF zOyh`I!BDkCk5^YdO_UT+kGZ!L-P2ddFbj^wOul@EqjCuf%W&&!PAZL!-?Mjrx9`1( zyJ!L?PG{0@dHb*DTJvB0+_#Pl4COjHTo1-^t&pk$D&#PMiJ(gQQ>=k1*pMn2fR#mH zNQDS$y(F{+CmG3cJynm}ZJ1RxQ8ALtNY8?3an{-JNawxx(dgJ{F5usN^#$*F^UK(A z>-E~^U`e#6K+vusHJIl^Gc0MooYE;Ft_D`iMJ;#KJ5)0um zXmFtT!|OKx=G&il(YebeHcX>djsE0gKe+k6U7hW@z~Jym@z4M9y3haXuY<{P_+9U~ zcw)mO_uRL8)8@Y4dgsLedb;zD%UV-WbsU4oATmeWAuCcT7n7s|Pw_vXnrbeed7e>K zZaNJaI3nu%rdUe;^5ZvLdg%%x!X&QiSb?gv=Tckt9(lw2zw}@K@cKndIssgD`I?Ch z)7ZCX=r{lLo9lP>_O#~`CC5R!CHUCKZ)|T*z4ldSVUjB^U4>fBCKV@5!b;{PLh6B?aOI z;}5sgUs6pkk9yj&yL;o&GP+vAg+2K@H#-A`XihthVg>;Sa1xu^v^Qx<+kD2Tx;uL% zpR%5-ghj$R+QFH?HfOg(3b01u1>qa015wWOAZk<29(tG z+}H}5i0Fomhd%aq*S+?)zBD{uY03LgQBX%~`Uf{X`uewj{*Jr%OvS#%V)&`g-TBJ5 zf9}73ylLyU-ouAR_UsvG$p(p7QALv=<^9_i?|Av^KXv~Dd(mWMr1a%)KJbz^e(Dqd zy{@Y*?HWx~JKFOT)g7;S+vo1Sf6tVTdSR^giT}F$g>U}UH-ETc*PelWdk2Sx%PG%S zAmuoP@ygEK1N-+5ZrgdJT1y<`D3lcpB?1}j+B0-u|KNfB!#nr&yTmw3y_|^HF?;q8 zA2=|)f8X%HK*@0#U{a7mRD=|Qj?V15jR*euKW^T$cW}q9BL@$U6vk?v?<$c2&*{iM zwDItZ-uUUi|M<;YwjG)Jimd8`5AXYb|L~I+zu}YjKXS0ABd-Kf6|w2Si^aa@&%XPo zAO7CPO$Sx+82tmqfBVcGuYTv}ckCJ5yLYhn@aT@6M-q8VQ3C{Yc4WW)lT9yt{U`q8 zQ@8KjF(9It#`Yckpa05z_pRTb%Lc!UW-tUNUmNMF^%EfZjAYZ!P(eY+WujSa?x8^j zn!4D4N&F0M$abe=O;0A;2hg zmk;=H%_tF+Kqo*&utFJ$CRwM{lVK4SI9}ppoM$Fq-iU6)hE4#I#xb?|mTL1w0?9Ld zVX}>p2!KK?blSU`Ol$X6AchK*p61^!=OP#-1q&5Ab6^4#Ck#{iyrjr_^l;z!`Xl9z zw8NrCSjh_L8R&{oCCKDsL*|B6EkPlGicM^31oe(TVYr9R#BQ`IvF z6TR)gSShidA^aaf(tjmoZiY-Nf}7!&AYf1!K)wEhZFk?la4dS!f)!WI>d5;!lMQm| zbjEmQ%f?5)``zoVyY{~RLM7kY;-oWd9AN^xFb<5vY(NYmWk-z>G7hs6gBZ%pq$~i0i*1%Pt7{({$k z>fU>IFIn2PWMM~FYq}gp2M3CW4~$vS_V%=@Xmeo=BEzGVuGY-rgN-GtIV6#vSdMLS4(EBHu0^F?AtROq}_Zr zVArHwH?m0*+c*)T=A_6pR;VX&JZDzRyxDDCEonnq3X|btb!?5kWKH?7lD=c3bhp%2FJi;etk^Yx zJpCe&W-n<>aCIu)0nsy4&(2dq7X(rgr~%nVtaRK`7L7oh6iP}EKtWCzW$xS*&+7_T zEdY?-dVu>z3YVNro(t0VZ2DmL*ltilAbpOnJFfp*3;+IGb_LuB&m{^tZkrQ+`{Oq( zzy3hk37lD(dEdD$kIMI7e(<#yB2(=s*FOEh=l#V?&O|AK>T})R?7An9 zjrgDY$-qe22|WCtKsZv0KXmTGKe}MSa6Pu71bVK+IaM`|N#&toQW#+N;G~bk4Veg0 zO;t^Mw+czELXv={O-RoL+L7|M4VAC?{-XtvjByl-=Nv2Q;FpXU2t;Toen+zwk6q!o zH{AK%otw(_WzU~Iw@X5SO)}Zs8E2h!@);*zdhwlK{KEGi+OVxqsRWr!kjWZ{NX4pE zat#~Hq!3bL*pOvQ#Ox?*B1~!kgk&9MR<#UQjaplb<9aRjffuZt^NwpSe9@KX17=bZ zaqz(51NC~nQmJ11;~T#D&1(~F?VfWA1+zp0s1TIsC?_F>s4@{V$4R(rPj!b{6(WW* z9M_rMlVc(gAtKd=y0imyb!6+2ePqia2rw_bQCf{HoWg^dTI_nw7SS$FYrL%INEg2to+T+d^Kb1;tJy<(!sWluepO;y;L-IMh zpi7_vLNmI3`l(L=81S^AuW6}K^8So0)ms8L>yR00fCS1QhU)QO&l^g^G?n&NH;TPS zc3Izxmd#ZH>Jj&iM62f;&jpaSwYJhhke%{oB%A<{LhZO8^kp(9i!CX`vrevx)}RJw}roIu13x^w^7fm%E#;~!4~WTw7+1`_C0OMcWgXZ*^G=#KlY z-?x1%3|}#K{=7(R7{}=_Oy%-dzUa!6)~>qiu5~}T{*DJ8+FBT_dYNo06_De@h&Ya_ zfihSiqD0E1VwH`M5Lp7dOn`*YB$9Guqk5QiaplQNf9E<0~+XHPePYFHT<=o>sT zT8raSdHfq+{m!*Nxid)5Ztq@2Ubm<(Y6+lYi=vT|3Iw7KyKdeENFg9lLr8@hY3B)` ztV9qYRA@*KV^0@&j(P;B0-~bCgy|3j4D}q>xJs%Za+MN+5VOL7bOJ!hWYTO2q;QlhP1&77 ziO}pBbyTGhC8+^|z@&ndl0u1<5++d)!4C|n3sMqN{TWFraSc0xLCS5)UNx;-fBCI< zI;)45jotr9*9(;pu3eP7b-iuPgv;jI`Ca9}OWnUMs?>DZ9P2vI)IXJ)Mp|x^M26tH z3>ByanP(z>#0qJgQ7Q@|G6aP-485KbjzSdzaVueJ-8L}S&R?UhW9m`rp3SyB7tZTa zfPqs-ZgFkBX)6X+Q4oHWnYyP|@w`VfsaGQzw&b{plPSYuhNl3v9yD%5mTby>q$2|m zPGCG2I}4Tj4i;Xwwx>iB2rJ{cgBoE8lSsl=i3LP>@(_`zNSzcQCQ`+7jYCwZN4Fd- zq>O>+ak+fX#N{&($UrQJAPOpXF3`(ey8FJnckURilwP)A$(p1^<0y=ySXx@<&tLSW zH!Z#D1()4-@46dry!YXaJIBT=)vyT1Ro{0!Kk$5ZTp=N2j1nL!7GM=l5KAmkVq-|g z59Z}kXPvqFC6}Fc`30wDT3P^D)xzk&(BRN$p&Ul`(4k%5`qqzbyJJ(XWkIfUW#V^> zHi8vZ04!ull|X3HEHG`xawJw^h*YOaRU7}QHkAcgp~7G^tb`{Ym{b|6On@?=M50s0 zuBua~zk!%WXBru`La<7NM(P+~OQLELK-m(QKu`f#!9ohCQ6j(+5nzO*Y3`{i1_neH z%1~7jkm9j}g9Sn?s*k;5pbE7FDAUm@vf5NV#?Rz|h!hI33{^I&tgsMKCcuFTkTiYp z4M7z~mB30$3Ik0Dq(oEIpacsADJui8&4E=(p$xbJ3ndbxtWX?Pb|6p!8L&2fSFlV* zr{XRm!Y_5?<;LOM(#|a%7l)jVTQZf?mIk|eZC6W@&m>(f^;4ImCvwBX{F>PpMi5l?Xd1aDXj`hojxMLiHZUas4n{bUBlO$)Z-bGh&;ztEO;!9 zr%;8G<)>myV1<|-&*UhcTRew1^q1F$Oa-s!7XEt#`?>3lDp0bp%1K0Y=w zGFB*zRzh2?*0!v_>)!ir*s&wZwXbaLSeiJkqCP>11WKezWJy(zaYjp1PfJv(88fm1 zIxXKsgvWlc8i6PTU{NJNNK~1iObV#LvNi)^#pLTWt(k>Mp`;TK@zmj=q);VckU|s+ zWuv5k5-TZ`j1s9THG&&yWaFUKF6b`L z>zs(x^WV8Unco$ynlG7@P5Z|cZ#rXTn@^)zr_O+LV8Fe1DG;c z>(i50Goz*Kwf8%{qoR#psTxD=xyr&GBBU!d@w~XHEJO+r^w@gb4af>r!(gD`?l>e# zTsePD+}*}R6veqm_hYzFy6Oz;0K`B$zk2`(SW?{g5m@~o2Nl&%d<0; z_P{y9rnQVos)Xkh0#b%I50v9t?0N(;szf9+eV;QtRg}OACzTXi9^LHS|4{2_ zc+#wSm(HKJqOCpe`jig*Y&x6Ex8`zrOcLAL$dSu%k?<<5l* zTKfuTZ{3&TY`dzWv~AD!&`bg+cJ3Wnc7+tKG^*NOk(21-+aLBAFZFYBI?SMQo=|b8FTjayF+7O6Lsb#6KGpDoZZgG=&?k| z1dWwu_waD$?k&X^pDp>c0wAc8Q?8}%-Qqv88&;YsCo~cFkH7JXzzV}O8YYW! z-dA6`c5Xf>M+uIH8D?d?kKMWVUmotwXV@VUWt!>xoZ+d$AciJLYEG_x`Wcc~;NYP(bC+H;Yu?g)T1usQp*WsSWrK7olSyaO*;(`EPHg912mo;$)x$7J5&|5@ z4LsNJd_0kQy;iPPtCdQ*QYscpVPxajjturcwEnKGo9;F!U389n>G>U>{mIhOo@!p0 zV3idA_si6jOZ)e)-{*dj5{p_rDVD-?%EJsZ9FN|}@{xNsbzT;;rv!DK>gh|p!}-ju z8=NJx>L)F7QeHf(ZDOkuS&{VNVKZKqdSpbzn4=D;Qyn7Sp1#aY8^TN0N-m{^61QX( zB&3oFDp#FZz2p>cVAL5cC)OIn+MX9Y1yleqsR(lE`WZ`|h20=X;3Jm`m(3R6w?rlk ztx%aNO>jGYH@*(l!tKU~9e}_$XIT zft%Hefu*j8GO4?>D<{utP-LWY=dwFg30)J<(x2Ly! z)tTftj;azVkOXeBpoivn6H!8Nn`KR;$65Ocg{Xq!Oc0*Bl%}aAQp5d)-6La}J$f_| zI`ynz(ZY^Lw+?LHcGJGC5AJg2b@iOmGiym(TURQT_WX)5#xd+LIg>CGGZQfY5o@hX zif|`U99oe$mc&XJ){EmK2lnsUwPVx3k$pzT=XT-Li(5}Q*{)bP*1n(*i6S8*U_e1o zp^}e;kcB#c0vsk%DMyQD(QqMm%lgWtrwqOQg7x3>?Qz=EEVtX@q!3~DyW)WJPz!0ENVnTvSXcy%Dz!-a+CbBcs zBD=aL_cza5`dc^e7)z2ChiOJ9afYV>K^rP1fPpBe4!7Piw{}rme%X@j?!EE$UB&$e zcO2f+n$9n2=~$G{cW2YtOs>sKr9Ia%h7E&>8+sZlsv@FEB4Jpsl*dcO;^^2w@8R7? z`u0@{{rOb1Y`%Zes?@2g&60)VZCzvV3-AP?B?W_^sthRo0?ZBCOy-F+TQiU8Tt_$& zc@noxGZ2BGvUq%ROE^3f%n_pIA2>)6w`NP1p5h!C=H8Li#ytR(NDU{m+N0GA#B-1S z&b`CKnL8e>oVy}iIWN7l*WY%qc-0xCNZq@Q2)3&g)QF>{+3^fj2A)C+hnj;LkN~Uz zAt7Z&3^)K+!|d&kRIWUye##Q(jz@!gx740@^2jUCpU9eP;E$ZOLYeVIEW;lu`;Y9T z*s=&zlfbXd@3afL<9vqjxYCM%6kup;G}u+%M^o>dP!OTnIsn4qu6DseN>5pG^6`0a z&Y&P;T`wAPTMxCgBTjH)!-QgFMey6F&41sSbJ^iAwm2SU5Yo|F^1>BeA1a1_dhgz< zvQINU{4+dtEJ&cztYwj=8FPqWXx8Gx7hX7Y&DG`Cy|RAkxdYwVdrJe~*}3T}_uu*X z+iv{a?Kghqp4-2F|2;Q7^uV1P9=UhJh6f&5fA1p?+;!i*x7>cq4{rR)mwx>H&tChz z&)$07XEv_;YVpYZi+cuNdX@LK-)MXH8|l?A9X#{QgKcy6!5u@Quv7O4I;GO2`1z`mLq<=JDcbkP$?rJQX+*agrG!F(A2;N+)!=-;TM~y-)2uBZhkS7=#v?g8;_)o zV@%22{K}&M0O~01n^)ehU`#pDDN(bfGMe2Pp0%=a>1nldSJzHm8m*jfyIQSb1}TW9 z2jvF_(syi%)-I}_yx85{=kDq)UV5^myos7@Qk_s3G_}Y*GOU28`h#O$HG--p*6kfq zg@U+TOZAOVVgWd#C1+@yrc{4a&1i`dOMp|4-2O2r3E&pWW~>ANr0(!IS3`h2zzmK{ zI*3*+%--`Tm1^}1PlD&BAJ|dPq$fi2^!DENhj%%NkkXW&K*Md_cjCpf!!-*kXRer# zrm0?fN`39(B%dKPn7-qvEFWFhUhQlC*`28M~<7#|sfnUu{=_ zRHb<-BUOF6(}&WuK!L#8JnyGIA&|ysQ2b&;c)IA6Y@33f+#v~&#^aPqB=m$?WnicP zM&f0K2RC(IV#y&@fV8Q*uTv*nCXjTXL{qZ!7GPCj0#p^LLqn-sHYBGmDW9<{wYx91 ze$PZrd6Y}#@7_YSsCfA)oJi)rEzz8I%*)YSUiZmYwKErD~YIcT06r5yj~rbGIJQ7o3%3f?(T0 zjpK=12ry^w+ge}x)7Di8T5j7g{(`fr=dQ}$xhZwe*4o8uhhBWvtZ&{ys$-`wPh5wg ztSSTs;!Kb%oy~weer6pT1#=on!xt2 z>_}1$$`MXrEKsc3zc_#4JI+~Hs7BQ&VFnb>Dl~yYR7pXk0wO%45C}|-`I7(zJ=;s7 zu&l9gz}%B@Wkdio6PG_b%%BQs+*EU>-kGM(x#=~LU#~mWYPMYQ#!Ff*MYXyUN3d21 zATq{~A0)o-Wiph@RP(to$kbAP#BK~H0zwEH%DePLo1kAcW|)Bl0+51ck8fXG+P){Z zmcat$W7cF40JQ+4p~h>QR=2^y!Qk%A(b|R8Qx<1-^*Or^mo7b3QeN)CodBvAuXSos z=Kk%rC2g0__xeZu^*h5=3vDj#Z`)5ph4Q&;+;Y|1yifD#(y2?FVkKC=C!XD&ES*C{ z3ChCM!WxN3gw!jmS_@bQXzxOg_KP2az5B9~u1ZCS8!clzO7)wPQ%XD$mi z?PII8H4Bs|bI+Fg*(+-ooa8^eD_FO^e%A7#S6jqP*4PJ7px<;S`NOQ6E$@rHL zFuSsA_V_l1(o`Sn2}>-}?vz$!=SvI-Ajhr8GJ^sT_M*O7onXR=O+ArWY3H)}ZAolv zQ36sZhw65 z%H6${YGL(?(>0Fsw{DmSpu>|FIRj&<2e#MFT~(jcnSXc}AMCHa;9PMzd+U02OzDc# zdAyR^uvcbx)YmK^#{pEDL&sfh_S{tyAviJBR?f$oMVb4z#koxVq=j6r`*&@wz3|N1 z1#8pSJ(zi5N9E#EYWZyHmPfq6nF#2in!k1Z_zTXip1V48=ce>MTdNnJVqbiA=T9E& zcz9>=jOBILxYbbOBx%hUg?$nyJ^{fS|w(GZ29kAeE)V>$*EHJD6QL)znBwg`uWc@i*-={bOddB&}JS3#6;n-*GrR zX<_Y@CH}5HcX#iE?1=_`=E0q$TDs(9Q>|wv^3%)aM5`A%!{fpFUG>!qlFqjD)&n$L zsGYx-tW9m)Wm~f0DNDS*k>Jt&(d>?B%>s3dLaFJ^$$$_vpQ)d^bRwIcu0_>Tm&nCy zvk&hGS1+iazBEYrsr$A^6SoH!oitHJliIMmdeXx1qP6}5+c?olwMS&`*<3qk)kLki z|IkkFfoIx%r>McmmcY@4Oe2<5S}$=`aWl9=FtcMKi;{g zz|{FG0s$-_3ahY>?b}9Ahf?F>K?I_v%0dK^U-{~l8D=0=f(W2cniNc2R$T7@041Pf zs8q*E=FZK*JzL!!hk0n++12YmvL|)h#$!$zJUqJ^XmC)lJ?w0p@>tcOzcB7 zckBA3r){Dc)EgL0-?ycH#)|r?g{epPdfN}ypLdGw$OZRq=1N#UZxzK!=I*WW?DmQD zwm62S&Od6N?F0}dv)b$Du5x;Zf<1kyU}xh;!E zkK>7p&oo$zhN@xUaI^h~06L~DlTx!YXnJHoN6QHirlHfiuT+)1v=sVl_uf*y@mta6 zyG*_v;Ay=_pyLh-v^h$1IgLG&$;J=-xcK#d)$sue(hYBaReiEr1qvksKvPkVPVER3 z%_0G6d|n`w^8EE9m4RyL@=RR*+%V&gf&{S8X0ZPAHB+>)H69f@Z4y*8Q2Yur!wd={ zC^b)p#Ul^plOX^OWU7RVnrlhv9f!=814u*xMU%vu(egz3ioffpnesU8r61f0)zZZ$ zb3L30e8Xk)Dr*8 zzGk5~MvtYCK-$<(I&$U9PxJQmr#9}57WR}U666nTpBSQg)(Shnd*V1KRZAD0L}4`1 z9*Rt=`n;3f?T5Twhij|mhpQK+@7`jHmGVVvlfa!2a5VStNJOUY|q)@0ng*>@7rc9%TGwFEa&DGnklfm)$p_|kt7>7V0q9+&j6G%zL7$wt~ z7s(J<2n2GPxdR0W5mXgqJT8{&5A=;Cq|8LW6mj_sGt4l<3_ayNt4Ho-6#^?%r$TcD zRGs~UNGzZrG~ZH)ItPaQ^}EX#td84r6V07GUanlQnp88lt+zd`wY7_afkJAc;QP#F z6Jc?%ac{8w@I-C5cC@7LebiLL>bYwWCF#jbd41Vja?G)Bil=45j3UXWt7orp4)pu` z2a`D+;nLZu`?jH4ubsY(i86O@k#tah-pN|6PgKq%JuTJqR!vmkxQB--YZgTFJF~ZK zaN=a5)?7UYr3wI65J;L@K3ogkBO}KYK~e&N78Tcbln-Er>DYK(%bWupfB;B97Bd{T zG@y5@U4@i|m6^m))^+YWG(KF7J@SNzAas=KAO``bb0(9U_{piX25A^3v1BdP#wDyV z5lEp#Akw3QMQ(`WrgO>uN2}}Z5YL;~x0R^$olnIB+d17zY81jyC@GE$YWB&il7p6f zyz~C@5559%(ArU3f4|+gg@X)K6b*&mpF4mOu?kfS9M@pQGLh?h@%#e8tc8yW}5sfNzIThp8O8!Kk4lE3L;c#amU(;SMx+DJeF>Kz;km(D$A@my;% zvSQ=`f?$T}Xfnk4ExKf(-VHkbHrN>$Hf-;&w1X_j%&gd^9J6_}vT3k%>7w>}a#U$4 z86+Xfqt>d1H7O0tNWWHx$ssWrZfWzn=a|+-+L$ktaI_$KQ+bJ*$i_P#j0cZ!OE*+G zlhgi@%6C86@*97EbPwv|3Bicc@y4|zs={E(wj>81t$gpZ5(%f%0*=SVDmQ*J|AvKR zSgqPdT7Z78{yEr?YSO!1h7a3Xk!&m+IQdyld$-NDl40WnlxbxVAvl02?%H1%4DIZU zQN>K(=L|EXZho?9JVbvp)siV~562FE>&0}z5aJo1Ec_M>b)bo#z36E*xk3uOQV zP%TnwYOB{HJ#%T2ODW(eEFl3DYJeD|O^rw@)v$lCnXGD{svsnbdT1Ngx&+Soj1sE0mcv~sY_q#UG!R1#sMa#fl744 z{?V*qQdRsi#N{*0FvAQpP$Q{?9}azX=RX*I!Xcs!7l8GTmydIQ}sb}50f++%}66QNR})smh32&Wp>aEVTb-3c5eQ_h1@WM zA?O-|983WobM!vZd6s%I)f^bN1P%40_M* zefC)!09afkDHj3Dn52n+@pQ9M~3j9<*)If5t+L`x`)Fc9)c zYCY?m{sz;S1O_F^0g*;}0U)uAlU_DHc?WY%M-O~Pc%}B13=S_X7nl(f; zqM$^8AUx1mM-GZ$9w!!ytrT+b(gu&x{kwzR-ScL96C_Pg87~ibBn_W^=*XQ18fUH^ zo@r%b5qX}BFHbg})w${B`q@t#`Jo>TldBn8t}Kh)hH^v9V=jfkdS8o_sVt<#jxtDj zFO03NKlc^Yr(My#{i~f@ugmxBQ!?DW^-kCSdGrTz9KI zo5FE?sD0&A;&AN|50u?Jd)tPYJLILgHYEnGZ?7-z5hoW3fErXW1Q>>~j3JYP0)UGf z;TlvqngmivKoC$Mg&HK^p@LkIeT{PPqNgA@W7vnae^03)KhoqYaa-s~jHPYsP`oIO;( z=vnD0Tj^!Cs}*&-@dG=KH1fO_uq~b#^;k+uN=iy>qRDIB#yJPSI@+5yP8@A=0>(j| z%g$|Iw8g8&kn$B{KI@d$_nfP-5rKGgj00+~oM>NimXi=62Sc#1#j)W<3E#yf1j^S; z_AbAmmnP;>NKAz8#?{@+FNmkF^+=sc>Qh(u3%qpC-IQ}Q0jln7IebHiJ%}KVqQu$G z_U2A^GYMFnRBQ-1hb~GO8g^r4zITNiYZagW3?~dl#v;Q*gjI}G z7y+Bd8L_*$f*2^I7=i!72rQzse5m%}`wrfHU~Z&xbk4myO|3Y!{>&@$Lwh?ne!*G8 zNd=H2016}~vz^q2qtX~{MWkE`1`LJ)GRoVHd~TNNWbKMqOuX?o#(wZs^(|XlAAeWl z^Y8S?Xb6?05Y0kf8Znm~Algb|bZrRd3-9@h_FcCQU3~e-tA1?c^}kxX{1uF>VqwmW zhMgm^7%R$FRI~`xD&!r<93)4U5Cee_YD2wUcQtPKe7b5){pnZcF%Ww}$+B8{&F&*# z-95c>xGHSGJW+IcNl8gbi69Z)c;u#Yk6dFU0wRD+gg7?ReBMQ~Kl!5BpL@yln_fKg z!Qc47Ar_r0(y|9G<1Wqmq zPEdx-sAu1O<@Oi-@lVI#3F8$;B8~)*an8|1VxS5WSvI?M?%m%v z^^0%Z{gXd6_2xHq?%Yb9$Dci&mZHGqEqtmY=F>AH!7hIN{ zerET!8{^c2s@94oQqcg?I&)L;zU$MGVd`}`L|Kl3z*1}kiexR%9&vqH?Xn*l|B2tO zfB%oRZ~sd7hL6N*Jx>HywB<)U&ePaHNJF>LzV=-xO#I|;j=c64>*rsUq!V%WaO}1s zMl7{}5F(07Eg2urZu?@k>)xb3LI5Q!_1OeMsHk)AO`W~FYZqOXtlQ$&f{BUpZq5hp zJ=D(gBq$Pu(Gx?Lmz0#0lo%XkOTjwx@Yg2t*=T`!!g69P9PJQ#6Qcn|NFXg_&ttG2 zZ5Q`x(ma1t_bI2R$XMV$--f#&K!p*!e585Rh22%-#^%wHG}ua3iKbe~hwDI;1xx3& zymRR6L)TTaMwFJmr6d~SY&Np9wUPitPA*0f01=$+uPt1^zWL3#@af+EKi<0Qir4RX z)6Zo4PGQ&pBp{9^P_;YDXWsUz2e16`U9Wlh)Zc8Je&^7hKYd2y`irUY_;X!%B@Pfl zWt~J@NRd#lgpWKhbNy*|xw8&| z11Fb=a!4^Wyy6$GIqmJA8Gcr+x_Pv+ir8sS|HCupKKDYZfDmAg#th~A|MnF-f9^%? zJ5tjyX*xN&{?~4u_@S@R=5ZxJd)-uL3+iBDkjj0Z!66G?QLXHlZGG(igTqOZh(*XK z=B}J~saCG)-uz89j*!&k7y)n~W}RfkhOqIe%}>0i`QE>b%|n`4Nl0wMl8}NW2#J;0 zIkF6P-pXgDlZo|}r#_#dl_Adrf&}cP(Qbkrz_G{3vUKB9-0itB9ioLLMWRC!`)U_nl599j-7X?YLPh$} zw*C8B-CB|)mV`i05M5qUQc_Z4fh;g4&AVqEyk=#4UrxxeO|XM)3{Jpypa7f4h6h1Z zLz<-Rt*0!!@ZxOEB#REjj$jHTfa0ANTd|?=0TR=F#@0sP&g3YVW5kR8O)&6K5Rheo z#j@=1nMb}ZgE5u?QF0U^;_Qyr)5t~0IoTM5^PXF}ZZu;a~PXF{Faa<^n1PgzmbfOg;2GP5XBFK1(6tu5?~EB#M`m6K(9wq zHF1!%vUKfautG$_7M~~? zNfto?#Nb~LRB_g7e)C!lCAEv57h{MqGc2p|%{{Z9c;LwRP{krb#Kw9e)=4ZWDJdxt ztZ3}I>Y=y4=bZo3QCO_K#ka{(7CJZ$>Ya6Jcgxz5o3~f)+pS#(<;8{TY)N(m*^5iB z6u*ROrTvuC`=wXfr>#ybVNL`ZB;G)~W2=#_ zIYZ0Vq!SZiczo_({&3`_udZG8a(650G>xnX$N?+_7_>BV90N;lmSDhWY0yG=QJ>Gyn+j6ER+1Qc_Y03559{`yXPk{;FKeOg?z%s~+|Q07ovaj`B>Lhq@Y8b9>x#`iv@w{dkaQRYNrIm4i}t%uJ& zcwLB*Z$*iT5Sn)^oHEs3PQv4gz|e%bMOWur%WD(5%q7f;1z3PNm=(DQpvO(F)WAf( zzHliqpg0iaCAP6;Bf24cA;_6=WfGLoKhu6s>UfWbzV!Q`oAy4~BpnpQ^YmtB=-d5C#LW7YHS9)b3MH?>zgw=8G?xd*k!we&q)jUh=GkE$i}HHJ-H6 z6~U^I)Z@aXd)`0PKKLkuln4YNJCLooW8o6acM)bO2qcIgVjzk^HkHKVpv@Ig7rF#! z4LvmX4AKV92We$xbRa^M0;Dim4PTp@zvkiTmGw#t5`c`bPz+h#kCbb8v~%mV3SfbR zY@&i=teyT;ck|X)K0WlT=TH9BZ{_#jIsNwE$@bitjxW!Xiun%Y4hbVWttO-6oonB} z@bSN|J@FoFS@vS^)nW(x^V9D^P5lG(m8ciR;@%K04!uua}tO-aqE$9o-%X$ zql=`H2t*|08>TNI@?C_$EFoZnAT4fC6$y+3GMJN!g#*e-*wH@i)3X~%+8~ICavc~T zAX`E*^(4uH-*^9^xpr?jRIr30L|ImBFZ4?U)}Ha~)~(ma{X0T+1Q{YW1ZSDnoKiXW z?C#z7G(Yw))r+1t{_B6O@#XVx{jKheA5VryL$!_(k1w`rqoEQSAAMWzx=)P#$S>9} zdyNk~*tzbLd7h`IofVQA*nkiW&if?9=p?Dvd*A$$+l}g_S2|RQIr8$M>eu%!d}PO= z@p>vDo)o&gq@<*zL?FjB?_Iv*9qZaV6Dt>BfjI#r5J3{B!65r+uCpy+aVT;&`B5I8`0#>i9(G``==ev@& zzkWma=Fe)~*2y>i_Rw=*KL3$_Zhr8uAxlP=qW~<*m^<+pgM_g>GD+5KzW0y258XNP z`rk^nK2x#Xx$FAgeLJeF*CeY?#bCq0Cu0&61=V3K9BAEoZS|a|httldIUgWZlACwm zec(tZ8>xiE$a-?<@{*F0k`e(CLf(1W)Mu-)87#mc5XVb|0EUPGBn|Y4U7cwRedUhf zFWfr(nVZHwebdNiZyNf-E%j^esNJ_Gf~5dpQ*c83u@E3zID;rXd)NCX8xMFnAEC=5fhm38)IjeCpuEkRUA< zg=HR#2e*atwr9H8hwnY4B#C4eV3~rvJy%)1wSLia`>8DP$Zpq$1Tw~ulQ}u<%*x7T zZuXjA_)y%tjed)(e{B3m-`u#@MSDJe;h|5b&M^ifbAqwGDC(*(HKR_C zZl-3JMkls=?q$(Yhh{@`pOYghF-FQ2D$XxF{MjuBugAfT!jwD;hKNPzHap8ccH|i( zK#n6MAWk+iq-db15&-2ONO0h20%RZrh~mZuqw2{IS_{BE5_cBP|J?l3P>YgBIhkMe zBwV{|`o2TWiJ^4KlFu>b)l0w6&4ujVTc}hPy_8!Em9=M7R&8`ey$5%6zVYc;3vpqg za`t88Kl_KFK05Oczn$InwPjaROCHa0ce&Vh|)$`Sjt7_cS(3Ylaq{8my#0u@L&*+d9t1SZUAz#AEwWWtO`h9im? z1_T&_ahQmVCXB%ZjAtZW93kiNAflWepEzamoRl$4YR69~p8 zM4}v?vG+sgOd+5hz$ilzbW)O!3SuG0$#!i${PtJxe$AV9KL00nKJTaZ z{o?E9Kk{-ftYr+w!5|oi(U2e5F#Ula*!L^1-TmU9+V!fRI`pTn>)vq@BMB1*AOS5I z>qL`!&%);S9J-9^H2PNdON6Q>a~w~@ozwH5dvJCrO>F~U5CoxKd%n8yDe30(x;I@D zl#x^h;?!9$tUa~1;Z$0!Ffx|ib658ppR0_FTY+9TF3g3qpIO_ywROWa&3F7!eCV6W z_#{ac8+5$&Icj|Im`oyAFLXS)C9e#R8v%5d|WJNwVn;hyLIv9(=(Y z5B%IEbMM|fe{C}Ng~`KzbJ6ZsU;gmRetPzuKa|g$#RQDezW4k?zxNXlzUU|Sz4qBh z{_^6PPn|yV-m?zA`56zs=#~3_{TF)s&SV_YE(U`uAV?tLIPsEu@%aNkw9sBb$RP49 zDT&yGKydU&ADC)nc@hK|%N7w#jL{5T`r>Tg{n_sAp)KCeQxAl(@nDf+BTg7lx)$g}U)l;^RB-k8{2q9GI-g0fSVr_cP z#j!Q-K#=R9A1t5R-RRU4VT=JIzCFrw_)AKD?3Dw}%ICgv@8JHK7oOI?fZh9M_>M9@ zR=?_svw+>7oH?fT#$ak6_~fm8H*xOPwZHRAR|9|jPhYw5=7%0-jwKP~;m+*$?ta(j zH~v^FOawV6n2ZxWM z1&X&Jgy`6AR5o9bZrs|s=|4s{{9M}KQQvczd)Kg zW?^VDS+iB~tDam=v(xzCzvufN8v5Q>q!Y{OSs)>fjVMBzX8X3cKK3u&`|i{DWGdy2 zg)q8SL*t&G?d$%0YDf2**OAneWywe_U3*4UfCyp{0w>jYXsUPbH-@fy4VB^8Y1vvc zT>Iv}nUCB*H9C|AWR8PUmzR_j0&%erKV{wIK!q1!^0|ffcU+hEz53eC4+DjSeT-cS zQGWOR``_`NuNB?DdnndC#piw0IhF*G6D3`+=QDHF6<^%&>Y!A16mm?hs1r~=TtF{N z4$p;N?xm7O0F}e@q1lNOqZ~Iv!h^Eq!R=@5{oty(UAV}qr{vowWVA=#e((kV*w^LC zusHGL$kb_k=_ULB`1!pD=EOptRhiEu#efqCc?>ZbL%oIetu$`EP{hDYI$|N`ioF!9 z7-AeEI-%3qUVHFIUa;zCH?8{L@2iaLr57N-P0- z5nMl}HNg02y{|;?zHfhF=YyZTtq}di(C41Hwg}Jn73$zQ&~N|hpZnLvn!A4$KJ*Rt zJNAF}+xM+47QO)RfBy2b1Eo6%OAosD2b!C2FHYSl9Oz$#KmB<2QIY$?$$`z{NzsKx z6xIgfyFXBW7K>jEruK+)e8kBvc6I4T``k7677d2()szn9vi!#wh<>13kgAkk&8cn`e(iw_ba=9WB1`rodcu2LutOxaZef->T;bt zbp_R_ItoQbgh;Fqm6(vH^`=&5>1rh_ddZ4B9omtuo}wKXF^V{VIk5zYylwAmVqT%r zd(^7sB?cit#9$_e(oa2n==BHJpTB0Ln@8D!1m^+8AU9{UC?l9;9%Ti$zcXK&kf z2PA_yHY^JVhAQdABvxw0m}{h#Ob)x(Rc$2h-PXC~Mhz_wsFyXX>o#k2bv`>SK*lg2 zsk+_j-hWf|X;*|W?Ch`!<3qY--^@oJI5JwVMo_8CPZT9(yu6ToeTCOg$S!nwp`i-_ zI%xSPzw@#}1pp_p`1GfxG$A|6OE_|Kd+R2l(~h`{?3q?0ypYOJ4sEeW85o z=iUqy{J*!pp+B|$bD-a==(u^CmF>JQga+3-NUCRMkcj$>9{jT5hTq{a%jG|UyK1H4AgcVY+i7> zI8JP2B$PVe(As{*_P15DEGiE%u~LYXeEXQRy}Psa<5Mqt&FG&K5}cp-YUMG97)JNk zR_$jKTzU_rn62s^~GyC`hQx~s0eb$aaazu(i zj8;@qt6cD$&MlvDl$08+)CBD`OEqATrxK4EKf#;bjrq< zA)?Ju!zCl*z1zQ}B(0xwS=OFULL#UIy=&Xlu7%#}k(3icx$m>2WRO8#$nm}yE!1QY zM=u0up%MFPvJmBiV0OP{UycJn@v4Z055nz(Nbuq|8`ez}TDEVbAK&fY|NS4ove1_U z%l%*bmit0^V5)d~RIs@(O#ANjuYvu(pM!*uL7=)XXN$&#C@&uNe-=|1NbSLrqaRQ& z?u)+_6rX6&a?rTH>L?~s(7*4GKG665_Jz*__lm}awZ+_X|AD1*?91*?yz{3AjRzKr z4XpivijUTB-(NWt6YT%`VdzjWIba!ST05RaU+1x`lDSxLVGzH zsFV}}4iGplgnQH@<6u0WG9Q==G%`AEsTD?AVeOIh>^o}D{A%sFpC5bvC&yp>iP4vS za{Of<8-3{~Mqd2Mp{xF5_=?ZhF1ao}_nTqe0gX3R?+`n*x-`supjROg$slYgj+Yb? z3c6!eMhQ`=`+qxA|A5iO!DDLAOTkeqvIs1A4U zx-ksZ?Pw$dSsvD$mabpxP9_US4Ue?G{?+b1H>5-3xsv3RHL9kLQMLgqDp~{w5XVA9 z766Vpfv6lic9V2eBP*!Z^F8-;Z~JH z8eJ9g=&0rO+RgjtKJ>uBv1&-9fJ}xda;kTxGBC>-@QQtpl`Ep835k&8}IEK>^r=8 zj)epLRYb9b=r``S>HD*IO)^+u^zHWz77_Qs8sN!}qvM9z`!C!3zH00m5M5#fSq33- zYy=!-*~y{VV6zk>Kp5hYd3wDF5faEng=5AF$ll8Ora$+fopvE0@7ku>K z_fyL;I6)~2$Y72Olcc=|p4z$pd`8AJo-q~~kJKOpBJ`jMb1Ab4bAdTA$AA75^Zl#1 z56snQh!*r92SEjf`A=&-MkDz+hU3>f0_C^@2^G5YXTIgY^GOyUP#DLQJm%7v!b7!i z?{xc<_a7OnBtb?&cCZYVob^JersrK2AHGAau0s$ud7gEX(aB`f1+lw8Fa#2z-XVm`OvdOZ)8 z^UCV=>By=WyO0Q(7!e4IwBFr$dx+i2`OnT;bKoR#Abfdfa)3jm5xci)pi9!P(FWwGjG+4$go#W!q zQp~9DPv30+DhkUK{~7h$eB$4Jy5G1zN`GE`jb7vnJ?RnHe%8Yuc+S4}Ndl@?kn&)R z@V93$ipt^nZxt>Bppv_Ca5jJ;$HDm9jF)>Po4fkqcdVJYkCQ?fFYiJ2M>~IvZk>t| zxCarAUzZ1lW7Zzs`J=!1;N?F*^*?@K=KuXb>${#w~nH){muBFpe z9}sAAjIl{}+}6GACWa@1Ga1{->04c?nxZEbK?a+sBxKvao@{=)YLn`@T)3n9*RX=+ZeBvb+Cwu_uEasKrDE%cuUe zG$a4XjR+=B^Y&#s{;gG6b;GKwx*uj`c!44`UZs&(6}#d2MyOvgS~F%3aCoHe(?f$yK$|Xd=BpFUeYU zH+%6=lI`1+Pi^QOtoNpBy?ta44Cf1@o~iU&%O_s>VC|xBlBF2PI38>;A(FZ^cj{aA zzLLreL=cD&!5|(pC3aj^N$#3%d|~JG>(5`i;B4u^{Gl?LY&@s;&@I)i&&<0rQV4D? zRMwrDt~s^4yiusZZ<9eqIZiswp+mmX=1St*6#-Z1|<(j?nft1)pHgHwW3h(m-}htKMSYn53Z(de#bRc$jvurySUkt2o-E}} zZ+>q--KZalAI!8rVt@%HzrEKM)vn?|EIaivb!gq8ATw^rJNWL$4+v1E@`w4 z!b?U(i;m+Chv#HV3MK;4NE{3G*tu-~hn~9UlZiu=OytB;;)nt=>iyb->j#uVpRTjDvZ}|A;Q`$RU^`dyN?QSQZ9qK(8Y>N;%6`qlC0eFe zaVKO=vyjFEefLg%{~4=liMr7&MslZJIqTBwn)`aY?oQTjb$iZ;yshz7l}%fE z5AU!Y6+(=mn&xxO#uwf{@uqVt8_#dwc8Agt(j+ByHY(v)RR5zUxR;+QaizO7X98APYYW4PmHzn(~B+J*w#x(Zw zk?Jk`=RVx8SzfIKuwzs}F6*%zFC`@dt-SbLp}yKHbm2f64mLq9E#$XU;10G<4lE4B z>p;#9q$Eq|H!J$~I}Y-{mul|8SW7pUF4;r*$OHAKImm}uYGk0f2XhCOmZ@2~1}IWc zibVXv!@<_rfp9M@364vcazjAF zy@i)-`-9GT|LeZ7ryD0$PY46ofwC1qryebblS?xkZx5evtx z9oBA1Cst((b9REF41i6gk{#LO#&q?HU?*QQTFoFJu&_~?UtUsj zT!&~bjmr)aAqHBrh~pN@wcq8aqx*{|g(w^t?90TyJY5=49~d0GI;xUMUva+uPl`}I z#ZJfK`C|z-4;~K0^uYe$rtek%Z82gYmy4+OBj&3t{X0OB>oRDzG+BI*nKM{66#3;# z|M)Pluyl@tlZJ`~QsH+0zNpn$RDSGV{hhc)mVEy|vLe^N-*MpQlbwhqWH7Gw+RuOB z@7J~;1}ua?5p075LOceNnP%wb5I`(NXdrK98+5t=5P2jlumJ>!fQZ77xcAHhAG>(x z2bJftWr+|uv6PsBmQ@%0TMzv_?MYIDA>tEsu22s13}5nR;QFhsoZ|L~Ldz zf&x&pCLAWwiYzR1vOG_gXUU{BA&pq6`$!^>aXRfyuNb;Goc5_Ntop5gBAaIcf}y}1 z4>n{}`J;z^VgJG=lExyfFG`Lbq2O2xX%GJIwtcgW&Tu6)K_IY=4UUc3^o(c3&O$b~ zk0b$%o%O=nP3hWIbbBGlGJry?47Wb}adi)eQ#R*~h3d+6N-JUgdg`fTE{+ZL@^tme zFfoyguTg!(u@|B$6BFLQqjS&g9vO=Oig^q}mE@FDa;F$62MeQUi6qVUYzq_XHL-?n zQ}$TB@{K+7A9-MEqMpj=gdehh8@iDe*p3*EeU7vms^Uc_Sil>z%&{MOIExnFXm zFBAKX3-wuaDH`+(a`&^V3voG+rvvdi(9?sRmqo{ZO~8J~K`F+5RJibJapwBB-e5YI z$kKTgRS}C<{nFw&p`cdWHj~e}`tn_|1OaB^_Dqoso^V`4t z{9tXO#Hb$9&6X^nd! zCO9DqO9~LNF^`5?oyxvxQi1s$48=9-caLQB(Tq9Q0*!3G;Ux)vGD7hbsYpP#ei z9Udm}^5M0A`uCeY{;BaFJRGzpJ5uvp z>RgUEf{_)1g>euB?5G$~Cyj@b?(Agstoo||b@Rqgy?ykBAEN;c5GRrfQ%BB!%idQ| zJxnkqC*nVOet34Y5&~Gtkz|5|6nn0Xg%um~0}q61J<77kdLEmoZaF{i zbaRx*BA}>xHSXKjyYm}bzJjciE;}U;p`Z4h42|N<92jf2mV-8fF8#`YMc966 z#Ci~}9{9F2(Pinp`f7D>{?UN`5d8{lDu4}v z@TdaEkhHpCW+8$=JPOKVdSKeNOvL69k+5YGB1lTyx_r<3pT6rONshoGNG>@9!Q@O-5rXJ$$Vxqo33R?s@dVR zcO+!fX|I1B8PBIDVq=VvbogcYhPPg~=_~)d=6C-!S-zWj$b@vlRpf6z@LPx4%Sl^h znEV8wJ|Tfb>gDm@?%CJq#zaz#D2jkXluStSPP%TZI&)cbR!Jp*V^pYx)6YsrD|9oW zOpJEG43D($-k$AwxUzCW%U98h$+ES{%H_(UIRW zrUDaXLY60M)+Uo1$-6dSAwZ5vb+k8iFO!pDe7*AstQ@X>bI;sIA2>KsPkG{?xc_+? z`8<*1%?T?hsYCPB*T4BUKK|8%%O?WgQ3ll#mmXig^nm(fV(C%yC!VF*;U|saQxpYT zj%U7ww*xzmY-CW^<*~8*z|bpSF!h$_eyq2v{v?xK7|Gqr@JG)1|85_DdZr|UAY%dI zQK&q0VEjE_A0S?#!FAYwj5DFBA@IWe(6JhyJ_miCV4HSyVY|v{FGa(=j>K(24J=dUC@b7_^xyP-j_Z5rgu6t zNHQD&#CI76QK?)oeYp0|pE_`OA+1;WZbcv*9VA+L?B&_NTy@Ti&sy0JB&P_#CdkHE z_0fFCjZ}xy^%uC?GLf{FxIOpIzvw-*L!+YxIU!g;)^od;uA3Ns)h{N?&rsfIe&L<1 zYpxBWqdaEZ?S{UM#PPx$PbguhI>$9H>wc)5J3#G;)O2mcvp{rk9zx;=3wQYk% z09!$*_wd)#6{jwnueeqjY=03=`@h01{$vfM&E zIs&FY?*8y2z6ooA7aS-Jt7MSGV?>+RBuUPw`%`3k~ zJ3u^-*4HFv~hxtcj6_{7D0-@a1su5!oS`%^_)$UBWb0RWhPpLhy>tXC#>44scm!? zECq}Uf@s(D;UMpma2tMhI%86Hj6oh`l$0t1gJcF^l+;`C(o zW_Oxls9ssIsfBV$qzEe)QVceEP1W`1I#lH*05TRLRI=G!RO(v3F}CM{@p|pLhh{(W z;GxM{h&b@blzA*AB_$;#0k8~AwD$eT?Z11~-v3vL?O>-?1X+MF7D5s*5X3UI2loL2 zKs-9J*{Mt~h^-3%iE2qYrK=nS^J3ksxI zS+mB~amSvGCYNiZPM*tsz>bcVW4m2jy;`f*(2Eg)V1U)0PbW9Ttb>#U5&741m zKngKtVQf{>X`x_YNU~nCc8k`oq1%&zfCb1=)mmlsieAi}q#>uW;hc2+>9iXb(FBKp zY?McL+H^XKF+_}W35jSbmCDwqP#<=sMi%49NV;mdvaS^+f)&7l*j-51Y}MpydQE{0 zV2D9(Pbbw84NWTV2v!c)zVOh&Pi#LtS+5a<5Gr-~W1*y^q@+Zl*LwCt@BWF~e)ZJG zwt$5yM36vWi2?~o=N6c6$$$*vF<>VL=fWV}90xEC5Fl~BdH$ZCxc%3!y6>$+ojFCm z)07y5GSb;!-u`Pdvu9H`q__e?JQ*>G$%lV@+yCx$MoF6>N=^a-p@~{@-Ts-6-hX&` zy%LINP+(Auu`)(|IJD;yr-qp4j80THpOtqS2-#5>D|e`mR5zZTj!dT2l-86RN2m`$ zbe_A@=`|O!+1WUE1R9m`dNNigHnW8z`RoxE=G<(>ZdU|=**gs>9O0% zg|K8HWqGJ2$%a#;nqvek3WU^aGc+EPR8Fdi7CQOA-g%&lMiPaXgK{Ju1Le6wB_$;# zB_awfYwURW{eSh9jjz3L*~LAEfE?7v9#l*L!t?@KT+Z1%Dt4Hj58W)Ura)v6ZD%x_ zJLkv^m+pDrcym`kaiI3UQJ{s9$5;;0U}Q-A_OY_hi(6# z&mDXY_5ENd%Tb&x47H#T^!7XUK5xt9WW74q$zU;23a*ah3^Liy9l~UK+SwZZjC+cy z0~X2?E7UsMZi~0xoE_f7{65-^tQ9>plvdKPYI#^bsnIoIa&3n`J&Mqu`;@^{zY8YCfk%@H8+TMY^>Sc6#QHhe^1oyg?u@&j5n`t)%78s!b z&U$@Um8K!~B4NCqe(=tz&+eQVuP3=3ECK=SQkR#Ml$4Y_8o@D!G~|)MviS$U|L#9J zG_m=^XZ*^M+D1ZZLxBz0PNrsz5wgJMF(6goDMM&544R#QFY-F9{3hGfO&n0Euty=WV|g3@4Q zGgQ+;EBlAr_w-_{lGs>!tdhLc0KjGtr;U6kDG>lh1`~Ru z3vasrH!ogx)7h)OL>rVMAjbhmlt2XYL_&*hOx3Zy;+1#**<5dg+7u3D4VIJq>Fwam zNj>2mckF-RrWI$b8k%WkQjjr5V2KE_1P0XWYJ6?wv@Q9A_iA)mSTUJSu1d#NClf2e z*cg+`D`RWo@B}s(2gMkPd7g)M$IT`H7`xpBEGZ;Z#zHj^6jrZ?3m~B27}agKH60hG z-JFl}P0u&-!w;of&a{GKj0g;cn;3v#3nnYox8J$@#;LiLLsbh4>|;18w$$Y%B_$;# z0uu#*F(E9Q-}OC>f4Xq*$8KK#;#*fdf4;grwD74^}}R2q!1A(VDkh+5CDh(35Yju z`=h&N&!N5-rvR9elY;>iOb<^~s=F83Z@FdH-#ve8Ee)NB0UV&fSOzN!iO`s>UHF{Z zmZvefT0?25kE%A2t3uXMmgQNO#{A-emgXT19>^w-D*zoWr$u6-6!VTIH-y!jF)_=W=W$`qF-rIZ`Bk8p5qk!ALI#O& zr~rXHs!zmX5zz=nYvB*C-*e~T#){FJc|uXvV<{;qj;Or!!c8aY)XcuA{>66<#VMP8 zm-;_>f>9z_5FtQ*`oV8px&0kKbkF~M!9#Cbzvpf@I-4#yrGN3*kR<}Rx@*tY1J@3> zXNAGwT;d5piBV)|-@ojA`Cs1u+oTXOFbIRh6Aq`u3NkhB*!zN?zVE-29zi{#ABT*C z65&V?f-Fhg%k@_`?cBf68L1{lhR9JU3a}+*nHvjvd)~cn%rlcKU`{lWC8K}?#twN; zF++o#6tM`wisAI@yJp{c&%vQu_5a7-S3t*cC2KbficN|!wqs@vC+2VrOJQbaWhtEe z|9e6EL72(0my99DxG!dq%q-br$rf7D2xj_y)8A2f(wg*+Hd;q|rz?H#xqWYSRoy#2 z&e!GdR%>nUpIjVV?ua8#JapmWk8l6{_3P8WOZ$n4{G}(Rr!P%|DO&sGr6VF07JqX4 zp>o=_a+x-X$E&7PFSvKwMi%cCq06MU*{3}IE?#fR5 z#Iz2NX2hL+SBseS^qmN6Nmsnrtf!K%pNFU9YJcDVBwYNQ>P>7Z?<&!js$t#eu=<8O zSktY1*SPG37q%;Z{Ik2Rf8p1-(&pSfV)EdB=*SoEePZE*PcD3@veF+2x?z@1Odo2S z$h30L-95%e4r1#t*!1#^xkhQeyf(DGF|F5wrzI&ZBr`h4!QhH>I=2LhAyloa>!E%)R(m}u6F-r+*imSHq1w&`Yk$)vF*W4jBsN(I;Wf*#j zPv1~j@!y;Cl3d}Fo|>WPR#0o;QlV<-{PU<9il&5kMj4pB#eXsQk^?jasb~*AfA*EhUq}7 zGBUVdXSDX;y0=%ef5Z|$)8vTijL|)11pT-E{fg$=lzwxzEZVCyUq&W- z(56?^DJ>*4xaw%2CF$l`t)d66-u29`{K<+Bg9JuI?UACkIvmJL#6YGzs8o0Tb^4tB zHC<72Mlpnza}o;LIbr~m>meRC4{92qx$mRxxyuh8>)>+*!$@0`q`At!F3b~|K`q3; zi_j1~tL8nV#UljPr)yl~-G$(oe_;`sD^P(Lh^d`lpS!2{+pMx~UN@#f&}v)a;BrSC z1`FC<`wOnR`=dM3=Kk|Z_XjToFs(Qqxa0A;r=9ui$f+;>Wl09dEskP|2X>m}eNg{X zq8i7G0bUOtdfGk?!w}7+&S_^XOk@i7&z{L(` z!5Fat$AodP4`sN3O*|5n3n2-6yeA-c%d2X|i&0%8BpQKD^l20QsNQV@CR8!hMm|sa z@?A>2uUgl?eRm~pdk*a$^1Au4eRtRPBPS0Tf7O{tq8o|+@E{_I_Z{AmgG)7xlA7d@ zryb(4c!6cOMvDl!rRZ3|F_!?HSjH`k9q8bS)Un@ihQS?^J-3+U{^KQ$e?rjbg+47< zmMJng(e?D;L{L_G#kn}bPFZ~j*Nr_Ao*s}QQz>q3LPsBy-<)D!1h*K(1+~cWUVaza zteOUK0gq6Fk*1k-j9!!0hwP!)H{p}G#2Zk<(}3Gn zhyxj(89xGy|4qgRi;K?(X}(pQ@^oOjp?2`P))rO%|MiFcExL9*ZN6Fqut+id6TDPfR<1=6?VYf=dk; zN(DeeKyBht5JJ#?Fn2w8FF>~+e6e2a5NjeqzH48B4B{y~o0DILj?g@)fcJqn|NS?D zT!BHM$teNx;DXD`!*j2FLjWxl6vlShb#K!$0WrrdQQo!LXO(X~4kfKnXBUUP3D z@CDsm;G=K!waAqclR?c)t}m1{cIEsB>kh17pCW3V&o%wQa20c=AeZs zfiNVSD>jit2d0EaTq)PjlOO>T%Rc@M-z&uXKMq(8@!*qDTY>QjcdzkRmu zi^n)UBI}HfZ^(52*>}Ptu`)*7eJ7TG{2Qu)K+nLq1m>h|#x2xvVgA4c*JZ!q(8q=_ z44AFmvCxK{q9=82noSoAmSsW`rabZVkaO98YCy`wH3dj%6NP70H*6i>m9YDP(~?H5 z%EJh5SDf9MX>ZFES?NMae@an4%szh8)}y?oG9Luyh9*HaEx<3{0XX%+sE(3i$5Y7M zV-`AKsL$L`G{2x))Zn!DcR69e;W@gm=9HpmS89o^kc|!^2iht>2#V}% zI4ad!r-a&Fz3ufs=U$}v^DyF+=xillQE(f2N1yuH?!wbMCtp9JOF>mFlIEJpCC9AV z>W;?i2I2}S9gH>vx>%4|B3comaH3D@(2;;wSc4Z>gGa#hNHxp?sxr3?k8-G# zUNA+t49L#pH!VjaqFAGXQ(S_2nNWv8s=)aa*)#QucbI19= zo-#1ylqB40$Y}xc#(QphHVn$McI2#IxCP@QPw!1;IorHL#b_tqcOyVK7AW)^M#6O= z0C?vV#&HoDLk+<*HY~w^_Fdcrj$>(&<05<(MzA5&k#*T`c)Yo35(!i34MlqttI*E4 zrl>t}#w=K9vP`b!@`?sy)`2P@W&mYCb0M)1Nk6l<42T(1fW?th7_m&DB`60RpLM8$ zxprL4Z3`#|=qD&&c`N`6#QGTF6hS$_H;ljBS)ez63w8F3AA~4X(4-{4XzjaxLqIxx@UI8~=V>aEXljw*eZAQQ; zCvHxAZXvSB$m0?eVjQ?o*w{>96JjExj9HRZL@dY{scuvz;U#Hr;jsW{l8JuV^>4!q ztO1x>=q?yXJm9-yO7JUOgBybuQ}o5WG9RR-2!Xo|DI7qbh#xE$7-XiLYq8jrJ_ExA z4n11xGX{o@MPbtzyoBAXUHvipw>q-aT9iJ>DOfj$zefz6*reS~KX`7D_yavqVOQ)`?({`C{^4qRBX z<_$nnB#99u^S+ulsi}ASfSLQLZSbaVteQXjn?O}9hDMF;b;qo02cFqCWKN$kZ8VO7 zW*#j1=&8ScgBQPrTgytSI`>ZX$NMlIsIIH63V`C0lA07avIX(L5dg7?#V5(S5HMq) z*O2)lL0HU3NamJIHd-#Na>0Y>H(`vx;Bq`g9c%@kwcl{=Dt3mE;6Z9)#HLnHL-8Ko z65nHc@uOIlDQijFl>bmhIdanIGl$(X&P6ng!Ke3@@$@HfwoCy`BS&tTBBlpcMvnZU z9VNJMJHDgOLSg}=CMciyeb_kt67ItSK{@i`Fal@}qz>b}WJM&>AOR>MNnn>jPYHMq|{33nMoV-gEZxIUuVaiFBw+1l`orMYGJ?gQ# z`rocRaHKSl8t)F8@V6C~HwhY{M7Im!J-H_9U`3#vPcu(I>qwy^k**rJZ9C%dSR8SL zppzUDg2ngeu0v};-DH;c~RYohMZcFhK zS|-oLJ}ME*y9A9`)+;tGeJTUclLanCTBrkHO?R^DX6>qteela8Q`(X*m;5gA9E8je zf?dLQpfP!n3Q^0U(3;+el9^tm1e-h}E&#RB3W=HgX&^|t2D&8#ml7iWG1pR)oN|lz z7yiZ)2zpG!S>g_Qx#>vnSG(R>Tnq!_;T6qB^i18 z#(gYvUXXo^OmwsjAvdDsS}f}lL@qI4X-r*nA%M;x-VhDr5vHqgDL*23kUth+F_+%} zJGL9n_k_CrE8t7ENK9FTkz2M);;}4~6rF~n`%4P&YS$mYS6!GT&YMz2q4P?#t*R?-y%LgCV z|8DxJA1L*;3Tzl|Gi4q$|KP}B;FJDEPee%YjXb7LsVwg^BmJ}GB_kAHe&dM=hWGR5 zVjbZDP_s^p(kaffyDV_`(!K9pJh;8zTT)xAtKlhwZ-lIpc(O%}JO_`)r6~z+*Yn>W zTzsgwQ@jTe1siGSh6?4j1Iry;?ua8y=o0xc!Ax)|8D)#+x2yKVQZSJzVZcgU1e)T= z;)Rl!=oK#lUM*9|vXkS%TS969zA+XkB%vId$VOYkko7jPDScL5B$&2@!N@IPH+NTU z>=Tz0$w@j~j%gAB3qH0`O$dK^8a{5#e0katH83|$91UdU%D;7yr}Z83o}+9D!u)ZL4f8!-r37aNmj``Sgif;F5&V<`3YM8=8=fL?2&^OFyvSbZg=XmtSP zy9*~>x9zpfRRc{>&SQBFue`N!Ck&>>LHY0KcdyJTdwAL2_bwdNAtuk3WRJSUXx!giE3K5k4h@Fvq+--dZUt9 z$VV4iJQy`}f%VD)Er1(g$G)rf_Q#*mgMgJ7m)J2Xy~NXRBEcCc83OX;wxO7}6ze#R z6Ea4nM#y+mLWSx}WXIx~`C4E^va6AbCfH^C;yt#2wUA<*cJqtZJb$G>!Nad@6l4|` zW)@o_tgWtNUGtG=_e)9gp`Q#a4&@`qZ4q^{Fd?fY_XZqZp#1eIuq@c*y3kS>rS|9YWtj|s zY<}jj85;_)AO#L|&S+V@5*^sFe2-K3IRNE&C*ex@T4lfCRA2_3O<-8-M#ZN->De)CTYVEk(5wkL4LW29R2anzJ)y~rD`Y!Q4j0DXOD}>aO z4}%TXwRdSo=LGNC?6SL;?>SmmpX}3lt^%Ab2bZ^1al{eJXDsDQK>Tn$U?TFhK(Y1* zD2a4|XraavpJ;(TS@WBqQykF?)5a(W2u*aL#)Fbn!!76>m~9H9`3Mm|u(JJEHd)dH zt6)@E7b_A{8K9Z7i$A^{W--g7r52mgXACSR!`Ng*!j?rbwU4#OzNyLZ~2t8<-f7tKIEi0n4&{ho#DjoXfN)Kg9SH;VFuHz$q`5Tfu{f$6`cY9)M+0 zwuO8T;!E)!t84RPdK(sQMR&yHA!&2&dG?uUx6K@ZTb%FYG0+V28$)+qHuR2Hu0s8C z^p~$WgtnK7-S=12Q5o%oE6?h3?W}~0o+S|oKK0Z=lD)QkRFyn$0C6k<`^?4SDGY)T zkK2?R!sGmBfylKJ2lL&DdnEwce%17g?Gle1jQyLbHCsNV1^z&MYdW!(-se3t`P|Hl zQvrFw7y*p7e3(;ir4KdB6hSj{-T?Rb*ggs@l4~AGap6-RWgllnMW|&?=??G>9cWUA zQ}|*(@j7WO7Q(t+vOMAwv5FQ{;&L}tbv|#?htF>NuRv{g#fLp=IN68=?z|zztt`#? z&4_i2XC1jl@f0ZTO2BdXP-E++uQyTrS{$}YWT;f@X2rJWP}K1~lP>OVm+ zN2=ScYn>B3ac&*`=I6^1lA-HbYMgiZp^}@w-dj-9aEjlpgfxEq2>&^_yse5OjxZT4 z;7=$b0KP<)V2V@C=3pf)K$CVTEIx>W=oUxBxPZUJ@c^mvtfK2}61&%Thwr63~)VTxZEMNO4v?W&D^$bY`S znV^keQJ@|K8EBwzVq7WAB5IPBj`~R&%Q)>zDpzjpzrar+JZ0T=+U=Ua2S_UP$SRjR^QTSm_rmiiw z?2}m1R1-y1U<9U+H76)%NfxHnMGZArh{B;3=@$Zh+)^2Rb}U45)?ti+&rOD~rg%z2 zTHvWew~t@HXwl)D!^1wKk| z3%0$rtFou!%{O^iu#Z+}%G^npw{`((gkJmIa0y`^i3c zC%+C(`7Ph>%dM^j>pf(^ez?(;|5LbJ4HZmLXHz%bt2sD$lJYcbB+hmDx+sX++RZdaRcKc~>2 zcB|`mXK$(9k!itvLN5lt1ye+Ftx$+cfnR^(C#iGGy3gM}Su_7H*K>IHP~UDjCDox- z+f~5d)BEd1rCL_8;&rD?8<)I4r*MB^O=?Q0Q?hHrK0I7AewbcS=}pfH@uX(F_lz+O zgA$hO$1_zU{9lZ#h`P_j>-Og|g;gKB;3>NMi8~+UVb;j;gbx2X^ws&b-O{V7l$H>d zHV2-@Wuu0)H)|jY+6M0hBf#ZMkn_tykzXc4ejQL=Mw%`4$x0~h%G9L~_j-R^r$yn! zIXwR_d-niqOO{4){J(Zp9b7$JwB2LdwmlP%6;JGrGqxFzZQIkfpWnOoJF30cRQJ7U z+kLx!r>rG`$1)nJPXV!0OwF}>#Gi4Q#C*vA|-+Qmzq z7*dJ~xl;-OV;Lj^fD>xx+R-f5d-2!1=D&K@-aqYId-%@QyB>A)OHbK(;?9v?j7yz? zk#PV-0_h4q z&V25jv-dvYA6GolAh0MOb8;LRYW?jzp#PKyXVX{Zay5&?&wP0M&*!O( z@x&uMwJrP4C4$bg9u=xwe)ev#A;8q=@(UjN=bh~(h$et};3%5!KjFjQjSr^ibFZq( z%Bu>NDyeV8?$fUB@V_yOd6m(tQKTCqM5_j$RpRH4NW=#HahmJznfTk=kNw6|Cw@W! z5h55UHX}7g0gQ}=8n_SU8VCdl145tzCn(7vgFswA?gs~7`Jp}UKYjI7LYI6Q83F(a z>Rf*RCb<(??e>owYQ5>fQ*V02)WgO{OHxc}5M4>gIG{=vR7lNS^M}j7?pgZ5#WTO% zyU>juYGs{%nUWs4qy4&v9Pxq^#vU~>maC9ghz}%rwZU{J#4QNk8_T_`m|H|}> zp1JdH@0t4DOON>8M0*znlmj9Ju)qKg$hgN18GwKi7=!vWLC|mRUwqtG4!-WY)33as zO61uxtr?t10TKd(#Qj-KkWf1?(r(VB_@T4+e&^D;ryo7~oMW~<=BTk9?V=TEWSLND zcL!;;EH7JJ``5nJe;ispeP$VJqM4606h*69Bz);==d^!Z_SJKmPdRGG(~jKs#G^+i zM~Zfy4F%;zR+4&yxKet0z5Dn5hyHNo{GSgjrJ$pR8o};axvRSz$6JfY<{pgw>~j7I%6p)*nqib)vCZ<6`EJmAXe2Z z8^cMjnRI2N@n?0Vs!ivP5K2fSp@dCy-l_4|xo1|(QM=#ymYt_Rd;AyA8@q7(=s9E& z8$$vagSjCAMn-HdWpn@h>6Id=e( zJRCIEE@pd!?_7H57gx@Ywi>4l7n8%yp(5nya7>Gxa?e_Kw%cFnmq7JEAt5J|nS?Tj z;Rd5czR-`~zijSTyJm))#VNz>qeq)nd~X$5X)kxneXIRTme-a#sq1p2-Dn5dPKp^> zw1h!*F0a*Uwc0&xFeuhL!vYiR2${-QT{VD087Wf&*;#)82x5#WMgfq@GK(?TfDB-1 zdUf&nq$g<&97*PYui5LhDSOFu zwOXxK+cC8A%E$aRSeE6?BxDRvV$)GjEkG9@%QZG1D1S!#IuC48+HQZqLk&2mHH z8s_?RYu~)dC;k8S?m*Md9RR}Un(X&~;_GBCsM?BRm)7}bAMhFnR$xl<(zz_>iXDGC3`4i3b-^xuUsMg6e1UT z&CI%dX6BhfT~*TKV+Ab`-(MmT5DilhKqBQz2=OK$keHcg?^tGLCZPVX`uRnfX`%Ld?u;$1*cBGcz;Kyf2@bnd$pEGxLx7ANb9aET)`{rT_o{07*qo IM6N<$f)!s^CIA2c literal 0 HcmV?d00001 diff --git a/src/custom/assets/images/mlang_english.png b/src/custom/assets/images/mlang_english.png new file mode 100644 index 0000000000000000000000000000000000000000..14755f1d27c7b62462815a9b9a32bfa17a896649 GIT binary patch literal 2665 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 X2fj`9SE$6<00000NkvXXu0mjf_F3BK literal 0 HcmV?d00001 diff --git a/src/custom/assets/images/mlang_japanese.png b/src/custom/assets/images/mlang_japanese.png new file mode 100644 index 0000000000000000000000000000000000000000..48991b2550a365f47a4b0c2fdd3f768800076ff1 GIT binary patch literal 2588 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 JPDHLkV1i>cozDOO literal 0 HcmV?d00001 diff --git a/src/custom/assets/images/riken-banner.png b/src/custom/assets/images/riken-banner.png new file mode 100644 index 0000000000000000000000000000000000000000..7cedfb3d52fd9853dead0219bc6ffc9eeaee56df GIT binary patch literal 1445 zcmV;W1zP%vP)({{(UZ4Xb!_O)Z%PR6#ab>HXo{!q`Js(M-%>GR}(BEqDjRF$H7s8G4`;Dnx1T*cY$E+Ta_UT=3y=J*)$sEaY%GSSP$+h~ch= zb%DPZQn+nkU8ufL!hHZsF&#HzPi%zka2^K2Qq08SPq3|bOR!;g z4mTE-U}p%`n2~WfUz-tso9-NLGAzMj*cH|W3t$O0?#|(+q)gHQ7zFE}Nm!!LCTuD<4ni5~Gi(ldC!!uFL4hLFqdYC#P<#Z7 z84hJw2Znx73QI8$IVf-y%&SZII-{YODEPTwfMCdS0p!hvVLlZ25e7>OHyIU}1@pdx z0B;ZM-mCTHy?P#o(QfBH>$t5RmfQ4ExgBzH`}Bx^&Jb9Jx1pG`Vcy9JU*~hkb3wFe z*ar~|Sk#w%l0tcG>5F-q`j%1Pxcn0FH74T9lo$P1%w4I#ooD8dm5im(pk{gQFy zyb8m(tZ>^vxGV7zW1AL5r`)3Gj7`(R#1C%Ww`wy?*KfGiMY+}-D7#T##4&Uxk`HP80qD5>FFw` zm&%vXvqXEOPI|sVy7Md!*S>PQ+`6V813M|215X7|P_f%AOz4Stb^dfQ% zixOu%EY%}*cj&n)MJL=QE>V)gtpJN@g4z-8Qz+)VFkB~g+{X}FU@`5OxXm9?RC$B+ z_miZjszo#rW+}{rrFyvTQ9WO&=%icawtOV*P~8*e4M6mN5^gZ$z0jU;yFz(e5U%_t zCas)cb*Pv3jj|`MUe8p?9ecan)(I2m1y5q`?BZ|^hoA(-2}-bT8!ks)2*bSxORy4@ zx9vl6#dnLHB|QeBc}K%ijN%eyarJGK+xJ1a9s4@I)`*n5kTqa2yCdt)VQ6^g;GGZi z${;M!&O3+xFbsqO-^A}6HVdxYXDl@4+vnsCx?jrWFF!<-xJzMyAF+vEE>m>g6>^(D zEdQ4`Zz2@91?D{f;c}Q)3qcvzZP&uQ#&(1|AM$3wFc%7Z0)xeGj*D;%)`S)cckq2u zOJX=-3!IN@a4MunYo({FXF1xlg7Vt5x9U|9&8qrzJs@{UCXilCS+ zP~mL|!Qpt6qbyL43TzB{N1*~oLxF=)fs_6Xfw>j8;(R4y00000NkvXXu0mjfQ>LtU literal 0 HcmV?d00001 diff --git a/src/custom/assets/images/rss-bmi.png b/src/custom/assets/images/rss-bmi.png new file mode 100644 index 0000000000000000000000000000000000000000..55b22653c9871bccf00fa470b1382e950f098589 GIT binary patch literal 2755 zcmV;!3Ox0RP)EdU}w4>|PK7U`O;l_8qoFi~gb8~Zpgo4-o`^5eHvhwXL zcUHmr>1(uMVWL>p?!SNuixL_mgCkrkZxzSg_h#PSh9(}zP_@vvc|{8Pr#>E%(KGiws~21S*Ff*mFT!z za7Su@YiEgPUVL7m%WR_Qw)*<|X@zH1aaE#&Id690w3bI8(<30Evn zt8szDhj4HYvaL&o38N{NjWPtuC33(;h;RWQO%xA6EoPSy79@c>@Jzi1#4@k}NjJ{@ zbqKLNF6R$>-DlTi?hW>c$RvnP#PEd^&YU@VtkY;Jg zTOO8^TUtJDJaof=mX+L;Zv%KITg zyja`bE@T`p0%Ll#8p~cbfWQM=T4GA;gQGQPK&}oLXE$h8?@b31EpEzwaK93)Y+Sfl zsLa26S^z=dQHS=NP1>#Mi8B{HplQkTgI+1JI37v%omKnj)t!bhwEo(B1u-vZI6;4F zciGHG0P%c7riE2wb=P`hY>C>nEA=2v(8t@WsjGKVmb`KMUxXc$D&LuZVdUqJ9(zcr z-Z9suwUz>V8rHP10ebKXb7{w1M#kt~ieI3~`N?CEcW?j;!rNaDps_IwtaV#>`9X7zqC|At#0j$Ik5v@WG$IE`c|I zS<_^S6aWFp40!S@|2P|oLn4S#x;mpUThu#FWenxvbz8?^PWI9cph+y&2 z?&m-IFG$i8P$fyY!`~WyChgho@1noL)}%eiL!H@EYxhsQf?Wq9UZ137$7h3-$1SK9 z1{6HU*82>OT{D#cHa}I?F>>Kg;64%nwm)7joGiZH8FY700h0iqom?uq&k)o+U6*~B zvSrG6rz|%xN${%QBY1I`27cWr`nm(vCzR3fD$;#-#4xg5>s8xmCUE(ainH z&ulrm@4~lvC;xP$aS-;WrmlFr?a0iro^<2jQtedk>X&qd1LMT;FFVb{m)uJ-D@QBP zM>7Tha8r1Q(e+!o!(rZe$$kO}w+D&!>X{G$}xY|IgDnN7&@_ zWUo$6wrta1y+HMs=r?nn6ApbsuUxH<|4jE3C{d5xP5{LJ3J3tA=iCx(opbp?Z|`RL zaXBo<6=U-lW^+>;xO`w$#wD^6;6becc<{LZkQAFZ@Zmde2Yg-FBA;GgdYNc(<@x z6gC7)q(Nz+#7xR4Wz2}#j4^65mS-1U`BYSzCY)C}U8Z}aow`6xQ=se;X0qbGSAt0F zpFP#U<|pA#Y(7~wy3U1F1pLzpXP@gmvE@lrWk>`~910w_r!+!6D1UyL_-Ejie}3gZ zufjjCYKHi8bG;Ic@Xr80#6MyC{l;M92Tne*sdHFTIeZ`1t?;002ov JPDHLkV1f^!S@-|| literal 0 HcmV?d00001 diff --git a/src/custom/assets/images/rss-bsi-ni.png b/src/custom/assets/images/rss-bsi-ni.png new file mode 100644 index 0000000000000000000000000000000000000000..d14457500e9fdaa093b2f57453c161ac8d4161c7 GIT binary patch literal 1771 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 nxAWhPu6th} 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 RubKb=002ovPDHLkV1npv$0z^* literal 0 HcmV?d00001 diff --git a/src/custom/assets/images/rss-dynamicbrain.png b/src/custom/assets/images/rss-dynamicbrain.png new file mode 100644 index 0000000000000000000000000000000000000000..3d35a10ee4845f5c9491c373ae95b631b9efe1dd GIT binary patch literal 2307 zcmV+e3HF zKx;=xbW&1!SzLl+W`=fom4$|%l$ooRoUWarub`!~Y;uEIVsw9jn{9570001EW`}lp zmWGF*ke8{Inyi{hK{5PG>Bw&mVA@4QE8D@ zgu82(!*iz2RajyyLvd_!gjtWpkzk4k;S#_M0y}c{FzAK!iSgFI9wZU0LM^d)JS=-kp5ki?vbgLXKTVR~c#cHMBjhW!$ zQbR^k9v&;p(}KC8i>;Q6eT7xW%FT3eL0fZRzP>96Cv|OGP+5bD0RRD#kdmE=ia<0m zJ0)!2;Zh$TD*_2U-{Mk-l5qnHJpcdy`1tq>G>9@aM(phFud=thzQg|i|MBtj-QM4) zr>Xw_{@>x|>+A0K`1sS-+i7ig;Ns@y=;`I>>0MPYEktp;y~9jVWL8;Y0RaI300962 z0RRC2BB5i&000KANkl1kvq+-BDK@bLER}chlfDLdhieu(DAm;fd;P?Fu5sJ7m*4ZA^RkSsR7z!#48yW) zgB+G+81N+j$iX8AxMm`qqSCvTc)9RG11&)&!#3Dfo9Xa^$hUT{u`KXK`oRMQT9T5B z(iRwoCU!rGEmgomsH`aK>)qq3qKTT$_tqM~%caWEqm=?zlj>yc9XkL+aGu`3I2AJU zDkJwrh0hO$-R_7tKr5ozTl*beDpdA!yQNMFq5x;?r^e^ zLQ_}ZHD2g9hy75=Mzc7X9gLI-YG}r1-usXok{nu%!1= zrNXtcJ+k$_#7C?z(1Q5Qv15gH8WOsPEog?`NpEutBRxi^VwE=qcA+!SS%;zt-bL!-025oKgt}s@ zis<8MoCrhDah$B*+-{1oYUl#2ovUUt8IJC>pfbSeJXhd=W~!yKWp#vXHa)`T~fF4>Dgq%nGerzgyF!M&re{j z>1$JU%DZi*R?FpbG`*5e<@Y6$`4rWnYVcjza!uRL?!IvG(&aFm*y~$c;n16h4sOO* zu3o!zeX5wI$&e#cE7B4tlX(Vk)oSPa*&8?UX?*(D>b@qF<-$`a#p>-lNJDoosKRe7 zC*_?IMJ;e~B`H&Y-QMo{^?L!{hfm+X9pKRO+y`3^oxb=8H&2WHl=lVGf*AonuK$Cd zEOFl*J&iRSG?AiRYU&#g$KK{~Cn(nOX%*?3c1t<@?D_NOHMs$}M=(VfpRh6mxZQ5q zFPgEY1xQgIy?j-iJI>JaUcZTvf7&-x|B-H55G~7VMUuS4YcfN@&XzlRm5t-(eP8T6 zdK;i{eLNVh8&BW8_mO&9Gam8%w#AUCi}m{Nu>r5h5WU)N3$sUXNp$VhE%ZW-w?72I zc+-m?OYubn$@(q9I(qEmC+7e7a}sc^*6-NYq|->%#o*CvLoqb<%e*`DjoaI&RRy?U zw-0~(_>oB#0n^LEic8#Xji$G4Lv-=iZ)o(Y7<|{pCwIR%f9HpxoIb7I7F~gXBLhx% z2u|ne9P>EIKx4JYieu#05(CeocE?jd3p)G^`tEsYRZW{=o zaNw*NS>a?ARLLMaEX!eLW`;|-x6-N*rc>u_E6Gp@lhVJ~jbWxwxXjrX@e*r z(U{wUr7C8$C>XY8fBtIzT~oOl{!{lZ)Qbp15I}nl{5lj^5h6+GpuNP)?qqVgU#4>$2LCq;sbw*CjvN#Ol7|LX2%q@VZ=5d6=au)%%c~%)A zh#5y;x4L=&1lw?Kde2VP;xgU<3B)mU?=`Y&Lh~N;md`*DF%9+zgpHe&ZC)H5y{;cS zyWFsQ8KXAfX9^5x0q!_S^a_e0NbZ;?N|QmmP`FWS^O-&K zoAjE}Kmxt#ylF|!OfQu@dWq`2(aLFgY=dkVys%#c@aE##F%Su!mK1AL*95^uGvz=6 z`iZ7pgh(7loJQPN{e)6QF%*N}x3@=|>cy6?rnkB}+ruU4YKE&K?sQ_xVGA;JNzPg- zEL`G7r>lZS;x#Cg(yzPU+^RQFQNks25|CuW+$BXW$GLU*`|dU=#}WV6Uq|Fo@zgtq dr#Yz{{{RquCA`0o}QSPn4qAb?Ck8O=KcVE z{{Vmg0EqtpcmFlL{{H^{qN1WpOG`XFJU%`?FfcGTH#gPQ)y44s0FM6vc>iS1{(9qEN z`T6wo^YZfY`T6?)|N7qh`Ox(G|Nr^_|Ni>=`rX~#(b3W4+9>~<>kJ290gL-;; zM@L6CHa41?nldsnkB^U&lauP|>ZPTnI5;@n+}oU-nhvwczAfU zw6w~~%6)x(IyySr+uQv7{LRhHcXxNi#l_aw)|{N2X$ zUS3|5l$5-^y*M{FTwGj#e}6GCF*GzZZf7dM2^)XFL&&bRIvU5l-$;&Tr<{wCb@UH09>+Cno+jsB9@j${oi3{PRGPy#j zQUlNssaC>hby9se3`VYy6uK2j)Cc&H#HE;)ltaZD1 zTu`^Nh~-_pdLA#XDUNVK7P2yS@H%=&NAnssfK8PyPxs-L*z2RnmHpHo_PM7*$IN2< zIxH)!*ux5*cD)Z@zDf#5bH7zkV)MOy2Uip-F2ED+O2v;3prDd%Slh(rn$76X0x#f> z&Z5GSVHH1@!hrcTX@$+N^LTUM_Zlx1aISE-9$3cs0Q;N$(+6NInUg6h{?@Jl_%|@h zlm9u75j{UX-UqBi*hc&Zu)TBK3%MZ)X_4Id3l~8`U{MX{Ntk+5d3Z0SEoLAO)b$*b zzI=sD&5lVPiRB68+N@epS#y<4%{#&j(mm72)I2+9$F*yF8HOPk1pqv`0_9#cPwxN# N002ovPDHLkV1h@E(9Hk< literal 0 HcmV?d00001 diff --git a/src/custom/assets/images/rss-invbrain.png b/src/custom/assets/images/rss-invbrain.png new file mode 100644 index 0000000000000000000000000000000000000000..403372f0928889c40f5077e9812290e0c6b4ce11 GIT binary patch literal 2687 zcmV-_3V`*AP)BK7Q$0~@$m5Z`1tnr_UO^s@X*}#-R9}N z&E&z)=gHLPsln!=yyCCJ?XSn&rMm02%K7K+{`dOy>hAmN^8f$;{{8*@@%FS!bF58q znNe@T!os^)ee>Al^UB)!(&GEr=j^!6<&m-Gn6>l4)$+X2>Ycj&^ZE0}*!$k=|M~s4 zQh3P0!?I9y!%lkm%-#3M+T@3-{NnDDNM*xTfXr)<@wLqJrp4ZYqt|zv@5$H1XNtR1 zd&OCT*J_m9j;qvxq4Lt?;=f3Vqzr$j7@MFBeHEH5wteT3DQ$Iz)NOj9fgUE@Y z!!Ty=x8uA{c;r^5@LRUrOO^0fwBt>nLlYaxeVx2Tam_-1)mM?bUV*uAjHgs~yGeAs zKyJV?X1ZmDxp|rT`ug6D!6Xk7zBy_&6d8G8XZ-v7pq`#hDmCrp>7{dq>e}Gx;^pLL zmgQWJ^lhQ>WSRYQsr`Gh{)4;yio^Yr%jS8fv|4`WlgPGgmcxUx(SovoYIKoaeW7ZR zpmUqCd!|`+6s!OM2Utl&K~#7Fosx54V_6?S&+joWMme4CaJ_@>pq;L5yR)`!+qP}n zRB3n~AgODZes8zZv1ciPWr4AV6^mT=Cio|;rN8*EFUqQ!!AjkFah50@Pw z#Y9m0G(VY!FLwNNwt>Ph$tbfY8#@K{x&TOn!`1IF)p{l5lMT?l9?eZcO1Yrva1{IU zdf!eaUin+@+FEiF_L-*i_1VFEf52N?==LV6!Rx3gE8UK&w7**qM3;wLu3Erd6!l4kXPnU|8q(t(luZj^_i6;M*rRsRT$zO za^B8)TTZC)*;=qvG}RvyojN5lUQPEKYR>PiX03MrI($v z|JL$Rt+lq;oXL)pbj~kj5E5QU=UqkB)|sQ#en-jhZ~de4x}H*==PI~1N*|Zk;l@m; zO4_UySH>+^R(W^UIl=Nebgxg#wl+Vz#~y>bC?C{%Tae&yN0>Viu=AsPV;fSlXy0%~;c69Lnx1`dJVt4ft+^AmS-|Jnh--96=z z*r>v&f!TmmJO~0rsPNV3m$KQI(|Qg{AShFynGZsz2bAN|BuVna6E?=qIV!5t27*DT z2bN}c+ts|oXjt>y0jJnh`6i(-giYx7chij;O`2iof|m*dDT;1@NCdnam>Jhz=jWGj z1>tIX$M5#Hy!w9QhB;9djC=3fX?#3?9GGlS6&jryj8t4kjT${Vlywx7x7$;iE_`{ z@@)Y)&d{s#ua~EOr+xhUcbxoPGjC_JR@-vJ!dejP2uHWPrR^s6FTQ!ujP`cwepo&~ zYNMVmyuSN3>CG+-UHpx8hYI_%r0Wl_g7ZNEJ0{Bz;l@YshoTKx6L zyJ?p%(l-fxi#M0*aVS(sopEUBvnSTf@5$VID9P{de>>d&%}&3k9}cu%``Ps~;ybK| zdRXB1udaA#(wFaz{bgxp%i85K^#O)udk^iMfe*iP4L+Iuj0avbNvmQBfD`FL2h};e)T03PGE@n`xP(Qeura8-tpx4*;6;!U`;=vj<+l|gyS$Ogoo;pTmHQCI( z=@OBb54q)HIInugDKFSX6$Dz(^~l#6u8O?gob4x9-9~Nhx+i{m>PNGUAp`-j6>J1b zLdgaM`$g^9m(G|c`IJioLMd*$rAzBuf6omvyY9V+UozS4e)n9X10@x(1ysAFNC_yx z3vZnC$F-OKINaOE6~0tprZvmwkM8@meJL|WJi*K7o-cwbB8pT{R6$kB@YJ}I;wvsq zoiqpKB)DA*z^BpsTNK`j21dOM-mHk zGV+4kVrp!QAEwVb|DnZ=osq9#CLizmvA=t7!mt7kxOj=8;H#dGygh$%r2!VbysN8@wV51)b{Vhdmo t9rlTjZ2EQEd}HFg6fF?OB?10_{s(g&2D>vIohtwU002ovPDHLkV1lEvtU&+( literal 0 HcmV?d00001 diff --git a/src/custom/assets/images/rss-mpdb.png b/src/custom/assets/images/rss-mpdb.png new file mode 100644 index 0000000000000000000000000000000000000000..cb131ed0951a73ab481c024758d86527a4eb7fa5 GIT binary patch literal 1661 zcmV-@27>vCP)!{ts){F&hKCbq?20?3=#rnWP9 z+k(Sk^LacB!#0`j@9*dH`I3#0N_K?wuLnp$yDkgyS3)cn!`}p#YciRvrk9tOVSWaK zVdXyp`mVSl8*!pdV`f13}_VUVKEu4P0bqxA;D|{NwaZP5GcY5#0oT)&stS53IsEo zOmn$hB=L(M{pgLevxkHIcfR(O%1VaAt5>A5G76a#8y#K6WaedO+r4<9R4tYk6`eYI zxVpLuhTOY-^OGO_u#dN=mxtT2{riUcd+Taz&K^I(pi&F-^KRd`-rdnbqmb`hzdk+1 zzkmO(o0C&pOG{i#G>Kf1osoY1(&gsHhL*;rlgEx^XQm<>Xd1{H*hbUdYMMRH2C}fQ zkPsbtWZ$l97tRI}y&gY&aPRt!Kp*0xdw1^NxfS61CL=lVC*S#Yepbe#ySI1!;^(

i zO3X=14GHi&bK*F>_4D$$c{={j23%m(_9V*-pb|j z`uck4QK^*4iE+gRdG~MMEXd93Xl=fI^ID*vuUsN{eE&{qaeiKQhKs$ULMnq~UvDCm z1|X?P@gaeJBzT>Z>F(?(n3^mtDhvtmFDl5RR+ODTb(}pm($r9wmkokVNA~>A#qO2; zv!}oL>5to68Y{|*pFV!bW?R+{Ep2vc>ZyYVkUdMgY!a>QX_Un0^OlyDR<>bbeqN{3 z0Z}e48uWVD$*={H1didx4ci^QP_zrt$6yLM%0yVw>E`F>*B;qpV>hl`ijRq@X0h5@ zTTmyCV>+#NEhi#4@GS(wqkFg4G`E;GLlxBP^}q!)(}M$j8-1%)%8goDtrmIR0ub5O zv&PnQP_I&{5(;K^8e)d!Ks-D!fIuMp;(Ol#zT--pp#)lp$^7!^qeFXsS5Z_vzc63P zVnOG_TQ@@jd_bQ?r>oRzC%e~n&!2&B9K$GNvO=NYvN`ot)f$bawY7y#r=uzT{doEC z-iO~x_|!Y!MJ_AdX{AjjICX%ilqx?TqN{_QkC)fj@X)V+_S1s=d^ZQXgxE;AOm=A3 zE^jaQ#Hh&M{p=Uv!J(3w>0Q72Wq_|wWN^@(%a>c4>Q5d%bada|j<(jn-*J6))d$~7 z_{mql_-+D$=;diOEfVdp(guSOD#oE*zl9%oQf%~RKK{{)vXb14jO2ubvf|>;e*7bz zZcZ^_!7!QB#Dv0}tdD)*eZEAmuGXf#zxh>uR{Hr9$B3>@(|q3FZ#pk44fe(tKlb5w z5eQH3-$k85fdH!Ydi8*-0s30uJZG^OFcFbZ(AZF`Rx4FX^%Q>+#}xH-H42$jED|#4 z6rD~xhvT(1l?u5G!{mLv-Ei1&+2fYq!{34N@lg_~ysy8vw5Z@qpZ(N32o{_>cGzlK zC`2X+=y_yh7|IQ-KdKcnsSIj15XCB#N+pit@VK}NAlNEa%ge$nJ`05cE(rQnh=ii) zscFHC;4cpVhU0?+15U4Bcel6C%*?C-fpgN3QtWoph8RfLs&SIMq$t>bSlY`Nu@w15R?xDaTJVo5o^Gx%|S-N z05v*DRph6q2N8*$uFiBCxuh_UK`O7NQ!|p27!*orVPRKC$GU0Q9{dR&x*Po4q19<7 zIOEENh3(Z)ED~+n9{mG@0)cRDZVtn(0KOyO739p$&O(b~9oV*jOvtqYUkm63U>FLN z3BvK(>BvK)9d&>VFD6QzqRF700000NkvXX Hu0mjf5otOJ literal 0 HcmV?d00001 diff --git a/src/custom/assets/images/rss-nimg.png b/src/custom/assets/images/rss-nimg.png new file mode 100644 index 0000000000000000000000000000000000000000..e1fd0f85e0f9c3a3f1feadb72b0e097a9b03469e GIT binary patch literal 2022 zcmVSj?P(!N8%tw}#BFaLA)&0002dk2%ZFaNx9P%ydcNh*;d& z#n;TY;hJL2$&1|CmeYJ%-Mf10c1QV;R_)1u=Hr{~@Q>=LXYhbi=;g)h=;r3Cf$;63 z>e`3#j9=;NwEx$P{Ht~LuTuNVZU5zi{`0B-{+;%oa{ue2_`{p{wvPSAhy0^z|Kyzi z+?M>AVgLQL{keYr_JsPpV*mff;mMT$|Jncl=>FGL|LQ{i>Sg@SsQ%-&_4L*H?#}U% zYOJJ^Vtasxpr>$(kbah$<(hZ?)iQ>5Xq~gVslLX!%F(foeE09^#?jG}sju1Jt3Xmz zRA*|<+~M8g1RvTNLhD}+@`N7uw>a`?G=NV#y*3Z+ zyPTOa5%QyiXC)Hpn=$`;V@4?jppE&n2!IxvrghFKg{WMGP;1nedTT8B){!Ryt(E?-FOfAjx`%)<#;)&& zff3M;m5I4Sx|AM~X&A?p{MlJ!>Ksy-pCQXDm1S92<_(t@+x9(?`t;oI+<20(G!f;hyefE0AOctasZeMJc%GxMfBbCt=V^nAIqLg0P8!2@mA)q{Oi?hvEo1Vfh)5~rYVuR@*^`5u zg%cSzw8u22zDV?yIQTjZjK0*WxYqh;_{Rok`#BiWdvI$^G}g*_lzqWmXEQ)4%DS$b z*7~xk+&BgR!?M8;469A^gNav`NqRTM|8W`uYNnmA#Uu2!%q zuuDcE^6dW2Z%^{<8H$}a>IVPVNYzTMj5MDE8rRMcQxwOrG?>-{yo3%q{N)FJ^06x& z!A?;lxD-;i8*aEQz5d#p-~j;FW%G38`Tqa-8Q=+Qe=B!tZ><)sIq>$VU##msW_UhN zlO#yfd4K}i&7M>0Sv zK74xrW?Q4HgYjTCL%|@5oNzXCqaQlI_pS2cbpes`9k+WctZIeTUrVhI-bRrq4&Yuh zwy$x5G;R`YM)3;mvXM}nT$&bh+qT89Qi`p4zQdlgC1(9(dqIJRxOVKn}193Bmh9*#y2mo`i3 zKk@y~ee+{$eSPCgQ)gz}YBnl(NGhss(I5ysx7|HJ+aE_!^6J%FYp>Rh-WaCePepIT z#~8Q=>gy(InwGe(VqZ+x!@*r1CER}9#?{t-{r>)bKU>)}49oBha}SSV#OstY(_)k^ zFxtsvGW9%fHgo5$m>&0Ux7~iAYMQL}HOew<`}xzSpMShA8nIMoL5?SbYQ2V5IRYe*AG!zfu)A7w`Y*T=GPO zNb;GS$%v=4Q{q%?nMM5rfjg6Qp#^Usx+H}qS8|rgbc$h}_!@D`VrDrfmPZ2rS^-ji z6agOHR7r%9rK>PwnXmz~TFY_Vf*Np9`6u2w1ab>$2pzbq+yRH{B~UJx;s!thKn@`Z zD1f#c-zyM8cnb`iWoS4hZY(PR4&vt!0^&4;`Ypae+`A4PNGR*w&U=Tq&mjlZfy;^+ zLb6|uO@Q2Ab$ZZz{)2M|iNITz5IY6tTM#lGVBUlKOVB{R{~Ml?oa8)Dl6;;e$pruT zdBpL}{UqT5uN{V#)eAK)aX#gdd^SJkC;U9&1E;~MQTc;h^A@c79>9}bF&C3u;3NE z6(Tvo2v*ul&2buz;~lK=n!07*qoM6N<$ Eg39kIR{#J2 literal 0 HcmV?d00001 diff --git a/src/custom/assets/images/rss-visiome.png b/src/custom/assets/images/rss-visiome.png new file mode 100644 index 0000000000000000000000000000000000000000..76d460132739e143a43391d4b6fc3251e6486a5e GIT binary patch literal 2514 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 literal 0 HcmV?d00001 diff --git a/src/custom/assets/images/sitemap.png b/src/custom/assets/images/sitemap.png new file mode 100644 index 0000000000000000000000000000000000000000..831915afe8fa137df7c7f0be1961d06e891b06a6 GIT binary patch literal 354 zcmV-o0iFJdP)TADgwArSN6z;o&0fZ2GI&7_9|Mjh}Oh#%s> zpP>#IhPi;1l~ss^g++@P3{uNL55UaKtOCMfVq#1T^ak?s@+`0*7Zw)gpr+ZQ4se2G zC&C!!020)@5wsnu=s%6H7by-n3B(dq!pBK+0JJbUO2tC#;E-~F6%bzqwrUnru{E_2 zWF`>XFbrl;fd^Y51!n{Da*GguQL{T(n00Iw+s+`PjUPyhe`07*qoM6N<$f-tCn AY5)KL literal 0 HcmV?d00001 diff --git a/src/custom/assets/images/twitter-icon.png b/src/custom/assets/images/twitter-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..884fc801b2cf442bac8c333a6a273467d582954d GIT binary patch literal 544 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 literal 0 HcmV?d00001 diff --git a/src/custom/assets/style.css b/src/custom/assets/style.css new file mode 100644 index 0000000..3b8ce11 --- /dev/null +++ b/src/custom/assets/style.css @@ -0,0 +1,664 @@ +*, +*::before, +*::after { + box-sizing: border-box; +} + +html { + line-height: 1.15; +} + +html, +body, +#root { + width: 100%; + min-width: 990px; +} + +body { + font-family: Arial, Helvetica, sans-serif; + color: #333333; + background-color: #ffffff; + margin: 0; + font-size: 14px; + border-top: 3px solid #2c6bab; +} + +h1, +h2, +h3, +h4, +h5, +h6 { + font-family: Georgia, "Times New Roman", Times, serif; + margin-bottom: 0.5rem; + font-weight: bold; + line-height: 1.2; +} + +h1 { + font-size: 1.383rem; +} + +h2 { + font-size: 1.296rem; +} + +h3 { + font-size: 1.215rem; +} + +h4 { + font-size: 1.138rem; +} + +h5 { + font-size: 1.067rem; +} + +h6 { + font-size: 1rem; +} + +p { + margin: 0 0 1rem; +} + +a { + color: #16315c; +} + +a:visited { + color: #5c165b; +} + +ul, ol { + margin: 0 0 1rem; + padding-left: 1rem; +} + +li { + margin: 0 0 0.5rem; + padding: 0 0 0 0.5rem; +} + +table { + margin: 0 0 1rem; + width: 100%; +} + +td, +th { + padding: 0.5rem; +} + +td { + vertical-align: top; +} + +.foot { + vertical-align: middle; +} + +th, +.head, +.foot { + font-weight: bold; + color: #666666; + background-color: #eeeeee; + vertical-align: middle; +} + +.even { + background-color: #f7f7f7; +} + +.odd { + background-color: #fafafa; +} + +.col2::after { + content: ""; + display: block; + clear: both; +} + +.col2 .leftcolumn { + float: left; + width: 260px; + margin: 10px 0; +} + +.col2 .centercolumn { + float: right; + width: 720px; +} + +.centerCcolumn { + margin: 10px 0; +} + +.centerLcolumn { + display: inline-block; + vertical-align: top; + margin: 10px 10px 10px 0; + width: calc(50% - 10px); +} + +.centerRcolumn { + display: inline-block; + vertical-align: top; + margin: 10px 0 10px 10px; + width: calc(50% - 10px); +} + +.centerLcolumn .block:not(:first-child), +.centerRcolumn .block:not(:first-child) { + margin-top: 20px; +} + +.hidden { + display: none; +} + +.block .blockTitle { + font-weight: bold; + color: #ffffff; + background: url(images/blockTitleBack.png) no-repeat left center; + text-shadow: 0px -1px 0 #000000; +} + +.centercolumn .block { + border: 1px solid#cccccc; +} + +.leftcolumn .block:not(:first-child) { + margin: 10px 0; +} + +.leftcolumn .blockTitle, +.centerCcolumn .blockTitle { + padding: 0.75rem 0.75rem 0.75rem 1.5rem; +} + +.centerRcolumn .blockTitle, +.centerLcolumn .blockTitle { + margin: 8px 10px 0; + padding: 0.5rem 0.5rem 0.5rem 1.5rem; +} + +.centerCcolumn .blockContent, +.centerRcolumn .blockContent, +.centerLcolumn .blockContent { + margin: 0; + padding: 10px; +} + +#page { + margin: 0 auto; + width: 990px; +} + +#header { + margin: 0; + width: 990px; + min-width: 990px; +} + +#header a { + color: #333333; +} + +#header .top { + height: 90px; +} + +#header .top::after { + clear: both; + content: ''; + display: block; +} + +#header .logo { + float: left; + display: block; + margin: 10px 0; + height: 70px; + width: 400px; + background-image: url(images/logo.png); +} + +#header .utility { + float: right; + display: block; + height: 90px; + width: 590px; + text-align: right; +} + +#header .utility .socialmedia { + display: inline-block; + position: relative; + width: 126px; + height: 35px; + top: 20px; + right: 50px; +} + +#header .utility .socialmedia a { + padding: 0 5px; +} + +#header .utility .sitemap { + display: inline-block; + position: relative; + top: 20px; + left: 80px; +} + +#header .utility .incf { + display: inline-block; + position: relative; + width: 120px; + height: 68px; + top: 5px; +} + +#header .utility .language { + display: inline-block; + position: relative; + width: 80px; + top: 15px; + right: -115px; +} + +#header .utility .language a { + display: inline-block; + font-size: 12px; + text-indent: 10px; + background: url(./images/indent.png) no-repeat left center; +} + +#header .menubar { + height: 40px; + background: linear-gradient(#fff, #eee); +} + +#header .menubar::after { + content: ""; + display: block; + clear: both; +} + +#header .menubar .mainmenu { + float: left; + margin: 0; + padding: 0; + list-style-type: none; + font-size: 90%; +} + +#header .menubar .mainmenu>li { + display: inline-block; + border-right: 2px solid #bbcdd5; + text-align: center; +} + +#header .menubar .mainmenu li:hover { + background: linear-gradient(#fff, #d9e5fe); + cursor: pointer; +} + +#header .menubar .mainmenu li>a, +#header .menubar .mainmenu li>span { + display: block; + margin: 0 10px; + text-decoration: none; + color: #333333; + text-shadow: 0px 1px #FFF; +} + +#header .menubar .mainmenu>li { + line-height: 39px; + height: 40px; + margin: 0; + padding: 0; +} + +#header .menubar .mainmenu .submenu { + display: block; + position: absolute; + width: 200px; + text-align: left; + border: 1px solid #cccccc; + animation: fadeIn 1s ease 0s 1 normal; + font-size: 90%; + z-index: 1; +} + +@keyframes fadeIn { + 0% { + opacity: 0; + } + + 100% { + opacity: 1; + } +} + +#header .menubar .mainmenu .submenu .item { + display: block; + line-height: 1.5; + padding: 5px 10px; + text-decoration: none; + background: linear-gradient(#fff, #eee); +} + +#header .menubar .mainmenu .submenu .item:not(:first-child) { + border-top: 1px solid #cccccc; +} + +#header .menubar .mainmenu .submenu .item:hover { + background: linear-gradient(#fff, #d9e5fe); +} + +#header .menubar .search_box { + float: right; + margin: 10px 15px 0 0; +} + +#header .menubar .search_box input { + margin: 0 1px; + padding: 2px; + height: 20px; + width: 150px; + border: 1px #ddd solid; + line-height: normal; + vertical-align: top; +} + +#header .menubar .search_box a { + line-height: 0; + font-size: 0; +} + +#footer { + text-align: center; +} + +#footer .banners { + margin: 0; + padding: 0; + height: 60px; + list-style-type: none; + line-height: 60px; +} + +#footer .banners>li { + margin: 0 10px; + display: inline-block; +} + +#footer .banners>li img { + vertical-align: middle; +} + +#footer .banners .credits { + color: white; + background: #0174DF; + font-weight: bold; + padding: 5px 10px; + border-radius: 20px; + text-decoration: none; +} + +#footer .copyright { + line-height: 38px; + display: block; + font-size: 90%; +} + +#main { + margin: 10px 0; + background-color: #ffffff; + min-height: 500px; + font-size: 90%; +} + +#main .goPageTop { + text-align: right; + font-size: 80%; +} + +#main .goPageTop a { + display: inline-block; + line-height: 2; + padding: 0 20px; + background: url(./images/go-page-top.png) no-repeat; + text-decoration: none; + color: #333333; +} + +#main .goPageTop a:hover { + text-decoration: none; + color: #333333; +} + +#main h1 { + font-weight: bold; + padding: .3rem .3rem .3rem 2.25rem; + background: url(images/h1-back.png) no-repeat left center; + border: 1px solid #cccccc; + color: white; + text-shadow: 0px -1px 0 #000; +} + +#main h2 { + font-weight: bold; + padding: .3rem .3rem .3rem 2.25rem; + background: url(images/h2-back.png) no-repeat left center; + border: 1px solid #cccccc; + text-shadow: 0px -1px 0 #FFF; +} + +#main h3 { + position: relative; + padding: .2rem .2rem .2rem .75rem; + border-left: 6px solid #ccc; + border-bottom: 1px solid #ccc; +} + +#main .pico_body { + margin: 0; + padding: 0; +} + +#link-banners div { + margin-bottom: 8px; + font-size: 0; +} + +.feed { + margin: 0 0 10px; +} + +.feed .pubDate { + color: #797c80; + margin: 0 5px 0; + font-size: 90%; + font-weight: bold; + font-style: italic; +} + +.feed .pubDate .new { + margin-left: 3px; + font-weight: bold; + color: #ff9999; +} + +.feed .logo { + display: inline-block; + width: 60px !important; + overflow: hidden; + margin: 2px 10px; +} + +.feed .item { + display: inline-block; + vertical-align: top; + width: calc(100% - 80px); +} + +.feed .item .site { + margin: 2px 0 0; + font-size: 85%; + font-style: italic; +} + +/* +.pico_body table { + border-collapse: collapse; + font-size: 0.9rem; +} + +.pico_body table caption { + font-weight: bold; + font-size: 1.2rem; +} + +.pico_body table, +.pico_body th, +.pico_body td { + border: 1px solid black; + padding: 5px; +} +*/ + +.bulletin { + margin: 10px 5px; +} + +.bulletin .itemHead { + margin: 10px 0 5px; + padding: 2px 0; + font-weight: bold; + border-bottom: 1px dotted #CCC; +} + +.bulletin .itemInfo { + text-align: right; + margin: 5px 0; + padding: 3px 0; + font-size: 90%; +} + +.bulletin .itemTitle { + font-size: 120%; + font-weight: bold; +} + +.bulletin .itemTitle a { + text-decoration: none; +} + +.bulletin .itemPoster { + font-size: 90%; +} + +.bulletin .itemPostDate { + font-size: 90%; +} + +.bulletin .itemStats { + font-size: 90%; +} + +.bulletin .itemBody { + padding: 0; + overflow: hidden; +} + +.bulletin .itemText { + margin: 5px 0; + line-height: 1.47em; + letter-spacing: 0.04em; + font-size: 94%; +} + +.bulletin .itemFoot { + text-align: right; + padding: 2px 0; + border-top: 2px dotted #999; +} + +.bulletin .itemPermaLink { + clear: both; + margin: 5px 0; + font-size: 90%; +} + +.bulletin .pagenavi { + margin: 5px 0; + text-align: right; + font-size: 95%; +} + +.bulletin .pagenavi .pages { + margin-left: 10px; + font-weight: bold; +} + +.bulletin .pagenavi .pages .current:before { + content: '('; +} + +.bulletin .pagenavi .pages .current:after { + content: ')'; +} + +.platform-committee th:first-child { + width: 120px; +} + +.platform-committee th:nth-child(2) { + width: 200px; +} + +.xoonips .listTable table { + margin: 0; +} + +.xoonips .listTable table > tbody > tr > td { + padding: 0; +} + +.xoonips .listTable .listBody div { + margin: 1px 0; +} +.xoonips .listTable .listBody .journal .journal_name { + font-style: italic; +} + +.xoonips .itemDetail { + max-width: 720px; +} +.xoonips .itemDetail > tbody > tr > td:first-child { + width: 200px; +} +.xoonips .itemDetail > tbody > tr > td:nth-child(2) { + width: 520px; + max-width: 520px; +} + +.xoonips .itemDetail table { + margin: 5px 0; +} + +.xoonips .itemDetail table td, +.xoonips .itemDetail table th { + padding: 5px 0; +} + +.xoonips .itemDetail table td:first-child { + white-space: nowrap; +} diff --git a/src/custom/blocks/LinkBannersBlock.tsx b/src/custom/blocks/LinkBannersBlock.tsx new file mode 100644 index 0000000..637f107 --- /dev/null +++ b/src/custom/blocks/LinkBannersBlock.tsx @@ -0,0 +1,35 @@ +import React from 'react'; +import { Link } from 'react-router-dom'; +import { MultiLang } from '../../config'; +import imageLinksAini2018 from '../assets/images/links-aini2018.png'; +import imageLinksHakcathon2018Sep from '../assets/images/links-hackathon2018sep.png'; +import imageLinksJnodePf from '../assets/images/links-jnodepf.png'; +import imageLinksNewsletterE from '../assets/images/links-newsletter-e.png'; +import imageLinksNewsletterJ from '../assets/images/links-newsletter-j.png'; +import imageLinksPfReportE from '../assets/images/links-pfreport-e.png'; +import imageLinksPfReportJ from '../assets/images/links-pfreport-j.png'; + +interface Props { + lang: MultiLang; +} + +const LinkBannersBlock: React.FC = (props: Props) => { + const { lang } = props; + const links = [ + { name: 'AINI 2018', image: imageLinksAini2018, link: '/aini2018/' }, + { name: 'J-Node Hackathon 2018 September', image: imageLinksHakcathon2018Sep, link: '/hackathon2018/september.html' }, + { name: 'J-Node Platform', image: imageLinksJnodePf, link: '/resource/platform.html' }, + { name: 'J-Node Newsletter', image: lang === 'en' ? imageLinksNewsletterE : imageLinksNewsletterJ, link: '/modules/news/index.php?storytopic=4' }, + { name: 'J-Node Platform Report', image: lang === 'en' ? imageLinksPfReportE : imageLinksPfReportJ, link: '/publication' } + ]; + return

; +}; + +export default LinkBannersBlock; \ No newline at end of file diff --git a/src/custom/blocks/RssBlock.tsx b/src/custom/blocks/RssBlock.tsx new file mode 100644 index 0000000..845ec7a --- /dev/null +++ b/src/custom/blocks/RssBlock.tsx @@ -0,0 +1,95 @@ +import React from 'react'; +import Loading from '../../common/lib/Loading'; +import { MultiLang } from '../../config'; +import Functions from '../../functions'; +import RssFeed, { RssFeedItem, RssFeedSite } from '../lib/RssFeed'; + +interface Props { + lang: MultiLang; + sites: RssFeedSite[]; + num: number; +} + +interface State { + loading: boolean; + feeds: RssFeedItem[] | null; +} + +const rssMerge = (a: RssFeedItem[], b: RssFeedItem[], maxlength: number) => { + return a.concat(b).sort((i, j) => { return i.pubDate === j.pubDate ? 0 : (i.pubDate > j.pubDate ? -1 : 1) }).slice(0, maxlength); +}; +const arrayDiff = (a: string[], b: string[]): string[] => { return a.filter((i: string) => { return b.indexOf(i) < 0 }) }; + +class RssBlock extends React.Component { + + private isActive: boolean; + + constructor(props: Props) { + super(props); + this.state = { + loading: true, + feeds: null + }; + this.isActive = false; + } + + componentDidMount() { + this.isActive = true; + this.updateFeed(); + } + + componentDidUpdate(prevProps: Props, prevState: State) { + const { sites, num } = this.props; + const prevSites = prevProps.sites; + const prevNum = prevProps.num; + const siteIds = sites.map((site) => site.id); + const prevSiteIds = prevSites.map((site) => site.id); + if (num !== prevNum || arrayDiff(siteIds, prevSiteIds).length !== 0 || arrayDiff(prevSiteIds, siteIds).length !== 0) { + this.setState({ loading: true, feeds: null }); + this.updateFeed(); + } + } + + componentWillUnmount() { + this.isActive = false; + } + + async updateFeed() { + const { sites, num } = this.props; + let feeds: RssFeedItem[] = []; + const infos = await Promise.all(sites.map(async (site) => RssFeed.getInfo(site))); + infos.forEach((info) => { + feeds = rssMerge(feeds, info.items, num); + }) + if (this.isActive) { + this.setState({ loading: false, feeds }); + } + } + + render() { + const { loading, feeds } = this.state; + if (loading) { + return ; + } + if (feeds === null) { + return
Faild to get RSS feeds.
; + } + const newRange = new Date().getTime() / 1000 - 604800; + return
; + } +} + +export default RssBlock; \ No newline at end of file diff --git a/src/custom/lib/RssFeed.ts b/src/custom/lib/RssFeed.ts new file mode 100644 index 0000000..ca20eef --- /dev/null +++ b/src/custom/lib/RssFeed.ts @@ -0,0 +1,72 @@ +import moment from 'moment'; +import RSSParser from 'rss-parser'; + +export interface RssFeedSite { + id: string; + name: string; + logo: string; + url: string; + rss: string; +} + +export interface RssFeedItem { + id: string; + title: string; + link: string; + pubDate: number; +} + +export interface RssFeedInfo { + site: RssFeedSite; + items: RssFeedItem[]; + loaded: boolean; +} + +const CORS_PROXY = "https://archive.ni.brain.riken.jp/cors/"; +const feedInfoCache = new Map(); + +const getInfo = async (site: RssFeedSite): Promise => { + const info = feedInfoCache.get(site.id) || { site, items: [], loaded: false }; + if (!info.loaded) { + info.loaded = true; + const parser = new RSSParser(); + try { + const output = await parser.parseURL(CORS_PROXY + site.rss); + if (typeof output.items !== 'undefined') { + output.items.forEach((item) => { + if (typeof item.title !== 'undefined' && typeof item.link !== 'undefined') { + const dateString = item.pubDate || item.isoDate; + const pubDate = moment(dateString).unix(); + if (!isNaN(pubDate)) { + info.items.push({ + id: site.id, + title: item.title, + link: item.link, + pubDate: pubDate, + }); + } + } + }); + } + } catch (err) { + // ignore + } + feedInfoCache.set(site.id, info); + } + return info; +} + +const getSite = (id: string) => { + const info = feedInfoCache.get(id); + if (typeof info === 'undefined') { + return { id: id, name: '', logo: '', url: '' }; + } + return info.site; +} + +const RssFeed = { + getInfo, + getSite +} + +export default RssFeed; \ No newline at end of file diff --git a/src/functions.ts b/src/functions.ts new file mode 100644 index 0000000..4bdfc3e --- /dev/null +++ b/src/functions.ts @@ -0,0 +1,136 @@ +import moment from 'moment'; +import XRegExp from 'xregexp'; +import Config, { MultiLang } from './config'; + +const escape = (str: string): string => { + return encodeURIComponent(str).replace(/[!'()*]/g, (c) => { + return '%' + c.charCodeAt(0).toString(16); + }); +} + +const unescape = (str: string): string => { + return decodeURIComponent(str); +} + +const htmlspecialchars = (str: string): string => { + return str.replace(/(<|>|&|'|")/g, (match) => { + switch (match) { + case '<': + return '<'; + case '>': + return '>'; + case '&': + return '&'; + case '\'': + return '''; + case '"': + return '"'; + } + return ''; + }); +} + +const camelCase = (str: string): string => { + return str.replace(/[-_](.)/g, (...matches) => { + return matches[1].toUpperCase(); + }); +} + +const snakeCase = (str: string): string => { + var camel = camelCase(str); + return camel.replace(/[A-Z]/g, (...matches) => { + return "_" + matches[0].charAt(0).toLowerCase(); + }); +} + +const pascalCase = (str: string): string => { + var camel = camelCase(str); + return camel.charAt(0).toUpperCase() + camel.slice(1); +} + +const base64Encode = (str: string): string => { + return btoa(unescape(encodeURIComponent(str))); +} + +const base64Decode = (str: string): string => { + return decodeURIComponent(escape(atob(str))); +} + +const formatDate = (timestamp: number, format: string): string => { + return moment(new Date(timestamp * 1000)).format(format); +} + +const ordinal = (num: number): string => { + const hundred = num % 100; + if (hundred >= 10 && hundred <= 20) { + return 'th'; + } + const ten = num % 10; + const suffix = ['st', 'nd', 'rd']; + return ten > 0 && ten < 4 ? suffix[ten - 1] : 'th'; +} + +const mlang = (str: string, lang: MultiLang): string => { + const mlLangs = ['en', 'ja']; + // escape brackets inside of + let text = str.replace(/(]*)(>)/isg, (whole, m1, m2, m3) => { + if (m2.match(/type=["']?(?:text|hidden)["']?/is)) { + return m1 + m2.replace(/\[/g, '__ml[ml__') + m3; + } + return whole; + }); + // escape brackets inside of + text = text.replace(/(]*>)(.*)(<\/textarea>)/isg, (whole, m1, m2, m3) => { + return m1 + m2.replace(/\[/g, '__ml[ml__') + m3; + }); + // simple pattern to strip selected lang_tags + const re = new RegExp('\\[/?(?:[^\\]]+\\|)?' + lang + '(?:\\|[^\\]]+)?\\](?:
)?', 'g'); + text = text.replace(re, ''); + // eliminate description between the other language tags. + mlLangs.forEach((mlLang) => { + if (mlLang !== lang) { + const re = XRegExp('\\[(?:[^/][^\\]]+\\|)?' + mlLang + '(?:\\|[^\\]]+)?\\].*?\\[/(?:[^\\]]+\\|)?' + mlLang + '(?:\\|[^\\]]+)?\\](?:
)?', 'isg'); + text = text.replace(re, (whole) => { + return whole.match(/<\/table>/) ? whole : ''; + }); + } + }); + // unescape brackets inside of + text = text.replace(/(]*>)(.*)(<\/textarea>)/isg, (whole, m1, m2, m3) => { + return m1 + m2.replace(/__ml\[ml__/g, '[') + m3; + }); + // unescape brackets inside of + text = text.replace(/(]*)(>)/isg, (whole, m1, m2, m3) => { + if (m2.match(/type=["']?(?:text|hidden)["']?/is)) { + return m1 + m2.replace(/__ml\[ml__/g, '[') + m3; + } + return whole; + }); + return text; +} + +const siteTitle = (lang: MultiLang): string => { + return mlang(Config.SITE_TITLE, lang); +} + +const siteSlogan = (lang: MultiLang): string => { + return mlang(Config.SITE_SLOGAN, lang); +} + +const Functions = { + escape, + unescape, + htmlspecialchars, + camelCase, + snakeCase, + pascalCase, + base64Encode, + base64Decode, + formatDate, + ordinal, + mlang, + siteTitle, + siteSlogan, +}; + +export default Functions; \ No newline at end of file diff --git a/src/index.css b/src/index.css index ec2585e..2daa7e9 100644 --- a/src/index.css +++ b/src/index.css @@ -1,13 +1 @@ -body { - margin: 0; - font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', - 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', - sans-serif; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} - -code { - font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New', - monospace; -} +@import-normalize; diff --git a/src/index.tsx b/src/index.tsx index 87d1be5..d6fc2b4 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -1,12 +1,14 @@ +import 'react-app-polyfill/ie11'; +import 'react-app-polyfill/stable'; import React from 'react'; import ReactDOM from 'react-dom'; import './index.css'; import App from './App'; -import * as serviceWorker from './serviceWorker'; +// import * as serviceWorker from './serviceWorker'; ReactDOM.render(, document.getElementById('root')); // If you want your app to work offline and load faster, you can change // unregister() to register() below. Note this comes with some pitfalls. // Learn more about service workers: https://bit.ly/CRA-PWA -serviceWorker.unregister(); +// serviceWorker.unregister(); diff --git a/src/logo.svg b/src/logo.svg deleted file mode 100644 index 6b60c10..0000000 --- a/src/logo.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/src/pico/Pico.tsx b/src/pico/Pico.tsx new file mode 100644 index 0000000..cca8644 --- /dev/null +++ b/src/pico/Pico.tsx @@ -0,0 +1,133 @@ +import React, { Component } from 'react'; +import { Redirect, Route, RouteComponentProps, Switch } from 'react-router-dom'; +import Loading from '../common/lib/Loading'; +import PageNotFound from '../common/lib/PageNotFound'; +import { MultiLang } from '../config'; +import './assets/pico_main.css'; +import PicoContext from './lib/PicoContext'; +import PicoUtils from './lib/PicoUtils'; +import PicoCategory from './PicoCategory'; +import PicoContent from './PicoContent'; +import PicoMenu from './PicoMenu'; + +interface Props { + lang: MultiLang; + dirname: string; + virtualpath: string; + showTitle: boolean; +} + +interface State { + loading: boolean; + context: PicoContext | null; +} + +class Pico extends Component { + + private isActive: boolean; + + constructor(props: Props) { + super(props); + this.isActive = false; + this.state = { + loading: true, + context: null, + }; + } + + componentDidMount() { + this.isActive = true; + this.updatePage(); + } + + componentDidUpdate(prevProps: Props, prevState: State) { + const { lang, dirname, virtualpath } = this.props; + if (prevProps.lang !== lang || prevProps.dirname !== dirname || prevProps.virtualpath !== virtualpath) { + this.updatePage(); + } + } + + componentWillUnmount() { + this.isActive = false; + } + + async updatePage() { + const { dirname, showTitle } = this.props; + const context = PicoUtils.getContext(dirname, showTitle); + const status = await context.initialize(); + if (this.isActive) { + this.setState({ loading: false, context: status ? context : null }); + } + } + + render() { + const { lang, dirname, virtualpath } = this.props; + const { loading, context } = this.state; + if (loading) { + return ; + } + if (context === null) { + return ; + } + const module = context.getModule(); + if (module === null) { + return ; + } + const modulepath = context.getUrl(''); + return + { + const { location } = props; + const url = modulepath + '/index.php' + location.search + location.hash; + return + }} /> + { + const { location } = props; + const { pathname, search } = location; + const regexVirutal = new RegExp(`^${virtualpath}`); + const regexModule = new RegExp(`^${dirname}/?`); + let link = pathname.replace(regexVirutal, dirname).replace(regexModule, ''); + if (link + '/' === virtualpath) { + link = ''; + } + if (link.match(/.html$/)) { + const content = context.getContentByPath(link); + if (content !== null) { + return ; + } + return ; + } + const category = context.getCategoryByPath(link); + if (category !== null) { + if (module.show_listasindex !== 0) { + return + } + const content = context.getFirstContent(category.id); + if (content !== null) { + return ; + } + return ; + } + if (link === '' || link === 'index.php') { + const params = new URLSearchParams(search); + const paramCatId = params.get('cat_id'); + if (paramCatId !== null && paramCatId.match(/^\d+$/)) { + const catId = parseInt(paramCatId, 10); + return ; + } + const paramContentId = params.get('content_id'); + if (paramContentId !== null && paramContentId.match(/^\d+$/)) { + const contentId = parseInt(paramContentId, 10); + return ; + } + const paramPage = params.get('page'); + if ((paramPage !== null && paramPage === 'menu') || module.show_menuinmoduletop !== 0) { + return ; + } + } + return ; + }} /> + ; + } +} + +export default Pico; diff --git a/src/pico/PicoCategory.tsx b/src/pico/PicoCategory.tsx new file mode 100644 index 0000000..3d7f79d --- /dev/null +++ b/src/pico/PicoCategory.tsx @@ -0,0 +1,81 @@ +import React, { Fragment } from 'react'; +import { Helmet } from 'react-helmet'; +import { Link } from 'react-router-dom'; +import PageNotFound from '../common/lib/PageNotFound'; +import { MultiLang } from '../config'; +import Functions from '../functions'; +import PicoContext, { PicoCategoryData, PicoContentData } from './lib/PicoContext'; + +interface Props { + lang: MultiLang; + context: PicoContext; + catId: number; +} + +const PicoCategory = (props: Props) => { + const { lang, context, catId } = props; + const pico = context.getModule(); + if (pico === null) { + return ; + } + const category = context.getCategory(catId); + if (category === null) { + return ; + } + const parentCategories = context.getParentCategories(category.pid); + const subCategories = context.getSubCategories(catId); + const contents = context.getCategoryContents(catId); + return ( +
+ + {Functions.mlang(category.title, lang)} - {Functions.mlang(pico.name, lang)} - {Functions.siteTitle(lang)} + + {pico.show_breadcrumbs !== 0 && ( +
+ {parentCategories.map((parentCategory: PicoCategoryData, idx: number) => { + return ( + + {idx > 0 && <> > } + {Functions.mlang(parentCategory.title, lang)} + + ); + })} + {parentCategories.length > 0 && <> > } + {Functions.mlang(category.title, lang)} +
+ )} + {catId === 0 && pico.message !== '' && ( +

{Functions.mlang(pico.message, lang)}

+ )} +

{Functions.mlang(category.title, lang)}

+ {category.desc !== '' && ( +

{Functions.mlang(category.desc, lang)}

+ )} + {subCategories.length > 0 && ( + <> +

{Functions.mlang('[en]Subcageroies[/en][ja]サブカテゴリー[/ja]', lang)}

+ {subCategories.map((subCategory: PicoCategoryData) => { + return ( +
+
{Functions.mlang(subCategory.title, lang)}
+
{Functions.mlang(subCategory.desc, lang)}
+
+ ); + })} + + )} + {contents.length > 0 && ( + <> +

{Functions.mlang('[en]Contents[/en][ja]コンテンツ[/ja]', lang)}

+
    + {contents.map((content: PicoContentData) => { + return
  • {Functions.mlang(content.title, lang)}
  • ; + })} +
+ + )} +
+ ); +}; + +export default PicoCategory; \ No newline at end of file diff --git a/src/pico/PicoContent.tsx b/src/pico/PicoContent.tsx new file mode 100644 index 0000000..f37c55b --- /dev/null +++ b/src/pico/PicoContent.tsx @@ -0,0 +1,112 @@ +import React, { Component, Fragment } from 'react'; +import { Helmet } from 'react-helmet'; +import { Link } from 'react-router-dom'; +import { HashLink } from 'react-router-hash-link'; +import Loading from '../common/lib/Loading'; +import NoticeSiteHasBeenArchived from '../common/lib/NoticeSiteHasBeenArchived'; +import PageNotFound from '../common/lib/PageNotFound'; +import XoopsCode from '../common/lib/XoopsCode'; +import { MultiLang } from '../config'; +import Functions from '../functions'; +import PicoContext, { PicoCategoryData, PicoPageData } from './lib/PicoContext'; + +interface Props { + lang: MultiLang; + context: PicoContext; + contentId: number; +} + +interface State { + loading: boolean; + page: PicoPageData | null; +} + +class PicoContent extends Component { + + private isActive: boolean; + + constructor(props: Props) { + super(props); + this.state = { + loading: true, + page: null, + }; + this.isActive = false; + } + + componentDidMount() { + const { contentId } = this.props; + this.isActive = true; + this.updatePage(contentId); + } + + componentDidUpdate(prevProps: Props, prevState: State) { + const { context, contentId } = this.props; + const prevContext = prevProps.context; + const prevContentId = prevProps.contentId; + if (context !== prevContext || contentId !== prevContentId) { + this.setState({ loading: true, page: null }); + this.updatePage(contentId); + } + } + + componentWillUnmount() { + this.isActive = false; + } + + async updatePage(contentId: number) { + const { context } = this.props; + const page = await context.getPage(contentId); + if (this.isActive) { + this.setState({ loading: false, page }); + } + } + + render() { + const { lang, context, contentId } = this.props; + const { loading, page } = this.state; + if (loading) { + return ; + } + if (page === null) { + return ; + } + const pico = context.getModule(); + if (pico === null) { + return ; + } + const categories = context.getContentCategery(contentId); + return ( +
+ + {Functions.mlang(page.title, lang)} - {Functions.mlang(pico.name, lang)} - {Functions.siteTitle(lang)} + + {context.isShowTitle() && <> +

{Functions.mlang(pico.name, lang)}

+ + } + {pico.show_breadcrumbs !== 0 && ( +
+ {categories.map((category: PicoCategoryData, idx: number) => { + return ( + + {idx > 0 && <> > } + {Functions.mlang(category.title, lang)} + + ); + })} +  > {Functions.mlang(page.title, lang)} +
+ )} +
+ +
+
+ {Functions.mlang('[en]Jump to the top[/en][ja]この記事の1行目に飛ぶ[/ja]', lang)} +
+
+ ); + } +} + +export default PicoContent; diff --git a/src/pico/PicoMenu.tsx b/src/pico/PicoMenu.tsx new file mode 100644 index 0000000..72470a4 --- /dev/null +++ b/src/pico/PicoMenu.tsx @@ -0,0 +1,91 @@ +import React from 'react'; +import { Helmet } from 'react-helmet'; +import { Link } from 'react-router-dom'; +import PageNotFound from '../common/lib/PageNotFound'; +import { MultiLang } from '../config'; +import Functions from '../functions'; +import PicoContext, { PicoCategoryData, PicoContentData } from './lib/PicoContext'; + +interface Props { + lang: MultiLang; + context: PicoContext; +} + +interface PicoMenuCategoryProps { + lang: MultiLang; + context: PicoContext; + category: PicoCategoryData; + depth: number; +} + +const PicoMenuCategory = (props: PicoMenuCategoryProps) => { + const { lang, context, category, depth } = props; + const subCategories = context.getSubCategories(category.id); + const contents = context.getCategoryContents(category.id); + const level = 'level' + depth; + const link = {Functions.mlang(category.title, lang)}; + let title =
{link}
; + switch (depth) { + case 1: + title =

{link}

; + break; + case 2: + title =

{link}

; + break; + case 3: + title =

{link}

; + break; + case 4: + title =

{link}

; + break; + case 5: + title =
{link}
; + break; + } + return ( + <> + {title} + {contents.length > 0 && ( +
+
    + {contents.map((content: PicoContentData) => { + return
  • {Functions.mlang(content.title, lang)}
  • ; + })} +
+
+ )} + {subCategories.length > 0 && ( + <> + {subCategories.map((subCategory: PicoCategoryData) => { + return ; + })} + + )} + + ); +} + +const PicoMenu = (props: Props) => { + const { lang, context } = props; + const pico = context.getModule(); + if (pico === null) { + return ; + } + const category = context.getCategory(0); + if (category === null) { + return ; + } + return ( +
+ + {Functions.mlang('[en]Menu[/en][ja]メニュー[/ja]', lang)} - {Functions.mlang(pico.name, lang)} - {Functions.siteTitle(lang)} + + {pico.message !== '' && ( +

{Functions.mlang(pico.message, lang)}

+ )} + +
+ ); +}; + +export default PicoMenu; \ No newline at end of file diff --git a/src/pico/assets/pico_main.css b/src/pico/assets/pico_main.css new file mode 100644 index 0000000..9413c22 --- /dev/null +++ b/src/pico/assets/pico_main.css @@ -0,0 +1,140 @@ +div.pico_breadcrumbs { + font-size: 95%; + padding: 0 0 3px; + border-bottom: 1px #aaa solid; +} + +.pico_body { + margin: 0 -2px; + padding: 15px 8px; +} + +div.pico_menu h1 { + margin: 18px 0 0 0; + padding: 3px; + background-color: #eee; +} +div.pico_menu h2 { + margin: 18px 0 0 10px; + padding: 3px; + background-color: #eee; +} +div.pico_menu h3 { + margin: 18px 0 0 20px; + padding: 3px; + background-color: #eee; +} +div.pico_menu h4 { + margin: 18px 0 0 30px; + padding: 3px; + background-color: #eee; +} +div.pico_menu h5 { + margin: 18px 0 0 40px; + padding: 3px; + background-color: #eee; +} +div.pico_menu div.level1 { + margin-left: 0; +} +div.pico_menu div.level2 { + margin-left: 10px; +} +div.pico_menu div.level3 { + margin-left: 20px; +} +div.pico_menu div.level4 { + margin-left: 30px; +} +div.pico_menu div.level5 { + margin-left: 40px; +} + +em.pico_notice { + font-weight: bold; + font-style: normal; + color: #ff0000; +} + +div.pico_controllers_in_menu { + float: right; + position: relative; + top: -1.5em; +} + +div.bottom_of_content_body { + clear: right; +} + +ul.pico_list_contents li { + list-style: none outside; +} +ul.pico_list_contents_in_menu li { + list-style: none outside; +} + +div.pico_print_icon { + float: right; + width: 40px; + height: 40px; +} +div.pico_tellafriend_icon { + float: right; + width: 40px; + height: 40px; +} +div.pico_vote form { + display: inline; +} + +table.pico_pagenavigation { + border-top: 1px #aaa solid; + margin-top: 20px; +} + +table.pico_form_table th.pico_waiting { + color: red; +} +table.pico_form_table td.pico_waiting { + color: red; + background-color: white; +} + +table.pico_form_table td, +table.pico_form_table th { + color: black; + vertical-align: top !important; + text-align: left; +} +p.pico_submit { + text-align: center; + margin: 0; + padding: 10px; +} + +input.pico_ascii_only { + ime-mode: disabled; +} +input.pico_number_only { + ime-mode: disabled; + text-align: right; +} + +pre.pico_history_diff del { + color: red; +} +pre.pico_history_diff ins { + color: blue; +} + +div.pico_pagebreak { + margin: 10px; +} +div.pico_pagebreak span { + border: 1px solid black; + padding: 2px; + margin: 2px; +} +div.pico_pagebreak span.selected { + border: 0px; +} diff --git a/src/pico/lib/PicoContext.ts b/src/pico/lib/PicoContext.ts new file mode 100644 index 0000000..ee58e26 --- /dev/null +++ b/src/pico/lib/PicoContext.ts @@ -0,0 +1,161 @@ +import axios from 'axios'; +import loki from 'lokijs'; + +export interface PicoModuleData { + name: string; + dirname: string; + message: string; + show_menuinmoduletop: number; + show_listasindex: number; + show_breadcrumbs: number; + show_pagenavi: number; +} + +export interface PicoCategoryData { + id: number; + title: string; + desc: string; + pid: number; + weight: number; + link: string; +} + +export interface PicoContentData { + id: number; + title: string; + cat_id: number; + weight: number; + link: string; +} + +export interface PicoIndexData { + module: PicoModuleData; + categories: PicoCategoryData[]; + contents: PicoContentData[]; +} + +export interface PicoPageData { + id: number; + title: string; + content: { + en: string; + ja: string; + } +} + +export const PICO_CATEGORY_ID_ROOT = 65535; + +class PicoContext { + + private isInitialized: boolean; + private dirname: string; + private showTitle: boolean; + private database: loki; + private module: PicoModuleData | null; + private categories: Collection; + private contents: Collection; + + constructor(dirname: string, showTitle: boolean) { + this.isInitialized = false; + this.dirname = dirname; + this.showTitle = showTitle; + this.database = new loki(`pico_${dirname}`); + this.module = null; + this.categories = this.database.addCollection('categories'); + this.contents = this.database.addCollection('contents'); + } + + isShowTitle(): boolean { + return this.showTitle; + } + + getUrl(path: string): string { + return `/modules/${this.dirname}` + (path !== '' ? `/${path}` : ''); + } + + getModule(): PicoModuleData | null { + return this.module; + } + + getCategoryByPath(link: string): PicoCategoryData | null { + return this.categories.findOne({ link: link }); + } + + getCategory(catId: number): PicoCategoryData | null { + return this.categories.findOne({ id: catId }); + } + + getParentCategories(catId: number): PicoCategoryData[] { + const categories: PicoCategoryData[] = []; + while (catId !== PICO_CATEGORY_ID_ROOT) { + const category = this.categories.findOne({ id: catId }); + if (category === null) { + break; + } + categories.unshift(category); + catId = category.pid; + } + return categories; + } + + getSubCategories(catId: number): PicoCategoryData[] { + return this.categories.chain().find({ pid: catId }).simplesort('weight').data(); + } + + getCategoryContents(catId: number): PicoContentData[] { + return this.contents.chain().find({ cat_id: catId }).simplesort('weight').data(); + } + + getContentCategery(contentId: number): PicoCategoryData[] { + const content = this.contents.findOne({ id: contentId }); + if (content === null) { + return []; + } + return this.getParentCategories(content.cat_id); + } + + getFirstContent(catId: number): PicoContentData | null { + const contents = this.contents.chain().find({ cat_id: catId }).simplesort('weight').limit(1).data(); + if (contents.length !== 1) { + return null; + } + return contents[0]; + } + + getContentByPath(link: string): PicoContentData | null { + return this.contents.findOne({ link: link }); + } + + async getPage(contentId: number): Promise { + let page: PicoPageData | null = null; + try { + const response = await axios.get(this.getUrl(`${contentId}.json`)); + page = response.data as PicoPageData; + } catch (err) { + // ignore + } + return page; + } + + async initialize(): Promise { + if (!this.isInitialized) { + try { + const response = await axios.get(this.getUrl('index.json')); + const index = response.data as PicoIndexData; + this.module = index.module; + index.categories.forEach((value) => { + this.categories.insert(value); + }); + index.contents.forEach((value) => { + this.contents.insert(value); + }); + } catch (err) { + // ignore + } + this.isInitialized = true; + } + return this.isInitialized; + } +} + +export default PicoContext; \ No newline at end of file diff --git a/src/pico/lib/PicoUtils.ts b/src/pico/lib/PicoUtils.ts new file mode 100644 index 0000000..0f67bcc --- /dev/null +++ b/src/pico/lib/PicoUtils.ts @@ -0,0 +1,22 @@ +import PicoContext from './PicoContext'; + +class PicoUtils { + + private static contexts: Map = new Map(); + + private constructor() { + // blcok to access from outside of this class + } + + public static getContext(dirname: string, showTitle: boolean): PicoContext { + let context = this.contexts.get(dirname); + if (typeof context === 'undefined') { + context = new PicoContext(dirname, showTitle); + this.contexts.set(dirname, context); + } + return context; + } + +} + +export default PicoUtils; diff --git a/src/xoonips/Xoonips.module.css b/src/xoonips/Xoonips.module.css new file mode 100644 index 0000000..12743fe --- /dev/null +++ b/src/xoonips/Xoonips.module.css @@ -0,0 +1,78 @@ +.database { + margin: 0; +} + +.database :global(.list) { + width: 100%; +} + +.database :global(.listTable) { + width: 100%; + border-collapse: separate; + border-spacing: 5px; +} + +.database :global(.listTable .listIcon), +.database :global(.listTable .listExtra) { + vertical-align: middle; + text-align: center; + width: 65px; + line-height: 0; +} + +.database :global(.itemDetail) { + border-collapse: separate; + border-spacing: 1px; +} +.database :global(.itemDetail .head) { + width: 30%; +} + +.database :global(.itemDetail .readme), +.database :global(.itemDetail .rights) { + background-color: #ffffff; + width: 100%; + max-height: 200px; + overflow: auto; +} + +.database :global(.advancedSearch .head) { + width: 30%; +} + +.database :global(.advancedSearch .search) { + text-align: center; + margin: 10px; +} + +.database :global(.advancedSearch .itemtype) { + margin: 5px 0; +} + +.database :global(.advancedSearch .itemtype .itemtypeName), +.database :global(.advancedSearch .itemtype .itemtypeFields) { + border-collapse: separate; + border-spacing: 1px; +} +.database :global(.advancedSearch .itemtype .itemtypeName) { + margin: 0; +} +.database :global(.advancedSearch .itemtype .itemtypeName input) { + margin-right: 5px; +} +.database :global(.advancedSearch .itemtype .itemtypeFields) { + margin: 2px 0; +} +.database :global(.advancedSearch .itemtype .itemtypeName th) { + padding: 10px; +} + +.database :global(.advancedSearch .fieldDateLabel) { + display: inline-block; + width: 50px; +} + +.database :global(.advancedSearch .fieldDate select), +.database :global(.advancedSearch .fieldDate input) { + margin: 0 5px 0 0; +} diff --git a/src/xoonips/Xoonips.tsx b/src/xoonips/Xoonips.tsx new file mode 100644 index 0000000..2040f8c --- /dev/null +++ b/src/xoonips/Xoonips.tsx @@ -0,0 +1,71 @@ +import React from 'react'; +import { Helmet } from 'react-helmet'; +import { Redirect, Route, RouteComponentProps, Switch, withRouter } from 'react-router-dom'; +import PageNotFound from '../common/lib/PageNotFound'; +import { MultiLang } from '../config'; +import Functions from '../functions'; +import ItemUtil from './lib/ItemUtil'; +import styles from './Xoonips.module.css'; +import XoonipsAdvancedSearch from './XoonipsAdvancedSearch'; +import XoonipsDetailItem from './XoonipsDetailItem'; +import XoonipsSearchByAdvancedKeyword from './XoonipsSearchByAdvancedKeyword'; +import XoonipsSearchByIndexId from './XoonipsSearchByIndexId'; +import XoonipsSearchByItemType from './XoonipsSearchByItemType'; +import XoonipsSearchByKeyword from './XoonipsSearchByKeyword'; +import XoonipsTop from './XoonipsTop'; + +interface Props extends RouteComponentProps { + lang: MultiLang; +} + +const Xoonips: React.FC = (props: Props) => { + const { lang, location } = props; + const query = new URLSearchParams(location.search); + query.delete('ml_lang'); + return ( +
+ + {Functions.mlang('[en]Database[/en][ja]データベース[/ja]', lang)} - {Functions.siteTitle(lang)} + + + } /> + } /> + { + const idStr = query.get('item_id'); + const doi = query.get('id'); + const id = idStr !== null && /^\d+$/.test(idStr) ? parseInt(idStr, 10) : null; + return ; + }} /> + { + const idStr = query.get('index_id'); + const id = idStr !== null && /^\d+$/.test(idStr) ? parseInt(idStr, 10) : null; + return ; + }} /> + { + const op = query.get('op') || ''; + query.delete('op'); + switch (op) { + case 'quick': { + const { type, keyword } = ItemUtil.getSearchKeywordByQuery(location.search); + return + } + case 'advanced': { + const search_itemtype = query.get('search_itemtype'); + if (search_itemtype !== null) { + return + } + if (Array.from(query).length > 0) { + return + } + return + } + } + return ; + }} /> + + +
+ ); +} + +export default withRouter(Xoonips); \ No newline at end of file diff --git a/src/xoonips/XoonipsAdvancedSearch.tsx b/src/xoonips/XoonipsAdvancedSearch.tsx new file mode 100644 index 0000000..95a1d20 --- /dev/null +++ b/src/xoonips/XoonipsAdvancedSearch.tsx @@ -0,0 +1,48 @@ +import React, { Component } from 'react'; +import { RouteComponentProps } from 'react-router'; +import Config, { MultiLang } from '../config'; +import Functions from '../functions'; +import ItemType from './item-type'; +import AdvancedSearchQuery from './lib/AdvancedSearchQuery'; +import ItemUtil from './lib/ItemUtil'; + +interface Props extends RouteComponentProps { + lang: MultiLang; +} + +class XoonipsAdvancedSearch extends Component { + + private query: AdvancedSearchQuery = new AdvancedSearchQuery(); + + constructor(props: Props) { + super(props); + this.handleClickSearchButton = this.handleClickSearchButton.bind(this); + } + + handleClickSearchButton() { + if (!this.query.empty()) { + const url = ItemUtil.getSearchByAdvancedKeywordsUrl(this.query); + this.props.history.push(url); + } + } + + render() { + const { lang } = this.props; + return ( +
+

{Functions.mlang('[en]Search Items[/en][ja]アイテム検索[/ja]', lang)}

+
+ +
+ {Config.XOONIPS_ITEMTYPES.map((type) => { + return ; + })} +
+ +
+
+ ); + } +} + +export default XoonipsAdvancedSearch; \ No newline at end of file diff --git a/src/xoonips/XoonipsDetailItem.tsx b/src/xoonips/XoonipsDetailItem.tsx new file mode 100644 index 0000000..6581d3f --- /dev/null +++ b/src/xoonips/XoonipsDetailItem.tsx @@ -0,0 +1,76 @@ +import React, { Component } from 'react'; +import { Helmet } from 'react-helmet'; +import Loading from '../common/lib/Loading'; +import PageNotFound from '../common/lib/PageNotFound'; +import { MultiLang } from '../config'; +import Functions from '../functions'; +import ItemType from './item-type'; +import ItemUtil, { Item } from './lib/ItemUtil'; + +interface Props { + lang: MultiLang; + id: number | null; + doi: string | null +} + +interface State { + loading: boolean; + item: Item | null; +} + +class XoonipsDetailItem extends Component { + + constructor(props: Props) { + super(props); + this.state = { + loading: true, + item: null, + }; + } + + componentDidMount() { + this.updateItem(); + } + + componentDidUpdate(prevProps: Props, prevState: State) { + const { id, doi } = this.props; + if (id !== prevProps.id || doi !== prevProps.doi) { + this.updateItem(); + } + } + + updateItem() { + const { id, doi } = this.props; + if (doi !== null) { + ItemUtil.getByDoi(doi, (item) => { + this.setState({ loading: false, item }); + }); + } else if (id !== null) { + ItemUtil.get(id, (item) => { + this.setState({ loading: false, item }); + }); + } + } + + render() { + const { lang } = this.props; + if (this.state.loading) { + return ; + } + if (this.state.item === null) { + return ; + } + return ( + <> + + {Functions.mlang(this.state.item.title, lang)} - {Functions.mlang('[en]Database[/en][ja]データベース[/ja]', lang)} - {Functions.siteTitle(lang)} + +

{Functions.mlang('[en]Detail[/en][ja]詳細[/ja]', lang)}

+
+ + + ); + } +} + +export default XoonipsDetailItem; \ No newline at end of file diff --git a/src/xoonips/XoonipsSearchByAdvancedKeyword.tsx b/src/xoonips/XoonipsSearchByAdvancedKeyword.tsx new file mode 100644 index 0000000..02f44d5 --- /dev/null +++ b/src/xoonips/XoonipsSearchByAdvancedKeyword.tsx @@ -0,0 +1,56 @@ +import React, { Component } from 'react'; +import { RouteComponentProps } from 'react-router'; +import { MultiLang } from '../config'; +import AdvancedSearchQuery from './lib/AdvancedSearchQuery'; +import ItemUtil, { SearchCallbackFunc, SortCondition } from './lib/ItemUtil'; +import XoonipsListItem from './lib/XoonipsListItem'; + +interface Props extends RouteComponentProps { + lang: MultiLang +} + +interface State { + search: string; + query: AdvancedSearchQuery; +} + +class XoonipsSearchByAdvancedKeyword extends Component { + + constructor(props: Props) { + super(props); + const search = props.location.search; + const query = ItemUtil.getAdvancedSearchQueryByQuery(search); + this.state = { search, query }; + this.searchFunc = this.searchFunc.bind(this); + } + + static getDerivedStateFromProps(nextProps: Props, prevState: State) { + const search = nextProps.location.search; + if (prevState.search !== search) { + const query = ItemUtil.getAdvancedSearchQueryByQuery(search); + return { search, query }; + } + return null; + } + + getUrl() { + return ItemUtil.getSearchByAdvancedKeywordsUrl(this.state.query); + } + + searchFunc(condition: SortCondition, func: SearchCallbackFunc) { + ItemUtil.getListByAdvancedSearchQuery(this.state.query, condition, func); + } + + render() { + const { lang } = this.props; + const baseUrl = this.getUrl(); + return ( +
+

Listing item

+ +
+ ); + } +} + +export default XoonipsSearchByAdvancedKeyword; diff --git a/src/xoonips/XoonipsSearchByIndexId.tsx b/src/xoonips/XoonipsSearchByIndexId.tsx new file mode 100644 index 0000000..bb5bdc2 --- /dev/null +++ b/src/xoonips/XoonipsSearchByIndexId.tsx @@ -0,0 +1,72 @@ +import React, { Component, Fragment } from 'react'; +import { Helmet } from 'react-helmet'; +import { Link } from 'react-router-dom'; +import PageNotFound from '../common/lib/PageNotFound'; +import { MultiLang } from '../config'; +import Functions from '../functions'; +import IndexUtil, { Index, INDEX_ID_PUBLIC } from './lib/IndexUtil'; +import ItemUtil, { SearchCallbackFunc, SortCondition } from './lib/ItemUtil'; +import XoonipsListIndex from './lib/XoonipsListIndex'; +import XoonipsListItem from './lib/XoonipsListItem'; + +interface Props { + lang: MultiLang; + id: number | null; +} + +class XoonipsSearchByIndexId extends Component { + + constructor(props: Props) { + super(props); + this.searchFunc = this.searchFunc.bind(this); + } + + getUrl() { + const { id } = this.props; + const indexId = id === null ? INDEX_ID_PUBLIC : id; + if (indexId === 0) { + return '/'; + } + return IndexUtil.getUrl(indexId); + } + + searchFunc(condition: SortCondition, func: SearchCallbackFunc) { + const { id } = this.props; + const indexId = id === null ? INDEX_ID_PUBLIC : id; + if (id === 0) { + const res = { total: 0, data: [] }; + func(res); + } else { + ItemUtil.getListByIndexId(indexId, condition, func); + } + } + + render() { + const { lang, id } = this.props; + const indexId = id === null ? INDEX_ID_PUBLIC : id; + const index = IndexUtil.get(indexId); + if (index === null) { + return ; + } + const baseUrl = this.getUrl(); + const pIndexes = IndexUtil.getParents(indexId); + const parents = pIndexes.map((value: Index) => { + const url: string = IndexUtil.getUrl(value.id); + return / {value.title} ; + }); + const title = pIndexes.map((value) => { return '/' + value.title; }).join(''); + return ( +
+ + {Functions.mlang(title, lang)} - {Functions.mlang('[en]Database[/en][ja]データベース[/ja]', lang)} - {Functions.siteTitle(lang)} + +

{Functions.mlang('[en]Listing item[/en][ja]アイテム一覧[/ja]', lang)}

+
{parents}
+ + +
+ ); + } +} + +export default XoonipsSearchByIndexId; diff --git a/src/xoonips/XoonipsSearchByItemType.tsx b/src/xoonips/XoonipsSearchByItemType.tsx new file mode 100644 index 0000000..cf9c60b --- /dev/null +++ b/src/xoonips/XoonipsSearchByItemType.tsx @@ -0,0 +1,47 @@ +import React, { Component } from 'react'; +import { MultiLang } from '../config'; +import Functions from '../functions'; +import ItemUtil, { SearchCallbackFunc, SortCondition } from './lib/ItemUtil'; +import XoonipsListItem from './lib/XoonipsListItem'; + +interface Props { + lang: MultiLang; + itemType: string | null; + itemSubType: string | null; +} + +class XoonipsSearchByItemType extends Component { + + constructor(props: Props) { + super(props); + this.searchFunc = this.searchFunc.bind(this); + } + + searchFunc(condition: SortCondition, func: SearchCallbackFunc) { + const { itemType, itemSubType } = this.props; + if (itemType === null || itemSubType === null) { + const res = { total: 0, data: [] }; + func(res); + } else { + ItemUtil.getListByItemType(itemType, itemSubType, condition, func); + } + } + + getUrl() { + const { itemType, itemSubType } = this.props; + return ItemUtil.getItemTypeSearchUrl(itemType, itemSubType); + } + + render() { + const { lang } = this.props; + const baseUrl = this.getUrl(); + return ( +
+

{Functions.mlang('[en]Listing item[/en][ja]アイテム一覧[/ja]', lang)}

+ +
+ ); + } +} + +export default XoonipsSearchByItemType; diff --git a/src/xoonips/XoonipsSearchByKeyword.tsx b/src/xoonips/XoonipsSearchByKeyword.tsx new file mode 100644 index 0000000..1a09e17 --- /dev/null +++ b/src/xoonips/XoonipsSearchByKeyword.tsx @@ -0,0 +1,48 @@ +import React, { Component } from 'react'; +import { MultiLang } from '../config'; +import Functions from '../functions'; +import ItemUtil, { SearchCallbackFunc, SortCondition } from './lib/ItemUtil'; +import XoonipsListItem from './lib/XoonipsListItem'; + +interface Props { + lang: MultiLang; + type: string; + keyword: string; +} + +class XoonipsSearchByKeyword extends Component { + + constructor(props: Props) { + super(props); + this.searchFunc = this.searchFunc.bind(this); + } + + getUrl() { + const { type, keyword } = this.props; + return ItemUtil.getSearchByKeywordUrl(type, keyword); + } + + searchFunc(condition: SortCondition, func: SearchCallbackFunc) { + const { type, keyword } = this.props; + if (keyword === '') { + const res = { total: 0, data: [] }; + func(res); + } else { + ItemUtil.getListByKeyword(type, keyword, condition, func); + } + } + + render() { + const { lang, keyword } = this.props; + const baseUrl = this.getUrl(); + return ( +
+

{Functions.mlang('[en]Listing item[/en][ja]アイテム一覧[/ja]', lang)}

+

{Functions.mlang('[en]Search Keyword[/en][ja]検索キーワード[/ja]', lang)} : {keyword}

+ +
+ ); + } +} + +export default XoonipsSearchByKeyword; diff --git a/src/xoonips/XoonipsTop.module.css b/src/xoonips/XoonipsTop.module.css new file mode 100644 index 0000000..f1de613 --- /dev/null +++ b/src/xoonips/XoonipsTop.module.css @@ -0,0 +1,19 @@ +.itemTypes .itemType { + width: 50%; + padding: 5px; +} + +.itemTypes .itemType :global(table) { + width: 100%; + margin: 0; +} + +.itemTypes .itemType :global(table .itemTypeIcon) { + width: 50px; + padding: 5px; +} +.itemTypes .itemType :global(table .itemTypeName) { + padding: 5px; + vertical-align: middle; + font-size: large; +} \ No newline at end of file diff --git a/src/xoonips/XoonipsTop.tsx b/src/xoonips/XoonipsTop.tsx new file mode 100644 index 0000000..650e391 --- /dev/null +++ b/src/xoonips/XoonipsTop.tsx @@ -0,0 +1,40 @@ +import React from 'react'; +import Config, { MultiLang } from '../config'; +import ItemType from './item-type'; +import styles from './XoonipsTop.module.css'; + +interface Props { + lang: MultiLang; +} + +const XoonipsTop: React.FC = (props: Props) => { + const { lang } = props; + const types: string[][] = []; + const len = Config.XOONIPS_ITEMTYPES.length; + for (let i = 0; i < Math.ceil(len / 2); i++) { + const j = i * 2; + const p = Config.XOONIPS_ITEMTYPES.slice(j, j + 2); + types.push(p); + } + return ( + + + {types.map((value, idx) => { + return ( + + {value.map((type, idx) => { + return ( + + ); + })} + + ); + })} + +
+ {type !== '' && } +
+ ); +} + +export default XoonipsTop; diff --git a/src/xoonips/XoonipsXoopsPathRedirect.tsx b/src/xoonips/XoonipsXoopsPathRedirect.tsx new file mode 100644 index 0000000..9f5745f --- /dev/null +++ b/src/xoonips/XoonipsXoopsPathRedirect.tsx @@ -0,0 +1,42 @@ +import React, { Component } from 'react'; +import { Redirect, RouteComponentProps, withRouter } from 'react-router'; +import PageNotFound from '../common/lib/PageNotFound'; +import { MultiLang } from '../config'; +import Functions from '../functions'; + +interface Props extends RouteComponentProps { + lang: MultiLang; +} + +class XoonipsXoopsPathRedirect extends Component { + + getRedirectUrl(): string { + const { location } = this.props; + const pathname = location.pathname || ''; + const query = new URLSearchParams(location.search); + const search = new RegExp('^/modules/xoonips(?:/+(.*))?$'); + const matches = pathname.match(search); + if (matches === null) { + return ''; + } + const path = matches[1] || ''; + switch (path) { + case '': + case 'index.php': { + return '/modules/xoonips'; + } + } + return ''; + } + + render() { + const { lang } = this.props; + const url = this.getRedirectUrl(); + if (url === '') { + return ; + } + return ; + } +} + +export default withRouter(XoonipsXoopsPathRedirect); diff --git a/src/xoonips/assets/images/icon_conference.gif b/src/xoonips/assets/images/icon_conference.gif new file mode 100644 index 0000000000000000000000000000000000000000..ec56f37ef3bb18a7af0aab878c098ff837456cc1 GIT binary patch literal 427 zcmZ?wbhEHblw*)%IKseiKOy0~fWRdMh4<^%zwGb-^ZxzU^XDHG6kIbf_<8^SoB8wa z1Oz;-uYcCiaMQuz)BgQu7#RM80RwSB@h1x-1A`EQ4oEr3P6pQh3sm}2G}X=r&&aVB zV^?AC%AU+EE6QtfXB*2CK}|OXrUl&!24eC8sogJo9Aeqq%TAXnw4IBa{)EBg+=~)s zK?OGsfzOfxvX*y3(-j#WI?MQlmsM1{vNN)9F_%;{DV4VhYA_41_;LICm-e@~O);A3 z#wNfvE2Wz`l!IH4eNAXW*leM4J^>~!Yg=wMUiNN2Ue}F%TUg=Qr^+4ZZ}$aeJ`iXWng4jd5tB0+NJ(gon;|h7`_;GTs`qWDYVooSLe` n_)?N7m}M!89|y|{OQ*=~9BfQ74>XllG%%M4tT7N|Vz34PsKtx5 literal 0 HcmV?d00001 diff --git a/src/xoonips/assets/images/icon_folder.gif b/src/xoonips/assets/images/icon_folder.gif new file mode 100644 index 0000000000000000000000000000000000000000..7a69a82c9749d7b69004aa4aa22aad2563d4b81c GIT binary patch literal 1508 zcmdT@Yc~`K03CM94B90Tt(cjdttEwMDcLa|%_y2trW};fNLwm7YOU47%ou}F26^Re z9n1*XYXqN#olwz{e15|_iknRy1MbK2v&qogfGAX zW?y5CI~={R!3P_B;j$G!u;8{0?*8!D0q-FAaN)}Za}WH(zz)YQKDc}YA4JF@gdW1) zBj6oF#4+$=5p@EG;}QJ}VoxFV4C0cIm;$j3DOr$YBQ*y(#mFs1emM#&QB;MJYE(6# zu?>oLv|dB|b@boHz#XUuaqBMTKf;BHjegi1fGuozaNrpPuLUmn*#lMxSfTI>f&X3v z>_gB2aH9}>2>W8di$TP3M4iM>@i?4-BfsK=04Ig`S%mmx#EX$2L1HRSrQu9E&PZ`q zillQ8o`*0KA{o+iAuBpnyAqu$boZm@7J3(|zKh$#7#zXiDDK^d z_5ns8Vr&wxW^wNU#vfyH3Xi7o_!*weVCEGjrts=DX5ZrDC;agz-p?=0=f55OFNOM< zs6!z15Y~Qi|K$?|5(q-FC9|olM@TZU4JB2SUr4s39iW>>_DXh}E7)#pyqRL>Ba8qW zX0raeP;}Y z-5N^3YjAXuQ*^#HmP>xWsh?**oPRVd%ZJ<{f0|T5+_q(4`%+p+ud&*u^PR4tL(8}m z%dWwDPT&4f+nk1)L|2p^rx{Wu>vjHWPFhJdYLwy?`!aOI=3hVMFDB`YzGpPV-FMWpJl2%N2#%EKh?f_|$b5|IJ!HZa3FDpv z`bXu;S&I@WwSRe7oTI=jaP4uCQN3Te*XmMv=HgC%4o_@eoY~Z87DVjoUHaoZJJU3R zIpsxOogdDy;K?U^Zu~>z^z@N~IjUv8Qcf<}Cfr!1rv6P3ePcj%+hzPR%P5xQ9yjl$ lasA9$Wa95!Zr0^&%}+M-i5vaE;7%$(Xql_S*mT0?e*r^Q%hCV< literal 0 HcmV?d00001 diff --git a/src/xoonips/assets/images/simpf_button.png b/src/xoonips/assets/images/simpf_button.png new file mode 100644 index 0000000000000000000000000000000000000000..1f93ad6ec0fe4f20a47af309b713b909da367e81 GIT binary patch literal 6596 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 literal 0 HcmV?d00001 diff --git a/src/xoonips/assets/images/star.gif b/src/xoonips/assets/images/star.gif new file mode 100644 index 0000000000000000000000000000000000000000..f90543e6882626b06bcf8cec21549306525587e9 GIT binary patch literal 538 zcmZ?wbhEHb2vb@RSOozqInO6T#O8h?|_5XzQpEL5` zkEr}RWB%`q#lQ1be=gYWYzo-Z9l5$WZ9{wB!sd!&4UR`TJuc33yV4MQvpeSSvY*r1C*w)v!W=ij>sT22X*>Yo2+uhmIk1Uz`eDS2m8z$dg zyZGR?ZRhsxdAVWD^ZmPC?AY=2RPVp{UH{+q{`=JV??czWk3jZ>|F5Thf3oD}sbl|t zpZfmf^1ok?8E6j_f3h$#FvK(HfUE+=2?Kk1Lwr+HAhTa{N3(~IYiFl>EKgr^fOniq zr+}V_ux3T`K xoV=_FYp1`Fy{@>KoswIJm#q#Hm!gfKONW6Pi*J0ivN~^vGkd2hcT*#SH2{Fq*#H0l literal 0 HcmV?d00001 diff --git a/src/xoonips/assets/images/tree_line.png b/src/xoonips/assets/images/tree_line.png new file mode 100644 index 0000000000000000000000000000000000000000..2865cd20fb9cfa723ce1f0e439fdfaddd6d8f829 GIT binary patch literal 112 zcmeAS@N?(olHy`uVBq!ia0vp^DnKm4!3HFsR?RmBQs$m6jv*C{$p@JKIcFZq(qR98 zGSKAJf?UjSN`WDz)9lp2%Qq5$Mlg7~ L`njxgN@xNAS$`qN literal 0 HcmV?d00001 diff --git a/src/xoonips/assets/images/tree_node.png b/src/xoonips/assets/images/tree_node.png new file mode 100644 index 0000000000000000000000000000000000000000..b23e4b19c8cf04983a897e5beb12cfd53fa6c7b3 GIT binary patch literal 1251 zcmV<91RVQ`P)mg0000sHa3imjeC84Mn_0RMn)bU z9yd2PXJ=<}adCctfpm6vXhbtvHY7hoMFIl^US3{hWo2@7b!|N*qCyL#MGb2>9zj4r zOifNEB_&*3TxDlyS5{VaIUJ=$3$@*E`u+dWoPe`Y48dX-JKH-O(;EfL1qi|i54jB%uoE8= z3Xn`2iA4^DJqd$$+u9Ll_b-tx`y`*+OKR^BI$oklv_|}^C)S2|smxpvycVe=*5ob!;R*`jO4+KtB_~*Mt zbibx^y`*xxqH#YzJs%wy?AyG&pltl{+xqCq`RK^`=g9cy$N1*P_vXg;<;C^ixbxVo z^4F`ho_gZYu+zh+@X(s>%#-cQlI+Tn>c^1j#*gR3jpoCQ<-&|sNHpxpk>0(D)WV_P z&a&mfi{!wH0J4K^VmG{-4X>E-CKrkRvhfBzS^*jBB_d9-(;v8SWC{?&o*U zXJ^r^!J(i2zN)T`8vS7YS^<)>@!1ygfjZfEj3gBURHf|2V9Z;nql)I z+4hm-GiuZXQh5MySMnLPXaRr#xFnxZKkOlu%IAEY;+&toWQ_8L6Xp6N#kmM*$QWrH zQI1O1C7hBp{%|UC9?+06(sX#!9NyZ3bt?d<3%)Ya0$lDNm8`3p0q{Kd%1CRlX((j9 zWPL}cB#kpc=wbl49SD6hrb1t2(g2bxr0*}xl@$C)!R5yb|Kp~OBvr`8XPU1C-ff94 zKC=rK!92-lOmqR}Rmf*d07$}Sg3p*ke3~&nV@}(7ch0_HK#Yr7h*FF8oyDA?uK0RS zgplYK=Yplc)@=c|p { + + constructor(props: Props) { + super(props); + this.handleClickOpenAll = this.handleClickOpenAll.bind(this); + this.handleClickCloseAll = this.handleClickCloseAll.bind(this); + this.handleExpand = this.handleExpand.bind(this); + this.handleSelect = this.handleSelect.bind(this); + const res = this.load(); + this.state = { + tree: res.elements, + expandableKeys: res.keys, + expandedKeys: res.expandedKeys, + selectedKeys: [], + }; + } + + load() { + const { lang } = this.props; + let keys: string[] = []; + let eKeys: string[] = []; + const makeTreeNode = (index: Index, depth: number): DataNode => { + const title = Functions.mlang(index.title, lang) + (index.numOfItems > 0 ? ' (' + index.numOfItems + ')' : ''); + const children = IndexUtil.getChildren(index.id); + if (children.length === 0) { + return { key: String(index.id), title: title }; + } + const childTreeNodes = children.map((value: Index) => { + return makeTreeNode(value, depth + 1); + }); + if (depth < 1) { + eKeys.push(String(index.id)); + } + keys.push(String(index.id)); + return { key: String(index.id), title: title, children: childTreeNodes }; + }; + let elements: DataNode[] = []; + const index = IndexUtil.get(INDEX_ID_PUBLIC); + if (index !== null) { + elements.push(makeTreeNode(index, 0)); + } + return { + elements: elements, + keys: keys, + expandedKeys: eKeys, + } + } + + componentDidUpdate(prevProps: Props, prevState: State) { + const { lang } = this.props; + if (prevProps.lang !== lang) { + const res = this.load(); + this.setState({ + tree: res.elements, + selectedKeys: [], + }); + } + } + + handleClickOpenAll() { + this.setState({ expandedKeys: this.state.expandableKeys }) + } + + handleClickCloseAll() { + this.setState({ expandedKeys: [] }) + } + + handleExpand(expandedKeys: ReactText[], info: { + node: EventDataNode; + expanded: boolean; + nativeEvent: MouseEvent; + }): void { + const keys: string[] = expandedKeys.map((key) => { + return typeof key === 'string' ? key : String(key); + }); + this.setState({ expandedKeys: keys }); + } + + handleSelect(selectedKeys: ReactText[], info: { + event: 'select'; + selected: boolean; + node: EventDataNode; + selectedNodes: DataNode[]; + nativeEvent: MouseEvent; + }): void { + const selectedKey = selectedKeys.shift() || 0; + const key = typeof selectedKey === 'string' ? parseInt(selectedKey, 10) : selectedKey; + const url = IndexUtil.getUrl(key); + this.props.history.push(url); + this.setState({ selectedKeys: [] }); + } + + render() { + return ( +
+ + + +
+ ); + } +} + +export default withRouter(XooNIpsIndexTreeBlock); diff --git a/src/xoonips/blocks/Rankings.module.css b/src/xoonips/blocks/Rankings.module.css new file mode 100644 index 0000000..362a532 --- /dev/null +++ b/src/xoonips/blocks/Rankings.module.css @@ -0,0 +1,28 @@ +.heading { + margin: 0 0 3px; + font-size: 100%; + font-weight: normal; +} + +.item { + display: flex; + white-space: nowrap; + width: 100%; +} + +.order { + margin-right: 5px; +} + +.title { + overflow: hidden; + text-overflow: ellipsis; +} + +.count { + margin-left: 10px; +} + +.star { + margin-left: 5px; +} \ No newline at end of file diff --git a/src/xoonips/blocks/Rankings.tsx b/src/xoonips/blocks/Rankings.tsx new file mode 100644 index 0000000..3c98b4e --- /dev/null +++ b/src/xoonips/blocks/Rankings.tsx @@ -0,0 +1,181 @@ +import axios from 'axios'; +import React, { Fragment } from 'react'; +import { Link } from 'react-router-dom'; +import Loading from '../../common/lib/Loading'; +import { MultiLang } from '../../config'; +import Functions from '../../functions'; +import imageStar from '../assets/images/star.gif'; +import ItemUtil, { ItemCore } from '../lib/ItemUtil'; +import styles from './Rankings.module.css'; + +interface RankingsData { + accessed?: { + item_id: number; + doi: string; + title: string; + count: number; + }[], + downloaded?: { + item_id: number; + doi: string; + title: string; + count: number; + }[], + contributed?: { + uid: number; + uname: string; + name: string; + count: number; + }[], + searched?: { + keyword: string; + count: number; + }[]; +}; + +interface Props { + lang: MultiLang; +} + +interface State { + loading: boolean; + rankings: RankingsData | null; +} + +const orderLabel = (order: number, lang: string) => { + return String(order) + (lang === 'en' ? Functions.ordinal(order) : '位') +} + +class Rankings extends React.Component { + + private isActive: boolean; + + constructor(props: Props) { + super(props); + this.state = { + loading: true, + rankings: null + }; + this.isActive = false; + } + + componentDidMount() { + this.isActive = true; + this.updatePage(); + } + + componentWillUnmount() { + this.isActive = false; + } + + async updatePage() { + try { + const response = await axios.get('/modules/xoonips/rankings.json'); + const rankings = response.status === 200 ? response.data as RankingsData : null; + if (this.isActive) { + this.setState({ loading: false, rankings }); + } + } catch (e) { + if (this.isActive) { + this.setState({ loading: false, rankings: null }); + } + } + } + + render() { + const { lang } = this.props; + const { loading, rankings } = this.state; + if (loading) { + return ; + } + if (rankings === null) { + return
Failed to get data resource.
; + } + + const items = []; + if (rankings.accessed) { + items.push({ + title: '[en]Frequently accessed items[/en][ja]頻繁に閲覧されるアイテム[/ja]', + list: rankings.accessed.map((item, idx) => { + const url = ItemUtil.getUrl(item as ItemCore); + const title = Functions.mlang(item.title, lang); + const order = orderLabel(idx + 1, lang); + return ( +
+
{order}
+
{title}
+ {idx === 0 &&
{order}
} +
+ ); + }), + }); + } + if (rankings.downloaded) { + items.push({ + title: '[en]Frequently downloaded items[/en][ja]頻繁にダウンロードされるアイテム[/ja]', + list: rankings.downloaded.map((item, idx) => { + const url = ItemUtil.getUrl(item as ItemCore); + const title = Functions.mlang(item.title, lang); + const order = orderLabel(idx + 1, lang); + return ( +
+
{order}
+
{title}
+ {idx === 0 &&
{order}
} +
+ ); + }), + }); + } + if (rankings.contributed) { + items.push({ + title: '[en]Most active contributers[/en][ja]最も多くアイテムを公開したユーザ[/ja]', + list: rankings.contributed.map((item, idx) => { + const name = item.name !== '' ? item.name + ' (' + item.uname + ')' : item.uname; + const title = Functions.mlang(name, lang); + const order = orderLabel(idx + 1, lang); + return ( +
+
{order}
+
{title}
+
({item.count})
+ {idx === 0 &&
{order}
} +
+ ); + }), + }); + } + if (rankings.searched) { + items.push({ + title: '[en]Frequently searched keywords[/en][ja]頻繁に検索されるキーワード[/ja]', + list: rankings.searched.map((item, idx) => { + const url = ItemUtil.getSearchByKeywordUrl('all', item.keyword); + const title = 'Search by: ' + item.keyword; + const order = orderLabel(idx + 1, lang); + return ( +
+
{order}
+
{item.keyword}
+ {idx === 0 &&
{order}
} +
+ ); + }), + }); + } + return ( +
+ {items.map((item, idx) => { + return ( + + {idx !== 0 &&
} +

{Functions.mlang(item.title, lang)}

+
{item.list}
+
+ ); + })} +
+ ); + } +} + +export default Rankings; \ No newline at end of file diff --git a/src/xoonips/blocks/RecentContents.module.css b/src/xoonips/blocks/RecentContents.module.css new file mode 100644 index 0000000..6466fb7 --- /dev/null +++ b/src/xoonips/blocks/RecentContents.module.css @@ -0,0 +1,28 @@ +.heading { + margin: 0 0 3px; + font-size: 100%; + font-weight: normal; +} + +.item { + display: flex; + white-space: nowrap; + width: 100%; +} + +.order { + margin-right: 5px; +} + +.title { + overflow: hidden; + text-overflow: ellipsis; +} + +.date { + margin-left: 10px; +} + +.star { + margin-left: 5px; +} \ No newline at end of file diff --git a/src/xoonips/blocks/RecentContents.tsx b/src/xoonips/blocks/RecentContents.tsx new file mode 100644 index 0000000..9d250b2 --- /dev/null +++ b/src/xoonips/blocks/RecentContents.tsx @@ -0,0 +1,98 @@ +import axios from 'axios'; +import moment from 'moment'; +import React from 'react'; +import { Link } from 'react-router-dom'; +import Loading from '../../common/lib/Loading'; +import { MultiLang } from '../../config'; +import Functions from '../../functions'; +import imageStar from '../assets/images/star.gif'; +import ItemUtil, { ItemCore } from '../lib/ItemUtil'; +import styles from './RecentContents.module.css'; + +interface RecentContentData { + item_id: number; + doi: string; + last_update_date: number; + title: string; +}; +type RecentContentsData = RecentContentData[]; + +interface Props { + lang: MultiLang; +} + +interface State { + loading: boolean; + contents: RecentContentsData | null; +} + +class RecentContents extends React.Component { + + private isActive: boolean; + + constructor(props: Props) { + super(props); + this.state = { + loading: true, + contents: null + }; + this.isActive = false; + } + + componentDidMount() { + this.isActive = true; + this.updatePage(); + } + + componentWillUnmount() { + this.isActive = false; + } + + async updatePage() { + try { + const response = await axios.get('/modules/xoonips/recent-contents.json'); + const contents = response.status === 200 ? response.data as RecentContentsData : null; + if (this.isActive) { + this.setState({ loading: false, contents }); + } + } catch (e) { + if (this.isActive) { + this.setState({ loading: false, contents: null }); + } + } + } + + render() { + const { lang } = this.props; + const { loading, contents } = this.state; + if (loading) { + return ; + } + if (contents === null) { + return
Failed to get data resource.
; + } + + const list = contents.map((item, idx) => { + const url = ItemUtil.getUrl(item as ItemCore); + const title = Functions.mlang(item.title, lang); + const date = moment(new Date(item.last_update_date * 1000)).format('Y/M/D'); + const order = String(idx + 1) + (lang === 'en' ? Functions.ordinal(idx + 1) : '位'); + return ( +
+
{order}
+
{title}
+
({date})
+ {idx === 0 &&
{order}
} +
+ ); + }); + return ( +
+

{Functions.mlang('[en]Newly Arrived Items[/en][ja]新着アイテム[/ja]', lang)}

+
{list}
+
+ ); + } +} + +export default RecentContents; \ No newline at end of file diff --git a/src/xoonips/blocks/Search.tsx b/src/xoonips/blocks/Search.tsx new file mode 100644 index 0000000..0cb299e --- /dev/null +++ b/src/xoonips/blocks/Search.tsx @@ -0,0 +1,86 @@ +import React, { ChangeEvent, Component, FormEvent } from 'react'; +import { Link, RouteComponentProps, withRouter } from 'react-router-dom'; +import Config, { MultiLang } from '../../config'; +import Functions from '../../functions'; +import ItemUtil from '../lib/ItemUtil'; + +interface Props extends RouteComponentProps { + lang: MultiLang; +} + +interface State { + type: string; + keyword: string; + path: string; +} + +class XooNIpsSearchBlock extends Component { + + constructor(props: Props) { + super(props); + const { location } = props; + this.state = { + type: 'all', + keyword: '', + path: location.pathname + location.search + location.hash, + }; + this.handleChangeType = this.handleChangeType.bind(this); + this.handleChangeKeyword = this.handleChangeKeyword.bind(this); + this.handleSubmit = this.handleSubmit.bind(this); + } + + static getDerivedStateFromProps(nextProps: Props, prevState: State) { + const { location } = nextProps; + const path = location.pathname + location.search + location.hash + if (path !== prevState.path) { + const { type, keyword } = ItemUtil.getSearchKeywordByQuery(location.search); + return { type, keyword, path }; + } + return null; + } + + handleChangeKeyword(event: ChangeEvent) { + const keyword = event.target.value.trim(); + this.setState({ keyword }); + } + + handleChangeType(event: ChangeEvent) { + const type = event.target.value; + this.setState({ type }); + } + + handleSubmit(event: FormEvent) { + event.preventDefault(); + const url = ItemUtil.getSearchByKeywordUrl(this.state.type, this.state.keyword); + this.props.history.push(url); + } + + render() { + const { lang } = this.props; + const options = [ + { value: 'all', label: '[en]All[/en][ja]全て[/ja]' }, + { value: 'basic', label: '[en]Title & Keyword[/en][ja]タイトル&キーワード[/ja]' }, + ]; + + Config.XOONIPS_ITEMTYPES.forEach((type) => { + options.push({ value: type, label: Functions.pascalCase(type) }) + }); + return ( +
+ +    + +
+ +      + {Functions.mlang('[en]Advanced[/en][ja]詳細検索[/ja]', lang)} +
+ ); + } +} + +export default withRouter(XooNIpsSearchBlock); \ No newline at end of file diff --git a/src/xoonips/item-type/article/ArticleAdvancedSearch.tsx b/src/xoonips/item-type/article/ArticleAdvancedSearch.tsx new file mode 100644 index 0000000..f2eb217 --- /dev/null +++ b/src/xoonips/item-type/article/ArticleAdvancedSearch.tsx @@ -0,0 +1,153 @@ +import React from 'react'; +import Functions from '../../../functions'; +import { ItemBasicLangs } from '../../lib/ItemUtil'; +import AdvancedSearchBase, { AdvancedSearchBaseProps } from '../lib/AdvancedSearchBase'; +import ArticleUtil from './ArticleUtil'; + +class ArticleAdvancedSearch extends AdvancedSearchBase { + + constructor(props: AdvancedSearchBaseProps) { + super(props); + this.type = ArticleUtil.type; + this.title = ArticleUtil.label; + const now = new Date(); + const year = String(now.getFullYear()); + const month = String(now.getMonth() + 1); + const mday = String(now.getDate()); + this.state.values['doi'] = ''; + this.state.values['title'] = ''; + this.state.values['author'] = ''; + this.state.values['affiliation'] = ''; + this.state.values['journal_name'] = ''; + this.state.values['journal_volume'] = ''; + this.state.values['publication_year'] = ''; + this.state.values['publication_month'] = ''; + this.state.values['journal_page'] = ''; + this.state.values['journal_publisher'] = ''; + this.state.values['meeting_name'] = ''; + this.state.values['meeting_place'] = ''; + this.state.values['meeting_date_from_year'] = year; + this.state.values['meeting_date_from_month'] = month; + this.state.values['meeting_date_from_mday'] = mday; + this.state.values['meeting_date_to_year'] = year; + this.state.values['meeting_date_to_month'] = month; + this.state.values['meeting_date_to_mday'] = mday; + this.state.values['meeting_program_no'] = ''; + this.state.values['journal_page'] = ''; + this.state.values['journal_page'] = ''; + this.state.values['journal_page'] = ''; + this.state.values['lang'] = ''; + this.state.values['file.article_fulltext_file.original_file_name'] = ''; + this.state.values['date_from_year'] = year; + this.state.values['date_from_month'] = month; + this.state.values['date_from_mday'] = mday; + this.state.values['date_to_year'] = year; + this.state.values['date_to_month'] = month; + this.state.values['date_to_mday'] = mday; + this.state.values['keyword'] = ''; + this.setIgnoreKey('meeting_date_from_year'); + this.setIgnoreKey('meeting_date_from_month'); + this.setIgnoreKey('meeting_date_from_mday'); + this.setIgnoreKey('meeting_date_to_year'); + this.setIgnoreKey('meeting_date_to_month'); + this.setIgnoreKey('meeting_date_to_mday'); + this.setIgnoreKey('date_from_year'); + this.setIgnoreKey('date_from_month'); + this.setIgnoreKey('date_from_mday'); + this.setIgnoreKey('date_to_year'); + this.setIgnoreKey('date_to_month'); + this.setIgnoreKey('date_to_mday'); + } + + renderJournal() { + const { lang } = this.props; + return + + + + + + + + + + + + + + + + + + + + + + + + + + +
{Functions.mlang('[en]Name[/en][ja]名称[/ja]', lang)}{this.renderFieldInputText('journal_name', 50)}
{Functions.mlang('[en]Volume[/en][ja]巻[/ja]', lang)}{this.renderFieldInputText('journal_volume', 50)}
{Functions.mlang('[en]Publication Year[/en][ja]発行年[/ja]', lang)}{this.renderFieldInputText('publication_year', 10)}
{Functions.mlang('[en]Publication Month[/en][ja]発行月[/ja]', lang)}{this.renderFieldInputText('publication_month', 10)}
{Functions.mlang('[en]Page[/en][ja]ページ[/ja]', lang)}{this.renderFieldInputText('journal_page', 10)}
{Functions.mlang('[en]Publisher[/en][ja]出版者[/ja]', lang)}{this.renderFieldInputText('journal_publisher', 50)}
; + } + + renderMeeting() { + const { lang } = this.props; + return + + + + + + + + + + + + + + + + + + + + + + +
{Functions.mlang('[en]Name[/en][ja]名称[/ja]', lang)}{this.renderFieldInputText('meeting_name', 50)}
{Functions.mlang('[en]Place[/en][ja]場所[/ja]', lang)}{this.renderFieldInputText('meeting_place', 50)}
{Functions.mlang('[en]Date (From)[/en][ja]日付 (自)[/ja]', lang)}{this.renderFieldDate('', 'meeting_date_from_year', 'meeting_date_from_month', 'meeting_date_from_mday')}
{Functions.mlang('[en]Date (To)[/en][ja]日付 (至)[/ja]', lang)}{this.renderFieldDate('', 'meeting_date_to_year', 'meeting_date_to_month', 'meeting_date_to_mday')}
{Functions.mlang('[en]Program Num[/en][ja]発表番号[/ja]', lang)}{this.renderFieldInputText('meeting_program_no', 50)}
; + } + + renderDate() { + return ( + <> +
+ {this.renderFieldDate('From', 'date_from_year', 'date_from_month', 'date_from_mday')} + +
+
+ {this.renderFieldDate('To', 'date_to_year', 'date_to_month', 'date_to_mday')} +
+ + ); + } + + getRows() { + const rows = [ + { label: 'ID', value: this.renderFieldInputText('doi', 50) }, + { label: '[en]Title[/en][ja]タイトル[/ja]', value: this.renderFieldInputText('title', 50) }, + { label: '[en]Author[/en][ja]著者[/ja]', value: this.renderFieldInputText('author', 50) }, + { label: '[en]Affiliation[/en][ja]所属[/ja]', value: this.renderFieldInputText('affiliation', 50) }, + { label: '[en]Journal[/en][ja]ジャーナル[/ja]', value: this.renderJournal() }, + { label: '[en]Meeting[/en][ja]会議[/ja]', value: this.renderMeeting() }, + { label: '[en]Language[/en][ja]言語[/ja]', value: this.renderFieldSelect('lang', ItemBasicLangs) }, + { label: '[en]Full Text[/en][ja]本文ファイル[/ja]', value: this.renderFieldInputText('file.article_fulltext_file.original_file_name', 50) }, + { label: '[en]Publication Date[/en][ja]発行日[/ja]', value: this.renderDate() }, + { label: '[en]Keywords[/en][ja]キーワード[/ja]', value: this.renderFieldInputText('keyword', 50) }, + ]; + return rows; + } +} + +export default ArticleAdvancedSearch; \ No newline at end of file diff --git a/src/xoonips/item-type/article/ArticleDetail.tsx b/src/xoonips/item-type/article/ArticleDetail.tsx new file mode 100644 index 0000000..f2f8b83 --- /dev/null +++ b/src/xoonips/item-type/article/ArticleDetail.tsx @@ -0,0 +1,124 @@ +import React from 'react'; +import Functions from '../../../functions'; +import { ItemArticle } from '../../lib/ItemUtil'; +import DetailBase from '../lib/DetailBase'; +import ItemTypeField from '../lib/field'; +import ArticleUtil from './ArticleUtil'; + +class ArticleDetail extends DetailBase { + + renderAuthor(item: ItemArticle) { + const { lang } = this.props; + return + + {item.author.map((author) => { + const name = author.replace(/(?:\(\d+\))+$/g, ''); + const num = author === name ? '' : author.replace(/^.+?((?:\(\d+\))+)$/, '$1').replace(/\)\(/g, ', ').replace(/[()]/g, ''); + return ; + })} + +
{Functions.mlang(name, lang)}{num !== '' && {num}}
; + } + + renderAffiliation(item: ItemArticle) { + const { lang } = this.props; + return + + {item.affiliation.map((affiliation) => { + const name = affiliation.replace(/^(?:\(\d+\))+/g, ''); + const num = affiliation === name ? '' : affiliation.replace(/^((?:\(\d+\))+).+?$/, '$1').replace(/\)\(/g, ', ').replace(/[()]/g, ''); + return ; + })} + +
{num !== '' && {num} }{Functions.mlang(name, lang)}
; + } + + renderJournal(item: ItemArticle) { + const { lang } = this.props; + return + + + + + + + + + + + + + + + + + + + + + + + + + + +
{Functions.mlang('[en]Name[/en][ja]名称[/ja]', lang)}: {Functions.mlang(item.journal_name, lang)}
{Functions.mlang('[en]Volume[/en][ja]巻[/ja]', lang)}: {Functions.mlang(item.journal_volume, lang)}
{Functions.mlang('[en]Publication Year[/en][ja]発行年[/ja]', lang)}: {Functions.mlang(item.publication_year.toString(), lang)}
{Functions.mlang('[en]Publication Month[/en][ja]発行月[/ja]', lang)}: {Functions.mlang(item.publication_month.toString(), lang)}
{Functions.mlang('[en]Page[/en][ja]ページ[/ja]', lang)}: {Functions.mlang(item.journal_page, lang)}
{Functions.mlang('[en]Publisher[/en][ja]出版者[/ja]', lang)}: {Functions.mlang(item.journal_publisher, lang)}
; + } + + renderMeeting(item: ItemArticle) { + const { lang } = this.props; + return + + + + + + + + + + + + + + + + + + + + + + +
{Functions.mlang('[en]Name[/en][ja]名称[/ja]', lang)}: {Functions.mlang(item.meeting_name, lang)}
{Functions.mlang('[en]Place[/en][ja]場所[/ja]', lang)}: {Functions.mlang(item.meeting_place, lang)}
{Functions.mlang('[en]Date (From)[/en][ja]日付 (自)[/ja]', lang)}:
{Functions.mlang('[en]Date (To)[/en][ja]日付 (至)[/ja]', lang)}:
{Functions.mlang('[en]Program Num[/en][ja]発表番号[/ja]', lang)}: {Functions.mlang(item.meeting_program_no, lang)}
; + } + + getFields() { + const { lang } = this.props; + const item = this.props.item as ItemArticle; + const doi = ArticleUtil.getDOI(item.doi); + const fields = [ + { label: '[en]Item Type[/en][ja]アイテムタイプ[/ja]', value: item.item_type_display_name }, + { label: 'ID', value: doi !== '' ? doi:{doi} : item.doi }, + { label: '[en]Title[/en][ja]タイトル[/ja]', value: Functions.mlang(item.title, lang) }, + { label: '[en]Author[/en][ja]著者[/ja]', value: this.renderAuthor(item) }, + { label: '[en]Affiliation[/en][ja]所属[/ja]', value: this.renderAffiliation(item) }, + { label: '[en]Journal[/en][ja]ジャーナル[/ja]', value: this.renderJournal(item) }, + { label: '[en]Meeting[/en][ja]会議[/ja]', value: this.renderMeeting(item) }, + { label: '[en]Language[/en][ja]言語[/ja]', value: }, + { label: '[en]Full Text[/en][ja]本文[/ja]', value: }, + { label: 'Rights', value: }, + { label: '[en]Release Date[/en][ja]本公開日[/ja]', value: }, + { label: '[en]Keyword[/en][ja]キーワード[/ja]', value: }, + { label: '[en]Related item[/en][ja]関連アイテム[/ja]', value: }, + { label: '[en]Index[/en][ja]インデックス[/ja]', value: }, + { label: '[en]Item Owner[/en][ja]アイテム所有者[/ja]', value: }, + { label: '[en]Registered Date[/en][ja]登録日[/ja]', value: }, + { label: '[en]Last Update[/en][ja]最終更新日[/ja]', value: }, + { label: '[en]Change Log[/en][ja]更新履歴[/ja]', value: }, + ]; + return fields; + } +} + +export default ArticleDetail; \ No newline at end of file diff --git a/src/xoonips/item-type/article/ArticleList.tsx b/src/xoonips/item-type/article/ArticleList.tsx new file mode 100644 index 0000000..b52c042 --- /dev/null +++ b/src/xoonips/item-type/article/ArticleList.tsx @@ -0,0 +1,35 @@ +import React from 'react'; +import { Link } from 'react-router-dom'; +import Functions from '../../../functions'; +import { ItemArticle } from '../../lib/ItemUtil'; +import ListBase, { ListBaseProps } from '../lib/ListBase'; +import ArticleUtil from './ArticleUtil'; + +class ArticleList extends ListBase { + + constructor(props: ListBaseProps) { + super(props); + this.label = ArticleUtil.label; + this.icon = ArticleUtil.icon; + } + + renderBody() { + const { lang } = this.props; + const item = this.props.item as ItemArticle; + const authors = item.author.map((author, i) => { + return {i > 0 && ', '}{Functions.mlang(author.replace(/(?:\(\d+\))+$/, ''), lang)} + }); + const doi = ArticleUtil.getDOI(item.doi); + return ( +
+
{Functions.mlang(item.title, lang)}
+
{authors}
+
{Functions.mlang(item.journal_name, lang)} ({item.publication_year})
+
{Functions.mlang(item.journal_publisher, lang)}
+ {doi !== '' && } +
+ ); + } +} + +export default ArticleList; \ No newline at end of file diff --git a/src/xoonips/item-type/article/ArticleTop.tsx b/src/xoonips/item-type/article/ArticleTop.tsx new file mode 100644 index 0000000..0536c50 --- /dev/null +++ b/src/xoonips/item-type/article/ArticleTop.tsx @@ -0,0 +1,15 @@ +import TopBase, { TopBaseProps } from '../lib/TopBase'; +import ArticleUtil from './ArticleUtil'; + +class ArticleTop extends TopBase { + + constructor(props: TopBaseProps) { + super(props); + this.type = ArticleUtil.type; + this.label = ArticleUtil.label; + this.icon = ArticleUtil.icon; + this.description = ArticleUtil.description; + } +} + +export default ArticleTop; \ No newline at end of file diff --git a/src/xoonips/item-type/article/ArticleUtil.tsx b/src/xoonips/item-type/article/ArticleUtil.tsx new file mode 100644 index 0000000..1fb17ab --- /dev/null +++ b/src/xoonips/item-type/article/ArticleUtil.tsx @@ -0,0 +1,16 @@ +import icon from './icon.png'; + +const ArticleUtil = { + type: 'article', + label: 'Aritcle', + description: '[en]Article[/en][ja]アーティクル[/ja]', + icon, + getDOI: (id:string): string => { + if (/^aini201[4-8]\..*$/.test(id)) { + return '10.14931/' + id; + } + return ''; + } +}; + +export default ArticleUtil; \ No newline at end of file diff --git a/src/xoonips/item-type/article/icon.png b/src/xoonips/item-type/article/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..7d7c48a73559c393af1fcb5adcec208608e53d7b GIT binary patch literal 428 zcmV;d0aN~oP)3EEM;aUC=_ds?cVp1QVIcK)*0&(krsCxF5zrs-m2v+oMnS3o!8dW zsrBi4G>ydbR?Yliuzjm{IUDYLvV!;Sn z?IUkT2+HoCo<(2I8{!(l^-Gza-P(_y{AqySvt84%SJekL^6WcYjsGXn4Y}HP+cz8N zW-AL!Q)V|w%e59Y^2W99+N^>Z|LhZn#a=gKi9L@dGROXrU8QBs2NU-$); W)fwWO%C0d00000 + + + {Functions.mlang('[en]Version[/en][ja]バージョン[/ja]', lang)} + {this.renderFieldInputText('version', 30)} + + + {Functions.mlang('[en]Format[/en][ja]フォーマット[/ja]', lang)} + {this.renderFieldInputText('format', 30)} + + + {Functions.mlang('[en]Variation[/en][ja]バリエーション[/ja]', lang)} + {this.renderFieldInputText('variation', 30)} + + + ; + } + + getRows() { + const rows = [ + { label: 'ID', value: this.renderFieldInputText('doi', 50) }, + { label: '[en]Title[/en][ja]タイトル[/ja]', value: this.renderFieldInputText('title', 50) }, + { label: '[en]Description[/en][ja]概要[/ja]', value: this.renderFieldInputText('description', 50) }, + { label: '[en]Language[/en][ja]言語[/ja]', value: this.renderFieldSelect('lang', ItemBasicLangs) }, + { label: '[en]Files[/en][ja]ファイル[/ja]', value: this.renderFieldInputText('file.generaldata_file.original_file_name', 50) }, + { label: '[en]Creator[/en][ja]作成者[/ja]', value: this.renderFieldInputText('creator', 50) }, + { label: '[en]Affiliation[/en][ja]所属[/ja]', value: this.renderFieldInputText('affiliation', 50) }, + { label: '[en]Publication Date[/en][ja]発行日[/ja]', value: this.renderFieldDate('', 'publication_year', 'publication_month', 'publication_mday') }, + { label: '[en]Publisher[/en][ja]発行者[/ja]', value: this.renderFieldInputText('publisher', 50) }, + { label: '[en]Edition[/en][ja]版[/ja]', value: this.renderEdition() }, + { label: '[en]Relation[/en][ja]関連リンク[/ja]', value: this.renderFieldInputText('relation', 50) }, + { label: '[en]Keywords[/en][ja]キーワード[/ja]', value: this.renderFieldInputText('keyword', 50) }, + ]; + return rows; + } +} + +export default GeneralDataAdvancedSearch; \ No newline at end of file diff --git a/src/xoonips/item-type/generaldata/GeneralDataDetail.tsx b/src/xoonips/item-type/generaldata/GeneralDataDetail.tsx new file mode 100644 index 0000000..5693820 --- /dev/null +++ b/src/xoonips/item-type/generaldata/GeneralDataDetail.tsx @@ -0,0 +1,59 @@ +import React from 'react'; +import Functions from '../../../functions'; +import { ItemGeneralData } from '../../lib/ItemUtil'; +import DetailBase from '../lib/DetailBase'; +import ItemTypeField from '../lib/field'; + +class GeneralDataDetail extends DetailBase { + + renderEdition(item: ItemGeneralData) { + const { lang } = this.props; + return + + + + + + + + + + + + + + +
{Functions.mlang('[en]Version[/en][ja]バージョン[/ja]', lang)}{Functions.mlang(item.version, lang)}
{Functions.mlang('[en]Format[/en][ja]フォーマット[/ja]', lang)}{Functions.mlang(item.format, lang)}
{Functions.mlang('[en]Variation[/en][ja]バリエーション[/ja]', lang)}{Functions.mlang(item.variation, lang)}
+ } + + getFields() { + const { lang } = this.props; + const item = this.props.item as ItemGeneralData; + const fields = [ + { label: '[en]Item Type[/en][ja]アイテムタイプ[/ja]', value: item.item_type_display_name }, + { label: 'ID', value: item.doi }, + { label: '[en]Title[/en][ja]タイトル[/ja]', value: Functions.mlang(item.title, lang) }, + { label: '[en]Description[/en][ja]概要[/ja]', value: }, + { label: '[en]Preview[/en][ja]プレビュー[/ja]', value: }, + { label: '[en]Language[/en][ja]言語[/ja]', value: }, + { label: '[en]Files[/en][ja]ファイル[/ja]', value: }, + { label: 'Rights', value: }, + { label: '[en]Creator[/en][ja]作成者[/ja]', value: }, + { label: '[en]Affiliation[/en][ja]所属[/ja]', value: }, + { label: '[en]Publication Date[/en][ja]発行日[/ja]', value: }, + { label: '[en]Publisher[/en][ja]発行者[/ja]', value: Functions.mlang(item.publisher, lang) }, + { label: '[en]Edition[/en][ja]版[/ja]', value: this.renderEdition(item) }, + { label: '[en]Related Links[/en][ja]関連リンク[/ja]', value: {relation})} /> }, + { label: '[en]Keyword[/en][ja]キーワード[/ja]', value: }, + { label: '[en]Related item[/en][ja]関連アイテム[/ja]', value: }, + { label: '[en]Index[/en][ja]インデックス[/ja]', value: }, + { label: '[en]Item Owner[/en][ja]アイテム所有者[/ja]', value: }, + { label: '[en]Registered Date[/en][ja]登録日[/ja]', value: }, + { label: '[en]Last Update[/en][ja]最終更新日[/ja]', value: }, + { label: '[en]Change Log[/en][ja]更新履歴[/ja]', value: }, + ]; + return fields; + } +} + +export default GeneralDataDetail; \ No newline at end of file diff --git a/src/xoonips/item-type/generaldata/GeneralDataList.tsx b/src/xoonips/item-type/generaldata/GeneralDataList.tsx new file mode 100644 index 0000000..d5e1a95 --- /dev/null +++ b/src/xoonips/item-type/generaldata/GeneralDataList.tsx @@ -0,0 +1,58 @@ +import React from 'react'; +import { Link } from 'react-router-dom'; +import Functions from '../../../functions'; +import ItemUtil, { ItemGeneralData } from '../../lib/ItemUtil'; +import ListBase, { ListBaseProps } from '../lib/ListBase'; +import GeneralDataUtil from './GeneralDataUtil'; +import FileSize from '../lib/field/FileSize'; + +class GeneralDataList extends ListBase { + + constructor(props: ListBaseProps) { + super(props); + this.label = 'General Data'; + this.icon = GeneralDataUtil.iconImage; + } + + renderIcon() { + const { lang } = this.props; + const item = this.props.item as ItemGeneralData; + const data = item.file.filter((value) => { + return value.file_type_name === 'preview'; + }); + let imgSrc = this.icon; + let imgAlt = this.label; + if (data.length > 0) { + const preview = data.pop(); + if ('undefined' !== typeof preview) { + imgSrc = ItemUtil.getPreviewFileUrl(preview); + if ('' !== preview.caption) { + imgAlt = Functions.mlang(preview.caption, lang); + } + } + } + return {imgAlt}; + } + + renderBody() { + const { lang } = this.props; + const item = this.props.item as ItemGeneralData; + const authors = item.creator.map((author, i) => { + return {i > 0 && ', '}{Functions.mlang(author, lang)} + }); + const files = item.file.filter((value) => value.file_type_name === 'generaldata_file').map((value) => { + return
- {value.original_file_name} ()
+ }); + const pubdate = new Date(item.publication_year, item.publication_month - 1, item.publication_mday); + return ( +
+
{Functions.mlang(item.title, lang)}
+
{authors}
+
{files}
+
{Functions.formatDate(pubdate.getTime() / 1000, 'MMM Do YYYY')}
+
+ ); + } +} + +export default GeneralDataList; \ No newline at end of file diff --git a/src/xoonips/item-type/generaldata/GeneralDataTop.tsx b/src/xoonips/item-type/generaldata/GeneralDataTop.tsx new file mode 100644 index 0000000..48d50c9 --- /dev/null +++ b/src/xoonips/item-type/generaldata/GeneralDataTop.tsx @@ -0,0 +1,15 @@ +import TopBase, { TopBaseProps } from '../lib/TopBase'; +import GeneralDataUtil from './GeneralDataUtil'; + +class GeneralDataTop extends TopBase { + + constructor(props: TopBaseProps) { + super(props); + this.type = 'generaldata'; + this.label = 'General Data and Documents'; + this.icon = GeneralDataUtil.iconImage; + this.description = '[en]General Data and Documents[/en][ja]汎用データ・ドキュメント[/ja]'; + } +} + +export default GeneralDataTop; \ No newline at end of file diff --git a/src/xoonips/item-type/generaldata/GeneralDataUtil.tsx b/src/xoonips/item-type/generaldata/GeneralDataUtil.tsx new file mode 100644 index 0000000..06cde0d --- /dev/null +++ b/src/xoonips/item-type/generaldata/GeneralDataUtil.tsx @@ -0,0 +1,7 @@ +import iconImage from './icon.png'; + +const GeneralDataUtil = { + iconImage +} + +export default GeneralDataUtil; \ No newline at end of file diff --git a/src/xoonips/item-type/generaldata/icon.png b/src/xoonips/item-type/generaldata/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..67eaad53a28c8441bc865a3c515cd26fce52c281 GIT binary patch literal 326 zcmV-M0lEH(P)HFYjUHD2qPQGcw9Ii)U|fLJuidE)|To^pZVu7d { + const { lang, type } = props; + switch (type) { + case 'journal': + return ; + case 'article': + return ; + case 'generaldata': + return ; + default: + return null; + } +} + +const List = (props: ListBaseProps) => { + const { item } = props; + switch (item.item_type_name) { + case 'journal': + return ; + case 'article': + return ; + case 'generaldata': + return ; + default: + return null; + } +} + +const Detail = (props: DetailBaseProps) => { + const { item } = props; + switch (item.item_type_name) { + case 'journal': + return ; + case 'article': + return ; + case 'generaldata': + return ; + default: + return null; + } +} + +interface AdvancedSearchProps extends AdvancedSearchBaseProps { + type: string; +} +const AdvancedSearch = (props: AdvancedSearchProps) => { + const { lang, type, query } = props; + switch (type) { + case 'journal': + return ; + case 'article': + return ; + case 'generaldata': + return ; + default: + return null; + } +} + +const ItemType = { + Top, + List, + Detail, + AdvancedSearch +} + +export default ItemType; \ No newline at end of file diff --git a/src/xoonips/item-type/journal/JournalAdvancedSearch.tsx b/src/xoonips/item-type/journal/JournalAdvancedSearch.tsx new file mode 100644 index 0000000..b65b59a --- /dev/null +++ b/src/xoonips/item-type/journal/JournalAdvancedSearch.tsx @@ -0,0 +1,73 @@ +import React from 'react'; +import { ItemBasicLangs, ItemJournalPublisherLocations } from '../../lib/ItemUtil'; +import AdvancedSearchBase, { AdvancedSearchBaseProps } from '../lib/AdvancedSearchBase'; +import JournalUtil from './JournalUtil'; + +class JournalAdvancedSearch extends AdvancedSearchBase { + + constructor(props: AdvancedSearchBaseProps) { + super(props); + this.type = JournalUtil.type; + this.title = JournalUtil.label; + const now = new Date(); + const year = String(now.getFullYear()); + const month = String(now.getMonth() + 1); + const mday = String(now.getDate()); + this.state.values['doi'] = ''; + this.state.values['title'] = ''; + this.state.values['journal'] = ''; + this.state.values['volume'] = ''; + this.state.values['publication_year'] = ''; + this.state.values['publication_month'] = ''; + this.state.values['publisher'] = ''; + this.state.values['publisher_location'] = ''; + this.state.values['relation'] = ''; + this.state.values['lang'] = ''; + this.state.values['keyword'] = ''; + this.state.values['date_from_year'] = year; + this.state.values['date_from_month'] = month; + this.state.values['date_from_mday'] = mday; + this.state.values['date_to_year'] = year; + this.state.values['date_to_month'] = month; + this.state.values['date_to_mday'] = mday; + this.setIgnoreKey('date_from_year'); + this.setIgnoreKey('date_from_month'); + this.setIgnoreKey('date_from_mday'); + this.setIgnoreKey('date_to_year'); + this.setIgnoreKey('date_to_month'); + this.setIgnoreKey('date_to_mday'); + } + + renderDate() { + return ( + <> +
+ {this.renderFieldDate('From', 'date_from_year', 'date_from_month', 'date_from_mday')} + +
+
+ {this.renderFieldDate('To', 'date_to_year', 'date_to_month', 'date_to_mday')} +
+ + ); + } + + getRows() { + const rows = [ + { label: 'ID', value: this.renderFieldInputText('doi', 50) }, + { label: '[en]Title[/en][ja]タイトル[/ja]', value: this.renderFieldInputText('title', 50) }, + { label: '[en]Journal[/en][ja]ジャーナル名[/ja]', value: this.renderFieldInputText('journal', 50) }, + { label: '[en]Volume[/en][ja]巻[/ja]', value: this.renderFieldInputText('volume', 50) }, + { label: '[en]Publication Year[/en][ja]発行年[/ja]', value: this.renderFieldInputText('publication_year', 10) }, + { label: '[en]Publication Month[/en][ja]発行月[/ja]', value: this.renderFieldInputText('publication_month', 10) }, + { label: '[en]Publisher[/en][ja]出版者[/ja]', value: this.renderFieldInputText('publisher', 50) }, + { label: '[en]Location[/en][ja]出版地[/ja]', value: this.renderFieldSelect('publisher_location', ItemJournalPublisherLocations) }, + { label: '[en]Language[/en][ja]言語[/ja]', value: this.renderFieldSelect('lang', ItemBasicLangs) }, + { label: '[en]Publication Date[/en][ja]発行日[/ja]', value: this.renderDate() }, + { label: '[en]Keywords[/en][ja]キーワード[/ja]', value: this.renderFieldInputText('keyword', 50) }, + ]; + return rows; + } +} + +export default JournalAdvancedSearch; \ No newline at end of file diff --git a/src/xoonips/item-type/journal/JournalDetail.tsx b/src/xoonips/item-type/journal/JournalDetail.tsx new file mode 100644 index 0000000..7403edb --- /dev/null +++ b/src/xoonips/item-type/journal/JournalDetail.tsx @@ -0,0 +1,42 @@ +import React from 'react'; +import Functions from '../../../functions'; +import { ItemJournal, ItemJournalPublisherLocations } from '../../lib/ItemUtil'; +import DetailBase from '../lib/DetailBase'; +import ItemTypeField from '../lib/field'; +import JournalUtil from './JournalUtil'; + +class JournalDetail extends DetailBase { + + getFields() { + const { lang } = this.props; + const item = this.props.item as ItemJournal; + const doi = JournalUtil.getDOI(item.doi); + const location = ItemJournalPublisherLocations.find((value) => value.type === item.publisher_location) || { type: '', label: '' }; + const fields = [ + { label: '[en]Item Type[/en][ja]アイテムタイプ[/ja]', value: item.item_type_display_name }, + { label: 'ID', value: doi !== '' ? doi:{doi} : item.doi }, + { label: '[en]Title[/en][ja]タイトル[/ja]', value: Functions.mlang(item.title, lang) }, + { label: '[en]Journal[/en][ja]ジャーナル名[/ja]', value: Functions.mlang(item.journal, lang) }, + { label: '[en]Volume[/en][ja]巻[/ja]', value: Functions.mlang(item.volume, lang) }, + { label: '[en]Publication Year[/en][ja]発行年[/ja]', value: Functions.mlang(item.publication_year.toString(), lang) }, + { label: '[en]Publication Month[/en][ja]発行月[/ja]', value: Functions.mlang(item.publication_month.toString(), lang) }, + { label: '[en]Publisher[/en][ja]出版者[/ja]', value: Functions.mlang(item.publisher, lang) }, + { label: '[en]Location[/en][ja]出版地[/ja]', value: Functions.mlang(location.label, lang) }, + { label: '[en]Language[/en][ja]言語[/ja]', value: }, + { label: '[en]Full Text[/en][ja]本文[/ja]', value: }, + { label: 'Rights', value: }, + { label: '[en]Release Date[/en][ja]本公開日[/ja]', value: }, + { label: '[en]Keyword[/en][ja]キーワード[/ja]', value: }, + { label: '[en]Note[/en][ja]補足[/ja]', value: }, + { label: '[en]Related item[/en][ja]関連アイテム[/ja]', value: }, + { label: '[en]Index[/en][ja]インデックス[/ja]', value: }, + { label: '[en]Item Owner[/en][ja]アイテム所有者[/ja]', value: }, + { label: '[en]Registered Date[/en][ja]登録日[/ja]', value: }, + { label: '[en]Last Update[/en][ja]最終更新日[/ja]', value: }, + { label: '[en]Change Log[/en][ja]更新履歴[/ja]', value: }, + ]; + return fields; + } +} + +export default JournalDetail; \ No newline at end of file diff --git a/src/xoonips/item-type/journal/JournalList.tsx b/src/xoonips/item-type/journal/JournalList.tsx new file mode 100644 index 0000000..67d5416 --- /dev/null +++ b/src/xoonips/item-type/journal/JournalList.tsx @@ -0,0 +1,30 @@ +import React from 'react'; +import { Link } from 'react-router-dom'; +import Functions from '../../../functions'; +import { ItemJournal } from '../../lib/ItemUtil'; +import ListBase, { ListBaseProps } from '../lib/ListBase'; +import JournalUtil from './JournalUtil'; + +class JournalList extends ListBase { + + constructor(props: ListBaseProps) { + super(props); + this.label = JournalUtil.label; + this.icon = JournalUtil.icon; + } + + renderBody() { + const { lang } = this.props; + const item = this.props.item as ItemJournal; + const doi = JournalUtil.getDOI(item.doi); + return ( +
+
{Functions.mlang(item.title, lang)} ({item.publication_year})
+
{Functions.mlang(item.publisher, lang)}
+ {doi !== '' && } +
+ ); + } +} + +export default JournalList; \ No newline at end of file diff --git a/src/xoonips/item-type/journal/JournalTop.tsx b/src/xoonips/item-type/journal/JournalTop.tsx new file mode 100644 index 0000000..fcecc8d --- /dev/null +++ b/src/xoonips/item-type/journal/JournalTop.tsx @@ -0,0 +1,15 @@ +import TopBase, { TopBaseProps } from '../lib/TopBase'; +import JournalUtil from './JournalUtil'; + +class JournalTop extends TopBase { + + constructor(props: TopBaseProps) { + super(props); + this.type = JournalUtil.type; + this.label = JournalUtil.label; + this.icon = JournalUtil.icon; + this.description = JournalUtil.description; + } +} + +export default JournalTop; \ No newline at end of file diff --git a/src/xoonips/item-type/journal/JournalUtil.tsx b/src/xoonips/item-type/journal/JournalUtil.tsx new file mode 100644 index 0000000..1462a24 --- /dev/null +++ b/src/xoonips/item-type/journal/JournalUtil.tsx @@ -0,0 +1,16 @@ +import icon from './icon.png'; + +const JournalUtil = { + type: 'journal', + label: 'Journal', + description: '[en]Journal[/en][ja]ジャーナル・定期刊行物[/ja]', + icon, + getDOI: (id:string): string => { + if (/^aini201[7-8]$/.test(id)) { + return '10.14931/' + id; + } + return ''; + } +} + +export default JournalUtil; \ No newline at end of file diff --git a/src/xoonips/item-type/journal/icon.png b/src/xoonips/item-type/journal/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..287fdd9ece9d9175c762c912999fbb0092e26c21 GIT binary patch literal 345 zcmV-f0jB5q@xP*BlS zU)HC+*R#szfPmRRK++%}(`$ME|Nr7}aQWZg_0P}z@9)q&L;<~}B>(^b0d!JMQvg8b z*k%9#0IEquK~#7F?b1bJ#UKHiGmsBhFnCJdx#tX?fP!;|Ay(VEi|~R=X}U77 zaqeaUPxTewG%!RWUm;?7#gFxndMO`r!B~DDpLjgy`R19uU~@4&Yv0xdxaxMt!_04A rvXWxHd88aj9Mik)c@<(+(>J>U^>!vq*qVK`00000NkvXXu0mjfNoAf6 literal 0 HcmV?d00001 diff --git a/src/xoonips/item-type/journal/index.tsx b/src/xoonips/item-type/journal/index.tsx new file mode 100644 index 0000000..fd540c8 --- /dev/null +++ b/src/xoonips/item-type/journal/index.tsx @@ -0,0 +1,13 @@ +import JournalTop from './JournalTop'; +import JournalList from './JournalList'; +import JournalDetail from './JournalDetail'; +import JournalAdvancedSearch from './JournalAdvancedSearch'; + +const ItemTypeJournal = { + Top: JournalTop, + List: JournalList, + Detail: JournalDetail, + AdvancedSearch: JournalAdvancedSearch, +}; + +export default ItemTypeJournal; \ No newline at end of file diff --git a/src/xoonips/item-type/lib/AdvancedSearchBase.tsx b/src/xoonips/item-type/lib/AdvancedSearchBase.tsx new file mode 100644 index 0000000..53b0181 --- /dev/null +++ b/src/xoonips/item-type/lib/AdvancedSearchBase.tsx @@ -0,0 +1,190 @@ +import React, { ChangeEvent, Component } from 'react'; +import { MultiLang } from '../../../config'; +import Functions from '../../../functions'; +import AdvancedSearchQuery from '../../lib/AdvancedSearchQuery'; +import { ItemSelectTypes } from '../../lib/ItemUtil'; + +export interface AdvancedSearchBaseProps { + lang: MultiLang; + query: AdvancedSearchQuery; +} + +interface State { + show: boolean; + values: any; +} + +class AdvancedSearchBase extends Component { + + protected type: string = 'base' + protected title: string = 'Base'; + protected query: AdvancedSearchQuery; + protected ignoreKeys: string[] = []; + + constructor(props: AdvancedSearchBaseProps) { + super(props); + this.state = { + show: false, + values: {}, + } + this.query = props.query; + this.handleChangeTitleCheck = this.handleChangeTitleCheck.bind(this); + } + + updateQuery(key: string, value: string) { + if (this.ignoreKeys.includes(key)) { + this.query.delete(this.type, key); + } else { + this.query.set(this.type, key, value); + } + } + + setIgnoreKey(key: string) { + if (!this.ignoreKeys.includes(key)) { + this.ignoreKeys = this.ignoreKeys.concat(key); + } + this.query.delete(this.type, key); + } + + deleteIgnoreKey(key: string) { + if (this.ignoreKeys.includes(key)) { + this.ignoreKeys = this.ignoreKeys.filter((v) => { + return (v !== key); + }); + } + this.query.set(this.type, key, this.state.values[key]); + } + + updateField(key: string, value: string) { + let values = Object.assign({}, this.state.values); + values[key] = value; + this.updateQuery(key, value); + this.setState({ values }); + } + + handleChangeTitleCheck(e: ChangeEvent) { + const show = e.target.checked; + if (show) { + Object.keys(this.state.values).forEach((key) => { + const value = this.state.values[key]; + this.updateQuery(key, value); + }); + } else { + this.query.deleteType(this.type); + } + this.setState({ show }); + } + + getRows(): { label: string, value: JSX.Element }[] { + return []; + } + + renderFieldInputText(key: string, size: number) { + const onChange = (e: ChangeEvent) => { + this.updateField(key, e.target.value); + }; + return ( + + ); + } + + renderFieldSelect(key: string, values: ItemSelectTypes) { + const { lang } = this.props; + const onChange = (e: ChangeEvent) => { + this.updateField(key, e.target.value); + }; + const options = values.map(({ type, label }, i) => { + return ; + }); + return ( + + ); + } + + renderFieldDate(label: string, keyYear: string, keyMonth: string, keyMday: string) { + const onChange = (e: ChangeEvent) => { + if (e.target.checked) { + this.deleteIgnoreKey(keyYear); + keyMonth !== '' && this.deleteIgnoreKey(keyMonth); + keyMday !== '' && this.deleteIgnoreKey(keyMday); + } else { + this.setIgnoreKey(keyYear); + keyMonth !== '' && this.setIgnoreKey(keyMonth); + keyMday !== '' && this.setIgnoreKey(keyMday); + } + }; + const month = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']; + const monthOptions = month.map((value, i) => { + return ; + }) + let mdayOptions: JSX.Element[] = []; + for (let i = 1; i <= 31; i++) { + mdayOptions.push() + } + return ( +
+ + {label.length !== 0 && } + {keyMonth !== '' && + + } + {keyMday !== '' && + + } + this.updateField(keyYear, e.target.value)} /> +
+ ); + } + + renderBody() { + const { lang } = this.props; + if (this.state.show === false) { + return null; + } + const rows = this.getRows(); + const fields = rows.map((value, idx) => { + const evenodd = idx % 2 === 0 ? 'even' : 'odd'; + return ( + + {Functions.mlang(value.label, lang)} + {value.value} + + ); + }); + return ( + + + {fields} + +
+ ); + } + + render() { + return ( +
+ + + + + + +
+ + {this.title} +
+ {this.renderBody()} +
+ ); + } + +} + +export default AdvancedSearchBase; \ No newline at end of file diff --git a/src/xoonips/item-type/lib/DetailBase.tsx b/src/xoonips/item-type/lib/DetailBase.tsx new file mode 100644 index 0000000..470c146 --- /dev/null +++ b/src/xoonips/item-type/lib/DetailBase.tsx @@ -0,0 +1,52 @@ +import React, { Component, ReactNode } from 'react'; +import { MultiLang } from '../../../config'; +import Functions from '../../../functions'; +import { Item } from '../../lib/ItemUtil'; + +export interface DetailBaseField { + label: string; + value: ReactNode; +} + +export interface DetailBaseProps { + lang: MultiLang; + item: Item; + isBaseItem?: boolean; +} + +class DetailBase extends Component { + + getFields(): DetailBaseField[] { + return []; + } + + render() { + const { lang, isBaseItem } = this.props; + const renderField = (label: string, value: ReactNode, idx: number) => { + const evenodd = idx % 2 === 0 ? 'even' : 'odd'; + return ( + + {Functions.mlang(label, lang)} + {value} + + ) + } + let idx = 1; + const elements:JSX.Element[] = []; + this.getFields().forEach((field) => { + if (typeof isBaseItem === 'undefined' || isBaseItem === false || (field.label !== 'Index' && field.label !== '[en]Related to[/en][ja]関連アイテム[/ja]')) { + idx++; + elements.push(renderField(field.label, field.value, idx)); + } + }); + return ( + + + {elements} + +
+ ); + } +} + +export default DetailBase; \ No newline at end of file diff --git a/src/xoonips/item-type/lib/ListBase.tsx b/src/xoonips/item-type/lib/ListBase.tsx new file mode 100644 index 0000000..e907973 --- /dev/null +++ b/src/xoonips/item-type/lib/ListBase.tsx @@ -0,0 +1,54 @@ +import React, { Component } from 'react'; +import { MultiLang } from '../../../config'; +import ItemUtil, { Item } from '../../lib/ItemUtil'; +import SimPFLinkIcon from './field/SimPFLinkIcon'; + +export interface ListBaseProps { + lang: MultiLang; + item: Item +}; + +class ListBase extends Component { + + protected label = ''; + protected icon = ''; + protected url: string; + protected simpfLinkUrl: string; + + constructor(props: ListBaseProps) { + super(props); + this.url = ItemUtil.getUrl(props.item); + this.simpfLinkUrl = ItemUtil.getSimPFLinkUrl(props.item.item_id); + } + + renderIcon() { + return {this.label}; + } + + renderBody() { + return <>; + } + + render() { + const { lang } = this.props; + return ( + + + + + + + + +
+ {this.renderIcon()} + + {this.renderBody()} + + +
+ ); + } +} + +export default ListBase; \ No newline at end of file diff --git a/src/xoonips/item-type/lib/TopBase.tsx b/src/xoonips/item-type/lib/TopBase.tsx new file mode 100644 index 0000000..068d2e5 --- /dev/null +++ b/src/xoonips/item-type/lib/TopBase.tsx @@ -0,0 +1,46 @@ +import React, { Component, Fragment } from 'react'; +import { Link } from 'react-router-dom'; +import { MultiLang } from '../../../config'; +import Functions from '../../../functions'; +import ItemUtil, { ItemSelectTypes } from '../../lib/ItemUtil'; + +export interface TopBaseProps { + lang: MultiLang; +} + +class TopBase extends Component { + + protected type: string = ''; + protected label: string = ''; + protected icon: string = ''; + protected description: string = ''; + protected subTypes: ItemSelectTypes = []; + + render() { + const { lang } = this.props; + const url = ItemUtil.getItemTypeSearchUrl(this.type, ''); + const links = this.subTypes.map(({ type, label }, i) => { + const subUrl = ItemUtil.getItemTypeSearchUrl(this.type, type); + return {i > 0 && ' / '}{label}; + }); + return
+ + + + + + + +
+ {this.label} + + {this.label} +
+
+
{Functions.mlang(this.description, lang)}
+ {links} +
; + } +} + +export default TopBase; \ No newline at end of file diff --git a/src/xoonips/item-type/lib/field/Author.tsx b/src/xoonips/item-type/lib/field/Author.tsx new file mode 100644 index 0000000..9181ca8 --- /dev/null +++ b/src/xoonips/item-type/lib/field/Author.tsx @@ -0,0 +1,21 @@ +import React from 'react'; +import { MultiLang } from '../../../../config'; + +interface Props { + lang: MultiLang; + author: string[]; +} + +const Author = (props: Props) => { + const { author } = props; + if (author.length === 0) { + return null; + } + const elements = author.map((value, idx) => { + const evenodd = idx % 2 === 0 ? 'even' : 'odd'; + return {value}; + }); + return {elements}
; +} + +export default Author; \ No newline at end of file diff --git a/src/xoonips/item-type/lib/field/ChangeLog.tsx b/src/xoonips/item-type/lib/field/ChangeLog.tsx new file mode 100644 index 0000000..f3d9ba9 --- /dev/null +++ b/src/xoonips/item-type/lib/field/ChangeLog.tsx @@ -0,0 +1,28 @@ +import React from 'react'; +import { MultiLang } from '../../../../config'; +import Functions from '../../../../functions'; +import { ItemBasicChangeLog } from '../../../lib/ItemUtil'; +import DateTime from './DateTime'; + +interface Props { + lang: MultiLang; + changelog: ItemBasicChangeLog[]; +} + +const ChangeLog = (props: Props) => { + const { lang, changelog } = props; + if (changelog.length === 0) { + return null; + } + const elements = changelog.map((value, i) => { + return ( + + + {Functions.mlang(value.log, lang)} + + ); + }); + return ({elements}
); +} + +export default ChangeLog; \ No newline at end of file diff --git a/src/xoonips/item-type/lib/field/Contributer.tsx b/src/xoonips/item-type/lib/field/Contributer.tsx new file mode 100644 index 0000000..63261a9 --- /dev/null +++ b/src/xoonips/item-type/lib/field/Contributer.tsx @@ -0,0 +1,18 @@ +import React from 'react'; +import { MultiLang } from '../../../../config'; +import Functions from '../../../../functions'; + +interface Props { + lang: MultiLang; + uname: string; + name: string +} + +const Contributer = (props: Props) => { + const { lang, name, uname } = props; + const unsubscribed = '([en]Unsubscribed User[/en][ja]退会済みユーザ[/ja])'; + const label = uname === '' ? unsubscribed : (name === '' ? uname : name + ' (' + uname + ')'); + return {Functions.mlang(label, lang)}; +} + +export default Contributer; \ No newline at end of file diff --git a/src/xoonips/item-type/lib/field/CreativeCommons.tsx b/src/xoonips/item-type/lib/field/CreativeCommons.tsx new file mode 100644 index 0000000..b545f02 --- /dev/null +++ b/src/xoonips/item-type/lib/field/CreativeCommons.tsx @@ -0,0 +1,56 @@ +import React from 'react'; +import { MultiLang } from '../../../../config'; + +export type CreativeCommonsType = 'by' | 'by-nc' | 'by-nc-nd' | 'by-nc-sa' | 'by-nd' | 'by-sa'; + +export const getCreativeCommonsType = (ccCommercialUse: number, ccModification: number): CreativeCommonsType => { + const cc = ccCommercialUse * 10 + ccModification; + switch (cc) { + case 0: + return 'by-nc-nd'; + case 1: + return 'by-nc-sa'; + case 2: + return 'by-nc'; + case 10: + return 'by-nd'; + case 11: + return 'by-sa'; + case 12: + default: + return 'by'; + } +} + +interface Props { + lang: MultiLang; + type: CreativeCommonsType; +} + +const CreativeCommons = (props: Props) => { + const { type } = props; + const url = 'http://creativecommons.org/licenses/' + type + '/4.0/'; + const logoUrl = 'https://i.creativecommons.org/l/' + type + '/4.0/88x31.png'; + const labels = { + by: 'Attribution', + nc: 'NonCommercial', + nd: 'NoDerivatives', + sa: 'ShareAlike', + } + const label = type.split('-').map((value) => { + const prop = value as 'by' | 'nc' | 'nd' | 'sa'; + return labels[prop]; + }).join('-'); + return ( + + + + + + + +
Creative Commons LicenseThis work is licensed under a Criative Commons {label} 4.0 International License.
+ ); +} + +export default CreativeCommons; \ No newline at end of file diff --git a/src/xoonips/item-type/lib/field/DateTime.tsx b/src/xoonips/item-type/lib/field/DateTime.tsx new file mode 100644 index 0000000..0e9b1dc --- /dev/null +++ b/src/xoonips/item-type/lib/field/DateTime.tsx @@ -0,0 +1,21 @@ +import moment from 'moment'; +import React from 'react'; +import { MultiLang } from '../../../../config'; + +interface Props { + lang: MultiLang; + date: number; + onlyDate?: boolean +} + +const DateTime = (props: Props) => { + const { date, onlyDate } = props; + const d = moment(new Date(date * 1000)); + let format = 'MMM D, Y'; + if (typeof onlyDate === 'undefined' || !onlyDate) { + format += ' HH:mm:ss'; + } + return {d.format(format)}; +} + +export default DateTime; diff --git a/src/xoonips/item-type/lib/field/Description.tsx b/src/xoonips/item-type/lib/field/Description.tsx new file mode 100644 index 0000000..353b3d9 --- /dev/null +++ b/src/xoonips/item-type/lib/field/Description.tsx @@ -0,0 +1,18 @@ +import React from 'react'; +import XoopsCode from '../../../../common/lib/XoopsCode'; +import { MultiLang } from '../../../../config'; + +interface Props { + lang: MultiLang; + description: string; + className?: string; +} + +const Description = (props: Props) => { + const { lang, description, className } = props; + const textarea = ; + const name = typeof className === 'undefined' ? 'description' : className; + return (
{textarea}
); +} + +export default Description; \ No newline at end of file diff --git a/src/xoonips/item-type/lib/field/FileDownloadButton.module.css b/src/xoonips/item-type/lib/field/FileDownloadButton.module.css new file mode 100644 index 0000000..dd40e7e --- /dev/null +++ b/src/xoonips/item-type/lib/field/FileDownloadButton.module.css @@ -0,0 +1,21 @@ +.downloadButton { + display: inline-block; + padding: 7px 20px; + text-decoration: none !important; + font-weight: normal !important; + background: #f0f0f0; + color: #000 !important; + border: solid 1px #e0e0e0; + box-shadow: 2px 2px #bbbbbb; + border-radius: 5px; +} + +.downloadButton:hover { + background: #e8e8e8 !important; + border: solid 1px #cccccc; +} + +.downloadButton:active { + transform: translate(2px, 2px); + box-shadow: none; +} \ No newline at end of file diff --git a/src/xoonips/item-type/lib/field/FileDownloadButton.tsx b/src/xoonips/item-type/lib/field/FileDownloadButton.tsx new file mode 100644 index 0000000..76b2483 --- /dev/null +++ b/src/xoonips/item-type/lib/field/FileDownloadButton.tsx @@ -0,0 +1,56 @@ +import React, { Component } from 'react'; +import { MultiLang } from '../../../../config'; +import ItemUtil, { ItemBasicFile } from '../../../lib/ItemUtil'; +import styles from './FileDownloadButton.module.css'; +import LicenseAgreementDialog from './LicenseAgreementDialog'; + +interface Props { + lang: MultiLang; + file: ItemBasicFile; + rights: string; + useCc: number; + ccCommercialUse: number; + ccModification: number; +} + +interface State { + show: boolean; +} + +class FileDownloadButton extends Component { + + constructor(props: Props) { + super(props); + this.state = { + show: false, + }; + this.handleClickDownload = this.handleClickDownload.bind(this); + this.unsetShow = this.unsetShow.bind(this); + } + + handleClickDownload(e: React.MouseEvent) { + const { rights, useCc } = this.props; + if (rights !== '' || useCc === 1) { + e.stopPropagation(); + e.preventDefault(); + this.setState({ show: true }); + } + } + + unsetShow() { + this.setState({ show: false }); + } + + render() { + const { lang, file, rights, useCc, ccCommercialUse, ccModification } = this.props; + const url = ItemUtil.getFileUrl(this.props.file); + return ( + <> + Download + + + ); + } +} + +export default FileDownloadButton; \ No newline at end of file diff --git a/src/xoonips/item-type/lib/field/FileSize.tsx b/src/xoonips/item-type/lib/field/FileSize.tsx new file mode 100644 index 0000000..0198e89 --- /dev/null +++ b/src/xoonips/item-type/lib/field/FileSize.tsx @@ -0,0 +1,17 @@ +import React from 'react'; +import { MultiLang } from '../../../../config'; + +interface Props { + lang: MultiLang; + size: number; +} + +const FileSize = (props: Props) => { + const { size } = props; + const units = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB']; + const power = size > 0 ? Math.floor(Math.log(size) / Math.log(1024)) : 0; + const label = Math.round(size / Math.pow(1024, power) * 10) / 10 + ' ' + units[power] + return {label}; +} + +export default FileSize; \ No newline at end of file diff --git a/src/xoonips/item-type/lib/field/FreeKeyword.tsx b/src/xoonips/item-type/lib/field/FreeKeyword.tsx new file mode 100644 index 0000000..d33437e --- /dev/null +++ b/src/xoonips/item-type/lib/field/FreeKeyword.tsx @@ -0,0 +1,18 @@ +import React from 'react'; +import { MultiLang } from '../../../../config'; + +interface Props { + lang: MultiLang; + keyword: string[]; +} + +const FreeKeyword = (props: Props) => { + const { keyword } = props; + if (keyword.length === 0) { + return null; + } + const label = keyword.join(', '); + return ({label}); +} + +export default FreeKeyword; \ No newline at end of file diff --git a/src/xoonips/item-type/lib/field/ItemFile.tsx b/src/xoonips/item-type/lib/field/ItemFile.tsx new file mode 100644 index 0000000..7c8dc9e --- /dev/null +++ b/src/xoonips/item-type/lib/field/ItemFile.tsx @@ -0,0 +1,48 @@ +import React from 'react'; +import { MultiLang } from '../../../../config'; +import Functions from '../../../../functions'; +import { ItemBasicFile } from '../../../lib/ItemUtil'; +import DateTime from './DateTime'; +import FileDownloadButton from './FileDownloadButton'; +import FileSize from './FileSize'; + +interface Props { + lang: MultiLang; + file: ItemBasicFile[]; + type: string; + rights?: string; + useCc?: number; + ccCommercialUse?: number; + ccModification?: number; + downloadLimit?: number; +} + +const ItemFile = (props: Props) => { + const { lang, file, type } = props; + const rights = typeof props.rights === 'undefined' ? '' : props.rights; + const useCc = typeof props.useCc === 'undefined' ? 0 : props.useCc; + const ccCommercialUse = typeof props.ccCommercialUse === 'undefined' ? 0 : props.ccCommercialUse; + const ccModification = typeof props.ccModification === 'undefined' ? 0 : props.ccModification; + const downloadLimit = typeof props.downloadLimit === 'undefined' ? 0 : props.downloadLimit; + const data = file.find((value) => { + return value.file_type_name === type; + }); + if (typeof data === 'undefined') { + return null; + } + return ( +
+ {data.original_file_name}
+ + + + + + +
Type: {data.mime_type}{downloadLimit === 0 && }
Size:
Last updated:
+ {downloadLimit === 1 && <>
({Functions.mlang('[en]File has been removed[/en][ja]ファイルは削除されました[/ja]', lang)})} +
+ ); +} + +export default ItemFile; \ No newline at end of file diff --git a/src/xoonips/item-type/lib/field/ItemIndex.tsx b/src/xoonips/item-type/lib/field/ItemIndex.tsx new file mode 100644 index 0000000..02937f6 --- /dev/null +++ b/src/xoonips/item-type/lib/field/ItemIndex.tsx @@ -0,0 +1,26 @@ +import React from 'react'; +import { Link } from 'react-router-dom'; +import { MultiLang } from '../../../../config'; +import Functions from '../../../../functions'; +import IndexUtil from '../../../lib/IndexUtil'; +import { ItemBasicIndex } from '../../../lib/ItemUtil'; + +interface Props { + lang: MultiLang; + index: ItemBasicIndex[]; +} + +const ItemIndex = (props: Props) => { + const { lang, index } = props; + if (index.length === 0) { + return null; + } + const elements = index.map((value, idx) => { + const evenodd = idx % 2 === 0 ? 'even' : 'odd'; + const url = IndexUtil.getUrl(value.index_id); + return ({Functions.mlang(value.title, lang)}); + }); + return ({elements}
); +} + +export default ItemIndex; \ No newline at end of file diff --git a/src/xoonips/item-type/lib/field/Language.tsx b/src/xoonips/item-type/lib/field/Language.tsx new file mode 100644 index 0000000..0a6a584 --- /dev/null +++ b/src/xoonips/item-type/lib/field/Language.tsx @@ -0,0 +1,20 @@ +import React from 'react'; +import { ItemBasicLang, ItemBasicLangs } from '../../../lib/ItemUtil'; +import { MultiLang } from '../../../../config'; +import Functions from '../../../../functions'; + +interface Props { + lang: MultiLang; + itemLang: ItemBasicLang; +} + +const Language = (props: Props) => { + const { lang, itemLang } = props; + const xlang = ItemBasicLangs.find((value) => value.type === itemLang); + if (typeof xlang === 'undefined') { + return null; + } + return ({Functions.mlang(xlang.label, lang)}); +} + +export default Language; \ No newline at end of file diff --git a/src/xoonips/item-type/lib/field/LicenseAgreementDialog.module.css b/src/xoonips/item-type/lib/field/LicenseAgreementDialog.module.css new file mode 100644 index 0000000..b2f4525 --- /dev/null +++ b/src/xoonips/item-type/lib/field/LicenseAgreementDialog.module.css @@ -0,0 +1,38 @@ +.overlay { + position: fixed; + z-index: 90; + top: 0; + bottom: 0; + left: 0; + right: 0; + background-color: #000000; + opacity: 0.8; +} + +.dialog { + position: fixed; + background-color: #d8d8d8; + width: 570px; + z-index: 100; + top: 50%; + left: 50%; + right: auto; + bottom: auto; + margin: 0 auto; + padding: 20px; + transform: translate(-50%, -50%); + border-radius: 5px; +} + +.box { + background-color: #fff; + padding: 10px; +} + +.download { + text-align: center; +} + +.download button { + margin: 5px 5px 0; +} \ No newline at end of file diff --git a/src/xoonips/item-type/lib/field/LicenseAgreementDialog.tsx b/src/xoonips/item-type/lib/field/LicenseAgreementDialog.tsx new file mode 100644 index 0000000..1fde593 --- /dev/null +++ b/src/xoonips/item-type/lib/field/LicenseAgreementDialog.tsx @@ -0,0 +1,113 @@ +import React, { ChangeEvent, Component, MouseEvent } from 'react'; +import { Modal } from 'react-overlays'; +import { RouteComponentProps, withRouter } from 'react-router'; +import { MultiLang } from '../../../../config'; +import Functions from '../../../../functions'; +import ItemUtil, { ItemBasicFile } from '../../../lib/ItemUtil'; +import DateTime from './DateTime'; +import FileSize from './FileSize'; +import styles from './LicenseAgreementDialog.module.css'; +import Rights from './Rights'; + +interface Props extends RouteComponentProps { + lang: MultiLang; + file: ItemBasicFile; + rights: string; + useCc: number; + ccCommercialUse: number; + ccModification: number; + show: boolean; + unsetShow: () => void; +} + +interface State { + show: boolean; + disabled: boolean; +} + +class LicenseAgreementDialog extends Component { + + constructor(props: Props) { + super(props); + this.state = { + show: props.show, + disabled: false, + }; + this.handleChangeCheckbox = this.handleChangeCheckbox.bind(this); + this.handleClickDownload = this.handleClickDownload.bind(this); + this.handleClickCancel = this.handleClickCancel.bind(this); + } + + static getDerivedStateFromProps(nextProps: Props, prevState: State) { + if (nextProps.show && !prevState.show) { + return { disabled: true, show: nextProps.show }; + } + return null; + } + + handleChangeCheckbox(e: ChangeEvent) { + const disabled = e.target.value === '0'; + this.setState({ disabled }); + } + + handleClickDownload(e: MouseEvent) { + this.props.unsetShow(); + this.setState({ show: false }); + } + + handleClickCancel() { + this.props.unsetShow(); + this.setState({ show: false }); + } + + renderBackdrop(props: any) { + return
; + } + + render() { + const { lang } = this.props; + const url = ItemUtil.getFileUrl(this.props.file); + return ( + +
+
+ {Functions.mlang('[en]Download file information[/en][ja]ダウンロードするファイルの情報[/ja]', lang)} +
+ {this.props.file.original_file_name}
+ + + + + + +
Type: {this.props.file.mime_type}
Size:
Last updated:
+
+
+
+
+ {Functions.mlang('[en]License agreement[/en][ja]ファイルのライセンス[/ja]', lang)} +
+ {Functions.mlang('[en]Please read the following license agreement carefully.[/en][ja]このファイルには下記のライセンスが設定されています。[/ja]', lang)} +
+ + {Functions.mlang('[en]I accept the terms in the license agreement.[/en][ja]ライセンスに同意します。[/ja]', lang)}
+ {Functions.mlang('[en]I do not accept the terms in the license agreement.[/en][ja]ライセンスに同意しません。[/ja]', lang)}
+
+
+
+
+
+ Acceptance is needed to download this file. +
+ + + + +
+
+
+ ); + } +} + +export default withRouter(LicenseAgreementDialog); \ No newline at end of file diff --git a/src/xoonips/item-type/lib/field/Preview.module.css b/src/xoonips/item-type/lib/field/Preview.module.css new file mode 100644 index 0000000..7ce5431 --- /dev/null +++ b/src/xoonips/item-type/lib/field/Preview.module.css @@ -0,0 +1,23 @@ +.previewBox { + text-align: center; + margin: 10px; +} + +.previewBox::after { + content: ""; + display: block; + clear: both; +} + +.preview { + width: 200px; + margin: 0 auto; + float: left; + text-align: center; +} + +.preview caption { + width: 200px; + margin: 5px; + font-size: 80%; +} \ No newline at end of file diff --git a/src/xoonips/item-type/lib/field/Preview.tsx b/src/xoonips/item-type/lib/field/Preview.tsx new file mode 100644 index 0000000..86ec5b3 --- /dev/null +++ b/src/xoonips/item-type/lib/field/Preview.tsx @@ -0,0 +1,84 @@ +import React, { Component } from 'react'; +import Lightbox from 'react-image-lightbox'; +import 'react-image-lightbox/style.css'; +import { MultiLang } from '../../../../config'; +import Functions from '../../../../functions'; +import ItemUtil, { ItemBasicFile } from '../../../lib/ItemUtil'; +import styles from './Preview.module.css'; + +interface Props { + lang: MultiLang; + file: ItemBasicFile[]; +} + +interface State { + isOpen: boolean; + imageIndex: number; +} + +class Preview extends Component { + + constructor(props: Props) { + super(props); + this.state = { + isOpen: false, + imageIndex: 0, + }; + } + + render() { + const { lang, file } = this.props; + const data = file.filter((value) => { + return value.file_type_name === 'preview'; + }); + if (data.length === 0) { + return null; + } + let imageUrls: string[] = []; + const previews = data.map((value, idx) => { + const fileUrl = ItemUtil.getFileUrl(value); + const previewUrl = ItemUtil.getPreviewFileUrl(value); + const caption = Functions.mlang(value.caption, lang); + imageUrls.push(fileUrl); + return ( +
+ { + e.preventDefault(); + this.setState({ isOpen: true, imageIndex: idx }); + }}> + {caption} + +
{caption}
+
+ ); + }); + const { isOpen, imageIndex } = this.state; + return ( + <> +
+ {previews} +
+ {isOpen && + this.setState({ isOpen: false })} + onMovePrevRequest={() => + this.setState({ + imageIndex: (imageIndex + data.length - 1) % data.length, + }) + } + onMoveNextRequest={() => + this.setState({ + imageIndex: (imageIndex + 1) % data.length, + }) + } + /> + } + + ); + } +} + +export default Preview; \ No newline at end of file diff --git a/src/xoonips/item-type/lib/field/PublicationDate.tsx b/src/xoonips/item-type/lib/field/PublicationDate.tsx new file mode 100644 index 0000000..6da3a62 --- /dev/null +++ b/src/xoonips/item-type/lib/field/PublicationDate.tsx @@ -0,0 +1,19 @@ +import React from 'react'; +import { MultiLang } from '../../../../config'; +import DateTime from './DateTime'; + +interface Props { + lang: MultiLang; + year: number; + month: number; + mday: number; +} + +const PublicationDate = (props: Props) => { + const { lang, year, month, mday } = props; + const d = new Date(year + '-' + month + '-' + mday); + const timestamp = Math.floor(d.valueOf() / 1000); + return ; +} + +export default PublicationDate; \ No newline at end of file diff --git a/src/xoonips/item-type/lib/field/Readme.tsx b/src/xoonips/item-type/lib/field/Readme.tsx new file mode 100644 index 0000000..6fbd19b --- /dev/null +++ b/src/xoonips/item-type/lib/field/Readme.tsx @@ -0,0 +1,15 @@ +import React from 'react'; +import { MultiLang } from '../../../../config'; +import Description from './Description'; + +interface Props { + lang: MultiLang; + readme: string; +} + +const Readme = (props: Props) => { + const { lang, readme } = props; + return ; +} + +export default Readme; \ No newline at end of file diff --git a/src/xoonips/item-type/lib/field/RelatedTo.tsx b/src/xoonips/item-type/lib/field/RelatedTo.tsx new file mode 100644 index 0000000..87cd518 --- /dev/null +++ b/src/xoonips/item-type/lib/field/RelatedTo.tsx @@ -0,0 +1,74 @@ +import React, { Component } from 'react'; +import { MultiLang } from '../../../../config'; +import ItemType from '../../../item-type'; +import ItemUtil from '../../../lib/ItemUtil'; + +interface Props { + lang: MultiLang + relatedTo: number[]; +} + +interface State { + elements: JSX.Element[]; +} + +class RelatedTo extends Component { + + private isActive: boolean; + + constructor(props: Props) { + super(props); + this.state = { + elements: [], + }; + this.isActive = false; + } + + componentDidMount() { + this.isActive = true; + this.updateElements(this.props.relatedTo); + } + + componentDidUpdate(prevProps: Props) { + if (JSON.stringify(this.props.relatedTo) !== JSON.stringify(prevProps.relatedTo)) { + this.updateElements(this.props.relatedTo); + } + } + + componentWillUnmount() { + this.isActive = false; + } + + updateElements(relatedTo: number[]) { + const { lang } = this.props; + if (relatedTo.length === 0) { + this.setState({ elements: [] }); + } else { + ItemUtil.getList(relatedTo, (results) => { + const elements = results.data.map((item, idx) => { + const evenodd = idx % 0 ? 'even' : 'odd'; + return ; + }); + if (this.isActive) { + this.setState({ elements }); + } + }); + } + } + + render() { + if (this.state.elements.length === 0) { + return null; + } + return ( + + + + {this.state.elements} + +
Item summary
+ ); + } +} + +export default RelatedTo; \ No newline at end of file diff --git a/src/xoonips/item-type/lib/field/Repeatable.tsx b/src/xoonips/item-type/lib/field/Repeatable.tsx new file mode 100644 index 0000000..6f1add4 --- /dev/null +++ b/src/xoonips/item-type/lib/field/Repeatable.tsx @@ -0,0 +1,21 @@ +import React, { ReactNode } from 'react'; +import { MultiLang } from '../../../../config'; + +interface Props { + lang: MultiLang; + data: ReactNode[]; +} + +const Repeatable = (props: Props) => { + const { data } = props; + if (data.length === 0) { + return null; + } + const elements = data.map((value, idx) => { + const evenodd = idx % 2 === 0 ? 'even' : 'odd'; + return {value}; + }); + return {elements}
; +} + +export default Repeatable; \ No newline at end of file diff --git a/src/xoonips/item-type/lib/field/Rights.tsx b/src/xoonips/item-type/lib/field/Rights.tsx new file mode 100644 index 0000000..25f65cf --- /dev/null +++ b/src/xoonips/item-type/lib/field/Rights.tsx @@ -0,0 +1,23 @@ +import React from 'react'; +import { MultiLang } from '../../../../config'; +import CreativeCommons, { getCreativeCommonsType } from './CreativeCommons'; +import Description from './Description'; + +interface Props { + lang: MultiLang; + rights: string; + useCc: number; + ccCommercialUse: number; + ccModification: number; +} + +const Rights = (props: Props) => { + const { lang, rights, useCc, ccCommercialUse, ccModification } = props; + if (useCc === 0) { + return ; + } + const ccType = getCreativeCommonsType(ccCommercialUse, ccModification); + return ; +} + +export default Rights; \ No newline at end of file diff --git a/src/xoonips/item-type/lib/field/SimPFLinkIcon.tsx b/src/xoonips/item-type/lib/field/SimPFLinkIcon.tsx new file mode 100644 index 0000000..1bfc8cb --- /dev/null +++ b/src/xoonips/item-type/lib/field/SimPFLinkIcon.tsx @@ -0,0 +1,25 @@ +import React from 'react'; +import { MultiLang } from '../../../../config'; +import imageButton from '../../../assets/images/simpf_button.png'; + +interface Props { + lang: MultiLang; + url: string; + isDetail: boolean; +} + +const SimPFLinkIcon = (props: Props) => { + const { url, isDetail } = props; + const title = 'Online Simulation'; + const size = isDetail ? 64 : 35; + if (url === '') { + return null; + } + return ( + + {title} + + );; +} + +export default SimPFLinkIcon; diff --git a/src/xoonips/item-type/lib/field/index.tsx b/src/xoonips/item-type/lib/field/index.tsx new file mode 100644 index 0000000..e786f30 --- /dev/null +++ b/src/xoonips/item-type/lib/field/index.tsx @@ -0,0 +1,41 @@ +import Author from './Author'; +import ChangeLog from './ChangeLog'; +import Contributer from './Contributer'; +import CreativeCommons from './CreativeCommons'; +import DateTime from './DateTime'; +import Description from './Description'; +import FileDownloadButton from './FileDownloadButton'; +import FileSize from './FileSize'; +import FreeKeyword from './FreeKeyword'; +import ItemFile from './ItemFile'; +import ItemIndex from './ItemIndex'; +import Language from './Language'; +import Preview from './Preview'; +import PublicationDate from './PublicationDate'; +import Readme from './Readme'; +import RelatedTo from './RelatedTo'; +import Repeatable from './Repeatable'; +import Rights from './Rights'; + +const ItemTypeField = { + Author, + ChangeLog, + Contributer, + CreativeCommons, + DateTime, + Description, + FileDownloadButton, + FileSize, + FreeKeyword, + ItemFile, + ItemIndex, + Language, + Preview, + PublicationDate, + Readme, + RelatedTo, + Repeatable, + Rights, +}; + +export default ItemTypeField; \ No newline at end of file diff --git a/src/xoonips/lib/AdvancedSearchQuery.ts b/src/xoonips/lib/AdvancedSearchQuery.ts new file mode 100644 index 0000000..9266348 --- /dev/null +++ b/src/xoonips/lib/AdvancedSearchQuery.ts @@ -0,0 +1,202 @@ +import split from 'split-string'; + +type AdvancedSearchQueryData = Map; + +class AdvancedSearchQuery { + + private dataset: AdvancedSearchQueryData = new Map(); + + empty() { + let ret = true; + this.dataset.forEach((data) => { + data.forEach((value) => { + value = value.trim(); + if (value.length !== 0) { + ret = false; + } + }); + }); + return ret; + } + + splitString(str: string): string[] { + return split(str, { separator: ' ', quotes: true }) + .map((value) => { + return value.replace(/^['"](.*)['"]$/, (whole, m1) => m1).trim(); + }) + .filter((value) => { + return value.length > 0; + }); + } + + set(type: string, key: string, value: string) { + type = type.trim(); + key = key.trim(); + const data: URLSearchParams = this.dataset.has(type) ? this.dataset.get(type) as URLSearchParams : new URLSearchParams(); + data.set(key, value); + this.dataset.set(type, data); + } + + delete(type: string, key: string) { + type = type.trim(); + key = key.trim(); + const data: URLSearchParams = this.dataset.has(type) ? this.dataset.get(type) as URLSearchParams : new URLSearchParams(); + data.delete(key); + this.dataset.set(type, data); + } + + deleteType(type: string) { + type = type.trim(); + this.dataset.delete(type.trim()); + } + + getQueryParams() { + let ret: URLSearchParams = new URLSearchParams(); + this.dataset.forEach((data, type) => { + data.forEach((value, key) => { + value = value.trim(); + value.length > 0 && ret.set(type + '.' + key, value); + }); + }); + return ret; + } + + setByQueryString(queryString: string) { + const query = new URLSearchParams(queryString); + query.forEach((v, k) => { + const [type, ...key] = k.split('.'); + if (typeof key === 'undefined') { + return; + } + this.set(type, key.join('.'), v); + }); + } + + getSearchFilter() { + const regex = (str: string) => { + return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); + } + const filter: any = []; + this.dataset.forEach((data, type) => { + const filter2: any = []; + let journal_date_from: number = NaN; + let journal_date_from_year: number = NaN; + let journal_date_from_month: number = NaN; + let journal_date_from_mday: number = NaN; + let journal_date_to: number = NaN; + let journal_date_to_year: number = NaN; + let journal_date_to_month: number = NaN; + let journal_date_to_mday: number = NaN; + let article_meeting_date_from_year: number = NaN; + let article_meeting_date_from_month: number = NaN; + let article_meeting_date_from_mday: number = NaN; + let article_meeting_date_to_year: number = NaN; + let article_meeting_date_to_month: number = NaN; + let article_meeting_date_to_mday: number = NaN; + let article_date_from: number = NaN; + let article_date_from_year: number = NaN; + let article_date_from_month: number = NaN; + let article_date_from_mday: number = NaN; + let article_date_to: number = NaN; + let article_date_to_year: number = NaN; + let article_date_to_month: number = NaN; + let article_date_to_mday: number = NaN; + filter2.push({ + item_type_name: type, + }); + data.forEach((value, key) => { + const keys = key.split('.'); + if (keys.length > 0) { + if (keys[0] === 'file' && keys.length === 3) { + const fileType = keys[1]; + const subKey = keys[2]; + filter2.push({ + file: { + '$elemMatch': { + file_type_name: fileType, + [subKey]: { '$regex': [regex(value), 'i'] } + } + } + }); + } else if (type === 'journal' && keys[0] === 'date_from_year') { + journal_date_from_year = parseInt(value, 10); + } else if (type === 'journal' && keys[0] === 'date_from_month') { + journal_date_from_month = parseInt(value, 10); + } else if (type === 'journal' && keys[0] === 'date_from_mday') { + journal_date_from_mday = parseInt(value, 10); + } else if (type === 'journal' && keys[0] === 'date_to_year') { + journal_date_to_year = parseInt(value, 10); + } else if (type === 'journal' && keys[0] === 'date_to_month') { + journal_date_to_month = parseInt(value, 10); + } else if (type === 'journal' && keys[0] === 'date_to_mday') { + journal_date_to_mday = parseInt(value, 10); + } else if (type === 'article' && keys[0] === 'meeting_date_from_year') { + article_meeting_date_from_year = parseInt(value, 10); + } else if (type === 'article' && keys[0] === 'meeting_date_from_month') { + article_meeting_date_from_month = parseInt(value, 10); + } else if (type === 'article' && keys[0] === 'meeting_date_from_mday') { + article_meeting_date_from_mday = parseInt(value, 10); + } else if (type === 'article' && keys[0] === 'meeting_date_to_year') { + article_meeting_date_to_year = parseInt(value, 10); + } else if (type === 'article' && keys[0] === 'meeting_date_to_month') { + article_meeting_date_to_month = parseInt(value, 10); + } else if (type === 'article' && keys[0] === 'meeting_date_to_mday') { + article_meeting_date_to_mday = parseInt(value, 10); + } else if (type === 'article' && keys[0] === 'date_from_year') { + article_date_from_year = parseInt(value, 10); + } else if (type === 'article' && keys[0] === 'date_from_month') { + article_date_from_month = parseInt(value, 10); + } else if (type === 'article' && keys[0] === 'date_from_mday') { + article_date_from_mday = parseInt(value, 10); + } else if (type === 'article' && keys[0] === 'date_to_year') { + article_date_to_year = parseInt(value, 10); + } else if (type === 'article' && keys[0] === 'date_to_month') { + article_date_to_month = parseInt(value, 10); + } else if (type === 'article' && keys[0] === 'date_to_mday') { + article_date_to_mday = parseInt(value, 10); + } else { + filter2.push({ [key]: { '$regex': [regex(value), 'i'] } }); + } + } + }); + if (!isNaN(journal_date_from_year) && !isNaN(journal_date_from_month) && !isNaN(journal_date_from_mday)) { + journal_date_from = new Date(journal_date_from_year, journal_date_from_month - 1, journal_date_from_mday).getTime() / 1000; + } + if (!isNaN(journal_date_to_year) && !isNaN(journal_date_to_month) && !isNaN(journal_date_to_mday)) { + journal_date_to = new Date(journal_date_to_year, journal_date_to_month - 1, journal_date_to_mday).getTime() / 1000; + } + if (!isNaN(journal_date_from) && !isNaN(journal_date_to)) { + filter2.push({ date: { '$between': [journal_date_from, journal_date_to] } }); + } else if (!isNaN(journal_date_from)) { + filter2.push({ date: { '$gte': journal_date_from } }); + } else if (!isNaN(journal_date_to)) { + filter2.push({ date: { '$lte': journal_date_to } }); + } + if (!isNaN(article_meeting_date_from_year) && !isNaN(article_meeting_date_from_month) && !isNaN(article_meeting_date_from_mday)) { + const date = new Date(article_meeting_date_from_year, article_meeting_date_from_month - 1, article_meeting_date_from_mday).getTime() / 1000; + filter2.push({ meeting_date_from: { '$eq': date } }); + } + if (!isNaN(article_meeting_date_to_year) && !isNaN(article_meeting_date_to_month) && !isNaN(article_meeting_date_to_mday)) { + const date = new Date(article_meeting_date_to_year, article_meeting_date_to_month - 1, article_meeting_date_to_mday).getTime() / 1000; + filter2.push({ meeting_date_to: { '$eq': date } }); + } + if (!isNaN(article_date_from_year) && !isNaN(article_date_from_month) && !isNaN(article_date_from_mday)) { + article_date_from = new Date(article_date_from_year, article_date_from_month - 1, article_date_from_mday).getTime() / 1000; + } + if (!isNaN(article_date_to_year) && !isNaN(article_date_to_month) && !isNaN(article_date_to_mday)) { + article_date_to = new Date(article_date_to_year, article_date_to_month - 1, article_date_to_mday).getTime() / 1000; + } + if (!isNaN(article_date_from) && !isNaN(article_date_to)) { + filter2.push({ date: { '$between': [article_date_from, article_date_to] } }); + } else if (!isNaN(article_date_from)) { + filter2.push({ date: { '$gte': article_date_from } }); + } else if (!isNaN(article_date_to)) { + filter2.push({ date: { '$lte': article_date_to } }); + } + filter.push({ '$and': filter2 }); + }); + return { '$or': filter }; + } +} + +export default AdvancedSearchQuery; \ No newline at end of file diff --git a/src/xoonips/lib/IndexUtil.ts b/src/xoonips/lib/IndexUtil.ts new file mode 100644 index 0000000..3dba888 --- /dev/null +++ b/src/xoonips/lib/IndexUtil.ts @@ -0,0 +1,95 @@ +import loki from 'lokijs'; +import indexesJson from '../assets/tree.json'; + +export interface Index { + id: number; + title: string; + numOfItems: number; + parentId: number; + weight: number; +} + +export const INDEX_ID_ROOT = 1; +export const INDEX_ID_PUBLIC = 2; + +interface IndexData { + id: number; + title: string; + num_of_items: number; + children: IndexData[]; +} +type IndexesData = IndexData[]; + +class IndexUtil { + + private database: loki; + private indexes: Collection; + + constructor(json: IndexesData) { + this.database = new loki('database'); + this.indexes = this.database.addCollection('indexes'); + this.load(json); + } + + load(json: IndexesData): void { + const store = (indexesData: IndexesData, parentId: number) => { + indexesData.forEach((indexData: IndexData, idx) => { + const entry: Index = { + id: indexData.id, + title: indexData.title, + numOfItems: indexData.num_of_items, + parentId: parentId, + weight: idx, + }; + this.indexes.insert(entry); + store(indexData.children, indexData.id) + }); + } + store(json, INDEX_ID_ROOT); + } + + getUrl(id: number): string { + return '/modules/xoonips/list.php?index_id=' + String(id); + } + + get(indexId: number): Index | null { + const filter = { + 'id': indexId, + } + const res = this.indexes.findOne(filter); + return res; + } + + getChildren(indexId: number): Index[] { + const filter = { + 'parentId': indexId, + } + const res = this.indexes.chain().find(filter).simplesort('weight').data(); + return res; + } + + countChildren(indexId: number): number { + const filter = { + 'parentId': indexId, + } + const res = this.indexes.count(filter); + return res; + } + + getParents(parentId: number): Index[] { + let parents: Index[] = []; + const loop = (parentId: number) => { + if (parentId !== INDEX_ID_ROOT) { + const parent = this.get(parentId); + if (parent !== null) { + loop(parent.parentId); + parents.push(parent); + } + } + } + loop(parentId); + return parents; + } +} + +export default new IndexUtil(indexesJson); \ No newline at end of file diff --git a/src/xoonips/lib/ItemUtil.ts b/src/xoonips/lib/ItemUtil.ts new file mode 100644 index 0000000..e367794 --- /dev/null +++ b/src/xoonips/lib/ItemUtil.ts @@ -0,0 +1,490 @@ +import AsyncLock from 'async-lock'; +import axios from 'axios'; +import loki from 'lokijs'; +import funcs from '../../functions'; +import simpfLinksJson from '../assets/simpf-links.json'; +import AdvancedSearchQuery from './AdvancedSearchQuery'; + +interface SimPFLink { + id: number; + url: string; +} + +interface ItemSelectType { + type: T; + label: string; +} + +export type ItemSelectTypes = readonly ItemSelectType[]; + +export type ItemBasicLang = 'eng' | 'jpn' | 'fra' | 'deu' | 'esl' | 'ita' | 'dut' | 'sve' | 'nor' | 'dan' | 'fin' | 'por' | 'chi' | 'kor'; +export const ItemBasicLangs: ItemSelectTypes = [ + { type: 'eng', label: '[en]English[/en][ja]英語[/ja]' }, + { type: 'jpn', label: '[en]Japanese[/en][ja]日本語[/ja]' }, + { type: 'fra', label: '[en]French[/en][ja]フランス語[/ja]' }, + { type: 'deu', label: '[en]German[/en][ja]ドイツ語[/ja]' }, + { type: 'esl', label: '[en]Spanish[/en][ja]スペイン語[/ja]' }, + { type: 'ita', label: '[en]Italian[/en][ja]イタリア語[/ja]' }, + { type: 'dut', label: '[en]Dutch[/en][ja]オランダ語[/ja]' }, + { type: 'sve', label: '[en]Swedish[/en][ja]スウェーデン語[/ja]' }, + { type: 'nor', label: '[en]Norwegian[/en][ja]ノルウェー語[/ja]' }, + { type: 'dan', label: '[en]Danish[/en][ja]デンマーク語[/ja]' }, + { type: 'fin', label: '[en]Finnish[/en][ja]フィンランド語[/ja]' }, + { type: 'por', label: '[en]Portuguese[/en][ja]ポルトガル語[/ja]' }, + { type: 'chi', label: '[en]Chinese[/en][ja]中国語[/ja]' }, + { type: 'kor', label: '[en]Korean[/en][ja]韓国語[/ja]' } +]; + +export interface ItemBasicIndex { + index_id: number; + title: string; +} +export interface ItemBasicChangeLog { + log_date: number; + log: string; +} +export interface ItemBasicFile { + file_id: number; + original_file_name: string; + mime_type: string; + file_size: number; + caption: string; + timestamp: number; + file_type_name: string; + file_type_display_name: string; +} +export interface ItemCore { + item_id: number; + doi: string; +} +export interface ItemBasic extends ItemCore { + uid: number; + description: string; + last_update_date: number; + creation_date: number; + publication_year: number; + publication_month: number; + publication_mday: number; + lang: ItemBasicLang; + title: string; + item_type_display_name: string; + item_type_name: string; + uname: string; + name: string; + item_url: string; + index: ItemBasicIndex[]; + changelog: ItemBasicChangeLog[]; + related_to: number[]; + keyword: string[]; + file: ItemBasicFile[]; +} + + +export type ItemJournalPublisherLocation = 'USA' | 'JPN'; +export const ItemJournalPublisherLocations: ItemSelectTypes = [ + { type: 'USA', label: '[en]United States[/en][ja]アメリカ[/ja]' }, + { type: 'JPN', label: '[en]Japan[/en][ja]日本[/ja]' } +]; +export interface ItemJournal extends ItemBasic { + journal: string; + volume: string; + publisher: string; + publisher_location: ItemJournalPublisherLocation; + rights: string; + use_cc: number; + cc_commercial_use: number; + cc_modification: number; + date: number; +} + +export interface ItemArticle extends ItemBasic { + author: string[]; + affiliation: string[]; + journal_name: string; + journal_volume: string; + journal_page: string; + journal_publisher: string; + meeting_name: string; + meeting_place: string; + meeting_date_from: number; + meeting_date_to: number; + meeting_program_no: string; + rights: string; + use_cc: number; + cc_commercial_use: number; + cc_modification: number; + date: number; +} + +export interface ItemGeneralData extends ItemBasic { + rights: string; + use_cc: number; + cc_commercial_use: number; + cc_modification: number; + creator: string[]; + affiliation: string[]; + date: number; + publisher: string; + version: string; + format: string; + variation: string; + relation: string[]; +} + +export type Item = ItemJournal | ItemArticle | ItemGeneralData; + +export interface KeywordSearchQuery { + type: string; + keyword: string; +} + +export type SortConditionLimit = 20 | 50 | 100; +export type SortConditionOrderBy = 'title' | 'doi' | 'last_update_date' | 'creation_date' | 'publication_date'; +export enum SortConditionOrderDir { ASC, DESC } + +export interface SortCondition { + limit: SortConditionLimit; + orderBy: SortConditionOrderBy; + orderDir: SortConditionOrderDir; + page: number; +} + +class ItemSorter { + + public orderBy: SortConditionOrderBy; + public orderDir: SortConditionOrderDir; + + constructor(condition: SortCondition) { + this.orderBy = condition.orderBy; + this.orderDir = condition.orderDir; + this.sort = this.sort.bind(this); + } + + sort(a: Item, b: Item) { + let av: string = ''; + let bv: string = ''; + switch (this.orderBy) { + case 'title': + av = a.title.toLocaleUpperCase(); + bv = b.title.toLocaleUpperCase(); + break; + case 'doi': + av = a.doi.toLocaleUpperCase(); + bv = b.doi.toLocaleUpperCase(); + break; + case 'last_update_date': + av = String(a.last_update_date); + bv = String(b.last_update_date); + break; + case 'creation_date': + av = String(a.creation_date); + bv = String(b.creation_date); + break; + case 'publication_date': + av = String(a.publication_year * 10000 + a.publication_month * 100 + a.publication_mday); + bv = String(b.publication_year * 10000 + b.publication_month * 100 + b.publication_mday); + break; + default: + break; + } + if (this.orderDir === SortConditionOrderDir.ASC) { + if (av > bv) return -1; + else if (av < bv) return 1; + } else { + if (av > bv) return 1; + else if (av < bv) return -1; + } + return 0; + } +} + +type GetResult = Item | null; +export interface GetCallbackFunc { (item: GetResult): void } +export interface SearchResult { + total: number; + data: Item[]; +} +export interface SearchCallbackFunc { (results: SearchResult): void } +export interface SearchFunc { (condition: SortCondition, func: SearchCallbackFunc): void } + +interface ItemLoadCallbackFunc { (items: Collection): void } + +class ItemUtil { + + private database: loki; + private items: Collection; + private simpfLinks: Collection; + private loading: boolean; + private callbacks: ItemLoadCallbackFunc[]; + + constructor() { + this.database = new loki('database'); + this.items = this.database.addCollection('items'); + this.simpfLinks = this.database.addCollection('simpf-links'); + this.loading = true; + this.callbacks = []; + this.load(); + } + + load(): void { + axios.get('/modules/xoonips/items.json', { responseType: 'json' }).then((response) => { + const itemsJson = response.data as Item[]; + itemsJson.forEach((json: Item) => { + this.items.insert(json); + }); + const lock = new AsyncLock(); + lock.acquire('items', () => { + this.loading = false; + this.callbacks.forEach((callback) => { + callback(this.items); + }); + this.callbacks = []; + }); + }); + const simpfLinks = simpfLinksJson as SimPFLink[]; + simpfLinks.forEach((simpfLink: SimPFLink) => { + this.simpfLinks.insert(simpfLink); + }); + } + + registerItemLoadCallback(func: ItemLoadCallbackFunc): void { + const lock = new AsyncLock(); + lock.acquire('items', () => { + if (this.loading) { + this.callbacks.push(func); + } else { + func(this.items); + } + }); + } + + getUrl(item: ItemCore): string { + const query = new URLSearchParams(); + if (item.doi !== '') { + query.set('id', item.doi); + } else { + query.set('item_id', item.item_id.toString()); + } + return `/modules/xoonips/detail.php?${query.toString()}`; + } + + getFileUrl(file: ItemBasicFile): string { + return '/modules/xoonips/file/' + String(file.file_id) + '/' + funcs.escape(file.original_file_name); + } + + getPreviewFileUrl(file: ItemBasicFile): string { + return '/modules/xoonips/file/' + String(file.file_id) + '.png'; + } + + getSearchByKeywordUrl(type: string, keyword: string): string { + const params = new URLSearchParams({ + op: 'quick', + search_condition: type, + keyword + }); + return '/modules/xoonips/search.php?' + params.toString(); + } + + getItemTypeSearchUrl(type: string | null, subType: string | null): string { + if (type === null || subType === null) { + return '/'; + } + const query = new URLSearchParams(); + if (subType === '') { + query.set('op', 'advanced'); + query.set('search_itemtype', `${type}`); + } else { + query.set('op', 'itemsubtypesearch'); + query.set(`${type}`, 'on'); + query.set(`${type}_subtype`, subType); + } + return `/modules/xoonips/search.php?${query.toString()}`; + } + + getSearchByAdvancedKeywordsUrl(query: AdvancedSearchQuery): string { + return '/modules/xoonips/search.php?op=advanced&' + query.getQueryParams().toString(); + } + + getSearchKeywordByQuery(queryString: string): KeywordSearchQuery { + const query = new URLSearchParams(queryString); + const type = query.get('search_condition') || 'all'; + const keyword = query.get('keyword') || ''; + return ({ type, keyword }); + } + + getAdvancedSearchQueryByQuery(queryString: string): AdvancedSearchQuery { + const query: AdvancedSearchQuery = new AdvancedSearchQuery(); + query.setByQueryString(queryString); + return query; + } + + get(itemId: number, func: GetCallbackFunc): void { + this.registerItemLoadCallback((items) => { + const filter = { + item_id: itemId + } + const item = items.findOne(filter); + func(item); + }); + } + + getByDoi(doi: string, func: GetCallbackFunc): void { + this.registerItemLoadCallback((items) => { + const filter = { + doi: doi + } + const item = items.findOne(filter); + func(item); + }); + } + + getList(itemIds: number[], func: SearchCallbackFunc): void { + this.registerItemLoadCallback((items) => { + const filter = { + item_id: { + '$in': itemIds, + } + } + const sort = (a: Item, b: Item) => { + const aIdx = itemIds.findIndex((itemId) => { return a.item_id === itemId; }); + const bIdx = itemIds.findIndex((itemId) => { return b.item_id === itemId; }); + if (aIdx > bIdx) { + return 1; + } else if (aIdx < bIdx) { + return -1; + } + return 0; + } + const data = items.chain().find(filter).sort(sort).data(); + const res = { + total: data.length, + data: data, + } + func(res); + }); + } + + getListByIndexId(indexId: number, condition: SortCondition, func: SearchCallbackFunc): void { + this.registerItemLoadCallback((items) => { + const filter: any = { + 'index.index_id': indexId + }; + const offset = condition.limit * (condition.page - 1); + const result = items.chain().find(filter); + const itemSorter = new ItemSorter(condition); + const ret = { + total: result.count(), + data: result.sort(itemSorter.sort).offset(offset).limit(condition.limit).data() + }; + func(ret); + }); + } + + getListByItemType(itemType: string, subItemType: string, condition: SortCondition, func: SearchCallbackFunc): void { + this.registerItemLoadCallback((items) => { + let filter: any = { + item_type_name: itemType, + } + if (subItemType !== '') { + switch (itemType) { + default: + break; + } + } + const offset = condition.limit * (condition.page - 1); + const result = items.chain().find(filter); + const itemSorter = new ItemSorter(condition); + const ret = { + total: result.count(), + data: result.sort(itemSorter.sort).offset(offset).limit(condition.limit).data() + }; + func(ret); + }); + } + + getListByKeyword(type: string, keyword: string, condition: SortCondition, func: SearchCallbackFunc): void { + this.registerItemLoadCallback((items) => { + const regex = keyword.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); + const num = keyword.match(/^[0-9]+$/) ? parseInt(keyword, 10) : null; + let filter: any = { '$or': [] }; + const appendToFilter = (type: string, strKeys: string[], numKeys: string[]) => { + const basicStrKeys: string[] = ['title', 'keyword', 'doi', 'description', 'uname', 'name', 'index.title']; + const basicNumKeys: string[] = []; + let filterItemType: any = { + item_type_name: type, + '$or': [] + }; + let sKeys: string[] = basicStrKeys.concat(strKeys); + let nKeys: string[] = basicNumKeys.concat(numKeys); + sKeys.forEach((key) => { + let criteria: any = {}; + criteria[key] = { '$regex': [regex, 'i'] }; + filterItemType['$or'].push(criteria); + }); + if (num !== null) { + nKeys.forEach((key) => { + let criteria: any = {}; + criteria[key] = { '$eq': num }; + filterItemType['$or'].push(criteria); + }); + } + filter['$or'].push(filterItemType); + } + if (type === 'basic') { + filter['$or'].push({ 'title': { '$regex': [regex, 'i'] } }); + filter['$or'].push({ 'keyword': { '$regex': [regex, 'i'] } }); + } else { + if (type === 'all' || type === 'journal') { + const strKeys: string[] = ['doi', 'title', 'journal', 'volume', 'publication_year', 'publisher', 'file.original_file_name', 'keyword', 'description']; + const numKeys: string[] = []; + appendToFilter('journal', strKeys, numKeys); + } + if (type === 'all' || type === 'article') { + const strKeys: string[] = ['doi', 'title', 'author', 'affiliation', 'journal_name', 'journal_volume', 'publication_year', 'journal_page', 'journal_publisher', 'meeting_name', 'meeting_place', 'meeting_program_no', 'file.original_file_name', 'keyword']; + const numKeys: string[] = []; + appendToFilter('article', strKeys, numKeys); + } + if (type === 'all' || type === 'generaldata') { + const strKeys: string[] = ['doi', 'title', 'description', 'file.caption', 'file.original_file_name', 'creator', 'affiliation', 'version', 'format', 'variation', 'relation', 'keyword']; + const numKeys: string[] = []; + appendToFilter('generaldata', strKeys, numKeys); + } + if (type !== 'all') { + filter['item_type_name'] = type; + } + } + const offset = condition.limit * (condition.page - 1); + const result = items.chain().find(filter); + const itemSorter = new ItemSorter(condition); + const ret = { + total: result.count(), + data: result.sort(itemSorter.sort).offset(offset).limit(condition.limit).data() + }; + func(ret); + }); + } + + getListByAdvancedSearchQuery(query: AdvancedSearchQuery, condition: SortCondition, func: SearchCallbackFunc): void { + this.registerItemLoadCallback((items) => { + const filter: any = query.getSearchFilter(); + const offset = condition.limit * (condition.page - 1); + const result = items.chain().find(filter); + const itemSorter = new ItemSorter(condition); + const ret = { + total: result.count(), + data: result.sort(itemSorter.sort).offset(offset).limit(condition.limit).data() + }; + func(ret); + }); + } + + getSimPFLinkUrl(itemId: number) { + const simpfLink = this.simpfLinks.findOne({ id: itemId }); + if (simpfLink === null) { + return ''; + } + return simpfLink.url; + } +} + +export default new ItemUtil(); \ No newline at end of file diff --git a/src/xoonips/lib/XoonipsListIndex.tsx b/src/xoonips/lib/XoonipsListIndex.tsx new file mode 100644 index 0000000..ecac8d6 --- /dev/null +++ b/src/xoonips/lib/XoonipsListIndex.tsx @@ -0,0 +1,58 @@ +import React from 'react'; +import { Link } from 'react-router-dom'; +import { MultiLang } from '../../config'; +import iconFile from '../assets/images/icon_folder.gif'; +import IndexUtil, { Index } from './IndexUtil'; + +interface Props { + lang: MultiLang; + index: Index; +} + +const ListIndexItem = (props: Props) => { + const url = IndexUtil.getUrl(props.index.id); + const numOfIndexes = IndexUtil.countChildren(props.index.id); + return ( + + + + + + + +
+ {props.index.title} + + {props.index.title} +
+ {numOfIndexes} indexes / {props.index.numOfItems} items +
+ ); +} + +const XoonipsListIndex = (props: Props) => { + const { lang } = props; + const children = IndexUtil.getChildren(props.index.id); + if (children.length === 0) { + return null; + } + const treeList = children.map((value: Index, idx) => { + const evenodd = idx % 2 === 0 ? 'even' : 'odd'; + return ( + + + + + + ); + }); + return ( + + + {treeList} + +
+ ); +} + +export default XoonipsListIndex; diff --git a/src/xoonips/lib/XoonipsListItem.module.css b/src/xoonips/lib/XoonipsListItem.module.css new file mode 100644 index 0000000..a2f6d4f --- /dev/null +++ b/src/xoonips/lib/XoonipsListItem.module.css @@ -0,0 +1,11 @@ +.sortCriteria { + text-align: center; +} + +.pageNavi { + text-align: right; +} + +.pageNaviItem { + margin: 0 5px; +} \ No newline at end of file diff --git a/src/xoonips/lib/XoonipsListItem.tsx b/src/xoonips/lib/XoonipsListItem.tsx new file mode 100644 index 0000000..c6b2718 --- /dev/null +++ b/src/xoonips/lib/XoonipsListItem.tsx @@ -0,0 +1,241 @@ +import React, { ChangeEvent, Component } from 'react'; +import { RouteComponentProps } from 'react-router'; +import { Link, withRouter } from 'react-router-dom'; +import Loading from '../../common/lib/Loading'; +import { MultiLang } from '../../config'; +import Functions from '../../functions'; +import ItemType from '../item-type'; +import { Item, SearchFunc, SearchResult, SortCondition, SortConditionLimit, SortConditionOrderBy, SortConditionOrderDir } from './ItemUtil'; +import styles from './XoonipsListItem.module.css'; + +const SORT_CONDITION_DEFAULT: SortCondition = { + limit: 20, + page: 1, + orderBy: 'title', + orderDir: 1 +}; +const SORT_CONDITION_RANGE_ORDER_BY = ['title', 'doi', 'last_update_date', 'creation_date', 'publication_date']; +const SORT_CONDITION_RANGE_ORDER_DIR = ['0', '1']; +const SORT_CONDITION_RANGE_LIMIT = ['20', '50', '100']; + +interface Props extends RouteComponentProps { + lang: MultiLang; + url: string; + search: SearchFunc +} + +interface State { + loading: boolean; + condition: SortCondition; + result: SearchResult; +} + +class XoonipsListItem extends Component { + + private isActive = false; + + constructor(props: Props) { + super(props); + this.state = { + loading: true, + condition: this.getSortConditionByQuery(this.props.location.search), + result: { total: 0, data: [] } + }; + this.handleSelectOrderby = this.handleSelectOrderby.bind(this); + this.handleSelectItemcount = this.handleSelectItemcount.bind(this); + } + + componentDidMount() { + this.isActive = true; + this.props.search(this.state.condition, (result) => { + if (this.isActive) { + this.setState({ loading: false, result }); + } + }); + } + + componentDidUpdate(prevProps: Props, prevState: State) { + const condition = this.getSortConditionByQuery(this.props.location.search); + if (prevProps.url !== this.props.url || this.isConditionChanged(prevState.condition, condition)) { + this.props.search(condition, (result) => { + if (this.isActive) { + this.setState({ loading: false, result, condition }); + } + }); + } + } + + componentWillUnmount() { + this.isActive = false; + } + + handleSelectOrderby(event: ChangeEvent) { + const value = event.target.value; + const url = this.getListUrl({ orderby: value }); + this.props.history.push(url); + } + + handleSelectItemcount(event: ChangeEvent) { + const value = parseInt(event.target.value, 10); + const url = this.getListUrl({ limit: value }); + this.props.history.push(url); + } + + isConditionChanged(prev: SortCondition, next: SortCondition) { + return prev.limit !== next.limit || prev.orderBy !== next.orderBy || prev.orderDir !== next.orderDir || prev.page !== next.page; + } + + getListUrl(query: { orderby?: string, order_dir?: number, limit?: number, page?: number }) { + const newOrderBy: string = typeof query.orderby !== 'undefined' ? query.orderby : this.state.condition.orderBy; + const newOrderDir: number = typeof query.order_dir !== 'undefined' ? query.order_dir : this.state.condition.orderDir; + const newLimit: number = typeof query.limit !== 'undefined' ? query.limit : this.state.condition.limit; + let newPage: number = typeof query.page !== 'undefined' ? query.page : this.state.condition.page; + if (newLimit !== this.state.condition.limit || newOrderBy !== this.state.condition.orderBy) { + newPage = SORT_CONDITION_DEFAULT.page; + } + const params = new URLSearchParams({ + orderby: newOrderBy, + order_dir: String(newOrderDir), + itemcount: String(newLimit), + page: String(newPage), + }); + const join = this.props.url.indexOf('?') < 0 ? '?' : '&' + return this.props.url + join + params.toString(); + } + + getDefaultSortCondition() { + return Object.assign({}, SORT_CONDITION_DEFAULT); + }; + + getSortConditionByQuery(queryString: string) { + const query = new URLSearchParams(queryString); + const condition = this.getDefaultSortCondition(); + const orderby = query.get('orderby'); + if (orderby !== null && SORT_CONDITION_RANGE_ORDER_BY.includes(orderby)) { + condition.orderBy = orderby as SortConditionOrderBy; + } + const order_dir = query.get('order_dir'); + if (order_dir !== null && SORT_CONDITION_RANGE_ORDER_DIR.includes(order_dir)) { + condition.orderDir = parseInt(order_dir, 10) as SortConditionOrderDir; + } + const itemcount = query.get('itemcount'); + if (itemcount !== null && SORT_CONDITION_RANGE_LIMIT.includes(itemcount)) { + condition.limit = parseInt(itemcount, 10) as SortConditionLimit; + } + const page = query.get('page'); + if (page !== null && page.match(/^\d+$/) !== null) { + condition.page = parseInt(page, 10); + } + return condition; + } + + renderSortCriteria() { + const { lang } = this.props; + let orderDir; + if (this.state.condition.orderDir !== SortConditionOrderDir.ASC) { + const url = this.getListUrl({ order_dir: SortConditionOrderDir.ASC }); + orderDir = ( + ▼ ▲ + ); + } else { + const url = this.getListUrl({ order_dir: SortConditionOrderDir.DESC }); + orderDir = ( + ▼ ▲ + ); + } + return ( +
+ + + + + + + +
+ Order by  + +  {orderDir} + + No.Item per page  + +
+
+ ); + }; + + renderPageNavi(result: SearchResult) { + const maxPage = Math.floor(result.total / this.state.condition.limit) + (result.total % this.state.condition.limit !== 0 ? 1 : 0); + const link = (title: string, page: number, id: string) => { + if (page === 0 || page === this.state.condition.page) { + return ({title}); + } + const url: string = this.getListUrl({ page: page }); + return ({title}); + } + let startPage = (this.state.condition.page - 4) > 1 ? this.state.condition.page - 4 : 1; + const endPage = (startPage + 9) > maxPage ? maxPage : startPage + 9; + if ((endPage - startPage) < 9) { + startPage = (endPage - 9) > 0 ? endPage - 9 : 1; + } + let pageLinks: JSX.Element[] = []; + pageLinks.push(link('PREV', this.state.condition.page - 1, 'p')); + for (let i = startPage; i <= endPage; i++) { + pageLinks.push(link(String(i), i, String(i))); + } + pageLinks.push(link('NEXT', this.state.condition.page >= maxPage ? 0 : this.state.condition.page + 1, 'n')); + return ( +
+ {pageLinks} +
+ ); + } + + render() { + const { lang } = this.props; + if (this.state.loading) { + return ; + } + const result = this.state.result; + if (result.data.length === 0) { + return ( +

No items found.

+ ); + } + const startNum = 1 + this.state.condition.limit * (this.state.condition.page - 1); + let endNum = this.state.condition.limit * this.state.condition.page; + if (endNum > result.total) { + endNum = result.total; + } + const pageNavi = this.renderPageNavi(result); + const items = result.data.map((item: Item, idx) => { + const evenodd = idx % 2 === 0 ? 'even' : 'odd'; + return (); + }); + return ( + <> + {this.renderSortCriteria()} +

{startNum} - {endNum} of {result.total} Items

+ {pageNavi} + + + {items} + +
+ {pageNavi} + + ); + } +} + +export default withRouter(XoonipsListItem); \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 7a979e3..54c5aa3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,6 +2,11 @@ # yarn lockfile v1 +"@ant-design/css-animation@^1.7.2": + version "1.7.2" + resolved "https://registry.yarnpkg.com/@ant-design/css-animation/-/css-animation-1.7.2.tgz#4ee5d2ec0fb7cc0a78b44e1c82628bd4621ac7e3" + integrity sha512-bvVOe7A+r7lws58B7r+fgnQDK90cV45AXuvGx6i5CCSX1W/M3AJnHsNggDANBxEtWdNdFWcDd5LorB+RdSIlBw== + "@babel/code-frame@7.8.3", "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.8.3.tgz#33e25903d7481181534e12ec0a25f16b6fcf419e" @@ -9,42 +14,65 @@ dependencies: "@babel/highlight" "^7.8.3" -"@babel/compat-data@^7.8.4": - version "7.8.5" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.8.5.tgz#d28ce872778c23551cbb9432fc68d28495b613b9" - integrity sha512-jWYUqQX/ObOhG1UiEkbH5SANsE/8oKXiQWjj7p7xgj9Zmnt//aUvyz4dBkK0HNsS8/cbyC5NmmH87VekW+mXFg== +"@babel/compat-data@^7.9.0", "@babel/compat-data@^7.9.6": + version "7.9.6" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.9.6.tgz#3f604c40e420131affe6f2c8052e9a275ae2049b" + integrity sha512-5QPTrNen2bm7RBc7dsOmcA5hbrS4O2Vhmk5XOL4zWW/zD/hV0iinpefDlkm+tBBy8kDtFaaeEvmAqt+nURAV2g== dependencies: - browserslist "^4.8.5" + browserslist "^4.11.1" invariant "^2.2.4" semver "^5.5.0" -"@babel/core@7.8.4", "@babel/core@^7.1.0", "@babel/core@^7.4.5": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.8.4.tgz#d496799e5c12195b3602d0fddd77294e3e38e80e" - integrity sha512-0LiLrB2PwrVI+a2/IEskBopDYSd8BCb3rOvH7D5tzoWd696TBEduBvuLVm4Nx6rltrLZqvI3MCalB2K2aVzQjA== +"@babel/core@7.9.0": + version "7.9.0" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.9.0.tgz#ac977b538b77e132ff706f3b8a4dbad09c03c56e" + integrity sha512-kWc7L0fw1xwvI0zi8OKVBuxRVefwGOrKSQMvrQ3dW+bIIavBY3/NpXmpjMy7bQnLgwgzWQZ8TlM57YHpHNHz4w== dependencies: "@babel/code-frame" "^7.8.3" - "@babel/generator" "^7.8.4" - "@babel/helpers" "^7.8.4" - "@babel/parser" "^7.8.4" - "@babel/template" "^7.8.3" - "@babel/traverse" "^7.8.4" - "@babel/types" "^7.8.3" + "@babel/generator" "^7.9.0" + "@babel/helper-module-transforms" "^7.9.0" + "@babel/helpers" "^7.9.0" + "@babel/parser" "^7.9.0" + "@babel/template" "^7.8.6" + "@babel/traverse" "^7.9.0" + "@babel/types" "^7.9.0" convert-source-map "^1.7.0" debug "^4.1.0" gensync "^1.0.0-beta.1" - json5 "^2.1.0" + json5 "^2.1.2" lodash "^4.17.13" resolve "^1.3.2" semver "^5.4.1" source-map "^0.5.0" -"@babel/generator@^7.4.0", "@babel/generator@^7.8.4": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.8.4.tgz#35bbc74486956fe4251829f9f6c48330e8d0985e" - integrity sha512-PwhclGdRpNAf3IxZb0YVuITPZmmrXz9zf6fH8lT4XbrmfQKr6ryBzhv593P5C6poJRciFCL/eHGW2NuGrgEyxA== +"@babel/core@^7.1.0", "@babel/core@^7.4.5": + version "7.9.6" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.9.6.tgz#d9aa1f580abf3b2286ef40b6904d390904c63376" + integrity sha512-nD3deLvbsApbHAHttzIssYqgb883yU/d9roe4RZymBCDaZryMJDbptVpEpeQuRh4BJ+SYI8le9YGxKvFEvl1Wg== dependencies: - "@babel/types" "^7.8.3" + "@babel/code-frame" "^7.8.3" + "@babel/generator" "^7.9.6" + "@babel/helper-module-transforms" "^7.9.0" + "@babel/helpers" "^7.9.6" + "@babel/parser" "^7.9.6" + "@babel/template" "^7.8.6" + "@babel/traverse" "^7.9.6" + "@babel/types" "^7.9.6" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.1" + json5 "^2.1.2" + lodash "^4.17.13" + resolve "^1.3.2" + semver "^5.4.1" + source-map "^0.5.0" + +"@babel/generator@^7.4.0", "@babel/generator@^7.9.0", "@babel/generator@^7.9.6": + version "7.9.6" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.9.6.tgz#5408c82ac5de98cda0d77d8124e99fa1f2170a43" + integrity sha512-+htwWKJbH2bL72HRluF8zumBxzuX0ZZUFl3JLNyoUjM/Ho8wnVpPXM6aUz8cfKDqQ/h7zHqKt4xzJteUosckqQ== + dependencies: + "@babel/types" "^7.9.6" jsesc "^2.5.1" lodash "^4.17.13" source-map "^0.5.0" @@ -64,53 +92,54 @@ "@babel/helper-explode-assignable-expression" "^7.8.3" "@babel/types" "^7.8.3" -"@babel/helper-builder-react-jsx@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.8.3.tgz#dee98d7d79cc1f003d80b76fe01c7f8945665ff6" - integrity sha512-JT8mfnpTkKNCboTqZsQTdGo3l3Ik3l7QIt9hh0O9DYiwVel37VoJpILKM4YFbP2euF32nkQSb+F9cUk9b7DDXQ== +"@babel/helper-builder-react-jsx-experimental@^7.9.0": + version "7.9.5" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx-experimental/-/helper-builder-react-jsx-experimental-7.9.5.tgz#0b4b3e04e6123f03b404ca4dfd6528fe6bb92fe3" + integrity sha512-HAagjAC93tk748jcXpZ7oYRZH485RCq/+yEv9SIWezHRPv9moZArTnkUNciUNzvwHUABmiWKlcxJvMcu59UwTg== dependencies: - "@babel/types" "^7.8.3" - esutils "^2.0.0" + "@babel/helper-annotate-as-pure" "^7.8.3" + "@babel/helper-module-imports" "^7.8.3" + "@babel/types" "^7.9.5" -"@babel/helper-call-delegate@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-call-delegate/-/helper-call-delegate-7.8.3.tgz#de82619898aa605d409c42be6ffb8d7204579692" - integrity sha512-6Q05px0Eb+N4/GTyKPPvnkig7Lylw+QzihMpws9iiZQv7ZImf84ZsZpQH7QoWN4n4tm81SnSzPgHw2qtO0Zf3A== +"@babel/helper-builder-react-jsx@^7.9.0": + version "7.9.0" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.9.0.tgz#16bf391990b57732700a3278d4d9a81231ea8d32" + integrity sha512-weiIo4gaoGgnhff54GQ3P5wsUQmnSwpkvU0r6ZHq6TzoSzKy4JxHEgnxNytaKbov2a9z/CVNyzliuCOUPEX3Jw== dependencies: - "@babel/helper-hoist-variables" "^7.8.3" - "@babel/traverse" "^7.8.3" - "@babel/types" "^7.8.3" + "@babel/helper-annotate-as-pure" "^7.8.3" + "@babel/types" "^7.9.0" -"@babel/helper-compilation-targets@^7.8.4": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.8.4.tgz#03d7ecd454b7ebe19a254f76617e61770aed2c88" - integrity sha512-3k3BsKMvPp5bjxgMdrFyq0UaEO48HciVrOVF0+lon8pp95cyJ2ujAh0TrBHNMnJGT2rr0iKOJPFFbSqjDyf/Pg== +"@babel/helper-compilation-targets@^7.8.7", "@babel/helper-compilation-targets@^7.9.6": + version "7.9.6" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.9.6.tgz#1e05b7ccc9d38d2f8b40b458b380a04dcfadd38a" + integrity sha512-x2Nvu0igO0ejXzx09B/1fGBxY9NXQlBW2kZsSxCJft+KHN8t9XWzIvFxtPHnBOAXpVsdxZKZFbRUC8TsNKajMw== dependencies: - "@babel/compat-data" "^7.8.4" - browserslist "^4.8.5" + "@babel/compat-data" "^7.9.6" + browserslist "^4.11.1" invariant "^2.2.4" levenary "^1.1.1" semver "^5.5.0" -"@babel/helper-create-class-features-plugin@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.8.3.tgz#5b94be88c255f140fd2c10dd151e7f98f4bff397" - integrity sha512-qmp4pD7zeTxsv0JNecSBsEmG1ei2MqwJq4YQcK3ZWm/0t07QstWfvuV/vm3Qt5xNMFETn2SZqpMx2MQzbtq+KA== +"@babel/helper-create-class-features-plugin@^7.8.3", "@babel/helper-create-class-features-plugin@^7.9.6": + version "7.9.6" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.9.6.tgz#965c8b0a9f051801fd9d3b372ca0ccf200a90897" + integrity sha512-6N9IeuyHvMBRyjNYOMJHrhwtu4WJMrYf8hVbEHD3pbbbmNOk1kmXSQs7bA4dYDUaIx4ZEzdnvo6NwC3WHd/Qow== dependencies: - "@babel/helper-function-name" "^7.8.3" + "@babel/helper-function-name" "^7.9.5" "@babel/helper-member-expression-to-functions" "^7.8.3" "@babel/helper-optimise-call-expression" "^7.8.3" "@babel/helper-plugin-utils" "^7.8.3" - "@babel/helper-replace-supers" "^7.8.3" + "@babel/helper-replace-supers" "^7.9.6" "@babel/helper-split-export-declaration" "^7.8.3" -"@babel/helper-create-regexp-features-plugin@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.8.3.tgz#c774268c95ec07ee92476a3862b75cc2839beb79" - integrity sha512-Gcsm1OHCUr9o9TcJln57xhWHtdXbA2pgQ58S0Lxlks0WMGNXuki4+GLfX0p+L2ZkINUGZvfkz8rzoqJQSthI+Q== +"@babel/helper-create-regexp-features-plugin@^7.8.3", "@babel/helper-create-regexp-features-plugin@^7.8.8": + version "7.8.8" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.8.8.tgz#5d84180b588f560b7864efaeea89243e58312087" + integrity sha512-LYVPdwkrQEiX9+1R29Ld/wTrmQu1SSKYnuOk3g0CkcZMA1p0gsNxJFj/3gBdaJ7Cg0Fnek5z0DsMULePP7Lrqg== dependencies: + "@babel/helper-annotate-as-pure" "^7.8.3" "@babel/helper-regex" "^7.8.3" - regexpu-core "^4.6.0" + regexpu-core "^4.7.0" "@babel/helper-define-map@^7.8.3": version "7.8.3" @@ -129,14 +158,14 @@ "@babel/traverse" "^7.8.3" "@babel/types" "^7.8.3" -"@babel/helper-function-name@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.8.3.tgz#eeeb665a01b1f11068e9fb86ad56a1cb1a824cca" - integrity sha512-BCxgX1BC2hD/oBlIFUgOCQDOPV8nSINxCwM3o93xP4P9Fq6aV5sgv2cOOITDMtCfQ+3PvHp3l689XZvAM9QyOA== +"@babel/helper-function-name@^7.8.3", "@babel/helper-function-name@^7.9.5": + version "7.9.5" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.9.5.tgz#2b53820d35275120e1874a82e5aabe1376920a5c" + integrity sha512-JVcQZeXM59Cd1qanDUxv9fgJpt3NeKUaqBqUEvfmQ+BCOKq2xUgaWZW2hr0dkbyJgezYuplEoh5knmrnS68efw== dependencies: "@babel/helper-get-function-arity" "^7.8.3" "@babel/template" "^7.8.3" - "@babel/types" "^7.8.3" + "@babel/types" "^7.9.5" "@babel/helper-get-function-arity@^7.8.3": version "7.8.3" @@ -166,16 +195,17 @@ dependencies: "@babel/types" "^7.8.3" -"@babel/helper-module-transforms@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.8.3.tgz#d305e35d02bee720fbc2c3c3623aa0c316c01590" - integrity sha512-C7NG6B7vfBa/pwCOshpMbOYUmrYQDfCpVL/JCRu0ek8B5p8kue1+BCXpg2vOYs7w5ACB9GTOBYQ5U6NwrMg+3Q== +"@babel/helper-module-transforms@^7.9.0": + version "7.9.0" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.9.0.tgz#43b34dfe15961918707d247327431388e9fe96e5" + integrity sha512-0FvKyu0gpPfIQ8EkxlrAydOWROdHpBmiCiRwLkUiBGhCUPRRbVD2/tm3sFr/c/GWFrQ/ffutGUAnx7V0FzT2wA== dependencies: "@babel/helper-module-imports" "^7.8.3" + "@babel/helper-replace-supers" "^7.8.6" "@babel/helper-simple-access" "^7.8.3" "@babel/helper-split-export-declaration" "^7.8.3" - "@babel/template" "^7.8.3" - "@babel/types" "^7.8.3" + "@babel/template" "^7.8.6" + "@babel/types" "^7.9.0" lodash "^4.17.13" "@babel/helper-optimise-call-expression@^7.8.3": @@ -208,15 +238,15 @@ "@babel/traverse" "^7.8.3" "@babel/types" "^7.8.3" -"@babel/helper-replace-supers@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.8.3.tgz#91192d25f6abbcd41da8a989d4492574fb1530bc" - integrity sha512-xOUssL6ho41U81etpLoT2RTdvdus4VfHamCuAm4AHxGr+0it5fnwoVdwUJ7GFEqCsQYzJUhcbsN9wB9apcYKFA== +"@babel/helper-replace-supers@^7.8.3", "@babel/helper-replace-supers@^7.8.6", "@babel/helper-replace-supers@^7.9.6": + version "7.9.6" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.9.6.tgz#03149d7e6a5586ab6764996cd31d6981a17e1444" + integrity sha512-qX+chbxkbArLyCImk3bWV+jB5gTNU/rsze+JlcF6Nf8tVTigPJSI1o1oBow/9Resa1yehUO9lIipsmu9oG4RzA== dependencies: "@babel/helper-member-expression-to-functions" "^7.8.3" "@babel/helper-optimise-call-expression" "^7.8.3" - "@babel/traverse" "^7.8.3" - "@babel/types" "^7.8.3" + "@babel/traverse" "^7.9.6" + "@babel/types" "^7.9.6" "@babel/helper-simple-access@^7.8.3": version "7.8.3" @@ -233,6 +263,11 @@ dependencies: "@babel/types" "^7.8.3" +"@babel/helper-validator-identifier@^7.9.0", "@babel/helper-validator-identifier@^7.9.5": + version "7.9.5" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.5.tgz#90977a8e6fbf6b431a7dc31752eee233bf052d80" + integrity sha512-/8arLKUFq882w4tWGj9JYzRpAlZgiWUJ+dtteNTDqrRBz9Iguck9Rn3ykuBDoUwh2TO4tSAJlrxDUOXWklJe4g== + "@babel/helper-wrap-function@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.8.3.tgz#9dbdb2bb55ef14aaa01fe8c99b629bd5352d8610" @@ -243,28 +278,28 @@ "@babel/traverse" "^7.8.3" "@babel/types" "^7.8.3" -"@babel/helpers@^7.8.4": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.8.4.tgz#754eb3ee727c165e0a240d6c207de7c455f36f73" - integrity sha512-VPbe7wcQ4chu4TDQjimHv/5tj73qz88o12EPkO2ValS2QiQS/1F2SsjyIGNnAD0vF/nZS6Cf9i+vW6HIlnaR8w== +"@babel/helpers@^7.9.0", "@babel/helpers@^7.9.6": + version "7.9.6" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.9.6.tgz#092c774743471d0bb6c7de3ad465ab3d3486d580" + integrity sha512-tI4bUbldloLcHWoRUMAj4g1bF313M/o6fBKhIsb3QnGVPwRm9JsNf/gqMkQ7zjqReABiffPV6RWj7hEglID5Iw== dependencies: "@babel/template" "^7.8.3" - "@babel/traverse" "^7.8.4" - "@babel/types" "^7.8.3" + "@babel/traverse" "^7.9.6" + "@babel/types" "^7.9.6" "@babel/highlight@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.8.3.tgz#28f173d04223eaaa59bc1d439a3836e6d1265797" - integrity sha512-PX4y5xQUvy0fnEVHrYOarRPXVWafSjTW9T0Hab8gVIawpl2Sj0ORyrygANq+KjcNlSSTw0YCLSNA8OyZ1I4yEg== + version "7.9.0" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.9.0.tgz#4e9b45ccb82b79607271b2979ad82c7b68163079" + integrity sha512-lJZPilxX7Op3Nv/2cvFdnlepPXDxi29wxteT57Q965oc5R9v86ztx0jfxVrTcBk8C2kcPkkDa2Z4T3ZsPPVWsQ== dependencies: + "@babel/helper-validator-identifier" "^7.9.0" chalk "^2.0.0" - esutils "^2.0.2" js-tokens "^4.0.0" -"@babel/parser@^7.0.0", "@babel/parser@^7.1.0", "@babel/parser@^7.4.3", "@babel/parser@^7.8.3", "@babel/parser@^7.8.4": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.8.4.tgz#d1dbe64691d60358a974295fa53da074dd2ce8e8" - integrity sha512-0fKu/QqildpXmPVaRBoXOlyBb3MC+J0A66x97qEfLOMkn3u6nfY5esWogQwi/K0BjASYy4DbnsEWnpNL6qT5Mw== +"@babel/parser@^7.1.0", "@babel/parser@^7.4.3", "@babel/parser@^7.7.0", "@babel/parser@^7.8.6", "@babel/parser@^7.9.0", "@babel/parser@^7.9.6": + version "7.9.6" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.9.6.tgz#3b1bbb30dabe600cd72db58720998376ff653bc7" + integrity sha512-AoeIEJn8vt+d/6+PXDRPaksYhnlbMIiejioBZvvMQsOjW/JYK6k/0dKnvvP3EhK5GfMBWDPtrxRtegWdAcdq9Q== "@babel/plugin-proposal-async-generator-functions@^7.8.3": version "7.8.3" @@ -308,7 +343,7 @@ "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-syntax-json-strings" "^7.8.0" -"@babel/plugin-proposal-nullish-coalescing-operator@^7.8.3": +"@babel/plugin-proposal-nullish-coalescing-operator@7.8.3", "@babel/plugin-proposal-nullish-coalescing-operator@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.8.3.tgz#e4572253fdeed65cddeecfdab3f928afeb2fd5d2" integrity sha512-TS9MlfzXpXKt6YYomudb/KU7nQI6/xnapG6in1uZxoxDghuSMZsPb6D2fyUwNYSAp4l1iR7QtFOjkqcRYcUsfw== @@ -316,7 +351,7 @@ "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" -"@babel/plugin-proposal-numeric-separator@7.8.3": +"@babel/plugin-proposal-numeric-separator@7.8.3", "@babel/plugin-proposal-numeric-separator@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.8.3.tgz#5d6769409699ec9b3b68684cd8116cedff93bad8" integrity sha512-jWioO1s6R/R+wEHizfaScNsAx+xKgwTLNXSh7tTC4Usj3ItsPEhYkEpU4h+lpnBwq7NBVOJXfO6cRFYcX69JUQ== @@ -324,13 +359,14 @@ "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-syntax-numeric-separator" "^7.8.3" -"@babel/plugin-proposal-object-rest-spread@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.8.3.tgz#eb5ae366118ddca67bed583b53d7554cad9951bb" - integrity sha512-8qvuPwU/xxUCt78HocNlv0mXXo0wdh9VT1R04WU8HGOfaOob26pF+9P5/lYjN/q7DHOX1bvX60hnhOvuQUJdbA== +"@babel/plugin-proposal-object-rest-spread@^7.9.0", "@babel/plugin-proposal-object-rest-spread@^7.9.6": + version "7.9.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.9.6.tgz#7a093586fcb18b08266eb1a7177da671ac575b63" + integrity sha512-Ga6/fhGqA9Hj+y6whNpPv8psyaK5xzrQwSPsGPloVkvmH+PqW1ixdnfJ9uIO06OjQNYol3PMnfmJ8vfZtkzF+A== dependencies: "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-syntax-object-rest-spread" "^7.8.0" + "@babel/plugin-transform-parameters" "^7.9.5" "@babel/plugin-proposal-optional-catch-binding@^7.8.3": version "7.8.3" @@ -340,20 +376,20 @@ "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" -"@babel/plugin-proposal-optional-chaining@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.8.3.tgz#ae10b3214cb25f7adb1f3bc87ba42ca10b7e2543" - integrity sha512-QIoIR9abkVn+seDE3OjA08jWcs3eZ9+wJCKSRgo3WdEU2csFYgdScb+8qHB3+WXsGJD55u+5hWCISI7ejXS+kg== +"@babel/plugin-proposal-optional-chaining@7.9.0", "@babel/plugin-proposal-optional-chaining@^7.9.0": + version "7.9.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.9.0.tgz#31db16b154c39d6b8a645292472b98394c292a58" + integrity sha512-NDn5tu3tcv4W30jNhmc2hyD5c56G6cXx4TesJubhxrJeCvuuMpttxr0OnNCqbZGhFjLrg+NIhxxC+BK5F6yS3w== dependencies: "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-syntax-optional-chaining" "^7.8.0" -"@babel/plugin-proposal-unicode-property-regex@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.8.3.tgz#b646c3adea5f98800c9ab45105ac34d06cd4a47f" - integrity sha512-1/1/rEZv2XGweRwwSkLpY+s60za9OZ1hJs4YDqFHCw0kYWYwL5IFljVY1MYBL+weT1l9pokDO2uhSTLVxzoHkQ== +"@babel/plugin-proposal-unicode-property-regex@^7.4.4", "@babel/plugin-proposal-unicode-property-regex@^7.8.3": + version "7.8.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.8.8.tgz#ee3a95e90cdc04fe8cd92ec3279fa017d68a0d1d" + integrity sha512-EVhjVsMpbhLw9ZfHWSx2iy13Q8Z/eg8e8ccVWt23sWQK5l1UdkoLJPN5w69UA4uITGBnEZD2JOe4QOHycYKv8A== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.8.3" + "@babel/helper-create-regexp-features-plugin" "^7.8.8" "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-syntax-async-generators@^7.8.0": @@ -405,7 +441,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-numeric-separator@^7.8.3": +"@babel/plugin-syntax-numeric-separator@^7.8.0", "@babel/plugin-syntax-numeric-separator@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.8.3.tgz#0e3fb63e09bea1b11e96467271c8308007e7c41f" integrity sha512-H7dCMAdN83PcCmqmkHB5dtp+Xa9a6LKSvA2hiFBC/5alSHxM5VgWZXFqDi0YFe8XNGT6iCa+z4V4zSt/PdZ7Dw== @@ -478,17 +514,17 @@ "@babel/helper-plugin-utils" "^7.8.3" lodash "^4.17.13" -"@babel/plugin-transform-classes@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.8.3.tgz#46fd7a9d2bb9ea89ce88720477979fe0d71b21b8" - integrity sha512-SjT0cwFJ+7Rbr1vQsvphAHwUHvSUPmMjMU/0P59G8U2HLFqSa082JO7zkbDNWs9kH/IUqpHI6xWNesGf8haF1w== +"@babel/plugin-transform-classes@^7.9.0", "@babel/plugin-transform-classes@^7.9.5": + version "7.9.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.9.5.tgz#800597ddb8aefc2c293ed27459c1fcc935a26c2c" + integrity sha512-x2kZoIuLC//O5iA7PEvecB105o7TLzZo8ofBVhP79N+DO3jaX+KYfww9TQcfBEZD0nikNyYcGB1IKtRq36rdmg== dependencies: "@babel/helper-annotate-as-pure" "^7.8.3" "@babel/helper-define-map" "^7.8.3" - "@babel/helper-function-name" "^7.8.3" + "@babel/helper-function-name" "^7.9.5" "@babel/helper-optimise-call-expression" "^7.8.3" "@babel/helper-plugin-utils" "^7.8.3" - "@babel/helper-replace-supers" "^7.8.3" + "@babel/helper-replace-supers" "^7.8.6" "@babel/helper-split-export-declaration" "^7.8.3" globals "^11.1.0" @@ -499,14 +535,14 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-transform-destructuring@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.8.3.tgz#20ddfbd9e4676906b1056ee60af88590cc7aaa0b" - integrity sha512-H4X646nCkiEcHZUZaRkhE2XVsoz0J/1x3VVujnn96pSoGCtKPA99ZZA+va+gK+92Zycd6OBKCD8tDb/731bhgQ== +"@babel/plugin-transform-destructuring@^7.8.3", "@babel/plugin-transform-destructuring@^7.9.5": + version "7.9.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.9.5.tgz#72c97cf5f38604aea3abf3b935b0e17b1db76a50" + integrity sha512-j3OEsGel8nHL/iusv/mRd5fYZ3DrOxWC82x0ogmdN/vHfAP4MYw+AFKYanzWlktNwikKvlzUV//afBW5FTp17Q== dependencies: "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-transform-dotall-regex@^7.8.3": +"@babel/plugin-transform-dotall-regex@^7.4.4", "@babel/plugin-transform-dotall-regex@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.8.3.tgz#c3c6ec5ee6125c6993c5cbca20dc8621a9ea7a6e" integrity sha512-kLs1j9Nn4MQoBYdRXH6AeaXMbEJFaFu/v1nQkvib6QzTj8MZI5OQzqmD83/2jEM1z0DLilra5aWO5YpyC0ALIw== @@ -529,18 +565,18 @@ "@babel/helper-builder-binary-assignment-operator-visitor" "^7.8.3" "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-transform-flow-strip-types@7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.8.3.tgz#da705a655466b2a9b36046b57bf0cbcd53551bd4" - integrity sha512-g/6WTWG/xbdd2exBBzMfygjX/zw4eyNC4X8pRaq7aRHRoDUCzAIu3kGYIXviOv8BjCuWm8vDBwjHcjiRNgXrPA== +"@babel/plugin-transform-flow-strip-types@7.9.0": + version "7.9.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.9.0.tgz#8a3538aa40434e000b8f44a3c5c9ac7229bd2392" + integrity sha512-7Qfg0lKQhEHs93FChxVLAvhBshOPQDtJUTVHr/ZwQNRccCm4O9D79r9tVSoV8iNwjP1YgfD+e/fgHcPkN1qEQg== dependencies: "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-syntax-flow" "^7.8.3" -"@babel/plugin-transform-for-of@^7.8.4": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.8.4.tgz#6fe8eae5d6875086ee185dd0b098a8513783b47d" - integrity sha512-iAXNlOWvcYUYoV8YIxwS7TxGRJcxyl8eQCfT+A5j8sKUzRFvJdcyjp97jL2IghWSRDaL2PU2O2tX8Cu9dTBq5A== +"@babel/plugin-transform-for-of@^7.9.0": + version "7.9.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.9.0.tgz#0f260e27d3e29cd1bb3128da5e76c761aa6c108e" + integrity sha512-lTAnWOpMwOXpyDx06N+ywmF3jNbafZEqZ96CGYabxHrxNX8l5ny7dt4bK/rGwAh9utyP2b2Hv7PlZh1AAS54FQ== dependencies: "@babel/helper-plugin-utils" "^7.8.3" @@ -566,41 +602,41 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-transform-modules-amd@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.8.3.tgz#65606d44616b50225e76f5578f33c568a0b876a5" - integrity sha512-MadJiU3rLKclzT5kBH4yxdry96odTUwuqrZM+GllFI/VhxfPz+k9MshJM+MwhfkCdxxclSbSBbUGciBngR+kEQ== +"@babel/plugin-transform-modules-amd@^7.9.0", "@babel/plugin-transform-modules-amd@^7.9.6": + version "7.9.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.9.6.tgz#8539ec42c153d12ea3836e0e3ac30d5aae7b258e" + integrity sha512-zoT0kgC3EixAyIAU+9vfaUVKTv9IxBDSabgHoUCBP6FqEJ+iNiN7ip7NBKcYqbfUDfuC2mFCbM7vbu4qJgOnDw== dependencies: - "@babel/helper-module-transforms" "^7.8.3" + "@babel/helper-module-transforms" "^7.9.0" "@babel/helper-plugin-utils" "^7.8.3" - babel-plugin-dynamic-import-node "^2.3.0" + babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-commonjs@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.8.3.tgz#df251706ec331bd058a34bdd72613915f82928a5" - integrity sha512-JpdMEfA15HZ/1gNuB9XEDlZM1h/gF/YOH7zaZzQu2xCFRfwc01NXBMHHSTT6hRjlXJJs5x/bfODM3LiCk94Sxg== +"@babel/plugin-transform-modules-commonjs@^7.9.0", "@babel/plugin-transform-modules-commonjs@^7.9.6": + version "7.9.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.9.6.tgz#64b7474a4279ee588cacd1906695ca721687c277" + integrity sha512-7H25fSlLcn+iYimmsNe3uK1at79IE6SKW9q0/QeEHTMC9MdOZ+4bA+T1VFB5fgOqBWoqlifXRzYD0JPdmIrgSQ== dependencies: - "@babel/helper-module-transforms" "^7.8.3" + "@babel/helper-module-transforms" "^7.9.0" "@babel/helper-plugin-utils" "^7.8.3" "@babel/helper-simple-access" "^7.8.3" - babel-plugin-dynamic-import-node "^2.3.0" + babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-systemjs@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.8.3.tgz#d8bbf222c1dbe3661f440f2f00c16e9bb7d0d420" - integrity sha512-8cESMCJjmArMYqa9AO5YuMEkE4ds28tMpZcGZB/jl3n0ZzlsxOAi3mC+SKypTfT8gjMupCnd3YiXCkMjj2jfOg== +"@babel/plugin-transform-modules-systemjs@^7.9.0", "@babel/plugin-transform-modules-systemjs@^7.9.6": + version "7.9.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.9.6.tgz#207f1461c78a231d5337a92140e52422510d81a4" + integrity sha512-NW5XQuW3N2tTHim8e1b7qGy7s0kZ2OH3m5octc49K1SdAKGxYxeIx7hiIz05kS1R2R+hOWcsr1eYwcGhrdHsrg== dependencies: "@babel/helper-hoist-variables" "^7.8.3" - "@babel/helper-module-transforms" "^7.8.3" + "@babel/helper-module-transforms" "^7.9.0" "@babel/helper-plugin-utils" "^7.8.3" - babel-plugin-dynamic-import-node "^2.3.0" + babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-umd@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.8.3.tgz#592d578ce06c52f5b98b02f913d653ffe972661a" - integrity sha512-evhTyWhbwbI3/U6dZAnx/ePoV7H6OUG+OjiJFHmhr9FPn0VShjwC2kdxqIuQ/+1P50TMrneGzMeyMTFOjKSnAw== +"@babel/plugin-transform-modules-umd@^7.9.0": + version "7.9.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.9.0.tgz#e909acae276fec280f9b821a5f38e1f08b480697" + integrity sha512-uTWkXkIVtg/JGRSIABdBoMsoIeoHQHPTL0Y2E7xf5Oj7sLqwVsNXOkNk0VJc7vF0IMBsPeikHxFjGe+qmwPtTQ== dependencies: - "@babel/helper-module-transforms" "^7.8.3" + "@babel/helper-module-transforms" "^7.9.0" "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-transform-named-capturing-groups-regex@^7.8.3": @@ -625,12 +661,11 @@ "@babel/helper-plugin-utils" "^7.8.3" "@babel/helper-replace-supers" "^7.8.3" -"@babel/plugin-transform-parameters@^7.8.4": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.8.4.tgz#1d5155de0b65db0ccf9971165745d3bb990d77d3" - integrity sha512-IsS3oTxeTsZlE5KqzTbcC2sV0P9pXdec53SU+Yxv7o/6dvGM5AkTotQKhoSffhNgZ/dftsSiOoxy7evCYJXzVA== +"@babel/plugin-transform-parameters@^7.8.7", "@babel/plugin-transform-parameters@^7.9.5": + version "7.9.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.9.5.tgz#173b265746f5e15b2afe527eeda65b73623a0795" + integrity sha512-0+1FhHnMfj6lIIhVvS4KGQJeuhe1GI//h5uptK4PvLt+BGBxsoUJbd3/IW002yk//6sZPlFgsG1hY6OHLcy6kA== dependencies: - "@babel/helper-call-delegate" "^7.8.3" "@babel/helper-get-function-arity" "^7.8.3" "@babel/helper-plugin-utils" "^7.8.3" @@ -642,11 +677,10 @@ "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-transform-react-constant-elements@^7.0.0": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.8.3.tgz#784c25294bddaad2323eb4ff0c9f4a3f6c87d6bc" - integrity sha512-glrzN2U+egwRfkNFtL34xIBYTxbbUF2qJTP8HD3qETBBqzAWSeNB821X0GjU06+dNpq/UyCIjI72FmGE5NNkQQ== + version "7.9.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.9.0.tgz#a75abc936a3819edec42d3386d9f1c93f28d9d9e" + integrity sha512-wXMXsToAUOxJuBBEHajqKLFWcCkOSLshTI2ChCFFj1zDd7od4IOxiwLCOObNUvOpkxLpjIuaIdBMmNt6ocCPAw== dependencies: - "@babel/helper-annotate-as-pure" "^7.8.3" "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-transform-react-display-name@7.8.3", "@babel/plugin-transform-react-display-name@^7.8.3": @@ -656,37 +690,47 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-transform-react-jsx-self@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.8.3.tgz#c4f178b2aa588ecfa8d077ea80d4194ee77ed702" - integrity sha512-01OT7s5oa0XTLf2I8XGsL8+KqV9lx3EZV+jxn/L2LQ97CGKila2YMroTkCEIE0HV/FF7CMSRsIAybopdN9NTdg== +"@babel/plugin-transform-react-jsx-development@^7.9.0": + version "7.9.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.9.0.tgz#3c2a130727caf00c2a293f0aed24520825dbf754" + integrity sha512-tK8hWKrQncVvrhvtOiPpKrQjfNX3DtkNLSX4ObuGcpS9p0QrGetKmlySIGR07y48Zft8WVgPakqd/bk46JrMSw== + dependencies: + "@babel/helper-builder-react-jsx-experimental" "^7.9.0" + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-syntax-jsx" "^7.8.3" + +"@babel/plugin-transform-react-jsx-self@^7.9.0": + version "7.9.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.9.0.tgz#f4f26a325820205239bb915bad8e06fcadabb49b" + integrity sha512-K2ObbWPKT7KUTAoyjCsFilOkEgMvFG+y0FqOl6Lezd0/13kMkkjHskVsZvblRPj1PHA44PrToaZANrryppzTvQ== dependencies: "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-syntax-jsx" "^7.8.3" -"@babel/plugin-transform-react-jsx-source@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.8.3.tgz#951e75a8af47f9f120db731be095d2b2c34920e0" - integrity sha512-PLMgdMGuVDtRS/SzjNEQYUT8f4z1xb2BAT54vM1X5efkVuYBf5WyGUMbpmARcfq3NaglIwz08UVQK4HHHbC6ag== +"@babel/plugin-transform-react-jsx-source@^7.9.0": + version "7.9.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.9.0.tgz#89ef93025240dd5d17d3122294a093e5e0183de0" + integrity sha512-K6m3LlSnTSfRkM6FcRk8saNEeaeyG5k7AVkBU2bZK3+1zdkSED3qNdsWrUgQBeTVD2Tp3VMmerxVO2yM5iITmw== dependencies: "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-syntax-jsx" "^7.8.3" -"@babel/plugin-transform-react-jsx@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.8.3.tgz#4220349c0390fdefa505365f68c103562ab2fc4a" - integrity sha512-r0h+mUiyL595ikykci+fbwm9YzmuOrUBi0b+FDIKmi3fPQyFokWVEMJnRWHJPPQEjyFJyna9WZC6Viv6UHSv1g== +"@babel/plugin-transform-react-jsx@^7.9.1", "@babel/plugin-transform-react-jsx@^7.9.4": + version "7.9.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.9.4.tgz#86f576c8540bd06d0e95e0b61ea76d55f6cbd03f" + integrity sha512-Mjqf3pZBNLt854CK0C/kRuXAnE6H/bo7xYojP+WGtX8glDGSibcwnsWwhwoSuRg0+EBnxPC1ouVnuetUIlPSAw== dependencies: - "@babel/helper-builder-react-jsx" "^7.8.3" + "@babel/helper-builder-react-jsx" "^7.9.0" + "@babel/helper-builder-react-jsx-experimental" "^7.9.0" "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-syntax-jsx" "^7.8.3" -"@babel/plugin-transform-regenerator@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.8.3.tgz#b31031e8059c07495bf23614c97f3d9698bc6ec8" - integrity sha512-qt/kcur/FxrQrzFR432FGZznkVAjiyFtCOANjkAKwCbt465L6ZCiUQh2oMYGU3Wo8LRFJxNDFwWn106S5wVUNA== +"@babel/plugin-transform-regenerator@^7.8.7": + version "7.8.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.8.7.tgz#5e46a0dca2bee1ad8285eb0527e6abc9c37672f8" + integrity sha512-TIg+gAl4Z0a3WmD3mbYSk+J9ZUH6n/Yc57rtKRnlA/7rcCvpekHXe0CMZHP1gYp7/KLe9GHTuIba0vXmls6drA== dependencies: - regenerator-transform "^0.14.0" + regenerator-transform "^0.14.2" "@babel/plugin-transform-reserved-words@^7.8.3": version "7.8.3" @@ -695,10 +739,10 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-transform-runtime@7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.8.3.tgz#c0153bc0a5375ebc1f1591cb7eea223adea9f169" - integrity sha512-/vqUt5Yh+cgPZXXjmaG9NT8aVfThKk7G4OqkVhrXqwsC5soMn/qTCxs36rZ2QFhpfTJcjw4SNDIZ4RUb8OL4jQ== +"@babel/plugin-transform-runtime@7.9.0": + version "7.9.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.9.0.tgz#45468c0ae74cc13204e1d3b1f4ce6ee83258af0b" + integrity sha512-pUu9VSf3kI1OqbWINQ7MaugnitRss1z533436waNXp+0N3ur3zfut37sXiQMxkuCF4VUjwZucen/quskCh7NHw== dependencies: "@babel/helper-module-imports" "^7.8.3" "@babel/helper-plugin-utils" "^7.8.3" @@ -742,12 +786,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-transform-typescript@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.8.3.tgz#be6f01a7ef423be68e65ace1f04fc407e6d88917" - integrity sha512-Ebj230AxcrKGZPKIp4g4TdQLrqX95TobLUWKd/CwG7X1XHUH1ZpkpFvXuXqWbtGRWb7uuEWNlrl681wsOArAdQ== +"@babel/plugin-transform-typescript@^7.9.0": + version "7.9.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.9.6.tgz#2248971416a506fc78278fc0c0ea3179224af1e9" + integrity sha512-8OvsRdvpt3Iesf2qsAn+YdlwAJD7zJ+vhFZmDCa4b8dTp7MmHtKk5FF2mCsGxjZwuwsy/yIIay/nLmxST1ctVQ== dependencies: - "@babel/helper-create-class-features-plugin" "^7.8.3" + "@babel/helper-create-class-features-plugin" "^7.9.6" "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-syntax-typescript" "^7.8.3" @@ -759,27 +803,29 @@ "@babel/helper-create-regexp-features-plugin" "^7.8.3" "@babel/helper-plugin-utils" "^7.8.3" -"@babel/preset-env@7.8.4", "@babel/preset-env@^7.4.5": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.8.4.tgz#9dac6df5f423015d3d49b6e9e5fa3413e4a72c4e" - integrity sha512-HihCgpr45AnSOHRbS5cWNTINs0TwaR8BS8xIIH+QwiW8cKL0llV91njQMpeMReEPVs+1Ao0x3RLEBLtt1hOq4w== +"@babel/preset-env@7.9.0": + version "7.9.0" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.9.0.tgz#a5fc42480e950ae8f5d9f8f2bbc03f52722df3a8" + integrity sha512-712DeRXT6dyKAM/FMbQTV/FvRCms2hPCx+3weRjZ8iQVQWZejWWk1wwG6ViWMyqb/ouBbGOl5b6aCk0+j1NmsQ== dependencies: - "@babel/compat-data" "^7.8.4" - "@babel/helper-compilation-targets" "^7.8.4" + "@babel/compat-data" "^7.9.0" + "@babel/helper-compilation-targets" "^7.8.7" "@babel/helper-module-imports" "^7.8.3" "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-proposal-async-generator-functions" "^7.8.3" "@babel/plugin-proposal-dynamic-import" "^7.8.3" "@babel/plugin-proposal-json-strings" "^7.8.3" "@babel/plugin-proposal-nullish-coalescing-operator" "^7.8.3" - "@babel/plugin-proposal-object-rest-spread" "^7.8.3" + "@babel/plugin-proposal-numeric-separator" "^7.8.3" + "@babel/plugin-proposal-object-rest-spread" "^7.9.0" "@babel/plugin-proposal-optional-catch-binding" "^7.8.3" - "@babel/plugin-proposal-optional-chaining" "^7.8.3" + "@babel/plugin-proposal-optional-chaining" "^7.9.0" "@babel/plugin-proposal-unicode-property-regex" "^7.8.3" "@babel/plugin-syntax-async-generators" "^7.8.0" "@babel/plugin-syntax-dynamic-import" "^7.8.0" "@babel/plugin-syntax-json-strings" "^7.8.0" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" + "@babel/plugin-syntax-numeric-separator" "^7.8.0" "@babel/plugin-syntax-object-rest-spread" "^7.8.0" "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" "@babel/plugin-syntax-optional-chaining" "^7.8.0" @@ -788,26 +834,26 @@ "@babel/plugin-transform-async-to-generator" "^7.8.3" "@babel/plugin-transform-block-scoped-functions" "^7.8.3" "@babel/plugin-transform-block-scoping" "^7.8.3" - "@babel/plugin-transform-classes" "^7.8.3" + "@babel/plugin-transform-classes" "^7.9.0" "@babel/plugin-transform-computed-properties" "^7.8.3" "@babel/plugin-transform-destructuring" "^7.8.3" "@babel/plugin-transform-dotall-regex" "^7.8.3" "@babel/plugin-transform-duplicate-keys" "^7.8.3" "@babel/plugin-transform-exponentiation-operator" "^7.8.3" - "@babel/plugin-transform-for-of" "^7.8.4" + "@babel/plugin-transform-for-of" "^7.9.0" "@babel/plugin-transform-function-name" "^7.8.3" "@babel/plugin-transform-literals" "^7.8.3" "@babel/plugin-transform-member-expression-literals" "^7.8.3" - "@babel/plugin-transform-modules-amd" "^7.8.3" - "@babel/plugin-transform-modules-commonjs" "^7.8.3" - "@babel/plugin-transform-modules-systemjs" "^7.8.3" - "@babel/plugin-transform-modules-umd" "^7.8.3" + "@babel/plugin-transform-modules-amd" "^7.9.0" + "@babel/plugin-transform-modules-commonjs" "^7.9.0" + "@babel/plugin-transform-modules-systemjs" "^7.9.0" + "@babel/plugin-transform-modules-umd" "^7.9.0" "@babel/plugin-transform-named-capturing-groups-regex" "^7.8.3" "@babel/plugin-transform-new-target" "^7.8.3" "@babel/plugin-transform-object-super" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.8.4" + "@babel/plugin-transform-parameters" "^7.8.7" "@babel/plugin-transform-property-literals" "^7.8.3" - "@babel/plugin-transform-regenerator" "^7.8.3" + "@babel/plugin-transform-regenerator" "^7.8.7" "@babel/plugin-transform-reserved-words" "^7.8.3" "@babel/plugin-transform-shorthand-properties" "^7.8.3" "@babel/plugin-transform-spread" "^7.8.3" @@ -815,69 +861,175 @@ "@babel/plugin-transform-template-literals" "^7.8.3" "@babel/plugin-transform-typeof-symbol" "^7.8.4" "@babel/plugin-transform-unicode-regex" "^7.8.3" - "@babel/types" "^7.8.3" - browserslist "^4.8.5" + "@babel/preset-modules" "^0.1.3" + "@babel/types" "^7.9.0" + browserslist "^4.9.1" core-js-compat "^3.6.2" invariant "^2.2.2" levenary "^1.1.1" semver "^5.5.0" -"@babel/preset-react@7.8.3", "@babel/preset-react@^7.0.0": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.8.3.tgz#23dc63f1b5b0751283e04252e78cf1d6589273d2" - integrity sha512-9hx0CwZg92jGb7iHYQVgi0tOEHP/kM60CtWJQnmbATSPIQQ2xYzfoCI3EdqAhFBeeJwYMdWQuDUHMsuDbH9hyQ== +"@babel/preset-env@^7.4.5": + version "7.9.6" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.9.6.tgz#df063b276c6455ec6fcfc6e53aacc38da9b0aea6" + integrity sha512-0gQJ9RTzO0heXOhzftog+a/WyOuqMrAIugVYxMYf83gh1CQaQDjMtsOpqOwXyDL/5JcWsrCm8l4ju8QC97O7EQ== + dependencies: + "@babel/compat-data" "^7.9.6" + "@babel/helper-compilation-targets" "^7.9.6" + "@babel/helper-module-imports" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-proposal-async-generator-functions" "^7.8.3" + "@babel/plugin-proposal-dynamic-import" "^7.8.3" + "@babel/plugin-proposal-json-strings" "^7.8.3" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-proposal-numeric-separator" "^7.8.3" + "@babel/plugin-proposal-object-rest-spread" "^7.9.6" + "@babel/plugin-proposal-optional-catch-binding" "^7.8.3" + "@babel/plugin-proposal-optional-chaining" "^7.9.0" + "@babel/plugin-proposal-unicode-property-regex" "^7.8.3" + "@babel/plugin-syntax-async-generators" "^7.8.0" + "@babel/plugin-syntax-dynamic-import" "^7.8.0" + "@babel/plugin-syntax-json-strings" "^7.8.0" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" + "@babel/plugin-syntax-numeric-separator" "^7.8.0" + "@babel/plugin-syntax-object-rest-spread" "^7.8.0" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" + "@babel/plugin-syntax-optional-chaining" "^7.8.0" + "@babel/plugin-syntax-top-level-await" "^7.8.3" + "@babel/plugin-transform-arrow-functions" "^7.8.3" + "@babel/plugin-transform-async-to-generator" "^7.8.3" + "@babel/plugin-transform-block-scoped-functions" "^7.8.3" + "@babel/plugin-transform-block-scoping" "^7.8.3" + "@babel/plugin-transform-classes" "^7.9.5" + "@babel/plugin-transform-computed-properties" "^7.8.3" + "@babel/plugin-transform-destructuring" "^7.9.5" + "@babel/plugin-transform-dotall-regex" "^7.8.3" + "@babel/plugin-transform-duplicate-keys" "^7.8.3" + "@babel/plugin-transform-exponentiation-operator" "^7.8.3" + "@babel/plugin-transform-for-of" "^7.9.0" + "@babel/plugin-transform-function-name" "^7.8.3" + "@babel/plugin-transform-literals" "^7.8.3" + "@babel/plugin-transform-member-expression-literals" "^7.8.3" + "@babel/plugin-transform-modules-amd" "^7.9.6" + "@babel/plugin-transform-modules-commonjs" "^7.9.6" + "@babel/plugin-transform-modules-systemjs" "^7.9.6" + "@babel/plugin-transform-modules-umd" "^7.9.0" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.8.3" + "@babel/plugin-transform-new-target" "^7.8.3" + "@babel/plugin-transform-object-super" "^7.8.3" + "@babel/plugin-transform-parameters" "^7.9.5" + "@babel/plugin-transform-property-literals" "^7.8.3" + "@babel/plugin-transform-regenerator" "^7.8.7" + "@babel/plugin-transform-reserved-words" "^7.8.3" + "@babel/plugin-transform-shorthand-properties" "^7.8.3" + "@babel/plugin-transform-spread" "^7.8.3" + "@babel/plugin-transform-sticky-regex" "^7.8.3" + "@babel/plugin-transform-template-literals" "^7.8.3" + "@babel/plugin-transform-typeof-symbol" "^7.8.4" + "@babel/plugin-transform-unicode-regex" "^7.8.3" + "@babel/preset-modules" "^0.1.3" + "@babel/types" "^7.9.6" + browserslist "^4.11.1" + core-js-compat "^3.6.2" + invariant "^2.2.2" + levenary "^1.1.1" + semver "^5.5.0" + +"@babel/preset-modules@^0.1.3": + version "0.1.3" + resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.3.tgz#13242b53b5ef8c883c3cf7dddd55b36ce80fbc72" + integrity sha512-Ra3JXOHBq2xd56xSF7lMKXdjBn3T772Y1Wet3yWnkDly9zHvJki029tAFzvAAK5cf4YV3yoxuP61crYRol6SVg== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" + "@babel/plugin-transform-dotall-regex" "^7.4.4" + "@babel/types" "^7.4.4" + esutils "^2.0.2" + +"@babel/preset-react@7.9.1": + version "7.9.1" + resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.9.1.tgz#b346403c36d58c3bb544148272a0cefd9c28677a" + integrity sha512-aJBYF23MPj0RNdp/4bHnAP0NVqqZRr9kl0NAOP4nJCex6OYVio59+dnQzsAWFuogdLyeaKA1hmfUIVZkY5J+TQ== dependencies: "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-transform-react-display-name" "^7.8.3" - "@babel/plugin-transform-react-jsx" "^7.8.3" - "@babel/plugin-transform-react-jsx-self" "^7.8.3" - "@babel/plugin-transform-react-jsx-source" "^7.8.3" + "@babel/plugin-transform-react-jsx" "^7.9.1" + "@babel/plugin-transform-react-jsx-development" "^7.9.0" + "@babel/plugin-transform-react-jsx-self" "^7.9.0" + "@babel/plugin-transform-react-jsx-source" "^7.9.0" -"@babel/preset-typescript@7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.8.3.tgz#90af8690121beecd9a75d0cc26c6be39d1595d13" - integrity sha512-qee5LgPGui9zQ0jR1TeU5/fP9L+ovoArklEqY12ek8P/wV5ZeM/VYSQYwICeoT6FfpJTekG9Ilay5PhwsOpMHA== +"@babel/preset-react@^7.0.0": + version "7.9.4" + resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.9.4.tgz#c6c97693ac65b6b9c0b4f25b948a8f665463014d" + integrity sha512-AxylVB3FXeOTQXNXyiuAQJSvss62FEotbX2Pzx3K/7c+MKJMdSg6Ose6QYllkdCFA8EInCJVw7M/o5QbLuA4ZQ== dependencies: "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-transform-typescript" "^7.8.3" + "@babel/plugin-transform-react-display-name" "^7.8.3" + "@babel/plugin-transform-react-jsx" "^7.9.4" + "@babel/plugin-transform-react-jsx-development" "^7.9.0" + "@babel/plugin-transform-react-jsx-self" "^7.9.0" + "@babel/plugin-transform-react-jsx-source" "^7.9.0" -"@babel/runtime@7.8.4", "@babel/runtime@^7.0.0", "@babel/runtime@^7.3.4", "@babel/runtime@^7.4.5", "@babel/runtime@^7.5.1", "@babel/runtime@^7.6.2", "@babel/runtime@^7.6.3", "@babel/runtime@^7.7.2", "@babel/runtime@^7.7.6": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.8.4.tgz#d79f5a2040f7caa24d53e563aad49cbc05581308" - integrity sha512-neAp3zt80trRVBI1x0azq6c57aNBqYZH8KhMm3TaB7wEI5Q4A2SHfBHE8w9gOhI/lrqxtEbXZgQIrHP+wvSGwQ== +"@babel/preset-typescript@7.9.0": + version "7.9.0" + resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.9.0.tgz#87705a72b1f0d59df21c179f7c3d2ef4b16ce192" + integrity sha512-S4cueFnGrIbvYJgwsVFKdvOmpiL0XGw9MFW9D0vgRys5g36PBhZRL8NX8Gr2akz8XRtzq6HuDXPD/1nniagNUg== dependencies: - regenerator-runtime "^0.13.2" + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-transform-typescript" "^7.9.0" -"@babel/template@^7.4.0", "@babel/template@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.8.3.tgz#e02ad04fe262a657809327f578056ca15fd4d1b8" - integrity sha512-04m87AcQgAFdvuoyiQ2kgELr2tV8B4fP/xJAVUL3Yb3bkNdMedD3d0rlSQr3PegP0cms3eHjl1F7PWlvWbU8FQ== +"@babel/runtime-corejs3@^7.7.4", "@babel/runtime-corejs3@^7.8.3": + version "7.9.6" + resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.9.6.tgz#67aded13fffbbc2cb93247388cf84d77a4be9a71" + integrity sha512-6toWAfaALQjt3KMZQc6fABqZwUDDuWzz+cAfPhqyEnzxvdWOAkjwPNxgF8xlmo7OWLsSjaKjsskpKHRLaMArOA== + dependencies: + core-js-pure "^3.0.0" + regenerator-runtime "^0.13.4" + +"@babel/runtime@7.9.0": + version "7.9.0" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.9.0.tgz#337eda67401f5b066a6f205a3113d4ac18ba495b" + integrity sha512-cTIudHnzuWLS56ik4DnRnqqNf8MkdUzV4iFFI1h7Jo9xvrpQROYaAnaSd2mHLQAzzZAPfATynX5ord6YlNYNMA== + dependencies: + regenerator-runtime "^0.13.4" + +"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.3.4", "@babel/runtime@^7.4.5", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.3", "@babel/runtime@^7.7.2", "@babel/runtime@^7.7.4", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2", "@babel/runtime@^7.9.6": + version "7.9.6" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.9.6.tgz#a9102eb5cadedf3f31d08a9ecf294af7827ea29f" + integrity sha512-64AF1xY3OAkFHqOb9s4jpgk1Mm5vDZ4L3acHvAml+53nO1XbXLuDodsVpO4OIUsmemlUHMxNdYMNJmsvOwLrvQ== + dependencies: + regenerator-runtime "^0.13.4" + +"@babel/template@^7.4.0", "@babel/template@^7.8.3", "@babel/template@^7.8.6": + version "7.8.6" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.8.6.tgz#86b22af15f828dfb086474f964dcc3e39c43ce2b" + integrity sha512-zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg== dependencies: "@babel/code-frame" "^7.8.3" - "@babel/parser" "^7.8.3" - "@babel/types" "^7.8.3" + "@babel/parser" "^7.8.6" + "@babel/types" "^7.8.6" -"@babel/traverse@^7.0.0", "@babel/traverse@^7.1.0", "@babel/traverse@^7.4.3", "@babel/traverse@^7.8.3", "@babel/traverse@^7.8.4": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.8.4.tgz#f0845822365f9d5b0e312ed3959d3f827f869e3c" - integrity sha512-NGLJPZwnVEyBPLI+bl9y9aSnxMhsKz42so7ApAv9D+b4vAFPpY013FTS9LdKxcABoIYFU52HcYga1pPlx454mg== +"@babel/traverse@^7.1.0", "@babel/traverse@^7.4.3", "@babel/traverse@^7.7.0", "@babel/traverse@^7.8.3", "@babel/traverse@^7.9.0", "@babel/traverse@^7.9.6": + version "7.9.6" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.9.6.tgz#5540d7577697bf619cc57b92aa0f1c231a94f442" + integrity sha512-b3rAHSjbxy6VEAvlxM8OV/0X4XrG72zoxme6q1MOoe2vd0bEc+TwayhuC1+Dfgqh1QEG+pj7atQqvUprHIccsg== dependencies: "@babel/code-frame" "^7.8.3" - "@babel/generator" "^7.8.4" - "@babel/helper-function-name" "^7.8.3" + "@babel/generator" "^7.9.6" + "@babel/helper-function-name" "^7.9.5" "@babel/helper-split-export-declaration" "^7.8.3" - "@babel/parser" "^7.8.4" - "@babel/types" "^7.8.3" + "@babel/parser" "^7.9.6" + "@babel/types" "^7.9.6" debug "^4.1.0" globals "^11.1.0" lodash "^4.17.13" -"@babel/types@^7.0.0", "@babel/types@^7.3.0", "@babel/types@^7.4.0", "@babel/types@^7.4.4", "@babel/types@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.8.3.tgz#5a383dffa5416db1b73dedffd311ffd0788fb31c" - integrity sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg== +"@babel/types@^7.0.0", "@babel/types@^7.3.0", "@babel/types@^7.4.0", "@babel/types@^7.4.4", "@babel/types@^7.7.0", "@babel/types@^7.8.3", "@babel/types@^7.8.6", "@babel/types@^7.9.0", "@babel/types@^7.9.5", "@babel/types@^7.9.6": + version "7.9.6" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.9.6.tgz#2c5502b427251e9de1bd2dff95add646d95cc9f7" + integrity sha512-qxXzvBO//jO9ZnoasKF1uJzHd2+M6Q2ZPIVfnFps8JJvXy0ZBbwbNOmE6SGIY5XOY6d1Bo5lb9d9RJ8nv3WSeA== dependencies: - esutils "^2.0.2" + "@babel/helper-validator-identifier" "^7.9.5" lodash "^4.17.13" to-fast-properties "^2.0.0" @@ -1079,6 +1231,16 @@ "@types/istanbul-reports" "^1.1.1" "@types/yargs" "^13.0.0" +"@jest/types@^25.5.0": + version "25.5.0" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-25.5.0.tgz#4d6a4793f7b9599fc3680877b856a97dbccf2a9d" + integrity sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw== + dependencies: + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^1.1.1" + "@types/yargs" "^15.0.0" + chalk "^3.0.0" + "@mrmlnc/readdir-enhanced@^2.2.1": version "2.2.1" resolved "https://registry.yarnpkg.com/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz#524af240d1a360527b730475ecfa1344aa540dde" @@ -1092,10 +1254,18 @@ resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz#2b5a3ab3f918cca48a8c754c08168e3f03eba61b" integrity sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw== -"@sheerun/mutationobserver-shim@^0.3.2": - version "0.3.2" - resolved "https://registry.yarnpkg.com/@sheerun/mutationobserver-shim/-/mutationobserver-shim-0.3.2.tgz#8013f2af54a2b7d735f71560ff360d3a8176a87b" - integrity sha512-vTCdPp/T/Q3oSqwHmZ5Kpa9oI7iLtGl3RQaA/NyLHikvcrPxACkkKVr/XzkSPJWXHRhKGzVvb0urJsbMlRxi1Q== +"@popperjs/core@^2.0.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.4.0.tgz#0e1bdf8d021e7ea58affade33d9d607e11365915" + integrity sha512-NMrDy6EWh9TPdSRiHmHH2ye1v5U0gBD7pRYwSwJvomx7Bm4GG04vu63dYiVzebLOx2obPpJugew06xVP0Nk7hA== + +"@restart/hooks@^0.3.12": + version "0.3.25" + resolved "https://registry.yarnpkg.com/@restart/hooks/-/hooks-0.3.25.tgz#11004139ad1c70d2f5965a8939dcb5aeb96aa652" + integrity sha512-m2v3N5pxTsIiSH74/sb1yW8D9RxkJidGW+5Mfwn/lHb2QzhZNlaU1su7abSyT9EGf0xS/0waLjrf7/XxQHUk7w== + dependencies: + lodash "^4.17.15" + lodash-es "^4.17.15" "@svgr/babel-plugin-add-jsx-attribute@^4.2.0": version "4.2.0" @@ -1200,51 +1370,54 @@ "@svgr/plugin-svgo" "^4.3.1" loader-utils "^1.2.3" -"@testing-library/dom@^6.11.0": - version "6.12.2" - resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-6.12.2.tgz#5d549acf43f2e0c23b2abfd4e36d65594c3b2741" - integrity sha512-KCnvHra5fV+wDxg3wJObGvZFxq7v1DJt829GNFLuRDjKxVNc/B5AdsylNF5PMHFbWMXDsHwM26d2NZcZO9KjbQ== +"@testing-library/dom@^7.2.2": + version "7.5.7" + resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-7.5.7.tgz#c4bf683a65083d4a78644588cfa4ad684c113fc7" + integrity sha512-835MiwAxQE7xjSrhpeJbv41UQRmsPJQ0tGfzWiJMdZj2LBbdG5cT8Z44Viv11/XucCmJHr/v8q7VpZnuSimscg== dependencies: - "@babel/runtime" "^7.6.2" - "@sheerun/mutationobserver-shim" "^0.3.2" - "@types/testing-library__dom" "^6.0.0" - aria-query "3.0.0" - pretty-format "^24.9.0" - wait-for-expect "^3.0.0" + "@babel/runtime" "^7.9.6" + aria-query "^4.0.2" + dom-accessibility-api "^0.4.4" + pretty-format "^25.5.0" -"@testing-library/jest-dom@^4.2.4": - version "4.2.4" - resolved "https://registry.yarnpkg.com/@testing-library/jest-dom/-/jest-dom-4.2.4.tgz#00dfa0cbdd837d9a3c2a7f3f0a248ea6e7b89742" - integrity sha512-j31Bn0rQo12fhCWOUWy9fl7wtqkp7In/YP2p5ZFyRuiiB9Qs3g+hS4gAmDWONbAHcRmVooNJ5eOHQDCOmUFXHg== +"@testing-library/jest-dom@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@testing-library/jest-dom/-/jest-dom-5.7.0.tgz#b2e2acb4c088a293d52ba2cd1674b526282a2f87" + integrity sha512-ZV0OtBXmTDEDxrIbqJXiOcXCZ6aIMpmDlmfHj0hGNsSuQ/nX0qPAs9HWmCzXvPfTrhufTiH2nJLvDJu/LgHzwQ== dependencies: - "@babel/runtime" "^7.5.1" - chalk "^2.4.1" - css "^2.2.3" + "@babel/runtime" "^7.9.2" + "@types/testing-library__jest-dom" "^5.0.2" + chalk "^3.0.0" + css "^2.2.4" css.escape "^1.5.1" - jest-diff "^24.0.0" - jest-matcher-utils "^24.0.0" - lodash "^4.17.11" - pretty-format "^24.0.0" + jest-diff "^25.1.0" + jest-matcher-utils "^25.1.0" + lodash "^4.17.15" redent "^3.0.0" -"@testing-library/react@^9.3.2": - version "9.4.0" - resolved "https://registry.yarnpkg.com/@testing-library/react/-/react-9.4.0.tgz#b021ac8cb987c8dc54c6841875f745bf9b2e88e5" - integrity sha512-XdhDWkI4GktUPsz0AYyeQ8M9qS/JFie06kcSnUVcpgOwFjAu9vhwR83qBl+lw9yZWkbECjL8Hd+n5hH6C0oWqg== +"@testing-library/react@^10.0.4": + version "10.0.4" + resolved "https://registry.yarnpkg.com/@testing-library/react/-/react-10.0.4.tgz#8e0e299cd91acc626d81ed8489fdc13df864c31d" + integrity sha512-2e1B5debfuiIGbvUuiSXybskuh7ZTVJDDvG/IxlzLOY9Co/mKFj9hIklAe2nGZYcOUxFaiqWrRZ9vCVGzJfRlQ== dependencies: - "@babel/runtime" "^7.7.6" - "@testing-library/dom" "^6.11.0" - "@types/testing-library__react" "^9.1.2" + "@babel/runtime" "^7.9.6" + "@testing-library/dom" "^7.2.2" + "@types/testing-library__react" "^10.0.1" -"@testing-library/user-event@^7.1.2": - version "7.2.1" - resolved "https://registry.yarnpkg.com/@testing-library/user-event/-/user-event-7.2.1.tgz#2ad4e844175a3738cb9e7064be5ea070b8863a1c" - integrity sha512-oZ0Ib5I4Z2pUEcoo95cT1cr6slco9WY7yiPpG+RGNkj8YcYgJnM7pXmYmorNOReh8MIGcKSqXyeGjxnr8YiZbA== +"@testing-library/user-event@^10.3.1": + version "10.3.1" + resolved "https://registry.yarnpkg.com/@testing-library/user-event/-/user-event-10.3.1.tgz#8ed6fbfa40fbb866fa4666c9a62d7f7ff151f93b" + integrity sha512-HozvWlr/xHmkoJrrDdZBbUOXAC/STAeXGyNU+g5KgEwWBpLJi1RPCHJKbTjwz8hp2jDFsk/jjfD0530eZjcFEg== + +"@types/async-lock@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@types/async-lock/-/async-lock-1.1.2.tgz#cbc26a34b11b83b28f7783a843c393b443ef8bef" + integrity sha512-j9n4bb6RhgFIydBe0+kpjnBPYumDaDyU8zvbWykyVMkku+c2CSu31MZkLeaBfqIwU+XCxlDpYDfyMQRkM0AkeQ== "@types/babel__core@^7.1.0": - version "7.1.4" - resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.4.tgz#5c5569cc40e5f2737dfc00692f5444e871e4a234" - integrity sha512-c/5MuRz5HM4aizqL5ViYfW4iEnmfPcfbH4Xa6GgLT21dMc1NGeNnuS6egHheOmP+kCJ9CAzC4pv4SDCWTnRkbg== + version "7.1.7" + resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.7.tgz#1dacad8840364a57c98d0dd4855c6dd3752c6b89" + integrity sha512-RL62NqSFPCDK2FM1pSDH0scHpJvsXtZNiYlMB73DgPBaG1E38ZYVL+ei5EkWRbr+KC4YNiAUNBnRj+bgwpgjMw== dependencies: "@babel/parser" "^7.1.0" "@babel/types" "^7.0.0" @@ -1268,12 +1441,34 @@ "@babel/types" "^7.0.0" "@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": - version "7.0.8" - resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.0.8.tgz#479a4ee3e291a403a1096106013ec22cf9b64012" - integrity sha512-yGeB2dHEdvxjP0y4UbRtQaSkXJ9649fYCmIdRoul5kfAoGCwxuCbMhag0k3RPfnuh9kPGm8x89btcfDEXdVWGw== + version "7.0.11" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.0.11.tgz#1ae3010e8bf8851d324878b42acec71986486d18" + integrity sha512-ddHK5icION5U6q11+tV2f9Mo6CZVuT8GJKld2q9LqHSZbvLbH34Kcu2yFGckZut453+eQU6btIA3RihmnRgI+Q== dependencies: "@babel/types" "^7.3.0" +"@types/color-name@^1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0" + integrity sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ== + +"@types/cookie@^0.3.3": + version "0.3.3" + resolved "https://registry.yarnpkg.com/@types/cookie/-/cookie-0.3.3.tgz#85bc74ba782fb7aa3a514d11767832b0e3bc6803" + integrity sha512-LKVP3cgXBT9RYj+t+9FDKwS5tdI+rPBXaNSkma7hvqy35lc7mAokC2zsqWJH0LaqIt3B962nuYI77hsJoT1gow== + +"@types/domhandler@*": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@types/domhandler/-/domhandler-2.4.1.tgz#7b3b347f7762180fbcb1ece1ce3dd0ebbb8c64cf" + integrity sha512-cfBw6q6tT5sa1gSPFSRKzF/xxYrrmeiut7E0TxNBObiLSBTuFEHibcfEe3waQPEDbqBsq+ql/TOniw65EyDFMA== + +"@types/domutils@*": + version "1.7.2" + resolved "https://registry.yarnpkg.com/@types/domutils/-/domutils-1.7.2.tgz#89422e579c165994ad5c09ce90325da596cc105d" + integrity sha512-Nnwy1Ztwq42SSNSZSh9EXBJGrOZPR+PQ2sRT4VZy8hnsFXfCil7YlKO2hd2360HyrtFz2qwnKQ13ENrgXNxJbw== + dependencies: + "@types/domhandler" "*" + "@types/eslint-visitor-keys@^1.0.0": version "1.0.0" resolved "https://registry.yarnpkg.com/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#1ee30d79544ca84d68d4b3cdb0af4f205663dd2d" @@ -1293,10 +1488,32 @@ "@types/minimatch" "*" "@types/node" "*" +"@types/history@*": + version "4.7.6" + resolved "https://registry.yarnpkg.com/@types/history/-/history-4.7.6.tgz#ed8fc802c45b8e8f54419c2d054e55c9ea344356" + integrity sha512-GRTZLeLJ8ia00ZH8mxMO8t0aC9M1N9bN461Z2eaRurJo6Fpa+utgCwLzI4jQHcrdzuzp5WPN9jRwpsCQ1VhJ5w== + +"@types/hoist-non-react-statics@^3.0.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz#1124aafe5118cb591977aeb1ceaaed1070eb039f" + integrity sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA== + dependencies: + "@types/react" "*" + hoist-non-react-statics "^3.3.0" + +"@types/htmlparser2@*": + version "3.10.1" + resolved "https://registry.yarnpkg.com/@types/htmlparser2/-/htmlparser2-3.10.1.tgz#1e65ba81401d53f425c1e2ba5a3d05c90ab742c7" + integrity sha512-fCxmHS4ryCUCfV9+CJZY1UjkbR+6Al/EQdX5Jh03qBj9gdlPG5q+7uNoDgE/ZNXb3XNWSAQgqKIWnbRCbOyyWA== + dependencies: + "@types/domhandler" "*" + "@types/domutils" "*" + "@types/node" "*" + "@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.1.tgz#42995b446db9a48a11a07ec083499a860e9138ff" - integrity sha512-hRJD2ahnnpLgsj6KWMYSrmXkM3rm2Dl1qkx6IOFD5FnuNPXJIG5L0dhgKXCYTRMGzU4n0wImQ/xfmRc4POUFlg== + version "2.0.2" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.2.tgz#79d7a78bad4219f4c03d6557a1c72d9ca6ba62d5" + integrity sha512-rsZg7eL+Xcxsxk2XlBt9KcG8nOp9iYdKCOikY9x2RFJCyOdNj4MKPQty0e8oZr29vVAzKXr1BmR+kZauti3o1w== "@types/istanbul-lib-report@*": version "3.0.0" @@ -1306,39 +1523,45 @@ "@types/istanbul-lib-coverage" "*" "@types/istanbul-reports@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-1.1.1.tgz#7a8cbf6a406f36c8add871625b278eaf0b0d255a" - integrity sha512-UpYjBi8xefVChsCoBpKShdxTllC9pwISirfoZsUa2AAdQg/Jd2KQGtSbw+ya7GPo7x/wAPlH6JBhKhAsXUEZNA== + version "1.1.2" + resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz#e875cc689e47bce549ec81f3df5e6f6f11cfaeb2" + integrity sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw== dependencies: "@types/istanbul-lib-coverage" "*" "@types/istanbul-lib-report" "*" -"@types/jest@^24.0.0": - version "24.9.1" - resolved "https://registry.yarnpkg.com/@types/jest/-/jest-24.9.1.tgz#02baf9573c78f1b9974a5f36778b366aa77bd534" - integrity sha512-Fb38HkXSVA4L8fGKEZ6le5bB8r6MRWlOCZbVuWZcmOMSCd2wCYOwN1ibj8daIoV9naq7aaOZjrLCoCMptKU/4Q== +"@types/jest@*", "@types/jest@^25.2.3": + version "25.2.3" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-25.2.3.tgz#33d27e4c4716caae4eced355097a47ad363fdcaf" + integrity sha512-JXc1nK/tXHiDhV55dvfzqtmP4S3sy3T3ouV2tkViZgxY/zeUkcpQcQPGRlgF4KmWzWW5oiWYSZwtCB+2RsE4Fw== dependencies: - jest-diff "^24.3.0" + jest-diff "^25.2.1" + pretty-format "^25.2.1" "@types/json-schema@^7.0.3": version "7.0.4" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.4.tgz#38fd73ddfd9b55abb1e1b2ed578cb55bd7b7d339" integrity sha512-8+KAKzEvSUdeo+kmqnKrqgeE+LcA0tjYWFY7RPProVYwnqDjukzO+3b6dLD56rYX5TdWejnEOLJYOIeh4CXKuA== +"@types/lokijs@^1.5.3": + version "1.5.3" + resolved "https://registry.yarnpkg.com/@types/lokijs/-/lokijs-1.5.3.tgz#e45db0b35e53ec09a4c2ff4f253037abd56be151" + integrity sha512-ssiP6F7rpDqlaOzo+0Y/0dkVH2JiAjc+o7n6M4pFnfAMscf+7FthqS0cobvGJEJvxmzp4PWfMOfe0q3VETtrgQ== + "@types/minimatch@*": version "3.0.3" resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA== -"@types/node@*": - version "13.7.1" - resolved "https://registry.yarnpkg.com/@types/node/-/node-13.7.1.tgz#238eb34a66431b71d2aaddeaa7db166f25971a0d" - integrity sha512-Zq8gcQGmn4txQEJeiXo/KiLpon8TzAl0kmKH4zdWctPj05nWwp1ClMdAVEloqrQKfaC48PNLdgN/aVaLqUrluA== +"@types/node@*", "@types/node@^14.0.1": + version "14.0.1" + resolved "https://registry.yarnpkg.com/@types/node/-/node-14.0.1.tgz#5d93e0a099cd0acd5ef3d5bde3c086e1f49ff68c" + integrity sha512-FAYBGwC+W6F9+huFIDtn43cpy7+SzG+atzRiTfdp3inUKL2hXnd4rG8hylJLIh4+hqrQy1P17kvJByE/z825hA== -"@types/node@^12.0.0": - version "12.12.28" - resolved "https://registry.yarnpkg.com/@types/node/-/node-12.12.28.tgz#3a2b5f8d21f96ace690a8832ae9779114612575f" - integrity sha512-g73GJYJDXgf0jqg+P9S8h2acWbDXNkoCX8DLtJVu7Fkn788pzQ/oJsrdJz/2JejRf/SjfZaAhsw+3nd1D5EWGg== +"@types/object-assign@^4.0.30": + version "4.0.30" + resolved "https://registry.yarnpkg.com/@types/object-assign/-/object-assign-4.0.30.tgz#8949371d5a99f4381ee0f1df0a9b7a187e07e652" + integrity sha1-iUk3HVqZ9Dge4PHfCpt6GH4H5lI= "@types/parse-json@^4.0.0": version "4.0.0" @@ -1351,21 +1574,76 @@ integrity sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw== "@types/q@^1.5.1": - version "1.5.2" - resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.2.tgz#690a1475b84f2a884fd07cd797c00f5f31356ea8" - integrity sha512-ce5d3q03Ex0sy4R14722Rmt6MT07Ua+k4FwDfdcToYJcMKNtRVQvJ6JCAPdAmAnbRb6CsX6aYb9m96NGod9uTw== + version "1.5.4" + resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.4.tgz#15925414e0ad2cd765bfef58842f7e26a7accb24" + integrity sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug== -"@types/react-dom@*", "@types/react-dom@^16.9.0": - version "16.9.5" - resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-16.9.5.tgz#5de610b04a35d07ffd8f44edad93a71032d9aaa7" - integrity sha512-BX6RQ8s9D+2/gDhxrj8OW+YD4R+8hj7FEM/OJHGNR0KipE1h1mSsf39YeyC81qafkq+N3rU3h3RFbLSwE5VqUg== +"@types/react-dom@*", "@types/react-dom@^16.9.8": + version "16.9.8" + resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-16.9.8.tgz#fe4c1e11dfc67155733dfa6aa65108b4971cb423" + integrity sha512-ykkPQ+5nFknnlU6lDd947WbQ6TE3NNzbQAkInC2EKY1qeYdTKp7onFusmYZb+ityzx2YviqT6BXSu+LyWWJwcA== dependencies: "@types/react" "*" -"@types/react@*", "@types/react@^16.9.0": - version "16.9.21" - resolved "https://registry.yarnpkg.com/@types/react/-/react-16.9.21.tgz#99e274e2ecfab6bb93920e918341daa3198b348d" - integrity sha512-xpmenCMeBwJRct8vmIfczlgdOXWIWASoOM857kxKfHlVQvDltRh7IFRVfGws79iO2jkNPXOeWREyKoClzhBaQA== +"@types/react-helmet@^6.0.0": + version "6.0.0" + resolved "https://registry.yarnpkg.com/@types/react-helmet/-/react-helmet-6.0.0.tgz#5b74e44a12662ffb12d1c97ee702cf4e220958cf" + integrity sha512-NBMPAxgjpaMooXa51cU1BTgrX6T+hQbMiLm77JhBbfOzPQea3RB5rNpPOD5xGWHIVpGXHd59cltEzIq0qglGcQ== + dependencies: + "@types/react" "*" + +"@types/react-html-parser@^2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@types/react-html-parser/-/react-html-parser-2.0.1.tgz#2d9002ac5bf1adf9aff8eae77ace5488bd78c98d" + integrity sha512-Lyw0AtG3gahw78CX2pzmzhKaoZCfJNzzuhhPsFVhzFrylMv8NaCmzYaPKglMv3RRHpwBbHuMOkVx0HiwGZKgSA== + dependencies: + "@types/htmlparser2" "*" + "@types/react" "*" + +"@types/react-overlays@^1.1.3": + version "1.1.3" + resolved "https://registry.yarnpkg.com/@types/react-overlays/-/react-overlays-1.1.3.tgz#fb97081cbf506917e358f0523b34fed14e2de2f7" + integrity sha512-oOq5NWbyfNz2w2sKvjkHdvGQSMA+VDVfI5UOfGPR0wkik2welad1RDVnVgH15jKf58jrZNBa1Ee4SVBgCGFxCg== + dependencies: + "@types/react" "*" + "@types/react-transition-group" "*" + +"@types/react-router-dom@*", "@types/react-router-dom@^5.1.5": + version "5.1.5" + resolved "https://registry.yarnpkg.com/@types/react-router-dom/-/react-router-dom-5.1.5.tgz#7c334a2ea785dbad2b2dcdd83d2cf3d9973da090" + integrity sha512-ArBM4B1g3BWLGbaGvwBGO75GNFbLDUthrDojV2vHLih/Tq8M+tgvY1DSwkuNrPSwdp/GUL93WSEpTZs8nVyJLw== + dependencies: + "@types/history" "*" + "@types/react" "*" + "@types/react-router" "*" + +"@types/react-router-hash-link@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@types/react-router-hash-link/-/react-router-hash-link-1.2.1.tgz#fba7dc351cef2985791023018b7a5dbd0653c843" + integrity sha512-jdzPGE8jFGq7fHUpPaKrJvLW1Yhoe5MQCrmgeesC+eSLseMj3cGCTYMDA4BNWG8JQmwO8NTYt/oT3uBZ77pmBA== + dependencies: + "@types/react" "*" + "@types/react-router-dom" "*" + +"@types/react-router@*": + version "5.1.7" + resolved "https://registry.yarnpkg.com/@types/react-router/-/react-router-5.1.7.tgz#e9d12ed7dcfc79187e4d36667745b69a5aa11556" + integrity sha512-2ouP76VQafKjtuc0ShpwUebhHwJo0G6rhahW9Pb8au3tQTjYXd2jta4wv6U2tGLR/I42yuG00+UXjNYY0dTzbg== + dependencies: + "@types/history" "*" + "@types/react" "*" + +"@types/react-transition-group@*": + version "4.2.4" + resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.2.4.tgz#c7416225987ccdb719262766c1483da8f826838d" + integrity sha512-8DMUaDqh0S70TjkqU0DxOu80tFUiiaS9rxkWip/nb7gtvAsbqOXm02UCmR8zdcjWujgeYPiPNTVpVpKzUDotwA== + dependencies: + "@types/react" "*" + +"@types/react@*", "@types/react@^16.9.11", "@types/react@^16.9.35": + version "16.9.35" + resolved "https://registry.yarnpkg.com/@types/react/-/react-16.9.35.tgz#a0830d172e8aadd9bd41709ba2281a3124bbd368" + integrity sha512-q0n0SsWcGc8nDqH2GJfWQWUOmZSJhXV64CjVN5SvcNti3TdEaA3AH0D8DwNmMdzjMAC/78tB8nAZIlV8yTz+zQ== dependencies: "@types/prop-types" "*" csstype "^2.2.0" @@ -1375,20 +1653,38 @@ resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-1.0.1.tgz#0a851d3bd96498fa25c33ab7278ed3bd65f06c3e" integrity sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw== -"@types/testing-library__dom@*", "@types/testing-library__dom@^6.0.0": - version "6.12.1" - resolved "https://registry.yarnpkg.com/@types/testing-library__dom/-/testing-library__dom-6.12.1.tgz#37af28fae051f9e3feed5684535b1540c97ae28b" - integrity sha512-cgqnEjxKk31tQt29j4baSWaZPNjQf3bHalj2gcHQTpW5SuHRal76gOpF0vypeEo6o+sS5inOvvNdzLY0B3FB2A== +"@types/testing-library__dom@*": + version "7.0.2" + resolved "https://registry.yarnpkg.com/@types/testing-library__dom/-/testing-library__dom-7.0.2.tgz#2906f8a0dce58b0746c6ab606f786bd06fe6940e" + integrity sha512-8yu1gSwUEAwzg2OlPNbGq+ixhmSviGurBu1+ivxRKq1eRcwdjkmlwtPvr9VhuxTq2fNHBWN2po6Iem3Xt5A6rg== dependencies: - pretty-format "^24.3.0" + pretty-format "^25.1.0" -"@types/testing-library__react@^9.1.2": - version "9.1.2" - resolved "https://registry.yarnpkg.com/@types/testing-library__react/-/testing-library__react-9.1.2.tgz#e33af9124c60a010fc03a34eff8f8a34a75c4351" - integrity sha512-CYaMqrswQ+cJACy268jsLAw355DZtPZGt3Jwmmotlcu8O/tkoXBI6AeZ84oZBJsIsesozPKzWzmv/0TIU+1E9Q== +"@types/testing-library__jest-dom@^5.0.2": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.7.0.tgz#078790bf4dc89152a74428591a228ec5f9433251" + integrity sha512-LoZ3uonlnAbJUz4bg6UoeFl+frfndXngmkCItSjJ8DD5WlRfVqPC5/LgJASsY/dy7AHH2YJ7PcsdASOydcVeFA== + dependencies: + "@types/jest" "*" + +"@types/testing-library__react@^10.0.1": + version "10.0.1" + resolved "https://registry.yarnpkg.com/@types/testing-library__react/-/testing-library__react-10.0.1.tgz#92bb4a02394bf44428e35f1da2970ed77f803593" + integrity sha512-RbDwmActAckbujLZeVO/daSfdL1pnjVqas25UueOkAY5r7vriavWf0Zqg7ghXMHa8ycD/kLkv8QOj31LmSYwww== dependencies: "@types/react-dom" "*" "@types/testing-library__dom" "*" + pretty-format "^25.1.0" + +"@types/warning@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@types/warning/-/warning-3.0.0.tgz#0d2501268ad8f9962b740d387c4654f5f8e23e52" + integrity sha1-DSUBJorY+ZYrdA04fEZU9fjiPlI= + +"@types/xregexp@^4.3.0": + version "4.3.0" + resolved "https://registry.yarnpkg.com/@types/xregexp/-/xregexp-4.3.0.tgz#e981c9b7281579019cc5740e08d206f3403e029f" + integrity sha512-3gJTS9gt27pS7U9q5IVqo4YvKSlkf2ck8ish6etuDj6LIRxkL/2Y8RMUtK/QzvE1Yv2zwWV5yemI2BS0GGGFnA== "@types/yargs-parser@*": version "15.0.0" @@ -1396,53 +1692,60 @@ integrity sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw== "@types/yargs@^13.0.0": - version "13.0.8" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-13.0.8.tgz#a38c22def2f1c2068f8971acb3ea734eb3c64a99" - integrity sha512-XAvHLwG7UQ+8M4caKIH0ZozIOYay5fQkAgyIXegXT9jPtdIGdhga+sUEdAr1CiG46aB+c64xQEYyEzlwWVTNzA== + version "13.0.9" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-13.0.9.tgz#44028e974343c7afcf3960f1a2b1099c39a7b5e1" + integrity sha512-xrvhZ4DZewMDhoH1utLtOAwYQy60eYFoXeje30TzM3VOvQlBwQaEpKFq5m34k1wOw2AKIi2pwtiAjdmhvlBUzg== + dependencies: + "@types/yargs-parser" "*" + +"@types/yargs@^15.0.0": + version "15.0.5" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.5.tgz#947e9a6561483bdee9adffc983e91a6902af8b79" + integrity sha512-Dk/IDOPtOgubt/IaevIUbTgV7doaKkoorvOyYM2CMwuDyP89bekI7H4xLIwunNYiK9jhCkmc6pUrJk3cj2AB9w== dependencies: "@types/yargs-parser" "*" "@typescript-eslint/eslint-plugin@^2.10.0": - version "2.19.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.19.2.tgz#e279aaae5d5c1f2547b4cff99204e1250bc7a058" - integrity sha512-HX2qOq2GOV04HNrmKnTpSIpHjfl7iwdXe3u/Nvt+/cpmdvzYvY0NHSiTkYN257jHnq4OM/yo+OsFgati+7LqJA== + version "2.34.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.34.0.tgz#6f8ce8a46c7dea4a6f1d171d2bb8fbae6dac2be9" + integrity sha512-4zY3Z88rEE99+CNvTbXSyovv2z9PNOVffTWD2W8QF5s2prBQtwN2zadqERcrHpcR7O/+KMI3fcTAmUUhK/iQcQ== dependencies: - "@typescript-eslint/experimental-utils" "2.19.2" - eslint-utils "^1.4.3" + "@typescript-eslint/experimental-utils" "2.34.0" functional-red-black-tree "^1.0.1" regexpp "^3.0.0" tsutils "^3.17.1" -"@typescript-eslint/experimental-utils@2.19.2": - version "2.19.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-2.19.2.tgz#4611d44cf0f0cb460c26aa7676fc0a787281e233" - integrity sha512-B88QuwT1wMJR750YvTJBNjMZwmiPpbmKYLm1yI7PCc3x0NariqPwqaPsoJRwU9DmUi0cd9dkhz1IqEnwfD+P1A== +"@typescript-eslint/experimental-utils@2.34.0": + version "2.34.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-2.34.0.tgz#d3524b644cdb40eebceca67f8cf3e4cc9c8f980f" + integrity sha512-eS6FTkq+wuMJ+sgtuNTtcqavWXqsflWcfBnlYhg/nS4aZ1leewkXGbvBhaapn1q6qf4M71bsR1tez5JTRMuqwA== dependencies: "@types/json-schema" "^7.0.3" - "@typescript-eslint/typescript-estree" "2.19.2" + "@typescript-eslint/typescript-estree" "2.34.0" eslint-scope "^5.0.0" + eslint-utils "^2.0.0" "@typescript-eslint/parser@^2.10.0": - version "2.19.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-2.19.2.tgz#21f42c0694846367e7d6a907feb08ab2f89c0879" - integrity sha512-8uwnYGKqX9wWHGPGdLB9sk9+12sjcdqEEYKGgbS8A0IvYX59h01o8os5qXUHMq2na8vpDRaV0suTLM7S8wraTA== + version "2.34.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-2.34.0.tgz#50252630ca319685420e9a39ca05fe185a256bc8" + integrity sha512-03ilO0ucSD0EPTw2X4PntSIRFtDPWjrVq7C3/Z3VQHRC7+13YB55rcJI3Jt+YgeHbjUdJPcPa7b23rXCBokuyA== dependencies: "@types/eslint-visitor-keys" "^1.0.0" - "@typescript-eslint/experimental-utils" "2.19.2" - "@typescript-eslint/typescript-estree" "2.19.2" + "@typescript-eslint/experimental-utils" "2.34.0" + "@typescript-eslint/typescript-estree" "2.34.0" eslint-visitor-keys "^1.1.0" -"@typescript-eslint/typescript-estree@2.19.2": - version "2.19.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-2.19.2.tgz#67485b00172f400474d243c6c0be27581a579350" - integrity sha512-Xu/qa0MDk6upQWqE4Qy2X16Xg8Vi32tQS2PR0AvnT/ZYS4YGDvtn2MStOh5y8Zy2mg4NuL06KUHlvCh95j9C6Q== +"@typescript-eslint/typescript-estree@2.34.0": + version "2.34.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-2.34.0.tgz#14aeb6353b39ef0732cc7f1b8285294937cf37d5" + integrity sha512-OMAr+nJWKdlVM9LOqCqh3pQQPwxHAN7Du8DR6dmwCrAmxtiXQnhHJ6tBNtf+cggqfo51SG/FCwnKhXCIM7hnVg== dependencies: debug "^4.1.1" eslint-visitor-keys "^1.1.0" glob "^7.1.6" is-glob "^4.0.1" lodash "^4.17.15" - semver "^6.3.0" + semver "^7.3.2" tsutils "^3.17.1" "@webassemblyjs/ast@1.8.5": @@ -1622,10 +1925,10 @@ acorn-globals@^4.1.0, acorn-globals@^4.3.0: acorn "^6.0.1" acorn-walk "^6.0.1" -acorn-jsx@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.1.0.tgz#294adb71b57398b0680015f0a38c563ee1db5384" - integrity sha512-tMUqwBWfLFbJbizRmEcWSLw6HnFzfdJs2sOJEOwwtVPMoH/0Ay+E703oZz78VSXZiiDcZrQ5XKjPIUQixhmgVw== +acorn-jsx@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.2.0.tgz#4c66069173d6fdd68ed85239fc256226182b2ebe" + integrity sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ== acorn-walk@^6.0.1: version "6.2.0" @@ -1633,19 +1936,26 @@ acorn-walk@^6.0.1: integrity sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA== acorn@^5.5.3: - version "5.7.3" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.3.tgz#67aa231bf8812974b85235a96771eb6bd07ea279" - integrity sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw== + version "5.7.4" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.4.tgz#3e8d8a9947d0599a1796d10225d7432f4a4acf5e" + integrity sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg== acorn@^6.0.1, acorn@^6.0.4, acorn@^6.2.1: - version "6.4.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.0.tgz#b659d2ffbafa24baf5db1cdbb2c94a983ecd2784" - integrity sha512-gac8OEcQ2Li1dxIEWGZzsp2BitJxwkwcOm0zHAJLcPJaVvm58FRnk6RkuLRpU1EujipU2ZFODv2P9DLMfnV8mw== + version "6.4.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.1.tgz#531e58ba3f51b9dacb9a6646ca4debf5b14ca474" + integrity sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA== -acorn@^7.1.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.1.0.tgz#949d36f2c292535da602283586c2477c57eb2d6c" - integrity sha512-kL5CuoXA/dgxlBbVrflsflzQ3PAas7RYZB52NOm/6839iVYJgKMJ3cQJD+t2i5+qFa8h3MDpEOJiS64E8JLnSQ== +acorn@^7.1.1: + version "7.2.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.2.0.tgz#17ea7e40d7c8640ff54a694c889c26f31704effe" + integrity sha512-apwXVmYVpQ34m/i71vrApRrRKCWQnZZF1+npOD0WV5xZFfwWOmKGQ2RWlfdy9vWITsenisM8M0Qeq8agcFHNiQ== + +add-dom-event-listener@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/add-dom-event-listener/-/add-dom-event-listener-1.1.0.tgz#6a92db3a0dd0abc254e095c0f1dc14acbbaae310" + integrity sha512-WCxx1ixHT0GQU9hb0KI/mhgRQhnU+U3GvwY6ZvVjYq8rsihIGoaIOUbY0yMPBxLH5MDtr0kz3fisWGNcbWW7Jw== + dependencies: + object-assign "4.x" address@1.1.2, address@^1.0.1: version "1.1.2" @@ -1681,10 +1991,10 @@ ajv-keywords@^3.1.0, ajv-keywords@^3.4.1: resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.4.1.tgz#ef916e271c64ac12171fd8384eaae6b2345854da" integrity sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ== -ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.5.5: - version "6.11.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.11.0.tgz#c3607cbc8ae392d8a5a536f25b21f8e5f3f87fe9" - integrity sha512-nCprB/0syFYy9fVYU1ox1l2KN8S9I+tziH8D4zdZuLT3N6RMlGSGt5FSTpAiHB/Whv8Qs1cWHma1aMKZyaHRKA== +ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.0, ajv@^6.5.5: + version "6.12.2" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.2.tgz#c629c5eced17baf314437918d2da88c99d5958cd" + integrity sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ== dependencies: fast-deep-equal "^3.1.1" fast-json-stable-stringify "^2.0.0" @@ -1707,11 +2017,11 @@ ansi-escapes@^3.0.0: integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== ansi-escapes@^4.2.1: - version "4.3.0" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.0.tgz#a4ce2b33d6b214b7950d8595c212f12ac9cc569d" - integrity sha512-EiYhwo0v255HUL6eDyuLrXEkTi7WwVCLAw+SeOQ7M7qdun1z1pum4DEm/nuqIVbPvi9RPPc9k9LbyBv6H0DwVg== + version "4.3.1" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.1.tgz#a5c47cc43181f1f38ffd7076837700d395522a61" + integrity sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA== dependencies: - type-fest "^0.8.1" + type-fest "^0.11.0" ansi-html@0.0.7: version "0.0.7" @@ -1750,6 +2060,14 @@ ansi-styles@^3.2.0, ansi-styles@^3.2.1: dependencies: color-convert "^1.9.0" +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.2.1.tgz#90ae75c424d008d2624c5bf29ead3177ebfcf359" + integrity sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA== + dependencies: + "@types/color-name" "^1.1.1" + color-convert "^2.0.1" + anymatch@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" @@ -1778,7 +2096,7 @@ argparse@^1.0.7: dependencies: sprintf-js "~1.0.2" -aria-query@3.0.0, aria-query@^3.0.0: +aria-query@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-3.0.0.tgz#65b3fcc1ca1155a8c9ae64d6eee297f15d5133cc" integrity sha1-ZbP8wcoRVajJrmTW7uKX8V1RM8w= @@ -1786,6 +2104,14 @@ aria-query@3.0.0, aria-query@^3.0.0: ast-types-flow "0.0.7" commander "^2.11.0" +aria-query@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-4.0.2.tgz#250687b4ccde1ab86d127da0432ae3552fc7b145" + integrity sha512-S1G1V790fTaigUSM/Gd0NngzEfiMy9uTUfMyHhKhVyy4cH5O/eTuR01ydhGL0z4Za1PXFTRGH3qL8VhUQuEO5w== + dependencies: + "@babel/runtime" "^7.7.4" + "@babel/runtime-corejs3" "^7.7.4" + arity-n@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/arity-n/-/arity-n-1.0.4.tgz#d9e76b11733e08569c0847ae7b39b2860b30b745" @@ -1926,6 +2252,11 @@ async-limiter@~1.0.0: resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== +async-lock@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/async-lock/-/async-lock-1.2.4.tgz#80d0d612383045dd0c30eb5aad08510c1397cb91" + integrity sha512-UBQJC2pbeyGutIfYmErGc9RaJYnpZ1FHaxuKwb0ahvGiiCkPUf3p67Io+YLPmmv3RHY+mF6JEtNW8FlHsraAaA== + async@^2.6.2: version "2.6.3" resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" @@ -1944,17 +2275,17 @@ atob@^2.1.2: integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== autoprefixer@^9.6.1: - version "9.7.4" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.7.4.tgz#f8bf3e06707d047f0641d87aee8cfb174b2a5378" - integrity sha512-g0Ya30YrMBAEZk60lp+qfX5YQllG+S5W3GYCFvyHTvhOki0AEQJLPEcIuGRsqVwLi8FvXPVtwTGhfr38hVpm0g== + version "9.8.0" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.8.0.tgz#68e2d2bef7ba4c3a65436f662d0a56a741e56511" + integrity sha512-D96ZiIHXbDmU02dBaemyAg53ez+6F5yZmapmgKcjm35yEe1uVDYI8hGW3VYoGRaG290ZFf91YxHrR518vC0u/A== dependencies: - browserslist "^4.8.3" - caniuse-lite "^1.0.30001020" + browserslist "^4.12.0" + caniuse-lite "^1.0.30001061" chalk "^2.4.2" normalize-range "^0.1.2" num2fraction "^1.2.2" - postcss "^7.0.26" - postcss-value-parser "^4.0.2" + postcss "^7.0.30" + postcss-value-parser "^4.1.0" aws-sign2@~0.7.0: version "0.7.0" @@ -1966,6 +2297,13 @@ aws4@^1.8.0: resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.9.1.tgz#7e33d8f7d449b3f673cd72deb9abdc552dbe528e" integrity sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug== +axios@^0.19.2: + version "0.19.2" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.19.2.tgz#3ea36c5d8818d0d5f8a8a97a6d36b86cdc00cb27" + integrity sha512-fjgm5MvRHLhx+osE2xoekY70AhARk3a6hkN+3Io1jc00jtquGvxYlKlsFUhmUET0V5te6CcZI7lcv2Ym61mjHA== + dependencies: + follow-redirects "1.5.10" + axobject-query@^2.0.2: version "2.1.2" resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-2.1.2.tgz#2bdffc0371e643e5f03ba99065d5179b9ca79799" @@ -1980,15 +2318,15 @@ babel-code-frame@^6.22.0: esutils "^2.0.2" js-tokens "^3.0.2" -babel-eslint@10.0.3: - version "10.0.3" - resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-10.0.3.tgz#81a2c669be0f205e19462fed2482d33e4687a88a" - integrity sha512-z3U7eMY6r/3f3/JB9mTsLjyxrv0Yb1zb8PCWCLpguxfCzBIZUwy23R1t/XKewP+8mEN2Ck8Dtr4q20z6ce6SoA== +babel-eslint@10.1.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-10.1.0.tgz#6968e568a910b78fb3779cdd8b6ac2f479943232" + integrity sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg== dependencies: "@babel/code-frame" "^7.0.0" - "@babel/parser" "^7.0.0" - "@babel/traverse" "^7.0.0" - "@babel/types" "^7.0.0" + "@babel/parser" "^7.7.0" + "@babel/traverse" "^7.7.0" + "@babel/types" "^7.7.0" eslint-visitor-keys "^1.0.0" resolve "^1.12.0" @@ -2012,20 +2350,21 @@ babel-jest@^24.9.0: chalk "^2.4.2" slash "^2.0.0" -babel-loader@8.0.6: - version "8.0.6" - resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.0.6.tgz#e33bdb6f362b03f4bb141a0c21ab87c501b70dfb" - integrity sha512-4BmWKtBOBm13uoUwd08UwjZlaw3O9GWf456R9j+5YykFZ6LUIjIKLc0zEZf+hauxPOJs96C8k6FvYD09vWzhYw== +babel-loader@8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.1.0.tgz#c611d5112bd5209abe8b9fa84c3e4da25275f1c3" + integrity sha512-7q7nC1tYOrqvUrN3LQK4GwSk/TQorZSOlO9C+RZDZpODgyN4ZlCqE5q9cDsyWOliN+aU9B4JX01xK9eJXowJLw== dependencies: - find-cache-dir "^2.0.0" - loader-utils "^1.0.2" - mkdirp "^0.5.1" + find-cache-dir "^2.1.0" + loader-utils "^1.4.0" + mkdirp "^0.5.3" pify "^4.0.1" + schema-utils "^2.6.5" -babel-plugin-dynamic-import-node@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz#f00f507bdaa3c3e3ff6e7e5e98d90a7acab96f7f" - integrity sha512-o6qFkpeQEBxcqt0XYlWzAVxNCSCZdUgcR8IRlhD/8DylxjjO4foPcvTW0GGKa/cVt3rvxZ7o5ippJ+/0nvLhlQ== +babel-plugin-dynamic-import-node@^2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz#84fda19c976ec5c6defef57f9427b3def66e17a3" + integrity sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ== dependencies: object.assign "^4.1.0" @@ -2086,22 +2425,24 @@ babel-preset-jest@^24.9.0: "@babel/plugin-syntax-object-rest-spread" "^7.0.0" babel-plugin-jest-hoist "^24.9.0" -babel-preset-react-app@^9.1.1: - version "9.1.1" - resolved "https://registry.yarnpkg.com/babel-preset-react-app/-/babel-preset-react-app-9.1.1.tgz#d1ceb47cbe48b285fdd5c562c54c432ed5a41e0e" - integrity sha512-YkWP2UwY//TLltNlEBRngDOrYhvSLb+CA330G7T9M5UhGEMWe+JK/8IXJc5p2fDTSfSiETf+PY0+PYXFMix81Q== +babel-preset-react-app@^9.1.2: + version "9.1.2" + resolved "https://registry.yarnpkg.com/babel-preset-react-app/-/babel-preset-react-app-9.1.2.tgz#54775d976588a8a6d1a99201a702befecaf48030" + integrity sha512-k58RtQOKH21NyKtzptoAvtAODuAJJs3ZhqBMl456/GnXEQ/0La92pNmwgWoMn5pBTrsvk3YYXdY7zpY4e3UIxA== dependencies: - "@babel/core" "7.8.4" + "@babel/core" "7.9.0" "@babel/plugin-proposal-class-properties" "7.8.3" "@babel/plugin-proposal-decorators" "7.8.3" + "@babel/plugin-proposal-nullish-coalescing-operator" "7.8.3" "@babel/plugin-proposal-numeric-separator" "7.8.3" - "@babel/plugin-transform-flow-strip-types" "7.8.3" + "@babel/plugin-proposal-optional-chaining" "7.9.0" + "@babel/plugin-transform-flow-strip-types" "7.9.0" "@babel/plugin-transform-react-display-name" "7.8.3" - "@babel/plugin-transform-runtime" "7.8.3" - "@babel/preset-env" "7.8.4" - "@babel/preset-react" "7.8.3" - "@babel/preset-typescript" "7.8.3" - "@babel/runtime" "7.8.4" + "@babel/plugin-transform-runtime" "7.9.0" + "@babel/preset-env" "7.9.0" + "@babel/preset-react" "7.9.1" + "@babel/preset-typescript" "7.9.0" + "@babel/runtime" "7.9.0" babel-plugin-macros "2.8.0" babel-plugin-transform-react-remove-prop-types "0.4.24" @@ -2180,11 +2521,16 @@ bluebird@^3.5.5: resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== -bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0: +bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.4.0: version "4.11.8" resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f" integrity sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA== +bn.js@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.1.1.tgz#48efc4031a9c4041b9c99c6941d903463ab62eb5" + integrity sha512-IUTD/REb78Z2eodka1QZyyEk66pciRcP6Sroka0aI3tG/iwIdYLrBD62RsubR7vqdt3WyX8p4jxeatzmRSphtA== + body-parser@1.19.0: version "1.19.0" resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" @@ -2254,10 +2600,10 @@ brorand@^1.0.1: resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= -browser-process-hrtime@^0.1.2: - version "0.1.3" - resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-0.1.3.tgz#616f00faef1df7ec1b5bf9cfe2bdc3170f26c7b4" - integrity sha512-bRFnI4NnjO6cnyLmOV/7PVoDEMJChlcfN0z4s1YMBY989/SvlfMI1lgCnkFUs53e9gQF+w7qu7XdllSTiSl8Aw== +browser-process-hrtime@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" + integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== browser-resolve@^1.11.3: version "1.11.3" @@ -2297,7 +2643,7 @@ browserify-des@^1.0.0: inherits "^2.0.1" safe-buffer "^5.1.2" -browserify-rsa@^4.0.0: +browserify-rsa@^4.0.0, browserify-rsa@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524" integrity sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ= @@ -2306,17 +2652,19 @@ browserify-rsa@^4.0.0: randombytes "^2.0.1" browserify-sign@^4.0.0: - version "4.0.4" - resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.0.4.tgz#aa4eb68e5d7b658baa6bf6a57e630cbd7a93d298" - integrity sha1-qk62jl17ZYuqa/alfmMMvXqT0pg= + version "4.2.0" + resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.2.0.tgz#545d0b1b07e6b2c99211082bf1b12cce7a0b0e11" + integrity sha512-hEZC1KEeYuoHRqhGhTy6gWrpJA3ZDjFWv0DE61643ZnOXAKJb3u7yWcrU0mMc9SwAqK1n7myPGndkp0dFG7NFA== dependencies: - bn.js "^4.1.1" - browserify-rsa "^4.0.0" - create-hash "^1.1.0" - create-hmac "^1.1.2" - elliptic "^6.0.0" - inherits "^2.0.1" - parse-asn1 "^5.0.0" + bn.js "^5.1.1" + browserify-rsa "^4.0.1" + create-hash "^1.2.0" + create-hmac "^1.1.7" + elliptic "^6.5.2" + inherits "^2.0.4" + parse-asn1 "^5.1.5" + readable-stream "^3.6.0" + safe-buffer "^5.2.0" browserify-zlib@^0.2.0: version "0.2.0" @@ -2325,23 +2673,25 @@ browserify-zlib@^0.2.0: dependencies: pako "~1.0.5" -browserslist@4.8.6: - version "4.8.6" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.8.6.tgz#96406f3f5f0755d272e27a66f4163ca821590a7e" - integrity sha512-ZHao85gf0eZ0ESxLfCp73GG9O/VTytYDIkIiZDlURppLTI9wErSM/5yAKEq6rcUdxBLjMELmrYUJGg5sxGKMHg== +browserslist@4.10.0: + version "4.10.0" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.10.0.tgz#f179737913eaf0d2b98e4926ac1ca6a15cbcc6a9" + integrity sha512-TpfK0TDgv71dzuTsEAlQiHeWQ/tiPqgNZVdv046fvNtBZrjbv2O3TsWCDU0AWGJJKCF/KsjNdLzR9hXOsh/CfA== dependencies: - caniuse-lite "^1.0.30001023" - electron-to-chromium "^1.3.341" - node-releases "^1.1.47" + caniuse-lite "^1.0.30001035" + electron-to-chromium "^1.3.378" + node-releases "^1.1.52" + pkg-up "^3.1.0" -browserslist@^4.0.0, browserslist@^4.6.2, browserslist@^4.6.4, browserslist@^4.8.3, browserslist@^4.8.5: - version "4.8.7" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.8.7.tgz#ec8301ff415e6a42c949d0e66b405eb539c532d0" - integrity sha512-gFOnZNYBHrEyUML0xr5NJ6edFaaKbTFX9S9kQHlYfCP0Rit/boRIz4G+Avq6/4haEKJXdGGUnoolx+5MWW2BoA== +browserslist@^4.0.0, browserslist@^4.11.1, browserslist@^4.12.0, browserslist@^4.6.2, browserslist@^4.6.4, browserslist@^4.8.5, browserslist@^4.9.1: + version "4.12.0" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.12.0.tgz#06c6d5715a1ede6c51fc39ff67fd647f740b656d" + integrity sha512-UH2GkcEDSI0k/lRkuDSzFl9ZZ87skSy9w2XAn1MsZnL+4c4rqbBd3e82UWHbYDpztABrPBhZsTEeuxVfHppqDg== dependencies: - caniuse-lite "^1.0.30001027" - electron-to-chromium "^1.3.349" - node-releases "^1.1.49" + caniuse-lite "^1.0.30001043" + electron-to-chromium "^1.3.413" + node-releases "^1.1.53" + pkg-up "^2.0.0" bser@2.1.1: version "2.1.1" @@ -2390,9 +2740,9 @@ bytes@3.1.0: integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== cacache@^12.0.2: - version "12.0.3" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.3.tgz#be99abba4e1bf5df461cd5a2c1071fc432573390" - integrity sha512-kqdmfXEGFepesTuROHMs3MpFLWrPkSSpRqOw80RCflZXy/khxaArvFrQ7uJxSUduzAufc6G0g1VUCOZXxWavPw== + version "12.0.4" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.4.tgz#668bcbd105aeb5f1d92fe25570ec9525c8faa40c" + integrity sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ== dependencies: bluebird "^3.5.5" chownr "^1.1.1" @@ -2478,13 +2828,13 @@ callsites@^3.0.0: resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== -camel-case@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-3.0.0.tgz#ca3c3688a4e9cf3a4cda777dc4dcbc713249cf73" - integrity sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M= +camel-case@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-4.1.1.tgz#1fc41c854f00e2f7d0139dfeba1542d6896fe547" + integrity sha512-7fa2WcG4fYFkclIvEmxBbTvmibwF2/agfEBc6q3lOpVu0A13ltLsA+Hr/8Hp6kp5f+G7hKi6t8lys6XxP+1K6Q== dependencies: - no-case "^2.2.0" - upper-case "^1.1.1" + pascal-case "^3.1.1" + tslib "^1.10.0" camelcase@5.0.0: version "5.0.0" @@ -2506,10 +2856,10 @@ caniuse-api@^3.0.0: lodash.memoize "^4.1.2" lodash.uniq "^4.5.0" -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000981, caniuse-lite@^1.0.30001020, caniuse-lite@^1.0.30001023, caniuse-lite@^1.0.30001027: - version "1.0.30001027" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001027.tgz#283e2ef17d94889cc216a22c6f85303d78ca852d" - integrity sha512-7xvKeErvXZFtUItTHgNtLgS9RJpVnwBlWX8jSo/BO8VsF6deszemZSkJJJA1KOKrXuzZH4WALpAJdq5EyfgMLg== +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000981, caniuse-lite@^1.0.30001035, caniuse-lite@^1.0.30001043, caniuse-lite@^1.0.30001061: + version "1.0.30001062" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001062.tgz#d814b648338504b315222ace6f1a533d9a55e390" + integrity sha512-ei9ZqeOnN7edDrb24QfJ0OZicpEbsWxv7WusOiQGz/f2SfvBgHHbOEwBJ8HKGVSyx8Z6ndPjxzR6m0NQq+0bfw== capture-exit@^2.0.0: version "2.0.0" @@ -2548,12 +2898,20 @@ chalk@^1.1.3: strip-ansi "^3.0.0" supports-color "^2.0.0" +chalk@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" + integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + chardet@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== -chokidar@^2.0.2, chokidar@^2.1.8: +chokidar@^2.1.8: version "2.1.8" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg== @@ -2572,10 +2930,10 @@ chokidar@^2.0.2, chokidar@^2.1.8: optionalDependencies: fsevents "^1.2.7" -chokidar@^3.3.0: - version "3.3.1" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.3.1.tgz#c84e5b3d18d9a4d77558fef466b1bf16bbeb3450" - integrity sha512-4QYCEWOcK3OJrxwvyyAOxFuhpvOVCYkr33LPfFNBjAD/w3sEzWsp2BUOkI4l9bHvWioAd0rc6NlHUOEaWkTeqg== +chokidar@^3.3.0, chokidar@^3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.4.0.tgz#b30611423ce376357c765b9b8f904b9fba3c0be8" + integrity sha512-aXAaho2VJtisB/1fg1+3nlLJqGOuewTzQpd/Tz0yTg2R0e4IGtshYvtjowyEumcBv2z+y4+kc75Mz7j5xJskcQ== dependencies: anymatch "~3.1.1" braces "~3.0.2" @@ -2583,7 +2941,7 @@ chokidar@^3.3.0: is-binary-path "~2.1.0" is-glob "~4.0.1" normalize-path "~3.0.0" - readdirp "~3.3.0" + readdirp "~3.4.0" optionalDependencies: fsevents "~2.1.2" @@ -2622,7 +2980,12 @@ class-utils@^0.3.5: isobject "^3.0.0" static-extend "^0.1.1" -clean-css@^4.2.1: +classnames@2.x, classnames@^2.2.6: + version "2.2.6" + resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.2.6.tgz#43935bffdd291f326dad0a205309b38d00f650ce" + integrity sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q== + +clean-css@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.2.3.tgz#507b5de7d97b48ee53d84adb0160ff6216380f78" integrity sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA== @@ -2642,9 +3005,9 @@ cli-cursor@^3.1.0: restore-cursor "^3.1.0" cli-width@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" - integrity sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk= + version "2.2.1" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.1.tgz#b0433d0b4e9c847ef18868a4ef16fd5fc8271c48" + integrity sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw== cliui@^4.0.0: version "4.1.0" @@ -2718,12 +3081,19 @@ color-convert@^1.9.0, color-convert@^1.9.1: dependencies: color-name "1.1.3" +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + color-name@1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= -color-name@^1.0.0: +color-name@^1.0.0, color-name@~1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== @@ -2756,7 +3126,7 @@ commander@^2.11.0, commander@^2.20.0: resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== -commander@^4.0.0: +commander@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== @@ -2877,6 +3247,11 @@ cookie@0.4.0: resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba" integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg== +cookie@^0.4.0: + version "0.4.1" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.1.tgz#afd713fe26ebd21ba95ceb61f9a8116e50a537d1" + integrity sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA== + copy-concurrently@^1.0.0: version "1.0.5" resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0" @@ -2895,22 +3270,27 @@ copy-descriptor@^0.1.0: integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= core-js-compat@^3.6.2: - version "3.6.4" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.6.4.tgz#938476569ebb6cda80d339bcf199fae4f16fff17" - integrity sha512-zAa3IZPvsJ0slViBQ2z+vgyyTuhd3MFn1rBQjZSKVEgB0UMYhUkCj9jJUVPgGTGqWvsBVmfnruXgTcNyTlEiSA== + version "3.6.5" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.6.5.tgz#2a51d9a4e25dfd6e690251aa81f99e3c05481f1c" + integrity sha512-7ItTKOhOZbznhXAQ2g/slGg1PJV5zDO/WdkTwi7UEOJmkvsE32PWvx6mKtDjiMpjnR2CNf6BAD6sSxIlv7ptng== dependencies: - browserslist "^4.8.3" + browserslist "^4.8.5" semver "7.0.0" +core-js-pure@^3.0.0: + version "3.6.5" + resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.6.5.tgz#c79e75f5e38dbc85a662d91eea52b8256d53b813" + integrity sha512-lacdXOimsiD0QyNf9BC/mxivNJ/ybBGJXQFKzRekp1WTHoVUWsUHEn+2T8GJAzzIhyOuXA+gOxCVN3l+5PLPUA== + core-js@^2.4.0: version "2.6.11" resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.11.tgz#38831469f9922bded8ee21c9dc46985e0399308c" integrity sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg== core-js@^3.5.0: - version "3.6.4" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.6.4.tgz#440a83536b458114b9cb2ac1580ba377dc470647" - integrity sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw== + version "3.6.5" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.6.5.tgz#7395dc273af37fb2e50e9bd3d9fe841285231d1a" + integrity sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA== core-util-is@1.0.2, core-util-is@~1.0.0: version "1.0.2" @@ -2946,7 +3326,7 @@ create-ecdh@^4.0.0: bn.js "^4.1.0" elliptic "^6.0.0" -create-hash@^1.1.0, create-hash@^1.1.2: +create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== @@ -2957,7 +3337,7 @@ create-hash@^1.1.0, create-hash@^1.1.2: ripemd160 "^2.0.1" sha.js "^2.4.0" -create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4: +create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7: version "1.1.7" resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== @@ -3092,10 +3472,13 @@ css-tree@1.0.0-alpha.37: mdn-data "2.0.4" source-map "^0.6.1" -css-unit-converter@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/css-unit-converter/-/css-unit-converter-1.1.1.tgz#d9b9281adcfd8ced935bdbaba83786897f64e996" - integrity sha1-2bkoGtz9jO2TW9urqDeGiX9k6ZY= +css-tree@1.0.0-alpha.39: + version "1.0.0-alpha.39" + resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.39.tgz#2bff3ffe1bb3f776cf7eefd91ee5cba77a149eeb" + integrity sha512-7UvkEYgBAHRG9Nt980lYxjsTrCyHFN53ky3wVsDkiMdVqylqRt+Zc+jm5qw7/qyOvN2dHSYtX0e4MbCCExSvnA== + dependencies: + mdn-data "2.0.6" + source-map "^0.6.1" css-what@2.1: version "2.1.3" @@ -3112,7 +3495,7 @@ css.escape@^1.5.1: resolved "https://registry.yarnpkg.com/css.escape/-/css.escape-1.5.1.tgz#42e27d4fa04ae32f931a4b4d4191fa9cddee97cb" integrity sha1-QuJ9T6BK4y+TGktNQZH6nN3ul8s= -css@^2.0.0, css@^2.2.3: +css@^2.0.0, css@^2.2.4: version "2.2.4" resolved "https://registry.yarnpkg.com/css/-/css-2.2.4.tgz#c646755c73971f2bba6a601e2cf2fd71b1298929" integrity sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw== @@ -3206,11 +3589,11 @@ cssnano@^4.1.10: postcss "^7.0.0" csso@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/csso/-/csso-4.0.2.tgz#e5f81ab3a56b8eefb7f0092ce7279329f454de3d" - integrity sha512-kS7/oeNVXkHWxby5tHVxlhjizRCSv8QdU7hB2FpdAibDU8FjTAolhNjKNTiLzXtUrKT6HwClE81yXwEk1309wg== + version "4.0.3" + resolved "https://registry.yarnpkg.com/csso/-/csso-4.0.3.tgz#0d9985dc852c7cc2b2cacfbbe1079014d1a8e903" + integrity sha512-NL3spysxUkcrOgnpsT4Xdl2aiEiBG6bXswAABQVHcMrfjjBisFOKwLDOmf4wf32aPdcJws1zds2B0Rg+jqMyHQ== dependencies: - css-tree "1.0.0-alpha.37" + css-tree "1.0.0-alpha.39" cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0", cssom@^0.3.4: version "0.3.8" @@ -3224,10 +3607,10 @@ cssstyle@^1.0.0, cssstyle@^1.1.1: dependencies: cssom "0.3.x" -csstype@^2.2.0: - version "2.6.9" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.9.tgz#05141d0cd557a56b8891394c1911c40c8a98d098" - integrity sha512-xz39Sb4+OaTsULgUERcCk+TJj8ylkL4aSVDQiX/ksxbELSqwkgt4d4RD7fovIdgJGSuNYqwZEiVjYY5l0ask+Q== +csstype@^2.2.0, csstype@^2.6.7: + version "2.6.10" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.10.tgz#e63af50e66d7c266edb6b32909cfd0aabe03928b" + integrity sha512-D34BqZU4cIlMCY93rZHbrq9pjTAQJ3U8S8rfBqjwHxkGPThWFjzZDQpgMJY0QViLxth6ZKYiwFBo14RdN44U/w== cyclist@^1.0.1: version "1.0.1" @@ -3270,6 +3653,13 @@ debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.0, debug@^2.6.9: dependencies: ms "2.0.0" +debug@=3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" + integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== + dependencies: + ms "2.0.0" + debug@^3.0.0, debug@^3.1.1, debug@^3.2.5: version "3.2.6" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" @@ -3407,6 +3797,11 @@ diff-sequences@^24.9.0: resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-24.9.0.tgz#5715d6244e2aa65f48bba0bc972db0b0b11e95b5" integrity sha512-Dj6Wk3tWyTE+Fo1rW8v0Xhwk80um6yFYKbuAxc9c3EZxIHFDYwbi34Uk42u1CdnIiVorvt4RmlSDjIPyzGC2ew== +diff-sequences@^25.2.6: + version "25.2.6" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-25.2.6.tgz#5f467c00edd35352b7bca46d7927d60e687a76dd" + integrity sha512-Hq8o7+6GaZeoFjtpgvRBUknSXNeJiCx7V9Fr94ZMljNiCr9n9L8H8aJqgWOQiDDGdyn29fRNcDdRVJ5fdyihfg== + diffie-hellman@^5.0.0: version "5.0.3" resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" @@ -3466,6 +3861,11 @@ doctrine@^3.0.0: dependencies: esutils "^2.0.2" +dom-accessibility-api@^0.4.4: + version "0.4.4" + resolved "https://registry.yarnpkg.com/dom-accessibility-api/-/dom-accessibility-api-0.4.4.tgz#c2f9fb8b591bc19581e7ef3e6fe35baf1967c498" + integrity sha512-XBM62jdDc06IXSujkqw6BugEWiDkp6jphtzVJf1kgPQGvfzaU7/jRtRSF/mxc8DBCIm2LS3bN1dCa5Sfxx982A== + dom-converter@^0.2: version "0.2.0" resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.2.0.tgz#6721a9daee2e293682955b6afe416771627bb768" @@ -3473,6 +3873,14 @@ dom-converter@^0.2: dependencies: utila "~0.4" +dom-helpers@^5.1.0: + version "5.1.4" + resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-5.1.4.tgz#4609680ab5c79a45f2531441f1949b79d6587f4b" + integrity sha512-TjMyeVUvNEnOnhzs6uAn9Ya47GmMo3qq7m+Lr/3ON0Rs5kHvb8I+SQYjLUSYn7qhEm0QjW0yrBkvz9yOrwwz1A== + dependencies: + "@babel/runtime" "^7.8.7" + csstype "^2.6.7" + dom-serializer@0: version "0.2.2" resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.2.tgz#1afb81f533717175d478655debc5e332d9f9bb51" @@ -3526,6 +3934,14 @@ domutils@^1.5.1, domutils@^1.7.0: dom-serializer "0" domelementtype "1" +dot-case@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.3.tgz#21d3b52efaaba2ea5fda875bb1aa8124521cf4aa" + integrity sha512-7hwEmg6RiSQfm/GwPL4AAWXKy3YNNZA3oFv2Pdiey0mwkRCPZ9x6SZbkLcn8Ma5PYeVokzoD4Twv2n7LKp5WeA== + dependencies: + no-case "^3.0.3" + tslib "^1.10.0" + dot-prop@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.2.0.tgz#c34ecc29556dc45f1f4c22697b6f4904e0cc4fcb" @@ -3571,12 +3987,12 @@ ee-first@1.1.1: resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= -electron-to-chromium@^1.3.341, electron-to-chromium@^1.3.349: - version "1.3.349" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.349.tgz#663f26a69d348a462df47b4d7ab162a2f29bbcb7" - integrity sha512-uEb2zs6EJ6OZIqaMsCSliYVgzE/f7/s1fLWqtvRtHg/v5KBF2xds974fUnyatfxIDgkqzQVwFtam5KExqywx0Q== +electron-to-chromium@^1.3.378, electron-to-chromium@^1.3.413: + version "1.3.443" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.443.tgz#b01c8933e820a728afc5dde7dd535c53ff55ab11" + integrity sha512-ty0LEroTap/xfMy31oQ3XX+Q377QvWvJaha2cmuXcbmBiX2EIB5SNDQ0hp8lhvxj63WG0zOgm/4MQ/oUBdfQqg== -elliptic@^6.0.0: +elliptic@^6.0.0, elliptic@^6.5.2: version "6.5.2" resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.2.tgz#05c5678d7173c049d8ca433552224a495d0e3762" integrity sha512-f4x70okzZbIQl/NSRLkI/+tteV/9WqL98zx+SQ69KbXxmVrmjwsNUPn/gYJJ0sHvEak24cZgHIPegRePAtA/xw== @@ -3604,6 +4020,11 @@ emojis-list@^2.0.0: resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" integrity sha1-TapNnbAPmBmIDHn6RXrlsJof04k= +emojis-list@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" + integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== + encodeurl@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" @@ -3631,9 +4052,9 @@ entities@^1.1.1: integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w== entities@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/entities/-/entities-2.0.0.tgz#68d6084cab1b079767540d80e56a39b423e4abf4" - integrity sha512-D9f7V0JSRwIxlRI2mjMqufDrRDnx8p+eEOz7aUM9SuvF8gsBzra0/6tbjl1m8eQHrZlYj6PxqE00hZ1SAIKPLw== + version "2.0.2" + resolved "https://registry.yarnpkg.com/entities/-/entities-2.0.2.tgz#ac74db0bba8d33808bbf36809c3a5c3683531436" + integrity sha512-dmD3AvJQBUjKpcNkoqr+x+IF0SdRtPz9Vk0uTy4yWqga9ibB6s4v++QFWNohjiUGoMlF552ZvNyXDxz5iW0qmw== errno@^0.1.3, errno@~0.1.7: version "0.1.7" @@ -3649,10 +4070,10 @@ error-ex@^1.2.0, error-ex@^1.3.1: dependencies: is-arrayish "^0.2.1" -es-abstract@^1.17.0, es-abstract@^1.17.0-next.1, es-abstract@^1.17.2: - version "1.17.4" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.4.tgz#e3aedf19706b20e7c2594c35fc0d57605a79e184" - integrity sha512-Ae3um/gb8F0mui/jPL+QiqmglkUsaQf7FwBEHYIFkztkneosu9imhqHpBzQ3h1vit8t5iQ74t6PEVvphBZiuiQ== +es-abstract@^1.17.0, es-abstract@^1.17.0-next.1, es-abstract@^1.17.2, es-abstract@^1.17.5: + version "1.17.5" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.5.tgz#d8c9d1d66c8981fb9200e2251d799eee92774ae9" + integrity sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg== dependencies: es-to-primitive "^1.2.1" function-bind "^1.1.1" @@ -3728,10 +4149,10 @@ escodegen@^1.11.0, escodegen@^1.9.1: optionalDependencies: source-map "~0.6.1" -eslint-config-react-app@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/eslint-config-react-app/-/eslint-config-react-app-5.2.0.tgz#135110ba56a9e378f7acfe5f36e2ae76a2317899" - integrity sha512-WrHjoGpKr1kLLiWDD81tme9jMM0hk5cMxasLSdyno6DdPt+IfLOrDJBVo6jN7tn4y1nzhs43TmUaZWO6Sf0blw== +eslint-config-react-app@^5.2.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/eslint-config-react-app/-/eslint-config-react-app-5.2.1.tgz#698bf7aeee27f0cea0139eaef261c7bf7dd623df" + integrity sha512-pGIZ8t0mFLcV+6ZirRgYK6RVqUIKRIi9MmgzUEmrIknsn3AdO0I32asO86dJgloHq+9ZPl8UIg8mYrvgP5u2wQ== dependencies: confusing-browser-globals "^1.0.9" @@ -3755,9 +4176,9 @@ eslint-loader@3.0.3: schema-utils "^2.6.1" eslint-module-utils@^2.4.1: - version "2.5.2" - resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.5.2.tgz#7878f7504824e1b857dd2505b59a8e5eda26a708" - integrity sha512-LGScZ/JSlqGKiT8OC+cYRxseMjyqt6QO54nl281CK93unD89ijSeRV6An8Ci/2nvWVKe8K/Tqdm75RQoIOCr+Q== + version "2.6.0" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.6.0.tgz#579ebd094f56af7797d19c9866c9c9486629bfa6" + integrity sha512-6j9xxegbqe8/kZY8cYpcp0xhbK0EgJlg3g9mib3/miLaExuuwc3n5UEfSnU6hWMbT0FAYVvDbL9RrRgpUeQIvA== dependencies: debug "^2.6.9" pkg-dir "^2.0.0" @@ -3769,10 +4190,10 @@ eslint-plugin-flowtype@4.6.0: dependencies: lodash "^4.17.15" -eslint-plugin-import@2.20.0: - version "2.20.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.20.0.tgz#d749a7263fb6c29980def8e960d380a6aa6aecaa" - integrity sha512-NK42oA0mUc8Ngn4kONOPsPB1XhbUvNHqF+g307dPV28aknPoiNnKLFd9em4nkswwepdF5ouieqv5Th/63U7YJQ== +eslint-plugin-import@2.20.1: + version "2.20.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.20.1.tgz#802423196dcb11d9ce8435a5fc02a6d3b46939b3" + integrity sha512-qQHgFOTjguR+LnYRoToeZWT62XM55MBVXObHM6SKFd1VzDcX/vqT1kAz8ssqigh5eMj8qXcRoXXGZpPP6RfdCw== dependencies: array-includes "^3.0.3" array.prototype.flat "^1.2.1" @@ -3807,10 +4228,10 @@ eslint-plugin-react-hooks@^1.6.1: resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-1.7.0.tgz#6210b6d5a37205f0b92858f895a4e827020a7d04" integrity sha512-iXTCFcOmlWvw4+TOE8CLWj6yX1GwzT0Y6cUfHHZqWnSk144VmVIRcVGtUAzrLES7C798lmvnt02C7rxaOX1HNA== -eslint-plugin-react@7.18.0: - version "7.18.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.18.0.tgz#2317831284d005b30aff8afb7c4e906f13fa8e7e" - integrity sha512-p+PGoGeV4SaZRDsXqdj9OWcOrOpZn8gXoGPcIQTzo2IDMbAKhNDnME9myZWqO3Ic4R3YmwAZ1lDjWl2R2hMUVQ== +eslint-plugin-react@7.19.0: + version "7.19.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.19.0.tgz#6d08f9673628aa69c5559d33489e855d83551666" + integrity sha512-SPT8j72CGuAP+JFbT0sJHOB80TX/pu44gQ4vXH/cq+hQTiY2PuZ6IHkqXJV6x1b28GDdo1lbInjKUrrdUf0LOQ== dependencies: array-includes "^3.1.1" doctrine "^2.1.0" @@ -3820,7 +4241,10 @@ eslint-plugin-react@7.18.0: object.fromentries "^2.0.2" object.values "^1.1.1" prop-types "^15.7.2" - resolve "^1.14.2" + resolve "^1.15.1" + semver "^6.3.0" + string.prototype.matchall "^4.0.2" + xregexp "^4.3.0" eslint-scope@^4.0.3: version "4.0.3" @@ -3845,6 +4269,13 @@ eslint-utils@^1.4.3: dependencies: eslint-visitor-keys "^1.1.0" +eslint-utils@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.0.0.tgz#7be1cc70f27a72a76cd14aa698bcabed6890e1cd" + integrity sha512-0HCPuJv+7Wv1bACm8y5/ECVfYdfsAm9xmVb7saeFlxjPYALefjhbYoCkBjPdPzGH8wWyTpAez82Fh3VKYEZ8OA== + dependencies: + eslint-visitor-keys "^1.1.0" + eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz#e2a82cea84ff246ad6fb57f9bde5b46621459ec2" @@ -3894,12 +4325,12 @@ eslint@^6.6.0: v8-compile-cache "^2.0.3" espree@^6.1.2: - version "6.1.2" - resolved "https://registry.yarnpkg.com/espree/-/espree-6.1.2.tgz#6c272650932b4f91c3714e5e7b5f5e2ecf47262d" - integrity sha512-2iUPuuPP+yW1PZaMSDM9eyVf8D5P0Hi8h83YtZ5bPc/zHYjII5khoixIUTMO794NOY8F/ThF1Bo8ncZILarUTA== + version "6.2.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-6.2.1.tgz#77fc72e1fd744a2052c20f38a5b575832e82734a" + integrity sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw== dependencies: - acorn "^7.1.0" - acorn-jsx "^5.1.0" + acorn "^7.1.1" + acorn-jsx "^5.2.0" eslint-visitor-keys "^1.1.0" esprima@^4.0.0, esprima@^4.0.1: @@ -3908,11 +4339,11 @@ esprima@^4.0.0, esprima@^4.0.1: integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== esquery@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.1.0.tgz#c5c0b66f383e7656404f86b31334d72524eddb48" - integrity sha512-MxYW9xKmROWF672KqjO75sszsA8Mxhw06YFeS5VHlB98KDHbOSurm3ArsjO60Eaf3QmGMCP1yn+0JQkNLo/97Q== + version "1.3.1" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.3.1.tgz#b78b5828aa8e214e29fb74c4d5b752e1c033da57" + integrity sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ== dependencies: - estraverse "^4.0.0" + estraverse "^5.1.0" esrecurse@^4.1.0: version "4.2.1" @@ -3921,12 +4352,17 @@ esrecurse@^4.1.0: dependencies: estraverse "^4.1.0" -estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0: +estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0: version "4.3.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== -esutils@^2.0.0, esutils@^2.0.2: +estraverse@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.1.0.tgz#374309d39fd935ae500e7b92e8a6b4c720e59642" + integrity sha512-FyohXK+R0vE+y1nHLoBM7ZTyqRpqAlhdZHCWIWEviFLiGB8b04H6bQs8G+XTthacvT8VuwvteiP7RJSxMs8UEw== + +esutils@^2.0.2: version "2.0.3" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== @@ -3937,9 +4373,9 @@ etag@~1.8.1: integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= eventemitter3@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.0.tgz#d65176163887ee59f386d64c82610b696a4a74eb" - integrity sha512-qerSRB0p+UDEssxTtm6EDKcE7W4OaoisfIMl4CngyEhjpYglocpNg6UEqCvemdGhosAsg4sO2dXJOdyBifPGCg== + version "4.0.4" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.4.tgz#b5463ace635a083d018bdc7c917b4c5f10a85384" + integrity sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ== events@^3.0.0: version "3.1.0" @@ -3979,6 +4415,11 @@ execa@^1.0.0: signal-exit "^3.0.0" strip-eof "^1.0.0" +exenv@^1.2.0: + version "1.2.2" + resolved "https://registry.yarnpkg.com/exenv/-/exenv-1.2.2.tgz#2ae78e85d9894158670b03d47bec1f03bd91bb9d" + integrity sha1-KueOhdmJQVhnCwPUe+wfA72Ru50= + exit@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" @@ -4154,14 +4595,14 @@ fb-watchman@^2.0.0: bser "2.1.1" figgy-pudding@^3.5.1: - version "3.5.1" - resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.1.tgz#862470112901c727a0e495a80744bd5baa1d6790" - integrity sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w== + version "3.5.2" + resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.2.tgz#b4eee8148abb01dcf1d1ac34367d59e12fa61d6e" + integrity sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw== figures@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-3.1.0.tgz#4b198dd07d8d71530642864af2d45dd9e459c4ec" - integrity sha512-ravh8VRXqHuMvZt/d8GblBeqDMkdJMBdv/2KntFH+ra5MXkO7nxNKpzQ3n6QD/2da1kH0aWmNISdvhM7gl2gVg== + version "3.2.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" + integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== dependencies: escape-string-regexp "^1.0.5" @@ -4229,7 +4670,7 @@ find-cache-dir@^0.1.1: mkdirp "^0.5.1" pkg-dir "^1.0.0" -find-cache-dir@^2.0.0, find-cache-dir@^2.1.0: +find-cache-dir@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7" integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ== @@ -4239,12 +4680,12 @@ find-cache-dir@^2.0.0, find-cache-dir@^2.1.0: pkg-dir "^3.0.0" find-cache-dir@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.2.0.tgz#e7fe44c1abc1299f516146e563108fd1006c1874" - integrity sha512-1JKclkYYsf1q9WIJKLZa9S9muC+08RIjzAlLrK4QcYLJMS6mk9yombQ9qf+zJ7H9LS800k0s44L4sDq9VYzqyg== + version "3.3.1" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.1.tgz#89b33fad4a4670daa94f855f7fbe31d6d84fe880" + integrity sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ== dependencies: commondir "^1.0.1" - make-dir "^3.0.0" + make-dir "^3.0.2" pkg-dir "^4.1.0" find-up@4.1.0, find-up@^4.0.0: @@ -4287,9 +4728,9 @@ flat-cache@^2.0.1: write "1.0.3" flatted@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.1.tgz#69e57caa8f0eacbc281d2e2cb458d46fdb449e08" - integrity sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg== + version "2.0.2" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138" + integrity sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA== flatten@^1.0.2: version "1.0.3" @@ -4304,10 +4745,17 @@ flush-write-stream@^1.0.0: inherits "^2.0.3" readable-stream "^2.3.6" +follow-redirects@1.5.10: + version "1.5.10" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.5.10.tgz#7b7a9f9aea2fdff36786a94ff643ed07f4ff5e2a" + integrity sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ== + dependencies: + debug "=3.1.0" + follow-redirects@^1.0.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.10.0.tgz#01f5263aee921c6a54fb91667f08f4155ce169eb" - integrity sha512-4eyLK6s6lH32nOvLLwlIOnr9zrL8Sm+OvW4pVTJNoXeGzYIkHVf+pADQi+OJ0E67hiuSLezPVPyBcIZO50TmmQ== + version "1.11.0" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.11.0.tgz#afa14f08ba12a52963140fe43212658897bc0ecb" + integrity sha512-KZm0V+ll8PfBrKwMzdo5D13b1bur9Iq9Zd/RMmAoQQcl2PxxFml8cxXPaaPYVbV0RjNjq1CU7zIzAOqtUPudmA== dependencies: debug "^3.0.0" @@ -4430,19 +4878,24 @@ fs.realpath@^1.0.0: resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= -fsevents@2.1.2, fsevents@~2.1.2: +fsevents@2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.2.tgz#4c0a1fb34bc68e543b4b82a9ec392bfbda840805" integrity sha512-R4wDiBwZ0KzpgOWetKDug1FZcYhqYnUYKtfZYt4mD5SBz76q0KR4Q9o7GIPamsVPGmW3EYPPJ0dOOjvx32ldZA== fsevents@^1.2.7: - version "1.2.11" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.11.tgz#67bf57f4758f02ede88fb2a1712fef4d15358be3" - integrity sha512-+ux3lx6peh0BpvY0JebGyZoiR4D+oYzdPZMKJwkZ+sFkNJzpL7tXc/wehS49gUAxg3tmMHPHZkA8JU2rhhgDHw== + version "1.2.13" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.13.tgz#f325cb0455592428bcf11b383370ef70e3bfcc38" + integrity sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw== dependencies: bindings "^1.5.0" nan "^2.12.1" +fsevents@~2.1.2: + version "2.1.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e" + integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ== + function-bind@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" @@ -4501,9 +4954,9 @@ glob-parent@^3.1.0: path-dirname "^1.0.0" glob-parent@^5.0.0, glob-parent@~5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.0.tgz#5f4c1d1e748d30cd73ad2944b3577a81b081e8c2" - integrity sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw== + version "5.1.1" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229" + integrity sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ== dependencies: is-glob "^4.0.1" @@ -4546,9 +4999,9 @@ globals@^11.1.0: integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== globals@^12.1.0: - version "12.3.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-12.3.0.tgz#1e564ee5c4dded2ab098b0f88f24702a3c56be13" - integrity sha512-wAfjdLgFsPZsklLJvOBUBmzYE8/CwhEqSBEMRXA3qxIiNtyqvjYurAtIfDh6chlEPUfmTY3MnZh5Hfh4q0UlIw== + version "12.4.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-12.4.0.tgz#a18813576a41b00a24a97e7f815918c2e19925f8" + integrity sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg== dependencies: type-fest "^0.8.1" @@ -4577,9 +5030,9 @@ globby@^6.1.0: pinkie-promise "^2.0.0" graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.2: - version "4.2.3" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423" - integrity sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ== + version "4.2.4" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" + integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== growly@^1.3.0: version "1.3.0" @@ -4595,9 +5048,9 @@ gzip-size@5.1.1: pify "^4.0.1" handle-thing@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.0.tgz#0e039695ff50c93fc288557d696f3c1dc6776754" - integrity sha512-d4sze1JNC454Wdo2fkuyzCr6aHcbL6PGGuFAz0Li/NcOm1tCHGnWDRmJP85dh9IhQErTc2svWFEX5xHIOo//kQ== + version "2.0.1" + resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.1.tgz#857f79ce359580c340d43081cc648970d0bb234e" + integrity sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg== har-schema@^2.0.0: version "2.0.0" @@ -4678,12 +5131,13 @@ has@^1.0.0, has@^1.0.3: function-bind "^1.1.1" hash-base@^3.0.0: - version "3.0.4" - resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.0.4.tgz#5fc8686847ecd73499403319a6b0a3f3f6ae4918" - integrity sha1-X8hoaEfs1zSZQDMZprCj8/auSRg= + version "3.1.0" + resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33" + integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA== dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" + inherits "^2.0.4" + readable-stream "^3.6.0" + safe-buffer "^5.2.0" hash.js@^1.0.0, hash.js@^1.0.3: version "1.1.7" @@ -4703,6 +5157,18 @@ hex-color-regex@^1.1.0: resolved "https://registry.yarnpkg.com/hex-color-regex/-/hex-color-regex-1.1.0.tgz#4c06fccb4602fe2602b3c93df82d7e7dbf1a8a8e" integrity sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ== +history@^4.9.0: + version "4.10.1" + resolved "https://registry.yarnpkg.com/history/-/history-4.10.1.tgz#33371a65e3a83b267434e2b3f3b1b4c58aad4cf3" + integrity sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew== + dependencies: + "@babel/runtime" "^7.1.2" + loose-envify "^1.2.0" + resolve-pathname "^3.0.0" + tiny-invariant "^1.0.2" + tiny-warning "^1.0.0" + value-equal "^1.0.1" + hmac-drbg@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" @@ -4712,10 +5178,17 @@ hmac-drbg@^1.0.0: minimalistic-assert "^1.0.0" minimalistic-crypto-utils "^1.0.1" +hoist-non-react-statics@^3.0.0, hoist-non-react-statics@^3.1.0, hoist-non-react-statics@^3.3.0: + version "3.3.2" + resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" + integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw== + dependencies: + react-is "^16.7.0" + hosted-git-info@^2.1.4: - version "2.8.5" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.5.tgz#759cfcf2c4d156ade59b0b2dfabddc42a6b9c70c" - integrity sha512-kssjab8CvdXfcXMXVcvsXum4Hwdq9XGtRD3TteMEvEbq0LXyiNQr6AprqKqfeaDXze7SxWvRxdpwE6ku7ikLkg== + version "2.8.8" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488" + integrity sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg== hpack.js@^2.1.6: version "2.1.6" @@ -4750,27 +5223,27 @@ html-encoding-sniffer@^1.0.2: whatwg-encoding "^1.0.1" html-entities@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.2.1.tgz#0df29351f0721163515dfb9e5543e5f6eed5162f" - integrity sha1-DfKTUfByEWNRXfueVUPl9u7VFi8= + version "1.3.1" + resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.3.1.tgz#fb9a1a4b5b14c5daba82d3e34c6ae4fe701a0e44" + integrity sha512-rhE/4Z3hIhzHAUKbW8jVcCyuT5oJCXXqhN/6mXXVCpzTmvJnoH2HL/bt3EZ6p55jbFJBeAe1ZNpL5BugLujxNA== html-escaper@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.0.tgz#71e87f931de3fe09e56661ab9a29aadec707b491" - integrity sha512-a4u9BeERWGu/S8JiWEAQcdrg9v4QArtP9keViQjGMdff20fBdd8waotXaNmODqBe6uZ3Nafi7K/ho4gCQHV3Ig== + version "2.0.2" + resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" + integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== html-minifier-terser@^5.0.1: - version "5.0.3" - resolved "https://registry.yarnpkg.com/html-minifier-terser/-/html-minifier-terser-5.0.3.tgz#b33549b57be7f0357be0d0b892995aaed1ed90f8" - integrity sha512-It4No3H1V3Dhd/O0MePFdo0oX/M6u6YZTMw4My/010mT6vxdbqge7+0RoxGAmeSbKok6gjYZoP0p4rpZ2+J2yw== + version "5.1.1" + resolved "https://registry.yarnpkg.com/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz#922e96f1f3bb60832c2634b79884096389b1f054" + integrity sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg== dependencies: - camel-case "^3.0.0" - clean-css "^4.2.1" - commander "^4.0.0" + camel-case "^4.1.1" + clean-css "^4.2.3" + commander "^4.1.1" he "^1.2.0" - param-case "^2.1.1" + param-case "^3.0.3" relateurl "^0.2.7" - terser "^4.3.9" + terser "^4.6.3" html-webpack-plugin@4.0.0-beta.11: version "4.0.0-beta.11" @@ -4784,7 +5257,7 @@ html-webpack-plugin@4.0.0-beta.11: tapable "^1.1.3" util.promisify "1.0.0" -htmlparser2@^3.3.0: +htmlparser2@^3.3.0, htmlparser2@^3.9.0: version "3.10.1" resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.10.1.tgz#bd679dc3f59897b6a34bb10749c855bb53a9392f" integrity sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ== @@ -4849,9 +5322,9 @@ http-proxy-middleware@0.19.1: micromatch "^3.1.10" http-proxy@^1.17.0: - version "1.18.0" - resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.0.tgz#dbe55f63e75a347db7f3d99974f2692a314a6a3a" - integrity sha512-84I2iJM/n1d4Hdgc6y2+qY5mDaz2PUVjlg9znE9byl+q0uC3DeByqBGReQu5tpLK0TAqTIXScRUV+dg7+bUPpQ== + version "1.18.1" + resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549" + integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ== dependencies: eventemitter3 "^4.0.0" follow-redirects "^1.0.0" @@ -4983,7 +5456,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.1, inherits@~2.0.3: +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -5003,7 +5476,7 @@ ini@^1.3.5: resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== -inquirer@7.0.4, inquirer@^7.0.0: +inquirer@7.0.4: version "7.0.4" resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.0.4.tgz#99af5bde47153abca23f5c7fc30db247f39da703" integrity sha512-Bu5Td5+j11sCkqfqmUTiwv+tWisMtP0L7Q8WrqA2C/BbBhy1YTdFrvjjlrKq8oagA/tLQBski2Gcx/Sqyi2qSQ== @@ -5022,6 +5495,25 @@ inquirer@7.0.4, inquirer@^7.0.0: strip-ansi "^5.1.0" through "^2.3.6" +inquirer@^7.0.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.1.0.tgz#1298a01859883e17c7264b82870ae1034f92dd29" + integrity sha512-5fJMWEmikSYu0nv/flMc475MhGbB7TSPd/2IpFV4I4rMklboCH2rQjYY5kKiYGHqUF9gvaambupcJFFG9dvReg== + dependencies: + ansi-escapes "^4.2.1" + chalk "^3.0.0" + cli-cursor "^3.1.0" + cli-width "^2.0.0" + external-editor "^3.0.3" + figures "^3.0.0" + lodash "^4.17.15" + mute-stream "0.0.8" + run-async "^2.4.0" + rxjs "^6.5.3" + string-width "^4.1.0" + strip-ansi "^6.0.0" + through "^2.3.6" + internal-ip@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/internal-ip/-/internal-ip-4.3.0.tgz#845452baad9d2ca3b69c635a137acb9a0dad0907" @@ -5030,6 +5522,15 @@ internal-ip@^4.3.0: default-gateway "^4.2.0" ipaddr.js "^1.9.0" +internal-slot@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.2.tgz#9c2e9fb3cd8e5e4256c6f45fe310067fcfa378a3" + integrity sha512-2cQNfwhAfJIkU4KZPkDI+Gj5yNNnbqi40W9Gge6dfnk4TocEVm00B3bdiL+JINrbGJil2TeHvM4rETGzk/f/0g== + dependencies: + es-abstract "^1.17.0-next.1" + has "^1.0.3" + side-channel "^1.0.2" + invariant@^2.2.2, invariant@^2.2.4: version "2.2.4" resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" @@ -5052,12 +5553,7 @@ ip@^1.1.0, ip@^1.1.5: resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo= -ipaddr.js@1.9.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.0.tgz#37df74e430a0e47550fe54a2defe30d8acd95f65" - integrity sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA== - -ipaddr.js@^1.9.0: +ipaddr.js@1.9.1, ipaddr.js@^1.9.0: version "1.9.1" resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== @@ -5297,11 +5793,6 @@ is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4: dependencies: isobject "^3.0.1" -is-promise@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" - integrity sha1-eaKp7OfwlugPNtKy87wWwf9L8/o= - is-regex@^1.0.4, is-regex@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.5.tgz#39d589a358bf18967f726967120b8fc1aed74eae" @@ -5364,9 +5855,16 @@ is-wsl@^1.1.0: integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= is-wsl@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.1.1.tgz#4a1c152d429df3d441669498e2486d3596ebaf1d" - integrity sha512-umZHcSrwlDHo2TGMXv0DZ8dIUGunZ2Iv68YZnrmCiBPkZ4aaOhtv7pXJKeki9k3qJ3RJr0cDyitcl5wEH3AYog== + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" + integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== + dependencies: + is-docker "^2.0.0" + +isarray@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" + integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8= isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: version "1.0.0" @@ -5491,7 +5989,7 @@ jest-config@^24.9.0: pretty-format "^24.9.0" realpath-native "^1.1.0" -jest-diff@^24.0.0, jest-diff@^24.3.0, jest-diff@^24.9.0: +jest-diff@^24.9.0: version "24.9.0" resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-24.9.0.tgz#931b7d0d5778a1baf7452cb816e325e3724055da" integrity sha512-qMfrTs8AdJE2iqrTp0hzh7kTd2PQWrsFyj9tORoKmu32xjPjeE4NyjVRDz8ybYwqS2ik8N4hsIpiVTyFeo2lBQ== @@ -5501,6 +5999,16 @@ jest-diff@^24.0.0, jest-diff@^24.3.0, jest-diff@^24.9.0: jest-get-type "^24.9.0" pretty-format "^24.9.0" +jest-diff@^25.1.0, jest-diff@^25.2.1, jest-diff@^25.5.0: + version "25.5.0" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-25.5.0.tgz#1dd26ed64f96667c068cef026b677dfa01afcfa9" + integrity sha512-z1kygetuPiREYdNIumRpAHY6RXiGmp70YHptjdaxTWGmA085W3iCnXNx0DhflK3vwrKmrRWyY1wUpkPMVxMK7A== + dependencies: + chalk "^3.0.0" + diff-sequences "^25.2.6" + jest-get-type "^25.2.6" + pretty-format "^25.5.0" + jest-docblock@^24.3.0: version "24.9.0" resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-24.9.0.tgz#7970201802ba560e1c4092cc25cbedf5af5a8ce2" @@ -5559,6 +6067,11 @@ jest-get-type@^24.9.0: resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-24.9.0.tgz#1684a0c8a50f2e4901b6644ae861f579eed2ef0e" integrity sha512-lUseMzAley4LhIcpSP9Jf+fTrQ4a1yHQwLNeeVa2cEmbCGeoZAtYPOIv8JaxLD/sUpKxetKGP+gsHl8f8TSj8Q== +jest-get-type@^25.2.6: + version "25.2.6" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-25.2.6.tgz#0b0a32fab8908b44d508be81681487dbabb8d877" + integrity sha512-DxjtyzOHjObRM+sM1knti6or+eOgcGU4xVSb2HNP1TqO4ahsT+rqZg+nyqHWJSvWgKC5cG3QjGFBqxLghiF/Ig== + jest-haste-map@^24.9.0: version "24.9.0" resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-24.9.0.tgz#b38a5d64274934e21fa417ae9a9fbeb77ceaac7d" @@ -5608,7 +6121,7 @@ jest-leak-detector@^24.9.0: jest-get-type "^24.9.0" pretty-format "^24.9.0" -jest-matcher-utils@^24.0.0, jest-matcher-utils@^24.9.0: +jest-matcher-utils@^24.9.0: version "24.9.0" resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-24.9.0.tgz#f5b3661d5e628dffe6dd65251dfdae0e87c3a073" integrity sha512-OZz2IXsu6eaiMAwe67c1T+5tUAtQyQx27/EMEkbFAGiw52tB9em+uGbzpcgYVpA8wl0hlxKPZxrly4CXU/GjHA== @@ -5618,6 +6131,16 @@ jest-matcher-utils@^24.0.0, jest-matcher-utils@^24.9.0: jest-get-type "^24.9.0" pretty-format "^24.9.0" +jest-matcher-utils@^25.1.0: + version "25.5.0" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-25.5.0.tgz#fbc98a12d730e5d2453d7f1ed4a4d948e34b7867" + integrity sha512-VWI269+9JS5cpndnpCwm7dy7JtGQT30UHfrnM3mXl22gHGt/b7NkjBqXfbhZ8V4B7ANUsjK18PlSBmG0YH7gjw== + dependencies: + chalk "^3.0.0" + jest-diff "^25.5.0" + jest-get-type "^25.2.6" + pretty-format "^25.5.0" + jest-message-util@^24.9.0: version "24.9.0" resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-24.9.0.tgz#527f54a1e380f5e202a8d1149b0ec872f43119e3" @@ -5812,9 +6335,9 @@ jest-worker@^24.6.0, jest-worker@^24.9.0: supports-color "^6.1.0" jest-worker@^25.1.0: - version "25.1.0" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-25.1.0.tgz#75d038bad6fdf58eba0d2ec1835856c497e3907a" - integrity sha512-ZHhHtlxOWSxCoNOKHGbiLzXnl42ga9CxDr27H36Qn+15pQZd3R/F24jrmjDelw9j/iHUIWMWs08/u2QN50HHOg== + version "25.5.0" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-25.5.0.tgz#2611d071b79cea0f43ee57a3d118593ac1547db1" + integrity sha512-/dsSmUkIy5EBGfv/IjjqmFxrNAUpBERfGs1oHROyD7yxjG/w+t0GOJDX8O1k32ySmd7+a5IhnJU2qQFcJ4n1vw== dependencies: merge-stream "^2.0.0" supports-color "^7.0.0" @@ -5968,12 +6491,12 @@ json5@^1.0.1: dependencies: minimist "^1.2.0" -json5@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.1.tgz#81b6cb04e9ba496f1c7005d07b4368a2638f90b6" - integrity sha512-l+3HXD0GEI3huGq1njuqtzYK8OYJyXMkOLtQ53pjWh89tvWS2h6l+1zMkYWqlb57+SiQodKZyvMEFb2X+KrFhQ== +json5@^2.1.2: + version "2.1.3" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.3.tgz#c9b0f7fa9233bfe5807fe66fcf3a5617ed597d43" + integrity sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA== dependencies: - minimist "^1.2.0" + minimist "^1.2.5" jsonfile@^4.0.0: version "4.0.0" @@ -6122,19 +6645,19 @@ load-json-file@^4.0.0: strip-bom "^3.0.0" loader-fs-cache@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/loader-fs-cache/-/loader-fs-cache-1.0.2.tgz#54cedf6b727e1779fd8f01205f05f6e88706f086" - integrity sha512-70IzT/0/L+M20jUlEqZhZyArTU6VKLRTYRDAYN26g4jfzpJqjipLL3/hgYpySqI9PwsVRHHFja0LfEmsx9X2Cw== + version "1.0.3" + resolved "https://registry.yarnpkg.com/loader-fs-cache/-/loader-fs-cache-1.0.3.tgz#f08657646d607078be2f0a032f8bd69dd6f277d9" + integrity sha512-ldcgZpjNJj71n+2Mf6yetz+c9bM4xpKtNds4LbqXzU/PTdeAX0g3ytnU1AJMEcTk2Lex4Smpe3Q/eCTsvUBxbA== dependencies: find-cache-dir "^0.1.1" - mkdirp "0.5.1" + mkdirp "^0.5.1" loader-runner@^2.4.0: version "2.4.0" resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357" integrity sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw== -loader-utils@1.2.3, loader-utils@^1.0.2, loader-utils@^1.1.0, loader-utils@^1.2.3: +loader-utils@1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.2.3.tgz#1ff5dc6911c9f0a062531a4c04b609406108c2c7" integrity sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA== @@ -6143,6 +6666,15 @@ loader-utils@1.2.3, loader-utils@^1.0.2, loader-utils@^1.1.0, loader-utils@^1.2. emojis-list "^2.0.0" json5 "^1.0.1" +loader-utils@^1.1.0, loader-utils@^1.2.3, loader-utils@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613" + integrity sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA== + dependencies: + big.js "^5.2.2" + emojis-list "^3.0.0" + json5 "^1.0.1" + locate-path@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" @@ -6166,6 +6698,11 @@ locate-path@^5.0.0: dependencies: p-locate "^4.1.0" +lodash-es@^4.17.15: + version "4.17.15" + resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.15.tgz#21bd96839354412f23d7a10340e5eac6ee455d78" + integrity sha512-rlrc3yU3+JNOpZ9zj5pQtxnx2THmvRykwL4Xlxoa8I9lHBlVbbyPhgyPMioxVZ4NqyxaVVtaJnzsyOidQIhyyQ== + lodash._reinterpolate@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" @@ -6207,21 +6744,28 @@ lodash.uniq@^4.5.0: integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== loglevel@^1.6.6: - version "1.6.7" - resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.7.tgz#b3e034233188c68b889f5b862415306f565e2c56" - integrity sha512-cY2eLFrQSAfVPhCgH1s7JI73tMbg9YC3v3+ZHVW67sBS7UxWzNEk/ZBbSfLykBWHp33dqqtOv82gjhKEi81T/A== + version "1.6.8" + resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.8.tgz#8a25fb75d092230ecd4457270d80b54e28011171" + integrity sha512-bsU7+gc9AJ2SqpzxwU3+1fedl8zAntbtC5XYlt3s2j1hJcn2PsXSmgN8TaLG/J1/2mod4+cE/3vNL70/c1RNCA== -loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.4.0: +lokijs@^1.5.8: + version "1.5.8" + resolved "https://registry.yarnpkg.com/lokijs/-/lokijs-1.5.8.tgz#9296f288edb2147389ec692fc972c428c59179d1" + integrity sha512-D8E3TBrY35o1ELnonp2MF8b3wKu2tVNl2TqRjvS+95oPMMe7OoIAxNY1qr+5BEZwnWn2V4ErAjVt000DonM+FA== + +loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.2.0, loose-envify@^1.3.1, loose-envify@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== dependencies: js-tokens "^3.0.0 || ^4.0.0" -lower-case@^1.1.1: - version "1.1.4" - resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-1.1.4.tgz#9a2cabd1b9e8e0ae993a4bf7d5875c39c42e8eac" - integrity sha1-miyr0bno4K6ZOkv31YdcOcQujqw= +lower-case@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.1.tgz#39eeb36e396115cc05e29422eaea9e692c9408c7" + integrity sha512-LiWgfDLLb1dwbFQZsSglpRj+1ctGnayXz3Uv0/WO8n558JycT5fg6zkNcnW0G68Nn0aEldTFeEfmjCfmqry/rQ== + dependencies: + tslib "^1.10.0" lru-cache@^5.1.1: version "5.1.1" @@ -6238,10 +6782,10 @@ make-dir@^2.0.0, make-dir@^2.1.0: pify "^4.0.1" semver "^5.6.0" -make-dir@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.0.2.tgz#04a1acbf22221e1d6ef43559f43e05a90dbb4392" - integrity sha512-rYKABKutXa6vXTXhoV18cBE7PaewPXHe/Bdq4v+ZLMhxbWApkFFplT0LcbMW+6BbjnQXzZ/sAvSE/JdguApG5w== +make-dir@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" + integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== dependencies: semver "^6.0.0" @@ -6290,6 +6834,11 @@ mdn-data@2.0.4: resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.4.tgz#699b3c38ac6f1d728091a64650b65d388502fd5b" integrity sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA== +mdn-data@2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.6.tgz#852dc60fcaa5daa2e8cf6c9189c440ed3e042978" + integrity sha512-rQvjv71olwNHgiTbfPZFkJtjNMciWgswYeciZhtvWLO8bmX3TnhyA62I6sTWOyZssWHJJjY6/KiWwqQsWWsqOA== + media-typer@0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" @@ -6381,17 +6930,17 @@ miller-rabin@^4.0.0: bn.js "^4.0.0" brorand "^1.0.1" -mime-db@1.43.0, "mime-db@>= 1.43.0 < 2": - version "1.43.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.43.0.tgz#0a12e0502650e473d735535050e7c8f4eb4fae58" - integrity sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ== +mime-db@1.44.0, "mime-db@>= 1.43.0 < 2": + version "1.44.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.44.0.tgz#fa11c5eb0aca1334b4233cb4d52f10c5a6272f92" + integrity sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg== mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24: - version "2.1.26" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.26.tgz#9c921fc09b7e149a65dfdc0da4d20997200b0a06" - integrity sha512-01paPWYgLrkqAyrlDorC1uDwl2p3qZT7yl806vW7DvDoxwXi46jsjFbg+WdwotBIk6/MbEhO/dh5aZ5sNj/dWQ== + version "2.1.27" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.27.tgz#47949f98e279ea53119f5722e0f34e529bec009f" + integrity sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w== dependencies: - mime-db "1.43.0" + mime-db "1.44.0" mime@1.6.0: version "1.6.0" @@ -6399,9 +6948,9 @@ mime@1.6.0: integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== mime@^2.4.4: - version "2.4.4" - resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.4.tgz#bd7b91135fc6b01cde3e9bae33d659b63d8857e5" - integrity sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA== + version "2.4.5" + resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.5.tgz#d8de2ecb92982dedbb6541c9b6841d7f218ea009" + integrity sha512-3hQhEUF027BuxZjQA3s7rIv/7VCQPa27hN9u9g87sEkWaKwQPuXOkVKtOeiyUrnWqTDiOs8Ed2rwg733mB0R5w== mimic-fn@^2.0.0, mimic-fn@^2.1.0: version "2.1.0" @@ -6413,6 +6962,14 @@ min-indent@^1.0.0: resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.0.tgz#cfc45c37e9ec0d8f0a0ec3dd4ef7f7c3abe39256" integrity sha1-z8RcN+nsDY8KDsPdTvf3w6vjklY= +mini-create-react-context@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/mini-create-react-context/-/mini-create-react-context-0.4.0.tgz#df60501c83151db69e28eac0ef08b4002efab040" + integrity sha512-b0TytUgFSbgFJGzJqXPKCFCBWigAjpjo+Fl7Vf7ZbKRDptszpppKxXH6DRXEABZ/gcEQczeb0iZ7JvL8e8jjCA== + dependencies: + "@babel/runtime" "^7.5.5" + tiny-warning "^1.0.3" + mini-css-extract-plugin@0.9.0: version "0.9.0" resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-0.9.0.tgz#47f2cf07aa165ab35733b1fc97d4c46c0564339e" @@ -6440,15 +6997,10 @@ minimatch@3.0.4, minimatch@^3.0.4: dependencies: brace-expansion "^1.1.7" -minimist@0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" - integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= - -minimist@^1.1.1, minimist@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" - integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= +minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" + integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== minipass-collect@^1.0.2: version "1.0.2" @@ -6465,16 +7017,16 @@ minipass-flush@^1.0.5: minipass "^3.0.0" minipass-pipeline@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.2.tgz#3dcb6bb4a546e32969c7ad710f2c79a86abba93a" - integrity sha512-3JS5A2DKhD2g0Gg8x3yamO0pj7YeKGwVlDS90pF++kxptwx/F+B//roxf9SqYil5tQo65bijy+dAuAFZmYOouA== + version "1.2.3" + resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.3.tgz#55f7839307d74859d6e8ada9c3ebe72cec216a34" + integrity sha512-cFOknTvng5vqnwOpDsZTWhNll6Jf8o2x+/diplafmxpuIymAjzoOolZG0VvQf3V2HgqzJNhnuKHYp2BqDgz8IQ== dependencies: minipass "^3.0.0" minipass@^3.0.0, minipass@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.1.1.tgz#7607ce778472a185ad6d89082aa2070f79cedcd5" - integrity sha512-UFqVihv6PQgwj8/yTGvl9kPz7xIAY+R5z6XYjRInD3Gk3qx6QGSD6zEcpeG4Dy/lQnv1J6zv8ejV90hyYIKf3w== + version "3.1.3" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.1.3.tgz#7d42ff1f39635482e15f9cdb53184deebd5815fd" + integrity sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg== dependencies: yallist "^4.0.0" @@ -6510,12 +7062,17 @@ mixin-object@^2.0.1: for-in "^0.1.3" is-extendable "^0.1.1" -mkdirp@0.5.1, mkdirp@^0.5.1, mkdirp@~0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" - integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= +mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@~0.5.1: + version "0.5.5" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" + integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== dependencies: - minimist "0.0.8" + minimist "^1.2.5" + +moment@2.25.3: + version "2.25.3" + resolved "https://registry.yarnpkg.com/moment/-/moment-2.25.3.tgz#252ff41319cf41e47761a1a88cab30edfe9808c0" + integrity sha512-PuYv0PHxZvzc15Sp8ybUCoQ+xpyPWvjOuK72a5ovzp2LI32rJXOiIfyoFoYvG3s6EwwrdkMyWuRiEHSZRLJNdg== move-concurrently@^1.0.1: version "1.0.1" @@ -6563,9 +7120,9 @@ mute-stream@0.0.8: integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== nan@^2.12.1: - version "2.14.0" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c" - integrity sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg== + version "2.14.1" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.1.tgz#d7be34dfa3105b91494c3147089315eff8874b01" + integrity sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw== nanomatch@^1.2.9: version "1.2.13" @@ -6609,12 +7166,13 @@ nice-try@^1.0.4: resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== -no-case@^2.2.0: - version "2.3.2" - resolved "https://registry.yarnpkg.com/no-case/-/no-case-2.3.2.tgz#60b813396be39b3f1288a4c1ed5d1e7d28b464ac" - integrity sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ== +no-case@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.3.tgz#c21b434c1ffe48b39087e86cfb4d2582e9df18f8" + integrity sha512-ehY/mVQCf9BL0gKfsJBvFJen+1V//U+0HQMPrWct40ixE4jnv0bfvxDbWtAHL9EcaPEOJHVVYKoQn1TlZUB8Tw== dependencies: - lower-case "^1.1.1" + lower-case "^2.0.1" + tslib "^1.10.0" node-forge@0.9.0: version "0.9.0" @@ -6671,12 +7229,10 @@ node-notifier@^5.4.2: shellwords "^0.1.1" which "^1.3.0" -node-releases@^1.1.47, node-releases@^1.1.49: - version "1.1.49" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.49.tgz#67ba5a3fac2319262675ef864ed56798bb33b93e" - integrity sha512-xH8t0LS0disN0mtRCh+eByxFPie+msJUBL/lJDBuap53QGiYPa9joh83K4pCZgWJ+2L4b9h88vCVdXQ60NO2bg== - dependencies: - semver "^6.3.0" +node-releases@^1.1.52, node-releases@^1.1.53: + version "1.1.55" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.55.tgz#8af23b7c561d8e2e6e36a46637bab84633b07cee" + integrity sha512-H3R3YR/8TjT5WPin/wOoHOUPHgvj8leuU/Keta/rwelEQN9pA/S2Dx8/se4pZ2LBxSd0nAGzsNzhqwa77v7F1w== normalize-package-data@^2.3.2: version "2.5.0" @@ -6754,7 +7310,7 @@ oauth-sign@~0.9.0: resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== -object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: +object-assign@4.x, object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= @@ -6769,9 +7325,9 @@ object-copy@^0.1.0: kind-of "^3.0.3" object-hash@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-2.0.2.tgz#f7b2212dbe07d07e340ccd6004c59504fc4015cf" - integrity sha512-b+2AKjAf6uQlxxv8ChHdM+VT4eeX+ZSwv+pk2xIXZWbo+yxn4/En1iC+GHe/OFYa9on0AhFF2PvuAcFHoiiHaA== + version "2.0.3" + resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-2.0.3.tgz#d12db044e03cd2ca3d77c0570d87225b02e1e6ea" + integrity sha512-JPKn0GMu+Fa3zt3Bmr66JhokJU5BaNBIh4ZeTlaCBzrBsOeXzwcKKAK1tbLiPKgvwmPXsDvvLHoWh5Bm7ofIYg== object-inspect@^1.7.0: version "1.7.0" @@ -6779,9 +7335,12 @@ object-inspect@^1.7.0: integrity sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw== object-is@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.0.2.tgz#6b80eb84fe451498f65007982f035a5b445edec4" - integrity sha512-Epah+btZd5wrrfjkJZq1AOB9O6OxUQto45hzFd7lXGrpHPGE0W1k+426yrZV+k6NJOzLNNW/nVsmZdIWsAqoOQ== + version "1.1.2" + resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.2.tgz#c5d2e87ff9e119f78b7a088441519e2eec1573b6" + integrity sha512-5lHCz+0uufF6wZ7CRFWJN3hp8Jqblpgve06U5CMQ3f//6iDjPr2PEo9MWCjEssDsa+UZEL4PkFpr+BMop6aKzQ== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.5" object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.1: version "1.1.1" @@ -6887,9 +7446,9 @@ onetime@^5.1.0: mimic-fn "^2.1.0" open@^7.0.2: - version "7.0.2" - resolved "https://registry.yarnpkg.com/open/-/open-7.0.2.tgz#fb3681f11f157f2361d2392307548ca1792960e8" - integrity sha512-70E/pFTPr7nZ9nLDPNTcj3IVqnNvKuP4VsBmoKV9YGTnChe0mlS3C4qM7qKarhZ8rGaHKLfo+vBTHXDp6ZSyLQ== + version "7.0.4" + resolved "https://registry.yarnpkg.com/open/-/open-7.0.4.tgz#c28a9d315e5c98340bf979fdcb2e58664aa10d83" + integrity sha512-brSA+/yq+b08Hsr4c8fsEW2CRzk1BmfN3SAK/5VCHQ9bdoZJ4qa/+AfR0xHjlbbZUyPkUHs1b8x1RqdyZdkVqQ== dependencies: is-docker "^2.0.0" is-wsl "^2.1.1" @@ -6977,9 +7536,9 @@ p-limit@^1.1.0: p-try "^1.0.0" p-limit@^2.0.0, p-limit@^2.2.0, p-limit@^2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.2.2.tgz#61279b67721f5287aa1c13a9a7fbbc48c9291b1e" - integrity sha512-WGR+xHecKTr7EbUEhyLSh5Dube9JtdiG78ufaeLxTgpudf/20KqyMioIUZJAezlTIi6evxuoUs9YXc11cU+yzQ== + version "2.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== dependencies: p-try "^2.0.0" @@ -7052,12 +7611,13 @@ parallel-transform@^1.1.0: inherits "^2.0.3" readable-stream "^2.1.5" -param-case@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/param-case/-/param-case-2.1.1.tgz#df94fd8cf6531ecf75e6bef9a0858fbc72be2247" - integrity sha1-35T9jPZTHs915r75oIWPvHK+Ikc= +param-case@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/param-case/-/param-case-3.0.3.tgz#4be41f8399eff621c56eebb829a5e451d9801238" + integrity sha512-VWBVyimc1+QrzappRs7waeN2YmoZFCGXWASRYX1/rGHtXqEcrGEIDm+jqIwFa2fRXNgQEwrxaYuIrX0WcAguTA== dependencies: - no-case "^2.2.0" + dot-case "^3.0.3" + tslib "^1.10.0" parent-module@^1.0.0: version "1.0.1" @@ -7066,7 +7626,7 @@ parent-module@^1.0.0: dependencies: callsites "^3.0.0" -parse-asn1@^5.0.0: +parse-asn1@^5.0.0, parse-asn1@^5.1.5: version "5.1.5" resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.5.tgz#003271343da58dc94cace494faef3d2147ecea0e" integrity sha512-jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ== @@ -7118,6 +7678,14 @@ parseurl@~1.3.2, parseurl@~1.3.3: resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== +pascal-case@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/pascal-case/-/pascal-case-3.1.1.tgz#5ac1975133ed619281e88920973d2cd1f279de5f" + integrity sha512-XIeHKqIrsquVTQL2crjq3NfJUxmdLasn3TYOU0VBM+UX2a6ztAWBlJQBePLGY7VHW8+2dRadeIPK5+KImwTxQA== + dependencies: + no-case "^3.0.3" + tslib "^1.10.0" + pascalcase@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" @@ -7180,6 +7748,13 @@ path-to-regexp@0.1.7: resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= +path-to-regexp@^1.7.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-1.8.0.tgz#887b3ba9d84393e87a0a0b9f4cb756198b53548a" + integrity sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA== + dependencies: + isarray "0.0.1" + path-type@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" @@ -7215,10 +7790,10 @@ performance-now@^2.1.0: resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= -picomatch@^2.0.4, picomatch@^2.0.7: - version "2.2.1" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.1.tgz#21bac888b6ed8601f831ce7816e335bc779f0a4a" - integrity sha512-ISBaA8xQNmwELC7eOjqFKMESB2VIqt4PPDD0nsS95b/9dZXvVKOlz9keMSnoGGKcOHXfTvDD6WMaRoSc9UuhRA== +picomatch@^2.0.4, picomatch@^2.2.1: + version "2.2.2" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" + integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== pify@^2.0.0: version "2.3.0" @@ -7282,29 +7857,36 @@ pkg-dir@^4.1.0: dependencies: find-up "^4.0.0" -pkg-up@3.1.0: +pkg-up@3.1.0, pkg-up@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-3.1.0.tgz#100ec235cc150e4fd42519412596a28512a0def5" integrity sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA== dependencies: find-up "^3.0.0" +pkg-up@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-2.0.0.tgz#c819ac728059a461cab1c3889a2be3c49a004d7f" + integrity sha1-yBmscoBZpGHKscOImivjxJoATX8= + dependencies: + find-up "^2.1.0" + pn@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/pn/-/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb" integrity sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA== -pnp-webpack-plugin@1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/pnp-webpack-plugin/-/pnp-webpack-plugin-1.6.0.tgz#d5c068013a2fdc82224ca50ed179c8fba9036a8e" - integrity sha512-ZcMGn/xF/fCOq+9kWMP9vVVxjIkMCja72oy3lziR7UHy0hHFZ57iVpQ71OtveVbmzeCmphBg8pxNdk/hlK99aQ== +pnp-webpack-plugin@1.6.4: + version "1.6.4" + resolved "https://registry.yarnpkg.com/pnp-webpack-plugin/-/pnp-webpack-plugin-1.6.4.tgz#c9711ac4dc48a685dabafc86f8b6dd9f8df84149" + integrity sha512-7Wjy+9E3WwLOEL30D+m8TSTF7qJJUJLONBnwQp0518siuMxUQUbgZwssaFX+QKlZkjHZcw/IpZCt/H0srrntSg== dependencies: - ts-pnp "^1.1.2" + ts-pnp "^1.1.6" portfinder@^1.0.25: - version "1.0.25" - resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.25.tgz#254fd337ffba869f4b9d37edc298059cb4d35eca" - integrity sha512-6ElJnHBbxVA1XSLgBp7G1FiCkQdlqGzuF7DswL5tcea+E8UpuvPU7beVAjjRwCioTS9ZluNbu+ZyRvgTsmqEBg== + version "1.0.26" + resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.26.tgz#475658d56ca30bed72ac7f1378ed350bd1b64e70" + integrity sha512-Xi7mKxJHHMI3rIUrnm/jjUgwhbYMkp/XKEcZX3aG4BrumLpq3nmoQMX+ClYnDZnZ/New7IatC1no5RX0zo1vXQ== dependencies: async "^2.6.2" debug "^3.1.1" @@ -7331,14 +7913,13 @@ postcss-browser-comments@^3.0.0: postcss "^7" postcss-calc@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-7.0.1.tgz#36d77bab023b0ecbb9789d84dcb23c4941145436" - integrity sha512-oXqx0m6tb4N3JGdmeMSc/i91KppbYsFZKdH0xMOqK8V1rJlzrKlTdokz8ozUXLVejydRN6u2IddxpcijRj2FqQ== + version "7.0.2" + resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-7.0.2.tgz#504efcd008ca0273120568b0792b16cdcde8aac1" + integrity sha512-rofZFHUg6ZIrvRwPeFktv06GdbDYLcGqh9EwiMutZg+a0oePCCw1zHOEiji6LCpyRcjTREtPASuUqeAvYlEVvQ== dependencies: - css-unit-converter "^1.1.1" - postcss "^7.0.5" - postcss-selector-parser "^5.0.0-rc.4" - postcss-value-parser "^3.3.1" + postcss "^7.0.27" + postcss-selector-parser "^6.0.2" + postcss-value-parser "^4.0.2" postcss-color-functional-notation@^2.0.1: version "2.0.1" @@ -7648,9 +8229,9 @@ postcss-modules-local-by-default@^3.0.2: postcss-value-parser "^4.0.0" postcss-modules-scope@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-2.1.1.tgz#33d4fc946602eb5e9355c4165d68a10727689dba" - integrity sha512-OXRUPecnHCg8b9xWvldG/jUpRIGPNRka0r4D4j0ESUU2/5IOnpsjfPPmDprM3Ih8CgZ8FXjWqaniK5v4rWt3oQ== + version "2.2.0" + resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz#385cae013cc7743f5a7d7602d1073a89eaae62ee" + integrity sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ== dependencies: postcss "^7.0.6" postcss-selector-parser "^6.0.0" @@ -7940,15 +8521,15 @@ postcss-unique-selectors@^4.0.1: postcss "^7.0.0" uniqs "^2.0.0" -postcss-value-parser@^3.0.0, postcss-value-parser@^3.3.1: +postcss-value-parser@^3.0.0: version "3.3.1" resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281" integrity sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ== -postcss-value-parser@^4.0.0, postcss-value-parser@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.0.2.tgz#482282c09a42706d1fc9a069b73f44ec08391dc9" - integrity sha512-LmeoohTpp/K4UiyQCwuGWlONxXamGzCMtFxLq4W1nZVGIQLYvMCJx3yAF9qyyuFpflABI9yVdtJAqbihOsCsJQ== +postcss-value-parser@^4.0.0, postcss-value-parser@^4.0.2, postcss-value-parser@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz#443f6a20ced6481a2bda4fa8532a6e55d789a2cb" + integrity sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ== postcss-values-parser@^2.0.0, postcss-values-parser@^2.0.1: version "2.0.1" @@ -7968,10 +8549,10 @@ postcss@7.0.21: source-map "^0.6.1" supports-color "^6.1.0" -postcss@^7, postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.16, postcss@^7.0.17, postcss@^7.0.2, postcss@^7.0.23, postcss@^7.0.26, postcss@^7.0.5, postcss@^7.0.6: - version "7.0.26" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.26.tgz#5ed615cfcab35ba9bbb82414a4fa88ea10429587" - integrity sha512-IY4oRjpXWYshuTDFxMVkJDtWIk2LhsTlu8bZnbEJA4+bYT16Lvpo8Qv6EvDumhYRgzjZl489pmsY3qVgJQ08nA== +postcss@^7, postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.16, postcss@^7.0.17, postcss@^7.0.2, postcss@^7.0.23, postcss@^7.0.27, postcss@^7.0.30, postcss@^7.0.5, postcss@^7.0.6: + version "7.0.30" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.30.tgz#cc9378beffe46a02cbc4506a0477d05fcea9a8e2" + integrity sha512-nu/0m+NtIzoubO+xdAlwZl/u5S5vi/y6BCsoL8D+8IxsD3XvBS8X4YEADNIVXKVuQvduiucnRv+vPIqj56EGMQ== dependencies: chalk "^2.4.2" source-map "^0.6.1" @@ -8000,7 +8581,7 @@ pretty-error@^2.1.1: renderkid "^2.0.1" utila "~0.4" -pretty-format@^24.0.0, pretty-format@^24.3.0, pretty-format@^24.9.0: +pretty-format@^24.9.0: version "24.9.0" resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-24.9.0.tgz#12fac31b37019a4eea3c11aa9a959eb7628aa7c9" integrity sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA== @@ -8010,7 +8591,17 @@ pretty-format@^24.0.0, pretty-format@^24.3.0, pretty-format@^24.9.0: ansi-styles "^3.2.0" react-is "^16.8.4" -private@^0.1.6: +pretty-format@^25.1.0, pretty-format@^25.2.1, pretty-format@^25.5.0: + version "25.5.0" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-25.5.0.tgz#7873c1d774f682c34b8d48b6743a2bf2ac55791a" + integrity sha512-kbo/kq2LQ/A/is0PQwsEHM7Ca6//bGPPvU6UnsdDRSKTWxT/ru/xb88v4BJf6a69H+uTytOEsTusT9ksd/1iWQ== + dependencies: + "@jest/types" "^25.5.0" + ansi-regex "^5.0.0" + ansi-styles "^4.0.0" + react-is "^16.12.0" + +private@^0.1.8: version "0.1.8" resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" integrity sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg== @@ -8036,21 +8627,21 @@ promise-inflight@^1.0.1: integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= promise@^8.0.3: - version "8.0.3" - resolved "https://registry.yarnpkg.com/promise/-/promise-8.0.3.tgz#f592e099c6cddc000d538ee7283bb190452b0bf6" - integrity sha512-HeRDUL1RJiLhyA0/grn+PTShlBAcLuh/1BJGtrvjwbvRDCTLLMEz9rOGCV+R3vHY4MixIuoMEd9Yq/XvsTPcjw== + version "8.1.0" + resolved "https://registry.yarnpkg.com/promise/-/promise-8.1.0.tgz#697c25c3dfe7435dd79fcd58c38a135888eaf05e" + integrity sha512-W04AqnILOL/sPRXziNicCjSNRruLAuIHEOVBazepu0545DDNGYHz7ar9ZgZ1fMU8/MA4mVxp5rkBWRi6OXIy3Q== dependencies: asap "~2.0.6" prompts@^2.0.1: - version "2.3.0" - resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.3.0.tgz#a444e968fa4cc7e86689a74050685ac8006c4cc4" - integrity sha512-NfbbPPg/74fT7wk2XYQ7hAIp9zJyZp5Fu19iRbORqqy1BhtrkZ0fPafBU+7bmn8ie69DpT0R6QpJIN2oisYjJg== + version "2.3.2" + resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.3.2.tgz#480572d89ecf39566d2bd3fe2c9fccb7c4c0b068" + integrity sha512-Q06uKs2CkNYVID0VqwfAl9mipo99zkBv/n2JtWY89Yxa3ZabWSrs0e2KTudKVa3peLUvYXMefDqIleLPVUBZMA== dependencies: kleur "^3.0.3" - sisteransi "^1.0.3" + sisteransi "^1.0.4" -prop-types@^15.6.2, prop-types@^15.7.2: +prop-types@^15.5.10, prop-types@^15.6.0, prop-types@^15.6.2, prop-types@^15.7.2: version "15.7.2" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5" integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ== @@ -8060,12 +8651,12 @@ prop-types@^15.6.2, prop-types@^15.7.2: react-is "^16.8.1" proxy-addr@~2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.5.tgz#34cbd64a2d81f4b1fd21e76f9f06c8a45299ee34" - integrity sha512-t/7RxHXPH6cJtP0pRG6smSr9QJidhB+3kXu0KgXnbGYMgzEnUxRQ4/LDdfOwZEMyIh3/xHb8PX3t+lfL9z+YVQ== + version "2.0.6" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.6.tgz#fdc2336505447d3f2f2c638ed272caf614bbb2bf" + integrity sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw== dependencies: forwarded "~0.1.2" - ipaddr.js "1.9.0" + ipaddr.js "1.9.1" prr@~1.0.1: version "1.0.1" @@ -8073,9 +8664,9 @@ prr@~1.0.1: integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY= psl@^1.1.28: - version "1.7.0" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.7.0.tgz#f1c4c47a8ef97167dea5d6bbf4816d736e884a3c" - integrity sha512-5NsSEDv8zY70ScRnOTn7bK7eanl2MvFrOrS/R6x+dBt5g1ghnj9Zv90kO8GwT8gxcu2ANyFprnFYB85IogIJOQ== + version "1.8.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" + integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== public-encrypt@^4.0.0: version "4.0.3" @@ -8167,7 +8758,7 @@ querystringify@^2.1.1: resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.1.1.tgz#60e5a5fd64a7f8bfa4d2ab2ed6fdf4c85bad154e" integrity sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA== -raf@^3.4.1: +raf@^3.4.0, raf@^3.4.1: version "3.4.1" resolved "https://registry.yarnpkg.com/raf/-/raf-3.4.1.tgz#0742e99a4a6552f445d73e3ee0328af0ff1ede39" integrity sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA== @@ -8204,6 +8795,46 @@ raw-body@2.4.0: iconv-lite "0.4.24" unpipe "1.0.0" +rc-animate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/rc-animate/-/rc-animate-3.0.0.tgz#f76d7051136b7d650fb3d29366a160e95a369c0a" + integrity sha512-+ANeyCei4lWSJHWTcocywdYAy6lpRdBva/7Fs3nBBiAngW/W+Gmx+gQEcsmcgQBqziWUYnR91Bk12ltR3GBHPA== + dependencies: + "@ant-design/css-animation" "^1.7.2" + classnames "^2.2.6" + raf "^3.4.0" + rc-util "^4.15.3" + +rc-tree@^3.2.2: + version "3.2.2" + resolved "https://registry.yarnpkg.com/rc-tree/-/rc-tree-3.2.2.tgz#9822c4929570156a2170037a4faeb010cae10702" + integrity sha512-eF4vJJpMnTmPufxplZ2xg+P3ogfFoUfZkZXV2qasC6JSTf+13jB7pA1xXjCwJ86V+7PqEGUsE/mljLusng0XEA== + dependencies: + classnames "2.x" + rc-animate "^3.0.0" + rc-util "^4.11.0" + rc-virtual-list "^1.1.0" + +rc-util@^4.11.0, rc-util@^4.15.3, rc-util@^4.8.0: + version "4.20.5" + resolved "https://registry.yarnpkg.com/rc-util/-/rc-util-4.20.5.tgz#f7c77569e971ae6a8ad56f899cadd22275398325" + integrity sha512-f67s4Dt1quBYhrVPq5QMKmK3eS2hN1NNIAyhaiG0HmvqiGYAXMQ7SP2AlGqv750vnzhJs38JklbkWT1/wjhFPg== + dependencies: + add-dom-event-listener "^1.1.0" + prop-types "^15.5.10" + react-is "^16.12.0" + react-lifecycles-compat "^3.0.4" + shallowequal "^1.1.0" + +rc-virtual-list@^1.1.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/rc-virtual-list/-/rc-virtual-list-1.1.3.tgz#4b59d1f727f3ba2dc4ccea21f3e92a5e023c11a0" + integrity sha512-2D7GPdvta05NQZ5fHSK3BFst28G0wFgvNX/xAhGXVC8YOheZPFAn5Yqpe7jXFepBb7Y+1cwOx12LYAL8VkULBw== + dependencies: + classnames "^2.2.6" + raf "^3.4.1" + rc-util "^4.8.0" + react-app-polyfill@^1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/react-app-polyfill/-/react-app-polyfill-1.0.6.tgz#890f8d7f2842ce6073f030b117de9130a5f385f0" @@ -8216,14 +8847,23 @@ react-app-polyfill@^1.0.6: regenerator-runtime "^0.13.3" whatwg-fetch "^3.0.0" -react-dev-utils@^10.2.0: - version "10.2.0" - resolved "https://registry.yarnpkg.com/react-dev-utils/-/react-dev-utils-10.2.0.tgz#b11cc48aa2be2502fb3c27a50d1dfa95cfa9dfe0" - integrity sha512-MwrvQW2TFjLblhqpDNeqCXHBkz3G5vc7k4wntgutAJZX4ia3o07eGKo6uYGhUOeJ0hfOxcpJFNFk7+4XCc1S8g== +react-cookie@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/react-cookie/-/react-cookie-4.0.3.tgz#ba8e5ea0047c916516e1181a3ad394c9b7580b56" + integrity sha512-cmi6IpdVgTSvjqssqIEvo779Gfqc4uPGHRrKMEdHcqkmGtPmxolGfsyKj95bhdLEKqMdbX8MLBCwezlnhkHK0g== + dependencies: + "@types/hoist-non-react-statics" "^3.0.1" + hoist-non-react-statics "^3.0.0" + universal-cookie "^4.0.0" + +react-dev-utils@^10.2.1: + version "10.2.1" + resolved "https://registry.yarnpkg.com/react-dev-utils/-/react-dev-utils-10.2.1.tgz#f6de325ae25fa4d546d09df4bb1befdc6dd19c19" + integrity sha512-XxTbgJnYZmxuPtY3y/UV0D8/65NKkmaia4rXzViknVnZeVlklSh8u6TnaEYPfAi/Gh1TP4mEOXHI6jQOPbeakQ== dependencies: "@babel/code-frame" "7.8.3" address "1.1.2" - browserslist "4.8.6" + browserslist "4.10.0" chalk "2.4.2" cross-spawn "7.0.1" detect-port-alt "1.1.6" @@ -8240,58 +8880,158 @@ react-dev-utils@^10.2.0: loader-utils "1.2.3" open "^7.0.2" pkg-up "3.1.0" - react-error-overlay "^6.0.6" + react-error-overlay "^6.0.7" recursive-readdir "2.2.2" shell-quote "1.7.2" strip-ansi "6.0.0" text-table "0.2.0" -react-dom@^16.12.0: - version "16.12.0" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.12.0.tgz#0da4b714b8d13c2038c9396b54a92baea633fe11" - integrity sha512-LMxFfAGrcS3kETtQaCkTKjMiifahaMySFDn71fZUNpPHZQEzmk/GiAeIT8JSOrHB23fnuCOMruL2a8NYlw+8Gw== +react-dom@^16.13.1: + version "16.13.1" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.13.1.tgz#c1bd37331a0486c078ee54c4740720993b2e0e7f" + integrity sha512-81PIMmVLnCNLO/fFOQxdQkvEq/+Hfpv24XNJfpyZhTRfO0QcmQIF/PgCa1zCOj2w1hrn12MFLyaJ/G0+Mxtfag== dependencies: loose-envify "^1.1.0" object-assign "^4.1.1" prop-types "^15.6.2" - scheduler "^0.18.0" + scheduler "^0.19.1" -react-error-overlay@^6.0.6: - version "6.0.6" - resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-6.0.6.tgz#ac4d9dc4c1b5c536c2c312bf66aa2b09bfa384e2" - integrity sha512-Yzpno3enVzSrSCnnljmr4b/2KUQSMZaPuqmS26t9k4nW7uwJk6STWmH9heNjPuvqUTO3jOSPkHoKgO4+Dw7uIw== +react-error-overlay@^6.0.7: + version "6.0.7" + resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-6.0.7.tgz#1dcfb459ab671d53f660a991513cb2f0a0553108" + integrity sha512-TAv1KJFh3RhqxNvhzxj6LeT5NWklP6rDr2a0jaTfsZ5wSZWHOGeqQyejUp3xxLfPt2UpyJEcVQB/zyPcmonNFA== -react-is@^16.8.1, react-is@^16.8.4: - version "16.12.0" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.12.0.tgz#2cc0fe0fba742d97fd527c42a13bec4eeb06241c" - integrity sha512-rPCkf/mWBtKc97aLL9/txD8DZdemK0vkA3JMLShjlJB3Pj3s+lpf1KaBzMfQrAmhMQB0n1cU/SUGgKKBCe837Q== +react-fast-compare@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-2.0.4.tgz#e84b4d455b0fec113e0402c329352715196f81f9" + integrity sha512-suNP+J1VU1MWFKcyt7RtjiSWUjvidmQSlqu+eHslq+342xCbGTYmC0mEhPCOHxlW0CywylOC1u2DFAT+bv4dBw== -react-scripts@3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/react-scripts/-/react-scripts-3.4.0.tgz#f413680f0b5b937c8879ba1ffdae9b8c5b364bf5" - integrity sha512-pBqaAroFoHnFAkuX+uSK9Th1uEh2GYdGY2IG1I9/7HmuEf+ls3lLCk1p2GFYRSrLMz6ieQR/SyN6TLIGK3hKRg== +react-ga@^2.7.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/react-ga/-/react-ga-2.7.0.tgz#24328f157f31e8cffbf4de74a3396536679d8d7c" + integrity sha512-AjC7UOZMvygrWTc2hKxTDvlMXEtbmA0IgJjmkhgmQQ3RkXrWR11xEagLGFGaNyaPnmg24oaIiaNPnEoftUhfXA== + +react-helmet@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/react-helmet/-/react-helmet-6.0.0.tgz#fcb93ebaca3ba562a686eb2f1f9d46093d83b5f8" + integrity sha512-My6S4sa0uHN/IuVUn0HFmasW5xj9clTkB9qmMngscVycQ5vVG51Qp44BEvLJ4lixupTwDlU9qX1/sCrMN4AEPg== dependencies: - "@babel/core" "7.8.4" + object-assign "^4.1.1" + prop-types "^15.7.2" + react-fast-compare "^2.0.4" + react-side-effect "^2.1.0" + +react-html-parser@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/react-html-parser/-/react-html-parser-2.0.2.tgz#6dbe1ddd2cebc1b34ca15215158021db5fc5685e" + integrity sha512-XeerLwCVjTs3njZcgCOeDUqLgNIt/t+6Jgi5/qPsO/krUWl76kWKXMeVs2LhY2gwM6X378DkhLjur0zUQdpz0g== + dependencies: + htmlparser2 "^3.9.0" + +react-image-lightbox@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/react-image-lightbox/-/react-image-lightbox-5.1.1.tgz#872d1a4336b5a6410ea7909b767cf59014081004" + integrity sha512-GprldD8AqpRb2hsOdns3sI7Xeo9hJlcybDxuli4RB+ml1J/GaFaUuRkT/7IrTLv2+4vkR74ahz2LD0HOUHI7wA== + dependencies: + prop-types "^15.6.2" + react-modal "^3.8.1" + +react-is@^16.12.0, react-is@^16.6.0, react-is@^16.7.0, react-is@^16.8.1, react-is@^16.8.4: + version "16.13.1" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" + integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== + +react-lifecycles-compat@^3.0.0, react-lifecycles-compat@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362" + integrity sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA== + +react-modal@^3.8.1: + version "3.11.2" + resolved "https://registry.yarnpkg.com/react-modal/-/react-modal-3.11.2.tgz#bad911976d4add31aa30dba8a41d11e21c4ac8a4" + integrity sha512-o8gvvCOFaG1T7W6JUvsYjRjMVToLZgLIsi5kdhFIQCtHxDkA47LznX62j+l6YQkpXDbvQegsDyxe/+JJsFQN7w== + dependencies: + exenv "^1.2.0" + prop-types "^15.5.10" + react-lifecycles-compat "^3.0.0" + warning "^4.0.3" + +react-overlays@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/react-overlays/-/react-overlays-3.2.0.tgz#ed8335adb0871e701b0fc8396c44dfd2467e7a55" + integrity sha512-YTgCmw6l4uBOYylSnc3V8WLX+A0EoGnzDrqkYz0K7MUKbMBZFpaxLXH4EF9eZbspd+syZHQ5XAABI7n/zak1EA== + dependencies: + "@babel/runtime" "^7.4.5" + "@popperjs/core" "^2.0.0" + "@restart/hooks" "^0.3.12" + "@types/warning" "^3.0.0" + dom-helpers "^5.1.0" + prop-types "^15.7.2" + uncontrollable "^7.0.0" + warning "^4.0.3" + +react-router-dom@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-5.2.0.tgz#9e65a4d0c45e13289e66c7b17c7e175d0ea15662" + integrity sha512-gxAmfylo2QUjcwxI63RhQ5G85Qqt4voZpUXSEqCwykV0baaOTQDR1f0PmY8AELqIyVc0NEZUj0Gov5lNGcXgsA== + dependencies: + "@babel/runtime" "^7.1.2" + history "^4.9.0" + loose-envify "^1.3.1" + prop-types "^15.6.2" + react-router "5.2.0" + tiny-invariant "^1.0.2" + tiny-warning "^1.0.0" + +react-router-hash-link@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/react-router-hash-link/-/react-router-hash-link-1.2.2.tgz#7a0ad5e925d49596d19554de8bc6c554ce4f8099" + integrity sha512-LBthLVHdqPeKDVt3+cFRhy15Z7veikOvdKRZRfyBR2vjqIE7rxn+tKLjb6DOmLm6JpoQVemVDnxQ35RVnEHdQA== + dependencies: + prop-types "^15.6.0" + +react-router@5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/react-router/-/react-router-5.2.0.tgz#424e75641ca8747fbf76e5ecca69781aa37ea293" + integrity sha512-smz1DUuFHRKdcJC0jobGo8cVbhO3x50tCL4icacOlcwDOEQPq4TMqwx3sY1TP+DvtTgz4nm3thuo7A+BK2U0Dw== + dependencies: + "@babel/runtime" "^7.1.2" + history "^4.9.0" + hoist-non-react-statics "^3.1.0" + loose-envify "^1.3.1" + mini-create-react-context "^0.4.0" + path-to-regexp "^1.7.0" + prop-types "^15.6.2" + react-is "^16.6.0" + tiny-invariant "^1.0.2" + tiny-warning "^1.0.0" + +react-scripts@3.4.1: + version "3.4.1" + resolved "https://registry.yarnpkg.com/react-scripts/-/react-scripts-3.4.1.tgz#f551298b5c71985cc491b9acf3c8e8c0ae3ada0a" + integrity sha512-JpTdi/0Sfd31mZA6Ukx+lq5j1JoKItX7qqEK4OiACjVQletM1P38g49d9/D0yTxp9FrSF+xpJFStkGgKEIRjlQ== + dependencies: + "@babel/core" "7.9.0" "@svgr/webpack" "4.3.3" "@typescript-eslint/eslint-plugin" "^2.10.0" "@typescript-eslint/parser" "^2.10.0" - babel-eslint "10.0.3" + babel-eslint "10.1.0" babel-jest "^24.9.0" - babel-loader "8.0.6" + babel-loader "8.1.0" babel-plugin-named-asset-import "^0.3.6" - babel-preset-react-app "^9.1.1" + babel-preset-react-app "^9.1.2" camelcase "^5.3.1" case-sensitive-paths-webpack-plugin "2.3.0" css-loader "3.4.2" dotenv "8.2.0" dotenv-expand "5.1.0" eslint "^6.6.0" - eslint-config-react-app "^5.2.0" + eslint-config-react-app "^5.2.1" eslint-loader "3.0.3" eslint-plugin-flowtype "4.6.0" - eslint-plugin-import "2.20.0" + eslint-plugin-import "2.20.1" eslint-plugin-jsx-a11y "6.2.3" - eslint-plugin-react "7.18.0" + eslint-plugin-react "7.19.0" eslint-plugin-react-hooks "^1.6.1" file-loader "4.3.0" fs-extra "^8.1.0" @@ -8303,33 +9043,43 @@ react-scripts@3.4.0: jest-watch-typeahead "0.4.2" mini-css-extract-plugin "0.9.0" optimize-css-assets-webpack-plugin "5.0.3" - pnp-webpack-plugin "1.6.0" + pnp-webpack-plugin "1.6.4" postcss-flexbugs-fixes "4.1.0" postcss-loader "3.0.0" postcss-normalize "8.0.1" postcss-preset-env "6.7.0" postcss-safe-parser "4.0.1" react-app-polyfill "^1.0.6" - react-dev-utils "^10.2.0" + react-dev-utils "^10.2.1" resolve "1.15.0" resolve-url-loader "3.1.1" sass-loader "8.0.2" semver "6.3.0" style-loader "0.23.1" - terser-webpack-plugin "2.3.4" - ts-pnp "1.1.5" + terser-webpack-plugin "2.3.5" + ts-pnp "1.1.6" url-loader "2.3.0" - webpack "4.41.5" - webpack-dev-server "3.10.2" + webpack "4.42.0" + webpack-dev-server "3.10.3" webpack-manifest-plugin "2.2.0" workbox-webpack-plugin "4.3.1" optionalDependencies: fsevents "2.1.2" -react@^16.12.0: - version "16.12.0" - resolved "https://registry.yarnpkg.com/react/-/react-16.12.0.tgz#0c0a9c6a142429e3614834d5a778e18aa78a0b83" - integrity sha512-fglqy3k5E+81pA8s+7K0/T3DBCF0ZDOher1elBFzF7O6arXJgzyu/FW+COxFvAWXJoJN9KIZbT2LXlukwphYTA== +react-side-effect@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/react-side-effect/-/react-side-effect-2.1.0.tgz#1ce4a8b4445168c487ed24dab886421f74d380d3" + integrity sha512-IgmcegOSi5SNX+2Snh1vqmF0Vg/CbkycU9XZbOHJlZ6kMzTmi3yc254oB1WCkgA7OQtIAoLmcSFuHTc/tlcqXg== + +react-spinner-material@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/react-spinner-material/-/react-spinner-material-1.3.1.tgz#31395f07547929c459c3964c5027fc79b883fcd4" + integrity sha512-UiCp5eRpRnhleE7ng1Pq4vqNKxbof+kG842JGekoSE0w+vUe7AbXTK1nebRaAloe3Lm0cRbLW621LKEAJMVT/Q== + +react@^16.13.1: + version "16.13.1" + resolved "https://registry.yarnpkg.com/react/-/react-16.13.1.tgz#2e818822f1a9743122c063d6410d85c1e3afe48e" + integrity sha512-YMZQQq32xHLX0bz5Mnibv1/LHb3Sqzngu7xstSM+vrkE5Kzr9xE0yMByK5kMoTK30YVJE61WfbxIFFvfeDKT1w== dependencies: loose-envify "^1.1.0" object-assign "^4.1.1" @@ -8382,7 +9132,7 @@ read-pkg@^3.0.0: string_decoder "~1.1.1" util-deprecate "~1.0.1" -readable-stream@^3.0.6, readable-stream@^3.1.1: +readable-stream@^3.0.6, readable-stream@^3.1.1, readable-stream@^3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== @@ -8400,12 +9150,12 @@ readdirp@^2.2.1: micromatch "^3.1.10" readable-stream "^2.0.2" -readdirp@~3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.3.0.tgz#984458d13a1e42e2e9f5841b129e162f369aff17" - integrity sha512-zz0pAkSPOXXm1viEwygWIPSPkcBYjW1xU5j/JBh5t9bGCJwa6f9+BJa6VaB2g+b55yVrmXzqkyLf4xaWYM0IkQ== +readdirp@~3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.4.0.tgz#9fdccdf9e9155805449221ac645e8303ab5b9ada" + integrity sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ== dependencies: - picomatch "^2.0.7" + picomatch "^2.2.1" realpath-native@^1.1.0: version "1.1.0" @@ -8429,10 +9179,10 @@ redent@^3.0.0: indent-string "^4.0.0" strip-indent "^3.0.0" -regenerate-unicode-properties@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.1.0.tgz#ef51e0f0ea4ad424b77bf7cb41f3e015c70a3f0e" - integrity sha512-LGZzkgtLY79GeXLm8Dp0BVLdQlWICzBnJz/ipWUgo59qBaZ+BHtq51P2q1uVZlppMuUAT37SDk39qUbjTWB7bA== +regenerate-unicode-properties@^8.2.0: + version "8.2.0" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz#e5de7111d655e7ba60c057dbe9ff37c87e65cdec" + integrity sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA== dependencies: regenerate "^1.4.0" @@ -8446,17 +9196,18 @@ regenerator-runtime@^0.11.0: resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg== -regenerator-runtime@^0.13.2, regenerator-runtime@^0.13.3: - version "0.13.3" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz#7cf6a77d8f5c6f60eb73c5fc1955b2ceb01e6bf5" - integrity sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw== +regenerator-runtime@^0.13.3, regenerator-runtime@^0.13.4: + version "0.13.5" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz#d878a1d094b4306d10b9096484b33ebd55e26697" + integrity sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA== -regenerator-transform@^0.14.0: - version "0.14.1" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.1.tgz#3b2fce4e1ab7732c08f665dfdb314749c7ddd2fb" - integrity sha512-flVuee02C3FKRISbxhXl9mGzdbWUVHubl1SMaknjxkFB1/iqpJhArQUvRxOOPEc/9tAiX0BaQ28FJH10E4isSQ== +regenerator-transform@^0.14.2: + version "0.14.4" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.4.tgz#5266857896518d1616a78a0479337a30ea974cc7" + integrity sha512-EaJaKPBI9GvKpvUz2mz4fhx7WPgvwRLY9v3hlNHWmAuJHI13T4nwKnNvm5RWJzEdnI5g5UwtOww+S8IdoUC2bw== dependencies: - private "^0.1.6" + "@babel/runtime" "^7.8.4" + private "^0.1.8" regex-not@^1.0.0, regex-not@^1.0.2: version "1.0.2" @@ -8471,7 +9222,7 @@ regex-parser@2.2.10: resolved "https://registry.yarnpkg.com/regex-parser/-/regex-parser-2.2.10.tgz#9e66a8f73d89a107616e63b39d4deddfee912b37" integrity sha512-8t6074A68gHfU8Neftl0Le6KTDwfGAj7IyjPIMSfikI2wJUTHDMaIq42bUsfVnj8mhx0R+45rdUXHGpN164avA== -regexp.prototype.flags@^1.2.0: +regexp.prototype.flags@^1.2.0, regexp.prototype.flags@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz#7aba89b3c13a64509dabcf3ca8d9fbb9bdf5cb75" integrity sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ== @@ -8485,31 +9236,31 @@ regexpp@^2.0.1: integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw== regexpp@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.0.0.tgz#dd63982ee3300e67b41c1956f850aa680d9d330e" - integrity sha512-Z+hNr7RAVWxznLPuA7DIh8UNX1j9CDrUQxskw9IrBE1Dxue2lyXT+shqEIeLUjrokxIP8CMy1WkjgG3rTsd5/g== + version "3.1.0" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.1.0.tgz#206d0ad0a5648cffbdb8ae46438f3dc51c9f78e2" + integrity sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q== -regexpu-core@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.6.0.tgz#2037c18b327cfce8a6fea2a4ec441f2432afb8b6" - integrity sha512-YlVaefl8P5BnFYOITTNzDvan1ulLOiXJzCNZxduTIosN17b87h3bvG9yHMoHaRuo88H4mQ06Aodj5VtYGGGiTg== +regexpu-core@^4.7.0: + version "4.7.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.7.0.tgz#fcbf458c50431b0bb7b45d6967b8192d91f3d938" + integrity sha512-TQ4KXRnIn6tz6tjnrXEkD/sshygKH/j5KzK86X8MkeHyZ8qst/LZ89j3X4/8HEIfHANTFIP/AbXakeRhWIl5YQ== dependencies: regenerate "^1.4.0" - regenerate-unicode-properties "^8.1.0" - regjsgen "^0.5.0" - regjsparser "^0.6.0" + regenerate-unicode-properties "^8.2.0" + regjsgen "^0.5.1" + regjsparser "^0.6.4" unicode-match-property-ecmascript "^1.0.4" - unicode-match-property-value-ecmascript "^1.1.0" + unicode-match-property-value-ecmascript "^1.2.0" -regjsgen@^0.5.0: +regjsgen@^0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.1.tgz#48f0bf1a5ea205196929c0d9798b42d1ed98443c" integrity sha512-5qxzGZjDs9w4tzT3TPhCJqWdCc3RLYwy9J2NB0nm5Lz+S273lvWcpjaTGHsT1dc6Hhfq41uSEOw8wBmxrKOuyg== -regjsparser@^0.6.0: - version "0.6.3" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.3.tgz#74192c5805d35e9f5ebe3c1fb5b40d40a8a38460" - integrity sha512-8uZvYbnfAtEm9Ab8NTb3hdLwL4g/LQzEYP7Xs27T96abJCCE2d6r3cPZPQEsLKy0vRSGVNG+/zVGtLr86HQduA== +regjsparser@^0.6.4: + version "0.6.4" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.4.tgz#a769f8684308401a66e9b529d2436ff4d0666272" + integrity sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw== dependencies: jsesc "~0.5.0" @@ -8623,6 +9374,11 @@ resolve-from@^4.0.0: resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== +resolve-pathname@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-pathname/-/resolve-pathname-3.0.0.tgz#99d02224d3cf263689becbb393bc560313025dcd" + integrity sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng== + resolve-url-loader@3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/resolve-url-loader/-/resolve-url-loader-3.1.1.tgz#28931895fa1eab9be0647d3b2958c100ae3c0bf0" @@ -8656,10 +9412,10 @@ resolve@1.15.0: dependencies: path-parse "^1.0.6" -resolve@^1.10.0, resolve@^1.12.0, resolve@^1.13.1, resolve@^1.14.2, resolve@^1.3.2, resolve@^1.8.1: - version "1.15.1" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.15.1.tgz#27bdcdeffeaf2d6244b95bb0f9f4b4653451f3e8" - integrity sha512-84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w== +resolve@^1.10.0, resolve@^1.12.0, resolve@^1.13.1, resolve@^1.15.1, resolve@^1.3.2, resolve@^1.8.1: + version "1.17.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" + integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w== dependencies: path-parse "^1.0.6" @@ -8726,17 +9482,23 @@ ripemd160@^2.0.0, ripemd160@^2.0.1: hash-base "^3.0.0" inherits "^2.0.1" +rss-parser@^3.8.0: + version "3.8.0" + resolved "https://registry.yarnpkg.com/rss-parser/-/rss-parser-3.8.0.tgz#6ab883c5cfb69202e25c76fe2b17e3e9179a39f6" + integrity sha512-EvjM0r3IymXnk+SCUawLhdH36D2WQCwpEfIyvu4hpPswYuMSk/jlCLOcg24OvXwVdcJcEocAlTZVjGNjOOSJXg== + dependencies: + entities "^1.1.1" + xml2js "^0.4.19" + rsvp@^4.8.4: version "4.8.5" resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734" integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA== -run-async@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0" - integrity sha1-A3GrSuC91yDUFm19/aZP96RFpsA= - dependencies: - is-promise "^2.1.0" +run-async@^2.2.0, run-async@^2.4.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" + integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== run-queue@^1.0.0, run-queue@^1.0.3: version "1.0.3" @@ -8746,9 +9508,9 @@ run-queue@^1.0.0, run-queue@^1.0.3: aproba "^1.1.1" rxjs@^6.5.3: - version "6.5.4" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.4.tgz#e0777fe0d184cec7872df147f303572d414e211c" - integrity sha512-naMQXcgEo3csAEGvw/NydRA0fuS2nDZJiw1YUWFKU7aPPAPGZEsD4Iimit96qwCieH6y614MCLYwdkrWx7z/7Q== + version "6.5.5" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.5.tgz#c5c884e3094c8cfee31bf27eb87e54ccfc87f9ec" + integrity sha512-WfQI+1gohdf0Dai/Bbmk5L5ItH5tYqm3ki2c5GdWhKjalzjg93N3avFjVStyZZz+A2Em+ZxKH5bNghw9UeylGQ== dependencies: tslib "^1.9.0" @@ -8757,10 +9519,10 @@ safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== -safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519" - integrity sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg== +safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== safe-regex@^1.1.0: version "1.1.0" @@ -8805,7 +9567,7 @@ sass-loader@8.0.2: schema-utils "^2.6.1" semver "^6.3.0" -sax@^1.2.4, sax@~1.2.4: +sax@>=0.6.0, sax@^1.2.4, sax@~1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== @@ -8817,10 +9579,10 @@ saxes@^3.1.9: dependencies: xmlchars "^2.1.1" -scheduler@^0.18.0: - version "0.18.0" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.18.0.tgz#5901ad6659bc1d8f3fdaf36eb7a67b0d6746b1c4" - integrity sha512-agTSHR1Nbfi6ulI0kYNK0203joW2Y5W4po4l+v03tOoiJKpTBbxpNhWDvqc/4IcOw+KLmSiQLTasZ4cab2/UWQ== +scheduler@^0.19.1: + version "0.19.1" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.19.1.tgz#4f3e2ed2c1a7d65681f4c854fa8c5a1ccb40f196" + integrity sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA== dependencies: loose-envify "^1.1.0" object-assign "^4.1.1" @@ -8834,12 +9596,12 @@ schema-utils@^1.0.0: ajv-errors "^1.0.0" ajv-keywords "^3.1.0" -schema-utils@^2.5.0, schema-utils@^2.6.0, schema-utils@^2.6.1, schema-utils@^2.6.4: - version "2.6.4" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.6.4.tgz#a27efbf6e4e78689d91872ee3ccfa57d7bdd0f53" - integrity sha512-VNjcaUxVnEeun6B2fiiUDjXXBtD4ZSH7pdbfIu1pOFwgptDPLMo/z9jr4sUfsjFVPqDCEin/F7IYlq7/E6yDbQ== +schema-utils@^2.5.0, schema-utils@^2.6.0, schema-utils@^2.6.1, schema-utils@^2.6.4, schema-utils@^2.6.5: + version "2.6.6" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.6.6.tgz#299fe6bd4a3365dc23d99fd446caff8f1d6c330c" + integrity sha512-wHutF/WPSbIi9x6ctjGGk2Hvl0VOz5l3EKEuKbjPlB30mKZUzb9A5k9yEXRX3pwyqVLPvpfZZEllaFq/M718hA== dependencies: - ajv "^6.10.2" + ajv "^6.12.0" ajv-keywords "^3.4.1" select-hose@^2.0.0: @@ -8869,6 +9631,11 @@ semver@7.0.0: resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== +semver@^7.3.2: + version "7.3.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" + integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== + send@0.17.1: version "0.17.1" resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" @@ -8971,6 +9738,11 @@ shallow-clone@^3.0.0: dependencies: kind-of "^6.0.2" +shallowequal@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/shallowequal/-/shallowequal-1.1.0.tgz#188d521de95b9087404fd4dcb68b13df0ae4e7f8" + integrity sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ== + shebang-command@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" @@ -9005,10 +9777,18 @@ shellwords@^0.1.1: resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" integrity sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww== +side-channel@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.2.tgz#df5d1abadb4e4bf4af1cd8852bf132d2f7876947" + integrity sha512-7rL9YlPHg7Ancea1S96Pa8/QWb4BtXL/TZvS6B8XFetGBeuhAsfmUspK6DokBeZ64+Kj9TCNRD/30pVz1BvQNA== + dependencies: + es-abstract "^1.17.0-next.1" + object-inspect "^1.7.0" + signal-exit@^3.0.0, signal-exit@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" - integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= + version "3.0.3" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" + integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== simple-swizzle@^0.2.2: version "0.2.2" @@ -9017,10 +9797,10 @@ simple-swizzle@^0.2.2: dependencies: is-arrayish "^0.3.1" -sisteransi@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.4.tgz#386713f1ef688c7c0304dc4c0632898941cad2e3" - integrity sha512-/ekMoM4NJ59ivGSfKapeG+FWtrmWvA1p6FBZwXrqojw90vJu8lBmrTxCMuBCydKtkaUe2zt4PlxeTKpjwMbyig== +sisteransi@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" + integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== slash@^1.0.0: version "1.0.0" @@ -9120,9 +9900,9 @@ source-map-resolve@^0.5.0, source-map-resolve@^0.5.2: urix "^0.1.0" source-map-support@^0.5.6, source-map-support@~0.5.12: - version "0.5.16" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.16.tgz#0ae069e7fe3ba7538c64c98515e35339eac5a042" - integrity sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ== + version "0.5.19" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" + integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== dependencies: buffer-from "^1.0.0" source-map "^0.6.0" @@ -9151,14 +9931,14 @@ spdx-correct@^3.0.0: spdx-license-ids "^3.0.0" spdx-exceptions@^2.1.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz#2ea450aee74f2a89bfb94519c07fcd6f41322977" - integrity sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA== + version "2.3.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" + integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== spdx-expression-parse@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0" - integrity sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg== + version "3.0.1" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" + integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== dependencies: spdx-exceptions "^2.1.0" spdx-license-ids "^3.0.0" @@ -9181,9 +9961,9 @@ spdy-transport@^3.0.0: wbuf "^1.7.3" spdy@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/spdy/-/spdy-4.0.1.tgz#6f12ed1c5db7ea4f24ebb8b89ba58c87c08257f2" - integrity sha512-HeZS3PBdMA+sZSu0qwpCxl3DeALD5ASx8pAX0jZdKXSpPWbQ6SYGnlg3BBmYLx5LtiZrmkAZfErCm2oECBcioA== + version "4.0.2" + resolved "https://registry.yarnpkg.com/spdy/-/spdy-4.0.2.tgz#b74f466203a3eda452c02492b91fb9e84a27677b" + integrity sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA== dependencies: debug "^4.1.0" handle-thing "^2.0.0" @@ -9198,6 +9978,11 @@ split-string@^3.0.1, split-string@^3.0.2: dependencies: extend-shallow "^3.0.0" +split-string@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/split-string/-/split-string-6.1.0.tgz#e9cedcf94cdab077d9b5528927894dec4b0f42ab" + integrity sha512-9UBdnmnvx2NLLd4bMs7CEKK+wSzbujVv3ONyorkP1o8M3pVJQtXDO1cN19xD1JJs6ltOrtPrkUND0HzLSinUcA== + sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" @@ -9349,21 +10134,51 @@ string-width@^4.1.0: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.0" -string.prototype.trimleft@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/string.prototype.trimleft/-/string.prototype.trimleft-2.1.1.tgz#9bdb8ac6abd6d602b17a4ed321870d2f8dcefc74" - integrity sha512-iu2AGd3PuP5Rp7x2kEZCrB2Nf41ehzh+goo8TV7z8/XDBbsvc6HQIlUl9RjkZ4oyrW1XM5UwlGl1oVEaDjg6Ag== +string.prototype.matchall@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.2.tgz#48bb510326fb9fdeb6a33ceaa81a6ea04ef7648e" + integrity sha512-N/jp6O5fMf9os0JU3E72Qhf590RSRZU/ungsL/qJUYVTNv7hTG0P/dbPjxINVN9jpscu3nzYwKESU3P3RY5tOg== dependencies: define-properties "^1.1.3" - function-bind "^1.1.1" + es-abstract "^1.17.0" + has-symbols "^1.0.1" + internal-slot "^1.0.2" + regexp.prototype.flags "^1.3.0" + side-channel "^1.0.2" + +string.prototype.trimend@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz#85812a6b847ac002270f5808146064c995fb6913" + integrity sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.5" + +string.prototype.trimleft@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/string.prototype.trimleft/-/string.prototype.trimleft-2.1.2.tgz#4408aa2e5d6ddd0c9a80739b087fbc067c03b3cc" + integrity sha512-gCA0tza1JBvqr3bfAIFJGqfdRTyPae82+KTnm3coDXkZN9wnuW3HjGgN386D7hfv5CHQYCI022/rJPVlqXyHSw== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.5" + string.prototype.trimstart "^1.0.0" string.prototype.trimright@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/string.prototype.trimright/-/string.prototype.trimright-2.1.1.tgz#440314b15996c866ce8a0341894d45186200c5d9" - integrity sha512-qFvWL3/+QIgZXVmJBfpHmxLB7xsUXz6HsUmP8+5dRaC3Q7oKUv9Vo6aMCRZC1smrtyECFsIT30PqBJ1gTjAs+g== + version "2.1.2" + resolved "https://registry.yarnpkg.com/string.prototype.trimright/-/string.prototype.trimright-2.1.2.tgz#c76f1cef30f21bbad8afeb8db1511496cfb0f2a3" + integrity sha512-ZNRQ7sY3KroTaYjRS6EbNiiHrOkjihL9aQE/8gfQ4DtAC/aEBRHFJa44OmoWxGGqXuJlfKkZW4WcXErGr+9ZFg== dependencies: define-properties "^1.1.3" - function-bind "^1.1.1" + es-abstract "^1.17.5" + string.prototype.trimend "^1.0.0" + +string.prototype.trimstart@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz#14af6d9f34b053f7cfc89b72f8f2ee14b9039a54" + integrity sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.5" string_decoder@^1.0.0, string_decoder@^1.1.1: version "1.3.0" @@ -9442,9 +10257,9 @@ strip-indent@^3.0.0: min-indent "^1.0.0" strip-json-comments@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.0.1.tgz#85713975a91fb87bf1b305cca77395e40d2a64a7" - integrity sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw== + version "3.1.0" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.0.tgz#7638d31422129ecf4457440009fba03f9f9ac180" + integrity sha512-e6/d0eBu7gHtdCqFt0xJr642LdToM5/cN4Qb9DbHjVx1CP5RyeM+zH7pbecEmDv/lBqb0QH+6Uqq75rxFPkM0w== style-loader@0.23.1: version "0.23.1" @@ -9482,7 +10297,7 @@ supports-color@^6.1.0: dependencies: has-flag "^3.0.0" -supports-color@^7.0.0: +supports-color@^7.0.0, supports-color@^7.1.0: version "7.1.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.1.0.tgz#68e32591df73e25ad1c4b49108a2ec507962bfd1" integrity sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g== @@ -9490,9 +10305,9 @@ supports-color@^7.0.0: has-flag "^4.0.0" svg-parser@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/svg-parser/-/svg-parser-2.0.3.tgz#a38f2e4e5442986f7ecb554c11f1411cfcf8c2b9" - integrity sha512-fnCWiifNhK8i2Z7b9R5tbNahpxrRdAaQbnoxKlT2KrSCj9Kq/yBSgulCRgBJRhy1dPnSY5slg5ehPUnzpEcHlg== + version "2.0.4" + resolved "https://registry.yarnpkg.com/svg-parser/-/svg-parser-2.0.4.tgz#fdc2e29e13951736140b76cb122c8ee6630eb6b5" + integrity sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ== svgo@^1.0.0, svgo@^1.2.2: version "1.3.2" @@ -9533,10 +10348,10 @@ tapable@^1.0.0, tapable@^1.1.3: resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== -terser-webpack-plugin@2.3.4: - version "2.3.4" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-2.3.4.tgz#ac045703bd8da0936ce910d8fb6350d0e1dee5fe" - integrity sha512-Nv96Nws2R2nrFOpbzF6IxRDpIkkIfmhvOws+IqMvYdFLO7o6wAILWFKONFgaYy8+T4LVz77DQW0f7wOeDEAjrg== +terser-webpack-plugin@2.3.5: + version "2.3.5" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-2.3.5.tgz#5ad971acce5c517440ba873ea4f09687de2f4a81" + integrity sha512-WlWksUoq+E4+JlJ+h+U+QUzXpcsMSSNXkDy9lBVkSqDn1w23Gg29L/ary9GeJVYCGiNJJX7LnVc4bwL1N3/g1w== dependencies: cacache "^13.0.1" find-cache-dir "^3.2.0" @@ -9563,10 +10378,10 @@ terser-webpack-plugin@^1.4.3: webpack-sources "^1.4.0" worker-farm "^1.7.0" -terser@^4.1.2, terser@^4.3.9, terser@^4.4.3: - version "4.6.3" - resolved "https://registry.yarnpkg.com/terser/-/terser-4.6.3.tgz#e33aa42461ced5238d352d2df2a67f21921f8d87" - integrity sha512-Lw+ieAXmY69d09IIc/yqeBqXpEQIpDGZqT34ui1QWXIUpR2RjbqEkT8X7Lgex19hslSqcWM5iMN2kM11eMsESQ== +terser@^4.1.2, terser@^4.4.3, terser@^4.6.3: + version "4.7.0" + resolved "https://registry.yarnpkg.com/terser/-/terser-4.7.0.tgz#15852cf1a08e3256a80428e865a2fa893ffba006" + integrity sha512-Lfb0RiZcjRDXCC3OSHJpEkxJ9Qeqs6mp2v4jf2MHfy8vGERmVDuvjXdd/EnP5Deme5F2yBRBymKmKHCBg2echw== dependencies: commander "^2.20.0" source-map "~0.6.1" @@ -9622,6 +10437,16 @@ timsort@^0.3.0: resolved "https://registry.yarnpkg.com/timsort/-/timsort-0.3.0.tgz#405411a8e7e6339fe64db9a234de11dc31e02bd4" integrity sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q= +tiny-invariant@^1.0.2: + version "1.1.0" + resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.1.0.tgz#634c5f8efdc27714b7f386c35e6760991d230875" + integrity sha512-ytxQvrb1cPc9WBEI/HSeYYoGD0kWnGEOR8RY6KomWLBVhqz0RgTwVO9dLrGz7dC+nN9llyI7OKAgRq8Vq4ZBSw== + +tiny-warning@^1.0.0, tiny-warning@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754" + integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA== + tmp@^0.0.33: version "0.0.33" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" @@ -9696,15 +10521,20 @@ tr46@^1.0.1: dependencies: punycode "^2.1.0" -ts-pnp@1.1.5, ts-pnp@^1.1.2: - version "1.1.5" - resolved "https://registry.yarnpkg.com/ts-pnp/-/ts-pnp-1.1.5.tgz#840e0739c89fce5f3abd9037bb091dbff16d9dec" - integrity sha512-ti7OGMOUOzo66wLF3liskw6YQIaSsBgc4GOAlWRnIEj8htCxJUxskanMUoJOD6MDCRAXo36goXJZch+nOS0VMA== +ts-pnp@1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/ts-pnp/-/ts-pnp-1.1.6.tgz#389a24396d425a0d3162e96d2b4638900fdc289a" + integrity sha512-CrG5GqAAzMT7144Cl+UIFP7mz/iIhiy+xQ6GGcnjTezhALT02uPMRw7tgDSESgB5MsfKt55+GPWw4ir1kVtMIQ== -tslib@^1.8.1, tslib@^1.9.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a" - integrity sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ== +ts-pnp@^1.1.6: + version "1.2.0" + resolved "https://registry.yarnpkg.com/ts-pnp/-/ts-pnp-1.2.0.tgz#a500ad084b0798f1c3071af391e65912c86bca92" + integrity sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw== + +tslib@^1.10.0, tslib@^1.8.1, tslib@^1.9.0: + version "1.13.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.13.0.tgz#c881e13cc7015894ed914862d276436fa9a47043" + integrity sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q== tsutils@^3.17.1: version "3.17.1" @@ -9737,6 +10567,11 @@ type-check@~0.3.2: dependencies: prelude-ls "~1.1.2" +type-fest@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.11.0.tgz#97abf0872310fed88a5c466b25681576145e33f1" + integrity sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ== + type-fest@^0.8.1: version "0.8.1" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" @@ -9765,10 +10600,20 @@ typedarray@^0.0.6: resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= -typescript@~3.7.2: - version "3.7.5" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.7.5.tgz#0692e21f65fd4108b9330238aac11dd2e177a1ae" - integrity sha512-/P5lkRXkWHNAbcJIiHPfRoKqyd7bsyCma1hZNUGfn20qm64T6ZBlrzprymeu918H+mB/0rIg2gGK/BXkhhYgBw== +typescript@~3.9.2: + version "3.9.2" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.9.2.tgz#64e9c8e9be6ea583c54607677dd4680a1cf35db9" + integrity sha512-q2ktq4n/uLuNNShyayit+DTobV2ApPEo/6so68JaD5ojvc/6GClBipedB9zNWYxRSAlZXAe405Rlijzl6qDiSw== + +uncontrollable@^7.0.0: + version "7.1.1" + resolved "https://registry.yarnpkg.com/uncontrollable/-/uncontrollable-7.1.1.tgz#f67fed3ef93637126571809746323a9db815d556" + integrity sha512-EcPYhot3uWTS3w00R32R2+vS8Vr53tttrvMj/yA1uYRhf8hbTG2GyugGqWDY0qIskxn0uTTojVd6wPYW9ZEf8Q== + dependencies: + "@babel/runtime" "^7.6.3" + "@types/react" "^16.9.11" + invariant "^2.2.4" + react-lifecycles-compat "^3.0.4" unicode-canonical-property-names-ecmascript@^1.0.4: version "1.0.4" @@ -9783,15 +10628,15 @@ unicode-match-property-ecmascript@^1.0.4: unicode-canonical-property-names-ecmascript "^1.0.4" unicode-property-aliases-ecmascript "^1.0.4" -unicode-match-property-value-ecmascript@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.1.0.tgz#5b4b426e08d13a80365e0d657ac7a6c1ec46a277" - integrity sha512-hDTHvaBk3RmFzvSl0UVrUmC3PuW9wKVnpoUDYH0JDkSIovzw+J5viQmeYHxVSBptubnr7PbH2e0fnpDRQnQl5g== +unicode-match-property-value-ecmascript@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz#0d91f600eeeb3096aa962b1d6fc88876e64ea531" + integrity sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ== unicode-property-aliases-ecmascript@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.5.tgz#a9cc6cc7ce63a0a3023fc99e341b94431d405a57" - integrity sha512-L5RAqCfXqAwR3RriF8pM0lU0w4Ryf/GgzONwi6KnL1taJQa7x1TCxdJnILX59WIGOwR57IVxn7Nej0fz1Ny6fw== + version "1.1.0" + resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz#dd57a99f6207bedff4628abefb94c50db941c8f4" + integrity sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg== union-value@^1.0.0: version "1.0.1" @@ -9827,6 +10672,16 @@ unique-slug@^2.0.0: dependencies: imurmurhash "^0.1.4" +universal-cookie@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/universal-cookie/-/universal-cookie-4.0.3.tgz#c2fa59127260e6ad21ef3e0cdd66ad453cbc41f6" + integrity sha512-YbEHRs7bYOBTIWedTR9koVEe2mXrq+xdjTJZcoKJK/pQaE6ni28ak2AKXFpevb+X6w3iU5SXzWDiJkmpDRb9qw== + dependencies: + "@types/cookie" "^0.3.3" + "@types/object-assign" "^4.0.30" + cookie "^0.4.0" + object-assign "^4.1.1" + universalify@^0.1.0: version "0.1.2" resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" @@ -9855,11 +10710,6 @@ upath@^1.1.1: resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== -upper-case@^1.1.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-1.1.3.tgz#f6b4501c2ec4cdd26ba78be7222961de77621598" - integrity sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg= - uri-js@^4.2.2: version "4.2.2" resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" @@ -9967,6 +10817,11 @@ validate-npm-package-license@^3.0.1: spdx-correct "^3.0.0" spdx-expression-parse "^3.0.0" +value-equal@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/value-equal/-/value-equal-1.0.1.tgz#1e0b794c734c5c0cade179c437d356d931a34d6c" + integrity sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw== + vary@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" @@ -9992,11 +10847,11 @@ vm-browserify@^1.0.1: integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ== w3c-hr-time@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz#82ac2bff63d950ea9e3189a58a65625fedf19045" - integrity sha1-gqwr/2PZUOqeMYmlimViX+3xkEU= + version "1.0.2" + resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd" + integrity sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ== dependencies: - browser-process-hrtime "^0.1.2" + browser-process-hrtime "^1.0.0" w3c-xmlserializer@^1.1.2: version "1.1.2" @@ -10007,11 +10862,6 @@ w3c-xmlserializer@^1.1.2: webidl-conversions "^4.0.2" xml-name-validator "^3.0.0" -wait-for-expect@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/wait-for-expect/-/wait-for-expect-3.0.2.tgz#d2f14b2f7b778c9b82144109c8fa89ceaadaa463" - integrity sha512-cfS1+DZxuav1aBYbaO/kE06EOS8yRw7qOFoD3XtjTkYvCvh3zUvNST8DXK/nPaeqIzIv3P3kL3lRJn8iwOiSag== - walker@^1.0.7, walker@~1.0.5: version "1.0.7" resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb" @@ -10019,14 +10869,30 @@ walker@^1.0.7, walker@~1.0.5: dependencies: makeerror "1.0.x" +warning@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/warning/-/warning-4.0.3.tgz#16e9e077eb8a86d6af7d64aa1e05fd85b4678ca3" + integrity sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w== + dependencies: + loose-envify "^1.0.0" + +watchpack-chokidar2@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/watchpack-chokidar2/-/watchpack-chokidar2-2.0.0.tgz#9948a1866cbbd6cb824dea13a7ed691f6c8ddff0" + integrity sha512-9TyfOyN/zLUbA288wZ8IsMZ+6cbzvsNyEzSBp6e/zkifi6xxbl8SmQ/CxQq32k8NNqrdVEVUVSEf56L4rQ/ZxA== + dependencies: + chokidar "^2.1.8" + watchpack@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.6.0.tgz#4bc12c2ebe8aa277a71f1d3f14d685c7b446cd00" - integrity sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA== + version "1.7.2" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.7.2.tgz#c02e4d4d49913c3e7e122c3325365af9d331e9aa" + integrity sha512-ymVbbQP40MFTp+cNMvpyBpBtygHnPzPkHqoIwRRj/0B8KhqQwV8LaKjtbaxF2lK4vl8zN9wCxS46IFCU5K4W0g== dependencies: - chokidar "^2.0.2" graceful-fs "^4.1.2" neo-async "^2.5.0" + optionalDependencies: + chokidar "^3.4.0" + watchpack-chokidar2 "^2.0.0" wbuf@^1.1.0, wbuf@^1.7.3: version "1.7.3" @@ -10051,10 +10917,10 @@ webpack-dev-middleware@^3.7.2: range-parser "^1.2.1" webpack-log "^2.0.0" -webpack-dev-server@3.10.2: - version "3.10.2" - resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-3.10.2.tgz#3403287d674c7407aab6d9b3f72259ecd0aa0874" - integrity sha512-pxZKPYb+n77UN8u9YxXT4IaIrGcNtijh/mi8TXbErHmczw0DtPnMTTjHj+eNjkqLOaAZM/qD7V59j/qJsEiaZA== +webpack-dev-server@3.10.3: + version "3.10.3" + resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-3.10.3.tgz#f35945036813e57ef582c2420ef7b470e14d3af0" + integrity sha512-e4nWev8YzEVNdOMcNzNeCN947sWJNd43E5XvsJzbAL08kGc2frm1tQ32hTJslRS+H65LCb/AaUCYU7fjHCpDeQ== dependencies: ansi-html "0.0.7" bonjour "^3.5.0" @@ -10116,10 +10982,10 @@ webpack-sources@^1.1.0, webpack-sources@^1.4.0, webpack-sources@^1.4.1, webpack- source-list-map "^2.0.0" source-map "~0.6.1" -webpack@4.41.5: - version "4.41.5" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.41.5.tgz#3210f1886bce5310e62bb97204d18c263341b77c" - integrity sha512-wp0Co4vpyumnp3KlkmpM5LWuzvZYayDwM2n17EHFr4qxBBbRokC7DJawPJC7TfSFZ9HZ6GsdH40EBj4UV0nmpw== +webpack@4.42.0: + version "4.42.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.42.0.tgz#b901635dd6179391d90740a63c93f76f39883eb8" + integrity sha512-EzJRHvwQyBiYrYqhyjW9AqM90dE4+s1/XtCfn7uWg6cS72zH+2VPFAlsnW0+W0cDi0XRjNKUMoJtpSi50+Ph6w== dependencies: "@webassemblyjs/ast" "1.8.5" "@webassemblyjs/helper-module-context" "1.8.5" @@ -10424,11 +11290,31 @@ xml-name-validator@^3.0.0: resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== +xml2js@^0.4.19: + version "0.4.23" + resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.23.tgz#a0c69516752421eb2ac758ee4d4ccf58843eac66" + integrity sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug== + dependencies: + sax ">=0.6.0" + xmlbuilder "~11.0.0" + +xmlbuilder@~11.0.0: + version "11.0.1" + resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-11.0.1.tgz#be9bae1c8a046e76b31127726347d0ad7002beb3" + integrity sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA== + xmlchars@^2.1.1: version "2.2.0" resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== +xregexp@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/xregexp/-/xregexp-4.3.0.tgz#7e92e73d9174a99a59743f67a4ce879a04b5ae50" + integrity sha512-7jXDIFXh5yJ/orPn4SXjuVrWWoi4Cr8jfV1eHv9CixKSbU+jY4mxfrBwAuDvupPNKpMUY+FeIqsVw/JLT9+B8g== + dependencies: + "@babel/runtime-corejs3" "^7.8.3" + xtend@^4.0.0, xtend@~4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" @@ -10450,11 +11336,9 @@ yallist@^4.0.0: integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== yaml@^1.7.2: - version "1.7.2" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.7.2.tgz#f26aabf738590ab61efaca502358e48dc9f348b2" - integrity sha512-qXROVp90sb83XtAoqE8bP9RwAkTTZbugRUTm5YeFCBfNRPEp2YzTeqWiz7m5OORHzEvrA/qcGS8hp/E+MMROYw== - dependencies: - "@babel/runtime" "^7.6.3" + version "1.10.0" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.0.tgz#3b593add944876077d4d683fee01081bd9fff31e" + integrity sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg== yargs-parser@^11.1.1: version "11.1.1" @@ -10464,10 +11348,10 @@ yargs-parser@^11.1.1: camelcase "^5.0.0" decamelize "^1.2.0" -yargs-parser@^13.1.1: - version "13.1.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.1.tgz#d26058532aa06d365fe091f6a1fc06b2f7e5eca0" - integrity sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ== +yargs-parser@^13.1.2: + version "13.1.2" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38" + integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg== dependencies: camelcase "^5.0.0" decamelize "^1.2.0" @@ -10491,9 +11375,9 @@ yargs@12.0.5: yargs-parser "^11.1.1" yargs@^13.3.0: - version "13.3.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.0.tgz#4c657a55e07e5f2cf947f8a366567c04a0dedc83" - integrity sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA== + version "13.3.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd" + integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw== dependencies: cliui "^5.0.0" find-up "^3.0.0" @@ -10504,4 +11388,4 @@ yargs@^13.3.0: string-width "^3.0.0" which-module "^2.0.0" y18n "^4.0.0" - yargs-parser "^13.1.1" + yargs-parser "^13.1.2"