From b6abe7d26f2614b26fb10fd047f1494367accb46 Mon Sep 17 00:00:00 2001 From: CloudCannon Date: Wed, 5 Aug 2020 17:06:38 +0000 Subject: [PATCH] Updated 96 files via CloudCannon --- 333mix/index.html | 26 +- 404/index.html | 26 +- about/index.html | 40 +- .../1-grandma-got-the-ssh-keys/index.html | 26 +- albums/darkweb/1-swipe/index.html | 26 +- albums/darkweb/2-darkweb/index.html | 26 +- .../darkweb/3-swipe-instrumental-/index.html | 26 +- .../4-darkweb-instrumental-/index.html | 26 +- .../1-ep-life-of-a-dudelini/index.html | 26 +- .../1-k-as-tu-fait-de-nous-/index.html | 26 +- .../satoshi-mon-ami/2-r-ve-de-toi/index.html | 26 +- .../1-dependency-error/index.html | 26 +- albums/unmet-dependencies/2-pingnu/index.html | 26 +- ...oid-icon-192x192-dunplab-manifest-9805.png | Bin 0 -> 14660 bytes apple-icon-114x114-dunplab-manifest-9805.png | Bin 0 -> 7143 bytes apple-icon-120x120-dunplab-manifest-9805.png | Bin 0 -> 7702 bytes apple-icon-144x144-dunplab-manifest-9805.png | Bin 0 -> 9800 bytes apple-icon-152x152-dunplab-manifest-9805.png | Bin 0 -> 10672 bytes apple-icon-180x180-dunplab-manifest-9805.png | Bin 0 -> 13408 bytes apple-icon-57x57-dunplab-manifest-9805.png | Bin 0 -> 2918 bytes apple-icon-60x60-dunplab-manifest-9805.png | Bin 0 -> 3055 bytes apple-icon-72x72-dunplab-manifest-9805.png | Bin 0 -> 3891 bytes apple-icon-76x76-dunplab-manifest-9805.png | Bin 0 -> 4200 bytes assets/css/main-20200805-rv2.css.map | 4 +- assets/css/noscripts-20200805.css.map | 4 +- .../workbox-background-sync.dev.js | 593 ++++++ .../workbox-background-sync.dev.js.map | 1 + .../workbox-background-sync.prod.js | 3 + .../workbox-background-sync.prod.js.map | 1 + .../workbox-broadcast-cache-update.dev.js | 395 ++++ .../workbox-broadcast-cache-update.dev.js.map | 1 + .../workbox-broadcast-cache-update.prod.js | 3 + ...workbox-broadcast-cache-update.prod.js.map | 1 + .../workbox-cache-expiration.dev.js | 740 +++++++ .../workbox-cache-expiration.dev.js.map | 1 + .../workbox-cache-expiration.prod.js | 3 + .../workbox-cache-expiration.prod.js.map | 1 + .../workbox-cacheable-response.dev.js | 236 +++ .../workbox-cacheable-response.dev.js.map | 1 + .../workbox-cacheable-response.prod.js | 3 + .../workbox-cacheable-response.prod.js.map | 1 + assets/js/workbox-v3.6.3/workbox-core.dev.js | 1736 +++++++++++++++++ .../js/workbox-v3.6.3/workbox-core.dev.js.map | 1 + assets/js/workbox-v3.6.3/workbox-core.prod.js | 3 + .../workbox-v3.6.3/workbox-core.prod.js.map | 1 + .../workbox-google-analytics.dev.js | 255 +++ .../workbox-google-analytics.dev.js.map | 1 + .../workbox-google-analytics.prod.js | 3 + .../workbox-google-analytics.prod.js.map | 1 + .../workbox-navigation-preload.dev.js | 159 ++ .../workbox-navigation-preload.dev.js.map | 1 + .../workbox-navigation-preload.prod.js | 3 + .../workbox-navigation-preload.prod.js.map | 1 + .../workbox-v3.6.3/workbox-precaching.dev.js | 1171 +++++++++++ .../workbox-precaching.dev.js.map | 1 + .../workbox-v3.6.3/workbox-precaching.prod.js | 3 + .../workbox-precaching.prod.js.map | 1 + .../workbox-range-requests.dev.js | 299 +++ .../workbox-range-requests.dev.js.map | 1 + .../workbox-range-requests.prod.js | 3 + .../workbox-range-requests.prod.js.map | 1 + .../js/workbox-v3.6.3/workbox-routing.dev.js | 863 ++++++++ .../workbox-v3.6.3/workbox-routing.dev.js.map | 1 + .../js/workbox-v3.6.3/workbox-routing.prod.js | 3 + .../workbox-routing.prod.js.map | 1 + .../workbox-v3.6.3/workbox-strategies.dev.js | 1172 +++++++++++ .../workbox-strategies.dev.js.map | 1 + .../workbox-v3.6.3/workbox-strategies.prod.js | 3 + .../workbox-strategies.prod.js.map | 1 + .../js/workbox-v3.6.3/workbox-streams.dev.js | 380 ++++ .../workbox-v3.6.3/workbox-streams.dev.js.map | 1 + .../js/workbox-v3.6.3/workbox-streams.prod.js | 3 + .../workbox-streams.prod.js.map | 1 + assets/js/workbox-v3.6.3/workbox-sw.js | 3 + assets/js/workbox-v3.6.3/workbox-sw.js.map | 1 + cookies/index.html | 26 +- cyber-grany/index.html | 26 +- darkweb/index.html | 26 +- discography/index.html | 26 +- favicon-16x16-dunplab-manifest-9805.png | Bin 0 -> 596 bytes favicon-32x32-dunplab-manifest-9805.png | Bin 0 -> 1415 bytes favicon-96x96-dunplab-manifest-9805.png | Bin 0 -> 5704 bytes feed.xml | 2 +- images/pages/pingu.jpg | Bin 225470 -> 191515 bytes index.html | 40 +- links/index.html | 26 +- live-with-hardware/index.html | 26 +- log/index.html | 26 +- manifest.json | 85 + satoshi-mon-ami/index.html | 26 +- service-worker.js | 45 + setto-webapp.png | Bin 0 -> 62753 bytes sitemap.xml | 4 +- sw-register.js | 20 + unmet-dependencies/index.html | 26 +- webcreds/index.html | 26 +- 96 files changed, 8738 insertions(+), 141 deletions(-) create mode 100644 android-icon-192x192-dunplab-manifest-9805.png create mode 100644 apple-icon-114x114-dunplab-manifest-9805.png create mode 100644 apple-icon-120x120-dunplab-manifest-9805.png create mode 100644 apple-icon-144x144-dunplab-manifest-9805.png create mode 100644 apple-icon-152x152-dunplab-manifest-9805.png create mode 100644 apple-icon-180x180-dunplab-manifest-9805.png create mode 100644 apple-icon-57x57-dunplab-manifest-9805.png create mode 100644 apple-icon-60x60-dunplab-manifest-9805.png create mode 100644 apple-icon-72x72-dunplab-manifest-9805.png create mode 100644 apple-icon-76x76-dunplab-manifest-9805.png create mode 100644 assets/js/workbox-v3.6.3/workbox-background-sync.dev.js create mode 100644 assets/js/workbox-v3.6.3/workbox-background-sync.dev.js.map create mode 100644 assets/js/workbox-v3.6.3/workbox-background-sync.prod.js create mode 100644 assets/js/workbox-v3.6.3/workbox-background-sync.prod.js.map create mode 100644 assets/js/workbox-v3.6.3/workbox-broadcast-cache-update.dev.js create mode 100644 assets/js/workbox-v3.6.3/workbox-broadcast-cache-update.dev.js.map create mode 100644 assets/js/workbox-v3.6.3/workbox-broadcast-cache-update.prod.js create mode 100644 assets/js/workbox-v3.6.3/workbox-broadcast-cache-update.prod.js.map create mode 100644 assets/js/workbox-v3.6.3/workbox-cache-expiration.dev.js create mode 100644 assets/js/workbox-v3.6.3/workbox-cache-expiration.dev.js.map create mode 100644 assets/js/workbox-v3.6.3/workbox-cache-expiration.prod.js create mode 100644 assets/js/workbox-v3.6.3/workbox-cache-expiration.prod.js.map create mode 100644 assets/js/workbox-v3.6.3/workbox-cacheable-response.dev.js create mode 100644 assets/js/workbox-v3.6.3/workbox-cacheable-response.dev.js.map create mode 100644 assets/js/workbox-v3.6.3/workbox-cacheable-response.prod.js create mode 100644 assets/js/workbox-v3.6.3/workbox-cacheable-response.prod.js.map create mode 100644 assets/js/workbox-v3.6.3/workbox-core.dev.js create mode 100644 assets/js/workbox-v3.6.3/workbox-core.dev.js.map create mode 100644 assets/js/workbox-v3.6.3/workbox-core.prod.js create mode 100644 assets/js/workbox-v3.6.3/workbox-core.prod.js.map create mode 100644 assets/js/workbox-v3.6.3/workbox-google-analytics.dev.js create mode 100644 assets/js/workbox-v3.6.3/workbox-google-analytics.dev.js.map create mode 100644 assets/js/workbox-v3.6.3/workbox-google-analytics.prod.js create mode 100644 assets/js/workbox-v3.6.3/workbox-google-analytics.prod.js.map create mode 100644 assets/js/workbox-v3.6.3/workbox-navigation-preload.dev.js create mode 100644 assets/js/workbox-v3.6.3/workbox-navigation-preload.dev.js.map create mode 100644 assets/js/workbox-v3.6.3/workbox-navigation-preload.prod.js create mode 100644 assets/js/workbox-v3.6.3/workbox-navigation-preload.prod.js.map create mode 100644 assets/js/workbox-v3.6.3/workbox-precaching.dev.js create mode 100644 assets/js/workbox-v3.6.3/workbox-precaching.dev.js.map create mode 100644 assets/js/workbox-v3.6.3/workbox-precaching.prod.js create mode 100644 assets/js/workbox-v3.6.3/workbox-precaching.prod.js.map create mode 100644 assets/js/workbox-v3.6.3/workbox-range-requests.dev.js create mode 100644 assets/js/workbox-v3.6.3/workbox-range-requests.dev.js.map create mode 100644 assets/js/workbox-v3.6.3/workbox-range-requests.prod.js create mode 100644 assets/js/workbox-v3.6.3/workbox-range-requests.prod.js.map create mode 100644 assets/js/workbox-v3.6.3/workbox-routing.dev.js create mode 100644 assets/js/workbox-v3.6.3/workbox-routing.dev.js.map create mode 100644 assets/js/workbox-v3.6.3/workbox-routing.prod.js create mode 100644 assets/js/workbox-v3.6.3/workbox-routing.prod.js.map create mode 100644 assets/js/workbox-v3.6.3/workbox-strategies.dev.js create mode 100644 assets/js/workbox-v3.6.3/workbox-strategies.dev.js.map create mode 100644 assets/js/workbox-v3.6.3/workbox-strategies.prod.js create mode 100644 assets/js/workbox-v3.6.3/workbox-strategies.prod.js.map create mode 100644 assets/js/workbox-v3.6.3/workbox-streams.dev.js create mode 100644 assets/js/workbox-v3.6.3/workbox-streams.dev.js.map create mode 100644 assets/js/workbox-v3.6.3/workbox-streams.prod.js create mode 100644 assets/js/workbox-v3.6.3/workbox-streams.prod.js.map create mode 100644 assets/js/workbox-v3.6.3/workbox-sw.js create mode 100644 assets/js/workbox-v3.6.3/workbox-sw.js.map create mode 100644 favicon-16x16-dunplab-manifest-9805.png create mode 100644 favicon-32x32-dunplab-manifest-9805.png create mode 100644 favicon-96x96-dunplab-manifest-9805.png create mode 100644 manifest.json create mode 100644 service-worker.js create mode 100644 setto-webapp.png create mode 100644 sw-register.js diff --git a/333mix/index.html b/333mix/index.html index 1b73a9f..2b09f14 100644 --- a/333mix/index.html +++ b/333mix/index.html @@ -124,6 +124,9 @@ + + + @@ -240,7 +243,7 @@ Open your mind, open the source!

Reddit - Email @@ -365,7 +368,7 @@ _paq.push(['enableLinkTracking']); _paq.push(['setTrackerUrl', u+'matomo.php']); _paq.push(['setSiteId', '11']); var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0]; - g.type='text/javascript'; g.async=true; g.defer=true; g.src='//cdn.matomo.cloud/terminalnetwork.matomo.cloud/matomo.js'; s.parentNode.insertBefore(g,s); + g.type='text/javascript'; g.async=true; g.defer=true; g.src='https://cdn.matomo.cloud/terminalnetwork.matomo.cloud/matomo.js'; s.parentNode.insertBefore(g,s); })(); @@ -384,7 +387,7 @@ _paq.push(['enableLinkTracking']); _paq.push(['setTrackerUrl', u+'matomo.php']); _paq.push(['setSiteId', '11']); var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0]; - g.type='text/javascript'; g.async=true; g.defer=true; g.src='//cdn.matomo.cloud/terminalnetwork.matomo.cloud/matomo.js'; s.parentNode.insertBefore(g,s); + g.type='text/javascript'; g.async=true; g.defer=true; g.src='https://cdn.matomo.cloud/terminalnetwork.matomo.cloud/matomo.js'; s.parentNode.insertBefore(g,s); })(); } @@ -417,5 +420,18 @@ _paq.push(['enableLinkTracking']); - - \ No newline at end of file + + + + + + diff --git a/404/index.html b/404/index.html index 580c752..4db9d3f 100644 --- a/404/index.html +++ b/404/index.html @@ -122,6 +122,9 @@ + + + @@ -226,7 +229,7 @@ Reddit - Email @@ -364,7 +367,7 @@ _paq.push(['enableLinkTracking']); _paq.push(['setTrackerUrl', u+'matomo.php']); _paq.push(['setSiteId', '11']); var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0]; - g.type='text/javascript'; g.async=true; g.defer=true; g.src='//cdn.matomo.cloud/terminalnetwork.matomo.cloud/matomo.js'; s.parentNode.insertBefore(g,s); + g.type='text/javascript'; g.async=true; g.defer=true; g.src='https://cdn.matomo.cloud/terminalnetwork.matomo.cloud/matomo.js'; s.parentNode.insertBefore(g,s); })(); @@ -383,7 +386,7 @@ _paq.push(['enableLinkTracking']); _paq.push(['setTrackerUrl', u+'matomo.php']); _paq.push(['setSiteId', '11']); var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0]; - g.type='text/javascript'; g.async=true; g.defer=true; g.src='//cdn.matomo.cloud/terminalnetwork.matomo.cloud/matomo.js'; s.parentNode.insertBefore(g,s); + g.type='text/javascript'; g.async=true; g.defer=true; g.src='https://cdn.matomo.cloud/terminalnetwork.matomo.cloud/matomo.js'; s.parentNode.insertBefore(g,s); })(); } @@ -416,5 +419,18 @@ _paq.push(['enableLinkTracking']); - - \ No newline at end of file + + + + + + diff --git a/about/index.html b/about/index.html index eb90283..97453c9 100644 --- a/about/index.html +++ b/about/index.html @@ -38,7 +38,7 @@ About | 徒 setto セット - + @@ -62,7 +62,7 @@ - + @@ -73,14 +73,14 @@ - - + + - + @@ -96,7 +96,7 @@ "https://twitter.com/ToSettoSetto","https://instagram.com/ToSettoSetto" ], "logo": "https://setto.basspistol.com/siteicon.png", - "image": "https://setto.basspistol.com/images/pages/shane-young-S7fRAd0oTPI-unsplash.jpg", + "image": "https://setto.basspistol.com/images/pages/creds.jpg", "description": "Set, Party, Gang! #Cybersoul.", "address": { "@type": "PostalAddress", @@ -122,6 +122,9 @@ + + + @@ -132,7 +135,7 @@ -
+

About

WTF is 徒 setto セット and what does the funky characters mean? Why so cryptic and whodafuq?

@@ -244,7 +247,7 @@ Reddit - Email
@@ -369,7 +372,7 @@ _paq.push(['enableLinkTracking']); _paq.push(['setTrackerUrl', u+'matomo.php']); _paq.push(['setSiteId', '11']); var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0]; - g.type='text/javascript'; g.async=true; g.defer=true; g.src='//cdn.matomo.cloud/terminalnetwork.matomo.cloud/matomo.js'; s.parentNode.insertBefore(g,s); + g.type='text/javascript'; g.async=true; g.defer=true; g.src='https://cdn.matomo.cloud/terminalnetwork.matomo.cloud/matomo.js'; s.parentNode.insertBefore(g,s); })(); @@ -388,7 +391,7 @@ _paq.push(['enableLinkTracking']); _paq.push(['setTrackerUrl', u+'matomo.php']); _paq.push(['setSiteId', '11']); var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0]; - g.type='text/javascript'; g.async=true; g.defer=true; g.src='//cdn.matomo.cloud/terminalnetwork.matomo.cloud/matomo.js'; s.parentNode.insertBefore(g,s); + g.type='text/javascript'; g.async=true; g.defer=true; g.src='https://cdn.matomo.cloud/terminalnetwork.matomo.cloud/matomo.js'; s.parentNode.insertBefore(g,s); })(); } @@ -421,5 +424,18 @@ _paq.push(['enableLinkTracking']); - - \ No newline at end of file + + + + + + diff --git a/albums/cyber-grany/1-grandma-got-the-ssh-keys/index.html b/albums/cyber-grany/1-grandma-got-the-ssh-keys/index.html index 45eedfc..f99914f 100644 --- a/albums/cyber-grany/1-grandma-got-the-ssh-keys/index.html +++ b/albums/cyber-grany/1-grandma-got-the-ssh-keys/index.html @@ -99,6 +99,9 @@ + + + @@ -326,7 +329,7 @@ Reddit - Email @@ -535,7 +538,7 @@ _paq.push(['enableLinkTracking']); _paq.push(['setTrackerUrl', u+'matomo.php']); _paq.push(['setSiteId', '11']); var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0]; - g.type='text/javascript'; g.async=true; g.defer=true; g.src='//cdn.matomo.cloud/terminalnetwork.matomo.cloud/matomo.js'; s.parentNode.insertBefore(g,s); + g.type='text/javascript'; g.async=true; g.defer=true; g.src='https://cdn.matomo.cloud/terminalnetwork.matomo.cloud/matomo.js'; s.parentNode.insertBefore(g,s); })(); @@ -554,7 +557,7 @@ _paq.push(['enableLinkTracking']); _paq.push(['setTrackerUrl', u+'matomo.php']); _paq.push(['setSiteId', '11']); var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0]; - g.type='text/javascript'; g.async=true; g.defer=true; g.src='//cdn.matomo.cloud/terminalnetwork.matomo.cloud/matomo.js'; s.parentNode.insertBefore(g,s); + g.type='text/javascript'; g.async=true; g.defer=true; g.src='https://cdn.matomo.cloud/terminalnetwork.matomo.cloud/matomo.js'; s.parentNode.insertBefore(g,s); })(); } @@ -587,5 +590,18 @@ _paq.push(['enableLinkTracking']); - - \ No newline at end of file + + + + + + diff --git a/albums/darkweb/1-swipe/index.html b/albums/darkweb/1-swipe/index.html index 2adb823..f208a55 100644 --- a/albums/darkweb/1-swipe/index.html +++ b/albums/darkweb/1-swipe/index.html @@ -99,6 +99,9 @@ + + + @@ -376,7 +379,7 @@ Je yeuxt vers l'avant de temps en temps. Reddit - Email @@ -587,7 +590,7 @@ _paq.push(['enableLinkTracking']); _paq.push(['setTrackerUrl', u+'matomo.php']); _paq.push(['setSiteId', '11']); var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0]; - g.type='text/javascript'; g.async=true; g.defer=true; g.src='//cdn.matomo.cloud/terminalnetwork.matomo.cloud/matomo.js'; s.parentNode.insertBefore(g,s); + g.type='text/javascript'; g.async=true; g.defer=true; g.src='https://cdn.matomo.cloud/terminalnetwork.matomo.cloud/matomo.js'; s.parentNode.insertBefore(g,s); })(); @@ -606,7 +609,7 @@ _paq.push(['enableLinkTracking']); _paq.push(['setTrackerUrl', u+'matomo.php']); _paq.push(['setSiteId', '11']); var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0]; - g.type='text/javascript'; g.async=true; g.defer=true; g.src='//cdn.matomo.cloud/terminalnetwork.matomo.cloud/matomo.js'; s.parentNode.insertBefore(g,s); + g.type='text/javascript'; g.async=true; g.defer=true; g.src='https://cdn.matomo.cloud/terminalnetwork.matomo.cloud/matomo.js'; s.parentNode.insertBefore(g,s); })(); } @@ -639,5 +642,18 @@ _paq.push(['enableLinkTracking']); - - \ No newline at end of file + + + + + + diff --git a/albums/darkweb/2-darkweb/index.html b/albums/darkweb/2-darkweb/index.html index 5cef3a7..fbd0197 100644 --- a/albums/darkweb/2-darkweb/index.html +++ b/albums/darkweb/2-darkweb/index.html @@ -99,6 +99,9 @@ + + + @@ -406,7 +409,7 @@ Tu vas aussi kiffer Reddit - Email @@ -617,7 +620,7 @@ _paq.push(['enableLinkTracking']); _paq.push(['setTrackerUrl', u+'matomo.php']); _paq.push(['setSiteId', '11']); var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0]; - g.type='text/javascript'; g.async=true; g.defer=true; g.src='//cdn.matomo.cloud/terminalnetwork.matomo.cloud/matomo.js'; s.parentNode.insertBefore(g,s); + g.type='text/javascript'; g.async=true; g.defer=true; g.src='https://cdn.matomo.cloud/terminalnetwork.matomo.cloud/matomo.js'; s.parentNode.insertBefore(g,s); })(); @@ -636,7 +639,7 @@ _paq.push(['enableLinkTracking']); _paq.push(['setTrackerUrl', u+'matomo.php']); _paq.push(['setSiteId', '11']); var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0]; - g.type='text/javascript'; g.async=true; g.defer=true; g.src='//cdn.matomo.cloud/terminalnetwork.matomo.cloud/matomo.js'; s.parentNode.insertBefore(g,s); + g.type='text/javascript'; g.async=true; g.defer=true; g.src='https://cdn.matomo.cloud/terminalnetwork.matomo.cloud/matomo.js'; s.parentNode.insertBefore(g,s); })(); } @@ -669,5 +672,18 @@ _paq.push(['enableLinkTracking']); - - \ No newline at end of file + + + + + + diff --git a/albums/darkweb/3-swipe-instrumental-/index.html b/albums/darkweb/3-swipe-instrumental-/index.html index 1d3bd89..d9525e8 100644 --- a/albums/darkweb/3-swipe-instrumental-/index.html +++ b/albums/darkweb/3-swipe-instrumental-/index.html @@ -99,6 +99,9 @@ + + + @@ -336,7 +339,7 @@ Reddit - Email @@ -547,7 +550,7 @@ _paq.push(['enableLinkTracking']); _paq.push(['setTrackerUrl', u+'matomo.php']); _paq.push(['setSiteId', '11']); var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0]; - g.type='text/javascript'; g.async=true; g.defer=true; g.src='//cdn.matomo.cloud/terminalnetwork.matomo.cloud/matomo.js'; s.parentNode.insertBefore(g,s); + g.type='text/javascript'; g.async=true; g.defer=true; g.src='https://cdn.matomo.cloud/terminalnetwork.matomo.cloud/matomo.js'; s.parentNode.insertBefore(g,s); })(); @@ -566,7 +569,7 @@ _paq.push(['enableLinkTracking']); _paq.push(['setTrackerUrl', u+'matomo.php']); _paq.push(['setSiteId', '11']); var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0]; - g.type='text/javascript'; g.async=true; g.defer=true; g.src='//cdn.matomo.cloud/terminalnetwork.matomo.cloud/matomo.js'; s.parentNode.insertBefore(g,s); + g.type='text/javascript'; g.async=true; g.defer=true; g.src='https://cdn.matomo.cloud/terminalnetwork.matomo.cloud/matomo.js'; s.parentNode.insertBefore(g,s); })(); } @@ -599,5 +602,18 @@ _paq.push(['enableLinkTracking']); - - \ No newline at end of file + + + + + + diff --git a/albums/darkweb/4-darkweb-instrumental-/index.html b/albums/darkweb/4-darkweb-instrumental-/index.html index aa1a7f4..6a8d65f 100644 --- a/albums/darkweb/4-darkweb-instrumental-/index.html +++ b/albums/darkweb/4-darkweb-instrumental-/index.html @@ -99,6 +99,9 @@ + + + @@ -336,7 +339,7 @@ Reddit - Email @@ -547,7 +550,7 @@ _paq.push(['enableLinkTracking']); _paq.push(['setTrackerUrl', u+'matomo.php']); _paq.push(['setSiteId', '11']); var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0]; - g.type='text/javascript'; g.async=true; g.defer=true; g.src='//cdn.matomo.cloud/terminalnetwork.matomo.cloud/matomo.js'; s.parentNode.insertBefore(g,s); + g.type='text/javascript'; g.async=true; g.defer=true; g.src='https://cdn.matomo.cloud/terminalnetwork.matomo.cloud/matomo.js'; s.parentNode.insertBefore(g,s); })(); @@ -566,7 +569,7 @@ _paq.push(['enableLinkTracking']); _paq.push(['setTrackerUrl', u+'matomo.php']); _paq.push(['setSiteId', '11']); var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0]; - g.type='text/javascript'; g.async=true; g.defer=true; g.src='//cdn.matomo.cloud/terminalnetwork.matomo.cloud/matomo.js'; s.parentNode.insertBefore(g,s); + g.type='text/javascript'; g.async=true; g.defer=true; g.src='https://cdn.matomo.cloud/terminalnetwork.matomo.cloud/matomo.js'; s.parentNode.insertBefore(g,s); })(); } @@ -599,5 +602,18 @@ _paq.push(['enableLinkTracking']); - - \ No newline at end of file + + + + + + diff --git a/albums/live-with-hardware/1-ep-life-of-a-dudelini/index.html b/albums/live-with-hardware/1-ep-life-of-a-dudelini/index.html index 7b23d2b..59e3b6f 100644 --- a/albums/live-with-hardware/1-ep-life-of-a-dudelini/index.html +++ b/albums/live-with-hardware/1-ep-life-of-a-dudelini/index.html @@ -99,6 +99,9 @@ + + + @@ -329,7 +332,7 @@ Reddit - Email @@ -540,7 +543,7 @@ _paq.push(['enableLinkTracking']); _paq.push(['setTrackerUrl', u+'matomo.php']); _paq.push(['setSiteId', '11']); var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0]; - g.type='text/javascript'; g.async=true; g.defer=true; g.src='//cdn.matomo.cloud/terminalnetwork.matomo.cloud/matomo.js'; s.parentNode.insertBefore(g,s); + g.type='text/javascript'; g.async=true; g.defer=true; g.src='https://cdn.matomo.cloud/terminalnetwork.matomo.cloud/matomo.js'; s.parentNode.insertBefore(g,s); })(); @@ -559,7 +562,7 @@ _paq.push(['enableLinkTracking']); _paq.push(['setTrackerUrl', u+'matomo.php']); _paq.push(['setSiteId', '11']); var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0]; - g.type='text/javascript'; g.async=true; g.defer=true; g.src='//cdn.matomo.cloud/terminalnetwork.matomo.cloud/matomo.js'; s.parentNode.insertBefore(g,s); + g.type='text/javascript'; g.async=true; g.defer=true; g.src='https://cdn.matomo.cloud/terminalnetwork.matomo.cloud/matomo.js'; s.parentNode.insertBefore(g,s); })(); } @@ -592,5 +595,18 @@ _paq.push(['enableLinkTracking']); - - \ No newline at end of file + + + + + + diff --git a/albums/satoshi-mon-ami/1-k-as-tu-fait-de-nous-/index.html b/albums/satoshi-mon-ami/1-k-as-tu-fait-de-nous-/index.html index 7f0b2fc..0792787 100644 --- a/albums/satoshi-mon-ami/1-k-as-tu-fait-de-nous-/index.html +++ b/albums/satoshi-mon-ami/1-k-as-tu-fait-de-nous-/index.html @@ -99,6 +99,9 @@ + + + @@ -395,7 +398,7 @@ WTF coucou Reddit - Email @@ -606,7 +609,7 @@ _paq.push(['enableLinkTracking']); _paq.push(['setTrackerUrl', u+'matomo.php']); _paq.push(['setSiteId', '11']); var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0]; - g.type='text/javascript'; g.async=true; g.defer=true; g.src='//cdn.matomo.cloud/terminalnetwork.matomo.cloud/matomo.js'; s.parentNode.insertBefore(g,s); + g.type='text/javascript'; g.async=true; g.defer=true; g.src='https://cdn.matomo.cloud/terminalnetwork.matomo.cloud/matomo.js'; s.parentNode.insertBefore(g,s); })(); @@ -625,7 +628,7 @@ _paq.push(['enableLinkTracking']); _paq.push(['setTrackerUrl', u+'matomo.php']); _paq.push(['setSiteId', '11']); var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0]; - g.type='text/javascript'; g.async=true; g.defer=true; g.src='//cdn.matomo.cloud/terminalnetwork.matomo.cloud/matomo.js'; s.parentNode.insertBefore(g,s); + g.type='text/javascript'; g.async=true; g.defer=true; g.src='https://cdn.matomo.cloud/terminalnetwork.matomo.cloud/matomo.js'; s.parentNode.insertBefore(g,s); })(); } @@ -658,5 +661,18 @@ _paq.push(['enableLinkTracking']); - - \ No newline at end of file + + + + + + diff --git a/albums/satoshi-mon-ami/2-r-ve-de-toi/index.html b/albums/satoshi-mon-ami/2-r-ve-de-toi/index.html index 42ee284..c7c85bb 100644 --- a/albums/satoshi-mon-ami/2-r-ve-de-toi/index.html +++ b/albums/satoshi-mon-ami/2-r-ve-de-toi/index.html @@ -99,6 +99,9 @@ + + + @@ -370,7 +373,7 @@ Fois en moi, mais cette fois, toujours pas toi Reddit - Email @@ -581,7 +584,7 @@ _paq.push(['enableLinkTracking']); _paq.push(['setTrackerUrl', u+'matomo.php']); _paq.push(['setSiteId', '11']); var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0]; - g.type='text/javascript'; g.async=true; g.defer=true; g.src='//cdn.matomo.cloud/terminalnetwork.matomo.cloud/matomo.js'; s.parentNode.insertBefore(g,s); + g.type='text/javascript'; g.async=true; g.defer=true; g.src='https://cdn.matomo.cloud/terminalnetwork.matomo.cloud/matomo.js'; s.parentNode.insertBefore(g,s); })(); @@ -600,7 +603,7 @@ _paq.push(['enableLinkTracking']); _paq.push(['setTrackerUrl', u+'matomo.php']); _paq.push(['setSiteId', '11']); var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0]; - g.type='text/javascript'; g.async=true; g.defer=true; g.src='//cdn.matomo.cloud/terminalnetwork.matomo.cloud/matomo.js'; s.parentNode.insertBefore(g,s); + g.type='text/javascript'; g.async=true; g.defer=true; g.src='https://cdn.matomo.cloud/terminalnetwork.matomo.cloud/matomo.js'; s.parentNode.insertBefore(g,s); })(); } @@ -633,5 +636,18 @@ _paq.push(['enableLinkTracking']); - - \ No newline at end of file + + + + + + diff --git a/albums/unmet-dependencies/1-dependency-error/index.html b/albums/unmet-dependencies/1-dependency-error/index.html index 09afc56..f0117d5 100644 --- a/albums/unmet-dependencies/1-dependency-error/index.html +++ b/albums/unmet-dependencies/1-dependency-error/index.html @@ -99,6 +99,9 @@ + + + @@ -366,7 +369,7 @@ Sudo apt upgrade
Reddit - Email @@ -577,7 +580,7 @@ _paq.push(['enableLinkTracking']); _paq.push(['setTrackerUrl', u+'matomo.php']); _paq.push(['setSiteId', '11']); var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0]; - g.type='text/javascript'; g.async=true; g.defer=true; g.src='//cdn.matomo.cloud/terminalnetwork.matomo.cloud/matomo.js'; s.parentNode.insertBefore(g,s); + g.type='text/javascript'; g.async=true; g.defer=true; g.src='https://cdn.matomo.cloud/terminalnetwork.matomo.cloud/matomo.js'; s.parentNode.insertBefore(g,s); })(); @@ -596,7 +599,7 @@ _paq.push(['enableLinkTracking']); _paq.push(['setTrackerUrl', u+'matomo.php']); _paq.push(['setSiteId', '11']); var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0]; - g.type='text/javascript'; g.async=true; g.defer=true; g.src='//cdn.matomo.cloud/terminalnetwork.matomo.cloud/matomo.js'; s.parentNode.insertBefore(g,s); + g.type='text/javascript'; g.async=true; g.defer=true; g.src='https://cdn.matomo.cloud/terminalnetwork.matomo.cloud/matomo.js'; s.parentNode.insertBefore(g,s); })(); } @@ -629,5 +632,18 @@ _paq.push(['enableLinkTracking']); - - \ No newline at end of file + + + + + + diff --git a/albums/unmet-dependencies/2-pingnu/index.html b/albums/unmet-dependencies/2-pingnu/index.html index c206488..5cd69e6 100644 --- a/albums/unmet-dependencies/2-pingnu/index.html +++ b/albums/unmet-dependencies/2-pingnu/index.html @@ -99,6 +99,9 @@ + + + @@ -349,7 +352,7 @@ This is what together we should refute.
Reddit - Email @@ -558,7 +561,7 @@ _paq.push(['enableLinkTracking']); _paq.push(['setTrackerUrl', u+'matomo.php']); _paq.push(['setSiteId', '11']); var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0]; - g.type='text/javascript'; g.async=true; g.defer=true; g.src='//cdn.matomo.cloud/terminalnetwork.matomo.cloud/matomo.js'; s.parentNode.insertBefore(g,s); + g.type='text/javascript'; g.async=true; g.defer=true; g.src='https://cdn.matomo.cloud/terminalnetwork.matomo.cloud/matomo.js'; s.parentNode.insertBefore(g,s); })(); @@ -577,7 +580,7 @@ _paq.push(['enableLinkTracking']); _paq.push(['setTrackerUrl', u+'matomo.php']); _paq.push(['setSiteId', '11']); var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0]; - g.type='text/javascript'; g.async=true; g.defer=true; g.src='//cdn.matomo.cloud/terminalnetwork.matomo.cloud/matomo.js'; s.parentNode.insertBefore(g,s); + g.type='text/javascript'; g.async=true; g.defer=true; g.src='https://cdn.matomo.cloud/terminalnetwork.matomo.cloud/matomo.js'; s.parentNode.insertBefore(g,s); })(); } @@ -610,5 +613,18 @@ _paq.push(['enableLinkTracking']); - - \ No newline at end of file + + + + + + diff --git a/android-icon-192x192-dunplab-manifest-9805.png b/android-icon-192x192-dunplab-manifest-9805.png new file mode 100644 index 0000000000000000000000000000000000000000..0f1072d4619b191bc3f5aaf0c754c2f67e475c84 GIT binary patch literal 14660 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 WJWWfRE|~HWPC-Tm)F5U2_5T4TvTob} literal 0 HcmV?d00001 diff --git a/apple-icon-114x114-dunplab-manifest-9805.png b/apple-icon-114x114-dunplab-manifest-9805.png new file mode 100644 index 0000000000000000000000000000000000000000..d257c17e1836b17fefe5759e8da7fe3ed34f9e2c GIT binary patch literal 7143 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 C-v_Dy literal 0 HcmV?d00001 diff --git a/apple-icon-144x144-dunplab-manifest-9805.png b/apple-icon-144x144-dunplab-manifest-9805.png new file mode 100644 index 0000000000000000000000000000000000000000..221ed3dd685dff39ba39f6ab74cda922162faa60 GIT binary patch literal 9800 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 literal 0 HcmV?d00001 diff --git a/apple-icon-152x152-dunplab-manifest-9805.png b/apple-icon-152x152-dunplab-manifest-9805.png new file mode 100644 index 0000000000000000000000000000000000000000..3a2f305d335b332fe3e6fc2a8fcd3306906b0651 GIT binary patch literal 10672 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 literal 0 HcmV?d00001 diff --git a/apple-icon-180x180-dunplab-manifest-9805.png b/apple-icon-180x180-dunplab-manifest-9805.png new file mode 100644 index 0000000000000000000000000000000000000000..4ec1f53a637604e8b4bb51e9c252bdb7d4fc16cc GIT binary patch literal 13408 zcmb7rWmFtZ)MgTbOOW6WgS)#8It&a12n-%1NC@tl5ZpDmYk1PBfR26r9Yg6jZb zdB5E~XaDYx?yfpr-M8xAr>d@1geF887mEVx#fulXAQc6z=V!xz7Y5q%U1}7K|M~IK zRZAK8q6$v6|6F-(EvGK`;zey7_JbMfa~;!3Mc?(s3%s8Hu9pLjKP+Fo5V!&<$mw{Q z{9Qp$11R31or=f$Z86e{S>t0ys=&q2Bf6c@$=<2`prd2A8X+e}eTfo@NyN%Zr8FXD z1{Vu_Lf%v#V`X+^EG#UwFQqS3?Rq0T#MLzB3{5*te;jB!4upwbEj!(G)%Ro_vM>8O zq`7{%^87qeV9G18>`&{kv3F+%mm3J9EP)rE1T7t%wvx}lMfA`c0SQ#hx8 zOaX0~NW;E!dhJVc^@l!__)64sg5*j|Idt6ZI1h6*XT34}T&u`%Jzb`~ znP_J4aWt38Iz%FB_jBzB8%!xBD&kdMJ#!sPrCGv+%z39C+$3Tad0|}i0p&1_w__{j zmo}K~ztf1`VDN;4Lx>amjIFcXBe(trj|wkwR@HQ4fxf{Ag<}W8Jl}Q{_SsAj`n;?) zY@vhTf_s@#pbWNKgtopfE8uNBGtvGkLl2A8oZ~yH*-8_pTe~O_)D}YkP3yF7vv0lz@WDwuABrFD76t>8!EmO3Up=6iZBpg{S}=Czsnq zFY4}jV6Ul2OvqDlr#8)_xJc#<>?#>vlA_sMd`vYKmLizN{MoPFeIGS9x6$>C4piT; z-QK<)em2hLRi8uRh-O{{sOArQ1wf03bT&LJOpmy_zVGQ7YF`%+RV}V**;IlP==+C+ z2omDn7Tof_?u{Au?98faw-qh};8<8XLcqDg$&I0YG3pFsI0jvK)oatckxqL94Uuqm zd77|srQy*KT!n~s0vpL36N})YGx2L=3Ud*oe#hVsKQ(--j`_EeyeWz$gfjBxLmFQhhQGn>hb#gQ zRZA1+KH__BP7xY9xwoPTbi<+VH(w(D95idtVDj5y_?v&M)WxJMRtfd~5`;fQhW%d~ z?ViN%zr-22DmB}9dO|^RHkcT*Sm|>{uA>YuLkawXjMf_*yr7ao%SOLsdV=#=E?*+< zhVE}LtQu9RWkyZ`NYlWnjI-0zj17MZ5**ZgDF~DD$j}l~7HKo)zyNjkzVn3>6l-{2 zt?aXwMP0WW-%a4_1xYHJW?YtD;~tBR4#c_6i4^BTe;`u>^za=*-8srhA!DT$nwB9B z>)SIM*TAkQZA}c4zW1ZU9PL`7J4&!}8}BP09|6#_CHqXqaw&yg$t9OqVIP}t)1*Mk zF6CyHP!w(4f8Pg#waXVrNqwf+dT45)Z=K#SSx+jg9ISFv>PCeHr@p`OuK@<2$lF-1 z3T5Te#6=#nn4=9@24BS@`i5BJ>9G5Mz-Tx0(o#K4B<)FFIn;{>;Gna(bUG>4 zY9I+v&?%btb(xTS=6nj(H80U98G#9)62P`D@rTl5&LMPGz-4o>PkO;-y-qqy5xb37Jp&&=NV zLeEye(_sOR|B~hy9u)=vO^FtRXNbEOLBm&CDh+cczI~n@7ujdcosaepolp0j^Gz=I zCtsc@zg$(A_KCFbt2;NZcyO!^i{El)DQHh4{rkO5iIDN9=a%F;ao-)>s7rGLd>*!W zzL1~%Jn6XY;|bvFSV!dv7qEt_&0?5b*QNG7J?zSyO@eu1WRMeaT46i(yV;&5$fLL~ z4;Fq0+PTQzyX0{JmxY`Ejo^0mrbFcMv1LGtyW{b%W1P(0kOmFipy|K!)Z0zkC((c% zf!qj@RWA#_$3s(E)5in70hy<}v9sqTEuz|Qn`4TP_TOpPrqs=H652}VzpHAuhyUJt zE!j8s4RinG%yFO9KO52ra6v9N3Rk1%oJCs~o!mbYB^`VI23`8;H@b9utnZ=W8pVIT zExAYdU0IBY?PlF>kamg&{IxR$&;8Aale(VYkgDvF1Uo+k%uV{M@7ec&*qFr=J*4-G zk_erjyCBocB8k9s&a`hzcg)rB+aNlFOPr_`wLbm3-&}k8cXK1=G zFke=hBfjQLj`1!0#Cyzl<5>jv3f<2fmB39FfQvF7*ACD)S5!9njPw0Gssl3+znYZ^ z3zOWUKRfMtqk%FgTf5fz^muanEC{iV=YmGiN&XxEJ->mEw~)@c7tU3c&8yH+S}}J?w~_jmy8`I!>imW3SjlRVnT` zAiWgIpTk&+WfghGRq5@@Nq`8!pT})>Na-Rj`)ZV~_+)owg{}V>yY!y0rUmUB zS7bT<7^UK|fV7 z<#e6ijeU_$I7-%rupJw|8aVXqyf;q7FaFDP^y>nCM%sC+h%^ZbBxcSPPl(y#6_t`} zK*1BGlOlkcP%H>{DDKbWoU2^8aoD4$D@@Jk;${-xmz$0^2j@^9M@PNS7=`Uj;-bwa znJ|;$=Qq5$JG-j>B4w+S{gAaQ$>I+YC&Rcq5%*Yj9w_>fkiE^IDEZG;SGT_P3yb6f z;*Cb|GiGw3%O>BtKCZ{VKnp&x2mJa!TP_ ziM-pm96FQzL#fOoTS)8P)UUr8c2%I1_Kq(i@!0U52u^z*gz<@w9>rI8ser8n<^D1M zV^@$?yt+Cqy`6h3clu^Mi_|`7Nc`y;^U?op)j`)h2(T$qtBvJqZRs`8P_S;=^zmCq z3KhT33IM(CKv3bCVYN2FC1CHHaG>eI!+%&Gq95MMH3J&Ehx^m%k{rbcQnLA zqat(}S6#|HO_nQ9?YJzyu$OPp`?W#5Uxq*)_WB~Ha&us9rCm#_*G-qcHV3p1>*z!0 z&(r=(%#vg0V-S4qb>}zddH(*J==MJQLI_Iz0eUM+s8w$37+$cmfx zWLWrE!sf&NR;lDRTLcD1-CDps(`0Q4@bkhSp+F}U*CD3Vx6LAfR2_ELM+<#_)m6~Q zy^6bDha=|)q=g@?<{}!ZhJJ6+s$|?sHFQ3jo+qXjtsR5hHX>Nyo*m+n+cqBjWevtd zFH41ek6SQZlOFVKE3N(3zev@)@85*DZ`~d{4rzh7qi&s23~AK8FVAxzm1?t zQPal@X3-L~wE^kt+S_i@4qp8a@Vqsaj-zJrfk1ScG>j@ty%acV?1iOMb%qPGJeJWs zJUUP7f6plNP*No@o*US=^ThuI9JjO?E8);#55o;pEo7s;`k~B(ts=hV50Dhxl{-hC zF-ackkExO*UJ+kkxW#`kLroy%!zbHMShE(q``f&hGZ^WY!4j&1226xxL4vduN-o>g zZ@B^}F)ve^e{Bbj850p+;KsYcv&8oAZ7z^!?k%)c+B!uI)FWV>HeWX{@c-dgeRrj^ z0hB8wO1!TCghBm7AY)dsNS4ThkrAp6*I?%Ew&tIl%!X-GcWB6eTI0Y1E={g=^t9H8 zd~C!OUV>WeTBpAe+lsd=W74$oxc9qXT7!TROzJ$={Wxo_G`Gh5!vZgkJv${HxwtFI zB}Z9ag@-TuU5wi1xvN&iQiB)a3Jqy0r0coh+!#5G@g}WQ}0y zw~L9mcTv~2i0`6G2KQsXJ)jJ|{Wy5$r#$vF8iS zC6LZ2S@Yzeow@7wz4Y)$eHWYCA2er1C7%76ard z{#he^5BvMP9`3(`&?Glm4_Y!X#f%y-u=_9nO2P5bR{+wdyp)>^AF%F5nz+2)&ko{5 zoC+lg6j50O)?}lVBsZT=%mA6x(bnyao;8$t38Sn_N{(fakIHDt_itVsln!aqNrDqa zP5S&ol(6{0uR6j7yPJK{`h1Hbp4{DusFzjU1zDj=WF-DY!I=E?mnsBkiG5$`197+s zLxMtsKXe`ANQn;;#Tm?guZ1KYvw;qpMHe+wQ-UOV!9O~My3`451TD@pf&lp7g zXH^OHXqgsy3=O1f5VMyE(J$j(1oMDJXkGZkM`P9}5v|@?)*7at4bZ^_({ajxEhf2m zUH;G+-SsIyD%W#S|7@Bm*~ECN>`!W6XD+EH$F9coP4G$sgObCKe~Q*t@rCXD-YsAy zR9;XueYOLJBBK=V|K=za0Gqrg+0a8E1c3a>)(UQQ(4l8CvY3_+KNtxaEH3{2M>do74Q)v3oVxl7$Bfa>;9@mHca~0nV>?a3{=?36|bT zvxr;@P8Y9*-N>GV872`Vg6uJ=-eVjc)_hP53J0X?6q{bMf*k!_Qs{|;9 zw#1p_O`pVmpng_HPZvYpclVbGKsU9NWdmwsoswfM5pLY*pz~L9s%Fx%oCD#aZo?RV zUI{00Vhq;h`kfE4`7tA9UA*||p!L1UGmn4tIuhMnpVti)%(>SLl*Ru3O56z)epnsf z#PKG3U+~`ISmEXQPI0~c^QLxe(QH6fWXeduXWGrhE zfu|m>{!5=FwE#n~q!;_}$k~3);T;Zz5n25EqDJa4HyCSaw8xyv>)ENNp;z=mSJd@Z zqpEnBFEz!#ppBl`nrYVU75jfJx$%_}Qu7*2$^PzX&p;7=uVD_WsDVN zkV-iWk&8@+&iHVJM&~3#?#nIZ1&e<$P3AgvV-6WGx<0yU^?a2Rt@}Oo`}YvU(7#ip z<18lP;hM$uc_2@dH-V?rTEo!D&M(gnC6ET8Q?+=A^oo2yn9!?s_A0-%ds-CLy;hD` zgSFV4<1GMt#l!RNm#s3Q6`^a>!1HbEF}_EKnY;km1S zh|?z@zn^$1IV6taejRZ~nmWCS^@~*RgqW`UzgLTQNQWGDWAmu#b|$}bYgbjI?)l>M z7uIGc%$spP$2W(Wm6-KgF5v3?Hz5VU7`8yKqvt}XFWRP`B#OwQXQ}8r-yx^ix%PfY z=OK-i4K%@%SdLgNZXbxGr7fe^pcNcnj<2OXJj9} z3qwmiv9me`xY#&rydW`T#t%Ham(5wu7y}zbq_jv6c$t&gpjELX+wp{;2EHDGtg|6X zHl%0(IFk8YuUH#Qhd=->!8r5xwgrUJH(n|E!xQL5Fxu2WK{pPmKZH^H!i`nYbR6^3 zJ5&n6Rl@{uz(D;}11r%d0(>)xnUD9&9^b!EL3E8j8!u~dCA;&guf02jPxhGzb_2uSqNLkiz?23C)D#t$*SU?mO=k}TR6;EX)q;^Tm7sfj{K3r`@UnkEvZV+)2Gv*vZao5hg8ewYrA61^Mg#g?t7CS z`n@1+d-KZ&gbdZZ$xmpD1_}!D6cIQI)h8%LsNJ7n^`at^J6mcdsImpO>-3enRthH^9!GmZFM%^{3o`CZR#= z{xu@Gh~VRZTS@G$ldZQ8;g5^)J9lH;1KRlH!u|z$P6J7e(z-ZSv;x~KaPGwLAIQ*K z0_-&q(LK$XMQ;79W$ezaReQrL76Y0DA&vOLSn&fnjYvuPUpc~KeGhJ(O8ndQ3z!YJ z+YbI6(koEjqWa#h@vpA*!#)|1Iy8cXnL??R5%?Y_94NSIb%EK9Ad>OdY`Wc`-ktofBx6P(W^=%xP{X||FK+5*&B0RsEWCih!`+%kUz zrWF}KbEl#A0;tvE7?|+UTXE5HBW{p*W@1G`d^78a*Pl3RPjl?(SR{#|_8E)rqNUwT za5EFyAOIV|;#VSH;dvZ20^*?IslcY2w|_|5k6*KQajjICb!ie&#Ns(ZW-Jy!m#oSP z6WDx)2%axVFA_NhyCSx9==G;uPztuT-#|58Zw4`t#P~$5_(t=w?z5jQYW=HQnocZY zgmg{zs=57*!u}qJ9IU;8wOy&4uLI3p%% zJ&YV$w-XiR%@wqN2gwrR7rf!*h&p(3;~2JO_!=If5@MnMd0=Zmq7`UfleYEE%IO8D zi-J+|+dbX{zR%)r_^z*@K|9C*Riz4jLW&v?fg^gKD2>6{tMczwJ>34uh_M?}@J&+C z=d;_%c5-1gEMU(pqNRwwou^lalZ0!|y`~9Pc1lJVah3S0wRWAeVnF8A)a*fpkPEN? zAYq;{LIrf?Oqd;UQ5f!%&p4&jXJo1ti`xTJ@4RK;KKyHN;n_kn$Mep@iJVt@>gZ75 zd2L!?(?$j~7M}GM(Ko1VMAv9fCYF#z9M(Ava$JPgj2hsu+4L%^=xRQOl#3Uqu`k5y zSlAB{6#->y?Sn~rnvTN;!&Bq~Ilq|TzIUann>;6n7j7d7G+w+Wkr(-KuByVofR@oe zF#_h;V!{%}M8|Ox+q2=b#lT%PZ3jYGJ`$?0B|0#p0zgoCg)`__@U@pR=Zwc)J&t(B zW@&9o#*d&clo$=w7h;{_gj{<65+wK&01^G=kuLE<I2$>CQq0xXl}ojWdA8$)Qy^`a4sLljf%mLZF8cZ;%_?2at* z;O?(V2Z*}e`+Rvv(%gbWl|xJQARE)q@Q-d4OfCjUS-v;~0BuqI@+k{a6)qvbwS4){t$Qh=La?I~wXr z4p|a>W_3Z=9+2Yff5L^5V|GQILs%gomAJiz=K01G{L<^UvN{@s!@=~`IP}yf;I!xS7YFl$3z`8VfDLjHIpa!>e_DAVE~n6=j8?V-bq}*YzyPC#9yHZax@O zC9F2ZysOU7t!_+xp&&I|*#(sk7atWFn;JcI;&+xU*t8ek8|x-9c|W2ZeAPq?()zOS z&g6r2P>r>Z*}kRA>%%miU}>gbGNUA>jGvQ8z8ZU^GcnLiAhOZiS=)T3x8JPW={@H3?kop~kr_3A*9xnYd9vKj1}*`s z4pWYb1lg_J7T_9p;>RJ+ zkv;DFhlt#0e-4Up<&R-B_ipzrM&uQv+KAH|3Rv2H`YV3k=AI>n)K7!&Zj7sHD=MfB zncH&FFlLFk?u=~hfwt%xCbpCdy> zZ)BYYN;jSCLzWs_J|L=YbKf`P?2LJ2`RwPfCuis^!p58xv(ltTL9^^{!sSQI1(4;0 zs%}P5XiJd-H!o1DkuIF6e(>AWDt|DQl_Rgl8+u@n{V!dAfI;z#wIWGSg-R0v@pXY%~UH2F|5Q;^z?g!oQ$&(>s|= zgzF5_%kFZH(!WL-5e^C**`LPYCrF2Y_u52`C#nz+8&Xu3IK=rHcqfo_K06IJ*FE7Z zKE{N*@jt+SPOC`AaPRxd=KjAT^K_7E&iN8*^I0m1(FU$Q)qgw%W|XaTb~e`{VVcC* zSkhba3eGl|qzWlC*6Mw^)EugTBm7B4QRN-T8>_TKo3C5FYGtixXNNnPjr_}$H-qis zWo_2QzG6R~6>N@veHlpxF|`$Qc&46iZ0~%X3(1$ei`=oo-%pDy9IqJe#X~GZ!e3d( za^i!n-p_FEMoKo4Q<&FHhkxg)9;YgB!M7itrLHX=4!IA0Ar=9MzHpB+a6)T`x3Y=p zAoa7_mulk+#Zr98N`NK#^p^pM^DSO?-#Ge_A5tK3J02m5=5*gE^PuTk=Bn|){3`BggF^6A`$tCyF(djEFh^A1f?9M_DjBeL3 zsV1lhVR~rSuWtTGWs>MtA0w0_Z#>3%PlK;p-s*j{J;wqueSWvEln@USzz5ZVd{~Vg?{@0;y4sZd*NE&O7pqOoR+ZIkgy*~tue_Z8P)@6- z41tA5!~q0U2TuT0m!1`t&*tZwH`O5R*j_y_H5$<5P)EU}^`Iq+qjaRugo->KKXA|R z4AFDF$Wf&QN>mqK<`vWU#I~n3t7Wl3-NRP@C&3Z}dW-tfcH@D(W-)_e2f0fp{Z|s^ z_IN=xc5VDmLobyiYGj>NwKTQq>eUTgN>cJyn^znpVtemJH&Bv_F|~m?)6TVWA@^IBa8W|;IR&9e^wZ;G zFlYUA&DiMi`eU4Oy+@c>AQ37(u()_*ai!rBiZChZE*vC!ia6foY-!2{;b{s zZCt3DVADrDX2KLP-kK4gG9ss6h@7_OVVxT<{KFFT$nlLL!%)T~;wlZS?{xSH@k~0V ze5>l}O6^mmLJA_5L?OfyGhoK{A=Eqn5DU3jbw`3&vX=QvSptKsX@dbbmySC(0fs26 zA8f~swH|+DDnlkPXP5BNg~2~p5m6L7v^!-c#ebdli&IP1im4hK{2QF&+Os{!&8JZ0 z_v(A>|4WA zs3CO?t)7$es4fjtM`IV3;tdY4NlRDR*%rAgv2M4{`0g?^A;^>sOD~GLz|sd*kAWPd7evexQIB? zw~9k#ZNh8%Pc%a$&MszB>e&%@vDsP5LQ8ksO2vQOTjq`_T$=nXPX-OOYSHP_FVR-8HFKu4GH?{ea=9jU=q` zW4E8DLx=L8RiSD0mU3xSt?ra(5;fsP!W6p`?Q`fsHA*JWvHFJ7{7cBEt@6WZLDyD> zhWR5e5ohb_^1=EJTpHBJ1-2wFStzknu@#%KrLySkVqQg(MS~{e%4f?&yThi}P)w_e zT}Asg+au;>U;moVGo-7J(1VHqx#vUzLk)sL8dta-m~O$Q2yOUvJB@{NKc~!F<_I^s z+8HThjb<@_zz9>SQR3{l6JCgnyEiYzbSm4R`Zlfo(qW_~`HsMj3O?A>)XxQQJBl=~ zFV|4@pW)dv1k#e2q|><4AkuMQA5HkelLRxYbTM7ZLTWPJ@u(9rR_6goDmT>2m=3d3 zUmec&)^X9MG+wC;vnOk|=>`qm?d?tSF=3ntZKtnI+x5!R-b(uyII8;3zS#o zMj^GgQEMU5?NGZD@BK?dP_9G0+lzNA)jJi!2Qjbd?JOC=yEY61CGFICw5ddg5o0XUoY`phFm@i}Q z1qu%;(h;%drjWPD$Z_9LYaPfya*_6-Nc?+z;f?ti&m?{psXC$Acd$~HSJ-d^cb}vC zEaDMfW34bhj{4YInfT`WR&SZxUsxItBxm8v z*~C5v1(>oxs483|0|qy$%(nKqq7FM9;Jar^g2o7?sSDnB7rI8PdU0)eYchE z;^D29dMgbb99R1ac^Vi}EDluH>e&WyVsml=2eK*FMOMeu!z>WH+Flb&EH1UeIdr1* z!qbS3qhdDYkCl&jNEX*xV1*J?#?NS1_{85-VNZDLz=Gq(*o ziXNpRYnGd%Nc`pY3cD$%+VHQ^TuU=OpHuwC4kO_)yH!}~ROvHYtooY23@-xS23M6< zxDtk;lx_Oj3c_w+HP^5ozF0P z2V~`Ph@-f+#h8qY6g*+JC`9X5*3R|MgSjPKtKU=otqB6m zsL9vVxR>c`dzgj?&x9~pF82{V&Sy0v;e7AcjemN>ga%48`$tBlVeU<*lAb4G1R0Eq zFb$Td(1wHD%(aN=!A)P#tCPj!8G~Uf_9hX0+e;+2)K4LlZ}n`tqh>nq<|Sig5E&An z2EyK=nR1(~P9(PEz$<^2=u#fA|1VZPMDVJFQDXScnMs?zIvuqOrr|_rJ0$!g{RPaa z_mXTjAI5JkNLo?W^NP`CkkdMONP!An^j2ccl=`+YYIw0$HlgzgJ zFg?thNhfqP@Qx@h#cvQq<5+pn2bwtt#+r|B&J0q_&Dvp6!7lP6{vK3VBP@N1TWrc`QX2&HSuyE^5a zn$(v z))hb5q*1kAQK+pO9io)>fNZi#vfXM(pyTXRMtT+R`r77@0K!Jh_K~D-fjI{dALF7) zAx@H%v{QFU=B#nCe@1N}_Zn7Mbw7b6LFT>Jk$9>y?>9r^+>t?^up958JM9uSOoo8v zWhHq^0F`_!w2Zz+PyR=*{O34VjYP!>1tY*0rNTmAxqu7VQV|y+#QoKFQSoVd@GINQ?m z2G!-_B47oqv8~913T0R;jUA&aba&^7ScCWMXo8!%pTFWB&S!^Wtom!|=YSloYLLb! zpevp38$%XsC<6s+(TM^bAUTCZ*@0%DF483aCCsjwHFD-eD5zxWkhV_OD)9Y6*&3_R z+@~sw9IhCgLSq3-!O_Skw9GDpPLq6T=hKNQDL0a10wP(k_$EeOT%GA83l^-{7V) zeT#mpdVw*TlKh?~P7#v}{9!c4Cy7ENy@A`}U=UJ(XIWc0G{NQ?j#DD7pJQhx2qM%f zB)?APO$5zI@+lcq6uv&OpLpxz-bVUtG!^{cDcfXuNNBc@1N6LXU_LfnT*Z!`ALbwR zvz0b*m4B74NPx|OJHyESNdiAT=+g|tQ_5cJen}=x(HW_SHiv!RJCvxgb&AozONSn- zf}tdJe*xt-J^4I?ctl*+)E8L#4V;PP~h#N~UIc#1kUDz*nEhm!q^MdK?1`rx_Z*VAql4nbJ8pvKAJGjMze z^^o{(?^FpQ&wP#h(e@^zWEP)f`v{L9s!9y86VIw5=xuam zH2f77Z?Y2|YxNk1YP%{};iK7@ed21o(PyH2GBaBIiWNmYSgGGtFr$s~k~kN*My-8i zR^~`5g#0!xX@M7#Af54S&2*i+2p<+TvA=63A2;u~Ecny9W0Bpc>osPOxz@}JYYYT1 zW)wsADa7)xSaC|L=JZzz13M;RcyYrG<(%KH2UoV2i6E3Y1SpI?Y9i%$Q7x+KbklgWm&&^`4cp zkA>v^@;0LUzofZV*k_mQKwDnx1yS6p*=u$qx@qis_qBeX$`5hRpmt@OK0lmcF;5@z zE)$6r%n2x+4<@f`W!F?_oL^t*m+`P*`77Fp@*1T__9Ymwx4Ov>P>NaE{WG)m#cbdR z!|4i!zkT2wf#prUxAna#PSr9@Z+}jS{}>4LSc#vyj|wZ^eEHt=JJN|^!ZWy}4-b<^ z7FbLnURmR2$UWt z4JhrHP<|}PJlvB9j`e{M{Vlrl^al4`o9dsMwS}Dv^6RI>iHQ+Lr5W*O^sNrY z+@E(V*p$buCo||sU~U#!70uabxt zcTj(UX(prK1(^LDcJPV{>Y2+BE& z!v-?J5iHj#+?g+U<^NhbTWb}gUiLh;P{qD+J~(ok8x5g0Xdok7KRrW)mdW`Vwb*5= zYOZN7J~sm2p$hon+y4UfRb%b| literal 0 HcmV?d00001 diff --git a/apple-icon-57x57-dunplab-manifest-9805.png b/apple-icon-57x57-dunplab-manifest-9805.png new file mode 100644 index 0000000000000000000000000000000000000000..d8b5822caa286e808deaebf03577257a207a1d48 GIT binary patch literal 2918 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 QWB>pF07*qoM6N<$g3$e?p#T5? literal 0 HcmV?d00001 diff --git a/apple-icon-60x60-dunplab-manifest-9805.png b/apple-icon-60x60-dunplab-manifest-9805.png new file mode 100644 index 0000000000000000000000000000000000000000..4d59c8a2e051c2f6eb8f1519fff1f8b6791e217a GIT binary patch literal 3055 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 literal 0 HcmV?d00001 diff --git a/apple-icon-72x72-dunplab-manifest-9805.png b/apple-icon-72x72-dunplab-manifest-9805.png new file mode 100644 index 0000000000000000000000000000000000000000..55550c9f3d22399fe228cbf90e89813b0adc3440 GIT binary patch literal 3891 zcmV-356tk1P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D4#-JFK~#8N?VJa2 zRYe!aHwZ+fCNCtRh7x)cDbfX{Nbk}`s(^#Sho}gGIx0nq0)hexQdATKDT?qR2uO+8 z9mXcZ_ujMrciNua7c<5jD|D4PGW#l%abm2= zkbGnaTzHrbH)fo7;JPUv83H#ZUvo|m&$3P!*M)qXLOww`AfKQdkWWw!_}370rP(e0 z%sLri_ByYhEu3|N#+XA=FK(bDln6+2aFG{#EUH(pE{P?Rq`8^sncPw5vto@rC#Z{ABnd@Qq*}FVPEuSbUAnYX zDbUU{$vw_z#u9l-P#ZH%HKIn18crh41Wd71;dJTiMLO5BV}(2+2=i!YMo6hr$12GcNt~&JKq^i#FU`nUh-G| zoW@e2LIvkQBSBhPnimCY$w0Hw`R-^TW&{l~TO_$qHK|;=vU7mZK-H>M)!}zAvz;fe!zUjOI(GeLE&nqKc%@U`qp(0{}$aE8mhZnkI1!N)G^)YLl zGKYeQ2qJu^7OJHguNAIwIthaP%JX3m@`4I4HL%0Ws{wqOIN z+@T;Mg8G`ZUT#w=C{(Lftz_T6eKKau7`gc3i)F)x4f4VZFUYmmUMo*O{j_xJ)=gTs zZY?+5aD!~ywoSHg-!Avxf4@weI8g=+7$BQAZPLGd<~-MT?b;>RTyu@~yX2Bfv|s=J z{pFo^-jUtAcT1l>ee_-9#*LG`d-qE7=FNlh1OiDiAi^jY5kYOu%q%nUb?eqi=gyt= z_@aw0l9yk8S!U0kEys@^*TL1QRZFH#o2J_Jzyl8i`&leszWg8Oc;>2AtK_DeZqoi2 zUU;Ew-MUrg&6_8C_Uw^avt|YF?b)-ZJow;)!Ov6$B8_kn5;P+VK|6Qu3?8F3ufF=K zOr1JaziHGTbGYJ)EA%>pw)a|OC#YV%da`203Oyb+Y?$_kpnLAQN0u#HCNpNtkmsL& zK1(0J3?~Vi<&-_Qh=`y*W_6b717>u=1sCWs1T0**P*$&Atz

?6cCQO`G7ociwrY zbno6>CQO(h_uhN2lJm+dujt>q?z&6*_3I}iM~;-SW5)*jv~Al~Hg4P~_uY4&%$++| z&FibLzLNU&>+5yC1WeH0pX8ZXf3v|Udu|b-lRhFTg{lW57}~+N&N1r0bm>y*+qbX! zlPz1e1P9WhMGJZ4kw@gffdevd;K1N{$ia+SwrnYrCr_5Q-+o(ezWHW7$91rN{d&Ex zNs}h}{O6u~PTI9=r`H-aY9vF34AEl(N11~4oN|YPhzJ7R%u;WL9taK~DJe-+``EE# zN&pTOQ|Q>SqiV{iQKM9=aHd2b+Yk6n3=$VFUaSLt_~D18S+i#9hvvnO zDg=S*ah;`N#fmB*Bt81*qZ+*|A^0C67wFKTgEVN+KpicS4o8luZQi_D!!??OW_0S* zN&8}Qk3asnYMvzlvPmKEdzh2W#h4h^itFW+F&spVAW9F^n3+H#D1$_cUVQOI89sct z4hX-26KAlGJ@%Lq0AY}2`|x-A^yxBm=ukDW8*jW(^C|k0B3yp?<(iD{-@jjjz#DJ8 zA$9B4)qa$4%bwFfODrxK!$H&t0)xzENj$%dY7ogH4wNW0fBt-pE;w5pGLZ-k!<2gW z?yZDaf*35}oX?mRk&Q%=&yb6$K^WOO&L2O=H8d!2ZaG~HaLE=fqDm0xY8Fc%AxX93 z$dMyzK7?~Lh6qH6CZQu_qhUDXjEoE=?6uck(`=Z5!2p`-FM%~Q%^mm zQHg;uKzs-h?9ib@8p0ujITxSN3N(x91ip%E5C=K*C$y7zzW3gH>Z7#864%{(Z)}!@ zVnPrYY4&+ZG!Qd_z(BJ}0!7QH{~_EH-f`MEu0RFHyZy#D&@^8WkpE4k!45Qz!mzxeynM<1z1C7xGShM29+cSj2` zB?xpj3#ELy3Yr8SJa|w^;uzF0tGO}V;2aK{x!KBucT3GUq#^iI@^J)a;NZW}Fl^CqqA3?>FCkqZ)+MC4Ap~_uZQ8VPcSlnUUL|IUM6> znAd&&`RAHEk_VBsmoydh*}TK`?r0%q1R;2$mzR)TlRPpNAd#bvL-aulND@z+I1vo< zm?GIVWZ~RN1t9Q;AAZmj0jJONN|r3C&*YeQ#FC_#5tJU+UUz5^c>sxA(V|7Q6iV(x z7ECDrAE16rMp6YM;wH(&O4WWrzl1LJ+GQu4QHh z!?$lg6V=cbLOkVF3T%+{(n~L?ufcJX5^ygj3OQusIB7di1H7w~neUV(Qbe5~!h2GD zB^?mLSNAlgM)~s6!<(6>B_{{ZV?GqS$a|;|qE)sGi*}J*LIjaZpW|sD$tDqw_St8j z$)ZJz^cv4him#~ecF7b8qE1kKGdRooSVfPN#flMtdgm=eAT z4Z`1$aWh*d?04zXMf*?_B8U3>@4wZ_+j0otoxIy6QzVEgL4C~{4Zl|C%AV%To;g#= zq0PJfb|r}94-LSS@Hr5|oQtfPDG0|nY;q+WIG|c+pG&%6tB`*1Ze(!D7A~Sj&{gKJ zX00Pof+P3Dk`ID}}pvnc>Y6zzm%ACYp95rppIs)t|qV#h!qSXO!mgalSpI>`^?4o zOTXH+YwKSd{#_vVAt$0g_fayTDqvS}ncq#BG9^nNo{4NOnL|ND1hEl35TB+w3TgkB zUw)ZM$;tNDUw>sDi4upiWh)*7q!3S{NP{r@4F4c4Ab|d?lLZ0+jbJvr29WdQlTT*p z1CfDq(<1(9Lqr7CH3M`|d|T9LvNv)T@Y`>{Wu6ha{`%|nn`fzq)mGb>dtrWThRCi> z^r8Lv=bw_0kdWmX;UD6D{qfB(JuCsGRAm-;xe zy2g+jghdcPKq+0Yj^-UWXO?69?c)|!rOlqztr%){80$8{RtI{SKX;*>#bqfX6i z-)a-pL)$Ph2F?~4YDg5^Y~u@IC54Is&Yb&@G1Ze5nO$Sa31Jb`(oE5O0|6KS^D4h{ zrjCP_5NT|qK!zj72eCQ9e?K`B_Y2odTx0s-KbIZJp3LF=-Xmm!v=EkfYO?~MBmn_L7Z&nt!!+21O7cjQ zviGC@)Stu!WDkNkN?GS|z z#5DbtM`T8J*O<;&&6JbQJN457vRq0Nc6~iNaH7n}X?8_|xfGg(KOrpt@y8!( zR+KezYU}_(8%P~+?o=cxw)x+QM&jV@wi|%V$nF}`nGiBTprIL=r6|S@RJ%hXJBTby z3usgjS^OipV~{NIkSF!()k}R#PK_E8@5RI@)8fnt41{~8EdKZUKWiUPX4hD9LRbWm zz9$z>|3@@A9dO=6ES7BSIg&v%2s8Wi(@%AiCIp|cu+^nhq4X@8bSAiR6oh92N^RL6$y|**$~t@t%#5WV|2aR9jUVA5t7{CoLD&QV zisTK=DE;wmzzh9EFia;D&?i1VUd;|CZ|83oECJ!rxyRK%J9r+lAQQ4hTF8%xAPW*O z*2qZ#2&Lhor&+0ceEi^?>)z92t;!NkQs_cd2>O3UK0!GkpP(F&Pf!lX{})|nfc}fF zapp+=KY2S1Jmr~{`ELRHD?rZyaXbJ3002ovPDHLkV1m*> BSz`bI literal 0 HcmV?d00001 diff --git a/apple-icon-76x76-dunplab-manifest-9805.png b/apple-icon-76x76-dunplab-manifest-9805.png new file mode 100644 index 0000000000000000000000000000000000000000..33725392bcb4e3fd7b141ad2663d8d4e58fe37cb GIT binary patch literal 4200 zcmV-u5SQPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D5B*6*K~#8N?VJaY zRYewtdjJ6eWtbUq9-`!&lSD~^NEU=82Sq@VP!d#7Sdbv7hyntF2#As-xdh2(jJRgZ zp~^Bx&ff1pzrFM5*_oFHt9H8TFW$TH^#4xoX3PvTBg=4eYQhL}>Z}LJgcE1s2(HWp zvRoHsA_#D0ybqb0m42Lsuya8NGm$Dzo`W#QiA*nri|pvSy(!n#m?tt6fOy2ea%+MpRJsfE?wG5 zPHL!7p@QU#PxMT9h-b>jozIRnGMun(W|id2QAC})ioQ5ldt! zVeQO3$(uV#%9k(iBq9_LMH8|Ym#$`o^Ifq*h7s1-jQ7kbK_j1wfN+3`l8Q7kV>Q~k z-WzSioUmb@uc>DGNdEl!os*6R3KlFVW#U@NKg_?JGDH(GC2WW}EXi>#)#tb-8cmcc zRZ5aBDMLS#Vq%na4{)bw5a+Pmlk9skO5f|vzOG!?2QnwoLZ#-!He^ za*N{7p+mB9<3{=DqmSh1(WA0z)hd}gcdnc`aYE+Jo2Sp=^M@aPsMqb?yEkwz&wu>! z$K}BXAC%W#drj}>_^r3zDqFT}krgXeNTo`Z0&*oLCQ5g+#yN*j5HVr(&1flEvSdK8 z+itr}CvCs4UAtCx?%XN6cJ0zhR;yM`Co*>ISb61@SLCj{?vk1{YX+_d5as_~yLN3Q z{<-I#laV7w>iqyxcJJP;{~kGVL>e}17`SKg;>9v<+_=DZYSt!ZqH_+RAY#I5ngN=1 zTfz41*(0@T)zZ&3YSfVT-+y1pdG*y-r9+1fQonwE*|1@Qj2SaVuD$kJnKf%x;9iSh z!oVYsJR)`L)|H79C+d#?iID%n2OmhIMvdf+H{OsbQ>Fy2=RG@i>KCqIXrXW!i93*efPy8&(o(*S8c%8pl$EH_nvB%y%xgoH*40cQDB}o-+Z$? z`|PvoyzzPK*RR+6A;;ba+O};gUw-+eRIgrLR<2wry?ggoUuMq_88SrfxZ{q%cS@*! zX1j9^p&(+yK$*DKs`3bicE!iXYyXM~KlRj8>WI;R0Rsl8^G2J{5?)BIkbZBfYbm2&?2-82M%dy4c}X~Y#F$A)TmMN_SRWT@mE}NMW8W>EO{?4Abrecr_A9XYJ`E-X0{|IBnBpjvnP*Yf>eWk5o;;}$%|lHh5kYa_m?$X($L_xSZt2>! zt42?JAn~rg zUOjp1t+!;@uwgnOv;>pev}uz@PyzzZpU+%RT7cGZZIdQV)U1h?mXP`L=W9Ytbc86< z85=xs2Xss*+gvh6f~XS)2AaK+n7x!bUM7uZFcGu>e}i8_LpX*{<1-Wg{PWM%2^cYz@1b6S=U1rXlsai$yYoCkRH)zm6oqT@J$q$NAGchKFf$nCl#OF>_ zKSZQNW30*CaKjC9{P=N=oS55$2@~Y2ufEa*l+&ZUlx09(X_tYXZUG!Gi-S1|;JX$>u-%>@#WIy0s+aOO$qIu2Yt1A*O@@`uX@T ziet#xwr!i%cx3Zr;!K?UY5Vr=8U!fPIrsI~Un|Kkzx=WihbB^Zqj^*lFTC)AlE=M# z$H~_+gPbx%6EP=@AW%F@JsB}#gr)~*3K~MxqfF}Av!{~v2 znk3KW9lXmWLo^Xn!aABIDM}^4B-y@%Db1ceTie%|9;pXijhk+|Nz;$(ufJZ+mHdjf z4Q*^Rl3a`DP)*?IZEp?mu2}Exi5X$62PR!s`l6L2awSX?N6mL?K~e*vCmBBfqG@y` zs1Na1)RUwm_8C+W6xpO1lvMUO?@ILE8SS-5KVn8$Ei*7hC$?O2vJ~^QtAuBkWj(U& z?j52e8bs#4Z{I%6%?JjV92Ehn2m!%gC!$?9-gu)1kY9fJMLQkb$2s0v(|fl|rf480 zgwg7u!)Yg2!7Ep;_A>QB5_DzNzVljhG~_bXV!C zaS!bt?)&Yx--JPM;C}l|-i-_{*&;>M2_qL`4bZ>;tAt0;Y0rV%(ZEX$I8GgjV@JbS zX(IAb0#O?AFCan^9LUFrkfas%xkOM%w!JZn|E@zuKQD_qVa?1Gv3pkWSH->0oxQS! z?4DF%t>>o-dj5w}1`=@iBa)n$$-zPa1v-(` zMUo#{h+kg7lWC_@)^HJ3!pg?A(FjIAisgFBoz%w9KmV-xR;VBiA#Zb$6b#l&k;x@% zxQH5I9n3;a9trKF4BvkH?FDMi53+kmviSb{?=M>MP7gYD>ZDx_`<<=_zRrJ*AIOAk zE}6qYR0tbv4r#*>vdHAgtAYp7E^pqvx(@^YLbg79_;8&R<`cY`B{k5gwT(l_;)lV! z?P@zg!5;)PH}hm0Yz{hQ4;4`%j6Od348MJ{s3X_FI%$HU+{tU8-aCWjT z(0yf@jWUa8K^DYYlIUs#2LfcPVfr~`4;2v;rk&L*&zmB`VQT)tcbhLUFilDxYCs|% zol=+C`LLKnmRp28k==TFtVcNGG`Xj{$NsWOdCU6huTA8-5FCt*(OOE9gK3 z51cgh9?7L0qzCMEKr@J@UwrY!g)`>~rLpMJHlifOID@*=mRA;N7UyYecj?k4#W|i; zIBPYP*)^B+A|k@rh(ZC3|6w^SwejhvpK7lj-vc?ca&qR(sSQ9Jc#9S-E+U&YHT`;s zwUZt_dh~^}B9kXi)+k63&v9x`zb2#EXd0_j)?ASlnO$>9FTy6QzuB$}4hVuDLM!~^ zn{U3kC{o^k|NW9Zdv?_xR>JMTB+)jUxIYyksl~~oz5FQTb9S(`3BqW9Qwd<+{(+`p zo^(WPq6?52*6ZbZY5u)r zE+9K|aLp|(ghg0OGb@E}0jND>u!hKLj~zI8&fCtYy`Ep1&MVysl2LkK{y~uN`y@L^ zdKqXE#d~mIz&!b3{KtZUoUOb$xaO7?!Xm7`8Kr*9F9hZ?XwV>?0A|OUA^wP#vfTsA zUI=^+pCOO_K7(#59abjm*S53<&BNdngy&2(=qc$nKde`z6p8K*S`WB_B)ApeIJ;<9P&(;5HAtfryl> z9}uPOab#x>uDPX!un6mHmTIPL1z>@KHVg|Fv|Q|QKj_8N#vyu=f^ZDdXf?C1!scR- z&X$1mjJ|#Q>W{&*X)xO7TA*Ev7A?{Mblr8=1&$*-b8yWqErdlF|5rO-j+8zO?V-oz zKW4#RE|$jZ`01yg0@*m4NE9T>(*Lp%HLbx07qpjM)%MxsUQ3rQP4RAOOaH!Ffb7h{ zHMg`77GZ!!p({$I2K)-?0+aI-%cMysaPX8&Eb#uXwh)6v7^2Zo%#dX`o3r^lvMwMq zvb*M#9)wL8i>4LgIt6@4dcef+cm8AAP4E&^_I42g>F1L|q&7%M(Z=8$jJ9@KWFc#X zxQ;5jdroO10>aMs@9Uc3k~h!!g<2-hubvvv209b2bF5X;A43Zvj2z4lG?4!!!LCLo z?s|p`$b@Y1o{a2BjI_@m5n&c2fep+UDHGRHie{~?e+niX6wOjw3Y(fzGFNRWlefN< z^&$Dny59L(QY5aH^IjK_1(}d7+(b1PQ6cRA37Le2h)lvlL?&S&0>U!?Xk_}Ke>5`l y&yuDeXEXosZ3xgme4F{FmD7a_e_DA)mj3|jyfxk0UF_rl0000 length($list) {\r\n\t\t@warn \"List index is #{$index} but list is only #{length($list)} item long for `remove-nth`.\";\r\n\t}\r\n\t@else {\r\n\r\n\t\t$result: ();\r\n\t\t$index: if($index < 0, length($list) + $index + 1, $index);\r\n\r\n\t\t@for $i from 1 through length($list) {\r\n\r\n\t\t\t@if $i != $index {\r\n\t\t\t\t$result: append($result, nth($list, $i));\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t@return $result;\r\n\r\n}\r\n\r\n/// Gets a value from a map.\r\n/// @author Hugo Giraudel\r\n/// @param {map} $map Map.\r\n/// @param {string} $keys Key(s).\r\n/// @return {string} Value.\r\n@function val($map, $keys...) {\r\n\r\n\t@if nth($keys, 1) == null {\r\n\t\t$keys: remove-nth($keys, 1);\r\n\t}\r\n\r\n\t@each $key in $keys {\r\n\t\t$map: map-get($map, $key);\r\n\t}\r\n\r\n\t@return $map;\r\n\r\n}\r\n\r\n/// Gets a font value.\r\n/// @param {string} $keys Key(s).\r\n/// @return {string} Value.\r\n@function _font($keys...) {\r\n\t@return val($font, $keys...);\r\n}\r\n\r\n/// Gets a palette value.\r\n/// @param {string} $keys Key(s).\r\n/// @return {string} Value.\r\n@function _palette($keys...) {\r\n\t@return val($palette, $keys...);\r\n}\r\n\r\n\r\n\r\n@font-face {\r\n font-family: 'Jetbrain-regular';\r\n font-style: normal;\r\n font-weight: 400;\r\n src: local('Jetbrain Regular'), local('Jetbrain-Regular'), url(/assets/fonts/JetBrainsMono_Regular.ttf) format('truetype');\r\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\r\n}\r\n@font-face {\r\n font-family: 'Jetbrain-regular';\r\n font-style: italic;\r\n font-weight: 400;\r\n src: local('Jetbrain Regular'), local('Jetbrain-Regular'), url(/assets/fonts/JetBrainsMono_Italic.ttf) format('truetype');\r\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\r\n}\r\n@font-face {\r\n font-family: 'Jetbrain-regular';\r\n font-style: normal;\r\n font-weight: 500;\r\n src: local('Jetbrain Bold'), local('Jetbrain-Bold'), url(/assets/fonts/JetBrainsMono_Bold.ttf) format('truetype');\r\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\r\n}\r\n@font-face {\r\n font-family: 'Jetbrain-regular';\r\n font-style: italic;\r\n font-weight: 500;\r\n src: local('Jetbrain Bold'), local('Jetbrain-Bold'), url(/assets/fonts/JetBrainsMono_Bold_Italic.ttf) format('truetype');\r\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\r\n}\r\n@font-face {\r\n font-family: 'Jetbrain-Extrabold';\r\n font-style: normal;\r\n font-weight: 700;\r\n src: local('Jetbrain ExtraBold'), local('Jetbrain-ExtraBold'), url(/assets/fonts/JetBrainsMono_ExtraBold.ttf) format('truetype');\r\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\r\n}\r\n@font-face {\r\n font-family: 'Jetbrain-Extrabold';\r\n font-style: italic;\r\n font-weight: 700;\r\n src: local('Jetbrain ExtraBold'), local('Jetbrain-ExtraBold'), url(/assets/fonts/JetBrainsMono_ExtraBold_Italic.ttf) format('truetype');\r\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\r\n}\r\n@font-face {\r\n font-family: 'Staatliches';\r\n font-style: normal;\r\n font-weight: 400;\r\n src: local('Astloch Bold'), local('Astloch-Bold'), url(/assets/fonts/Astloch-Bold.ttf) format('truetype');\r\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\r\n}\r\n\r\n\r\n$font: (\r\n title: ('Staatliches', 'Lucida Console', Monaco, monospace),\r\n family: ('Jetbrain-Extrabold', 'Lucida Console', Monaco, monospace),\r\n family-fixed: ('Jetbrain-Regular', 'Lucida Console', Monaco, monospace),\r\n weight: 400,\r\n weight-bold: 700,\r\n kerning: -0.025em,\r\n kerning-alt: 0.125em\r\n);\r\n// Palette.\r\n$palette: (\r\n\r\n bg: rgb(60, 42, 82), \r\n bg-alt: rgba(60, 42, 82, 0.75),\r\n fg: #ebdbf8,\r\n fg-alt: rgba(235, 219, 248, 0.25),\r\n border: #000000,\r\n border-alt: rgba(0, 0, 0, 0.75),\r\n accent1: #38ff59,\r\n accent1-alt:rgba(56, 255, 89, 0.75),\r\n accent2: #8d3ed8,\r\n accent2-alt:rgba(141, 62, 216, 0.75),\r\n\r\n);", + "/// Removes a specific item from a list.\r\n/// @author Hugo Giraudel\r\n/// @param {list} $list List.\r\n/// @param {integer} $index Index.\r\n/// @return {list} Updated list.\r\n@function remove-nth($list, $index) {\r\n\r\n\t$result: null;\r\n\r\n\t@if type-of($index) != number {\r\n\t\t@warn \"$index: #{quote($index)} is not a number for `remove-nth`.\";\r\n\t}\r\n\t@else if $index == 0 {\r\n\t\t@warn \"List index 0 must be a non-zero integer for `remove-nth`.\";\r\n\t}\r\n\t@else if abs($index) > length($list) {\r\n\t\t@warn \"List index is #{$index} but list is only #{length($list)} item long for `remove-nth`.\";\r\n\t}\r\n\t@else {\r\n\r\n\t\t$result: ();\r\n\t\t$index: if($index < 0, length($list) + $index + 1, $index);\r\n\r\n\t\t@for $i from 1 through length($list) {\r\n\r\n\t\t\t@if $i != $index {\r\n\t\t\t\t$result: append($result, nth($list, $i));\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t@return $result;\r\n\r\n}\r\n\r\n/// Gets a value from a map.\r\n/// @author Hugo Giraudel\r\n/// @param {map} $map Map.\r\n/// @param {string} $keys Key(s).\r\n/// @return {string} Value.\r\n@function val($map, $keys...) {\r\n\r\n\t@if nth($keys, 1) == null {\r\n\t\t$keys: remove-nth($keys, 1);\r\n\t}\r\n\r\n\t@each $key in $keys {\r\n\t\t$map: map-get($map, $key);\r\n\t}\r\n\r\n\t@return $map;\r\n\r\n}\r\n\r\n/// Gets a font value.\r\n/// @param {string} $keys Key(s).\r\n/// @return {string} Value.\r\n@function _font($keys...) {\r\n\t@return val($font, $keys...);\r\n}\r\n\r\n/// Gets a palette value.\r\n/// @param {string} $keys Key(s).\r\n/// @return {string} Value.\r\n@function _palette($keys...) {\r\n\t@return val($palette, $keys...);\r\n}\r\n\r\n\r\n\r\n@font-face {\r\n font-family: 'Jetbrain-regular';\r\n font-style: normal;\r\n font-weight: 400;\r\n src: local('Jetbrain Regular'), local('Jetbrain-Regular'), url(/assets/fonts/JetBrainsMono_Regular.ttf) format('truetype');\r\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\r\n}\r\n@font-face {\r\n font-family: 'Jetbrain-regular';\r\n font-style: italic;\r\n font-weight: 400;\r\n src: local('Jetbrain Regular'), local('Jetbrain-Regular'), url(/assets/fonts/JetBrainsMono_Italic.ttf) format('truetype');\r\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\r\n}\r\n@font-face {\r\n font-family: 'Jetbrain-regular';\r\n font-style: normal;\r\n font-weight: 500;\r\n src: local('Jetbrain Bold'), local('Jetbrain-Bold'), url(/assets/fonts/JetBrainsMono_Bold.ttf) format('truetype');\r\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\r\n}\r\n@font-face {\r\n font-family: 'Jetbrain-regular';\r\n font-style: italic;\r\n font-weight: 500;\r\n src: local('Jetbrain Bold'), local('Jetbrain-Bold'), url(/assets/fonts/JetBrainsMono_Bold_Italic.ttf) format('truetype');\r\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\r\n}\r\n@font-face {\r\n font-family: 'Jetbrain-Extrabold';\r\n font-style: normal;\r\n font-weight: 700;\r\n src: local('Jetbrain ExtraBold'), local('Jetbrain-ExtraBold'), url(/assets/fonts/JetBrainsMono_ExtraBold.ttf) format('truetype');\r\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\r\n}\r\n@font-face {\r\n font-family: 'Jetbrain-Extrabold';\r\n font-style: italic;\r\n font-weight: 700;\r\n src: local('Jetbrain ExtraBold'), local('Jetbrain-ExtraBold'), url(/assets/fonts/JetBrainsMono_ExtraBold_Italic.ttf) format('truetype');\r\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\r\n}\r\n@font-face {\r\n font-family: 'Staatliches';\r\n font-style: normal;\r\n font-weight: 400;\r\n src: local('Astloch Bold'), local('Astloch-Bold'), url(/assets/fonts/Astloch-Bold.ttf) format('truetype');\r\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\r\n}\r\n\r\n\r\n$font: (\r\n title: ('Staatliches', 'Lucida Console', Monaco, monospace),\r\n family: ('Jetbrain-Extrabold', 'Lucida Console', Monaco, monospace),\r\n family-fixed: ('Jetbrain-Regular', 'Lucida Console', Monaco, monospace),\r\n weight: 400,\r\n weight-bold: 700,\r\n kerning: -0.025em,\r\n kerning-alt: 0.125em\r\n);\r\n// Palette.\r\n$palette: (\r\n\r\n bg: #3c2a52, \r\n bg-alt: rgba(60, 42, 82, 0.75),\r\n fg: #ebdbf8,\r\n fg-alt: rgba(235, 219, 248, 0.25),\r\n border: #000000,\r\n border-alt: rgba(0, 0, 0, 0.75),\r\n accent1: #38ff59,\r\n accent1-alt:rgba(56, 255, 89, 0.75),\r\n accent2: #8d3ed8,\r\n accent2-alt:rgba(141, 62, 216, 0.75),\r\n\r\n);", "///\n/// Story by HTML5 UP\n/// html5up.net | @ajlkn\n/// Free for personal and commercial use under the CCA 3.0 license (html5up.net/license)\n///\n\n// Reset.\n// Based on meyerweb.com/eric/tools/css/reset (v2.0 | 20110126 | License: public domain)\n\nhtml, body, div, span, applet, object,\niframe, h1, h2, h3, h4, h5, h6, p, blockquote,\npre, a, abbr, acronym, address, big, cite,\ncode, del, dfn, em, img, ins, kbd, q, s, samp,\nsmall, strike, strong, sub, sup, tt, var, b,\nu, i, center, dl, dt, dd, ol, ul, li, fieldset,\nform, label, legend, table, caption, tbody,\ntfoot, thead, tr, th, td, article, aside,\ncanvas, details, embed, figure, figcaption,\nfooter, header, hgroup, menu, nav, output, ruby,\nsection, summary, time, mark, audio, video {\n margin: 0;\n padding: 0;\n border: 0;\n font-size: 100%;\n font: inherit;\n vertical-align: baseline;\n}\n\narticle, aside, details, figcaption, figure,\nfooter, header, hgroup, menu, nav, section {\n display: block;\n}\nhtml {\n scroll-behavior: smooth;\n}\nbody {\n line-height: 1.75;\n}\n\nol, ul {\n list-style:none;\n}\n\nblockquote,\tq {\n quotes: none;\n\n &:before,\n &:after {\n content: '';\n content: none;\n }\n}\n\ntable {\n border-collapse: collapse;\n border-spacing: 0;\n}\n\nbody {\n -webkit-text-size-adjust: none;\n}\n\nmark {\n background-color: transparent;\n color: inherit;\n}\n\ninput::-moz-focus-inner {\n border: 0;\n padding: 0;\n}\n\ninput, select, textarea {\n -moz-appearance: none;\n -webkit-appearance: none;\n -ms-appearance: none;\n appearance: none;\n}\n", "html,\nbody {\n margin:0;\n padding:0;\n}\nbody {\n height: 100vh;\n width: 100%;\n font-family: _font(family-fixed);\n color: _palette(fg);\n letter-spacing: _font(kerning);\n background-color: _palette(bg);\n\n}\n#main-wrapper {\n display: flex;\n flex-wrap: wrap;\n width: 100%;\n -webkit-transition: filter 400ms ease-in;\n -moz-transition: filter 400ms ease-in;\n transition: filter 400ms ease-in;\n\n}\n.content-wrapper {\n max-width: 1200px;\n margin: auto;\n}\n.wrapper {\n margin: 20px 40px;\n}\n.hero {\n display: flex;\n flex-wrap: wrap;\n flex-direction: row;\n align-content: center;\n background-color: _palette(bg);\n justify-content: center;\n background-size: cover;\n background-position: center;\n background-repeat: no-repeat;\n padding: 40px;\n position: relative;\n min-height: 75vh; \n width: 100vw;\n\n .textcontainer {\n background-color: _palette(bg-alt);\n border-radius: 5px;\n max-width: 700px;\n padding: 20px 20px 40px 20px;\n }\n\n div {\n z-index: 10;\n h1, p {\n flex: 1 0 100%;\n width: 100%;\n z-index: 10;\n color: _palette(fg);\n text-align: center;\n max-width: 1200px;\n }\n p{\n margin-top: 40px;\n }\n }\n\n .imagecontainer {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background-image: url('../img/vignette.svg');\n background-size: 480px 480px;\n background-repeat: repeat-x;\n background-position: bottom;\n z-index: 1;\n \n }\n\n}\n\nsection {\n flex: 1 1 100%;\n padding: 20px;\n background-color: _palette(bg);\n -webkit-box-shadow: inset 0px 23px 25px -25px _palette(border-alt);\n -moz-box-shadow: inset 0px 23px 25px -25px _palette(border-alt);\n box-shadow: inset 0px 23px 25px -25px _palette(border-alt);\n h2 {\n text-align: center;\n }\n}\nsection:first-of-type {\n -webkit-box-shadow: none;\n -moz-box-shadow: none;\n box-shadow: none;\n}\nfooter {\n display: flex;\n flex-wrap: wrap;\n width: 100%;\n padding: 160px 20px 200px 20px;\n background-color: _palette(fg);\n color: _palette(bg);\n justify-content: center;\n background-image: url('../img/vignette-footer.svg');\n background-size: 480px 480px;\n background-repeat: repeat-x;\n background-position: top;\n box-sizing: border-box;\n div {\n flex: 0 1 280px;\n margin:20px;\n img {\n margin: auto;\n display: block\n }\n li {\n border-bottom: 1px solid _palette(bg-alt);\n line-height: 2;\n font-size: 1.5em;\n a {\n font-weight: 700;\n text-decoration: none;\n }\n }\n }\n small {\n flex: 0 0 100%;\n margin: 20px;\n text-align: center;\n .label {\n display: none;\n }\n }\n}\n\n.post-navigation {\n padding: 80px 0 160px 0;\n display: flex;\n flex-wrap: wrap;\n justify-content: center;\n \n h2 {\n flex: 0 0 100%;\n margin-top: 40px;\n text-align: center;\n }\n .post-nav, .post-nav-next {\n\n flex: 0 0 200px;\n margin: 40px;\n h4 {\n font-size: 2em;\n justify-self: right;\n }\n }\n\n}", "// Animation \n@-webkit-keyframes infiniteRotate { \n 0% { -webkit-transform: rotate(0deg); }\n 100% { -webkit-transform: rotate(360deg); }\n}\n@-moz-keyframes infiniteRotate { \n 0% { -webkit-transform: rotate(0deg); }\n 100% { -webkit-transform: rotate(360deg); }\n}\n@keyframes infiniteRotate { \n 0% { -webkit-transform: rotate(0deg); }\n 100% { -webkit-transform: rotate(360deg); }\n}\n\n\n@-webkit-keyframes backgroundBlink {\n 0%{background-position:73% 0%}\n 50%{background-position:28% 100%}\n 100%{background-position:73% 0%}\n}\n@-moz-keyframes backgroundBlink {\n 0%{background-position:73% 0%}\n 50%{background-position:28% 100%}\n 100%{background-position:73% 0%}\n}\n@keyframes backgroundBlink {\n 0%{background-position:73% 0%}\n 50%{background-position:28% 100%}\n 100%{background-position:73% 0%}\n}\n\n@-webkit-keyframes backgroundSize {\n 0%{background-size:100% 150%}\n 50%{background-size:150% 100%}\n 100%{background-size:100% 150%}\n}\n@-moz-keyframes backgroundSize {\n 0%{background-size:100% 150%}\n 50%{background-size:150% 100%}\n 100%{background-size:100% 150%}\n}\n@keyframes backgroundSize {\n 0%{background-size:100% 150%}\n 50%{background-size:150% 100%}\n 100%{background-size:100% 150%}\n}", @@ -30,5 +30,5 @@ "//* Cloudcannon *//\n\n.editor-link {\n display: none;\n margin-top: 0;\n padding-top: 30px;\n .btn {\n border: 0;\n border-radius: 2px;\n width: 100%;\n max-width: 500px;\n box-sizing: border-box;\n text-decoration: none;\n padding: 10px 15px;\n margin: 0;\n font-size: 18px;\n cursor: pointer;\n background-color: #f7e064;\n color: #333;\n box-shadow: 1px 1px 5px 0 rgba(0, 0, 0, 0.2);\n &:hover {\n background-color: #f4d525;\n color: #333;\n }\n }\n}\n\n.cms-editor-active .editor-link {\n display: block;\n}\n\n.noJSalbum {\n display: none;\n}" ], "names": [], - "mappings": "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" + "mappings": "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" } \ No newline at end of file diff --git a/assets/css/noscripts-20200805.css.map b/assets/css/noscripts-20200805.css.map index 91d26e2..01f75c7 100644 --- a/assets/css/noscripts-20200805.css.map +++ b/assets/css/noscripts-20200805.css.map @@ -18,7 +18,7 @@ ], "sourcesContent": [ "@import 'libs/vars';\n\n@import 'libs/reset';\n\n// sethy stuff\n@import 'libs/animations';\n@import 'layout';\n@import 'elements';\n@import 'navigation';\n@import 'videos';\n@import 'cookies';\n@import 'player';\n@import 'trackplayer';\n@import 'set';\n@import 'noscripts';\n\n", - "/// Removes a specific item from a list.\r\n/// @author Hugo Giraudel\r\n/// @param {list} $list List.\r\n/// @param {integer} $index Index.\r\n/// @return {list} Updated list.\r\n@function remove-nth($list, $index) {\r\n\r\n\t$result: null;\r\n\r\n\t@if type-of($index) != number {\r\n\t\t@warn \"$index: #{quote($index)} is not a number for `remove-nth`.\";\r\n\t}\r\n\t@else if $index == 0 {\r\n\t\t@warn \"List index 0 must be a non-zero integer for `remove-nth`.\";\r\n\t}\r\n\t@else if abs($index) > length($list) {\r\n\t\t@warn \"List index is #{$index} but list is only #{length($list)} item long for `remove-nth`.\";\r\n\t}\r\n\t@else {\r\n\r\n\t\t$result: ();\r\n\t\t$index: if($index < 0, length($list) + $index + 1, $index);\r\n\r\n\t\t@for $i from 1 through length($list) {\r\n\r\n\t\t\t@if $i != $index {\r\n\t\t\t\t$result: append($result, nth($list, $i));\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t@return $result;\r\n\r\n}\r\n\r\n/// Gets a value from a map.\r\n/// @author Hugo Giraudel\r\n/// @param {map} $map Map.\r\n/// @param {string} $keys Key(s).\r\n/// @return {string} Value.\r\n@function val($map, $keys...) {\r\n\r\n\t@if nth($keys, 1) == null {\r\n\t\t$keys: remove-nth($keys, 1);\r\n\t}\r\n\r\n\t@each $key in $keys {\r\n\t\t$map: map-get($map, $key);\r\n\t}\r\n\r\n\t@return $map;\r\n\r\n}\r\n\r\n/// Gets a font value.\r\n/// @param {string} $keys Key(s).\r\n/// @return {string} Value.\r\n@function _font($keys...) {\r\n\t@return val($font, $keys...);\r\n}\r\n\r\n/// Gets a palette value.\r\n/// @param {string} $keys Key(s).\r\n/// @return {string} Value.\r\n@function _palette($keys...) {\r\n\t@return val($palette, $keys...);\r\n}\r\n\r\n\r\n\r\n@font-face {\r\n font-family: 'Jetbrain-regular';\r\n font-style: normal;\r\n font-weight: 400;\r\n src: local('Jetbrain Regular'), local('Jetbrain-Regular'), url(/assets/fonts/JetBrainsMono_Regular.ttf) format('truetype');\r\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\r\n}\r\n@font-face {\r\n font-family: 'Jetbrain-regular';\r\n font-style: italic;\r\n font-weight: 400;\r\n src: local('Jetbrain Regular'), local('Jetbrain-Regular'), url(/assets/fonts/JetBrainsMono_Italic.ttf) format('truetype');\r\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\r\n}\r\n@font-face {\r\n font-family: 'Jetbrain-regular';\r\n font-style: normal;\r\n font-weight: 500;\r\n src: local('Jetbrain Bold'), local('Jetbrain-Bold'), url(/assets/fonts/JetBrainsMono_Bold.ttf) format('truetype');\r\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\r\n}\r\n@font-face {\r\n font-family: 'Jetbrain-regular';\r\n font-style: italic;\r\n font-weight: 500;\r\n src: local('Jetbrain Bold'), local('Jetbrain-Bold'), url(/assets/fonts/JetBrainsMono_Bold_Italic.ttf) format('truetype');\r\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\r\n}\r\n@font-face {\r\n font-family: 'Jetbrain-Extrabold';\r\n font-style: normal;\r\n font-weight: 700;\r\n src: local('Jetbrain ExtraBold'), local('Jetbrain-ExtraBold'), url(/assets/fonts/JetBrainsMono_ExtraBold.ttf) format('truetype');\r\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\r\n}\r\n@font-face {\r\n font-family: 'Jetbrain-Extrabold';\r\n font-style: italic;\r\n font-weight: 700;\r\n src: local('Jetbrain ExtraBold'), local('Jetbrain-ExtraBold'), url(/assets/fonts/JetBrainsMono_ExtraBold_Italic.ttf) format('truetype');\r\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\r\n}\r\n@font-face {\r\n font-family: 'Staatliches';\r\n font-style: normal;\r\n font-weight: 400;\r\n src: local('Astloch Bold'), local('Astloch-Bold'), url(/assets/fonts/Astloch-Bold.ttf) format('truetype');\r\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\r\n}\r\n\r\n\r\n$font: (\r\n title: ('Staatliches', 'Lucida Console', Monaco, monospace),\r\n family: ('Jetbrain-Extrabold', 'Lucida Console', Monaco, monospace),\r\n family-fixed: ('Jetbrain-Regular', 'Lucida Console', Monaco, monospace),\r\n weight: 400,\r\n weight-bold: 700,\r\n kerning: -0.025em,\r\n kerning-alt: 0.125em\r\n);\r\n// Palette.\r\n$palette: (\r\n\r\n bg: rgb(60, 42, 82), \r\n bg-alt: rgba(60, 42, 82, 0.75),\r\n fg: #ebdbf8,\r\n fg-alt: rgba(235, 219, 248, 0.25),\r\n border: #000000,\r\n border-alt: rgba(0, 0, 0, 0.75),\r\n accent1: #38ff59,\r\n accent1-alt:rgba(56, 255, 89, 0.75),\r\n accent2: #8d3ed8,\r\n accent2-alt:rgba(141, 62, 216, 0.75),\r\n\r\n);", + "/// Removes a specific item from a list.\r\n/// @author Hugo Giraudel\r\n/// @param {list} $list List.\r\n/// @param {integer} $index Index.\r\n/// @return {list} Updated list.\r\n@function remove-nth($list, $index) {\r\n\r\n\t$result: null;\r\n\r\n\t@if type-of($index) != number {\r\n\t\t@warn \"$index: #{quote($index)} is not a number for `remove-nth`.\";\r\n\t}\r\n\t@else if $index == 0 {\r\n\t\t@warn \"List index 0 must be a non-zero integer for `remove-nth`.\";\r\n\t}\r\n\t@else if abs($index) > length($list) {\r\n\t\t@warn \"List index is #{$index} but list is only #{length($list)} item long for `remove-nth`.\";\r\n\t}\r\n\t@else {\r\n\r\n\t\t$result: ();\r\n\t\t$index: if($index < 0, length($list) + $index + 1, $index);\r\n\r\n\t\t@for $i from 1 through length($list) {\r\n\r\n\t\t\t@if $i != $index {\r\n\t\t\t\t$result: append($result, nth($list, $i));\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t@return $result;\r\n\r\n}\r\n\r\n/// Gets a value from a map.\r\n/// @author Hugo Giraudel\r\n/// @param {map} $map Map.\r\n/// @param {string} $keys Key(s).\r\n/// @return {string} Value.\r\n@function val($map, $keys...) {\r\n\r\n\t@if nth($keys, 1) == null {\r\n\t\t$keys: remove-nth($keys, 1);\r\n\t}\r\n\r\n\t@each $key in $keys {\r\n\t\t$map: map-get($map, $key);\r\n\t}\r\n\r\n\t@return $map;\r\n\r\n}\r\n\r\n/// Gets a font value.\r\n/// @param {string} $keys Key(s).\r\n/// @return {string} Value.\r\n@function _font($keys...) {\r\n\t@return val($font, $keys...);\r\n}\r\n\r\n/// Gets a palette value.\r\n/// @param {string} $keys Key(s).\r\n/// @return {string} Value.\r\n@function _palette($keys...) {\r\n\t@return val($palette, $keys...);\r\n}\r\n\r\n\r\n\r\n@font-face {\r\n font-family: 'Jetbrain-regular';\r\n font-style: normal;\r\n font-weight: 400;\r\n src: local('Jetbrain Regular'), local('Jetbrain-Regular'), url(/assets/fonts/JetBrainsMono_Regular.ttf) format('truetype');\r\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\r\n}\r\n@font-face {\r\n font-family: 'Jetbrain-regular';\r\n font-style: italic;\r\n font-weight: 400;\r\n src: local('Jetbrain Regular'), local('Jetbrain-Regular'), url(/assets/fonts/JetBrainsMono_Italic.ttf) format('truetype');\r\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\r\n}\r\n@font-face {\r\n font-family: 'Jetbrain-regular';\r\n font-style: normal;\r\n font-weight: 500;\r\n src: local('Jetbrain Bold'), local('Jetbrain-Bold'), url(/assets/fonts/JetBrainsMono_Bold.ttf) format('truetype');\r\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\r\n}\r\n@font-face {\r\n font-family: 'Jetbrain-regular';\r\n font-style: italic;\r\n font-weight: 500;\r\n src: local('Jetbrain Bold'), local('Jetbrain-Bold'), url(/assets/fonts/JetBrainsMono_Bold_Italic.ttf) format('truetype');\r\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\r\n}\r\n@font-face {\r\n font-family: 'Jetbrain-Extrabold';\r\n font-style: normal;\r\n font-weight: 700;\r\n src: local('Jetbrain ExtraBold'), local('Jetbrain-ExtraBold'), url(/assets/fonts/JetBrainsMono_ExtraBold.ttf) format('truetype');\r\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\r\n}\r\n@font-face {\r\n font-family: 'Jetbrain-Extrabold';\r\n font-style: italic;\r\n font-weight: 700;\r\n src: local('Jetbrain ExtraBold'), local('Jetbrain-ExtraBold'), url(/assets/fonts/JetBrainsMono_ExtraBold_Italic.ttf) format('truetype');\r\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\r\n}\r\n@font-face {\r\n font-family: 'Staatliches';\r\n font-style: normal;\r\n font-weight: 400;\r\n src: local('Astloch Bold'), local('Astloch-Bold'), url(/assets/fonts/Astloch-Bold.ttf) format('truetype');\r\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\r\n}\r\n\r\n\r\n$font: (\r\n title: ('Staatliches', 'Lucida Console', Monaco, monospace),\r\n family: ('Jetbrain-Extrabold', 'Lucida Console', Monaco, monospace),\r\n family-fixed: ('Jetbrain-Regular', 'Lucida Console', Monaco, monospace),\r\n weight: 400,\r\n weight-bold: 700,\r\n kerning: -0.025em,\r\n kerning-alt: 0.125em\r\n);\r\n// Palette.\r\n$palette: (\r\n\r\n bg: #3c2a52, \r\n bg-alt: rgba(60, 42, 82, 0.75),\r\n fg: #ebdbf8,\r\n fg-alt: rgba(235, 219, 248, 0.25),\r\n border: #000000,\r\n border-alt: rgba(0, 0, 0, 0.75),\r\n accent1: #38ff59,\r\n accent1-alt:rgba(56, 255, 89, 0.75),\r\n accent2: #8d3ed8,\r\n accent2-alt:rgba(141, 62, 216, 0.75),\r\n\r\n);", "///\n/// Story by HTML5 UP\n/// html5up.net | @ajlkn\n/// Free for personal and commercial use under the CCA 3.0 license (html5up.net/license)\n///\n\n// Reset.\n// Based on meyerweb.com/eric/tools/css/reset (v2.0 | 20110126 | License: public domain)\n\nhtml, body, div, span, applet, object,\niframe, h1, h2, h3, h4, h5, h6, p, blockquote,\npre, a, abbr, acronym, address, big, cite,\ncode, del, dfn, em, img, ins, kbd, q, s, samp,\nsmall, strike, strong, sub, sup, tt, var, b,\nu, i, center, dl, dt, dd, ol, ul, li, fieldset,\nform, label, legend, table, caption, tbody,\ntfoot, thead, tr, th, td, article, aside,\ncanvas, details, embed, figure, figcaption,\nfooter, header, hgroup, menu, nav, output, ruby,\nsection, summary, time, mark, audio, video {\n margin: 0;\n padding: 0;\n border: 0;\n font-size: 100%;\n font: inherit;\n vertical-align: baseline;\n}\n\narticle, aside, details, figcaption, figure,\nfooter, header, hgroup, menu, nav, section {\n display: block;\n}\nhtml {\n scroll-behavior: smooth;\n}\nbody {\n line-height: 1.75;\n}\n\nol, ul {\n list-style:none;\n}\n\nblockquote,\tq {\n quotes: none;\n\n &:before,\n &:after {\n content: '';\n content: none;\n }\n}\n\ntable {\n border-collapse: collapse;\n border-spacing: 0;\n}\n\nbody {\n -webkit-text-size-adjust: none;\n}\n\nmark {\n background-color: transparent;\n color: inherit;\n}\n\ninput::-moz-focus-inner {\n border: 0;\n padding: 0;\n}\n\ninput, select, textarea {\n -moz-appearance: none;\n -webkit-appearance: none;\n -ms-appearance: none;\n appearance: none;\n}\n", "// Animation \n@-webkit-keyframes infiniteRotate { \n 0% { -webkit-transform: rotate(0deg); }\n 100% { -webkit-transform: rotate(360deg); }\n}\n@-moz-keyframes infiniteRotate { \n 0% { -webkit-transform: rotate(0deg); }\n 100% { -webkit-transform: rotate(360deg); }\n}\n@keyframes infiniteRotate { \n 0% { -webkit-transform: rotate(0deg); }\n 100% { -webkit-transform: rotate(360deg); }\n}\n\n\n@-webkit-keyframes backgroundBlink {\n 0%{background-position:73% 0%}\n 50%{background-position:28% 100%}\n 100%{background-position:73% 0%}\n}\n@-moz-keyframes backgroundBlink {\n 0%{background-position:73% 0%}\n 50%{background-position:28% 100%}\n 100%{background-position:73% 0%}\n}\n@keyframes backgroundBlink {\n 0%{background-position:73% 0%}\n 50%{background-position:28% 100%}\n 100%{background-position:73% 0%}\n}\n\n@-webkit-keyframes backgroundSize {\n 0%{background-size:100% 150%}\n 50%{background-size:150% 100%}\n 100%{background-size:100% 150%}\n}\n@-moz-keyframes backgroundSize {\n 0%{background-size:100% 150%}\n 50%{background-size:150% 100%}\n 100%{background-size:100% 150%}\n}\n@keyframes backgroundSize {\n 0%{background-size:100% 150%}\n 50%{background-size:150% 100%}\n 100%{background-size:100% 150%}\n}", "html,\nbody {\n margin:0;\n padding:0;\n}\nbody {\n height: 100vh;\n width: 100%;\n font-family: _font(family-fixed);\n color: _palette(fg);\n letter-spacing: _font(kerning);\n background-color: _palette(bg);\n\n}\n#main-wrapper {\n display: flex;\n flex-wrap: wrap;\n width: 100%;\n -webkit-transition: filter 400ms ease-in;\n -moz-transition: filter 400ms ease-in;\n transition: filter 400ms ease-in;\n\n}\n.content-wrapper {\n max-width: 1200px;\n margin: auto;\n}\n.wrapper {\n margin: 20px 40px;\n}\n.hero {\n display: flex;\n flex-wrap: wrap;\n flex-direction: row;\n align-content: center;\n background-color: _palette(bg);\n justify-content: center;\n background-size: cover;\n background-position: center;\n background-repeat: no-repeat;\n padding: 40px;\n position: relative;\n min-height: 75vh; \n width: 100vw;\n\n .textcontainer {\n background-color: _palette(bg-alt);\n border-radius: 5px;\n max-width: 700px;\n padding: 20px 20px 40px 20px;\n }\n\n div {\n z-index: 10;\n h1, p {\n flex: 1 0 100%;\n width: 100%;\n z-index: 10;\n color: _palette(fg);\n text-align: center;\n max-width: 1200px;\n }\n p{\n margin-top: 40px;\n }\n }\n\n .imagecontainer {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background-image: url('../img/vignette.svg');\n background-size: 480px 480px;\n background-repeat: repeat-x;\n background-position: bottom;\n z-index: 1;\n \n }\n\n}\n\nsection {\n flex: 1 1 100%;\n padding: 20px;\n background-color: _palette(bg);\n -webkit-box-shadow: inset 0px 23px 25px -25px _palette(border-alt);\n -moz-box-shadow: inset 0px 23px 25px -25px _palette(border-alt);\n box-shadow: inset 0px 23px 25px -25px _palette(border-alt);\n h2 {\n text-align: center;\n }\n}\nsection:first-of-type {\n -webkit-box-shadow: none;\n -moz-box-shadow: none;\n box-shadow: none;\n}\nfooter {\n display: flex;\n flex-wrap: wrap;\n width: 100%;\n padding: 160px 20px 200px 20px;\n background-color: _palette(fg);\n color: _palette(bg);\n justify-content: center;\n background-image: url('../img/vignette-footer.svg');\n background-size: 480px 480px;\n background-repeat: repeat-x;\n background-position: top;\n box-sizing: border-box;\n div {\n flex: 0 1 280px;\n margin:20px;\n img {\n margin: auto;\n display: block\n }\n li {\n border-bottom: 1px solid _palette(bg-alt);\n line-height: 2;\n font-size: 1.5em;\n a {\n font-weight: 700;\n text-decoration: none;\n }\n }\n }\n small {\n flex: 0 0 100%;\n margin: 20px;\n text-align: center;\n .label {\n display: none;\n }\n }\n}\n\n.post-navigation {\n padding: 80px 0 160px 0;\n display: flex;\n flex-wrap: wrap;\n justify-content: center;\n \n h2 {\n flex: 0 0 100%;\n margin-top: 40px;\n text-align: center;\n }\n .post-nav, .post-nav-next {\n\n flex: 0 0 200px;\n margin: 40px;\n h4 {\n font-size: 2em;\n justify-self: right;\n }\n }\n\n}", @@ -32,5 +32,5 @@ "// NAvigation\n\n.logo, #sticky {\n filter: blur(0px);\n opacity: 1;\n background-color: _palette(bg);\n }\n\n.blurredout {\n filter: blur(0px);\n opacity: 1;\n background-color: _palette(bg);\n -webkit-transition: all 400ms ease-in;\n -moz-transition: all 400ms ease-in;\n transition: all 400ms ease-in;\n }\n\n.hero {\n padding-top: 120px;\n}\n\n// Player link\n.player-wrap {\n display: none;\n}\n.noJSalbum {\n display: unset;\n flex: 0 1 400px;\n border-radius: 5px;\n width: 100%;\n}\n#fixed-player {\n display: unset;\n height: unset;\n}\n.hideWhenNoJS {\n display: none;\n}" ], "names": [], - "mappings": "ACwEA,UAAU,GACR,WAAW,EAAE,kBAAkB,EAC/B,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,GAAG,EAChB,GAAG,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,4CAA4C,CAAC,kBAAkB,EAC1H,aAAa,EAAE,0JAA0J;;AAE3K,UAAU,GACR,WAAW,EAAE,kBAAkB,EAC/B,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,GAAG,EAChB,GAAG,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,2CAA2C,CAAC,kBAAkB,EACzH,aAAa,EAAE,0JAA0J;;AAE3K,UAAU,GACR,WAAW,EAAE,kBAAkB,EAC/B,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,GAAG,EAChB,GAAG,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,yCAAyC,CAAC,kBAAkB,EACjH,aAAa,EAAE,0JAA0J;;AAE3K,UAAU,GACR,WAAW,EAAE,kBAAkB,EAC/B,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,GAAG,EAChB,GAAG,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,gDAAgD,CAAC,kBAAkB,EACxH,aAAa,EAAE,0JAA0J;;AAE3K,UAAU,GACR,WAAW,EAAE,oBAAoB,EACjC,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,GAAG,EAChB,GAAG,EAAE,2BAA2B,EAAE,2BAA2B,EAAE,8CAA8C,CAAC,kBAAkB,EAChI,aAAa,EAAE,0JAA0J;;AAE3K,UAAU,GACR,WAAW,EAAE,oBAAoB,EACjC,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,GAAG,EAChB,GAAG,EAAE,2BAA2B,EAAE,2BAA2B,EAAE,qDAAqD,CAAC,kBAAkB,EACvI,aAAa,EAAE,0JAA0J;;AAE3K,UAAU,GACR,WAAW,EAAE,aAAa,EAC1B,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,GAAG,EAChB,GAAG,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,mCAAmC,CAAC,kBAAkB,EACzG,aAAa,EAAE,0JAA0J;;AC9G3K,AAAA,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EACrC,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,UAAU,EAC7C,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,EACzC,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAC7C,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,EAC3C,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,QAAQ,EAC9C,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAC1C,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EACxC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAC1C,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAC/C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,EACzC,MAAM,EAAE,CAAC,EACT,OAAO,EAAE,CAAC,EACV,MAAM,EAAE,CAAC,EACT,SAAS,EAAE,IAAI,EACf,IAAI,EAAE,OAAO,EACb,cAAc,EAAE,QAAQ,GACzB;;AAED,AAAA,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,EAC3C,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,CAAC,EACzC,OAAO,EAAE,KAAK,GACf;;AACD,AAAA,IAAI,CAAC,EACH,eAAe,EAAE,MAAM,GACxB;;AACD,AAAA,IAAI,CAAC,EACH,WAAW,EAAE,IAAI,GAClB;;AAED,AAAA,EAAE,EAAE,EAAE,CAAC,EACL,UAAU,EAAC,IAAI,GAChB;;AAED,AAAA,UAAU,EAAE,CAAC,CAAC,EACZ,MAAM,EAAE,IAAI,GAOb;;AARD,AAGE,UAHQ,CAGN,MAAM,EAHV,UAAU,CAIN,KAAK,EAJG,CAAC,CAGT,MAAM,EAHE,CAAC,CAIT,KAAK,CAAC,EACN,OAAO,EAAE,EAAE,EACX,OAAO,EAAE,IAAI,GACd;;AAGH,AAAA,KAAK,CAAC,EACJ,eAAe,EAAE,QAAQ,EACzB,cAAc,EAAE,CAAC,GAClB;;AAED,AAAA,IAAI,CAAC,EACH,wBAAwB,EAAE,IAAI,GAC/B;;AAED,AAAA,IAAI,CAAC,EACH,gBAAgB,EAAE,WAAW,EAC7B,KAAK,EAAE,OAAO,GACf;;AAED,AAAA,KAAK,EAAE,gBAAgB,CAAC,EACtB,MAAM,EAAE,CAAC,EACT,OAAO,EAAE,CAAC,GACX;;AAED,AAAA,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,EACtB,eAAe,EAAE,IAAI,EACrB,kBAAkB,EAAE,IAAI,EACxB,cAAc,EAAE,IAAI,EACpB,UAAU,EAAE,IAAI,GACjB;;AC5ED,kBAAkB,CAAlB,cAAkB,GAChB,EAAE,GAAG,iBAAiB,EAAE,YAAY;EACpC,IAAI,GAAG,iBAAiB,EAAE,cAAc;;AAE1C,eAAe,CAAf,cAAe,GACb,EAAE,GAAG,iBAAiB,EAAE,YAAY;EACpC,IAAI,GAAG,iBAAiB,EAAE,cAAc;;AAE1C,UAAU,CAAV,cAAU,GACR,EAAE,GAAG,iBAAiB,EAAE,YAAY;EACpC,IAAI,GAAG,iBAAiB,EAAE,cAAc;;AAI1C,kBAAkB,CAAlB,eAAkB,GAChB,EAAE,GAAC,mBAAmB,EAAC,MAAM;EAC7B,GAAG,GAAC,mBAAmB,EAAC,QAAQ;EAChC,IAAI,GAAC,mBAAmB,EAAC,MAAM;;AAEjC,eAAe,CAAf,eAAe,GACb,EAAE,GAAC,mBAAmB,EAAC,MAAM;EAC7B,GAAG,GAAC,mBAAmB,EAAC,QAAQ;EAChC,IAAI,GAAC,mBAAmB,EAAC,MAAM;;AAEjC,UAAU,CAAV,eAAU,GACR,EAAE,GAAC,mBAAmB,EAAC,MAAM;EAC7B,GAAG,GAAC,mBAAmB,EAAC,QAAQ;EAChC,IAAI,GAAC,mBAAmB,EAAC,MAAM;;AAGjC,kBAAkB,CAAlB,cAAkB,GAChB,EAAE,GAAC,eAAe,EAAC,SAAS;EAC5B,GAAG,GAAC,eAAe,EAAC,SAAS;EAC7B,IAAI,GAAC,eAAe,EAAC,SAAS;;AAEhC,eAAe,CAAf,cAAe,GACb,EAAE,GAAC,eAAe,EAAC,SAAS;EAC5B,GAAG,GAAC,eAAe,EAAC,SAAS;EAC7B,IAAI,GAAC,eAAe,EAAC,SAAS;;AAEhC,UAAU,CAAV,cAAU,GACR,EAAE,GAAC,eAAe,EAAC,SAAS;EAC5B,GAAG,GAAC,eAAe,EAAC,SAAS;EAC7B,IAAI,GAAC,eAAe,EAAC,SAAS;;AC5ChC,AAAA,IAAI,EACJ,IAAI,CAAC,EACH,MAAM,EAAC,CAAC,EACR,OAAO,EAAC,CAAC,GACV;;AACD,AAAA,IAAI,CAAC,EACH,MAAM,EAAE,KAAK,EACb,KAAK,EAAE,IAAI,EACX,WAAW,EHsHK,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,EAAE,SAAS,EGrHvE,KAAK,EHgIO,OAAO,EG/HnB,cAAc,EHuHC,QAAO,EGtHtB,gBAAgB,EH4HJ,OAAe,GG1H5B;;AACD,AAAA,aAAa,CAAC,EACZ,OAAO,EAAE,IAAI,EACb,SAAS,EAAE,IAAI,EACf,KAAK,EAAE,IAAI,EACX,kBAAkB,EAAE,oBAAoB,EACxC,eAAe,EAAE,oBAAoB,EACrC,UAAU,EAAE,oBAAoB,GAEjC;;AACD,AAAA,gBAAgB,CAAC,EACf,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,IAAI,GACb;;AACD,AAAA,QAAQ,CAAC,EACP,MAAM,EAAE,SAAS,GAClB;;AACD,AAAA,KAAK,CAAC,EACJ,OAAO,EAAE,IAAI,EACb,SAAS,EAAE,IAAI,EACf,cAAc,EAAE,GAAG,EACnB,aAAa,EAAE,MAAM,EACrB,gBAAgB,EHoGJ,OAAe,EGnG3B,eAAe,EAAE,MAAM,EACvB,eAAe,EAAE,KAAK,EACtB,mBAAmB,EAAE,MAAM,EAC3B,iBAAiB,EAAE,SAAS,EAC5B,OAAO,EAAE,IAAI,EACb,QAAQ,EAAE,QAAQ,EAClB,UAAU,EAAE,IAAI,EAChB,KAAK,EAAE,KAAK,GAsCb;;AAnDD,AAeE,KAfG,CAeH,cAAc,CAAC,EACb,gBAAgB,EH0FN,sBAAsB,EGzFhC,aAAa,EAAE,GAAG,EAClB,SAAS,EAAE,KAAK,EAChB,OAAO,EAAE,mBAAmB,GAC7B;;AApBH,AAsBE,KAtBG,CAsBH,GAAG,CAAC,EACF,OAAO,EAAE,EAAE,GAYZ;;AAnCH,AAwBI,KAxBC,CAsBH,GAAG,CAED,EAAE,EAxBN,KAAK,CAsBH,GAAG,CAEG,CAAC,CAAC,EACJ,IAAI,EAAE,QAAQ,EACd,KAAK,EAAE,IAAI,EACX,OAAO,EAAE,EAAE,EACX,KAAK,EH+EG,OAAO,EG9Ef,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,GAClB;;AA/BL,AAgCI,KAhCC,CAsBH,GAAG,CAUD,CAAC,CAAA,EACC,UAAU,EAAE,IAAI,GACjB;;AAlCL,AAqCE,KArCG,CAqCH,eAAe,CAAC,EACd,QAAQ,EAAE,QAAQ,EAClB,GAAG,EAAE,CAAC,EACN,IAAI,EAAE,CAAC,EACP,KAAK,EAAE,IAAI,EACX,MAAM,EAAE,IAAI,EACZ,gBAAgB,EAAE,0BAA0B,EAC5C,eAAe,EAAE,WAAW,EAC5B,iBAAiB,EAAE,QAAQ,EAC3B,mBAAmB,EAAE,MAAM,EAC3B,OAAO,EAAE,CAAC,GAEX;;AAIH,AAAA,OAAO,CAAC,EACN,IAAI,EAAE,QAAQ,EACd,OAAO,EAAE,IAAI,EACb,gBAAgB,EHiDJ,OAAe,EGhD3B,kBAAkB,EAAE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAE,KAAI,CHqDjC,mBAAmB,EGpD/B,eAAe,EAAE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAE,KAAI,CHoD9B,mBAAmB,EGnD/B,UAAU,EAAE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAE,KAAI,CHmDzB,mBAAmB,GG/ChC;;AAVD,AAOE,OAPK,CAOL,EAAE,CAAC,EACD,UAAU,EAAE,MAAM,GACnB;;AAEH,AAAA,OAAO,CAAC,aAAa,CAAC,EACpB,kBAAkB,EAAE,IAAI,EACxB,eAAe,EAAE,IAAI,EACrB,UAAU,EAAE,IAAI,GACjB;;AACD,AAAA,MAAM,CAAC,EACL,OAAO,EAAE,IAAI,EACb,SAAS,EAAE,IAAI,EACf,KAAK,EAAE,IAAI,EACX,OAAO,EAAE,qBAAqB,EAC9B,gBAAgB,EHiCJ,OAAO,EGhCnB,KAAK,EH8BO,OAAe,EG7B3B,eAAe,EAAE,MAAM,EACvB,gBAAgB,EAAE,iCAAiC,EACnD,eAAe,EAAE,WAAW,EAC5B,iBAAiB,EAAE,QAAQ,EAC3B,mBAAmB,EAAE,GAAG,EACxB,UAAU,EAAE,UAAU,GA0BvB;;AAtCD,AAaE,MAbI,CAaJ,GAAG,CAAC,EACF,IAAI,EAAE,SAAS,EACf,MAAM,EAAC,IAAI,GAcZ;;AA7BH,AAgBI,MAhBE,CAaJ,GAAG,CAGD,GAAG,CAAC,EACF,MAAM,EAAE,IAAI,EACZ,OAAO,EAAE,KACX,GAAC;;AAnBL,AAoBI,MApBE,CAaJ,GAAG,CAOD,EAAE,CAAC,EACD,aAAa,EAAE,GAAG,CAAC,KAAK,CHgBhB,sBAAsB,EGf9B,WAAW,EAAE,CAAC,EACd,SAAS,EAAE,KAAK,GAKjB;;AA5BL,AAwBM,MAxBA,CAaJ,GAAG,CAOD,EAAE,CAIA,CAAC,CAAC,EACA,WAAW,EAAE,GAAG,EAChB,eAAe,EAAE,IAAI,GACtB;;AA3BP,AA8BE,MA9BI,CA8BJ,KAAK,CAAC,EACJ,IAAI,EAAE,QAAQ,EACd,MAAM,EAAE,IAAI,EACZ,UAAU,EAAE,MAAM,GAInB;;AArCH,AAkCI,MAlCE,CA8BJ,KAAK,CAIH,MAAM,CAAC,EACL,OAAO,EAAE,IAAI,GACd;;AAIL,AAAA,gBAAgB,CAAC,EACf,OAAO,EAAE,cAAc,EACvB,OAAO,EAAE,IAAI,EACb,SAAS,EAAE,IAAI,EACf,eAAe,EAAE,MAAM,GAiBxB;;AArBD,AAME,gBANc,CAMd,EAAE,CAAC,EACD,IAAI,EAAE,QAAQ,EACd,UAAU,EAAE,IAAI,EAChB,UAAU,EAAE,MAAM,GACnB;;AAVH,AAWE,gBAXc,CAWd,SAAS,EAXX,gBAAgB,CAWH,cAAc,CAAC,EAExB,IAAI,EAAE,SAAS,EACf,MAAM,EAAE,IAAI,GAKb;;AAnBH,AAeI,gBAfY,CAWd,SAAS,CAIP,EAAE,EAfN,gBAAgB,CAWH,cAAc,CAIvB,EAAE,CAAC,EACD,SAAS,EAAE,GAAG,EACd,YAAY,EAAE,KAAK,GACpB;;AC1JL,AAAA,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EACrB,WAAW,EJwHK,aAAa,EAAE,gBAAgB,EAAE,MAAM,EAAE,SAAS,GItHnE;;AACD,AAAA,EAAE,CAAC,EACD,SAAS,EAAE,KAAK,GACjB;;AACD,AAAA,EAAE,CAAC,EACD,SAAS,EAAE,GAAG,GACf;;AACD,AAAA,EAAE,CAAC,EACD,SAAS,EAAE,KAAK,GACjB;;AACD,AAAA,MAAM,CAAC,EACL,WAAW,EAAE,GAAG,GACjB;;AACD,AAAA,CAAC,CAAC,EACA,qBAAqB,EAAE,IAAI,EAC3B,qBAAqB,EAAE,WAAW,EAClC,KAAK,EJyHO,OAAO,EIxHnB,eAAe,EAAE,4CAA4C,EAC7D,kBAAkB,EAAE,4CAA4C,EAChE,cAAc,EAAE,4CAA4C,EAC5D,UAAU,EAAE,4CAA4C,GACzD;;AACD,AAAA,CAAC,CAAC,KAAK,CAAC,EACN,KAAK,EJgHO,OAAO,EI/GnB,qBAAqB,EAAE,IAAI,EAC3B,qBAAqB,EAAE,KAAK,GAC7B;;AAID,AAAA,OAAO,CAAC,EACN,gBAAgB,EJ0GJ,OAAO,EIzGnB,OAAO,EAAE,GAAG,EAEZ,aAAa,EAAE,GAAG,EAClB,UAAU,EAAE,MAAM,EAClB,eAAe,EAAE,IAAI,EACrB,cAAc,EAAE,SAAS,EACzB,WAAW,EAAE,GAAG,EAChB,KAAK,EJ4FO,OAAO,GIzFpB;;AACD,AAAA,OAAO,CAAC,KAAK,CAAC,EACZ,gBAAgB,EJ2FJ,OAAO,EI1FnB,KAAK,EJoFO,OAAe,GInF5B;;AAGD,AAAA,SAAS,CAAC,EACR,OAAO,EAAC,IAAI,EACZ,SAAS,EAAE,IAAI,EACf,eAAe,EAAE,YAAY,EAC7B,OAAO,EAAE,IAAI,GAiBd;;AArBD,AAME,SANO,CAMP,EAAE,CAAC,EACD,IAAI,EAAE,QAAQ,EACd,MAAM,EAAE,IAAI,GACb;;AATH,AAUE,SAVO,CAUP,OAAO,CAAC,EACN,IAAI,EAAE,SAAS,EACf,SAAS,EAAE,KAAK,EAChB,MAAM,EAAE,IAAI,GACb;;AAdH,AAeE,SAfO,CAeP,GAAG,CAAC,EACF,KAAK,EAAC,IAAI,EACV,MAAM,EAAE,IAAI,EACZ,UAAU,EAAE,KAAK,EACjB,aAAa,EAAE,GAAG,GACnB;;AAIH,AAAA,UAAU,CAAC,EACT,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,GAAG,GAIjB;;AAND,AAGE,UAHQ,GAGN,EAAE,EAHN,UAAU,CAGF,GAAG,CAAC,EACR,MAAM,EAAE,IAAI,GACb;;AAEH,AAAA,SAAS,CAAC,EACR,UAAU,EAAE,GAAG,EACf,UAAU,EAAE,MAAM,GAEnB;;AAGD,AAAA,MAAM,CAAC,EACL,OAAO,EAAE,IAAI,GACd;;AACD,AAAA,KAAK,CAAC,EACJ,IAAI,EAAE,QAAQ,EACd,MAAM,EAAC,IAAI,EACX,SAAS,EAAE,IAAI,EACf,aAAa,EAAE,KAAK,EACpB,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,KAAK,EACb,WAAW,EAAE,KAAK,EAClB,MAAM,EAAE,GAAG,CAAC,KAAK,CJuCL,OAAO,EItCnB,UAAU,EAAE,MAAM,EAClB,eAAe,EAAE,IAAI,EACrB,eAAe,EAAE,+CAA+C,EAChE,kBAAkB,EAAE,+CAA+C,EACnE,cAAc,EAAE,+CAA+C,EAC/D,UAAU,EAAE,+CAA+C,GAE5D;;AACD,AAAA,KAAK,CAAC,KAAK,CAAC,EACV,MAAM,EAAE,GAAG,CAAC,KAAK,CJ2BL,OAAO,GIzBpB;;AACD,AAAA,MAAM,CAAC,EACL,aAAa,EAAE,IAAI,EACnB,KAAK,EAAE,IAAI,EACX,MAAM,EAAE,IAAI,EACZ,WAAW,EAAE,IAAI,EACjB,SAAS,EAAE,IAAI,EACf,WAAW,EAAE,CAAC,GACf;;AACD,AAAA,QAAQ,CAAC,EACP,aAAa,EAAE,IAAI,EACnB,KAAK,EAAE,IAAI,EACX,MAAM,EAAE,IAAI,EACZ,WAAW,EAAE,IAAI,EACjB,SAAS,EAAE,IAAI,EACf,MAAM,EAAE,gBAAgB,GACzB;;AAGD,AAAA,OAAO,CAAC,EACN,IAAI,EAAE,SAAS,EACf,MAAM,EAAE,IAAI,GAYb;;AAdD,AAGE,OAHK,CAGL,KAAK,CAAC,EACJ,SAAS,EAAC,KAAK,GAChB;;AALH,AAME,OANK,CAML,aAAa,CAAC,EACZ,YAAY,EAAE,IAAI,EAClB,iBAAiB,EAAE,SAAS,EAC5B,eAAe,EAAC,KAAK,EACrB,aAAa,EAAC,KAAK,EACnB,KAAK,EAAC,KAAK,EACX,MAAM,EAAC,KAAK,GACb;;AAGH,AAAA,KAAK,EAAE,WAAW,CAAC,EACjB,OAAO,EAAE,IAAI,GAQd;;AATD,AAEE,KAFG,GAED,GAAG,EAFA,WAAW,GAEd,GAAG,CAAC,EACJ,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,IAAI,GACb;;AALH,AAME,KANG,CAMH,CAAC,EANI,WAAW,CAMhB,CAAC,CAAC,EACA,MAAM,EAAE,MAAM,GACf;;AAEH,AACE,WADS,CACT,EAAE,EADJ,WAAW,CACL,EAAE,EADR,WAAW,CACD,EAAE,EADZ,WAAW,CACG,EAAE,EADhB,WAAW,CACO,EAAE,CAAC,EACjB,UAAU,EAAE,IAAI,GACjB;;AAGH,AAAA,KAAK,EAAE,MAAM,CAAC,EACZ,UAAU,EAAE,IAAI,EAChB,OAAO,EAAE,CAAC,EACV,OAAO,EAAE,IAAI,EACb,SAAS,EAAE,IAAI,GA6BhB;;AAjCD,AAKE,KALG,CAKH,EAAE,EALG,MAAM,CAKX,EAAE,CAAC,EACD,IAAI,EAAE,QAAQ,EACd,aAAa,EAAE,IAAI,GACpB;;AARH,AASE,KATG,GASD,GAAG,EATA,MAAM,GAST,GAAG,CAAC,EACJ,eAAe,EAAE,KAAK,EACtB,iBAAiB,EAAE,EAAE,EACrB,mBAAmB,EAAE,aAAa,EAClC,IAAI,EAAE,SAAS,EACf,UAAU,EAAE,IAAI,EAEhB,OAAO,EAAE,IAAI,EACb,UAAU,EAAE,UAAU,EACtB,UAAU,EAAE,IAAI,GAEjB;;AApBH,AAqBE,KArBG,CAqBH,YAAY,EArBP,MAAM,CAqBX,YAAY,CAAC,EAUX,UAAU,EAAE,KAAK,GAClB;;AAhCH,AAsBI,KAtBC,CAqBH,YAAY,CACV,EAAE,EAtBN,KAAK,CAqBH,YAAY,CACN,CAAC,EAtBT,KAAK,CAqBH,YAAY,CACH,CAAC,EAtBL,MAAM,CAqBX,YAAY,CACV,EAAE,EAtBC,MAAM,CAqBX,YAAY,CACN,CAAC,EAtBF,MAAM,CAqBX,YAAY,CACH,CAAC,CAAC,EACP,UAAU,EAAE,MAAM,GACnB;;AAxBL,AAyBI,KAzBC,CAqBH,YAAY,CAIV,CAAC,EAzBE,MAAM,CAqBX,YAAY,CAIV,CAAC,CAAC,EACA,UAAU,EAAE,IAAI,GACjB;;AA3BL,AA4BI,KA5BC,CAqBH,YAAY,CAOV,CAAC,CAAC,UAAU,EA5BT,MAAM,CAqBX,YAAY,CAOV,CAAC,CAAC,UAAU,CAAC,EACX,aAAa,EAAE,IAAI,GACpB;;AAIL,AAAA,KAAK,CAAC,SAAU,CAAA,IAAI,GAAG,MAAM,CAAC,SAAU,CAAA,IAAI,EAAE,EAC5C,cAAc,EAAE,WAAW,GAE5B;;AACD,AACE,MADI,GACF,GAAG,CAAC,EACJ,UAAU,EAAE,KAAK,GAClB;;AAGH,AAAA,QAAQ,CAAC,EACP,eAAe,EAAE,IAAI,EACrB,UAAU,EJ9EE,OAAe,EI+E3B,UAAU,EAAE,mEAAqE,GAElF;;ACxND,gBAAgB;AAEhB,AAAA,OAAO,CAAC,EACN,OAAO,EAAE,KAAK,EACd,OAAO,EAAE,KAAK,GACf;;AACD,AAAA,KAAK,CAAC,EACJ,MAAM,EAAE,UAAU,EAClB,OAAO,EAAE,CAAC,EACV,eAAe,EAAE,IAAI,EACrB,QAAQ,EAAE,KAAK,EACf,GAAG,EAAC,CAAC,EACL,KAAK,EAAE,IAAI,EACX,MAAM,EAAE,IAAI,EACZ,OAAO,EAAE,GAAG,EACZ,kBAAkB,EAAE,iBAAiB,EACrC,eAAe,EAAE,iBAAiB,EAClC,UAAU,EAAE,iBAAiB,EAC7B,gBAAgB,EAAE,WAAW,EAC7B,iBAAiB,EAAE,SAAS,EAC5B,mBAAmB,EAAE,aAAa,EAClC,eAAe,EAAE,OAAO,EACxB,kBAAkB,EAAE,iBAAiB,EACrC,eAAe,EAAE,iBAAiB,EAClC,UAAU,EAAE,iBAAiB,EAC7B,kBAAkB,EAAE,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CLmHxB,mBAAmB,EKlH/B,eAAe,EAAE,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CLkHrB,mBAAmB,EKjH/B,UAAU,EAAE,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CLiHhB,mBAAmB,EKhH/B,OAAO,EAAE,IAAI,EACb,SAAS,EAAE,IAAI,EACf,eAAe,EAAE,QAAQ,EACzB,WAAW,EAAE,MAAM,GAMpB;;AA/BD,AA0BE,KA1BG,GA0BD,CAAC,CAAC,EACF,MAAM,EAAE,IAAI,GAEb;;AAGH,AAAA,KAAK,CAAC,KAAK,CAAC,EACV,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,CAAC,EACV,kBAAkB,EAAE,iBAAiB,EACrC,eAAe,EAAE,iBAAiB,EAClC,UAAU,EAAE,iBAAiB,EAC7B,gBAAgB,EL2FJ,OAAe,GKzF5B;;AACD,AAAA,OAAO,CAAC,EACN,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,CAAC,EACV,gBAAgB,ELqFJ,OAAe,EKpF3B,kBAAkB,EAAE,iBAAiB,EACrC,eAAe,EAAE,iBAAiB,EAClC,UAAU,EAAE,iBAAiB,GAE7B;;AACF,AAAA,QAAQ,CAAC,EACP,MAAM,EAAE,aAAa,EACrB,SAAS,EAAE,IAAI,EACf,KAAK,ELkFO,OAAO,GKjFpB;;AAGD,AAAA,GAAG,CAAC,EACF,QAAQ,EAAE,QAAQ,EAClB,KAAK,EAAE,KAAK,EACZ,UAAU,EAAE,IAAI,EAChB,SAAS,EAAE,IAAI,EACf,GAAG,EAAE,GAAG,EACR,IAAI,EAAE,GAAG,EACT,SAAS,EAAE,qBAAqB,EAChC,gBAAgB,ELgEJ,OAAe,EK/D3B,aAAa,EAAE,GAAG,EAClB,OAAO,EAAE,IAAI,EACb,SAAS,EAAE,IAAI,GAcf;;AAzBF,AAYE,GAZC,CAYD,EAAE,CAAC,EACD,OAAO,EAAE,IAAI,EACb,KAAK,EAAE,IACT,GAAC;;AAfH,AAgBE,GAhBC,CAgBD,EAAE,CAAC,EACD,eAAe,EAAE,IAAI,EACrB,MAAM,EAAE,IAAI,EACZ,OAAO,EAAE,CAAC,GAKX;;AAxBH,AAoBI,GApBD,CAgBD,EAAE,CAIA,CAAC,CAAC,EACA,OAAO,EAAE,KAAK,EACd,SAAS,EAAE,IACb,GAAC;;AAGJ,AAAA,WAAW,CAAC,EACX,MAAM,EAAE,SAAS,EACjB,kBAAkB,EAAE,oBAAoB,EACxC,eAAe,EAAE,oBAAoB,EACrC,UAAU,EAAE,oBAAoB,GAChC;;AAEF,AAAA,YAAY,CAAC,EACX,QAAQ,EAAE,KAAK,EACf,GAAG,EAAE,CAAC,EACN,KAAK,EAAE,CAAC,EACR,MAAM,EAAE,CAAC,EACT,IAAI,EAAE,CAAC,EACP,UAAU,ELkCE,sBAAsB,EKjClC,OAAO,EAAE,EAAE,EACX,OAAO,EAAC,CAAC,EACT,kBAAkB,EAAE,qBAAqB,EACzC,eAAe,EAAE,qBAAqB,EACtC,UAAU,EAAE,qBAAqB,EACjC,cAAc,EAAE,IAAI,GAErB;;AAED,AAAA,YAAY,CAAC,MAAM,CAAC,EAClB,OAAO,EAAC,CAAC,EACT,cAAc,EAAE,IAAI,GACrB;;AAED,AAAA,YAAY,GAAG,GAAG,CAAC,EAEjB,OAAO,EAAE,IAAI,EACb,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,UAAU,EAClB,OAAO,EAAE,IAAI,EACb,aAAa,EAAE,GAAG,EAClB,UAAU,EAAE,OAAc,EAC1B,UAAU,EAAE,sCAAoD,EAChE,UAAU,EAAE,yCAAuD,EACnE,UAAU,EAAE,oCAAkD,GAC/D;;AAED,AAAA,aAAa,CAAC,EACZ,gBAAgB,ELWJ,OAAO,EKVnB,KAAK,ELQO,OAAO,EKPnB,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,IAAI,EACjB,QAAQ,EAAE,QAAQ,EAClB,KAAK,EAAE,KAAK,EACZ,UAAU,EAAE,MAAM,EAClB,GAAG,EAAE,KAAK,EACV,KAAK,EAAE,IAAI,EACX,MAAM,EAAE,IAAI,EACZ,eAAe,EAAE,IAAI,EACrB,WAAW,EAAE,IAAI,EACjB,aAAa,EAAE,IAAI,EACnB,UAAU,EAAE,iBAAiB,GAC9B;;AAED,AAAA,aAAa,CAAC,KAAK,CAAC,EAClB,gBAAgB,ELRJ,OAAO,EKSnB,KAAK,ELPO,OAAO,GKSpB;;AAED,AAAA,UAAU,CAAC,EACT,QAAQ,EAAE,KAAK,EACf,KAAK,EAAE,IAAI,EACX,MAAM,EAAE,IAAI,GAEb;;AC/JD,sBAAsB;AACtB,AAAA,cAAc,CAAC,EACb,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,IAAI,EACZ,KAAK,EAAE,IAAI,EACX,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,IAAI,EACb,UAAU,EAAE,IAAI,GACjB;;AAED,AAAA,qBAAqB,CAAC,EACpB,UAAU,EAAE,IAAI,EAChB,QAAQ,EAAE,QAAQ,EAClB,IAAI,EAAE,GAAG,EACT,GAAG,EAAC,GAAG,EACP,SAAS,EAAE,qBAAqB,EAChC,KAAK,EAAE,IAAI,GACZ;;AACD,AAAA,QAAQ,CAAC,EACP,QAAQ,EAAE,QAAQ,EAClB,KAAK,EAAE,CAAC,EACR,MAAM,EAAE,CAAC,EACT,SAAS,EAAE,IAAI,EACf,UAAU,EAAE,IAAI,GACjB;;ACxBD,aAAa;AAEb,AAAA,cAAc,CAAC,EAEb,OAAO,EAAE,IAAI,EACb,UAAU,EAAE,KAAK,EAEjB,QAAQ,EAAE,KAAK,EACf,MAAM,EAAE,CAAC,EACT,KAAK,EAAE,IAAI,EACX,gBAAgB,EPiIJ,OAAO,EOhInB,SAAS,EAAE,IAAI,EACf,eAAe,EAAE,YAAY,EAC7B,aAAa,EAAE,MAAM,EACrB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,IAAI,GAiBd;;AA9BD,AAeE,cAfY,CAeZ,CAAC,CAAC,EACA,IAAI,EAAE,SAAS,EACf,MAAM,EAAE,mBAAmB,EAC3B,SAAS,EAAE,MAAM,EACjB,WAAW,EPyGG,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,EAAE,SAAS,GOxGtE;;AACD,MAAM,mCACJ,GAtBJ,AAsBI,cAtBU,CAsBV,CAAC,CAAC,EACA,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,mBAAmB,GAC5B,CAzBL,AA0BI,cA1BU,CA0BV,IAAI,CAAC,EACH,MAAM,EAAE,mBAAmB,GAC5B,EAHA;;AAOL,AAAA,IAAI,CAAC,EACH,IAAI,EAAE,SAAS,EACf,eAAe,EAAE,yDAAyD,EAC1E,kBAAkB,EAAE,yDAAyD,EAC7E,cAAc,EAAE,yDAAyD,EACzE,UAAU,EAAE,yDAAyD,EACrE,UAAU,EAAE,MAAM,EAClB,qBAAqB,EAAE,EAAE,EACzB,qBAAqB,EAAE,EAAE,EACzB,iBAAiB,EAAE,MAAM,EACzB,qBAAqB,EAAE,MAAM,EAC7B,gBAAgB,EAAE,0EAAqE,EACvF,iBAAiB,EAAE,WAAW,EAC9B,eAAe,EAAE,UAAU,EAC3B,eAAe,EAAE,SAAS,EAC1B,iBAAiB,EAAE,gCAAgC,EACnD,cAAc,EAAE,gCAAgC,EAChD,SAAS,EAAE,gCAAgC,EAC3C,MAAM,EAAE,mBAAmB,GAC5B;;AACD,AAAA,IAAI,CAAC,KAAK,CAAC,EAET,eAAe,EAAE,yDAAyD,EAC1E,kBAAkB,EAAE,yDAAyD,EAC7E,cAAc,EAAE,yDAAyD,EACzE,UAAU,EAAE,yDAAyD,GACtE;;AC5DD;qDACqD;AAErD,iCAAiC;AACjC,AAAA,aAAa,CAAC,EACZ,OAAO,EAAE,IAAI,EACb,SAAS,EAAE,IAAI,EACf,OAAO,EAAE,IAAI,EACb,eAAe,EAAE,YAAY,EAC7B,cAAc,EAAE,WAAW,EAC3B,WAAW,EAAE,MAAM,GAKpB;;AAXD,AAOE,aAPW,GAOT,GAAG,CAAC,EAEJ,MAAM,EAAE,IAAI,GACb;;AAGH,AAAA,KAAK,CAAC,EACJ,MAAM,EAAE,CAAC,EACT,KAAK,EAAE,IAAI,GACZ;;AAED,AAAA,YAAY,CAAC,EACX,IAAI,EAAE,SAAS,EACf,SAAS,EAAE,KAAK,EAChB,aAAa,EAAE,GAAG,EAClB,KAAK,EAAE,IAAI,GACZ;;AACD,AAEE,OAFK,CAEL,EAAE,CAAC,EACD,UAAU,EAAE,IAAI,EAChB,OAAO,EAAE,CAAC,GAYX;;AAhBH,AAKI,OALG,CAEL,EAAE,CAGA,EAAE,CAAC,EACD,UAAU,EAAE,KAAK,CAAC,GAAG,CRwGb,yBAAyB,GQtGlC;;AARL,AASI,OATG,CAEL,EAAE,CAOA,EAAE,CAAC,WAAW,CAAC,EACb,aAAa,EAAE,WAAY,GAC5B;;AAXL,AAYI,OAZG,CAEL,EAAE,CAUA,EAAE,CAAC,UAAU,CAAC,EACZ,aAAa,EAAE,WAAW,EAC1B,aAAa,EAAE,KAAK,CAAC,GAAG,CRgGhB,yBAAyB,GQ/FlC;;AAIL,AAAA,UAAU,CAAC,EACT,gBAAgB,ERuFJ,OAAe,EQtF3B,MAAM,EAAE,aAAa,GACtB;;AAED,AAAA,OAAO,CAAC,EACN,MAAM,EAAE,MAAM,GACf;;AAED,AAAA,OAAO,CAAC,EACN,IAAI,EAAE,SAAS,EACf,UAAU,EAAE,IAAI,EAChB,QAAQ,EAAE,QAAQ,EAClB,UAAU,EAAE,MAAM,EAClB,eAAe,EAAE,IAAI,EACrB,WAAW,EAAE,IAAI,GAClB;;AAGD,AAAA,QAAQ,CAAC,EACP,OAAO,EAAE,IAAI,EACb,KAAK,EAAE,IAAI,EACX,MAAM,EAAE,IAAI,EACZ,SAAS,EAAE,KAAK,EAChB,eAAe,EAAE,UAAU,EAC3B,WAAW,EAAE,MAAM,EACnB,gBAAgB,ER8DJ,OAAe,GQ5D5B;;AAED,AAAA,QAAQ,CAAC,EACP,IAAI,EAAE,QAAQ,EACd,MAAM,EAAE,CAAC,EACT,OAAO,EAAE,IAAI,GAEd;;AAED,AAAA,SAAS,CAAC,EACR,OAAO,EAAE,IAAI,EACb,MAAM,EAAE,CAAC,EACT,OAAO,EAAE,IAAI,EACb,SAAS,EAAE,IAAI,GAChB;;AAED,AAAA,OAAO,CAAC,EACN,MAAM,EAAE,CAAC,GACV;;AAED,AAAA,OAAO,CAAC,EAAE,CAAC,EACT,gBAAgB,ERuCJ,OAAe,EQtC3B,MAAM,EAAE,OAAO,EACf,MAAM,EAAE,CAAC,EACT,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,GAAG,CAAC,KAAK,CRsCV,yBAAyB,EQrCrC,YAAY,EAAE,GAAG,CAAC,KAAK,CRqCX,yBAAyB,EQpCrC,UAAU,EAAE,CAAC,EACb,UAAU,EAAE,qBAAqB,GAClC;;AAED,AAAA,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,EACf,gBAAgB,ERkCJ,OAAO,EQjCnB,KAAK,ER2BO,OAAe,EQ1B3B,UAAU,EAAE,qBAAqB,GAClC;;AAED,AAAA,OAAO,CAAC,EACN,QAAQ,EAAE,QAAQ,GACnB;;AAED,AAAA,QAAQ,CAAC,EACP,IAAI,EAAE,IAAI,EACV,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,QAAQ,EAClB,KAAK,EAAE,IAAI,EACX,aAAa,EAAE,QAAQ,EACvB,GAAG,EAAE,CAAC,EACN,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,IAAI,EACjB,aAAa,EAAE,IAAI,GACpB;;AAED,AAAA,MAAM,CAAC,EACL,YAAY,EAAE,IAAI,EAClB,KAAK,EAAE,IAAI,GACZ;;AAED,AAAA,SAAS,CAAC,EACR,YAAY,EAAE,IAAI,EAClB,QAAQ,EAAE,QAAQ,EAClB,KAAK,EAAE,IAAI,EACX,GAAG,EAAE,CAAC,GACP;;AAED,AAAA,MAAM,CAAC,EACL,gBAAgB,ERHJ,yBAAyB,CQGH,UAAU,EAC5C,MAAM,EAAE,OAAO,CAAA,UAAU,GAC1B;;AACD,AAAA,MAAM,CAAC,KAAK,CAAC,EACX,gBAAgB,ERJJ,OAAO,CQIgB,UAAU,GAC9C;;AAGD,AAAA,CAAC,CAAA,AAAA,EAAC,EAAI,KAAK,AAAT,EAAW,EACX,SAAS,EAAE,KAAK,EAChB,KAAK,ERdO,OAAO,EQenB,MAAM,EAAE,OAAO,EACf,MAAM,EAAE,CAAC,EACT,OAAO,EAAE,aAAa,EACtB,eAAe,EAAE,IAAI,GACtB;;AAGD,AAAA,CAAC,CAAA,AAAA,EAAC,EAAI,KAAK,AAAT,GAAY,gBAAgB,CAAC,EAC7B,MAAM,EAAE,CAAC,EACT,OAAO,EAAE,CAAC,GACX;;AACD,AAAA,SAAS,CAAC,EACR,IAAI,EAAE,SAAS,EACf,eAAe,EAAE,MAAM,EACvB,OAAO,EAAE,IAAI,EACb,SAAS,EAAE,IAAI,EACf,SAAS,EAAE,KAAK,GAMjB;;AAXD,AAME,SANO,CAMP,OAAO,CAAC,EACN,MAAM,EAAE,UAAU,EAClB,IAAI,EAAE,QAAQ,EACd,UAAU,EAAE,MAAM,GACnB;;AAEH,AAAA,gBAAgB,CAAC,EAEf,KAAK,EAAE,GAAG,EACV,WAAW,EAAE,GAAG,EAAE,sBAAsB,CACxC,QAAQ,EAAE,QAAQ,EAAE,mCAAmC,EACxD;;AACA,AAAA,gBAAgB,CAAC,EAChB,QAAQ,EAAE,QAAQ,EAClB,GAAG,EAAE,CAAC,EACN,IAAI,EAAE,CAAC,EACP,MAAM,EAAE,CAAC,EACT,KAAK,EAAE,CAAC,EACR,aAAa,EAAE,IAAI,EACnB,cAAc,EAAE,CAAC,EACjB,eAAe,EAAE,KAAK,GAEvB;;AACD,AAAA,QAAQ,CAAC,EAEP,iBAAiB,EAAE,iCAAiC,EAAE,YAAY,CAClE,cAAc,EAAE,iCAAiC,EACjD,SAAS,EAAE,iCAAiC,GAC7C;;AAED,AAAA,OAAO,CAAC,EACN,oBAAoB,EAAE,MAAM,GAC7B;;AAED,AAAA,aAAa,CAAC,EACZ,OAAO,EAAE,IAAI,EACb,SAAS,EAAE,IAAI,EACf,MAAM,EAAC,CAAC,EACR,OAAO,EAAC,CAAC,EACT,gBAAgB,ERnEJ,OAAO,EQoEnB,MAAM,EAAE,CAAC,EACT,OAAO,EAAE,CAAC,EACV,UAAU,EAAE,IAAI,EAChB,UAAU,EAAE,IAAI,GAsCjB;;AA/CD,AAUE,aAVW,CAUX,OAAO,CAAC,EACN,gBAAgB,ERzEN,OAAO,EQ0EjB,KAAK,ERhFK,OAAe,GQiF1B;;AAbH,AAcE,aAdW,CAcX,OAAO,CAAC,KAAK,CAAC,EACZ,gBAAgB,ER3EN,OAAO,EQ4EjB,KAAK,ERlFK,OAAO,GQmFlB;;AAjBH,AAkBE,aAlBW,GAkBT,GAAG,CAAC,EACJ,IAAI,EAAE,QAAQ,EACd,KAAK,EAAE,GAAG,EACV,SAAS,EAAE,KAAK,EAChB,MAAM,EAAE,CAAC,EACT,OAAO,EAAE,CAAC,EACV,gBAAgB,ER5FN,OAAe,EQ6FzB,kBAAkB,EAAE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAE,KAAI,CRxFnC,mBAAmB,EQyF7B,eAAe,EAAE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAE,KAAI,CRzFhC,mBAAmB,EQ0F7B,UAAU,EAAE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAE,KAAI,CR1F3B,mBAAmB,GQmG9B;;AApCH,AA6BI,aA7BS,GAkBT,GAAG,GAWD,EAAE,EA7BR,aAAa,GAkBT,GAAG,CAWG,CAAC,CAAC,EACN,UAAU,EAAE,IAAI,EAChB,MAAM,EAAE,SAAS,GAClB;;AAhCL,AAiCI,aAjCS,GAkBT,GAAG,CAeH,CAAC,CAAC,UAAU,CAAC,EACX,aAAa,EAAE,IAAI,GACpB;;AAnCL,AAsCE,aAtCW,CAsCX,WAAW,CAAC,EACV,KAAK,EAAE,GAAG,EACV,SAAS,EAAE,KAAK,EAChB,UAAU,EAAE,IAAI,EAChB,gBAAgB,EAAE,WAAW,EAC7B,eAAe,EAAE,KAAK,EACtB,mBAAmB,EAAE,MAAM,GAC5B;;AAIH,AAAA,aAAa,CAAC,SAAU,CAAA,IAAI,EAAE,EAC5B,cAAc,EAAE,WAAW,EAC3B,gBAAgB,ER/GJ,OAAO,EQgHnB,UAAU,EAAE,KAAK,GAelB;;AAlBD,AAIE,aAJW,CAAC,SAAU,CAAA,IAAI,EAI1B,OAAO,CAAC,EACN,gBAAgB,ERlHN,OAAO,EQmHjB,KAAK,ERzHK,OAAO,GQ0HlB;;AAPH,AAQE,aARW,CAAC,SAAU,CAAA,IAAI,EAQ1B,OAAO,CAAC,KAAK,CAAA,EACX,gBAAgB,ERxHN,OAAO,EQyHjB,KAAK,ER/HK,OAAe,GQgI1B;;AAXH,AAaI,aAbS,CAAC,SAAU,CAAA,IAAI,IAYxB,GAAG,GACD,EAAE,EAbR,aAAa,CAAC,SAAU,CAAA,IAAI,IAYxB,GAAG,CACG,CAAC,EAbX,aAAa,CAAC,SAAU,CAAA,IAAI,IAYxB,GAAG,CACM,CAAC,CAAC,EACT,UAAU,EAAE,KAAK,GAElB;;AAIL,AAAA,YAAY,CAAC,EACX,gBAAgB,ER1IJ,OAAe,EQ2I3B,MAAM,EAAE,CAAC,EACT,OAAO,EAAC,CAAC,EACT,QAAQ,EAAE,KAAK,EACf,MAAM,EAAE,CAAC,EACT,IAAI,EAAE,CAAC,EACP,KAAK,EAAE,IAAI,EACX,OAAO,EAAE,MAAM,EACf,kBAAkB,EAAE,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,kBAAe,EACpD,eAAe,EAAE,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,kBAAe,EACjD,UAAU,EAAE,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,kBAAe,EAC5C,kBAAkB,EAAE,iBAAiB,EACrC,eAAe,EAAE,iBAAiB,EAClC,UAAU,EAAE,iBAAiB,GAC9B;;AACD,AAAA,WAAW,CAAC,EACV,MAAM,EAAE,KAAK,GAEd;;AACD,AAAA,WAAW,CAAC,EACV,MAAM,EAAE,CAAC,GACV;;AACD,MAAM,mCACJ,GAAA,AAAA,aAAa,CAAC,EACZ,eAAe,EAAE,IAAI,GAKtB,CAND,AAEE,aAFW,CAEX,WAAW,CAAC,EACV,UAAU,EAAE,KAAK,GAClB,CAGH,AAAA,QAAQ,CAAC,EAEP,WAAW,EAAE,QAAQ,EACrB,cAAc,EAAE,IAAI,GACrB,CACD,AAAA,OAAO,CAAC,EACN,IAAI,EAAE,SAAS,EACf,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,QAAQ,EAClB,UAAU,EAAE,MAAM,EAClB,eAAe,EAAE,IAAI,GAEtB,CACD,AAAA,CAAC,CAAA,AAAA,EAAC,EAAI,KAAK,AAAT,EAAW,EACX,SAAS,EAAE,GAAG,EACd,KAAK,ERrLK,OAAO,EQsLjB,MAAM,EAAE,OAAO,EACf,MAAM,EAAE,CAAC,EACT,OAAO,EAAE,UAAU,EACnB,eAAe,EAAE,IAAI,GACtB,CACD,AAAA,QAAQ,CAAA,EAEN,SAAS,EAAE,KAAK,EAEhB,eAAe,EAAE,IAAI,EACrB,MAAM,EAAE,CAAC,EACT,OAAO,EAAE,UAAU,GACpB,EA7BA;;AC7SH,AAAA,SAAS,CAAC,EACR,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,OAAO,EACb,SAAS,EAAE,KAAK,EAChB,MAAM,EAAE,KAAK,EACb,OAAO,EAAE,CAAC,EACV,MAAM,EAAE,CAAC,EACT,eAAe,EAAE,IAAI,EACrB,UAAU,ET+HE,sBAAsB,ES9HlC,UAAU,EAAE,gFAAwE,GAwCpF;;AAjDF,AAWE,SAXO,GAWL,OAAO,CAAC,EACR,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,KAAK,EACb,KAAK,EAAE,GAAG,EACV,UAAU,EAAE,WAAW,EACvB,OAAO,EAAE,CAAC,EACV,MAAM,EAAE,CAAC,EACT,UAAU,EAAE,MAAM,GAKnB;;AAvBH,AAmBI,SAnBK,GAWL,OAAO,GAQL,CAAC,CAAC,EACF,MAAM,EAAE,IAAI,GACb;;AArBL,AAwBE,SAxBO,CAwBP,gBAAgB,CAAC,EAEf,UAAU,EAAE,KAAK,EACjB,WAAW,EAAE,GAAG,EAChB,SAAS,EAAE,gBAAgB,EAE3B,KAAK,EAAE,GAAG,EACV,WAAW,EAAE,GAAG,EAAE,sBAAsB,CACxC,QAAQ,EAAE,QAAQ,EAAE,mCAAmC,EACxD;;AAjCH,AAkCG,SAlCM,CAkCN,gBAAgB,CAAC,EAChB,QAAQ,EAAE,QAAQ,EAClB,GAAG,EAAE,CAAC,EACN,IAAI,EAAE,CAAC,EACP,MAAM,EAAE,CAAC,EACT,KAAK,EAAE,CAAC,EACR,aAAa,EAAE,IAAI,EACnB,cAAc,EAAE,CAAC,EACjB,eAAe,EAAE,KAAK,GACvB;;AA3CH,AA4CE,SA5CO,CA4CP,WAAW,CAAC,EACV,MAAM,EAAE,OAAO,EACf,YAAY,EAAE,MAAM,GACrB;;AAGF,AAAA,UAAU,CAAC,EACV,IAAI,EAAE,OAAO,EAEb,MAAM,EAAC,KAAK,EACZ,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,CAAC,EACT,OAAO,EAAE,CAAC,GAsBV;;AA7BD,AAQC,UARS,CAQT,OAAO,CAAC,EACN,UAAU,EAAE,IAAI,GAWjB;;AApBF,AAUG,UAVO,CAQT,OAAO,GAEH,CAAC,CAAC,EACF,MAAM,EAAE,IAAI,GACb;;AAZJ,AAaG,UAbO,CAQT,OAAO,CAKL,KAAK,CAAC,EACJ,MAAM,EAAE,IAAI,EACZ,OAAO,EAAE,CAAC,GACX;;AAhBJ,AAiBG,UAjBO,CAQT,OAAO,CASL,CAAC,CAAC,WAAW,CAAC,EACZ,UAAU,EAAC,IAAI,GAChB;;AAnBJ,AAsBC,UAtBS,CAsBT,cAAc,CAAC,EACb,UAAU,EAAE,KAAK,GAClB;;AAxBF,AAyBC,UAzBS,CAyBT,SAAS,CAAC,EACR,UAAU,EAAE,IAAI,GACjB;;AAOH,MAAM,oCACJ,GAAA,AAAA,SAAS,CAAC,EAER,SAAS,EAAE,IAAI,GAQhB,CAVD,AAGE,SAHO,CAGP,OAAO,CAAC,EACN,QAAQ,EAAE,QAAQ,EAClB,GAAG,EAAE,CAAC,EACN,MAAM,EAAE,CAAC,EACT,KAAK,EAAE,IAAI,EACX,MAAM,EAAE,IAAI,GACb,CAEJ,AAAA,UAAU,CAAC,EACR,MAAM,EAAE,KAAK,EACb,UAAU,EAAE,KAAK,GAMlB,CARF,AAIK,UAJK,CAGP,OAAO,CACL,CAAC,CAAC,WAAW,CAAC,EACZ,UAAU,EAAC,IAAI,GAChB,EAPJ;;AAYH,AAAA,QAAQ,CAAC,EACP,iBAAiB,EAAE,gCAAgC,EACnD,cAAc,EAAE,gCAAgC,EAChD,SAAS,EAAE,gCAAgC,GAC5C;;AC9GD,AAAA,YAAY,CAAC,EACX,OAAO,EAAE,IAAI,EACb,UAAU,EAAE,CAAC,EACb,WAAW,EAAE,IAAI,GAoBlB;;AAvBD,AAIC,YAJW,CAIX,IAAI,CAAC,EACH,MAAM,EAAE,CAAC,EACT,aAAa,EAAE,GAAG,EAClB,KAAK,EAAE,IAAI,EACX,SAAS,EAAE,KAAK,EAChB,UAAU,EAAE,UAAU,EACtB,eAAe,EAAE,IAAI,EACrB,OAAO,EAAE,SAAS,EAClB,MAAM,EAAE,CAAC,EACT,SAAS,EAAE,IAAI,EACf,MAAM,EAAE,OAAO,EACf,gBAAgB,EAAE,OAAO,EACzB,KAAK,EAAE,IAAI,EACX,UAAU,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,kBAAkB,GAK7C;;AAtBF,AAkBG,YAlBS,CAIX,IAAI,CAcA,KAAK,CAAC,EACN,gBAAgB,EAAE,OAAO,EACzB,KAAK,EAAE,IAAI,GACZ;;AAIJ,AAAA,kBAAkB,CAAC,YAAY,CAAC,EAC9B,OAAO,EAAE,KAAK,GACf;;AAED,AAAA,UAAU,CAAC,EACT,OAAO,EAAE,IAAI,GACd;;AC/BD,AAAA,KAAK,EAAE,OAAO,CAAC,EACb,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,CAAC,EACV,gBAAgB,EXkIJ,OAAe,GWjI3B;;AAEF,AAAA,WAAW,CAAC,EACV,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,CAAC,EACV,gBAAgB,EX4HJ,OAAe,EW3H3B,kBAAkB,EAAE,iBAAiB,EACrC,eAAe,EAAE,iBAAiB,EAClC,UAAU,EAAE,iBAAiB,GAC7B;;AAEF,AAAA,KAAK,CAAC,EACJ,WAAW,EAAE,KAAK,GACnB;;AAGD,AAAA,YAAY,CAAC,EACX,OAAO,EAAE,IAAI,GACd;;AACD,AAAA,UAAU,CAAC,EACT,OAAO,EAAE,KAAK,EACd,IAAI,EAAE,SAAS,EACf,aAAa,EAAE,GAAG,EAClB,KAAK,EAAE,IAAI,GACZ;;AACD,AAAA,aAAa,CAAC,EACZ,OAAO,EAAE,KAAK,EACd,MAAM,EAAE,KAAK,GACd;;AACD,AAAA,aAAa,CAAC,EACZ,OAAO,EAAE,IAAI,GACd" + "mappings": "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" } \ No newline at end of file diff --git a/assets/js/workbox-v3.6.3/workbox-background-sync.dev.js b/assets/js/workbox-v3.6.3/workbox-background-sync.dev.js new file mode 100644 index 0000000..b65a0f3 --- /dev/null +++ b/assets/js/workbox-v3.6.3/workbox-background-sync.dev.js @@ -0,0 +1,593 @@ +this.workbox = this.workbox || {}; +this.workbox.backgroundSync = (function (DBWrapper_mjs,WorkboxError_mjs,logger_mjs,assert_mjs,getFriendlyURL_mjs) { + 'use strict'; + + try { + self.workbox.v['workbox:background-sync:3.6.3'] = 1; + } catch (e) {} // eslint-disable-line + + /* + Copyright 2017 Google Inc. All Rights Reserved. + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + + const serializableProperties = ['method', 'referrer', 'referrerPolicy', 'mode', 'credentials', 'cache', 'redirect', 'integrity', 'keepalive']; + + /** + * A class to make it easier to serialize and de-serialize requests so they + * can be stored in IndexedDB. + * + * @private + */ + class StorableRequest { + /** + * Converts a Request object to a plain object that can be structured + * cloned or JSON-stringified. + * + * @param {Request} request + * @return {Promise} + * + * @private + */ + static fromRequest(request) { + return babelHelpers.asyncToGenerator(function* () { + const requestInit = { headers: {} }; + + // Set the body if present. + if (request.method !== 'GET') { + // Use blob to support non-text request bodies, + // and clone first in case the caller still needs the request. + requestInit.body = yield request.clone().blob(); + } + + // Convert the headers from an iterable to an object. + for (const [key, value] of request.headers.entries()) { + requestInit.headers[key] = value; + } + + // Add all other serializable request properties + for (const prop of serializableProperties) { + if (request[prop] !== undefined) { + requestInit[prop] = request[prop]; + } + } + + return new StorableRequest({ url: request.url, requestInit }); + })(); + } + + /** + * Accepts a URL and RequestInit dictionary that can be used to create a + * new Request object. A timestamp is also generated so consumers can + * reference when the object was created. + * + * @param {Object} param1 + * @param {string} param1.url + * @param {Object} param1.requestInit + * See: https://fetch.spec.whatwg.org/#requestinit + * @param {number} param1.timestamp The time the request was created, + * defaulting to the current time if not specified. + * + * @private + */ + constructor({ url, requestInit, timestamp = Date.now() }) { + this.url = url; + this.requestInit = requestInit; + + // "Private" + this._timestamp = timestamp; + } + + /** + * Gets the private _timestamp property. + * + * @return {number} + * + * @private + */ + get timestamp() { + return this._timestamp; + } + + /** + * Coverts this instance to a plain Object. + * + * @return {Object} + * + * @private + */ + toObject() { + return { + url: this.url, + timestamp: this.timestamp, + requestInit: this.requestInit + }; + } + + /** + * Converts this instance to a Request. + * + * @return {Request} + * + * @private + */ + toRequest() { + return new Request(this.url, this.requestInit); + } + + /** + * Creates and returns a deep clone of the instance. + * + * @return {StorableRequest} + * + * @private + */ + clone() { + const requestInit = Object.assign({}, this.requestInit); + requestInit.headers = Object.assign({}, this.requestInit.headers); + if (this.requestInit.body) { + requestInit.body = this.requestInit.body.slice(); + } + + return new StorableRequest({ + url: this.url, + timestamp: this.timestamp, + requestInit + }); + } + } + + /* + Copyright 2017 Google Inc. All Rights Reserved. + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + + const DB_NAME = 'workbox-background-sync'; + const OBJECT_STORE_NAME = 'requests'; + const INDEXED_PROP = 'queueName'; + const TAG_PREFIX = 'workbox-background-sync'; + const MAX_RETENTION_TIME = 60 * 24 * 7; // 7 days in minutes + + /* + Copyright 2017 Google Inc. All Rights Reserved. + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + + /** + * A class to manage storing requests from a Queue in IndexedbDB, + * indexed by their queue name for easier access. + * + * @private + */ + class QueueStore { + /** + * Associates this instance with a Queue instance, so entries added can be + * identified by their queue name. + * + * @param {Queue} queue + * + * @private + */ + constructor(queue) { + this._queue = queue; + this._db = new DBWrapper_mjs.DBWrapper(DB_NAME, 1, { + onupgradeneeded: evt => evt.target.result.createObjectStore(OBJECT_STORE_NAME, { autoIncrement: true }).createIndex(INDEXED_PROP, INDEXED_PROP, { unique: false }) + }); + } + + /** + * Takes a StorableRequest instance, converts it to an object and adds it + * as an entry in the object store. + * + * @param {StorableRequest} storableRequest + * + * @private + */ + addEntry(storableRequest) { + var _this = this; + + return babelHelpers.asyncToGenerator(function* () { + yield _this._db.add(OBJECT_STORE_NAME, { + queueName: _this._queue.name, + storableRequest: storableRequest.toObject() + }); + })(); + } + + /** + * Gets the oldest entry in the object store, removes it, and returns the + * value as a StorableRequest instance. If no entry exists, it returns + * undefined. + * + * @return {StorableRequest|undefined} + * + * @private + */ + getAndRemoveOldestEntry() { + var _this2 = this; + + return babelHelpers.asyncToGenerator(function* () { + const [entry] = yield _this2._db.getAllMatching(OBJECT_STORE_NAME, { + index: INDEXED_PROP, + query: IDBKeyRange.only(_this2._queue.name), + count: 1, + includeKeys: true + }); + + if (entry) { + yield _this2._db.delete(OBJECT_STORE_NAME, entry.primaryKey); + return new StorableRequest(entry.value.storableRequest); + } + })(); + } + } + + /* + Copyright 2017 Google Inc. All Rights Reserved. + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + + const queueNames = new Set(); + + /** + * A class to manage storing failed requests in IndexedDB and retrying them + * later. All parts of the storing and replaying process are observable via + * callbacks. + * + * @memberof workbox.backgroundSync + */ + class Queue { + /** + * Creates an instance of Queue with the given options + * + * @param {string} name The unique name for this queue. This name must be + * unique as it's used to register sync events and store requests + * in IndexedDB specific to this instance. An error will be thrown if + * a duplicate name is detected. + * @param {Object} [options] + * @param {Object} [options.callbacks] Callbacks to observe the lifecycle of + * queued requests. Use these to respond to or modify the requests + * during the replay process. + * @param {function(StorableRequest):undefined} + * [options.callbacks.requestWillEnqueue] + * Invoked immediately before the request is stored to IndexedDB. Use + * this callback to modify request data at store time. + * @param {function(StorableRequest):undefined} + * [options.callbacks.requestWillReplay] + * Invoked immediately before the request is re-fetched. Use this + * callback to modify request data at fetch time. + * @param {function(Array):undefined} + * [options.callbacks.queueDidReplay] + * Invoked after all requests in the queue have successfully replayed. + * @param {number} [options.maxRetentionTime = 7 days] The amount of time (in + * minutes) a request may be retried. After this amount of time has + * passed, the request will be deleted from the queue. + */ + constructor(name, { + callbacks = {}, + maxRetentionTime = MAX_RETENTION_TIME + } = {}) { + // Ensure the store name is not already being used + if (queueNames.has(name)) { + throw new WorkboxError_mjs.WorkboxError('duplicate-queue-name', { name }); + } else { + queueNames.add(name); + } + + this._name = name; + this._callbacks = callbacks; + this._maxRetentionTime = maxRetentionTime; + this._queueStore = new QueueStore(this); + + this._addSyncListener(); + } + + /** + * @return {string} + */ + get name() { + return this._name; + } + + /** + * Stores the passed request into IndexedDB. The database used is + * `workbox-background-sync` and the object store name is the same as + * the name this instance was created with (to guarantee it's unique). + * + * @param {Request} request The request object to store. + */ + addRequest(request) { + var _this = this; + + return babelHelpers.asyncToGenerator(function* () { + { + assert_mjs.assert.isInstance(request, Request, { + moduleName: 'workbox-background-sync', + className: 'Queue', + funcName: 'addRequest', + paramName: 'request' + }); + } + + const storableRequest = yield StorableRequest.fromRequest(request.clone()); + yield _this._runCallback('requestWillEnqueue', storableRequest); + yield _this._queueStore.addEntry(storableRequest); + yield _this._registerSync(); + { + logger_mjs.logger.log(`Request for '${getFriendlyURL_mjs.getFriendlyURL(storableRequest.url)}' has been + added to background sync queue '${_this._name}'.`); + } + })(); + } + + /** + * Retrieves all stored requests in IndexedDB and retries them. If the + * queue contained requests that were successfully replayed, the + * `queueDidReplay` callback is invoked (which implies the queue is + * now empty). If any of the requests fail, a new sync registration is + * created to retry again later. + */ + replayRequests() { + var _this2 = this; + + return babelHelpers.asyncToGenerator(function* () { + const now = Date.now(); + const replayedRequests = []; + const failedRequests = []; + + let storableRequest; + while (storableRequest = yield _this2._queueStore.getAndRemoveOldestEntry()) { + // Make a copy so the unmodified request can be stored + // in the event of a replay failure. + const storableRequestClone = storableRequest.clone(); + + // Ignore requests older than maxRetentionTime. + const maxRetentionTimeInMs = _this2._maxRetentionTime * 60 * 1000; + if (now - storableRequest.timestamp > maxRetentionTimeInMs) { + continue; + } + + yield _this2._runCallback('requestWillReplay', storableRequest); + + const replay = { request: storableRequest.toRequest() }; + + try { + // Clone the request before fetching so callbacks get an unused one. + replay.response = yield fetch(replay.request.clone()); + { + logger_mjs.logger.log(`Request for '${getFriendlyURL_mjs.getFriendlyURL(storableRequest.url)}' + has been replayed`); + } + } catch (err) { + { + logger_mjs.logger.log(`Request for '${getFriendlyURL_mjs.getFriendlyURL(storableRequest.url)}' + failed to replay`); + } + replay.error = err; + failedRequests.push(storableRequestClone); + } + + replayedRequests.push(replay); + } + + yield _this2._runCallback('queueDidReplay', replayedRequests); + + // If any requests failed, put the failed requests back in the queue + // and rethrow the failed requests count. + if (failedRequests.length) { + yield Promise.all(failedRequests.map(function (storableRequest) { + return _this2._queueStore.addEntry(storableRequest); + })); + + throw new WorkboxError_mjs.WorkboxError('queue-replay-failed', { name: _this2._name, count: failedRequests.length }); + } + })(); + } + + /** + * Runs the passed callback if it exists. + * + * @private + * @param {string} name The name of the callback on this._callbacks. + * @param {...*} args The arguments to invoke the callback with. + */ + _runCallback(name, ...args) { + var _this3 = this; + + return babelHelpers.asyncToGenerator(function* () { + if (typeof _this3._callbacks[name] === 'function') { + yield _this3._callbacks[name].apply(null, args); + } + })(); + } + + /** + * In sync-supporting browsers, this adds a listener for the sync event. + * In non-sync-supporting browsers, this will retry the queue on service + * worker startup. + * + * @private + */ + _addSyncListener() { + if ('sync' in registration) { + self.addEventListener('sync', event => { + if (event.tag === `${TAG_PREFIX}:${this._name}`) { + { + logger_mjs.logger.log(`Background sync for tag '${event.tag}' + has been received, starting replay now`); + } + event.waitUntil(this.replayRequests()); + } + }); + } else { + { + logger_mjs.logger.log(`Background sync replaying without background sync event`); + } + // If the browser doesn't support background sync, retry + // every time the service worker starts up as a fallback. + this.replayRequests(); + } + } + + /** + * Registers a sync event with a tag unique to this instance. + * + * @private + */ + _registerSync() { + var _this4 = this; + + return babelHelpers.asyncToGenerator(function* () { + if ('sync' in registration) { + try { + yield registration.sync.register(`${TAG_PREFIX}:${_this4._name}`); + } catch (err) { + // This means the registration failed for some reason, possibly due to + // the user disabling it. + { + logger_mjs.logger.warn(`Unable to register sync event for '${_this4._name}'.`, err); + } + } + } + })(); + } + + /** + * Returns the set of queue names. This is primarily used to reset the list + * of queue names in tests. + * + * @return {Set} + * + * @private + */ + static get _queueNames() { + return queueNames; + } + } + + /* + Copyright 2017 Google Inc. All Rights Reserved. + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + + /** + * A class implementing the `fetchDidFail` lifecycle callback. This makes it + * easier to add failed requests to a background sync Queue. + * + * @memberof workbox.backgroundSync + */ + class Plugin { + /** + * @param {...*} queueArgs Args to forward to the composed Queue instance. + * See the [Queue]{@link workbox.backgroundSync.Queue} documentation for + * parameter details. + */ + constructor(...queueArgs) { + this._queue = new Queue(...queueArgs); + this.fetchDidFail = this.fetchDidFail.bind(this); + } + + /** + * @param {Object} options + * @param {Request} options.request + * @private + */ + fetchDidFail({ request }) { + var _this = this; + + return babelHelpers.asyncToGenerator(function* () { + yield _this._queue.addRequest(request); + })(); + } + } + + /* + Copyright 2017 Google Inc. All Rights Reserved. + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + + var publicAPI = /*#__PURE__*/Object.freeze({ + Queue: Queue, + Plugin: Plugin + }); + + /* + Copyright 2017 Google Inc. All Rights Reserved. + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + + return publicAPI; + +}(workbox.core._private,workbox.core._private,workbox.core._private,workbox.core._private,workbox.core._private)); + +//# sourceMappingURL=workbox-background-sync.dev.js.map diff --git a/assets/js/workbox-v3.6.3/workbox-background-sync.dev.js.map b/assets/js/workbox-v3.6.3/workbox-background-sync.dev.js.map new file mode 100644 index 0000000..ef88572 --- /dev/null +++ b/assets/js/workbox-v3.6.3/workbox-background-sync.dev.js.map @@ -0,0 +1 @@ +{"version":3,"names":[],"mappings":"","sources":["packages/workbox-background-sync/browser.mjs"],"sourcesContent":["this.workbox = this.workbox || {};\nthis.workbox.backgroundSync = (function (DBWrapper_mjs,WorkboxError_mjs,logger_mjs,assert_mjs,getFriendlyURL_mjs) {\n 'use strict';\n\n try {\n self.workbox.v['workbox:background-sync:3.6.3'] = 1;\n } catch (e) {} // eslint-disable-line\n\n /*\n Copyright 2017 Google Inc. All Rights Reserved.\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n */\n\n const serializableProperties = ['method', 'referrer', 'referrerPolicy', 'mode', 'credentials', 'cache', 'redirect', 'integrity', 'keepalive'];\n\n /**\n * A class to make it easier to serialize and de-serialize requests so they\n * can be stored in IndexedDB.\n *\n * @private\n */\n class StorableRequest {\n /**\n * Converts a Request object to a plain object that can be structured\n * cloned or JSON-stringified.\n *\n * @param {Request} request\n * @return {Promise}\n *\n * @private\n */\n static fromRequest(request) {\n return babelHelpers.asyncToGenerator(function* () {\n const requestInit = { headers: {} };\n\n // Set the body if present.\n if (request.method !== 'GET') {\n // Use blob to support non-text request bodies,\n // and clone first in case the caller still needs the request.\n requestInit.body = yield request.clone().blob();\n }\n\n // Convert the headers from an iterable to an object.\n for (const [key, value] of request.headers.entries()) {\n requestInit.headers[key] = value;\n }\n\n // Add all other serializable request properties\n for (const prop of serializableProperties) {\n if (request[prop] !== undefined) {\n requestInit[prop] = request[prop];\n }\n }\n\n return new StorableRequest({ url: request.url, requestInit });\n })();\n }\n\n /**\n * Accepts a URL and RequestInit dictionary that can be used to create a\n * new Request object. A timestamp is also generated so consumers can\n * reference when the object was created.\n *\n * @param {Object} param1\n * @param {string} param1.url\n * @param {Object} param1.requestInit\n * See: https://fetch.spec.whatwg.org/#requestinit\n * @param {number} param1.timestamp The time the request was created,\n * defaulting to the current time if not specified.\n *\n * @private\n */\n constructor({ url, requestInit, timestamp = Date.now() }) {\n this.url = url;\n this.requestInit = requestInit;\n\n // \"Private\"\n this._timestamp = timestamp;\n }\n\n /**\n * Gets the private _timestamp property.\n *\n * @return {number}\n *\n * @private\n */\n get timestamp() {\n return this._timestamp;\n }\n\n /**\n * Coverts this instance to a plain Object.\n *\n * @return {Object}\n *\n * @private\n */\n toObject() {\n return {\n url: this.url,\n timestamp: this.timestamp,\n requestInit: this.requestInit\n };\n }\n\n /**\n * Converts this instance to a Request.\n *\n * @return {Request}\n *\n * @private\n */\n toRequest() {\n return new Request(this.url, this.requestInit);\n }\n\n /**\n * Creates and returns a deep clone of the instance.\n *\n * @return {StorableRequest}\n *\n * @private\n */\n clone() {\n const requestInit = Object.assign({}, this.requestInit);\n requestInit.headers = Object.assign({}, this.requestInit.headers);\n if (this.requestInit.body) {\n requestInit.body = this.requestInit.body.slice();\n }\n\n return new StorableRequest({\n url: this.url,\n timestamp: this.timestamp,\n requestInit\n });\n }\n }\n\n /*\n Copyright 2017 Google Inc. All Rights Reserved.\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n */\n\n const DB_NAME = 'workbox-background-sync';\n const OBJECT_STORE_NAME = 'requests';\n const INDEXED_PROP = 'queueName';\n const TAG_PREFIX = 'workbox-background-sync';\n const MAX_RETENTION_TIME = 60 * 24 * 7; // 7 days in minutes\n\n /*\n Copyright 2017 Google Inc. All Rights Reserved.\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n */\n\n /**\n * A class to manage storing requests from a Queue in IndexedbDB,\n * indexed by their queue name for easier access.\n *\n * @private\n */\n class QueueStore {\n /**\n * Associates this instance with a Queue instance, so entries added can be\n * identified by their queue name.\n *\n * @param {Queue} queue\n *\n * @private\n */\n constructor(queue) {\n this._queue = queue;\n this._db = new DBWrapper_mjs.DBWrapper(DB_NAME, 1, {\n onupgradeneeded: evt => evt.target.result.createObjectStore(OBJECT_STORE_NAME, { autoIncrement: true }).createIndex(INDEXED_PROP, INDEXED_PROP, { unique: false })\n });\n }\n\n /**\n * Takes a StorableRequest instance, converts it to an object and adds it\n * as an entry in the object store.\n *\n * @param {StorableRequest} storableRequest\n *\n * @private\n */\n addEntry(storableRequest) {\n var _this = this;\n\n return babelHelpers.asyncToGenerator(function* () {\n yield _this._db.add(OBJECT_STORE_NAME, {\n queueName: _this._queue.name,\n storableRequest: storableRequest.toObject()\n });\n })();\n }\n\n /**\n * Gets the oldest entry in the object store, removes it, and returns the\n * value as a StorableRequest instance. If no entry exists, it returns\n * undefined.\n *\n * @return {StorableRequest|undefined}\n *\n * @private\n */\n getAndRemoveOldestEntry() {\n var _this2 = this;\n\n return babelHelpers.asyncToGenerator(function* () {\n const [entry] = yield _this2._db.getAllMatching(OBJECT_STORE_NAME, {\n index: INDEXED_PROP,\n query: IDBKeyRange.only(_this2._queue.name),\n count: 1,\n includeKeys: true\n });\n\n if (entry) {\n yield _this2._db.delete(OBJECT_STORE_NAME, entry.primaryKey);\n return new StorableRequest(entry.value.storableRequest);\n }\n })();\n }\n }\n\n /*\n Copyright 2017 Google Inc. All Rights Reserved.\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n */\n\n const queueNames = new Set();\n\n /**\n * A class to manage storing failed requests in IndexedDB and retrying them\n * later. All parts of the storing and replaying process are observable via\n * callbacks.\n *\n * @memberof workbox.backgroundSync\n */\n class Queue {\n /**\n * Creates an instance of Queue with the given options\n *\n * @param {string} name The unique name for this queue. This name must be\n * unique as it's used to register sync events and store requests\n * in IndexedDB specific to this instance. An error will be thrown if\n * a duplicate name is detected.\n * @param {Object} [options]\n * @param {Object} [options.callbacks] Callbacks to observe the lifecycle of\n * queued requests. Use these to respond to or modify the requests\n * during the replay process.\n * @param {function(StorableRequest):undefined}\n * [options.callbacks.requestWillEnqueue]\n * Invoked immediately before the request is stored to IndexedDB. Use\n * this callback to modify request data at store time.\n * @param {function(StorableRequest):undefined}\n * [options.callbacks.requestWillReplay]\n * Invoked immediately before the request is re-fetched. Use this\n * callback to modify request data at fetch time.\n * @param {function(Array):undefined}\n * [options.callbacks.queueDidReplay]\n * Invoked after all requests in the queue have successfully replayed.\n * @param {number} [options.maxRetentionTime = 7 days] The amount of time (in\n * minutes) a request may be retried. After this amount of time has\n * passed, the request will be deleted from the queue.\n */\n constructor(name, {\n callbacks = {},\n maxRetentionTime = MAX_RETENTION_TIME\n } = {}) {\n // Ensure the store name is not already being used\n if (queueNames.has(name)) {\n throw new WorkboxError_mjs.WorkboxError('duplicate-queue-name', { name });\n } else {\n queueNames.add(name);\n }\n\n this._name = name;\n this._callbacks = callbacks;\n this._maxRetentionTime = maxRetentionTime;\n this._queueStore = new QueueStore(this);\n\n this._addSyncListener();\n }\n\n /**\n * @return {string}\n */\n get name() {\n return this._name;\n }\n\n /**\n * Stores the passed request into IndexedDB. The database used is\n * `workbox-background-sync` and the object store name is the same as\n * the name this instance was created with (to guarantee it's unique).\n *\n * @param {Request} request The request object to store.\n */\n addRequest(request) {\n var _this = this;\n\n return babelHelpers.asyncToGenerator(function* () {\n {\n assert_mjs.assert.isInstance(request, Request, {\n moduleName: 'workbox-background-sync',\n className: 'Queue',\n funcName: 'addRequest',\n paramName: 'request'\n });\n }\n\n const storableRequest = yield StorableRequest.fromRequest(request.clone());\n yield _this._runCallback('requestWillEnqueue', storableRequest);\n yield _this._queueStore.addEntry(storableRequest);\n yield _this._registerSync();\n {\n logger_mjs.logger.log(`Request for '${getFriendlyURL_mjs.getFriendlyURL(storableRequest.url)}' has been\n added to background sync queue '${_this._name}'.`);\n }\n })();\n }\n\n /**\n * Retrieves all stored requests in IndexedDB and retries them. If the\n * queue contained requests that were successfully replayed, the\n * `queueDidReplay` callback is invoked (which implies the queue is\n * now empty). If any of the requests fail, a new sync registration is\n * created to retry again later.\n */\n replayRequests() {\n var _this2 = this;\n\n return babelHelpers.asyncToGenerator(function* () {\n const now = Date.now();\n const replayedRequests = [];\n const failedRequests = [];\n\n let storableRequest;\n while (storableRequest = yield _this2._queueStore.getAndRemoveOldestEntry()) {\n // Make a copy so the unmodified request can be stored\n // in the event of a replay failure.\n const storableRequestClone = storableRequest.clone();\n\n // Ignore requests older than maxRetentionTime.\n const maxRetentionTimeInMs = _this2._maxRetentionTime * 60 * 1000;\n if (now - storableRequest.timestamp > maxRetentionTimeInMs) {\n continue;\n }\n\n yield _this2._runCallback('requestWillReplay', storableRequest);\n\n const replay = { request: storableRequest.toRequest() };\n\n try {\n // Clone the request before fetching so callbacks get an unused one.\n replay.response = yield fetch(replay.request.clone());\n {\n logger_mjs.logger.log(`Request for '${getFriendlyURL_mjs.getFriendlyURL(storableRequest.url)}'\n has been replayed`);\n }\n } catch (err) {\n {\n logger_mjs.logger.log(`Request for '${getFriendlyURL_mjs.getFriendlyURL(storableRequest.url)}'\n failed to replay`);\n }\n replay.error = err;\n failedRequests.push(storableRequestClone);\n }\n\n replayedRequests.push(replay);\n }\n\n yield _this2._runCallback('queueDidReplay', replayedRequests);\n\n // If any requests failed, put the failed requests back in the queue\n // and rethrow the failed requests count.\n if (failedRequests.length) {\n yield Promise.all(failedRequests.map(function (storableRequest) {\n return _this2._queueStore.addEntry(storableRequest);\n }));\n\n throw new WorkboxError_mjs.WorkboxError('queue-replay-failed', { name: _this2._name, count: failedRequests.length });\n }\n })();\n }\n\n /**\n * Runs the passed callback if it exists.\n *\n * @private\n * @param {string} name The name of the callback on this._callbacks.\n * @param {...*} args The arguments to invoke the callback with.\n */\n _runCallback(name, ...args) {\n var _this3 = this;\n\n return babelHelpers.asyncToGenerator(function* () {\n if (typeof _this3._callbacks[name] === 'function') {\n yield _this3._callbacks[name].apply(null, args);\n }\n })();\n }\n\n /**\n * In sync-supporting browsers, this adds a listener for the sync event.\n * In non-sync-supporting browsers, this will retry the queue on service\n * worker startup.\n *\n * @private\n */\n _addSyncListener() {\n if ('sync' in registration) {\n self.addEventListener('sync', event => {\n if (event.tag === `${TAG_PREFIX}:${this._name}`) {\n {\n logger_mjs.logger.log(`Background sync for tag '${event.tag}'\n has been received, starting replay now`);\n }\n event.waitUntil(this.replayRequests());\n }\n });\n } else {\n {\n logger_mjs.logger.log(`Background sync replaying without background sync event`);\n }\n // If the browser doesn't support background sync, retry\n // every time the service worker starts up as a fallback.\n this.replayRequests();\n }\n }\n\n /**\n * Registers a sync event with a tag unique to this instance.\n *\n * @private\n */\n _registerSync() {\n var _this4 = this;\n\n return babelHelpers.asyncToGenerator(function* () {\n if ('sync' in registration) {\n try {\n yield registration.sync.register(`${TAG_PREFIX}:${_this4._name}`);\n } catch (err) {\n // This means the registration failed for some reason, possibly due to\n // the user disabling it.\n {\n logger_mjs.logger.warn(`Unable to register sync event for '${_this4._name}'.`, err);\n }\n }\n }\n })();\n }\n\n /**\n * Returns the set of queue names. This is primarily used to reset the list\n * of queue names in tests.\n *\n * @return {Set}\n *\n * @private\n */\n static get _queueNames() {\n return queueNames;\n }\n }\n\n /*\n Copyright 2017 Google Inc. All Rights Reserved.\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n */\n\n /**\n * A class implementing the `fetchDidFail` lifecycle callback. This makes it\n * easier to add failed requests to a background sync Queue.\n *\n * @memberof workbox.backgroundSync\n */\n class Plugin {\n /**\n * @param {...*} queueArgs Args to forward to the composed Queue instance.\n * See the [Queue]{@link workbox.backgroundSync.Queue} documentation for\n * parameter details.\n */\n constructor(...queueArgs) {\n this._queue = new Queue(...queueArgs);\n this.fetchDidFail = this.fetchDidFail.bind(this);\n }\n\n /**\n * @param {Object} options\n * @param {Request} options.request\n * @private\n */\n fetchDidFail({ request }) {\n var _this = this;\n\n return babelHelpers.asyncToGenerator(function* () {\n yield _this._queue.addRequest(request);\n })();\n }\n }\n\n /*\n Copyright 2017 Google Inc. All Rights Reserved.\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n */\n\n var publicAPI = /*#__PURE__*/Object.freeze({\n Queue: Queue,\n Plugin: Plugin\n });\n\n /*\n Copyright 2017 Google Inc. All Rights Reserved.\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n */\n\n return publicAPI;\n\n}(workbox.core._private,workbox.core._private,workbox.core._private,workbox.core._private,workbox.core._private));\n"],"file":"workbox-background-sync.dev.js"} \ No newline at end of file diff --git a/assets/js/workbox-v3.6.3/workbox-background-sync.prod.js b/assets/js/workbox-v3.6.3/workbox-background-sync.prod.js new file mode 100644 index 0000000..6278012 --- /dev/null +++ b/assets/js/workbox-v3.6.3/workbox-background-sync.prod.js @@ -0,0 +1,3 @@ +this.workbox=this.workbox||{},this.workbox.backgroundSync=function(e,t){"use strict";try{self.workbox.v["workbox:background-sync:3.6.3"]=1}catch(e){}const r=["method","referrer","referrerPolicy","mode","credentials","cache","redirect","integrity","keepalive"];class s{static fromRequest(e){return babelHelpers.asyncToGenerator(function*(){const t={headers:{}};"GET"!==e.method&&(t.body=yield e.clone().blob());for(const[r,s]of e.headers.entries())t.headers[r]=s;for(const s of r)void 0!==e[s]&&(t[s]=e[s]);return new s({url:e.url,requestInit:t})})()}constructor({url:e,requestInit:t,timestamp:r=Date.now()}){this.url=e,this.requestInit=t,this.e=r}get timestamp(){return this.e}toObject(){return{url:this.url,timestamp:this.timestamp,requestInit:this.requestInit}}toRequest(){return new Request(this.url,this.requestInit)}clone(){const e=Object.assign({},this.requestInit);return e.headers=Object.assign({},this.requestInit.headers),this.requestInit.body&&(e.body=this.requestInit.body.slice()),new s({url:this.url,timestamp:this.timestamp,requestInit:e})}}const i="workbox-background-sync",n="requests",u="queueName",c="workbox-background-sync",o=10080;class l{constructor(t){this.t=t,this.r=new e.DBWrapper(i,1,{onupgradeneeded:e=>e.target.result.createObjectStore(n,{autoIncrement:!0}).createIndex(u,u,{unique:!1})})}addEntry(e){var t=this;return babelHelpers.asyncToGenerator(function*(){yield t.r.add(n,{queueName:t.t.name,storableRequest:e.toObject()})})()}getAndRemoveOldestEntry(){var e=this;return babelHelpers.asyncToGenerator(function*(){const[t]=yield e.r.getAllMatching(n,{index:u,query:IDBKeyRange.only(e.t.name),count:1,includeKeys:!0});if(t)return yield e.r.delete(n,t.primaryKey),new s(t.value.storableRequest)})()}}const a=new Set;class h{constructor(e,{callbacks:r={},maxRetentionTime:s=o}={}){if(a.has(e))throw new t.WorkboxError("duplicate-queue-name",{name:e});a.add(e),this.s=e,this.i=r,this.n=s,this.u=new l(this),this.c()}get name(){return this.s}addRequest(e){var t=this;return babelHelpers.asyncToGenerator(function*(){const r=yield s.fromRequest(e.clone());yield t.o("requestWillEnqueue",r),yield t.u.addEntry(r),yield t.l()})()}replayRequests(){var e=this;return babelHelpers.asyncToGenerator(function*(){const r=Date.now(),s=[],i=[];let n;for(;n=yield e.u.getAndRemoveOldestEntry();){const t=n.clone(),u=60*e.n*1e3;if(r-n.timestamp>u)continue;yield e.o("requestWillReplay",n);const c={request:n.toRequest()};try{c.response=yield fetch(c.request.clone())}catch(e){c.error=e,i.push(t)}s.push(c)}if(yield e.o("queueDidReplay",s),i.length)throw yield Promise.all(i.map(function(t){return e.u.addEntry(t)})),new t.WorkboxError("queue-replay-failed",{name:e.s,count:i.length})})()}o(e,...t){var r=this;return babelHelpers.asyncToGenerator(function*(){"function"==typeof r.i[e]&&(yield r.i[e].apply(null,t))})()}c(){"sync"in registration?self.addEventListener("sync",e=>{e.tag===`${c}:${this.s}`&&e.waitUntil(this.replayRequests())}):this.replayRequests()}l(){var e=this;return babelHelpers.asyncToGenerator(function*(){if("sync"in registration)try{yield registration.sync.register(`${c}:${e.s}`)}catch(e){}})()}static get a(){return a}}return Object.freeze({Queue:h,Plugin:class{constructor(...e){this.t=new h(...e),this.fetchDidFail=this.fetchDidFail.bind(this)}fetchDidFail({request:e}){var t=this;return babelHelpers.asyncToGenerator(function*(){yield t.t.addRequest(e)})()}}})}(workbox.core._private,workbox.core._private); + +//# sourceMappingURL=workbox-background-sync.prod.js.map diff --git a/assets/js/workbox-v3.6.3/workbox-background-sync.prod.js.map b/assets/js/workbox-v3.6.3/workbox-background-sync.prod.js.map new file mode 100644 index 0000000..6e08bb9 --- /dev/null +++ b/assets/js/workbox-v3.6.3/workbox-background-sync.prod.js.map @@ -0,0 +1 @@ +{"version":3,"names":[],"mappings":"","sources":["packages/workbox-background-sync/browser.mjs"],"sourcesContent":["this.workbox=this.workbox||{},this.workbox.backgroundSync=function(e,t){\"use strict\";try{self.workbox.v[\"workbox:background-sync:3.6.3\"]=1}catch(e){}const r=[\"method\",\"referrer\",\"referrerPolicy\",\"mode\",\"credentials\",\"cache\",\"redirect\",\"integrity\",\"keepalive\"];class s{static fromRequest(e){return babelHelpers.asyncToGenerator(function*(){const t={headers:{}};\"GET\"!==e.method&&(t.body=yield e.clone().blob());for(const[r,s]of e.headers.entries())t.headers[r]=s;for(const s of r)void 0!==e[s]&&(t[s]=e[s]);return new s({url:e.url,requestInit:t})})()}constructor({url:e,requestInit:t,timestamp:r=Date.now()}){this.url=e,this.requestInit=t,this.e=r}get timestamp(){return this.e}toObject(){return{url:this.url,timestamp:this.timestamp,requestInit:this.requestInit}}toRequest(){return new Request(this.url,this.requestInit)}clone(){const e=Object.assign({},this.requestInit);return e.headers=Object.assign({},this.requestInit.headers),this.requestInit.body&&(e.body=this.requestInit.body.slice()),new s({url:this.url,timestamp:this.timestamp,requestInit:e})}}const i=\"workbox-background-sync\",n=\"requests\",u=\"queueName\",c=\"workbox-background-sync\",o=10080;class l{constructor(t){this.t=t,this.r=new e.DBWrapper(i,1,{onupgradeneeded:e=>e.target.result.createObjectStore(n,{autoIncrement:!0}).createIndex(u,u,{unique:!1})})}addEntry(e){var t=this;return babelHelpers.asyncToGenerator(function*(){yield t.r.add(n,{queueName:t.t.name,storableRequest:e.toObject()})})()}getAndRemoveOldestEntry(){var e=this;return babelHelpers.asyncToGenerator(function*(){const[t]=yield e.r.getAllMatching(n,{index:u,query:IDBKeyRange.only(e.t.name),count:1,includeKeys:!0});if(t)return yield e.r.delete(n,t.primaryKey),new s(t.value.storableRequest)})()}}const a=new Set;class h{constructor(e,{callbacks:r={},maxRetentionTime:s=o}={}){if(a.has(e))throw new t.WorkboxError(\"duplicate-queue-name\",{name:e});a.add(e),this.s=e,this.i=r,this.n=s,this.u=new l(this),this.c()}get name(){return this.s}addRequest(e){var t=this;return babelHelpers.asyncToGenerator(function*(){const r=yield s.fromRequest(e.clone());yield t.o(\"requestWillEnqueue\",r),yield t.u.addEntry(r),yield t.l()})()}replayRequests(){var e=this;return babelHelpers.asyncToGenerator(function*(){const r=Date.now(),s=[],i=[];let n;for(;n=yield e.u.getAndRemoveOldestEntry();){const t=n.clone(),u=60*e.n*1e3;if(r-n.timestamp>u)continue;yield e.o(\"requestWillReplay\",n);const c={request:n.toRequest()};try{c.response=yield fetch(c.request.clone())}catch(e){c.error=e,i.push(t)}s.push(c)}if(yield e.o(\"queueDidReplay\",s),i.length)throw yield Promise.all(i.map(function(t){return e.u.addEntry(t)})),new t.WorkboxError(\"queue-replay-failed\",{name:e.s,count:i.length})})()}o(e,...t){var r=this;return babelHelpers.asyncToGenerator(function*(){\"function\"==typeof r.i[e]&&(yield r.i[e].apply(null,t))})()}c(){\"sync\"in registration?self.addEventListener(\"sync\",e=>{e.tag===`${c}:${this.s}`&&e.waitUntil(this.replayRequests())}):this.replayRequests()}l(){var e=this;return babelHelpers.asyncToGenerator(function*(){if(\"sync\"in registration)try{yield registration.sync.register(`${c}:${e.s}`)}catch(e){}})()}static get a(){return a}}return Object.freeze({Queue:h,Plugin:class{constructor(...e){this.t=new h(...e),this.fetchDidFail=this.fetchDidFail.bind(this)}fetchDidFail({request:e}){var t=this;return babelHelpers.asyncToGenerator(function*(){yield t.t.addRequest(e)})()}}})}(workbox.core._private,workbox.core._private);\n"],"file":"workbox-background-sync.prod.js"} \ No newline at end of file diff --git a/assets/js/workbox-v3.6.3/workbox-broadcast-cache-update.dev.js b/assets/js/workbox-v3.6.3/workbox-broadcast-cache-update.dev.js new file mode 100644 index 0000000..3e779c1 --- /dev/null +++ b/assets/js/workbox-v3.6.3/workbox-broadcast-cache-update.dev.js @@ -0,0 +1,395 @@ +this.workbox = this.workbox || {}; +this.workbox.broadcastUpdate = (function (exports,WorkboxError_mjs,logger_mjs,assert_mjs) { + 'use strict'; + + try { + self.workbox.v['workbox:broadcast-cache-update:3.6.3'] = 1; + } catch (e) {} // eslint-disable-line + + /* + Copyright 2016 Google Inc. All Rights Reserved. + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + + /** + * Given two `Response's`, compares several header values to see if they are + * the same or not. + * + * @param {Response} firstResponse + * @param {Response} secondResponse + * @param {Array} headersToCheck + * @return {boolean} + * + * @memberof workbox.broadcastUpdate + * @private + */ + const responsesAreSame = (firstResponse, secondResponse, headersToCheck) => { + { + if (!(firstResponse instanceof Response && secondResponse instanceof Response)) { + throw new WorkboxError_mjs.WorkboxError('invalid-responses-are-same-args'); + } + } + + const atLeastOneHeaderAvailable = headersToCheck.some(header => { + return firstResponse.headers.has(header) && secondResponse.headers.has(header); + }); + + if (!atLeastOneHeaderAvailable) { + { + logger_mjs.logger.warn(`Unable to determine where the response has been updated ` + `because none of the headers that would be checked are present.`); + logger_mjs.logger.debug(`Attempting to compare the following: `, firstResponse, secondResponse, headersToCheck); + } + + // Just return true, indicating the that responses are the same, since we + // can't determine otherwise. + return true; + } + + return headersToCheck.every(header => { + const headerStateComparison = firstResponse.headers.has(header) === secondResponse.headers.has(header); + const headerValueComparison = firstResponse.headers.get(header) === secondResponse.headers.get(header); + + return headerStateComparison && headerValueComparison; + }); + }; + + /* + Copyright 2016 Google Inc. All Rights Reserved. + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + + var messageTypes = { + CACHE_UPDATED: 'CACHE_UPDATED' + }; + + /* + Copyright 2016 Google Inc. All Rights Reserved. + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + + /** + * You would not normally call this method directly; it's called automatically + * by an instance of the {@link BroadcastCacheUpdate} class. It's exposed here + * for the benefit of developers who would rather not use the full + * `BroadcastCacheUpdate` implementation. + * + * Calling this will dispatch a message on the provided + * {@link https://developers.google.com/web/updates/2016/09/broadcastchannel|Broadcast Channel} + * to notify interested subscribers about a change to a cached resource. + * + * The message that's posted has a formation inspired by the + * [Flux standard action](https://github.com/acdlite/flux-standard-action#introduction) + * format like so: + * + * ``` + * { + * type: 'CACHE_UPDATED', + * meta: 'workbox-broadcast-cache-update', + * payload: { + * cacheName: 'the-cache-name', + * updatedUrl: 'https://example.com/' + * } + * } + * ``` + * + * (Usage of [Flux](https://facebook.github.io/flux/) itself is not at + * all required.) + * + * @param {BroadcastChannel} channel The `BroadcastChannel` to use. + * @param {string} cacheName The name of the cache in which the updated + * `Response` was stored. + * @param {string} url The URL associated with the updated `Response`. + * @param {string} source A string identifying this library as the source + * of the update message. + * + * @memberof workbox.broadcastUpdate + */ + const broadcastUpdate = (channel, cacheName, url, source) => { + // There are browsers which support service workers but don't support the + // Broadcast Channel API. + // See https://github.com/GoogleChrome/workbox/issues/1304 + if (!('BroadcastChannel' in self && channel)) { + { + logger_mjs.logger.debug(`${url} was updated, but the Broadcast Channel API is not ` + `available in the current browser.`); + } + return; + } + + { + assert_mjs.assert.isInstance(channel, BroadcastChannel, { + moduleName: 'workbox-broadcast-cache-update', + className: '~', + funcName: 'broadcastUpdate', + paramName: 'channel' + }); + assert_mjs.assert.isType(cacheName, 'string', { + moduleName: 'workbox-broadcast-cache-update', + className: '~', + funcName: 'broadcastUpdate', + paramName: 'cacheName' + }); + assert_mjs.assert.isType(url, 'string', { + moduleName: 'workbox-broadcast-cache-update', + className: '~', + funcName: 'broadcastUpdate', + paramName: 'url' + }); + assert_mjs.assert.isType(source, 'string', { + moduleName: 'workbox-broadcast-cache-update', + className: '~', + funcName: 'broadcastUpdate', + paramName: 'source' + }); + } + + channel.postMessage({ + type: messageTypes.CACHE_UPDATED, + meta: source, + payload: { + cacheName: cacheName, + updatedUrl: url + } + }); + }; + + /* + Copyright 2016 Google Inc. All Rights Reserved. + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + + /** + * Uses the [Broadcast Channel API]{@link https://developers.google.com/web/updates/2016/09/broadcastchannel} + * to notify interested parties when a cached response has been updated. + * + * For efficiency's sake, the underlying response bodies are not compared; + * only specific response headers are checked. + * + * @memberof workbox.broadcastUpdate + */ + class BroadcastCacheUpdate { + /** + * Construct a BroadcastCacheUpdate instance with a specific `channelName` to + * broadcast messages on + * + * @param {string} channelName The name that will be used when creating + * the `BroadcastChannel`. + * @param {Object} options + * @param {Array} + * [options.headersToCheck=['content-length', 'etag', 'last-modified']] A + * list of headers that will be used to determine whether the responses + * differ. + * @param {string} [options.source='workbox-broadcast-cache-update'] An + * attribution value that indicates where the update originated. + */ + constructor(channelName, { headersToCheck, source } = {}) { + { + if (typeof channelName !== 'string' || channelName.length === 0) { + throw new WorkboxError_mjs.WorkboxError('channel-name-required'); + } + } + + this._channelName = channelName; + this._headersToCheck = headersToCheck || ['content-length', 'etag', 'last-modified']; + this._source = source || 'workbox-broadcast-cache-update'; + + // TODO assert typeof headersToCheck instanceof Array + } + + /** + * @return {BroadcastChannel|undefined} The BroadcastChannel instance used for + * broadcasting updates, or undefined if the browser doesn't support the + * Broadcast Channel API. + * + * @private + */ + _getChannel() { + if ('BroadcastChannel' in self && !this._channel) { + this._channel = new BroadcastChannel(this._channelName); + } + return this._channel; + } + + /** + * Compare two [Responses](https://developer.mozilla.org/en-US/docs/Web/API/Response) + * and send a message via the + * {@link https://developers.google.com/web/updates/2016/09/broadcastchannel|Broadcast Channel API} + * if they differ. + * + * Neither of the Responses can be {@link http://stackoverflow.com/questions/39109789|opaque}. + * + * @param {Response} firstResponse First responses to compare. + * @param {Response} secondResponse Second responses to compare. + * @param {string} url The URL of the updated request. + * @param {string} cacheName Name of the cache the responses belong to. + * This is included in the message posted on the broadcast channel. + */ + notifyIfUpdated(firstResponse, secondResponse, url, cacheName) { + if (!responsesAreSame(firstResponse, secondResponse, this._headersToCheck)) { + broadcastUpdate(this._getChannel(), cacheName, url, this._source); + } + } + } + + /* + Copyright 2016 Google Inc. All Rights Reserved. + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + + /** + * This plugin will automatically broadcast a message whenever a cached response + * is updated. + * + * @memberof workbox.broadcastUpdate + */ + class Plugin { + /** + * Construct a new instance with a specific `channelName` to + * broadcast messages on + * + * @param {string} channelName The name that will be used when creating + * the `BroadcastChannel`. + * @param {Object} options + * @param {Array} + * [options.headersToCheck=['content-length', 'etag', 'last-modified']] A + * list of headers that will be used to determine whether the responses + * differ. + * @param {string} [options.source='workbox-broadcast-cache-update'] An + * attribution value that indicates where the update originated. + */ + constructor(channelName, options) { + this._broadcastUpdate = new BroadcastCacheUpdate(channelName, options); + } + /** + * A "lifecycle" callback that will be triggered automatically by the + * `workbox-sw` and `workbox-runtime-caching` handlers when an entry is + * added to a cache. + * + * @private + * @param {Object} options The input object to this function. + * @param {string} options.cacheName Name of the cache being updated. + * @param {Response} [options.oldResponse] The previous cached value, if any. + * @param {Response} options.newResponse The new value in the cache. + */ + cacheDidUpdate({ cacheName, oldResponse, newResponse, request }) { + { + assert_mjs.assert.isType(cacheName, 'string', { + moduleName: 'workbox-broadcast-cache-update', + className: 'Plugin', + funcName: 'cacheDidUpdate', + paramName: 'cacheName' + }); + assert_mjs.assert.isInstance(newResponse, Response, { + moduleName: 'workbox-broadcast-cache-update', + className: 'Plugin', + funcName: 'cacheDidUpdate', + paramName: 'newResponse' + }); + assert_mjs.assert.isInstance(request, Request, { + moduleName: 'workbox-broadcast-cache-update', + className: 'Plugin', + funcName: 'cacheDidUpdate', + paramName: 'request' + }); + } + + if (!oldResponse) { + // Without a two responses there is nothing to compare. + return; + } + + this._broadcastUpdate.notifyIfUpdated(oldResponse, newResponse, request.url, cacheName); + } + } + + /* + Copyright 2017 Google Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + https://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + + /* + Copyright 2017 Google Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + https://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + + exports.BroadcastCacheUpdate = BroadcastCacheUpdate; + exports.Plugin = Plugin; + exports.broadcastUpdate = broadcastUpdate; + exports.messageTypes = messageTypes; + + return exports; + +}({},workbox.core._private,workbox.core._private,workbox.core._private)); + +//# sourceMappingURL=workbox-broadcast-cache-update.dev.js.map diff --git a/assets/js/workbox-v3.6.3/workbox-broadcast-cache-update.dev.js.map b/assets/js/workbox-v3.6.3/workbox-broadcast-cache-update.dev.js.map new file mode 100644 index 0000000..aa0dd03 --- /dev/null +++ b/assets/js/workbox-v3.6.3/workbox-broadcast-cache-update.dev.js.map @@ -0,0 +1 @@ +{"version":3,"names":[],"mappings":"","sources":["packages/workbox-broadcast-cache-update/browser.mjs"],"sourcesContent":["this.workbox = this.workbox || {};\nthis.workbox.broadcastUpdate = (function (exports,WorkboxError_mjs,logger_mjs,assert_mjs) {\n 'use strict';\n\n try {\n self.workbox.v['workbox:broadcast-cache-update:3.6.3'] = 1;\n } catch (e) {} // eslint-disable-line\n\n /*\n Copyright 2016 Google Inc. All Rights Reserved.\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n */\n\n /**\n * Given two `Response's`, compares several header values to see if they are\n * the same or not.\n *\n * @param {Response} firstResponse\n * @param {Response} secondResponse\n * @param {Array} headersToCheck\n * @return {boolean}\n *\n * @memberof workbox.broadcastUpdate\n * @private\n */\n const responsesAreSame = (firstResponse, secondResponse, headersToCheck) => {\n {\n if (!(firstResponse instanceof Response && secondResponse instanceof Response)) {\n throw new WorkboxError_mjs.WorkboxError('invalid-responses-are-same-args');\n }\n }\n\n const atLeastOneHeaderAvailable = headersToCheck.some(header => {\n return firstResponse.headers.has(header) && secondResponse.headers.has(header);\n });\n\n if (!atLeastOneHeaderAvailable) {\n {\n logger_mjs.logger.warn(`Unable to determine where the response has been updated ` + `because none of the headers that would be checked are present.`);\n logger_mjs.logger.debug(`Attempting to compare the following: `, firstResponse, secondResponse, headersToCheck);\n }\n\n // Just return true, indicating the that responses are the same, since we\n // can't determine otherwise.\n return true;\n }\n\n return headersToCheck.every(header => {\n const headerStateComparison = firstResponse.headers.has(header) === secondResponse.headers.has(header);\n const headerValueComparison = firstResponse.headers.get(header) === secondResponse.headers.get(header);\n\n return headerStateComparison && headerValueComparison;\n });\n };\n\n /*\n Copyright 2016 Google Inc. All Rights Reserved.\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n */\n\n var messageTypes = {\n CACHE_UPDATED: 'CACHE_UPDATED'\n };\n\n /*\n Copyright 2016 Google Inc. All Rights Reserved.\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n */\n\n /**\n * You would not normally call this method directly; it's called automatically\n * by an instance of the {@link BroadcastCacheUpdate} class. It's exposed here\n * for the benefit of developers who would rather not use the full\n * `BroadcastCacheUpdate` implementation.\n *\n * Calling this will dispatch a message on the provided\n * {@link https://developers.google.com/web/updates/2016/09/broadcastchannel|Broadcast Channel}\n * to notify interested subscribers about a change to a cached resource.\n *\n * The message that's posted has a formation inspired by the\n * [Flux standard action](https://github.com/acdlite/flux-standard-action#introduction)\n * format like so:\n *\n * ```\n * {\n * type: 'CACHE_UPDATED',\n * meta: 'workbox-broadcast-cache-update',\n * payload: {\n * cacheName: 'the-cache-name',\n * updatedUrl: 'https://example.com/'\n * }\n * }\n * ```\n *\n * (Usage of [Flux](https://facebook.github.io/flux/) itself is not at\n * all required.)\n *\n * @param {BroadcastChannel} channel The `BroadcastChannel` to use.\n * @param {string} cacheName The name of the cache in which the updated\n * `Response` was stored.\n * @param {string} url The URL associated with the updated `Response`.\n * @param {string} source A string identifying this library as the source\n * of the update message.\n *\n * @memberof workbox.broadcastUpdate\n */\n const broadcastUpdate = (channel, cacheName, url, source) => {\n // There are browsers which support service workers but don't support the\n // Broadcast Channel API.\n // See https://github.com/GoogleChrome/workbox/issues/1304\n if (!('BroadcastChannel' in self && channel)) {\n {\n logger_mjs.logger.debug(`${url} was updated, but the Broadcast Channel API is not ` + `available in the current browser.`);\n }\n return;\n }\n\n {\n assert_mjs.assert.isInstance(channel, BroadcastChannel, {\n moduleName: 'workbox-broadcast-cache-update',\n className: '~',\n funcName: 'broadcastUpdate',\n paramName: 'channel'\n });\n assert_mjs.assert.isType(cacheName, 'string', {\n moduleName: 'workbox-broadcast-cache-update',\n className: '~',\n funcName: 'broadcastUpdate',\n paramName: 'cacheName'\n });\n assert_mjs.assert.isType(url, 'string', {\n moduleName: 'workbox-broadcast-cache-update',\n className: '~',\n funcName: 'broadcastUpdate',\n paramName: 'url'\n });\n assert_mjs.assert.isType(source, 'string', {\n moduleName: 'workbox-broadcast-cache-update',\n className: '~',\n funcName: 'broadcastUpdate',\n paramName: 'source'\n });\n }\n\n channel.postMessage({\n type: messageTypes.CACHE_UPDATED,\n meta: source,\n payload: {\n cacheName: cacheName,\n updatedUrl: url\n }\n });\n };\n\n /*\n Copyright 2016 Google Inc. All Rights Reserved.\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n */\n\n /**\n * Uses the [Broadcast Channel API]{@link https://developers.google.com/web/updates/2016/09/broadcastchannel}\n * to notify interested parties when a cached response has been updated.\n *\n * For efficiency's sake, the underlying response bodies are not compared;\n * only specific response headers are checked.\n *\n * @memberof workbox.broadcastUpdate\n */\n class BroadcastCacheUpdate {\n /**\n * Construct a BroadcastCacheUpdate instance with a specific `channelName` to\n * broadcast messages on\n *\n * @param {string} channelName The name that will be used when creating\n * the `BroadcastChannel`.\n * @param {Object} options\n * @param {Array}\n * [options.headersToCheck=['content-length', 'etag', 'last-modified']] A\n * list of headers that will be used to determine whether the responses\n * differ.\n * @param {string} [options.source='workbox-broadcast-cache-update'] An\n * attribution value that indicates where the update originated.\n */\n constructor(channelName, { headersToCheck, source } = {}) {\n {\n if (typeof channelName !== 'string' || channelName.length === 0) {\n throw new WorkboxError_mjs.WorkboxError('channel-name-required');\n }\n }\n\n this._channelName = channelName;\n this._headersToCheck = headersToCheck || ['content-length', 'etag', 'last-modified'];\n this._source = source || 'workbox-broadcast-cache-update';\n\n // TODO assert typeof headersToCheck instanceof Array\n }\n\n /**\n * @return {BroadcastChannel|undefined} The BroadcastChannel instance used for\n * broadcasting updates, or undefined if the browser doesn't support the\n * Broadcast Channel API.\n *\n * @private\n */\n _getChannel() {\n if ('BroadcastChannel' in self && !this._channel) {\n this._channel = new BroadcastChannel(this._channelName);\n }\n return this._channel;\n }\n\n /**\n * Compare two [Responses](https://developer.mozilla.org/en-US/docs/Web/API/Response)\n * and send a message via the\n * {@link https://developers.google.com/web/updates/2016/09/broadcastchannel|Broadcast Channel API}\n * if they differ.\n *\n * Neither of the Responses can be {@link http://stackoverflow.com/questions/39109789|opaque}.\n *\n * @param {Response} firstResponse First responses to compare.\n * @param {Response} secondResponse Second responses to compare.\n * @param {string} url The URL of the updated request.\n * @param {string} cacheName Name of the cache the responses belong to.\n * This is included in the message posted on the broadcast channel.\n */\n notifyIfUpdated(firstResponse, secondResponse, url, cacheName) {\n if (!responsesAreSame(firstResponse, secondResponse, this._headersToCheck)) {\n broadcastUpdate(this._getChannel(), cacheName, url, this._source);\n }\n }\n }\n\n /*\n Copyright 2016 Google Inc. All Rights Reserved.\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n */\n\n /**\n * This plugin will automatically broadcast a message whenever a cached response\n * is updated.\n *\n * @memberof workbox.broadcastUpdate\n */\n class Plugin {\n /**\n * Construct a new instance with a specific `channelName` to\n * broadcast messages on\n *\n * @param {string} channelName The name that will be used when creating\n * the `BroadcastChannel`.\n * @param {Object} options\n * @param {Array}\n * [options.headersToCheck=['content-length', 'etag', 'last-modified']] A\n * list of headers that will be used to determine whether the responses\n * differ.\n * @param {string} [options.source='workbox-broadcast-cache-update'] An\n * attribution value that indicates where the update originated.\n */\n constructor(channelName, options) {\n this._broadcastUpdate = new BroadcastCacheUpdate(channelName, options);\n }\n /**\n * A \"lifecycle\" callback that will be triggered automatically by the\n * `workbox-sw` and `workbox-runtime-caching` handlers when an entry is\n * added to a cache.\n *\n * @private\n * @param {Object} options The input object to this function.\n * @param {string} options.cacheName Name of the cache being updated.\n * @param {Response} [options.oldResponse] The previous cached value, if any.\n * @param {Response} options.newResponse The new value in the cache.\n */\n cacheDidUpdate({ cacheName, oldResponse, newResponse, request }) {\n {\n assert_mjs.assert.isType(cacheName, 'string', {\n moduleName: 'workbox-broadcast-cache-update',\n className: 'Plugin',\n funcName: 'cacheDidUpdate',\n paramName: 'cacheName'\n });\n assert_mjs.assert.isInstance(newResponse, Response, {\n moduleName: 'workbox-broadcast-cache-update',\n className: 'Plugin',\n funcName: 'cacheDidUpdate',\n paramName: 'newResponse'\n });\n assert_mjs.assert.isInstance(request, Request, {\n moduleName: 'workbox-broadcast-cache-update',\n className: 'Plugin',\n funcName: 'cacheDidUpdate',\n paramName: 'request'\n });\n }\n\n if (!oldResponse) {\n // Without a two responses there is nothing to compare.\n return;\n }\n\n this._broadcastUpdate.notifyIfUpdated(oldResponse, newResponse, request.url, cacheName);\n }\n }\n\n /*\n Copyright 2017 Google Inc.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n https://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n */\n\n /*\n Copyright 2017 Google Inc.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n https://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n */\n\n exports.BroadcastCacheUpdate = BroadcastCacheUpdate;\n exports.Plugin = Plugin;\n exports.broadcastUpdate = broadcastUpdate;\n exports.messageTypes = messageTypes;\n\n return exports;\n\n}({},workbox.core._private,workbox.core._private,workbox.core._private));\n"],"file":"workbox-broadcast-cache-update.dev.js"} \ No newline at end of file diff --git a/assets/js/workbox-v3.6.3/workbox-broadcast-cache-update.prod.js b/assets/js/workbox-v3.6.3/workbox-broadcast-cache-update.prod.js new file mode 100644 index 0000000..d1b1997 --- /dev/null +++ b/assets/js/workbox-v3.6.3/workbox-broadcast-cache-update.prod.js @@ -0,0 +1,3 @@ +this.workbox=this.workbox||{},this.workbox.broadcastUpdate=function(t){"use strict";try{self.workbox.v["workbox:broadcast-cache-update:3.6.3"]=1}catch(t){}const e=(t,e,s)=>{return!s.some(s=>t.headers.has(s)&&e.headers.has(s))||s.every(s=>{const a=t.headers.has(s)===e.headers.has(s),n=t.headers.get(s)===e.headers.get(s);return a&&n})};var s={CACHE_UPDATED:"CACHE_UPDATED"};const a=(t,e,a,n)=>{"BroadcastChannel"in self&&t&&t.postMessage({type:s.CACHE_UPDATED,meta:n,payload:{cacheName:e,updatedUrl:a}})};class n{constructor(t,{headersToCheck:e,source:s}={}){this.t=t,this.e=e||["content-length","etag","last-modified"],this.s=s||"workbox-broadcast-cache-update"}a(){return"BroadcastChannel"in self&&!this.n&&(this.n=new BroadcastChannel(this.t)),this.n}notifyIfUpdated(t,s,n,c){e(t,s,this.e)||a(this.a(),c,n,this.s)}}return t.BroadcastCacheUpdate=n,t.Plugin=class{constructor(t,e){this.c=new n(t,e)}cacheDidUpdate({cacheName:t,oldResponse:e,newResponse:s,request:a}){e&&this.c.notifyIfUpdated(e,s,a.url,t)}},t.broadcastUpdate=a,t.messageTypes=s,t}({}); + +//# sourceMappingURL=workbox-broadcast-cache-update.prod.js.map diff --git a/assets/js/workbox-v3.6.3/workbox-broadcast-cache-update.prod.js.map b/assets/js/workbox-v3.6.3/workbox-broadcast-cache-update.prod.js.map new file mode 100644 index 0000000..2c5bd98 --- /dev/null +++ b/assets/js/workbox-v3.6.3/workbox-broadcast-cache-update.prod.js.map @@ -0,0 +1 @@ +{"version":3,"names":[],"mappings":"","sources":["packages/workbox-broadcast-cache-update/browser.mjs"],"sourcesContent":["this.workbox=this.workbox||{},this.workbox.broadcastUpdate=function(t){\"use strict\";try{self.workbox.v[\"workbox:broadcast-cache-update:3.6.3\"]=1}catch(t){}const e=(t,e,s)=>{return!s.some(s=>t.headers.has(s)&&e.headers.has(s))||s.every(s=>{const a=t.headers.has(s)===e.headers.has(s),n=t.headers.get(s)===e.headers.get(s);return a&&n})};var s={CACHE_UPDATED:\"CACHE_UPDATED\"};const a=(t,e,a,n)=>{\"BroadcastChannel\"in self&&t&&t.postMessage({type:s.CACHE_UPDATED,meta:n,payload:{cacheName:e,updatedUrl:a}})};class n{constructor(t,{headersToCheck:e,source:s}={}){this.t=t,this.e=e||[\"content-length\",\"etag\",\"last-modified\"],this.s=s||\"workbox-broadcast-cache-update\"}a(){return\"BroadcastChannel\"in self&&!this.n&&(this.n=new BroadcastChannel(this.t)),this.n}notifyIfUpdated(t,s,n,c){e(t,s,this.e)||a(this.a(),c,n,this.s)}}return t.BroadcastCacheUpdate=n,t.Plugin=class{constructor(t,e){this.c=new n(t,e)}cacheDidUpdate({cacheName:t,oldResponse:e,newResponse:s,request:a}){e&&this.c.notifyIfUpdated(e,s,a.url,t)}},t.broadcastUpdate=a,t.messageTypes=s,t}({});\n"],"file":"workbox-broadcast-cache-update.prod.js"} \ No newline at end of file diff --git a/assets/js/workbox-v3.6.3/workbox-cache-expiration.dev.js b/assets/js/workbox-v3.6.3/workbox-cache-expiration.dev.js new file mode 100644 index 0000000..0f10a31 --- /dev/null +++ b/assets/js/workbox-v3.6.3/workbox-cache-expiration.dev.js @@ -0,0 +1,740 @@ +this.workbox = this.workbox || {}; +this.workbox.expiration = (function (exports,DBWrapper_mjs,WorkboxError_mjs,assert_mjs,logger_mjs,cacheNames_mjs,index_mjs) { + 'use strict'; + + try { + self.workbox.v['workbox:cache-expiration:3.6.3'] = 1; + } catch (e) {} // eslint-disable-line + + /* + Copyright 2017 Google Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + https://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + + const URL_KEY = 'url'; + const TIMESTAMP_KEY = 'timestamp'; + + /** + * Returns the timestamp model. + * + * @private + */ + class CacheTimestampsModel { + /** + * + * @param {string} cacheName + * + * @private + */ + constructor(cacheName) { + // TODO Check cacheName + + this._cacheName = cacheName; + this._storeName = cacheName; + + this._db = new DBWrapper_mjs.DBWrapper(this._cacheName, 2, { + onupgradeneeded: evt => this._handleUpgrade(evt) + }); + } + + /** + * Should perform an upgrade of indexedDB. + * + * @param {Event} evt + * + * @private + */ + _handleUpgrade(evt) { + const db = evt.target.result; + if (evt.oldVersion < 2) { + // Remove old databases. + if (db.objectStoreNames.contains('workbox-cache-expiration')) { + db.deleteObjectStore('workbox-cache-expiration'); + } + } + + db.createObjectStore(this._storeName, { keyPath: URL_KEY }).createIndex(TIMESTAMP_KEY, TIMESTAMP_KEY, { unique: false }); + } + + /** + * @param {string} url + * @param {number} timestamp + * + * @private + */ + setTimestamp(url, timestamp) { + var _this = this; + + return babelHelpers.asyncToGenerator(function* () { + yield _this._db.put(_this._storeName, { + [URL_KEY]: new URL(url, location).href, + [TIMESTAMP_KEY]: timestamp + }); + })(); + } + + /** + * Get all of the timestamps in the indexedDB. + * + * @return {Array} + * + * @private + */ + getAllTimestamps() { + var _this2 = this; + + return babelHelpers.asyncToGenerator(function* () { + return yield _this2._db.getAllMatching(_this2._storeName, { + index: TIMESTAMP_KEY + }); + })(); + } + + /** + * Returns the timestamp stored for a given URL. + * + * @param {string} url + * @return {number} + * + * @private + */ + getTimestamp(url) { + var _this3 = this; + + return babelHelpers.asyncToGenerator(function* () { + const timestampObject = yield _this3._db.get(_this3._storeName, url); + return timestampObject.timestamp; + })(); + } + + /** + * @param {string} url + * + * @private + */ + deleteUrl(url) { + var _this4 = this; + + return babelHelpers.asyncToGenerator(function* () { + yield _this4._db.delete(_this4._storeName, new URL(url, location).href); + })(); + } + + /** + * Removes the underlying IndexedDB object store entirely. + */ + delete() { + var _this5 = this; + + return babelHelpers.asyncToGenerator(function* () { + yield _this5._db.deleteDatabase(); + _this5._db = null; + })(); + } + } + + /* + Copyright 2017 Google Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + https://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + + /** + * The `CacheExpiration` class allows you define an expiration and / or + * limit on the number of responses stored in a + * [`Cache`](https://developer.mozilla.org/en-US/docs/Web/API/Cache). + * + * @memberof workbox.expiration + */ + class CacheExpiration { + /** + * To construct a new CacheExpiration instance you must provide at least + * one of the `config` properties. + * + * @param {string} cacheName Name of the cache to apply restrictions to. + * @param {Object} config + * @param {number} [config.maxEntries] The maximum number of entries to cache. + * Entries used the least will be removed as the maximum is reached. + * @param {number} [config.maxAgeSeconds] The maximum age of an entry before + * it's treated as stale and removed. + */ + constructor(cacheName, config = {}) { + { + assert_mjs.assert.isType(cacheName, 'string', { + moduleName: 'workbox-cache-expiration', + className: 'CacheExpiration', + funcName: 'constructor', + paramName: 'cacheName' + }); + + if (!(config.maxEntries || config.maxAgeSeconds)) { + throw new WorkboxError_mjs.WorkboxError('max-entries-or-age-required', { + moduleName: 'workbox-cache-expiration', + className: 'CacheExpiration', + funcName: 'constructor' + }); + } + + if (config.maxEntries) { + assert_mjs.assert.isType(config.maxEntries, 'number', { + moduleName: 'workbox-cache-expiration', + className: 'CacheExpiration', + funcName: 'constructor', + paramName: 'config.maxEntries' + }); + + // TODO: Assert is positive + } + + if (config.maxAgeSeconds) { + assert_mjs.assert.isType(config.maxAgeSeconds, 'number', { + moduleName: 'workbox-cache-expiration', + className: 'CacheExpiration', + funcName: 'constructor', + paramName: 'config.maxAgeSeconds' + }); + + // TODO: Assert is positive + } + } + + this._isRunning = false; + this._rerunRequested = false; + this._maxEntries = config.maxEntries; + this._maxAgeSeconds = config.maxAgeSeconds; + this._cacheName = cacheName; + this._timestampModel = new CacheTimestampsModel(cacheName); + } + + /** + * Expires entries for the given cache and given criteria. + */ + expireEntries() { + var _this = this; + + return babelHelpers.asyncToGenerator(function* () { + if (_this._isRunning) { + _this._rerunRequested = true; + return; + } + _this._isRunning = true; + + const now = Date.now(); + + // First, expire old entries, if maxAgeSeconds is set. + const oldEntries = yield _this._findOldEntries(now); + + // Once that's done, check for the maximum size. + const extraEntries = yield _this._findExtraEntries(); + + // Use a Set to remove any duplicates following the concatenation, then + // convert back into an array. + const allUrls = [...new Set(oldEntries.concat(extraEntries))]; + + yield Promise.all([_this._deleteFromCache(allUrls), _this._deleteFromIDB(allUrls)]); + + { + // TODO: break apart entries deleted due to expiration vs size restraints + if (allUrls.length > 0) { + logger_mjs.logger.groupCollapsed(`Expired ${allUrls.length} ` + `${allUrls.length === 1 ? 'entry' : 'entries'} and removed ` + `${allUrls.length === 1 ? 'it' : 'them'} from the ` + `'${_this._cacheName}' cache.`); + logger_mjs.logger.log(`Expired the following ${allUrls.length === 1 ? 'URL' : 'URLs'}:`); + allUrls.forEach(function (url) { + return logger_mjs.logger.log(` ${url}`); + }); + logger_mjs.logger.groupEnd(); + } else { + logger_mjs.logger.debug(`Cache expiration ran and found no entries to remove.`); + } + } + + _this._isRunning = false; + if (_this._rerunRequested) { + _this._rerunRequested = false; + _this.expireEntries(); + } + })(); + } + + /** + * Expires entries based on the maximum age. + * + * @param {number} expireFromTimestamp A timestamp. + * @return {Promise>} A list of the URLs that were expired. + * + * @private + */ + _findOldEntries(expireFromTimestamp) { + var _this2 = this; + + return babelHelpers.asyncToGenerator(function* () { + { + assert_mjs.assert.isType(expireFromTimestamp, 'number', { + moduleName: 'workbox-cache-expiration', + className: 'CacheExpiration', + funcName: '_findOldEntries', + paramName: 'expireFromTimestamp' + }); + } + + if (!_this2._maxAgeSeconds) { + return []; + } + + const expireOlderThan = expireFromTimestamp - _this2._maxAgeSeconds * 1000; + const timestamps = yield _this2._timestampModel.getAllTimestamps(); + const expiredUrls = []; + timestamps.forEach(function (timestampDetails) { + if (timestampDetails.timestamp < expireOlderThan) { + expiredUrls.push(timestampDetails.url); + } + }); + + return expiredUrls; + })(); + } + + /** + * @return {Promise} + * + * @private + */ + _findExtraEntries() { + var _this3 = this; + + return babelHelpers.asyncToGenerator(function* () { + const extraUrls = []; + + if (!_this3._maxEntries) { + return []; + } + + const timestamps = yield _this3._timestampModel.getAllTimestamps(); + while (timestamps.length > _this3._maxEntries) { + const lastUsed = timestamps.shift(); + extraUrls.push(lastUsed.url); + } + + return extraUrls; + })(); + } + + /** + * @param {Array} urls Array of URLs to delete from cache. + * + * @private + */ + _deleteFromCache(urls) { + var _this4 = this; + + return babelHelpers.asyncToGenerator(function* () { + const cache = yield caches.open(_this4._cacheName); + for (const url of urls) { + yield cache.delete(url); + } + })(); + } + + /** + * @param {Array} urls Array of URLs to delete from IDB + * + * @private + */ + _deleteFromIDB(urls) { + var _this5 = this; + + return babelHelpers.asyncToGenerator(function* () { + for (const url of urls) { + yield _this5._timestampModel.deleteUrl(url); + } + })(); + } + + /** + * Update the timestamp for the given URL. This ensures the when + * removing entries based on maximum entries, most recently used + * is accurate or when expiring, the timestamp is up-to-date. + * + * @param {string} url + */ + updateTimestamp(url) { + var _this6 = this; + + return babelHelpers.asyncToGenerator(function* () { + { + assert_mjs.assert.isType(url, 'string', { + moduleName: 'workbox-cache-expiration', + className: 'CacheExpiration', + funcName: 'updateTimestamp', + paramName: 'url' + }); + } + + const urlObject = new URL(url, location); + urlObject.hash = ''; + + yield _this6._timestampModel.setTimestamp(urlObject.href, Date.now()); + })(); + } + + /** + * Can be used to check if a URL has expired or not before it's used. + * + * This requires a look up from IndexedDB, so can be slow. + * + * Note: This method will not remove the cached entry, call + * `expireEntries()` to remove indexedDB and Cache entries. + * + * @param {string} url + * @return {boolean} + */ + isURLExpired(url) { + var _this7 = this; + + return babelHelpers.asyncToGenerator(function* () { + if (!_this7._maxAgeSeconds) { + throw new WorkboxError_mjs.WorkboxError(`expired-test-without-max-age`, { + methodName: 'isURLExpired', + paramName: 'maxAgeSeconds' + }); + } + const urlObject = new URL(url, location); + urlObject.hash = ''; + + const timestamp = yield _this7._timestampModel.getTimestamp(urlObject.href); + const expireOlderThan = Date.now() - _this7._maxAgeSeconds * 1000; + return timestamp < expireOlderThan; + })(); + } + + /** + * Removes the IndexedDB object store used to keep track of cache expiration + * metadata. + */ + delete() { + var _this8 = this; + + return babelHelpers.asyncToGenerator(function* () { + // Make sure we don't attempt another rerun if we're called in the middle of + // a cache expiration. + _this8._rerunRequested = false; + yield _this8._timestampModel.delete(); + })(); + } + } + + /* + Copyright 2016 Google Inc. All Rights Reserved. + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + http://www.apache.org/licenses/LICENSE-2.0 + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + + /** + * This plugin can be used in the Workbox APIs to regularly enforce a + * limit on the age and / or the number of cached requests. + * + * Whenever a cached request is used or updated, this plugin will look + * at the used Cache and remove any old or extra requests. + * + * When using `maxAgeSeconds`, requests may be used *once* after expiring + * because the expiration clean up will not have occurred until *after* the + * cached request has been used. If the request has a "Date" header, then + * a light weight expiration check is performed and the request will not be + * used immediately. + * + * When using `maxEntries`, the last request to be used will be the request + * that is removed from the Cache. + * + * @memberof workbox.expiration + */ + class Plugin { + /** + * @param {Object} config + * @param {number} [config.maxEntries] The maximum number of entries to cache. + * Entries used the least will be removed as the maximum is reached. + * @param {number} [config.maxAgeSeconds] The maximum age of an entry before + * it's treated as stale and removed. + * @param {boolean} [config.purgeOnQuotaError] Whether to opt this cache in to + * automatic deletion if the available storage quota has been exceeded. + */ + constructor(config = {}) { + { + if (!(config.maxEntries || config.maxAgeSeconds)) { + throw new WorkboxError_mjs.WorkboxError('max-entries-or-age-required', { + moduleName: 'workbox-cache-expiration', + className: 'Plugin', + funcName: 'constructor' + }); + } + + if (config.maxEntries) { + assert_mjs.assert.isType(config.maxEntries, 'number', { + moduleName: 'workbox-cache-expiration', + className: 'Plugin', + funcName: 'constructor', + paramName: 'config.maxEntries' + }); + } + + if (config.maxAgeSeconds) { + assert_mjs.assert.isType(config.maxAgeSeconds, 'number', { + moduleName: 'workbox-cache-expiration', + className: 'Plugin', + funcName: 'constructor', + paramName: 'config.maxAgeSeconds' + }); + } + } + + this._config = config; + this._maxAgeSeconds = config.maxAgeSeconds; + this._cacheExpirations = new Map(); + + if (config.purgeOnQuotaError) { + index_mjs.registerQuotaErrorCallback(() => this.deleteCacheAndMetadata()); + } + } + + /** + * A simple helper method to return a CacheExpiration instance for a given + * cache name. + * + * @param {string} cacheName + * @return {CacheExpiration} + * + * @private + */ + _getCacheExpiration(cacheName) { + if (cacheName === cacheNames_mjs.cacheNames.getRuntimeName()) { + throw new WorkboxError_mjs.WorkboxError('expire-custom-caches-only'); + } + + let cacheExpiration = this._cacheExpirations.get(cacheName); + if (!cacheExpiration) { + cacheExpiration = new CacheExpiration(cacheName, this._config); + this._cacheExpirations.set(cacheName, cacheExpiration); + } + return cacheExpiration; + } + + /** + * A "lifecycle" callback that will be triggered automatically by the + * `workbox.runtimeCaching` handlers when a `Response` is about to be returned + * from a [Cache](https://developer.mozilla.org/en-US/docs/Web/API/Cache) to + * the handler. It allows the `Response` to be inspected for freshness and + * prevents it from being used if the `Response`'s `Date` header value is + * older than the configured `maxAgeSeconds`. + * + * @param {Object} options + * @param {string} options.cacheName Name of the cache the response is in. + * @param {Response} options.cachedResponse The `Response` object that's been + * read from a cache and whose freshness should be checked. + * @return {Response} Either the `cachedResponse`, if it's + * fresh, or `null` if the `Response` is older than `maxAgeSeconds`. + * + * @private + */ + cachedResponseWillBeUsed({ cacheName, cachedResponse }) { + if (!cachedResponse) { + return null; + } + + let isFresh = this._isResponseDateFresh(cachedResponse); + + // Expire entries to ensure that even if the expiration date has + // expired, it'll only be used once. + const cacheExpiration = this._getCacheExpiration(cacheName); + cacheExpiration.expireEntries(); + + return isFresh ? cachedResponse : null; + } + + /** + * @param {Response} cachedResponse + * @return {boolean} + * + * @private + */ + _isResponseDateFresh(cachedResponse) { + if (!this._maxAgeSeconds) { + // We aren't expiring by age, so return true, it's fresh + return true; + } + + // Check if the 'date' header will suffice a quick expiration check. + // See https://github.com/GoogleChromeLabs/sw-toolbox/issues/164 for + // discussion. + const dateHeaderTimestamp = this._getDateHeaderTimestamp(cachedResponse); + if (dateHeaderTimestamp === null) { + // Unable to parse date, so assume it's fresh. + return true; + } + + // If we have a valid headerTime, then our response is fresh iff the + // headerTime plus maxAgeSeconds is greater than the current time. + const now = Date.now(); + return dateHeaderTimestamp >= now - this._maxAgeSeconds * 1000; + } + + /** + * This method will extract the data header and parse it into a useful + * value. + * + * @param {Response} cachedResponse + * @return {number} + * + * @private + */ + _getDateHeaderTimestamp(cachedResponse) { + if (!cachedResponse.headers.has('date')) { + return null; + } + + const dateHeader = cachedResponse.headers.get('date'); + const parsedDate = new Date(dateHeader); + const headerTime = parsedDate.getTime(); + + // If the Date header was invalid for some reason, parsedDate.getTime() + // will return NaN. + if (isNaN(headerTime)) { + return null; + } + + return headerTime; + } + + /** + * A "lifecycle" callback that will be triggered automatically by the + * `workbox.runtimeCaching` handlers when an entry is added to a cache. + * + * @param {Object} options + * @param {string} options.cacheName Name of the cache that was updated. + * @param {string} options.request The Request for the cached entry. + * + * @private + */ + cacheDidUpdate({ cacheName, request }) { + var _this = this; + + return babelHelpers.asyncToGenerator(function* () { + { + assert_mjs.assert.isType(cacheName, 'string', { + moduleName: 'workbox-cache-expiration', + className: 'Plugin', + funcName: 'cacheDidUpdate', + paramName: 'cacheName' + }); + assert_mjs.assert.isInstance(request, Request, { + moduleName: 'workbox-cache-expiration', + className: 'Plugin', + funcName: 'cacheDidUpdate', + paramName: 'request' + }); + } + + const cacheExpiration = _this._getCacheExpiration(cacheName); + yield cacheExpiration.updateTimestamp(request.url); + yield cacheExpiration.expireEntries(); + })(); + } + + /** + * This is a helper method that performs two operations: + * + * - Deletes *all* the underlying Cache instances associated with this plugin + * instance, by calling caches.delete() on you behalf. + * - Deletes the metadata from IndexedDB used to keep track of expiration + * details for each Cache instance. + * + * When using cache expiration, calling this method is preferable to calling + * `caches.delete()` directly, since this will ensure that the IndexedDB + * metadata is also cleanly removed and open IndexedDB instances are deleted. + * + * Note that if you're *not* using cache expiration for a given cache, calling + * `caches.delete()` and passing in the cache's name should be sufficient. + * There is no Workbox-specific method needed for cleanup in that case. + */ + deleteCacheAndMetadata() { + var _this2 = this; + + return babelHelpers.asyncToGenerator(function* () { + // Do this one at a time instead of all at once via `Promise.all()` to + // reduce the chance of inconsistency if a promise rejects. + for (const [cacheName, cacheExpiration] of _this2._cacheExpirations) { + yield caches.delete(cacheName); + yield cacheExpiration.delete(); + } + + // Reset this._cacheExpirations to its initial state. + _this2._cacheExpirations = new Map(); + })(); + } + } + + /* + Copyright 2017 Google Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + https://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + + /* + Copyright 2017 Google Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + https://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + + exports.CacheExpiration = CacheExpiration; + exports.Plugin = Plugin; + + return exports; + +}({},workbox.core._private,workbox.core._private,workbox.core._private,workbox.core._private,workbox.core._private,workbox.core)); + +//# sourceMappingURL=workbox-cache-expiration.dev.js.map diff --git a/assets/js/workbox-v3.6.3/workbox-cache-expiration.dev.js.map b/assets/js/workbox-v3.6.3/workbox-cache-expiration.dev.js.map new file mode 100644 index 0000000..adf1df9 --- /dev/null +++ b/assets/js/workbox-v3.6.3/workbox-cache-expiration.dev.js.map @@ -0,0 +1 @@ +{"version":3,"names":[],"mappings":"","sources":["packages/workbox-cache-expiration/browser.mjs"],"sourcesContent":["this.workbox = this.workbox || {};\nthis.workbox.expiration = (function (exports,DBWrapper_mjs,WorkboxError_mjs,assert_mjs,logger_mjs,cacheNames_mjs,index_mjs) {\n 'use strict';\n\n try {\n self.workbox.v['workbox:cache-expiration:3.6.3'] = 1;\n } catch (e) {} // eslint-disable-line\n\n /*\n Copyright 2017 Google Inc.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n https://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n */\n\n const URL_KEY = 'url';\n const TIMESTAMP_KEY = 'timestamp';\n\n /**\n * Returns the timestamp model.\n *\n * @private\n */\n class CacheTimestampsModel {\n /**\n *\n * @param {string} cacheName\n *\n * @private\n */\n constructor(cacheName) {\n // TODO Check cacheName\n\n this._cacheName = cacheName;\n this._storeName = cacheName;\n\n this._db = new DBWrapper_mjs.DBWrapper(this._cacheName, 2, {\n onupgradeneeded: evt => this._handleUpgrade(evt)\n });\n }\n\n /**\n * Should perform an upgrade of indexedDB.\n *\n * @param {Event} evt\n *\n * @private\n */\n _handleUpgrade(evt) {\n const db = evt.target.result;\n if (evt.oldVersion < 2) {\n // Remove old databases.\n if (db.objectStoreNames.contains('workbox-cache-expiration')) {\n db.deleteObjectStore('workbox-cache-expiration');\n }\n }\n\n db.createObjectStore(this._storeName, { keyPath: URL_KEY }).createIndex(TIMESTAMP_KEY, TIMESTAMP_KEY, { unique: false });\n }\n\n /**\n * @param {string} url\n * @param {number} timestamp\n *\n * @private\n */\n setTimestamp(url, timestamp) {\n var _this = this;\n\n return babelHelpers.asyncToGenerator(function* () {\n yield _this._db.put(_this._storeName, {\n [URL_KEY]: new URL(url, location).href,\n [TIMESTAMP_KEY]: timestamp\n });\n })();\n }\n\n /**\n * Get all of the timestamps in the indexedDB.\n *\n * @return {Array}\n *\n * @private\n */\n getAllTimestamps() {\n var _this2 = this;\n\n return babelHelpers.asyncToGenerator(function* () {\n return yield _this2._db.getAllMatching(_this2._storeName, {\n index: TIMESTAMP_KEY\n });\n })();\n }\n\n /**\n * Returns the timestamp stored for a given URL.\n *\n * @param {string} url\n * @return {number}\n *\n * @private\n */\n getTimestamp(url) {\n var _this3 = this;\n\n return babelHelpers.asyncToGenerator(function* () {\n const timestampObject = yield _this3._db.get(_this3._storeName, url);\n return timestampObject.timestamp;\n })();\n }\n\n /**\n * @param {string} url\n *\n * @private\n */\n deleteUrl(url) {\n var _this4 = this;\n\n return babelHelpers.asyncToGenerator(function* () {\n yield _this4._db.delete(_this4._storeName, new URL(url, location).href);\n })();\n }\n\n /**\n * Removes the underlying IndexedDB object store entirely.\n */\n delete() {\n var _this5 = this;\n\n return babelHelpers.asyncToGenerator(function* () {\n yield _this5._db.deleteDatabase();\n _this5._db = null;\n })();\n }\n }\n\n /*\n Copyright 2017 Google Inc.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n https://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n */\n\n /**\n * The `CacheExpiration` class allows you define an expiration and / or\n * limit on the number of responses stored in a\n * [`Cache`](https://developer.mozilla.org/en-US/docs/Web/API/Cache).\n *\n * @memberof workbox.expiration\n */\n class CacheExpiration {\n /**\n * To construct a new CacheExpiration instance you must provide at least\n * one of the `config` properties.\n *\n * @param {string} cacheName Name of the cache to apply restrictions to.\n * @param {Object} config\n * @param {number} [config.maxEntries] The maximum number of entries to cache.\n * Entries used the least will be removed as the maximum is reached.\n * @param {number} [config.maxAgeSeconds] The maximum age of an entry before\n * it's treated as stale and removed.\n */\n constructor(cacheName, config = {}) {\n {\n assert_mjs.assert.isType(cacheName, 'string', {\n moduleName: 'workbox-cache-expiration',\n className: 'CacheExpiration',\n funcName: 'constructor',\n paramName: 'cacheName'\n });\n\n if (!(config.maxEntries || config.maxAgeSeconds)) {\n throw new WorkboxError_mjs.WorkboxError('max-entries-or-age-required', {\n moduleName: 'workbox-cache-expiration',\n className: 'CacheExpiration',\n funcName: 'constructor'\n });\n }\n\n if (config.maxEntries) {\n assert_mjs.assert.isType(config.maxEntries, 'number', {\n moduleName: 'workbox-cache-expiration',\n className: 'CacheExpiration',\n funcName: 'constructor',\n paramName: 'config.maxEntries'\n });\n\n // TODO: Assert is positive\n }\n\n if (config.maxAgeSeconds) {\n assert_mjs.assert.isType(config.maxAgeSeconds, 'number', {\n moduleName: 'workbox-cache-expiration',\n className: 'CacheExpiration',\n funcName: 'constructor',\n paramName: 'config.maxAgeSeconds'\n });\n\n // TODO: Assert is positive\n }\n }\n\n this._isRunning = false;\n this._rerunRequested = false;\n this._maxEntries = config.maxEntries;\n this._maxAgeSeconds = config.maxAgeSeconds;\n this._cacheName = cacheName;\n this._timestampModel = new CacheTimestampsModel(cacheName);\n }\n\n /**\n * Expires entries for the given cache and given criteria.\n */\n expireEntries() {\n var _this = this;\n\n return babelHelpers.asyncToGenerator(function* () {\n if (_this._isRunning) {\n _this._rerunRequested = true;\n return;\n }\n _this._isRunning = true;\n\n const now = Date.now();\n\n // First, expire old entries, if maxAgeSeconds is set.\n const oldEntries = yield _this._findOldEntries(now);\n\n // Once that's done, check for the maximum size.\n const extraEntries = yield _this._findExtraEntries();\n\n // Use a Set to remove any duplicates following the concatenation, then\n // convert back into an array.\n const allUrls = [...new Set(oldEntries.concat(extraEntries))];\n\n yield Promise.all([_this._deleteFromCache(allUrls), _this._deleteFromIDB(allUrls)]);\n\n {\n // TODO: break apart entries deleted due to expiration vs size restraints\n if (allUrls.length > 0) {\n logger_mjs.logger.groupCollapsed(`Expired ${allUrls.length} ` + `${allUrls.length === 1 ? 'entry' : 'entries'} and removed ` + `${allUrls.length === 1 ? 'it' : 'them'} from the ` + `'${_this._cacheName}' cache.`);\n logger_mjs.logger.log(`Expired the following ${allUrls.length === 1 ? 'URL' : 'URLs'}:`);\n allUrls.forEach(function (url) {\n return logger_mjs.logger.log(` ${url}`);\n });\n logger_mjs.logger.groupEnd();\n } else {\n logger_mjs.logger.debug(`Cache expiration ran and found no entries to remove.`);\n }\n }\n\n _this._isRunning = false;\n if (_this._rerunRequested) {\n _this._rerunRequested = false;\n _this.expireEntries();\n }\n })();\n }\n\n /**\n * Expires entries based on the maximum age.\n *\n * @param {number} expireFromTimestamp A timestamp.\n * @return {Promise>} A list of the URLs that were expired.\n *\n * @private\n */\n _findOldEntries(expireFromTimestamp) {\n var _this2 = this;\n\n return babelHelpers.asyncToGenerator(function* () {\n {\n assert_mjs.assert.isType(expireFromTimestamp, 'number', {\n moduleName: 'workbox-cache-expiration',\n className: 'CacheExpiration',\n funcName: '_findOldEntries',\n paramName: 'expireFromTimestamp'\n });\n }\n\n if (!_this2._maxAgeSeconds) {\n return [];\n }\n\n const expireOlderThan = expireFromTimestamp - _this2._maxAgeSeconds * 1000;\n const timestamps = yield _this2._timestampModel.getAllTimestamps();\n const expiredUrls = [];\n timestamps.forEach(function (timestampDetails) {\n if (timestampDetails.timestamp < expireOlderThan) {\n expiredUrls.push(timestampDetails.url);\n }\n });\n\n return expiredUrls;\n })();\n }\n\n /**\n * @return {Promise}\n *\n * @private\n */\n _findExtraEntries() {\n var _this3 = this;\n\n return babelHelpers.asyncToGenerator(function* () {\n const extraUrls = [];\n\n if (!_this3._maxEntries) {\n return [];\n }\n\n const timestamps = yield _this3._timestampModel.getAllTimestamps();\n while (timestamps.length > _this3._maxEntries) {\n const lastUsed = timestamps.shift();\n extraUrls.push(lastUsed.url);\n }\n\n return extraUrls;\n })();\n }\n\n /**\n * @param {Array} urls Array of URLs to delete from cache.\n *\n * @private\n */\n _deleteFromCache(urls) {\n var _this4 = this;\n\n return babelHelpers.asyncToGenerator(function* () {\n const cache = yield caches.open(_this4._cacheName);\n for (const url of urls) {\n yield cache.delete(url);\n }\n })();\n }\n\n /**\n * @param {Array} urls Array of URLs to delete from IDB\n *\n * @private\n */\n _deleteFromIDB(urls) {\n var _this5 = this;\n\n return babelHelpers.asyncToGenerator(function* () {\n for (const url of urls) {\n yield _this5._timestampModel.deleteUrl(url);\n }\n })();\n }\n\n /**\n * Update the timestamp for the given URL. This ensures the when\n * removing entries based on maximum entries, most recently used\n * is accurate or when expiring, the timestamp is up-to-date.\n *\n * @param {string} url\n */\n updateTimestamp(url) {\n var _this6 = this;\n\n return babelHelpers.asyncToGenerator(function* () {\n {\n assert_mjs.assert.isType(url, 'string', {\n moduleName: 'workbox-cache-expiration',\n className: 'CacheExpiration',\n funcName: 'updateTimestamp',\n paramName: 'url'\n });\n }\n\n const urlObject = new URL(url, location);\n urlObject.hash = '';\n\n yield _this6._timestampModel.setTimestamp(urlObject.href, Date.now());\n })();\n }\n\n /**\n * Can be used to check if a URL has expired or not before it's used.\n *\n * This requires a look up from IndexedDB, so can be slow.\n *\n * Note: This method will not remove the cached entry, call\n * `expireEntries()` to remove indexedDB and Cache entries.\n *\n * @param {string} url\n * @return {boolean}\n */\n isURLExpired(url) {\n var _this7 = this;\n\n return babelHelpers.asyncToGenerator(function* () {\n if (!_this7._maxAgeSeconds) {\n throw new WorkboxError_mjs.WorkboxError(`expired-test-without-max-age`, {\n methodName: 'isURLExpired',\n paramName: 'maxAgeSeconds'\n });\n }\n const urlObject = new URL(url, location);\n urlObject.hash = '';\n\n const timestamp = yield _this7._timestampModel.getTimestamp(urlObject.href);\n const expireOlderThan = Date.now() - _this7._maxAgeSeconds * 1000;\n return timestamp < expireOlderThan;\n })();\n }\n\n /**\n * Removes the IndexedDB object store used to keep track of cache expiration\n * metadata.\n */\n delete() {\n var _this8 = this;\n\n return babelHelpers.asyncToGenerator(function* () {\n // Make sure we don't attempt another rerun if we're called in the middle of\n // a cache expiration.\n _this8._rerunRequested = false;\n yield _this8._timestampModel.delete();\n })();\n }\n }\n\n /*\n Copyright 2016 Google Inc. All Rights Reserved.\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n http://www.apache.org/licenses/LICENSE-2.0\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n */\n\n /**\n * This plugin can be used in the Workbox APIs to regularly enforce a\n * limit on the age and / or the number of cached requests.\n *\n * Whenever a cached request is used or updated, this plugin will look\n * at the used Cache and remove any old or extra requests.\n *\n * When using `maxAgeSeconds`, requests may be used *once* after expiring\n * because the expiration clean up will not have occurred until *after* the\n * cached request has been used. If the request has a \"Date\" header, then\n * a light weight expiration check is performed and the request will not be\n * used immediately.\n *\n * When using `maxEntries`, the last request to be used will be the request\n * that is removed from the Cache.\n *\n * @memberof workbox.expiration\n */\n class Plugin {\n /**\n * @param {Object} config\n * @param {number} [config.maxEntries] The maximum number of entries to cache.\n * Entries used the least will be removed as the maximum is reached.\n * @param {number} [config.maxAgeSeconds] The maximum age of an entry before\n * it's treated as stale and removed.\n * @param {boolean} [config.purgeOnQuotaError] Whether to opt this cache in to\n * automatic deletion if the available storage quota has been exceeded.\n */\n constructor(config = {}) {\n {\n if (!(config.maxEntries || config.maxAgeSeconds)) {\n throw new WorkboxError_mjs.WorkboxError('max-entries-or-age-required', {\n moduleName: 'workbox-cache-expiration',\n className: 'Plugin',\n funcName: 'constructor'\n });\n }\n\n if (config.maxEntries) {\n assert_mjs.assert.isType(config.maxEntries, 'number', {\n moduleName: 'workbox-cache-expiration',\n className: 'Plugin',\n funcName: 'constructor',\n paramName: 'config.maxEntries'\n });\n }\n\n if (config.maxAgeSeconds) {\n assert_mjs.assert.isType(config.maxAgeSeconds, 'number', {\n moduleName: 'workbox-cache-expiration',\n className: 'Plugin',\n funcName: 'constructor',\n paramName: 'config.maxAgeSeconds'\n });\n }\n }\n\n this._config = config;\n this._maxAgeSeconds = config.maxAgeSeconds;\n this._cacheExpirations = new Map();\n\n if (config.purgeOnQuotaError) {\n index_mjs.registerQuotaErrorCallback(() => this.deleteCacheAndMetadata());\n }\n }\n\n /**\n * A simple helper method to return a CacheExpiration instance for a given\n * cache name.\n *\n * @param {string} cacheName\n * @return {CacheExpiration}\n *\n * @private\n */\n _getCacheExpiration(cacheName) {\n if (cacheName === cacheNames_mjs.cacheNames.getRuntimeName()) {\n throw new WorkboxError_mjs.WorkboxError('expire-custom-caches-only');\n }\n\n let cacheExpiration = this._cacheExpirations.get(cacheName);\n if (!cacheExpiration) {\n cacheExpiration = new CacheExpiration(cacheName, this._config);\n this._cacheExpirations.set(cacheName, cacheExpiration);\n }\n return cacheExpiration;\n }\n\n /**\n * A \"lifecycle\" callback that will be triggered automatically by the\n * `workbox.runtimeCaching` handlers when a `Response` is about to be returned\n * from a [Cache](https://developer.mozilla.org/en-US/docs/Web/API/Cache) to\n * the handler. It allows the `Response` to be inspected for freshness and\n * prevents it from being used if the `Response`'s `Date` header value is\n * older than the configured `maxAgeSeconds`.\n *\n * @param {Object} options\n * @param {string} options.cacheName Name of the cache the response is in.\n * @param {Response} options.cachedResponse The `Response` object that's been\n * read from a cache and whose freshness should be checked.\n * @return {Response} Either the `cachedResponse`, if it's\n * fresh, or `null` if the `Response` is older than `maxAgeSeconds`.\n *\n * @private\n */\n cachedResponseWillBeUsed({ cacheName, cachedResponse }) {\n if (!cachedResponse) {\n return null;\n }\n\n let isFresh = this._isResponseDateFresh(cachedResponse);\n\n // Expire entries to ensure that even if the expiration date has\n // expired, it'll only be used once.\n const cacheExpiration = this._getCacheExpiration(cacheName);\n cacheExpiration.expireEntries();\n\n return isFresh ? cachedResponse : null;\n }\n\n /**\n * @param {Response} cachedResponse\n * @return {boolean}\n *\n * @private\n */\n _isResponseDateFresh(cachedResponse) {\n if (!this._maxAgeSeconds) {\n // We aren't expiring by age, so return true, it's fresh\n return true;\n }\n\n // Check if the 'date' header will suffice a quick expiration check.\n // See https://github.com/GoogleChromeLabs/sw-toolbox/issues/164 for\n // discussion.\n const dateHeaderTimestamp = this._getDateHeaderTimestamp(cachedResponse);\n if (dateHeaderTimestamp === null) {\n // Unable to parse date, so assume it's fresh.\n return true;\n }\n\n // If we have a valid headerTime, then our response is fresh iff the\n // headerTime plus maxAgeSeconds is greater than the current time.\n const now = Date.now();\n return dateHeaderTimestamp >= now - this._maxAgeSeconds * 1000;\n }\n\n /**\n * This method will extract the data header and parse it into a useful\n * value.\n *\n * @param {Response} cachedResponse\n * @return {number}\n *\n * @private\n */\n _getDateHeaderTimestamp(cachedResponse) {\n if (!cachedResponse.headers.has('date')) {\n return null;\n }\n\n const dateHeader = cachedResponse.headers.get('date');\n const parsedDate = new Date(dateHeader);\n const headerTime = parsedDate.getTime();\n\n // If the Date header was invalid for some reason, parsedDate.getTime()\n // will return NaN.\n if (isNaN(headerTime)) {\n return null;\n }\n\n return headerTime;\n }\n\n /**\n * A \"lifecycle\" callback that will be triggered automatically by the\n * `workbox.runtimeCaching` handlers when an entry is added to a cache.\n *\n * @param {Object} options\n * @param {string} options.cacheName Name of the cache that was updated.\n * @param {string} options.request The Request for the cached entry.\n *\n * @private\n */\n cacheDidUpdate({ cacheName, request }) {\n var _this = this;\n\n return babelHelpers.asyncToGenerator(function* () {\n {\n assert_mjs.assert.isType(cacheName, 'string', {\n moduleName: 'workbox-cache-expiration',\n className: 'Plugin',\n funcName: 'cacheDidUpdate',\n paramName: 'cacheName'\n });\n assert_mjs.assert.isInstance(request, Request, {\n moduleName: 'workbox-cache-expiration',\n className: 'Plugin',\n funcName: 'cacheDidUpdate',\n paramName: 'request'\n });\n }\n\n const cacheExpiration = _this._getCacheExpiration(cacheName);\n yield cacheExpiration.updateTimestamp(request.url);\n yield cacheExpiration.expireEntries();\n })();\n }\n\n /**\n * This is a helper method that performs two operations:\n *\n * - Deletes *all* the underlying Cache instances associated with this plugin\n * instance, by calling caches.delete() on you behalf.\n * - Deletes the metadata from IndexedDB used to keep track of expiration\n * details for each Cache instance.\n *\n * When using cache expiration, calling this method is preferable to calling\n * `caches.delete()` directly, since this will ensure that the IndexedDB\n * metadata is also cleanly removed and open IndexedDB instances are deleted.\n *\n * Note that if you're *not* using cache expiration for a given cache, calling\n * `caches.delete()` and passing in the cache's name should be sufficient.\n * There is no Workbox-specific method needed for cleanup in that case.\n */\n deleteCacheAndMetadata() {\n var _this2 = this;\n\n return babelHelpers.asyncToGenerator(function* () {\n // Do this one at a time instead of all at once via `Promise.all()` to\n // reduce the chance of inconsistency if a promise rejects.\n for (const [cacheName, cacheExpiration] of _this2._cacheExpirations) {\n yield caches.delete(cacheName);\n yield cacheExpiration.delete();\n }\n\n // Reset this._cacheExpirations to its initial state.\n _this2._cacheExpirations = new Map();\n })();\n }\n }\n\n /*\n Copyright 2017 Google Inc.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n https://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n */\n\n /*\n Copyright 2017 Google Inc.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n https://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n */\n\n exports.CacheExpiration = CacheExpiration;\n exports.Plugin = Plugin;\n\n return exports;\n\n}({},workbox.core._private,workbox.core._private,workbox.core._private,workbox.core._private,workbox.core._private,workbox.core));\n"],"file":"workbox-cache-expiration.dev.js"} \ No newline at end of file diff --git a/assets/js/workbox-v3.6.3/workbox-cache-expiration.prod.js b/assets/js/workbox-v3.6.3/workbox-cache-expiration.prod.js new file mode 100644 index 0000000..f0a6913 --- /dev/null +++ b/assets/js/workbox-v3.6.3/workbox-cache-expiration.prod.js @@ -0,0 +1,3 @@ +this.workbox=this.workbox||{},this.workbox.expiration=function(e,t,r,n,i){"use strict";try{self.workbox.v["workbox:cache-expiration:3.6.3"]=1}catch(e){}const s="url",a="timestamp";class l{constructor(e){this.e=e,this.t=e,this.r=new t.DBWrapper(this.e,2,{onupgradeneeded:e=>this.n(e)})}n(e){const t=e.target.result;e.oldVersion<2&&t.objectStoreNames.contains("workbox-cache-expiration")&&t.deleteObjectStore("workbox-cache-expiration"),t.createObjectStore(this.t,{keyPath:s}).createIndex(a,a,{unique:!1})}setTimestamp(e,t){var r=this;return babelHelpers.asyncToGenerator(function*(){yield r.r.put(r.t,{[s]:new URL(e,location).href,[a]:t})})()}getAllTimestamps(){var e=this;return babelHelpers.asyncToGenerator(function*(){return yield e.r.getAllMatching(e.t,{index:a})})()}getTimestamp(e){var t=this;return babelHelpers.asyncToGenerator(function*(){return(yield t.r.get(t.t,e)).timestamp})()}deleteUrl(e){var t=this;return babelHelpers.asyncToGenerator(function*(){yield t.r.delete(t.t,new URL(e,location).href)})()}delete(){var e=this;return babelHelpers.asyncToGenerator(function*(){yield e.r.deleteDatabase(),e.r=null})()}}class o{constructor(e,t={}){this.i=!1,this.s=!1,this.a=t.maxEntries,this.l=t.maxAgeSeconds,this.e=e,this.o=new l(e)}expireEntries(){var e=this;return babelHelpers.asyncToGenerator(function*(){if(e.i)return void(e.s=!0);e.i=!0;const t=Date.now(),r=yield e.c(t),n=yield e.u(),i=[...new Set(r.concat(n))];yield Promise.all([e.h(i),e.d(i)]),e.i=!1,e.s&&(e.s=!1,e.expireEntries())})()}c(e){var t=this;return babelHelpers.asyncToGenerator(function*(){if(!t.l)return[];const r=e-1e3*t.l,n=[];return(yield t.o.getAllTimestamps()).forEach(function(e){e.timestampe.a;){const e=r.shift();t.push(e.url)}return t})()}h(e){var t=this;return babelHelpers.asyncToGenerator(function*(){const r=yield caches.open(t.e);for(const t of e)yield r.delete(t)})()}d(e){var t=this;return babelHelpers.asyncToGenerator(function*(){for(const r of e)yield t.o.deleteUrl(r)})()}updateTimestamp(e){var t=this;return babelHelpers.asyncToGenerator(function*(){const r=new URL(e,location);r.hash="",yield t.o.setTimestamp(r.href,Date.now())})()}isURLExpired(e){var t=this;return babelHelpers.asyncToGenerator(function*(){if(!t.l)throw new r.WorkboxError("expired-test-without-max-age",{methodName:"isURLExpired",paramName:"maxAgeSeconds"});const n=new URL(e,location);return n.hash="",(yield t.o.getTimestamp(n.href))this.deleteCacheAndMetadata())}f(e){if(e===n.cacheNames.getRuntimeName())throw new r.WorkboxError("expire-custom-caches-only");let t=this.b.get(e);return t||(t=new o(e,this.p),this.b.set(e,t)),t}cachedResponseWillBeUsed({cacheName:e,cachedResponse:t}){if(!t)return null;let r=this.m(t);return this.f(e).expireEntries(),r?t:null}m(e){if(!this.l)return!0;const t=this.y(e);return null===t||t>=Date.now()-1e3*this.l}y(e){if(!e.headers.has("date"))return null;const t=e.headers.get("date"),r=new Date(t).getTime();return isNaN(r)?null:r}cacheDidUpdate({cacheName:e,request:t}){var r=this;return babelHelpers.asyncToGenerator(function*(){const n=r.f(e);yield n.updateTimestamp(t.url),yield n.expireEntries()})()}deleteCacheAndMetadata(){var e=this;return babelHelpers.asyncToGenerator(function*(){for(const[t,r]of e.b)yield caches.delete(t),yield r.delete();e.b=new Map})()}},e}({},workbox.core._private,workbox.core._private,workbox.core._private,workbox.core); + +//# sourceMappingURL=workbox-cache-expiration.prod.js.map diff --git a/assets/js/workbox-v3.6.3/workbox-cache-expiration.prod.js.map b/assets/js/workbox-v3.6.3/workbox-cache-expiration.prod.js.map new file mode 100644 index 0000000..84d70ca --- /dev/null +++ b/assets/js/workbox-v3.6.3/workbox-cache-expiration.prod.js.map @@ -0,0 +1 @@ +{"version":3,"names":[],"mappings":"","sources":["packages/workbox-cache-expiration/browser.mjs"],"sourcesContent":["this.workbox=this.workbox||{},this.workbox.expiration=function(e,t,r,n,i){\"use strict\";try{self.workbox.v[\"workbox:cache-expiration:3.6.3\"]=1}catch(e){}const s=\"url\",a=\"timestamp\";class l{constructor(e){this.e=e,this.t=e,this.r=new t.DBWrapper(this.e,2,{onupgradeneeded:e=>this.n(e)})}n(e){const t=e.target.result;e.oldVersion<2&&t.objectStoreNames.contains(\"workbox-cache-expiration\")&&t.deleteObjectStore(\"workbox-cache-expiration\"),t.createObjectStore(this.t,{keyPath:s}).createIndex(a,a,{unique:!1})}setTimestamp(e,t){var r=this;return babelHelpers.asyncToGenerator(function*(){yield r.r.put(r.t,{[s]:new URL(e,location).href,[a]:t})})()}getAllTimestamps(){var e=this;return babelHelpers.asyncToGenerator(function*(){return yield e.r.getAllMatching(e.t,{index:a})})()}getTimestamp(e){var t=this;return babelHelpers.asyncToGenerator(function*(){return(yield t.r.get(t.t,e)).timestamp})()}deleteUrl(e){var t=this;return babelHelpers.asyncToGenerator(function*(){yield t.r.delete(t.t,new URL(e,location).href)})()}delete(){var e=this;return babelHelpers.asyncToGenerator(function*(){yield e.r.deleteDatabase(),e.r=null})()}}class o{constructor(e,t={}){this.i=!1,this.s=!1,this.a=t.maxEntries,this.l=t.maxAgeSeconds,this.e=e,this.o=new l(e)}expireEntries(){var e=this;return babelHelpers.asyncToGenerator(function*(){if(e.i)return void(e.s=!0);e.i=!0;const t=Date.now(),r=yield e.c(t),n=yield e.u(),i=[...new Set(r.concat(n))];yield Promise.all([e.h(i),e.d(i)]),e.i=!1,e.s&&(e.s=!1,e.expireEntries())})()}c(e){var t=this;return babelHelpers.asyncToGenerator(function*(){if(!t.l)return[];const r=e-1e3*t.l,n=[];return(yield t.o.getAllTimestamps()).forEach(function(e){e.timestampe.a;){const e=r.shift();t.push(e.url)}return t})()}h(e){var t=this;return babelHelpers.asyncToGenerator(function*(){const r=yield caches.open(t.e);for(const t of e)yield r.delete(t)})()}d(e){var t=this;return babelHelpers.asyncToGenerator(function*(){for(const r of e)yield t.o.deleteUrl(r)})()}updateTimestamp(e){var t=this;return babelHelpers.asyncToGenerator(function*(){const r=new URL(e,location);r.hash=\"\",yield t.o.setTimestamp(r.href,Date.now())})()}isURLExpired(e){var t=this;return babelHelpers.asyncToGenerator(function*(){if(!t.l)throw new r.WorkboxError(\"expired-test-without-max-age\",{methodName:\"isURLExpired\",paramName:\"maxAgeSeconds\"});const n=new URL(e,location);return n.hash=\"\",(yield t.o.getTimestamp(n.href))this.deleteCacheAndMetadata())}f(e){if(e===n.cacheNames.getRuntimeName())throw new r.WorkboxError(\"expire-custom-caches-only\");let t=this.b.get(e);return t||(t=new o(e,this.p),this.b.set(e,t)),t}cachedResponseWillBeUsed({cacheName:e,cachedResponse:t}){if(!t)return null;let r=this.m(t);return this.f(e).expireEntries(),r?t:null}m(e){if(!this.l)return!0;const t=this.y(e);return null===t||t>=Date.now()-1e3*this.l}y(e){if(!e.headers.has(\"date\"))return null;const t=e.headers.get(\"date\"),r=new Date(t).getTime();return isNaN(r)?null:r}cacheDidUpdate({cacheName:e,request:t}){var r=this;return babelHelpers.asyncToGenerator(function*(){const n=r.f(e);yield n.updateTimestamp(t.url),yield n.expireEntries()})()}deleteCacheAndMetadata(){var e=this;return babelHelpers.asyncToGenerator(function*(){for(const[t,r]of e.b)yield caches.delete(t),yield r.delete();e.b=new Map})()}},e}({},workbox.core._private,workbox.core._private,workbox.core._private,workbox.core);\n"],"file":"workbox-cache-expiration.prod.js"} \ No newline at end of file diff --git a/assets/js/workbox-v3.6.3/workbox-cacheable-response.dev.js b/assets/js/workbox-v3.6.3/workbox-cacheable-response.dev.js new file mode 100644 index 0000000..64a049d --- /dev/null +++ b/assets/js/workbox-v3.6.3/workbox-cacheable-response.dev.js @@ -0,0 +1,236 @@ +this.workbox = this.workbox || {}; +this.workbox.cacheableResponse = (function (exports,WorkboxError_mjs,assert_mjs,getFriendlyURL_mjs,logger_mjs) { + 'use strict'; + + try { + self.workbox.v['workbox:cacheable-response:3.6.3'] = 1; + } catch (e) {} // eslint-disable-line + + /* + Copyright 2017 Google Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + https://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + + /** + * This class allows you to set up rules determining what + * status codes and/or headers need to be present in order for a + * [`Response`](https://developer.mozilla.org/en-US/docs/Web/API/Response) + * to be considered cacheable. + * + * @memberof workbox.cacheableResponse + */ + class CacheableResponse { + /** + * To construct a new CacheableResponse instance you must provide at least + * one of the `config` properties. + * + * If both `statuses` and `headers` are specified, then both conditions must + * be met for the `Response` to be considered cacheable. + * + * @param {Object} config + * @param {Array} [config.statuses] One or more status codes that a + * `Response` can have and be considered cacheable. + * @param {Object} [config.headers] A mapping of header names + * and expected values that a `Response` can have and be considered cacheable. + * If multiple headers are provided, only one needs to be present. + */ + constructor(config = {}) { + { + if (!(config.statuses || config.headers)) { + throw new WorkboxError_mjs.WorkboxError('statuses-or-headers-required', { + moduleName: 'workbox-cacheable-response', + className: 'CacheableResponse', + funcName: 'constructor' + }); + } + + if (config.statuses) { + assert_mjs.assert.isArray(config.statuses, { + moduleName: 'workbox-cacheable-response', + className: 'CacheableResponse', + funcName: 'constructor', + paramName: 'config.statuses' + }); + } + + if (config.headers) { + assert_mjs.assert.isType(config.headers, 'object', { + moduleName: 'workbox-cacheable-response', + className: 'CacheableResponse', + funcName: 'constructor', + paramName: 'config.headers' + }); + } + } + + this._statuses = config.statuses; + this._headers = config.headers; + } + + /** + * Checks a response to see whether it's cacheable or not, based on this + * object's configuration. + * + * @param {Response} response The response whose cacheability is being + * checked. + * @return {boolean} `true` if the `Response` is cacheable, and `false` + * otherwise. + */ + isResponseCacheable(response) { + { + assert_mjs.assert.isInstance(response, Response, { + moduleName: 'workbox-cacheable-response', + className: 'CacheableResponse', + funcName: 'isResponseCacheable', + paramName: 'response' + }); + } + + let cacheable = true; + + if (this._statuses) { + cacheable = this._statuses.includes(response.status); + } + + if (this._headers && cacheable) { + cacheable = Object.keys(this._headers).some(headerName => { + return response.headers.get(headerName) === this._headers[headerName]; + }); + } + + { + if (!cacheable) { + logger_mjs.logger.groupCollapsed(`The request for ` + `'${getFriendlyURL_mjs.getFriendlyURL(response.url)}' returned a response that does ` + `not meet the criteria for being cached.`); + + logger_mjs.logger.groupCollapsed(`View cacheability criteria here.`); + logger_mjs.logger.unprefixed.log(`Cacheable statuses: ` + JSON.stringify(this._statuses)); + logger_mjs.logger.unprefixed.log(`Cacheable headers: ` + JSON.stringify(this._headers, null, 2)); + logger_mjs.logger.groupEnd(); + + const logFriendlyHeaders = {}; + response.headers.forEach((value, key) => { + logFriendlyHeaders[key] = value; + }); + + logger_mjs.logger.groupCollapsed(`View response status and headers here.`); + logger_mjs.logger.unprefixed.log(`Response status: ` + response.status); + logger_mjs.logger.unprefixed.log(`Response headers: ` + JSON.stringify(logFriendlyHeaders, null, 2)); + logger_mjs.logger.groupEnd(); + + logger_mjs.logger.groupCollapsed(`View full response details here.`); + logger_mjs.logger.unprefixed.log(response.headers); + logger_mjs.logger.unprefixed.log(response); + logger_mjs.logger.groupEnd(); + + logger_mjs.logger.groupEnd(); + } + } + + return cacheable; + } + } + + /* + Copyright 2016 Google Inc. All Rights Reserved. + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + http://www.apache.org/licenses/LICENSE-2.0 + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + + /** + * A class implementing the `cacheWillUpdate` lifecycle callback. This makes it + * easier to add in cacheability checks to requests made via Workbox's built-in + * strategies. + * + * @memberof workbox.cacheableResponse + */ + class Plugin { + /** + * To construct a new cacheable response Plugin instance you must provide at + * least one of the `config` properties. + * + * If both `statuses` and `headers` are specified, then both conditions must + * be met for the `Response` to be considered cacheable. + * + * @param {Object} config + * @param {Array} [config.statuses] One or more status codes that a + * `Response` can have and be considered cacheable. + * @param {Object} [config.headers] A mapping of header names + * and expected values that a `Response` can have and be considered cacheable. + * If multiple headers are provided, only one needs to be present. + */ + constructor(config) { + this._cacheableResponse = new CacheableResponse(config); + } + + /** + * @param {Object} options + * @param {Response} options.response + * @return {boolean} + * @private + */ + cacheWillUpdate({ response }) { + if (this._cacheableResponse.isResponseCacheable(response)) { + return response; + } + return null; + } + } + + /* + Copyright 2017 Google Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + https://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + + /* + Copyright 2017 Google Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + https://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + + exports.CacheableResponse = CacheableResponse; + exports.Plugin = Plugin; + + return exports; + +}({},workbox.core._private,workbox.core._private,workbox.core._private,workbox.core._private)); + +//# sourceMappingURL=workbox-cacheable-response.dev.js.map diff --git a/assets/js/workbox-v3.6.3/workbox-cacheable-response.dev.js.map b/assets/js/workbox-v3.6.3/workbox-cacheable-response.dev.js.map new file mode 100644 index 0000000..3e4d2ab --- /dev/null +++ b/assets/js/workbox-v3.6.3/workbox-cacheable-response.dev.js.map @@ -0,0 +1 @@ +{"version":3,"names":[],"mappings":"","sources":["packages/workbox-cacheable-response/browser.mjs"],"sourcesContent":["this.workbox = this.workbox || {};\nthis.workbox.cacheableResponse = (function (exports,WorkboxError_mjs,assert_mjs,getFriendlyURL_mjs,logger_mjs) {\n 'use strict';\n\n try {\n self.workbox.v['workbox:cacheable-response:3.6.3'] = 1;\n } catch (e) {} // eslint-disable-line\n\n /*\n Copyright 2017 Google Inc.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n https://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n */\n\n /**\n * This class allows you to set up rules determining what\n * status codes and/or headers need to be present in order for a\n * [`Response`](https://developer.mozilla.org/en-US/docs/Web/API/Response)\n * to be considered cacheable.\n *\n * @memberof workbox.cacheableResponse\n */\n class CacheableResponse {\n /**\n * To construct a new CacheableResponse instance you must provide at least\n * one of the `config` properties.\n *\n * If both `statuses` and `headers` are specified, then both conditions must\n * be met for the `Response` to be considered cacheable.\n *\n * @param {Object} config\n * @param {Array} [config.statuses] One or more status codes that a\n * `Response` can have and be considered cacheable.\n * @param {Object} [config.headers] A mapping of header names\n * and expected values that a `Response` can have and be considered cacheable.\n * If multiple headers are provided, only one needs to be present.\n */\n constructor(config = {}) {\n {\n if (!(config.statuses || config.headers)) {\n throw new WorkboxError_mjs.WorkboxError('statuses-or-headers-required', {\n moduleName: 'workbox-cacheable-response',\n className: 'CacheableResponse',\n funcName: 'constructor'\n });\n }\n\n if (config.statuses) {\n assert_mjs.assert.isArray(config.statuses, {\n moduleName: 'workbox-cacheable-response',\n className: 'CacheableResponse',\n funcName: 'constructor',\n paramName: 'config.statuses'\n });\n }\n\n if (config.headers) {\n assert_mjs.assert.isType(config.headers, 'object', {\n moduleName: 'workbox-cacheable-response',\n className: 'CacheableResponse',\n funcName: 'constructor',\n paramName: 'config.headers'\n });\n }\n }\n\n this._statuses = config.statuses;\n this._headers = config.headers;\n }\n\n /**\n * Checks a response to see whether it's cacheable or not, based on this\n * object's configuration.\n *\n * @param {Response} response The response whose cacheability is being\n * checked.\n * @return {boolean} `true` if the `Response` is cacheable, and `false`\n * otherwise.\n */\n isResponseCacheable(response) {\n {\n assert_mjs.assert.isInstance(response, Response, {\n moduleName: 'workbox-cacheable-response',\n className: 'CacheableResponse',\n funcName: 'isResponseCacheable',\n paramName: 'response'\n });\n }\n\n let cacheable = true;\n\n if (this._statuses) {\n cacheable = this._statuses.includes(response.status);\n }\n\n if (this._headers && cacheable) {\n cacheable = Object.keys(this._headers).some(headerName => {\n return response.headers.get(headerName) === this._headers[headerName];\n });\n }\n\n {\n if (!cacheable) {\n logger_mjs.logger.groupCollapsed(`The request for ` + `'${getFriendlyURL_mjs.getFriendlyURL(response.url)}' returned a response that does ` + `not meet the criteria for being cached.`);\n\n logger_mjs.logger.groupCollapsed(`View cacheability criteria here.`);\n logger_mjs.logger.unprefixed.log(`Cacheable statuses: ` + JSON.stringify(this._statuses));\n logger_mjs.logger.unprefixed.log(`Cacheable headers: ` + JSON.stringify(this._headers, null, 2));\n logger_mjs.logger.groupEnd();\n\n const logFriendlyHeaders = {};\n response.headers.forEach((value, key) => {\n logFriendlyHeaders[key] = value;\n });\n\n logger_mjs.logger.groupCollapsed(`View response status and headers here.`);\n logger_mjs.logger.unprefixed.log(`Response status: ` + response.status);\n logger_mjs.logger.unprefixed.log(`Response headers: ` + JSON.stringify(logFriendlyHeaders, null, 2));\n logger_mjs.logger.groupEnd();\n\n logger_mjs.logger.groupCollapsed(`View full response details here.`);\n logger_mjs.logger.unprefixed.log(response.headers);\n logger_mjs.logger.unprefixed.log(response);\n logger_mjs.logger.groupEnd();\n\n logger_mjs.logger.groupEnd();\n }\n }\n\n return cacheable;\n }\n }\n\n /*\n Copyright 2016 Google Inc. All Rights Reserved.\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n http://www.apache.org/licenses/LICENSE-2.0\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n */\n\n /**\n * A class implementing the `cacheWillUpdate` lifecycle callback. This makes it\n * easier to add in cacheability checks to requests made via Workbox's built-in\n * strategies.\n *\n * @memberof workbox.cacheableResponse\n */\n class Plugin {\n /**\n * To construct a new cacheable response Plugin instance you must provide at\n * least one of the `config` properties.\n *\n * If both `statuses` and `headers` are specified, then both conditions must\n * be met for the `Response` to be considered cacheable.\n *\n * @param {Object} config\n * @param {Array} [config.statuses] One or more status codes that a\n * `Response` can have and be considered cacheable.\n * @param {Object} [config.headers] A mapping of header names\n * and expected values that a `Response` can have and be considered cacheable.\n * If multiple headers are provided, only one needs to be present.\n */\n constructor(config) {\n this._cacheableResponse = new CacheableResponse(config);\n }\n\n /**\n * @param {Object} options\n * @param {Response} options.response\n * @return {boolean}\n * @private\n */\n cacheWillUpdate({ response }) {\n if (this._cacheableResponse.isResponseCacheable(response)) {\n return response;\n }\n return null;\n }\n }\n\n /*\n Copyright 2017 Google Inc.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n https://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n */\n\n /*\n Copyright 2017 Google Inc.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n https://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n */\n\n exports.CacheableResponse = CacheableResponse;\n exports.Plugin = Plugin;\n\n return exports;\n\n}({},workbox.core._private,workbox.core._private,workbox.core._private,workbox.core._private));\n"],"file":"workbox-cacheable-response.dev.js"} \ No newline at end of file diff --git a/assets/js/workbox-v3.6.3/workbox-cacheable-response.prod.js b/assets/js/workbox-v3.6.3/workbox-cacheable-response.prod.js new file mode 100644 index 0000000..76f159c --- /dev/null +++ b/assets/js/workbox-v3.6.3/workbox-cacheable-response.prod.js @@ -0,0 +1,3 @@ +this.workbox=this.workbox||{},this.workbox.cacheableResponse=function(t){"use strict";try{self.workbox.v["workbox:cacheable-response:3.6.3"]=1}catch(t){}class s{constructor(t={}){this.t=t.statuses,this.s=t.headers}isResponseCacheable(t){let s=!0;return this.t&&(s=this.t.includes(t.status)),this.s&&s&&(s=Object.keys(this.s).some(s=>t.headers.get(s)===this.s[s])),s}}return t.CacheableResponse=s,t.Plugin=class{constructor(t){this.e=new s(t)}cacheWillUpdate({response:t}){return this.e.isResponseCacheable(t)?t:null}},t}({}); + +//# sourceMappingURL=workbox-cacheable-response.prod.js.map diff --git a/assets/js/workbox-v3.6.3/workbox-cacheable-response.prod.js.map b/assets/js/workbox-v3.6.3/workbox-cacheable-response.prod.js.map new file mode 100644 index 0000000..6471d14 --- /dev/null +++ b/assets/js/workbox-v3.6.3/workbox-cacheable-response.prod.js.map @@ -0,0 +1 @@ +{"version":3,"names":[],"mappings":"","sources":["packages/workbox-cacheable-response/browser.mjs"],"sourcesContent":["this.workbox=this.workbox||{},this.workbox.cacheableResponse=function(t){\"use strict\";try{self.workbox.v[\"workbox:cacheable-response:3.6.3\"]=1}catch(t){}class s{constructor(t={}){this.t=t.statuses,this.s=t.headers}isResponseCacheable(t){let s=!0;return this.t&&(s=this.t.includes(t.status)),this.s&&s&&(s=Object.keys(this.s).some(s=>t.headers.get(s)===this.s[s])),s}}return t.CacheableResponse=s,t.Plugin=class{constructor(t){this.e=new s(t)}cacheWillUpdate({response:t}){return this.e.isResponseCacheable(t)?t:null}},t}({});\n"],"file":"workbox-cacheable-response.prod.js"} \ No newline at end of file diff --git a/assets/js/workbox-v3.6.3/workbox-core.dev.js b/assets/js/workbox-v3.6.3/workbox-core.dev.js new file mode 100644 index 0000000..1196c16 --- /dev/null +++ b/assets/js/workbox-v3.6.3/workbox-core.dev.js @@ -0,0 +1,1736 @@ +/* eslint-disable */ +// This is extracted from the Babel runtime (original source: https://github.com/babel/babel/blob/9e0f5235b1ca5167c368a576ad7c5af62d20b0e3/packages/babel-helpers/src/helpers.js#L240). +// As part of the Rollup bundling process, it's injected once into workbox-core +// and reused throughout all of the other modules, avoiding code duplication. +// See https://github.com/GoogleChrome/workbox/pull/1048#issuecomment-344698046 +// for further background. +self.babelHelpers = { + asyncToGenerator: function(fn) { + return function() { + var gen = fn.apply(this, arguments); + return new Promise(function(resolve, reject) { + function step(key, arg) { + try { + var info = gen[key](arg); + var value = info.value; + } catch (error) { + reject(error); + return; + } + + if (info.done) { + resolve(value); + } else { + return Promise.resolve(value).then(function(value) { + step('next', value); + }, function(err) { + step('throw', err); + }); + } + } + + return step('next'); + }); + }; + }, +}; + +this.workbox = this.workbox || {}; +this.workbox.core = (function () { + 'use strict'; + + try { + self.workbox.v['workbox:core:3.6.3'] = 1; + } catch (e) {} // eslint-disable-line + + /* + Copyright 2017 Google Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + https://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + + /** + * The available log levels in Workbox: debug, log, warn, error and silent. + * + * @property {int} debug Prints all logs from Workbox. Useful for debugging. + * @property {int} log Prints console log, warn, error and groups. Default for + * debug builds. + * @property {int} warn Prints console warn, error and groups. Default for + * non-debug builds. + * @property {int} error Print console error and groups. + * @property {int} silent Force no logging from Workbox. + * + * @alias workbox.core.LOG_LEVELS + */ + + var LOG_LEVELS = { + debug: 0, + log: 1, + warn: 2, + error: 3, + silent: 4 + }; + + /* + Copyright 2017 Google Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + https://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + + // Safari doesn't print all console.groupCollapsed() arguments. + // Related bug: https://bugs.webkit.org/show_bug.cgi?id=182754 + const isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent); + + const GREY = `#7f8c8d`; + const GREEN = `#2ecc71`; + const YELLOW = `#f39c12`; + const RED = `#c0392b`; + const BLUE = `#3498db`; + + const getDefaultLogLevel = () => LOG_LEVELS.log; + + let logLevel = getDefaultLogLevel(); + const shouldPrint = minLevel => logLevel <= minLevel; + const setLoggerLevel = newLogLevel => logLevel = newLogLevel; + const getLoggerLevel = () => logLevel; + + // We always want groups to be logged unless logLevel is silent. + const groupLevel = LOG_LEVELS.error; + + const _print = function (keyName, logArgs, levelColor) { + const logLevel = keyName.indexOf('group') === 0 ? groupLevel : LOG_LEVELS[keyName]; + if (!shouldPrint(logLevel)) { + return; + } + + if (!levelColor || keyName === 'groupCollapsed' && isSafari) { + console[keyName](...logArgs); + return; + } + + const logPrefix = ['%cworkbox', `background: ${levelColor}; color: white; padding: 2px 0.5em; ` + `border-radius: 0.5em;`]; + console[keyName](...logPrefix, ...logArgs); + }; + + const groupEnd = () => { + if (shouldPrint(groupLevel)) { + console.groupEnd(); + } + }; + + const defaultExport = { + groupEnd, + unprefixed: { + groupEnd + } + }; + + const setupLogs = (keyName, color) => { + defaultExport[keyName] = (...args) => _print(keyName, args, color); + defaultExport.unprefixed[keyName] = (...args) => _print(keyName, args); + }; + + const levelToColor = { + debug: GREY, + log: GREEN, + warn: YELLOW, + error: RED, + groupCollapsed: BLUE + }; + Object.keys(levelToColor).forEach(keyName => setupLogs(keyName, levelToColor[keyName])); + + /* + Copyright 2017 Google Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + https://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + + var messages = { + 'invalid-value': ({ paramName, validValueDescription, value }) => { + if (!paramName || !validValueDescription) { + throw new Error(`Unexpected input to 'invalid-value' error.`); + } + return `The '${paramName}' parameter was given a value with an ` + `unexpected value. ${validValueDescription} Received a value of ` + `${JSON.stringify(value)}.`; + }, + + 'not-in-sw': ({ moduleName }) => { + if (!moduleName) { + throw new Error(`Unexpected input to 'not-in-sw' error.`); + } + return `The '${moduleName}' must be used in a service worker.`; + }, + + 'not-an-array': ({ moduleName, className, funcName, paramName }) => { + if (!moduleName || !className || !funcName || !paramName) { + throw new Error(`Unexpected input to 'not-an-array' error.`); + } + return `The parameter '${paramName}' passed into ` + `'${moduleName}.${className}.${funcName}()' must be an array.`; + }, + + 'incorrect-type': ({ expectedType, paramName, moduleName, className, + funcName }) => { + if (!expectedType || !paramName || !moduleName || !funcName) { + throw new Error(`Unexpected input to 'incorrect-type' error.`); + } + return `The parameter '${paramName}' passed into ` + `'${moduleName}.${className ? className + '.' : ''}` + `${funcName}()' must be of type ${expectedType}.`; + }, + + 'incorrect-class': ({ expectedClass, paramName, moduleName, className, + funcName, isReturnValueProblem }) => { + if (!expectedClass || !moduleName || !funcName) { + throw new Error(`Unexpected input to 'incorrect-class' error.`); + } + + if (isReturnValueProblem) { + return `The return value from ` + `'${moduleName}.${className ? className + '.' : ''}${funcName}()' ` + `must be an instance of class ${expectedClass.name}.`; + } + + return `The parameter '${paramName}' passed into ` + `'${moduleName}.${className ? className + '.' : ''}${funcName}()' ` + `must be an instance of class ${expectedClass.name}.`; + }, + + 'missing-a-method': ({ expectedMethod, paramName, moduleName, className, + funcName }) => { + if (!expectedMethod || !paramName || !moduleName || !className || !funcName) { + throw new Error(`Unexpected input to 'missing-a-method' error.`); + } + return `${moduleName}.${className}.${funcName}() expected the ` + `'${paramName}' parameter to expose a '${expectedMethod}' method.`; + }, + + 'add-to-cache-list-unexpected-type': ({ entry }) => { + return `An unexpected entry was passed to ` + `'workbox-precaching.PrecacheController.addToCacheList()' The entry ` + `'${JSON.stringify(entry)}' isn't supported. You must supply an array of ` + `strings with one or more characters, objects with a url property or ` + `Request objects.`; + }, + + 'add-to-cache-list-conflicting-entries': ({ firstEntry, secondEntry }) => { + if (!firstEntry || !secondEntry) { + throw new Error(`Unexpected input to ` + `'add-to-cache-list-duplicate-entries' error.`); + } + + return `Two of the entries passed to ` + `'workbox-precaching.PrecacheController.addToCacheList()' had matching ` + `URLs but different revision details. This means workbox-precaching ` + `is unable to determine cache the asset correctly. Please remove one ` + `of the entries.`; + }, + + 'plugin-error-request-will-fetch': ({ thrownError }) => { + if (!thrownError) { + throw new Error(`Unexpected input to ` + `'plugin-error-request-will-fetch', error.`); + } + + return `An error was thrown by a plugins 'requestWillFetch()' method. ` + `The thrown error message was: '${thrownError.message}'.`; + }, + + 'invalid-cache-name': ({ cacheNameId, value }) => { + if (!cacheNameId) { + throw new Error(`Expected a 'cacheNameId' for error 'invalid-cache-name'`); + } + + return `You must provide a name containing at least one character for ` + `setCacheDeatils({${cacheNameId}: '...'}). Received a value of ` + `'${JSON.stringify(value)}'`; + }, + + 'unregister-route-but-not-found-with-method': ({ method }) => { + if (!method) { + throw new Error(`Unexpected input to ` + `'unregister-route-but-not-found-with-method' error.`); + } + + return `The route you're trying to unregister was not previously ` + `registered for the method type '${method}'.`; + }, + + 'unregister-route-route-not-registered': () => { + return `The route you're trying to unregister was not previously ` + `registered.`; + }, + + 'queue-replay-failed': ({ name, count }) => { + return `${count} requests failed, while trying to replay Queue: ${name}.`; + }, + + 'duplicate-queue-name': ({ name }) => { + return `The Queue name '${name}' is already being used. ` + `All instances of backgroundSync.Queue must be given unique names.`; + }, + + 'expired-test-without-max-age': ({ methodName, paramName }) => { + return `The '${methodName}()' method can only be used when the ` + `'${paramName}' is used in the constructor.`; + }, + + 'unsupported-route-type': ({ moduleName, className, funcName, paramName }) => { + return `The supplied '${paramName}' parameter was an unsupported type. ` + `Please check the docs for ${moduleName}.${className}.${funcName} for ` + `valid input types.`; + }, + + 'not-array-of-class': ({ value, expectedClass, + moduleName, className, funcName, paramName }) => { + return `The supplied '${paramName}' parameter must be an array of ` + `'${expectedClass}' objects. Received '${JSON.stringify(value)},'. ` + `Please check the call to ${moduleName}.${className}.${funcName}() ` + `to fix the issue.`; + }, + + 'max-entries-or-age-required': ({ moduleName, className, funcName }) => { + return `You must define either config.maxEntries or config.maxAgeSeconds` + `in ${moduleName}.${className}.${funcName}`; + }, + + 'statuses-or-headers-required': ({ moduleName, className, funcName }) => { + return `You must define either config.statuses or config.headers` + `in ${moduleName}.${className}.${funcName}`; + }, + + 'invalid-string': ({ moduleName, className, funcName, paramName }) => { + if (!paramName || !moduleName || !className || !funcName) { + throw new Error(`Unexpected input to 'invalid-string' error.`); + } + return `When using strings, the '${paramName}' parameter must start with ` + `'http' (for cross-origin matches) or '/' (for same-origin matches). ` + `Please see the docs for ${moduleName}.${className}.${funcName}() for ` + `more info.`; + }, + 'channel-name-required': () => { + return `You must provide a channelName to construct a ` + `BroadcastCacheUpdate instance.`; + }, + 'invalid-responses-are-same-args': () => { + return `The arguments passed into responsesAreSame() appear to be ` + `invalid. Please ensure valid Responses are used.`; + }, + 'expire-custom-caches-only': () => { + return `You must provide a 'cacheName' property when using the ` + `expiration plugin with a runtime caching strategy.`; + }, + 'unit-must-be-bytes': ({ normalizedRangeHeader }) => { + if (!normalizedRangeHeader) { + throw new Error(`Unexpected input to 'unit-must-be-bytes' error.`); + } + return `The 'unit' portion of the Range header must be set to 'bytes'. ` + `The Range header provided was "${normalizedRangeHeader}"`; + }, + 'single-range-only': ({ normalizedRangeHeader }) => { + if (!normalizedRangeHeader) { + throw new Error(`Unexpected input to 'single-range-only' error.`); + } + return `Multiple ranges are not supported. Please use a single start ` + `value, and optional end value. The Range header provided was ` + `"${normalizedRangeHeader}"`; + }, + 'invalid-range-values': ({ normalizedRangeHeader }) => { + if (!normalizedRangeHeader) { + throw new Error(`Unexpected input to 'invalid-range-values' error.`); + } + return `The Range header is missing both start and end values. At least ` + `one of those values is needed. The Range header provided was ` + `"${normalizedRangeHeader}"`; + }, + 'no-range-header': () => { + return `No Range header was found in the Request provided.`; + }, + 'range-not-satisfiable': ({ size, start, end }) => { + return `The start (${start}) and end (${end}) values in the Range are ` + `not satisfiable by the cached response, which is ${size} bytes.`; + }, + 'attempt-to-cache-non-get-request': ({ url, method }) => { + return `Unable to cache '${url}' because it is a '${method}' request and ` + `only 'GET' requests can be cached.`; + }, + 'cache-put-with-no-response': ({ url }) => { + return `There was an attempt to cache '${url}' but the response was not ` + `defined.`; + } + }; + + /* + Copyright 2017 Google Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + https://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + + const generatorFunction = (code, ...args) => { + const message = messages[code]; + if (!message) { + throw new Error(`Unable to find message for code '${code}'.`); + } + + return message(...args); + }; + + const exportedValue = generatorFunction; + + /* + Copyright 2017 Google Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + https://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + + /** + * Workbox errors should be thrown with this class. + * This allows use to ensure the type easily in tests, + * helps developers identify errors from workbox + * easily and allows use to optimise error + * messages correctly. + * + * @private + */ + class WorkboxError extends Error { + /** + * + * @param {string} errorCode The error code that + * identifies this particular error. + * @param {Object=} details Any relevant arguments + * that will help developers identify issues should + * be added as a key on the context object. + */ + constructor(errorCode, details) { + let message = exportedValue(errorCode, details); + + super(message); + + this.name = errorCode; + this.details = details; + } + } + + /* + Copyright 2017 Google Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + https://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + + /* + * This method returns true if the current context is a service worker. + */ + const isSwEnv = moduleName => { + if (!('ServiceWorkerGlobalScope' in self)) { + throw new WorkboxError('not-in-sw', { moduleName }); + } + }; + + /* + * This method throws if the supplied value is not an array. + * The destructed values are required to produce a meaningful error for users. + * The destructed and restructured object is so it's clear what is + * needed. + */ + const isArray = (value, { moduleName, className, funcName, paramName }) => { + if (!Array.isArray(value)) { + throw new WorkboxError('not-an-array', { + moduleName, + className, + funcName, + paramName + }); + } + }; + + const hasMethod = (object, expectedMethod, { moduleName, className, funcName, paramName }) => { + const type = typeof object[expectedMethod]; + if (type !== 'function') { + throw new WorkboxError('missing-a-method', { paramName, expectedMethod, + moduleName, className, funcName }); + } + }; + + const isType = (object, expectedType, { moduleName, className, funcName, paramName }) => { + if (typeof object !== expectedType) { + throw new WorkboxError('incorrect-type', { paramName, expectedType, + moduleName, className, funcName }); + } + }; + + const isInstance = (object, expectedClass, { moduleName, className, funcName, + paramName, isReturnValueProblem }) => { + if (!(object instanceof expectedClass)) { + throw new WorkboxError('incorrect-class', { paramName, expectedClass, + moduleName, className, funcName, isReturnValueProblem }); + } + }; + + const isOneOf = (value, validValues, { paramName }) => { + if (!validValues.includes(value)) { + throw new WorkboxError('invalid-value', { + paramName, + value, + validValueDescription: `Valid values are ${JSON.stringify(validValues)}.` + }); + } + }; + + const isArrayOfClass = (value, expectedClass, { moduleName, className, funcName, paramName }) => { + const error = new WorkboxError('not-array-of-class', { + value, expectedClass, + moduleName, className, funcName, paramName + }); + if (!Array.isArray(value)) { + throw error; + } + + for (let item of value) { + if (!(item instanceof expectedClass)) { + throw error; + } + } + }; + + const finalAssertExports = { + hasMethod, + isArray, + isInstance, + isOneOf, + isSwEnv, + isType, + isArrayOfClass + }; + + /** + * Runs all of the callback functions, one at a time sequentially, in the order + * in which they were registered. + * + * @memberof workbox.core + * @private + */ + let executeQuotaErrorCallbacks = (() => { + var _ref = babelHelpers.asyncToGenerator(function* () { + { + defaultExport.log(`About to run ${callbacks.size} callbacks to clean up caches.`); + } + + for (const callback of callbacks) { + yield callback(); + { + defaultExport.log(callback, 'is complete.'); + } + } + + { + defaultExport.log('Finished running callbacks.'); + } + }); + + return function executeQuotaErrorCallbacks() { + return _ref.apply(this, arguments); + }; + })(); + + const callbacks = new Set(); + + /** + * Adds a function to the set of callbacks that will be executed when there's + * a quota error. + * + * @param {Function} callback + * @memberof workbox.core + */ + function registerQuotaErrorCallback(callback) { + { + finalAssertExports.isType(callback, 'function', { + moduleName: 'workbox-core', + funcName: 'register', + paramName: 'callback' + }); + } + + callbacks.add(callback); + + { + defaultExport.log('Registered a callback to respond to quota errors.', callback); + } + } + + /* + Copyright 2017 Google Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + https://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + + /** + * A class that wraps common IndexedDB functionality in a promise-based API. + * It exposes all the underlying power and functionality of IndexedDB, but + * wraps the most commonly used features in a way that's much simpler to use. + * + * @private + */ + class DBWrapper { + /** + * @param {string} name + * @param {number} version + * @param {Object=} [callback] + * @param {function(this:DBWrapper, Event)} [callbacks.onupgradeneeded] + * @param {function(this:DBWrapper, Event)} [callbacks.onversionchange] + * Defaults to DBWrapper.prototype._onversionchange when not specified. + */ + constructor(name, version, { + onupgradeneeded, + onversionchange = this._onversionchange + } = {}) { + this._name = name; + this._version = version; + this._onupgradeneeded = onupgradeneeded; + this._onversionchange = onversionchange; + + // If this is null, it means the database isn't open. + this._db = null; + } + + /** + * Opens a connected to an IDBDatabase, invokes any onupgradedneeded + * callback, and added an onversionchange callback to the database. + * + * @return {IDBDatabase} + * + * @private + */ + open() { + var _this = this; + + return babelHelpers.asyncToGenerator(function* () { + if (_this._db) return; + + _this._db = yield new Promise(function (resolve, reject) { + // This flag is flipped to true if the timeout callback runs prior + // to the request failing or succeeding. Note: we use a timeout instead + // of an onblocked handler since there are cases where onblocked will + // never never run. A timeout better handles all possible scenarios: + // https://github.com/w3c/IndexedDB/issues/223 + let openRequestTimedOut = false; + setTimeout(function () { + openRequestTimedOut = true; + reject(new Error('The open request was blocked and timed out')); + }, _this.OPEN_TIMEOUT); + + const openRequest = indexedDB.open(_this._name, _this._version); + openRequest.onerror = function (evt) { + return reject(openRequest.error); + }; + openRequest.onupgradeneeded = function (evt) { + if (openRequestTimedOut) { + openRequest.transaction.abort(); + evt.target.result.close(); + } else if (_this._onupgradeneeded) { + _this._onupgradeneeded(evt); + } + }; + openRequest.onsuccess = function (evt) { + const db = evt.target.result; + if (openRequestTimedOut) { + db.close(); + } else { + db.onversionchange = _this._onversionchange; + resolve(db); + } + }; + }); + + return _this; + })(); + } + + /** + * Delegates to the native `get()` method for the object store. + * + * @param {string} storeName The name of the object store to put the value. + * @param {...*} args The values passed to the delegated method. + * @return {*} The key of the entry. + * + * @private + */ + get(storeName, ...args) { + var _this2 = this; + + return babelHelpers.asyncToGenerator(function* () { + return yield _this2._call('get', storeName, 'readonly', ...args); + })(); + } + + /** + * Delegates to the native `add()` method for the object store. + * + * @param {string} storeName The name of the object store to put the value. + * @param {...*} args The values passed to the delegated method. + * @return {*} The key of the entry. + * + * @private + */ + add(storeName, ...args) { + var _this3 = this; + + return babelHelpers.asyncToGenerator(function* () { + return yield _this3._call('add', storeName, 'readwrite', ...args); + })(); + } + + /** + * Delegates to the native `put()` method for the object store. + * + * @param {string} storeName The name of the object store to put the value. + * @param {...*} args The values passed to the delegated method. + * @return {*} The key of the entry. + * + * @private + */ + put(storeName, ...args) { + var _this4 = this; + + return babelHelpers.asyncToGenerator(function* () { + return yield _this4._call('put', storeName, 'readwrite', ...args); + })(); + } + + /** + * Delegates to the native `delete()` method for the object store. + * + * @param {string} storeName + * @param {...*} args The values passed to the delegated method. + * + * @private + */ + delete(storeName, ...args) { + var _this5 = this; + + return babelHelpers.asyncToGenerator(function* () { + yield _this5._call('delete', storeName, 'readwrite', ...args); + })(); + } + + /** + * Deletes the underlying database, ensuring that any open connections are + * closed first. + * + * @private + */ + deleteDatabase() { + var _this6 = this; + + return babelHelpers.asyncToGenerator(function* () { + _this6.close(); + _this6._db = null; + yield new Promise(function (resolve, reject) { + const request = indexedDB.deleteDatabase(_this6._name); + request.onerror = function (evt) { + return reject(evt.target.error); + }; + request.onblocked = function () { + return reject(new Error('Deletion was blocked.')); + }; + request.onsuccess = function () { + return resolve(); + }; + }); + })(); + } + + /** + * Delegates to the native `getAll()` or polyfills it via the `find()` + * method in older browsers. + * + * @param {string} storeName + * @param {*} query + * @param {number} count + * @return {Array} + * + * @private + */ + getAll(storeName, query, count) { + var _this7 = this; + + return babelHelpers.asyncToGenerator(function* () { + if ('getAll' in IDBObjectStore.prototype) { + return yield _this7._call('getAll', storeName, 'readonly', query, count); + } else { + return yield _this7.getAllMatching(storeName, { query, count }); + } + })(); + } + + /** + * Supports flexible lookup in an object store by specifying an index, + * query, direction, and count. This method returns an array of objects + * with the signature . + * + * @param {string} storeName + * @param {Object} [opts] + * @param {IDBCursorDirection} [opts.direction] + * @param {*} [opts.query] + * @param {string} [opts.index] The index to use (if specified). + * @param {number} [opts.count] The max number of results to return. + * @param {boolean} [opts.includeKeys] When true, the structure of the + * returned objects is changed from an array of values to an array of + * objects in the form {key, primaryKey, value}. + * @return {Array} + * + * @private + */ + getAllMatching(storeName, opts = {}) { + var _this8 = this; + + return babelHelpers.asyncToGenerator(function* () { + return yield _this8.transaction([storeName], 'readonly', function (stores, done) { + const store = stores[storeName]; + const target = opts.index ? store.index(opts.index) : store; + const results = []; + + // Passing `undefined` arguments to Edge's `openCursor(...)` causes + // 'DOMException: DataError' + // Details in issue: https://github.com/GoogleChrome/workbox/issues/1509 + const query = opts.query || null; + const direction = opts.direction || 'next'; + target.openCursor(query, direction).onsuccess = function (evt) { + const cursor = evt.target.result; + if (cursor) { + const { primaryKey, key, value } = cursor; + results.push(opts.includeKeys ? { primaryKey, key, value } : value); + if (opts.count && results.length >= opts.count) { + done(results); + } else { + cursor.continue(); + } + } else { + done(results); + } + }; + }); + })(); + } + + /** + * Accepts a list of stores, a transaction type, and a callback and + * performs a transaction. A promise is returned that resolves to whatever + * value the callback chooses. The callback holds all the transaction logic + * and is invoked with three arguments: + * 1. An object mapping object store names to IDBObjectStore values. + * 2. A `done` function, that's used to resolve the promise when + * when the transaction is done. + * 3. An `abort` function that can be called to abort the transaction + * at any time. + * + * @param {Array} storeNames An array of object store names + * involved in the transaction. + * @param {string} type Can be `readonly` or `readwrite`. + * @param {function(Object, function(), function(*)):?IDBRequest} callback + * @return {*} The result of the transaction ran by the callback. + * + * @private + */ + transaction(storeNames, type, callback) { + var _this9 = this; + + return babelHelpers.asyncToGenerator(function* () { + yield _this9.open(); + const result = yield new Promise(function (resolve, reject) { + const txn = _this9._db.transaction(storeNames, type); + const done = function (value) { + return resolve(value); + }; + const abort = function () { + reject(new Error('The transaction was manually aborted')); + txn.abort(); + }; + txn.onerror = function (evt) { + return reject(evt.target.error); + }; + txn.onabort = function (evt) { + return reject(evt.target.error); + }; + txn.oncomplete = function () { + return resolve(); + }; + + const stores = {}; + for (const storeName of storeNames) { + stores[storeName] = txn.objectStore(storeName); + } + callback(stores, done, abort); + }); + return result; + })(); + } + + /** + * Delegates async to a native IDBObjectStore method. + * + * @param {string} method The method name. + * @param {string} storeName The object store name. + * @param {string} type Can be `readonly` or `readwrite`. + * @param {...*} args The list of args to pass to the native method. + * @return {*} The result of the transaction. + * + * @private + */ + _call(method, storeName, type, ...args) { + var _this10 = this; + + return babelHelpers.asyncToGenerator(function* () { + yield _this10.open(); + const callback = function (stores, done) { + stores[storeName][method](...args).onsuccess = function (evt) { + done(evt.target.result); + }; + }; + + return yield _this10.transaction([storeName], type, callback); + })(); + } + + /** + * The default onversionchange handler, which closes the database so other + * connections can open without being blocked. + * + * @param {Event} evt + * + * @private + */ + _onversionchange(evt) { + this.close(); + } + + /** + * Closes the connection opened by `DBWrapper.open()`. Generally this method + * doesn't need to be called since: + * 1. It's usually better to keep a connection open since opening + * a new connection is somewhat slow. + * 2. Connections are automatically closed when the reference is + * garbage collected. + * The primary use case for needing to close a connection is when another + * reference (typically in another tab) needs to upgrade it and would be + * blocked by the current, open connection. + * + * @private + */ + close() { + if (this._db) this._db.close(); + } + } + + // Exposed to let users modify the default timeout on a per-instance + // or global basis. + DBWrapper.prototype.OPEN_TIMEOUT = 2000; + + /* + Copyright 2017 Google Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + https://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + + const _cacheNameDetails = { + prefix: 'workbox', + suffix: self.registration.scope, + googleAnalytics: 'googleAnalytics', + precache: 'precache', + runtime: 'runtime' + }; + + const _createCacheName = cacheName => { + return [_cacheNameDetails.prefix, cacheName, _cacheNameDetails.suffix].filter(value => value.length > 0).join('-'); + }; + + const cacheNames = { + updateDetails: details => { + Object.keys(_cacheNameDetails).forEach(key => { + if (typeof details[key] !== 'undefined') { + _cacheNameDetails[key] = details[key]; + } + }); + }, + getGoogleAnalyticsName: userCacheName => { + return userCacheName || _createCacheName(_cacheNameDetails.googleAnalytics); + }, + getPrecacheName: userCacheName => { + return userCacheName || _createCacheName(_cacheNameDetails.precache); + }, + getRuntimeName: userCacheName => { + return userCacheName || _createCacheName(_cacheNameDetails.runtime); + } + }; + + /* + Copyright 2017 Google Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + https://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + + var pluginEvents = { + CACHE_DID_UPDATE: 'cacheDidUpdate', + CACHE_WILL_UPDATE: 'cacheWillUpdate', + CACHED_RESPONSE_WILL_BE_USED: 'cachedResponseWillBeUsed', + FETCH_DID_FAIL: 'fetchDidFail', + REQUEST_WILL_FETCH: 'requestWillFetch' + }; + + /* + Copyright 2017 Google Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + https://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + + var pluginUtils = { + filter: (plugins, callbackname) => { + return plugins.filter(plugin => callbackname in plugin); + } + }; + + /* + Copyright 2017 Google Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + https://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + + const getFriendlyURL = url => { + const urlObj = new URL(url, location); + if (urlObj.origin === location.origin) { + return urlObj.pathname; + } + return urlObj.href; + }; + + /* + Copyright 2017 Google Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + https://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + + /** + * Wrapper around cache.put(). + * + * Will call `cacheDidUpdate` on plugins if the cache was updated. + * + * @param {Object} options + * @param {string} options.cacheName + * @param {Request} options.request + * @param {Response} options.response + * @param {Event} [options.event] + * @param {Array} [options.plugins=[]] + * + * @private + * @memberof module:workbox-core + */ + const putWrapper = (() => { + var _ref = babelHelpers.asyncToGenerator(function* ({ + cacheName, + request, + response, + event, + plugins = [] + } = {}) { + if (!response) { + { + defaultExport.error(`Cannot cache non-existent response for ` + `'${getFriendlyURL(request.url)}'.`); + } + + throw new WorkboxError('cache-put-with-no-response', { + url: getFriendlyURL(request.url) + }); + } + + let responseToCache = yield _isResponseSafeToCache({ request, response, event, plugins }); + + if (!responseToCache) { + { + defaultExport.debug(`Response '${getFriendlyURL(request.url)}' will not be ` + `cached.`, responseToCache); + } + return; + } + + { + if (responseToCache.method && responseToCache.method !== 'GET') { + throw new WorkboxError('attempt-to-cache-non-get-request', { + url: getFriendlyURL(request.url), + method: responseToCache.method + }); + } + } + + const cache = yield caches.open(cacheName); + + const updatePlugins = pluginUtils.filter(plugins, pluginEvents.CACHE_DID_UPDATE); + + let oldResponse = updatePlugins.length > 0 ? yield matchWrapper({ cacheName, request }) : null; + + { + defaultExport.debug(`Updating the '${cacheName}' cache with a new Response for ` + `${getFriendlyURL(request.url)}.`); + } + + try { + yield cache.put(request, responseToCache); + } catch (error) { + // See https://developer.mozilla.org/en-US/docs/Web/API/DOMException#exception-QuotaExceededError + if (error.name === 'QuotaExceededError') { + yield executeQuotaErrorCallbacks(); + } + throw error; + } + + for (let plugin of updatePlugins) { + yield plugin[pluginEvents.CACHE_DID_UPDATE].call(plugin, { + cacheName, + request, + event, + oldResponse, + newResponse: responseToCache + }); + } + }); + + return function putWrapper() { + return _ref.apply(this, arguments); + }; + })(); + + /** + * This is a wrapper around cache.match(). + * + * @param {Object} options + * @param {string} options.cacheName Name of the cache to match against. + * @param {Request} options.request The Request that will be used to look up + *. cache entries. + * @param {Event} [options.event] The event that propted the action. + * @param {Object} [options.matchOptions] Options passed to cache.match(). + * @param {Array} [options.plugins=[]] Array of plugins. + * @return {Response} A cached response if available. + * + * @private + * @memberof module:workbox-core + */ + const matchWrapper = (() => { + var _ref2 = babelHelpers.asyncToGenerator(function* ({ + cacheName, + request, + event, + matchOptions, + plugins = [] }) { + const cache = yield caches.open(cacheName); + let cachedResponse = yield cache.match(request, matchOptions); + { + if (cachedResponse) { + defaultExport.debug(`Found a cached response in '${cacheName}'.`); + } else { + defaultExport.debug(`No cached response found in '${cacheName}'.`); + } + } + for (let plugin of plugins) { + if (pluginEvents.CACHED_RESPONSE_WILL_BE_USED in plugin) { + cachedResponse = yield plugin[pluginEvents.CACHED_RESPONSE_WILL_BE_USED].call(plugin, { + cacheName, + request, + event, + matchOptions, + cachedResponse + }); + { + if (cachedResponse) { + finalAssertExports.isInstance(cachedResponse, Response, { + moduleName: 'Plugin', + funcName: pluginEvents.CACHED_RESPONSE_WILL_BE_USED, + isReturnValueProblem: true + }); + } + } + } + } + return cachedResponse; + }); + + return function matchWrapper(_x) { + return _ref2.apply(this, arguments); + }; + })(); + + /** + * This method will call cacheWillUpdate on the available plugins (or use + * response.ok) to determine if the Response is safe and valid to cache. + * + * @param {Object} options + * @param {Request} options.request + * @param {Response} options.response + * @param {Event} [options.event] + * @param {Array} [options.plugins=[]] + * @return {Promise} + * + * @private + * @memberof module:workbox-core + */ + const _isResponseSafeToCache = (() => { + var _ref3 = babelHelpers.asyncToGenerator(function* ({ request, response, event, plugins }) { + let responseToCache = response; + let pluginsUsed = false; + for (let plugin of plugins) { + if (pluginEvents.CACHE_WILL_UPDATE in plugin) { + pluginsUsed = true; + responseToCache = yield plugin[pluginEvents.CACHE_WILL_UPDATE].call(plugin, { + request, + response: responseToCache, + event + }); + + { + if (responseToCache) { + finalAssertExports.isInstance(responseToCache, Response, { + moduleName: 'Plugin', + funcName: pluginEvents.CACHE_WILL_UPDATE, + isReturnValueProblem: true + }); + } + } + + if (!responseToCache) { + break; + } + } + } + + if (!pluginsUsed) { + { + if (!responseToCache.ok) { + if (responseToCache.status === 0) { + defaultExport.warn(`The response for '${request.url}' is an opaque ` + `response. The caching strategy that you're using will not ` + `cache opaque responses by default.`); + } else { + defaultExport.debug(`The response for '${request.url}' returned ` + `a status code of '${response.status}' and won't be cached as a ` + `result.`); + } + } + } + responseToCache = responseToCache.ok ? responseToCache : null; + } + + return responseToCache ? responseToCache : null; + }); + + return function _isResponseSafeToCache(_x2) { + return _ref3.apply(this, arguments); + }; + })(); + + const cacheWrapper = { + put: putWrapper, + match: matchWrapper + }; + + /* + Copyright 2017 Google Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + https://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + + /** + * Wrapper around the fetch API. + * + * Will call requestWillFetch on available plugins. + * + * @param {Object} options + * @param {Request|string} options.request + * @param {Object} [options.fetchOptions] + * @param {Event} [options.event] + * @param {Array} [options.plugins=[]] + * @return {Promise} + * + * @private + * @memberof module:workbox-core + */ + const wrappedFetch = (() => { + var _ref = babelHelpers.asyncToGenerator(function* ({ + request, + fetchOptions, + event, + plugins = [] }) { + // We *should* be able to call `await event.preloadResponse` even if it's + // undefined, but for some reason, doing so leads to errors in our Node unit + // tests. To work around that, explicitly check preloadResponse's value first. + if (event && event.preloadResponse) { + const possiblePreloadResponse = yield event.preloadResponse; + if (possiblePreloadResponse) { + { + defaultExport.log(`Using a preloaded navigation response for ` + `'${getFriendlyURL(request.url)}'`); + } + return possiblePreloadResponse; + } + } + + if (typeof request === 'string') { + request = new Request(request); + } + + { + finalAssertExports.isInstance(request, Request, { + paramName: request, + expectedClass: 'Request', + moduleName: 'workbox-core', + className: 'fetchWrapper', + funcName: 'wrappedFetch' + }); + } + + const failedFetchPlugins = pluginUtils.filter(plugins, pluginEvents.FETCH_DID_FAIL); + + // If there is a fetchDidFail plugin, we need to save a clone of the + // original request before it's either modified by a requestWillFetch + // plugin or before the original request's body is consumed via fetch(). + const originalRequest = failedFetchPlugins.length > 0 ? request.clone() : null; + + try { + for (let plugin of plugins) { + if (pluginEvents.REQUEST_WILL_FETCH in plugin) { + request = yield plugin[pluginEvents.REQUEST_WILL_FETCH].call(plugin, { + request: request.clone(), + event + }); + + { + if (request) { + finalAssertExports.isInstance(request, Request, { + moduleName: 'Plugin', + funcName: pluginEvents.CACHED_RESPONSE_WILL_BE_USED, + isReturnValueProblem: true + }); + } + } + } + } + } catch (err) { + throw new WorkboxError('plugin-error-request-will-fetch', { + thrownError: err + }); + } + + // The request can be altered by plugins with `requestWillFetch` making + // the original request (Most likely from a `fetch` event) to be different + // to the Request we make. Pass both to `fetchDidFail` to aid debugging. + const pluginFilteredRequest = request.clone(); + + try { + const fetchResponse = yield fetch(request, fetchOptions); + { + defaultExport.debug(`Network request for ` + `'${getFriendlyURL(request.url)}' returned a response with ` + `status '${fetchResponse.status}'.`); + } + return fetchResponse; + } catch (error) { + { + defaultExport.error(`Network request for ` + `'${getFriendlyURL(request.url)}' threw an error.`, error); + } + + for (let plugin of failedFetchPlugins) { + yield plugin[pluginEvents.FETCH_DID_FAIL].call(plugin, { + error, + event, + originalRequest: originalRequest.clone(), + request: pluginFilteredRequest.clone() + }); + } + + throw error; + } + }); + + return function wrappedFetch(_x) { + return _ref.apply(this, arguments); + }; + })(); + + const fetchWrapper = { + fetch: wrappedFetch + }; + + /* + Copyright 2017 Google Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + https://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + + var _private = /*#__PURE__*/Object.freeze({ + DBWrapper: DBWrapper, + WorkboxError: WorkboxError, + assert: finalAssertExports, + cacheNames: cacheNames, + cacheWrapper: cacheWrapper, + fetchWrapper: fetchWrapper, + getFriendlyURL: getFriendlyURL, + logger: defaultExport + }); + + /* + Copyright 2017 Google Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + https://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + + /** + * Logs a warning to the user recommending changing + * to max-age=0 or no-cache. + * + * @param {string} cacheControlHeader + * + * @private + */ + function showWarning(cacheControlHeader) { + const docsUrl = 'https://developers.google.com/web/tools/workbox/guides/service-worker-checklist#cache-control_of_your_service_worker_file'; + defaultExport.warn(`You are setting a 'cache-control' header of ` + `'${cacheControlHeader}' on your service worker file. This should be ` + `set to 'max-age=0' or 'no-cache' to ensure the latest service worker ` + `is served to your users. Learn more here: ${docsUrl}`); + } + + /** + * Checks for cache-control header on SW file and + * warns the developer if it exists with a value + * other than max-age=0 or no-cache. + * + * @return {Promise} + * @private + */ + function checkSWFileCacheHeaders() { + // This is wrapped as an iife to allow async/await while making + // rollup exclude it in builds. + return babelHelpers.asyncToGenerator(function* () { + try { + const swFile = self.location.href; + const response = yield fetch(swFile); + if (!response.ok) { + // Response failed so nothing we can check; + return; + } + + if (!response.headers.has('cache-control')) { + // No cache control header. + return; + } + + const cacheControlHeader = response.headers.get('cache-control'); + const maxAgeResult = /max-age\s*=\s*(\d*)/g.exec(cacheControlHeader); + if (maxAgeResult) { + if (parseInt(maxAgeResult[1], 10) === 0) { + return; + } + } + + if (cacheControlHeader.indexOf('no-cache') !== -1) { + return; + } + + if (cacheControlHeader.indexOf('no-store') !== -1) { + return; + } + + showWarning(cacheControlHeader); + } catch (err) { + // NOOP + } + })(); + } + + const finalCheckSWFileCacheHeaders = checkSWFileCacheHeaders; + + /* + Copyright 2017 Google Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + https://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + + /** + * This class is never exposed publicly. Inidividual methods are exposed + * using jsdoc alias commands. + * + * @memberof workbox.core + * @private + */ + class WorkboxCore { + /** + * You should not instantiate this object directly. + * + * @private + */ + constructor() { + // Give our version strings something to hang off of. + try { + self.workbox.v = self.workbox.v || {}; + } catch (err) {} + // NOOP + + + // A WorkboxCore instance must be exported before we can use the logger. + // This is so it can get the current log level. + { + const padding = ' '; + defaultExport.groupCollapsed('Welcome to Workbox!'); + defaultExport.unprefixed.log(`You are currently using a development build. ` + `By default this will switch to prod builds when not on localhost. ` + `You can force this with workbox.setConfig({debug: true|false}).`); + defaultExport.unprefixed.log(`📖 Read the guides and documentation\n` + `${padding}https://developers.google.com/web/tools/workbox/`); + defaultExport.unprefixed.log(`❓ Use the [workbox] tag on Stack Overflow to ask questions\n` + `${padding}https://stackoverflow.com/questions/ask?tags=workbox`); + defaultExport.unprefixed.log(`🐛 Found a bug? Report it on GitHub\n` + `${padding}https://github.com/GoogleChrome/workbox/issues/new`); + defaultExport.groupEnd(); + + if (typeof finalCheckSWFileCacheHeaders === 'function') { + finalCheckSWFileCacheHeaders(); + } + } + } + + /** + * Get the current cache names used by Workbox. + * + * `cacheNames.precache` is used for precached assets, + * `cacheNames.googleAnalytics` is used by `workbox-google-analytics` to + * store `analytics.js`, + * and `cacheNames.runtime` is used for everything else. + * + * @return {Object} An object with `precache` and `runtime` cache names. + * + * @alias workbox.core.cacheNames + */ + get cacheNames() { + return { + googleAnalytics: cacheNames.getGoogleAnalyticsName(), + precache: cacheNames.getPrecacheName(), + runtime: cacheNames.getRuntimeName() + }; + } + + /** + * You can alter the default cache names used by the Workbox modules by + * changing the cache name details. + * + * Cache names are generated as `--`. + * + * @param {Object} details + * @param {Object} details.prefix The string to add to the beginning of + * the precache and runtime cache names. + * @param {Object} details.suffix The string to add to the end of + * the precache and runtime cache names. + * @param {Object} details.precache The cache name to use for precache + * caching. + * @param {Object} details.runtime The cache name to use for runtime caching. + * @param {Object} details.googleAnalytics The cache name to use for + * `workbox-google-analytics` caching. + * + * @alias workbox.core.setCacheNameDetails + */ + setCacheNameDetails(details) { + { + Object.keys(details).forEach(key => { + finalAssertExports.isType(details[key], 'string', { + moduleName: 'workbox-core', + className: 'WorkboxCore', + funcName: 'setCacheNameDetails', + paramName: `details.${key}` + }); + }); + + if ('precache' in details && details.precache.length === 0) { + throw new WorkboxError('invalid-cache-name', { + cacheNameId: 'precache', + value: details.precache + }); + } + + if ('runtime' in details && details.runtime.length === 0) { + throw new WorkboxError('invalid-cache-name', { + cacheNameId: 'runtime', + value: details.runtime + }); + } + + if ('googleAnalytics' in details && details.googleAnalytics.length === 0) { + throw new WorkboxError('invalid-cache-name', { + cacheNameId: 'googleAnalytics', + value: details.googleAnalytics + }); + } + } + + cacheNames.updateDetails(details); + } + + /** + * Get the current log level. + * + * @return {number}. + * + * @alias workbox.core.logLevel + */ + get logLevel() { + return getLoggerLevel(); + } + + /** + * Set the current log level passing in one of the values from + * [LOG_LEVELS]{@link module:workbox-core.LOG_LEVELS}. + * + * @param {number} newLevel The new log level to use. + * + * @alias workbox.core.setLogLevel + */ + setLogLevel(newLevel) { + { + finalAssertExports.isType(newLevel, 'number', { + moduleName: 'workbox-core', + className: 'WorkboxCore', + funcName: 'logLevel [setter]', + paramName: `logLevel` + }); + } + + if (newLevel > LOG_LEVELS.silent || newLevel < LOG_LEVELS.debug) { + throw new WorkboxError('invalid-value', { + paramName: 'logLevel', + validValueDescription: `Please use a value from LOG_LEVELS, i.e ` + `'logLevel = workbox.core.LOG_LEVELS.debug'.`, + value: newLevel + }); + } + + setLoggerLevel(newLevel); + } + } + + var defaultExport$1 = new WorkboxCore(); + + /* + Copyright 2017 Google Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + https://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + + const finalExports = Object.assign(defaultExport$1, { + _private, + LOG_LEVELS, + registerQuotaErrorCallback + }); + + return finalExports; + +}()); + +//# sourceMappingURL=workbox-core.dev.js.map diff --git a/assets/js/workbox-v3.6.3/workbox-core.dev.js.map b/assets/js/workbox-v3.6.3/workbox-core.dev.js.map new file mode 100644 index 0000000..52f27fb --- /dev/null +++ b/assets/js/workbox-v3.6.3/workbox-core.dev.js.map @@ -0,0 +1 @@ +{"version":3,"names":[],"mappings":"","sources":["packages/workbox-core/browser.mjs"],"sourcesContent":["/* eslint-disable */\n// This is extracted from the Babel runtime (original source: https://github.com/babel/babel/blob/9e0f5235b1ca5167c368a576ad7c5af62d20b0e3/packages/babel-helpers/src/helpers.js#L240).\n// As part of the Rollup bundling process, it's injected once into workbox-core\n// and reused throughout all of the other modules, avoiding code duplication.\n// See https://github.com/GoogleChrome/workbox/pull/1048#issuecomment-344698046\n// for further background.\nself.babelHelpers = {\n asyncToGenerator: function(fn) {\n return function() {\n var gen = fn.apply(this, arguments);\n return new Promise(function(resolve, reject) {\n function step(key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n\n if (info.done) {\n resolve(value);\n } else {\n return Promise.resolve(value).then(function(value) {\n step('next', value);\n }, function(err) {\n step('throw', err);\n });\n }\n }\n\n return step('next');\n });\n };\n },\n};\n\nthis.workbox = this.workbox || {};\nthis.workbox.core = (function () {\n 'use strict';\n\n try {\n self.workbox.v['workbox:core:3.6.3'] = 1;\n } catch (e) {} // eslint-disable-line\n\n /*\n Copyright 2017 Google Inc.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n https://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n */\n\n /**\n * The available log levels in Workbox: debug, log, warn, error and silent.\n *\n * @property {int} debug Prints all logs from Workbox. Useful for debugging.\n * @property {int} log Prints console log, warn, error and groups. Default for\n * debug builds.\n * @property {int} warn Prints console warn, error and groups. Default for\n * non-debug builds.\n * @property {int} error Print console error and groups.\n * @property {int} silent Force no logging from Workbox.\n *\n * @alias workbox.core.LOG_LEVELS\n */\n\n var LOG_LEVELS = {\n debug: 0,\n log: 1,\n warn: 2,\n error: 3,\n silent: 4\n };\n\n /*\n Copyright 2017 Google Inc.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n https://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n */\n\n // Safari doesn't print all console.groupCollapsed() arguments.\n // Related bug: https://bugs.webkit.org/show_bug.cgi?id=182754\n const isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\n\n const GREY = `#7f8c8d`;\n const GREEN = `#2ecc71`;\n const YELLOW = `#f39c12`;\n const RED = `#c0392b`;\n const BLUE = `#3498db`;\n\n const getDefaultLogLevel = () => LOG_LEVELS.log;\n\n let logLevel = getDefaultLogLevel();\n const shouldPrint = minLevel => logLevel <= minLevel;\n const setLoggerLevel = newLogLevel => logLevel = newLogLevel;\n const getLoggerLevel = () => logLevel;\n\n // We always want groups to be logged unless logLevel is silent.\n const groupLevel = LOG_LEVELS.error;\n\n const _print = function (keyName, logArgs, levelColor) {\n const logLevel = keyName.indexOf('group') === 0 ? groupLevel : LOG_LEVELS[keyName];\n if (!shouldPrint(logLevel)) {\n return;\n }\n\n if (!levelColor || keyName === 'groupCollapsed' && isSafari) {\n console[keyName](...logArgs);\n return;\n }\n\n const logPrefix = ['%cworkbox', `background: ${levelColor}; color: white; padding: 2px 0.5em; ` + `border-radius: 0.5em;`];\n console[keyName](...logPrefix, ...logArgs);\n };\n\n const groupEnd = () => {\n if (shouldPrint(groupLevel)) {\n console.groupEnd();\n }\n };\n\n const defaultExport = {\n groupEnd,\n unprefixed: {\n groupEnd\n }\n };\n\n const setupLogs = (keyName, color) => {\n defaultExport[keyName] = (...args) => _print(keyName, args, color);\n defaultExport.unprefixed[keyName] = (...args) => _print(keyName, args);\n };\n\n const levelToColor = {\n debug: GREY,\n log: GREEN,\n warn: YELLOW,\n error: RED,\n groupCollapsed: BLUE\n };\n Object.keys(levelToColor).forEach(keyName => setupLogs(keyName, levelToColor[keyName]));\n\n /*\n Copyright 2017 Google Inc.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n https://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n */\n\n var messages = {\n 'invalid-value': ({ paramName, validValueDescription, value }) => {\n if (!paramName || !validValueDescription) {\n throw new Error(`Unexpected input to 'invalid-value' error.`);\n }\n return `The '${paramName}' parameter was given a value with an ` + `unexpected value. ${validValueDescription} Received a value of ` + `${JSON.stringify(value)}.`;\n },\n\n 'not-in-sw': ({ moduleName }) => {\n if (!moduleName) {\n throw new Error(`Unexpected input to 'not-in-sw' error.`);\n }\n return `The '${moduleName}' must be used in a service worker.`;\n },\n\n 'not-an-array': ({ moduleName, className, funcName, paramName }) => {\n if (!moduleName || !className || !funcName || !paramName) {\n throw new Error(`Unexpected input to 'not-an-array' error.`);\n }\n return `The parameter '${paramName}' passed into ` + `'${moduleName}.${className}.${funcName}()' must be an array.`;\n },\n\n 'incorrect-type': ({ expectedType, paramName, moduleName, className,\n funcName }) => {\n if (!expectedType || !paramName || !moduleName || !funcName) {\n throw new Error(`Unexpected input to 'incorrect-type' error.`);\n }\n return `The parameter '${paramName}' passed into ` + `'${moduleName}.${className ? className + '.' : ''}` + `${funcName}()' must be of type ${expectedType}.`;\n },\n\n 'incorrect-class': ({ expectedClass, paramName, moduleName, className,\n funcName, isReturnValueProblem }) => {\n if (!expectedClass || !moduleName || !funcName) {\n throw new Error(`Unexpected input to 'incorrect-class' error.`);\n }\n\n if (isReturnValueProblem) {\n return `The return value from ` + `'${moduleName}.${className ? className + '.' : ''}${funcName}()' ` + `must be an instance of class ${expectedClass.name}.`;\n }\n\n return `The parameter '${paramName}' passed into ` + `'${moduleName}.${className ? className + '.' : ''}${funcName}()' ` + `must be an instance of class ${expectedClass.name}.`;\n },\n\n 'missing-a-method': ({ expectedMethod, paramName, moduleName, className,\n funcName }) => {\n if (!expectedMethod || !paramName || !moduleName || !className || !funcName) {\n throw new Error(`Unexpected input to 'missing-a-method' error.`);\n }\n return `${moduleName}.${className}.${funcName}() expected the ` + `'${paramName}' parameter to expose a '${expectedMethod}' method.`;\n },\n\n 'add-to-cache-list-unexpected-type': ({ entry }) => {\n return `An unexpected entry was passed to ` + `'workbox-precaching.PrecacheController.addToCacheList()' The entry ` + `'${JSON.stringify(entry)}' isn't supported. You must supply an array of ` + `strings with one or more characters, objects with a url property or ` + `Request objects.`;\n },\n\n 'add-to-cache-list-conflicting-entries': ({ firstEntry, secondEntry }) => {\n if (!firstEntry || !secondEntry) {\n throw new Error(`Unexpected input to ` + `'add-to-cache-list-duplicate-entries' error.`);\n }\n\n return `Two of the entries passed to ` + `'workbox-precaching.PrecacheController.addToCacheList()' had matching ` + `URLs but different revision details. This means workbox-precaching ` + `is unable to determine cache the asset correctly. Please remove one ` + `of the entries.`;\n },\n\n 'plugin-error-request-will-fetch': ({ thrownError }) => {\n if (!thrownError) {\n throw new Error(`Unexpected input to ` + `'plugin-error-request-will-fetch', error.`);\n }\n\n return `An error was thrown by a plugins 'requestWillFetch()' method. ` + `The thrown error message was: '${thrownError.message}'.`;\n },\n\n 'invalid-cache-name': ({ cacheNameId, value }) => {\n if (!cacheNameId) {\n throw new Error(`Expected a 'cacheNameId' for error 'invalid-cache-name'`);\n }\n\n return `You must provide a name containing at least one character for ` + `setCacheDeatils({${cacheNameId}: '...'}). Received a value of ` + `'${JSON.stringify(value)}'`;\n },\n\n 'unregister-route-but-not-found-with-method': ({ method }) => {\n if (!method) {\n throw new Error(`Unexpected input to ` + `'unregister-route-but-not-found-with-method' error.`);\n }\n\n return `The route you're trying to unregister was not previously ` + `registered for the method type '${method}'.`;\n },\n\n 'unregister-route-route-not-registered': () => {\n return `The route you're trying to unregister was not previously ` + `registered.`;\n },\n\n 'queue-replay-failed': ({ name, count }) => {\n return `${count} requests failed, while trying to replay Queue: ${name}.`;\n },\n\n 'duplicate-queue-name': ({ name }) => {\n return `The Queue name '${name}' is already being used. ` + `All instances of backgroundSync.Queue must be given unique names.`;\n },\n\n 'expired-test-without-max-age': ({ methodName, paramName }) => {\n return `The '${methodName}()' method can only be used when the ` + `'${paramName}' is used in the constructor.`;\n },\n\n 'unsupported-route-type': ({ moduleName, className, funcName, paramName }) => {\n return `The supplied '${paramName}' parameter was an unsupported type. ` + `Please check the docs for ${moduleName}.${className}.${funcName} for ` + `valid input types.`;\n },\n\n 'not-array-of-class': ({ value, expectedClass,\n moduleName, className, funcName, paramName }) => {\n return `The supplied '${paramName}' parameter must be an array of ` + `'${expectedClass}' objects. Received '${JSON.stringify(value)},'. ` + `Please check the call to ${moduleName}.${className}.${funcName}() ` + `to fix the issue.`;\n },\n\n 'max-entries-or-age-required': ({ moduleName, className, funcName }) => {\n return `You must define either config.maxEntries or config.maxAgeSeconds` + `in ${moduleName}.${className}.${funcName}`;\n },\n\n 'statuses-or-headers-required': ({ moduleName, className, funcName }) => {\n return `You must define either config.statuses or config.headers` + `in ${moduleName}.${className}.${funcName}`;\n },\n\n 'invalid-string': ({ moduleName, className, funcName, paramName }) => {\n if (!paramName || !moduleName || !className || !funcName) {\n throw new Error(`Unexpected input to 'invalid-string' error.`);\n }\n return `When using strings, the '${paramName}' parameter must start with ` + `'http' (for cross-origin matches) or '/' (for same-origin matches). ` + `Please see the docs for ${moduleName}.${className}.${funcName}() for ` + `more info.`;\n },\n 'channel-name-required': () => {\n return `You must provide a channelName to construct a ` + `BroadcastCacheUpdate instance.`;\n },\n 'invalid-responses-are-same-args': () => {\n return `The arguments passed into responsesAreSame() appear to be ` + `invalid. Please ensure valid Responses are used.`;\n },\n 'expire-custom-caches-only': () => {\n return `You must provide a 'cacheName' property when using the ` + `expiration plugin with a runtime caching strategy.`;\n },\n 'unit-must-be-bytes': ({ normalizedRangeHeader }) => {\n if (!normalizedRangeHeader) {\n throw new Error(`Unexpected input to 'unit-must-be-bytes' error.`);\n }\n return `The 'unit' portion of the Range header must be set to 'bytes'. ` + `The Range header provided was \"${normalizedRangeHeader}\"`;\n },\n 'single-range-only': ({ normalizedRangeHeader }) => {\n if (!normalizedRangeHeader) {\n throw new Error(`Unexpected input to 'single-range-only' error.`);\n }\n return `Multiple ranges are not supported. Please use a single start ` + `value, and optional end value. The Range header provided was ` + `\"${normalizedRangeHeader}\"`;\n },\n 'invalid-range-values': ({ normalizedRangeHeader }) => {\n if (!normalizedRangeHeader) {\n throw new Error(`Unexpected input to 'invalid-range-values' error.`);\n }\n return `The Range header is missing both start and end values. At least ` + `one of those values is needed. The Range header provided was ` + `\"${normalizedRangeHeader}\"`;\n },\n 'no-range-header': () => {\n return `No Range header was found in the Request provided.`;\n },\n 'range-not-satisfiable': ({ size, start, end }) => {\n return `The start (${start}) and end (${end}) values in the Range are ` + `not satisfiable by the cached response, which is ${size} bytes.`;\n },\n 'attempt-to-cache-non-get-request': ({ url, method }) => {\n return `Unable to cache '${url}' because it is a '${method}' request and ` + `only 'GET' requests can be cached.`;\n },\n 'cache-put-with-no-response': ({ url }) => {\n return `There was an attempt to cache '${url}' but the response was not ` + `defined.`;\n }\n };\n\n /*\n Copyright 2017 Google Inc.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n https://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n */\n\n const generatorFunction = (code, ...args) => {\n const message = messages[code];\n if (!message) {\n throw new Error(`Unable to find message for code '${code}'.`);\n }\n\n return message(...args);\n };\n\n const exportedValue = generatorFunction;\n\n /*\n Copyright 2017 Google Inc.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n https://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n */\n\n /**\n * Workbox errors should be thrown with this class.\n * This allows use to ensure the type easily in tests,\n * helps developers identify errors from workbox\n * easily and allows use to optimise error\n * messages correctly.\n *\n * @private\n */\n class WorkboxError extends Error {\n /**\n *\n * @param {string} errorCode The error code that\n * identifies this particular error.\n * @param {Object=} details Any relevant arguments\n * that will help developers identify issues should\n * be added as a key on the context object.\n */\n constructor(errorCode, details) {\n let message = exportedValue(errorCode, details);\n\n super(message);\n\n this.name = errorCode;\n this.details = details;\n }\n }\n\n /*\n Copyright 2017 Google Inc.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n https://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n */\n\n /*\n * This method returns true if the current context is a service worker.\n */\n const isSwEnv = moduleName => {\n if (!('ServiceWorkerGlobalScope' in self)) {\n throw new WorkboxError('not-in-sw', { moduleName });\n }\n };\n\n /*\n * This method throws if the supplied value is not an array.\n * The destructed values are required to produce a meaningful error for users.\n * The destructed and restructured object is so it's clear what is\n * needed.\n */\n const isArray = (value, { moduleName, className, funcName, paramName }) => {\n if (!Array.isArray(value)) {\n throw new WorkboxError('not-an-array', {\n moduleName,\n className,\n funcName,\n paramName\n });\n }\n };\n\n const hasMethod = (object, expectedMethod, { moduleName, className, funcName, paramName }) => {\n const type = typeof object[expectedMethod];\n if (type !== 'function') {\n throw new WorkboxError('missing-a-method', { paramName, expectedMethod,\n moduleName, className, funcName });\n }\n };\n\n const isType = (object, expectedType, { moduleName, className, funcName, paramName }) => {\n if (typeof object !== expectedType) {\n throw new WorkboxError('incorrect-type', { paramName, expectedType,\n moduleName, className, funcName });\n }\n };\n\n const isInstance = (object, expectedClass, { moduleName, className, funcName,\n paramName, isReturnValueProblem }) => {\n if (!(object instanceof expectedClass)) {\n throw new WorkboxError('incorrect-class', { paramName, expectedClass,\n moduleName, className, funcName, isReturnValueProblem });\n }\n };\n\n const isOneOf = (value, validValues, { paramName }) => {\n if (!validValues.includes(value)) {\n throw new WorkboxError('invalid-value', {\n paramName,\n value,\n validValueDescription: `Valid values are ${JSON.stringify(validValues)}.`\n });\n }\n };\n\n const isArrayOfClass = (value, expectedClass, { moduleName, className, funcName, paramName }) => {\n const error = new WorkboxError('not-array-of-class', {\n value, expectedClass,\n moduleName, className, funcName, paramName\n });\n if (!Array.isArray(value)) {\n throw error;\n }\n\n for (let item of value) {\n if (!(item instanceof expectedClass)) {\n throw error;\n }\n }\n };\n\n const finalAssertExports = {\n hasMethod,\n isArray,\n isInstance,\n isOneOf,\n isSwEnv,\n isType,\n isArrayOfClass\n };\n\n /**\n * Runs all of the callback functions, one at a time sequentially, in the order\n * in which they were registered.\n *\n * @memberof workbox.core\n * @private\n */\n let executeQuotaErrorCallbacks = (() => {\n var _ref = babelHelpers.asyncToGenerator(function* () {\n {\n defaultExport.log(`About to run ${callbacks.size} callbacks to clean up caches.`);\n }\n\n for (const callback of callbacks) {\n yield callback();\n {\n defaultExport.log(callback, 'is complete.');\n }\n }\n\n {\n defaultExport.log('Finished running callbacks.');\n }\n });\n\n return function executeQuotaErrorCallbacks() {\n return _ref.apply(this, arguments);\n };\n })();\n\n const callbacks = new Set();\n\n /**\n * Adds a function to the set of callbacks that will be executed when there's\n * a quota error.\n *\n * @param {Function} callback\n * @memberof workbox.core\n */\n function registerQuotaErrorCallback(callback) {\n {\n finalAssertExports.isType(callback, 'function', {\n moduleName: 'workbox-core',\n funcName: 'register',\n paramName: 'callback'\n });\n }\n\n callbacks.add(callback);\n\n {\n defaultExport.log('Registered a callback to respond to quota errors.', callback);\n }\n }\n\n /*\n Copyright 2017 Google Inc.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n https://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n */\n\n /**\n * A class that wraps common IndexedDB functionality in a promise-based API.\n * It exposes all the underlying power and functionality of IndexedDB, but\n * wraps the most commonly used features in a way that's much simpler to use.\n *\n * @private\n */\n class DBWrapper {\n /**\n * @param {string} name\n * @param {number} version\n * @param {Object=} [callback]\n * @param {function(this:DBWrapper, Event)} [callbacks.onupgradeneeded]\n * @param {function(this:DBWrapper, Event)} [callbacks.onversionchange]\n * Defaults to DBWrapper.prototype._onversionchange when not specified.\n */\n constructor(name, version, {\n onupgradeneeded,\n onversionchange = this._onversionchange\n } = {}) {\n this._name = name;\n this._version = version;\n this._onupgradeneeded = onupgradeneeded;\n this._onversionchange = onversionchange;\n\n // If this is null, it means the database isn't open.\n this._db = null;\n }\n\n /**\n * Opens a connected to an IDBDatabase, invokes any onupgradedneeded\n * callback, and added an onversionchange callback to the database.\n *\n * @return {IDBDatabase}\n *\n * @private\n */\n open() {\n var _this = this;\n\n return babelHelpers.asyncToGenerator(function* () {\n if (_this._db) return;\n\n _this._db = yield new Promise(function (resolve, reject) {\n // This flag is flipped to true if the timeout callback runs prior\n // to the request failing or succeeding. Note: we use a timeout instead\n // of an onblocked handler since there are cases where onblocked will\n // never never run. A timeout better handles all possible scenarios:\n // https://github.com/w3c/IndexedDB/issues/223\n let openRequestTimedOut = false;\n setTimeout(function () {\n openRequestTimedOut = true;\n reject(new Error('The open request was blocked and timed out'));\n }, _this.OPEN_TIMEOUT);\n\n const openRequest = indexedDB.open(_this._name, _this._version);\n openRequest.onerror = function (evt) {\n return reject(openRequest.error);\n };\n openRequest.onupgradeneeded = function (evt) {\n if (openRequestTimedOut) {\n openRequest.transaction.abort();\n evt.target.result.close();\n } else if (_this._onupgradeneeded) {\n _this._onupgradeneeded(evt);\n }\n };\n openRequest.onsuccess = function (evt) {\n const db = evt.target.result;\n if (openRequestTimedOut) {\n db.close();\n } else {\n db.onversionchange = _this._onversionchange;\n resolve(db);\n }\n };\n });\n\n return _this;\n })();\n }\n\n /**\n * Delegates to the native `get()` method for the object store.\n *\n * @param {string} storeName The name of the object store to put the value.\n * @param {...*} args The values passed to the delegated method.\n * @return {*} The key of the entry.\n *\n * @private\n */\n get(storeName, ...args) {\n var _this2 = this;\n\n return babelHelpers.asyncToGenerator(function* () {\n return yield _this2._call('get', storeName, 'readonly', ...args);\n })();\n }\n\n /**\n * Delegates to the native `add()` method for the object store.\n *\n * @param {string} storeName The name of the object store to put the value.\n * @param {...*} args The values passed to the delegated method.\n * @return {*} The key of the entry.\n *\n * @private\n */\n add(storeName, ...args) {\n var _this3 = this;\n\n return babelHelpers.asyncToGenerator(function* () {\n return yield _this3._call('add', storeName, 'readwrite', ...args);\n })();\n }\n\n /**\n * Delegates to the native `put()` method for the object store.\n *\n * @param {string} storeName The name of the object store to put the value.\n * @param {...*} args The values passed to the delegated method.\n * @return {*} The key of the entry.\n *\n * @private\n */\n put(storeName, ...args) {\n var _this4 = this;\n\n return babelHelpers.asyncToGenerator(function* () {\n return yield _this4._call('put', storeName, 'readwrite', ...args);\n })();\n }\n\n /**\n * Delegates to the native `delete()` method for the object store.\n *\n * @param {string} storeName\n * @param {...*} args The values passed to the delegated method.\n *\n * @private\n */\n delete(storeName, ...args) {\n var _this5 = this;\n\n return babelHelpers.asyncToGenerator(function* () {\n yield _this5._call('delete', storeName, 'readwrite', ...args);\n })();\n }\n\n /**\n * Deletes the underlying database, ensuring that any open connections are\n * closed first.\n *\n * @private\n */\n deleteDatabase() {\n var _this6 = this;\n\n return babelHelpers.asyncToGenerator(function* () {\n _this6.close();\n _this6._db = null;\n yield new Promise(function (resolve, reject) {\n const request = indexedDB.deleteDatabase(_this6._name);\n request.onerror = function (evt) {\n return reject(evt.target.error);\n };\n request.onblocked = function () {\n return reject(new Error('Deletion was blocked.'));\n };\n request.onsuccess = function () {\n return resolve();\n };\n });\n })();\n }\n\n /**\n * Delegates to the native `getAll()` or polyfills it via the `find()`\n * method in older browsers.\n *\n * @param {string} storeName\n * @param {*} query\n * @param {number} count\n * @return {Array}\n *\n * @private\n */\n getAll(storeName, query, count) {\n var _this7 = this;\n\n return babelHelpers.asyncToGenerator(function* () {\n if ('getAll' in IDBObjectStore.prototype) {\n return yield _this7._call('getAll', storeName, 'readonly', query, count);\n } else {\n return yield _this7.getAllMatching(storeName, { query, count });\n }\n })();\n }\n\n /**\n * Supports flexible lookup in an object store by specifying an index,\n * query, direction, and count. This method returns an array of objects\n * with the signature .\n *\n * @param {string} storeName\n * @param {Object} [opts]\n * @param {IDBCursorDirection} [opts.direction]\n * @param {*} [opts.query]\n * @param {string} [opts.index] The index to use (if specified).\n * @param {number} [opts.count] The max number of results to return.\n * @param {boolean} [opts.includeKeys] When true, the structure of the\n * returned objects is changed from an array of values to an array of\n * objects in the form {key, primaryKey, value}.\n * @return {Array}\n *\n * @private\n */\n getAllMatching(storeName, opts = {}) {\n var _this8 = this;\n\n return babelHelpers.asyncToGenerator(function* () {\n return yield _this8.transaction([storeName], 'readonly', function (stores, done) {\n const store = stores[storeName];\n const target = opts.index ? store.index(opts.index) : store;\n const results = [];\n\n // Passing `undefined` arguments to Edge's `openCursor(...)` causes\n // 'DOMException: DataError'\n // Details in issue: https://github.com/GoogleChrome/workbox/issues/1509\n const query = opts.query || null;\n const direction = opts.direction || 'next';\n target.openCursor(query, direction).onsuccess = function (evt) {\n const cursor = evt.target.result;\n if (cursor) {\n const { primaryKey, key, value } = cursor;\n results.push(opts.includeKeys ? { primaryKey, key, value } : value);\n if (opts.count && results.length >= opts.count) {\n done(results);\n } else {\n cursor.continue();\n }\n } else {\n done(results);\n }\n };\n });\n })();\n }\n\n /**\n * Accepts a list of stores, a transaction type, and a callback and\n * performs a transaction. A promise is returned that resolves to whatever\n * value the callback chooses. The callback holds all the transaction logic\n * and is invoked with three arguments:\n * 1. An object mapping object store names to IDBObjectStore values.\n * 2. A `done` function, that's used to resolve the promise when\n * when the transaction is done.\n * 3. An `abort` function that can be called to abort the transaction\n * at any time.\n *\n * @param {Array} storeNames An array of object store names\n * involved in the transaction.\n * @param {string} type Can be `readonly` or `readwrite`.\n * @param {function(Object, function(), function(*)):?IDBRequest} callback\n * @return {*} The result of the transaction ran by the callback.\n *\n * @private\n */\n transaction(storeNames, type, callback) {\n var _this9 = this;\n\n return babelHelpers.asyncToGenerator(function* () {\n yield _this9.open();\n const result = yield new Promise(function (resolve, reject) {\n const txn = _this9._db.transaction(storeNames, type);\n const done = function (value) {\n return resolve(value);\n };\n const abort = function () {\n reject(new Error('The transaction was manually aborted'));\n txn.abort();\n };\n txn.onerror = function (evt) {\n return reject(evt.target.error);\n };\n txn.onabort = function (evt) {\n return reject(evt.target.error);\n };\n txn.oncomplete = function () {\n return resolve();\n };\n\n const stores = {};\n for (const storeName of storeNames) {\n stores[storeName] = txn.objectStore(storeName);\n }\n callback(stores, done, abort);\n });\n return result;\n })();\n }\n\n /**\n * Delegates async to a native IDBObjectStore method.\n *\n * @param {string} method The method name.\n * @param {string} storeName The object store name.\n * @param {string} type Can be `readonly` or `readwrite`.\n * @param {...*} args The list of args to pass to the native method.\n * @return {*} The result of the transaction.\n *\n * @private\n */\n _call(method, storeName, type, ...args) {\n var _this10 = this;\n\n return babelHelpers.asyncToGenerator(function* () {\n yield _this10.open();\n const callback = function (stores, done) {\n stores[storeName][method](...args).onsuccess = function (evt) {\n done(evt.target.result);\n };\n };\n\n return yield _this10.transaction([storeName], type, callback);\n })();\n }\n\n /**\n * The default onversionchange handler, which closes the database so other\n * connections can open without being blocked.\n *\n * @param {Event} evt\n *\n * @private\n */\n _onversionchange(evt) {\n this.close();\n }\n\n /**\n * Closes the connection opened by `DBWrapper.open()`. Generally this method\n * doesn't need to be called since:\n * 1. It's usually better to keep a connection open since opening\n * a new connection is somewhat slow.\n * 2. Connections are automatically closed when the reference is\n * garbage collected.\n * The primary use case for needing to close a connection is when another\n * reference (typically in another tab) needs to upgrade it and would be\n * blocked by the current, open connection.\n *\n * @private\n */\n close() {\n if (this._db) this._db.close();\n }\n }\n\n // Exposed to let users modify the default timeout on a per-instance\n // or global basis.\n DBWrapper.prototype.OPEN_TIMEOUT = 2000;\n\n /*\n Copyright 2017 Google Inc.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n https://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n */\n\n const _cacheNameDetails = {\n prefix: 'workbox',\n suffix: self.registration.scope,\n googleAnalytics: 'googleAnalytics',\n precache: 'precache',\n runtime: 'runtime'\n };\n\n const _createCacheName = cacheName => {\n return [_cacheNameDetails.prefix, cacheName, _cacheNameDetails.suffix].filter(value => value.length > 0).join('-');\n };\n\n const cacheNames = {\n updateDetails: details => {\n Object.keys(_cacheNameDetails).forEach(key => {\n if (typeof details[key] !== 'undefined') {\n _cacheNameDetails[key] = details[key];\n }\n });\n },\n getGoogleAnalyticsName: userCacheName => {\n return userCacheName || _createCacheName(_cacheNameDetails.googleAnalytics);\n },\n getPrecacheName: userCacheName => {\n return userCacheName || _createCacheName(_cacheNameDetails.precache);\n },\n getRuntimeName: userCacheName => {\n return userCacheName || _createCacheName(_cacheNameDetails.runtime);\n }\n };\n\n /*\n Copyright 2017 Google Inc.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n https://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n */\n\n var pluginEvents = {\n CACHE_DID_UPDATE: 'cacheDidUpdate',\n CACHE_WILL_UPDATE: 'cacheWillUpdate',\n CACHED_RESPONSE_WILL_BE_USED: 'cachedResponseWillBeUsed',\n FETCH_DID_FAIL: 'fetchDidFail',\n REQUEST_WILL_FETCH: 'requestWillFetch'\n };\n\n /*\n Copyright 2017 Google Inc.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n https://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n */\n\n var pluginUtils = {\n filter: (plugins, callbackname) => {\n return plugins.filter(plugin => callbackname in plugin);\n }\n };\n\n /*\n Copyright 2017 Google Inc.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n https://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n */\n\n const getFriendlyURL = url => {\n const urlObj = new URL(url, location);\n if (urlObj.origin === location.origin) {\n return urlObj.pathname;\n }\n return urlObj.href;\n };\n\n /*\n Copyright 2017 Google Inc.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n https://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n */\n\n /**\n * Wrapper around cache.put().\n *\n * Will call `cacheDidUpdate` on plugins if the cache was updated.\n *\n * @param {Object} options\n * @param {string} options.cacheName\n * @param {Request} options.request\n * @param {Response} options.response\n * @param {Event} [options.event]\n * @param {Array} [options.plugins=[]]\n *\n * @private\n * @memberof module:workbox-core\n */\n const putWrapper = (() => {\n var _ref = babelHelpers.asyncToGenerator(function* ({\n cacheName,\n request,\n response,\n event,\n plugins = []\n } = {}) {\n if (!response) {\n {\n defaultExport.error(`Cannot cache non-existent response for ` + `'${getFriendlyURL(request.url)}'.`);\n }\n\n throw new WorkboxError('cache-put-with-no-response', {\n url: getFriendlyURL(request.url)\n });\n }\n\n let responseToCache = yield _isResponseSafeToCache({ request, response, event, plugins });\n\n if (!responseToCache) {\n {\n defaultExport.debug(`Response '${getFriendlyURL(request.url)}' will not be ` + `cached.`, responseToCache);\n }\n return;\n }\n\n {\n if (responseToCache.method && responseToCache.method !== 'GET') {\n throw new WorkboxError('attempt-to-cache-non-get-request', {\n url: getFriendlyURL(request.url),\n method: responseToCache.method\n });\n }\n }\n\n const cache = yield caches.open(cacheName);\n\n const updatePlugins = pluginUtils.filter(plugins, pluginEvents.CACHE_DID_UPDATE);\n\n let oldResponse = updatePlugins.length > 0 ? yield matchWrapper({ cacheName, request }) : null;\n\n {\n defaultExport.debug(`Updating the '${cacheName}' cache with a new Response for ` + `${getFriendlyURL(request.url)}.`);\n }\n\n try {\n yield cache.put(request, responseToCache);\n } catch (error) {\n // See https://developer.mozilla.org/en-US/docs/Web/API/DOMException#exception-QuotaExceededError\n if (error.name === 'QuotaExceededError') {\n yield executeQuotaErrorCallbacks();\n }\n throw error;\n }\n\n for (let plugin of updatePlugins) {\n yield plugin[pluginEvents.CACHE_DID_UPDATE].call(plugin, {\n cacheName,\n request,\n event,\n oldResponse,\n newResponse: responseToCache\n });\n }\n });\n\n return function putWrapper() {\n return _ref.apply(this, arguments);\n };\n })();\n\n /**\n * This is a wrapper around cache.match().\n *\n * @param {Object} options\n * @param {string} options.cacheName Name of the cache to match against.\n * @param {Request} options.request The Request that will be used to look up\n *. cache entries.\n * @param {Event} [options.event] The event that propted the action.\n * @param {Object} [options.matchOptions] Options passed to cache.match().\n * @param {Array} [options.plugins=[]] Array of plugins.\n * @return {Response} A cached response if available.\n *\n * @private\n * @memberof module:workbox-core\n */\n const matchWrapper = (() => {\n var _ref2 = babelHelpers.asyncToGenerator(function* ({\n cacheName,\n request,\n event,\n matchOptions,\n plugins = [] }) {\n const cache = yield caches.open(cacheName);\n let cachedResponse = yield cache.match(request, matchOptions);\n {\n if (cachedResponse) {\n defaultExport.debug(`Found a cached response in '${cacheName}'.`);\n } else {\n defaultExport.debug(`No cached response found in '${cacheName}'.`);\n }\n }\n for (let plugin of plugins) {\n if (pluginEvents.CACHED_RESPONSE_WILL_BE_USED in plugin) {\n cachedResponse = yield plugin[pluginEvents.CACHED_RESPONSE_WILL_BE_USED].call(plugin, {\n cacheName,\n request,\n event,\n matchOptions,\n cachedResponse\n });\n {\n if (cachedResponse) {\n finalAssertExports.isInstance(cachedResponse, Response, {\n moduleName: 'Plugin',\n funcName: pluginEvents.CACHED_RESPONSE_WILL_BE_USED,\n isReturnValueProblem: true\n });\n }\n }\n }\n }\n return cachedResponse;\n });\n\n return function matchWrapper(_x) {\n return _ref2.apply(this, arguments);\n };\n })();\n\n /**\n * This method will call cacheWillUpdate on the available plugins (or use\n * response.ok) to determine if the Response is safe and valid to cache.\n *\n * @param {Object} options\n * @param {Request} options.request\n * @param {Response} options.response\n * @param {Event} [options.event]\n * @param {Array} [options.plugins=[]]\n * @return {Promise}\n *\n * @private\n * @memberof module:workbox-core\n */\n const _isResponseSafeToCache = (() => {\n var _ref3 = babelHelpers.asyncToGenerator(function* ({ request, response, event, plugins }) {\n let responseToCache = response;\n let pluginsUsed = false;\n for (let plugin of plugins) {\n if (pluginEvents.CACHE_WILL_UPDATE in plugin) {\n pluginsUsed = true;\n responseToCache = yield plugin[pluginEvents.CACHE_WILL_UPDATE].call(plugin, {\n request,\n response: responseToCache,\n event\n });\n\n {\n if (responseToCache) {\n finalAssertExports.isInstance(responseToCache, Response, {\n moduleName: 'Plugin',\n funcName: pluginEvents.CACHE_WILL_UPDATE,\n isReturnValueProblem: true\n });\n }\n }\n\n if (!responseToCache) {\n break;\n }\n }\n }\n\n if (!pluginsUsed) {\n {\n if (!responseToCache.ok) {\n if (responseToCache.status === 0) {\n defaultExport.warn(`The response for '${request.url}' is an opaque ` + `response. The caching strategy that you're using will not ` + `cache opaque responses by default.`);\n } else {\n defaultExport.debug(`The response for '${request.url}' returned ` + `a status code of '${response.status}' and won't be cached as a ` + `result.`);\n }\n }\n }\n responseToCache = responseToCache.ok ? responseToCache : null;\n }\n\n return responseToCache ? responseToCache : null;\n });\n\n return function _isResponseSafeToCache(_x2) {\n return _ref3.apply(this, arguments);\n };\n })();\n\n const cacheWrapper = {\n put: putWrapper,\n match: matchWrapper\n };\n\n /*\n Copyright 2017 Google Inc.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n https://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n */\n\n /**\n * Wrapper around the fetch API.\n *\n * Will call requestWillFetch on available plugins.\n *\n * @param {Object} options\n * @param {Request|string} options.request\n * @param {Object} [options.fetchOptions]\n * @param {Event} [options.event]\n * @param {Array} [options.plugins=[]]\n * @return {Promise}\n *\n * @private\n * @memberof module:workbox-core\n */\n const wrappedFetch = (() => {\n var _ref = babelHelpers.asyncToGenerator(function* ({\n request,\n fetchOptions,\n event,\n plugins = [] }) {\n // We *should* be able to call `await event.preloadResponse` even if it's\n // undefined, but for some reason, doing so leads to errors in our Node unit\n // tests. To work around that, explicitly check preloadResponse's value first.\n if (event && event.preloadResponse) {\n const possiblePreloadResponse = yield event.preloadResponse;\n if (possiblePreloadResponse) {\n {\n defaultExport.log(`Using a preloaded navigation response for ` + `'${getFriendlyURL(request.url)}'`);\n }\n return possiblePreloadResponse;\n }\n }\n\n if (typeof request === 'string') {\n request = new Request(request);\n }\n\n {\n finalAssertExports.isInstance(request, Request, {\n paramName: request,\n expectedClass: 'Request',\n moduleName: 'workbox-core',\n className: 'fetchWrapper',\n funcName: 'wrappedFetch'\n });\n }\n\n const failedFetchPlugins = pluginUtils.filter(plugins, pluginEvents.FETCH_DID_FAIL);\n\n // If there is a fetchDidFail plugin, we need to save a clone of the\n // original request before it's either modified by a requestWillFetch\n // plugin or before the original request's body is consumed via fetch().\n const originalRequest = failedFetchPlugins.length > 0 ? request.clone() : null;\n\n try {\n for (let plugin of plugins) {\n if (pluginEvents.REQUEST_WILL_FETCH in plugin) {\n request = yield plugin[pluginEvents.REQUEST_WILL_FETCH].call(plugin, {\n request: request.clone(),\n event\n });\n\n {\n if (request) {\n finalAssertExports.isInstance(request, Request, {\n moduleName: 'Plugin',\n funcName: pluginEvents.CACHED_RESPONSE_WILL_BE_USED,\n isReturnValueProblem: true\n });\n }\n }\n }\n }\n } catch (err) {\n throw new WorkboxError('plugin-error-request-will-fetch', {\n thrownError: err\n });\n }\n\n // The request can be altered by plugins with `requestWillFetch` making\n // the original request (Most likely from a `fetch` event) to be different\n // to the Request we make. Pass both to `fetchDidFail` to aid debugging.\n const pluginFilteredRequest = request.clone();\n\n try {\n const fetchResponse = yield fetch(request, fetchOptions);\n {\n defaultExport.debug(`Network request for ` + `'${getFriendlyURL(request.url)}' returned a response with ` + `status '${fetchResponse.status}'.`);\n }\n return fetchResponse;\n } catch (error) {\n {\n defaultExport.error(`Network request for ` + `'${getFriendlyURL(request.url)}' threw an error.`, error);\n }\n\n for (let plugin of failedFetchPlugins) {\n yield plugin[pluginEvents.FETCH_DID_FAIL].call(plugin, {\n error,\n event,\n originalRequest: originalRequest.clone(),\n request: pluginFilteredRequest.clone()\n });\n }\n\n throw error;\n }\n });\n\n return function wrappedFetch(_x) {\n return _ref.apply(this, arguments);\n };\n })();\n\n const fetchWrapper = {\n fetch: wrappedFetch\n };\n\n /*\n Copyright 2017 Google Inc.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n https://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n */\n\n var _private = /*#__PURE__*/Object.freeze({\n DBWrapper: DBWrapper,\n WorkboxError: WorkboxError,\n assert: finalAssertExports,\n cacheNames: cacheNames,\n cacheWrapper: cacheWrapper,\n fetchWrapper: fetchWrapper,\n getFriendlyURL: getFriendlyURL,\n logger: defaultExport\n });\n\n /*\n Copyright 2017 Google Inc.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n https://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n */\n\n /**\n * Logs a warning to the user recommending changing\n * to max-age=0 or no-cache.\n *\n * @param {string} cacheControlHeader\n *\n * @private\n */\n function showWarning(cacheControlHeader) {\n const docsUrl = 'https://developers.google.com/web/tools/workbox/guides/service-worker-checklist#cache-control_of_your_service_worker_file';\n defaultExport.warn(`You are setting a 'cache-control' header of ` + `'${cacheControlHeader}' on your service worker file. This should be ` + `set to 'max-age=0' or 'no-cache' to ensure the latest service worker ` + `is served to your users. Learn more here: ${docsUrl}`);\n }\n\n /**\n * Checks for cache-control header on SW file and\n * warns the developer if it exists with a value\n * other than max-age=0 or no-cache.\n *\n * @return {Promise}\n * @private\n */\n function checkSWFileCacheHeaders() {\n // This is wrapped as an iife to allow async/await while making\n // rollup exclude it in builds.\n return babelHelpers.asyncToGenerator(function* () {\n try {\n const swFile = self.location.href;\n const response = yield fetch(swFile);\n if (!response.ok) {\n // Response failed so nothing we can check;\n return;\n }\n\n if (!response.headers.has('cache-control')) {\n // No cache control header.\n return;\n }\n\n const cacheControlHeader = response.headers.get('cache-control');\n const maxAgeResult = /max-age\\s*=\\s*(\\d*)/g.exec(cacheControlHeader);\n if (maxAgeResult) {\n if (parseInt(maxAgeResult[1], 10) === 0) {\n return;\n }\n }\n\n if (cacheControlHeader.indexOf('no-cache') !== -1) {\n return;\n }\n\n if (cacheControlHeader.indexOf('no-store') !== -1) {\n return;\n }\n\n showWarning(cacheControlHeader);\n } catch (err) {\n // NOOP\n }\n })();\n }\n\n const finalCheckSWFileCacheHeaders = checkSWFileCacheHeaders;\n\n /*\n Copyright 2017 Google Inc.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n https://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n */\n\n /**\n * This class is never exposed publicly. Inidividual methods are exposed\n * using jsdoc alias commands.\n *\n * @memberof workbox.core\n * @private\n */\n class WorkboxCore {\n /**\n * You should not instantiate this object directly.\n *\n * @private\n */\n constructor() {\n // Give our version strings something to hang off of.\n try {\n self.workbox.v = self.workbox.v || {};\n } catch (err) {}\n // NOOP\n\n\n // A WorkboxCore instance must be exported before we can use the logger.\n // This is so it can get the current log level.\n {\n const padding = ' ';\n defaultExport.groupCollapsed('Welcome to Workbox!');\n defaultExport.unprefixed.log(`You are currently using a development build. ` + `By default this will switch to prod builds when not on localhost. ` + `You can force this with workbox.setConfig({debug: true|false}).`);\n defaultExport.unprefixed.log(`📖 Read the guides and documentation\\n` + `${padding}https://developers.google.com/web/tools/workbox/`);\n defaultExport.unprefixed.log(`❓ Use the [workbox] tag on Stack Overflow to ask questions\\n` + `${padding}https://stackoverflow.com/questions/ask?tags=workbox`);\n defaultExport.unprefixed.log(`🐛 Found a bug? Report it on GitHub\\n` + `${padding}https://github.com/GoogleChrome/workbox/issues/new`);\n defaultExport.groupEnd();\n\n if (typeof finalCheckSWFileCacheHeaders === 'function') {\n finalCheckSWFileCacheHeaders();\n }\n }\n }\n\n /**\n * Get the current cache names used by Workbox.\n *\n * `cacheNames.precache` is used for precached assets,\n * `cacheNames.googleAnalytics` is used by `workbox-google-analytics` to\n * store `analytics.js`,\n * and `cacheNames.runtime` is used for everything else.\n *\n * @return {Object} An object with `precache` and `runtime` cache names.\n *\n * @alias workbox.core.cacheNames\n */\n get cacheNames() {\n return {\n googleAnalytics: cacheNames.getGoogleAnalyticsName(),\n precache: cacheNames.getPrecacheName(),\n runtime: cacheNames.getRuntimeName()\n };\n }\n\n /**\n * You can alter the default cache names used by the Workbox modules by\n * changing the cache name details.\n *\n * Cache names are generated as `--`.\n *\n * @param {Object} details\n * @param {Object} details.prefix The string to add to the beginning of\n * the precache and runtime cache names.\n * @param {Object} details.suffix The string to add to the end of\n * the precache and runtime cache names.\n * @param {Object} details.precache The cache name to use for precache\n * caching.\n * @param {Object} details.runtime The cache name to use for runtime caching.\n * @param {Object} details.googleAnalytics The cache name to use for\n * `workbox-google-analytics` caching.\n *\n * @alias workbox.core.setCacheNameDetails\n */\n setCacheNameDetails(details) {\n {\n Object.keys(details).forEach(key => {\n finalAssertExports.isType(details[key], 'string', {\n moduleName: 'workbox-core',\n className: 'WorkboxCore',\n funcName: 'setCacheNameDetails',\n paramName: `details.${key}`\n });\n });\n\n if ('precache' in details && details.precache.length === 0) {\n throw new WorkboxError('invalid-cache-name', {\n cacheNameId: 'precache',\n value: details.precache\n });\n }\n\n if ('runtime' in details && details.runtime.length === 0) {\n throw new WorkboxError('invalid-cache-name', {\n cacheNameId: 'runtime',\n value: details.runtime\n });\n }\n\n if ('googleAnalytics' in details && details.googleAnalytics.length === 0) {\n throw new WorkboxError('invalid-cache-name', {\n cacheNameId: 'googleAnalytics',\n value: details.googleAnalytics\n });\n }\n }\n\n cacheNames.updateDetails(details);\n }\n\n /**\n * Get the current log level.\n *\n * @return {number}.\n *\n * @alias workbox.core.logLevel\n */\n get logLevel() {\n return getLoggerLevel();\n }\n\n /**\n * Set the current log level passing in one of the values from\n * [LOG_LEVELS]{@link module:workbox-core.LOG_LEVELS}.\n *\n * @param {number} newLevel The new log level to use.\n *\n * @alias workbox.core.setLogLevel\n */\n setLogLevel(newLevel) {\n {\n finalAssertExports.isType(newLevel, 'number', {\n moduleName: 'workbox-core',\n className: 'WorkboxCore',\n funcName: 'logLevel [setter]',\n paramName: `logLevel`\n });\n }\n\n if (newLevel > LOG_LEVELS.silent || newLevel < LOG_LEVELS.debug) {\n throw new WorkboxError('invalid-value', {\n paramName: 'logLevel',\n validValueDescription: `Please use a value from LOG_LEVELS, i.e ` + `'logLevel = workbox.core.LOG_LEVELS.debug'.`,\n value: newLevel\n });\n }\n\n setLoggerLevel(newLevel);\n }\n }\n\n var defaultExport$1 = new WorkboxCore();\n\n /*\n Copyright 2017 Google Inc.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n https://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n */\n\n const finalExports = Object.assign(defaultExport$1, {\n _private,\n LOG_LEVELS,\n registerQuotaErrorCallback\n });\n\n return finalExports;\n\n}());\n"],"file":"workbox-core.dev.js"} \ No newline at end of file diff --git a/assets/js/workbox-v3.6.3/workbox-core.prod.js b/assets/js/workbox-v3.6.3/workbox-core.prod.js new file mode 100644 index 0000000..3f32a3e --- /dev/null +++ b/assets/js/workbox-v3.6.3/workbox-core.prod.js @@ -0,0 +1,3 @@ +self.babelHelpers={asyncToGenerator:function(e){return function(){var t=e.apply(this,arguments);return new Promise(function(e,r){return function n(o,i){try{var c=t[o](i),l=c.value}catch(e){return void r(e)}if(!c.done)return Promise.resolve(l).then(function(e){n("next",e)},function(e){n("throw",e)});e(l)}("next")})}}},this.workbox=this.workbox||{},this.workbox.core=function(){"use strict";try{self.workbox.v["workbox:core:3.6.3"]=1}catch(e){}var e={debug:0,log:1,warn:2,error:3,silent:4};const t=/^((?!chrome|android).)*safari/i.test(navigator.userAgent);let r=(()=>e.warn)();const n=e=>r<=e,o=e=>r=e,i=()=>r,c=e.error,l=function(r,o,i){const l=0===r.indexOf("group")?c:e[r];if(!n(l))return;if(!i||"groupCollapsed"===r&&t)return void console[r](...o);const s=["%cworkbox",`background: ${i}; color: white; padding: 2px 0.5em; `+"border-radius: 0.5em;"];console[r](...s,...o)},s=()=>{n(c)&&console.groupEnd()},u={groupEnd:s,unprefixed:{groupEnd:s}},a={debug:"#7f8c8d",log:"#2ecc71",warn:"#f39c12",error:"#c0392b",groupCollapsed:"#3498db"};var f,d;Object.keys(a).forEach(e=>(e=e,d=a[e],u[e]=((...t)=>l(e,t,d)),void(u.unprefixed[e]=((...t)=>l(e,t)))));const h=(e,...t)=>{let r=e;return t.length>0&&(r+=` :: ${JSON.stringify(t)}`),r};class p extends Error{constructor(e,t){super(h(e,t)),this.name=e,this.details=t}}let b=(y=babelHelpers.asyncToGenerator(function*(){for(const e of g)yield e()}),function(){return y.apply(this,arguments)});var y;const g=new Set;class v{constructor(e,t,{onupgradeneeded:r,onversionchange:n=this.e}={}){this.t=e,this.r=t,this.n=r,this.e=n,this.o=null}open(){var e=this;return babelHelpers.asyncToGenerator(function*(){if(!e.o)return e.o=yield new Promise(function(t,r){let n=!1;setTimeout(function(){n=!0,r(new Error("The open request was blocked and timed out"))},e.OPEN_TIMEOUT);const o=indexedDB.open(e.t,e.r);o.onerror=function(e){return r(o.error)},o.onupgradeneeded=function(t){n?(o.transaction.abort(),t.target.result.close()):e.n&&e.n(t)},o.onsuccess=function(r){const o=r.target.result;n?o.close():(o.onversionchange=e.e,t(o))}}),e})()}get(e,...t){var r=this;return babelHelpers.asyncToGenerator(function*(){return yield r.i("get",e,"readonly",...t)})()}add(e,...t){var r=this;return babelHelpers.asyncToGenerator(function*(){return yield r.i("add",e,"readwrite",...t)})()}put(e,...t){var r=this;return babelHelpers.asyncToGenerator(function*(){return yield r.i("put",e,"readwrite",...t)})()}delete(e,...t){var r=this;return babelHelpers.asyncToGenerator(function*(){yield r.i("delete",e,"readwrite",...t)})()}deleteDatabase(){var e=this;return babelHelpers.asyncToGenerator(function*(){e.close(),e.o=null,yield new Promise(function(t,r){const n=indexedDB.deleteDatabase(e.t);n.onerror=function(e){return r(e.target.error)},n.onblocked=function(){return r(new Error("Deletion was blocked."))},n.onsuccess=function(){return t()}})})()}getAll(e,t,r){var n=this;return babelHelpers.asyncToGenerator(function*(){return"getAll"in IDBObjectStore.prototype?yield n.i("getAll",e,"readonly",t,r):yield n.getAllMatching(e,{query:t,count:r})})()}getAllMatching(e,t={}){var r=this;return babelHelpers.asyncToGenerator(function*(){return yield r.transaction([e],"readonly",function(r,n){const o=r[e],i=t.index?o.index(t.index):o,c=[],l=t.query||null,s=t.direction||"next";i.openCursor(l,s).onsuccess=function(e){const r=e.target.result;if(r){const{primaryKey:e,key:o,value:i}=r;c.push(t.includeKeys?{primaryKey:e,key:o,value:i}:i),t.count&&c.length>=t.count?n(c):r.continue()}else n(c)}})})()}transaction(e,t,r){var n=this;return babelHelpers.asyncToGenerator(function*(){return yield n.open(),yield new Promise(function(o,i){const c=n.o.transaction(e,t);c.onerror=function(e){return i(e.target.error)},c.onabort=function(e){return i(e.target.error)},c.oncomplete=function(){return o()};const l={};for(const t of e)l[t]=c.objectStore(t);r(l,function(e){return o(e)},function(){i(new Error("The transaction was manually aborted")),c.abort()})})})()}i(e,t,r,...n){var o=this;return babelHelpers.asyncToGenerator(function*(){yield o.open();return yield o.transaction([t],r,function(r,o){r[t][e](...n).onsuccess=function(e){o(e.target.result)}})})()}e(e){this.close()}close(){this.o&&this.o.close()}}v.prototype.OPEN_TIMEOUT=2e3;const w={prefix:"workbox",suffix:self.registration.scope,googleAnalytics:"googleAnalytics",precache:"precache",runtime:"runtime"},m=e=>[w.prefix,e,w.suffix].filter(e=>e.length>0).join("-"),q={updateDetails:e=>{Object.keys(w).forEach(t=>{void 0!==e[t]&&(w[t]=e[t])})},getGoogleAnalyticsName:e=>e||m(w.googleAnalytics),getPrecacheName:e=>e||m(w.precache),getRuntimeName:e=>e||m(w.runtime)};var E="cacheDidUpdate",L="cacheWillUpdate",x="cachedResponseWillBeUsed",H="fetchDidFail",N="requestWillFetch",O=(e,t)=>e.filter(e=>t in e);const k=e=>{const t=new URL(e,location);return t.origin===location.origin?t.pathname:t.href},D=(()=>{var e=babelHelpers.asyncToGenerator(function*({cacheName:e,request:t,response:r,event:n,plugins:o=[]}={}){if(!r)throw new p("cache-put-with-no-response",{url:k(t.url)});let i=yield P({request:t,response:r,event:n,plugins:o});if(!i)return;const c=yield caches.open(e),l=O(o,E);let s=l.length>0?yield R({cacheName:e,request:t}):null;try{yield c.put(t,i)}catch(e){throw"QuotaExceededError"===e.name&&(yield b()),e}for(let r of l)yield r[E].call(r,{cacheName:e,request:t,event:n,oldResponse:s,newResponse:i})});return function(){return e.apply(this,arguments)}})(),R=(A=babelHelpers.asyncToGenerator(function*({cacheName:e,request:t,event:r,matchOptions:n,plugins:o=[]}){let i=yield(yield caches.open(e)).match(t,n);for(let c of o)x in c&&(i=yield c[x].call(c,{cacheName:e,request:t,event:r,matchOptions:n,cachedResponse:i}));return i}),function(e){return A.apply(this,arguments)});var A;const P=(W=babelHelpers.asyncToGenerator(function*({request:e,response:t,event:r,plugins:n}){let o=t,i=!1;for(let t of n)if(L in t&&(i=!0,!(o=yield t[L].call(t,{request:e,response:o,event:r}))))break;return i||(o=o.ok?o:null),o||null}),function(e){return W.apply(this,arguments)});var W;const S={put:D,match:R},_={fetch:(()=>{var e=babelHelpers.asyncToGenerator(function*({request:e,fetchOptions:t,event:r,plugins:n=[]}){if(r&&r.preloadResponse){const e=yield r.preloadResponse;if(e)return e}"string"==typeof e&&(e=new Request(e));const o=O(n,H),i=o.length>0?e.clone():null;try{for(let t of n)N in t&&(e=yield t[N].call(t,{request:e.clone(),event:r}))}catch(e){throw new p("plugin-error-request-will-fetch",{thrownError:e})}const c=e.clone();try{return yield fetch(e,t)}catch(e){for(let t of o)yield t[H].call(t,{error:e,event:r,originalRequest:i.clone(),request:c.clone()});throw e}});return function(t){return e.apply(this,arguments)}})()};var j=Object.freeze({DBWrapper:v,WorkboxError:p,assert:null,cacheNames:q,cacheWrapper:S,fetchWrapper:_,getFriendlyURL:k,logger:u});var B=new class{constructor(){try{self.workbox.v=self.workbox.v||{}}catch(e){}}get cacheNames(){return{googleAnalytics:q.getGoogleAnalyticsName(),precache:q.getPrecacheName(),runtime:q.getRuntimeName()}}setCacheNameDetails(e){q.updateDetails(e)}get logLevel(){return i()}setLogLevel(t){if(t>e.silent||te.warn)();const n=e=>r<=e,o=e=>r=e,i=()=>r,c=e.error,l=function(r,o,i){const l=0===r.indexOf(\"group\")?c:e[r];if(!n(l))return;if(!i||\"groupCollapsed\"===r&&t)return void console[r](...o);const s=[\"%cworkbox\",`background: ${i}; color: white; padding: 2px 0.5em; `+\"border-radius: 0.5em;\"];console[r](...s,...o)},s=()=>{n(c)&&console.groupEnd()},u={groupEnd:s,unprefixed:{groupEnd:s}},a={debug:\"#7f8c8d\",log:\"#2ecc71\",warn:\"#f39c12\",error:\"#c0392b\",groupCollapsed:\"#3498db\"};var f,d;Object.keys(a).forEach(e=>(e=e,d=a[e],u[e]=((...t)=>l(e,t,d)),void(u.unprefixed[e]=((...t)=>l(e,t)))));const h=(e,...t)=>{let r=e;return t.length>0&&(r+=` :: ${JSON.stringify(t)}`),r};class p extends Error{constructor(e,t){super(h(e,t)),this.name=e,this.details=t}}let b=(y=babelHelpers.asyncToGenerator(function*(){for(const e of g)yield e()}),function(){return y.apply(this,arguments)});var y;const g=new Set;class v{constructor(e,t,{onupgradeneeded:r,onversionchange:n=this.e}={}){this.t=e,this.r=t,this.n=r,this.e=n,this.o=null}open(){var e=this;return babelHelpers.asyncToGenerator(function*(){if(!e.o)return e.o=yield new Promise(function(t,r){let n=!1;setTimeout(function(){n=!0,r(new Error(\"The open request was blocked and timed out\"))},e.OPEN_TIMEOUT);const o=indexedDB.open(e.t,e.r);o.onerror=function(e){return r(o.error)},o.onupgradeneeded=function(t){n?(o.transaction.abort(),t.target.result.close()):e.n&&e.n(t)},o.onsuccess=function(r){const o=r.target.result;n?o.close():(o.onversionchange=e.e,t(o))}}),e})()}get(e,...t){var r=this;return babelHelpers.asyncToGenerator(function*(){return yield r.i(\"get\",e,\"readonly\",...t)})()}add(e,...t){var r=this;return babelHelpers.asyncToGenerator(function*(){return yield r.i(\"add\",e,\"readwrite\",...t)})()}put(e,...t){var r=this;return babelHelpers.asyncToGenerator(function*(){return yield r.i(\"put\",e,\"readwrite\",...t)})()}delete(e,...t){var r=this;return babelHelpers.asyncToGenerator(function*(){yield r.i(\"delete\",e,\"readwrite\",...t)})()}deleteDatabase(){var e=this;return babelHelpers.asyncToGenerator(function*(){e.close(),e.o=null,yield new Promise(function(t,r){const n=indexedDB.deleteDatabase(e.t);n.onerror=function(e){return r(e.target.error)},n.onblocked=function(){return r(new Error(\"Deletion was blocked.\"))},n.onsuccess=function(){return t()}})})()}getAll(e,t,r){var n=this;return babelHelpers.asyncToGenerator(function*(){return\"getAll\"in IDBObjectStore.prototype?yield n.i(\"getAll\",e,\"readonly\",t,r):yield n.getAllMatching(e,{query:t,count:r})})()}getAllMatching(e,t={}){var r=this;return babelHelpers.asyncToGenerator(function*(){return yield r.transaction([e],\"readonly\",function(r,n){const o=r[e],i=t.index?o.index(t.index):o,c=[],l=t.query||null,s=t.direction||\"next\";i.openCursor(l,s).onsuccess=function(e){const r=e.target.result;if(r){const{primaryKey:e,key:o,value:i}=r;c.push(t.includeKeys?{primaryKey:e,key:o,value:i}:i),t.count&&c.length>=t.count?n(c):r.continue()}else n(c)}})})()}transaction(e,t,r){var n=this;return babelHelpers.asyncToGenerator(function*(){return yield n.open(),yield new Promise(function(o,i){const c=n.o.transaction(e,t);c.onerror=function(e){return i(e.target.error)},c.onabort=function(e){return i(e.target.error)},c.oncomplete=function(){return o()};const l={};for(const t of e)l[t]=c.objectStore(t);r(l,function(e){return o(e)},function(){i(new Error(\"The transaction was manually aborted\")),c.abort()})})})()}i(e,t,r,...n){var o=this;return babelHelpers.asyncToGenerator(function*(){yield o.open();return yield o.transaction([t],r,function(r,o){r[t][e](...n).onsuccess=function(e){o(e.target.result)}})})()}e(e){this.close()}close(){this.o&&this.o.close()}}v.prototype.OPEN_TIMEOUT=2e3;const w={prefix:\"workbox\",suffix:self.registration.scope,googleAnalytics:\"googleAnalytics\",precache:\"precache\",runtime:\"runtime\"},m=e=>[w.prefix,e,w.suffix].filter(e=>e.length>0).join(\"-\"),q={updateDetails:e=>{Object.keys(w).forEach(t=>{void 0!==e[t]&&(w[t]=e[t])})},getGoogleAnalyticsName:e=>e||m(w.googleAnalytics),getPrecacheName:e=>e||m(w.precache),getRuntimeName:e=>e||m(w.runtime)};var E=\"cacheDidUpdate\",L=\"cacheWillUpdate\",x=\"cachedResponseWillBeUsed\",H=\"fetchDidFail\",N=\"requestWillFetch\",O=(e,t)=>e.filter(e=>t in e);const k=e=>{const t=new URL(e,location);return t.origin===location.origin?t.pathname:t.href},D=(()=>{var e=babelHelpers.asyncToGenerator(function*({cacheName:e,request:t,response:r,event:n,plugins:o=[]}={}){if(!r)throw new p(\"cache-put-with-no-response\",{url:k(t.url)});let i=yield P({request:t,response:r,event:n,plugins:o});if(!i)return;const c=yield caches.open(e),l=O(o,E);let s=l.length>0?yield R({cacheName:e,request:t}):null;try{yield c.put(t,i)}catch(e){throw\"QuotaExceededError\"===e.name&&(yield b()),e}for(let r of l)yield r[E].call(r,{cacheName:e,request:t,event:n,oldResponse:s,newResponse:i})});return function(){return e.apply(this,arguments)}})(),R=(A=babelHelpers.asyncToGenerator(function*({cacheName:e,request:t,event:r,matchOptions:n,plugins:o=[]}){let i=yield(yield caches.open(e)).match(t,n);for(let c of o)x in c&&(i=yield c[x].call(c,{cacheName:e,request:t,event:r,matchOptions:n,cachedResponse:i}));return i}),function(e){return A.apply(this,arguments)});var A;const P=(W=babelHelpers.asyncToGenerator(function*({request:e,response:t,event:r,plugins:n}){let o=t,i=!1;for(let t of n)if(L in t&&(i=!0,!(o=yield t[L].call(t,{request:e,response:o,event:r}))))break;return i||(o=o.ok?o:null),o||null}),function(e){return W.apply(this,arguments)});var W;const S={put:D,match:R},_={fetch:(()=>{var e=babelHelpers.asyncToGenerator(function*({request:e,fetchOptions:t,event:r,plugins:n=[]}){if(r&&r.preloadResponse){const e=yield r.preloadResponse;if(e)return e}\"string\"==typeof e&&(e=new Request(e));const o=O(n,H),i=o.length>0?e.clone():null;try{for(let t of n)N in t&&(e=yield t[N].call(t,{request:e.clone(),event:r}))}catch(e){throw new p(\"plugin-error-request-will-fetch\",{thrownError:e})}const c=e.clone();try{return yield fetch(e,t)}catch(e){for(let t of o)yield t[H].call(t,{error:e,event:r,originalRequest:i.clone(),request:c.clone()});throw e}});return function(t){return e.apply(this,arguments)}})()};var j=Object.freeze({DBWrapper:v,WorkboxError:p,assert:null,cacheNames:q,cacheWrapper:S,fetchWrapper:_,getFriendlyURL:k,logger:u});var B=new class{constructor(){try{self.workbox.v=self.workbox.v||{}}catch(e){}}get cacheNames(){return{googleAnalytics:q.getGoogleAnalyticsName(),precache:q.getPrecacheName(),runtime:q.getRuntimeName()}}setCacheNameDetails(e){q.updateDetails(e)}get logLevel(){return i()}setLogLevel(t){if(t>e.silent||t} + * + * @private + */ + const getTextFromBlob = (() => { + var _ref = babelHelpers.asyncToGenerator(function* (blob) { + // This usage of `return await new Promise...` is intentional to work around + // a bug in the transpiled/minified output. + // See https://github.com/GoogleChrome/workbox/issues/1186 + return yield new Promise(function (resolve, reject) { + const reader = new FileReader(); + reader.onloadend = function () { + return resolve(reader.result); + }; + reader.onerror = function () { + return reject(reader.error); + }; + reader.readAsText(blob); + }); + }); + + return function getTextFromBlob(_x) { + return _ref.apply(this, arguments); + }; + })(); + + /** + * Creates the requestWillDequeue callback to be used with the background + * sync queue plugin. The callback takes the failed request and adds the + * `qt` param based on the current time, as well as applies any other + * user-defined hit modifications. + * + * @param {Object} config See workbox.googleAnalytics.initialize. + * @return {Function} The requestWillDequeu callback function. + * + * @private + */ + const createRequestWillReplayCallback = config => { + return (() => { + var _ref2 = babelHelpers.asyncToGenerator(function* (storableRequest) { + let { url, requestInit, timestamp } = storableRequest; + url = new URL(url); + + // Measurement protocol requests can set their payload parameters in either + // the URL query string (for GET requests) or the POST body. + let params; + if (requestInit.body) { + const payload = requestInit.body instanceof Blob ? yield getTextFromBlob(requestInit.body) : requestInit.body; + + params = new URLSearchParams(payload); + } else { + params = url.searchParams; + } + + // Calculate the qt param, accounting for the fact that an existing + // qt param may be present and should be updated rather than replaced. + const originalHitTime = timestamp - (Number(params.get('qt')) || 0); + const queueTime = Date.now() - originalHitTime; + + // Set the qt param prior to applying the hitFilter or parameterOverrides. + params.set('qt', queueTime); + + if (config.parameterOverrides) { + for (const param of Object.keys(config.parameterOverrides)) { + const value = config.parameterOverrides[param]; + params.set(param, value); + } + } + + if (typeof config.hitFilter === 'function') { + config.hitFilter.call(null, params); + } + + requestInit.body = params.toString(); + requestInit.method = 'POST'; + requestInit.mode = 'cors'; + requestInit.credentials = 'omit'; + requestInit.headers = { 'Content-Type': 'text/plain' }; + + // Ignore URL search params as they're now in the post body. + storableRequest.url = `${url.origin}${url.pathname}`; + }); + + return function (_x2) { + return _ref2.apply(this, arguments); + }; + })(); + }; + + /** + * Creates GET and POST routes to catch failed Measurement Protocol hits. + * + * @param {Plugin} queuePlugin + * @return {Array} The created routes. + * + * @private + */ + const createCollectRoutes = queuePlugin => { + const match = ({ url }) => url.hostname === GOOGLE_ANALYTICS_HOST && COLLECT_PATHS_REGEX.test(url.pathname); + + const handler = new NetworkOnly_mjs.NetworkOnly({ + plugins: [queuePlugin] + }); + + return [new Route_mjs.Route(match, handler, 'GET'), new Route_mjs.Route(match, handler, 'POST')]; + }; + + /** + * Creates a route with a network first strategy for the analytics.js script. + * + * @param {string} cacheName + * @return {Route} The created route. + * + * @private + */ + const createAnalyticsJsRoute = cacheName => { + const match = ({ url }) => url.hostname === GOOGLE_ANALYTICS_HOST && url.pathname === ANALYTICS_JS_PATH; + const handler = new NetworkFirst_mjs.NetworkFirst({ cacheName }); + + return new Route_mjs.Route(match, handler, 'GET'); + }; + + /** + * Creates a route with a network first strategy for the gtag.js script. + * + * @param {string} cacheName + * @return {Route} The created route. + * + * @private + */ + const createGtagJsRoute = cacheName => { + const match = ({ url }) => url.hostname === GTM_HOST && url.pathname === GTAG_JS_PATH; + const handler = new NetworkFirst_mjs.NetworkFirst({ cacheName }); + + return new Route_mjs.Route(match, handler, 'GET'); + }; + + /** + * @param {Object=} [options] + * @param {Object} [options.cacheName] The cache name to store and retrieve + * analytics.js. Defaults to the cache names provided by `workbox-core`. + * @param {Object} [options.parameterOverrides] + * [Measurement Protocol parameters](https://developers.google.com/analytics/devguides/collection/protocol/v1/parameters), + * expressed as key/value pairs, to be added to replayed Google Analytics + * requests. This can be used to, e.g., set a custom dimension indicating + * that the request was replayed. + * @param {Function} [options.hitFilter] A function that allows you to modify + * the hit parameters prior to replaying + * the hit. The function is invoked with the original hit's URLSearchParams + * object as its only argument. + * + * @memberof workbox.googleAnalytics + */ + const initialize = (options = {}) => { + const cacheName = cacheNames_mjs.cacheNames.getGoogleAnalyticsName(options.cacheName); + + const queuePlugin = new Plugin_mjs.Plugin(QUEUE_NAME, { + maxRetentionTime: MAX_RETENTION_TIME, + callbacks: { + requestWillReplay: createRequestWillReplayCallback(options) + } + }); + + const routes = [createAnalyticsJsRoute(cacheName), createGtagJsRoute(cacheName), ...createCollectRoutes(queuePlugin)]; + + const router = new Router_mjs.Router(); + for (const route of routes) { + router.registerRoute(route); + } + + self.addEventListener('fetch', evt => { + const responsePromise = router.handleRequest(evt); + if (responsePromise) { + evt.respondWith(responsePromise); + } + }); + }; + + /* + Copyright 2017 Google Inc. All Rights Reserved. + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + + exports.initialize = initialize; + + return exports; + +}({},workbox.backgroundSync,workbox.core._private,workbox.routing,workbox.routing,workbox.strategies,workbox.strategies)); + +//# sourceMappingURL=workbox-google-analytics.dev.js.map diff --git a/assets/js/workbox-v3.6.3/workbox-google-analytics.dev.js.map b/assets/js/workbox-v3.6.3/workbox-google-analytics.dev.js.map new file mode 100644 index 0000000..87fd78a --- /dev/null +++ b/assets/js/workbox-v3.6.3/workbox-google-analytics.dev.js.map @@ -0,0 +1 @@ +{"version":3,"names":[],"mappings":"","sources":["packages/workbox-google-analytics/browser.mjs"],"sourcesContent":["this.workbox = this.workbox || {};\nthis.workbox.googleAnalytics = (function (exports,Plugin_mjs,cacheNames_mjs,Route_mjs,Router_mjs,NetworkFirst_mjs,NetworkOnly_mjs) {\n 'use strict';\n\n try {\n self.workbox.v['workbox:google-analytics:3.6.3'] = 1;\n } catch (e) {} // eslint-disable-line\n\n /*\n Copyright 2017 Google Inc. All Rights Reserved.\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n */\n\n const QUEUE_NAME = 'workbox-google-analytics';\n const MAX_RETENTION_TIME = 60 * 48; // Two days in minutes\n const GOOGLE_ANALYTICS_HOST = 'www.google-analytics.com';\n const GTM_HOST = 'www.googletagmanager.com';\n const ANALYTICS_JS_PATH = '/analytics.js';\n const GTAG_JS_PATH = '/gtag/js';\n\n // This RegExp matches all known Measurement Protocol single-hit collect\n // endpoints. Most of the time the default path (/collect) is used, but\n // occasionally an experimental endpoint is used when testing new features,\n // (e.g. /r/collect or /j/collect)\n const COLLECT_PATHS_REGEX = /^\\/(\\w+\\/)?collect/;\n\n /*\n Copyright 2017 Google Inc. All Rights Reserved.\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n */\n\n /**\n * Promisifies the FileReader API to await a text response from a Blob.\n *\n * @param {Blob} blob\n * @return {Promise}\n *\n * @private\n */\n const getTextFromBlob = (() => {\n var _ref = babelHelpers.asyncToGenerator(function* (blob) {\n // This usage of `return await new Promise...` is intentional to work around\n // a bug in the transpiled/minified output.\n // See https://github.com/GoogleChrome/workbox/issues/1186\n return yield new Promise(function (resolve, reject) {\n const reader = new FileReader();\n reader.onloadend = function () {\n return resolve(reader.result);\n };\n reader.onerror = function () {\n return reject(reader.error);\n };\n reader.readAsText(blob);\n });\n });\n\n return function getTextFromBlob(_x) {\n return _ref.apply(this, arguments);\n };\n })();\n\n /**\n * Creates the requestWillDequeue callback to be used with the background\n * sync queue plugin. The callback takes the failed request and adds the\n * `qt` param based on the current time, as well as applies any other\n * user-defined hit modifications.\n *\n * @param {Object} config See workbox.googleAnalytics.initialize.\n * @return {Function} The requestWillDequeu callback function.\n *\n * @private\n */\n const createRequestWillReplayCallback = config => {\n return (() => {\n var _ref2 = babelHelpers.asyncToGenerator(function* (storableRequest) {\n let { url, requestInit, timestamp } = storableRequest;\n url = new URL(url);\n\n // Measurement protocol requests can set their payload parameters in either\n // the URL query string (for GET requests) or the POST body.\n let params;\n if (requestInit.body) {\n const payload = requestInit.body instanceof Blob ? yield getTextFromBlob(requestInit.body) : requestInit.body;\n\n params = new URLSearchParams(payload);\n } else {\n params = url.searchParams;\n }\n\n // Calculate the qt param, accounting for the fact that an existing\n // qt param may be present and should be updated rather than replaced.\n const originalHitTime = timestamp - (Number(params.get('qt')) || 0);\n const queueTime = Date.now() - originalHitTime;\n\n // Set the qt param prior to applying the hitFilter or parameterOverrides.\n params.set('qt', queueTime);\n\n if (config.parameterOverrides) {\n for (const param of Object.keys(config.parameterOverrides)) {\n const value = config.parameterOverrides[param];\n params.set(param, value);\n }\n }\n\n if (typeof config.hitFilter === 'function') {\n config.hitFilter.call(null, params);\n }\n\n requestInit.body = params.toString();\n requestInit.method = 'POST';\n requestInit.mode = 'cors';\n requestInit.credentials = 'omit';\n requestInit.headers = { 'Content-Type': 'text/plain' };\n\n // Ignore URL search params as they're now in the post body.\n storableRequest.url = `${url.origin}${url.pathname}`;\n });\n\n return function (_x2) {\n return _ref2.apply(this, arguments);\n };\n })();\n };\n\n /**\n * Creates GET and POST routes to catch failed Measurement Protocol hits.\n *\n * @param {Plugin} queuePlugin\n * @return {Array} The created routes.\n *\n * @private\n */\n const createCollectRoutes = queuePlugin => {\n const match = ({ url }) => url.hostname === GOOGLE_ANALYTICS_HOST && COLLECT_PATHS_REGEX.test(url.pathname);\n\n const handler = new NetworkOnly_mjs.NetworkOnly({\n plugins: [queuePlugin]\n });\n\n return [new Route_mjs.Route(match, handler, 'GET'), new Route_mjs.Route(match, handler, 'POST')];\n };\n\n /**\n * Creates a route with a network first strategy for the analytics.js script.\n *\n * @param {string} cacheName\n * @return {Route} The created route.\n *\n * @private\n */\n const createAnalyticsJsRoute = cacheName => {\n const match = ({ url }) => url.hostname === GOOGLE_ANALYTICS_HOST && url.pathname === ANALYTICS_JS_PATH;\n const handler = new NetworkFirst_mjs.NetworkFirst({ cacheName });\n\n return new Route_mjs.Route(match, handler, 'GET');\n };\n\n /**\n * Creates a route with a network first strategy for the gtag.js script.\n *\n * @param {string} cacheName\n * @return {Route} The created route.\n *\n * @private\n */\n const createGtagJsRoute = cacheName => {\n const match = ({ url }) => url.hostname === GTM_HOST && url.pathname === GTAG_JS_PATH;\n const handler = new NetworkFirst_mjs.NetworkFirst({ cacheName });\n\n return new Route_mjs.Route(match, handler, 'GET');\n };\n\n /**\n * @param {Object=} [options]\n * @param {Object} [options.cacheName] The cache name to store and retrieve\n * analytics.js. Defaults to the cache names provided by `workbox-core`.\n * @param {Object} [options.parameterOverrides]\n * [Measurement Protocol parameters](https://developers.google.com/analytics/devguides/collection/protocol/v1/parameters),\n * expressed as key/value pairs, to be added to replayed Google Analytics\n * requests. This can be used to, e.g., set a custom dimension indicating\n * that the request was replayed.\n * @param {Function} [options.hitFilter] A function that allows you to modify\n * the hit parameters prior to replaying\n * the hit. The function is invoked with the original hit's URLSearchParams\n * object as its only argument.\n *\n * @memberof workbox.googleAnalytics\n */\n const initialize = (options = {}) => {\n const cacheName = cacheNames_mjs.cacheNames.getGoogleAnalyticsName(options.cacheName);\n\n const queuePlugin = new Plugin_mjs.Plugin(QUEUE_NAME, {\n maxRetentionTime: MAX_RETENTION_TIME,\n callbacks: {\n requestWillReplay: createRequestWillReplayCallback(options)\n }\n });\n\n const routes = [createAnalyticsJsRoute(cacheName), createGtagJsRoute(cacheName), ...createCollectRoutes(queuePlugin)];\n\n const router = new Router_mjs.Router();\n for (const route of routes) {\n router.registerRoute(route);\n }\n\n self.addEventListener('fetch', evt => {\n const responsePromise = router.handleRequest(evt);\n if (responsePromise) {\n evt.respondWith(responsePromise);\n }\n });\n };\n\n /*\n Copyright 2017 Google Inc. All Rights Reserved.\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n */\n\n exports.initialize = initialize;\n\n return exports;\n\n}({},workbox.backgroundSync,workbox.core._private,workbox.routing,workbox.routing,workbox.strategies,workbox.strategies));\n"],"file":"workbox-google-analytics.dev.js"} \ No newline at end of file diff --git a/assets/js/workbox-v3.6.3/workbox-google-analytics.prod.js b/assets/js/workbox-v3.6.3/workbox-google-analytics.prod.js new file mode 100644 index 0000000..6c44f0d --- /dev/null +++ b/assets/js/workbox-v3.6.3/workbox-google-analytics.prod.js @@ -0,0 +1,3 @@ +this.workbox=this.workbox||{},this.workbox.googleAnalytics=function(e,n,t,o,r,c,s){"use strict";try{self.workbox.v["workbox:google-analytics:3.6.3"]=1}catch(e){}const l=/^\/(\w+\/)?collect/,i=(a=babelHelpers.asyncToGenerator(function*(e){return yield new Promise(function(n,t){const o=new FileReader;o.onloadend=function(){return n(o.result)},o.onerror=function(){return t(o.error)},o.readAsText(e)})}),function(e){return a.apply(this,arguments)});var a;const w=e=>(u=babelHelpers.asyncToGenerator(function*(n){let t,{url:o,requestInit:r,timestamp:c}=n;if(o=new URL(o),r.body){const e=r.body instanceof Blob?yield i(r.body):r.body;t=new URLSearchParams(e)}else t=o.searchParams;const s=c-(Number(t.get("qt"))||0),l=Date.now()-s;if(t.set("qt",l),e.parameterOverrides)for(const n of Object.keys(e.parameterOverrides)){const o=e.parameterOverrides[n];t.set(n,o)}"function"==typeof e.hitFilter&&e.hitFilter.call(null,t),r.body=t.toString(),r.method="POST",r.mode="cors",r.credentials="omit",r.headers={"Content-Type":"text/plain"},n.url=`${o.origin}${o.pathname}`}),function(e){return u.apply(this,arguments)});var u;return e.initialize=((e={})=>{const i=t.cacheNames.getGoogleAnalyticsName(e.cacheName),a=new n.Plugin("workbox-google-analytics",{maxRetentionTime:2880,callbacks:{requestWillReplay:w(e)}}),u=[(e=>{const n=new c.NetworkFirst({cacheName:e});return new o.Route(({url:e})=>"www.google-analytics.com"===e.hostname&&"/analytics.js"===e.pathname,n,"GET")})(i),(e=>{const n=new c.NetworkFirst({cacheName:e});return new o.Route(({url:e})=>"www.googletagmanager.com"===e.hostname&&"/gtag/js"===e.pathname,n,"GET")})(i),...(e=>{const n=({url:e})=>"www.google-analytics.com"===e.hostname&&l.test(e.pathname),t=new s.NetworkOnly({plugins:[e]});return[new o.Route(n,t,"GET"),new o.Route(n,t,"POST")]})(a)],f=new r.Router;for(const e of u)f.registerRoute(e);self.addEventListener("fetch",e=>{const n=f.handleRequest(e);n&&e.respondWith(n)})}),e}({},workbox.backgroundSync,workbox.core._private,workbox.routing,workbox.routing,workbox.strategies,workbox.strategies); + +//# sourceMappingURL=workbox-google-analytics.prod.js.map diff --git a/assets/js/workbox-v3.6.3/workbox-google-analytics.prod.js.map b/assets/js/workbox-v3.6.3/workbox-google-analytics.prod.js.map new file mode 100644 index 0000000..5e55ed8 --- /dev/null +++ b/assets/js/workbox-v3.6.3/workbox-google-analytics.prod.js.map @@ -0,0 +1 @@ +{"version":3,"names":[],"mappings":"","sources":["packages/workbox-google-analytics/browser.mjs"],"sourcesContent":["this.workbox=this.workbox||{},this.workbox.googleAnalytics=function(e,n,t,o,r,c,s){\"use strict\";try{self.workbox.v[\"workbox:google-analytics:3.6.3\"]=1}catch(e){}const l=/^\\/(\\w+\\/)?collect/,i=(a=babelHelpers.asyncToGenerator(function*(e){return yield new Promise(function(n,t){const o=new FileReader;o.onloadend=function(){return n(o.result)},o.onerror=function(){return t(o.error)},o.readAsText(e)})}),function(e){return a.apply(this,arguments)});var a;const w=e=>(u=babelHelpers.asyncToGenerator(function*(n){let t,{url:o,requestInit:r,timestamp:c}=n;if(o=new URL(o),r.body){const e=r.body instanceof Blob?yield i(r.body):r.body;t=new URLSearchParams(e)}else t=o.searchParams;const s=c-(Number(t.get(\"qt\"))||0),l=Date.now()-s;if(t.set(\"qt\",l),e.parameterOverrides)for(const n of Object.keys(e.parameterOverrides)){const o=e.parameterOverrides[n];t.set(n,o)}\"function\"==typeof e.hitFilter&&e.hitFilter.call(null,t),r.body=t.toString(),r.method=\"POST\",r.mode=\"cors\",r.credentials=\"omit\",r.headers={\"Content-Type\":\"text/plain\"},n.url=`${o.origin}${o.pathname}`}),function(e){return u.apply(this,arguments)});var u;return e.initialize=((e={})=>{const i=t.cacheNames.getGoogleAnalyticsName(e.cacheName),a=new n.Plugin(\"workbox-google-analytics\",{maxRetentionTime:2880,callbacks:{requestWillReplay:w(e)}}),u=[(e=>{const n=new c.NetworkFirst({cacheName:e});return new o.Route(({url:e})=>\"www.google-analytics.com\"===e.hostname&&\"/analytics.js\"===e.pathname,n,\"GET\")})(i),(e=>{const n=new c.NetworkFirst({cacheName:e});return new o.Route(({url:e})=>\"www.googletagmanager.com\"===e.hostname&&\"/gtag/js\"===e.pathname,n,\"GET\")})(i),...(e=>{const n=({url:e})=>\"www.google-analytics.com\"===e.hostname&&l.test(e.pathname),t=new s.NetworkOnly({plugins:[e]});return[new o.Route(n,t,\"GET\"),new o.Route(n,t,\"POST\")]})(a)],f=new r.Router;for(const e of u)f.registerRoute(e);self.addEventListener(\"fetch\",e=>{const n=f.handleRequest(e);n&&e.respondWith(n)})}),e}({},workbox.backgroundSync,workbox.core._private,workbox.routing,workbox.routing,workbox.strategies,workbox.strategies);\n"],"file":"workbox-google-analytics.prod.js"} \ No newline at end of file diff --git a/assets/js/workbox-v3.6.3/workbox-navigation-preload.dev.js b/assets/js/workbox-v3.6.3/workbox-navigation-preload.dev.js new file mode 100644 index 0000000..2a2e448 --- /dev/null +++ b/assets/js/workbox-v3.6.3/workbox-navigation-preload.dev.js @@ -0,0 +1,159 @@ +this.workbox = this.workbox || {}; +this.workbox.navigationPreload = (function (exports,logger_mjs) { + 'use strict'; + + try { + self.workbox.v['workbox:navigation-preload:3.6.3'] = 1; + } catch (e) {} // eslint-disable-line + + /* + Copyright 2018 Google Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + https://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + + /** + * @return {boolean} Whether or not the current browser supports enabling + * navigation preload. + * + * @memberof workbox.navigationPreload + */ + function isSupported() { + return Boolean(self.registration && self.registration.navigationPreload); + } + + /* + Copyright 2017 Google Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + https://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + + /** + * If the browser supports Navigation Preload, then this will disable it. + * + * @memberof workbox.navigationPreload + */ + function disable() { + if (isSupported()) { + self.addEventListener('activate', event => { + event.waitUntil(self.registration.navigationPreload.disable().then(() => { + { + logger_mjs.logger.log(`Navigation preload is disabled.`); + } + })); + }); + } else { + { + logger_mjs.logger.log(`Navigation preload is not supported in this browser.`); + } + } + } + + /* + Copyright 2017 Google Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + https://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + + /** + * If the browser supports Navigation Preload, then this will enable it. + * + * @param {string} [headerValue] Optionally, allows developers to + * [override](https://developers.google.com/web/updates/2017/02/navigation-preload#changing_the_header) + * the value of the `Service-Worker-Navigation-Preload` header which will be + * sent to the server when making the navigation request. + * + * @memberof workbox.navigationPreload + */ + function enable(headerValue) { + if (isSupported()) { + self.addEventListener('activate', event => { + event.waitUntil(self.registration.navigationPreload.enable().then(() => { + // Defaults to Service-Worker-Navigation-Preload: true if not set. + if (headerValue) { + self.registration.navigationPreload.setHeaderValue(headerValue); + } + + { + logger_mjs.logger.log(`Navigation preload is enabled.`); + } + })); + }); + } else { + { + logger_mjs.logger.log(`Navigation preload is not supported in this browser.`); + } + } + } + + /* + Copyright 2017 Google Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + https://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + + /* + Copyright 2017 Google Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + https://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + + exports.disable = disable; + exports.enable = enable; + exports.isSupported = isSupported; + + return exports; + +}({},workbox.core._private)); + +//# sourceMappingURL=workbox-navigation-preload.dev.js.map diff --git a/assets/js/workbox-v3.6.3/workbox-navigation-preload.dev.js.map b/assets/js/workbox-v3.6.3/workbox-navigation-preload.dev.js.map new file mode 100644 index 0000000..821cead --- /dev/null +++ b/assets/js/workbox-v3.6.3/workbox-navigation-preload.dev.js.map @@ -0,0 +1 @@ +{"version":3,"names":[],"mappings":"","sources":["packages/workbox-navigation-preload/browser.mjs"],"sourcesContent":["this.workbox = this.workbox || {};\nthis.workbox.navigationPreload = (function (exports,logger_mjs) {\n 'use strict';\n\n try {\n self.workbox.v['workbox:navigation-preload:3.6.3'] = 1;\n } catch (e) {} // eslint-disable-line\n\n /*\n Copyright 2018 Google Inc.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n https://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n */\n\n /**\n * @return {boolean} Whether or not the current browser supports enabling\n * navigation preload.\n *\n * @memberof workbox.navigationPreload\n */\n function isSupported() {\n return Boolean(self.registration && self.registration.navigationPreload);\n }\n\n /*\n Copyright 2017 Google Inc.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n https://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n */\n\n /**\n * If the browser supports Navigation Preload, then this will disable it.\n *\n * @memberof workbox.navigationPreload\n */\n function disable() {\n if (isSupported()) {\n self.addEventListener('activate', event => {\n event.waitUntil(self.registration.navigationPreload.disable().then(() => {\n {\n logger_mjs.logger.log(`Navigation preload is disabled.`);\n }\n }));\n });\n } else {\n {\n logger_mjs.logger.log(`Navigation preload is not supported in this browser.`);\n }\n }\n }\n\n /*\n Copyright 2017 Google Inc.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n https://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n */\n\n /**\n * If the browser supports Navigation Preload, then this will enable it.\n *\n * @param {string} [headerValue] Optionally, allows developers to\n * [override](https://developers.google.com/web/updates/2017/02/navigation-preload#changing_the_header)\n * the value of the `Service-Worker-Navigation-Preload` header which will be\n * sent to the server when making the navigation request.\n *\n * @memberof workbox.navigationPreload\n */\n function enable(headerValue) {\n if (isSupported()) {\n self.addEventListener('activate', event => {\n event.waitUntil(self.registration.navigationPreload.enable().then(() => {\n // Defaults to Service-Worker-Navigation-Preload: true if not set.\n if (headerValue) {\n self.registration.navigationPreload.setHeaderValue(headerValue);\n }\n\n {\n logger_mjs.logger.log(`Navigation preload is enabled.`);\n }\n }));\n });\n } else {\n {\n logger_mjs.logger.log(`Navigation preload is not supported in this browser.`);\n }\n }\n }\n\n /*\n Copyright 2017 Google Inc.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n https://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n */\n\n /*\n Copyright 2017 Google Inc.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n https://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n */\n\n exports.disable = disable;\n exports.enable = enable;\n exports.isSupported = isSupported;\n\n return exports;\n\n}({},workbox.core._private));\n"],"file":"workbox-navigation-preload.dev.js"} \ No newline at end of file diff --git a/assets/js/workbox-v3.6.3/workbox-navigation-preload.prod.js b/assets/js/workbox-v3.6.3/workbox-navigation-preload.prod.js new file mode 100644 index 0000000..416a527 --- /dev/null +++ b/assets/js/workbox-v3.6.3/workbox-navigation-preload.prod.js @@ -0,0 +1,3 @@ +this.workbox=this.workbox||{},this.workbox.navigationPreload=function(t){"use strict";try{self.workbox.v["workbox:navigation-preload:3.6.3"]=1}catch(t){}function e(){return Boolean(self.registration&&self.registration.navigationPreload)}return t.disable=function(){e()&&self.addEventListener("activate",t=>{t.waitUntil(self.registration.navigationPreload.disable().then(()=>{}))})},t.enable=function(t){e()&&self.addEventListener("activate",e=>{e.waitUntil(self.registration.navigationPreload.enable().then(()=>{t&&self.registration.navigationPreload.setHeaderValue(t)}))})},t.isSupported=e,t}({}); + +//# sourceMappingURL=workbox-navigation-preload.prod.js.map diff --git a/assets/js/workbox-v3.6.3/workbox-navigation-preload.prod.js.map b/assets/js/workbox-v3.6.3/workbox-navigation-preload.prod.js.map new file mode 100644 index 0000000..4ecf993 --- /dev/null +++ b/assets/js/workbox-v3.6.3/workbox-navigation-preload.prod.js.map @@ -0,0 +1 @@ +{"version":3,"names":[],"mappings":"","sources":["packages/workbox-navigation-preload/browser.mjs"],"sourcesContent":["this.workbox=this.workbox||{},this.workbox.navigationPreload=function(t){\"use strict\";try{self.workbox.v[\"workbox:navigation-preload:3.6.3\"]=1}catch(t){}function e(){return Boolean(self.registration&&self.registration.navigationPreload)}return t.disable=function(){e()&&self.addEventListener(\"activate\",t=>{t.waitUntil(self.registration.navigationPreload.disable().then(()=>{}))})},t.enable=function(t){e()&&self.addEventListener(\"activate\",e=>{e.waitUntil(self.registration.navigationPreload.enable().then(()=>{t&&self.registration.navigationPreload.setHeaderValue(t)}))})},t.isSupported=e,t}({});\n"],"file":"workbox-navigation-preload.prod.js"} \ No newline at end of file diff --git a/assets/js/workbox-v3.6.3/workbox-precaching.dev.js b/assets/js/workbox-v3.6.3/workbox-precaching.dev.js new file mode 100644 index 0000000..addfbb2 --- /dev/null +++ b/assets/js/workbox-v3.6.3/workbox-precaching.dev.js @@ -0,0 +1,1171 @@ +this.workbox = this.workbox || {}; +this.workbox.precaching = (function (DBWrapper_mjs,logger_mjs,cacheNames_mjs,WorkboxError_mjs,fetchWrapper_mjs,cacheWrapper_mjs,assert_mjs,getFriendlyURL_mjs) { + 'use strict'; + + try { + self.workbox.v['workbox:precaching:3.6.3'] = 1; + } catch (e) {} // eslint-disable-line + + /* + Copyright 2017 Google Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + https://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + + /** + * Used as a consistent way of referencing a URL to precache. + * + * @private + * @memberof module:workbox-precaching + */ + class PrecacheEntry { + /** + * This class ensures all cache list entries are consistent and + * adds cache busting if required. + * + * @param {*} originalInput + * @param {string} url + * @param {string} revision + * @param {boolean} shouldCacheBust + */ + constructor(originalInput, url, revision, shouldCacheBust) { + this._originalInput = originalInput; + this._entryId = url; + this._revision = revision; + const requestAsCacheKey = new Request(url, { credentials: 'same-origin' }); + this._cacheRequest = requestAsCacheKey; + this._networkRequest = shouldCacheBust ? this._cacheBustRequest(requestAsCacheKey) : requestAsCacheKey; + } + + /** + * This method will either use Request.cache option OR append a cache + * busting parameter to the URL. + * + * @param {Request} request The request to cache bust + * @return {Request} A cachebusted Request + * + * @private + */ + _cacheBustRequest(request) { + let url = request.url; + const requestOptions = { + credentials: 'same-origin' + }; + if ('cache' in Request.prototype) { + // Make use of the Request cache mode where we can. + // Reload skips the HTTP cache for outgoing requests and updates + // the cache with the returned response. + requestOptions.cache = 'reload'; + } else { + const parsedURL = new URL(url, location); + + // This is done so the minifier can mangle 'global.encodeURIComponent' + const _encodeURIComponent = encodeURIComponent; + + parsedURL.search += (parsedURL.search ? '&' : '') + _encodeURIComponent(`_workbox-cache-bust`) + '=' + _encodeURIComponent(this._revision); + url = parsedURL.toString(); + } + + return new Request(url, requestOptions); + } + } + + /* + Copyright 2017 Google Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + https://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + + // Allows minifier to mangle this name + const REVISON_IDB_FIELD = 'revision'; + const URL_IDB_FIELD = 'url'; + const DB_STORE_NAME = 'precached-details-models'; + /** + * This model will track the relevant information of entries that + * are cached and their matching revision details. + * + * @private + */ + class PrecachedDetailsModel { + /** + * Construct a new model for a specific cache. + * + * @param {string} dbName + * @private + */ + constructor(dbName) { + // This ensures the db name contains only letters, numbers, '-', '_' and '$' + const filteredDBName = dbName.replace(/[^\w-]/g, '_'); + this._db = new DBWrapper_mjs.DBWrapper(filteredDBName, 2, { + onupgradeneeded: this._handleUpgrade + }); + } + + /** + * Should perform an upgrade of indexedDB. + * + * @param {Event} evt + * + * @private + */ + _handleUpgrade(evt) { + const db = evt.target.result; + if (evt.oldVersion < 2) { + // IndexedDB version 1 used both 'workbox-precaching' and + // 'precached-details-model' before upgrading to version 2. + // Delete them and create a new store with latest schema. + if (db.objectStoreNames.contains('workbox-precaching')) { + db.deleteObjectStore('workbox-precaching'); + } + if (db.objectStoreNames.contains(DB_STORE_NAME)) { + db.deleteObjectStore(DB_STORE_NAME); + } + } + db.createObjectStore(DB_STORE_NAME); + } + + /** + * Check if an entry is already cached. Returns false if + * the entry isn't cached or the revision has changed. + * + * @param {string} cacheName + * @param {PrecacheEntry} precacheEntry + * @return {boolean} + * + * @private + */ + _isEntryCached(cacheName, precacheEntry) { + var _this = this; + + return babelHelpers.asyncToGenerator(function* () { + const revisionDetails = yield _this._getRevision(precacheEntry._entryId); + if (revisionDetails !== precacheEntry._revision) { + return false; + } + + const openCache = yield caches.open(cacheName); + const cachedResponse = yield openCache.match(precacheEntry._cacheRequest); + return !!cachedResponse; + })(); + } + + /** + * @return {Promise} + * + * @private + */ + _getAllEntries() { + var _this2 = this; + + return babelHelpers.asyncToGenerator(function* () { + return yield _this2._db.getAllMatching(DB_STORE_NAME, { + includeKeys: true + }); + })(); + } + + /** + * Get the current revision details. + * + * @param {Object} entryId + * @return {Promise} + * + * @private + */ + _getRevision(entryId) { + var _this3 = this; + + return babelHelpers.asyncToGenerator(function* () { + const data = yield _this3._db.get(DB_STORE_NAME, entryId); + return data ? data[REVISON_IDB_FIELD] : null; + })(); + } + + /** + * Add an entry to the details model. + * + * @param {PrecacheEntry} precacheEntry + * + * @private + */ + _addEntry(precacheEntry) { + var _this4 = this; + + return babelHelpers.asyncToGenerator(function* () { + yield _this4._db.put(DB_STORE_NAME, { + [REVISON_IDB_FIELD]: precacheEntry._revision, + [URL_IDB_FIELD]: precacheEntry._cacheRequest.url + }, precacheEntry._entryId); + })(); + } + + /** + * Delete entry from details model. + * + * @param {string} entryId + * + * @private + */ + _deleteEntry(entryId) { + var _this5 = this; + + return babelHelpers.asyncToGenerator(function* () { + yield _this5._db.delete(DB_STORE_NAME, entryId); + })(); + } + } + + /* + Copyright 2017 Google Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + https://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + + /** + * This method will print out a warning if a precache entry doesn't have + * a `revision` value. + * + * This is common if the asset if revisioned in the url like `index.1234.css`. + * + * @param {Map} entriesMap + * + * @private + * @memberof module:workbox-preaching + */ + var showWarningsIfNeeded = (entriesMap => { + const urlOnlyEntries = []; + entriesMap.forEach(entry => { + if (typeof entry === 'string' || !entry._originalInput.revision) { + urlOnlyEntries.push(entry._originalInput); + } + }); + + if (urlOnlyEntries.length === 0) { + // No warnings needed. + return; + } + + logger_mjs.logger.groupCollapsed('Are your precached assets revisioned?'); + + const urlsList = urlOnlyEntries.map(urlOnlyEntry => { + return ` - ${JSON.stringify(urlOnlyEntry)}`; + }).join(`\n`); + + logger_mjs.logger.warn(`The following precache entries might not be revisioned:` + `\n\n` + urlsList + `\n\n`); + + logger_mjs.logger.unprefixed.warn(`You can learn more about why this might be a ` + `problem here: https://developers.google.com/web/tools/workbox/modules/workbox-precaching`); + + logger_mjs.logger.groupEnd(); + }); + + /* + Copyright 2017 Google Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + https://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + + /** + * @param {string} groupTitle + * @param {Array} entries + * + * @private + */ + const _nestedGroup = (groupTitle, entries) => { + if (entries.length === 0) { + return; + } + + logger_mjs.logger.groupCollapsed(groupTitle); + + entries.forEach(entry => { + logger_mjs.logger.log(entry._originalInput); + }); + + logger_mjs.logger.groupEnd(); + }; + + /** + * @param {Array} entriesToPrecache + * @param {Array} alreadyPrecachedEntries + * + * @private + * @memberof module:workbox-precachig + */ + var printInstallDetails = ((entriesToPrecache, alreadyPrecachedEntries) => { + // Goal is to print the message: + // Precaching X files. + // Or: + // Precaching X files. Y files were cached and up-to-date. + + const precachedCount = entriesToPrecache.length; + const alreadyPrecachedCount = alreadyPrecachedEntries.length; + let printText = `Precaching ${precachedCount} file${precachedCount === 1 ? '' : 's'}.`; + if (alreadyPrecachedCount > 0) { + printText += ` ${alreadyPrecachedCount} ` + `file${alreadyPrecachedCount === 1 ? ' is' : 's are'} already cached.`; + } + + logger_mjs.logger.groupCollapsed(printText); + + _nestedGroup(`View precached URLs.`, entriesToPrecache); + _nestedGroup(`View URLs that were already precached.`, alreadyPrecachedEntries); + logger_mjs.logger.groupEnd(); + }); + + /* + Copyright 2017 Google Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + https://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + + const logGroup = (groupTitle, urls) => { + logger_mjs.logger.groupCollapsed(groupTitle); + + urls.forEach(url => { + logger_mjs.logger.log(url); + }); + + logger_mjs.logger.groupEnd(); + }; + + /** + * @param {Array} deletedCacheRequests + * @param {Array} deletedRevisionDetails + * + * @private + * @memberof module:workbox-precachig + */ + var printCleanupDetails = ((deletedCacheRequests, deletedRevisionDetails) => { + if (deletedCacheRequests.length === 0 && deletedRevisionDetails.length === 0) { + return; + } + + const cacheDeleteCount = deletedCacheRequests.length; + const revisionDeleteCount = deletedRevisionDetails.length; + + const cacheDeleteText = `${cacheDeleteCount} cached ` + `request${cacheDeleteCount === 1 ? ' was' : 's were'} deleted`; + const revisionDeleteText = `${revisionDeleteCount} ` + `${revisionDeleteCount === 1 ? 'entry' : 'entries'} ` + `${revisionDeleteCount === 1 ? 'was' : 'were'} deleted from IndexedDB.`; + + logger_mjs.logger.groupCollapsed(`During precaching cleanup, ${cacheDeleteText} and ${revisionDeleteText}`); + + logGroup('Deleted Cache Requests', deletedCacheRequests); + logGroup('Revision Details Deleted from DB', deletedRevisionDetails); + + logger_mjs.logger.groupEnd(); + }); + + /* + Copyright 2017 Google Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + https://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + + /** + * @param {Response} response + * @return {Response} + * + * @private + * @memberof module:workbox-precaching + */ + const cleanRedirect = (() => { + var _ref = babelHelpers.asyncToGenerator(function* (response) { + const clonedResponse = response.clone(); + + // Not all browsers support the Response.body stream, so fall back + // to reading the entire body into memory as a blob. + const bodyPromise = 'body' in clonedResponse ? Promise.resolve(clonedResponse.body) : clonedResponse.blob(); + + const body = yield bodyPromise; + + // new Response() is happy when passed either a stream or a Blob. + return new Response(body, { + headers: clonedResponse.headers, + status: clonedResponse.status, + statusText: clonedResponse.statusText + }); + }); + + return function cleanRedirect(_x) { + return _ref.apply(this, arguments); + }; + })(); + + /* + Copyright 2017 Google Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + https://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + + /** + * Performs efficient precaching of assets. + * + * @memberof workbox.precaching + */ + class PrecacheController { + /** + * Create a new PrecacheController. + * + * @param {string} cacheName + */ + constructor(cacheName) { + this._cacheName = cacheNames_mjs.cacheNames.getPrecacheName(cacheName); + this._entriesToCacheMap = new Map(); + this._precacheDetailsModel = new PrecachedDetailsModel(this._cacheName); + } + + /** + * This method will add items to the precache list, removing duplicates + * and ensuring the information is valid. + * + * @param { + * Array + * } entries Array of entries to + * precache. + */ + addToCacheList(entries) { + { + assert_mjs.assert.isArray(entries, { + moduleName: 'workbox-precaching', + className: 'PrecacheController', + funcName: 'addToCacheList', + paramName: 'entries' + }); + } + + entries.map(userEntry => { + this._addEntryToCacheList(this._parseEntry(userEntry)); + }); + } + + /** + * This method returns a precache entry. + * + * @private + * @param {string|Object} input + * @return {PrecacheEntry} + */ + _parseEntry(input) { + switch (typeof input) { + case 'string': + { + { + if (input.length === 0) { + throw new WorkboxError_mjs.WorkboxError('add-to-cache-list-unexpected-type', { + entry: input + }); + } + } + + return new PrecacheEntry(input, input, input); + } + case 'object': + { + { + if (!input || !input.url) { + throw new WorkboxError_mjs.WorkboxError('add-to-cache-list-unexpected-type', { + entry: input + }); + } + } + + return new PrecacheEntry(input, input.url, input.revision || input.url, !!input.revision); + } + default: + throw new WorkboxError_mjs.WorkboxError('add-to-cache-list-unexpected-type', { + entry: input + }); + } + } + + /** + * Adds an entry to the precache list, accounting for possible duplicates. + * + * @private + * @param {PrecacheEntry} entryToAdd + */ + _addEntryToCacheList(entryToAdd) { + // Check if the entry is already part of the map + const existingEntry = this._entriesToCacheMap.get(entryToAdd._entryId); + if (!existingEntry) { + this._entriesToCacheMap.set(entryToAdd._entryId, entryToAdd); + return; + } + + // Duplicates are fine, but make sure the revision information + // is the same. + if (existingEntry._revision !== entryToAdd._revision) { + throw new WorkboxError_mjs.WorkboxError('add-to-cache-list-conflicting-entries', { + firstEntry: existingEntry._originalInput, + secondEntry: entryToAdd._originalInput + }); + } + } + + /** + * Call this method from a service work install event to start + * precaching assets. + * + * @param {Object} options + * @param {boolean} [options.suppressWarnings] Suppress warning messages. + * @param {Event} [options.event] The install event (if needed). + * @param {Array} [options.plugins] Plugins to be used for fetching + * and caching during install. + * @return {Promise} + */ + install({ suppressWarnings = false, event, plugins } = {}) { + var _this = this; + + return babelHelpers.asyncToGenerator(function* () { + { + if (suppressWarnings !== true) { + showWarningsIfNeeded(_this._entriesToCacheMap); + } + + if (plugins) { + assert_mjs.assert.isArray(plugins, { + moduleName: 'workbox-precaching', + className: 'PrecacheController', + funcName: 'install', + paramName: 'plugins' + }); + } + } + + // Empty the temporary cache. + // NOTE: We remove all entries instead of deleting the cache as the cache + // may be marked for deletion but still exist until a later stage + // resulting in unexpected behavior of being deletect when all references + // are dropped. + // https://github.com/GoogleChrome/workbox/issues/1368 + const tempCache = yield caches.open(_this._getTempCacheName()); + const requests = yield tempCache.keys(); + yield Promise.all(requests.map(function (request) { + return tempCache.delete(request); + })); + + const entriesToPrecache = []; + const entriesAlreadyPrecached = []; + + for (const precacheEntry of _this._entriesToCacheMap.values()) { + if (yield _this._precacheDetailsModel._isEntryCached(_this._cacheName, precacheEntry)) { + entriesAlreadyPrecached.push(precacheEntry); + } else { + entriesToPrecache.push(precacheEntry); + } + } + + // Wait for all requests to be cached. + yield Promise.all(entriesToPrecache.map(function (precacheEntry) { + return _this._cacheEntryInTemp({ event, plugins, precacheEntry }); + })); + + { + printInstallDetails(entriesToPrecache, entriesAlreadyPrecached); + } + + return { + updatedEntries: entriesToPrecache, + notUpdatedEntries: entriesAlreadyPrecached + }; + })(); + } + + /** + * Takes the current set of temporary files and moves them to the final + * cache, deleting the temporary cache once copying is complete. + * + * @param {Object} options + * @param {Array} options.plugins Plugins to be used for fetching + * and caching during install. + * @return { + * Promise} + * Resolves with an object containing details of the deleted cache requests + * and precache revision details. + */ + activate(options = {}) { + var _this2 = this; + + return babelHelpers.asyncToGenerator(function* () { + const tempCache = yield caches.open(_this2._getTempCacheName()); + + const requests = yield tempCache.keys(); + // Process each request/response one at a time, deleting the temporary entry + // when done, to help avoid triggering quota errors. + for (const request of requests) { + const response = yield tempCache.match(request); + yield cacheWrapper_mjs.cacheWrapper.put({ + cacheName: _this2._cacheName, + request, + response, + plugins: options.plugins + }); + yield tempCache.delete(request); + } + + return _this2._cleanup(); + })(); + } + + /** + * Returns the name of the temporary cache. + * + * @return {string} + * + * @private + */ + _getTempCacheName() { + return `${this._cacheName}-temp`; + } + + /** + * Requests the entry and saves it to the cache if the response + * is valid. + * + * @private + * @param {Object} options + * @param {BaseCacheEntry} options.precacheEntry The entry to fetch and cache. + * @param {Event} [options.event] The install event (if passed). + * @param {Array} [options.plugins] An array of plugins to apply to + * fetch and caching. + * @return {Promise} Returns a promise that resolves once the entry + * has been fetched and cached or skipped if no update is needed. The + * promise resolves with true if the entry was cached / updated and + * false if the entry is already cached and up-to-date. + */ + _cacheEntryInTemp({ precacheEntry, event, plugins }) { + var _this3 = this; + + return babelHelpers.asyncToGenerator(function* () { + let response = yield fetchWrapper_mjs.fetchWrapper.fetch({ + request: precacheEntry._networkRequest, + event, + fetchOptions: null, + plugins + }); + + if (response.redirected) { + response = yield cleanRedirect(response); + } + + yield cacheWrapper_mjs.cacheWrapper.put({ + cacheName: _this3._getTempCacheName(), + request: precacheEntry._cacheRequest, + response, + event, + plugins + }); + + yield _this3._precacheDetailsModel._addEntry(precacheEntry); + + return true; + })(); + } + + /** + * Compare the URLs and determines which assets are no longer required + * in the cache. + * + * This should be called in the service worker activate event. + * + * @return { + * Promise} + * Resolves with an object containing details of the deleted cache requests + * and precache revision details. + * + * @private + */ + _cleanup() { + var _this4 = this; + + return babelHelpers.asyncToGenerator(function* () { + const expectedCacheUrls = []; + _this4._entriesToCacheMap.forEach(function (entry) { + const fullUrl = new URL(entry._cacheRequest.url, location).toString(); + expectedCacheUrls.push(fullUrl); + }); + + const [deletedCacheRequests, deletedRevisionDetails] = yield Promise.all([_this4._cleanupCache(expectedCacheUrls), _this4._cleanupDetailsModel(expectedCacheUrls)]); + + { + printCleanupDetails(deletedCacheRequests, deletedRevisionDetails); + } + + return { + deletedCacheRequests, + deletedRevisionDetails + }; + })(); + } + + /** + * Goes through all the cache entries and removes any that are + * outdated. + * + * @private + * @param {Array} expectedCacheUrls Array of URLs that are + * expected to be cached. + * @return {Promise>} Resolves to an array of URLs + * of cached requests that were deleted. + */ + _cleanupCache(expectedCacheUrls) { + var _this5 = this; + + return babelHelpers.asyncToGenerator(function* () { + if (!(yield caches.has(_this5._cacheName))) { + // Cache doesn't exist, so nothing to delete + return []; + } + + const cache = yield caches.open(_this5._cacheName); + const cachedRequests = yield cache.keys(); + const cachedRequestsToDelete = cachedRequests.filter(function (cachedRequest) { + return !expectedCacheUrls.includes(new URL(cachedRequest.url, location).toString()); + }); + + yield Promise.all(cachedRequestsToDelete.map(function (cacheUrl) { + return cache.delete(cacheUrl); + })); + + return cachedRequestsToDelete.map(function (request) { + return request.url; + }); + })(); + } + + /** + * Goes through all entries in indexedDB and removes any that are outdated. + * + * @private + * @param {Array} expectedCacheUrls Array of URLs that are + * expected to be cached. + * @return {Promise>} Resolves to an array of URLs removed + * from indexedDB. + */ + _cleanupDetailsModel(expectedCacheUrls) { + var _this6 = this; + + return babelHelpers.asyncToGenerator(function* () { + const revisionedEntries = yield _this6._precacheDetailsModel._getAllEntries(); + const detailsToDelete = revisionedEntries.filter(function (entry) { + const fullUrl = new URL(entry.value.url, location).toString(); + return !expectedCacheUrls.includes(fullUrl); + }); + + yield Promise.all(detailsToDelete.map(function (entry) { + return _this6._precacheDetailsModel._deleteEntry(entry.primaryKey); + })); + return detailsToDelete.map(function (entry) { + return entry.value.url; + }); + })(); + } + + /** + * Returns an array of fully qualified URL's that will be precached. + * + * @return {Array} An array of URLs. + */ + getCachedUrls() { + return Array.from(this._entriesToCacheMap.keys()).map(url => new URL(url, location).href); + } + } + + /* + Copyright 2017 Google Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + https://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + + var publicAPI = /*#__PURE__*/Object.freeze({ + PrecacheController: PrecacheController + }); + + /* + Copyright 2017 Google Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + https://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + + { + assert_mjs.assert.isSwEnv('workbox-precaching'); + } + + let installActivateListenersAdded = false; + let fetchListenersAdded = false; + let suppressWarnings = false; + let plugins = []; + + const cacheName = cacheNames_mjs.cacheNames.getPrecacheName(); + const precacheController = new PrecacheController(cacheName); + + const _removeIgnoreUrlParams = (origUrlObject, ignoreUrlParametersMatching) => { + // Exclude initial '?' + const searchString = origUrlObject.search.slice(1); + + // Split into an array of 'key=value' strings + const keyValueStrings = searchString.split('&'); + const keyValuePairs = keyValueStrings.map(keyValueString => { + // Split each 'key=value' string into a [key, value] array + return keyValueString.split('='); + }); + const filteredKeyValuesPairs = keyValuePairs.filter(keyValuePair => { + return ignoreUrlParametersMatching.every(ignoredRegex => { + // Return true iff the key doesn't match any of the regexes. + return !ignoredRegex.test(keyValuePair[0]); + }); + }); + const filteredStrings = filteredKeyValuesPairs.map(keyValuePair => { + // Join each [key, value] array into a 'key=value' string + return keyValuePair.join('='); + }); + + // Join the array of 'key=value' strings into a string with '&' in + // between each + const urlClone = new URL(origUrlObject); + urlClone.search = filteredStrings.join('&'); + return urlClone; + }; + + /** + * This function will take the request URL and manipulate it based on the + * configuration options. + * + * @param {string} url + * @param {Object} options + * @return {string|null} Returns the URL in the cache that matches the request + * if available, other null. + * + * @private + */ + const _getPrecachedUrl = (url, { + ignoreUrlParametersMatching = [/^utm_/], + directoryIndex = 'index.html', + cleanUrls = true, + urlManipulation = null + } = {}) => { + const urlObject = new URL(url, location); + + // Change '/some-url#123' => '/some-url' + urlObject.hash = ''; + + const urlWithoutIgnoredParams = _removeIgnoreUrlParams(urlObject, ignoreUrlParametersMatching); + + let urlsToAttempt = [ + // Test the URL that was fetched + urlObject, + // Test the URL without search params + urlWithoutIgnoredParams]; + + // Test the URL with a directory index + if (directoryIndex && urlWithoutIgnoredParams.pathname.endsWith('/')) { + const directoryUrl = new URL(urlWithoutIgnoredParams); + directoryUrl.pathname += directoryIndex; + urlsToAttempt.push(directoryUrl); + } + + // Test the URL with a '.html' extension + if (cleanUrls) { + const cleanUrl = new URL(urlWithoutIgnoredParams); + cleanUrl.pathname += '.html'; + urlsToAttempt.push(cleanUrl); + } + + if (urlManipulation) { + const additionalUrls = urlManipulation({ url: urlObject }); + urlsToAttempt = urlsToAttempt.concat(additionalUrls); + } + + const cachedUrls = precacheController.getCachedUrls(); + for (const possibleUrl of urlsToAttempt) { + if (cachedUrls.indexOf(possibleUrl.href) !== -1) { + // It's a perfect match + { + logger_mjs.logger.debug(`Precaching found a match for ` + getFriendlyURL_mjs.getFriendlyURL(possibleUrl.toString())); + } + return possibleUrl.href; + } + } + + return null; + }; + + const moduleExports = {}; + + /** + * Add items to the precache list, removing any duplicates and + * store the files in the + * ["precache cache"]{@link module:workbox-core.cacheNames} when the service + * worker installs. + * + * This method can be called multiple times. + * + * Please note: This method **will not** serve any of the cached files for you, + * it only precaches files. To respond to a network request you call + * [addRoute()]{@link module:workbox-precaching.addRoute}. + * + * If you have a single array of files to precache, you can just call + * [precacheAndRoute()]{@link module:workbox-precaching.precacheAndRoute}. + * + * @param {Array} entries Array of entries to precache. + * + * @alias workbox.precaching.precache + */ + moduleExports.precache = entries => { + precacheController.addToCacheList(entries); + + if (installActivateListenersAdded || entries.length <= 0) { + return; + } + + installActivateListenersAdded = true; + self.addEventListener('install', event => { + event.waitUntil(precacheController.install({ + event, + plugins, + suppressWarnings + })); + }); + self.addEventListener('activate', event => { + event.waitUntil(precacheController.activate({ + event, + plugins + })); + }); + }; + + /** + * Add a `fetch` listener to the service worker that will + * respond to + * [network requests]{@link https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API/Using_Service_Workers#Custom_responses_to_requests} + * with precached assets. + * + * Requests for assets that aren't precached, the `FetchEvent` will not be + * responded to, allowing the event to fall through to other `fetch` event + * listeners. + * + * @param {Object} options + * @param {string} [options.directoryIndex=index.html] The `directoryIndex` will + * check cache entries for a URLs ending with '/' to see if there is a hit when + * appending the `directoryIndex` value. + * @param {Array} [options.ignoreUrlParametersMatching=[/^utm_/]] An + * array of regex's to remove search params when looking for a cache match. + * @param {boolean} [options.cleanUrls=true] The `cleanUrls` option will + * check the cache for the URL with a `.html` added to the end of the end. + * @param {workbox.precaching~urlManipulation} [options.urlManipulation] + * This is a function that should take a URL and return an array of + * alternative URL's that should be checked for precache matches. + * + * @alias workbox.precaching.addRoute + */ + moduleExports.addRoute = options => { + if (fetchListenersAdded) { + // TODO: Throw error here. + return; + } + + fetchListenersAdded = true; + self.addEventListener('fetch', event => { + const precachedUrl = _getPrecachedUrl(event.request.url, options); + if (!precachedUrl) { + { + logger_mjs.logger.debug(`Precaching found no match for ` + getFriendlyURL_mjs.getFriendlyURL(event.request.url)); + } + return; + } + + let responsePromise = caches.open(cacheName).then(cache => { + return cache.match(precachedUrl); + }).then(cachedResponse => { + if (cachedResponse) { + return cachedResponse; + } + + // Fall back to the network if we don't have a cached response (perhaps + // due to manual cache cleanup). + { + logger_mjs.logger.debug(`The precached response for ` + `${getFriendlyURL_mjs.getFriendlyURL(precachedUrl)} in ${cacheName} was not found. ` + `Falling back to the network instead.`); + } + + return fetch(precachedUrl); + }); + + { + responsePromise = responsePromise.then(response => { + // Workbox is going to handle the route. + // print the routing details to the console. + logger_mjs.logger.groupCollapsed(`Precaching is responding to: ` + getFriendlyURL_mjs.getFriendlyURL(event.request.url)); + logger_mjs.logger.log(`Serving the precached url: ${precachedUrl}`); + + // The Request and Response objects contains a great deal of + // information, hide it under a group in case developers want to see it. + logger_mjs.logger.groupCollapsed(`View request details here.`); + logger_mjs.logger.unprefixed.log(event.request); + logger_mjs.logger.groupEnd(); + + logger_mjs.logger.groupCollapsed(`View response details here.`); + logger_mjs.logger.unprefixed.log(response); + logger_mjs.logger.groupEnd(); + + logger_mjs.logger.groupEnd(); + return response; + }); + } + event.respondWith(responsePromise); + }); + }; + + /** + * This method will add entries to the precache list and add a route to + * respond to fetch events. + * + * This is a convenience method that will call + * [precache()]{@link module:workbox-precaching.precache} and + * [addRoute()]{@link module:workbox-precaching.addRoute} in a single call. + * + * @param {Array} entries Array of entries to precache. + * @param {Object} options See + * [addRoute() options]{@link module:workbox-precaching.addRoute}. + * + * @alias workbox.precaching.precacheAndRoute + */ + moduleExports.precacheAndRoute = (entries, options) => { + moduleExports.precache(entries); + moduleExports.addRoute(options); + }; + + /** + * Warnings will be logged if any of the precached assets are entered without + * a `revision` property. This is extremely dangerous if the URL's aren't + * revisioned. However, the warnings can be supressed with this method. + * + * @param {boolean} suppress + * + * @alias workbox.precaching.suppressWarnings + */ + moduleExports.suppressWarnings = suppress => { + suppressWarnings = suppress; + }; + + /** + * Add plugins to precaching. + * + * @param {Array} newPlugins + * + * @alias workbox.precaching.addPlugins + */ + moduleExports.addPlugins = newPlugins => { + plugins = plugins.concat(newPlugins); + }; + + /* + Copyright 2017 Google Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + https://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + + const finalExport = Object.assign(moduleExports, publicAPI); + + return finalExport; + +}(workbox.core._private,workbox.core._private,workbox.core._private,workbox.core._private,workbox.core._private,workbox.core._private,workbox.core._private,workbox.core._private)); + +//# sourceMappingURL=workbox-precaching.dev.js.map diff --git a/assets/js/workbox-v3.6.3/workbox-precaching.dev.js.map b/assets/js/workbox-v3.6.3/workbox-precaching.dev.js.map new file mode 100644 index 0000000..5ffbac1 --- /dev/null +++ b/assets/js/workbox-v3.6.3/workbox-precaching.dev.js.map @@ -0,0 +1 @@ +{"version":3,"names":[],"mappings":"","sources":["packages/workbox-precaching/browser.mjs"],"sourcesContent":["this.workbox = this.workbox || {};\nthis.workbox.precaching = (function (DBWrapper_mjs,logger_mjs,cacheNames_mjs,WorkboxError_mjs,fetchWrapper_mjs,cacheWrapper_mjs,assert_mjs,getFriendlyURL_mjs) {\n 'use strict';\n\n try {\n self.workbox.v['workbox:precaching:3.6.3'] = 1;\n } catch (e) {} // eslint-disable-line\n\n /*\n Copyright 2017 Google Inc.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n https://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n */\n\n /**\n * Used as a consistent way of referencing a URL to precache.\n *\n * @private\n * @memberof module:workbox-precaching\n */\n class PrecacheEntry {\n /**\n * This class ensures all cache list entries are consistent and\n * adds cache busting if required.\n *\n * @param {*} originalInput\n * @param {string} url\n * @param {string} revision\n * @param {boolean} shouldCacheBust\n */\n constructor(originalInput, url, revision, shouldCacheBust) {\n this._originalInput = originalInput;\n this._entryId = url;\n this._revision = revision;\n const requestAsCacheKey = new Request(url, { credentials: 'same-origin' });\n this._cacheRequest = requestAsCacheKey;\n this._networkRequest = shouldCacheBust ? this._cacheBustRequest(requestAsCacheKey) : requestAsCacheKey;\n }\n\n /**\n * This method will either use Request.cache option OR append a cache\n * busting parameter to the URL.\n *\n * @param {Request} request The request to cache bust\n * @return {Request} A cachebusted Request\n *\n * @private\n */\n _cacheBustRequest(request) {\n let url = request.url;\n const requestOptions = {\n credentials: 'same-origin'\n };\n if ('cache' in Request.prototype) {\n // Make use of the Request cache mode where we can.\n // Reload skips the HTTP cache for outgoing requests and updates\n // the cache with the returned response.\n requestOptions.cache = 'reload';\n } else {\n const parsedURL = new URL(url, location);\n\n // This is done so the minifier can mangle 'global.encodeURIComponent'\n const _encodeURIComponent = encodeURIComponent;\n\n parsedURL.search += (parsedURL.search ? '&' : '') + _encodeURIComponent(`_workbox-cache-bust`) + '=' + _encodeURIComponent(this._revision);\n url = parsedURL.toString();\n }\n\n return new Request(url, requestOptions);\n }\n }\n\n /*\n Copyright 2017 Google Inc.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n https://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n */\n\n // Allows minifier to mangle this name\n const REVISON_IDB_FIELD = 'revision';\n const URL_IDB_FIELD = 'url';\n const DB_STORE_NAME = 'precached-details-models';\n /**\n * This model will track the relevant information of entries that\n * are cached and their matching revision details.\n *\n * @private\n */\n class PrecachedDetailsModel {\n /**\n * Construct a new model for a specific cache.\n *\n * @param {string} dbName\n * @private\n */\n constructor(dbName) {\n // This ensures the db name contains only letters, numbers, '-', '_' and '$'\n const filteredDBName = dbName.replace(/[^\\w-]/g, '_');\n this._db = new DBWrapper_mjs.DBWrapper(filteredDBName, 2, {\n onupgradeneeded: this._handleUpgrade\n });\n }\n\n /**\n * Should perform an upgrade of indexedDB.\n *\n * @param {Event} evt\n *\n * @private\n */\n _handleUpgrade(evt) {\n const db = evt.target.result;\n if (evt.oldVersion < 2) {\n // IndexedDB version 1 used both 'workbox-precaching' and\n // 'precached-details-model' before upgrading to version 2.\n // Delete them and create a new store with latest schema.\n if (db.objectStoreNames.contains('workbox-precaching')) {\n db.deleteObjectStore('workbox-precaching');\n }\n if (db.objectStoreNames.contains(DB_STORE_NAME)) {\n db.deleteObjectStore(DB_STORE_NAME);\n }\n }\n db.createObjectStore(DB_STORE_NAME);\n }\n\n /**\n * Check if an entry is already cached. Returns false if\n * the entry isn't cached or the revision has changed.\n *\n * @param {string} cacheName\n * @param {PrecacheEntry} precacheEntry\n * @return {boolean}\n *\n * @private\n */\n _isEntryCached(cacheName, precacheEntry) {\n var _this = this;\n\n return babelHelpers.asyncToGenerator(function* () {\n const revisionDetails = yield _this._getRevision(precacheEntry._entryId);\n if (revisionDetails !== precacheEntry._revision) {\n return false;\n }\n\n const openCache = yield caches.open(cacheName);\n const cachedResponse = yield openCache.match(precacheEntry._cacheRequest);\n return !!cachedResponse;\n })();\n }\n\n /**\n * @return {Promise}\n *\n * @private\n */\n _getAllEntries() {\n var _this2 = this;\n\n return babelHelpers.asyncToGenerator(function* () {\n return yield _this2._db.getAllMatching(DB_STORE_NAME, {\n includeKeys: true\n });\n })();\n }\n\n /**\n * Get the current revision details.\n *\n * @param {Object} entryId\n * @return {Promise}\n *\n * @private\n */\n _getRevision(entryId) {\n var _this3 = this;\n\n return babelHelpers.asyncToGenerator(function* () {\n const data = yield _this3._db.get(DB_STORE_NAME, entryId);\n return data ? data[REVISON_IDB_FIELD] : null;\n })();\n }\n\n /**\n * Add an entry to the details model.\n *\n * @param {PrecacheEntry} precacheEntry\n *\n * @private\n */\n _addEntry(precacheEntry) {\n var _this4 = this;\n\n return babelHelpers.asyncToGenerator(function* () {\n yield _this4._db.put(DB_STORE_NAME, {\n [REVISON_IDB_FIELD]: precacheEntry._revision,\n [URL_IDB_FIELD]: precacheEntry._cacheRequest.url\n }, precacheEntry._entryId);\n })();\n }\n\n /**\n * Delete entry from details model.\n *\n * @param {string} entryId\n *\n * @private\n */\n _deleteEntry(entryId) {\n var _this5 = this;\n\n return babelHelpers.asyncToGenerator(function* () {\n yield _this5._db.delete(DB_STORE_NAME, entryId);\n })();\n }\n }\n\n /*\n Copyright 2017 Google Inc.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n https://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n */\n\n /**\n * This method will print out a warning if a precache entry doesn't have\n * a `revision` value.\n *\n * This is common if the asset if revisioned in the url like `index.1234.css`.\n *\n * @param {Map} entriesMap\n *\n * @private\n * @memberof module:workbox-preaching\n */\n var showWarningsIfNeeded = (entriesMap => {\n const urlOnlyEntries = [];\n entriesMap.forEach(entry => {\n if (typeof entry === 'string' || !entry._originalInput.revision) {\n urlOnlyEntries.push(entry._originalInput);\n }\n });\n\n if (urlOnlyEntries.length === 0) {\n // No warnings needed.\n return;\n }\n\n logger_mjs.logger.groupCollapsed('Are your precached assets revisioned?');\n\n const urlsList = urlOnlyEntries.map(urlOnlyEntry => {\n return ` - ${JSON.stringify(urlOnlyEntry)}`;\n }).join(`\\n`);\n\n logger_mjs.logger.warn(`The following precache entries might not be revisioned:` + `\\n\\n` + urlsList + `\\n\\n`);\n\n logger_mjs.logger.unprefixed.warn(`You can learn more about why this might be a ` + `problem here: https://developers.google.com/web/tools/workbox/modules/workbox-precaching`);\n\n logger_mjs.logger.groupEnd();\n });\n\n /*\n Copyright 2017 Google Inc.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n https://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n */\n\n /**\n * @param {string} groupTitle\n * @param {Array} entries\n *\n * @private\n */\n const _nestedGroup = (groupTitle, entries) => {\n if (entries.length === 0) {\n return;\n }\n\n logger_mjs.logger.groupCollapsed(groupTitle);\n\n entries.forEach(entry => {\n logger_mjs.logger.log(entry._originalInput);\n });\n\n logger_mjs.logger.groupEnd();\n };\n\n /**\n * @param {Array} entriesToPrecache\n * @param {Array} alreadyPrecachedEntries\n *\n * @private\n * @memberof module:workbox-precachig\n */\n var printInstallDetails = ((entriesToPrecache, alreadyPrecachedEntries) => {\n // Goal is to print the message:\n // Precaching X files.\n // Or:\n // Precaching X files. Y files were cached and up-to-date.\n\n const precachedCount = entriesToPrecache.length;\n const alreadyPrecachedCount = alreadyPrecachedEntries.length;\n let printText = `Precaching ${precachedCount} file${precachedCount === 1 ? '' : 's'}.`;\n if (alreadyPrecachedCount > 0) {\n printText += ` ${alreadyPrecachedCount} ` + `file${alreadyPrecachedCount === 1 ? ' is' : 's are'} already cached.`;\n }\n\n logger_mjs.logger.groupCollapsed(printText);\n\n _nestedGroup(`View precached URLs.`, entriesToPrecache);\n _nestedGroup(`View URLs that were already precached.`, alreadyPrecachedEntries);\n logger_mjs.logger.groupEnd();\n });\n\n /*\n Copyright 2017 Google Inc.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n https://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n */\n\n const logGroup = (groupTitle, urls) => {\n logger_mjs.logger.groupCollapsed(groupTitle);\n\n urls.forEach(url => {\n logger_mjs.logger.log(url);\n });\n\n logger_mjs.logger.groupEnd();\n };\n\n /**\n * @param {Array} deletedCacheRequests\n * @param {Array} deletedRevisionDetails\n *\n * @private\n * @memberof module:workbox-precachig\n */\n var printCleanupDetails = ((deletedCacheRequests, deletedRevisionDetails) => {\n if (deletedCacheRequests.length === 0 && deletedRevisionDetails.length === 0) {\n return;\n }\n\n const cacheDeleteCount = deletedCacheRequests.length;\n const revisionDeleteCount = deletedRevisionDetails.length;\n\n const cacheDeleteText = `${cacheDeleteCount} cached ` + `request${cacheDeleteCount === 1 ? ' was' : 's were'} deleted`;\n const revisionDeleteText = `${revisionDeleteCount} ` + `${revisionDeleteCount === 1 ? 'entry' : 'entries'} ` + `${revisionDeleteCount === 1 ? 'was' : 'were'} deleted from IndexedDB.`;\n\n logger_mjs.logger.groupCollapsed(`During precaching cleanup, ${cacheDeleteText} and ${revisionDeleteText}`);\n\n logGroup('Deleted Cache Requests', deletedCacheRequests);\n logGroup('Revision Details Deleted from DB', deletedRevisionDetails);\n\n logger_mjs.logger.groupEnd();\n });\n\n /*\n Copyright 2017 Google Inc.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n https://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n */\n\n /**\n * @param {Response} response\n * @return {Response}\n *\n * @private\n * @memberof module:workbox-precaching\n */\n const cleanRedirect = (() => {\n var _ref = babelHelpers.asyncToGenerator(function* (response) {\n const clonedResponse = response.clone();\n\n // Not all browsers support the Response.body stream, so fall back\n // to reading the entire body into memory as a blob.\n const bodyPromise = 'body' in clonedResponse ? Promise.resolve(clonedResponse.body) : clonedResponse.blob();\n\n const body = yield bodyPromise;\n\n // new Response() is happy when passed either a stream or a Blob.\n return new Response(body, {\n headers: clonedResponse.headers,\n status: clonedResponse.status,\n statusText: clonedResponse.statusText\n });\n });\n\n return function cleanRedirect(_x) {\n return _ref.apply(this, arguments);\n };\n })();\n\n /*\n Copyright 2017 Google Inc.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n https://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n */\n\n /**\n * Performs efficient precaching of assets.\n *\n * @memberof workbox.precaching\n */\n class PrecacheController {\n /**\n * Create a new PrecacheController.\n *\n * @param {string} cacheName\n */\n constructor(cacheName) {\n this._cacheName = cacheNames_mjs.cacheNames.getPrecacheName(cacheName);\n this._entriesToCacheMap = new Map();\n this._precacheDetailsModel = new PrecachedDetailsModel(this._cacheName);\n }\n\n /**\n * This method will add items to the precache list, removing duplicates\n * and ensuring the information is valid.\n *\n * @param {\n * Array\n * } entries Array of entries to\n * precache.\n */\n addToCacheList(entries) {\n {\n assert_mjs.assert.isArray(entries, {\n moduleName: 'workbox-precaching',\n className: 'PrecacheController',\n funcName: 'addToCacheList',\n paramName: 'entries'\n });\n }\n\n entries.map(userEntry => {\n this._addEntryToCacheList(this._parseEntry(userEntry));\n });\n }\n\n /**\n * This method returns a precache entry.\n *\n * @private\n * @param {string|Object} input\n * @return {PrecacheEntry}\n */\n _parseEntry(input) {\n switch (typeof input) {\n case 'string':\n {\n {\n if (input.length === 0) {\n throw new WorkboxError_mjs.WorkboxError('add-to-cache-list-unexpected-type', {\n entry: input\n });\n }\n }\n\n return new PrecacheEntry(input, input, input);\n }\n case 'object':\n {\n {\n if (!input || !input.url) {\n throw new WorkboxError_mjs.WorkboxError('add-to-cache-list-unexpected-type', {\n entry: input\n });\n }\n }\n\n return new PrecacheEntry(input, input.url, input.revision || input.url, !!input.revision);\n }\n default:\n throw new WorkboxError_mjs.WorkboxError('add-to-cache-list-unexpected-type', {\n entry: input\n });\n }\n }\n\n /**\n * Adds an entry to the precache list, accounting for possible duplicates.\n *\n * @private\n * @param {PrecacheEntry} entryToAdd\n */\n _addEntryToCacheList(entryToAdd) {\n // Check if the entry is already part of the map\n const existingEntry = this._entriesToCacheMap.get(entryToAdd._entryId);\n if (!existingEntry) {\n this._entriesToCacheMap.set(entryToAdd._entryId, entryToAdd);\n return;\n }\n\n // Duplicates are fine, but make sure the revision information\n // is the same.\n if (existingEntry._revision !== entryToAdd._revision) {\n throw new WorkboxError_mjs.WorkboxError('add-to-cache-list-conflicting-entries', {\n firstEntry: existingEntry._originalInput,\n secondEntry: entryToAdd._originalInput\n });\n }\n }\n\n /**\n * Call this method from a service work install event to start\n * precaching assets.\n *\n * @param {Object} options\n * @param {boolean} [options.suppressWarnings] Suppress warning messages.\n * @param {Event} [options.event] The install event (if needed).\n * @param {Array} [options.plugins] Plugins to be used for fetching\n * and caching during install.\n * @return {Promise}\n */\n install({ suppressWarnings = false, event, plugins } = {}) {\n var _this = this;\n\n return babelHelpers.asyncToGenerator(function* () {\n {\n if (suppressWarnings !== true) {\n showWarningsIfNeeded(_this._entriesToCacheMap);\n }\n\n if (plugins) {\n assert_mjs.assert.isArray(plugins, {\n moduleName: 'workbox-precaching',\n className: 'PrecacheController',\n funcName: 'install',\n paramName: 'plugins'\n });\n }\n }\n\n // Empty the temporary cache.\n // NOTE: We remove all entries instead of deleting the cache as the cache\n // may be marked for deletion but still exist until a later stage\n // resulting in unexpected behavior of being deletect when all references\n // are dropped.\n // https://github.com/GoogleChrome/workbox/issues/1368\n const tempCache = yield caches.open(_this._getTempCacheName());\n const requests = yield tempCache.keys();\n yield Promise.all(requests.map(function (request) {\n return tempCache.delete(request);\n }));\n\n const entriesToPrecache = [];\n const entriesAlreadyPrecached = [];\n\n for (const precacheEntry of _this._entriesToCacheMap.values()) {\n if (yield _this._precacheDetailsModel._isEntryCached(_this._cacheName, precacheEntry)) {\n entriesAlreadyPrecached.push(precacheEntry);\n } else {\n entriesToPrecache.push(precacheEntry);\n }\n }\n\n // Wait for all requests to be cached.\n yield Promise.all(entriesToPrecache.map(function (precacheEntry) {\n return _this._cacheEntryInTemp({ event, plugins, precacheEntry });\n }));\n\n {\n printInstallDetails(entriesToPrecache, entriesAlreadyPrecached);\n }\n\n return {\n updatedEntries: entriesToPrecache,\n notUpdatedEntries: entriesAlreadyPrecached\n };\n })();\n }\n\n /**\n * Takes the current set of temporary files and moves them to the final\n * cache, deleting the temporary cache once copying is complete.\n *\n * @param {Object} options\n * @param {Array} options.plugins Plugins to be used for fetching\n * and caching during install.\n * @return {\n * Promise}\n * Resolves with an object containing details of the deleted cache requests\n * and precache revision details.\n */\n activate(options = {}) {\n var _this2 = this;\n\n return babelHelpers.asyncToGenerator(function* () {\n const tempCache = yield caches.open(_this2._getTempCacheName());\n\n const requests = yield tempCache.keys();\n // Process each request/response one at a time, deleting the temporary entry\n // when done, to help avoid triggering quota errors.\n for (const request of requests) {\n const response = yield tempCache.match(request);\n yield cacheWrapper_mjs.cacheWrapper.put({\n cacheName: _this2._cacheName,\n request,\n response,\n plugins: options.plugins\n });\n yield tempCache.delete(request);\n }\n\n return _this2._cleanup();\n })();\n }\n\n /**\n * Returns the name of the temporary cache.\n *\n * @return {string}\n *\n * @private\n */\n _getTempCacheName() {\n return `${this._cacheName}-temp`;\n }\n\n /**\n * Requests the entry and saves it to the cache if the response\n * is valid.\n *\n * @private\n * @param {Object} options\n * @param {BaseCacheEntry} options.precacheEntry The entry to fetch and cache.\n * @param {Event} [options.event] The install event (if passed).\n * @param {Array} [options.plugins] An array of plugins to apply to\n * fetch and caching.\n * @return {Promise} Returns a promise that resolves once the entry\n * has been fetched and cached or skipped if no update is needed. The\n * promise resolves with true if the entry was cached / updated and\n * false if the entry is already cached and up-to-date.\n */\n _cacheEntryInTemp({ precacheEntry, event, plugins }) {\n var _this3 = this;\n\n return babelHelpers.asyncToGenerator(function* () {\n let response = yield fetchWrapper_mjs.fetchWrapper.fetch({\n request: precacheEntry._networkRequest,\n event,\n fetchOptions: null,\n plugins\n });\n\n if (response.redirected) {\n response = yield cleanRedirect(response);\n }\n\n yield cacheWrapper_mjs.cacheWrapper.put({\n cacheName: _this3._getTempCacheName(),\n request: precacheEntry._cacheRequest,\n response,\n event,\n plugins\n });\n\n yield _this3._precacheDetailsModel._addEntry(precacheEntry);\n\n return true;\n })();\n }\n\n /**\n * Compare the URLs and determines which assets are no longer required\n * in the cache.\n *\n * This should be called in the service worker activate event.\n *\n * @return {\n * Promise}\n * Resolves with an object containing details of the deleted cache requests\n * and precache revision details.\n *\n * @private\n */\n _cleanup() {\n var _this4 = this;\n\n return babelHelpers.asyncToGenerator(function* () {\n const expectedCacheUrls = [];\n _this4._entriesToCacheMap.forEach(function (entry) {\n const fullUrl = new URL(entry._cacheRequest.url, location).toString();\n expectedCacheUrls.push(fullUrl);\n });\n\n const [deletedCacheRequests, deletedRevisionDetails] = yield Promise.all([_this4._cleanupCache(expectedCacheUrls), _this4._cleanupDetailsModel(expectedCacheUrls)]);\n\n {\n printCleanupDetails(deletedCacheRequests, deletedRevisionDetails);\n }\n\n return {\n deletedCacheRequests,\n deletedRevisionDetails\n };\n })();\n }\n\n /**\n * Goes through all the cache entries and removes any that are\n * outdated.\n *\n * @private\n * @param {Array} expectedCacheUrls Array of URLs that are\n * expected to be cached.\n * @return {Promise>} Resolves to an array of URLs\n * of cached requests that were deleted.\n */\n _cleanupCache(expectedCacheUrls) {\n var _this5 = this;\n\n return babelHelpers.asyncToGenerator(function* () {\n if (!(yield caches.has(_this5._cacheName))) {\n // Cache doesn't exist, so nothing to delete\n return [];\n }\n\n const cache = yield caches.open(_this5._cacheName);\n const cachedRequests = yield cache.keys();\n const cachedRequestsToDelete = cachedRequests.filter(function (cachedRequest) {\n return !expectedCacheUrls.includes(new URL(cachedRequest.url, location).toString());\n });\n\n yield Promise.all(cachedRequestsToDelete.map(function (cacheUrl) {\n return cache.delete(cacheUrl);\n }));\n\n return cachedRequestsToDelete.map(function (request) {\n return request.url;\n });\n })();\n }\n\n /**\n * Goes through all entries in indexedDB and removes any that are outdated.\n *\n * @private\n * @param {Array} expectedCacheUrls Array of URLs that are\n * expected to be cached.\n * @return {Promise>} Resolves to an array of URLs removed\n * from indexedDB.\n */\n _cleanupDetailsModel(expectedCacheUrls) {\n var _this6 = this;\n\n return babelHelpers.asyncToGenerator(function* () {\n const revisionedEntries = yield _this6._precacheDetailsModel._getAllEntries();\n const detailsToDelete = revisionedEntries.filter(function (entry) {\n const fullUrl = new URL(entry.value.url, location).toString();\n return !expectedCacheUrls.includes(fullUrl);\n });\n\n yield Promise.all(detailsToDelete.map(function (entry) {\n return _this6._precacheDetailsModel._deleteEntry(entry.primaryKey);\n }));\n return detailsToDelete.map(function (entry) {\n return entry.value.url;\n });\n })();\n }\n\n /**\n * Returns an array of fully qualified URL's that will be precached.\n *\n * @return {Array} An array of URLs.\n */\n getCachedUrls() {\n return Array.from(this._entriesToCacheMap.keys()).map(url => new URL(url, location).href);\n }\n }\n\n /*\n Copyright 2017 Google Inc.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n https://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n */\n\n var publicAPI = /*#__PURE__*/Object.freeze({\n PrecacheController: PrecacheController\n });\n\n /*\n Copyright 2017 Google Inc.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n https://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n */\n\n {\n assert_mjs.assert.isSwEnv('workbox-precaching');\n }\n\n let installActivateListenersAdded = false;\n let fetchListenersAdded = false;\n let suppressWarnings = false;\n let plugins = [];\n\n const cacheName = cacheNames_mjs.cacheNames.getPrecacheName();\n const precacheController = new PrecacheController(cacheName);\n\n const _removeIgnoreUrlParams = (origUrlObject, ignoreUrlParametersMatching) => {\n // Exclude initial '?'\n const searchString = origUrlObject.search.slice(1);\n\n // Split into an array of 'key=value' strings\n const keyValueStrings = searchString.split('&');\n const keyValuePairs = keyValueStrings.map(keyValueString => {\n // Split each 'key=value' string into a [key, value] array\n return keyValueString.split('=');\n });\n const filteredKeyValuesPairs = keyValuePairs.filter(keyValuePair => {\n return ignoreUrlParametersMatching.every(ignoredRegex => {\n // Return true iff the key doesn't match any of the regexes.\n return !ignoredRegex.test(keyValuePair[0]);\n });\n });\n const filteredStrings = filteredKeyValuesPairs.map(keyValuePair => {\n // Join each [key, value] array into a 'key=value' string\n return keyValuePair.join('=');\n });\n\n // Join the array of 'key=value' strings into a string with '&' in\n // between each\n const urlClone = new URL(origUrlObject);\n urlClone.search = filteredStrings.join('&');\n return urlClone;\n };\n\n /**\n * This function will take the request URL and manipulate it based on the\n * configuration options.\n *\n * @param {string} url\n * @param {Object} options\n * @return {string|null} Returns the URL in the cache that matches the request\n * if available, other null.\n *\n * @private\n */\n const _getPrecachedUrl = (url, {\n ignoreUrlParametersMatching = [/^utm_/],\n directoryIndex = 'index.html',\n cleanUrls = true,\n urlManipulation = null\n } = {}) => {\n const urlObject = new URL(url, location);\n\n // Change '/some-url#123' => '/some-url'\n urlObject.hash = '';\n\n const urlWithoutIgnoredParams = _removeIgnoreUrlParams(urlObject, ignoreUrlParametersMatching);\n\n let urlsToAttempt = [\n // Test the URL that was fetched\n urlObject,\n // Test the URL without search params\n urlWithoutIgnoredParams];\n\n // Test the URL with a directory index\n if (directoryIndex && urlWithoutIgnoredParams.pathname.endsWith('/')) {\n const directoryUrl = new URL(urlWithoutIgnoredParams);\n directoryUrl.pathname += directoryIndex;\n urlsToAttempt.push(directoryUrl);\n }\n\n // Test the URL with a '.html' extension\n if (cleanUrls) {\n const cleanUrl = new URL(urlWithoutIgnoredParams);\n cleanUrl.pathname += '.html';\n urlsToAttempt.push(cleanUrl);\n }\n\n if (urlManipulation) {\n const additionalUrls = urlManipulation({ url: urlObject });\n urlsToAttempt = urlsToAttempt.concat(additionalUrls);\n }\n\n const cachedUrls = precacheController.getCachedUrls();\n for (const possibleUrl of urlsToAttempt) {\n if (cachedUrls.indexOf(possibleUrl.href) !== -1) {\n // It's a perfect match\n {\n logger_mjs.logger.debug(`Precaching found a match for ` + getFriendlyURL_mjs.getFriendlyURL(possibleUrl.toString()));\n }\n return possibleUrl.href;\n }\n }\n\n return null;\n };\n\n const moduleExports = {};\n\n /**\n * Add items to the precache list, removing any duplicates and\n * store the files in the\n * [\"precache cache\"]{@link module:workbox-core.cacheNames} when the service\n * worker installs.\n *\n * This method can be called multiple times.\n *\n * Please note: This method **will not** serve any of the cached files for you,\n * it only precaches files. To respond to a network request you call\n * [addRoute()]{@link module:workbox-precaching.addRoute}.\n *\n * If you have a single array of files to precache, you can just call\n * [precacheAndRoute()]{@link module:workbox-precaching.precacheAndRoute}.\n *\n * @param {Array} entries Array of entries to precache.\n *\n * @alias workbox.precaching.precache\n */\n moduleExports.precache = entries => {\n precacheController.addToCacheList(entries);\n\n if (installActivateListenersAdded || entries.length <= 0) {\n return;\n }\n\n installActivateListenersAdded = true;\n self.addEventListener('install', event => {\n event.waitUntil(precacheController.install({\n event,\n plugins,\n suppressWarnings\n }));\n });\n self.addEventListener('activate', event => {\n event.waitUntil(precacheController.activate({\n event,\n plugins\n }));\n });\n };\n\n /**\n * Add a `fetch` listener to the service worker that will\n * respond to\n * [network requests]{@link https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API/Using_Service_Workers#Custom_responses_to_requests}\n * with precached assets.\n *\n * Requests for assets that aren't precached, the `FetchEvent` will not be\n * responded to, allowing the event to fall through to other `fetch` event\n * listeners.\n *\n * @param {Object} options\n * @param {string} [options.directoryIndex=index.html] The `directoryIndex` will\n * check cache entries for a URLs ending with '/' to see if there is a hit when\n * appending the `directoryIndex` value.\n * @param {Array} [options.ignoreUrlParametersMatching=[/^utm_/]] An\n * array of regex's to remove search params when looking for a cache match.\n * @param {boolean} [options.cleanUrls=true] The `cleanUrls` option will\n * check the cache for the URL with a `.html` added to the end of the end.\n * @param {workbox.precaching~urlManipulation} [options.urlManipulation]\n * This is a function that should take a URL and return an array of\n * alternative URL's that should be checked for precache matches.\n *\n * @alias workbox.precaching.addRoute\n */\n moduleExports.addRoute = options => {\n if (fetchListenersAdded) {\n // TODO: Throw error here.\n return;\n }\n\n fetchListenersAdded = true;\n self.addEventListener('fetch', event => {\n const precachedUrl = _getPrecachedUrl(event.request.url, options);\n if (!precachedUrl) {\n {\n logger_mjs.logger.debug(`Precaching found no match for ` + getFriendlyURL_mjs.getFriendlyURL(event.request.url));\n }\n return;\n }\n\n let responsePromise = caches.open(cacheName).then(cache => {\n return cache.match(precachedUrl);\n }).then(cachedResponse => {\n if (cachedResponse) {\n return cachedResponse;\n }\n\n // Fall back to the network if we don't have a cached response (perhaps\n // due to manual cache cleanup).\n {\n logger_mjs.logger.debug(`The precached response for ` + `${getFriendlyURL_mjs.getFriendlyURL(precachedUrl)} in ${cacheName} was not found. ` + `Falling back to the network instead.`);\n }\n\n return fetch(precachedUrl);\n });\n\n {\n responsePromise = responsePromise.then(response => {\n // Workbox is going to handle the route.\n // print the routing details to the console.\n logger_mjs.logger.groupCollapsed(`Precaching is responding to: ` + getFriendlyURL_mjs.getFriendlyURL(event.request.url));\n logger_mjs.logger.log(`Serving the precached url: ${precachedUrl}`);\n\n // The Request and Response objects contains a great deal of\n // information, hide it under a group in case developers want to see it.\n logger_mjs.logger.groupCollapsed(`View request details here.`);\n logger_mjs.logger.unprefixed.log(event.request);\n logger_mjs.logger.groupEnd();\n\n logger_mjs.logger.groupCollapsed(`View response details here.`);\n logger_mjs.logger.unprefixed.log(response);\n logger_mjs.logger.groupEnd();\n\n logger_mjs.logger.groupEnd();\n return response;\n });\n }\n event.respondWith(responsePromise);\n });\n };\n\n /**\n * This method will add entries to the precache list and add a route to\n * respond to fetch events.\n *\n * This is a convenience method that will call\n * [precache()]{@link module:workbox-precaching.precache} and\n * [addRoute()]{@link module:workbox-precaching.addRoute} in a single call.\n *\n * @param {Array} entries Array of entries to precache.\n * @param {Object} options See\n * [addRoute() options]{@link module:workbox-precaching.addRoute}.\n *\n * @alias workbox.precaching.precacheAndRoute\n */\n moduleExports.precacheAndRoute = (entries, options) => {\n moduleExports.precache(entries);\n moduleExports.addRoute(options);\n };\n\n /**\n * Warnings will be logged if any of the precached assets are entered without\n * a `revision` property. This is extremely dangerous if the URL's aren't\n * revisioned. However, the warnings can be supressed with this method.\n *\n * @param {boolean} suppress\n *\n * @alias workbox.precaching.suppressWarnings\n */\n moduleExports.suppressWarnings = suppress => {\n suppressWarnings = suppress;\n };\n\n /**\n * Add plugins to precaching.\n *\n * @param {Array} newPlugins\n *\n * @alias workbox.precaching.addPlugins\n */\n moduleExports.addPlugins = newPlugins => {\n plugins = plugins.concat(newPlugins);\n };\n\n /*\n Copyright 2017 Google Inc.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n https://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n */\n\n const finalExport = Object.assign(moduleExports, publicAPI);\n\n return finalExport;\n\n}(workbox.core._private,workbox.core._private,workbox.core._private,workbox.core._private,workbox.core._private,workbox.core._private,workbox.core._private,workbox.core._private));\n"],"file":"workbox-precaching.dev.js"} \ No newline at end of file diff --git a/assets/js/workbox-v3.6.3/workbox-precaching.prod.js b/assets/js/workbox-v3.6.3/workbox-precaching.prod.js new file mode 100644 index 0000000..ba9e3f8 --- /dev/null +++ b/assets/js/workbox-v3.6.3/workbox-precaching.prod.js @@ -0,0 +1,3 @@ +this.workbox=this.workbox||{},this.workbox.precaching=function(e,t,n,r,s){"use strict";try{self.workbox.v["workbox:precaching:3.6.3"]=1}catch(e){}class i{constructor(e,t,n,r){this.e=e,this.t=t,this.n=n;const s=new Request(t,{credentials:"same-origin"});this.r=s,this.s=r?this.i(s):s}i(e){let t=e.url;const n={credentials:"same-origin"};if("cache"in Request.prototype)n.cache="reload";else{const e=new URL(t,location),n=encodeURIComponent;e.search+=(e.search?"&":"")+n("_workbox-cache-bust")+"="+n(this.n),t=e.toString()}return new Request(t,n)}}const c="revision",o="url",l="precached-details-models";class a{constructor(t){const n=t.replace(/[^\w-]/g,"_");this.c=new e.DBWrapper(n,2,{onupgradeneeded:this.o})}o(e){const t=e.target.result;e.oldVersion<2&&(t.objectStoreNames.contains("workbox-precaching")&&t.deleteObjectStore("workbox-precaching"),t.objectStoreNames.contains(l)&&t.deleteObjectStore(l)),t.createObjectStore(l)}l(e,t){var n=this;return babelHelpers.asyncToGenerator(function*(){return(yield n.a(t.t))===t.n&&!!(yield(yield caches.open(e)).match(t.r))})()}u(){var e=this;return babelHelpers.asyncToGenerator(function*(){return yield e.c.getAllMatching(l,{includeKeys:!0})})()}a(e){var t=this;return babelHelpers.asyncToGenerator(function*(){const n=yield t.c.get(l,e);return n?n[c]:null})()}d(e){var t=this;return babelHelpers.asyncToGenerator(function*(){yield t.c.put(l,{[c]:e.n,[o]:e.r.url},e.t)})()}h(e){var t=this;return babelHelpers.asyncToGenerator(function*(){yield t.c.delete(l,e)})()}}const u=(d=babelHelpers.asyncToGenerator(function*(e){const t=e.clone(),n=yield"body"in t?Promise.resolve(t.body):t.blob();return new Response(n,{headers:t.headers,status:t.status,statusText:t.statusText})}),function(e){return d.apply(this,arguments)});var d;class h{constructor(e){this.p=t.cacheNames.getPrecacheName(e),this.f=new Map,this.y=new a(this.p)}addToCacheList(e){e.map(e=>{this.b(this.w(e))})}w(e){switch(typeof e){case"string":return new i(e,e,e);case"object":return new i(e,e.url,e.revision||e.url,!!e.revision);default:throw new n.WorkboxError("add-to-cache-list-unexpected-type",{entry:e})}}b(e){const t=this.f.get(e.t);if(t){if(t.n!==e.n)throw new n.WorkboxError("add-to-cache-list-conflicting-entries",{firstEntry:t.e,secondEntry:e.e})}else this.f.set(e.t,e)}install({suppressWarnings:e=!1,event:t,plugins:n}={}){var r=this;return babelHelpers.asyncToGenerator(function*(){const e=yield caches.open(r.g()),s=yield e.keys();yield Promise.all(s.map(function(t){return e.delete(t)}));const i=[],c=[];for(const e of r.f.values())(yield r.y.l(r.p,e))?c.push(e):i.push(e);return yield Promise.all(i.map(function(e){return r.m({event:t,plugins:n,precacheEntry:e})})),{updatedEntries:i,notUpdatedEntries:c}})()}activate(e={}){var t=this;return babelHelpers.asyncToGenerator(function*(){const n=yield caches.open(t.g()),r=yield n.keys();for(const i of r){const r=yield n.match(i);yield s.cacheWrapper.put({cacheName:t.p,request:i,response:r,plugins:e.plugins}),yield n.delete(i)}return t.R()})()}g(){return`${this.p}-temp`}m({precacheEntry:e,event:t,plugins:n}){var i=this;return babelHelpers.asyncToGenerator(function*(){let c=yield r.fetchWrapper.fetch({request:e.s,event:t,fetchOptions:null,plugins:n});return c.redirected&&(c=yield u(c)),yield s.cacheWrapper.put({cacheName:i.g(),request:e.r,response:c,event:t,plugins:n}),yield i.y.d(e),!0})()}R(){var e=this;return babelHelpers.asyncToGenerator(function*(){const t=[];e.f.forEach(function(e){const n=new URL(e.r.url,location).toString();t.push(n)});const[n,r]=yield Promise.all([e._(t),e.U(t)]);return{deletedCacheRequests:n,deletedRevisionDetails:r}})()}_(e){var t=this;return babelHelpers.asyncToGenerator(function*(){if(!(yield caches.has(t.p)))return[];const n=yield caches.open(t.p),r=(yield n.keys()).filter(function(t){return!e.includes(new URL(t.url,location).toString())});return yield Promise.all(r.map(function(e){return n.delete(e)})),r.map(function(e){return e.url})})()}U(e){var t=this;return babelHelpers.asyncToGenerator(function*(){const n=(yield t.y.u()).filter(function(t){const n=new URL(t.value.url,location).toString();return!e.includes(n)});return yield Promise.all(n.map(function(e){return t.y.h(e.primaryKey)})),n.map(function(e){return e.value.url})})()}getCachedUrls(){return Array.from(this.f.keys()).map(e=>new URL(e,location).href)}}var p=Object.freeze({PrecacheController:h});let f=!1,y=!1,b=!1,w=[];const g=t.cacheNames.getPrecacheName(),v=new h(g),m=(e,{ignoreUrlParametersMatching:t=[/^utm_/],directoryIndex:n="index.html",cleanUrls:r=!0,urlManipulation:s=null}={})=>{const i=new URL(e,location);i.hash="";const c=((e,t)=>{const n=e.search.slice(1).split("&").map(e=>e.split("=")).filter(e=>t.every(t=>!t.test(e[0]))).map(e=>e.join("=")),r=new URL(e);return r.search=n.join("&"),r})(i,t);let o=[i,c];if(n&&c.pathname.endsWith("/")){const e=new URL(c);e.pathname+=n,o.push(e)}if(r){const e=new URL(c);e.pathname+=".html",o.push(e)}if(s){const e=s({url:i});o=o.concat(e)}const l=v.getCachedUrls();for(const e of o)if(-1!==l.indexOf(e.href))return e.href;return null},R={precache:e=>{v.addToCacheList(e),f||e.length<=0||(f=!0,self.addEventListener("install",e=>{e.waitUntil(v.install({event:e,plugins:w,suppressWarnings:b}))}),self.addEventListener("activate",e=>{e.waitUntil(v.activate({event:e,plugins:w}))}))},addRoute:e=>{y||(y=!0,self.addEventListener("fetch",t=>{const n=m(t.request.url,e);if(!n)return;let r=caches.open(g).then(e=>e.match(n)).then(e=>e||fetch(n));t.respondWith(r)}))},precacheAndRoute:(e,t)=>{R.precache(e),R.addRoute(t)},suppressWarnings:e=>{b=e},addPlugins:e=>{w=w.concat(e)}};return Object.assign(R,p)}(workbox.core._private,workbox.core._private,workbox.core._private,workbox.core._private,workbox.core._private); + +//# sourceMappingURL=workbox-precaching.prod.js.map diff --git a/assets/js/workbox-v3.6.3/workbox-precaching.prod.js.map b/assets/js/workbox-v3.6.3/workbox-precaching.prod.js.map new file mode 100644 index 0000000..65469ab --- /dev/null +++ b/assets/js/workbox-v3.6.3/workbox-precaching.prod.js.map @@ -0,0 +1 @@ +{"version":3,"names":[],"mappings":"","sources":["packages/workbox-precaching/browser.mjs"],"sourcesContent":["this.workbox=this.workbox||{},this.workbox.precaching=function(e,t,n,r,s){\"use strict\";try{self.workbox.v[\"workbox:precaching:3.6.3\"]=1}catch(e){}class i{constructor(e,t,n,r){this.e=e,this.t=t,this.n=n;const s=new Request(t,{credentials:\"same-origin\"});this.r=s,this.s=r?this.i(s):s}i(e){let t=e.url;const n={credentials:\"same-origin\"};if(\"cache\"in Request.prototype)n.cache=\"reload\";else{const e=new URL(t,location),n=encodeURIComponent;e.search+=(e.search?\"&\":\"\")+n(\"_workbox-cache-bust\")+\"=\"+n(this.n),t=e.toString()}return new Request(t,n)}}const c=\"revision\",o=\"url\",l=\"precached-details-models\";class a{constructor(t){const n=t.replace(/[^\\w-]/g,\"_\");this.c=new e.DBWrapper(n,2,{onupgradeneeded:this.o})}o(e){const t=e.target.result;e.oldVersion<2&&(t.objectStoreNames.contains(\"workbox-precaching\")&&t.deleteObjectStore(\"workbox-precaching\"),t.objectStoreNames.contains(l)&&t.deleteObjectStore(l)),t.createObjectStore(l)}l(e,t){var n=this;return babelHelpers.asyncToGenerator(function*(){return(yield n.a(t.t))===t.n&&!!(yield(yield caches.open(e)).match(t.r))})()}u(){var e=this;return babelHelpers.asyncToGenerator(function*(){return yield e.c.getAllMatching(l,{includeKeys:!0})})()}a(e){var t=this;return babelHelpers.asyncToGenerator(function*(){const n=yield t.c.get(l,e);return n?n[c]:null})()}d(e){var t=this;return babelHelpers.asyncToGenerator(function*(){yield t.c.put(l,{[c]:e.n,[o]:e.r.url},e.t)})()}h(e){var t=this;return babelHelpers.asyncToGenerator(function*(){yield t.c.delete(l,e)})()}}const u=(d=babelHelpers.asyncToGenerator(function*(e){const t=e.clone(),n=yield\"body\"in t?Promise.resolve(t.body):t.blob();return new Response(n,{headers:t.headers,status:t.status,statusText:t.statusText})}),function(e){return d.apply(this,arguments)});var d;class h{constructor(e){this.p=t.cacheNames.getPrecacheName(e),this.f=new Map,this.y=new a(this.p)}addToCacheList(e){e.map(e=>{this.b(this.w(e))})}w(e){switch(typeof e){case\"string\":return new i(e,e,e);case\"object\":return new i(e,e.url,e.revision||e.url,!!e.revision);default:throw new n.WorkboxError(\"add-to-cache-list-unexpected-type\",{entry:e})}}b(e){const t=this.f.get(e.t);if(t){if(t.n!==e.n)throw new n.WorkboxError(\"add-to-cache-list-conflicting-entries\",{firstEntry:t.e,secondEntry:e.e})}else this.f.set(e.t,e)}install({suppressWarnings:e=!1,event:t,plugins:n}={}){var r=this;return babelHelpers.asyncToGenerator(function*(){const e=yield caches.open(r.g()),s=yield e.keys();yield Promise.all(s.map(function(t){return e.delete(t)}));const i=[],c=[];for(const e of r.f.values())(yield r.y.l(r.p,e))?c.push(e):i.push(e);return yield Promise.all(i.map(function(e){return r.m({event:t,plugins:n,precacheEntry:e})})),{updatedEntries:i,notUpdatedEntries:c}})()}activate(e={}){var t=this;return babelHelpers.asyncToGenerator(function*(){const n=yield caches.open(t.g()),r=yield n.keys();for(const i of r){const r=yield n.match(i);yield s.cacheWrapper.put({cacheName:t.p,request:i,response:r,plugins:e.plugins}),yield n.delete(i)}return t.R()})()}g(){return`${this.p}-temp`}m({precacheEntry:e,event:t,plugins:n}){var i=this;return babelHelpers.asyncToGenerator(function*(){let c=yield r.fetchWrapper.fetch({request:e.s,event:t,fetchOptions:null,plugins:n});return c.redirected&&(c=yield u(c)),yield s.cacheWrapper.put({cacheName:i.g(),request:e.r,response:c,event:t,plugins:n}),yield i.y.d(e),!0})()}R(){var e=this;return babelHelpers.asyncToGenerator(function*(){const t=[];e.f.forEach(function(e){const n=new URL(e.r.url,location).toString();t.push(n)});const[n,r]=yield Promise.all([e._(t),e.U(t)]);return{deletedCacheRequests:n,deletedRevisionDetails:r}})()}_(e){var t=this;return babelHelpers.asyncToGenerator(function*(){if(!(yield caches.has(t.p)))return[];const n=yield caches.open(t.p),r=(yield n.keys()).filter(function(t){return!e.includes(new URL(t.url,location).toString())});return yield Promise.all(r.map(function(e){return n.delete(e)})),r.map(function(e){return e.url})})()}U(e){var t=this;return babelHelpers.asyncToGenerator(function*(){const n=(yield t.y.u()).filter(function(t){const n=new URL(t.value.url,location).toString();return!e.includes(n)});return yield Promise.all(n.map(function(e){return t.y.h(e.primaryKey)})),n.map(function(e){return e.value.url})})()}getCachedUrls(){return Array.from(this.f.keys()).map(e=>new URL(e,location).href)}}var p=Object.freeze({PrecacheController:h});let f=!1,y=!1,b=!1,w=[];const g=t.cacheNames.getPrecacheName(),v=new h(g),m=(e,{ignoreUrlParametersMatching:t=[/^utm_/],directoryIndex:n=\"index.html\",cleanUrls:r=!0,urlManipulation:s=null}={})=>{const i=new URL(e,location);i.hash=\"\";const c=((e,t)=>{const n=e.search.slice(1).split(\"&\").map(e=>e.split(\"=\")).filter(e=>t.every(t=>!t.test(e[0]))).map(e=>e.join(\"=\")),r=new URL(e);return r.search=n.join(\"&\"),r})(i,t);let o=[i,c];if(n&&c.pathname.endsWith(\"/\")){const e=new URL(c);e.pathname+=n,o.push(e)}if(r){const e=new URL(c);e.pathname+=\".html\",o.push(e)}if(s){const e=s({url:i});o=o.concat(e)}const l=v.getCachedUrls();for(const e of o)if(-1!==l.indexOf(e.href))return e.href;return null},R={precache:e=>{v.addToCacheList(e),f||e.length<=0||(f=!0,self.addEventListener(\"install\",e=>{e.waitUntil(v.install({event:e,plugins:w,suppressWarnings:b}))}),self.addEventListener(\"activate\",e=>{e.waitUntil(v.activate({event:e,plugins:w}))}))},addRoute:e=>{y||(y=!0,self.addEventListener(\"fetch\",t=>{const n=m(t.request.url,e);if(!n)return;let r=caches.open(g).then(e=>e.match(n)).then(e=>e||fetch(n));t.respondWith(r)}))},precacheAndRoute:(e,t)=>{R.precache(e),R.addRoute(t)},suppressWarnings:e=>{b=e},addPlugins:e=>{w=w.concat(e)}};return Object.assign(R,p)}(workbox.core._private,workbox.core._private,workbox.core._private,workbox.core._private,workbox.core._private);\n"],"file":"workbox-precaching.prod.js"} \ No newline at end of file diff --git a/assets/js/workbox-v3.6.3/workbox-range-requests.dev.js b/assets/js/workbox-v3.6.3/workbox-range-requests.dev.js new file mode 100644 index 0000000..6f36438 --- /dev/null +++ b/assets/js/workbox-v3.6.3/workbox-range-requests.dev.js @@ -0,0 +1,299 @@ +this.workbox = this.workbox || {}; +this.workbox.rangeRequests = (function (exports,WorkboxError_mjs,assert_mjs,logger_mjs) { + 'use strict'; + + try { + self.workbox.v['workbox:range-requests:3.6.3'] = 1; + } catch (e) {} // eslint-disable-line + + /* + Copyright 2017 Google Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + https://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + + /** + * @param {Blob} blob A source blob. + * @param {number|null} start The offset to use as the start of the + * slice. + * @param {number|null} end The offset to use as the end of the slice. + * @return {Object} An object with `start` and `end` properties, reflecting + * the effective boundaries to use given the size of the blob. + * + * @private + */ + function calculateEffectiveBoundaries(blob, start, end) { + { + assert_mjs.assert.isInstance(blob, Blob, { + moduleName: 'workbox-range-requests', + funcName: 'calculateEffectiveBoundaries', + paramName: 'blob' + }); + } + + const blobSize = blob.size; + + if (end > blobSize || start < 0) { + throw new WorkboxError_mjs.WorkboxError('range-not-satisfiable', { + size: blobSize, + end, + start + }); + } + + let effectiveStart; + let effectiveEnd; + + if (start === null) { + effectiveStart = blobSize - end; + effectiveEnd = blobSize; + } else if (end === null) { + effectiveStart = start; + effectiveEnd = blobSize; + } else { + effectiveStart = start; + // Range values are inclusive, so add 1 to the value. + effectiveEnd = end + 1; + } + + return { + start: effectiveStart, + end: effectiveEnd + }; + } + + /* + Copyright 2017 Google Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + https://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + + /** + * @param {string} rangeHeader A Range: header value. + * @return {Object} An object with `start` and `end` properties, reflecting + * the parsed value of the Range: header. If either the `start` or `end` are + * omitted, then `null` will be returned. + * + * @private + */ + function parseRangeHeader(rangeHeader) { + { + assert_mjs.assert.isType(rangeHeader, 'string', { + moduleName: 'workbox-range-requests', + funcName: 'parseRangeHeader', + paramName: 'rangeHeader' + }); + } + + const normalizedRangeHeader = rangeHeader.trim().toLowerCase(); + if (!normalizedRangeHeader.startsWith('bytes=')) { + throw new WorkboxError_mjs.WorkboxError('unit-must-be-bytes', { normalizedRangeHeader }); + } + + // Specifying multiple ranges separate by commas is valid syntax, but this + // library only attempts to handle a single, contiguous sequence of bytes. + // https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Range#Syntax + if (normalizedRangeHeader.includes(',')) { + throw new WorkboxError_mjs.WorkboxError('single-range-only', { normalizedRangeHeader }); + } + + const rangeParts = /(\d*)-(\d*)/.exec(normalizedRangeHeader); + // We need either at least one of the start or end values. + if (rangeParts === null || !(rangeParts[1] || rangeParts[2])) { + throw new WorkboxError_mjs.WorkboxError('invalid-range-values', { normalizedRangeHeader }); + } + + return { + start: rangeParts[1] === '' ? null : Number(rangeParts[1]), + end: rangeParts[2] === '' ? null : Number(rangeParts[2]) + }; + } + + /** + * Given a `Request` and `Response` objects as input, this will return a + * promise for a new `Response`. + * + * @param {Request} request A request, which should contain a Range: + * header. + * @param {Response} originalResponse An original response containing the full + * content. + * @return {Promise} Either a `206 Partial Content` response, with + * the response body set to the slice of content specified by the request's + * `Range:` header, or a `416 Range Not Satisfiable` response if the + * conditions of the `Range:` header can't be met. + * + * @memberof workbox.rangeRequests + */ + let createPartialResponse = (() => { + var _ref = babelHelpers.asyncToGenerator(function* (request, originalResponse) { + try { + { + assert_mjs.assert.isInstance(request, Request, { + moduleName: 'workbox-range-requests', + funcName: 'createPartialResponse', + paramName: 'request' + }); + + assert_mjs.assert.isInstance(originalResponse, Response, { + moduleName: 'workbox-range-requests', + funcName: 'createPartialResponse', + paramName: 'originalResponse' + }); + } + + const rangeHeader = request.headers.get('range'); + if (!rangeHeader) { + throw new WorkboxError_mjs.WorkboxError('no-range-header'); + } + + const boundaries = parseRangeHeader(rangeHeader); + const originalBlob = yield originalResponse.blob(); + + const effectiveBoundaries = calculateEffectiveBoundaries(originalBlob, boundaries.start, boundaries.end); + + const slicedBlob = originalBlob.slice(effectiveBoundaries.start, effectiveBoundaries.end); + const slicedBlobSize = slicedBlob.size; + + const slicedResponse = new Response(slicedBlob, { + // Status code 206 is for a Partial Content response. + // See https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/206 + status: 206, + statusText: 'Partial Content', + headers: originalResponse.headers + }); + + slicedResponse.headers.set('Content-Length', slicedBlobSize); + slicedResponse.headers.set('Content-Range', `bytes ${effectiveBoundaries.start}-${effectiveBoundaries.end - 1}/` + originalBlob.size); + + return slicedResponse; + } catch (error) { + { + logger_mjs.logger.warn(`Unable to construct a partial response; returning a ` + `416 Range Not Satisfiable response instead.`); + logger_mjs.logger.groupCollapsed(`View details here.`); + logger_mjs.logger.unprefixed.log(error); + logger_mjs.logger.unprefixed.log(request); + logger_mjs.logger.unprefixed.log(originalResponse); + logger_mjs.logger.groupEnd(); + } + + return new Response('', { + status: 416, + statusText: 'Range Not Satisfiable' + }); + } + }); + + return function createPartialResponse(_x, _x2) { + return _ref.apply(this, arguments); + }; + })(); + + /* + Copyright 2016 Google Inc. All Rights Reserved. + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + http://www.apache.org/licenses/LICENSE-2.0 + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + + /** + * The range request plugin makes it easy for a request with a 'Range' header to + * be fulfilled by a cached response. + * + * It does this by intercepting the `cachedResponseWillBeUsed` plugin callback + * and returning the appropriate subset of the cached response body. + * + * @memberof workbox.rangeRequests + */ + class Plugin { + /** + * @param {Object} options + * @param {Request} options.request The original request, which may or may not + * contain a Range: header. + * @param {Response} options.cachedResponse The complete cached response. + * @return {Promise} If request contains a 'Range' header, then a + * new response with status 206 whose body is a subset of `cachedResponse` is + * returned. Otherwise, `cachedResponse` is returned as-is. + * + * @private + */ + cachedResponseWillBeUsed({ request, cachedResponse }) { + return babelHelpers.asyncToGenerator(function* () { + // Only return a sliced response if there's something valid in the cache, + // and there's a Range: header in the request. + if (cachedResponse && request.headers.has('range')) { + return yield createPartialResponse(request, cachedResponse); + } + + // If there was no Range: header, or if cachedResponse wasn't valid, just + // pass it through as-is. + return cachedResponse; + })(); + } + } + + /* + Copyright 2017 Google Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + https://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + + /* + Copyright 2017 Google Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + https://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + + exports.createPartialResponse = createPartialResponse; + exports.Plugin = Plugin; + + return exports; + +}({},workbox.core._private,workbox.core._private,workbox.core._private)); + +//# sourceMappingURL=workbox-range-requests.dev.js.map diff --git a/assets/js/workbox-v3.6.3/workbox-range-requests.dev.js.map b/assets/js/workbox-v3.6.3/workbox-range-requests.dev.js.map new file mode 100644 index 0000000..353692d --- /dev/null +++ b/assets/js/workbox-v3.6.3/workbox-range-requests.dev.js.map @@ -0,0 +1 @@ +{"version":3,"names":[],"mappings":"","sources":["packages/workbox-range-requests/browser.mjs"],"sourcesContent":["this.workbox = this.workbox || {};\nthis.workbox.rangeRequests = (function (exports,WorkboxError_mjs,assert_mjs,logger_mjs) {\n 'use strict';\n\n try {\n self.workbox.v['workbox:range-requests:3.6.3'] = 1;\n } catch (e) {} // eslint-disable-line\n\n /*\n Copyright 2017 Google Inc.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n https://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n */\n\n /**\n * @param {Blob} blob A source blob.\n * @param {number|null} start The offset to use as the start of the\n * slice.\n * @param {number|null} end The offset to use as the end of the slice.\n * @return {Object} An object with `start` and `end` properties, reflecting\n * the effective boundaries to use given the size of the blob.\n *\n * @private\n */\n function calculateEffectiveBoundaries(blob, start, end) {\n {\n assert_mjs.assert.isInstance(blob, Blob, {\n moduleName: 'workbox-range-requests',\n funcName: 'calculateEffectiveBoundaries',\n paramName: 'blob'\n });\n }\n\n const blobSize = blob.size;\n\n if (end > blobSize || start < 0) {\n throw new WorkboxError_mjs.WorkboxError('range-not-satisfiable', {\n size: blobSize,\n end,\n start\n });\n }\n\n let effectiveStart;\n let effectiveEnd;\n\n if (start === null) {\n effectiveStart = blobSize - end;\n effectiveEnd = blobSize;\n } else if (end === null) {\n effectiveStart = start;\n effectiveEnd = blobSize;\n } else {\n effectiveStart = start;\n // Range values are inclusive, so add 1 to the value.\n effectiveEnd = end + 1;\n }\n\n return {\n start: effectiveStart,\n end: effectiveEnd\n };\n }\n\n /*\n Copyright 2017 Google Inc.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n https://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n */\n\n /**\n * @param {string} rangeHeader A Range: header value.\n * @return {Object} An object with `start` and `end` properties, reflecting\n * the parsed value of the Range: header. If either the `start` or `end` are\n * omitted, then `null` will be returned.\n *\n * @private\n */\n function parseRangeHeader(rangeHeader) {\n {\n assert_mjs.assert.isType(rangeHeader, 'string', {\n moduleName: 'workbox-range-requests',\n funcName: 'parseRangeHeader',\n paramName: 'rangeHeader'\n });\n }\n\n const normalizedRangeHeader = rangeHeader.trim().toLowerCase();\n if (!normalizedRangeHeader.startsWith('bytes=')) {\n throw new WorkboxError_mjs.WorkboxError('unit-must-be-bytes', { normalizedRangeHeader });\n }\n\n // Specifying multiple ranges separate by commas is valid syntax, but this\n // library only attempts to handle a single, contiguous sequence of bytes.\n // https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Range#Syntax\n if (normalizedRangeHeader.includes(',')) {\n throw new WorkboxError_mjs.WorkboxError('single-range-only', { normalizedRangeHeader });\n }\n\n const rangeParts = /(\\d*)-(\\d*)/.exec(normalizedRangeHeader);\n // We need either at least one of the start or end values.\n if (rangeParts === null || !(rangeParts[1] || rangeParts[2])) {\n throw new WorkboxError_mjs.WorkboxError('invalid-range-values', { normalizedRangeHeader });\n }\n\n return {\n start: rangeParts[1] === '' ? null : Number(rangeParts[1]),\n end: rangeParts[2] === '' ? null : Number(rangeParts[2])\n };\n }\n\n /**\n * Given a `Request` and `Response` objects as input, this will return a\n * promise for a new `Response`.\n *\n * @param {Request} request A request, which should contain a Range:\n * header.\n * @param {Response} originalResponse An original response containing the full\n * content.\n * @return {Promise} Either a `206 Partial Content` response, with\n * the response body set to the slice of content specified by the request's\n * `Range:` header, or a `416 Range Not Satisfiable` response if the\n * conditions of the `Range:` header can't be met.\n *\n * @memberof workbox.rangeRequests\n */\n let createPartialResponse = (() => {\n var _ref = babelHelpers.asyncToGenerator(function* (request, originalResponse) {\n try {\n {\n assert_mjs.assert.isInstance(request, Request, {\n moduleName: 'workbox-range-requests',\n funcName: 'createPartialResponse',\n paramName: 'request'\n });\n\n assert_mjs.assert.isInstance(originalResponse, Response, {\n moduleName: 'workbox-range-requests',\n funcName: 'createPartialResponse',\n paramName: 'originalResponse'\n });\n }\n\n const rangeHeader = request.headers.get('range');\n if (!rangeHeader) {\n throw new WorkboxError_mjs.WorkboxError('no-range-header');\n }\n\n const boundaries = parseRangeHeader(rangeHeader);\n const originalBlob = yield originalResponse.blob();\n\n const effectiveBoundaries = calculateEffectiveBoundaries(originalBlob, boundaries.start, boundaries.end);\n\n const slicedBlob = originalBlob.slice(effectiveBoundaries.start, effectiveBoundaries.end);\n const slicedBlobSize = slicedBlob.size;\n\n const slicedResponse = new Response(slicedBlob, {\n // Status code 206 is for a Partial Content response.\n // See https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/206\n status: 206,\n statusText: 'Partial Content',\n headers: originalResponse.headers\n });\n\n slicedResponse.headers.set('Content-Length', slicedBlobSize);\n slicedResponse.headers.set('Content-Range', `bytes ${effectiveBoundaries.start}-${effectiveBoundaries.end - 1}/` + originalBlob.size);\n\n return slicedResponse;\n } catch (error) {\n {\n logger_mjs.logger.warn(`Unable to construct a partial response; returning a ` + `416 Range Not Satisfiable response instead.`);\n logger_mjs.logger.groupCollapsed(`View details here.`);\n logger_mjs.logger.unprefixed.log(error);\n logger_mjs.logger.unprefixed.log(request);\n logger_mjs.logger.unprefixed.log(originalResponse);\n logger_mjs.logger.groupEnd();\n }\n\n return new Response('', {\n status: 416,\n statusText: 'Range Not Satisfiable'\n });\n }\n });\n\n return function createPartialResponse(_x, _x2) {\n return _ref.apply(this, arguments);\n };\n })();\n\n /*\n Copyright 2016 Google Inc. All Rights Reserved.\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n http://www.apache.org/licenses/LICENSE-2.0\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n */\n\n /**\n * The range request plugin makes it easy for a request with a 'Range' header to\n * be fulfilled by a cached response.\n *\n * It does this by intercepting the `cachedResponseWillBeUsed` plugin callback\n * and returning the appropriate subset of the cached response body.\n *\n * @memberof workbox.rangeRequests\n */\n class Plugin {\n /**\n * @param {Object} options\n * @param {Request} options.request The original request, which may or may not\n * contain a Range: header.\n * @param {Response} options.cachedResponse The complete cached response.\n * @return {Promise} If request contains a 'Range' header, then a\n * new response with status 206 whose body is a subset of `cachedResponse` is\n * returned. Otherwise, `cachedResponse` is returned as-is.\n *\n * @private\n */\n cachedResponseWillBeUsed({ request, cachedResponse }) {\n return babelHelpers.asyncToGenerator(function* () {\n // Only return a sliced response if there's something valid in the cache,\n // and there's a Range: header in the request.\n if (cachedResponse && request.headers.has('range')) {\n return yield createPartialResponse(request, cachedResponse);\n }\n\n // If there was no Range: header, or if cachedResponse wasn't valid, just\n // pass it through as-is.\n return cachedResponse;\n })();\n }\n }\n\n /*\n Copyright 2017 Google Inc.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n https://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n */\n\n /*\n Copyright 2017 Google Inc.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n https://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n */\n\n exports.createPartialResponse = createPartialResponse;\n exports.Plugin = Plugin;\n\n return exports;\n\n}({},workbox.core._private,workbox.core._private,workbox.core._private));\n"],"file":"workbox-range-requests.dev.js"} \ No newline at end of file diff --git a/assets/js/workbox-v3.6.3/workbox-range-requests.prod.js b/assets/js/workbox-v3.6.3/workbox-range-requests.prod.js new file mode 100644 index 0000000..28c9903 --- /dev/null +++ b/assets/js/workbox-v3.6.3/workbox-range-requests.prod.js @@ -0,0 +1,3 @@ +this.workbox=this.workbox||{},this.workbox.rangeRequests=function(e,n){"use strict";try{self.workbox.v["workbox:range-requests:3.6.3"]=1}catch(e){}let t=(r=babelHelpers.asyncToGenerator(function*(e,t){try{const r=e.headers.get("range");if(!r)throw new n.WorkboxError("no-range-header");const s=function(e){const t=e.trim().toLowerCase();if(!t.startsWith("bytes="))throw new n.WorkboxError("unit-must-be-bytes",{normalizedRangeHeader:t});if(t.includes(","))throw new n.WorkboxError("single-range-only",{normalizedRangeHeader:t});const r=/(\d*)-(\d*)/.exec(t);if(null===r||!r[1]&&!r[2])throw new n.WorkboxError("invalid-range-values",{normalizedRangeHeader:t});return{start:""===r[1]?null:Number(r[1]),end:""===r[2]?null:Number(r[2])}}(r),a=yield t.blob(),i=function(e,t,r){const s=e.size;if(r>s||t<0)throw new n.WorkboxError("range-not-satisfiable",{size:s,end:r,start:t});let a,i;return null===t?(a=s-r,i=s):null===r?(a=t,i=s):(a=t,i=r+1),{start:a,end:i}}(a,s.start,s.end),l=a.slice(i.start,i.end),o=l.size,u=new Response(l,{status:206,statusText:"Partial Content",headers:t.headers});return u.headers.set("Content-Length",o),u.headers.set("Content-Range",`bytes ${i.start}-${i.end-1}/`+a.size),u}catch(e){return new Response("",{status:416,statusText:"Range Not Satisfiable"})}}),function(e,n){return r.apply(this,arguments)});var r;return e.createPartialResponse=t,e.Plugin=class{cachedResponseWillBeUsed({request:e,cachedResponse:n}){return babelHelpers.asyncToGenerator(function*(){return n&&e.headers.has("range")?yield t(e,n):n})()}},e}({},workbox.core._private); + +//# sourceMappingURL=workbox-range-requests.prod.js.map diff --git a/assets/js/workbox-v3.6.3/workbox-range-requests.prod.js.map b/assets/js/workbox-v3.6.3/workbox-range-requests.prod.js.map new file mode 100644 index 0000000..e0d9235 --- /dev/null +++ b/assets/js/workbox-v3.6.3/workbox-range-requests.prod.js.map @@ -0,0 +1 @@ +{"version":3,"names":[],"mappings":"","sources":["packages/workbox-range-requests/browser.mjs"],"sourcesContent":["this.workbox=this.workbox||{},this.workbox.rangeRequests=function(e,n){\"use strict\";try{self.workbox.v[\"workbox:range-requests:3.6.3\"]=1}catch(e){}let t=(r=babelHelpers.asyncToGenerator(function*(e,t){try{const r=e.headers.get(\"range\");if(!r)throw new n.WorkboxError(\"no-range-header\");const s=function(e){const t=e.trim().toLowerCase();if(!t.startsWith(\"bytes=\"))throw new n.WorkboxError(\"unit-must-be-bytes\",{normalizedRangeHeader:t});if(t.includes(\",\"))throw new n.WorkboxError(\"single-range-only\",{normalizedRangeHeader:t});const r=/(\\d*)-(\\d*)/.exec(t);if(null===r||!r[1]&&!r[2])throw new n.WorkboxError(\"invalid-range-values\",{normalizedRangeHeader:t});return{start:\"\"===r[1]?null:Number(r[1]),end:\"\"===r[2]?null:Number(r[2])}}(r),a=yield t.blob(),i=function(e,t,r){const s=e.size;if(r>s||t<0)throw new n.WorkboxError(\"range-not-satisfiable\",{size:s,end:r,start:t});let a,i;return null===t?(a=s-r,i=s):null===r?(a=t,i=s):(a=t,i=r+1),{start:a,end:i}}(a,s.start,s.end),l=a.slice(i.start,i.end),o=l.size,u=new Response(l,{status:206,statusText:\"Partial Content\",headers:t.headers});return u.headers.set(\"Content-Length\",o),u.headers.set(\"Content-Range\",`bytes ${i.start}-${i.end-1}/`+a.size),u}catch(e){return new Response(\"\",{status:416,statusText:\"Range Not Satisfiable\"})}}),function(e,n){return r.apply(this,arguments)});var r;return e.createPartialResponse=t,e.Plugin=class{cachedResponseWillBeUsed({request:e,cachedResponse:n}){return babelHelpers.asyncToGenerator(function*(){return n&&e.headers.has(\"range\")?yield t(e,n):n})()}},e}({},workbox.core._private);\n"],"file":"workbox-range-requests.prod.js"} \ No newline at end of file diff --git a/assets/js/workbox-v3.6.3/workbox-routing.dev.js b/assets/js/workbox-v3.6.3/workbox-routing.dev.js new file mode 100644 index 0000000..33dc4f0 --- /dev/null +++ b/assets/js/workbox-v3.6.3/workbox-routing.dev.js @@ -0,0 +1,863 @@ +this.workbox = this.workbox || {}; +this.workbox.routing = (function (assert_mjs,logger_mjs,WorkboxError_mjs,getFriendlyURL_mjs,cacheNames_mjs) { + 'use strict'; + + try { + self.workbox.v['workbox:routing:3.6.3'] = 1; + } catch (e) {} // eslint-disable-line + + /* + Copyright 2017 Google Inc. All Rights Reserved. + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + + /** + * The default HTTP method, 'GET', used when there's no specific method + * configured for a route. + * + * @type {string} + * + * @private + */ + const defaultMethod = 'GET'; + + /** + * The list of valid HTTP methods associated with requests that could be routed. + * + * @type {Array} + * + * @private + */ + const validMethods = ['DELETE', 'GET', 'HEAD', 'PATCH', 'POST', 'PUT']; + + /* + Copyright 2017 Google Inc. All Rights Reserved. + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + + /** + * @param {function()|Object} handler Either a function, or an object with a + * 'handle' method. + * @return {Object} An object with a handle method. + * + * @private + */ + var normalizeHandler = (handler => { + if (handler && typeof handler === 'object') { + { + assert_mjs.assert.hasMethod(handler, 'handle', { + moduleName: 'workbox-routing', + className: 'Route', + funcName: 'constructor', + paramName: 'handler' + }); + } + return handler; + } else { + { + assert_mjs.assert.isType(handler, 'function', { + moduleName: 'workbox-routing', + className: 'Route', + funcName: 'constructor', + paramName: 'handler' + }); + } + return { handle: handler }; + } + }); + + /* + Copyright 2017 Google Inc. All Rights Reserved. + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + + /** + * A `Route` consists of a pair of callback functions, "match" and "handler". + * The "match" callback determine if a route should be used to "handle" a + * request by returning a non-falsy value if it can. The "handler" callback + * is called when there is a match and should return a Promise that resolves + * to a `Response`. + * + * @memberof workbox.routing + */ + class Route { + /** + * Constructor for Route class. + * + * @param {workbox.routing.Route~matchCallback} match + * A callback function that determines whether the route matches a given + * `fetch` event by returning a non-falsy value. + * @param {workbox.routing.Route~handlerCallback} handler A callback + * function that returns a Promise resolving to a Response. + * @param {string} [method='GET'] The HTTP method to match the Route + * against. + */ + constructor(match, handler, method) { + { + assert_mjs.assert.isType(match, 'function', { + moduleName: 'workbox-routing', + className: 'Route', + funcName: 'constructor', + paramName: 'match' + }); + + if (method) { + assert_mjs.assert.isOneOf(method, validMethods, { paramName: 'method' }); + } + } + + // These values are referenced directly by Router so cannot be + // altered by minifification. + this.handler = normalizeHandler(handler); + this.match = match; + this.method = method || defaultMethod; + } + } + + /* + Copyright 2017 Google Inc. All Rights Reserved. + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + + /** + * RegExpRoute makes it easy to create a regular expression based + * [Route]{@link workbox.routing.Route}. + * + * For same-origin requests the RegExp only needs to match part of the URL. For + * requests against third-party servers, you must define a RegExp that matches + * the start of the URL. + * + * [See the module docs for info.]{@link https://developers.google.com/web/tools/workbox/modules/workbox-routing} + * + * @memberof workbox.routing + * @extends workbox.routing.Route + */ + class RegExpRoute extends Route { + /** + * If the regulard expression contains + * [capture groups]{@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp#grouping-back-references}, + * th ecaptured values will be passed to the + * [handler's]{@link workbox.routing.Route~handlerCallback} `params` + * argument. + * + * @param {RegExp} regExp The regular expression to match against URLs. + * @param {workbox.routing.Route~handlerCallback} handler A callback + * function that returns a Promise resulting in a Response. + * @param {string} [method='GET'] The HTTP method to match the Route + * against. + */ + constructor(regExp, handler, method) { + { + assert_mjs.assert.isInstance(regExp, RegExp, { + moduleName: 'workbox-routing', + className: 'RegExpRoute', + funcName: 'constructor', + paramName: 'pattern' + }); + } + + const match = ({ url }) => { + const result = regExp.exec(url.href); + + // Return null immediately if there's no match. + if (!result) { + return null; + } + + // Require that the match start at the first character in the URL string + // if it's a cross-origin request. + // See https://github.com/GoogleChrome/workbox/issues/281 for the context + // behind this behavior. + if (url.origin !== location.origin && result.index !== 0) { + { + logger_mjs.logger.debug(`The regular expression '${regExp}' only partially matched ` + `against the cross-origin URL '${url}'. RegExpRoute's will only ` + `handle cross-origin requests if they match the entire URL.`); + } + + return null; + } + + // If the route matches, but there aren't any capture groups defined, then + // this will return [], which is truthy and therefore sufficient to + // indicate a match. + // If there are capture groups, then it will return their values. + return result.slice(1); + }; + + super(match, handler, method); + } + } + + /* + Copyright 2017 Google Inc. All Rights Reserved. + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + + /** + * The Router can be used to process a FetchEvent through one or more + * [Routes]{@link workbox.routing.Route} responding with a Request if + * a matching route exists. + * + * If no route matches a given a request, the Router will use a "default" + * handler if one is defined. + * + * Should the matching Route throw an error, the Router will use a "catch" + * handler if one is defined to gracefully deal with issues and respond with a + * Request. + * + * If a request matches multiple routes, the **earliest** registered route will + * be used to respond to the request. + * + * @memberof workbox.routing + */ + class Router { + /** + * Initializes a new Router. + */ + constructor() { + // _routes will contain a mapping of HTTP method name ('GET', etc.) to an + // array of all the corresponding Route instances that are registered. + this._routes = new Map(); + } + + /** + * Apply the routing rules to a FetchEvent object to get a Response from an + * appropriate Route's handler. + * + * @param {FetchEvent} event The event from a service worker's 'fetch' event + * listener. + * @return {Promise|undefined} A promise is returned if a + * registered route can handle the FetchEvent's request. If there is no + * matching route and there's no `defaultHandler`, `undefined` is returned. + */ + handleRequest(event) { + { + assert_mjs.assert.isInstance(event, FetchEvent, { + moduleName: 'workbox-routing', + className: 'Router', + funcName: 'handleRequest', + paramName: 'event' + }); + } + + const url = new URL(event.request.url); + if (!url.protocol.startsWith('http')) { + { + logger_mjs.logger.debug(`Workbox Router only supports URLs that start with 'http'.`); + } + return; + } + + let route = null; + let handler = null; + let params = null; + let debugMessages = []; + + const result = this._findHandlerAndParams(event, url); + handler = result.handler; + params = result.params; + route = result.route; + { + if (handler) { + debugMessages.push([`Found a route to handle this request:`, route]); + + if (params) { + debugMessages.push([`Passing the following params to the route's handler:`, params]); + } + } + } + + // If we don't have a handler because there was no matching route, then + // fall back to defaultHandler if that's defined. + if (!handler && this._defaultHandler) { + { + debugMessages.push(`Failed to find a matching route. Falling ` + `back to the default handler.`); + + // This is used for debugging in logs in the case of an error. + route = '[Default Handler]'; + } + handler = this._defaultHandler; + } + + if (!handler) { + { + // No handler so Workbox will do nothing. If logs is set of debug + // i.e. verbose, we should print out this information. + logger_mjs.logger.debug(`No route found for: ${getFriendlyURL_mjs.getFriendlyURL(url)}`); + } + return; + } + + { + // We have a handler, meaning Workbox is going to handle the route. + // print the routing details to the console. + logger_mjs.logger.groupCollapsed(`Router is responding to: ${getFriendlyURL_mjs.getFriendlyURL(url)}`); + debugMessages.forEach(msg => { + if (Array.isArray(msg)) { + logger_mjs.logger.log(...msg); + } else { + logger_mjs.logger.log(msg); + } + }); + + // The Request and Response objects contains a great deal of information, + // hide it under a group in case developers want to see it. + logger_mjs.logger.groupCollapsed(`View request details here.`); + logger_mjs.logger.unprefixed.log(event.request); + logger_mjs.logger.groupEnd(); + + logger_mjs.logger.groupEnd(); + } + + // Wrap in try and catch in case the handle method throws a synchronous + // error. It should still callback to the catch handler. + let responsePromise; + try { + responsePromise = handler.handle({ url, event, params }); + } catch (err) { + responsePromise = Promise.reject(err); + } + + if (responsePromise && this._catchHandler) { + responsePromise = responsePromise.catch(err => { + { + // Still include URL here as it will be async from the console group + // and may not make sense without the URL + logger_mjs.logger.groupCollapsed(`Error thrown when responding to: ` + ` ${getFriendlyURL_mjs.getFriendlyURL(url)}. Falling back to Catch Handler.`); + logger_mjs.logger.unprefixed.error(`Error thrown by:`, route); + logger_mjs.logger.unprefixed.error(err); + logger_mjs.logger.groupEnd(); + } + return this._catchHandler.handle({ url, event, err }); + }); + } + + return responsePromise; + } + + /** + * Checks the incoming `event.request` against the registered routes, and if + * there's a match, returns the corresponding handler along with any params + * generated by the match. + * + * @param {FetchEvent} event + * @param {URL} url + * @return {Object} Returns an object with `handler` and `params` properties. + * They are populated if a matching route was found or `undefined` otherwise. + * + * @private + */ + _findHandlerAndParams(event, url) { + const routes = this._routes.get(event.request.method) || []; + for (const route of routes) { + let matchResult = route.match({ url, event }); + if (matchResult) { + if (Array.isArray(matchResult) && matchResult.length === 0) { + // Instead of passing an empty array in as params, use undefined. + matchResult = undefined; + } else if (matchResult.constructor === Object && Object.keys(matchResult).length === 0 || matchResult === true) { + // Instead of passing an empty object in as params, use undefined. + matchResult = undefined; + } + + // Break out of the loop and return the appropriate values as soon as + // we have a match. + return { + route, + params: matchResult, + handler: route.handler + }; + } + } + + // If we didn't have a match, then return undefined values. + return { handler: undefined, params: undefined }; + } + + /** + * Define a default `handler` that's called when no routes explicitly + * match the incoming request. + * + * Without a default handler, unmatched requests will go against the + * network as if there were no service worker present. + * + * @param {workbox.routing.Route~handlerCallback} handler A callback + * function that returns a Promise resulting in a Response. + */ + setDefaultHandler(handler) { + this._defaultHandler = normalizeHandler(handler); + } + + /** + * If a Route throws an error while handling a request, this `handler` + * will be called and given a chance to provide a response. + * + * @param {workbox.routing.Route~handlerCallback} handler A callback + * function that returns a Promise resulting in a Response. + */ + setCatchHandler(handler) { + this._catchHandler = normalizeHandler(handler); + } + + /** + * Registers a route with the router. + * + * @param {workbox.routing.Route} route The route to register. + */ + registerRoute(route) { + { + assert_mjs.assert.isType(route, 'object', { + moduleName: 'workbox-routing', + className: 'Router', + funcName: 'registerRoute', + paramName: 'route' + }); + + assert_mjs.assert.hasMethod(route, 'match', { + moduleName: 'workbox-routing', + className: 'Router', + funcName: 'registerRoute', + paramName: 'route' + }); + + assert_mjs.assert.isType(route.handler, 'object', { + moduleName: 'workbox-routing', + className: 'Router', + funcName: 'registerRoute', + paramName: 'route' + }); + + assert_mjs.assert.hasMethod(route.handler, 'handle', { + moduleName: 'workbox-routing', + className: 'Router', + funcName: 'registerRoute', + paramName: 'route.handler' + }); + + assert_mjs.assert.isType(route.method, 'string', { + moduleName: 'workbox-routing', + className: 'Router', + funcName: 'registerRoute', + paramName: 'route.method' + }); + } + + if (!this._routes.has(route.method)) { + this._routes.set(route.method, []); + } + + // Give precedence to all of the earlier routes by adding this additional + // route to the end of the array. + this._routes.get(route.method).push(route); + } + + /** + * Unregisters a route with the router. + * + * @param {workbox.routing.Route} route The route to unregister. + */ + unregisterRoute(route) { + if (!this._routes.has(route.method)) { + throw new WorkboxError_mjs.WorkboxError('unregister-route-but-not-found-with-method', { + method: route.method + }); + } + + const routeIndex = this._routes.get(route.method).indexOf(route); + if (routeIndex > -1) { + this._routes.get(route.method).splice(routeIndex, 1); + } else { + throw new WorkboxError_mjs.WorkboxError('unregister-route-route-not-registered'); + } + } + } + + /* + Copyright 2016 Google Inc. All Rights Reserved. + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + + /** + * NavigationRoute makes it easy to create a [Route]{@link + * workbox.routing.Route} that matches for browser + * [navigation requests]{@link https://developers.google.com/web/fundamentals/primers/service-workers/high-performance-loading#first_what_are_navigation_requests}. + * + * It will only match incoming Requests whose + * [`mode`]{@link https://fetch.spec.whatwg.org/#concept-request-mode} + * is set to `navigate`. + * + * You can optionally only apply this route to a subset of navigation requests + * by using one or both of the `blacklist` and `whitelist` parameters. + * + * @memberof workbox.routing + * @extends workbox.routing.Route + */ + class NavigationRoute extends Route { + /** + * If both `blacklist` and `whiltelist` are provided, the `blacklist` will + * take precedence and the request will not match this route. + * + * The regular expressions in `whitelist` and `blacklist` + * are matched against the concatenated + * [`pathname`]{@link https://developer.mozilla.org/en-US/docs/Web/API/HTMLHyperlinkElementUtils/pathname} + * and [`search`]{@link https://developer.mozilla.org/en-US/docs/Web/API/HTMLHyperlinkElementUtils/search} + * portions of the requested URL. + * + * @param {workbox.routing.Route~handlerCallback} handler A callback + * function that returns a Promise resulting in a Response. + * @param {Object} options + * @param {Array} [options.blacklist] If any of these patterns match, + * the route will not handle the request (even if a whitelist RegExp matches). + * @param {Array} [options.whitelist=[/./]] If any of these patterns + * match the URL's pathname and search parameter, the route will handle the + * request (assuming the blacklist doesn't match). + */ + constructor(handler, { whitelist = [/./], blacklist = [] } = {}) { + { + assert_mjs.assert.isArrayOfClass(whitelist, RegExp, { + moduleName: 'workbox-routing', + className: 'NavigationRoute', + funcName: 'constructor', + paramName: 'options.whitelist' + }); + assert_mjs.assert.isArrayOfClass(blacklist, RegExp, { + moduleName: 'workbox-routing', + className: 'NavigationRoute', + funcName: 'constructor', + paramName: 'options.blacklist' + }); + } + + super((...args) => this._match(...args), handler); + + this._whitelist = whitelist; + this._blacklist = blacklist; + } + + /** + * Routes match handler. + * + * @param {Object} options + * @param {FetchEvent} options.event + * @param {URL} options.url + * @return {boolean} + * + * @private + */ + _match({ event, url }) { + if (event.request.mode !== 'navigate') { + return false; + } + + const pathnameAndSearch = url.pathname + url.search; + + if (this._blacklist.some(regExp => regExp.test(pathnameAndSearch))) { + { + logger_mjs.logger.debug(`The navigation route is not being used, since the ` + `request URL matches both the whitelist and blacklist.`); + } + return false; + } + + if (this._whitelist.some(regExp => regExp.test(pathnameAndSearch))) { + { + logger_mjs.logger.debug(`The navigation route is being used.`); + } + return true; + } else { + { + logger_mjs.logger.debug(`The navigation route is not being used, since the ` + `URL being navigated to doesn't match the whitelist.`); + } + } + + return false; + } + } + + /* + Copyright 2017 Google Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + https://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + + var publicAPI = /*#__PURE__*/Object.freeze({ + RegExpRoute: RegExpRoute, + Route: Route, + Router: Router, + NavigationRoute: NavigationRoute + }); + + /* + Copyright 2017 Google Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + https://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + + { + assert_mjs.assert.isSwEnv('workbox-routing'); + } + + /** + * @private + */ + class DefaultRouter extends Router { + /** + * Easily register a RegExp, string, or function with a caching + * strategy to the Router. + * + * This method will generate a Route for you if needed and + * call [Router.registerRoute()]{@link + * workbox.routing.Router#registerRoute}. + * + * @param { + * RegExp| + * string| + * workbox.routing.Route~matchCallback| + * workbox.routing.Route + * } capture + * If the capture param is a `Route`, all other arguments will be ignored. + * @param {workbox.routing.Route~handlerCallback} handler A callback + * function that returns a Promise resulting in a Response. + * @param {string} [method='GET'] The HTTP method to match the Route + * against. + * @return {workbox.routing.Route} The generated `Route`(Useful for + * unregistering). + * + * @alias workbox.routing.registerRoute + */ + registerRoute(capture, handler, method = 'GET') { + let route; + + if (typeof capture === 'string') { + const captureUrl = new URL(capture, location); + + { + if (!(capture.startsWith('/') || capture.startsWith('http'))) { + throw new WorkboxError_mjs.WorkboxError('invalid-string', { + moduleName: 'workbox-routing', + className: 'DefaultRouter', + funcName: 'registerRoute', + paramName: 'capture' + }); + } + + // We want to check if Express-style wildcards are in the pathname only. + // TODO: Remove this log message in v4. + const valueToCheck = capture.startsWith('http') ? captureUrl.pathname : capture; + // See https://github.com/pillarjs/path-to-regexp#parameters + const wildcards = '[*:?+]'; + if (valueToCheck.match(new RegExp(`${wildcards}`))) { + logger_mjs.logger.debug(`The '$capture' parameter contains an Express-style wildcard ` + `character (${wildcards}). Strings are now always interpreted as ` + `exact matches; use a RegExp for partial or wildcard matches.`); + } + } + + const matchCallback = ({ url }) => { + { + if (url.pathname === captureUrl.pathname && url.origin !== captureUrl.origin) { + logger_mjs.logger.debug(`${capture} only partially matches the cross-origin URL ` + `${url}. This route will only handle cross-origin requests ` + `if they match the entire URL.`); + } + } + + return url.href === captureUrl.href; + }; + + route = new Route(matchCallback, handler, method); + } else if (capture instanceof RegExp) { + route = new RegExpRoute(capture, handler, method); + } else if (typeof capture === 'function') { + route = new Route(capture, handler, method); + } else if (capture instanceof Route) { + route = capture; + } else { + throw new WorkboxError_mjs.WorkboxError('unsupported-route-type', { + moduleName: 'workbox-routing', + className: 'DefaultRouter', + funcName: 'registerRoute', + paramName: 'capture' + }); + } + + super.registerRoute(route); + return route; + } + + /** + * Register a route that will return a precached file for a navigation + * request. This is useful for the + * [application shell pattern]{@link https://developers.google.com/web/fundamentals/architecture/app-shell}. + * + * This method will generate a + * [NavigationRoute]{@link workbox.routing.NavigationRoute} + * and call + * [Router.registerRoute()]{@link workbox.routing.Router#registerRoute} + * . + * + * @param {string} cachedAssetUrl + * @param {Object} [options] + * @param {string} [options.cacheName] Cache name to store and retrieve + * requests. Defaults to precache cache name provided by + * [workbox-core.cacheNames]{@link workbox.core.cacheNames}. + * @param {Array} [options.blacklist=[]] If any of these patterns + * match, the route will not handle the request (even if a whitelist entry + * matches). + * @param {Array} [options.whitelist=[/./]] If any of these patterns + * match the URL's pathname and search parameter, the route will handle the + * request (assuming the blacklist doesn't match). + * @return {workbox.routing.NavigationRoute} Returns the generated + * Route. + * + * @alias workbox.routing.registerNavigationRoute + */ + registerNavigationRoute(cachedAssetUrl, options = {}) { + { + assert_mjs.assert.isType(cachedAssetUrl, 'string', { + moduleName: 'workbox-routing', + className: '[default export]', + funcName: 'registerNavigationRoute', + paramName: 'cachedAssetUrl' + }); + } + + const cacheName = cacheNames_mjs.cacheNames.getPrecacheName(options.cacheName); + const handler = () => caches.match(cachedAssetUrl, { cacheName }).then(response => { + if (response) { + return response; + } + // This shouldn't normally happen, but there are edge cases: + // https://github.com/GoogleChrome/workbox/issues/1441 + throw new Error(`The cache ${cacheName} did not have an entry for ` + `${cachedAssetUrl}.`); + }).catch(error => { + // If there's either a cache miss, or the caches.match() call threw + // an exception, then attempt to fulfill the navigation request with + // a response from the network rather than leaving the user with a + // failed navigation. + { + logger_mjs.logger.debug(`Unable to respond to navigation request with cached ` + `response: ${error.message}. Falling back to network.`); + } + + // This might still fail if the browser is offline... + return fetch(cachedAssetUrl); + }); + + const route = new NavigationRoute(handler, { + whitelist: options.whitelist, + blacklist: options.blacklist + }); + super.registerRoute(route); + + return route; + } + } + + const router = new DefaultRouter(); + + // By default, register a fetch event listener that will respond to a request + // only if there's a matching route. + self.addEventListener('fetch', event => { + const responsePromise = router.handleRequest(event); + if (responsePromise) { + event.respondWith(responsePromise); + } + }); + + /* + Copyright 2017 Google Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + https://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + + const finalExport = Object.assign(router, publicAPI); + + return finalExport; + +}(workbox.core._private,workbox.core._private,workbox.core._private,workbox.core._private,workbox.core._private)); + +//# sourceMappingURL=workbox-routing.dev.js.map diff --git a/assets/js/workbox-v3.6.3/workbox-routing.dev.js.map b/assets/js/workbox-v3.6.3/workbox-routing.dev.js.map new file mode 100644 index 0000000..375e4f3 --- /dev/null +++ b/assets/js/workbox-v3.6.3/workbox-routing.dev.js.map @@ -0,0 +1 @@ +{"version":3,"names":[],"mappings":"","sources":["packages/workbox-routing/browser.mjs"],"sourcesContent":["this.workbox = this.workbox || {};\nthis.workbox.routing = (function (assert_mjs,logger_mjs,WorkboxError_mjs,getFriendlyURL_mjs,cacheNames_mjs) {\n 'use strict';\n\n try {\n self.workbox.v['workbox:routing:3.6.3'] = 1;\n } catch (e) {} // eslint-disable-line\n\n /*\n Copyright 2017 Google Inc. All Rights Reserved.\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n */\n\n /**\n * The default HTTP method, 'GET', used when there's no specific method\n * configured for a route.\n *\n * @type {string}\n *\n * @private\n */\n const defaultMethod = 'GET';\n\n /**\n * The list of valid HTTP methods associated with requests that could be routed.\n *\n * @type {Array}\n *\n * @private\n */\n const validMethods = ['DELETE', 'GET', 'HEAD', 'PATCH', 'POST', 'PUT'];\n\n /*\n Copyright 2017 Google Inc. All Rights Reserved.\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n */\n\n /**\n * @param {function()|Object} handler Either a function, or an object with a\n * 'handle' method.\n * @return {Object} An object with a handle method.\n *\n * @private\n */\n var normalizeHandler = (handler => {\n if (handler && typeof handler === 'object') {\n {\n assert_mjs.assert.hasMethod(handler, 'handle', {\n moduleName: 'workbox-routing',\n className: 'Route',\n funcName: 'constructor',\n paramName: 'handler'\n });\n }\n return handler;\n } else {\n {\n assert_mjs.assert.isType(handler, 'function', {\n moduleName: 'workbox-routing',\n className: 'Route',\n funcName: 'constructor',\n paramName: 'handler'\n });\n }\n return { handle: handler };\n }\n });\n\n /*\n Copyright 2017 Google Inc. All Rights Reserved.\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n */\n\n /**\n * A `Route` consists of a pair of callback functions, \"match\" and \"handler\".\n * The \"match\" callback determine if a route should be used to \"handle\" a\n * request by returning a non-falsy value if it can. The \"handler\" callback\n * is called when there is a match and should return a Promise that resolves\n * to a `Response`.\n *\n * @memberof workbox.routing\n */\n class Route {\n /**\n * Constructor for Route class.\n *\n * @param {workbox.routing.Route~matchCallback} match\n * A callback function that determines whether the route matches a given\n * `fetch` event by returning a non-falsy value.\n * @param {workbox.routing.Route~handlerCallback} handler A callback\n * function that returns a Promise resolving to a Response.\n * @param {string} [method='GET'] The HTTP method to match the Route\n * against.\n */\n constructor(match, handler, method) {\n {\n assert_mjs.assert.isType(match, 'function', {\n moduleName: 'workbox-routing',\n className: 'Route',\n funcName: 'constructor',\n paramName: 'match'\n });\n\n if (method) {\n assert_mjs.assert.isOneOf(method, validMethods, { paramName: 'method' });\n }\n }\n\n // These values are referenced directly by Router so cannot be\n // altered by minifification.\n this.handler = normalizeHandler(handler);\n this.match = match;\n this.method = method || defaultMethod;\n }\n }\n\n /*\n Copyright 2017 Google Inc. All Rights Reserved.\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n */\n\n /**\n * RegExpRoute makes it easy to create a regular expression based\n * [Route]{@link workbox.routing.Route}.\n *\n * For same-origin requests the RegExp only needs to match part of the URL. For\n * requests against third-party servers, you must define a RegExp that matches\n * the start of the URL.\n *\n * [See the module docs for info.]{@link https://developers.google.com/web/tools/workbox/modules/workbox-routing}\n *\n * @memberof workbox.routing\n * @extends workbox.routing.Route\n */\n class RegExpRoute extends Route {\n /**\n * If the regulard expression contains\n * [capture groups]{@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp#grouping-back-references},\n * th ecaptured values will be passed to the\n * [handler's]{@link workbox.routing.Route~handlerCallback} `params`\n * argument.\n *\n * @param {RegExp} regExp The regular expression to match against URLs.\n * @param {workbox.routing.Route~handlerCallback} handler A callback\n * function that returns a Promise resulting in a Response.\n * @param {string} [method='GET'] The HTTP method to match the Route\n * against.\n */\n constructor(regExp, handler, method) {\n {\n assert_mjs.assert.isInstance(regExp, RegExp, {\n moduleName: 'workbox-routing',\n className: 'RegExpRoute',\n funcName: 'constructor',\n paramName: 'pattern'\n });\n }\n\n const match = ({ url }) => {\n const result = regExp.exec(url.href);\n\n // Return null immediately if there's no match.\n if (!result) {\n return null;\n }\n\n // Require that the match start at the first character in the URL string\n // if it's a cross-origin request.\n // See https://github.com/GoogleChrome/workbox/issues/281 for the context\n // behind this behavior.\n if (url.origin !== location.origin && result.index !== 0) {\n {\n logger_mjs.logger.debug(`The regular expression '${regExp}' only partially matched ` + `against the cross-origin URL '${url}'. RegExpRoute's will only ` + `handle cross-origin requests if they match the entire URL.`);\n }\n\n return null;\n }\n\n // If the route matches, but there aren't any capture groups defined, then\n // this will return [], which is truthy and therefore sufficient to\n // indicate a match.\n // If there are capture groups, then it will return their values.\n return result.slice(1);\n };\n\n super(match, handler, method);\n }\n }\n\n /*\n Copyright 2017 Google Inc. All Rights Reserved.\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n */\n\n /**\n * The Router can be used to process a FetchEvent through one or more\n * [Routes]{@link workbox.routing.Route} responding with a Request if\n * a matching route exists.\n *\n * If no route matches a given a request, the Router will use a \"default\"\n * handler if one is defined.\n *\n * Should the matching Route throw an error, the Router will use a \"catch\"\n * handler if one is defined to gracefully deal with issues and respond with a\n * Request.\n *\n * If a request matches multiple routes, the **earliest** registered route will\n * be used to respond to the request.\n *\n * @memberof workbox.routing\n */\n class Router {\n /**\n * Initializes a new Router.\n */\n constructor() {\n // _routes will contain a mapping of HTTP method name ('GET', etc.) to an\n // array of all the corresponding Route instances that are registered.\n this._routes = new Map();\n }\n\n /**\n * Apply the routing rules to a FetchEvent object to get a Response from an\n * appropriate Route's handler.\n *\n * @param {FetchEvent} event The event from a service worker's 'fetch' event\n * listener.\n * @return {Promise|undefined} A promise is returned if a\n * registered route can handle the FetchEvent's request. If there is no\n * matching route and there's no `defaultHandler`, `undefined` is returned.\n */\n handleRequest(event) {\n {\n assert_mjs.assert.isInstance(event, FetchEvent, {\n moduleName: 'workbox-routing',\n className: 'Router',\n funcName: 'handleRequest',\n paramName: 'event'\n });\n }\n\n const url = new URL(event.request.url);\n if (!url.protocol.startsWith('http')) {\n {\n logger_mjs.logger.debug(`Workbox Router only supports URLs that start with 'http'.`);\n }\n return;\n }\n\n let route = null;\n let handler = null;\n let params = null;\n let debugMessages = [];\n\n const result = this._findHandlerAndParams(event, url);\n handler = result.handler;\n params = result.params;\n route = result.route;\n {\n if (handler) {\n debugMessages.push([`Found a route to handle this request:`, route]);\n\n if (params) {\n debugMessages.push([`Passing the following params to the route's handler:`, params]);\n }\n }\n }\n\n // If we don't have a handler because there was no matching route, then\n // fall back to defaultHandler if that's defined.\n if (!handler && this._defaultHandler) {\n {\n debugMessages.push(`Failed to find a matching route. Falling ` + `back to the default handler.`);\n\n // This is used for debugging in logs in the case of an error.\n route = '[Default Handler]';\n }\n handler = this._defaultHandler;\n }\n\n if (!handler) {\n {\n // No handler so Workbox will do nothing. If logs is set of debug\n // i.e. verbose, we should print out this information.\n logger_mjs.logger.debug(`No route found for: ${getFriendlyURL_mjs.getFriendlyURL(url)}`);\n }\n return;\n }\n\n {\n // We have a handler, meaning Workbox is going to handle the route.\n // print the routing details to the console.\n logger_mjs.logger.groupCollapsed(`Router is responding to: ${getFriendlyURL_mjs.getFriendlyURL(url)}`);\n debugMessages.forEach(msg => {\n if (Array.isArray(msg)) {\n logger_mjs.logger.log(...msg);\n } else {\n logger_mjs.logger.log(msg);\n }\n });\n\n // The Request and Response objects contains a great deal of information,\n // hide it under a group in case developers want to see it.\n logger_mjs.logger.groupCollapsed(`View request details here.`);\n logger_mjs.logger.unprefixed.log(event.request);\n logger_mjs.logger.groupEnd();\n\n logger_mjs.logger.groupEnd();\n }\n\n // Wrap in try and catch in case the handle method throws a synchronous\n // error. It should still callback to the catch handler.\n let responsePromise;\n try {\n responsePromise = handler.handle({ url, event, params });\n } catch (err) {\n responsePromise = Promise.reject(err);\n }\n\n if (responsePromise && this._catchHandler) {\n responsePromise = responsePromise.catch(err => {\n {\n // Still include URL here as it will be async from the console group\n // and may not make sense without the URL\n logger_mjs.logger.groupCollapsed(`Error thrown when responding to: ` + ` ${getFriendlyURL_mjs.getFriendlyURL(url)}. Falling back to Catch Handler.`);\n logger_mjs.logger.unprefixed.error(`Error thrown by:`, route);\n logger_mjs.logger.unprefixed.error(err);\n logger_mjs.logger.groupEnd();\n }\n return this._catchHandler.handle({ url, event, err });\n });\n }\n\n return responsePromise;\n }\n\n /**\n * Checks the incoming `event.request` against the registered routes, and if\n * there's a match, returns the corresponding handler along with any params\n * generated by the match.\n *\n * @param {FetchEvent} event\n * @param {URL} url\n * @return {Object} Returns an object with `handler` and `params` properties.\n * They are populated if a matching route was found or `undefined` otherwise.\n *\n * @private\n */\n _findHandlerAndParams(event, url) {\n const routes = this._routes.get(event.request.method) || [];\n for (const route of routes) {\n let matchResult = route.match({ url, event });\n if (matchResult) {\n if (Array.isArray(matchResult) && matchResult.length === 0) {\n // Instead of passing an empty array in as params, use undefined.\n matchResult = undefined;\n } else if (matchResult.constructor === Object && Object.keys(matchResult).length === 0 || matchResult === true) {\n // Instead of passing an empty object in as params, use undefined.\n matchResult = undefined;\n }\n\n // Break out of the loop and return the appropriate values as soon as\n // we have a match.\n return {\n route,\n params: matchResult,\n handler: route.handler\n };\n }\n }\n\n // If we didn't have a match, then return undefined values.\n return { handler: undefined, params: undefined };\n }\n\n /**\n * Define a default `handler` that's called when no routes explicitly\n * match the incoming request.\n *\n * Without a default handler, unmatched requests will go against the\n * network as if there were no service worker present.\n *\n * @param {workbox.routing.Route~handlerCallback} handler A callback\n * function that returns a Promise resulting in a Response.\n */\n setDefaultHandler(handler) {\n this._defaultHandler = normalizeHandler(handler);\n }\n\n /**\n * If a Route throws an error while handling a request, this `handler`\n * will be called and given a chance to provide a response.\n *\n * @param {workbox.routing.Route~handlerCallback} handler A callback\n * function that returns a Promise resulting in a Response.\n */\n setCatchHandler(handler) {\n this._catchHandler = normalizeHandler(handler);\n }\n\n /**\n * Registers a route with the router.\n *\n * @param {workbox.routing.Route} route The route to register.\n */\n registerRoute(route) {\n {\n assert_mjs.assert.isType(route, 'object', {\n moduleName: 'workbox-routing',\n className: 'Router',\n funcName: 'registerRoute',\n paramName: 'route'\n });\n\n assert_mjs.assert.hasMethod(route, 'match', {\n moduleName: 'workbox-routing',\n className: 'Router',\n funcName: 'registerRoute',\n paramName: 'route'\n });\n\n assert_mjs.assert.isType(route.handler, 'object', {\n moduleName: 'workbox-routing',\n className: 'Router',\n funcName: 'registerRoute',\n paramName: 'route'\n });\n\n assert_mjs.assert.hasMethod(route.handler, 'handle', {\n moduleName: 'workbox-routing',\n className: 'Router',\n funcName: 'registerRoute',\n paramName: 'route.handler'\n });\n\n assert_mjs.assert.isType(route.method, 'string', {\n moduleName: 'workbox-routing',\n className: 'Router',\n funcName: 'registerRoute',\n paramName: 'route.method'\n });\n }\n\n if (!this._routes.has(route.method)) {\n this._routes.set(route.method, []);\n }\n\n // Give precedence to all of the earlier routes by adding this additional\n // route to the end of the array.\n this._routes.get(route.method).push(route);\n }\n\n /**\n * Unregisters a route with the router.\n *\n * @param {workbox.routing.Route} route The route to unregister.\n */\n unregisterRoute(route) {\n if (!this._routes.has(route.method)) {\n throw new WorkboxError_mjs.WorkboxError('unregister-route-but-not-found-with-method', {\n method: route.method\n });\n }\n\n const routeIndex = this._routes.get(route.method).indexOf(route);\n if (routeIndex > -1) {\n this._routes.get(route.method).splice(routeIndex, 1);\n } else {\n throw new WorkboxError_mjs.WorkboxError('unregister-route-route-not-registered');\n }\n }\n }\n\n /*\n Copyright 2016 Google Inc. All Rights Reserved.\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n */\n\n /**\n * NavigationRoute makes it easy to create a [Route]{@link\n * workbox.routing.Route} that matches for browser\n * [navigation requests]{@link https://developers.google.com/web/fundamentals/primers/service-workers/high-performance-loading#first_what_are_navigation_requests}.\n *\n * It will only match incoming Requests whose\n * [`mode`]{@link https://fetch.spec.whatwg.org/#concept-request-mode}\n * is set to `navigate`.\n *\n * You can optionally only apply this route to a subset of navigation requests\n * by using one or both of the `blacklist` and `whitelist` parameters.\n *\n * @memberof workbox.routing\n * @extends workbox.routing.Route\n */\n class NavigationRoute extends Route {\n /**\n * If both `blacklist` and `whiltelist` are provided, the `blacklist` will\n * take precedence and the request will not match this route.\n *\n * The regular expressions in `whitelist` and `blacklist`\n * are matched against the concatenated\n * [`pathname`]{@link https://developer.mozilla.org/en-US/docs/Web/API/HTMLHyperlinkElementUtils/pathname}\n * and [`search`]{@link https://developer.mozilla.org/en-US/docs/Web/API/HTMLHyperlinkElementUtils/search}\n * portions of the requested URL.\n *\n * @param {workbox.routing.Route~handlerCallback} handler A callback\n * function that returns a Promise resulting in a Response.\n * @param {Object} options\n * @param {Array} [options.blacklist] If any of these patterns match,\n * the route will not handle the request (even if a whitelist RegExp matches).\n * @param {Array} [options.whitelist=[/./]] If any of these patterns\n * match the URL's pathname and search parameter, the route will handle the\n * request (assuming the blacklist doesn't match).\n */\n constructor(handler, { whitelist = [/./], blacklist = [] } = {}) {\n {\n assert_mjs.assert.isArrayOfClass(whitelist, RegExp, {\n moduleName: 'workbox-routing',\n className: 'NavigationRoute',\n funcName: 'constructor',\n paramName: 'options.whitelist'\n });\n assert_mjs.assert.isArrayOfClass(blacklist, RegExp, {\n moduleName: 'workbox-routing',\n className: 'NavigationRoute',\n funcName: 'constructor',\n paramName: 'options.blacklist'\n });\n }\n\n super((...args) => this._match(...args), handler);\n\n this._whitelist = whitelist;\n this._blacklist = blacklist;\n }\n\n /**\n * Routes match handler.\n *\n * @param {Object} options\n * @param {FetchEvent} options.event\n * @param {URL} options.url\n * @return {boolean}\n *\n * @private\n */\n _match({ event, url }) {\n if (event.request.mode !== 'navigate') {\n return false;\n }\n\n const pathnameAndSearch = url.pathname + url.search;\n\n if (this._blacklist.some(regExp => regExp.test(pathnameAndSearch))) {\n {\n logger_mjs.logger.debug(`The navigation route is not being used, since the ` + `request URL matches both the whitelist and blacklist.`);\n }\n return false;\n }\n\n if (this._whitelist.some(regExp => regExp.test(pathnameAndSearch))) {\n {\n logger_mjs.logger.debug(`The navigation route is being used.`);\n }\n return true;\n } else {\n {\n logger_mjs.logger.debug(`The navigation route is not being used, since the ` + `URL being navigated to doesn't match the whitelist.`);\n }\n }\n\n return false;\n }\n }\n\n /*\n Copyright 2017 Google Inc.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n https://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n */\n\n var publicAPI = /*#__PURE__*/Object.freeze({\n RegExpRoute: RegExpRoute,\n Route: Route,\n Router: Router,\n NavigationRoute: NavigationRoute\n });\n\n /*\n Copyright 2017 Google Inc.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n https://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n */\n\n {\n assert_mjs.assert.isSwEnv('workbox-routing');\n }\n\n /**\n * @private\n */\n class DefaultRouter extends Router {\n /**\n * Easily register a RegExp, string, or function with a caching\n * strategy to the Router.\n *\n * This method will generate a Route for you if needed and\n * call [Router.registerRoute()]{@link\n * workbox.routing.Router#registerRoute}.\n *\n * @param {\n * RegExp|\n * string|\n * workbox.routing.Route~matchCallback|\n * workbox.routing.Route\n * } capture\n * If the capture param is a `Route`, all other arguments will be ignored.\n * @param {workbox.routing.Route~handlerCallback} handler A callback\n * function that returns a Promise resulting in a Response.\n * @param {string} [method='GET'] The HTTP method to match the Route\n * against.\n * @return {workbox.routing.Route} The generated `Route`(Useful for\n * unregistering).\n *\n * @alias workbox.routing.registerRoute\n */\n registerRoute(capture, handler, method = 'GET') {\n let route;\n\n if (typeof capture === 'string') {\n const captureUrl = new URL(capture, location);\n\n {\n if (!(capture.startsWith('/') || capture.startsWith('http'))) {\n throw new WorkboxError_mjs.WorkboxError('invalid-string', {\n moduleName: 'workbox-routing',\n className: 'DefaultRouter',\n funcName: 'registerRoute',\n paramName: 'capture'\n });\n }\n\n // We want to check if Express-style wildcards are in the pathname only.\n // TODO: Remove this log message in v4.\n const valueToCheck = capture.startsWith('http') ? captureUrl.pathname : capture;\n // See https://github.com/pillarjs/path-to-regexp#parameters\n const wildcards = '[*:?+]';\n if (valueToCheck.match(new RegExp(`${wildcards}`))) {\n logger_mjs.logger.debug(`The '$capture' parameter contains an Express-style wildcard ` + `character (${wildcards}). Strings are now always interpreted as ` + `exact matches; use a RegExp for partial or wildcard matches.`);\n }\n }\n\n const matchCallback = ({ url }) => {\n {\n if (url.pathname === captureUrl.pathname && url.origin !== captureUrl.origin) {\n logger_mjs.logger.debug(`${capture} only partially matches the cross-origin URL ` + `${url}. This route will only handle cross-origin requests ` + `if they match the entire URL.`);\n }\n }\n\n return url.href === captureUrl.href;\n };\n\n route = new Route(matchCallback, handler, method);\n } else if (capture instanceof RegExp) {\n route = new RegExpRoute(capture, handler, method);\n } else if (typeof capture === 'function') {\n route = new Route(capture, handler, method);\n } else if (capture instanceof Route) {\n route = capture;\n } else {\n throw new WorkboxError_mjs.WorkboxError('unsupported-route-type', {\n moduleName: 'workbox-routing',\n className: 'DefaultRouter',\n funcName: 'registerRoute',\n paramName: 'capture'\n });\n }\n\n super.registerRoute(route);\n return route;\n }\n\n /**\n * Register a route that will return a precached file for a navigation\n * request. This is useful for the\n * [application shell pattern]{@link https://developers.google.com/web/fundamentals/architecture/app-shell}.\n *\n * This method will generate a\n * [NavigationRoute]{@link workbox.routing.NavigationRoute}\n * and call\n * [Router.registerRoute()]{@link workbox.routing.Router#registerRoute}\n * .\n *\n * @param {string} cachedAssetUrl\n * @param {Object} [options]\n * @param {string} [options.cacheName] Cache name to store and retrieve\n * requests. Defaults to precache cache name provided by\n * [workbox-core.cacheNames]{@link workbox.core.cacheNames}.\n * @param {Array} [options.blacklist=[]] If any of these patterns\n * match, the route will not handle the request (even if a whitelist entry\n * matches).\n * @param {Array} [options.whitelist=[/./]] If any of these patterns\n * match the URL's pathname and search parameter, the route will handle the\n * request (assuming the blacklist doesn't match).\n * @return {workbox.routing.NavigationRoute} Returns the generated\n * Route.\n *\n * @alias workbox.routing.registerNavigationRoute\n */\n registerNavigationRoute(cachedAssetUrl, options = {}) {\n {\n assert_mjs.assert.isType(cachedAssetUrl, 'string', {\n moduleName: 'workbox-routing',\n className: '[default export]',\n funcName: 'registerNavigationRoute',\n paramName: 'cachedAssetUrl'\n });\n }\n\n const cacheName = cacheNames_mjs.cacheNames.getPrecacheName(options.cacheName);\n const handler = () => caches.match(cachedAssetUrl, { cacheName }).then(response => {\n if (response) {\n return response;\n }\n // This shouldn't normally happen, but there are edge cases:\n // https://github.com/GoogleChrome/workbox/issues/1441\n throw new Error(`The cache ${cacheName} did not have an entry for ` + `${cachedAssetUrl}.`);\n }).catch(error => {\n // If there's either a cache miss, or the caches.match() call threw\n // an exception, then attempt to fulfill the navigation request with\n // a response from the network rather than leaving the user with a\n // failed navigation.\n {\n logger_mjs.logger.debug(`Unable to respond to navigation request with cached ` + `response: ${error.message}. Falling back to network.`);\n }\n\n // This might still fail if the browser is offline...\n return fetch(cachedAssetUrl);\n });\n\n const route = new NavigationRoute(handler, {\n whitelist: options.whitelist,\n blacklist: options.blacklist\n });\n super.registerRoute(route);\n\n return route;\n }\n }\n\n const router = new DefaultRouter();\n\n // By default, register a fetch event listener that will respond to a request\n // only if there's a matching route.\n self.addEventListener('fetch', event => {\n const responsePromise = router.handleRequest(event);\n if (responsePromise) {\n event.respondWith(responsePromise);\n }\n });\n\n /*\n Copyright 2017 Google Inc.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n https://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n */\n\n const finalExport = Object.assign(router, publicAPI);\n\n return finalExport;\n\n}(workbox.core._private,workbox.core._private,workbox.core._private,workbox.core._private,workbox.core._private));\n"],"file":"workbox-routing.dev.js"} \ No newline at end of file diff --git a/assets/js/workbox-v3.6.3/workbox-routing.prod.js b/assets/js/workbox-v3.6.3/workbox-routing.prod.js new file mode 100644 index 0000000..250d5c7 --- /dev/null +++ b/assets/js/workbox-v3.6.3/workbox-routing.prod.js @@ -0,0 +1,3 @@ +this.workbox=this.workbox||{},this.workbox.routing=function(t,e){"use strict";try{self.workbox.v["workbox:routing:3.6.3"]=1}catch(t){}const r="GET";var s=t=>t&&"object"==typeof t?t:{handle:t};class n{constructor(t,e,n){this.handler=s(e),this.match=t,this.method=n||r}}class o extends n{constructor(t,e,r){super(({url:e})=>{const r=t.exec(e.href);return r?e.origin!==location.origin&&0!==r.index?null:r.slice(1):null},e,r)}}class i{constructor(){this.t=new Map}handleRequest(t){const e=new URL(t.request.url);if(!e.protocol.startsWith("http"))return;let r=null,s=null,n=null;const o=this.e(t,e);if(s=o.handler,n=o.params,r=o.route,!s&&this.r&&(s=this.r),!s)return;let i;try{i=s.handle({url:e,event:t,params:n})}catch(t){i=Promise.reject(t)}return i&&this.s&&(i=i.catch(r=>this.s.handle({url:e,event:t,err:r}))),i}e(t,e){const r=this.t.get(t.request.method)||[];for(const s of r){let r=s.match({url:e,event:t});if(r)return Array.isArray(r)&&0===r.length?r=void 0:(r.constructor===Object&&0===Object.keys(r).length||!0===r)&&(r=void 0),{route:s,params:r,handler:s.handler}}return{handler:void 0,params:void 0}}setDefaultHandler(t){this.r=s(t)}setCatchHandler(t){this.s=s(t)}registerRoute(t){this.t.has(t.method)||this.t.set(t.method,[]),this.t.get(t.method).push(t)}unregisterRoute(e){if(!this.t.has(e.method))throw new t.WorkboxError("unregister-route-but-not-found-with-method",{method:e.method});const r=this.t.get(e.method).indexOf(e);if(!(r>-1))throw new t.WorkboxError("unregister-route-route-not-registered");this.t.get(e.method).splice(r,1)}}class u extends n{constructor(t,{whitelist:e=[/./],blacklist:r=[]}={}){super((...t)=>this.n(...t),t),this.o=e,this.i=r}n({event:t,url:e}){if("navigate"!==t.request.mode)return!1;const r=e.pathname+e.search;return!this.i.some(t=>t.test(r))&&!!this.o.some(t=>t.test(r))}}var a=Object.freeze({RegExpRoute:o,Route:n,Router:i,NavigationRoute:u});const c=new class extends i{registerRoute(e,r,s="GET"){let i;if("string"==typeof e){const t=new URL(e,location);i=new n(({url:e})=>e.href===t.href,r,s)}else if(e instanceof RegExp)i=new o(e,r,s);else if("function"==typeof e)i=new n(e,r,s);else{if(!(e instanceof n))throw new t.WorkboxError("unsupported-route-type",{moduleName:"workbox-routing",className:"DefaultRouter",funcName:"registerRoute",paramName:"capture"});i=e}return super.registerRoute(i),i}registerNavigationRoute(t,r={}){const s=e.cacheNames.getPrecacheName(r.cacheName),n=new u(()=>caches.match(t,{cacheName:s}).then(e=>{if(e)return e;throw new Error(`The cache ${s} did not have an entry for `+`${t}.`)}).catch(e=>fetch(t)),{whitelist:r.whitelist,blacklist:r.blacklist});return super.registerRoute(n),n}};return self.addEventListener("fetch",t=>{const e=c.handleRequest(t);e&&t.respondWith(e)}),Object.assign(c,a)}(workbox.core._private,workbox.core._private); + +//# sourceMappingURL=workbox-routing.prod.js.map diff --git a/assets/js/workbox-v3.6.3/workbox-routing.prod.js.map b/assets/js/workbox-v3.6.3/workbox-routing.prod.js.map new file mode 100644 index 0000000..aa27f1a --- /dev/null +++ b/assets/js/workbox-v3.6.3/workbox-routing.prod.js.map @@ -0,0 +1 @@ +{"version":3,"names":[],"mappings":"","sources":["packages/workbox-routing/browser.mjs"],"sourcesContent":["this.workbox=this.workbox||{},this.workbox.routing=function(t,e){\"use strict\";try{self.workbox.v[\"workbox:routing:3.6.3\"]=1}catch(t){}const r=\"GET\";var s=t=>t&&\"object\"==typeof t?t:{handle:t};class n{constructor(t,e,n){this.handler=s(e),this.match=t,this.method=n||r}}class o extends n{constructor(t,e,r){super(({url:e})=>{const r=t.exec(e.href);return r?e.origin!==location.origin&&0!==r.index?null:r.slice(1):null},e,r)}}class i{constructor(){this.t=new Map}handleRequest(t){const e=new URL(t.request.url);if(!e.protocol.startsWith(\"http\"))return;let r=null,s=null,n=null;const o=this.e(t,e);if(s=o.handler,n=o.params,r=o.route,!s&&this.r&&(s=this.r),!s)return;let i;try{i=s.handle({url:e,event:t,params:n})}catch(t){i=Promise.reject(t)}return i&&this.s&&(i=i.catch(r=>this.s.handle({url:e,event:t,err:r}))),i}e(t,e){const r=this.t.get(t.request.method)||[];for(const s of r){let r=s.match({url:e,event:t});if(r)return Array.isArray(r)&&0===r.length?r=void 0:(r.constructor===Object&&0===Object.keys(r).length||!0===r)&&(r=void 0),{route:s,params:r,handler:s.handler}}return{handler:void 0,params:void 0}}setDefaultHandler(t){this.r=s(t)}setCatchHandler(t){this.s=s(t)}registerRoute(t){this.t.has(t.method)||this.t.set(t.method,[]),this.t.get(t.method).push(t)}unregisterRoute(e){if(!this.t.has(e.method))throw new t.WorkboxError(\"unregister-route-but-not-found-with-method\",{method:e.method});const r=this.t.get(e.method).indexOf(e);if(!(r>-1))throw new t.WorkboxError(\"unregister-route-route-not-registered\");this.t.get(e.method).splice(r,1)}}class u extends n{constructor(t,{whitelist:e=[/./],blacklist:r=[]}={}){super((...t)=>this.n(...t),t),this.o=e,this.i=r}n({event:t,url:e}){if(\"navigate\"!==t.request.mode)return!1;const r=e.pathname+e.search;return!this.i.some(t=>t.test(r))&&!!this.o.some(t=>t.test(r))}}var a=Object.freeze({RegExpRoute:o,Route:n,Router:i,NavigationRoute:u});const c=new class extends i{registerRoute(e,r,s=\"GET\"){let i;if(\"string\"==typeof e){const t=new URL(e,location);i=new n(({url:e})=>e.href===t.href,r,s)}else if(e instanceof RegExp)i=new o(e,r,s);else if(\"function\"==typeof e)i=new n(e,r,s);else{if(!(e instanceof n))throw new t.WorkboxError(\"unsupported-route-type\",{moduleName:\"workbox-routing\",className:\"DefaultRouter\",funcName:\"registerRoute\",paramName:\"capture\"});i=e}return super.registerRoute(i),i}registerNavigationRoute(t,r={}){const s=e.cacheNames.getPrecacheName(r.cacheName),n=new u(()=>caches.match(t,{cacheName:s}).then(e=>{if(e)return e;throw new Error(`The cache ${s} did not have an entry for `+`${t}.`)}).catch(e=>fetch(t)),{whitelist:r.whitelist,blacklist:r.blacklist});return super.registerRoute(n),n}};return self.addEventListener(\"fetch\",t=>{const e=c.handleRequest(t);e&&t.respondWith(e)}),Object.assign(c,a)}(workbox.core._private,workbox.core._private);\n"],"file":"workbox-routing.prod.js"} \ No newline at end of file diff --git a/assets/js/workbox-v3.6.3/workbox-strategies.dev.js b/assets/js/workbox-v3.6.3/workbox-strategies.dev.js new file mode 100644 index 0000000..30e9210 --- /dev/null +++ b/assets/js/workbox-v3.6.3/workbox-strategies.dev.js @@ -0,0 +1,1172 @@ +this.workbox = this.workbox || {}; +this.workbox.strategies = (function (logger_mjs,assert_mjs,cacheNames_mjs,cacheWrapper_mjs,fetchWrapper_mjs,getFriendlyURL_mjs) { + 'use strict'; + + try { + self.workbox.v['workbox:strategies:3.6.3'] = 1; + } catch (e) {} // eslint-disable-line + + /* + Copyright 2018 Google Inc. All Rights Reserved. + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + + const getFriendlyURL = url => { + const urlObj = new URL(url, location); + if (urlObj.origin === location.origin) { + return urlObj.pathname; + } + return urlObj.href; + }; + + var messages = { + strategyStart: (strategyName, request) => `Using ${strategyName} to ` + `respond to '${getFriendlyURL(request.url)}'`, + printFinalResponse: response => { + if (response) { + logger_mjs.logger.groupCollapsed(`View the final response here.`); + logger_mjs.logger.unprefixed.log(response); + logger_mjs.logger.groupEnd(); + } + } + }; + + /* + Copyright 2018 Google Inc. All Rights Reserved. + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + + /** + * An implementation of a [cache-first]{@link https://developers.google.com/web/fundamentals/instant-and-offline/offline-cookbook/#cache-falling-back-to-network} + * request strategy. + * + * A cache first strategy is useful for assets that have been revisioned, + * such as URLs like `/styles/example.a8f5f1.css`, since they + * can be cached for long periods of time. + * + * @memberof workbox.strategies + */ + class CacheFirst { + /** + * @param {Object} options + * @param {string} options.cacheName Cache name to store and retrieve + * requests. Defaults to cache names provided by + * [workbox-core]{@link workbox.core.cacheNames}. + * @param {Array} options.plugins [Plugins]{@link https://developers.google.com/web/tools/workbox/guides/using-plugins} + * to use in conjunction with this caching strategy. + * @param {Object} options.fetchOptions Values passed along to the + * [`init`](https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch#Parameters) + * of all fetch() requests made by this strategy. + * @param {Object} options.matchOptions [`CacheQueryOptions`](https://w3c.github.io/ServiceWorker/#dictdef-cachequeryoptions) + */ + constructor(options = {}) { + this._cacheName = cacheNames_mjs.cacheNames.getRuntimeName(options.cacheName); + this._plugins = options.plugins || []; + this._fetchOptions = options.fetchOptions || null; + this._matchOptions = options.matchOptions || null; + } + + /** + * This method will perform a request strategy and follows an API that + * will work with the + * [Workbox Router]{@link workbox.routing.Router}. + * + * @param {Object} options + * @param {FetchEvent} options.event The fetch event to run this strategy + * against. + * @return {Promise} + */ + handle({ event }) { + var _this = this; + + return babelHelpers.asyncToGenerator(function* () { + { + assert_mjs.assert.isInstance(event, FetchEvent, { + moduleName: 'workbox-strategies', + className: 'CacheFirst', + funcName: 'handle', + paramName: 'event' + }); + } + + return _this.makeRequest({ + event, + request: event.request + }); + })(); + } + + /** + * This method can be used to perform a make a standalone request outside the + * context of the [Workbox Router]{@link workbox.routing.Router}. + * + * See "[Advanced Recipes](https://developers.google.com/web/tools/workbox/guides/advanced-recipes#make-requests)" + * for more usage information. + * + * @param {Object} options + * @param {Request|string} options.request Either a + * [`Request`]{@link https://developer.mozilla.org/en-US/docs/Web/API/Request} + * object, or a string URL, corresponding to the request to be made. + * @param {FetchEvent} [options.event] If provided, `event.waitUntil()` will + be called automatically to extend the service worker's lifetime. + * @return {Promise} + */ + makeRequest({ event, request }) { + var _this2 = this; + + return babelHelpers.asyncToGenerator(function* () { + const logs = []; + + if (typeof request === 'string') { + request = new Request(request); + } + + { + assert_mjs.assert.isInstance(request, Request, { + moduleName: 'workbox-strategies', + className: 'CacheFirst', + funcName: 'makeRequest', + paramName: 'request' + }); + } + + let response = yield cacheWrapper_mjs.cacheWrapper.match({ + cacheName: _this2._cacheName, + request, + event, + matchOptions: _this2._matchOptions, + plugins: _this2._plugins + }); + + let error; + if (!response) { + { + logs.push(`No response found in the '${_this2._cacheName}' cache. ` + `Will respond with a network request.`); + } + try { + response = yield _this2._getFromNetwork(request, event); + } catch (err) { + error = err; + } + + { + if (response) { + logs.push(`Got response from network.`); + } else { + logs.push(`Unable to get a response from the network.`); + } + } + } else { + { + logs.push(`Found a cached response in the '${_this2._cacheName}' cache.`); + } + } + + { + logger_mjs.logger.groupCollapsed(messages.strategyStart('CacheFirst', request)); + for (let log of logs) { + logger_mjs.logger.log(log); + } + messages.printFinalResponse(response); + logger_mjs.logger.groupEnd(); + } + + if (error) { + // Don't swallow error as we'll want it to throw and enable catch + // handlers in router. + throw error; + } + + return response; + })(); + } + + /** + * Handles the network and cache part of CacheFirst. + * + * @param {Request} request + * @param {FetchEvent} [event] + * @return {Promise} + * + * @private + */ + _getFromNetwork(request, event) { + var _this3 = this; + + return babelHelpers.asyncToGenerator(function* () { + const response = yield fetchWrapper_mjs.fetchWrapper.fetch({ + request, + event, + fetchOptions: _this3._fetchOptions, + plugins: _this3._plugins + }); + + // Keep the service worker while we put the request to the cache + const responseClone = response.clone(); + const cachePutPromise = cacheWrapper_mjs.cacheWrapper.put({ + cacheName: _this3._cacheName, + request, + response: responseClone, + event, + plugins: _this3._plugins + }); + + if (event) { + try { + event.waitUntil(cachePutPromise); + } catch (error) { + { + logger_mjs.logger.warn(`Unable to ensure service worker stays alive when ` + `updating cache for '${getFriendlyURL_mjs.getFriendlyURL(event.request.url)}'.`); + } + } + } + + return response; + })(); + } + } + + /* + Copyright 2018 Google Inc. All Rights Reserved. + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + + /** + * An implementation of a + * [cache-only]{@link https://developers.google.com/web/fundamentals/instant-and-offline/offline-cookbook/#cache-only} + * request strategy. + * + * This class is useful if you want to take advantage of any [Workbox plugins]{@link https://developers.google.com/web/tools/workbox/guides/using-plugins}. + * + * @memberof workbox.strategies + */ + class CacheOnly { + /** + * @param {Object} options + * @param {string} options.cacheName Cache name to store and retrieve + * requests. Defaults to cache names provided by + * [workbox-core]{@link workbox.core.cacheNames}. + * @param {Array} options.plugins [Plugins]{@link https://developers.google.com/web/tools/workbox/guides/using-plugins} + * to use in conjunction with this caching strategy. + * @param {Object} options.matchOptions [`CacheQueryOptions`](https://w3c.github.io/ServiceWorker/#dictdef-cachequeryoptions) + */ + constructor(options = {}) { + this._cacheName = cacheNames_mjs.cacheNames.getRuntimeName(options.cacheName); + this._plugins = options.plugins || []; + this._matchOptions = options.matchOptions || null; + } + + /** + * This method will perform a request strategy and follows an API that + * will work with the + * [Workbox Router]{@link workbox.routing.Router}. + * + * @param {Object} options + * @param {FetchEvent} options.event The fetch event to run this strategy + * against. + * @return {Promise} + */ + handle({ event }) { + var _this = this; + + return babelHelpers.asyncToGenerator(function* () { + { + assert_mjs.assert.isInstance(event, FetchEvent, { + moduleName: 'workbox-strategies', + className: 'CacheOnly', + funcName: 'handle', + paramName: 'event' + }); + } + + return _this.makeRequest({ + event, + request: event.request + }); + })(); + } + + /** + * This method can be used to perform a make a standalone request outside the + * context of the [Workbox Router]{@link workbox.routing.Router}. + * + * See "[Advanced Recipes](https://developers.google.com/web/tools/workbox/guides/advanced-recipes#make-requests)" + * for more usage information. + * + * @param {Object} options + * @param {Request|string} options.request Either a + * [`Request`]{@link https://developer.mozilla.org/en-US/docs/Web/API/Request} + * object, or a string URL, corresponding to the request to be made. + * @param {FetchEvent} [options.event] If provided, `event.waitUntil()` will + * be called automatically to extend the service worker's lifetime. + * @return {Promise} + */ + makeRequest({ event, request }) { + var _this2 = this; + + return babelHelpers.asyncToGenerator(function* () { + if (typeof request === 'string') { + request = new Request(request); + } + + { + assert_mjs.assert.isInstance(request, Request, { + moduleName: 'workbox-strategies', + className: 'CacheOnly', + funcName: 'makeRequest', + paramName: 'request' + }); + } + + const response = yield cacheWrapper_mjs.cacheWrapper.match({ + cacheName: _this2._cacheName, + request, + event, + matchOptions: _this2._matchOptions, + plugins: _this2._plugins + }); + + { + logger_mjs.logger.groupCollapsed(messages.strategyStart('CacheOnly', request)); + if (response) { + logger_mjs.logger.log(`Found a cached response in the '${_this2._cacheName}'` + ` cache.`); + messages.printFinalResponse(response); + } else { + logger_mjs.logger.log(`No response found in the '${_this2._cacheName}' cache.`); + } + logger_mjs.logger.groupEnd(); + } + + return response; + })(); + } + } + + /* + Copyright 2016 Google Inc. All Rights Reserved. + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + + var cacheOkAndOpaquePlugin = { + /** + * Return return a response (i.e. allow caching) if the + * response is ok (i.e. 200) or is opaque. + * + * @param {Object} options + * @param {Response} options.response + * @return {Response|null} + * + * @private + */ + cacheWillUpdate: ({ response }) => { + if (response.ok || response.status === 0) { + return response; + } + return null; + } + }; + + /* + Copyright 2018 Google Inc. All Rights Reserved. + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + + /** + * An implementation of a + * [network first]{@link https://developers.google.com/web/fundamentals/instant-and-offline/offline-cookbook/#network-falling-back-to-cache} + * request strategy. + * + * By default, this strategy will cache responses with a 200 status code as + * well as [opaque responses]{@link https://developers.google.com/web/tools/workbox/guides/handle-third-party-requests}. + * Opaque responses are are cross-origin requests where the response doesn't + * support [CORS]{@link https://enable-cors.org/}. + * + * @memberof workbox.strategies + */ + class NetworkFirst { + /** + * @param {Object} options + * @param {string} options.cacheName Cache name to store and retrieve + * requests. Defaults to cache names provided by + * [workbox-core]{@link workbox.core.cacheNames}. + * @param {Array} options.plugins [Plugins]{@link https://developers.google.com/web/tools/workbox/guides/using-plugins} + * to use in conjunction with this caching strategy. + * @param {Object} options.fetchOptions Values passed along to the + * [`init`](https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch#Parameters) + * of all fetch() requests made by this strategy. + * @param {Object} options.matchOptions [`CacheQueryOptions`](https://w3c.github.io/ServiceWorker/#dictdef-cachequeryoptions) + * @param {number} options.networkTimeoutSeconds If set, any network requests + * that fail to respond within the timeout will fallback to the cache. + * + * This option can be used to combat + * "[lie-fi]{@link https://developers.google.com/web/fundamentals/performance/poor-connectivity/#lie-fi}" + * scenarios. + */ + constructor(options = {}) { + this._cacheName = cacheNames_mjs.cacheNames.getRuntimeName(options.cacheName); + + if (options.plugins) { + let isUsingCacheWillUpdate = options.plugins.some(plugin => !!plugin.cacheWillUpdate); + this._plugins = isUsingCacheWillUpdate ? options.plugins : [cacheOkAndOpaquePlugin, ...options.plugins]; + } else { + // No plugins passed in, use the default plugin. + this._plugins = [cacheOkAndOpaquePlugin]; + } + + this._networkTimeoutSeconds = options.networkTimeoutSeconds; + { + if (this._networkTimeoutSeconds) { + assert_mjs.assert.isType(this._networkTimeoutSeconds, 'number', { + moduleName: 'workbox-strategies', + className: 'NetworkFirst', + funcName: 'constructor', + paramName: 'networkTimeoutSeconds' + }); + } + } + + this._fetchOptions = options.fetchOptions || null; + this._matchOptions = options.matchOptions || null; + } + + /** + * This method will perform a request strategy and follows an API that + * will work with the + * [Workbox Router]{@link workbox.routing.Router}. + * + * @param {Object} options + * @param {FetchEvent} options.event The fetch event to run this strategy + * against. + * @return {Promise} + */ + handle({ event }) { + var _this = this; + + return babelHelpers.asyncToGenerator(function* () { + { + assert_mjs.assert.isInstance(event, FetchEvent, { + moduleName: 'workbox-strategies', + className: 'NetworkFirst', + funcName: 'handle', + paramName: 'event' + }); + } + + return _this.makeRequest({ + event, + request: event.request + }); + })(); + } + + /** + * This method can be used to perform a make a standalone request outside the + * context of the [Workbox Router]{@link workbox.routing.Router}. + * + * See "[Advanced Recipes](https://developers.google.com/web/tools/workbox/guides/advanced-recipes#make-requests)" + * for more usage information. + * + * @param {Object} options + * @param {Request|string} options.request Either a + * [`Request`]{@link https://developer.mozilla.org/en-US/docs/Web/API/Request} + * object, or a string URL, corresponding to the request to be made. + * @param {FetchEvent} [options.event] If provided, `event.waitUntil()` will + * be called automatically to extend the service worker's lifetime. + * @return {Promise} + */ + makeRequest({ event, request }) { + var _this2 = this; + + return babelHelpers.asyncToGenerator(function* () { + const logs = []; + + if (typeof request === 'string') { + request = new Request(request); + } + + { + assert_mjs.assert.isInstance(request, Request, { + moduleName: 'workbox-strategies', + className: 'NetworkFirst', + funcName: 'handle', + paramName: 'makeRequest' + }); + } + + const promises = []; + let timeoutId; + + if (_this2._networkTimeoutSeconds) { + const { id, promise } = _this2._getTimeoutPromise({ request, event, logs }); + timeoutId = id; + promises.push(promise); + } + + const networkPromise = _this2._getNetworkPromise({ timeoutId, request, event, logs }); + promises.push(networkPromise); + + // Promise.race() will resolve as soon as the first promise resolves. + let response = yield Promise.race(promises); + // If Promise.race() resolved with null, it might be due to a network + // timeout + a cache miss. If that were to happen, we'd rather wait until + // the networkPromise resolves instead of returning null. + // Note that it's fine to await an already-resolved promise, so we don't + // have to check to see if it's still "in flight". + if (!response) { + response = yield networkPromise; + } + + { + logger_mjs.logger.groupCollapsed(messages.strategyStart('NetworkFirst', request)); + for (let log of logs) { + logger_mjs.logger.log(log); + } + messages.printFinalResponse(response); + logger_mjs.logger.groupEnd(); + } + + return response; + })(); + } + + /** + * @param {Object} options + * @param {Request} options.request + * @param {Array} options.logs A reference to the logs array + * @param {Event} [options.event] + * @return {Promise} + * + * @private + */ + _getTimeoutPromise({ request, logs, event }) { + var _this3 = this; + + let timeoutId; + const timeoutPromise = new Promise(resolve => { + const onNetworkTimeout = (() => { + var _ref = babelHelpers.asyncToGenerator(function* () { + { + logs.push(`Timing out the network response at ` + `${_this3._networkTimeoutSeconds} seconds.`); + } + + resolve((yield _this3._respondFromCache({ request, event }))); + }); + + return function onNetworkTimeout() { + return _ref.apply(this, arguments); + }; + })(); + + timeoutId = setTimeout(onNetworkTimeout, this._networkTimeoutSeconds * 1000); + }); + + return { + promise: timeoutPromise, + id: timeoutId + }; + } + + /** + * @param {Object} options + * @param {number|undefined} options.timeoutId + * @param {Request} options.request + * @param {Array} options.logs A reference to the logs Array. + * @param {Event} [options.event] + * @return {Promise} + * + * @private + */ + _getNetworkPromise({ timeoutId, request, logs, event }) { + var _this4 = this; + + return babelHelpers.asyncToGenerator(function* () { + let error; + let response; + try { + response = yield fetchWrapper_mjs.fetchWrapper.fetch({ + request, + event, + fetchOptions: _this4._fetchOptions, + plugins: _this4._plugins + }); + } catch (err) { + error = err; + } + + if (timeoutId) { + clearTimeout(timeoutId); + } + + { + if (response) { + logs.push(`Got response from network.`); + } else { + logs.push(`Unable to get a response from the network. Will respond ` + `with a cached response.`); + } + } + + if (error || !response) { + response = yield _this4._respondFromCache({ request, event }); + { + if (response) { + logs.push(`Found a cached response in the '${_this4._cacheName}'` + ` cache.`); + } else { + logs.push(`No response found in the '${_this4._cacheName}' cache.`); + } + } + } else { + // Keep the service worker alive while we put the request in the cache + const responseClone = response.clone(); + const cachePut = cacheWrapper_mjs.cacheWrapper.put({ + cacheName: _this4._cacheName, + request, + response: responseClone, + event, + plugins: _this4._plugins + }); + + if (event) { + try { + // The event has been responded to so we can keep the SW alive to + // respond to the request + event.waitUntil(cachePut); + } catch (err) { + { + logger_mjs.logger.warn(`Unable to ensure service worker stays alive when ` + `updating cache for '${getFriendlyURL_mjs.getFriendlyURL(event.request.url)}'.`); + } + } + } + } + + return response; + })(); + } + + /** + * Used if the network timeouts or fails to make the request. + * + * @param {Object} options + * @param {Request} request The request to match in the cache + * @param {Event} [options.event] + * @return {Promise} + * + * @private + */ + _respondFromCache({ event, request }) { + return cacheWrapper_mjs.cacheWrapper.match({ + cacheName: this._cacheName, + request, + event, + matchOptions: this._matchOptions, + plugins: this._plugins + }); + } + } + + /* + Copyright 2018 Google Inc. All Rights Reserved. + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + + /** + * An implementation of a + * [network-only]{@link https://developers.google.com/web/fundamentals/instant-and-offline/offline-cookbook/#network-only} + * request strategy. + * + * This class is useful if you want to take advantage of any [Workbox plugins]{@link https://developers.google.com/web/tools/workbox/guides/using-plugins}. + * + * @memberof workbox.strategies + */ + class NetworkOnly { + /** + * @param {Object} options + * @param {string} options.cacheName Cache name to store and retrieve + * requests. Defaults to cache names provided by + * [workbox-core]{@link workbox.core.cacheNames}. + * @param {Array} options.plugins [Plugins]{@link https://developers.google.com/web/tools/workbox/guides/using-plugins} + * to use in conjunction with this caching strategy. + * @param {Object} options.fetchOptions Values passed along to the + * [`init`](https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch#Parameters) + * of all fetch() requests made by this strategy. + */ + constructor(options = {}) { + this._cacheName = cacheNames_mjs.cacheNames.getRuntimeName(options.cacheName); + this._plugins = options.plugins || []; + this._fetchOptions = options.fetchOptions || null; + } + + /** + * This method will perform a request strategy and follows an API that + * will work with the + * [Workbox Router]{@link workbox.routing.Router}. + * + * @param {Object} options + * @param {FetchEvent} options.event The fetch event to run this strategy + * against. + * @return {Promise} + */ + handle({ event }) { + var _this = this; + + return babelHelpers.asyncToGenerator(function* () { + { + assert_mjs.assert.isInstance(event, FetchEvent, { + moduleName: 'workbox-strategies', + className: 'NetworkOnly', + funcName: 'handle', + paramName: 'event' + }); + } + + return _this.makeRequest({ + event, + request: event.request + }); + })(); + } + + /** + * This method can be used to perform a make a standalone request outside the + * context of the [Workbox Router]{@link workbox.routing.Router}. + * + * See "[Advanced Recipes](https://developers.google.com/web/tools/workbox/guides/advanced-recipes#make-requests)" + * for more usage information. + * + * @param {Object} options + * @param {Request|string} options.request Either a + * [`Request`]{@link https://developer.mozilla.org/en-US/docs/Web/API/Request} + * object, or a string URL, corresponding to the request to be made. + * @param {FetchEvent} [options.event] If provided, `event.waitUntil()` will + * be called automatically to extend the service worker's lifetime. + * @return {Promise} + */ + makeRequest({ event, request }) { + var _this2 = this; + + return babelHelpers.asyncToGenerator(function* () { + if (typeof request === 'string') { + request = new Request(request); + } + + { + assert_mjs.assert.isInstance(request, Request, { + moduleName: 'workbox-strategies', + className: 'NetworkOnly', + funcName: 'handle', + paramName: 'request' + }); + } + + let error; + let response; + try { + response = yield fetchWrapper_mjs.fetchWrapper.fetch({ + request, + event, + fetchOptions: _this2._fetchOptions, + plugins: _this2._plugins + }); + } catch (err) { + error = err; + } + + { + logger_mjs.logger.groupCollapsed(messages.strategyStart('NetworkOnly', request)); + if (response) { + logger_mjs.logger.log(`Got response from network.`); + } else { + logger_mjs.logger.log(`Unable to get a response from the network.`); + } + messages.printFinalResponse(response); + logger_mjs.logger.groupEnd(); + } + + // If there was an error thrown, re-throw it to ensure the Routers + // catch handler is triggered. + if (error) { + throw error; + } + + return response; + })(); + } + } + + /* + Copyright 2018 Google Inc. All Rights Reserved. + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + + /** + * An implementation of a + * [stale-while-revalidate]{@link https://developers.google.com/web/fundamentals/instant-and-offline/offline-cookbook/#stale-while-revalidate} + * request strategy. + * + * Resources are requested from both the cache and the network in parallel. + * The strategy will respond with the cached version if available, otherwise + * wait for the network response. The cache is updated with the network response + * with each successful request. + * + * By default, this strategy will cache responses with a 200 status code as + * well as [opaque responses]{@link https://developers.google.com/web/tools/workbox/guides/handle-third-party-requests}. + * Opaque responses are are cross-origin requests where the response doesn't + * support [CORS]{@link https://enable-cors.org/}. + * + * @memberof workbox.strategies + */ + class StaleWhileRevalidate { + /** + * @param {Object} options + * @param {string} options.cacheName Cache name to store and retrieve + * requests. Defaults to cache names provided by + * [workbox-core]{@link workbox.core.cacheNames}. + * @param {Array} options.plugins [Plugins]{@link https://developers.google.com/web/tools/workbox/guides/using-plugins} + * to use in conjunction with this caching strategy. + * @param {Object} options.fetchOptions Values passed along to the + * [`init`](https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch#Parameters) + * of all fetch() requests made by this strategy. + * @param {Object} options.matchOptions [`CacheQueryOptions`](https://w3c.github.io/ServiceWorker/#dictdef-cachequeryoptions) + */ + constructor(options = {}) { + this._cacheName = cacheNames_mjs.cacheNames.getRuntimeName(options.cacheName); + this._plugins = options.plugins || []; + + if (options.plugins) { + let isUsingCacheWillUpdate = options.plugins.some(plugin => !!plugin.cacheWillUpdate); + this._plugins = isUsingCacheWillUpdate ? options.plugins : [cacheOkAndOpaquePlugin, ...options.plugins]; + } else { + // No plugins passed in, use the default plugin. + this._plugins = [cacheOkAndOpaquePlugin]; + } + + this._fetchOptions = options.fetchOptions || null; + this._matchOptions = options.matchOptions || null; + } + + /** + * This method will perform a request strategy and follows an API that + * will work with the + * [Workbox Router]{@link workbox.routing.Router}. + * + * @param {Object} options + * @param {FetchEvent} options.event The fetch event to run this strategy + * against. + * @return {Promise} + */ + handle({ event }) { + var _this = this; + + return babelHelpers.asyncToGenerator(function* () { + { + assert_mjs.assert.isInstance(event, FetchEvent, { + moduleName: 'workbox-strategies', + className: 'StaleWhileRevalidate', + funcName: 'handle', + paramName: 'event' + }); + } + + return _this.makeRequest({ + event, + request: event.request + }); + })(); + } + + /** + * This method can be used to perform a make a standalone request outside the + * context of the [Workbox Router]{@link workbox.routing.Router}. + * + * See "[Advanced Recipes](https://developers.google.com/web/tools/workbox/guides/advanced-recipes#make-requests)" + * for more usage information. + * + * @param {Object} options + * @param {Request|string} options.request Either a + * [`Request`]{@link https://developer.mozilla.org/en-US/docs/Web/API/Request} + * object, or a string URL, corresponding to the request to be made. + * @param {FetchEvent} [options.event] If provided, `event.waitUntil()` will + * be called automatically to extend the service worker's lifetime. + * @return {Promise} + */ + makeRequest({ event, request }) { + var _this2 = this; + + return babelHelpers.asyncToGenerator(function* () { + const logs = []; + + if (typeof request === 'string') { + request = new Request(request); + } + + { + assert_mjs.assert.isInstance(request, Request, { + moduleName: 'workbox-strategies', + className: 'StaleWhileRevalidate', + funcName: 'handle', + paramName: 'request' + }); + } + + const fetchAndCachePromise = _this2._getFromNetwork({ request, event }); + + let response = yield cacheWrapper_mjs.cacheWrapper.match({ + cacheName: _this2._cacheName, + request, + event, + matchOptions: _this2._matchOptions, + plugins: _this2._plugins + }); + + if (response) { + { + logs.push(`Found a cached response in the '${_this2._cacheName}'` + ` cache. Will update with the network response in the background.`); + } + + if (event) { + try { + event.waitUntil(fetchAndCachePromise); + } catch (error) { + { + logger_mjs.logger.warn(`Unable to ensure service worker stays alive when ` + `updating cache for '${getFriendlyURL_mjs.getFriendlyURL(event.request.url)}'.`); + } + } + } + } else { + { + logs.push(`No response found in the '${_this2._cacheName}' cache. ` + `Will wait for the network response.`); + } + response = yield fetchAndCachePromise; + } + + { + logger_mjs.logger.groupCollapsed(messages.strategyStart('StaleWhileRevalidate', request)); + for (let log of logs) { + logger_mjs.logger.log(log); + } + messages.printFinalResponse(response); + logger_mjs.logger.groupEnd(); + } + + return response; + })(); + } + + /** + * @param {Object} options + * @param {Request} options.request + * @param {Event} [options.event] + * @return {Promise} + * + * @private + */ + _getFromNetwork({ request, event }) { + var _this3 = this; + + return babelHelpers.asyncToGenerator(function* () { + const response = yield fetchWrapper_mjs.fetchWrapper.fetch({ + request, + event, + fetchOptions: _this3._fetchOptions, + plugins: _this3._plugins + }); + + const cachePutPromise = cacheWrapper_mjs.cacheWrapper.put({ + cacheName: _this3._cacheName, + request, + response: response.clone(), + event, + plugins: _this3._plugins + }); + + if (event) { + try { + event.waitUntil(cachePutPromise); + } catch (error) { + { + logger_mjs.logger.warn(`Unable to ensure service worker stays alive when ` + `updating cache for '${getFriendlyURL_mjs.getFriendlyURL(event.request.url)}'.`); + } + } + } + + return response; + })(); + } + } + + /* + Copyright 2017 Google Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + https://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + + var publicAPI = /*#__PURE__*/Object.freeze({ + CacheFirst: CacheFirst, + CacheOnly: CacheOnly, + NetworkFirst: NetworkFirst, + NetworkOnly: NetworkOnly, + StaleWhileRevalidate: StaleWhileRevalidate + }); + + /* + Copyright 2016 Google Inc. All Rights Reserved. + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + + /** + * @function workbox.strategies.cacheFirst + * @param {Object} options See the {@link workbox.strategies.CacheFirst} + * constructor for more info. + */ + + /** + * @function workbox.strategies.cacheOnly + * @param {Object} options See the {@link workbox.strategies.CacheOnly} + * constructor for more info. + */ + + /** + * @function workbox.strategies.networkFirst + * @param {Object} options See the {@link workbox.strategies.NetworkFirst} + * constructor for more info. + */ + + /** + * @function workbox.strategies.networkOnly + * @param {Object} options See the {@link workbox.strategies.NetworkOnly} + * constructor for more info. + */ + + /** + * @function workbox.strategies.staleWhileRevalidate + * @param {Object} options See the + * {@link workbox.strategies.StaleWhileRevalidate} constructor for more info. + */ + + const mapping = { + cacheFirst: CacheFirst, + cacheOnly: CacheOnly, + networkFirst: NetworkFirst, + networkOnly: NetworkOnly, + staleWhileRevalidate: StaleWhileRevalidate + }; + + const defaultExport = {}; + Object.keys(mapping).forEach(keyName => { + defaultExport[keyName] = (options = {}) => { + const StrategyClass = mapping[keyName]; + return new StrategyClass(Object.assign(options)); + }; + }); + + /* + Copyright 2017 Google Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + https://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + + const finalExport = Object.assign(defaultExport, publicAPI); + + return finalExport; + +}(workbox.core._private,workbox.core._private,workbox.core._private,workbox.core._private,workbox.core._private,workbox.core._private)); + +//# sourceMappingURL=workbox-strategies.dev.js.map diff --git a/assets/js/workbox-v3.6.3/workbox-strategies.dev.js.map b/assets/js/workbox-v3.6.3/workbox-strategies.dev.js.map new file mode 100644 index 0000000..b865587 --- /dev/null +++ b/assets/js/workbox-v3.6.3/workbox-strategies.dev.js.map @@ -0,0 +1 @@ +{"version":3,"names":[],"mappings":"","sources":["packages/workbox-strategies/browser.mjs"],"sourcesContent":["this.workbox = this.workbox || {};\nthis.workbox.strategies = (function (logger_mjs,assert_mjs,cacheNames_mjs,cacheWrapper_mjs,fetchWrapper_mjs,getFriendlyURL_mjs) {\n 'use strict';\n\n try {\n self.workbox.v['workbox:strategies:3.6.3'] = 1;\n } catch (e) {} // eslint-disable-line\n\n /*\n Copyright 2018 Google Inc. All Rights Reserved.\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n */\n\n const getFriendlyURL = url => {\n const urlObj = new URL(url, location);\n if (urlObj.origin === location.origin) {\n return urlObj.pathname;\n }\n return urlObj.href;\n };\n\n var messages = {\n strategyStart: (strategyName, request) => `Using ${strategyName} to ` + `respond to '${getFriendlyURL(request.url)}'`,\n printFinalResponse: response => {\n if (response) {\n logger_mjs.logger.groupCollapsed(`View the final response here.`);\n logger_mjs.logger.unprefixed.log(response);\n logger_mjs.logger.groupEnd();\n }\n }\n };\n\n /*\n Copyright 2018 Google Inc. All Rights Reserved.\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n */\n\n /**\n * An implementation of a [cache-first]{@link https://developers.google.com/web/fundamentals/instant-and-offline/offline-cookbook/#cache-falling-back-to-network}\n * request strategy.\n *\n * A cache first strategy is useful for assets that have been revisioned,\n * such as URLs like `/styles/example.a8f5f1.css`, since they\n * can be cached for long periods of time.\n *\n * @memberof workbox.strategies\n */\n class CacheFirst {\n /**\n * @param {Object} options\n * @param {string} options.cacheName Cache name to store and retrieve\n * requests. Defaults to cache names provided by\n * [workbox-core]{@link workbox.core.cacheNames}.\n * @param {Array} options.plugins [Plugins]{@link https://developers.google.com/web/tools/workbox/guides/using-plugins}\n * to use in conjunction with this caching strategy.\n * @param {Object} options.fetchOptions Values passed along to the\n * [`init`](https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch#Parameters)\n * of all fetch() requests made by this strategy.\n * @param {Object} options.matchOptions [`CacheQueryOptions`](https://w3c.github.io/ServiceWorker/#dictdef-cachequeryoptions)\n */\n constructor(options = {}) {\n this._cacheName = cacheNames_mjs.cacheNames.getRuntimeName(options.cacheName);\n this._plugins = options.plugins || [];\n this._fetchOptions = options.fetchOptions || null;\n this._matchOptions = options.matchOptions || null;\n }\n\n /**\n * This method will perform a request strategy and follows an API that\n * will work with the\n * [Workbox Router]{@link workbox.routing.Router}.\n *\n * @param {Object} options\n * @param {FetchEvent} options.event The fetch event to run this strategy\n * against.\n * @return {Promise}\n */\n handle({ event }) {\n var _this = this;\n\n return babelHelpers.asyncToGenerator(function* () {\n {\n assert_mjs.assert.isInstance(event, FetchEvent, {\n moduleName: 'workbox-strategies',\n className: 'CacheFirst',\n funcName: 'handle',\n paramName: 'event'\n });\n }\n\n return _this.makeRequest({\n event,\n request: event.request\n });\n })();\n }\n\n /**\n * This method can be used to perform a make a standalone request outside the\n * context of the [Workbox Router]{@link workbox.routing.Router}.\n *\n * See \"[Advanced Recipes](https://developers.google.com/web/tools/workbox/guides/advanced-recipes#make-requests)\"\n * for more usage information.\n *\n * @param {Object} options\n * @param {Request|string} options.request Either a\n * [`Request`]{@link https://developer.mozilla.org/en-US/docs/Web/API/Request}\n * object, or a string URL, corresponding to the request to be made.\n * @param {FetchEvent} [options.event] If provided, `event.waitUntil()` will\n be called automatically to extend the service worker's lifetime.\n * @return {Promise}\n */\n makeRequest({ event, request }) {\n var _this2 = this;\n\n return babelHelpers.asyncToGenerator(function* () {\n const logs = [];\n\n if (typeof request === 'string') {\n request = new Request(request);\n }\n\n {\n assert_mjs.assert.isInstance(request, Request, {\n moduleName: 'workbox-strategies',\n className: 'CacheFirst',\n funcName: 'makeRequest',\n paramName: 'request'\n });\n }\n\n let response = yield cacheWrapper_mjs.cacheWrapper.match({\n cacheName: _this2._cacheName,\n request,\n event,\n matchOptions: _this2._matchOptions,\n plugins: _this2._plugins\n });\n\n let error;\n if (!response) {\n {\n logs.push(`No response found in the '${_this2._cacheName}' cache. ` + `Will respond with a network request.`);\n }\n try {\n response = yield _this2._getFromNetwork(request, event);\n } catch (err) {\n error = err;\n }\n\n {\n if (response) {\n logs.push(`Got response from network.`);\n } else {\n logs.push(`Unable to get a response from the network.`);\n }\n }\n } else {\n {\n logs.push(`Found a cached response in the '${_this2._cacheName}' cache.`);\n }\n }\n\n {\n logger_mjs.logger.groupCollapsed(messages.strategyStart('CacheFirst', request));\n for (let log of logs) {\n logger_mjs.logger.log(log);\n }\n messages.printFinalResponse(response);\n logger_mjs.logger.groupEnd();\n }\n\n if (error) {\n // Don't swallow error as we'll want it to throw and enable catch\n // handlers in router.\n throw error;\n }\n\n return response;\n })();\n }\n\n /**\n * Handles the network and cache part of CacheFirst.\n *\n * @param {Request} request\n * @param {FetchEvent} [event]\n * @return {Promise}\n *\n * @private\n */\n _getFromNetwork(request, event) {\n var _this3 = this;\n\n return babelHelpers.asyncToGenerator(function* () {\n const response = yield fetchWrapper_mjs.fetchWrapper.fetch({\n request,\n event,\n fetchOptions: _this3._fetchOptions,\n plugins: _this3._plugins\n });\n\n // Keep the service worker while we put the request to the cache\n const responseClone = response.clone();\n const cachePutPromise = cacheWrapper_mjs.cacheWrapper.put({\n cacheName: _this3._cacheName,\n request,\n response: responseClone,\n event,\n plugins: _this3._plugins\n });\n\n if (event) {\n try {\n event.waitUntil(cachePutPromise);\n } catch (error) {\n {\n logger_mjs.logger.warn(`Unable to ensure service worker stays alive when ` + `updating cache for '${getFriendlyURL_mjs.getFriendlyURL(event.request.url)}'.`);\n }\n }\n }\n\n return response;\n })();\n }\n }\n\n /*\n Copyright 2018 Google Inc. All Rights Reserved.\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n */\n\n /**\n * An implementation of a\n * [cache-only]{@link https://developers.google.com/web/fundamentals/instant-and-offline/offline-cookbook/#cache-only}\n * request strategy.\n *\n * This class is useful if you want to take advantage of any [Workbox plugins]{@link https://developers.google.com/web/tools/workbox/guides/using-plugins}.\n *\n * @memberof workbox.strategies\n */\n class CacheOnly {\n /**\n * @param {Object} options\n * @param {string} options.cacheName Cache name to store and retrieve\n * requests. Defaults to cache names provided by\n * [workbox-core]{@link workbox.core.cacheNames}.\n * @param {Array} options.plugins [Plugins]{@link https://developers.google.com/web/tools/workbox/guides/using-plugins}\n * to use in conjunction with this caching strategy.\n * @param {Object} options.matchOptions [`CacheQueryOptions`](https://w3c.github.io/ServiceWorker/#dictdef-cachequeryoptions)\n */\n constructor(options = {}) {\n this._cacheName = cacheNames_mjs.cacheNames.getRuntimeName(options.cacheName);\n this._plugins = options.plugins || [];\n this._matchOptions = options.matchOptions || null;\n }\n\n /**\n * This method will perform a request strategy and follows an API that\n * will work with the\n * [Workbox Router]{@link workbox.routing.Router}.\n *\n * @param {Object} options\n * @param {FetchEvent} options.event The fetch event to run this strategy\n * against.\n * @return {Promise}\n */\n handle({ event }) {\n var _this = this;\n\n return babelHelpers.asyncToGenerator(function* () {\n {\n assert_mjs.assert.isInstance(event, FetchEvent, {\n moduleName: 'workbox-strategies',\n className: 'CacheOnly',\n funcName: 'handle',\n paramName: 'event'\n });\n }\n\n return _this.makeRequest({\n event,\n request: event.request\n });\n })();\n }\n\n /**\n * This method can be used to perform a make a standalone request outside the\n * context of the [Workbox Router]{@link workbox.routing.Router}.\n *\n * See \"[Advanced Recipes](https://developers.google.com/web/tools/workbox/guides/advanced-recipes#make-requests)\"\n * for more usage information.\n *\n * @param {Object} options\n * @param {Request|string} options.request Either a\n * [`Request`]{@link https://developer.mozilla.org/en-US/docs/Web/API/Request}\n * object, or a string URL, corresponding to the request to be made.\n * @param {FetchEvent} [options.event] If provided, `event.waitUntil()` will\n * be called automatically to extend the service worker's lifetime.\n * @return {Promise}\n */\n makeRequest({ event, request }) {\n var _this2 = this;\n\n return babelHelpers.asyncToGenerator(function* () {\n if (typeof request === 'string') {\n request = new Request(request);\n }\n\n {\n assert_mjs.assert.isInstance(request, Request, {\n moduleName: 'workbox-strategies',\n className: 'CacheOnly',\n funcName: 'makeRequest',\n paramName: 'request'\n });\n }\n\n const response = yield cacheWrapper_mjs.cacheWrapper.match({\n cacheName: _this2._cacheName,\n request,\n event,\n matchOptions: _this2._matchOptions,\n plugins: _this2._plugins\n });\n\n {\n logger_mjs.logger.groupCollapsed(messages.strategyStart('CacheOnly', request));\n if (response) {\n logger_mjs.logger.log(`Found a cached response in the '${_this2._cacheName}'` + ` cache.`);\n messages.printFinalResponse(response);\n } else {\n logger_mjs.logger.log(`No response found in the '${_this2._cacheName}' cache.`);\n }\n logger_mjs.logger.groupEnd();\n }\n\n return response;\n })();\n }\n }\n\n /*\n Copyright 2016 Google Inc. All Rights Reserved.\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n */\n\n var cacheOkAndOpaquePlugin = {\n /**\n * Return return a response (i.e. allow caching) if the\n * response is ok (i.e. 200) or is opaque.\n *\n * @param {Object} options\n * @param {Response} options.response\n * @return {Response|null}\n *\n * @private\n */\n cacheWillUpdate: ({ response }) => {\n if (response.ok || response.status === 0) {\n return response;\n }\n return null;\n }\n };\n\n /*\n Copyright 2018 Google Inc. All Rights Reserved.\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n */\n\n /**\n * An implementation of a\n * [network first]{@link https://developers.google.com/web/fundamentals/instant-and-offline/offline-cookbook/#network-falling-back-to-cache}\n * request strategy.\n *\n * By default, this strategy will cache responses with a 200 status code as\n * well as [opaque responses]{@link https://developers.google.com/web/tools/workbox/guides/handle-third-party-requests}.\n * Opaque responses are are cross-origin requests where the response doesn't\n * support [CORS]{@link https://enable-cors.org/}.\n *\n * @memberof workbox.strategies\n */\n class NetworkFirst {\n /**\n * @param {Object} options\n * @param {string} options.cacheName Cache name to store and retrieve\n * requests. Defaults to cache names provided by\n * [workbox-core]{@link workbox.core.cacheNames}.\n * @param {Array} options.plugins [Plugins]{@link https://developers.google.com/web/tools/workbox/guides/using-plugins}\n * to use in conjunction with this caching strategy.\n * @param {Object} options.fetchOptions Values passed along to the\n * [`init`](https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch#Parameters)\n * of all fetch() requests made by this strategy.\n * @param {Object} options.matchOptions [`CacheQueryOptions`](https://w3c.github.io/ServiceWorker/#dictdef-cachequeryoptions)\n * @param {number} options.networkTimeoutSeconds If set, any network requests\n * that fail to respond within the timeout will fallback to the cache.\n *\n * This option can be used to combat\n * \"[lie-fi]{@link https://developers.google.com/web/fundamentals/performance/poor-connectivity/#lie-fi}\"\n * scenarios.\n */\n constructor(options = {}) {\n this._cacheName = cacheNames_mjs.cacheNames.getRuntimeName(options.cacheName);\n\n if (options.plugins) {\n let isUsingCacheWillUpdate = options.plugins.some(plugin => !!plugin.cacheWillUpdate);\n this._plugins = isUsingCacheWillUpdate ? options.plugins : [cacheOkAndOpaquePlugin, ...options.plugins];\n } else {\n // No plugins passed in, use the default plugin.\n this._plugins = [cacheOkAndOpaquePlugin];\n }\n\n this._networkTimeoutSeconds = options.networkTimeoutSeconds;\n {\n if (this._networkTimeoutSeconds) {\n assert_mjs.assert.isType(this._networkTimeoutSeconds, 'number', {\n moduleName: 'workbox-strategies',\n className: 'NetworkFirst',\n funcName: 'constructor',\n paramName: 'networkTimeoutSeconds'\n });\n }\n }\n\n this._fetchOptions = options.fetchOptions || null;\n this._matchOptions = options.matchOptions || null;\n }\n\n /**\n * This method will perform a request strategy and follows an API that\n * will work with the\n * [Workbox Router]{@link workbox.routing.Router}.\n *\n * @param {Object} options\n * @param {FetchEvent} options.event The fetch event to run this strategy\n * against.\n * @return {Promise}\n */\n handle({ event }) {\n var _this = this;\n\n return babelHelpers.asyncToGenerator(function* () {\n {\n assert_mjs.assert.isInstance(event, FetchEvent, {\n moduleName: 'workbox-strategies',\n className: 'NetworkFirst',\n funcName: 'handle',\n paramName: 'event'\n });\n }\n\n return _this.makeRequest({\n event,\n request: event.request\n });\n })();\n }\n\n /**\n * This method can be used to perform a make a standalone request outside the\n * context of the [Workbox Router]{@link workbox.routing.Router}.\n *\n * See \"[Advanced Recipes](https://developers.google.com/web/tools/workbox/guides/advanced-recipes#make-requests)\"\n * for more usage information.\n *\n * @param {Object} options\n * @param {Request|string} options.request Either a\n * [`Request`]{@link https://developer.mozilla.org/en-US/docs/Web/API/Request}\n * object, or a string URL, corresponding to the request to be made.\n * @param {FetchEvent} [options.event] If provided, `event.waitUntil()` will\n * be called automatically to extend the service worker's lifetime.\n * @return {Promise}\n */\n makeRequest({ event, request }) {\n var _this2 = this;\n\n return babelHelpers.asyncToGenerator(function* () {\n const logs = [];\n\n if (typeof request === 'string') {\n request = new Request(request);\n }\n\n {\n assert_mjs.assert.isInstance(request, Request, {\n moduleName: 'workbox-strategies',\n className: 'NetworkFirst',\n funcName: 'handle',\n paramName: 'makeRequest'\n });\n }\n\n const promises = [];\n let timeoutId;\n\n if (_this2._networkTimeoutSeconds) {\n const { id, promise } = _this2._getTimeoutPromise({ request, event, logs });\n timeoutId = id;\n promises.push(promise);\n }\n\n const networkPromise = _this2._getNetworkPromise({ timeoutId, request, event, logs });\n promises.push(networkPromise);\n\n // Promise.race() will resolve as soon as the first promise resolves.\n let response = yield Promise.race(promises);\n // If Promise.race() resolved with null, it might be due to a network\n // timeout + a cache miss. If that were to happen, we'd rather wait until\n // the networkPromise resolves instead of returning null.\n // Note that it's fine to await an already-resolved promise, so we don't\n // have to check to see if it's still \"in flight\".\n if (!response) {\n response = yield networkPromise;\n }\n\n {\n logger_mjs.logger.groupCollapsed(messages.strategyStart('NetworkFirst', request));\n for (let log of logs) {\n logger_mjs.logger.log(log);\n }\n messages.printFinalResponse(response);\n logger_mjs.logger.groupEnd();\n }\n\n return response;\n })();\n }\n\n /**\n * @param {Object} options\n * @param {Request} options.request\n * @param {Array} options.logs A reference to the logs array\n * @param {Event} [options.event]\n * @return {Promise}\n *\n * @private\n */\n _getTimeoutPromise({ request, logs, event }) {\n var _this3 = this;\n\n let timeoutId;\n const timeoutPromise = new Promise(resolve => {\n const onNetworkTimeout = (() => {\n var _ref = babelHelpers.asyncToGenerator(function* () {\n {\n logs.push(`Timing out the network response at ` + `${_this3._networkTimeoutSeconds} seconds.`);\n }\n\n resolve((yield _this3._respondFromCache({ request, event })));\n });\n\n return function onNetworkTimeout() {\n return _ref.apply(this, arguments);\n };\n })();\n\n timeoutId = setTimeout(onNetworkTimeout, this._networkTimeoutSeconds * 1000);\n });\n\n return {\n promise: timeoutPromise,\n id: timeoutId\n };\n }\n\n /**\n * @param {Object} options\n * @param {number|undefined} options.timeoutId\n * @param {Request} options.request\n * @param {Array} options.logs A reference to the logs Array.\n * @param {Event} [options.event]\n * @return {Promise}\n *\n * @private\n */\n _getNetworkPromise({ timeoutId, request, logs, event }) {\n var _this4 = this;\n\n return babelHelpers.asyncToGenerator(function* () {\n let error;\n let response;\n try {\n response = yield fetchWrapper_mjs.fetchWrapper.fetch({\n request,\n event,\n fetchOptions: _this4._fetchOptions,\n plugins: _this4._plugins\n });\n } catch (err) {\n error = err;\n }\n\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n\n {\n if (response) {\n logs.push(`Got response from network.`);\n } else {\n logs.push(`Unable to get a response from the network. Will respond ` + `with a cached response.`);\n }\n }\n\n if (error || !response) {\n response = yield _this4._respondFromCache({ request, event });\n {\n if (response) {\n logs.push(`Found a cached response in the '${_this4._cacheName}'` + ` cache.`);\n } else {\n logs.push(`No response found in the '${_this4._cacheName}' cache.`);\n }\n }\n } else {\n // Keep the service worker alive while we put the request in the cache\n const responseClone = response.clone();\n const cachePut = cacheWrapper_mjs.cacheWrapper.put({\n cacheName: _this4._cacheName,\n request,\n response: responseClone,\n event,\n plugins: _this4._plugins\n });\n\n if (event) {\n try {\n // The event has been responded to so we can keep the SW alive to\n // respond to the request\n event.waitUntil(cachePut);\n } catch (err) {\n {\n logger_mjs.logger.warn(`Unable to ensure service worker stays alive when ` + `updating cache for '${getFriendlyURL_mjs.getFriendlyURL(event.request.url)}'.`);\n }\n }\n }\n }\n\n return response;\n })();\n }\n\n /**\n * Used if the network timeouts or fails to make the request.\n *\n * @param {Object} options\n * @param {Request} request The request to match in the cache\n * @param {Event} [options.event]\n * @return {Promise}\n *\n * @private\n */\n _respondFromCache({ event, request }) {\n return cacheWrapper_mjs.cacheWrapper.match({\n cacheName: this._cacheName,\n request,\n event,\n matchOptions: this._matchOptions,\n plugins: this._plugins\n });\n }\n }\n\n /*\n Copyright 2018 Google Inc. All Rights Reserved.\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n */\n\n /**\n * An implementation of a\n * [network-only]{@link https://developers.google.com/web/fundamentals/instant-and-offline/offline-cookbook/#network-only}\n * request strategy.\n *\n * This class is useful if you want to take advantage of any [Workbox plugins]{@link https://developers.google.com/web/tools/workbox/guides/using-plugins}.\n *\n * @memberof workbox.strategies\n */\n class NetworkOnly {\n /**\n * @param {Object} options\n * @param {string} options.cacheName Cache name to store and retrieve\n * requests. Defaults to cache names provided by\n * [workbox-core]{@link workbox.core.cacheNames}.\n * @param {Array} options.plugins [Plugins]{@link https://developers.google.com/web/tools/workbox/guides/using-plugins}\n * to use in conjunction with this caching strategy.\n * @param {Object} options.fetchOptions Values passed along to the\n * [`init`](https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch#Parameters)\n * of all fetch() requests made by this strategy.\n */\n constructor(options = {}) {\n this._cacheName = cacheNames_mjs.cacheNames.getRuntimeName(options.cacheName);\n this._plugins = options.plugins || [];\n this._fetchOptions = options.fetchOptions || null;\n }\n\n /**\n * This method will perform a request strategy and follows an API that\n * will work with the\n * [Workbox Router]{@link workbox.routing.Router}.\n *\n * @param {Object} options\n * @param {FetchEvent} options.event The fetch event to run this strategy\n * against.\n * @return {Promise}\n */\n handle({ event }) {\n var _this = this;\n\n return babelHelpers.asyncToGenerator(function* () {\n {\n assert_mjs.assert.isInstance(event, FetchEvent, {\n moduleName: 'workbox-strategies',\n className: 'NetworkOnly',\n funcName: 'handle',\n paramName: 'event'\n });\n }\n\n return _this.makeRequest({\n event,\n request: event.request\n });\n })();\n }\n\n /**\n * This method can be used to perform a make a standalone request outside the\n * context of the [Workbox Router]{@link workbox.routing.Router}.\n *\n * See \"[Advanced Recipes](https://developers.google.com/web/tools/workbox/guides/advanced-recipes#make-requests)\"\n * for more usage information.\n *\n * @param {Object} options\n * @param {Request|string} options.request Either a\n * [`Request`]{@link https://developer.mozilla.org/en-US/docs/Web/API/Request}\n * object, or a string URL, corresponding to the request to be made.\n * @param {FetchEvent} [options.event] If provided, `event.waitUntil()` will\n * be called automatically to extend the service worker's lifetime.\n * @return {Promise}\n */\n makeRequest({ event, request }) {\n var _this2 = this;\n\n return babelHelpers.asyncToGenerator(function* () {\n if (typeof request === 'string') {\n request = new Request(request);\n }\n\n {\n assert_mjs.assert.isInstance(request, Request, {\n moduleName: 'workbox-strategies',\n className: 'NetworkOnly',\n funcName: 'handle',\n paramName: 'request'\n });\n }\n\n let error;\n let response;\n try {\n response = yield fetchWrapper_mjs.fetchWrapper.fetch({\n request,\n event,\n fetchOptions: _this2._fetchOptions,\n plugins: _this2._plugins\n });\n } catch (err) {\n error = err;\n }\n\n {\n logger_mjs.logger.groupCollapsed(messages.strategyStart('NetworkOnly', request));\n if (response) {\n logger_mjs.logger.log(`Got response from network.`);\n } else {\n logger_mjs.logger.log(`Unable to get a response from the network.`);\n }\n messages.printFinalResponse(response);\n logger_mjs.logger.groupEnd();\n }\n\n // If there was an error thrown, re-throw it to ensure the Routers\n // catch handler is triggered.\n if (error) {\n throw error;\n }\n\n return response;\n })();\n }\n }\n\n /*\n Copyright 2018 Google Inc. All Rights Reserved.\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n */\n\n /**\n * An implementation of a\n * [stale-while-revalidate]{@link https://developers.google.com/web/fundamentals/instant-and-offline/offline-cookbook/#stale-while-revalidate}\n * request strategy.\n *\n * Resources are requested from both the cache and the network in parallel.\n * The strategy will respond with the cached version if available, otherwise\n * wait for the network response. The cache is updated with the network response\n * with each successful request.\n *\n * By default, this strategy will cache responses with a 200 status code as\n * well as [opaque responses]{@link https://developers.google.com/web/tools/workbox/guides/handle-third-party-requests}.\n * Opaque responses are are cross-origin requests where the response doesn't\n * support [CORS]{@link https://enable-cors.org/}.\n *\n * @memberof workbox.strategies\n */\n class StaleWhileRevalidate {\n /**\n * @param {Object} options\n * @param {string} options.cacheName Cache name to store and retrieve\n * requests. Defaults to cache names provided by\n * [workbox-core]{@link workbox.core.cacheNames}.\n * @param {Array} options.plugins [Plugins]{@link https://developers.google.com/web/tools/workbox/guides/using-plugins}\n * to use in conjunction with this caching strategy.\n * @param {Object} options.fetchOptions Values passed along to the\n * [`init`](https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch#Parameters)\n * of all fetch() requests made by this strategy.\n * @param {Object} options.matchOptions [`CacheQueryOptions`](https://w3c.github.io/ServiceWorker/#dictdef-cachequeryoptions)\n */\n constructor(options = {}) {\n this._cacheName = cacheNames_mjs.cacheNames.getRuntimeName(options.cacheName);\n this._plugins = options.plugins || [];\n\n if (options.plugins) {\n let isUsingCacheWillUpdate = options.plugins.some(plugin => !!plugin.cacheWillUpdate);\n this._plugins = isUsingCacheWillUpdate ? options.plugins : [cacheOkAndOpaquePlugin, ...options.plugins];\n } else {\n // No plugins passed in, use the default plugin.\n this._plugins = [cacheOkAndOpaquePlugin];\n }\n\n this._fetchOptions = options.fetchOptions || null;\n this._matchOptions = options.matchOptions || null;\n }\n\n /**\n * This method will perform a request strategy and follows an API that\n * will work with the\n * [Workbox Router]{@link workbox.routing.Router}.\n *\n * @param {Object} options\n * @param {FetchEvent} options.event The fetch event to run this strategy\n * against.\n * @return {Promise}\n */\n handle({ event }) {\n var _this = this;\n\n return babelHelpers.asyncToGenerator(function* () {\n {\n assert_mjs.assert.isInstance(event, FetchEvent, {\n moduleName: 'workbox-strategies',\n className: 'StaleWhileRevalidate',\n funcName: 'handle',\n paramName: 'event'\n });\n }\n\n return _this.makeRequest({\n event,\n request: event.request\n });\n })();\n }\n\n /**\n * This method can be used to perform a make a standalone request outside the\n * context of the [Workbox Router]{@link workbox.routing.Router}.\n *\n * See \"[Advanced Recipes](https://developers.google.com/web/tools/workbox/guides/advanced-recipes#make-requests)\"\n * for more usage information.\n *\n * @param {Object} options\n * @param {Request|string} options.request Either a\n * [`Request`]{@link https://developer.mozilla.org/en-US/docs/Web/API/Request}\n * object, or a string URL, corresponding to the request to be made.\n * @param {FetchEvent} [options.event] If provided, `event.waitUntil()` will\n * be called automatically to extend the service worker's lifetime.\n * @return {Promise}\n */\n makeRequest({ event, request }) {\n var _this2 = this;\n\n return babelHelpers.asyncToGenerator(function* () {\n const logs = [];\n\n if (typeof request === 'string') {\n request = new Request(request);\n }\n\n {\n assert_mjs.assert.isInstance(request, Request, {\n moduleName: 'workbox-strategies',\n className: 'StaleWhileRevalidate',\n funcName: 'handle',\n paramName: 'request'\n });\n }\n\n const fetchAndCachePromise = _this2._getFromNetwork({ request, event });\n\n let response = yield cacheWrapper_mjs.cacheWrapper.match({\n cacheName: _this2._cacheName,\n request,\n event,\n matchOptions: _this2._matchOptions,\n plugins: _this2._plugins\n });\n\n if (response) {\n {\n logs.push(`Found a cached response in the '${_this2._cacheName}'` + ` cache. Will update with the network response in the background.`);\n }\n\n if (event) {\n try {\n event.waitUntil(fetchAndCachePromise);\n } catch (error) {\n {\n logger_mjs.logger.warn(`Unable to ensure service worker stays alive when ` + `updating cache for '${getFriendlyURL_mjs.getFriendlyURL(event.request.url)}'.`);\n }\n }\n }\n } else {\n {\n logs.push(`No response found in the '${_this2._cacheName}' cache. ` + `Will wait for the network response.`);\n }\n response = yield fetchAndCachePromise;\n }\n\n {\n logger_mjs.logger.groupCollapsed(messages.strategyStart('StaleWhileRevalidate', request));\n for (let log of logs) {\n logger_mjs.logger.log(log);\n }\n messages.printFinalResponse(response);\n logger_mjs.logger.groupEnd();\n }\n\n return response;\n })();\n }\n\n /**\n * @param {Object} options\n * @param {Request} options.request\n * @param {Event} [options.event]\n * @return {Promise}\n *\n * @private\n */\n _getFromNetwork({ request, event }) {\n var _this3 = this;\n\n return babelHelpers.asyncToGenerator(function* () {\n const response = yield fetchWrapper_mjs.fetchWrapper.fetch({\n request,\n event,\n fetchOptions: _this3._fetchOptions,\n plugins: _this3._plugins\n });\n\n const cachePutPromise = cacheWrapper_mjs.cacheWrapper.put({\n cacheName: _this3._cacheName,\n request,\n response: response.clone(),\n event,\n plugins: _this3._plugins\n });\n\n if (event) {\n try {\n event.waitUntil(cachePutPromise);\n } catch (error) {\n {\n logger_mjs.logger.warn(`Unable to ensure service worker stays alive when ` + `updating cache for '${getFriendlyURL_mjs.getFriendlyURL(event.request.url)}'.`);\n }\n }\n }\n\n return response;\n })();\n }\n }\n\n /*\n Copyright 2017 Google Inc.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n https://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n */\n\n var publicAPI = /*#__PURE__*/Object.freeze({\n CacheFirst: CacheFirst,\n CacheOnly: CacheOnly,\n NetworkFirst: NetworkFirst,\n NetworkOnly: NetworkOnly,\n StaleWhileRevalidate: StaleWhileRevalidate\n });\n\n /*\n Copyright 2016 Google Inc. All Rights Reserved.\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n */\n\n /**\n * @function workbox.strategies.cacheFirst\n * @param {Object} options See the {@link workbox.strategies.CacheFirst}\n * constructor for more info.\n */\n\n /**\n * @function workbox.strategies.cacheOnly\n * @param {Object} options See the {@link workbox.strategies.CacheOnly}\n * constructor for more info.\n */\n\n /**\n * @function workbox.strategies.networkFirst\n * @param {Object} options See the {@link workbox.strategies.NetworkFirst}\n * constructor for more info.\n */\n\n /**\n * @function workbox.strategies.networkOnly\n * @param {Object} options See the {@link workbox.strategies.NetworkOnly}\n * constructor for more info.\n */\n\n /**\n * @function workbox.strategies.staleWhileRevalidate\n * @param {Object} options See the\n * {@link workbox.strategies.StaleWhileRevalidate} constructor for more info.\n */\n\n const mapping = {\n cacheFirst: CacheFirst,\n cacheOnly: CacheOnly,\n networkFirst: NetworkFirst,\n networkOnly: NetworkOnly,\n staleWhileRevalidate: StaleWhileRevalidate\n };\n\n const defaultExport = {};\n Object.keys(mapping).forEach(keyName => {\n defaultExport[keyName] = (options = {}) => {\n const StrategyClass = mapping[keyName];\n return new StrategyClass(Object.assign(options));\n };\n });\n\n /*\n Copyright 2017 Google Inc.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n https://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n */\n\n const finalExport = Object.assign(defaultExport, publicAPI);\n\n return finalExport;\n\n}(workbox.core._private,workbox.core._private,workbox.core._private,workbox.core._private,workbox.core._private,workbox.core._private));\n"],"file":"workbox-strategies.dev.js"} \ No newline at end of file diff --git a/assets/js/workbox-v3.6.3/workbox-strategies.prod.js b/assets/js/workbox-v3.6.3/workbox-strategies.prod.js new file mode 100644 index 0000000..9cdefea --- /dev/null +++ b/assets/js/workbox-v3.6.3/workbox-strategies.prod.js @@ -0,0 +1,3 @@ +this.workbox=this.workbox||{},this.workbox.strategies=function(e,t,s){"use strict";try{self.workbox.v["workbox:strategies:3.6.3"]=1}catch(e){}class r{constructor(t={}){this.e=e.cacheNames.getRuntimeName(t.cacheName),this.t=t.plugins||[],this.s=t.fetchOptions||null,this.r=t.matchOptions||null}handle({event:e}){var t=this;return babelHelpers.asyncToGenerator(function*(){return t.makeRequest({event:e,request:e.request})})()}makeRequest({event:e,request:s}){var r=this;return babelHelpers.asyncToGenerator(function*(){"string"==typeof s&&(s=new Request(s));let n,i=yield t.cacheWrapper.match({cacheName:r.e,request:s,event:e,matchOptions:r.r,plugins:r.t});if(!i)try{i=yield r.n(s,e)}catch(e){n=e}if(n)throw n;return i})()}n(e,r){var n=this;return babelHelpers.asyncToGenerator(function*(){const i=yield s.fetchWrapper.fetch({request:e,event:r,fetchOptions:n.s,plugins:n.t}),u=i.clone(),l=t.cacheWrapper.put({cacheName:n.e,request:e,response:u,event:r,plugins:n.t});if(r)try{r.waitUntil(l)}catch(e){}return i})()}}class n{constructor(t={}){this.e=e.cacheNames.getRuntimeName(t.cacheName),this.t=t.plugins||[],this.r=t.matchOptions||null}handle({event:e}){var t=this;return babelHelpers.asyncToGenerator(function*(){return t.makeRequest({event:e,request:e.request})})()}makeRequest({event:e,request:s}){var r=this;return babelHelpers.asyncToGenerator(function*(){return"string"==typeof s&&(s=new Request(s)),yield t.cacheWrapper.match({cacheName:r.e,request:s,event:e,matchOptions:r.r,plugins:r.t})})()}}var i={cacheWillUpdate:({response:e})=>e.ok||0===e.status?e:null};class u{constructor(t={}){if(this.e=e.cacheNames.getRuntimeName(t.cacheName),t.plugins){let e=t.plugins.some(e=>!!e.cacheWillUpdate);this.t=e?t.plugins:[i,...t.plugins]}else this.t=[i];this.i=t.networkTimeoutSeconds,this.s=t.fetchOptions||null,this.r=t.matchOptions||null}handle({event:e}){var t=this;return babelHelpers.asyncToGenerator(function*(){return t.makeRequest({event:e,request:e.request})})()}makeRequest({event:e,request:t}){var s=this;return babelHelpers.asyncToGenerator(function*(){const r=[];"string"==typeof t&&(t=new Request(t));const n=[];let i;if(s.i){const{id:u,promise:l}=s.u({request:t,event:e,logs:r});i=u,n.push(l)}const u=s.l({timeoutId:i,request:t,event:e,logs:r});n.push(u);let l=yield Promise.race(n);return l||(l=yield u),l})()}u({request:e,logs:t,event:s}){var r=this;let n;var i;return{promise:new Promise(t=>{const u=(i=babelHelpers.asyncToGenerator(function*(){t(yield r.c({request:e,event:s}))}),function(){return i.apply(this,arguments)});n=setTimeout(u,1e3*this.i)}),id:n}}l({timeoutId:e,request:r,logs:n,event:i}){var u=this;return babelHelpers.asyncToGenerator(function*(){let n,l;try{l=yield s.fetchWrapper.fetch({request:r,event:i,fetchOptions:u.s,plugins:u.t})}catch(e){n=e}if(e&&clearTimeout(e),n||!l)l=yield u.c({request:r,event:i});else{const e=l.clone(),s=t.cacheWrapper.put({cacheName:u.e,request:r,response:e,event:i,plugins:u.t});if(i)try{i.waitUntil(s)}catch(e){}}return l})()}c({event:e,request:s}){return t.cacheWrapper.match({cacheName:this.e,request:s,event:e,matchOptions:this.r,plugins:this.t})}}class l{constructor(t={}){this.e=e.cacheNames.getRuntimeName(t.cacheName),this.t=t.plugins||[],this.s=t.fetchOptions||null}handle({event:e}){var t=this;return babelHelpers.asyncToGenerator(function*(){return t.makeRequest({event:e,request:e.request})})()}makeRequest({event:e,request:t}){var r=this;return babelHelpers.asyncToGenerator(function*(){let n,i;"string"==typeof t&&(t=new Request(t));try{i=yield s.fetchWrapper.fetch({request:t,event:e,fetchOptions:r.s,plugins:r.t})}catch(e){n=e}if(n)throw n;return i})()}}class c{constructor(t={}){if(this.e=e.cacheNames.getRuntimeName(t.cacheName),this.t=t.plugins||[],t.plugins){let e=t.plugins.some(e=>!!e.cacheWillUpdate);this.t=e?t.plugins:[i,...t.plugins]}else this.t=[i];this.s=t.fetchOptions||null,this.r=t.matchOptions||null}handle({event:e}){var t=this;return babelHelpers.asyncToGenerator(function*(){return t.makeRequest({event:e,request:e.request})})()}makeRequest({event:e,request:s}){var r=this;return babelHelpers.asyncToGenerator(function*(){"string"==typeof s&&(s=new Request(s));const n=r.n({request:s,event:e});let i=yield t.cacheWrapper.match({cacheName:r.e,request:s,event:e,matchOptions:r.r,plugins:r.t});if(i){if(e)try{e.waitUntil(n)}catch(e){}}else i=yield n;return i})()}n({request:e,event:r}){var n=this;return babelHelpers.asyncToGenerator(function*(){const i=yield s.fetchWrapper.fetch({request:e,event:r,fetchOptions:n.s,plugins:n.t}),u=t.cacheWrapper.put({cacheName:n.e,request:e,response:i.clone(),event:r,plugins:n.t});if(r)try{r.waitUntil(u)}catch(e){}return i})()}}var o=Object.freeze({CacheFirst:r,CacheOnly:n,NetworkFirst:u,NetworkOnly:l,StaleWhileRevalidate:c});const a={cacheFirst:r,cacheOnly:n,networkFirst:u,networkOnly:l,staleWhileRevalidate:c},h={};return Object.keys(a).forEach(e=>{h[e]=((t={})=>{return new(0,a[e])(Object.assign(t))})}),Object.assign(h,o)}(workbox.core._private,workbox.core._private,workbox.core._private); + +//# sourceMappingURL=workbox-strategies.prod.js.map diff --git a/assets/js/workbox-v3.6.3/workbox-strategies.prod.js.map b/assets/js/workbox-v3.6.3/workbox-strategies.prod.js.map new file mode 100644 index 0000000..3e527ea --- /dev/null +++ b/assets/js/workbox-v3.6.3/workbox-strategies.prod.js.map @@ -0,0 +1 @@ +{"version":3,"names":[],"mappings":"","sources":["packages/workbox-strategies/browser.mjs"],"sourcesContent":["this.workbox=this.workbox||{},this.workbox.strategies=function(e,t,s){\"use strict\";try{self.workbox.v[\"workbox:strategies:3.6.3\"]=1}catch(e){}class r{constructor(t={}){this.e=e.cacheNames.getRuntimeName(t.cacheName),this.t=t.plugins||[],this.s=t.fetchOptions||null,this.r=t.matchOptions||null}handle({event:e}){var t=this;return babelHelpers.asyncToGenerator(function*(){return t.makeRequest({event:e,request:e.request})})()}makeRequest({event:e,request:s}){var r=this;return babelHelpers.asyncToGenerator(function*(){\"string\"==typeof s&&(s=new Request(s));let n,i=yield t.cacheWrapper.match({cacheName:r.e,request:s,event:e,matchOptions:r.r,plugins:r.t});if(!i)try{i=yield r.n(s,e)}catch(e){n=e}if(n)throw n;return i})()}n(e,r){var n=this;return babelHelpers.asyncToGenerator(function*(){const i=yield s.fetchWrapper.fetch({request:e,event:r,fetchOptions:n.s,plugins:n.t}),u=i.clone(),l=t.cacheWrapper.put({cacheName:n.e,request:e,response:u,event:r,plugins:n.t});if(r)try{r.waitUntil(l)}catch(e){}return i})()}}class n{constructor(t={}){this.e=e.cacheNames.getRuntimeName(t.cacheName),this.t=t.plugins||[],this.r=t.matchOptions||null}handle({event:e}){var t=this;return babelHelpers.asyncToGenerator(function*(){return t.makeRequest({event:e,request:e.request})})()}makeRequest({event:e,request:s}){var r=this;return babelHelpers.asyncToGenerator(function*(){return\"string\"==typeof s&&(s=new Request(s)),yield t.cacheWrapper.match({cacheName:r.e,request:s,event:e,matchOptions:r.r,plugins:r.t})})()}}var i={cacheWillUpdate:({response:e})=>e.ok||0===e.status?e:null};class u{constructor(t={}){if(this.e=e.cacheNames.getRuntimeName(t.cacheName),t.plugins){let e=t.plugins.some(e=>!!e.cacheWillUpdate);this.t=e?t.plugins:[i,...t.plugins]}else this.t=[i];this.i=t.networkTimeoutSeconds,this.s=t.fetchOptions||null,this.r=t.matchOptions||null}handle({event:e}){var t=this;return babelHelpers.asyncToGenerator(function*(){return t.makeRequest({event:e,request:e.request})})()}makeRequest({event:e,request:t}){var s=this;return babelHelpers.asyncToGenerator(function*(){const r=[];\"string\"==typeof t&&(t=new Request(t));const n=[];let i;if(s.i){const{id:u,promise:l}=s.u({request:t,event:e,logs:r});i=u,n.push(l)}const u=s.l({timeoutId:i,request:t,event:e,logs:r});n.push(u);let l=yield Promise.race(n);return l||(l=yield u),l})()}u({request:e,logs:t,event:s}){var r=this;let n;var i;return{promise:new Promise(t=>{const u=(i=babelHelpers.asyncToGenerator(function*(){t(yield r.c({request:e,event:s}))}),function(){return i.apply(this,arguments)});n=setTimeout(u,1e3*this.i)}),id:n}}l({timeoutId:e,request:r,logs:n,event:i}){var u=this;return babelHelpers.asyncToGenerator(function*(){let n,l;try{l=yield s.fetchWrapper.fetch({request:r,event:i,fetchOptions:u.s,plugins:u.t})}catch(e){n=e}if(e&&clearTimeout(e),n||!l)l=yield u.c({request:r,event:i});else{const e=l.clone(),s=t.cacheWrapper.put({cacheName:u.e,request:r,response:e,event:i,plugins:u.t});if(i)try{i.waitUntil(s)}catch(e){}}return l})()}c({event:e,request:s}){return t.cacheWrapper.match({cacheName:this.e,request:s,event:e,matchOptions:this.r,plugins:this.t})}}class l{constructor(t={}){this.e=e.cacheNames.getRuntimeName(t.cacheName),this.t=t.plugins||[],this.s=t.fetchOptions||null}handle({event:e}){var t=this;return babelHelpers.asyncToGenerator(function*(){return t.makeRequest({event:e,request:e.request})})()}makeRequest({event:e,request:t}){var r=this;return babelHelpers.asyncToGenerator(function*(){let n,i;\"string\"==typeof t&&(t=new Request(t));try{i=yield s.fetchWrapper.fetch({request:t,event:e,fetchOptions:r.s,plugins:r.t})}catch(e){n=e}if(n)throw n;return i})()}}class c{constructor(t={}){if(this.e=e.cacheNames.getRuntimeName(t.cacheName),this.t=t.plugins||[],t.plugins){let e=t.plugins.some(e=>!!e.cacheWillUpdate);this.t=e?t.plugins:[i,...t.plugins]}else this.t=[i];this.s=t.fetchOptions||null,this.r=t.matchOptions||null}handle({event:e}){var t=this;return babelHelpers.asyncToGenerator(function*(){return t.makeRequest({event:e,request:e.request})})()}makeRequest({event:e,request:s}){var r=this;return babelHelpers.asyncToGenerator(function*(){\"string\"==typeof s&&(s=new Request(s));const n=r.n({request:s,event:e});let i=yield t.cacheWrapper.match({cacheName:r.e,request:s,event:e,matchOptions:r.r,plugins:r.t});if(i){if(e)try{e.waitUntil(n)}catch(e){}}else i=yield n;return i})()}n({request:e,event:r}){var n=this;return babelHelpers.asyncToGenerator(function*(){const i=yield s.fetchWrapper.fetch({request:e,event:r,fetchOptions:n.s,plugins:n.t}),u=t.cacheWrapper.put({cacheName:n.e,request:e,response:i.clone(),event:r,plugins:n.t});if(r)try{r.waitUntil(u)}catch(e){}return i})()}}var o=Object.freeze({CacheFirst:r,CacheOnly:n,NetworkFirst:u,NetworkOnly:l,StaleWhileRevalidate:c});const a={cacheFirst:r,cacheOnly:n,networkFirst:u,networkOnly:l,staleWhileRevalidate:c},h={};return Object.keys(a).forEach(e=>{h[e]=((t={})=>{return new(0,a[e])(Object.assign(t))})}),Object.assign(h,o)}(workbox.core._private,workbox.core._private,workbox.core._private);\n"],"file":"workbox-strategies.prod.js"} \ No newline at end of file diff --git a/assets/js/workbox-v3.6.3/workbox-streams.dev.js b/assets/js/workbox-v3.6.3/workbox-streams.dev.js new file mode 100644 index 0000000..136c707 --- /dev/null +++ b/assets/js/workbox-v3.6.3/workbox-streams.dev.js @@ -0,0 +1,380 @@ +this.workbox = this.workbox || {}; +this.workbox.streams = (function (exports,logger_mjs,assert_mjs) { + 'use strict'; + + try { + self.workbox.v['workbox:streams:3.6.3'] = 1; + } catch (e) {} // eslint-disable-line + + /* + Copyright 2018 Google Inc. All Rights Reserved. + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + + /** + * Takes either a Response, a ReadableStream, or a + * [BodyInit](https://fetch.spec.whatwg.org/#bodyinit) and returns the + * ReadableStreamReader object associated with it. + * + * @param {workbox.streams.StreamSource} source + * @return {ReadableStreamReader} + * @private + */ + function _getReaderFromSource(source) { + if (source.body && source.body.getReader) { + return source.body.getReader(); + } + + if (source.getReader) { + return source.getReader(); + } + + // TODO: This should be possible to do by constructing a ReadableStream, but + // I can't get it to work. As a hack, construct a new Response, and use the + // reader associated with its body. + return new Response(source).body.getReader(); + } + + /** + * Takes multiple source Promises, each of which could resolve to a Response, a + * ReadableStream, or a [BodyInit](https://fetch.spec.whatwg.org/#bodyinit). + * + * Returns an object exposing a ReadableStream with each individual stream's + * data returned in sequence, along with a Promise which signals when the + * stream is finished (useful for passing to a FetchEvent's waitUntil()). + * + * @param {Array>} sourcePromises + * @return {Object<{done: Promise, stream: ReadableStream}>} + * + * @memberof workbox.streams + */ + function concatenate(sourcePromises) { + { + assert_mjs.assert.isArray(sourcePromises, { + moduleName: 'workbox-streams', + funcName: 'concatenate', + paramName: 'sourcePromises' + }); + } + + const readerPromises = sourcePromises.map(sourcePromise => { + return Promise.resolve(sourcePromise).then(source => { + return _getReaderFromSource(source); + }); + }); + + let fullyStreamedResolve; + let fullyStreamedReject; + const done = new Promise((resolve, reject) => { + fullyStreamedResolve = resolve; + fullyStreamedReject = reject; + }); + + let i = 0; + const logMessages = []; + const stream = new ReadableStream({ + pull(controller) { + return readerPromises[i].then(reader => reader.read()).then(result => { + if (result.done) { + { + logMessages.push(['Reached the end of source:', sourcePromises[i]]); + } + + i++; + if (i >= readerPromises.length) { + // Log all the messages in the group at once in a single group. + { + logger_mjs.logger.groupCollapsed(`Concatenating ${readerPromises.length} sources.`); + for (const message of logMessages) { + if (Array.isArray(message)) { + logger_mjs.logger.log(...message); + } else { + logger_mjs.logger.log(message); + } + } + logger_mjs.logger.log('Finished reading all sources.'); + logger_mjs.logger.groupEnd(); + } + + controller.close(); + fullyStreamedResolve(); + return; + } + + return this.pull(controller); + } else { + controller.enqueue(result.value); + } + }).catch(error => { + { + logger_mjs.logger.error('An error occurred:', error); + } + fullyStreamedReject(error); + throw error; + }); + }, + + cancel() { + { + logger_mjs.logger.warn('The ReadableStream was cancelled.'); + } + + fullyStreamedResolve(); + } + }); + + return { done, stream }; + } + + /* + Copyright 2018 Google Inc. All Rights Reserved. + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + + /** + * This is a utility method that determines whether the current browser supports + * the features required to create streamed responses. Currently, it checks if + * [`ReadableStream`](https://developer.mozilla.org/en-US/docs/Web/API/ReadableStream/ReadableStream) + * is available. + * + * @param {HeadersInit} [headersInit] If there's no `Content-Type` specified, + * `'text/html'` will be used by default. + * @return {boolean} `true`, if the current browser meets the requirements for + * streaming responses, and `false` otherwise. + * + * @memberof workbox.streams + */ + function createHeaders(headersInit = {}) { + // See https://github.com/GoogleChrome/workbox/issues/1461 + const headers = new Headers(headersInit); + if (!headers.has('content-type')) { + headers.set('content-type', 'text/html'); + } + return headers; + } + + /* + Copyright 2018 Google Inc. All Rights Reserved. + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + + /** + * Takes multiple source Promises, each of which could resolve to a Response, a + * ReadableStream, or a [BodyInit](https://fetch.spec.whatwg.org/#bodyinit), + * along with a + * [HeadersInit](https://fetch.spec.whatwg.org/#typedefdef-headersinit). + * + * Returns an object exposing a Response whose body consists of each individual + * stream's data returned in sequence, along with a Promise which signals when + * the stream is finished (useful for passing to a FetchEvent's waitUntil()). + * + * @param {Array>} sourcePromises + * @param {HeadersInit} [headersInit] If there's no `Content-Type` specified, + * `'text/html'` will be used by default. + * @return {Object<{done: Promise, response: Response}>} + * + * @memberof workbox.streams + */ + function concatenateToResponse(sourcePromises, headersInit) { + const { done, stream } = concatenate(sourcePromises); + + const headers = createHeaders(headersInit); + const response = new Response(stream, { headers }); + + return { done, response }; + } + + /* + Copyright 2018 Google Inc. All Rights Reserved. + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + + let cachedIsSupported = undefined; + + /** + * This is a utility method that determines whether the current browser supports + * the features required to create streamed responses. Currently, it checks if + * [`ReadableStream`](https://developer.mozilla.org/en-US/docs/Web/API/ReadableStream/ReadableStream) + * can be created. + * + * @return {boolean} `true`, if the current browser meets the requirements for + * streaming responses, and `false` otherwise. + * + * @memberof workbox.streams + */ + function isSupported() { + if (cachedIsSupported === undefined) { + // See https://github.com/GoogleChrome/workbox/issues/1473 + try { + new ReadableStream({ start() {} }); + cachedIsSupported = true; + } catch (error) { + cachedIsSupported = false; + } + } + + return cachedIsSupported; + } + + /* + Copyright 2018 Google Inc. All Rights Reserved. + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + + /** + * A shortcut to create a strategy that could be dropped-in to Workbox's router. + * + * On browsers that do not support constructing new `ReadableStream`s, this + * strategy will automatically wait for all the `sourceFunctions` to complete, + * and create a final response that concatenates their values together. + * + * @param { + * Array} sourceFunctions + * Each function should return a {@link workbox.streams.StreamSource} (or a + * Promise which resolves to one). + * @param {HeadersInit} [headersInit] If there's no `Content-Type` specified, + * `'text/html'` will be used by default. + * @return {workbox.routing.Route~handlerCallback} + * + * @memberof workbox.streams + */ + function strategy(sourceFunctions, headersInit) { + return (() => { + var _ref = babelHelpers.asyncToGenerator(function* ({ event, url, params }) { + if (isSupported()) { + const { done, response } = concatenateToResponse(sourceFunctions.map(function (sourceFunction) { + return sourceFunction({ event, url, params }); + }), headersInit); + event.waitUntil(done); + return response; + } + + { + logger_mjs.logger.log(`The current browser doesn't support creating response ` + `streams. Falling back to non-streaming response instead.`); + } + + // Fallback to waiting for everything to finish, and concatenating the + // responses. + const parts = yield Promise.all(sourceFunctions.map(function (sourceFunction) { + return sourceFunction({ event, url, params }); + }).map((() => { + var _ref2 = babelHelpers.asyncToGenerator(function* (responsePromise) { + const response = yield responsePromise; + if (response instanceof Response) { + return response.blob(); + } + + // Otherwise, assume it's something like a string which can be used + // as-is when constructing the final composite blob. + return response; + }); + + return function (_x2) { + return _ref2.apply(this, arguments); + }; + })())); + + const headers = createHeaders(headersInit); + // Constructing a new Response from a Blob source is well-supported. + // So is constructing a new Blob from multiple source Blobs or strings. + return new Response(new Blob(parts), { headers }); + }); + + return function (_x) { + return _ref.apply(this, arguments); + }; + })(); + } + + /* + Copyright 2018 Google Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + https://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + + /* + Copyright 2018 Google Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + https://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + + exports.concatenate = concatenate; + exports.concatenateToResponse = concatenateToResponse; + exports.isSupported = isSupported; + exports.strategy = strategy; + + return exports; + +}({},workbox.core._private,workbox.core._private)); + +//# sourceMappingURL=workbox-streams.dev.js.map diff --git a/assets/js/workbox-v3.6.3/workbox-streams.dev.js.map b/assets/js/workbox-v3.6.3/workbox-streams.dev.js.map new file mode 100644 index 0000000..4022187 --- /dev/null +++ b/assets/js/workbox-v3.6.3/workbox-streams.dev.js.map @@ -0,0 +1 @@ +{"version":3,"names":[],"mappings":"","sources":["packages/workbox-streams/browser.mjs"],"sourcesContent":["this.workbox = this.workbox || {};\nthis.workbox.streams = (function (exports,logger_mjs,assert_mjs) {\n 'use strict';\n\n try {\n self.workbox.v['workbox:streams:3.6.3'] = 1;\n } catch (e) {} // eslint-disable-line\n\n /*\n Copyright 2018 Google Inc. All Rights Reserved.\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n */\n\n /**\n * Takes either a Response, a ReadableStream, or a\n * [BodyInit](https://fetch.spec.whatwg.org/#bodyinit) and returns the\n * ReadableStreamReader object associated with it.\n *\n * @param {workbox.streams.StreamSource} source\n * @return {ReadableStreamReader}\n * @private\n */\n function _getReaderFromSource(source) {\n if (source.body && source.body.getReader) {\n return source.body.getReader();\n }\n\n if (source.getReader) {\n return source.getReader();\n }\n\n // TODO: This should be possible to do by constructing a ReadableStream, but\n // I can't get it to work. As a hack, construct a new Response, and use the\n // reader associated with its body.\n return new Response(source).body.getReader();\n }\n\n /**\n * Takes multiple source Promises, each of which could resolve to a Response, a\n * ReadableStream, or a [BodyInit](https://fetch.spec.whatwg.org/#bodyinit).\n *\n * Returns an object exposing a ReadableStream with each individual stream's\n * data returned in sequence, along with a Promise which signals when the\n * stream is finished (useful for passing to a FetchEvent's waitUntil()).\n *\n * @param {Array>} sourcePromises\n * @return {Object<{done: Promise, stream: ReadableStream}>}\n *\n * @memberof workbox.streams\n */\n function concatenate(sourcePromises) {\n {\n assert_mjs.assert.isArray(sourcePromises, {\n moduleName: 'workbox-streams',\n funcName: 'concatenate',\n paramName: 'sourcePromises'\n });\n }\n\n const readerPromises = sourcePromises.map(sourcePromise => {\n return Promise.resolve(sourcePromise).then(source => {\n return _getReaderFromSource(source);\n });\n });\n\n let fullyStreamedResolve;\n let fullyStreamedReject;\n const done = new Promise((resolve, reject) => {\n fullyStreamedResolve = resolve;\n fullyStreamedReject = reject;\n });\n\n let i = 0;\n const logMessages = [];\n const stream = new ReadableStream({\n pull(controller) {\n return readerPromises[i].then(reader => reader.read()).then(result => {\n if (result.done) {\n {\n logMessages.push(['Reached the end of source:', sourcePromises[i]]);\n }\n\n i++;\n if (i >= readerPromises.length) {\n // Log all the messages in the group at once in a single group.\n {\n logger_mjs.logger.groupCollapsed(`Concatenating ${readerPromises.length} sources.`);\n for (const message of logMessages) {\n if (Array.isArray(message)) {\n logger_mjs.logger.log(...message);\n } else {\n logger_mjs.logger.log(message);\n }\n }\n logger_mjs.logger.log('Finished reading all sources.');\n logger_mjs.logger.groupEnd();\n }\n\n controller.close();\n fullyStreamedResolve();\n return;\n }\n\n return this.pull(controller);\n } else {\n controller.enqueue(result.value);\n }\n }).catch(error => {\n {\n logger_mjs.logger.error('An error occurred:', error);\n }\n fullyStreamedReject(error);\n throw error;\n });\n },\n\n cancel() {\n {\n logger_mjs.logger.warn('The ReadableStream was cancelled.');\n }\n\n fullyStreamedResolve();\n }\n });\n\n return { done, stream };\n }\n\n /*\n Copyright 2018 Google Inc. All Rights Reserved.\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n */\n\n /**\n * This is a utility method that determines whether the current browser supports\n * the features required to create streamed responses. Currently, it checks if\n * [`ReadableStream`](https://developer.mozilla.org/en-US/docs/Web/API/ReadableStream/ReadableStream)\n * is available.\n *\n * @param {HeadersInit} [headersInit] If there's no `Content-Type` specified,\n * `'text/html'` will be used by default.\n * @return {boolean} `true`, if the current browser meets the requirements for\n * streaming responses, and `false` otherwise.\n *\n * @memberof workbox.streams\n */\n function createHeaders(headersInit = {}) {\n // See https://github.com/GoogleChrome/workbox/issues/1461\n const headers = new Headers(headersInit);\n if (!headers.has('content-type')) {\n headers.set('content-type', 'text/html');\n }\n return headers;\n }\n\n /*\n Copyright 2018 Google Inc. All Rights Reserved.\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n */\n\n /**\n * Takes multiple source Promises, each of which could resolve to a Response, a\n * ReadableStream, or a [BodyInit](https://fetch.spec.whatwg.org/#bodyinit),\n * along with a\n * [HeadersInit](https://fetch.spec.whatwg.org/#typedefdef-headersinit).\n *\n * Returns an object exposing a Response whose body consists of each individual\n * stream's data returned in sequence, along with a Promise which signals when\n * the stream is finished (useful for passing to a FetchEvent's waitUntil()).\n *\n * @param {Array>} sourcePromises\n * @param {HeadersInit} [headersInit] If there's no `Content-Type` specified,\n * `'text/html'` will be used by default.\n * @return {Object<{done: Promise, response: Response}>}\n *\n * @memberof workbox.streams\n */\n function concatenateToResponse(sourcePromises, headersInit) {\n const { done, stream } = concatenate(sourcePromises);\n\n const headers = createHeaders(headersInit);\n const response = new Response(stream, { headers });\n\n return { done, response };\n }\n\n /*\n Copyright 2018 Google Inc. All Rights Reserved.\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n */\n\n let cachedIsSupported = undefined;\n\n /**\n * This is a utility method that determines whether the current browser supports\n * the features required to create streamed responses. Currently, it checks if\n * [`ReadableStream`](https://developer.mozilla.org/en-US/docs/Web/API/ReadableStream/ReadableStream)\n * can be created.\n *\n * @return {boolean} `true`, if the current browser meets the requirements for\n * streaming responses, and `false` otherwise.\n *\n * @memberof workbox.streams\n */\n function isSupported() {\n if (cachedIsSupported === undefined) {\n // See https://github.com/GoogleChrome/workbox/issues/1473\n try {\n new ReadableStream({ start() {} });\n cachedIsSupported = true;\n } catch (error) {\n cachedIsSupported = false;\n }\n }\n\n return cachedIsSupported;\n }\n\n /*\n Copyright 2018 Google Inc. All Rights Reserved.\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n */\n\n /**\n * A shortcut to create a strategy that could be dropped-in to Workbox's router.\n *\n * On browsers that do not support constructing new `ReadableStream`s, this\n * strategy will automatically wait for all the `sourceFunctions` to complete,\n * and create a final response that concatenates their values together.\n *\n * @param {\n * Array} sourceFunctions\n * Each function should return a {@link workbox.streams.StreamSource} (or a\n * Promise which resolves to one).\n * @param {HeadersInit} [headersInit] If there's no `Content-Type` specified,\n * `'text/html'` will be used by default.\n * @return {workbox.routing.Route~handlerCallback}\n *\n * @memberof workbox.streams\n */\n function strategy(sourceFunctions, headersInit) {\n return (() => {\n var _ref = babelHelpers.asyncToGenerator(function* ({ event, url, params }) {\n if (isSupported()) {\n const { done, response } = concatenateToResponse(sourceFunctions.map(function (sourceFunction) {\n return sourceFunction({ event, url, params });\n }), headersInit);\n event.waitUntil(done);\n return response;\n }\n\n {\n logger_mjs.logger.log(`The current browser doesn't support creating response ` + `streams. Falling back to non-streaming response instead.`);\n }\n\n // Fallback to waiting for everything to finish, and concatenating the\n // responses.\n const parts = yield Promise.all(sourceFunctions.map(function (sourceFunction) {\n return sourceFunction({ event, url, params });\n }).map((() => {\n var _ref2 = babelHelpers.asyncToGenerator(function* (responsePromise) {\n const response = yield responsePromise;\n if (response instanceof Response) {\n return response.blob();\n }\n\n // Otherwise, assume it's something like a string which can be used\n // as-is when constructing the final composite blob.\n return response;\n });\n\n return function (_x2) {\n return _ref2.apply(this, arguments);\n };\n })()));\n\n const headers = createHeaders(headersInit);\n // Constructing a new Response from a Blob source is well-supported.\n // So is constructing a new Blob from multiple source Blobs or strings.\n return new Response(new Blob(parts), { headers });\n });\n\n return function (_x) {\n return _ref.apply(this, arguments);\n };\n })();\n }\n\n /*\n Copyright 2018 Google Inc.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n https://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n */\n\n /*\n Copyright 2018 Google Inc.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n https://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n */\n\n exports.concatenate = concatenate;\n exports.concatenateToResponse = concatenateToResponse;\n exports.isSupported = isSupported;\n exports.strategy = strategy;\n\n return exports;\n\n}({},workbox.core._private,workbox.core._private));\n"],"file":"workbox-streams.dev.js"} \ No newline at end of file diff --git a/assets/js/workbox-v3.6.3/workbox-streams.prod.js b/assets/js/workbox-v3.6.3/workbox-streams.prod.js new file mode 100644 index 0000000..96f8d4d --- /dev/null +++ b/assets/js/workbox-v3.6.3/workbox-streams.prod.js @@ -0,0 +1,3 @@ +this.workbox=this.workbox||{},this.workbox.streams=function(e){"use strict";try{self.workbox.v["workbox:streams:3.6.3"]=1}catch(e){}function n(e){const n=e.map(e=>Promise.resolve(e).then(e=>(e=e).body&&e.body.getReader?e.body.getReader():e.getReader?e.getReader():new Response(e).body.getReader()));var t;let r,s;let o=0;return{done:new Promise((e,n)=>{r=e,s=n}),stream:new ReadableStream({pull(e){return n[o].then(e=>e.read()).then(t=>{if(t.done)return++o>=n.length?(e.close(),void r()):this.pull(e);e.enqueue(t.value)}).catch(e=>{throw s(e),e})},cancel(){r()}})}}function t(e={}){const n=new Headers(e);return n.has("content-type")||n.set("content-type","text/html"),n}function r(e,r){const{done:s,stream:o}=n(e),u=t(r);return{done:s,response:new Response(o,{headers:u})}}let s=void 0;function o(){if(void 0===s)try{new ReadableStream({start(){}}),s=!0}catch(e){s=!1}return s}return e.concatenate=n,e.concatenateToResponse=r,e.isSupported=o,e.strategy=function(e,n){return s=babelHelpers.asyncToGenerator(function*({event:s,url:u,params:i}){if(o()){const{done:t,response:o}=r(e.map(function(e){return e({event:s,url:u,params:i})}),n);return s.waitUntil(t),o}const c=yield Promise.all(e.map(function(e){return e({event:s,url:u,params:i})}).map((a=babelHelpers.asyncToGenerator(function*(e){const n=yield e;return n instanceof Response?n.blob():n}),function(e){return a.apply(this,arguments)})));var a;const l=t(n);return new Response(new Blob(c),{headers:l})}),function(e){return s.apply(this,arguments)};var s},e}({}); + +//# sourceMappingURL=workbox-streams.prod.js.map diff --git a/assets/js/workbox-v3.6.3/workbox-streams.prod.js.map b/assets/js/workbox-v3.6.3/workbox-streams.prod.js.map new file mode 100644 index 0000000..5adf675 --- /dev/null +++ b/assets/js/workbox-v3.6.3/workbox-streams.prod.js.map @@ -0,0 +1 @@ +{"version":3,"names":[],"mappings":"","sources":["packages/workbox-streams/browser.mjs"],"sourcesContent":["this.workbox=this.workbox||{},this.workbox.streams=function(e){\"use strict\";try{self.workbox.v[\"workbox:streams:3.6.3\"]=1}catch(e){}function n(e){const n=e.map(e=>Promise.resolve(e).then(e=>(e=e).body&&e.body.getReader?e.body.getReader():e.getReader?e.getReader():new Response(e).body.getReader()));var t;let r,s;let o=0;return{done:new Promise((e,n)=>{r=e,s=n}),stream:new ReadableStream({pull(e){return n[o].then(e=>e.read()).then(t=>{if(t.done)return++o>=n.length?(e.close(),void r()):this.pull(e);e.enqueue(t.value)}).catch(e=>{throw s(e),e})},cancel(){r()}})}}function t(e={}){const n=new Headers(e);return n.has(\"content-type\")||n.set(\"content-type\",\"text/html\"),n}function r(e,r){const{done:s,stream:o}=n(e),u=t(r);return{done:s,response:new Response(o,{headers:u})}}let s=void 0;function o(){if(void 0===s)try{new ReadableStream({start(){}}),s=!0}catch(e){s=!1}return s}return e.concatenate=n,e.concatenateToResponse=r,e.isSupported=o,e.strategy=function(e,n){return s=babelHelpers.asyncToGenerator(function*({event:s,url:u,params:i}){if(o()){const{done:t,response:o}=r(e.map(function(e){return e({event:s,url:u,params:i})}),n);return s.waitUntil(t),o}const c=yield Promise.all(e.map(function(e){return e({event:s,url:u,params:i})}).map((a=babelHelpers.asyncToGenerator(function*(e){const n=yield e;return n instanceof Response?n.blob():n}),function(e){return a.apply(this,arguments)})));var a;const l=t(n);return new Response(new Blob(c),{headers:l})}),function(e){return s.apply(this,arguments)};var s},e}({});\n"],"file":"workbox-streams.prod.js"} \ No newline at end of file diff --git a/assets/js/workbox-v3.6.3/workbox-sw.js b/assets/js/workbox-v3.6.3/workbox-sw.js new file mode 100644 index 0000000..b03e1c4 --- /dev/null +++ b/assets/js/workbox-v3.6.3/workbox-sw.js @@ -0,0 +1,3 @@ +var workbox=function(){"use strict";try{self.workbox.v["workbox:sw:3.6.3"]=1}catch(t){}const t="https://storage.googleapis.com/workbox-cdn/releases/3.6.3",e={backgroundSync:"background-sync",broadcastUpdate:"broadcast-cache-update",cacheableResponse:"cacheable-response",core:"core",expiration:"cache-expiration",googleAnalytics:"google-analytics",navigationPreload:"navigation-preload",precaching:"precaching",rangeRequests:"range-requests",routing:"routing",strategies:"strategies",streams:"streams"};return new class{constructor(){return this.v={},this.t={debug:"localhost"===self.location.hostname,modulePathPrefix:null,modulePathCb:null},this.e=this.t.debug?"dev":"prod",this.s=!1,new Proxy(this,{get(t,s){if(t[s])return t[s];const o=e[s];return o&&t.loadModule(`workbox-${o}`),t[s]}})}setConfig(t={}){if(this.s)throw new Error("Config must be set before accessing workbox.* modules");Object.assign(this.t,t),this.e=this.t.debug?"dev":"prod"}skipWaiting(){self.addEventListener("install",()=>self.skipWaiting())}clientsClaim(){self.addEventListener("activate",()=>self.clients.claim())}loadModule(t){const e=this.o(t);try{importScripts(e),this.s=!0}catch(s){throw console.error(`Unable to import module '${t}' from '${e}'.`),s}}o(e){if(this.t.modulePathCb)return this.t.modulePathCb(e,this.t.debug);let s=[t];const o=`${e}.${this.e}.js`,r=this.t.modulePathPrefix;return r&&""===(s=r.split("/"))[s.length-1]&&s.splice(s.length-1,1),s.push(o),s.join("/")}}}(); + +//# sourceMappingURL=workbox-sw.js.map diff --git a/assets/js/workbox-v3.6.3/workbox-sw.js.map b/assets/js/workbox-v3.6.3/workbox-sw.js.map new file mode 100644 index 0000000..c5b3a6c --- /dev/null +++ b/assets/js/workbox-v3.6.3/workbox-sw.js.map @@ -0,0 +1 @@ +{"version":3,"names":[],"mappings":"","sources":["packages/workbox-sw/browser.mjs"],"sourcesContent":["var workbox=function(){\"use strict\";try{self.workbox.v[\"workbox:sw:3.6.3\"]=1}catch(t){}const t=\"https://storage.googleapis.com/workbox-cdn/releases/3.6.3\",e={backgroundSync:\"background-sync\",broadcastUpdate:\"broadcast-cache-update\",cacheableResponse:\"cacheable-response\",core:\"core\",expiration:\"cache-expiration\",googleAnalytics:\"google-analytics\",navigationPreload:\"navigation-preload\",precaching:\"precaching\",rangeRequests:\"range-requests\",routing:\"routing\",strategies:\"strategies\",streams:\"streams\"};return new class{constructor(){return this.v={},this.t={debug:\"localhost\"===self.location.hostname,modulePathPrefix:null,modulePathCb:null},this.e=this.t.debug?\"dev\":\"prod\",this.s=!1,new Proxy(this,{get(t,s){if(t[s])return t[s];const o=e[s];return o&&t.loadModule(`workbox-${o}`),t[s]}})}setConfig(t={}){if(this.s)throw new Error(\"Config must be set before accessing workbox.* modules\");Object.assign(this.t,t),this.e=this.t.debug?\"dev\":\"prod\"}skipWaiting(){self.addEventListener(\"install\",()=>self.skipWaiting())}clientsClaim(){self.addEventListener(\"activate\",()=>self.clients.claim())}loadModule(t){const e=this.o(t);try{importScripts(e),this.s=!0}catch(s){throw console.error(`Unable to import module '${t}' from '${e}'.`),s}}o(e){if(this.t.modulePathCb)return this.t.modulePathCb(e,this.t.debug);let s=[t];const o=`${e}.${this.e}.js`,r=this.t.modulePathPrefix;return r&&\"\"===(s=r.split(\"/\"))[s.length-1]&&s.splice(s.length-1,1),s.push(o),s.join(\"/\")}}}();\n"],"file":"workbox-sw.js"} \ No newline at end of file diff --git a/cookies/index.html b/cookies/index.html index cab8bb2..3e4b374 100644 --- a/cookies/index.html +++ b/cookies/index.html @@ -122,6 +122,9 @@ + + + @@ -394,7 +397,7 @@ Reddit - Email @@ -519,7 +522,7 @@ _paq.push(['enableLinkTracking']); _paq.push(['setTrackerUrl', u+'matomo.php']); _paq.push(['setSiteId', '11']); var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0]; - g.type='text/javascript'; g.async=true; g.defer=true; g.src='//cdn.matomo.cloud/terminalnetwork.matomo.cloud/matomo.js'; s.parentNode.insertBefore(g,s); + g.type='text/javascript'; g.async=true; g.defer=true; g.src='https://cdn.matomo.cloud/terminalnetwork.matomo.cloud/matomo.js'; s.parentNode.insertBefore(g,s); })(); @@ -538,7 +541,7 @@ _paq.push(['enableLinkTracking']); _paq.push(['setTrackerUrl', u+'matomo.php']); _paq.push(['setSiteId', '11']); var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0]; - g.type='text/javascript'; g.async=true; g.defer=true; g.src='//cdn.matomo.cloud/terminalnetwork.matomo.cloud/matomo.js'; s.parentNode.insertBefore(g,s); + g.type='text/javascript'; g.async=true; g.defer=true; g.src='https://cdn.matomo.cloud/terminalnetwork.matomo.cloud/matomo.js'; s.parentNode.insertBefore(g,s); })(); } @@ -571,5 +574,18 @@ _paq.push(['enableLinkTracking']); - - \ No newline at end of file + + + + + + diff --git a/cyber-grany/index.html b/cyber-grany/index.html index c62dc6a..d8d6fba 100644 --- a/cyber-grany/index.html +++ b/cyber-grany/index.html @@ -110,6 +110,9 @@ + + + @@ -541,7 +544,7 @@ Reddit - Email @@ -666,7 +669,7 @@ _paq.push(['enableLinkTracking']); _paq.push(['setTrackerUrl', u+'matomo.php']); _paq.push(['setSiteId', '11']); var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0]; - g.type='text/javascript'; g.async=true; g.defer=true; g.src='//cdn.matomo.cloud/terminalnetwork.matomo.cloud/matomo.js'; s.parentNode.insertBefore(g,s); + g.type='text/javascript'; g.async=true; g.defer=true; g.src='https://cdn.matomo.cloud/terminalnetwork.matomo.cloud/matomo.js'; s.parentNode.insertBefore(g,s); })(); @@ -685,7 +688,7 @@ _paq.push(['enableLinkTracking']); _paq.push(['setTrackerUrl', u+'matomo.php']); _paq.push(['setSiteId', '11']); var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0]; - g.type='text/javascript'; g.async=true; g.defer=true; g.src='//cdn.matomo.cloud/terminalnetwork.matomo.cloud/matomo.js'; s.parentNode.insertBefore(g,s); + g.type='text/javascript'; g.async=true; g.defer=true; g.src='https://cdn.matomo.cloud/terminalnetwork.matomo.cloud/matomo.js'; s.parentNode.insertBefore(g,s); })(); } @@ -718,5 +721,18 @@ _paq.push(['enableLinkTracking']); - - \ No newline at end of file + + + + + + diff --git a/darkweb/index.html b/darkweb/index.html index 750b9bc..4f5783e 100644 --- a/darkweb/index.html +++ b/darkweb/index.html @@ -110,6 +110,9 @@ + + + @@ -714,7 +717,7 @@ Reddit - Email @@ -839,7 +842,7 @@ _paq.push(['enableLinkTracking']); _paq.push(['setTrackerUrl', u+'matomo.php']); _paq.push(['setSiteId', '11']); var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0]; - g.type='text/javascript'; g.async=true; g.defer=true; g.src='//cdn.matomo.cloud/terminalnetwork.matomo.cloud/matomo.js'; s.parentNode.insertBefore(g,s); + g.type='text/javascript'; g.async=true; g.defer=true; g.src='https://cdn.matomo.cloud/terminalnetwork.matomo.cloud/matomo.js'; s.parentNode.insertBefore(g,s); })(); @@ -858,7 +861,7 @@ _paq.push(['enableLinkTracking']); _paq.push(['setTrackerUrl', u+'matomo.php']); _paq.push(['setSiteId', '11']); var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0]; - g.type='text/javascript'; g.async=true; g.defer=true; g.src='//cdn.matomo.cloud/terminalnetwork.matomo.cloud/matomo.js'; s.parentNode.insertBefore(g,s); + g.type='text/javascript'; g.async=true; g.defer=true; g.src='https://cdn.matomo.cloud/terminalnetwork.matomo.cloud/matomo.js'; s.parentNode.insertBefore(g,s); })(); } @@ -891,5 +894,18 @@ _paq.push(['enableLinkTracking']); - - \ No newline at end of file + + + + + + diff --git a/discography/index.html b/discography/index.html index d5532c4..ac646a6 100644 --- a/discography/index.html +++ b/discography/index.html @@ -122,6 +122,9 @@ + + + @@ -350,7 +353,7 @@ Open your mind, open the source!

Reddit - Email @@ -475,7 +478,7 @@ _paq.push(['enableLinkTracking']); _paq.push(['setTrackerUrl', u+'matomo.php']); _paq.push(['setSiteId', '11']); var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0]; - g.type='text/javascript'; g.async=true; g.defer=true; g.src='//cdn.matomo.cloud/terminalnetwork.matomo.cloud/matomo.js'; s.parentNode.insertBefore(g,s); + g.type='text/javascript'; g.async=true; g.defer=true; g.src='https://cdn.matomo.cloud/terminalnetwork.matomo.cloud/matomo.js'; s.parentNode.insertBefore(g,s); })(); @@ -494,7 +497,7 @@ _paq.push(['enableLinkTracking']); _paq.push(['setTrackerUrl', u+'matomo.php']); _paq.push(['setSiteId', '11']); var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0]; - g.type='text/javascript'; g.async=true; g.defer=true; g.src='//cdn.matomo.cloud/terminalnetwork.matomo.cloud/matomo.js'; s.parentNode.insertBefore(g,s); + g.type='text/javascript'; g.async=true; g.defer=true; g.src='https://cdn.matomo.cloud/terminalnetwork.matomo.cloud/matomo.js'; s.parentNode.insertBefore(g,s); })(); } @@ -527,5 +530,18 @@ _paq.push(['enableLinkTracking']); - - \ No newline at end of file + + + + + + diff --git a/favicon-16x16-dunplab-manifest-9805.png b/favicon-16x16-dunplab-manifest-9805.png new file mode 100644 index 0000000000000000000000000000000000000000..649d48c7e214433d4d6e95ac31f9b500484c30f2 GIT binary patch literal 596 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 https://setto.basspistol.com Set, Party, Gang! &#35;Cybersoul. - Wed, 05 Aug 2020 11:05:19 +0000 + Wed, 05 Aug 2020 17:06:33 +0000 en-US hourly 1 diff --git a/images/pages/pingu.jpg b/images/pages/pingu.jpg index 5aec81e95e647827cb913d8c88b1155b650979ea..6ae920f121e46f6eccad4927437813b808da33d7 100644 GIT binary patch literal 191515 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

y7!C0#{V^wApK%q>zY?{a0TFtE~@Cg@;5 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ⓈuNh3?s*@?T`uO=S~qHhTgo^ipf$y*$>zO};xV855kzqYk3TbGIIkRk_G|63 zn(nO?{iPiRd06Zko9BV^xa=o0=caYbb0|69YW1b_ znE;UST>M(TpFYr+Ch!uHTjH%Dkyc(1p^+%Z*)TaI8oeW;~G-H(w(!Bz~iHK+0 z`B6n)IQ>V7TlOf>9VzMs6jzRXZ3LXP9w|V{qKXmPMI#lB$UKgfhcwbierG0%E2^4D z*5!0*@+Zo#=rmHQg4~KIt@haVC#J>gSkrgi2kTWXtZih@`*_bk-J*)oFx_e$8B%^WDdvHqb7c=FMZP=<$HIJ#16yVWCbYN2EK2tN3QPG_2%wA9!k~8aFhMyWHn-s6jxkZ_K5o2$-iYJa+Z$XX&a6+ThKdf`^JhZ+@h|v zKQ)S6@6@!8+;VDkk^ca^Xri2=yBk>&hivsVFm}h@G*MYNuEoJ1^B?=hoUY!ciYi=V z*tHedcJ}o&Z*NmY6+E%*U65~YQ%(-p>S&^uD(r1ZD~=3(O-!88MP($9QiN6Z6`7Zz zH4L-Lh<3RYQCzilJvivJD8S8eceYYkdRDZEi3r-Dap^@B;#O~%`E2T>_PaA?;z3Ll zQ9<$&6xU6nf%ZBmu6$R(digi;%>z)$MHRsv&wCm05mhVh!ip=Rp67#G;VG?i9wSh7 zL>S{>qKfsfzr;K82u4_>q^?tf2(mt3*1IhN81`dmqKeZoZ`q%wdniIJ!6bA6K;R0J zKD1F^KO@emt5+kqC(CN{eRu;rsz4(rwG>yYmi%YV@jvik>Ty@3$375|SBcDHK9o^k zMbP*^Vi@GDA_z_h_QHmgmmY_!*l0Y0-V*MHSTcK4E-jntjnj zQAKk7qv+%OA|p}D_h_QDTb@-;rcJ^r&Oof$5mrDz??n~pQ+ggs_|eqq{{ZpopGvny z73bCXnff&k;K$HwQi>?7&We8s$v*8>ZnRNUkCM%QjA84lGQ3t108vGH*nfoiTHnNF zTY>Ub1NV&-SA8N-<*Pb-vT9c4P7d%tS}3Pi;bl|!(dk`>(yLtm0IM`nUp*gqn5xOOQOqtogtMU{OVPz~y_8kGw0;tPU*UAMDXZbK`y#b>W-2bq^w~ zA>xWF%4gH%jq??giKX{yk5-8dxg|z(MHN){J98&^$upRhSJI)9G&b@AqZp!!^x*bB z8JwGd9f!SBx>2y4b43;FQrOm?#EQ_88?9Ya#(U94X#N&$S98&{M`<*unT}36)$`hl zE9UF`Y)fJ$9crY2QAJElX0-(1f;i^7SP3vDeJG-`t+DB4za5OdZAX%a9Okft5O^kv zE7{8RrKwq({pn&!99c@?j^#o@{3|O?o=cc_Oxuq<;}lU{(}a0mhZiheHrgk}E;yo! z;Ev}HQ!?xUDXON5D`Y|&LXxfsI3kKF`Wi=bztf$hv5B1Jh~(9=MHS#y_}S^w*pYfu zjTBZW>st{{NQKDi6xWPvEYfP11<5}*dMK}71G$sfps1&)r=&5H%8Dqjp{KDbO?4+W zu#x_(Q=_o8dE?y*o_pqsD(XLU-=0c3GuHGCHpU%386&lYUmts5&1#+v6j#S$q~%fF zoz)v^Es;N3K}8kHd6W2<5uUZ3asWIED6JrKRazAs;RzJ@)n6NcJa?js>w&}6k5|)d z{=l#Hbq&`eisGhFjzWwID6YB<-0iCs%difWEJKq;73kAAOuMoBvBxhusrsyM5~IO>o8*==&tPyhe` diff --git a/index.html b/index.html index 1043bb9..3fee0f0 100644 --- a/index.html +++ b/index.html @@ -38,7 +38,7 @@ Yo, web-TV crib! ゲットー・スービド | 徒 setto セット - + @@ -73,7 +73,7 @@ - + @@ -122,6 +122,9 @@ + + + @@ -197,7 +200,7 @@

- + Cover art for Unmet Dependencies
Unmet Dependencies
@@ -240,7 +243,7 @@
- + Cover art for Darkweb
Darkweb
@@ -295,7 +298,7 @@
- + Cover art for Satoshi Mon Ami
Satoshi mon ami
@@ -332,7 +335,7 @@
- + Cover art for Live with hardware
EP-Life of a Dudelini
11:23 | @@ -395,7 +398,7 @@
- + Cover art for Granny is a cyborg now
Grandma got the SSH keys
3:22 | @@ -508,7 +511,7 @@ Reddit - Email @@ -631,7 +634,7 @@ _paq.push(['enableLinkTracking']); _paq.push(['setTrackerUrl', u+'matomo.php']); _paq.push(['setSiteId', '11']); var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0]; - g.type='text/javascript'; g.async=true; g.defer=true; g.src='//cdn.matomo.cloud/terminalnetwork.matomo.cloud/matomo.js'; s.parentNode.insertBefore(g,s); + g.type='text/javascript'; g.async=true; g.defer=true; g.src='https://cdn.matomo.cloud/terminalnetwork.matomo.cloud/matomo.js'; s.parentNode.insertBefore(g,s); })(); @@ -650,7 +653,7 @@ _paq.push(['enableLinkTracking']); _paq.push(['setTrackerUrl', u+'matomo.php']); _paq.push(['setSiteId', '11']); var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0]; - g.type='text/javascript'; g.async=true; g.defer=true; g.src='//cdn.matomo.cloud/terminalnetwork.matomo.cloud/matomo.js'; s.parentNode.insertBefore(g,s); + g.type='text/javascript'; g.async=true; g.defer=true; g.src='https://cdn.matomo.cloud/terminalnetwork.matomo.cloud/matomo.js'; s.parentNode.insertBefore(g,s); })(); } @@ -683,5 +686,18 @@ _paq.push(['enableLinkTracking']); - - \ No newline at end of file + + + + + + diff --git a/links/index.html b/links/index.html index 270610e..9a220fb 100644 --- a/links/index.html +++ b/links/index.html @@ -122,6 +122,9 @@ + + + @@ -321,7 +324,7 @@ Reddit - Email @@ -446,7 +449,7 @@ _paq.push(['enableLinkTracking']); _paq.push(['setTrackerUrl', u+'matomo.php']); _paq.push(['setSiteId', '11']); var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0]; - g.type='text/javascript'; g.async=true; g.defer=true; g.src='//cdn.matomo.cloud/terminalnetwork.matomo.cloud/matomo.js'; s.parentNode.insertBefore(g,s); + g.type='text/javascript'; g.async=true; g.defer=true; g.src='https://cdn.matomo.cloud/terminalnetwork.matomo.cloud/matomo.js'; s.parentNode.insertBefore(g,s); })(); @@ -465,7 +468,7 @@ _paq.push(['enableLinkTracking']); _paq.push(['setTrackerUrl', u+'matomo.php']); _paq.push(['setSiteId', '11']); var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0]; - g.type='text/javascript'; g.async=true; g.defer=true; g.src='//cdn.matomo.cloud/terminalnetwork.matomo.cloud/matomo.js'; s.parentNode.insertBefore(g,s); + g.type='text/javascript'; g.async=true; g.defer=true; g.src='https://cdn.matomo.cloud/terminalnetwork.matomo.cloud/matomo.js'; s.parentNode.insertBefore(g,s); })(); } @@ -498,5 +501,18 @@ _paq.push(['enableLinkTracking']); - - \ No newline at end of file + + + + + + diff --git a/live-with-hardware/index.html b/live-with-hardware/index.html index cc1fad6..09c9609 100644 --- a/live-with-hardware/index.html +++ b/live-with-hardware/index.html @@ -110,6 +110,9 @@ + + + @@ -550,7 +553,7 @@ Open your mind, open the source!

Reddit - Email @@ -675,7 +678,7 @@ _paq.push(['enableLinkTracking']); _paq.push(['setTrackerUrl', u+'matomo.php']); _paq.push(['setSiteId', '11']); var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0]; - g.type='text/javascript'; g.async=true; g.defer=true; g.src='//cdn.matomo.cloud/terminalnetwork.matomo.cloud/matomo.js'; s.parentNode.insertBefore(g,s); + g.type='text/javascript'; g.async=true; g.defer=true; g.src='https://cdn.matomo.cloud/terminalnetwork.matomo.cloud/matomo.js'; s.parentNode.insertBefore(g,s); })(); @@ -694,7 +697,7 @@ _paq.push(['enableLinkTracking']); _paq.push(['setTrackerUrl', u+'matomo.php']); _paq.push(['setSiteId', '11']); var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0]; - g.type='text/javascript'; g.async=true; g.defer=true; g.src='//cdn.matomo.cloud/terminalnetwork.matomo.cloud/matomo.js'; s.parentNode.insertBefore(g,s); + g.type='text/javascript'; g.async=true; g.defer=true; g.src='https://cdn.matomo.cloud/terminalnetwork.matomo.cloud/matomo.js'; s.parentNode.insertBefore(g,s); })(); } @@ -727,5 +730,18 @@ _paq.push(['enableLinkTracking']); - - \ No newline at end of file + + + + + + diff --git a/log/index.html b/log/index.html index 38d2ed2..a5bfa9f 100644 --- a/log/index.html +++ b/log/index.html @@ -122,6 +122,9 @@ + + + @@ -265,7 +268,7 @@ Reddit - Email @@ -390,7 +393,7 @@ _paq.push(['enableLinkTracking']); _paq.push(['setTrackerUrl', u+'matomo.php']); _paq.push(['setSiteId', '11']); var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0]; - g.type='text/javascript'; g.async=true; g.defer=true; g.src='//cdn.matomo.cloud/terminalnetwork.matomo.cloud/matomo.js'; s.parentNode.insertBefore(g,s); + g.type='text/javascript'; g.async=true; g.defer=true; g.src='https://cdn.matomo.cloud/terminalnetwork.matomo.cloud/matomo.js'; s.parentNode.insertBefore(g,s); })(); @@ -409,7 +412,7 @@ _paq.push(['enableLinkTracking']); _paq.push(['setTrackerUrl', u+'matomo.php']); _paq.push(['setSiteId', '11']); var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0]; - g.type='text/javascript'; g.async=true; g.defer=true; g.src='//cdn.matomo.cloud/terminalnetwork.matomo.cloud/matomo.js'; s.parentNode.insertBefore(g,s); + g.type='text/javascript'; g.async=true; g.defer=true; g.src='https://cdn.matomo.cloud/terminalnetwork.matomo.cloud/matomo.js'; s.parentNode.insertBefore(g,s); })(); } @@ -442,5 +445,18 @@ _paq.push(['enableLinkTracking']); - - \ No newline at end of file + + + + + + diff --git a/manifest.json b/manifest.json new file mode 100644 index 0000000..bd1d7af --- /dev/null +++ b/manifest.json @@ -0,0 +1,85 @@ +{ + "short_name": "徒 setto セット", + "name": "徒 setto セット Music PWA", + "lang": "en", + "description": "Music of 徒 setto セット in your phone", + "start_url": "/", + "background_color": "#3c2a52", + "theme_color": "#3c2a52", + "dir": "ltr", + "display": "standalone", + "orientation": "portrait", + "icons": [ + { + "src": "/setto-webapp.png", + "type": "image/png", + "sizes": "512x512" + }, + { + "src": "/android-icon-192x192-dunplab-manifest-9805.png", + "type": "image/png", + "sizes": "192x192" + }, + { + "src": "/apple-icon-180x180-dunplab-manifest-9805.png", + "type": "image/png", + "sizes": "180x180" + }, + { + "src": "/apple-icon-152x152-dunplab-manifest-9805.png", + "type": "image/png", + "sizes": "152x152" + }, + { + "src": "/apple-icon-144x144-dunplab-manifest-9805.png", + "type": "image/png", + "sizes": "144x144" + }, + { + "src": "/apple-icon-120x120-dunplab-manifest-9805.png", + "type": "image/png", + "sizes": "120x120" + }, + { + "src": "/apple-icon-114x114-dunplab-manifest-9805.png", + "type": "image/png", + "sizes": "114x114" + }, + { + "src": "/favicon-96x96-dunplab-manifest-9805.png", + "type": "image/png", + "sizes": "96x96" + }, + { + "src": "/apple-icon-76x76-dunplab-manifest-9805.png", + "type": "image/png", + "sizes": "76x76" + }, + { + "src": "/apple-icon-72x72-dunplab-manifest-9805.png", + "type": "image/png", + "sizes": "72x72" + }, + { + "src": "/apple-icon-60x60-dunplab-manifest-9805.png", + "type": "image/png", + "sizes": "60x60" + }, + { + "src": "/apple-icon-57x57-dunplab-manifest-9805.png", + "type": "image/png", + "sizes": "57x57" + }, + { + "src": "/favicon-32x32-dunplab-manifest-9805.png", + "type": "image/png", + "sizes": "32x32" + }, + { + "src": "/favicon-16x16-dunplab-manifest-9805.png", + "type": "image/png", + "sizes": "16x16" + } + ], + "prefer_related_applications": "false" +} diff --git a/satoshi-mon-ami/index.html b/satoshi-mon-ami/index.html index 89971e1..8bfd793 100644 --- a/satoshi-mon-ami/index.html +++ b/satoshi-mon-ami/index.html @@ -110,6 +110,9 @@ + + + @@ -620,7 +623,7 @@ Reddit - Email @@ -745,7 +748,7 @@ _paq.push(['enableLinkTracking']); _paq.push(['setTrackerUrl', u+'matomo.php']); _paq.push(['setSiteId', '11']); var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0]; - g.type='text/javascript'; g.async=true; g.defer=true; g.src='//cdn.matomo.cloud/terminalnetwork.matomo.cloud/matomo.js'; s.parentNode.insertBefore(g,s); + g.type='text/javascript'; g.async=true; g.defer=true; g.src='https://cdn.matomo.cloud/terminalnetwork.matomo.cloud/matomo.js'; s.parentNode.insertBefore(g,s); })(); @@ -764,7 +767,7 @@ _paq.push(['enableLinkTracking']); _paq.push(['setTrackerUrl', u+'matomo.php']); _paq.push(['setSiteId', '11']); var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0]; - g.type='text/javascript'; g.async=true; g.defer=true; g.src='//cdn.matomo.cloud/terminalnetwork.matomo.cloud/matomo.js'; s.parentNode.insertBefore(g,s); + g.type='text/javascript'; g.async=true; g.defer=true; g.src='https://cdn.matomo.cloud/terminalnetwork.matomo.cloud/matomo.js'; s.parentNode.insertBefore(g,s); })(); } @@ -797,5 +800,18 @@ _paq.push(['enableLinkTracking']); - - \ No newline at end of file + + + + + + diff --git a/service-worker.js b/service-worker.js new file mode 100644 index 0000000..a6e4be5 --- /dev/null +++ b/service-worker.js @@ -0,0 +1,45 @@ + importScripts("/assets/js/workbox-v3.6.3/workbox-sw.js"); + workbox.setConfig({modulePathPrefix: "/assets/js/workbox-v3.6.3"}); + + self.__precacheManifest = [{"url":"/assets/js/set-20200805.js","revision":"517470941a809ec5c83021184f35da41"},{"url":"/assets/js/jquery-3.5.1.min.js","revision":"dc5e7f18c8d36ac1d3d4753a87c98d0a"},{"url":"/assets/css/all.min.css","revision":"84d8ad2b4fcdc0f0c58247e778133b3a"},{"url":"/assets/css/main-20200805-rv2.css","revision":"48269055ca56f3bb1b1066b14a8b94a1"},{"url":"/assets/css/noscripts-20200805.css","revision":"c885f65544603a3fed916541ef06ebf2"},{"url":"/assets/fonts/Staatliches-Regular.ttf","revision":"d5746e3b20453d6cee99ab27a0bdf949"},{"url":"/assets/fonts/Astloch-Bold.ttf","revision":"3176f98d79118ba60dea5cad816a330c"},{"url":"/assets/fonts/JetBrainsMono_Italic.ttf","revision":"8d0942fbfa63674fa465f104ca33e043"},{"url":"/assets/fonts/JetBrainsMono_ExtraBold_Italic.ttf","revision":"052f9246bfdfa8a9edc7e626845a6ee6"},{"url":"/assets/fonts/JetBrainsMono_ExtraBold.ttf","revision":"131dbc72ef3af778e86d34efb1fc8972"},{"url":"/assets/fonts/JetBrainsMono_Bold.ttf","revision":"d8af470e44be6c1d2d07dee84db355f6"},{"url":"/assets/fonts/JetBrainsMono_Bold_Italic.ttf","revision":"111bcb2a39ae6140cb21daa3ecd052d1"},{"url":"/assets/fonts/JetBrainsMono_Regular.ttf","revision":"e1caef645de334fee2f25834b0d03c28"},{"url":"/images/setto-logo.svg","revision":"7569ca4090da48547a54fa0ddedda3fd"},{"url":"/images/setto_logo.svg","revision":"5bf66a9e824036039f132a2c99608cfc"},{"url":"/images/setto-logo-dark.svg","revision":"609edc224ff5d3b8ded04619ae9f50a1"},{"url":"/images/setto-logoicon.svg","revision":"e7dc833aac730977d63da33840f5d2ce"},{"url":"/images/posts/final-pingnucover1220x1200.jpg","revision":"40bf2aa467fc998f16966f6299772aa3"},{"url":"/images/posts/333mix.jpg","revision":"8370744fc4e6bd11153f05bdae4d017f"},{"url":"/images/posts/1-ep-life-of-a-dudelini.jpeg","revision":"5f0556d93f8df15b7283d7184e7e205f"},{"url":"/images/posts/1-grandma-got-the-ssh-keys.jpeg","revision":"f17c4fa35cfd429715093fc170ff37db"},{"url":"/images/posts/1-k-as-tu-fait-de-nous-.jpeg","revision":"c75a92953e880cca8ae26b4ab73265e2"},{"url":"/images/posts/2-darkweb-instrumental-.jpeg","revision":"25b1ed36880f9afef45b6f969ff63f72"},{"url":"/images/pages/pingu.jpg","revision":"fdbcbb8a73099a784a0e39caf322a404"},{"url":"/images/pages/creds.jpg","revision":"c0d61d2dcc2820989b445da52d984a11"},{"url":"/images/pages/phone.jpg","revision":"28c71c2f34dd924836522ea99a0330b0"},{"url":"/images/pages/jack-hamilton-CMnNiQBkwBI-unsplash.jpg","revision":"05b685c77386c247340abecb8eaf3218"},{"url":"/images/pages/arget-zvhhkivur9m-unsplash.jpg","revision":"e80d8b7d0899415327d46c345e95571e"},{"url":"/images/pages/kaur-kristjan-cppf4w5pb1c-unsplash.jpg","revision":"982d5e7565ea6fb7211305c12048a94e"},{"url":"/images/pages/4-darkweb-instrumental-.jpeg","revision":"25b1ed36880f9afef45b6f969ff63f72"},{"url":"/index.html","revision":"d5200ebee78f8be437a5fe2668404b59"},{"url":"/333mix/","revision":"6acd43ac354a52d3248f8ea9dc36405d"},{"url":"/unmet-dependencies/","revision":"abf15a089c9232faa369fb4e5f13b50d"},{"url":"/live-with-hardware/","revision":"ce07900a964783eda05d0515d169d5d1"},{"url":"/cyber-grany/","revision":"e78f9e99f3e2c609d1545ba7f7d3c848"},{"url":"/darkweb/","revision":"3f3333f1ddfbec03dd8194e2745f3ffe"}]; + // service-worker.js + +// set names for both precache & runtime cache +workbox.core.setCacheNameDetails({ + prefix: 'SettoPWA', + suffix: 'v1', + precache: 'precache', + runtime: 'runtime-cache' +}); + +// let Service Worker take control of pages ASAP +workbox.skipWaiting(); +workbox.clientsClaim(); + +// let Workbox handle our precache list +workbox.precaching.precacheAndRoute(self.__precacheManifest); + +// use `networkFirst` strategy for `*.html`, like all my posts +workbox.routing.registerRoute( + /\.html$/, + workbox.strategies.networkFirst() +); + +// use `cacheFirst` strategy for images +workbox.routing.registerRoute( + /assets\/(img|icons|css)/, + workbox.strategies.cacheFirst() +); +workbox.routing.registerRoute( + /videos/, + workbox.strategies.cacheFirst() +); +workbox.routing.registerRoute( + /images\/(posts|pages)/, + workbox.strategies.cacheFirst() +); +// third party files +workbox.routing.registerRoute( + /^https?:\/\/media.basspistol.com/, + workbox.strategies.staleWhileRevalidate() +); diff --git a/setto-webapp.png b/setto-webapp.png new file mode 100644 index 0000000000000000000000000000000000000000..fb76d847a6c180944d13bf32d537a50d0dcb1da5 GIT binary patch literal 62753 zcmdq}bz4>6_dO0DR6r3Gkd_dGM(J)r1O#aT>29PuL{UO%knZl34#gu~B3(*%BPsmm ze!V~6`$61)cYzU!|O z`0Lv1XBrOh^Q*`ojGW)=@F^6Tqolf{vaN}ui@v=v%EiUyk-3efgQ5Ow<43mkrU{#Z z_nr_ch$-M<5*p#$jA2)K-%pKm z^NLpLy?gg;@QiG)Tp?2u{rl7?s$5e>R@Nn9hMKF4=P;XNMKEP)$E~|jdUGOTQRt9z zX_@}LH-){!{R50tu71?|DoRZ6^<|3Sy=n2QH1AM%Z#Z_esJ08=pr~jqWx@ZPB+`H6 ztT?0c^5`?Em)_>EMS~U&(OlkqUlTyuRxmp{+yrfq+jQTQ+l#1TNfp;}&II3U-By zh0cp|-b--Xl(pZ+Yt^!FPrQd>A2ut-CV9ly5*M$w;Qei4N@|A7DK?R@;!=yxKPYm@ z$M>aKU%@ytSbKU6zL0LT%(@>Zx0e##W`FEbb%D{6A@Pd#e@p03tEW5MM4<_NDaTT1 z{&%4PSL4?8N$lqsEzJ}EsF-$Wk&Ap=bR?ys?3{k|qs{pu>2A7X`~$c`Kt$LleRfjE zZCe!UyY`zcLRsUC|M%pZR8NgOj(AZ0X?N7?0$q3 z*m(cnPbG$`E}zNP6aDui#dGIptGdXS%6CdHQ~dw_yVv}7Z#x+PJlvw93A%mcR&7{HHD&iXZ^t5UtK;@Mlf&kLG%?=;?7r0+r*u3p>;L4 zRXSOS#G|mTq2A@*WtU!HPNg0XIk53yB^nRIxoR3>0NLsOv%DM#mK9z+#h-*<~}jimS5yu-_qy@aCa4CEvjYaxA9p}W^0pVK-uMM+IfJvljvb1+?PJF~dh zlkk96Q|HNVF)k`&#`9lHzmNseA`8SOsO=_yir?qfvzMHleC5iO-@kt=6s{Q=8NJ>Z z=L&w~OC_bbL+TN&6lqrVyPO>dhK4S!4i%8% zj_cm4T6uQohhb>2Y6%m>bHp`;0QPl?3H1(zp5B?UvAFH+*99);sOjnHU-_!np`7;Y znX31d2ue|y7I|CKNOXjuL<87YuU;Q(=Vg~xO>%H>xX;Xt>)|o6uv=bTO~=U@)zTvB z$bWFt*R{9eBgs+14Q|V~c;B3jaNv7wq7N!~TMpw*8yg$1;o$sSkFtIUo434d#?HaP z)i)#kQgesjokF%yPCQ^X93M6>jQQvBr>nt9%_%9=ss(B+1HIHOLqpN=T$Y-NHoU#; zF+2AHwH^&PU!w_ab^g+LwMm1rEfnkb)hpO=@^$LB)HOyg#w&WnT9p`E?GK|$&+ zY2v}p4puB<@8Me#$hUm2q^tkf(^?2yO)Q%`*xzUNkI6eeJ-tm%ZXv@Q^@?BGN{>R| zIKZl0Ce2Aaz%K&!K*>3}m3a=6AV4X}!O`)7pdiJ|mm^AMamJgQo4;}uFO!fIS^Hvz zY+o;Mi!(BiZLo&#g(Kf{jOi&fAkF(;&|6zmgGWUbl3_TerM~q0x2U>0X;V{E{LXQ;ap41C|jx$(t_SMnXGsHoog`YlSj}tBMrmHxvR0V&sSgj(q2shXl9Q)@1ec^sZIsAN?F0taV%=FgG`k zUuty?`w;g4)Bhd)eWNR)0R&NE>}zD!WqY@9a2TOU%@@ARRm{MGXn<9fCZYHL@VCj- z7>i$JK~hZI=5{L%mP2?_zJs%~^Sk%&XXoaWaaby-lH{d^@>TQHisDU*{T>vT`+cR* z*Jr4dzZ#wZMJ~#h_uPc6?{*i%5TA#K$G30am=~uWhc+}cT)lN`q) zFM@2_e_xVIGJ0s~7VT&QTU}eL(I8t)zrMbH_1d+LoYelkvz{MHW=VL_3G0{ezR}{Y z&sqLud%0Km`SZ)X`TfUom<;s$sEo3VSu6?hsE6>l`oQ&M#E7U4r0 z8X6K(QVyqI+$FBGq__)qstD$)ePg+uz8lVfqA8^R^s3OL#$>5va3xo*NHc5WjOM~m zoGsDlTAy9GHnL7eYRKBsh*uJjDmC9QhWHHImKGLNaafoJv}T>Z^QxcalW%+h2wVgVl!k!G3dwi!(dO3G_+c7ub;duMLvzh9o%C(Zr0 z4OB?+dS_%)>i1Pkum1mXw?@f!uL4UzK)~PTV_r1*Flz)Sf$Gx7i8ENLY?^WOTb&Z9X}=7_(h?F)87}j6 z*&;F7`55-$o#YQcVcm?Xf8B$FkrqSw9R|$=NGg?5kzwG8Kj9{`(%)?!I{TH>TvGD* z>({S8k3X}%eEHJiSMHmHgoMT8Ic7t$#}@KKS81Xipzyvu$Lc6FvB-AYXS~=VXpFDSZ%fW1Xmxnil-_+Ljg}QnydT2S_kuWp0-$IAhzlOjz0na!I zwhN`WZo>E2E@3U-L0(?|-G>iz>+4!LEVqw4N>UX#eRc{62?@mE-ij+pdVFiH(YO(+ zOVG%eX*2MRrOq+^i)F=VXu8|EMHK_ds*ihy1eq|sI&;ph<5c~jnU3-kPyZQ-k5XhX z4)3L<)m%TzN_}x0?IV_E&1{U~IjTp_VeB4;Z?2<~v>s8(HqRZ^B}aZrC?t`7!V6m7 znEnI-1`L;ZzwRPwYy9>(Mu5x$@n`i`dV-o<{+yAuYuB!YC!P~Mx3FOR{7C!W{rgY$ zJSnMixNP-8nRf}JgFm7IWah}F)PG!$PilVq_ATLlUMh}~f*IfA2vHSeUw=Z^&m}z9 z=O`e3io>J2l$rVhZOTkfh=-TzCLA+(CL_{YUW+Vq1+rW552Zd$eQa7Bes61Q>+CR_ zBAYZkzI}Uja&9TEQALvZ`n)0Z)RB?TVPSYHXG~;3%WA-9oCyA0h_X2Sk z-Wm<>@wcg`y9u+hD&U-`82tFvtD3JeAn21ccR@@zu8owFd8mPmi4)&T{b;oGa#jnpPc&PWvKCn}DlE*m-XqeYkFq>({^uPJ}b=SL6%4;YI z|JMZ`#m|haeIBE)J+wi$}^cO~VQt6j=A1%+VtVmZ`3_ZwcrjM$u zV7rQf#EU35RsxN(Yd57NhNM`4AXmMAtv1OMY)z3`EHy#y4LC0H_ce5d+Ydg*atkshYM&Mfg~q;(NOq^D2vwsEVm zt2l^!vD&-+B?f{}8BX^+9AY#v49@n^ylQ`2Pmi4aNiadQix>^%jTJH3rv@Lq0;}bq z{o6iQ%qBx>pa#^|jSV?7vs}mXbcx!!Isz&x8#a&M_}= z7qW0xft7{5Ki%z zQCPRT&JwRISD&mHwc<3HrScUlEDNl%9W6a5)g7HsD00^y+)kw@st(krEFtJJAL3(J zzR#E*6-D?+yUvKl11FPV*A2&Y`*fi#vL7n$ExSMb%@ejKXevhyLuNXUzOudG<3ZwJ#&fVC2 z&TMkIYuS1C+KJQe!e@`!!+MPWI>d7&n$|zyz)#2BrA^eV%()plC;i%-M=I(vwD4d6 zVQk(DoR-qFn(%*D74P!ltx`dHo*nxrS-Eg{^7G?&^wg8rGTFTH z`XWc?w8nezjXz#NeS6@aAi*9ySV)slc&YKn^fZ;JsVU&B*N%?gVcvlbyzkx^wM>*A zi;H!6Y;4TP)HE_KPTJj_A3$VgPEKTeyo|H+R~+2h-%pfvX65VBBBy3%bzyb5Mh<=p zaA{70JFDUVy1REKHR2g7z`dc~KX~vUEIeF)$Blp8tYxs$=-oU; z?mT?)d+(0GD>t6LdT*Fu&i?(gbB;NFLem)xcQPzRqI7pATMF-oFgM`KHJEdT&tSG+MSAKE3g?W+7Zixq^xoC9hU* zy^72y9K+0?X?$oHg#nj~ilWle(&FpgO z=&-S+i5Mk}XE!(HVJ!LkcU9we2D5?4o@|t_DTz;hT!(?Urq8Tqb zs-mI-eaBbGv%`EiM!Y~mI>Pn>XZ@~-eX@v3+tkz)G7)qiURUhkkt9Z)oSrqt5geoagR-IA)I>p3UaZ#{M@9suL|- zr@7*rkZ{M_+dF@bPD7gWR3=UG+c2D^o&jG6o3|?EEnM6v&vWqrL74yM78kSmo8I1P zr>!8=d|)LF8}(h3+lN&~}2+q6r(-F`|I;iW|IG+`B1v;0y- zZ2(~)FtUE#qmghkw6zUwZf;&Z@^0#=u+OFU$s`u_*Z+N2BtPWj_&7Q+$otWwN52YQ zhL)DHia&Y6l6{{joxP*CmzIGc5JERSJ)PI*T+p;Pk%ptf@xz3dmzVUjX9`ib<(Ign zG`=@BC^}c@ zI#%bzWI0m&P*}K0WgMTBwB7$Y31M4EY1q^KZx|y==8>h37_ha(n3p7r?bYp=Sy}OP zb!P~yKgj1~SWkSxC1v$J-K;N>C}EM1j0_L|`s34`>qHXR&s@n!yN{yxjca6J8+=6$5L$FZY8{OumDKij;c?2P|d(krn{~SG~`6q*l)S zOEDnE+d?QcDok$l37=X8YL84!X;*n2(Jlr4kqE338x1MMpkIQr^!`Tv92As?_WuB$ zne@aG@W|(N!nxF!LPtaM=Ho});1Ueit;R#M@yfiFod&l(^-B7s zUc>e<8pnU%B_Z@Af>LfKa$uTf6-o1Mlo9u9Q zWXI0V{`&Rn7O04wI}qH;Y>h>9cum)+B?W{2f|8lazwA8&1J^gM1pGjR9ZotJ(Z zLZPwlOe&JFNI6=lQK4RIZ~SIDL%ZJjBN+!)yGAJ#`L-7#|GvY5Z;5`mN$I*#HS)Y~ zrpyp~t6@(*ZG2^R)(=J(fCrpbqhUZ)DHmyS^(@uZ)$J}O*#2yAa{!WDrFHMi?}ddd zb=<43~$f zpC3>KX#lB!*-(Nibm`KiUF!@OlPUQfQ=fdeIoaSAxiL|_2m4>)up}Q55uwsoqMQ>l zy8~C+{a4K#kef@N>~ro0(Uo=d@g^mIRBSA%GHcvtNbkXmI~Ud|Zi{5ZESlfrI84>+ z92r{Q-{8O`V|n$3Q@g&@d271ooBwqTv(ZwTsXC{*4!V?I&wmf4J;8=)n2g=%s-2yk zf0LR%bVU1qCr-HUFHC|jOzt0Y;3VPR`wUPz%HgwuPvGb8Q$CPbu>vlSfH}%{kd~JA z+(DBttC#v#R#x6?yl8oInFuqOm|4B0=v8%Tb@kGe%Z%y9|2p(4MCZeM3&V+*e^?TddZzWOWgZ9zdn9*48NeL6(6;PHH<;L-25 znB(~2(b4FY!5lv4by7O{#NYEBk%|0H`OjRu7Dp;7dzjhS24=VL>^Fzkh67QNq_o@oH%7`Zte+;a?3xnuIJ_DS&df)8h6FulaZN|leG(VUM{swIr!O2CFmN~ z+1c5ngAv`8iR#B;dmfuJ z%_5M|I%VTt^X>Q{6nx*7Qha)uN*ca#^a*Cf|Eymtu0J|I-C7wbq2{rjW*$D+HGuLB zllwhaS(*^uUM0+~`#$OGk*L(f!OnrA=+41-pt6vCGFfW29C<|hJhtUvZ6x>%nRpym ze|7Bh3JE1qdmmx=lIVJd*Ey}_>lm7vN=4GjaSH6g^X@Es)@Ag53@3z3#{TZ#=^;sN z(&9}jK{FiGzPk`q#0M-apK_AjgF+|;W>;3?mewlD%XwY5?|K|=8bbx55Oh`83#p}7 ziJmSm584;r+1Xj2ZcLb}cS#62J~{abDYOX>4AkkZ%eRkk~T4+m5pH@@YIfGRAt8E zahY-=@jCsxP`}kQH(}eH^|C}Kd&Ulm-0}Y4i#^;-oK>jo&yxk?Ak{g%P8^}D5iMB` z7j~?VRgm$%zRSSCfNn~D2%Kqtp8==GLlpgz(OEV{*IkV&Qe=9`_)>jPQ(w>F@z<(H z@qJ0tNs!oEETV$F4~aCxldb!3B^qw-7~r;<-k0?(Y(D!4k=XiD*UP`YzJ6sCBHHzj zKS|;A0J1kbu8ZAqXJ>nT`^y8Z220dX2+EDSNVzNsp#X}&mdp*l5HW`4p|*C0F=U#a zi{TqnQ^U(`JB^fXx096|^TF&J`1tsRuc~_u=+vt$RNv#0eS?EE>rZ{Na#ZWEWW}E8 z1=Re>;a1;_&xJLA_TWk^r#V5W(BIfa%Xn_<{HsR2DIz7jA_m{D=BpO`fL$4@vCCMg z0dxyVUSV;1i<194ETgA4NkDZ88uxcdm?C!}2TdNLfivSlOPmP^IEwlo_^NMizMAN{Sq!@?ckB^=to(obXBZCz=_OcmvUxzNv4@D&P^qS221W{1U^fxDKgL-)& zZ;=qZFBL*qkfhn0$d}=2l{Xj~9Bla24|9KOCgqFu1OYxi($9W7ZEXSeQG+Iz25Zi@2di>xv$vN59sOJ_gx_o zpuhwT)q_>l9Qdy?!Iq^HYljytn2#a=IY_WVcJU}DZdAj4c0BH?tzR>_iN~d zg$4BXpVl}Y+hp_-C@iHmQ~WyaD-QuQwF+!Cv_gdmqGTnCVv$1aMgY`-9_2RoiN|&O zD>fNKkbv`g>5)UV*?=G9X@9eiPl8Ix$Kc?(G)Z(3N-g z_L|Hzc|DKklrAgIf()AUx%fxH?-+2K?)=WD>$h&@0D@7o^?CXf3r_V%1+)&|zjLi!$1=nZ$Y6euf(rXqojU9q97hR{obuWM}ZFS@W@CwcV! z>(@5}8B$CkKF156wQBACo6k>dNq-IughSQ&^ZR#8PKtMaY;#Y0yWaNz{CxeB+1D;E zrtr_RzZ15&l>90VauO;kgiyL@ZVBzhXCQjZ8O=PD)!cO ze?Tfu$m5HFajhau8nz8PSk3?b-ho{j0OA)apw`-?FiS}}~WJ*U8wpPQ03urDGfRaX5l6zyaPNRF7_djot-x73g->Yg328vkU{WhAU3H@JIkQ905izN;>b0N% z|H`%f-JI%*VR`jD6i%=Y5Z&|8o~@b~W{q_6a+V-pUzG6i{OzWbRi>e>OL|Z*1oyf* zkR4I1%z_g{l+n?V$HnEusAWffDzAOTK_I)WgfGq@>apft>VXc=G#qhsdO8S6KQtq;xl#CK8?wH@o*(J?w3crw zn{>OI-%1?A`SBUwO?V!)!el3EJiQORQ zyvxfwx_<iU+=AKwPqNtGDa=ZZ zL&*lYv1T2(jeoJe^Fru=P&xZK(BNWrkM7>}CF3xGT1>5Ooa_ZjAEbXi$xI2O%!hkN z`@6g8E?d(<=BP%Ul9SW2F90I*LdNbbbIz1s3;Swapeq$c0nfou)ILFsA?oVN3+zCU zVZHN4xkUuIs8d@xpgE`)#_m?Eq(|!&eVn?MP5fhetgO&i1}Tjd9anz(Lnj|hm%NVN zfngC!o7_@wl18;n(&D9d=(6<0{~(;ZX zY1kG5haz!sy7?>bHpINbKLH{&H8tW4sZh1&bYvRfj2fbEfounWB0$(?Wyh2J%E%~_ zQPg4}-Cu6_a-2_FrYuUK7#gK~v@7*+E}jWz<^P}v#F z&9;gsP!n?26@Ai1XN%>T)>7<>Cp0yyEV7Pfr)wQ@@@j&@hsA~AOf|+y=zq#A3vAZB zl?*1{`KA1V;lH+T+(`()BOrV8+DU>=1KZl7)$~`GdB0F@KN(RxyFv0iTs!K?dE&8vH4uIYB`Q5d0&e}qY|Nje`v9z{p3wTv5@11%+e7%A7 zR`u}wa?tSv^bXZFA)j;4AxjuMRi9kcDwnM~^21zvd`a7g>EK3iz5R&;l8Px3-%fhKGj(bD~=1eHT*qcyEcs z{ra@*<3=Mpu|FB1!ktfU31zzVLK$?%2N{ydyX{NzrJpjK#zjRDPoefaa6j)|89qva%Jc&z^u5lP51Qe}?O{`io7d$#o~)V5WKC-L>0<)~9=YB4mQD zrT1QVnE*u7?ziLFJWqQVXx377H$}bDWg` zN0tnTc^5h@gEy^|lvMVMlw{L`_Q^|^FRKR2_ejwK8N%GVP@>ZqpTJ`qPc>5X>gA3` zp<>3<>)j@IsvuRMPgT!E<;JbYS*J zTDB)mP}nz_71pNnx$IIq#Kpxi>o#dQ{VOwUV+`p@5*Se-dVPL&93=47G}-N`YRm}e zZJ4W{hu)$V zE@U)QrhvMfE)`0ZKQ9K{6(`it3etx6{{9R&hepQ6J5aL1laqU49xZU)ggjs_F4nDi zt)G0K$<1pxSk`iN_OJDt&A{OJ@$4t-)tdnkG{}=kX%Ce(e90m5A3iG_{??M-xh87| z2k`v|W7ns@%L7lsgLoJjWy+rX21dqex?ya8w5R8jX^PkI{%BWMux;}{wW?=U3!TyV zv#i5m9)vBuy&*6lygK-Iz0>nbDrfAii&t}-Gm}}epO*)7LM;ZC=R!q#fd=H-8w(|6 z6W=-2sB_FSSDZ@mInOi8si@$9NjHD73gF-m7zA0q^u%EJ4*NAvl3gqMdR8y_fl@Ws z@XuJfAe0;mfKc6AqrqLSrb(|h`2f2+IjI)a^=*vk`lt#b!`5j5B_{8>>9tift6RL1(2}5iBCkYLZ zfkV?X2v|bB5P#h=^o>cvO>gR&wqm+x?wk8IK~`GBRDZj)M}I6Qdu-|hxJG+#LATZD z)*&S!$*D_N9VtmMxcUzuO?*;2WZ-DMONn{!P+wo@bfd>0@L{T4wGatWKzo+ghy+Rc z{5v2C3=GVs83$sH8XNnA0rs8$Ii+CYe){a$Rj^{Hfc63upQo3Xor?>PoEIqL^zQ?- zwYA4e^)FZ3Ox*)&b)wqV0cLpvL&IA41IEvfbr<3Awd$RFEG#jBWyqkX^V(ll1f{!Z zcUn_PS=sGi=%pJlO2AeHued_=#Bp1b!|+DK#1srgfZ>bjBlS{Iu2rX%pAWsyk4*=O z#Xwkl`jPZ2K;^=^P2g8+y-vR@UJ``j0(O$D(INwu!%2tGSvz<4It#{3UJ%Jtl%?LN zm#}BhQzFIBc{%T?a_`=Zwh7QOP%6|Cazq@L@gM<%jt5~RVK?rKGH|)+W*t0HX&z~i zI}Va|mDDNJjk2Q?$Up{S?N4MJPwl4F)t^}gr*RpZn3MyPIjEftET>!o_X5-w=53GB zi3#OqZ!cgYB;a`RlyhzZWh)i_(rsdFjDdYeBO*S&6KXi0+wKE|;`<(Wn}W|i^V!<- zpvbeFT<}N&fNs%ar6=}qULOsIeXX!xkU{f@fuw;1;IWRb*8vgGR6LkUfc3HfS>#_4 z{2$>bT~+fd7uvDfEfmsyUYSB`v=}-N)#M?j8Rf1GFBJmdR*Sc(d zdi`dYaQ^(*n(xfEm-GsVq=QwKF9&x3Nfr1-zy`hQw!^2U?t_V}rBuJwHxWPf>sxFN zpn`@RU`dv2DEjC2`F^VqKa3qJoBQ8~Q+4iS+`lrhVS)GX$uJPQ`hr*KFOF=d%56T` z6xDOdPNdp(U(fEQ)fxKyy#mk zZEYVwRAILqW=06+>KX4Y;J?iQIfV0HfGQ575gMu#Q07YAr>4fnc7THJv5<0QS5dMV zToL)Vf4kmgYY_rA6PP~YuIb@?RoSxFd!uEBT2R6IM;_$^N<^?8dR9T9I1wnNIVi-R-Z>i zqj1SUsu9eU!TVIxNi$dmNF*XMQq^NM*aE`vBc*^ETmCk1JpHBmPkMG6FtZL8uJP^V z)(UjXC-E~VUEZ3i|NNi)a<1u;eTTJM=SSIq0WGNFtXrf$p3SH z)5@=1UDriKL=ef~>eah~g1|tnDu7#c(308C!6CzGZMf2ADjw#w3K%8SN_2W)33At! zWDO2{ydghGIZSYMeg0KhG*RdQ8yDZ8vqz91y#R)EGrbmUY;1_PNUMl17EGEtb!9;XixYG!U#%(YOs%Ru zT`-;aVjWcUf!cE$1MC}^Cp>jP(tuVp3uGB=Vr=upd40djR?HU+6C)$MJ9lKQtO`x4 zBp*M1JQxqe2YElJM8SNE8{m@pDk>v`1JK9>I0v=9^Oq`+;<$IXKf+LtM|z}7z=EJ! zYo#tEKVZ%=9hV=?k|jaLcvZgXo&+9CER>j-n3~2F96q9p%AeX75KL%q+YE@fp}y?a z5CJpOD$9VM_mxpZqSpL+q3p)C1_tS>)l~pNUPcpF10{wuGf8(5*`#MMSwSRo3nAJD zVKC;!@e=hH+nMAg4-Z$@?UkGqix|5bI5?dZrNKq9*j#{;sz;C8(C9J(2Xkak`X)WdBUeRlz0EgUy6y)51aooJv$R|FwQYwYF_^?;3yP0joR*KG_* zNy##^fqOb$2dY%AzcJkRm%pAJ?_K{j3^=x6DfclwFmu2S=hq%oLKn)XxE&Kqa*jl% z1-_1_XTxFujyheq8cd2HBfVIjX>Lv@K&U6HDv1}s%>jA*#Hj(lku#a4^M2f=+`HsI zBj=dWEk2amo}Pjrwy3=l6NUmeUTxb4v@NNyXU&SMf&w0R=rNO9u?U}()-LEYuK)Ry zwhSI4rQPS1m-wEPFRK0q0B<%~Q)Y1I&nw$T^qb4rg~=>E?bFlANX2yB)(dv=?C9vQ znyd+jkS%rD(n-i(u2Q9KfdCAl66yqs_4sHm)O@V`p>~~P8baj>C~8*Q^Z-`_ve3=u zvt8M;AQqzc@;P&jhttZF{}OCJQ-YEQi1sJ5P|^g{2MDBGh8zj7TtNF(W!CafMEkl- zyXCAN#0Z~as^-X3X3Hg*oJ?7dmHPv2Q))fIt%{L98xS0<{P5Fm#-kyHk~F-9$d4!$ zyy&;#NiXzs^6n}5f3J##w^AP-h91RR%B8T%tfCcOZ*skWYq zT%2)0pz48A5>(yNw>r|=>Y;W(6pj(nV!A9&l0pP zg@w$}-@igHFrTWcO6QfgfwMq}REXqV7|MwlUo+>!fiRY{ngCM&Df^fq+XPqz;2mV% zeCdCr)1baHS|i6^E#&dntZCR2C!H0n>SN``!S`MVg@l;E`t$2B(cy7%d2WX@QR#BW zf#rxLBa`e&*^@X6ki(@Fvny+W7cAiWl@Jy69XOfmXTq9UilCDb*5iQARmj_HHC8S- z;{XjWhYp z3vK^~dHH!20<yJ)3~4&G~jVJq8nO?6fdp5M2TD3zRhxJQ9+ZnTJF6JF}8Q zOAmap-YN4}F~740w)>5%!Y6^1e17kPRn-C$%n3llizI(R>EhfXubh`(HFW&Dt}&>_ z4Avsayx$<`?ZF_R;n_@=>?$5U#KOT531P;x86}^{o7PE#dLX}0@FA!5w7VUVYWjwsk*2j0RlLyQ-u_m}*uQ{3b zgSeqyh1HNHcp0{p4#dQn5f3-Fyb#qAovB|Km9{fF1Lj4#&C>>_LV|*%JT{55qtMbh zN%WzeykKivo1OjkD^EFC5O*qH6*xEbuRv?5ESLZXgNQ*ZV--2(OW#0UBZCQ-h!W2sGhczE zCS*F@SYJPyxj6s4W%{jw>izMzpR{uEW;RYNGAQI_o}PJeARUj3HRwMAKDMMKC}=fQ zK|2rOO0K|+=V$jl=|?WdTVrEm^O(OZjNoy3{kqh|sRE97sUB0Yz`GWlR}5l35IKds zrpe^I)yQ-Ys$U|XVO=Z7XVBoG)euSRB8nmazCEiFI z0qD?bR~~^JRh{0VgqUK~Vk(IDLb``Be8CI?=Uua6r>Pll(0c}HvA;GF%4YcEH3TEt z5~RLP&~;(%(JYg?Oy#l8HbmSQc$+T2_}VtGEKK}O00?rOQ)4HZyy|Bie$_cyqPH|H zJ?^H)W-|sL$N$I6#pTeTh>rDhT%5UG@Z!IZmE%qlV=$v*I^Mc$NB7L>43HD?p*4wr zW1|pozxn=-Kz9K4Waz6kDH1vfs|cC_!;fP75`eY*bf%|ZUIFn|%Fe1YioxxsgOsEs z8~BRQWi(IT=Q3hy5&%=_GUL?-kD@Aa3ex!UWGx2>++|05389x_OPor-MBGHV|6R`` zwb!jM`D8&qsmEGs(nAga?>nI90*k@hF9g5B>>07ee@PbJ#Ze(UA%3Kl%ZP8~IQQd* z@X7LhbQ%8rr}JYPIayf@#NXZB-Q%-`w6wK}4sO|3?2nB=9Z4rE*~|AIg1LvI&T%E3 zR0B~1(0?vqN@h&12L%%?e@T}3u})d)dGYnSd~P zT>MrY9`7FS@~^x|bb0%*LIj2{+m@J(n{l?Rw6s1{$^F$KSylHsAfC>4yB-G(yz}c{ zJMaX~JxDPdT2U?s*VI{3`T!~O6@pFT; z-VJ}!t5A~_-BG)R=Kuk32=7@187@xT`~)eQ^Q<~PCguk=wWmVA35VURgygBkaABS% zi%lkwyC8fbx}?QT7w9Lz*FT)W^?wQ@j4HDkE)Gul3gb}(E{Y$TA!*EXg=uKM;fOs9 z_i*kV5FI(o+i+gTP?w>N_9xo>WQSP~eXj{rj;EniNw!#M1cELt)h;Dh#FmrWvkNZT zl(32twzXFe?Ux+R+KxYJ?;-#GLNiYQh< zta8a~UBMX@v&kHEpOv+LHeIyn@#lt39s67L&@nX{GN=K|7+m!pNSAaA;g7Ain|p5& zTLan#q8{gekq4i}XI*a%yGB?UpwDMekJF@7f#?T)zsuYg9NZ zeVgA>_98_X@dO>;OaY^dR&=sEoHmrnY*FjcMvrQP96xX;JZ{+bLoc;`|4z@o1I;WH zl>Q~Mexmu_f3WxQ7{OW173nfBUX0-W+~^UsI?4lWkVRI07Pn3PR|pf#E7rU0?e(7BqOnYlgm(!crD7!Vfsntj;}6LWIt z!j#XQp;ih0+aC-X(FPwEw2=yz;U&>)cC6^VTi)Sity_zc8-pf z1_fGT8AaKWnkir;JZ7~!CkTdSwy8HO(2(cKV9XkP1sRKutR&1O6u2FatL)i(PBH3uAazEc^EEuF^bPDeWGrMa>P>z4r40%qx;Nxr=ogWxzZ@q~tbaCzxjOk@>8r$H0kZ%#{BSrzBo^4|uyt^QCun5n1-tykmrUdAmzdz)*5%wR= zG~*W>9K5KRFk5545M<&V=HZ$gFPIJ`X8=Hkbfxh@4`={J?upR3 z08pxCSpk!J#~hxTB}CKQ>**(8FN(%_guQD<<0A-M@MF~0zJ; zVxgA-h@X*I3{X|^DBn#)X-3KbuL)JV=jlfE8KSI=Z&@IGQKmFdR#nnjf_pTkuRfxX zB8hKSs9q*s@s@%4?bjB>R0h*T)>SRAKE;Xn2!k2;SJA7_h#y1e5L6#xCV^=LC;n;u zAQyW1(j`J=`C1qqdSwgVBkS|whosM zZf)8sP_k8+mpiQ?ub!s}PvtjfK+!-q?N0`V6?P2YN5LClL79A5Z_^ZlFK`TYX3>D; zbq2(+u(9_*px8rXklpRAndTIPcO4x$gGV6@_1It5->I#wzD54lo!q!|f9ftH_wh)vk+|6puiT1hjXEa!{4-+A_**@+@J)|H8#Ej6 z(`arH#97MbIr`t}XOcR!>Y5g$t-hnV9b}^_%XrkmtRjq@dW|-v`^oJLvl$ z;83F7z$aVa%!uF>gMvw5(Gdx}@bCFkKq*RDJB=W=;dqT0@B!J|gEz3fF5e;`^+I@i z<||omdUudBlnKDmEXC!In8BifFpxlh&-U^G?1oOu_(f(44lul8ivHd`Kg5{V6wnj- zjaj?y7o#;MqP`eVjV%LI%6V07qt+NR0MudNr%zm}0hR;lm;eyLJG*$y|Ki09go}kC z5h^hqJad1)0z{Xp>Pk0=UV*@V#X0-Il>8R<{q1qK*{$pUEOq6Tj`Zst*8!Q+@pA+4JQ~?fv zfTL1!cz9?Eh&X$e8Birh5(wWaESXICukd4(EYBs%tJ_B!R33Zc*k(m>+rQ>1zK z)UQHeS1OtINooV~m4()(JO&ai8ZllfiEfRSy#>>V=7A=72o<$*z|R|xAquV#!cg$k z*^m>lHV5;BTvhLE(+`&P;jx+Q*NPm7ZTgjE#HbWhE_KOQrW4~OKWkDJ?%hupYL$0L z?hoZEwp!#p1yg=UXXm{~k8b|=wuP^Sz9zVW2n*^Q)maJ zu(&LrxWod$@rR3&^c$|BRUf~#_~?%RsNJ4)*g!9AZIz7HTMIwdgeQU6=h7_z|D&KA zI}jX76f?jCmQ5_IuXlrRmi=s>09dJ5HpABr4u*hdvQzJa5)4LYcJTKEzp4$I1+7P` z=Ji)cx@q8d!G!r-A*?P{SqJ!i z+nkVUjDlh^?RGQQdOm<&J0Y@xJK+-OK(@2n*oIGFM-Y=RAel-t&T%Ru^L{NJlh+vAocJ5X#BHrtUt4~RiM^9o1I=-8MYSeDTWo;pd0 zK@ibgz~Yn0Yv&hC@|b{#$k@(k7KU`yD=45T4WPhhxBdP57w~pGG461&b^`EGnpSV2 z{hL#Y*?@;?uu#L6rMS4bJ6Y(}KrQ)YN<+FkR8+mdToj&cRRF~#shA3{ua~**7$9_w zuvgvcO=<XL-9s=mmZO z@dxjd6@H;-<=JZ-fcIM!uiOEnGeQc4hdn$@T!x(wPU<`Yb6L92#d(k+SbG$4X|~2H zK7i>KJh%G%!*DPm)FQopnAd}xyx{ja03SrgX@&>v(w8GaXtmH%#~R!?06Q!oylQYQ zGaI!$_ZA-fY6(8@kwFG2cc*=L|NbX1poj??o_ud3QBY8DduK;6`n(FOQKt{2pl?Yo z)8_m!06Z*98nIfyD649{qWByxWAcE3Q0vnhrj6 z9MovAl|*fI?tZKDJT9NL18{WDO#zrpAOcK*m5bkNj8VEm5(NVR0n~6 zwHDE1fRRDEMYbWd#wCbkNqO$Q<&02vurvU%!y>!{6!9Wt#vBE;m-MPoe z7zEb7jFB~S=q%7Ad7-Kdc7K`y#R}m~5n%`*kLl2WZ}qghY&7FB?20~U0iyEBzLWPQ zz_fmko&6_cM*zH-GFok$vT_3SD#8Znx4vgc{*2f^CRgX?o+v3rSXc)i?}x*C^ba0< z&wrRUH#^H&P0XE1cc5?~6xb=fi@N%|S@KN?{mZ30*Watx`+hubFoKuVXS)VtX>37h zjc?6D-$4E69PRxJ?8GiK$XA}{U}Gp6#n6Mf7G7t;NlIyi5baJ8NdY6+{Mhjm`L>GJ zf4&)*@>M=%@kOY~%}Hqqi7QYos(IVMZ~mXvA2PvpH7}>IJi-emhGf3!AW(l=KQ4i2iitfQUaF7AT&s-%1+z&UCY{OI)76q=``}~E9`2+GvHTdMCd6EM*3TgA; zet--jprGicbeYs2+V6`gcdwg0v^9S{p^`|r5DC9bfF_Z9vK2M710rvMtq&MEn^&;* zj{7G0c46!;itnNT_dmR;p%(syF@&5;Mp0G|z&)mBqc^@Eno9pK~6aMd<4dI0q#UOMRS)=bGWI%^0ZXhS$oay3kqGBf+ak??hE(1duFg5H*L^?l=ku}d9B0GtPZ~}Z zJ0@R>C75mO5(|zE*WHP78_C#~p!IvR0 zLT}q#wxY(SCP3Koxg0m6@i^PO#uN{8aB%e6|3=y86&JtzW_2fEnOdB78rPn?Lg(LU zJ3E2i5mka$x%bi8Q&OgOVY(7E_?@Ltl!nvHE?(3|bs+o=7)|pS&*R4x2BHY|Wzf3s zp!~g6Qvk%GIRAhm8$?6xyYNd6SU&}woDsu1v@VRy%+5f%HP$6+Y}w+7(qTyN0u4Wb z%gfRy@He8u`ryUv8Oq)W;Kq068<&eedJL;A(c(hNN=lCYXXP3Cz2bq_h^Efd-FJ+e z)P8^d+|rXNW(qe0UFaN}q*BO+Av?644k9C|j#u|sXFWANWLac6Ffnln3j2}b6O+Tk z#@}U$ny{0{NqX&CX4L&PO%P>WLczPKu~|h$A4<-{ZE4SyXi!XsgR+-YQMpn^6&4cW z>tUh~A{j@1uP*Q2evZ=MtZXn9{>gh7@~=8j^QFh%sx)1~FJMEP;nrK6()6dVug?+E zKf~QSaN=1ssVG{elVZoTjP!p-Z_AY5US+1nA zu+pdX5~_O7+JEl88KCo+uBJX((yWtVy%R-6yU>Kan6=_zLxUk+>^9GZ)ee4a1DLP_ zF_;|tXipr4Zln8Yv_PCaaetY)FfAnRFcgR~gr9HC@e?PUTwFrHQ5$^@{_w%h?8as; z@c&&lb%2E&>RQG=K2kT3)>|##N*RIg35eLvRXYB2@fEqdvS^Mt5~)g#6rc^;({5Ye z7J|W)l}^&fY}c-`LobB%S#&mTWO@v~3|~|ZVDpXlg=;!GcyM?cK;bWK8i0SK zVVQg6CR-M5hfFGcUWV=V`kp;C%&(@jZduR$^<6sK&qWd6U6d`JrtM;px%TE%mK5cmyvvu%A} zQNZ{am^o{JESGElg}1;^;eb?vdidjj9fpFyl+w~gyyEe?coLeTo3=H6>ZRi^?E~odJPB6*azpeME^tNp` ztZxZOa8dkL`9M+#Q9vo=7tSAQYw6Da{_gZc&hhZ!aB(d^TC++@Z0Bj?gZJ*=ADEon zQ+aXxO-cI>w-1lbZuIx}|21Y|{Mp{m*EezNfwZSy8)E2)%&(3I|3=Dgi;$(%ZRru&~Mjdqd03 z(dIt#abe_~yi`Ku6h-s=@8Y_;Bb2jU89dJ3&3xLUmyOqBrRF59xXyUM+d1~g;lq3Z z-7n~qg>^qtGS6C??%5MzQP>bIxW3eH_L%b@7kBprR)%FP@(rJs|FIgW2Y(Cc(p7aSHq_d&uiEwB> zc_I0cL06pu*R9!?04vw4Qkkj(O}%^iSza1)l^1oKonAauCq~iS&#TKSte`KbbYm97 zMB;5_zyxP)ntQk?v)^RbtXb30Hi1T{K458PwX^yC2M?NX7Dj$N05L|?@Z|f4B`>{h z)#q(F3saTnIT2`pqFgp^EKy0)x~9&OiE;!tW&WknE49@>7w5fVMb)AcSk=A0nVDTz z3ZjB|<-w0B__M7WKbG6$1MCBF85tLXz{lEomn|sdw8)K#%5b}iw z1;@j787IK+PLMqTxOV$9qllBp}D0fK^IAeK;;b7r&uxd70;HJw&gTjQj9QDr;Mx#{AyidRh#td2pfxc;|KP0 zEbYtOIQWc@D0J|ARLW3xu(GoHmRo~!uQ%3r)>V6!Pe<_ruv=fEi=C6cGbWz@sfC3C z1Ewz)&3!HwuQm1iM0hih)BXL9+m>aKSA0TqGFVBe|FPq#xf^~sC2 z4*eU>f#O{uH#N@%W7J48y{(&$hT`g$y>9|(Sw-(MGtSTdT!Sfr&~%iS8UcR0nYHMw zwG4@czDPQAqutJcCM9F;;!vvK`}-lo0b=Bh#Dt$V;NWzLHO=c%In=#A$%NRhlpSCh zY_&J#raSEc3W78-r<=v7)J)5DDgjvv6YiVCxmUNjMLi-Slilr5I7(_2uLnsj^(E*T z^ixkv-?d6J8fN?fWb)#pu)czj3;M=_y>V|ZJ;=-qtO&8UC4)|xjmFlkyxSJ>&YiGS zV~gTY2I`@?<(ZI^m6f=;UA@)qEdRHbZd|$^yx*;! z+TPM4YiS{IgHD1ksz51F+av(%JSaI?IRE%Gns8Nip3&&^^i?2_^kU(4V#N#+hK#aRC!bOlkpUoUF6FYAzXbIRoGN>iuk)L1V}XrgCFkCP|gv!-OMJpZO^f$2~>pe-ky z6%B2+Xo(zUj*Q0akRkMaRF$UhRNxrf)adJVaFY+Blr&rbNwWU+pb&IT<>0t0)&rj@ znfdo?CB@!=@~dwd8p~fxCwl-!F~i&*(w4q6<>9+Rv2#f&IGv`4F!S$NxFu5Mfp-704KFA^5&{m&< z*Qh(*yZl`q+uH-=cKYX?!;r%f?_zYe0f{9&a^JtiHl>C$Zfjj z){yG+a+bxE|M-=AMdFk(=0HE~z|9!gZ4Kz85?En1*SE7<32(};)FS|-l#X`EI4b}; z?RhVeWTFh+didfvm?|ZJCr>^-0{Z3L{1)wQTv5bW;u=QX&;OtLegia3goS{V; z4lK-kN)S8?2n$OiXN{E@&0={@%5!7AN!ty3OaH`NJcSehbPj6T5lfHqm(IBzJ7;$@ zjXz0m*PnO~>#tK&BMhe~Q;9Js!-pN&i@$vP#^?9_-Ij}sTU=saF*v%pwN$-!Hn@8G zLsJtoW(}BS83a#uGyzbdp#qG}LG~%?{?FPdusXs(g2xfscq#_I-II(an}&PBPH=K^ zsEFEIQu*-nn~v3VW{FY8p5IE<7h1RHX1B*J z8IwG|$xlyQLhVg_whG-J^TclqvH6R-mpU*0IzDcA2VKhCwS)vZH2>*meqb3i!s!wD z?r73nZ1tB?U5UW3Fs36{GBmDTyVl@*0o4s+{H%k|E{6VngNF}vvjJTJ+0Ru556a73 zzkjH&t1F)<(7Cu63DLU<{2<-!>v&js1OymU%)$W|-O=Ho04-*~%$NIZVqhQ$xd@r1 zr91#_jnMdX05wA@1rOA?(hZ5-ww0$PXFsc?a6*&oJJnCOwDk8B+0I!D!uZU0hxhVh zIpG^0rplpjAWkRqj1nnK4Tu2g{&Nzo3&2nn#tYutC3rGHs9s0k=^l);M*w4z510^l zt%66hRh)rv9t@z%@q4+j8pX=y>XJs?>IWm_D877gN}O`j)3QjbO~GLBUG3?tr}a#M zc-(c^=w;_ECwJttRj-_aXh!K2I0dke-6OGaamrAtVHOUwT>gmo9~-NUc9ntX9Y$4? zVR&!^HE+liOp`T)Zhc|)^&R{1nc;SifjXwKKJ>(>!%Z07dHDH5Kx$@Tu!hNtcX)7* zv4T(z>J@}MEI0+iFdj(l+^DXe+__*Q*3{GlJ+`C55>7#)aMs#1T(||k=R|E2H)Xj zHi646Lmr6!=&PC<3P7apGHg;T7N69JXe{&aX-NTg0zI}}^70-T2*=M-Rvll@m#`xg znk{AT$*R(O_w@0ifGmYERHJh*?W%s3>{U0uvt0)nwn$TdO#m1?6sAt`mFE;wUBA!55y-58 zVLl!+CwJi8X}^U_yZ&tjPS98BAx-T5vYmYFVbsmXsqi1m`fP#0*~Z3(_6B}|J7%x! zq48BZ{F18gXe7hugf6&P-e;_`s!DRp7MtO-f3f0d7Zz< z7*8La8�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 literal 0 HcmV?d00001 diff --git a/sitemap.xml b/sitemap.xml index 4373540..6a9bf7e 100644 --- a/sitemap.xml +++ b/sitemap.xml @@ -66,7 +66,7 @@ https://setto.basspistol.com/about/ -2020-07-27T10:30:14+00:00 +2020-08-05T17:06:29+00:00 https://setto.basspistol.com/discography/ @@ -74,7 +74,7 @@ https://setto.basspistol.com/ -2020-08-05T09:18:47+00:00 +2020-08-05T17:06:29+00:00 https://setto.basspistol.com/links/ diff --git a/sw-register.js b/sw-register.js new file mode 100644 index 0000000..73a719a --- /dev/null +++ b/sw-register.js @@ -0,0 +1,20 @@ + if ('serviceWorker' in navigator) { + navigator.serviceWorker.register('/service-worker.js?v=1596647193').then(function(reg) { + reg.onupdatefound = function() { + var installingWorker = reg.installing; + installingWorker.onstatechange = function() { + switch (installingWorker.state) { + case 'installed': + if (navigator.serviceWorker.controller) { + var event = document.createEvent('Event'); + event.initEvent('sw.update', true, true); + window.dispatchEvent(event); + } + break; + } + }; + }; + }).catch(function(e) { + console.error('Error during service worker registration:', e); + }); + } diff --git a/unmet-dependencies/index.html b/unmet-dependencies/index.html index 4bdb64d..cbf3ea9 100644 --- a/unmet-dependencies/index.html +++ b/unmet-dependencies/index.html @@ -110,6 +110,9 @@ + + + @@ -615,7 +618,7 @@ Open your mind, open the source!

Reddit - Email @@ -740,7 +743,7 @@ _paq.push(['enableLinkTracking']); _paq.push(['setTrackerUrl', u+'matomo.php']); _paq.push(['setSiteId', '11']); var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0]; - g.type='text/javascript'; g.async=true; g.defer=true; g.src='//cdn.matomo.cloud/terminalnetwork.matomo.cloud/matomo.js'; s.parentNode.insertBefore(g,s); + g.type='text/javascript'; g.async=true; g.defer=true; g.src='https://cdn.matomo.cloud/terminalnetwork.matomo.cloud/matomo.js'; s.parentNode.insertBefore(g,s); })(); @@ -759,7 +762,7 @@ _paq.push(['enableLinkTracking']); _paq.push(['setTrackerUrl', u+'matomo.php']); _paq.push(['setSiteId', '11']); var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0]; - g.type='text/javascript'; g.async=true; g.defer=true; g.src='//cdn.matomo.cloud/terminalnetwork.matomo.cloud/matomo.js'; s.parentNode.insertBefore(g,s); + g.type='text/javascript'; g.async=true; g.defer=true; g.src='https://cdn.matomo.cloud/terminalnetwork.matomo.cloud/matomo.js'; s.parentNode.insertBefore(g,s); })(); } @@ -792,5 +795,18 @@ _paq.push(['enableLinkTracking']); - - \ No newline at end of file + + + + + + diff --git a/webcreds/index.html b/webcreds/index.html index 60f5d4b..b47f839 100644 --- a/webcreds/index.html +++ b/webcreds/index.html @@ -122,6 +122,9 @@ + + + @@ -248,7 +251,7 @@ Reddit - Email @@ -373,7 +376,7 @@ _paq.push(['enableLinkTracking']); _paq.push(['setTrackerUrl', u+'matomo.php']); _paq.push(['setSiteId', '11']); var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0]; - g.type='text/javascript'; g.async=true; g.defer=true; g.src='//cdn.matomo.cloud/terminalnetwork.matomo.cloud/matomo.js'; s.parentNode.insertBefore(g,s); + g.type='text/javascript'; g.async=true; g.defer=true; g.src='https://cdn.matomo.cloud/terminalnetwork.matomo.cloud/matomo.js'; s.parentNode.insertBefore(g,s); })(); @@ -392,7 +395,7 @@ _paq.push(['enableLinkTracking']); _paq.push(['setTrackerUrl', u+'matomo.php']); _paq.push(['setSiteId', '11']); var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0]; - g.type='text/javascript'; g.async=true; g.defer=true; g.src='//cdn.matomo.cloud/terminalnetwork.matomo.cloud/matomo.js'; s.parentNode.insertBefore(g,s); + g.type='text/javascript'; g.async=true; g.defer=true; g.src='https://cdn.matomo.cloud/terminalnetwork.matomo.cloud/matomo.js'; s.parentNode.insertBefore(g,s); })(); } @@ -425,5 +428,18 @@ _paq.push(['enableLinkTracking']); - - \ No newline at end of file + + + + + +

G@diXd4Rm>sc3jA!oYDiYTGYoj8qE~?w&9jwsaC)z-t=C8oV z@eg1+fNb5)MiVinI%c(legX0<@ku%{55OLWNI8u$8p=f0XZ~2t`-TYwObR#u{9Ry5 zwO7J-dKu3PohPvZc#wwD9vE+5d%0^|*KFb=ym+*-VV>!R=l93WK zpDW~_wCs|5TZwr$KbDk*p50E+OM#AcUfgE^w;j57r^orfUCDvJEo94yiGj!;l`bRN ztd<-zEHup!;&aIWLGTDm1vrt!k+jc|93|RTe&ZAfb1$A;RCO;lXeH&di+?=|Dck=U z939eIk*X!wfsz}w^)EB=NN8;qT5v^5lnqGI_cTTn#>vkrf%Y}ySja3ykvy|T!Jinl zgYy9QK)|yY@A*HXWU)eS7PZA3niz0l9Yns5?$p=xcB_`X#ENzvdt6wK^;Lz2?lZs2 zr|H`x87A>9216%C`!d{y2Ox}W)f6n5M~*2N)5Q->&s_~;5@-sz}dzs&Zg zdV;A8DI3TskX)U5`!|u7k=`5Ep2fbP>8IB^iWk2= z>?XOll%(B4o#_dd;>LKTh-C@na8@l!(l%^OzpjCzPc0Z>xoa zDcZ?DwL=@xXyv+6jWB`ZcC(lGW7|mS@1Mpn4N$np% zidH{a{z41v#`+YrP`cF=A-+}9qQ^{x%f|c!6Nc7p2hpSRalW>w zF28Ct^wmAQzH`O<1Z@__`SeJBm20s}YK^K`&)uGv)>VcNe{?a442HS4wh08oSV0*` zO`$|WTiP)OXIPpyztu?rcOL-q=!R9WpDt8|=GN(0a4g@>27EswoK7vJRh3lH|58q)UzD?DriFYw{i{Km3% zjJ%BGs}FFAF%L)$O(UFnNUa@K8Te(V zC+15p$@O~r@zBE-^24-V-TiOG2+fp@KhYjSGb!xfR{CUE8D`2`5vF)HlqVA~WOx$yK5ATCGz_ZozT^Uf%*Gj4R;;0jP ziBZ#${N<;Un6_$;;xU?0OGsKsYyR&f;tfm*d~zPP{6=y}z5rxfQsKECS_h1NS>lrB z9M8D1#%n_1T^>zRp$B#ZKOsLV?&8Ai;FJk624N_xCdLt|>pj3+Qu+ka6(Zn!bf;f!A10NlW>!?=1wbhFm^}bLGbiU+fDED~}Fdp1+ip{<|u|Hj2w9(r8%h_SAOeZb|I^wx~eI zy6|TSyAt=I_LP)Q8#q^&P47EaYR(4ux;O6={`zQ2_D^* zW+~aWpI(Al_Cg?!>O@3~3t30<(S8{7BN(O&@^_V!Qxo9{OgihMAcy|}K;#ngb-mBI z!?YKWtp{Y2u3QpBd}h&CFNI7juTj1KKuF%b($ArfdDRC35PwM+NM}seRIIaLm{C9) zDj1F|fbD&Zvfm=OiHWc34C%~{_Sd_pAj<56?-%3qXR&vZt(M$`4pt(Un$8d|Zyn+U z;i7|F7Tr?vp%u)BVj-4Ojk?8LH)1Z#;|=xGh#)mt}yERnFN=%KN1$e?s|_0^k|emnc5BrIX8*tWOYR#5RHMp zD~9vNEG(?066drwIcE6}R*eK}KMj^+yk;n5rkrG%DQox$HRl6RWB4yki_ zw3ftpe8wtLC|*8%B&(&5;v2^%%;K7T>&1<02TNfB6ZM`TS_8bylO=AiA5|{2=CA&G zeREFmNf>NDW_jQ1)@`olNgUxHj2NK|GWB|Oip^_{U5)eKNOMY4Xh+Wd1N`b2S3;$y zr{|{ii!+hL!SG?RdD0@|!OB*Sd53bGTnb?(4f+{xaILla2XFLX5Sx1oasTz>MgqJ~ z(q^ef&C8g_licQi?iSlTJZWjV)Ct;3xFX3rBhFIh zjhhZ^716=AB`+)a>X=v=D75X|#S1z+vsNj3ETFALH<;vQr6J5$ktYe16BFt(W>wj5 z6rqpj6fu(Y#DkSEZ`d|^yvMUl_g_n~|Lox%j0oIlB+sXOFRpu#zY2+#{0AtA6fF+I zP6mv-9T@2$O+~4>&5*Yye^?%zjJ*%RvqT=Kn7%eFN$}IFAfAPseIJv07&hhpDYa4m zIoYqjkGzi%R(y5J^?3W`r!JPdV#EB-r$At9NSS*Br5Y#}g)P>Y`1AcG5YF!dgj4Z~ zMQE7fY3RA6{Heeud(xS}>wYJNp{!RQhpom*Rja0dj>YPX{_J zFSsi@&lJDadd-?_w9Ox?Hly$SMPz|Ke=3P}NN|WntnXB$vj>;9m2vsB#L6-uqtm5pMrT#?-^e)($7W&LWjZ^?KNaE&MQ6 zWFN-R-Ix38TRxQW!A3-O^3RRLud46d=2+PKx?EriKUiMhmjJ&}43b7kwEhE7)dMAs z46RA!_x|sR`R_H|ki-fxmUV+6PWrtIy5)`LN2n3b#=GXt?o2vDN&>FZK=a3hS9Ko% zHa#yj6c;s7j-?JcIU6MOAXzO)IjnB&+?REih}0 zEc#43CV@XcwWNs(D2U2=7kZ}|OXl^=`sBPKh)@$>y2l%lI9-~V*5Ui9&rLPg5&bhGsUo!3~R>0hgjGRCr)z4fx6HC>*R>UktN!7>q1 zoo4pKpfU<2ejQ2$2c&8X>LQu-^LwYQr2ESaaO{H(NH zli^+TZ>1C3)v7t3eY!;*nxh*Gf0Q(Hk50`KUN;K6=*Vkhj7$BMBIY;rI^|KQ(#Yuh zS~{k5LN~)>A>0cFV`8Vtl^34=Dx#j^-5|}YB3$K;2p6Dpt4P~XidKr_qw10*g;tlD zI&=Eqf}~@2rGBRW9Va~(Zeo1JyQtQukFlW>=Ae!xnTGr>T&cp75EWS%CbGN45hIzI zOKnUt;!=n9`wJT+G32l%R^VRWzMxF3LAwQmA@&)|TP42i;5Qs~B>7nmNsX%IOz%fN zjx*EwKPf&NUqiHrjM(^I)F(Keb3-iJvbw1+clC+9LY1SGzQ!a@SYj2CpM#Ds@=lEq z$&jkv3~%MoQbEV&Z;%OD0?>`l1p0q~67uo{^Q+?T#>|^BA%Ri$zlI?!sJ24R7ky;H z{~aXVM_epz6*wS!L$KnhMwIK4w@WxWT3$&ke@BT~U%GfrL%+o$;~qEG?+8_ys-bUk z{Vn5fn9JSONBifT4HZXf*{#SXYEr^fRR#i*X4Op^?&_$ae4V3xwMn(&uCDQ4OjuD#msu&X4ZJafIFZ!&0033J0-hVNn02Tr5M!& z;-KY|Q8ug)(+W8K0sFfaCfW`})lT%j?k?Le)4N?TH&1$AwVrO`1>+L7)YYy%v$)XK zhzhYZONv!=!BwVqG94u*x+ap;I{BzIKWfoGOh2KVq^M?!w*vK47{te{?0H@dxYv@=inCCKD%vU)thO9fv8fK!f z%nS}`y>?KzoGI>pC{|{y@Uy^CKyLiY_a0WHWCl0IEo5wtNVnJx#x6CDY!UY}31Z*r z)k^uIawxf5KJso@ws-^&TMqg{2d6MI@CQ{vPm zvC8?s`_KOhjMET+`v(Aar0ZZ;PV~Y;DiU{C%I*eKHsfZ1!79USEM|%)WZ!AoLVq4H zlY=s^Bf@7U(MJq(h=ol&{+rqth|30Mym zV^W|GS^Iqb;`DMcf&vk+!&u&BFMM4+IuipH`A-Gp!sGvU2JckJirkQ`hx;YW_o#uP z521&JdTE5o{J1LRX2GbRhYPDH?U>d|jrp^$&;0L3IN$@Z@MHPd;d*~k4|oxt-+M}v zXxm78Zd0WYI;wf(%~-Jen3@kA$#C17z%?O(l#%|5iAJFz4dDfEu~qN>z+qSW4y_nE zB4i_NqXU0^Xks^SIa4_eua%omcTDXi$$FM0k%DKW-_RkBI(@w^GVfL3szk?j@=c$l zXbiOcZG0f4F`nm1hK=?t zj8aZAAH5xLWXO}p_}$;_|8TyrfYk?c94AP;|HNyt~+p~$;z}El7f|Fp@ha>*Z zvI5QE#k`E*EgQvWjm`U?HuV0e@r3@kAdmqF1oQ?4woapebU3=^F2nx; z{NA?J=GJ#@a$l?KIz~OuKEFT0Lvi>z^XuFarUA)5e;3B{iD4RDOq-ClGL;kWNDcIK zHN(K=Y)Iuo7KSbHDRdB&tR$c_5Bo-1@-1$n7{7oS- z700e@gh846hzidajZ*5|o&Qgm2Ue*9K)s8o8p{q_9vb1)6ldTKk-Sb0kBfp{=KVeV zm_LBu<>f=t}s_b6ah-i=X#HPe3pB|;h@^(_j;db(TPY+WG_$wRVy zh~e=ElllA2cxQtp#SLOKS3L36y)E`_Md$jy)v6PT?hlfY@IgHf#p{M2f*IGHH14!i zblG1FlP)2K4Lm4@1fR%%?0(8JpQVTRPEwAI3Iq1^vb#S+6D_ zj^JX=oNG0S|4))dIHiq5K7+wbEynKJv|50Fl*a|${}pGz;Ig^&gR04$-* z{262ITza4w+R0uTebot)(U}Bu66Y4f#O^hlrscp#cB*}Y-t?=mx-jtNsK18V664*N zdA2)GXEKba_@U$=Y6shB=m2|pP*B9wJT-3=j60WqcO?P)SU}-r`1Q67H~a8YrG-n4 zs{wHsYX2H?AB1tkD=y<2@^YwkW_YN|OCz95f;gb1D0c)VRqi~^DCk`4PBL+!Zk_X)dnngnA1w35ngr)?fBR zJu<(KhHEidno0fxz??tr{sVNLi1l;cf2Mw?G0IJqYU&ggDxMzejem)gIF+WEy^tiQ z9i@;UMM=~S_b;}_xEVQ9f(PIFb<-3Ks%;MJ>y=eHPw1!h?c!}#nrhMoG}nC#!=P-f zY>9$oHB8o%MMtvuTU)W`BavP`D%IHAh(hN4W(7}QYCQelG15=W`l+gklas4RBk3w- zgvc>kYo`wF8FCoY*gBDJ^NkNC9e<&z*E8*yTQX{?ToCtc_s;UjF8Vim0)j6v^ z3b@c#FY#K>FXN=BQSidF#tb&VYF3eQ?NlcU3|i1Akv6yWT_M#8X#1z=VX}6&t@`Nl z9+1k3-wd$2^mrCg#=QL8LiH!w`Vnz`bc|37U74^m%7sju{^Z^_bb-CvVOs)wu09@h zUL1-v_%M1CAXOJp&0G?7`y}dz{}gOe8dxQ_Twh)ob+3CqQQn@zANS7v^DPpeWE+v2 z40$=O?9q7E0Qy#qC7>RSLOV3J2;-w|a;RmgP0TP(lmPcc{sUnDO2-^zN~X3eZiIeq zyZ3_+3!}YomP-fZSsk7`=03f9)_C^$Ec;ZO$k>|n^|^jw{mC2k?9Ky8Ww+Gpa#^JQ zir`VZa}ONO$WwH3d~M!QQNI|syPPPLvX2aaJv#PS#-tnX&-JHCqvt7c`Z?0MQ?7&m zlM2E~JUE|I#QeXbB#RkA%UrTbr`H(hJ292=+DNR(5v2^w9dlpb;?; zE>aTWRUN{BMGLj*=kG-4(TiqJpRv>5*H(>0&PKz-to=TD*L0n zLsbJFNP1^z1otc&FT^|-Xk*#A@suT-ANy>_kbm?ZenK(}E&udwWAZXO4!1&_wI`p_ zoUPC-HJyJf>I{-9)^Pa?6*g{tvk%S`E|=3ViVXYq^WCtA`Q;&JLF9Oq#`aQYWM)+T zXcWpJL1{IA-3KJJ$#HDfFzfh+qQ+eiM=P2pMBuuWHm9C0nKEW2O^M*YtOW0$rAYbkSF*LXBP5qZK1NB-j8<_ zxP2elI^dg>y87ug90o~x9W{K}ZnFy5%6fQ{#AV3q<&6T}Vq z^>okbb41xcz)ma0FjS)3hmtFb-jl%houk;CBO77PbhK>Ai71tT;%sUW#FU~sUbHg&-7nfK`uVmgg^Y$9^4Ts;F0J3vYNeh+>ulao0 z1BHkF5Jh>%@aw9ENm-W%Z#p{7)V&WThmo&tS`M$#>UMBaTB5)1TpsjuQU?tk&|F(gvlAHOAgHSy;k<-c9)?DQzrO7 z0Vh3%tWfJC|CtSfiH7IrLT}~2eqGa{idxyp@4=(hA-D>=7s0AC+ z`fJX?&w@-xqiao;T-j&i8cld|gSC{d^#gltJEX95wBc&Mn}2Rq*oHUOU_P2*%n>D{ z#FJ5SdmqW^g&ig2zIO4WnmI6Bgd>TN3pX2B{jXg?gnmu~x9&Tvu_>=+8j>DSChSLc zK1T=_Qfe#)HhR(-CDjU@TnR1cf#&yX@<;|E+KB`42Fo>SW7 z8i-#QwvZV3KFl}_>lB|QA|R!9zGq#|>m^b`G+)NQf8javlAr(@o*uR?i)w9>_y-X5 zO?EG}c(o(+qq@@=f&D_IZIi0@;|Mg|ozG-I&uh%C7Z3P^gpFVE-=V6X6SFCf*Jk}3 za1ry|*Z;*3POG#h@i67ESX^bizo3f@)m+u-JD)ofFAH{|a?#6~wG-L*?}%_nV75!SQC9PCj2kY2xRAZ>_sDUX zMU;*uYy&u10qN8L8=kMa)-@gG!XGn{sLtLw6ZH%eaH?XWE)kKes~i?-tw5~-_|6r~ z(mwJ)+WT_DQj-*a_wx5rEsKxC`KJoc74j^w^^ipAh^Q!I^Z<64(2cZMBZjGl)wMEl zW?i9{4qcm|ne%$2j<#Q2JV*w<*C{WD(7f{VC@jpCIZt^(V(f_CZeKf#&4Du* zHJvD*o;)f}bu2huQ}=(EOpSb`l+ZIW59ux?X>i(k2S$l?au&6*x}hTH6P)C^yNXUV zTxk0)6dudv`c)~P*H&3c?Vf~KM)(pTcFs0_iT4%Q3%WVq2CkPpDI}fQ7EC!&)MP{U z(-$^Qde73Yd`5~QB}mTa@yn|h-o@YMJ+{e&NJloLfJ($-M|j@(^hc`P-=1%(rps60 zf~L=}HYT3Z(&6jGy1j*LaURTI8*M%qPMdpYUY*2wn0~@}D1Tz|e|x7ot5jca<;jmh z%NUzNWo$^ALb@?T_1sL=?9)V)R|1Thtq}|uy_2jCijuXQU0&C&9theIzgh4jj^1^p zs3MbgW7;amsR0^d>FIm_&j9_g&~%e-7_oCL5z!HGy_yv2UksU%JJR}%Tj}Q$>CbJL znia@}!apc8A1C1Gl8_TAF`jL~3O;APd%K&IRIr zj>zKhpHj}g@?u-fy<9nSih|N!cNkS=;|0Wz`)KmRPn+$^7^BWCUx7$aIn+&$J?B?q zrwO$g+|Cqw*kUlm5`vmlNWH~Zvh5od)@uMZmXT(!)~otfk*$=wo0kBip^KQJwSY9v z#)Sj<@T!a(HQsO%kdi7yGNDqcrTiBRkf_R$x@TS!pbIABFUkXwl;aQJku51*Z z*Fy@aq7Q&GMkIJ(;$dQJtqT_}2L(-CRT||HS+0_wt?d%6NEVe=Ufsp3{(^!uO+!m% zeNQ2{YTO5uu42Xhle1jhJBlvloHjpTc5)FJVMr_6=};_k?Qt=E7#<7H_J{+$Oc?xC zyE5uo(Cu9C?VCA%74_p3m@+{E!mMrOwVPofjG;H7k0@38&({LvpXx%W{dXMj#}caq z`Tuzi|G9AR|01+Ln9W;))kAKRIIdrPxKnDgb*6?+yffr|(^!G5L(i3R6-xHccC~gi zXC>AFBjxYM%7t(Jc0|vmnx!d>x^k)*-ppt&jr(bMn6u3#b()up%Zhbp7@C4$5sT9+ zTnPU{k#F%b@0KMPEL6v9=cT#*piT@Ur<^(Tnj2kBadgK-v)NyM85;%Zi;Yc0F8t4L zaWZteH2m|C4?O#==r?Dau6HUx|5C3ynBK*YN)F99z3LY)&hlSKPZd(8+(Z&J>C6v2 zH#5Dlwqc}&)sehx7~MLZ^%?U^feFH^YBril#d+;DLE)J)@z1Rw+>D?fJVwE|dYr8r zvAT}mS-&O1)RJh$B6;*+qmT2h+e5ESXgI!^NjpO#Ka>;P8>1_nULWRcTPakmN@>^g zY&QPV6ijV8S#V{k`G7p>Hvzb$c^BZ^G*5*L+C2*o%R0yVpfn`aW|nGJYol08@Y|-R#_Y_clhJhDXy_W;6$EFop!^F4Nz_kv7@FmvP%O`+0ZvRqV+_@eoqT=a_z07+?W?ZErWz7iV@# z^7i|Y$UFSiZNJRj#@Li4=X7P!P3#Z+CdMRWkUvm~|HABXpa+>r;FG*vX1!YEt|of1 zq20di{?J-No1HvnVs|Xd7L1ix7ckZ1)w_4zouEr1{<>IfLom)*$!yRq;2&|zz^HAU zUgud(AX@`Oc={MUHy$KE4?loZ?XZ1dQ||w1zr_@+Ubf_caT7p-F$Vz3i8KX3<%CK( z3+SnkR6J81suL7=6pY!7gT%^AO2-X=)NqJ7DE9zRiNOUG;m#lP1UMPyt;b(%@~E%b z@mtPN-Z3B@DY$OYUD-brLbLFfPYSh3nFVdZ>m2DH@4(QRWXA_r*1A7TI5lEKJi8Bq zlXP_Vd0Cey6Xa7Agx1rP5_}X>{TncX4+GZZh^AG6J^fC!BVjZ3dnKF9(j~!iQdww zT{vv8t>())LbgRsSH1qSaAEvkmbn=vcHr~EzfuMHwo=wLyD@X544lX7s3hd=1J_u! z)spdG9w7>zaG)B!D#u~RXnp?nh>u={QjjNgt2h(FY|HgRc>;kGp5@>G)vPCWZ5Y2{ z^QY}IqLQRzwTTy2!u|9&^PpO`_3cQGe#T9amnS|ygnuarm2&(S%kbG@pDbQ9curDvy>=#VZKGnPP1r@_c^_5(Tsw4|E=`d_!v6Zw`1X zGJ<3f0P4%N*@+dMyV_txf0!)4I(VO zxlIp3JLzTGMGCyYazWQLa?x`UzKmsN2Zb-whNFq{`Oi5Em@`l1f&3nP^83vB{|7?e ztLu~bQ(~pqMjm3*Ti@E*VTEk>Pc(fVCA&_=^rI|^LSBS!@A2Vf(w;$>1#j6Ao#L42 zSv9l-Zu}OcQw1zRKK?dq<0T}~l0Gd3-u=wI%e|odYn~;0Tjfq>V9em@bs@y*-JNqa znW=GiTf-JWl~@pO?e zLBssQnL-<6xSTM*9{9uY&|&)H^>1w;ZwZH_LhSi>rOh@zk z{og+T^tZ+SzhQ1IOxb8l3Yw@c zprmZrgK;j$#r3zS`??1dSiaf}`j1#+B&V1Lg#2?SA=&8i6ME+Hty+>6C0Ch~=L_u1 zXqVt?-fpFTS?*1&ua`yz1Q|I$4i{l~W;sb)tC;ZdRvbp#+6t1fG*#iYNXbqe-AC3A$O zEnZ24xF^_Sy)2U#aqSJ#}-w1lr&#iUNLz*)_v)@ ztS7qd0l_9#ukQf`nGn$uccIsicTf)IHIBOmQ$4W15uTriHogOgTx#|ModV zre-RLnHqYo65iXVw&S-`!rkif6(K2s>n06bffPy2i#hU&`$b6T7^6R%hoU@B$B_%< zz`s-mT6|vubjyPs-thi3slHC!0oK?ul89UQ_y;AP=PWlp@kHCNFPvxBzrc(5J^AIu z;F-L;xi--`t0dD7RaOq!9RQ zHBpo7{6Tm}W1`xC8KCqtRr9$Y(v%bRf8)Q;F=YxBQ+jwHvecIG_;lu>9-`Zba_j3& z(g}gI=+>kxJUaGVBwKZtnsQ-zFaJ2R!sOM8?6qjnupRIZv*U|GwwOT;_%8bjBKK!} z0Ak|QMvpG6hS+W`i}j7($S0o`p3aTFZlR3khY~t9g|bb;mnDo}Jb*}pk=EOoKwfEA zX%B&lzk1r52VJ!^j;Ou$MI?BjL<(l};~CEH8SKoy%~)tdkzYQjK2hx5zUOc8XWIAQ z!vBAQ^gmhppQSP7Ngc_;)&~NrPcZ_xTchf8DQZ*CFry!>NmXo8%QoPJN{25PE6E_C zL=A`jXz)HVA2w~QR+8_h$Gfh3;jL5zGap)Wk~7N3toi0#RUI!Nse$!4ERbA(p*+*V zF8Qb}=+yiwxxgbdvgTh2mGQQw=*$H$p8R9Lww>g&s6nvhy3fFA`}1DY(^le{T_IA8 z8VP;tuSEmJ%7lz%(sGy+PvAuUpZNc$0l(GvKW+F=iOp=^Q-s#78VvlaHIU7a#9*tz z448Bl+YMS3w_?lfgG{d%l3M9(A7QGq;O3@#_c&jiHS;W-tPfe-_V~xP`n^8IHG8+yM{oCiB&}&+n=Wd_- z6q72y}~!|gIphKQ-j3tF0O+VMbQLc{8linALM)?>~wnV8!tx>|2L;S5ny(3I?p zA2xrV<~%$1;WiFzH%Tb6q;4*=iaM_3_oTu0Fw&ZugfcqGs6JdNx_XocRA{@u-(jFR zx5Pn^W3bOB2t6zH73M`*0O>$Yo)lkz1=BVGc6m=J0lb%t>Mgl>qEyFJ^b=--AO!v= zk!p+ZX`LwE6YEuEj@Y1a$iTp^v;(gy1@)_g^r4U9d_yx)B0jMnrkR$0f%MNsZjv8V za9SxhV-mLox(FDN^5<8t|cr-!MoSC~to$Q^% zi;pGWCra&Ha@fuytP!DkqJajqDc<1OHN6H}sV^Onu*; z68_bu@rY+Rx@av!G$lD`4s>>W3TseZ4a*h_*pe}p?^co?E89|&NFC8h2=J@l+wm=R zP67vW_z?*q&eJhD4o@J)!uLN6+7NDyDa<4)dESeVO5+&Z^G&ayfpZE z@~Q--Bp~cOkbPrGUpZE$0bn*M{T4W8hzH3`^LlTs|2~k+QY#Ze2Xv~~;MPrGcdlp( zlu=|c{Z0!%Rp03l)f5o2@Lkk(#sYuZ5vw>(fSUc&!1ZFa{4G4h9W9ECH`Y&d!->9H zHW2-QpIa`g2K`|`P=e~a-0F?w!CR4jE*fw&-lE7!ev*2|;27;v5+aNh#iFSd;RXE# zH2}`jGrhI1Oq7n<5^v5ph*p)*9~0~y+^={yJ&`83~h zOiE-=pj@YA?=LZXt|5Y68&9ez%I+@3(^kNUsas56&rHioImE1bn7)!3$MQi6mv%i1 z*u4r~rQ$PSjQC4ZQwHY1$Y1wzgif3<&NupAxPrFk$VMZhd?nQ&8d&*RcTLt^YbK|p zk|eXu)Ue(~v-Ajf3t*aP)-OwfdI#a)7At(WcdaPeV{mz7z1^-&l9Z5_-k+^Xvqm{J zX7va%;JjChgISz<@{`PbRaBnorw)blAlrN+TY<6=29Q=|IM^NjO}se~zixKQOQ-?~ z1v~Z$3-EKNuQ-+$-_h_CO--~8AL2K|^4K%mf0B(;0s8>v8%SsNmnCr58&ZD2ep0I;#b6l2o zlHWK6@Yi=b#gr(8O39(128PS`(w8ZUO0UDx*ZYIa>sQ`B0KCn)zqCLfPAi0zu0N+` z_5-6BiM;PeI$KZR<~kw|eO`Q2%z(pxYK*mc?{c0n0dc~~jVD_wm~9^WnW9DsGM}l0 z!PepfLx*Gv7ZGS>(~^)&n=^Veg_*t@u&aIN8HhLbVX_wzrHp)ERz9}?UMb7Abd?|W z0von1+`CIm=$KS(l~cg4)yq`@pkli(qi=oote@ACcd*;t1It3o6d4m)#4?up`t*p@$I@p5;3ymt)L3w!I3Vj%;H*h;^M=r!+tRzLYEVYD^$3* z;ki57Ug-m5j7oMrS(86_?+*sotnD>mxvqh_VWNDDvbAaGv+E+VeOm8gE>8BJOJFw{ z`3lx|s1}a}&H)Kp^`IQ;4(LGGj^rr01^Luq{ZQ5Ys=E7!V_R#3^GjPdQCF5sDL4?V-F024g(hBoo}OW4Zl4c4u<%U zD(k617o$F-FR8?dOssWs1t2c|WOWA=d=Gv>0(Q2=90i_~{tT|7Gy;d){AvmULe?9w z0_mD|OQ806T@2emWQg=~&`gWAMs~`f8P`WXt>^2by|gbSt2{IZ``Uznf?X zi^GHI#_AQtXyt0?uK{G@V(QBLfGv)@HdRlg`Udbu^eK?*H8 z*b1PnR;H9BtYJyxx8dA=iY>;)=XTbcjR!U8#J{^+O#rG`>J-T*JxLvng<9a(m_0r1zB)xD)=Zqh!&jm7*m^yp?DCxW? zlb!?!`9;1^aNzBU{UZovi1E57p{z!!v8$TBtsI`fW4VgiO8a>1qu=DSC=w+FLr@X} zj!k}HPRQCy0ktQ0UcRfD1Sia7cxeWdx2&#Psx3c}x~=??Z9!o-o|#h?Zk#m1ox$HM zq|lB%3rGa*^O0`3#=u(tLe8eZOt;so56Ynp5A#%PtSQkveFF>vTA(ysZneMBnm4GH zeAkT3>gBI{Y+CKV7egGPKFB=R7+dzFi+f~g-N{P4yD9PV`>7~{cMaO&hKCA#+m74FXmsCeOE|+ z3XCEBfwn56cXyRm5Xd-VJ8tpAZ@pyY^!86=Qo&)#cOWw!1(%op)N6;vZ?!~p9!2Ea zLTSOCwQA$agFSX`+BbZ)3w%|)Fve2mD5<}S>Qr0;h`Vz~vI}M3G?_PQ*NnTqyD+ra zG2~V{kQXaA?){fwgAD2{Tn2qR(<;$dxC(sOR2YEQswg$*BH$au*pAD-x+Tb!@x2Mk zQF0mh(g!es7{Vy33v0hLI_97x6v^KhXbH);a)@I z)9Sl(XF8G>=-j`%?0R9ja;^Y!1Hg%rXie*SurK&BVQ2~3#DGna^S$cr*um%fm$Kn7N{x5HmcEK641As#Q*LL*Hp~`->;Qm z>`z!teUAp~8JAdz@>f-w=by#7?5H^c#sN}FLsP?8HIbQq%x8zMA~TlNOTh6}vh`~0 zgK*-abh6kl9%u6MxlOW>{g;qL>-qjweaAi~glrhmK;dHv5wY-Wv-sBgGibF0oB_F| zIydp^8*AP1DNBAzf(t&)>8aHZs zD9gGXBf~dvT9`lc^~DCR1TDsQmwjg@s9`0sv~5-jMfF54%$E`9CHVw%<%D zMn7ac2}KUmI0Z4AJ5AsE?GbvHLQ+j3QR6pye7HTA7wUZzvXASd5BsRAaSI5oCM7k+ zNavQj{a9vux91x>H_CYsKFnEHodsro9?%8ttK2+JZu@Z5<@Te)kaz(v||i> z>A}<&R=|vu3}spS?%wh3!ZlL(uv@+PvjUQvA>`S|bF`PiZdU{9tu9 zjmG{y)Yl#l1xL>;{jN`={M?0Ais5V1{RlS|7^2&G(^m}K=``}$|9Ko8EazibR4vyg zTXL`D?h#-nyLDUf=pLE7WfTW%3sIsqDN0ZW6y$%UMJeywtLE&zd(N46$#CIE29T2s z;oVb_Y0`G1rU?11)H}Y7E*PDih!B<$ar3mc9?Y^ToNHJNdHZnhIcQSewX?tLt6_ck zsT*mHWlT5{-CM5X;C5q{&m_}dxW%u+qcon_4-cNZ9v&021l8nK~Bu*E<7UUv^?%gR0G^CQz$B})i${- zIPBt!0o?RuF$byG`4}(HA={TY4e)mI53HH}WYN3o^rnZs64yZI_hf3{kV8pJJDHs^ z(#l&Sf$o2189C+MBxU#$O4{}W*E?J_m0IHQ5JibdKb)&q-|iDazN@N77r)O%IblVs` zUHkC^%(ylqJ2De$PzR}8c#xv882Px}c|hS|UWJR>Py?Kc(mKDRq>VG1B&2)HLok$Do<6+~53=u=BBox= zi_fYw`hjk4Vx=vM!xWv#cDE^s3r9Hb8;xPzR{Znp@P9TtIo_!$-~P+0)voK~&DURq zZq=5xcRa&|Mfkor?pKs*Xu$T)Sk=Ulek5Ytd{r%9Qk1hEs6F@Hy9e>&TQ^UGpozL* zI=D#IZ1IctQGtMR4!VLzKHv@dDOhuyc4QhVZgX*P(XF3%UA@7rqRFd*jvJw+Q+K10 zhslhfEHV8xz93o@1`yhKZb*je@Ze?U`cT+=7C!kUC+V9ND1_wtyvS>|u|*f%#h~8I zDEq+{!js+Wf=d;Uc<+mGds&T=@mA>*Tx=;c9 ztjp1{A!X+WUGNWcNc_zqUi#BNy<_5Wl~*=gx6{XMRbO9DuFEOLg3b@H#bKQpv)ri8 zeqBw(HNL+LufAGe-Sj39hva{V@xLEH!mP(aBOP9et$cOkJY0d>d2ZY#Z2{-2EHaeI z-etAm&ySmdf^M0S7y6Y9nl8k*v~gKJ0nLG6(tj<43f@bQHs$O)9=&Ac*Nv=@^@jF1H8mY<)C#q4<}YQXNsU&UkN!}bO zrjE6yW}qRdxQV&~DtT%R_Y2X=zN(eSoqOH>RDG^Q@}F3zkjGU@ijr4b95%9bM{1*x zog~Z1;2jMyK{-qIV>jV^;fDLDSW%=9OqS$ww4m*af7&>?^<6({^x`4a&AFEgDc2s{Q^)E;^+Yc+ zE5{75NDmQ^@ zqnoN<{oGer%nDp9&Ep_E$r9o60%Zwhj5&$C3q2=_$4mK=c$G5jgPuRjSbc0QZmAyV zTWWL>W82bAo z#5ZlXSH_c<5TvIyDb#|O$qbaG5r(C|>-;r6>v}xTV-0A2Bo~C%_9%Ewl?;eL9QeHr z@^%`)&Z}w&E+jMCob8k9K>E!J%xeYBoFzU^yKF^@)9wwvcYZ`? zW2R|R>XvxcrhJ5{>mLCRKjA&V?(9c9m)cwM6C{TAvx}<7?0~()W^RN)9;;hcD>)5C zgBSpJG71Vy#~z)hA&z>&#VuYtTXU2y#>46G79|x_}->@$GZ zJfo5GF@^0ffV_kV@53cS_X7aVhi^#VqW-|^hlxam4%wUdUOplQesw5J*hmdnG5Ues zSR-#2PRnjS|HBVDe|5X*yz#S(5w^EWEUzWvTv4ioNS@rP;jB$Q^;D6*b-HxMK1-qV zyw3?s`Fe|e1~{HKLn4x=!$zaRa?h3f#%rTcoJK`?iF|IkAIE%4hD0{8CFLJ9Mx%5s zOl$c()adgig6Fbq>y?fY{j?z6n1Fg`1)o9i!nl-->R{Rz!Od_`4T3aF13Rj^J=Jwk z$&hw`!A^U91!#cZ$Z~f-o2sz(H}#N;LG->9L9=YgqsrQihR^1sojfsOknwZp+?F@r z_KwdkpfNE%6{bwe4^1Bt02VTjGi2p)(OeTwt!H~!mfG^3Q_WR%`e%So-4ojj%bk~q znrEfvSlj)guHg9WYWF%tGm>}>BkL3%^KJw|&(J38} zt+g;NtSE^nu~ATJsU)C0v?svf~wbe z`>ix=o)=&E^XChn$*0I~wI@rj(rVWI6iIe6xR+t5!E~^oUFL{iClUF=R^~>AT9Kit zVp=flkSa5~lI1!DyT`r?$iHq;795nVP^YQN%9s~u2g|<7hkfah>S03k=2Q7}S!uZ~ z=?uUI@t>$^T}f&)kD2g>a65<#%-I5tsc3?Vfdv7oYoYCh;|05{tc)vVGZ}i!b7@__ zh{x%)Rgaa)Mtzt{A@4}-^88QgKhi0*oQf~6QXd$C+}H28&YeX)sNw(HsIw0`DUR>( zK7cSDwE3bfr-yQ?d93Ybd3Gy0ulPwp4$FQiP=_)wh8Zwo#A8zMaPjO*5pylguxTsw zQ0fUB2C%P)?oFS$7JABNakc23d5yA5P)>0+=PqHSY{Jb$e9WA~1I~J~)##rQR6(KaH4ROb1;0@i9QCmO9YEH>b=2Y`F?j>f zh_%&JPR6~K!@ryHEbSAeynNwa@{=<<61IL`4#G}I<8=(J5r?-F4sLt+Dw%|ThHuy| zD4|18iZjnZh)-*G!kUml7-+T>_vG8VedRvJ{h?kD!R=Ol_`Qe8-p)ArhKE=|1&c%1 zt8^cCE-^u zLaRm8hjEsxU`FUztE&{QUf%%n`8NK@7*UPN-dG=9=g4FN_oxND@MKBTGS~31FObG_vj(1XE%ALZ8L5RFX7>Z)X9>X8zEn%FrNc9X3!d0 zD}N!eV8y4xGe2b{V5$!KsyS+eMc%=$tXIkK>G@n&*@mF)LM4w;l@g(aY_oGA~cpMNAKWkUyj z1|;Ps8NWdQ(6S~S|7iENC4V`+60PhS;rr^15OQJO>|yS&QEq;_k%abG*sP_!=-|DN zK4l_F$w%4}Ws;IuU5$gmg#oNOhYw7A-&WO=t zV;GoOjk^pMG&x&&CHBu>xE2ZA4Ng6&u2HI!?OhAaq|BS#os;)BHwaoiQ)gX0PJBHG zRM1D{!JRE6XfIKMR7?GsBh}V8*vlx>>MhzI%bEF`F|n}$h=8<@29U)>F|0^PluPmD zyiikBw0@YKD4CbY_o_K!o>x#5%h8T%*OD3QxF$cXAss1HKrJFvFwYVfI123s4P`-Z zv%&haFuL;L72ilBAxb~W;EZj3Z&n76W)JRWb!_08&Kd|Farm`^m)@1m@VVZyr0w8m zR#+q`#_?d;AZVNm`ba|ZoE1gRi8d~{<9QGR-l&cv6T2i?Dc2sF^Cz)Z5AAa!hf;EU z&K4**byC?=gs#?$d;(_!cG8!G>NSlTI&Q=IZ*?s4)|l48&$VfngrMIQM-#}4fpnfPnlv5SunYA`M+9P&l-2eFA?N*y2oe;V5+VWH<-Yz^K3v{00 zIhf!0L~|)G2AsMAN`rfO*puI9^v&^6iX959Qb}vm?(M<^-o!^?%|9hGdJDG0Y#Aq6UkJy#>>*+4(>ICYp~iLb zA-?UnbyrCUpWLMu^qR_(zMsox^qT;~y zG{w-cLrY7`P?pW0*V7b7B5_vqrZgI&ZeAC&992m_M1tFq?YOXwxdtKCT(mw08sqo% z;~r~&-5L+1BF{2(3r!z5%U$?-4QPUs8?1Xb43AboHix9(v_pF$Dy-1B1OI_mB3e@L zRcVE-#<{5?vQWL4x?|24zOLb9{j@H>j2A*M0Ct6_%Xd7N>{J(;MmGo8*3CH=+m0;mWkWyr7vXrRCkrEP9Kr% z#G>2RZEddI27V9}3z|-!rwoZ19+?OmN4~$T|dH= zFFtc}-c3YuL%#2;OsMnu&moH4)}M7S7azoDZmfq2-8i&6xWAq&D)n_^nrqKfl`7g& zrmk&$>@2L{dK7Fc`1#BbX|PQw8}mc4AS;tL$J(U6l2*OOE8TuK#fLs8MiVZLu#8vP z5BvHZ+xmltuf)@ayvx2Sq^2}5qx1M)Tx=ALnT)lP{5V2Fyet#|Qs)W5yyh$#I)bXA0RcJys$bE|H<)8ol;M zW9w2JYVK{+XEA3!H2@|G9|yv|u*l-;xCX}*XaUQM^3-@L*J)W|vgeD2Zs$d33)RQT z8@p5_6!uxCsk;vO>swcBQF=@YO~ADd@e9rca2~^A(5-A^B#=585*D=|vv3*JX zEK{VcC-ZKid6MGoMeAvtgAwIY8}X>WyovHUx+L#8PxkM=QuGUXMMz6)OAxE?p4`Iu%!-XER$Nj z!{igjr_jP`_y5nQv=qqiOP$`cq}Qbch~+ka=H~ghj*}^YnQc7^7-^`aR+3doU1Z6I zb6NRkUUx)}kA4&lCVfq4*lzqKz<_=lT9wP)t=tIQvahr(E!ii{d+MCN_KVQ9)9`de zy&pn4GcLe3+0I_brMfr&qkyCKFpJCzy~C*kQFzNA>7NS(LfCp{9xb}M8fVry-_H4$ z#qr!&sF}&WEOe!`lvyL=GaP*KWLbVgvXt}{MwwuP%9L2$DzxF878!k&7+M>7zg&rl zV5=0Bzv>!1jnH9C@V0nyab}4(c`UFpY*HSA#qsm?%8D*?E8GnB<)>u!x8k7_zSc~v z)lr}Rrzp$eB!UC_k2mQvuf~a9SLGSlS+G&EQPY9IxNcI5BRbxCJ)PiebCpytQ4ZlR z8D?JY^sw+sJ4_DJ*j7D2O*LV%RfIqo!_24eGCAp8*5`cQ7hWKqk*Iz*dA|gHM{iC z0(YsXXMUBno~#o>w|a6U?=APKPul{GoU8d$BF{073iJ7nK}uHB4jfT)tTpA}bB+3IX9T_)iIjS=2|kI$@a@I~L0AiaF=tg90K zH1dL>{R5up%Q-RXMc?R5&ZETjglxS{Ns&XeW%GwEetKvRHn!idSg0d7vHA|HetxRY z8-R)0>=8`YhmZYyZ-r48f+5};IL1x+5Hckiu0`k+SYRIcyS^rUbkP3EZ&JTPuI_V3 zJ*N9!Rzs%Z^N$*d$4sxOr4A3y1Q&1Ih5IuRix>7CN#$yLcN|bY?hi_$3q0|W#(OcZ zP5~WeEMtdNdr6yV`hMgHpI$M1NvmA}2JEIx>m4JuP(DbL8vIXmc`@RYs5(+u(NLK2 z(zx`e`aULJ@#|OkH5W4@D%<_DN0S8I?g@C%M(&3~`GmCa?h5vlEP#EvuY z`4B{EO8$s6Z{`bVYIMo_bydbqp3d5(I@G=Jo)8Vr`9g+1w4w%43rI~@8|SM=O(ZzX z&W2A>-%1O{rZet!zPWWeTWoTq)zDw4?yFD=(;Zy*;C)dJ6NK^%Dbc7vV-a_EcoYke z6Lq!f7(%Dhnfh6121tM8BAR;u{;KlopF*NP`hPDf4m7|WJVUGM~dezSG$K+*=qY64_7WR#YS#} zgYTB53Fwo`g@%gN1#KLjDxv;QMx=<-A#Cl&rfoxfLXx;2d#H3HT5(;)f zGSpcj(PT0$Dn@&No0z!UzmXK*_KG?qA?NAb;61=oTDT)8e1P+`K1AFtHcgj~^d3x4 z&tSnow5*PT)(ikwf!02V@ef|E-BKS=6>1hTA|gHy-rRhvxqGMlGv%k6**ZPcU|N~z z?IX;Y_d-UfL;V9?JK`$ zmK(fmMs9j+Pj`vcJEm%3FDBR0?1PvsXcrgqhX6`Uf$}elA;f~#bZEY`p93t@vN|J& z^?-=FX(zV+JswXt)9O-}UQ=FA4vJ}t?1i-y`E#cx_C9Q)`2;_;!={p%#5D>;(CHYR z&KNG&0vBoZm_=*^LBos&%0@%^YSiMzKV(b0RKNuMKqI_C7i~>Oc^2mif;%>$S1hXk{CcpfJlzNR8YuQcHh|y zX)T$@pM4#@-or|Q`Q4fx>RLUOu<(bHk99MemEVRAX2TQ{-TGpaD!SpftJ(HaZDZQ! z<#jBTBd<+hdT{39$9PMahnh;T+`AUuulJv9Or;Q_>awvHWuK+u8xM)hBS(|9a^Eq2 zl-=+ctEOcT_uBxjdj`Ie&tA=n+mSCzdJizfgXZ4`J2%4I|17EAZDdb>7eE#~YCt>e z^b9C_s}DC{&eceTruAxz#M^;ZKA-DAQj_7RYr$mks&jYO5Gx> zIT_f#_0cW&+LW6*rh(y((B84}6u)=A-x3kcaJO6FsB2 z5xL7H~ixFC(Rl`r^HEetoc|E(h6#BQ-8;HHB6CyPub-FzfbmSOId>=u=!H@7?xFuC}gaDmW2NK&7JR0RF(~l_U4~r=t2ESZ?xK*JP@#M>VT8;d?Nk`+Unn2aWv6g1& z@Nj>cstunyZhWRbLoy1D`zTxj8(lH1n9cyb2SI9O`mY>lv6-in)wP@%Nt!sKGI12S zYb$S~50s?^%&z-ot4nJfaDC1`*8ga0^6A>g4L0$1pS z3b5!~jPWn`?4HtQ9rhvorYOA*W@P}C#MGiBrl;mFLfILr zCqOV!@^)Pu)tQ1)Hbb{M{O@1=Bm#J~<#BGAfPPdp;lLoO$zCWlHmHY&? zU$SWk3)Otj0|+e_oA8LRjbQcbRt23@V(PqVE9&hxTo)@qb86QY*k6z*bp@@f6f5aM z4O};rX%PU|>RFO0qQa^sGxN8G?N=?CWFTym0^o4E!y-rG@F+5G0>1ux7uqd=&k|Y^bprApWJZZ#Pq4y^9g8RdBsD+qN8)5I|0iT z&-;!zbD%g$ImMsKp&<{H?-9f0v%}&a=AEgia7ou3Wi8X};Q7m;+NI}mkqNyCNtFt* z{dOfRW7qCc!0f#D3w=1ilxdr8=bTcQr)a1ce;a0mW9<^YtF%Ua9!d#`PJEswBzROT~V+~FEjsR(J#138hcTK8R5 zT!65Xc9PbMPsdd=rk4v0kKZ#YHR8?m1E`*B9NxNRxvgQ_Uo-g!unrauz@ZMVjfj@Uu#tK>t1;b7lc_A%Jmm&5thm ztLDZ`PD8_kbD5qaR}Q3X7N(LV)fXf=ibMN91`Oue#Ha%r*wfA)aBLzJ2))M$6t%Zc z+f}=7ObF`tkyvoA=tX>58Oclk<4J92yTyD)-)-0m04lwD{OeTGuN)2S_bm$GCx8iB z+Dgt(x_IMFBJN?Xx1jet4_If8)zfn+Nf28T-K60+sG%lHttYQ7vnBF{``_>>%vqFb z5}dSNWjl$Pw0PS+{Z+1_vC+@5q`>TBx+|Dc!!l*89 zBx-4z#p+0jIiuA1lx#H<)?9w-`#r}zi|#>u{Az#!qNYbS1m9Ye2%vp0jV&C|0P@$=UX)JQ@x{Jrw(AiS+T1}e(w99wUmphj;wh~>F;9b3|L zH2Fs6TV%6Wgh%^%butrnCVVW1WA4`|G+?KERiH>4T5i~AD9aBn->_TpxY3QEB8MpX`tQm21R;Efm? zd}K*?%`SBwg6*;O5ijjjX9;aua0EOW7(UdXKW#d=$MA`lBX2DJRS8Ou#bpNA4)1F3 zI?KJoNIaSR@@OpxKRR4e6K0W_%CjVY+E|VzKpIP!i)ey~395uD`Oecl;pGSNJAZOr zq}(^i9n}A-fz>q7mJn@0zJo!}J>ZL5qVpxF)xT^?BRFBeDwWf0c9WsjleupNr-j6F zuDHKcLyx6Pg95}v#an$ITylAQ#-}$Lyca`{sZT&@sDp;vi5RhTO7xU4Q%&9Cuu?wOI!Kylpd5vm)gywImc|<(u=uA!b)#j_>K&t2J7?2Et)X8H z(SIft#uO?OcBOZX>)jqYAYa=R)~|d|_mRT%_4Vht0z4LXe5bYRaPpc$PC%gMaxX*` z&G$x9@I5I=i4cwYlw(~A^>Np7@)B>ToE9Pjk(TyrBu5namNyMUISqDNv)(kk@R1r zV}ZljKOm(W&Fo&7gM^#p(ojy5G0kP-3@y_W_?7nj@Apt%K!ZEGG9h}~JZB^bMmSP9 zI6ssAFF7aimVYk~4Dig%@MMb)8uI%IpCoxPDc%kEB`_D*y z7lamX0l~rl06hLPhHT~Gvd$hJ8R40k;Lk?3{UQ(9FP1N0nbd>X4zqy{A%Wdv(hEmc z#Afh|!a_(-ddF+rW$OK6;5)H8Scsi;zGQz({31KS!3CX?=^vzRupJ&ij-)xl{QPRQ z8^{H*B|YPtJC`1|$KMbqlYdFeZPP0F^7J5Ax!yq?+pyLkYyy`1-L5w2)GH9h`&omr z4ThxH-mFFhvY8FC*oglCR0$V}F7J)IW zX2sFl817>=;j1LOXYqGg`?o>78ZMsG$xgr}vg$aEW(hq6P(wPjaK5tHZoWx}BZK~1 zZ~QZdhIx2+W@ct)W*h~!OJ!!-90vGKk!&k0Z6N1QNMBqxXHiLF>)+$R$0qYbB(?z=YW$9?ZDNcXt*OTGlTC1?0nJoQCiuWGiW8yJfa; zF@@YgPQ?K7DBU)CCF;Qe<0sth$*lXg7@ir8q3R8Yjx+xNk)9dlo*9{$nVF80Er&o0)Lmtm(j#UZInuiYz{=+QjjzdJ(m5#ZQ_|Q_QGgyIVvx9 zo?VD=k8BZo2nNJ?W#AXWpJ8IHre;_*h^!}&{{Sb^kUE!G6Psc^iBwZYDuh|zbj)%3_twMoHNTjGcz+YV<7g*#3LDZ$d)$Y zVs|EeyPZgkcY~vDu#Og6W?GYt?3Sj|dQQ8w+W8|r&KP3@#H3G20_f_}?%jl)aR=<- ziUvrrC&UNqjx2A|HtucN6<)2T#;?%eKTAg1&Q32acn_qPCpOsa(h!Y#JMHXEboB*m zb%J4ifLJARVyAMfQw~dNv)2pRe4^U|GI9@DyNnQoT=G1jUz-rMtOe^MEG#FeH*lP!=mOvb&Ua z9LPzP35{AqPX-@u*GV(jU55bnF{Osf1n$wmk5;^5w#hd_0q3wV~Yrt~JY{W|JfMkbFp&?j^p=j5DaDF9hHrsCnw%b4O-d5XX zwp(SkS(#;?3@+5POugA!St0EMnlE1LAqw@nqjECTczBnxJ>X#ZC>^pN8*J0N1bZNN zbY#zwW8E(;O&eJKT6tu`1*}E*x_IYN?{M{t?n?+o69v0!WOOB$ZH4})ln1sgytza7kXl$ul+(!af zL8%2}E2L8SBKaxg2is}f>*pIA1RoHDed#}Ee%Sddt%mJwR1oE;z66c97T&I{p_U{i z&ITyECxi>QF04Ac`jBjc+|Ivlm*aimW)1=o@@n@QJUH;(BLgiQX;_o?C-p4_q9j2I z(pzn}jkeo)+im_fZJBs&;ot6^<>f>*QD zme_NvcJ5KPBBX?hCB|qR8^e#>aW3ODh{8Y!{aI`_lJ8OITQHw>y0K(?8+Y3Y$%SNl zXD*y9RjeZLBPsQ>HTl3j!UVx}Huhr{*fzklBAodGN87t?+xSqewf21iOqgePQd@U` zN=Z95L#eDCPt}Uk2pvxQbv8LQY14O);0D`mwp(rfLEzbKmRn&@s>O>40`H2;2!a)j ztgy-1bsTsQmCo(3`?95I7i*R0Zr(5?GGb| zl`h^|JeH&FylxpZwJT#3YaRlu2tdwWlU-U^exZ%olUHn=aGAPrErDka-8#KpgeuL_ z8rwh%yA!ExkV5)TxyK$H>m87BN~>3;@zohlV%fT;j+n?pV=gS?*S`q z>}V(0>1jWg;X{(~`2@zuA+o3z4{)T7n%#P{FB1rlw)v%V4oKNY9#W2@KdR7#RuO;+JB!okE%r+Q^)CSoR~{2^6p;e79^Q^);&-4($6tplmxx z<#i(IFU6$GNO6#hg^@PZy|uDIG>NxQWtLfC=J4A`sCJ*kZduj!K+b%QEGjqHjggrt z6d%6^jfX*QRgSXk|cYzDJ>J#8kZbSlJSlnD* z#$RE0lZD@9*&%5lcWWD+m}VD9W3(&PvdeoKndE1?GYh?>0>@Ga%K`=41_`pnVR*3E5e`5^OJa2#iD9@ddG z$#*Y&IzeHgpRT*W4P$<0^Q+$&@8l@WsVjbc`f5CvdMzh5iMpnf#Y{xEpnR%#(RJ3 zZCm`1pL-xBK3$HjM(}kh!KuB5y(X?U^2epbvEPb>>o?Hz4(+v^GB3eV-Ot-Ne= zrr*d}G(#2db-t&)EzabM_)Gk?^po(6e6jf>^8WxX4gOsZFZ^8#2~U>)03|+0&8uSW zdPolA?it+hY>U+_S9T8DSSQ6krXxs%+q-62TV41L*1cX9Gg~Bgwc#lgZM@+8BJqGU zlua?ri4M1zW4YtkYK{BAaCOV!S@P`fWL~(lV-^=)2D}Z};2^ZRb;3n`F+CS%umt;U zvLm~qDWu(Gbq=OF<-4#m86C)mpwpYxD-N6KY)5Mg6}s63vx6DC2$6gfbmOyV@D(k+aIrn%jCo;b$rj9DTVi9>Pt#-B zBZPgW8#nXRbyL0$tkN7BpW*Sv)(kk(6TPpoRPBQ_EimwgI&kQpf)rUh(ml$-v?tuX z+je6*Tf4M(m>U;;-#u4sMWhDvdYIxw*(Q3t@jsix$^IDf^T);Kh!fPu@H`G@ zrt*(3Twi#2v)%)!5)u*?78V>lUL)Q|+s7c_yncB2{s-0bhl}0f^*-=kxaGW zZ+zboRN|!H*YfJ3-I+4mriaH2PP%a!zpRFtaHS61tc=;&6b#Dgx01Rd?YX|q!PRO;w={pI8-tloF|xT3Bk?ShnV3);nfQ7Kd?9&nU$t(0G)y zr^=3@T_e$m;!4&Q9yc{5z@UnQ!80qBxU+C6c=%4JxUpcH)jFsV=GgxLDz~mD zqDCpV=z&%R7o*hX0N&s(Tq}rS2r|G>qiw+?;$1S97!;O(#I+B18=c3Qa1kmfc3_wWa0CntvEWNq?im#wY9xjVvxa7?1|LH(VpEg3u?QBezAA8|AHipF z>C$R2BuRFTPYkLRh0x%LRgNjLIyhzP@YGU5*IGSGm}CRSB8Uq+ig80O+%f91!GLx{ z+aiQymjtb=e86KMxDBAx4uUx&h!t4j?k6NFObngMaV$d%x|-q)u(Pr>+;5m<7jWJ#@b?ishM4x&<;%YjfUVIQ?Yjer#vM3g*HtM(yP5o*kw7+b17vS1 z(?!gPRb_p!@F~dYjO||>Ob9Kea>O8Ev`&LLE(Y=zvHV397l#!IvBlJ);Z;kUH7NkS z@iJ2&V^WhS;dzb}*6No1M1o@Y^A zzNLt6sEAbimk-166n2`z;(KMfQY%uz*1r#y!Iy|pq5-YTO+jGpWlENSN{c?FsOfs< zTQfQvVUycUZTp;T!F?E)EN43aHyPlFmvD?jl)IW4jl&lmZH*zsS$c{1bPiaN&hXg? zgj#!;A${8gMO;}|>SjGTHT4P&&@@6YF%(Opof3e|2p)~W9v>b>#5rl;giuuh$as9pc$uwK zWp>lZ&p9fnQb5AETuLP##I9BcCSt+?{gm58>5EWEU8z{#6Jl?I5lJ4&5?c^ukxHjgsNkyUj$=GFr6&mgkD|yIfRjF@Z_9xPuP}paT6g>XgpjZwOX&-G^EA0KVvS3 zLm5aXAMQD!wxah<&R8g?XbVY(7R06Z7)=3F5!IL>2=g&IGg$BAS%8Z<*LoXl^++f#x@k8+GS2~;oP&Lakr z>Y^6rW<$$~Nh)2j66z+2*&ioMgQ8f99nApGa)^nw{{T@-2a)gU1CXxO+(L!N1X8mV zxD}S@nXmCW6if4Huk3eA9v9vyrj+k5+tpiR>s@F4! z9ZI(fK$;Q=7F{|93}f~H3yNWi%GTq)!rWYGdBzMC_zXJBg_=l&Y6jK;5Ja&hoLoGC zPf;|(%(_ZA4MgAZE|CvuTAF$}xRFQ{cM8ZywRhrir7^^d%6XNnh92eIHRx1fr?EGi zESLsYiX-W;Vrua$G97$C?UIqIm0YKWpJZ$VU2!WG4S%eI&+_?_es?-^F;v%(d<-dXl3L%UVz`BU_jWXb{j=GGb3oZ2nyfg>*5ln8% z#BQPN>M{^Cv`f87*&R$m!j3TNTvup#gW(lk5R842x?HdftV0te-;SaBA>7;;&aKNe zHwZ19Vs0exQN*yOcHF-q)OL1+t`*`CVLTIeX#{8|8D8Lc*t;CX3RyA3z8K{y%8%-0 zKpZ=iMQAr{p;DtL^9B}ESsb3`4$m^rMP(o*#dBMMmO(DW>SBgD%o@u?8!Yh@mmdZ_ zK-Q2wKB9*df;hGD2Icxj<1jH>sAF z#C(PD+;k~W8YIG8T#DOc-3ODRFCcg$5F?1f5c8lwq;x<-OfR;5-jaw+eb+!78167J;mhP@!I36LlF|l6af|?T7d1Bh3GCNTF=XTsexW-qqLC9=WGa#8_;%DX53&tNdWqY;fGb zASoO_u!;u(s0j%ot};dV)v^REREbvJBOyF(Rr!|1%d_?`P_2U}T@u6Ugur3BN&$^8 z{Gzd?tyx!$%-7yHzY_ldF8N4?GIKjwx`L)~L5O)M!!PK`5Jzkz!dOh$gfEj2{K;Wu z5Lnr$(@$9?kUG}!4J|_jKZ;&y{{T@F5gy~HHp4Cqr={bxL>58>0jgr`+ib_Tzz8s4 z{DKG|VG0>TC_w}a7&aou2=fFiX@4*LK#e6$Aj~xzWtYuqUjRIn(>^hGyTme8&N zcL_@W0OyD=H^{EwZFz%3gor5AQwkAO9M)wqkx_dknY=gu03uyOVf8T4G>smZ^$b%} zf)H|R&zO7(z_pAkuv5w{u&OV#tg9ZS#8tZ3^B;a1<+YLq=XPNHA|T|Ku&t%-+_hEM zUMCHxlAYsZ3djdZUkE2h@K&+ zXZTAn(JK-b_Zx7nd8n-j;6yHn%%xWc2JPxK-E^wq1hOY?KBad(OBe)7G45XCP)xMf zre#zJ^f@jnX^6R4C3Jzo8-yc^W_-&G6$Q#X2$GKQRH^{0Fhtk{1<~kb#4m80Wjq)q zf)lS&#VP~_5a3{z*9502=`&_2)GKVQ#X^cLkiGU=s07$K2r(e5AYNW$wkNn@9KJ_} z8m(rXP)CDwxOx)h;!fBhp#46GGECn%oSMAg`#ne=;!0eA?z(jPybrvBF zf^~eq{EGR%F)NvriW+-mGj`<}+r(xnYZ1Y@e=o^Ou*WkTU2%Ozq@nj2uVqU{*UHNk z34SAQwykA}S(nrvBk+T4^J?XQEvB~{t9L42;-kR|SdEew1!!|}(1m)P=3$|aaH`-# zG&^Q7x2U*@^0vV@gv|XGw8vVJiccE-)Duy+BD`g{Cz) zg65+_R;4Da;-VUT?#XB%wF47ur5J16v`$QoPsj+mE}Q#ArqFfBwFzJ?YeG8SeMcVEwcdnxu3ST-k8-*iG&c6mbtzK(#%V415#n-&b z;|0xC3>cGFcQCr4(o8O#4j>N|lfl%hm@Apa!lA8fhA|y5s`N||3t4pq>Wpa@ra5Vf z;ssS2g5DLU)OQs@_y`KXzf)QHO4z@q0Wg7sE({-mdJ776lr1CFx0rlF1`Hub?yN^~ z4`Rx8h6Gv?g*HYgu@RZ09#{i9m#Zvnp=I%1ZpQioq5+;zwRFT5Ae5+Dhb@?ah;D4o z$l-3i_XHA)Gg0N0OLZ+weo96mh1Ajwz_<Jj-Yd zHh6|u$ecc-#e(vYu2kq@_+VQ?uHhsC)+F~4P_(L*eo9K%rs4GtxpJsiPQDm%g0BVU zIj{36L4C)|gQ!8Mvk_{b)zlSD9m?@6iBV>Vj;9w0;@WwHF%6EA3P-$iD#qwna8Osy znPK|~w5h`=_eCRbY;`ig*)WVs34I7r3Elxv&;Yn)S!Pbi4aWoq`HfW;>Nk0vMeEow z!&@C0c|@wwQRKj~;`*3~8#!j93j3-a#56mYwP9XhSj*WLXLwjXwgs0*FjGq%!fF`Q z=pdJ+40J*xre+4tQ!ryJZOzUA-jZXWwk@qw)UR+{;vIv1M`0z)mKj_Ss6rv^4+1c3 zv}1?dY7lLJiEy998{sLZ7cY@FDV?~35mgefSzk~KHC^)swv5HG4ve`Hq?d|QqsayX;FtliJwtT>u`aHy9&g1ZYmEkRjnFHv9htmsH&_U z36wwkDOorX^5Eczl3|wMEs19k2v%Ioz8p-aY!cNwWkL&t1H_?f8Rl7m)dU8_%*iZ6 zqAzU5}(YLlvt3M`)biqYHkqo@9WvRPy46}za z)8rc*9|ZM<^A@fsxs2cXf(1)%16|K5XwG7YRUs7PoWszAK-9(xZU*eO>RrUxJhv|} z+SZ08DzBN~l{EAhxFVN*kwq{g5vD zY6;K{1V)d8sJuBJ85Tl27z!^D2n5nK7FP=k6VydeWkP}o7&IQ?x+Y~KYT`aAVcCAj zbsMz}c*#|ctOQBI5bjwmw>^9#9S9L#^^?$ObPb!0C80Q?$)Et%8|P-V(m zshCshf_hY++^R~c2Qe&!-A#IB)f zL71+m?G(FUHh>CBKwD+25_I7p?dG5EV;;2wF8N9?3}RMwEM-m&5|lJ@ZX;ISW*tIQN6gn3M6evPjs{6w<}R@^=Y`^6L62;4bY+8|5YJF?E2$A;8-)uEyMR2d zf)__l!El^Dnm@ScJ5hL$s+nU)-nqQCy}S4=%2^Jq2%MsJdV#g%M$J_oraTi8t0!{A zIJR2*joGw8+z(`?$k@mAr5s0+an2ZPRb;?fw^JGhy67cO53xsPXW* zhFS4H$4~e|L9p{POh4oAljmAR^)$Z$j>fK$>ZK$_7D7>2)3PBh23lU`YK20s-AWuW zp!7|8&}t*=D~qVaTu@?URX`;F<8vhL0m@l zo@a8R0E4;Yf2|>brG+rEKK`_K)n*`+=NWYO#~xj=#@Y(QPSJd z3#XtDx0sJ~f9N9b3N;B>)rv<0CeWwx70FxMa==s^N-_b|y@nRDpA7nltC))C71B;je%QI*llJHbec_$&f zI~ex)E(p*O#KbK2K?ZKs z6;l=>`PP5(h>zr(p-j*J0P#Cq@RibVLKqQcvD~eNRNG!+0!GmFctvJqt|F!Zm_n-H zg=EBQBWhcm7Jv$BAiSd6EZHw!1P&B=nd4k@g1cagVCIe>>o#)30)5oE2(iTjQBNT_ zgtV+nkS&*~uMt8N7l9mOELlww$t{LlL}l+&HMlfH7{ughlnP8h<(9Wl3jp{0%G3{O zzh4kD2oma4G0L+Z_qeMrqT*bOs8A9|Yy|r`^#W9Lj$f#&SUK4!QEwTS2Stq2+6cy= zhS+w~(J!APxS&{FN>J-Ji096n$6)cUg>6tx2)1} zi>l166?1bE61f|xPnJVXc#9!G(EEqbwAm1}twKONnCPdQiI^I*RXKonW*ozK6a;`= z0nicg5IS`L)fLi5*E5i*aB;&Dq?{4KSBz&&dx$qmyopmsqh|-?5>5eF3^+(~R1~np z+{M>OI!Soe+s;+S4I`h(NapgxVhG)NmbRcraaRKrg2tYrhsW~(S8!A_BgxDuDla4W zhe{R$%+5qKuGbSA+y?{(MYa-=vjPkWOcpW)gkp+Stij<7*1o19I36D0QKU{z<0|z~ z6=r5|F~jicVZ=j4R={D1U7PPSuAr#1V+|(-#m*tF__7eD zgK)N?COL;0L2HOM1qisze?_J6W-svcCPZHgKXDSa*r0cqgmA&qS(%22hXKr@mbN{L z7lr0I1N08Hn1xq)SVS)A1Jt&-R?N!QWu~t4H~#=|hNBwOh^65W(l)J25TS=eJlvfS z46VLnjvJJ02GK@qFgpde30^p?!+dhQ6KkHQW&*^!v;t8~q6HMz*X~%2>gfEJd(Xdw zRgS(VEC{VLa})MQ0@c@vNUP=!;0_1?;6!D(g069viS=w1YY{;8GUg$%<$5`k0@;R`&;j9p zw7^f(a9~@@frj!`a-LutL7SrsRd;kraP5Shl#10n&3P!62C6M91_u8Cgcbh)X=x1Q zUCMjg1c&iGyqL`w+*X?<#j_g2p65a8;iTLy<{zEY9gu`E znToR04lK4h=L=#*c&HV92;}@^KeC8X$R*4?88?)%USH1;C*Z`!6%D}mq@FBPwm==h&Hx%kp zE?=Tuyg{}mmK@5ZY&l@dLqKOR&H-nU{!kYndW39mxCJ(^5~{cdnj&rfL=D^_v>mNQ zo)Fv_YR-y+-7}Ug7oh4ItouMfZNDro%@Bwlo~4Qz43n zjv>M{@i7&;NmMO|txYM!#VK?7DO<@M#aikaC9ThwF<9Xg)D&wjegew726<#N@gF3z z3oIUp`9OMa_9s^uv-LFvT?A#I4F)ah8}lheWm|$48oHN&S8ztx(+~ZuEpgFLLI!?O zM@a&h*z+s+%TsTOgd@%b#4FK&M}b$k?!e;`{{RK>xtH|F=IeNCB`w<8@WR)KoghT{1PJS1N+~un-+U4$gRIx3Y+=;Eikq$gKPA1w=raL0? zyM&g@L{4$NbF?M>FDwje;4$!JlyzB&!Z2uDF>zH=+2T;m#jQjT4 zLUR$>P{#KKbVhg{EmDhXnVNwzgWqvUGhkW$j!iTS1PP3#h{6F_#gdj!Gz31EN0r75 zzx-+h6@61K-!Afx*br#Bo z*d~Surk5&h44jFdL#YzWGl~aEa4fGOOgZSBiC%8frdkBjF=7Q^V-FO;f3nUD z7sd44IF`rzP_Q9lSd2n~J7RMdOpP5e6F}mJQAlSPjb?oHDL`NYbU}BCO6bL|N`exq zF4K0G#9~;vC5kJiRd~Sj7$+slnNU5;iV$s#H;xBH8jLYWXA9nDQ$nr{flHW_9dNJ- zm@4rHFq^|t<)Nkn0mjHx2XkvHs?ReF+r{E#z^>Rl$n3a0oLQ0mno7X5e;{_>P&Z@~ zlkm;6K4^%w-QzO9VX}?OcG$NM)Uq&nH~9@JzI;L~XP<>bQ;9)Jg%NfmBuN5wLrT z)l)Ou2pOP8oI!61TXuzq(dMY25OzTg5cRXn;K!y}yhCwWo3$B-)y#Z{*sgC9*uJxR zm(moIgvkqIQsXj!PViw(QGr2GL1o2M+=8wuv@gthC1f8kbMW8b9ZU5+$1UT5OPs5U8v)kJ7H(6CP86 z0}&oo!t9h!BP~@%sEejnsz1yrZY6Fe4B#R+amEsth|sx03;`E1LUqE*nV?ysI!-!` zzFiHKD%bUmhPng)03d3ng_Nw(WG%q%M0lY{{UnYF1U({ zeIc^XRyvL|wmYz;0I)0n}HC`9@2!sgaFXda@rGbuaO<Hfclfu_|QB*v?{3kovQN21%-qmIEiGz5yzRW#ar$; zs`V zUe6~mRfgSE`j!?LjaxGgh(02+p%D6M&Zv#u+cOq_QkEnd(JTtqTIRSRwdH1xxYLEagFhKE?35!_t?#8oK)3dH6xD^Y0> zu_m)A!>Mr)sTyKv1|f7FCGd95rr#Yt1P~tJAl9J0!DX{wfyA~MASW=0uGo-55Qe7^ zow1)}K!TM+hF=SwZw!}rhh#WV>f)um%TPq#4>Jr`K@5yWOM+0acNoi;sPrg+x`jg! z{gT{FwUHj?xN}vj#(AIArFv)4Z<3R;i#eUXfT8b8H6DSMhb4#y0Sg;PI-XN^Gnx+ zM02WG=PW@G9b?4@b(wB~V0c^tw1`z2{E69ysDxDjaWB~$R=-fV1LjyXR|45gK#AGz zDGOMwgc{IyX#W5gaYMn;7dwlimSu=J(h!f*Xo7;;5|>*87ZV1pWw9$;g$CC|b+(SB z&i*!A)Kt~MXw0?+`rP^;idx4BrD6x49d1}-3oqcdg|AUYrI@waz7P=L`jxVl48ttu zU|M6Dih^_2Gs#??q1955VLtDE3Aqt0rvnOk@cT&}5M%Lg@<^E9ILxLt+ znT`#^6GNW}>&S4_vmbE;z&>Ms(w2re<0!!3cQl3HnRXj3cPXSOwD3bv$J;a~XEEhN z2i#;Fti-`3!C9P^NVXX?!c~+Oc)4-{fDg#mW7z=f9g_1!AsFGsU*sEh1(sV2+%u*s z8;sKzBb?nty+K{w%E-#^@(=I<@(dtUAYueQ0F?qC0ubCG2tqo5$TN11-o9bmP@~5z z6lE5d(^rBv>UB&j)N>kDLd$kbaBti#Y+j;?uD3;8w@KiogOt}p$f&p&(=CA|ClRky zUJ%V9!i$Hdrl5>1J7Vqws20o(lWrc!tT6bh{{V3S@q{E!R4WvPgoVZF78u%$t9}t; zphG~uqo6^%Sh1(zxDU6uj^7G%5<=YE7nsf5SSsaTP`X#5W}mioscw(SNA?6rpd1Rg z6}kT^0|+*O>R zgtJ_g5%G^Wkvl(_764)hkV?d-C6i#-`$y|W$e=68x`S2Ud~o*JF6@P6SuKfWQR>J; zZlc)$ghiFHOuAZk94S}BIG5xAww!Sf{RG`xid{hNVWECtJYn+!#Q1=?4-&$x*t|_p zMXt;Gfq9vVH4=NEw>&45dy9>fQLQleVcaTaSh{TiQyie-%N&5F8YSbXt=bbD?J2ke zM)76_@erztLYK_9TjYidWggJTn~T6V9by?pi56vsKM4nnE%HIsB#Lzi^oN8zVI+`8 z+6tihl#C2wA$G?z4V^1YwHcyo;g1)JR>n9~q``ZP>+r#7xC>CCMlzPKP$Gq1Ao9Jk zlMo1FtAGZq&1HYY8>>2voD+rodB%RBH*BEUsh#&>E%!XKWQ<$Iglr8#HAjPp?cBvn z5x#qd12K89JhA9FW~*zsbtOrI@RbHTgf_aQ>qtp)}bP>jBaG?g(WxZ(SqAloK1=9#^eMZwN zEkRT+(&aJ$MGli8Hyc*$f*WexgsY1Xkx`JSi4$l>F12#&3hq5+9@&B*?L}|$W4AaT z9LCbHobeS6@L={Mr{FPr(w?bbx#AUQ*Qzrq4G~GeY+%wLR*y2^5aUrZEe96$1W_p= za-oAQFj98Q=6;iid>KlMZXRGETWl^b72?w`?yI;c*!#DLzQEMUiDN2f0Z)ldEa8cw z2CQNOaANL5xyQ;)F!LHyoouhTw}q%v?3MUNS0wSenOrnnWx<0b#Zr;@)$labwv`Gs zu3S%3W?%7TJ^+A$2&fPsN`zD(gD61+9|0|yf~CNA)b4TA0)gjDT|ZKAOd*bgd|&?iO5!4<}AOa`REfKy# zpkcW02r~UaD|bYpkHy8*4`6s%U|jORxAj~rPw5;)9sQJfd|Sx%D^w-AV%1 zq9$PQyuqk#*N}}Nh}ML4Nf0p%c|Kqqi?b1`*hY(udNs)eruZW@B=4B?Wz&QxvIu!t zp(WG%L&dbFzT;R`+PPtcK(Yo3P@%<3R^OVJ&@_TvCe0ha=51O%t{o7wxQbYxQu7k+ zkP)%OUEmpoI;nQrED}dM~oP@9(5kWA5n6VL~)ps@0x;Dir? z8u-0dkymP5)L5_L0GE-b2BLO1#91jFTERgm<=QVeg{WpFJ}>l$H2l-+aI(156X!C- z3IHG>cB+)>q5`o5*G|m{0=^Om4LC5lnEWd&M-)qlA}a@P+@=6%sB;?k5u^OW18k)8 zGmXHJL!Ein^+Lh(}P{{7qB%$MzjfIw>m4OXY`lSmJIj zV{W4MuytsP+4_(6ATJCp7psTK7CE_lS-YCq_fSnE=(%X}EQL&YD^kTJ`GDyK9W@P9 zx?vWBT}ufQi-&^GD5B8_>PPlv93xT5+!4jbD?d@?s%UBzhhanlv~cpO$^Cvt;?{X% zHGzU|4`G-qOYT(TF2`<&0=XZY4O0 zQOtD!b1vox=!&DGG14ZWyw$|qdW04x3Mj=yR;u8}$@LoLg5ZJ(5FrRdGQI%=5Hk(R zxJ^S)gcv>vq7c`?6^A2oB&+c(QOqGhR45^MRv~hw%KP529Pd8iS5!(74kk+ww+=l@ zAZ6U=RY3w37nzdna9-T9OWh3Qlml~m6d5WtgL=~zQ2p>g7@Oj^PKmbbDwiR=LUKNA=N3KSEQ!h)yF7qU5P$i zDS*#<--3P1tmKQXY@EKRA1{FMaf+tC{q$S&jV?q3u?gxIU~WtBxme7ae2C4)2 z9+nq93*d^If9gg?b?w*>Yb93hG7I{O!rLZMiT8CyygI&=Ic|H%E6h`jouE%mwz~tb$NS!pUMrSo!2+ns$gfM0nX^Q_O-%_49oc} zZ?&kdsuEjszm#%7Pv%2QIhgTi?{ta!t7tOLyZ$-H{jLCY$54mCU!Mz`dlL+Ob&=&nhgFfamjiNHtgSk`a#S9G6N8A?;^`V(8s1HsZtQ?iZ(h znWMo@lpCK_&a!QW2QU-H~N@0iQ;C)k!e~D!i7zJ*T zT?8_rsec=Me<$brX|6=meJ+R%xog8s`D0si(~tJnNe7C`kz!k|s<2a!dt|%dHsDcV zSRz{nlV>@A*4M7Ax%9*O3k@BQyd^wT0lufEgNs_YxuyCh6PbwIgVGQzpaeoOQ0PMo zh_wXXavE>Q!wYu!&N<%M+Y)ut2Bxa8dMPfQ}!`dE>>xtM98tI7>~(bY=?=o!ix z^_q=*3mF}Esu_wax#X>+77vQpAXtj`A};ZKc92qwyJGEZbp^yF^piU^st+6*kCh&x zV(B{oj7AF4!fZoW9KFsrFU}tU!%WXceF2jm-u*87gX0Vu`3JWOd}Om}^?j&>GW+X- zEy|u6Qk1+C4c1ywGXq>>DgV2=vq$x5 ziVNCh_rZeCfWN30uozs+@TxB20`@tqo-EUJCjFWU^E(vy(&FSL@OHHRqMQABBo9~!&q%V}Q7AyiTS)&RTOf=^! z=lX%)X_vtNh8h68&rmfAI%*fyZPRn)@;G%_$%5#LfMh|exyhtiG~Ez{+Qf@fZX?}} zH$+@3h~q!Wi?Jvh@oO$ifzEgi+jpwqT*Xs~e;Ufx5~q@%ouhfv7Ek&V25=2%l!z|* znYZ;exTI^lV@0OHx|+G3sK1l-hFqkNh>_>O(PqF`5y${l6#JT%~>^Z<7msUb3A@UX{BWo)meh`R@yK~KhcW;_qLx=u#sL< zKI>fVcIKzrgs5aO<9_0-&eADx4jmNv;KMp(X-k;YzoLp1jw8Hgp3=>YcC3FHd?gs3 z1tQ_E3{AqIC8tkXFn3XOsa#Eiu$TCAkz#$cyP=n%-$VyF3qqB^Inc<*YZ`kS)YMO0 z9w5Jz`a8Ks%`IfH`d*Buna=e5;zv9G=@*-har`N&1mbqrNt-0T+X>>z#vY0%YLR(~ z`WjYhD{i_rb{Echi%wYII5T7vV8;ej%od4_OI1zgZ5_p!SbJ%4$jZIiDLgCg@ z{h;f;>WaYfA)#5RGr<+_mz9F~AM*iFr($k_#^UMSl#$|OE1k1T7vra$*$&y^rok`! z4bwe3fKf%|r5%+iCh{zK`l9y2VZ=9Af;1>Qy^L$cyy6)9sMQE=c&rO*(0bjln2mJe>7V%Xf+$MX9P@ zLG6A$4R`X&r01UCptWibBHbMcZicmRa~JoK!AnnD6?C~_2DOh%)Riqc9eVWDj737> z>~v&38-lN`PT^<;S;ZhL0-1@ZoKbOj8+^rPPo*Q5rcE4%iRfMt-gm@wHrmsv#n#i7flrl$x|@B_9!t8 zl@8jV%aZ0lfI_0D(`;i=3~!fp^DrbPa;(TBF>6OT`?}uhoPk={3{t1S(O=0YNixgs z?7kFF{-iTfEEL6>j>5MgzZ8y1$n{OiU+VxaPU@Bl&^uf{L+i8i{{e{S-Hs+~$}jvh ze81Phce()4Q?+!*?4q_5#kB65OePoFZ(G>+GsTr-H`Q74gJfa4mUn1Lo3*)-qLUA~ z0;Jt!W#xT+dm~omK?KG~&#{&$XON5M!B+@U@WWOC->tv2r&|cZF@S07JSO);=crv z57Xx_mE2LfFw+vMZciT{^+Y9|xEC~TYe-ig@(&DCCiql>l{8q(bQyBiC+{7IQjz>3*;T3@a+1^nR7d3-``I@*fP z$52Lbnuc*{m(r=Wx6jvm-W6}|-;#6JzLLtpjns1v5t}BO2AGpclRgqJk?-O0Eh`QG z02HR^)WF}4fj2G$(mPSAKZ~yJA~?}l+ry0#WdDZ0kGiu|UyxJ_R>1u!Zejawr*|v= zg04uzN0EzPkuJ?f*uLCE7Oi8RdMYzX^IKX1R_BKSXekfl&iq}gx2@Wf;UZ-lm*EII z?^N%Lqhm|doBT&Df9lZRJLl*dK|3Y?0WJ=oKMiwb&{l{kYQ^``?7EF)!V*;LXU<*< zYSe7^NgT(&v{$9PYn2;*^g}ptZ!WR3{XpFt@X1jCrXD6MtX`zkbL~SHp{9s3#6GG_ z^R~?2+E&{RFJR;FVUXUl+#e>jR2XVT zv^%idsADC24wmpu^p*Q_#70lbz^{sc(LI;JDW9V^Mm$7yF!{`4$lv0^FXvNKOa+m7x``uw4qN{L6n{e*5V zZ>u?~uLHAy)=-D~OJ7iVn6M8Dzq=BC_PP-7Sge)ih|}}1P*0?p)0q4XoPkwoK*7kJAuYe~-f6!R5`%I~H}<98#fV&%R#?Tj&CH%OgQ%LMZW z%ggofi1E6RT-B$bys}4sD*8G{K2r_DOVU>2N*n0@0+d{pkUsJ1m^Fh^0!NxjB~(j# zMaJ11^al26OVC^0i7Jk>WN!n(i z%QoY%$ry-i{3tjLgkQnA2I=!DrV5t)Ks?kxCXm36Z|m9@4R4jmt7>?}v6I3<KWfxcl?DWjd^0EkouK=vM%-6K3ht8{8bed~ z8#u?u>TremlFAvq_q{3rMb6`F_5H=!kvC-KJ^P@&Pq)Rd1t$2oyl;_^QP2&eJ0^>{ z!d)bkBpVssl&*I_2{MvKxQC4vC-?c}Kb*Vad^y`R*Q`}7xiw{qV3WTO(ty3Q8IrrK z5b%1)~%$=!iiQ~6AFOTF=V<)VaY^nQYKViU?V5GWRGlD2*ERWT- z0oPzS>7?7K-bq_}^cS~duNG(?zm=c~8c}5t*XN&LZ$`&bM5RdT#nW7)QhcN2L?j5F z2Z~7&$Y-I6J=A7lTYnx!HV+4crT_)znEckiV~Hw)yR9f=EdPA@cy;*Sq)X*xhSY+Z z4Uyz?6;|AQUV;~0Y=Q=^i@S-HG)Mi_eRADpN4_w#c7ll@t8w=0i$MlB!gIdE%Y8fF zpxbj65ss{ zG(*OJ?dz#rW3L_W+Tri#DJEE+X)DR^*Wv37nlnT8oev>YmlV9~QhHCOXocw5mexnp ztS27%A`3zf6xc_09XlRf&yQX7UTN&GM8|5pv*za#we7P)w0Poll6S#pg0G%lEe4q6;e0i-KI+U#u}cx>>Z@-+Y zr1YwXmZ5w>FBy=bxhN-dS1WNgU5=sqDlZ90d#aMJ#zUJ5muQ)E{=O&ZK?dn@1(8rj z-*eD2Ne|qP2#(*ce-E+}QD>Fiyx7bLO`Z{z(ScnA9aY0?iraNG4bIZ0N6k<#XI9eG zmRSj3{7k;nh&p}N!&N(#Ls+^I&6ef#+GzJih|s2xkV0c0RzZ&oYR-ND$5y_V>ONsJ zNd8r6m!bweHvICp(IB~4)&3YmmyM(410Pocry6HQz-xtgBvGc!`uUx@jH0vTD9$`~ zMdLMj2;N9~X}Sw3Rb|Wh8OXQSm{)lU3a}aTd$?CQT^7~*3y(J}I{>U`c?FjtHyT4- zZ>0dKZe3EWWgR_b#T}@zd2RaXj0{hVbk$oJR81JCn<1Ac!20YZK=HbuGe;Re;W$D9 zD|3L5R4EjLW}y{eYkAZeB0O3Knecz@2J>q2i;EBR841~CQ?LcbGnrNxYv-iq1K&{#w|2T%ox6 zmqP>Q7s1p!^KC&s9-!gqSi4(EtRV2SE+>jJy_G_nB=3gA!8Z)4dNe5es8{>M4aWfk z=U*CK#%3A^i0r-Q&VPWtf`5Q_4Q4W(_i{|8ju6l48c7}b=C)~;in65!VzXkra{}-pT2gfo@>(|O!(s{NoG0<=JGs?si@jOorU>j? zDp!#>uf|PX1p4kq|1T@Y;l+E;cLLxCS*T6jHz%9f?`(%#XDObJ(Q#W&Mg!GFZRy_I^Mdz zmG?ywZ(%<-oA{F{t4t=I*?d9nuV&3Le{Q@jU%zmca_E=JRMJ<;RdbD$^f|uxzBoQd zVScJw(zX1dfdWm1ZRCNKQ>DDF=ZnO$KQ%S=R-46sEf2@)u^?h#)ir~;FQg}v;!=}N z$NeG2;)>X|;qPVGi9wmR7)j=F#|_F-(PoF7^$ORH@CGlkIl1xINwsB1o%kjpE0me6 z`(t;X^C;;Ygq{3gk49s>|1kD#V8yzt>*6T%?>_(fNF_SXbIwA^*T)p*i_psMbM}>m%FYoTDoT z#J^e70#!W8NRGDv$USyaIEi!Cio#~pT)c86wB+%Fx5Y9N#Wq9o6FN|&^s4^1%68%K z1_>FZaHW8iu*3Wv>~;6$Q1N?5g1NSLYi8gjjuA}al?-GtjE$^eYo}fq>|Av#aVs{< zCMkay$3XPw?OC&G)-SBWHDoUaN;BrUztEHTVqq$;=x|p;PD%opldi_6$kph~v9Yl2 z<8+>q^IinJ&IJm7+7crV)AAfI@`{b3vMqQIUSd#1wQCohw?U9+4+7k_7T{^PG)V0)#wQLvM#j7r@Py9yN!iite1tA3*FF z#`)AZ;f|rga#K_etxHec|1%f5m|Ma)h?v@Rk=HH;8TYRJA!shsY&(^4I@{h`g(def zg6m(K9?fcMo-5WXca}G=Hgv8Hm>p^I5+GO`zVyi`S-Zqcpbt0N z|5X&KB6v}keD;-@O_O(^Le(=xY%62oTDhW_OAcS5A zZ+d5*9{4~9o%16%_kR|*_M40D5-={!7 za*CUCp7?(LW%Kd0b0R*q=#O>M)&8F*X%?1D|HDRA`B2ZDE$0WEKtJdss9v9d^yh}g z8Xx=0f{WryCejfY+cSsuBS)?enRQO_kf~8>*n9bGt9OG$oq4Ssaa9r$nio--h%*R@jL|?a_i+`e?{vE!# z`6-cGNEy#af}{7OimjQrzx!I2k4i5>eGklVpP{L}V-86J$+90C;GT+4H;a@!5@&V? zrVmbqm*o7c&pB+l_{Dal6i^&c=NKw%c!cR4+}39~Fh)TTbwVJ>hh#_=i=na?13!f8 z{bfB9pd$E8rDKiV>c?2*3*IINd7;}eNmAJP1Ai;Wo&Co~4edLj4?k-@>L1Hx7;ZEL zlp3V+AG>_<6Tk(!N9zt+2%M^6-f(G7mstNQ-^aTqmnCT%?A;fV2%vM6cbD_u-h_h1 zvmd1o|FDsuYvDBHqWTF>A*rGVB6K=2uc6$%ckImHcl~P5F`me(pf?1Ao>w_ZN$}Rs zJ4&}(uSFEWq(iP?59Dw3bwB+0@apQ7H>>q*^AC^2T~mJu5qf?bx-I#ZU?1OY3OhS} z2RHRi<^6>v6Idd1awdfMCcN80{jB{cPmZ&$^=tX>#jaY&BD%Im^^+q%{or$~eGe(H zZjhzmTG{6HdaT|LsQ%Bou|J(_1=lN`+UO%C<<=o;!M#!)$Gil4m9AHPpeMb<4hg3e z=f^|0=p(>X@R4+s*opg_y~kYJ3m|wyCc?`>oiAf~Kj^#4XQFTau1CJbeC_~a$-Vx4 zkyWX?!O8qnKXvj$_E-P`ibqW0jvx;}&NH$cd#ED^)~U4Z>1`dEu$@dyCBC!cs^2~( zSv(D?uv3&-8)b2vjLOEaef5!s@+*cKOJA$3I_@dt-_Gs(2hgbuGHvvF_s0b~t8QJC zs1Eq<)M2HM(C6+!YIaj&__@C8<<5Ly2n5tvx_w3%?tQd?8&ih81wpRLH;YLWf4KUkIu9a ztsiXO_O$LZ3+c&SUgvvNh%11R^E*Oe93>_#TzOAjnGOzZJyj&B!$NrDMWSCJ0-wGH z@D$DhIk!P(Sm6n>REQv=&~(HY3#9EQ;#u7#2^?gpK}!M;kI`}F-Ymf0R|=yCi$NDK zLBBc|*qf~)>cj1!fysmXO$F8wBXqt~MVbOq&598Vot68g%iR&w>(UggxACgVp3MX- zKcU(^MA5KU=Hza%*XbtypIf#-_j}i2kr&T584Ez}Cl1~8v2XeZC~2BSq|%{p1(Jte z07tHDU8-2Bk;f`-y|TaW>cI}D!sf+uRYgA4o_*L8X7yGDIOE}s^%#&_oi8io;_wu; zx>CT-{MIX%&a)-8XdA3+ziyOhiJ%oZt?N8^zY{L!!EFrpu=kWHeQyYQ#LFUFRr-~N zQ19rOk_C*xr&84tr;f>1ZlXLThCG|nTU%74rT+n-@wlp!lBBWF;cABP`#w}Cw^hBr zhBe!v3{9lE`+RCqd zsW)iBhpW5^4>2X`H`~6<)@=LY-r>tdlmzTaTi|KkY(*XI(BpOAZKnI%(fcAsO8ktc znM|XQJ|)UTcOFSEc!DUsfn>h{-iw5k+O|K0p23Vc$mHO!MJ&=WquohTkwsKr3m%sA zl0H5YxFvbyekFOa_KA$;JjZR?BmX{kO8m-*&%~uiA^C&X6RGMxoUHq>UZ}X&w}jtW zI^@75^R%hiKn5nnlrD#OF2anzt{1IQmw_)HH{t>_NQFrmm3{rn=2IL&9B3RXa?lY| zdvHq*mJYfTUJ8Z&2ViFflf5iiwTZ4~gL^)M=lL1E9)7yT{G2;-=2qS8?c={f-3PW* zr7AHuW+kb*uKXR67VVAniRC%QR9NU2@!B$lMF>74`IDp(j5!vH#LVp)gO|s zc?Vu;eW^@?gIda3g4{R5 zP7a~m5#h$Nj#1w@uZfwgk-CTm2WNi~F;mA#5$of_B-JcZx`-x8fzUPX?cDwnsikq$ zxhhN7yvMy5KUQ??cw}z5X^iAYvl!_Be$c!>;C!yppjN;DtD>>yBgH`RhJS%=M5jZN zb-)Z1Kb6lK2n*mg8z>?f^X4v2gUaT%{&(yPElw7|I0W}q14HGwzp34E{GzM{znh}M zhs$s`te)0g^isObm%=`>pQ=;y6!XB2?UEDmelKn84|2zvGWx6DTT9&8xp`l4te`_U zI7jbD@RUlk#YJngNImzboc*agDoN~KD6S7R`JGWfPBo>1E_sf>^3RgCA%EWmzmaZ- zE7LHu8p%hMrRH+76TxFV=chJZd-$!I4T@-br#;8cJp;D3+0~{bH~dzT0`1qHN9|~Z zUd04`9lX#__sh8kvodTvKv6qYV;f6A;6eAt?VV)o%|``otLoa}XdJyeXN(OJ=55}^zBeNrAeqN(#|+7a?)De0?wi%M0bK}fQ7y{D~? ziz(zzv2NP<)gLMtjxq52Nu9shz%~erru^R*1+jqOVbbolmt*y1S@rv{`>?xRriBsBT0gI_^U)<$^MwT~*rn#v zlFFj?<+Uz%B%*vA>rcacB;WjsXdhs)g398B-sm-U4Gkr#pS(I^@9g_gw=%9if#@0$CjD9T<0Ltm&|80 zLwbDm8#6{Zgn&*2`49m?{zM4mH3;O(aw;A{8-TLLK*qu&?#63(YmOp+&N*(c%s0zuHIP7rf7Dt%CV)o!@XML*{YJA3;rVJr zoU&VzQs3{~9o`)Le5+nX@kuYkfSJV(^r#RzWiS*Fv5cQkoh3X=tIBEYyG@t$tMfYB zR1mGsy43o-w2!9mdME$!&6>#7Sp@frG|d#Xs#(6>d9t+R5LDpEb1Ed>HIhT4A##2M zJ*`(WucMmlbc-|MktUO+utm|pTR#RQNneuG#8CeMzUd0{7DRA6+o2&`SE&=3EEW?% zCO8nWAy|%DP)RZaJ>}V#xD)5! zUHGhpw?>uIZ5?6n0!wxgho`~2KAdHX{IbrkIof{b>Z86$l<>=uar>F91vSRpj3l7H zlv9I1HI5q^L2lp{+&Yrwo|}PYJHYE;23Q`R5$uU;8KETXLYP*A_C{g&^HKrYU!B@C zgiUEr?zk_(tA54#-QcSPO_$>igY5enPp)Fxiv2y4pwYFC+8%9+b0gINFvt$YW9JE~ zM6l$$VL8ugm$}HBwYy>z39Cz|^af2Lp6UziTW^F)NzZUjFK}EZObQS*;#E0fE-Qx#{Mx6j!`e-Gia0Ns%98!vWYdWv|~r!Umg$yTQ_?(cj2vbZ)-qJAzD&j|%2_s<+IoHdXbp zOF^@d- ztt3WfVLhL9gSn!K%W)MGi;4&OnK>t$I;Y0+UvgP{lj2%4JK2FeKF|HgX^qW3n*ojk z@)IGjHmd&d1C4B(6TI)`MNZ= zouCVX8QY{@U3`LA3|F$7PsFc{J=l_Va0>)^yPSN=`8`D{Xr@{GJnwg{!9ekV_6tkO z7vzrT;&|vciZD6!>%|{bthAK$-5)KzvUyrg~S5c%Sg0@u7&S&t^L6D z7#ZnWl6k=nVQ^H&$_k`3kT`Ylp!MJ&R$t2Tv`igjAcifOs zMuaesm#ONBTMJ~uU;FOapXQjzS+N5KlEDnP=#9thLMObq{}g&?KWlPQizfnNb>>Ms zW{XNgSC~V}^q3waozGj^z?@JBc1^YE^v-;$DqjFu@;YTD8)GD*YaEgT%RItF=69Z< zOmNxQNYsV^=$>KOUEDcF{Ik0kjzm7TwyY*}sAE=P(Q9ovD5It?x?1uUt-*ag6P@ro zowJ|I^050J<{ZaH5m8e*u^OA(;n9zmomZ10ls9n^%*c)m#VBq>m5r&RTR<>U^oJwf zoMW^!p^%*oNi1S*GLF&W!FJXho>p@3ZE*~jICHEOF*e~nRc29n)#Gv>4GT?x(q!{M zNLEk?W;OlrQ@9{b1PjtJ{lya-wEQg+_{J!TOE^7yLK`nNT&^Qp7(w=5uEv_`Vi3?2 zDyeN|OZKotoeOmzgW()%v@VpOxt%=M4OA|{q0huw&9z;UP2^Vpn!m!|lsPH-WUCM0 z5&V>WW@V4?rG64Dd6V%Q+0H1vrsj)*!;qKdU%K-!dNP*gU|)-PM{sNWbG8%5gldK+ zmmZ^q!1hb)sv4(>wwM@&HdQZa({kd^WJ{V{-thanMgRBuLW>^M%y6&Sqe|h7R+$LL zf=a%tg}zr!C^AB&5iF%@#nQ&Y6LySV$YT>1rMcRDHHC~y`;&Cxvk*T*P~v`V3BN@L zQG1|v0(M72lt1L9u;n+=RzKzB9X8(m6qCv^SCzUxE})wFOO99Xi**YJ<=mxdBB#E= z#ZfTbH26rE6-W&K19m#Wvxy-+i4CkFX@V?AC62i@<8PtGM>4@_2`pVNmp+N& z%b4M{8c5eSRcaJz+_KpM8Al7>;!Kc#$yDi{5f<^fSQG60l_~g#-HGkEJU{$OQh?L0 z3bNw0ukCc2zNko>;jigN=qg#ux@E9iU$v)3Hk|UgIWIf7deI=KmVz{UG^4h6D(NEU zQ~I?*Iv9-yf2`ft$}An?9^w)#8WqeHK~Z8}{xycu6-9ToAKy^6V*= zKoaeq;Rirj(&=-xs<7LDq8OcBHcg7!^;0OG=lj%X@vgP0i}G1_J-DqK5^HAeSQDjN z&pLW@>>M+=W5*EH47bT?a({L{*ZptP?w?C_KTLHfeZH7yj+fFkup^Wp)qtgEQoAD4 z>H&_WXX}k@eTC6|4K2S44hZdyeGwu5fA+|awi=~rl~;-(|XU(xQQ znCWd&-kF?NVntViqBzincaeDU#1tTu6{v&BMg2HNFqtYxX7R+Fe#+t)xGzrlse(d; zPybGsiIdB%M4`4?waMFBzBW%ab`%VPLqkTDe@ssrra-xIqhby!NZA{UP3<~1ey6lL zg?RdYaGlTR38vbk*-g}7wLUsaWA{_!6AafAl-RY{SI_?;2u{a52o3dWx5?y*f6fKw zlU4can5krVbs_k%;~-%|XB^BeA_TjY;zBvwgbnp}ezla-agp?6J^er{f{-;0=l#Z>(trA*#n^BFHOCZ@UAuh^a(;x`r~n*w|;&bKXJJ^gT-k7Y)_ zi7aRWpW)tr?i{>?hwCxO4LqqpfAQokCf^wAuLf=gE3%MWLcCvVP&CR+esc8dLMp@W zI3znxUn@J|a7T zyo92d7)N8BlHFB@0p&J|mTG?pXV2N>D!{2#@UuT0QZaCdHc4Z<-un776CTT}BJx9j zKJTK+d%a)8isoNddxJvUCwK9s=+Xox0jQn^vpiO>w&V z;N|<&q9)82iO_w`UGND*NHY!CcK>7`TfINH7BWbPVe7_l+1kx3vwf=k5KuE_J5QDH zsRT5i*x_;toKJYhe_I+-@4t!}NWyaj#H~^6Ui@W{DR3l?pc71PK!*tA2L_W_qp~C* zgw>AI5}2DsH)u20fk9-TKZzB=!GXPvA5dKuHOzo$f0S=GZNkW$3BRdlHq)T(B=~5B zdg1ZC=M3pko)-S5OZws-b#Dak3D4%L@TQv>mPT0&f}>(u5x=aS@gK+e!mGe%EJ9R% zM+8`Gnb{qP8mWDmyi9>WwT7-JW)J<)Ogs|mm|$uyo0FsL1I6nL6`$FXV-jgMwC23; zn$)UrlQF7}_T($qH0Tu=0YjP3OzAGC8GCJ^hgwtXT$NGeQP0}sY{ste2j~fvA0}ru z&vSC~PuyF_HRB9%_*;9B8-d;&bQA^rST$X(H46hG?40H|#an50I05Vx+w=Qwnp#Oa z36Jj_uaHV*qp2`;&++rHu7-mtJ64}ovWyX*yiDT()devL_*LSPSGZ{2!2btmF?2vKfqHV5_>N+ zr>x1B!mx{UqHf31;eZWFl7dR!luuzqfqS5Udm-cfW~JCu)q)ZS)ifKQLRmA%0T;8y z0QyS(^cQH->~aVn4@-~}SElt8Lt~`HSa5_Ic(v+eD*C=aJ9zX>(vV_i*xjI$uF1Xl z$a*gym6s|^Y)`7xh(68Ph2o7#-Z823u&{s)aW^|EY48l}^UDcyCXv3DhpNFYKTx_I zLdqbEf%a*4m?s|aih`!o{{a^D5S#FLWGzkX7=6;j4v@vmc3lR@h~_u?OuXDTJQzfJ zsfi(-t_7iOzW!j9(&Yb@9z?yrKt8yRw?90KRq$JKX!$N3io*V9VSiQzbpOxP>=1+U z*E)FM12!;TcB}Ym)ZT#sPn13~PTHj)pSq|%nW~fQHb#kmLe~@guI9tl{<4w5rhj8e zGI{17AO=TUJsr*|Ds3Yl7D%~Zb>T)&{>)E3lEX7h=`0fxa;ovWV%l`7a6seeA36QA z-6`^?>Jgy|1@-*Csh|x$!FC0afJHOHtAXW9^O?~UFruS1|G=SS03y)3mya!zLN+u8De6JH9<4`c5&1(TFq zE9c`2b`0b)Blct*3ipNOkT$BjMB<+N55mIP4=`IW+YZb4!80su!}?7D@=5#$a+X-m zKlcAepvZ!ei4ij_;E2--m~9hs=qz!e+=5B|28>k*zglTw+KyTsk0i-@a7S0uL~VTf z3!#pRt=<<5*#M%Rx2aKlhFQA&&ur;&q-D$ZE$06K?kx>#$LynEE@_=hca$}rbRtO! z@r0X=eZ$*sfvq(i9mHDgQocd|DP?*vSZr6b>x#n%ZvvU~KuU+drYTIAd^2mpPA;xg zxj131uS~fco7kzyVE~qa-{D|*(B^~BU0v4NkS|J4&V@L-yckO$NJ2}$%u@VJTj{DL zV4#}Mxwz07thtVQ(`tfv?EoZO@Ttmo8{?(`O%Z1i$*tGHzZyclYLDkeNlPz!!6jG- zeSmjD4D{qO!-aSbw24MbR7iG)W6#z(8bmvQJ+>eVt?OLTN3#j?b$us@cH~6++j0BR zN8qhF^Ai z+S$!|C0Jh+I4beKs&M&XNb z)h--Z!)21PBQUDuPQXDwdBFG;fLM-bx{}tH#&?ioR2ky?gov1%c!t>6W$;R=+zoCH zXxtzJcEw|u&Q2cQDm@@|IY?e~jO6aA_y@R_UQ%gYY?_rQS&1i+mF@z}{Q0cH3TL7; zAN+X9=A}+q9+@~ePATwmY4v9y*`IqYc(Bjv697wK-@37Wrt$;hLb1dtMH!(}5oKhA z6l1Yy<=N^FnV7BL6|*W*YCNsqJL?i}RWxuN*7)U6apu1h5c|ts2mM&^t7&x1 z+^T-=B@xrfxcwa?D0fxJrbVhm7qK*c^52W$*-u(uk5Dop>C+0ak)v z-U(B)r?+4R7Eoe&m#wFLt`V-|uUEfEbi^=hybbB` z%!#>|kQ~yPwr_0&y`q9KhX2fMfS;8jb(R`L_NYC5{T{%(X48OZHl^>*BRO4nSg z#asK%=FM$`T2B%EOGY#h+8ix6Dg}$fPvG(e;wcyn{??SH`v48ui*W9aq`7bF*5MqZ z+9_&1+dOxd1z7A-$RiY#ArcE)jBo^X^=(oH*a+g;qF|1efnhJxc2FqQFcEZa- zX*P|i@}H>*Iw3&8eQpNJ=KuLPPFsiN=n&)~$>jgtU2Kn)X^+%AO=77%dFFM(l|q6_ zXZhIOO(r8MNu9hR_gEV1`uON#{^MeCY}ZmSoYbmSyv``IBL$sNq;_+@@3mCUkU|+P zU{)P?J@Ju!tcd3P(`xv5=TpqP^_Cc{gq4&bbQBd$N>juubJH0D{}I+U|c7QJh|fVy&_o5`JCrm)SG0&CzJR(1(8>*ngY`LMu&~)Sqxc=>QK472OEB(AzWNyu0j zUhjI4U^t}It840cPhRrH-2Z(2e;!XVWkr?$;3l6O>lj#%dh2^|r$c}FzsLq{S@t(< zwOtR`>nfp?(ZIag*4YTC$E?f~=@J>Me*l;qM=iB)ZV?dRsIj_;S*9}H=|RBL@Cw;7FyDD=VlLva&>;+m7zcK+C` zy29d*C`Z532q$VFyNj@k+c!jyK1~+jC-YdTvKPaqSkAV8H8jkE(FG=uatI z5I~o8??AdZyCc=JVcat=DZ!_U+q(lh?h*9cAnk4#u!$szG|2nGi;KJTou|rpKD#0; zk-F2`dUZBi;oQ88$TyWs4_%gW{WJ5dl5|e#-gj@GRxBlWKUSviKVQ*z(VrA7Px(u!NtE41(&<-c{gT;pA8PJV7o9shYVHKiEu3@;IGGflW!VI|_?8bvO0=gTVO(p)sK^*Tc7p zM;NUN--LTL=Pjv=k6k<|x%|POVkBxa2m?fQ06Y@-TF&PpS^Ue5*+BgvBXbN1B`hHd z>0t&Z;e%3xvz%1EE$+tjLvz zBOp1Umh60%(|qtO?&+-3hP|ho7Ra)sqT0O#U-GlKK4%l+jd|tph!!y{>2^9Lxtt}X zD|inPC&srniSx#_Nc*#ub-U+IR7vSFITkix9}@@0Kr3I~MgZgiaYR?rd&3HT;$lP7V&;W+ll zhIIHPFAwg9RtT;)s|vt+hm0!Znm9bEne{fe8Q_>$j%f8t5+%n;N0oSm3K~i5nh#Z6 zj}y`Qiri1ryd!`X_sla0DWm2SBqu9(Lsq} z9wl#3xpp1AP-kraKx&Pjv53G*k><0J~MEVXB$-t zDP&73Z@PNd3?2zmhIl=UYWd@!!N!%d0%aQwbs*+HL?`H zvLTJuy3?o&V1%qYfgdemMM%%{=^oAouuc#c&$)ONuMgLE6+bLt&eaYX3l+8lhk*~@ zRG-g5EW}MdUUhGA&{s-W3R~ZdCTTRjsP!P5~ z-3W_*Hd0Bf_STF!s*9IZVjz3K>-iP7iw=u*Yh;oz5~))1EQt6+1(p5;tM`-RKaPAF5!#wJyIgXwEC}pYE-78YJF}I7eJW8jS3gXmu?7Q zGg}k9(dUStxomtl;jf&uO$af~L4JsEuXwCQUn^W{tLPJ%XwfbZo_15!kD#RVSpH*= z8s;@y{Ck7f0>rPcg&3~)+(QwRZnPl4=aIfNK9&z85l!>udJc!wGQ~_U7St7&EkdsL z%uHbf+e_nmJFTfljlxOPxl^1_ensMf(No!G+m8+p@3BSn-B!XxL22_z?AxbbyBj_c zO##&m3AcUYx+HlAUj;hWEB|~uU^@Aw#>-D)0j``U#1F9}D$$iJo{4)&2U11xOLxkZ z&a{OHmb}`G4!+FE{X|ruHd4#*Q>hEZw>FCIo#_545FvHBul`K`d6Fc$XZcjmi`#@Q z1R>e0BNXF#iw;t+yIp2bM;;Y@2Y#b>X9dQU9d0cwA{LhXzH=f71CU~3J=^8@Jb%gA z5=~q=U!0*2@v-DUSaF3F`&oP1v+_8ALDLsEyA$1B z@WgTdOmtvCee1bUk#d@sr=8L~k%rpxpjr)?M&>tW1?o~#nIV$L%g9kv>p}uUrj8F7 zqOG+V^lZ2KDZ;y$PXytTC&oNnL5WiQrhWIW8>d9VsDrdAf9VH;?fWMd>p*--lGQ3? zGW(2#YD1alr35LMQ1T+lB+oZ^HMhO~EevAwb&*w4(50jp zA4Q8BkB*manNodt#baI)3H)Vkb%wg9?#mVLLw1>tr}XEN!|jql^9V94a6? z2`GL>N4m;uJwR8L$m2d<@-&)yXY{xtWOQg(PDpImYn6aFJ7JA|lT@>|1>?PS>==4d zuu0j@RGKyc+hU%w?&KDvF%pDpL|ZN_w#BsG4Pj%(u=EXVj*Xp|M{*F5cndZlI-7es zgs+Wz8d)oM2(sYV3|i--I~G*ZTpQEU`$@WxWT@8{tfS-D z=w3@mqaEU$u_)Sqn+V(vAWzOTnNV)zU)eG&`-xXUT=TeKnxAT-ISRIk7rErEsDjp2 z{O)**VZMImSY+#l0MlKu(y#ILA}Bp#TeN&B^fnFl$v37q!P30c| zz8;atFIQ)A5z!Q>`Bv}Qq(;&u8N%q}-%Vy#q@Gy04E$OLXeaP{uFv>grMNKu*IIHX z_7Go$;+I0#N}M$D=*k+;#}yLD%Mi?wBUGkKaj@&vt48nOpAo+=48#o$yz9MybS~&0 zyTa!b1C^8%8Xj9E@|#B6^HSTQIO@t*L!xMO(t*wY1sE3R>1qZ6Tmez)#w8B5iu+5u zteG07qZ4abgI0pc0?H37D$8(P)bjH63KIm%<~DF0j82>u;REm>fy5w#&}hOE!z<-G zU+N}lnkoMPOlMz)#64E#+g^!q7_4EG>fhLIBeWS|b3(cQ0LV;2YE{5(uXaEn1|T}n za};f(l4kQOSiev~5fg-s3Z|OGqM{!RIy6y|5>l9~ssi7VkJ#U)5Kk-6M13Gt#0R`8 z?hG3ZBn%l?eJgRxb$N}JF33iy+j9KTg4x)S7Ywc&Q>|MHyhK$52P72P?ky%Sgo3PH zg{#cRNc6`I?@>~W3#|l{gZE$2hU!`gNGCF{CkZD+@vHBo`@NE6fnE=yMw0%I~NULk7E) z^?xQHIO1yyPP9VsBP7?<1U(!R>SyIIwLl0SP9RbHVcCD12HGl)#mu4@F)F(le8ho| zL=J%VCH9h+v>+Xftqvf+CS0LAiIzDs*>sB(vTCE(zM5Za?k+I3xv4f%MAVpCf?@9mcJe^2W>^rfac}JuMcX)uQA_WW9tOB1-W& z-(I6)!vKcmtFl}TQneh2`ov3$x@D@=(~|s|i>YkNi*yp^DZ7=Skjqha7z08Tg8jza zDde~i+FKMQKVf4_++h)Z7z`Wa5&r<1%)$joS++fF0<7e4yNK@tFvkV?nJ(qARYp$g zXBzvA1Q-n5+Zob?vpX;@<{S1BYweVm%FJE!&t?Fm(|&jG_W_ zD+YBwoY0z-0SGWfp>Rg7!ZtF1w7s?qTfq;!+F;d=IQ>S@VFl3A!QWxvzid${ry@)o!ZJb^wC{j2+TEsH3Te2+GtyLupMbo|&1Z%Q zC_J3Y-9vGyV4}#5mU%NNTFm5#%jaqi^C$)t;SOPD2-LXL z5!JGl)WZwlhG<2jQLg0zhzO3vX;%9o8z5vuzoT{U#7F?zF3DsOQnnC^m@* zX#8%j}IBp4e2r8+$m6`Du3%zY!g47j+Myd^?sF!8y%EKrWz`BkCG}Y%?xW zMLLDVGn2Amu-TKTgq04XP#%PasV)ZuU(^SNSH>B~Fs7o@)ieWsVjGvyE1V+);~lce zKdF)fl-yU8SSf-zFs9IoaZ$}?5yJ{2}yy^fU3N;0S5j3@4t|+l{E-D+*Ze|6`oWk3HXq1`M zvc(7CGYewRP|DoQ6ie503?+9K*cBU(&c-fUD@)HT+knszH6fXMf>IfL)Vnz&+Xm>i zXM(el<;N>B$=2nBk;JJfsETCf&LB47bVGBWB%=rHgYddwz&H_?P>rR*gDwqB4~5*i zkCFQmYTa(34glL#a-uQCujPaz%;j7GK=cAzD;Y*as-WU^^GvUeAb5^<31BrGIG1E4 zv5N*Hb&!@b9FiQdwwTrG(?y;shQK2)r~umc)5$o1h*<7qY*9HQk{mBEf|gy1VM{Mq z22H}I2ua#d%vq^HMO;B?(=YXsP>amCr4C3la=;pRiYTIz_DnHq08kUAT%2u`!Yl2B z$yV?&puOeV=}3#u`Du{xh1Z)j2pn510Jmh%&uA)E)zg( zoCpP7M6DrES|(r&yHFq*7AjPO^N9~6?4`WSyu395J}3qv7Q6!zYl`lrYMJJuDni#7 zgVVbqYYz-k&}!{pQqIt7R#u}fnOLUBt~;hyGnn2B@R+ye!wrW5^ciEx{Y3Eb6e*0T;%(VMxI&)x66(=f=`gmV zw1ikixt6Y#?pL5YFB1snA+%I8ZS=uRbQ!pA`|SLJt-lPX0rhU;@?s@-azjZ&4KgMc z{vjI;3ct)26hWwH_<^P!2)vbMqRR0Algz%*AbfWu0tmGQ#l@DxxCAXyp-jW6k8@Fd zqmRVuT3Wzs9x}Pd1Dln~-ap|MA@vm~32R!FmzS!Ym4k<4#4PYuZByo08On_$t=VnL zc!~nYFEJFTfNk7m0#?O_*jX$ck(gBixiJK=s~wdVQ0TlwJebq2PpC?VK=Bn3Z*uo9 zsF+gg>NwiB4UjSdi*6hYr7cUTYNLp!p#>i0bg5dg>+YbLD$A)*A_JPx#A3_INBxu= zMyr;`x%O(xX5x6`<+rU`zgL@IGl;x7!*nM4$rL5US*H3&AB zOHe7OsP_OgO4KW3PNN1^+{%)U!X;(BgQlTK3?-7tX@3mq!vGCOWJ~ZZSylyt|IhQ8&(}h$_PLBxCH>}!a4wYFX<|L#<*AjG7e%v zrEWj50Ef_V41sQHU1(F7MS!}fF9FQYrXgt|8YOOE@hX@k>y=R;^vZu@4Xp4!;4wTB z#xb0djKjkfmw!;2B1hoL+Z3&Yxd*^R3<~8I5J5)^l%%L4hE*Xz2Cf~q07^;%k!#_0 z7V6az0*)#l9uF7l5fh1{#QB`f`m?y~4R-(mW+;yWILqJg( z5fw$?CV#>866}YB3MJw>+-1V0lFOL$D7VZ&+Kd8S1ZrQH6xdP_l^7}zm3e>E&PI!f z!X%2Z!*Oa>`z2lrJ|fjQ?H5cUH-|79)KT04!7}S&pr=5trbb)p7{~Q0%whCE6?Bcm z>Em$Yr5<9$T2x(u0Z7yig0f6sa6-vYb2*se_)8-eW^5keG%uJ;C`I)Ru^!_LxOGs( zeUOkuftOSfPVk9|%NoQ|4LF z8@Phpt8uhLOTmwLW?dpwq*#TD;65N@GK|JC-Wu)_sP@Hfw^G=4)Fs49?x9ko{R@x5 zVNeUh7cn4HbU<=(n`7X7SNxSSZZ7brn|H{$&cp z33S9R>LpU`f>CJ~G1+VZ z6i57tkCXgvFpgkG&BSOarfBSGxF#DIPS~@J+KX9@xxM~n_@ImAx=n0X%@SJD#9JBA1jlFSv8j0fpCCxEK#GD7%PHYxWlWMOrlz_ zL<{9{Jr6|Ks=ypYEfA8dSxanGRANqxgHW~$@faOAkHooTxG+cL_Zs0|?o-}TQXKbsCVSmjL{{UzwC=e2W=~yPyvcT>uP0QArgc6S|!Mfp-2tk7@%+KA_Whv)z z;=IK{E&4}zIE`01DmoR2Xka!kFq>P{W$5-8mVhALOPI;TB$kE%S*fNGV5V8JG}2SvIRRBNbu}#*mv#-Z z$8lV`U$bst3JX~BVW2cJ>2N|oXbD4IXkbxTiI$@kmO|>{E$U{@pp{3&6){xE$Ckup z1@uRIgro)_$g!0IPz7rmms*OQ#YKC>G-i=i^F8-b6--dHsjwpj#%e7sAmU%e%a`(67GYK!Rz|i) z`ZosB(=vb^tiQX9Y6a%lR%8xu%zG`^^9EGau)H{q!8{qVVoLHjB7hd6mmknK&UV8B zrUQ~w2-09+5c)0*TNn-lz1f(7QsB5Fcg$P>GZd8F_l<1VoM^z`d3LzT(K1YPOkrxw z0VZ%P7%Iu{xXan@XS;et@JZ$%l6DISWxt{du5>_3jbxR9pB`dcV);;)2`ZRvE4)Zv zJj<$scDk3hW}qA-1dOs@a-qURDm&3jQt`4>!Rl*02}2Z4C4|C8V_d0jZl-@flAt=A zvub`yetwIK&rY1@)lenT$0*qAFB6=fa{;^DGU z1+2=maGS&82eTe#n-mNWEVRv{$eTu^;41MK(RvlU6PNS%YwMiNOLBu2m2OO_`RJnbg!1Q;)bRW;)bo zRq=hxxZ7o#CQabRW55h!BubwpfLdpk1X{7@;3X7|#3BVzaV)>#daaQPeTeLo^uz>^Feh# z^>9vqnc;rIy+2{q{es~EwyVo6y&-~J59%zsP`p7|Y+1HVc=Wijwd7(726`n!a?0VHmOIk0_AAK6{=hpB)kR3iRC`=8;Ag36E2bhDfgWa1zG<64JEZg-MNI!En zQSL9!)XaK-70g%bxvTmwsDn2cB?T4-9~xl@9{#LZn=+VtivndY*>^8iNoK@A&Y0F~ za)_O_LVr+l$0Gj#xQZ*nt~IrtW}g6Q8R4031BtkASZpvTRXPVVeCIGR<($H84l_t@ zX&JY~?bQ3nl^1YoWph!ogoa)&S2lx6*t48O3WZ`osS?D9Xe$o|1=Y|0>E zV2UN_U{C`b5aNFw9ZjbB{{V^9Vp#lysD6CkBC(z)^d`S?I~_l%{Oka+H%2x5cS6ny zzua{+_>a@z-x+Glcuh0-5J&KT+|-->LMp-X`+I cJwgl!yfV2Aw0VHWAqeho4SWzdyyy|B@`imv>;uP4$>ikP^6ax5D2}ffFMMAQ$jDHh0t3l3etNE zy-4r9D(cVc|2}s;cdh&C-aE6-o0+}Nn$J0FX3yT=nZI*?SBV(3)wR@#?%cUUWb>~Q z{aqwdA)+87BPS!JASWlMq@_rlw(Kx<}8<$;Qpa$;QF)kXKaTA&)SSgX8g2 zL18g*DJdy#0a-;E2?bF}DT)7i$sI~cN*Zb!7Ft>siANldB>q2_za2!36ePst48(VM zi0(4pA!fYux0{HYi0BUKztR5Bfd8*@=Poe`DH%BhB^C8Qg9ZkoyLX6*?~)Lcl9G`8 zvkv{&Pej5<%JfKFne3jSEjf=DvqV@@J_YbaO((!;;*?j?&O4lv>iz>3RyICpN9~t!_ItG=TlA4zO z>2n6Ups)y2TvA$AURzh+(Adve<6Dnkc)kh^c3%exhW`v(xAW@XgPh#&Gpj`i znmb16iRXM+Xsw0^xUTduC_RZ)@S7Z7WK*mJ@64h9*T z1NbK2pQ#R94N$Iz7AR_{HCjV}lh$W4`_e`NRQAY5xt|kTHdU2;&RDCf6| zePP*Q$-+lFoQU)!E?K|Y^>#S85F)*gG%e0pbVcvB-g)4$Dhp_3coKW1h#eLwcHvY1 zKsCR4JDcx%BcVg%EhaQ~RVB}^pT_TH6se6&$*K?L`ERm>gwfzt)Gy|IWnpL-j8Y2u z5Yl^MJX6G2c9di(rYj%C*OH3S-Se3k+MUu&WX_PbS-l5qw|E!`(A{D@!Wii7K2nY6Y4y;b=b+0{Er|gn-5)$uq zjKQ`;RMzYA_Im6R6}x`tzim-Od{lbaI=upJZGIB}c@;9J&|>uF_C}vB+k6T;AObjS z_XC4N4XZZ27#8W?93ej?K8St?f*H3(g#9p~DdNfiTr)dsOA&ZRTjt;cE3mBN<&w0cgiPPfp=*g4Xs?B;Hl#gx@P z2nrVxWFSaG$>mwR7OGa+Hc|u4ryt~}AsKx(N-K(4co`$CK;0A-LyIr&cs5LE7r-QQ z8bJH8wL;Qmx>8kuxr|Pkv^l4b{^uUVxft0fTJ<65W?(Z)@Augu2rA-z*Rb!;f zVokMS67sE)$7X^C+2g>5ca)}^g!5M>s1O?(mkkbmD_<5Ig^#m>Ifn3b@(^)9=PHQ8 zgycc_MDc}tno8)3xMkVudWD6R7Cl9`^Y}C&K|)sSDv;NYjxK*@V2hYi$b{U6miS*HQxUPZ-S=TF^iv3@#&R!28~NT2F@H;E)X1EAjXtfy^_pM|%#CMYo|2g0Ad*UC&zLw{g> zmG@m_Hmc&7?Kuy_Rt$JGZ@sDh4}4GR)!}AFxW~Xw6GmN<_GmqGH)K@0gik&@?&RZ! zTy7HFpNFX$x_^aYG0B7@-l{FL zr;Sg=_4v;R;-c7p7pe~Bh2Qw_+LxYmmK1;3;je02)+Y1g!ohPW`F zx|ij4*xIn?0$)M-wI{Xvy2niC#3)9z|PAOXo_89NM-1_mKE>qW2o1zDD2j6vS zS2P$(dleBpeVKWR`{JD?&tDpya3aiH^(y6vFWIE=6yq7My6Ww3x4UvTt@O7)vLx}fDzrnjt8QoI^8Upn) zu|viCd*H99S&VbD7_%R!A>%N#r5cDfUu#sW>Va6H>4>g~aA*m=UXd8iqG}g)^Yqoc zF(owl%Dhd3|EbVj_)1-|*5kOoVKOmNCym0F-J6k|L6Bx}WVRAKGsoI1&Z~PtuSe&| zZ#!VwoXCh4S$jVz++-A*7HF;c>kNW@{8*HYjhVxN6YmHH) z^P5D-9!G1j`KET)XR`3#_Ge%E8hi{j977pR@nFaX4))9+tnNI-b`rL+&Yuc?ROFFb zKQ-c(z*K=_EXWchD!G$_dTl=fu9sn1mijCM7=LgM9Ui5+EcKa#umk!#ZBq>QY2Ope zjKR;he-?*+d8K98#e17E%hXoeTIUQl?H$)OJBlzBeMRo>+sO*e6}E6RlI2g1ov@-f zyRk#b8*1tTb>kSMbXSa;YsfPI9nB zUrs@F(k20ii94b1XQHGp#Y%+Kq$~a`_oHH(b3f5}s{}N$UPgo+82kYOKk$>$UJ-_y zUrVS1XUb)J%ssYCM}N=y+%HiVD&fIXXEjJo7%lYdSn>w&GD)K5hte!hjjmH_CIaj_ zJbqb5gxw&2?^{81Nc5A1(O;^OF_eCADkcy;5U zW`BjFJQqiC65At1Y~AThF71B_zQtOP%*`Y6ID6&)^BwJZ-4MXq>Uo6{_%BhLwLT{ICxeB{cV`0&(snh=bWIT;($^EE zga?P=enhRy4^$jc^>H}6x_Q54+vaylJx-e+kR9Sc??$oVUIn=gay$_NAsF>itCQ6;(C(b(*DswY&PO&1C_M*qHU2S%4fkRqwl1(E6U7?7X z27vY;x)or+r7ODNC*kUc77g&l$|bilh$zs7C(=-*Kh(J#QE?VtPI3Z9-Yw!UBxc6E zJ26`{j=|QzK5H5d6ianDqbo*71NKZ=*uJIMFLx=Cnum*eBMmGT>zb8vrVAJzvUUKB z)9RJJ0tW+g8%ygg=!Hp~`D^FioT76ApE59?8K6I__Yq8UC8-P_>81867*j)LWclP3 zskH*S$|^I}nqR!DRs2SGIUuOY3U9|}FL1-~3&bU!{ zR`=~A>0ap#Y-}m7TIlzQBpIzL3O*VL_K+^xU0KjRUK9vZ-E3L&!8U_voS`w9^ z%G2z!6NYQ%rVY&*ge{TA8kF|$gqHk@RvU@1iHouC@|>FCGgkCmrl_R(G$5*#!;FMf z7AwBER;vb!Q68`Z5N#$+;*HU1TBv8*)`Q3(bosr8mFPXulZVlwdt}PHAc+&0#N8y(J69Ecc5g12LieAhJ+F+m zoi*%D0^yzbS_n^sN`YYNQ8OD8d94HVek|h@TWFu=S{zuJzsL+}OwqwX)p%%;40~j2 zRVa0?V_XLG=*423SLN;?QE$L(A>o)eJ13iBA zPn#=|fgRwgw@%Tjt;nUYmHfK#;`Z19(r&oEst5g!r6)Gjx#kxReraq_dc4vocBQHG zo$Z62qw;yvk6D@hvuB?kc8LTroHmv-W~X`6iD@c8q%rwR5`bj#C3;c=^h&y17T@4P z&CYB*m(GpIla7w?wY29WmO3AJ%Hrg1Wzmw(O3%k`>n1Ce?Smf?DGU8d1+N?!cx}6L zBw`=8vr0jYgg-`Za?!W@&rH0WG1Tnh`v4x<`;VTmoleQ=nHeT~S^4X*cLf~1x@wO) zy$~W;;aL}Tn6I5cqCqIENM)cND9?qVY`tvAMO}L~o2tYO#Bb9k+ODPyZW(O$XlR_c zb}X-5q{CVnRKyWdWD%MEVW%48`K50fCiFcVR9OFcJ6ZzM^DRrC6YEH!wtn|ri^-F? z)Op*_W3RP$MSW#}O;DBg&t6BCv1WFp7N$y9ZJq=H&`6G+P`fYpa(A6*p)cr|2>{Fk z2rCKT8*EY*D+=+WLRBo~v-hzQxv)cQcs@jFT>;IqP`@=~Q8wL$+r9Z^WKP@4IQCgA z?>_+Z3S+41Nkcjldr@W!YQvC*x9kYQ^93KV)0Dm8HAU8zVY5SNomCMm5od0^jR6)V zbQBLbw0&)f?s_n6!seG$u3V<&nf}#Vy5knASa!gcUQ*O{Z&_aR0luS0chw>|)8bGf zS0ta+Q-ZR`8S=YoLH^5!2#tHzW({n)j(=`F{LCH_YL>NF50bQ@{Agpqc3I)x39E?C z#ByPL05}u3=LN5RZTRboTaa^Cmie+JS+WzC4^3KTm7|sKz9=h5W9 zkA7)j-y8F z1Nri&-c{}!Z>8^6@lp#rNbIcCh>8p|r7Fs^?Ru&~+M1ZU^<)9eSg?p*Il&~~Csx(2 z1XY{NB$VmdTO8K{wU4`&5!Cau|6XDYo%@Yc54X zh%a$Eg~>Qx)1-j%P18P0RK>n>Woc`Udw`h(6MNu{@*>WsreNs>pPqyyYTMkq2r~20 zkLoAM@1e=MZh@iU*lJ(JI7dpiAzkV!L&GH0lnt%wIF>H0k1cyFw0l%4%}$ewKw`7r z@N%H|Gaf_xQYxdzz|tpzCx6dq`?HBLUIGeQQsuS00etSFK{!+*B+l=#dvMae*0Z9Q zWY=2E=D|{#$Ve@a!}jp&f-rxPvi{O7){^}7DA`i{o@sIUWQ~F6T*+0DSCo{9WIXk! zWg9gr?P{L%jFm7QE&jM@-era|uO8WxA|4hDRZ{1S(JXAA;j2 zV1si~xSFNaL{Ibw-s6v&-hy2ZH+@SB!6Jef!b;{gRQ@YH+(_4@g5@M3!YVX9uSsPv z<<8m9*^B`AuYnfnVb5Bh+gXRAG8#&90(8{=G0daSyQsWx_p^iGJY8l_lNYaCrTCO{I3<-cV-$YBz?3Fpn-jrG$nWHsg(4{#lgYLFlL0B!mHVc8 z3*If_^ANR#KOl7ThyLu;+cT@ko|>0w98fTppO5y)I{iLo%T8RpEiiTf>Pe z>W%It0C`>>$p@p$eK~yGzSGNV_sMibM9g5}jDgo~9}Zx%263%Z`4!jfVO$O0wM*JE zc0)8bwa+y$DpC&l*r{&&>`s;)RJigv`a18VtP3J1NlOS<({a;&Mlde1RAg`5;5Y}> zAnvW#QIt^fZ1)2FwNdO^$3^l6M^}}(nx`xINcsgB!}t!6#2HX-Y+z#+LdM zhaBx(by^$avwx;OMO$r~mA+ly?Wjj9_kGg~;uPz9RRt2S#pU19={tTfw4&M%{zoS( z$DBd9omKUwwOth*pe(cK1wIu6nV;pI zrMw4LUQ1`be#k5sV5vL1=(?#5)-*aEc$-cJG5DoQIvi?*4+8%{K!)TeR z``Lk;!R$Ld?L~1Zgvw{xJ~MCbwkJk-$*GDb%b^DY$~}YXX203(*{%&q z+w4|6Fs+B|+`N0!aGc&55=rD&$=}s+8=Bn>C3DTuoRg+x>HiI?(vmJEx?|06YYq6` zqGoxX&;{^uAzygMsL7|&Ws?vz=BndcG>RCFlg=L1a!zRy2IdFZdK}a*_IAwzNI<03 zi%dr(n_&h!s5{#+-}KdOF3>0LN{)D{mQy--+DK`R#CyhFxXoOl9~>a?Ab(LmTAV?< zPtmt1>e0rSbt(82gkh6+3Yf0$B37siNY1!Jy5XHU~+Qp!aEebqqOm>FHfC5tO z*p}uWuR__D=-Rz072bDK=K@Ikg$DD#15E}El!)AnJp#}bp zNpzx=D!Ea~l3k?=!zi*3=ADdC4*-|Lm6#bLa<#*6e@C8g*fG;h1AcGCce_2lEN9`* zdK7AI79yEqTXcHK=bTO1X!Z01wRN0x7*oLVEFuO=hUR+o+{cdPh&YMr< z(X#{gi=wV{Ry$Y03CAMC6Wzm5E1A9wbM_gpC-bw4UPfGZioZ#B7cOM&Q0RJIz(c7} z2I`h$8MLapOpOjw-#jIPpbmZt*N1*zNaqUtfHX2Aa71Rv#2CDHd|bKYwUKw*JlJFXCBIOZ!fdEiK=VS&Jhd91h+Di&>qlMw)XUO= z?FhMPW=Ni^pbN18^B7n0BYvH`9-D;KdmZ`r@~}ehsCtnKLRVQui$Kj^=<1~VGR!~L zmf-8^%wCq~8C`OXqKiU(E*S^r#!7ojDG*V;IdZVtoV{$to^e}N0^$6nW%<_SWkcGR z&1k0-DunDJ5(yD?;3PE}MSNi#-|kxvEOF?A6el4`Ke86RIQb2ntewTZEWBG>&{88K z;yCQ1zb?qz&lvY5sucb-PNd8(Om;OvyW};yj!;3ouDnI}9g*=%Zm>PY<5u8g_cS~+ z#gXQCN9tqtkK*pG*I-_o2kR{y$r^*u9(BR`D*?5u1LHnMkMLYtyxkoZ?1aSzyE+1m z(cu<>wJ$FM!vz) zXTlI2Do41LTE8d!y|>U)X}$LT{W7OPi?hxRo))}aTGFLCvrSF)mepS(erSsmdSA=z z&jq@2=WdZdn79#9F2|ctT_vizXlLMxFOyFBDWqTg`L$9>n6}5mXFQyX19vtI_ z>3YoCj*wA;#MNJ-ccTw%HhhRNKoPr~&?BNEr z4)A5w6f{@NtUw3ak%lNpbl_#1Ws9Hemgy zqEVFh^$ij>(KT3^|02Bf%1@4Z?4BA^YC{~yU!s7VwBeQgn^|EUod$Zx%ThYCb+mCJ zh*0t&7Fcs=)HP95551t4e=G4?EH?HA=luC`2TQrZ_M^x>{Z4z;_@I*X$A6BYpbAStW2Ax%h9H}5C}FyGjXL_I*VX`eIO3$_B` zkEa>D3@w+{+)9E=m7?%?Ul4xQHSzs_yZ`bL$xF$)2sYYdUzI1@KQfxUs>;u30+otu zx4z=jVk8)IzU5KpObd0Z2=-~uNNsR^$XB6M0|W5;w{_>Vl3ik1c*AVv! z=GYxiAozWYZ|}IW5u&4ORFqcp2D$KgHlYOa-eSvw{rWbpTTOeY{dq4vxP&~~K$B!V zk=&?ZxM$m<^NWGzm<*?oLyq7B@8*ZIA}wQr6Np0ABdRNL-@(p~#}Jn<$4f6nU`-^l=oRgR#X?_JDCiAs}QFwb}A z$uZO!aG%NUrF>zkE)vtHbqYtg4Yul0q5Dk&7zA6Ryz9CfvdRs4K{fWZMys$BK+w8F zPS*@J3Ksd<3o6d`Yjk!Kr#$wQG|%)<@h<~}B>+n+Q5(9#dQcQfgbhHNo#}4_nk_~;y^PF1pZV92t_!I7)ITLLqf5&q|Lf0PPhd1YQ@ED4TJTET)(0jc+K5@zn`{`f;|VoQV|~IcHHu6%w?_r!&PX z-V{IeAI@42?F*&-NnY-1Dx`~Qb(z_6R(0|^VnRnANxVnT;inv%sPrflHOu1?rLO?{ z#yJ0c@Apm>qc8pga;z5IY&X?gM)l?Dx(i#=x3N$5-IA z?2+Fqru9!GZy)bjRWdZSjd7W^pkQ1D={UY3@9shx`~kY6Bfm=&Yfu#(g#iuxA7Ef;e~POftA9H=!b`!rqI|8638WX zKAUb*gQ|bNvoz-!e1RY`{8TqlED)eoNZt@MUgnET$M6o9Sl$&k-lKa&Saa&7CPEtN z(3)_!rfKfeA^d(8+7IINrv3$`D)=ep(g1zKEQp2rzNg9A5o|%d;8RNw_l98vRJ$SUwoFa(v*Q>XC#={}8GfKUYW?KbcI}FQfxpOWy>dsXjL-I9R!h^F zhxgForZgph30BL2z8Z3v;5&eTR4X25giq@;LB8ONF8eLy8#DhjEJ>^W1~cNsgvxRo z^-~q^H@Pm3Zzz20@#Z!jAx{oorbGg_&ZOG2Ettw=FxzNBLdJK!L7(oTsat?5OooNmKv{4BychN(_PMaHwhy;-|EcbrpV=zGvO2Lc}SJp(S@-?F5r9JO@UiFaPa4_4g z$eK?`0>kVzb0B1=!Q868`Iip4@zg?b&VYk_0lOMntH(_vX#eg`#4ADT zvy_;l7nx~bxgbj)yI}v`C7hP@{Jo^uEA0LA*Cbgc-=to*k$N{S5;{%O{`?sY+8*PU zxNCA{vcAMJC)mdU5pML3zNqK$tt>Zn3knF@!%DuNwwVv;;=0PQADsOs zzGlWP27*u{zr-9!{Hxy58=YyWCZ~T859FEw(>9GgQ6zPRCmto1mNPtx8|X8%&U)4S zCN%4-y|tGG=U<`^zUFQPq%5^*ot9@-*-`n*dE)?mk`VVqG&~)$cgu|pmwpDNF~8wgi8aM4%AFXbL1vhK$}Go|`nEtL3Kwc$iHrOtQkcD+ zg}$b3FQ7PDXAE1STEoQ|PO|4XhV+V0vSoeAU3Igq65y0oy}F$_Dv9#>s73tom3X_u zPpkpgrAL*VFMP}|5ZP^#GBKA;)!S;%{$SiF;=~|IYIQoH&Mn7Pab66b_!K}SwF+;~ zaJ}c0MXS=13I@NN=5ZURRcFhhefn~O$H4VlAz2o!eyzx(`4Xyxf3{YVYD|VYFUdZE z=`spb`lL>U#0aMdftORMeu6=j+MB} zXl9zU^JqwH{~)bCOEr&}cmZ4whgaAnmbv)K1N2R&b`l5R!|!)|R6PHH*oP=I71cr+ z#A6vKjwwcv=$#0uWt;l)9MvDc20ETa1~DVu1K}X9|HuLY%w^1Tq|D+|zYPbByhbS9 zo0hUWJY}`DR*e}0L}bOk4`#dG8~uT(U9q>{Az0IUi#?Q}wu1TO_+K6_BO z)~bymT04`=?~%H@tPiu7KFm?GU9irQBlK5%nL9IkTK^cB0o&s9_UjTt@T+gmGR2C^ zEP!^({XP1#sqXV624Z}r45>RF5n4epE zW#O8hj!Dw zN(2<--CfWV+XQTP{E?t5CtamjC-cUePQ1tc2e;+qzfU~|-s=0LkkCP#4C3yE9p$u_ z;(GGr#l!Vs=O);p`%~6?$BySd$G1{Qi5mMbLwhpZqDB1;RkVcc*c8CpFeW>c60lc- zi}iw9|Bl*DBw!hNvT9{KXlF{EOp!N~txmTy6-a7CzZpt&VR-UDf1 zoRy4xS=n8YfW|@5u=u;_Xj)?4X9Po)d%X3WGv#p6rR2)`rg>}< zIz;j_ZUX`W4jQG;kDO{BuKi1xy{CxM^=q85bC=EUSn61BZr7W!5RAPi%BtoX`AG`> z%)HAm;AL(0P3`a4d3Isf2nikw4A>D5;}#K9k{A`o;~x-LYg>Aw5KC9&riFzKEQX6E{{H@85B0S^tdw{o`m9wdC|QA z@8^GxxcQWvW-USV^vtyrj6m8fz!=F#Ca;VQ;BOw)Hj(oDEV`_;J~7C-x{=KCBbtn4 zohF!^P7AdTsro!cFG=?lHX0mF`D1K!{lP;{8X{NVyI8U9;`o1ufhw~}b*-|+FnZ{5 zmycc}`WzO4Cq@+^o*QeFQJ(Jm-%dYqNyAm4W=4Ax)i@K_==I z#y6;M_Wxl`O*A+T>4TgkE!cWf)BT2|)Z+E%f+5ezStin+W5MKmMPCYwJi{TzMvO}k4w zEqA=Mn!N7f6l*vhkC@ff^{;FsSydKj{<)t{=b4ACW z*5?#+(7{*xs^F9#Qh>VosY8Zg!%FkVZdX0bRW;iB8mX7?; z%0tIZ@7w8_rKpOv_m@Ptuc)`(PKZQ@-K}$O4%`~zAjmGiD@=hDG%n8Ke0j?XYhEzh zmp^jb2-Az9RG9wykS)osPuaXB%BafMj_<<^#)P=xnd^u=ATw!r%j@pcJLcw+JLZi} zb4$kWFbl40dV;WZwaL&~ZK{FcEvgi{wYY;?eoNE-mne$&Yoh_zy-!McCM{7Jp{7^w zbFcE7o6LKU;hP?nZHy+OM_i-!>PREdd(p=&5fin?is+fC(YsP^CjpKE2oa}(}%Yt^EPOhTd; z3g>%oSXn|cRM%O7#_38Sc1-kkxhT8B??2Hqy0}u86pKEu3}hN8YbPE--)a5WH(P4) z6Q9L<@8D}dpTb?)H}-_fJS?ouSansdajSEa(aLLR@0Y;6kto1g_ImK772u~PR!}IZ za~uDR=D;3SvkXkAR~6g9-{5K@x5V!iL+T~UkAFpF?e!P+VW_(+} z<TYXAS;DWi8SC1ng!Zl4>&;uWC0QD^3ut}aw%z5Dl~-R)C44Jw8`Va!g<#F zMuk?Y7k7AF{B342dn>}Vc+>cRZmL4+_;=9QF5x6gCR~RMcw%mecdtIH!Po8-UffR4 zXB@=`v&d>u&L*{FXMygD;jw447igX-SfD z^AhCvqZ~Fl%^8K%h5|C(tM;0n(~jLs8eM}?3`x`Iv2d$cdKW%Ej(=UL9scJM#xf2P zTraDq9|K_GN@&|B<$Pe)q!AWuZQ`Ovy^ zoMAXlIUV_WnUsfriHPam${p3`bJ@E+VA5d9jOF?u_-|c}%Mc3Ssl~O)2Q5t2E+%ms zY`4p})_AX&b9m*vWivZ^k&scV_N;0_dSCCE`0XYDz{zzuXhE6&?6bGbI(7g~@n{yc zXG|r&kl&1wCA;e#jM|Lz3;G;lQTuYUXllcKXtc1Vk6pV-6v z*tkAnWP?GE3y{;PNXv$(Dx?c}8vpKJqLx6wxcQHG>JKIv3dM@IsO|19My?WoC9USK ziD`D>p4-)FSGS3uz4Q%c8u2R8OHbd>Dxfa#mL3@0%cZN`6fEmLzMy|-r|W`oI(SyBGv$NPS3_$Y(w^t;^ZrWj^_dwz z5U;l0Tehpyxe?*fIbD5|QNC0$aE2G9#)#jfOXH#5RBi2*)q{bi3!u&1fi;dp)uJX! zlCDH|s7B{GfoTQF&OuiBO}=M|{J`32ctRH+(BpHfM);%*(|Xs(t_ZJ@apW5focFNj zc0HtPx8y?hup5T;lR)5uP$3q(tWRzcoN9q|f{Lt{-tnJ+UmC)`heh>02i zftr|o!q-s!Ac-O0j84NEfo+)>DoW?)97*q`vUslURouVEc`KPeU`CMKdv?*5Wg)Hpe=qKw+n0dv-!@s z-Id)3Sd8FSH-GYay(yN#GIrKAcx@>2xgWPAv4V-6Ls`4|L`2Vcd3MII<=hsXY^BpS z87j2Mzj8_4Tjegr{=YNkLoCNnfQGRtu(dNv5k27@8jP-<;zR^zWcNGw*bD8Mr_@=! z0hLAHYz^8Y`M@7rD$F4-QejxT1n7|SwPBFB^tR6mBAW$c?iFs z^uxey;kz0iO-tp)hm04$4BRPYxG*Z+PE87MZE|X1*YtnPlNuXqEX-;x5gXVCkXKjp z95Bz-*S+ZI!hdx8F!@iaU*)+Vp^IZ9{Y& zd#po)A{X}q*Qe6?$Gi+n{t4tiCpn$fZ0n9t$WhOLKcG=fl8CU*F)5<2PY1s~wFbpF z?&%%aKc4hTkIn3!>{H4cx#wXxjv9`CB}(I8R>B#$UW@Vj9=Qo^(Dm-&4Jr0gUiZ=> z%(KJP4rfl<%{HYqNBq;-E+4R%)6Mkp&SuOF8|kS_T4?LtAqQ-)pH8IUuVe((eT=N= z4Vs!)B^php@x}BEL>Jcn#R1`nXG?>ask$JjbFpP#X*U;tf1lFy>bmD~=GPZk!-Vdk z)1`7jbM=$A+UYt#Uimf8{y?xb!ka8;%C@z+;q7wnCxuujx8$z3UhEg4C&teVChjBr z(=?68Q!Mi*J(g1A9p>cjS^d}G#j#)!t<3a{muf@8@C6qI;K;^VfEtzkQrE0;!MZqf zEXsqnCJtd6ITkfxV*7b(=`0^1y?C}bY0g?lz z_MqQf?mvAdaW)oo?#1A4#g%4qqq5UP;wf7Zsx7%m6Cc$gtLD67@iVcJOdqy`kryjb z+If5y9#HN-p5ieFD7AO=rsx%-PNYif2{v&qcWM9z)O%G>2!N^Y>Jjnge5=%KEpfEg z^Cb1Tr3-J|dM!$j`f!}T1Nbg9NVU_wW7ZM?*U#8@-u>@haGLq?cL(Pm;scd4GYbm? zBz~vmPpnC))a1cCdPb$kW1|P_&gRSQl$~U`=t^1z@iLQPMj5yz;Za$~bZjQ%dq9B zsKzM&FXQ}<3Ds0Kzy0WYdL#OEU_)NA9NHJOGHf4+)tD?NBMc+-$ZCB?nEt0(^JBecuo9bM%pNNd(%Ye7fL- z%x5aAuujRJa5=OrwA&d-4UGS>I?Z-V-_6BUe@6OIMW*{*NW5HxHFu?pe+%t}#d7b9 zoy`;uvD?{+)tZS4oPd+dBEne87gKaMb+#bh+^R;NP%cwSa3C~y6piVS>*(34y{b)P z{Nf>LLJrG-v$fRhPlQx%FSLAB$uecX86qv^$tZM-&_(Nu-#|PIPnM3c(MFNc`+^d1 zW5b%t26nFdj<1r_k{DF6oIZwyFZcTtE0P481Sz{e8Q2y5r zR^^IC`gPydoc7dyl1ClU+!X7tJx7|u!gG&g`?*Cg5=L9ynFidBIA>2}ftMAacB-Q) zHdFSbEcB{b^e?EN@CL2%evJXtNy_C=j2T_Si9KcolnPg_8mW~L`H#4`-YVSGuo|)? zdc6a|KS!6Y?CdlrxYMIVn0*fZIoB?X$I`%-xy=m=7IG_9x>~OmngDRv3s-LRBv&B% zStaeAx`mwRm&`3S@h;UO?Z}OKg55naAqBKwws>(bkXm~whrfsZosrGYhLSr zS@a*253`Qqf+`gU9(ql9l~D6KYyPqzi*%dn)?RwbishNVFP!s??MNX8VvxOg1B%QO z>@WH9APkLOm_bC{Va~!i`i*9 zkPA{?ThYsVruv-fN)3Sjz9bDB0WK6_)!PICw7T7<$3Cb$j#UQ|BxBivbH9A5Q_8wh zcvf2Y^_`^6iWF+>#w7B)% zjpjyFz~CqAuF1S!QsdT7!|alYp!ir>=i!8Lac1V~{bVt1u7I*tYbN zcB!SA52JrzEU!&sO1UwZ%Klj2!7f+iHLU;xZHYNc1t<(pHMWN(vVQ}Z7{`h zZ#Qmohn(eh>TN&;=VmXt9w?=C#)CTUeJN+%Ox<_mFM-q<8FeRSzrc^rb0EG#EQ3s# zr}^`*5DXo-FE4B3$#LG$+ds=IhOEiYl+CAfgeRR|rf5GvEkrSiPv_=NbWG;+=e9v? z&Xp{9e@!=w%v~{~lsv_uc|P1vkXCx=SdR}@qcbRy=sU(m=3rqjXLNO9%0e^TL;+6# z#&etsEkU|i;mJ}|&FjT7s^5X`h6ME1j{Dq}_dorVJ6)zEtlnXj9%()+w^gAXQrOs1Uoz*>R_7#6bgH;zD1Ugln?RKM1_Kthl4oD~PY$_eljL zz;oE7HU>X3$`N0f{@8djNT-MZa{f8UuZcsmjDEw*^ub2!s`qX9AXyk)s{*sU4z32d zZqk?4HI_ojp^-XVnSp{vb~Z&D7*DzK+q&&c@9|0oDhY(Uq0Uc0)I1~l(? zA+cAMrY}5mVlunPA+Wjf^F(U4JhQs{0{obq*HTB;%)!2;6VzgNn`$+7+n%MifuFe= z1`mhm;Cpm|6b6Zcix9>X0>pP@APE(5KEXbat1tLi#QzamJ^6*MYTw=Lt5OHIQ&73M zLI?ynUp&_vGWA$0tpK9HmS&kfcW6?hk^6a46|Znv_NUdz?Yt%+w}$aCW)Yoa%U|bq zzQ{rbSEf_bEG5-u$VsD9_i%)EuyB}|Zx^)=>o--Z!yDIwA=NeWFQ~NF(~G%W9&T5e z&;R@?Nhb-}OqMHuJeeTLG&m=2UF))FT2tg&KamY1$AiDh5KE9(oPd;lms6Rr5Z|Kg7g_3|aA%5$B}#B{P!; zKbg#jrqH{Mx@a8fQNoPJUJEWVs|dtS@)e~04C8OH1z{7i@*9%|H0R$99D+<>ee;x3 zCv}zIFwaNe8HTMvz;uTCcpXn&&Bg(A`niiczoRJqWL?qpoxeno+-$cLm&>v>?DP-A zJVpbruoFWqUuL3X8~vJ!f!D>U_7CadTW4vQ<8}&&yJ9$+vz`nB~C}Zf316}%__-bw(CFsiDUO;oXr@k@V^U^`Bl1g1d%Ih zRixYX4bdGQuFQ6<^fRXD`j3tatkcikm-hpHt4QCmFtJ+t-LNqTJ~$A1JG&Gj;^ll=wx~ zw4#b(roOLd`NUTeHXpm6mo(C@+87<9rGo1UTzGNqiI0D-lBG9Cj`E%rUoqZYoN8m} zwee(qvO^{*EBmgRzq)Zm^96@{;G~a$ZqZ+&%DxYX7LEnozeFeYAdasRIp4MOG7D@B z*4w{!%So~Irk^QTY#M0WS0Z{V-TCUX*K(xQjbp{C-crY0Pt-R_4Pq~*405|a&NL0~ z6KAot@f!WpfIoIk|0sU+oUGiZC0AJwcj;7{bLG9V?=otnVI&`6_F}D1#aQH5&w$mp zY9Hfex*}Wf3GZkQr}gbq^5G?NZm>%NWAb|)s<8OHS-_vKWa3-RQdcua=5*(3+@>FQ z1I=Pfh#?})MI*F25UrC5nq1%$>J#Xv5LE!5<|Vije)}%{Sk{(>@tmzy6oQYImOh@6K; zbM*H|r*aFp3fN|4b>h+Iv$bj0Og<)8-i@CQ$~iTfTb3Si*^FO=K+#jCg`|P$C7m+4 zdGR@P+0KBvJCC?ny2d5SToks{B&-G!&^G_V0T>`JJ0h=03!RF(;857^e8#1YTMxJxo?{lj1=3?#ZRl8^^De_A9V_}QtfAD zKh`MB#e<3HQSs)+TkW?LqxO-H*-lITJZcNCwhsLMCU6|{jE%Vz=fkx)J?e{DmNI>SzMdw!`j52b zz?i|6#8Yn0e&0B>U_mzFymstq@F{rMvJ+W-u0C9wl0~qZLyLOi?&z|I?iI)TAf6pJNC(Pxf+4KMZ!W7MSbz!R1l@E&gy+j* zyQ~$?jOX4NZ!sQI@>g6UK$RK(lP#m@$E-}l`>q#)9Y4O~UaKP%{jNh5rFd(!TbmH} zkx};4hH`*#@T8DlXe%l!5F}uR*BDe-$G$oxD)^b#*1#o)omOT)?bLlPzZF{J!Oy+8 z`6*U;k$jOm-N|+@4sWQ}5Z3S?UHF`=n1Es0=5q_zN?1C6{x~e~_AgTOMY3Dl%#Wi{ zKBG8T0rP)!zlr>RAh~AAgQJn3e$RpWVHF2ldp=o-xS>p$Aqa@=P)y*K;cnoWNK#Mz z>D>>;*v0g3-yp6~{M*zWs~O3=o7YyU1AgN!J9e!9&e7oz_EdQ_A9=%$bv~498uhG^ z9L8Iv0Bn~87iu>2^gYQqtxN=3&CH)l3U8?NL(YY5#5#?8Dkg9?1+yJueu*7;BpXj3 zN9W#&Sq4MhFBV1Q&-yo!43&mMBk7xxW1DEe;TQVEQxhBKlyMUpB-_P{#tYzE+aF!D zI%zc}WPv`_d}L!fB@Kyx;e3ZGJq!Lv(Qsl)f@2kK?IpG=N7>XlpZ`?-rE5G}mPeBf zwaLI#&N|XtMgO`P36l`uXRoN(ICgbMD^*BlW}9$PxF}gc9bD zzNfrTz8n;&HA`9gy!08U+3{A~SdnalIe4szV1>Uu&y16nbRvpqLeN@U1AO(`y$GE; z5pPV?zV)I1w|5G1bdv9h#SVjybO&`5H{9=NJjaOS^Dw9pY zL%@1ga}d`T(rmbtOm6n^~LtA+v0eUhzoNREd@-&+{bCquT zG>88F+H0w5bD9K5g)KJ*|An2_BH-ZiON?D5qaMF$>OttbaCzqugDZ1glsy zw?wmRRXcNkOYZF#?U^oM6mDF5Z@q-cer54F!+KPpKo*^_T~ejMt0N3SP4}5Sgx{_U za+Qok=(jZA>Ik@%;4?uCyCu7=+77k6`ufouc^Hn(Q&lLzzd(4FRO9kTOuGoYp&mpc z89^G`qW?zP_%cpVY*IvB()AS)oXDcpo*R< zhOOiQI$3qs@=ZB{)JF6N?67_0*_y-B&*v=cesyV|oQIf_Fqw5-$(2;^m-)$68&CNN-W%j@6@f*czvmeCPQ5OB=BbD}# z5?Xr{BfnObd%nQSkBqhLFD+982H(n9vu6loPSO=LMZK(X_(G?+S+Uzf3XoRXI0YwK z)AGzWY-T8@tp^Q)E*f#a;!s_=mhE_jSlz}vJP}u5Ao)2R#D7p4hckmD-psgD5rvmS zIpk_j!u0h5N}X4FU>zZ`F&gmCx!zNKyon}mi`wovR&0t6a`8^lm*x>SB|?vicaFxC zJHC};Bq&-<1*WE`Fv5LRfJGuuYGCLDMR_Rp#2Vh~uC(h?u|HMpQM}Q>U$96t_-50R zQEU!W-}mTxScls=H1}^^Hi1b`UCP-z!Q6PXZ@1LsyFq7hsjC$ic zjz@Dr0B(_{wN-aU?j8G-;p(?NYLEO@M(=$@q z;qS1vb^(XlcPrfZnC^~`_-)?L%Mrj9m}5V`g@x%LW%XztB6YMUiBdGwyW=k&V4WoU zdJ8vwDb4I!nnCt%ox5qveICOSSExi=Ot2T0vm|B@*qq`b+IY;onu52T=Y)6c)o*7c zHI39_Glh?k!$Od>HCBKe|0NE|EhmF&qH^kcj~sn5F~G*N_smX{8VXe@h9e`vTMfat zJV}%MAK9L+|JBrjl7@;$Rq3#6;ZK9D*Bi7i-{@E?n+bPqG0psZa4nl<;2&aY0i*zu z5q~E!gb*vRF!F6@q<;R>N3}Nox8z#jVr8%Jx`o}~@oSF{X{f7LoLj4t;^%)$P@H`; z`iGN~fi=|hce!A}M0p3fm?X&?@iXXQL=e+=(@XIB4Bczi&xjJate=DfwT1dU7Iydz2F?Rj1g+HTRrV28 z>BUtE6LJ`X5!8M1i9Oh`T8wKH-8UV<4sC4W+5&M;a^Koz_Pw^xHPK2H(@klmrKW_Cn$q;sMa`>L zAy&Re?0r|TLeSn+` zrhD8k5ZRw`VHG*-rb737&H!De-|BhI@mI}TqFKt`izF#n(~MYfdSZsds_I(PMkHns zSv4hhU_)r+sC46Y-8XT83u32ShBmBZ=njwrg!+ntE&Jw@q|6F4_moM7Hu~$#ny=&8>Qev`&E;FTrmPwh|G?Mx~y+;!^;hrNFuOb!UK)VCwAFw6N>;D0ntz zu(C2)Us5i$T9jzX_(1NPnCC{&~bx$ip;P!Ea8 zijLm?Yn1~l7ALlX6$80R7CGa0hi*yrD-rKmVCfOKsxZGo!^&CvY{RZ6dH({0#!C=q z1CqDyTWiIp1*qIIp4DB+n7HPues)=y2Vt?EfQa36#OVogn;I( ztun?tlcbnw4RED5zlQQ##+GM?SCORcBD=OK6f&HcNWRflTsng8g49nbF-Qc&u1xQF z@MB9mxU!{Bb$_H5Enc_}S0AvVXs7#(_&{~7;lL6>+ijrZKoNm!CR4j7zq|S|l=^7( zq59K7-F=74BcVYx%uRf-j3nO#o7p4~(ugJ{dnra-2a>VB5rp~R z!aF#DT5jj>r0_#@bQ*DzE9+XEcdk+4RCXj^1ss3R<-!_-cz@+~Q&e3*Iv z>c7%+@-wC!zFR8fS5}wAo1`cg}pC-srLVkFGufm8&z@Vz`5w(L{ltIx<^?6$Aad zCx8t&ETw<}7+iJ1<5}J2OWtyp@_yZO@a?epHn!|Lz7x4<)!J+z_GAQV;iy9^YzUXC zy09eWjRoFkjsU%t>jf4ZsVHFoqqC~seGm(M-yL+P;Sl#Pfb2!+RbcSF@tecM&-O&= z>+o<*F2Trwy_^(XZehO<+rCKOaK}DhRJLa-NxuBW-x)C3{Zd1m?#tZ+_`Pi&4smiX z?e9DdDg3CuWU~f_a=GfuxNgn*rWL-*spgKOI*|U>s<0Uq?p-4deJ9OVz`K>QG=yIV zheP;wD^)ciBWMG*UuWgcdDy}BS0*=TmRG2Cf19J71}B|01$SN}+J@gYp_H~f`vzAJ z3Pq4!S8n~C)Mdn-ji!2RpGIg_Z8E=Yz0ulY3=h9~;HNMUCH_0Gdhmc6bfdPd_E-?d z02ljB^-53P&EgzOW~ozuxb1P^c&awtlypnJo7$MqyS(@JJ~z@&95cWG9m7nZn|24m z8_s=MLtm%F-~f-{FV?o)sWIB!!cALFKGrCs9Kjr6{tv==oo%xPCD*EiJnbFCVnzzo z5D%XJWcRedpu1=T^@kH-CT6BaF_%&X{C4eS(|;TuX>P{H+zN&AiJOn<%U4Gb75?Za zkV?XjE{V2h{n%{$?9>Zl$&1>xt~!wvSZ#gU^q6_D5YQ4+f9}Gkhly1_ zvfC>OMV$;@z%8og^xdv~?9SSc7w=p#XZ^;;FB44cTU$(`892k>;A4OVNjk(fB>t;!H50fKcs~EzV+5?M3bibWGS??F zG&S+Y<&Y7V8w7pOv*j?OVtkX*Y)RN-Y>rV%{ zcd8fvx+f72N_Em^DsXcXZ6F$1)@v#fhD2nsU|k%WZ*-C8{2{n`=ce{X{QR)+fx6Bg@k zAw8~g{*(r&_~yvBu!E9#%{H%mx7*N(PF5sTJkNzrb*&@Gfa+aUpep9q`0|amz-&Fo$yn8HGfAGo z#wa}Wms-k)IOQRzLh--MmO`eVDJhsk=b4n5&dW;nk)Tx}g`2`$xl#0OzBD-Go;X2uTY<0^Nj(;{+qv)WEeMu=Ci&Anebg&l8>VK-%JhuF>tO(7UN)x(8<9AWvWtHMx|354*PoEOi z_FVm+UM?*DKQ;V6B>%swCY06Ln=~ce=*gQ#Z#u3+qw^*SmUqVQf;ng!UC>1A|8(|k zLU*O038w@@{{NBs;l5c~9KMTUTTX8?B9TJl{oNJxu5Il=?qkKr zeT7wj49$MyKU!g2y3Kd%fO-Ft(qW~aEiAWG%f;h;N%)>ca&qq#AH6#P|7!mDy^B~o zx~iquJ$!~*pEUek39z=25-XIo0^{-gvHRNl4tI}06z|ZagxXn^w8SO{MsW(QSAtqo zFqq{?Dt-EGK?v<<{6|CC$hOHk_kn5#wYUy%QP>r&! zh`p?e%6D7iBl|Iah_s)jnPyiBIVNhX&@2bmTxjZNu)H!= zXuodiuin}0AMqVa+jhQK5q;FkDBrXs%NGs+;clV%>Uz#C5k<>L^;J096s;>_AQ~T zAxC8+)qn8WrgzKI`UA!K3F?v(nr>b1hfGnoO}X*Vw=h2I-3Yd~-5(`tCkE*tW_uuK zn+%DMsn&F{s^I*uVV0ll?f;|W5P){tkaeO{K|^_I1X?+)W%+4<#Mu5)+LcE{fb$F> z>h^NqsU*q%V@d(6Aga{jyJMy>9!nm@rn_67J@%QSC()O4w~iZQ>9(5P$J}@`CP!jL zG5BC!FtEqv8QWF+#93?dhEu5lZ5YL6D>a9^BXd->$=ZeZ4iKj|>MqY|WS<|U44SC9CQ z?kmC3EqS9E1+dgf=wtx;N2jGtmzfdPolpa?ts7$QS1KmdX8OX9fFA2A7r_L$a7fi1 z%dxe5y9}4lFsIwwpR6&?m_?okG5&D<*Vb_R4eS?=tJ*q|?@)^g{+Z>JAE&%?r4lVr zF4hDp#L4?Z#upFt&8R{H3@|p+_?7%nMd6LO4f@1T>j<~+5w!`XfOdqe!i$*|DD`Wt z59-@?$#b<3i3cI`d9&yQ%Po+B7aX=Zq{=|zxEzMN6j&TtIZ%zTVtGo(tfmATi z_kWAQF9aZ6?)L7bE_=d&XS$*3(+^NNPn{PVEh(6OgEQ#2CN@I9w5}`QEq$pmEjds{ zA|FcGUpUhtl**PqZ3o<|?SFF*>9E(trLRA{YQ<^4)IT}`v=SdJhXe>?H#5@<(tBHv zqim;9LkgnWgUy~PMnQppYb|y_u8@&$XSF#D675KvxkS$1pd6fV28#1%a)0Ztm9wbI z4};0ja=#ZtgHMNq5_I2Y#_jUKA46pdJ?@1ZjtgAe&&yPqG#pFa;-yv0WVkIqo>c8t z5uWAf=F^xn0Rn-8W9vW62b?yMu3szf-L`tCi>eL@pWfv z`Yyyx(+2OsUG|EW!yI?@DWyv@+DwDLZ;^i3Zlpxa! zp<7Fr(dRBm5Ahz1gpK)(w06mxbiDNm54N3W{8@Q=Esd^@ z`Kn|vxnB91@(baYyza|^pz#0bRJ2GPz>t%&3ZTgE(oIqsocfY?*hSn$KRmt_MUe7y z-2QA?RQ^L1&HP6Lh zJ6h9S<$4!izb?-wjU=EwTsj^FR`7EKi#D@pW2?`)+h&3Ie7PzdW(^c^^Xs$2^ZJ&F zTY{H%f5S6cuu8e{%%#&cf4Z=Pb0;D9MEY(A-Q7b-v|fKB-ke-gX&pHT-v3$wtGWIK z#++O#CA=Wir+8Q1G*O_87w%U1vl5W~s&#lg?_gX-F_EZuv{P2 z$c}Mn^8Fn!y`}NI;veK8W2dg4yWhDa)~uL0|C>dcuUyUDAODat_5gOnUe$`9?gKvC z?9M3JNKNs3L3bA zY00yVnW^)Q!O|Ub%FTXU=S($vov*57D;4ys=y2?y@lbzx8OYd)2W1OI8oz|5Qk4Skoq z0lCty25T*CKdoiGdZk3*l)WIDVcgcHAeM8mWni91*lKsUZ-G4oKl!4p3g|cBl2QfS zDWznl#_DK)#|G>I>snwFF$U)O)WO17k)M_&1x-1npWp63mScIcI=gsuhoRBE-P90c zsh4G)sZd^61tMBJmvUSo+S*5%9(~QP18#qQ)54ka%IS)=?YG%>KL^3Khx^xGYqGi< zJr_5Lv((%V4d@sY2& z3(2lx&Kzu9UhdYoU6>*GM-FVP{58tnEc(iSbc>gmJh^>BRxu8ZDN4_R*IMO+pI6TM zfA{tIWF99bhSq;4PNTZE89S^tET|`4r-X7xpS_Umzj4>&&+`IQg~E)2F7JUavIPFk zm|PXs3-wG8P)`SF>iMco;4l^ljYj7ey3`UVg93>oi(4m5>wAuDX;w1)UgLdm8&dWJgN+=;*`C3N{zHH{`=Lkk7 zZ`JKVZy8pFydT>oz401RsSs8^2Q>dYIIwn!TP(EFo9UA*1Qd{Da+X9CZvO+y{aKd7 zHGpu!CoJ}g>$CPD?vVa)4}e(3>aC;e6q0>o3-(0ucQ zz!tg!d6>x!$<3vtr;c6{Rdf8=dHNay_Nivut(GayS2} zep3ZQq~iGLTRu^B*n7U}u;CR^!Xf(oT+<&!Yw#y7(R?xk*@!r|l&;brq0G;PL1;?r zd81@VgZupD3te^1v|tu=3`%mkh_+Of-ONq(EWtRE?k?$m-G2&D+Gue;-^#;TM*{d? zqx5v~v!!)2uV3tKLQbTGM^Z%AmBvL^y_pb^E^2zTv7-v z_+y?#7}?pXxvme{HNSaL>9%YA7Q9fCSj&Cf`LqYZcRgh>l?$>Q+Z!}a{1tX8 zCyd$KDI5{|-IjY;o-u6$s3uH&B7U|!fu$`%9e)t6%+%0#db%8?#TsW@OV6t0KW8p3 zZH=-iZ&?4?!8!n3M7D}q3~PA1Y6{B^lkjWH-4?xn?rPd>u9Y~VZjT!_&G5d<^fqh~ z0W&H6KwER!6q%#6Q5>FoXgw~QzAUBpKP|TMItqXpDfPO?MtN3sNW~-5t9C}b$H$y6 z`Fn!#m`|nR7OZAhl8_W5(96TTe^7%9UqvpzuK)c_oqxcipFIsXbA(2GyLm9N%#U@D zAH>GY^;u(wy;cV<*%x;2LUD^@AEK=)f4Cb1rJm8vL|KVvsAziXhRu4)Bxa{Y zS<;)+PnR&%rJJn9N0wGZmPgr`O8kr$`9EUaLw2W0+`<~qc%sMo&Fc30Xx#6_m!-i< zQyq%KEU)5p9x{B0Uuo_L8pOkF(e?IME`yS?o##43Z5_~B5NTaZ%+&CCX}@GBYuNBR zP1S{!)TP2y9ma>qYn+c1JTu=Agd;p#I5$?|mR{|`cR~|MMl$h^Uv+-!)q09cquvaI zOFgvAddg5k=L&-SnRm4Mi{4kW!jdm+LGaocMh^H<2 zSy>IT#XHuvSZ{CaW|5zTNy9*Z_qU)Aw;Gi{3r4qIlsLU)!53H3y%~HDSR5_C9&vMA zf0F~jy7o{qvq$4eo;!H;>zAg=mEZ5)Kf&B6j7<0=7_;$y1ha3gIPRe4Fxng}IbCLQ z(~0ax^F(*<@eb;4$*bmrrIbf712#D8p@ZP9s&1F5Cn}6Wdw&B<5;idQv!EsC4f)^? zA!P2t=7Fn^W0zPIhY0UmWJH+B;9?;H3;peWU&Dql;g`*68B>0yQ&r!sq~A*f4{`7R zN5`_XDEmu%Wm3>O{aB`W>DsM(zM+;zgu5oGhL0(18RNiXq(p=%PdwVZtkCj)%jt68 zhc7}=1BC@TVa!{Wj2ZUHLkQL7xHN}Ge4eNG-W%?;^LA{{2P*vPEwv%PbIf8(q132z zy}dKCc(c^>%N*eqHRz6Uq|V*FNvr%1-el6!qt>4cCAEBVr3TmMnFm{2JS0+cXorqOsHZmyFkjmzjO;+x2HuvTT!yevlFsRaTE_gr3=TST+ zYpP5=%U`>F{enwUD8bpnwk)ajtFa~&;@6z81NDKAxGS)DIckpk@$j&#D~-w7;3?BEa3s{wfU^Q{*HA!~(N62Pgf{hQ(nqP(uxa_6Fn zL2$p-6~RvotXeAXRK&3Lb(ao34GnIA6Z)l$AUd^a!@DqP72*x;2@JMHs9KH6RT%=7 zzbYR2W))E$Y+J~0c*Wc_WW5t}&ATg{=zxg3=hUDJ7=YM`%;jJ!HicO0zs-IH`7Lf+ zQl}=VA}^V{sU2EnH(MJeAJ9llOaRE2F45v0$yfpc8(BTu$FC-!Qas;T2#ak+A?nsy z>G{}JgZJT2V-UPL=(_eFr;WaiQR)W6!wM)NY2f@Ttp!mAQkAiZy zSFh^JROW%8TkLy0DoYGsD*F8;`*E)xrTpA8Gu$tX3=mRN&(1q^-MGhXB!pBp@rbyp zF(>5UJNS5?vYOR{u(`Sd2+KQqs5inPk&lJ$ZixDs-tt3JJ)5Id z4V2Hgkc~mzlN>EdADfIH$qCY4w#pq${Cw@z>1Gpa8xnIEnq&^w8*I)7hcsS=QUioC z<0zIxwI~@Cp#ahw4v?_HR@K#L**P5lxLR+cTq7o$C0~tVMi{-$m@GRrTyxLXpkeiC zPwQ~M6?SIB>DPx~);@Uix*LNHb~DiwA?Y1zJ#OjV+L`M9l$=D%v02@CWU$p4u3;II zb7mWO_3JK#6B&P%?DnUr?(*Q35HUt-am$;S31H_+7ai{3CX<%JL*3NqkkZ!uw;Ocp zBo`B@lz1iekT}w#K|$+*Yr?Yk`1cM^m_yU>PB?5RHLGrIu1_ZU$VZA??j@1mcu8+z zn?e#uS_ zApRO=DMPr%Gq@^pO6(}&E=S_&6Nniq$17fts*tlj(a^bI4!LTW!u5&2v3XAoM=8|a zk+)TgRUrD-FUf1aqnxIl|HK{;I5_5jV8FY zrouK)ZiS(TC)LcYMxAVXycuA(K#tGL+FgU7CxMg5*_NO5bXrrq4-CJq&E83(tNu>% z=zYok-do+ohtdv)iRWLqzXhE!iHBgPVRtZ&A zkcT}6ea#DivWA0-YHk`jtM1yjBr3tl4Oq0L*xmc8bbb!#6#VPM&x^lDjO=jVFt7AX zZ*hE8s&O9A59vV`_dm^d!4*rfl;=&S6lC~4o*sy)1QU|g)_rSFD&t?18A%a&0cE9O z1+ljP{ClIm9VuItLwT>ST?vKfXrmfG{Y67}=}(O2wd0^>-cW;%`C5 z1%*?-eft}@=|u-K*9W=u8PB(E)_i`Fgql=6$|3MD;c+xk?N$9+lhcQm+)IzQY934l zyg9wwTz6gVl(F;KW%CVT^fu_p0Z2G$c6Zi(O6|w}h-H2q_EJBNJzTVA}~Gk2)ZQNVr(q{9bkRVT>c2H^dzPI_4|KNCBOYG zHx3p*&wiA_s}Avkkw$JwEr2Qhi9fjmMedS*E>9%4hAOMxW0%{SgL1M7OW5&Lp=j(u zvEy%km18kkbbt?9A{b{D=>QsFnE8G|NkR5Y_m{LJq*u#@B2d-E5; ztld5GtJr<(s0vqA#!fhP#@HNg$D}V-A&8~UlzxhKVsuY>&g=cM)E7>=re2&dM~b%Z z$kH#T*4TI+uecU1(y0uSmK+qJDfGQTHzTfXRrdm_pv*u2W$4(OCxXO%DU&Zoqu&18 zfxB7Tid!W-3lJ^D)4{gPp`HHU>yo797l|fUw6pF6u9txdGT@)f<}qg245f8mofWOJgdvDhrrhL|jdewRH$btDkkI#C z0yo}S>f+j>CMpfGpFG@EjpOJAaOqUNc*0Zz1bY#+@G8{Iip?)(cJbHXpgp?E`d>Om z1YPN_2sACMsX4U1*-d1o+wSzPON;AKYmK-1#Rt{-1bOSdGghzOytcA$Q9OCY1r~(Q zc&v$j-4rtWPAQQsG=9&#V9X_bjmWzaik%k&3+T1_7b(`wm~jOVG6fS^;U6PqNfTc) z9rZkiQ8e6n9}Zu%O0m-^&7YdP*56)?OJ@B>q6k{u^A;!#fb9lOGXUFd^65q)Gl>&%Y zT<3k2oMine12P+^^V47SOLtC)jseGh%DB&M!-7!$CNICu56d`&Lnud86LjRso<+>d z&!x^w(&5gf4jHx%qJcsJ)Mks~1ELp*ZA(G3xRCHzPdY z)yeV#`{j^|cHyBRA+|7zaCiHS=m#Los zy6qS((?fE$Xvxcfe5u2?mUel*DwQz1pIxNX_CHqlE~#DwR|i{pobIlX$o+e86;{z2 zY8_GpD%yF|D1a_UY`Jp)r1c%rL^g&fyO#rYKlS&66zh2_3>LR9fhz(=u%md<=+~ge zjwx@MYjn>Y=K&Lsm$;LOQmi}Zxn6|jLSiK@V+z|-=wtFY_;nJVs9!9IC}g$WqQdp0 zfh}T6UA6+gd2*@%ajex=w(l23!86iEqn39gH%d9-KRR}MO=^X(_X~TBLwk>P5L-sq zj-FH6xO2>Djq$5~jCWNW5Q_YPA!Zs57WS%?tHMiugMTfTqy6sWX5o^}Ebu%2{{*U2 zf+a4wfD%LbdosVEg*t)l2_1>N{x$N`(F>=5AL;w|6tNViqf@*0^1b+y{bY18MY{MH zm%o%|>ubj%i1-+X-_(!Onc9@wFexkEM^qOAL#^q%tA80NZevn5(%wEwiTE2fJH=bM z=+7Dynp|UvezC68-eTG1O+TH1Ou*!FdywsSSm$B=x3_CP`xb?xA&v53`d9ZiBhN;jrk!ZZXmVA|&iPnYnroKU{dl1#t z((aLC8vNbiil2BL0WzT%Vk*nF?JX&N#`XireRKU;fqjSYK#5%Ssq>J=Y}hQw_uEzI z)!s*aDNCi-_WeVXqs|O^{UrOZvs^WdZ2f}}9?z_f>TfIhY$nM3D#SSzl*fqwjRUMG zEzs8U#OFUVif-d15Yj2vE$JO`7VF}M>`FgqRCR$=%oSW@PFej`k&bVQt9BlLXwxHBO*8PMWdf~bl*s&3ED=g;sC7%q7zTv%zffqcnl+eFCn&oT%A;T= zsIHriO$c$H&^db`1g-l)e3cd_r^lz*ffXP>{|{aB2ZP6zylxm&BL?w7OG-CW5DE}o z`W^K-3uAJOx0m=E+@U3iU%`J*!T}XdS=0(&O6>FuJR!D~5*jJ)uTBwQ2LuH%tAoJ0 z_peEg-oI(E?WJ8*D3dlWCXCWtUZvI{+&D@pcsYkIKnshysH1AX>wJZ$p7%X%5Wbx{ zxcK7?0FfnFIya$J6OlDv(%lt{nfUYYr>o&^d(A7J zh}L?i54PUGxiu7<^g@#Knt}DTUx=2k7=)6Re3;y$1Z1GYJ+#Chq)!Zy0D0> zR-1;`ZBqJF+RH+t&!_&$xk8F;#9+4qM$vW^8O0H;dzxr1+V)FNpK*ykdOCV4f%Hwl zE?fvBEe^mfF32a!hD=?MKk5^pfWf^%xev=|+hk&(iMY-C1lst%f`Jimz;f z3?Do40u2aWnUb9lUjY3Fsqrlg*|7B-Y!qx=e_cjZ5p);cv7Ms zg$tXzo|}QVOPa7KPW$vLl$^BiY|O^CE)u@lXs-35Dcti& za#=UhlGMB$l6T8+GaubBMtJj~KX`SU8AyRI|D9D3P1IA7o3yYoG_?~<^s3Xo-h+im zHkr527PUOPHwG=N$~h%(vM}&SHgWV$7=JFf>4&&q+G%H&U)n9yp!YFe)-B6L!GDX) z>F6$)+ILR+^C)qI^7^6QxP!5{C1o$;mb1{|czdT#*lV22^Y+(_h7ZO&FO0|sn{8}>ojFM4codktXwKDb5 z1WO!lir-?{bQpP;w82Lk^rNjN+^JM4)4RsRHw2VQqlH+QG1!tn9Asyrcw6TUh@~7Y ztfz!Kx(R*}a$ic4WG;0PA z00p~LHLGFNrBN$Y@sRpHT3Lk5C#(2pVl3~l$^qB~X*fLeN9tt+r8+qws zJ%C1-HaYx_Oaw0TYv8^bFoHh{zar8-@m=)+6$CVD8W)sGCjPTt4+Rl4H%@Z$QDAn**t$AY|&xAmFYQ9NGMCXdCy`n{CiVQBpV-ZE-T zuXeUSR}a$535a$5w$L!NyQK=dHQ$psq4(ec;Hg*FKJv(Ojs?Q8O)Uz$o=wTbt(j3k%gsu-2{ zYr>~+2gus$!6vi`Q5Rv_W*dRR?Hv3iOIpj)ft~vpR2p|O#nJ|B_(x}oZDz)^GY3U; z2rB|nkv)m8E4foMCOd`|1|v(Qj6%5DgqAR`)ve4fVQ>f|zbC1Mjg&~e*(DA?sbEJHYi6h2fr4lF;|n6}L5a0D7f)1rQ}C?9#( zi^w6O`SsRVKHtVl$UUbW)1qnpnZz~yfA??L@js3)pDDSMHl`zwTdM`Uv41y`$19vM z3Y5=G5VEu%89NaD*=HtlEW-!&%cE^ToqF4kw0h;8l3dW|*0HY?cf}bHHA*ll9EV*u zHG)A0vzpHv`n(ER8~s$gKSv`(@68ICe^i+S)P5>1WKCsvM2m*;{;)-qhWdL}^rkfQ zXY!Zvhf~HuAy+DR1z!W*a4FMu(pzDkK4!xXR}@Mr_}D!1?9C9@vDU@zWQcyNhBd8U z7wtL&M%o0ihguMv4YR}c+#f16PgkYX!5J$^4Qtm4%nD>n2By=h_}lX+rI9AKJa-~g zI)v~*tSqh%!Thn~5)olcJvgl96i9Vmnfim^C#7JMIYG?XHsHD?=8jQFm|jdm2Q#1G zhmd7 zIV=5qTPXhb?EZepZRvxwVMgq5%F%*oCz5@U*wDQuD`KOCw9-;EuoViq{63XqFw$a4 zQJCEi-cB*i&pF%-{^h3P>Trdb`{@v)paPD+Fd*!u+n-cRM6)ScCs)Zx!3)!GC3f?l z4S#B{C9%UI>p!|{rZxZ3X~qdLNNo@Bx6;Wc#QkZ4{HE9qALWr?t8)=RZe$zu?VDk_ zj2CxNsCNQi4!5}J!r*0D>me?!*Y338PWmzR@5k>n773(>uQRmYf#iK1bsjCx{M2i0 z0(G7{_^bQu7w7B52%@Qa_BLNaWQ|sHTjCl=*K5=mtW8-gCH)_C4>3#cTLk0mx{NdB z;JK`5^Baw70MvfwHtmaYKUD&>Vmtm=wRg5A6nYxKuOJ?{6F+iV5e{*jwDYM}nsHOD%t#Bkiqy zu_vdfoxRex#kLMYYOVe9W&QBx9B(I1TG{`}Q&{#9t=Ac2p@fM!WYE(jXtXYo$v0-Fch+I4;@|qW|6gbLac| z1r4lk@%#QzY3dInzM(C$Oz5sx@gLcPi~Ype-Bt7l7f;}aMYebFqmb}}EcdGGF9nPN+Oz3GMYBEV|9?=&@H>k~g5zl?+|>M*JjwL+ixA#%;)U+f&% z%*i!!0k(w_Bt7-dYwJj{C54iHPBMPq;5;DS(V<+PckSQJf8DqDl61f+hZAF$B+1`i zW;oRj^*>UG^Ub^QX$r>9pX}qF7H@(G@FJh+oD8WFIJMbWLt@|lWc=1J-$s!T35g*M(rlpAV59=l zJs5)#(lNT*M?gR(AT@G;G#g`d3O*>EQlmk-K`9kcpLf6a&$F|gbAR^7xzF{z>K2WW z5{K{NCKdX~YRT{hDYy1d#uUMiJhWD3s7|_Eh;?dQ1S-83V`NG5?_Kn--TGid;kC^J z*9_JFDbJ^iWgzNLIFz$8lPK(XnH7D0DDAr{zs)X%c-GM^*@%Try(F(E1j4`FENTfR zvud2!k%lbVySjQe@F$xR5)^NL9bee}y(je@t>D|JgoIbv6{M&vZnrUV=aJ>Vi;R`B zT~WOKZk0ce__2~LG4fj#Y`(@xcxbw)I( z?Hi%$d&-j$*Ik)pI33@@!ZGlBQrH~)aIw$Jk2sDh#i=cP9og@_Yufxl;s+Xh_JKp-RXtYAJS#QI`qSo&DGaUs zH_y)aNRU+EfYGW^fF*h|RmSG`kcBz}@~CQt)L(4rr%2k#*w`r}c&-i|4n3U)C-|~h z7XBlnyA8Jgd9BS}r=dk#+V!LNW!}mS>ZHVxCD7*Q_R48^mz1e4v1&1A%)jx(ofvZ{ zW!2Wom@xKK^b!#6Hpr5>Q8sjB_m6C*>PM{s^1h+)-5T5F>om-{rgs{{9hgTc1zpfo z!H05K%9c}#f6HqyZ5%)0`G8ZqeFQU1XDk2e-6?@&V~y<3DozEd55MWt3OCI!Jv4}U zDp>T=;xwkx#zyM)1EExs7qKyom$9;f4@D`rRK{2*G)OrndXaxn>6|aYHh>jN|zk7 z)B%LP(f$I9&9a)+XAi!{#g9cYewlQw)x@ejB*WZ(f_P(^EjLYYO^I3NG%VMSZ-+tS#2T>=gzf)Hwn^N!t-m@- zh@|RH=7>1=)VhX^x57o@1Hx;b#^d(=r;9j?JQEDZS25E*291s8Lz}qUKuriK)$JkE zVT)cZj4>4mL)N(le-i3u$LPE~8@|R(+_`Ou82ADUrWhwq_Q0MNehUZw<$yarxbPbyg5= zza%deWfcnsV+KnjDx3eEg0vS$9g*m%m!X&53DKZXNohX{GW5(Mb?)|-JKSm??Txj7_9kRV^rDOanduM z=+}5r9I>~=yi<(0^yNW>w@R+0Hnf70t+j(U!uY#aBs^!}PgEx!H1^8|Ry+>@y4U7? z*0{FlJb0xWTS=%W_pjy*CtO*9OD-*GiMSvF(4wG! zI`G5vEuv1i#QR?S8rKb6X*XT=TRZB!nSZgk#_&zn8)ffd{D9^Q8e+}7`~zXr9}zV8 zfYSF^&47hJW)dH@66i6mEiH@p$hv5f^Wnbv1^N4W{j>RATHw1!MgbmO#C{%1>BcPl ztA0oXG$ub?U^ml^LJtMpdRgUIi1M?U^DeTfl$9`~iBGp0FlS8HOG<4K{*qntK3DHq zTSQC$@X}qKoOn}ndPF(n@0FR>TZV$IPdl9I`|Lp4Mo%+*1e9T1F^GJ>m0R3Wre-=t za~itDfqu&wY1cxxTFuI}uj%*BmTC+(C3P?H;m*@))!e+BGA-H(OjFoSNclBy^PQ5?lP94+v zmdz{M$$SH2zS?Xrjr#Blkwp|;K|QgjZzl$MVmk#AqKy_@rXz+9cILb{-tH)UnQrj8 zvVIf$^qS>6;vLqQI?(oh8C&7~UbB~DO#!-K{sBXslE~Tjfjxkl3~Sci>|T2t9jT?d z^N3j~jke4=JjG@`CeuyG>O!i$;vSTG7|SYdVfbA#;NjhIJ*GsLH`%ypQo-1c@?=&y zjdW3ey_CslICsbDOPv!dY1`3nd)T;)DHiY9Ch)3f<22?jo(N^Oku~^EA2UlMjXr9Jow#g%bQP#$d0_o*g?u{H?Ixc zYO~`K?Z4~*=%yz6Tmg`&_lp;nP{Lt8>!^5#KAh!xd+EKlo_=7A$rxKlC3<||_FZf^ zxx^0-$0V5?2mo>ZHS~0zQ(F%y(WEe|i`17b$=p$f$sFb5eo&|>)q^6I)pBmQ>j{{OX1cucX?WBSaZ|srJakq<}eo1v|g{{ulhCm zgvyO4{H?NZd@PTLchN_-&!6n*+gUcTGOj3s^VGe9D5 zM9odG3&@KFc;0}~JrLEdc^G}+?tS>JXtC*opJ~eWemYAMK8^L?K&bxJ+|IjDG zyIVWcF)QL4Gqui|zI0N-qlRZDVUJsMeT9DtI@>FvNaY}CeBNrF z-!2c!%53*;D4mOoS3g1M-di(Njr{A&NPAOfacvhspUtXafNnlKAleY75?1RJdn6b2 zM>!j`6{^G@<#|8(HJ?yZk3+xn>d!KhjxBz$O1$ISipL02)jGy*Fi3jDbV;DRqX??6 z;}>aeIlPN`ke?=O7=#eruZZ#8&;Z=s2mWbkw~_hVyim3zgF^3YHWqvsoV0J;pZT$C z8JXGS-UHCH3W%8X73o$V*OO}a0%zt#h~Q-Hh<92?`A;0ut$oS-r{8%#(YuDg+`n(Z zR3@NbjYRJnX;-+OxIln`wpsOni4AktM))v{ov;*EAfeyrrh1DUQnA{PtnExQuhL68 ze)9SSY=+CgZoAo4+7|$YWyqXg)+RKiYx$?c3Ke4+c5J1vOfH;dk0<^aDD|kI!w?s} zZ&0|=xHxMqT}<%9hs9p@k{-n#Mp`Rz1{ngFSrF-4D4 zGEpM8GqogN&2*VgmRLE`C-Tkck4k|T&y8Bw(DjxOXx^k3t=`3@84R~K zlb%R^o)S}A0eD5Y&Lm)88d%%kI8qMycvVwnKJkG!&z9ZPp}|5Og%uA#NNs_j13Qz9 z)1C0{hJM{hrAkD~niy1Pg58+%y`j)u1RGYm*{CRZe75@ zQj~gUjQVE}mN+gn8OI}4!7;`%!^Z)s+MoX;n_FuY(lbcWL{Q*T1Xa z90G<}qiN8QK4SdZ#I^CP2lrA@$67 z4YyS832w{9q%U=PI3m6IdK|KuLQsv6>D)uHa(~2QnihDZ4}`EVYsmYoMdp#$^saPm zFMUGC^~u_rIzh_TX`tsESa?!j#O1WhP0BrubaxY7*;yo~DUp^|*h0-^u%--wIX@8; z1MSd?Rg@wOC#>=JA{W=62)>H6$U=m>KN)XrFWQJnI8 zjIxT34+zQqb)$VpU=5VWKrs%UT zIz9F5KIpMo%a;ear228SW=VF1D<1TndhwTab$}_O4^=aIH08Fb;=82|h|a>d3)@$8 zYfYSNby}D@?51P275L%pWLLsLCiP>d5M|eE+UxK1$eNeMRvwAY0 z&yZ@j_p!54Ut=T4EhUjNeJ=vLJ!SfM1RGHsjKpQJB1->px7d#zb0*n?N%`wY(~8f! zkptb|%jky5#Hdu%s+L+(W>sNJ_XB^#`=@Nap{qjbWBkwOb_@L;;=$hh8X_f}Im(2?cT^&^U zj|{l+a{zSU7i_DiJ9PQ&P0`(PtAgx^-=+xa?a#SXfCdk&^(vVFTK`r?OW(CxQ&C+0 zLkV*H)V3s~N5wPT9t$&Ub$C7SnP$0Y@ZG6y!p9%onudRhMQxA62F*n6((oxC<1ky0GD%brb|NnHbgn(Qejk(y$g%TKkNbP>8URPGy5O9wt z>|7W8d|Gp^@!f+~`<*h}O1PNc`K9hvzvB_>IB)iL$oAx!-PGY{^hVx%?=DktnUBk_ zG6*zV(6K-tQTcXeSpYOHl~tr88;41%NzAf^Uh8{CEhEBUiYgG#>-3b!Ar3R1Srqp6na2cXGo zRq1HcvJ}`us5~kBPN2Q{42{RD&X7Ng@bgqVqlBYH@N*Xtv3#^hH_!b8n)0+Ph=RD$`P-)^3y%{-!(rG zY7mt@GbO>rPW}}BC$d*w9B*XbU6{cR?5i&uyb>+qGn-W9Ng^hFJ*zhVi~bhlouIT7a)F=9$OT58d$g^`o+Zt}a3 zPeS!1_qHtp!_iU2+=#imKw_`+yZ@~A((GqleAe3wcIEYS1lfSE@qWAMI~4)dK1dj{ zk~2RK@qU&e@0Gp-P7{gaD7Pr-A>9*6lx{I6Ee^*;PXh3yPjMqxe8>q?rH8ktTXg6w z=%AE@@V>)W_kb%X(lRNrfST-b`VoJL8nchMkGQAAUW>eC>Wr}uUjOL5)8YgKI}d1@ z`(I?5CWiP3|9&U7SvIcBG3VZ1vYDMr2Z3{K`f}6yvMh0SvlF!}xngXH@l~1b>K1t5sS0z<2Ia8J9~WprBK-Pb=7%cm4S^M( zz9$I2y^{txvH6N>?w^r`Wiz+@cxkP?m47l5YXo}S*D8hNpq=W9Ecj_`0MAV9U-Hl` z+9elA_GdJmJ)2KoeeLFSRmDG-_wD3M*7VyApTudb?Blyjy?27^N`oDVo6%QX(p9DE zWKyuxTwqi;k`&pNr*s-1Hcd>Bt`bsWWX{yhRI5DqtiJx$V$Q$Ja-mlm&lPA)mf26Q z{TWs_b_$Hi&yrAtGz|mn`A8*6d$5|2XAQd*<{z<)GElr@LsqJXf#YDNQP5J0Wb*gQ zH8E>Bhq)5H^M(xcc6!k{@JBU=V}#j@?~1#H+e2T1?}FE`GE*snZOnmkWM6HC3%nd# zpsR+i2TNXcl5PgKQi<=MoH~&O0s3EOcU3KY+ojM{Jf8SBldj&vqvioa_wYC@Fy@(n z(>`wES91C{Al=Heln@qF;U1ounMoz$F=$7e`>7C>WYe&*#rM~-D@a&@iGOAfZ3UMY*l-%*3a)~)vC0@4|JMXiiy-=KQ8!R;C^;eU z5IJiaRi@&eq=MV_%RZVeEkE{il!8wI`hxjC>8!)jePqnU?SlZXa2O^$OyAekf=RL) z_o>eqtl0Nv7>`+A*h5>44701?o))zTHfhD(ZXjGytwCk_8RHy`Fo#M4dY-u@b~++U zO+vHfBHQaQ*7V$rLD{MCpaGP2w79s_hwVD$M&7&>8J0QKEL?yLqPjeSElR#QBbJNe zF;Xue8DriW?fQU@LvrV7wdG5txwSmU*R&bMxwM<_np-XB0|WEXyNhXbPGSmPku0L3 zH`7AzJ1>m-*>2-9SnTPM?2jl9g95OnvfJL`hC&tN_jHDB@(aK7?E$ou7KjWgz?Rhm zhj?WUqFLy}O>Fh5w0=Rq$+KuraBhS6K>p|aj3p@<@1vEu6&!G{;C0^;y{}VfuN{Xs zLL)Hv=Dp}=q4t&Nn&z$#4XEYg|H#}^A!+t^wzsC+dvSJMARj?7nq&$)3bSy4LJ0d0 z0!`MA1>9}#Isr%k`ZoM4hjpTjudPi^oHIhJlgcg%UM@elshMslpA|5AunX3+9u`#Q zV$f@Mm|oc{%b6|KsF-SLsQ7X{O*Tb}Q5g4G3%k*Km?t3=es@Az%FaI{VhR=T@soAY zE-$GAdF-(Atbh6R2He?KZtt^=8Z5A!ee{vpR%h`_1td!jefP173oLs4)|xKIBw>oD zXE*`9xV$oxEirg^a5_u)0>1u|e-Gd-dK@|H-Y;?gCde{p*TlG+*|6O{29;{1P76~I z5$P7KDFpa4R&YuT8j6(Q9&OL8+2p^*{i1VPS#15TsvTh?z}uI8eXjxX4y(Dt|1|(!G%jtC~(0&rSq4lwLILlU;d&G~;wIybopq0UU%1{5t? zh-JqRsxy4MMENjxchYtwl{MJ8!TZrx60j82_ zuw#R++`x|>eloI~AY?oi-$%Om^}GxNL+RuWHP^{hjooNc!O5iY+~wN*75HGIL4GQ0I%Bd=K;Vu= z)c19!(SF}>8ckSxqj;5fM9|?PhHVVI5y_SqgYp0H7r-*|&)sWJv3D-Yv)PSrJo*w_o=xWilWoN=3LE0HcGF$LR-_v&xT$43 zqc%^coUZ_&<%Df`I&`?bX&i49(-=^VboY$cD>idDcn>c|h z0x7eABr-mo@mniSak|ozS>>`!{=iIhj|li#rJbIxc^UbobmmIMXH;({<-&k4(u<7y zeKhFb{7nZ;H!>`15UbT2%zpGN0EhIb42MY%53VJrsBIY<>0c8BatG=j+7~832&gZc zEE{B=ETCa_7Qsm!`2O2hvby6ynCF3ofhlfQ|}pvHS0fEk(at$~sKzJ6S0t z$*~b4iLNsxP7m+YZ?+CNZ6u_$xqWmq%{pU@2X}-TG+Q>eJBlUKXJsyw1(Z>?IJ7B~ zPZtZdKH&eLXPF}w$ms&coKESVza3@l(=#YZ#TztVuFUtX7d7#I=4AWz zz!?@ANGgzH0mB0-lBV2!Mp5T%Fni+gvfeV)kj|SE%k}=*$g5u{ zmqw}CtvK8_Lu-s)yOopJGFx?7C#(E(cTl@iMI>WEmhIbns;KW#Q>Xt5w6qm4QkZ=@ zL)E*DpnJCA@(+?uT>a$GSGAFmqn^oZ6=o;-8@siJmIp=Fadm*we*+wNh~p~Un-9wz zsg(oG9&!7tC892XMkg0M**x)z=4HkWO;tzywhb%yc`Kul(a@)9@{G0zQ2mY*)OP;dz)yQhZEVL&xfF#{@KEbZCgF9mU ztimZ@@7PI)*R+Kg;EYW`ykjOto;aRgjgOA}m#|EWI!P1e^I$-d&iNvt#P96Mbkk|+ z?S)J`0)17}n>f|SNitNg`qTneb)yG>n~$Q8ELa)X1}hv#792sw#?iyc-*J7lkNo|{ zEgGcX+-PP1{}u>O!`@EgxEM{xbdpcDP@8RXiL2G;+^lNY+EWB2`IE;Len-Lnyt)Ob zdT`{+{pHSJo)+d$a!J9Zmr8A&BfA~8P&0`sCu`Opw=J1Sn)}{a8}KNpB{LyWd`T7l z=Ff`w^MHD+`7GaTjolb);;ws|`O8_yB2ZYF<-3rcN)S|U0l@JDfI)8?w79e&)4&#H z2PAyx#EkG4uQA76SsCh8w*C(U4n?Hf;S#WbgL4wS>Q91|Fu-AuusXmz(+ngO5>%cs zTVDsQF)N#?@}t~&UTgFVHs;ZOf9nG%WmC*t02ghk*rwETMFz8YIpPDk>j zK(gazh`7cUWv~OJuz4Nv{B8^11k{Drf^Ql%NQ4fJi(N@w5%uTJ075b1bD)EJ?heE@KU-b6S2#>|4 zN_v(4|3S?*-~wOVzQ@Lal1l1633OIi;9jOfK^8Je^VHcy91K}ay2!lvX7EgmyNV7^ z4QQr!9$;CR79-^YInsT|R+&($fhIt18Wp)@IrS>bNHJ+aI$24#DppN*vpBY^z0yUM zd8GZPyWS#*b^o*q#xrD-Z;{Q{(zoouLuyDWp{0Hi>Y44m=}t*{v5}*ak9iJQ;&vds zVSi3?m@2XM{(3Qbk>t8Au4NA7m%QT*m~LnZ>uN6Ir&NUCJ^SNboS7bOH4sGmZ}fkt zD0fO#ltK!=WQh3c?N&MoxYSh5IZ5^PaK(CNXJY%K={X*mcFOn7cHxI?V^O#lPSDXz z!vy6v@H{1{JP&0W6=xx=0z5&teT|b>(@THpM`4}tz=q4-wK7l@`avYmiaDMptm@qT zo-qw5!{EGt0chlBNYdF4pXlnAxr}ke=e7ZU?Hu0Dg^C`vS$u3!TWZ&kFNx^e~&iB|I zfz$j0iq120l#repzh!Us7oP0q+9`_tLFy})0MS&u^0Qmb{zjI6G@TE*CMt%q710iY z7Zyyk$(vRBq(_D_E>{n02bu5#4mC18v{K|~<8JR+QmFB_cKYK$eq?#`!XjUKFSJvN zGLuE*hw0asUPz|@HOD%yWK!g(g{vlpnK>QK%8WKyN0G>sV!S;T2VnzQ<^9~O z(KAARrv%<*fjdqDHAjSKoo6Sln+astXZCZ2746T~+|l|1Kugb&C-D5d1-CiMmp-ffFgS%X04Z zj2z))Q5DS`!$5`VUAo{3z-^Bl`2<3bEeFAzt4^o+xC>V0d?a0p7E}T}Qn!lxs`LZ^ z)qlNpGoHB*Ywt8LNs)$2C5u>%}xm$^W($qEdq-*_NAj}D~UewPhSy_l%DE@9vm2<$o9bD zEWmZR@@}+>xU|u+C*~2^W)p!c&VnF9O^qKG8N<-bWd(J7PU+XWm(HkEbh(cq_^$+- zg*zGail~bVj*|(ZJw)@d_L}E z7{Gd=!wD|czr*4(#G7NZC@ew*uPS|nGi9?3-IDhvsfBBothxqOaP{MQf;|)dhEY7&zw5{B+WxqTO5^ip7y0Z9h}vouz!*yV#1!TdrDy&*Jm;P?s2@MKkDb@C&YBRDSks#xYDn_ynZZBeO@LYXfjM95)aAvohyJ#d05?w!R z$5sS|H}%4DK84Vc1znd?%{2)%=e&S_yTv4E?`ff#dHZ4`8g z98~r@1PCY$nmg@oBw~0gLfR0D);+H1)^~@| z!2JCHoBNZU%`Zwjt2Ys$`@tGYA9bJSUKA8CGjq`c(}OH}4nec7-;x94I^B4mf|R3F zXWl#r-xUGx;|Ew3Jog|%JT3yU&!s*bX8(e{zsDR2Nh-BpJOxd92XS&MeB%4^MI2mQO7q)~P`aHHBf^SMAmkapdq0HkP_}X z+2A~^G2O}3Q7NkybH}w)jM%`GGNGA7m7icvFJ+yRO`+?I7!MNl(*jLbK*hJ}bX)AF zuI>g|e^rp#PESA_$$n+Jw&T~az3}#a(Hc9Xww$B=z-98B z^f}%1?p{G&FM}$>t-u9UKXVL-0$(Tw$0xD1&iVWs8p-MDHo;;>82o4zFr6>bFA^5$ zu6u-t*9fXE^fw)MA{0pt1`6v3C?=yyLLC4jEPhlKqzz@(+}Hi>XN6xDmq(EIg;HY& z{YwTLK3z%yaY1|#Zch$(!KCkc@y6|ShMrnRuoSn|B@L;uvsmqx2-$}2iS}LD-L_8U zlk~u%yO-sBit7W~vliWd8f(vPR3Gf_YYJE^Z%0++`uEgnfjerQ#G9ncQiD~BFoZ#Q zf9HwiEdK-Z%7*AFh%>zUsH~@MO8y-rnz; z;cyM>7u;ub6X}61&V6*VA;R@zl7tq}v+LhR(iKl4Y#BU<-o1>3^O9cdg3buvQPSNJ z-?6p7BP&L!L)SPvW1g#Ub#@{I41_(oG_Mu8DXtUN2Ew<=k;0x60v*#}ZUoz@IJ!-4 zN=%{OGwkgEYiQ@Q)>d5Kh+M{sW7kieqxwF-{ZMkd1S)c~Oxp>YEoOu+G_K{d{|xJ> zVWP9eFx!B~qqL(XZ8jZr$`QQ14eM)|K>cb;q@mSDqal*9b(4OvVDQ01}KA`qjh zopKlE7+5rM{R4lv~%Q&fbWE-408CcY?fvWq*cUspxfPSz>T+~?tKgIgF>`*V>N zF_>2o#LTE5i+gHkYv)bj6X(nKS^-P=IDX}=I)Eda91k<#HCXJ#XPfVLRg1^c(d6)} zypZCra9c!^zhd>bE2I=m0F)0AsL=X$_tu>NkIgXlmsXU<{Eb)LP-{w49)&AHg!zt$ z6XER~z(`$J{5vmF=i$}gM{n@+Kgh4~95v5^=dh`9 zO)>wNHZ-O)2l-X6Ngq?`o&86~ysExL{DgS<&@86;43Yoi&0{cod8{1cCkPusb5KP2 zW`5G%-3a3=7qDrI$eOOMoz0*WbR=jBrlk#yl}B)t-1Bxo$St(zL*QQ(XjEHP&9dj+ zw3zRsABP{N4t~6_du}tnr`svZO&9EYi!2@X8@y39b&{MZ=b9DO6ZE~dmsJTq=y;?_ zjC#+57B?JI5TN_WMbs4lMpzL0KLn7l_x9VA+PO+V1PR4r^EO^%%d(~fEdkW_Re%{z z8ErxiXMs+XF7IyaQ+5u!PRLRe{5UuI7FLrUffo z8cI43lYfs7Py}V$v7{a@2hZ02Jw@sSsa35e34V-T1-;XrpqIL=ux1ohVGv+6rYjhR z=^ZMv6@Po>aog}XK0&H^mSZm7!O1ZL(IcQhw$&ZXnFKI~Y33NFF=kL|1`GnA(B`}^ zuRhI`!Sh8gc3&l*ndnt{)CyBX%+kliN0{$nPYrFkwmV2s+`#_B>rmPjM7IvXy~wMu zJUGH@`SNm$Qw#KHe|O_QvNf=;R@6dkBp8a>4IRW1XiQslc^?meA8Tbr4b&R6&~Ts) zBkB>nWNkt$X9gs6<;j9fx7(=)0%UJ`Nj_=w&OhUJ9GF4JXar|Q`eRptou#u{4ts}zFR2C9r03ePP#a|6}o<3 zZJW`usa|(g+u+PZA$zJe+RHtQyC1i0zSPa440KMiYJgpf@ULY-9a>ca3$Pu zL8He;&WG^uF<)IkuURkgxeUuy#3epz+tHcJP(xV zlS8M^BRH zXh8v-6?VG)E=TmWevOa)EgdR=f!mp?sgRJefcwAAdSNCct~Uaz)ez%>Ai-Z8>E8=9 zd0o)%S`}0ukYd;NQ2K? zcZ#!+=z8EL%H-0cd{ryi-mdJ4U-hh8sWVWTq1KmD`pzBl{Z5fFhG^~Bc;RjvCG z$GFfb2}9s=U(F@~S-O9B`xk6KO6XsuogQw6T7xrF6t}2RO|y}a>~8hpoqLV% z_5cS`KefjBJ!lE)ScQ}Pi}wY>^3wGR*D1a)u^i_i`_ZBFE*J4`7FFt*datYe?l9Vw zt$XTHzH)Yf1fC~{)X7Hju{>ZOgw%fdX&5YuFKcZ!j~B3^ndeoTkW0GynJ-gaOFnsJ z%b|ZHpQs#zCf#AxSGOHCRbIr6Dx)g8$`eTn&inEsCnau{UIyAPJ}-AJo-yft~S?C22Ah{dsV+4c^CSt%!P=uQwIK!TonC|JFZ{^|?xP-M>% zGpu6$ezvdeWuqHgO}biJ2FS#tjhV?p1*bH7c5uQY|44`6;mE9PwW-h|W5N7q1y(H) z%GI_3e2(VDG$!uW^abgGvw9W;Y3HRUKTFWLIAeTZ@kg6Hf4JZKIt-@SQc_$DwQLq z=ZwezN;OrY>PvHRu+?c)%?94w(|)5f$=>vcz%U@+$aa8N-eoip zX@#gg9bScs2xBNc_VcQa`;`O@k!Pr#*F-L8Jj;5Q8Ja#C8^{xdd(B$(+V&;)xDM7# zy}0|Sil#wT3CrGRsMP6{WMkMSL-N^yF0BN}iLG|OjE>p@V01JR|9x<-1Ewu-g|ie= z&vN3%zh07!k&DYT^}VKNkfoalugGBL5=_0^L|+NxiI5JJ^vsa{m|o{!=5mut+l|wB zW5F*e9{u;Ua%=yTq8hGSo$~bpqRMGkj6BInt(H= zVCt~S;vhK)sbNDqJ{FyJ{M5&(-U*RIJ!DP_l{x)EOkr9_r3Q4c%uh?nVGl!ZXg(jA zcQ(22v3Y>hwV+I^4MrYajg-L4e3h%l-`~J)!*@D_br$`P5TD9{UK300zx>`|M8avq zM`;oT^D{@T12H#Hp#N|`GDAD*Ij5M4?ZC04O!L;aXAc4V*L03&$Xy1h&?zn%Cj9U|Qf>tl3H$cvq`6ik<2Yr) zJP2>1+_rRWw*RT~q3E#P-lPWa14FCyl(nq&DzL|GMiQ`znQoq3dbI<$kmRCKr&OF~ z)~o(Hl8iET`cNsRuK1G6?;l{%YHRe`-9z^TB8J%9VtzE&;2o^YW#PoWA955){tu7L zkuh9rhmCijLq}-sh1-P6;baJurh!-Qyeh%e?J&##9wUWdsG`J;hC=*=X}8DHe`N9Y z?^6x+CfQCU^+kE3;6lFth(r7Wdgq#rQ?D#DM|GUGUWUv|_Yz@Q>zB&EjW{!2Oy9Ez zEYB5|f{5`Qk_tB%?N+SY!(4+@-w`>-)%8zcr#_Z_-z%r4NJ@X;SlU4Uf@fZBl zKKxNOgP-<1R6HmC-BA4Sccw$~Wa0Ua(E^@AQ>};W7mYD72$A$)Rw_eZP zt&He;>>Z(|U%kNl9d~!CB&)R5Jcw^TUmMgrW@L7N$W}brroEF9p7eFD9p`eoBvbWh z*p5Clxml^5U?)W)P=05QYdc^f&8Hmyo+I3QJBv_%Oe?crw?3|H6GHCbyR<4YPcCjn`K=6TQ-!!aza#O z2XbU2?VdYc8Q5kb>!Zd6vv|!sM2N|H?=ShE!)+7qtam{ZnE@HRfjd z%WlMc{d95LRPvzc>e17Wci?#5Tl)n+sEx=5WUMm6;JQ}qQJI6?5wiZxM|DBp8jlB9 z9EMG~D2htIGbhrWXO2g(<`HydZ|jI0&2kLRcd1l;tkCoxz0Z@%)J444h z=yClGeAN7tXUXZ@$Obr!`@JZYLX{|0ZJ?y*yy?0QV3t8|s&!tX5|Wm?ta6lLF2X!e zmp%V>u@j8oTY*{O(?7BuS(r|1u5u=rt(aAR&(KC&#I*?zPz=P8yS(AL!naMfV%=Sa zFTo3XG4niE2v5tcq@5=~(P8k6Hp^V1t3e4V%zt=ceXk|mQd5LB;UidJ2v7qDKAI_%|Coj3dIx&25B`kG3`26Q-8 zONiE32-s-z%eISvGTe}3g|K^ut0>v4Kl(j_q>>JH3=~SBL^6AG(lXlBDyutT zSW2h*S03j`A)eBl2+Xy$c#Em$kp?9!h1gg{c#ToT)CB|sw3#XzBNmvYtUp^%Qvky( z?{hTvtb~dU)iiKV#T3Q1W_ETe;|V!Jx@OOgLmwe=lC+vuHqvMjz`dvMwu7q;3m5Rb z%4qHOBiHn=4hiBJ6O@zDM=RpuWi9myU=#XDB}Of}NJ$7$PlE!OHRo^n`i5iWW#Y**wY5tWGw2 zH?Xv*`ctQR&ZF|6YNfQ%k~G~o;)FKHj#oc z@?JvGp6f?qf!*{gkEDN*f*B~F`D6k9;~uwm)2J#VW*;R&Zf99r7p;mzt#dP;?(xx- z&YcP>!%ZH3hEei>1A>c(&p$X%MXs_s2u0-dtcVQaWBc1bK}ybLmT${)NH|QFSYG zp)R<*PNN?PC5w3rq}2=D;c0<2|3?h1c7aebN_e(IL+OE z5`gHH`#S)>>KH6V$e`2K-1a+?NjP2yWLdy}uX!vSzrF{qKj@~$TT!7w508b;nu20K|3bZLVI>wyiYp=Z7@tWQe;mDS|u`$$Z`z>VOZv+ zPcv1ht(9mZoG&4875QqFnMu=@XRpzXDCyke?S3#e9D8qz*P|qZ(g(T)nV7g1MHJt6h@$r7_yq9 z9KPEQ;%?qV(3xR}a1I>+SD79Hr)`c^KwmyatTf9ag-a(bsDh-_SM0zExT8Sm`B}Mo zyp}fl?d&|v=CpB1Ldif z70n(_Wd&9?XQy9jD9N~hO>*}ZiwuQ{01oxcP2;U@RKS@B`~t8w4-x9uYqm>(2YsUy zVX!r??>!HK%`%D9lH}1IgxZ#!Z2@Vn6Cs%0aW0yHT^=)P1 zy(nPU+Bs?EFr^#IR(6s2{{UbjTOcqxsjZD0#wxG%BEXEr(=9JU;F6JG0`7EIK`{-PUJWh!OP*zO{8~Ae5pAcirnz`iY;|JG=@)- zKrzYdTT*H^(Mqv-obAq3=Df;kSUI~NOcR$)+MTP(ITgz~uy)A7 z&3j8~HtvqCDI*+@TJya_Oj$0anJ^HNK(4x2*;M$B?7DTTx9t^?q9dmDK8Pj^L_3y(>RZ*KKUZ5%)i!u1;-A?%|H-+N9)# z;;I$N=bx>1!vvG}ndw6(Psn>Q zeAlo(al;z%%e$?hpysJYpteT`+OU=lOI4t=Odr;&DJN?l<9lOasar^~Np2kEf~+ge z@0;wB$!@@JQ`A;{oxI*jkuGII4loI(&%B?Vi#Mt3S;m8mwPyGVHE63z-4Q#NY?^07 zN-451jdvRBQ9T>jb4aK%O*8FrXRT6_V(fh?Ff&^6E~YNFx*9)dNBgFp#42tzMK~gx zcX9G<2AYPVm2OzJ$S*E8H_B?D=bAq8=7#xru9U2g2NPA<&Ol8vm#rvLYL1^#T zFSQ8mqh)88ra8rQxTLPnKBi;J?PF3o#P=&4F*Ba!M?vap@rRSnd9Iq*!%}HBLMY?i zcOb;FZSCnx{er+@$|vJqY^tlYkIwVFYOh+*TO7!U=YdkKvl`XCwzRQKz1(cs#>K%j z>j+}JUC^;$52a@+nq2UkpJJ3&>yAe?FpQ1|O4?mF3!T5ESzQ^LFi6@Dax0nDZ(=Pb zV5B)b)a!05PHPD5hFW;=JMOBb;ZR6?k5w5Ix#sjpUd}{o2m+;40;6k))OD!7*OSI6 ztFluqlkY&|Jk>Ul&m%vDMJ>xm9_JxfxhE9WIWtJ>qc0W%y)mX9wT~vTW`ORv2M4uK zo5Zj#L`cu>c&%fFo7onywIu!%rVr*0Ir`RapSrdGk@FMyRl8j#-6RZGaUQjB0%}AUu6g1l)`Y3{BwHv@{Foj1sTEc} zhctuk)O}5JsY&%8GfbI~NTqYZ>ME1y`g4+Gw29l)im{qh$!euiUCkXyC%H@h5zQrs z{CUPcg0b~K1IKeHdnXYLV6HpYWR|YUl?U>q$b|goA6_eH;%i0S9*!Fmh>yb0HM;N~ zsc##|NOVw79+jUCiF{7gf=|R^y>4AX)<2c!O~;_kEzRYfg@C%9l;q$pd9JEh+*8w* z=VeJ^Dr-@mUG^#Mmu!(0KBlS68Cd@Sjdgm*iL~qMfQw?%05Q9E-|1Ct^!qEg%!1j# z_iFFvpDpJb9CGER+nX;-;JEkif_6`CwG5sdzK4)i)Ag>cXH!yT9AKP^@xHrT?P`9( zM+piNy*)o8hcG-XwburtkXK8oXyf5STaV)cDfLK>#~(~C3C$sBR1;ZDU+4M z4un>F#Ul*w`In|U*5ksh(xWzjgYR7`XymPhjHS&T44Zq5zR55j&{l%5BLb>i*-0B^ z0d8rLNYS^>F;~i-$2A(0rzaUL4G(IKqXf{Bha4J`l2&JZ)Ru*3iyYN07Y6%$wA4T*w18(CD`bBrOxL+z$e{u{12Xj+n@{ zBy`5sBNb*l_Z&72BSNHcQ8WZsoYG}lEYM4|Y;%KFV{z0yVU;44WRXt{Yd1wQB}Fr@ zf%6z3lk1wF%*Aps>lZeiM)mZo(D<6xLIkMMpHp1&!@h@`R}9pSh%&WA&@M?_=Bh!c zLoRl(JaJbM&fJcbpRkfSXGT%jjKag5)KWsse(hUF$>yHGFyo4g$|Q5ugENi1NWip5 zAl3K^419_K_7trIa;_SnHjJkcwgqVlyxK|F;l|B1%vdD>Cje4;hHR*!2~*9}y})11k@dVll6s zJ4EI+O=jIyql5{LF_Jj0RyZSx%LvpGb6$lmmt#LKZlRdihAve8<<-Ef*=?>ZSgf%y1HLNdDpfT{uN!wY zQuPipYH>7VaC2B;xD??dfx*RM=_j$#rL1xhd6k~6bz>&@@W;^A z^zpsuE$7CHMBzNVoE1dC;s@&N1pM5-*5~r}x%! zKl`i&avmquS6bH=`WT)h3AbZ5d8LNSrmH6{k>l6Pl$R^mUCIv)ob$ypc#?G5!{}-| zdy)nz=2t!I>0+#TU+S+cl}a_g5BMe|_U0GEWDdkvt9Wl&g8u+Ww^VPQHQGmd^Lw>2 zDGgRUFR2YTQW45XiOvVHu6%AE+tbr@dl+fd!%af2tGVmJhB&7ynynn6kw`fNWK+W$ z`MJ`zhqSFFbWfbqSRv{uyR*`q7jWrVb6JMRKYt8&Gw)dOj=8MIwJLZO)XQiO-QuWA zXzR{1U6gAbl%|@s&UWI}<&3T?kG+lIx@e_9G0^&o^rnodu$}vreu`b-=rcC*SFFuS1cDfuVyn=K4!iWaGI%4 zalP|QXCZUyGAhT|<%L<8915=-Z#~>_Aj>(xr0OKKXM1nir!`~HJ{(xDktONn&&myV zt&%GjK-1Sp)1rVr`3jBW(ALP1cjCS~A2&L!gQV7|Xg* zWhye6s!~SLnMy_Vs**w*n%6M#%~YBKryy}!Mx~C5by1ekkx>zY?^=c|j+I_pY>bYz z(Hf^rYNxq_soCydIR_)HWE3N zekOHm;yqdIV~wr|Ra^{JNiT0CeeHKXeFTIL%B#lPlwzc>G0~^ZvF%~7)FnwyDH;|U z{-LMKy(TZ)40Bx_ua9HOE!D8k@j9B~$l{rRMP*Y3N~b|p!bR+QwYQ11i;@D|fN_(a z-qg$g02Arf@oq_c#_XV1mATm&J?Zxsi*IJKfEmvK8sm;r1uf5y&fX^vUNms`)n5Mq zd7`|)?B z#>cAgYs@oU4ud<0Jg{+&Ydmc=QYXEZ)=sY}=z>9v=Zc=$%(5!4JGxgP9pupDD`aD# ztzQr7QjJzP-B)XH2c>uwC|Ndr1x+H_I`+1702+)!nfs!&Rz;8<$DWj)QWM&|#Wxmt zFA(Fo&TASnYIdy>;xp@9x$rhW<>>xZ=vOxEkCo&atM+y$rF{+q7L`3&^O>$?QWaES z&L&+IwA(2ZKJaCtm?cWteu4~ik2<%93nFxYS6dS?chRg zon89{s~>NM*kTyeW4m3~|&Nku@nJ;Et7~ zX-3+!Y8V_oRrT}89jEkI;Fdm ze-S^8I9hwC~ayVVs$7QXZc}WqM!@&)S+_nOhT*qb%jJ>$C%tyl z%;P;ItXy28z2sr5)T;E8={MG_cf?soaaDx4;N%~rbUM(I(Vf(+%c1GP`OQ>WD#Rel z*cHc7-0W70yDh{FjmJv9g8&MK7=&OB^2a?^D;$o-kT}F>_E!^SDkgB*o^~-0E zYU?z3qk;u=$=o^3d6=Z0r>h!qXxwKD6BAfh*I^Nm^gXLi>TIS57_MgaQ#9wW6~{&` zv!XHOLf|$V&{UUG0GO<{VoiFqso3SOUF?ZG+HtukGN+oT?TUoCuB49> z6rTdLK&J)G4W3*Yh zoUWzA6jE|&aY>RUGg?|*v3a+!>59%pJBB*fRi;~rZFjikmx|}DQpomlEF;9?Y}SZ* z9MyZNjB&6PERTlkS=UzxRF0;(V6M;5+|(grld)ryQrn?v6bi0QY3X*dO8fdRY}Zq1 zBaY5Y*TTaH#|EfM#hBu!xd+YwWZ-qG?SLy5uFjaP2+sp1sa#9EVxK(ZWD2NTHLPM~ zQli-a>rVhw4A`dmr?qR#bB))G3FMP%@l=_MF(#GV;-O<&s&?GquZ+9Ulu{HdX|aMx z<27tVPB5mXQb_sS%O9sAAQ4o`fK`~S8IL>)ww7pv`^KVGQa*a7D*a65iP+!@w-vbq z=c|5BIofJOiH}fg2~|wwoqLtUN;(RZMBRm0SU{;fv)EP=sB^lcNdWIsh?I7zQZjo} zm_dZQ={=)p4acGpd$dh^p+B zjmxMI!b38tBN;ubmYN|HuD)u?lbo$bbA5Aib0nu8f}$A!e8A?rXwq=p`pmNnUk4Va zJEzn7W1j&@#&9}UN8!y^Pta5CQQDcW8@qH$=irFQ**pMh*g&;)p?wT<49VY;2Sb13 zO;-FB^8{l#1whSYKBIRb%TDZlcU5920UX`9I#?@H(D#Xrn&RGR7=7X@B1!%uTKfp} zM$adb_?g{Z>socO0L&y9=(UkAiJ?+_t9+i>Cb`gf#U~Y#!NNMTN;yUzp0d=?xYsZ4 zG6b6!(Q2HN+)u=lI}c3MU;|F+TdHtdA=Ff!@c8-koa@@A2CaR6JI*l(%j>gSk zSKd!7YT&jAa0Ox8UrT8?d~Y1_n$Z5fa6#w@ub!_;r01rmE^osa-)QQ?-bSLR zj{t#+QyfwsO2WJGt%>`PIbbo2)?EHKb_7LeRQi)j7z(mHXk-}4J2=?vnmE;YUF?)+D(Tz$t7agUO+p8oPcM3+*KPDssf9JX(EcSD7$$!hG+QkLr86x}4~ zi|S2f+<1>mfbn>ednYyLOwNCZk?v`j&2_^qrkA|#cTwS5OIowPr~EnHf5K&A1D1t} zA9Q+(&A9Q!&U0yOh(Fpj%wm@nq%ahtt&d8cLxY6A8~U3wc(YczCw0e^Jrbx*soz|D zvRueV`^Kw<$>3GEZ9&0qD|Jp0TOPd(wuBv{1@{G+cDae9k=qOpENf3#)$S!xYGlkR zcL9$709vS0BvXUUS8y}dwxuY?q2=dvsizeQB(1H9tb{K%`Q!+L^{vM76|50?R_nVJ z%rPAfDZ7zPV_qK8S7*l5!>X^j>ReD5gTbhQ$fI?9<5oXyNVKybT8`ovZkG}-KBA)x zX?N3$w!z3_-B~;hmHC&pDxnNIsTI+X7;-ASkf%Q=u834)NW)SI=~XW*jH+1%4QxHC zh9nGAgg^{px}jReb!jOrPDy;rc{ZMvZ6718XkO{QcqTp?ux0yAr0Wx*A)9VRb;5Cy zJn1(=UjG2XY2*=6w>1cmuLhmw165}4n}G5&i2f*A;AW# z+ZJ@;Nh7W*Mp+o`@}KghI42u3t~lCSUPpIie$!_hqnwUu%%pHdRq(`*C5M$Fkjd*? zTNgbm=CK~-Mvkb~PgG_V2en4fj@6>@0&*%Afrm=XOxiUOp7C+bK_$966)V=Xnld`m z40#o#W?O0QX26qL9HfM=OjNC@-$l%GHV0~*;;Qcn!L64lojA#AXzBhVl2Rg;Bfmd; zIIfZ>EgH9|&3WiwD&x-Ek~r&HcHS}a2#Vs|Z5#rpoL4p{2`PUK9)2d0iqRdinvgYM z+W3o2xgZOGjC(a{$8#KngmBpOHN!kS;iE^NJT3ktT);G&d8kCBQ^c79u~C#xN|-21 zbXLBP%-XBht!K1lP6(|zvUwe9w%ndYYZ+T}(ZWJBX{e&6NTuCVv_RBGA`M;9*rb?% z(D9_Jhfu@NibAAOk}8y%*mf{AdpP2d7~%>D>IG!^B#h#_DWXZ@D#JB{ab+wLFazZ5 zYrc(bH9Be3R*)TbFMGmfP0kyYnL7<7%wj!Q2}^$Sl2=<4K{+1tKJu7<-;)9m3e zC7fPaIXi}boq1KWIK_LX7GSDXgNlx(CxvA<-X6DhL%_h?*fp{(h#A^{@2u8{g53~{ zbU>;yRR>B$k_H$_2JcGo=ZKW#@f zQbZ*gP%9?(7C=c{8tA2nntHRb<`Jh&xt?=BhsxfauZYRc0ILw%7)CL`?~b*%DorDX z*}%x+p=AdE*S`!?vP|OP?8ocwteUl+i_1eiz^sHa3>xR2+3odpk}QA-=kcz=qXcnT z_Z9_#U~p@HY^1EudcGc0j)z5UthUv5KzJSNRtxy)u-zV(EuG;!3z&3r7;WXPzRJc>v!(ZE>-53O3lvSn~Vj>Xt?H@n?~@&>SH`yaw|IHOi4av`C7U+gf&-tYUzb`j{10m zlew~zA)I7;3Z*KE6OcVCuA1MdBZ|zQO^mB-7;d%bQN**d6_Z+?bE(*^yoDoPTj%;! z8&AI6^NQ^?Jt|MLG^&}EPB`a^=QRBe{#l)jMCU!RUhND_d39&cX7rpXN>J9}Zg2oK zYprNO;cY>|BWj#y2C1|!3$$_!GMpO4&N7yac?|1)Swf<LJJ(=>+q;mF@JoO{KJ8>b01BM|uuCsQ&=(n!$@uaxlj=GRz;G(^z=LSsA>i3s+i^ z)X>y5Nv|}!g`HG!#szTPbgqi}W?OdK(2i@H{wDg@qk)et&xhii9UL`S#*(-6$AeM> zP_0U}>qPl9NGe6B#YnZZO=3J#g)~%)S|dfcqz7HBGAk~9AQ^W=_y?#awQ=5{mNLVJ z#VNZZRZ>ydZMxf9C(RId#tAg}HAgFi8&|T5sw{W0Ej|TVj@M3A#FINWwQ zWi8#Y&kI_=+BV8RcW%FxMJBf(7)_C{P83k%DQI;=HN(-?6v`e|hI7{ydOc=C$C$sB9>PrCJVigVOvgG7tsvf(!M(GJRq*bzNX?)h@G9t& zQ!V$UKZQy)6(91|zdEmDF6GBJ#LrZYba-P{Kk~(YI(YD|ss8{xlm7ayh-!=f06h=q zQVmT{{IoQ^jJukw&l1jL_*YdQ^2JZlsXyTt)qm%Q>s?6Hlz+=ZP8z8H0G@~QrR*o% z(PlV~rzawg?)pg_GP}fnvEU}aHtR+>)bZ)BGmqW{q{q>;_Bo3qAuG#pM1N+>s z<6eZ(SX`V>6l8rWw7M3FDbJFl=~zn@4V+Gxy0+CAR^B95P!#9!t$SY(#6aBOH`bt+ z!a7u=G0NzDss-?JDIQ(JA98C6`x(6u^G+$^6Jlb*VT@}S3Zpx0iH&RA#ksfltbJ*g3nIYs+*hN9dZ?XMbdAnpcP$|%p<~4^a&u9+ zz^`gCvEX7V^2NxCLz7XO4_Yg0A1PA5G}|Y(PclF;-n9j)dQ=*8Lj|iq@y&Boo4t|s zSwvWs1IRsla?H;wv+Cj)> z>00)ss<6Bt&WO~MmJ`4 z!{m`wnBY>olEj*ZMz2~3@bMLtQ*4dfCYjcPX)tS4kDaSo$=qJ`GJpj!BP9D(m5(B& zyB=025ocmBwIV1K;R_Q}#{d}3XDJ?J>s*In>roIhS}h;SYKtM=nb+AB&>vFKK-Ysr^wEZ%7Y5%PDf>ZXqB?%QxoUzHGFgsmnxabZ^Jk&*i zqDLaD?q)T#Vt9D$%8eOv-%(xi-DpI494Zb^siSUs4rEb6RdAqX`J6C*s zxD{?YBu>1Vy0G!dz@hGKEl2NVQBBm8_A*nH-H`&oy*AY8XSj3%v*qyxk|Q$Zh&Th* zvZwJS#JLc!mZpf(t0!YfVQR^p6Whd@-0HaXHJf#+Sz2cj?>>N6H7&%`5?WV3jaFqW zJ!`HQPv&Qd&fCM3%#Z1$+cE@<)|yA>!$W9aB*@Q1+x zV^Zyb-mQxesk^DirA?;G1+1XW9`Wf~@2S|nc3KtV)|97hk?&B;dFi)%GnX;DKG3{W zs*8}dw6P`I5gdC#smF(%SIh$zJ&lT0?cOo(5QiKAgW#WLNy-S_h9K!T6nQp8iLIooV}4v_)`uq}@{$08}h_;<^u_#MD$(x{HHNB9vyA2CW`dO725x2&p!l zW|&SWWrqZCr&nYxr^x>99B4Sm3#YG^H*bB=8er3`H1{$KI^!T8e^FGn4CF{PGzXl6kI*5N%zfJWWKjOk?1&G{SL6TAE3&#H@L8 zn5C(?qKczCi<(L*SmE;qbBaYqHzMm&#|ygw&{fFolmKy>vWTicBq;SYoT^)6uAUiQ z@*{@KE(yUkZEPmE1R>fn*EMBdPPIVt-NsK`dR3cSi+kn?YdB`d8%1)?zbp5T6Nob! z_Pad?}jU|%MO0tr~XKAj=EempQd50sF_o){{jwSiu%+GI1 z&Euet&n1{*B`eNHmNP!$8>pt1K9%S?kA&c!b(RQ@X6 zE}GaTHqX|oJ(SDITHb}yXoJS#f%K<3k~ywlZ791lm)bX@Ig=BqUwe0=~-dgNXvnc zPf=e}O{WN-KRUdXXWLU&%5?M8NI1yNb>G=`@~X0+0F3codkeELUgwJT9X~>uwAeDk zaX@oiIfRrf%fn;fw3|8B(IO*;VffWcod*y(Ned7UTJ8S;uw@KBWygMMrOuIg6mk%X zR0GcH;f5()B+km1ic^Evp~Y!xkiu1yaWY`>T?95SD*~`_>x!qQO=D{`iF=QkxFfNy z!p~CEysfd$xE+mYipJE0eiQTBIaPY~dLA&-tlLa5Q(3`NYAgdVih0*=+B zVg{OR#b~OVs_4plP)8M7OI8P`6}0y3I#fn756mlQ)v>f|-EMQqVvvUUP8j6ou{Etd z<_3lpQ^(4H;$WjW6;xLzYIQV_WhqcRFT7z<`b<4PZGW5*SWtIzo}bBLR>QpbZYbs z3hGPUDk-EOvFnQRU$vnfE4lDKuK~7uN0V%uzEwTz$;>dm?>tf6h*8}go+&mhJd7S` zE5PMv6PiRV6-LpKR%vi4>Wht1iI3D%8Zc`4RVSK_;ThtoOxiU{1~Ms(x$9SqN7AEc zGupIMS2c}PW8GP#$2i9op7td{+Ci?7?eZ`MQkK?0KJIdBrWH<_bK3}B~|aTHRHN? zk4%cPx9Z0PVyKiNn~L%I6F$Y#gpGu_RtIYiX_7@Lg}j-WU#P65B~Dc0tflc>ZW*E} z$72a$wY*Hhuj-cb80L^TLxLN}LR*nEONAq!t!Cqj=yWO6 zLaCNeuN_sH=+NKUT@T${A@(N~7NMBY3LIqiuROsGkZ^rPTpE?(E4p@VqXQMKGy(oR)@HH}O(lRGNl@2o0 zF#O<}dw|j6mF-A8Qwp+UCcQYjp4!(#nvzqb>dPFQr0tN$xB1OYK2tJk0_@Xf+ z5lRQo8*pj<9MuKd{hi747u5Bxy3kUjryhsS;cBctI;I}_ZjIqf(wxXt^G&Wj8T3n0 z>ok#^sWoyfQPg4AKJ`O1-YGaHCj`y-FQc1`fPE_BNXU015%jKCp~&K=hW>aD-rT;1 zx#vMM3Yc`(hg!Omr%}6#oi!L`P_Obau4Q#t$oaB3sbRW?=agViy)J-@PmP3fPAEPs+*%zAJ_BexR2y$qsQQcQDUWT}Y)~lcz3Ld-+pXj2tB` z&76lB1RCW0MQw}4lWrB4uf1$XJ4SdsR9cZ+%Tk4M!<9aUv!gyq=y$@CjE+U49jX~4 zB?zl*jD&(Qif%Jrq-N2yqjR2_e7QE7tt#YJwxtdnNsnsIU=4TEmC@$cr@UF7N6kR( zQqF`nMMYgvK3g3IuX0rtqotCUYJEj##&cGom&rTFYEoJr4F_uJoqCeE=A=njFwJwP zT6XBP-|cC`gOS0mXB`jFsmZpQI;YbfMe`BC&p4`2r(FZgL}Imc%|bhyWNhH$rD+Du zc@wKR$)>Mcx{L$V15Im7X*pUdG|Js zCkY?0aery|YChC|y!G1u0B6|$0MEL9RKMBwKlARNl`Blw>$p$kIFWR7_nxPY_^)=Z zzxzJR{(aN(r>%vb{QJlGQE3#hxNoxqlK#*hjrmgl0BG^izbfm#!Ds&fKGFXG-!y%K z)Bb&<{{X&e+Fi=}^)KZ(nQu#+;i;c(Wakh08t(?3W`E_~KPq4B+Y{E^KPt(>SKR21 zX-z9~oFLZSP5^Jn)rfV6X31tBTI|2FtUu@3KPpDiwDuqI?4Ok{XD;Qe#+%t3!s?^E zpRG>1!hyu2HMjkPr<4Bx9?AJq{{X^0r!fBjPzTbpoeS=59K|CtEnTtq#Y(!ogz&@j ztpVZt75@O1XCGQ{&}_Ra55~FWg;zFNk|>Q@Pw(QaMXoe`TQy*4Hr}W6py*be$^7bG z84v5!<+=s&A3U{Nk6sL;ZBrT*mV4FcY;B@Y7BE1lcyx#Lice%)j_}T-Ac~MwY5*7m z6!of5mhyE1G7|6jF*oN-LIUR7I>!QfSt6MqnEN^YyK| z;rw9ix{NM|Zq)?-bg=aOr1?$ZQ~$1 z0dY!GNcpOmqBvnEC2$mrMX_U&pL;fR<+&A!Xi%stR=s#SP|p3O0kpL zv6VxXRapm;G18;{$)4g|LYW7+=~^ovwO_HhYi7Xvrn2_dGmU1RgfXJnf0QB{(TSv~yqFT0S+DV%h1RR$1sMQ+` zN{~IpdOnk*X}21D69|>EGsQ`$=r(_4m69+BQb4aZc-k0rd2K1e zsXq9tkZEMM&TuPKLJ)}10fW-6#b~NQmyfR%GQ}&|A0dm(DpsE{Lf*m@QUoE7sjE?2 z0CAB;#P+t$^Ed$e=BmxB+M@pCmOiyMsW+j^96lzq(k#&y_&q?YiqgdvOxRKHT)g_b zn3-dJ+33V{thu!t$Kmb{F^o|hJe#vS>Et!#th7g4F0pQmM3Z#yR3z~&x`x_}NH_!5 zxmRNO+;d2ywR9{cJ8E{rC!q-5qq(hfuU*^|rrFsxvg<<8HcTJXqq$K$-Y6gM?8+TTE^be9kX1@r1cA$)PEGi zZo44>fG{vBD@t~>70l;x0BErlZoxkfB`HF^tf=9U|9IjbOI zvXswr34w$)n1OcEuil`VVQdP^R(e`TVs*hd-M8MRlTeUGV^=sFR&&k;SC&%U4K+^t zna>eziC$cj&sv3>CZowc=&h2m!zzuj)KX@Q(<0$XN&z)2cI@Vc>^Q~CVlbt;4As~n zDl)>RiUp4u$Ky*h@y5JkHJg>r*ilhelLnPzUbS9JmVT98H0Q-{gY^`8!J1EvBx9YxD7vBeJ(HbNR?$hWNuA9Zxw3}zwz`} zo}#&N6slBQt3-TOYmKRhe$9L*rZf>myQGm<)RHQz>bf19=1a71RR+AaeOCJ9lQqT3vPvHMayige>0(mf|v@vfZENd}(*EW;bmYT#v>L%E%aB;=gcbleU{ zK}~rwq*q)hMxK#Ar!B`q6zwg~V)C3GR-+zC~3&*;X zvLmtb;CM`XaC%pM{uYsmEQN{hky*0%I!I!YZ!iL zPAb*`4xtOOj5V0u@WjV@6#I8Fl$n&~a|g@aBoO5eRx$I`kn z31TdZ;z&yi%Tj|&Q>$zEvGZXaNc$`; zDwL^4GFsbHqqNrMPGOya^d`2g{8^|(pfHY6@5OLHIuJ!$wZ7QfWh8xTimncvx*c4Q zmgw|rZx_J(Ma%_Ha=is?L9FSwBrI18xb`*XM(QA&_l#BjCOd2Sl*xG%aRZjiV3FRq zD&QcM&U)Bt5smL-(t;#|C_(yC7%IJtnrcKA&Uki?KKRXE>M}5Y8u6zIMeKO55z6d} z#v(dXS`7B9TTi6~R%)k0qm1rnJ-Ek8h}*Cr`c|7JY9@^Itz%WAqBzyu;5=`lG_V`^ zBjtYhAI`k#PSalTs8|dAK6^$`OpAf_uNl458p`fiBnNUfE9x?=Q>_k3ZiJ+&PVg!# zW~aBFOL>x5n1@r5gHebGG^KW$^_?XpW2!f6Q`h`2;t{XeVo;IX#qzQP_r1k#HWc8H zKDFYSUa>ZneHF}EB|8q{rSU(Bu64V`xn0nr4kHJ>cy+RgN`C9m;;TYw-8~OyTpszS zd1Tj-=zb-ErRXpri+eHeUQ3*PmZ4sSOQQ60?oq?smROJ?RWY9=WVb zUm0oh0wza*f&51~{Hs#mRI$7N08?;>*qm3HIyED@IA`^$e-ujsGDk{N4LCM=1Y^`1 zb}}+K9<_?*+~k%vqGSyK9V#OW4o5X?fNL{XzD+*SrIJ)d1G(n9DMC|rj^#%(p3761 z@v9#$6c`dA+%a4P<=R5h9Ftm_w~AK!=gU;c-NR?CVR`dh-8zKed)L@ykaX#;bz|mn zQpDA*D$`9Nf$~>1Z>C+&>Wd3}-SJ+B;k_PBHoz>O>loykS*9uqjgz_G zkhbw@$L3vVi0e_5ts@>qLePr&eslCF)hLworW7@CpgpQ4jEc1+YZ;X#P4SgAl1xq z>~Lxstky`e{6mpjx@m&%O;E??#X5U5NXw&bD!a2>obu=7XP@=XSy}Wv+h2hrwU9`A z9AdbgI^nG^qnI%mZhggUc#8bo>NhF8u?|P;SRR1(ucgCLwL3ni%hpnOnb+pko~R^A zqgMwZhC!y7&uYN%+|Kq}OJ{3feKB1$V=6OV9Z0%!acA1$s{2YxMM4PcQ99?4O=uX@ z=OUtbILM(%8={bMI5hCU(`7=ZH6C$Vq?pNw$i-JbBV|b+Lr>mnDGgGJ3l`$lt`UGF zGW*q;wMeclWQs(=WyNCyns-r(YMfk?GO0>4i%jG$S7pSCItCzA1xXdFsM;7NEC&gBSelKl8+aAy;p%ibaTM>W zF{Mq*RG;NFqJ8R}#C-8ylo|7Rr8`n{8x!K5Um}}nYbDHuBOHp-8Z7wcs#A*G`RpDB zrB>=jIu#;nmZg(Un%y@r;-JlD+Lp)HQ0I&inz6s4+~E0j(XHE#rnucIK(_-Y714=C z2Q}tmX{(;r8h44e4Z_GVo@%YkL1oD3YMM!c2(3jyENV}saZWs%o9JTS#G>7ZtP|AN zQ>jC?&O_;3u{@gea4zYeoN=f7)IC2|Ich=HqFR(!s}ticNGe6B)}&h2Cb49TPZYsV z6{RJUYD;l9NYDA`raH7SYqFM{X(S$|Vq{dup%CL>ye4u%2z&1rytzc{mLx_DO6 z-TXeijr=hala^A-eZ4DQ?i*|Q{MU$Y9Awu4;d$n;($GhY5t0vj=;7B2ef8V!E1tF% zYP_b8iL0D@NP9b)si#0B`67(|6%4g+D(&yr!`hJ6Y6=2>9(${Wq<}#gIU**!h{H83I%W8M%JxxvSE4cSTY^M zHRw^PDfK^9RG}EBZA{yy+YcRUFr1pVdnR0Fe{#iSAyO=Djd|Qeya@*{Bq}FGw2Wj^;3=u1!9b3>>p+<^O-1$s)Z5TGn z{!>W8tfjiHGgdy%%5k)V=~@=rd0-j(dQ?=ZqoMIwoMWjcC)BA8v&cAJD%^G>y=g;e zP6TU#+||)xfH7P(F$bAC?U@T|z+o3PGD27H4r^*V6&T|toOHs+AXhZ8E4hTE*^T9M zQ=}l`ubn>!o+^0lQ3pKKI=T^lhH-}jrAZyJb6T<3nT{26SFN;`4ha~nT}E_5jnP`j z2$YWa0+&#i%e8+}F;}i_1SrIH6^nl|iwRlI7|Pdh@ZBA0tqEo<1uS+--BL zw~i}iDx@k7K=h_u-`e?1Jk7@)1#|M=+(@{22pQ*^%DU9;;3qO=y#;wO!pft&Jmlvu zgxrqm(Pd_q*-GNF{6#Ij)s#$zzXGQHZt-Vy_|)xjvN)#46XL7L#^AL;An6pr=t;mFfuqCY~IS zMJC2>g0%BKcD5}&nGOzWWL}x0$zg&;E^$eoZA#91T$41JrWT~#Q)3ko+p2gX^Gz}| z-ZCHFP*C!kpDfB*`@_*Ez^ul}+BJF+R#pG~lBh5(a!z zJj2-3WwS}TwMg>n;x6|bNn^=0gCydZT9rwwPRQl<%2KxF$dCceT0#J<sixIiqo@dY_--ChJslkz>sCscodp>M%Nrqz^SUxjuRyMidu@ zr_EL|O8TRu`y53)=fKBm=k*pumAtWmSMN12BJu}bxvV)@xg^y^Xnv1~m7~dGGbyH; zUeugb9%Hmd5lT3uCY1)`ik3`gcVR#+#a)RNMo6Yb2Xjt$+Au38E1snqN(-7qzHl8V zS%EcAe>85vrOJwyBV7y4B8smhx#>`sBvW%#q7$!l3`sPU6G@u1j#*6$Nt#U2PR1^v z?zH7h(*ZQ##*;>nlD?&w;}tlOA{i$>)t+Q4-k4<1dWRdAEOaU8i<4a$I0pi%lao>I zpdM-Rq;gfvQdex122D$hQ&k25%}4<6O-&=_v3ZQD$)&J@k%tuV8xz1aAhvexNz_M| zDxJ#MrvJ zcFjdCv~ouAws69xBWUA_uG4KfEt=@3J2cK|V3j#@(psFfx@GJ#I&JxLg*60z8oj)7 z(ha%pYq1w-*xUymwPZ~LM~^TJ*QrYu`W#uMI@qNjYa3Yd%e^k<(&9*1DcXA)rtrFT zQ(lv<=}_F-HO;dRH92o_Tz=5Naa}7E-sjk5brk3%x)?u!{Hd&<*F)u@7%D$1tonRU zlgOVKjKA6jFH^t#{Jcea6q$s>@+IWb7n*irH0(E(UDT86zsBkELe4v%-1g zcCEHjrv{>U!;BGILVt0~TMnnMQ!YD+qF_>2LONlwTK4`W*5fJ@P?H0oIjrfe4oMYX z=0nX}qe`ae;FT1V~^!tL89DSMShKS z5Om1nHR{&-)I!-}5rl|=w699?a|{hAtHviaOd^`R5xitYJepy+gmPN|b*$9XZ5#mE zqFakeB4ioM3|E&=3Y?N?(_~`U%l;>yoFB>fuEY2 zsA-ck%prC)v{kbpoz9__t<{qvX)?j8j<&9V=&3)4s)e@ngRg zR6;w~qfg#fMl)AdGX8kma^x`RYogPx+IRqwvh|fTN)Jjcb= z9RnymMLAB)6gy9-sV#0Gx{MGoeJV${0OTGk$(l<>k51lzSo2AgqWcNVH`5eI3m>J%u!^F?ZT^UG<+Sfepx2zVH)x^@!l%+3mo^y^Vc z3kNvqNgn8!`-=3v*BdkEb38vaHw2GF(|l2DHNaaP(=lhIFv7#P z6-uRxRg6}QkGv{BB|R%;?bZ5Ek5UgR#YC5Q@H&%@#MHvarbWdo?c;>6R zu=~qf!nagy8mXKW#0><67-Q>Iz&ZI(HQMSHFx|z1)`a7!X*oR& zUkhswE$mi|aoaw%)9c!o_HL7LI9>QmV>qupODXLx*5(hs4tO;-x#AgaG^s3Q{{UEd zCWzr96of-U% zQYoZV#R%<9D_&1i-%PD6A=jrhLP&}n8rR!Z?qM#u9cx%l!?~G?jn^Wr7|Qh&!nL}P z%;zkJ0+nPv>ddij991XzP7hkv8i|a*3ni-q$pa#}#yB{|baDXbRQDCm&W1UPpIY?r z&+ML7I!+p*2LrFAdWV3amVF7Gha0f9<+5jK!REc6z~D#WTVwo3?_#*~dD@Q0%za@{ z#Pi<8*`O+L!_V$u&S>QW);!PZj4Ws zb5K2)Z@ep_om14Oi%neRrL)dZ_ zwYKw3hY7I=>599tbJDpgRCgB+Ri%lb+&VIa#C~K9hq$h0Xv}glp2oX2k09|})~^Q1 zcUJg$9J+ukN8*S$E`{#HK_%AF+Na{YDK8lq*~S{ zkt7uHOce22BV;&rsRb|!c&ass@lPFTf}XS%hl+Q4Xf(a(HA96sb*74V6pbP{3Q#Ep zJW+F0D5anZP$(@iK&2D`P6DN~M8u~Kl%P`Lq|pi~MF3LbrJBSk!jlxBRI%z*9v&p_)WdPNs@=LpDQ&ICZ9qQCYKCj;B*;YbI|IML2Y(ig2uCZ4uP!Xs1^^ z&EhRB0+zVy9WWBS>&G#PJVj`&!kCvQ+i|Z(HRoPD1nV%7)5#yq)|qa*Ql&)z?^V?@6x`1GfUbgk@fsNQk7aRFXF%9 zp~m=yjF*n9_f2y*t}T--#zz&osymDM75KqCS23*3<}e+AuG|b;Ni*-~B^oLD88SI{ zEP9$)({ZK%NvlxCK(A&_%Ez4#dEAvo1y;D1ur+0yU|Y&CS?FcPw&c+s#J~hojl5s_gSeec;zP_tz7Dt(ni`P&AAVceZ}D z!zwlB6r7KN#N%aNOzE$*MH2}k3gC?H^rpq9h{w)(sv1V2D^5~LPTX(}X-Rqk;8a?1 zT&dj+L>qK8& zX5a=$TgyJRrKRhV+Q#W~nM*c99^Tc4EG{Bu^CBwP?^9bVvBZL^af8txp>WnkO1=@* z#79=_ba$7b;NQE4BLcGK)7w;!$=m=ZsWnRJ$-w$) z(O3)=sp0gt!=>;%<%knUjAyN5>fRWeOA$PhhFLmo?OUJlu@r0siLwy>;_*7GgIn|VrFr*M<;_KorpZk(sRXzTtOYm2iryMSD0=IkqpS6tRcd_jzx zf~Nz|;kCz6%~%%aJS}hk0AW3`0%t}it_@s|OGp$H9esJMr;M|+J_@B-rqeljY$gFo zUOLuf=n_IYSD=dpVhfC#rFr4YJCnSEt?gA$85V7WsOMEveNG>*aX?Z|Kb3V0;mbz; zCde7Y)1q_1m5HiY*bQBy@~Bm$t03K<~(*48@>k= z?aa@irOAV(%Mr}uHC^8(g4s0M(kjP|i^ucn5eYP$(&CpDq2;>Qda(lY%{(vzwIwFf zPXi{47aU8c@Q&ZlN}UfwO-oCO2n!h*?rLVYct8)lEM_^>k0X%W&^e_Gns`bq zd1FGEbb} zPeJ6;a(Yv9PfD}T_Poz=1Z135q=X>Jq*hfKsNQV%tmSrkczDx>Qitm)b*HHva$;FVO249CR1v5nZ+gGRxJp6{39R zFAG{#?N8x5=zL9~NN_a>v*>7De@?rX%d)u=vbGxl*M;3AFvA>*fvyYj+mB3FbKwm_ z(4dXtNUl#kF_ZPEtCuQqa*n9hIdZ8b8B1f(%&x~dsE$ustsToL=A{=3YsZvYXVOri z?4!#ahlQoVrB+kiQ@Eivi+*Ght2At&^%aFJzQ-WfMpRX6i&S;bdfF8&xwRUK8W=_p zX{OxvtLJ1@KdWz9Zw9(F7*=;OGHAKgb z)z!%eVfSk`;>#z6uF6%2Xu){$Dunj!)C$~^*_8CE^1<@*E4CFAM>T3OlGNweG z{{Rl^`|VcEiDm~sgz3|R}UU)dY#aoGH}XI(x+Rb zhwn&2W36+MOzkR#nDU)HYJVxuQp9`LEU?tp%=t>3T{zN`jX!woH2q6Rb_Hh}z~^wS zsN}M`PnF^$*w>dy0;Gk)_U9EMO)PD?843~TYl6NNzlENU4^yX(!@96`mGwub8z?cI zppUIE>DKI|g#h~3o{e8nP;qqmBL^m|r;2quc(A1(AKn?RNZ{*VMthZTScpdPX1=T8 zOH12%$L>gfGzf zS>iFC)0MK_--ImF0cR}V%BVMkmA>u42kBj>*&0Px$jdHGMAnk8O5v71SF>l>VAt-W z&$-6M;j7C@GLox`ywfN$JV)RI{Z$=Fu@h5 z8$HEv)uE}yTMrwXTT%Kjq-%T(=CVYNy$wpYa)L71u6IrJIlY9|%(`MY%~z5je(LW;bi?qnv`=|qu&DsQq$8+1RFA^Y6ds@mvxU}{vY zMXJiop!Vd7-SCE^_8aqSFWi@fK8CZ|Mk$DeCP`G`l!Kbiv{c~JFsX)csHYRx0%Qtf z$AMC5j4te9az^5SoEn}>V;IRf2EJxbmQ6F;rCl|-o>vss01j&5iwBX#Aczx!IH~rC z==O-ucvOtypleKy4Q#cTE5%iNIaKk`RmQPVs+o@Q705M-d<;`(92)A(SvXdvLpZS5M*iV_Op`mk-bG@mgb?DpRzN&a>C-BW1bh7TUeN)ZSc5 z**)u75lZyyT)u@M^8k(?m~*&{*GCgvvz2wva8+@N`D|n&-I3;HxaS{wJ zd-SFT^55rRzf+2qN#kW0HNgl<`X5n;#!jQTQK206s2G`l52x$oAs z5uvzH(XyP5mAvs-h^sVt*^LZkSh&<@IKCCr<419pY;pChi8S>j`DX-iitc2D;ehn6 zdgD)c*s$(%N{%XjX`Arm9vhkuLj>7A&YagN;tN?~lrte!HRygzE0LB;5vH5{{Sh@ zGuphU$z4B(WoEZ!&lSO$(p72e(5$sur!RB7@i0@MTr!YG2Se^F&Cy9Yu9r}_ova!o zA@cAB-^Q?&Fe}f?;mH=f&zs`p>Ej}w@~_R2s5J1Vq*SQ_SFaX)$1xg;kwr)&sTC_! z%8McjYCsMuK$Rd$(MZ)uiB!~~Gg2y4p*X7MG>nKg8hAre?5Cy3sUS9;I%x)szhOFLR7nHLel0bNQ@;oB}f*W7MC%i zkr-M~l_*+pTApJ?A}y4=Ds8l(YI%(mh(c3>RJ&>0DqM{tA`O(GYHgIEDtV1mh{Dr? z)PX6%YFv$DA~3YOYCyE$wGKwHkrv8OwJ2I}TFuDTGa(C3+G<_2yK6TjZ5fd5G~f+O zvYZmJl##qn+0h)JtLPb111{LOca zmB)CJGS}(<09?oOG+`ynR_BSt^R`^ynmOf-5kOQQT9pu<)nQ>6{awqiJsgBS@f;*EPjnl&VJQ9*$R1 zy(+x%S{eQ*w35>F&4cAgGrO>^8umc)kPd6t?(TG3?I>E^-l0R(WMq9guQb)Py*p04 zDQ$D-#=~-ubB}83%XO&W)vSH}4C1AHJYiBcb}{0NmKC8KTz%6~*cc7iRykbsuBte# zb^xJq?_QNyYipja0<1MCw2RHSLPix&df8)E#k_CIz+xx4pxH6*D+-v1N!c^xGYoUY z&ix8`IjLf{l2*wW6{7~8ydI{mrMc*9mUYt5^IcBGIAakm2U>Z_tDj?HY3rx9c;>Km z7Uo--_&${2g!Zj3u(0a1h8>-%6-3EssIZ?(oJKLyrd21Prv&z-=Wr#nx|Z4gOk+Nk z)7fhcDg^&;gQg(enx%k zjoeGKFef$iS$#XMaK~a}I4H%4{8W)#B48f0)i80wI%Cg z3B^KYk-D*`BrJN0nPBIUSo^5?wBZ7_3wqLvS8?*3R*FJBDnV-@8|m~-8+T+yQAdl_Z*X~z`_RCYKRt>js3`YXE%Za?%2{mV2 zy}Z?0m*E9Gu*oig=~L^sNuE#;Lmmnw4Q)ye$r*M~6IW=x4)h@*b6b9W_rbYIq=% z(ylB_y=w{9eGV$vxjmUoSU?Zm%}%!QFGLk!EgOBS300HboRY0MZpNyBIH={b^M?nT zw2(;Obq!gH&T>W&)JCnDoN98(JCq{Oi>7yul;+TyH7p+>b*`?{L%fy{@v5-LARcQs z#E{-;dTD2cls^F1Z7fVB?%z}IC}D7tr5ca1z+B6jNM1!(IU=3+n35_$7ac2ODPt+6 zWXj=5?N0LAr&T2Iw7VUS0LRvjWO>rX5iDM`tTu|WZDa%JGgVGsprJ^tJzr@n-$A8` z6oWM)!p%}8z8r4ODYs;GOA`onEAyI`HOQ^s4rpnsYT_<@v(%n~uH1MNRE~L86x|qa zm)uq_5e2(8!e%sME@_;z5ra^ZT`KrPRYpE-t8MiesaM0SpMC};drDF#0sO0^eKIsW#z(b2+SOUM#~Ttot2tuh(DG{L{Oah$hSGQ8V?R?@mkH)#Bj7;)s<7YRajG9yc<+E0j(j*@wVzko8_o-IUuS`}G z#9yh+D${$jG({;KD8)T3nY#Y9q$419r4b(DvG&Z*n&ly8qpMVjZh-X7Ti69I(dk*b zpp#@RF^zVrjC89uw_z6y20oOYQn2Jw7zQ}0a%@&=MZ1A#b+x)+V;HEC!p)8WsF4{? z4NSQmDie^~yCrQU6>^-_ceNQW<3XUUX?5qX1(TmaN$)QCq0h%tyY=@lZFE|rLk!Y2y2ct zEwTEuvpMN(F`czdt%x)wx*k;2B?02P zp;2@)ofOfQ(WvcF5>(_?gtmLmLFTDT1F6OhZmJ{Ct3mWcB~nR*thr&*tR&_q5=KhM z4ne3kljH3cQjd>c(h`cbZ-5UHf zOoCmfJu}w4TKRN!lv(NFaSBh8N1z5_PZP5Du3kIYz#C*Wadn4}8>8LpUTm;(JsCk8 z;^p(jNG=SYF51Bw$tNCH;awJ+ADwEmG-X-48t1D|*{ib(oUm79Eemx5no+UHty37q zFvJ_RV5(bV6zRZVQPF1@NU z3iTDFYcy)AwsW#sNOQPVNp#o7( zZq+n8BV84aGDM@3>0PSm7KMW_E$vrevWD4q#DPbAS4?rX+~UU9o2KDUsl**M?59sR z8@B$HE(iw)uf1>T`di3+=tk~2QQEovq#Payt$wnnvCEa@xHwQsq!gvq*$2!Q?yu)i z$gHSYS0~U^{VBqlsNUzLhRZP6SvNvFx9nq`Kr0n=Ac}arjfGgbv5sO}7;4Fu+E`B` ziry|P>Xp{vc(JnXUbR}wQx+GADL~4P+-?)<-)N^-mr`S9ne?co zvTmwtVePWHLNo77@*5aEYtD^!^)`+t%;%m76!NtjrWcW25w*`zRPHP?GAm_R-C|SF z<#ioBW{nv~%p7OwTz;)*C57W$N5ChgdU>-#F`v@1Zu}={d2(i%oaeASSFwP^Kee&J zn$h~j6si1IzuyWHVaM@ng6{ zyBznfp(Iv7%D{u^UUDR5Y>uL}EOl8I<#I=*WnT=Mx-)+9+V3O1JV{uQY7#7Aif#wK zYGJAJ2FmlD287^j2{I|A@N!L1j`lY=Es9%$pbww&sB|AwIL7)KNg>Wv&VIFFE~Z10 zaw`B%W9ZqbqQ7u?6-x;g%<5q2%UdR8c)M7;os!7>v7SK!uvXon5D9hoEr3FA7e{H#>;6eK4Vs!>t>hUWZ_tHKRTyzYM3pKeXFpV&Iyxg zKn+tm97RsUgG4b$(aM^Vvqu>59At6zs2!D2v*}wpu9qYYy99tcR$acICH%`2V3%XG z4|?<=Qt-LKT8mec*!3R>TM^;NUPdNH2Omt<+Q3QYkxtPx*Rau`x0@T)c>}dxNWia? z#Z|pl&k`8ES-o^Kp5LC87`4f*Qw~YuqVn)-9(Hv{9+^|@Q5E!(vP);+3?&!g@z`oihieV{y1o%QKs3)A8pJ|aarYZ{n(cCts+Q^HY7$}8?W`%e|YBPvfBPgWf(WiKr+5TtUeWOU7W zkR*<@^^wz+Vh^#dAFIaqMau^r;&s!<<;qvk(j>CR!J~EzI&)lGU*176ktAYIsiz%k z{QSmI^r7J#&a1}Ol07?3)-L9MCP>2{QCbfhf_E-Od5)Xo8=DK2l2}BjP7XaQu(9}q zqujAcmEmsNx>uWD0ah;YM~#V#gzrsgZmbA@hO+g29^U%Zp^y-**A;y=tu9tww{c~L zM>P55g@#1Y;Qs)$Drm;ET6SlhjK$8K8DC4BbbbiYf{cj?sC7RI>2~QDfm?Cl=cRQ` zExMDNh{ya2rb~M})e9j<^f|9mINH>u%~JM0S1+rGsfo0kaYqFnfnuO;gfaTn*fiT~ zej$t}(AQf2AA|S_#a5d_Dhngy>s=GgDAj{kKGzM1r3#5y?t?gnH3o@W83tiD?&RjsXB8nAh>MKi?76EESS^%j4 zs!Y)^Ri}YMihe4tYZf3B@F)VD1s63;P$~GPflmU9mYBGw0Z0Wq6s~BP0ZsytQ-v#< zDF!J(=9CIhIi+(%zzT2_pi_XQb4alOrvX3|;3-_R!xW%W;*<)O%@Y7AaY_X(P0b?2 z0-cHgr(%`OQxFPp6bf(^4Vozk1vm--rvX{ETx0-Jfj|`CD>lueAu&!1Mk&Ixk*s6@ z3S3f-X~1T&k-S*YDZyz%(}3czlQ)Eh6{BTIiZNXCXH+Ic%UrI#2J6Km`@hz@;wvLp zx7?xj@GB})wM`E%h^e~Se4@Hp{l^=2@mZp@ue341tUJAaILS+J9fx}9^}AB~bc8QK z-?e%Bz(*ig&|xVlFMRnNuP9aN`&Nmrbvui^hGMJO15J)u0tMdOd)07+8kKkz+~XLl zBkHg?7(wl@=4K=Bzvo>?gtUmYAjWxEeAobt_O4$z72Rk)BGUA&94V6%e-;N*UUn*+ z)NfC7*OZ{Nm91lH9|`I3U4raD&!ua&k*7pHRon-9=Op-prET7P(I6h3e@fWVb)@kQ zn%5CTQw@w)lU?Fzu4&x)EW#D=?aqx$r}%y&WYaYL+qRtJ6e3%u6h^onqNbMF(Q-vY zvmL9MRFu`*K1#IePF&O7kCNWn;c(HY9>S>0qQdQzVx!Wp4h03N#!`;AGkTQQOo}1% zOHvC+M@J;o#O8nnQ=QE1VlN~u003%6AW{rsmoUWxcWP4-9;zt;An{V6+;C|*Sh{ri z-G=#5?ZT)PpQ=ChZl2djf!G{i*3!Tj0y1ibzib;roDq+$RT=Y6$FYOTYdW##h2nGZ z_=SkeTc&=dria9CCPVgg3K(aT(z)bD12sG=&P{s%09S)sAEQHta`?OQYI+rhuV-@M zQLxS0wM0@Zo5A@=0P|jJ6BwOcG6*&3Iz`l%T6#OFz)^$iUS=l@skdVs)`!&XD7_h1 z#X16O_R70}k}-ui^sgw@ygR6AvK4rku6SWy+R`yx1i|$coquMxkr>`E#Qy*h>MC$q zg-kSDQ@TD%zCNmpif4+YldcQoA4;;8{Bd2)&xB(HvdgzUt0HX%vQwlo_>_2iMr6{b!7E3BewGJcD8F~ z%12%vB2yidRI6%n$f==#tb>j#8CG`HmxjgE!_-wFxs&3*u%)`J5R|wllU!?t2kx=2 zMb^AJ+P%b6EXx^1#xYrq;F-#w^t3#BSD}Zi2TeCEPtpGXw=nZ>ntGf>gze*sB8crQ zK;w$rz3}T;$V9SmI(yS1w25(^YhQ00Sov(rGmUz!$74BHaNtwY-dPSdV0xO<5Tc$E zrdXKrsBu}k=aVc`62j2O8*|jv#e`Hc-bG}C&Q>3VX3yd#4n@3ReQO?B)Or|3jats> z8*31zywF6ae5#|~xmk5Pso0m4f#@m_USo`wtz(6MX`PfZiBytJoebL5s?VqnNnKG^5g^LjDA%jSv#D+6{yfl z5!%aw2uV1_S&H8ki>}P>$fLE9$I5_Ik=jZd z8*x`7gq&b=RzzDIDLmsf&n!bOoi{am7BrNS(oZlp?ZX9qD$cQO4zXn=tDd8bj)t3V zffsiN+Oo9`QS|u(c{_u8R&bq1JI8bBa`jqmQlzeV9oCm|Yk2TW6C)`jnsj<_&+i`s zyS-;twA8K3wThX3?(gCi&ck5R1}(toGhamvPcrwkWacz0;N-osvSk?UB0+^afvFWE z-Lyn=>sl#c9Bv6bcg0#;c(d}xO-!+HOGCt#DPHKvcw`7nYsnoAWzA_UCvzqN?_Fy} zkKiMs=If?mDQ(Fe>CW#DSIR zQ#^d0h`HkA-h_G){>K=GFi&<+W z<`55Bht6Pn1NEkrC$%9{=xHjB+mPhiu+otAC<*tZU9tZFt3_YJm6ZBZF+-apQRYTH z$K^~pG*ME-08vFKS^z*ft5FzO1tXe+Z?z~~9MN#IFQtr9{nLsX#S^KjftrswhZQW^ z4RtPmW)~kJ6$I9A0LjKFo@|)miu=}e;_9;T2Bqa^rfH`nv`1A6RBKAooxVh}NW-8t z3r!_+nw9>wrpx3{sx*wla4Xueq|`5^3?#di^W2*B=wRnKDZMUw@ZryEXHKQpr~DJQ zYl#>5)O}4y_P9f0TbRe=Tqa~=lFU!3G=q1ku9bsJc6UTM z4z17{!e`x0#%rsVClzc}-IG0mt&om5H5s!#nzT#@u4#=64wdnWq4z3gW7|6R%{R+o z)K;d$+*4Tr9E#CZDM-nZ-DF%5S(iF+P+2RdF)v|IwX(Nb+MRZo`I9))8I7>Qki@Uk z71Ph8B%qLM9(_6O$-^E zk9xi}sL00CpIp~IqagcJl-5-t8=i$4&BZmb+34E!gc63kjhN?y+PiyS5b5^-1du5A zuNy}>!4+~Fmw@CFN2PiAoCGSX+|p20H$A31m~IE|WGB$p zf@)W5%Ff@Nc~i?=c4U1`y_x8{J*mD?Jq2+wc#{4+4Z(o*6`>D{WCVG!06nXoSW1y1 zSZb)~Ol(^OaoVfi%N3%JG-Evps_^)xz{sGs)+3`);u&JqbSV}GPc=s5KD4P*lbVY; z=PH!d+9DI9atNo1J?o6o{6r-J*6ew6Dckj~j7&(%oQmzKg>>25hpP(l_g?yue4%M`3ShlWV+}V`L zQN>Vb`w?A3LP)_CnR#T&#nnj_*G{_XVLE8Tk^n~ntKgxnW3_l9s!bY|ECqK{tdBmn z9Z%q8j}GCr+g~xZuI>r?*SE-{<>&ZCcr-IS3MPzz(R|~NO7%|;>usv(G2AwHbT#B= z^qosIcv##*!nN%Vfza(zJ!v^n%~xB@oOcyhP}UL{HibL=Yr%~v-<2bdInEtH%H_|r zsdBmfX$*>c=CCa;nt4gx+OHSq8LeeX&c~;eS9r=^)%P?S7~~&xRA$r;m0mg7PqkQE zuUc`G>HIA9oFuj(YgWx>>Ka4HrbxzEcCF7n2M1LuETHTvDXo@8BSWH{I?uMAESQcBjbxP?mP*Peiy z#bi;6t#cXNB+1Aa9Me?PnH6T^8>4<(sL_u zBE2W!_Mk4bDS%+I2gP&a@Se^pNuE|aF_dWEW^T)&SvE@L57wzmpnSi(m}k(|(yPDm z1NEr~2Lue)gsRRPGsT8&S!~WW>%z0&4<=O`Go1CUjWjytt1C^kpGv+-o*l&;Hy)tZqO-aq78ncGxy@2YrI+_- z2Rwo6UbPHUEaPL%rNE=tB`p z>M)kaEli#p!RmW6yhz)A(1E((p0wO~oUbF)SB(qH#&u?$$x(oJ9+iF_cU6b(T{b-k zr7W@9>6l9{te?8iRWTlhm+b64KRV#8{BfwjL{AJ-gZxLeUysK~pbMK~PjZ#XJQZl{ zj!Z-`)MI{Asbs~b$h={zNvP`#Jhq5JHWe+LpIX5Oc)_l-;s%s(XQL+ohORUo8`QMN@%RbwO?unl0*)g4Akft2E?GVLa{1ys3Y}VFbW*0Ap089wYi9RC2otFqHW$7vZ;gO6JCAGN+Qxc+s~X*z|%M7WTgde<&vN;87xMCAE; zqgA;cffl28A0A*og;|SIX)?31$FQze9b*Ici_fi37PAXy92)ueh4MYTMjnh}=GMh6 za%7V2{I(@etz-qwSh}0fn6*Zty{tSrVPo;UeSd9;l>3UJqymveNCkDo4UL;zF3q!jT*%R*wDqLfmBPUfgkDcGP2T1B7&or*!$ zoGMwO6jOyXQ-ubIaHXWdrK!2194W$@DZ-IxT2V<#DHs~{SfZRMqMR!xZ4qf{1v;~4s0BPy3Uy^8Sg;h}X|%P3jpE0O zT4<%Nd7Uw0<274QRTgf?oC>o{mJuv2hocNvI(C|4uTR@il{eKK2Z*&KOJM?xtblSW zk|+r2TAIu)YpC2ooUZPNwPecWR=$#ixubKVE5R%#6+%n;xk_LI;8b~`*p|trlU=dc z%63h(4BS&xgG^)1Dw@$F#KlzSnDzyM0f77~(!L+vTH5GNC%gdf>5B7Ea(0eM;<`;b z+*w-gkl?p9&5fq2)8#yDb|cwF%c<#iI<k4abl`mQQ_h>r<-kk?F!%@sjEXxuB_jQv`cgnAu%i-P|+FGwt*Sw_?7yfi}l0 z0rjUWx!ZDQNyA2VYXhFtjD>pFB%00QpY^7MRbpHJE&3p~U-IW}b-Z$B%WD`^=5_R_24^nRP{Exs_6E@HW?*G@gc~w4P+RMv1n# zJR0Z3Wt1BC6_1vw7S^Y*$14~4%OAp{xG@4ZI%m+D;icEF(uCApjg2QTstmC@`m3Ovo&@2SHzs6*PhD}4U|$i1y-(O$M(5symd<Q?uBu7r^z80^vy*o@^9akhs)KYIZ5)PnHKP<`g<(xOx#^s(}Fsrz}k&#Bc}c+&0xw&nzw zdYbM0JFn^5wUm;vOJ`QWLymasUOf^^Glf7&HMwO2+Qxoj8M=z%t%9WXM-C?sN}AJi z(QkE)E;ELd9&wS)XV0!_@t={|{(`vIZ<~`%X_b1K=U5mXce1(EuZeB^%otcNu4?tZ zyJa>(eV&=F4Bi3IW}<7RJpdm{x0k}jEIrR()9$R~APLZ%XRS{xB1uic9FR7FUT5LB zZY8)ghi!|&$*#^Tn~^TmVj=@3yxO=}Cup)J`4=IiB$WfZPN7s}f-98OwWEJ>77Tp6 zaC+9P*M@S?KMFy~6^kX7nQX7Ra~UT&2DHOcYg?Z|k!H9|9Zq_&Ze2TmW{!uU{k0lv zmyHSN#rjp7ofgX6v3ux_KiU<;-km)-OF-q>3Q}6! z!x6%Gc&=#5$6Y6hEJJ+KmLKe{Y8kv!r=tGq30eKd1#)0091K%S9M?j@LGDa43?(J+ z>U48>wtcvQ1z&Sbi^dv?V?I{i;3hL%?=+xR%L_>@jTTvjkHZtR(7Z`=scPwKau6(> zF4XB=sJA%#mE>Ag+v)nG7l<-qImLDI_~v&)5)h>KuPYUUl&AZoco~iwlxkX%(Ciit zN6S*n3P6FJpdRMD)^8H(a{>*<0qg}(lKSRScic#S;6|~ISy8`voC<;IZ*iwe*f&uE zI|dYNwIe9|$EY>sEcoYn{Oa9~vn`y+T4G}aWM{Q$EVfH#4+kkPbo8Sf81GS$5aSLZLUlN99yy@w9=6iq#10Ni~|mR_rL{n2GF;$K?L#rm_GD!BzF`TouQQ^$GYz zNWa|~{&kl=r+;ys_flZ?2Nlq=>W_AHQpqd7iKEke$Ok6kJb%0@mCm)M+hjf36X>Tk z=B1@QWt0B;G~JmwB%iHs46ZA7c0(hJe)Nv!PZ-##A~ccl>M>Ph@tkD{OJWZqaCZvdNZbc+;ZZ&No3I$#4ta~_oA0oVTLmDtTR7FRq6*H@3<23}3 z$((egPA?xygdO@3GmMc@9%^s19Q8FK+WMM&$sZ$MGj$ug(5M!S;;wz11JeecOu5&oFjeQu0?u5izhhZzDFO1mL7Iz=+tr4 z>ijIF!#q~9di2{x}r)GkVrv*qqN(jK_r=Bd*=m!Tq>KoHEmeNLyNMXp$Nt#?$M@cCe z)ukGdaeYoOB-VEuz-3`wUYFuUXvA~5+&h|O%n`c$$Qrq;wwBhtQ`|g8Mw2YbInC0Yb?9*jxma$m*ap}t!i4KokIb| zV^SQ5O>$~hXnt-76&po^$gNhkWIZ!U4!KRC}K-h~fN2 zUy7@L*Pyzk#1@I?MHpGzF%XBK9Ok&|o6E^0CFJ6_^(b3!m=`{#uw(&_YtX|e@+S8^ zoVO;WLXuO}iElF@$z#oG!*ci-Y}Pi=D$Tsb7-x}HUYuIF?o*=}D}sr6jJ!8B zZElqJq?ay;j!8#i7PgRjRAm`>Al3Di8@)f}BaBt^G#=7Rb0^AD*&?c4MHn2Yt=EAZ zbgJ@LD~wgbuBM8r>T**>5qu6Robb4jQDS$`_f(qdCDC^|D}h@YHM-fvQcZ-G&U@mz zC5doXN1vKzH1L!?rtITl@IC$OMC2@SIU9)_fNQky*M*bAOCXBu%p^HE9V=}l2kxoG zE6IhgI}?npR>{2&h_9K;5ZtA(pls(fyR%VlElu+da7A$PNxcqNiHujhp+4$paqCc- zJ7Sm>oEFY1-6}zi228TUq z2K4)~Ha#;}8*VBB0X1<*T$K8wKJ{8yiky@0SZxuFh&9!iK^-e5_Ry9jEp*e8*z&Qo zG`d^stdlTy0ljB`m0WrjWLqoMN_wk1M6OE$M2ON1vXYgus02&`dlbDv7swFk=s z(z$9yZhcM#$}#1VCQ(u;raYZxT$BI%_7MdH5e$ZubZvyxkQhjJZfv8Kh7r=KC?FtX zGz=KcsL?SREV^rSNT;Htit)Sm{Xe)L?ZLHO*K1F%*XKCT<9Htcr3yOLT0|&q>TWjo z@bsCsrH+@TRJlyFIz1b4D$3wg)3wBT%a6fdcyGFxn)vP6FJCHWP6m;VdmRvk^S`-& zVx3$3<9@t|ss920DsI#2o(8k9oEQN+(v4zljd0;yVQ5ar0SbIKUtI>qw=_PUU~+$1YM9bh3WT3UmQ zJEaoiBY*Ts5vJ^<6bNfb1EWYW*(IjTsh}15N}Q zT_r3>-b!XHMTV5V>gMC{-%XxI-_XjKE~RVWpfK{M!5pD zZ`SQ`74%VPJ8TL^%mi5M&|S1Ya`L=}4Xj`wGDBIO0x5BRZVSw3r+g_WFPSSYV!wNH zEO{&Csr*+aRMWoq#pZz~e*7Z#%uD|+#>XNz6saHJ&XL-(0XNKjx>{FNuB8Xsi;ElR z)5RBrmlcM#`?lr1-Un5o%c@^s1zRD@eAmIKC7lhb1*cBB8eQDDWv(x|;jLvULTJa* z_$y7n+J)My0r8E*DOeZfb#jJgdo1m^IE za(P70RQd3xCify%2uH3_XmN$x|R(3@B>{(yW*W zRkUr>%;XnzCzWEplC`lS$yu207G0WGC~R8vc7JITE}+^R?G&dq%ifJLZhl{byrtjL z7@B*Jn77DhFt(Ouj+322TbJy|Y^Kkg;9_*W=^`d-l&x~6@Sw&2~c%(G5aB+d64PpYB=yVJuQEdd=q@lZtdT~FKK($>~Q;dn{bF=Si!-F$g2 z%bc=v<-~-WcESV_^Nz|li`sBhsy?3ke-uZv_PykZ&0xR7fuZH~5tyG^WPk2Z1kzy; zEBMWn+I*cZTWqaW?J_b}>m{f2FF5 z)_USUmshvAaf4}lE}ePJUlVWB%Q-uOyz80t_(5U-Tf>A{ZnYc?CYT50NEQk3*n6=N zIFo6ZUXcB|R@dHQuj5pr9~;(2pw5pc?Y1Q1KK$JSUxPoUdqBX z7kYkbhJwnp`JLMr#2nCu2h9B!fS?yqKNpZWS@0`TTKkVhaSIEmUrv*AT`Hrgq3lVk z2g0?DTver2`dhQ-<=oIYc<&{`hV{s-XTJ0S|D`y);}=7D&rHZJ-tF=Z#!Oa9%T05| zeKuOXlt09D)P42`Z^5R4*!)^v^IfS=g=}y5Y7O}g@BWX1j`@mo+EgsjN3zk@_Ib|l z^%r17%iH+8*^HZCemUO=^sYOo0^Ba^-8+&9`x$q&2Ot|1K56>U=iBt<069XDrLmv1 z^l^Kfe6%^bzSB>oThRLo5&163zv>jHd@DPpz^FcI39u>tGS&jI+d`;`f*CGd=JGPtLtGG=?yIvM}2^zpY6LUsH;< z;N*?!GX8~BPQXygSINFpw^0+9;#q@C{O}v|A7Ny-;RD3gxT|Sflvz(ywv6bzK>lu$ zksCe6?(T2|*JBv&dF<9Sz8*0RhtzHdjJZp@)V!#b>hyIJ;rZ*_iKrO%yscpe8<(%@ zr36Vu0X}|Z$p~W_>&P$0yF*UPQw9MqxRqS{XW(q(;yVzn*u>zN=`;P=a<_+Ac?K2g zLL$kE$6%ts&!#Sk*q6Vg*o$$JvsXl)C4bx&yYI~)a##<^APCNt3$nAm&?tJDh!fK~ zWV+_$5r*sb+|(cZ>0A9StJWE~AdHX)J8?)@2 zS~cLR6Jkw;ra4HWKUI~zPTtg-1#LUF@=(KUS(gZ(@ib)*d`RW%$3rMXE>S6Y-G*(>*Eg8A_597EE5}!XL{$Lbk;8V=6$qd3SVZg<8BqCVfGujl42t;< zT6{617G+(taH3qtZUJ}=lCQ9muYyTD9d25Ky-&=p0hUZKN>s7=ZEKvoHU@KlxWSOY z;c8oc_bUKU(xN@HovxG~k{j*-^wZO%KmyOvx^cw(^!YY@Co!H6*ZF6&hL2h6G*aQU*kPPr<26o0pC%{x~G$0wx%ZRLGncBT1)ow zr@vf#PHJw)d6M7)>9ivE^F0ljF_!B6{5fGN)P_yd8eM+LdJV$X&e^yNk>)D3 zYMqT$s~irk3aYkc_Fh~$N>qUU=9*t|4AImE(@$3MY~>iTldnPPTmjsGMWz=u(Ex5HG;kg9 zmVC-zhpCiDAmY{gh4Lk-MMCPx7 z7B9%G{YsaD6kKT0fF6a-htS!DjV%h~wC=($jI+Y+&6l_L!JdOtHS{DS9*%)#FI)Y%?b;_9Puy$wbO8tC&JJ}fy z`?7H=Rh}`Za$;kG+`a_PU>X{M!;kw-vfqF@Fdg2eNq9?`P)sNX%J&J17;CrOTjOyW zq;9Mr!Fw2W=PC+2^5fQtPSbpGnVIr?(;eFrIZsoi0 zxT{uXzS~<-r{6G=Y#&%rjWc)2oppZwT2~Ix>hruUZLRSeX~3Q5;A344KHd*4SGDeT z+CI4DRl?=^ss|V)@2z&k}i#&Dz6hYA2BeGiK_D;a)aA z5i~fY-_exJ!#C}y?K^GwRXF3TDXZV=bNcCtg&e7+Do==y z?C52bKGfUrGrpS!1LzDu{sP~H(rVb%4-|fsS=O#%^NH*fh+H8D+dxc!Aj1adXXbT~ zL=o@(vy_ZmNj~O!CH8-J{p_VzIGG_S*m40ri8s5AW&F*7ma#Fl&TqRsItRXA%|8~y z)XS60qF~Oko_$Ux*+itQLJV_PW$Uer7G9-4ou?+iYILLf0CHz)l@*@*9 zg>1xPJW7F3PlqM)k@`@$J*_wS*9)^aW)O+_5pa+O;O&;ApJzKT<;3c7)Q3!+99ztv z6}?+)v>u9xbo){(Hwbn;5F{@p#W;q%!sG@A7&S>tYuXBb-cf0ggKR9{H-rRzl1g>C zVtHZMtOC@y`CGnqk=^6xIaxc4(tRj%wW!#5bS*gK zFkzK7zLkX!DayYPD1XDc8bj%Na@YNMm$jC%)b@&J{*Cc`g^e3aK6OUTW^7}TH%C&l ze??O+B$k!x!;eEr?Sj$cISq^Iu9=sg-2GR(9CLqEj^S6mKB}YfWrt1XS`Av>ujkG~ z_wv~93bLBzzjTjuBe;gKhMP4ID#ipI-{pxu4VEZj?hOQwS^w;Tx#j*^iPWC1d=h`* zDD06A3$36&P?PU!<_sk2kDRj9b3eb8dY`gCZnKOYrow8t=-E_G8ng*V5N5k;ci3wnq=XOs6NB z4PNVvur+)kL+BhZ^PTIRE7yf@cYuyT;U|`+(%17YCWn}Old|vpjxf!U)A=6-LL|Ss zh$)14w&eS>aMY>emGx|eVQ(*0Qq;yDsKArZ9wm_b zoZAzh_^G|_ftzgFlGmMvvTU?Y;!#L~vw0BQ zlptoYN5I>!>hM2ltCU(8p@tgy25)v=NA2TBS-^q%(T3Tv;7Z{W zte@aT8ATGx$E1g)qW?oUVjRe(R;hOyMyHf_DN%)khiMItolvyKYqnXX>Nu?<<37DJ zNTmn@`bAB5OAp{i!>t1wlDVFbH}9E#;ujX8bL{kF{l;DrLp)u%*&zjrq3|f|OBx zu0xIsWWHs5Zc(RnK>Nd5`{vF%OFK0hy~W?`Tev#!hL7wrZ-lScxYNorHL$S+`QAv1 z!cG{>n-((v8^$PlJvY`nTSX!*YUwO1mJ}MknQhHoxHE}(1`s8OZd|u5APFdhdcE+H zic#c>zpSymyKt%eQdq3s@x)f{pZNTI&E7wSC!Y#)`f%G7rgaRA#psVt;73)U5Kmie z=g_Vnw_>Gq?p*&Un99QTthQWa9=zFfh@AOkpSr77viB{hPW`86-OI|^^SH%?PY;K! z2mra<4u8AR?2T%yc)5~`Uq_5YRU~karQG2U@Mc{>j?0u59&^v?E?}r+31x~QMY)7V zh}xhH^l+yIoPTf!c7OE8LdSY-T@2>4UZ^*uD(;tkT+ouXoiiP-Ty2U1*OD=Z9O_S) zXv&^2O@`DpmQ6gmMddr(tjAedWfoC|CW}N@Y(8 zRgVfhG}1hmaY)~)u|$)}usjbzE7FfS=KNeV#bM6!A%Id(A$b<+dcK?#-1{2~->feH zn?au>Q3Fn8tA8s66Sagm%vzQ_0(T8xbL91&*V<2?6sPUTjk%XqAT)2B*eansIplIh ziypZfm#dvsxcu&d>Z9mlHGjo+TSsqnV6fbGq$G_MeWJ-N3QO)#;Fei|DADDKQb{yN z#(M6YgGvwCqFHP~%MM4CU`KeipUw8;l@x-r)~4m>-f~Kse(%(NYzm(ts;EalBJ~L7oDVFN_1*I&q`mQz#-S=GZ2n zf?LNhZOI-ZY`h-`DcJT%_ba@r?N+*)-CgQtO0UpQ2VK zHA_DXMj(|l4qu|ABgyDTIBt`-0S+8+{JcJFiK+a}r}{eo!h}w(Z>8azu_@Bff|JU! zwt6LN9i(bVnNQ^vr{1T418x$<=%{pvQ^u48=47%Ih)fTtlu?TyFD8tc*tpBZ1mx&$ z-`UXD0g{-anTU~jx@7RB9u;M}$$xUgO_MkIgnUg?x3Dk-o(2U9Msl7rVc5Rfa|i9FhY(jb#w!FG!) zW%ZcLpPKR-Lkri&cnJK^YSoGf$_|TTwL9hPVmG%v%-9o@h6M3oH%@WBdpojZk@jqc z_McmixXBLV5d(F)iotK@q>S0b zKdlec8J{j8uy09`e%Dy!I5Vb~8rqua8Nq{mG#-xs;H3S`yRUi4!P)ICJEpXTi@Tfj z0-nGI$ChLXf#B+d5HoXGiifJTJ0=enkgcVrv&8c>;}iovmI=K9#`v97gWY~-Yf?E= z5+{iE1AzS_&wfnDh9|w3TJJTcO~UH^(>l-1W1{wM-CdC{KGBxS4|Qa`YW{lNNPQ&X zi7=fEs&yQEzs8iFJ3EduJ2XS?kgGCvDL#X0Lz6*;`O1Gtb3wG1CF@*SrUH&ZlOyhC zsffvGGVV+>p1r-#ZYW^yMO(kpkrgu2XS1IAIvd*bUG?uF64{>N3Y`+D__IBIKSIY) zBGtY6%-vr8rE1n?*|A*tGkc5++I78vnA7Q?s$ACb?Uw7zgx8PC(v+ueHtpo5;rZIo zrJ)_}2;1g$8CtyVorjK329XR39p$(1?`gEk?r~XSTOempwA&*m&4kwoUPAmWtj7)T ziaXAym9*n;#FAzPT?^dLh!%C}c!6+AB0w}s=JsSeAm2z47lixzl3dvlwHf{gIfOpN z-yDxWr!kdcAbas?^52>&zUuEhD)ltPLtgYR_d$aVJk%N7v^r8a=XO-`BlGWEnQcPO znbs4HC~@VI@)@7lMrKL9CKbO|-HY^ftsTXcn^QJ#{zrc8hD^5R{ ziT_e^!|Y~NKYp=m>sWon0%`G)7=>1vC0`DovD3rB6$)p)B|MsM?PP4Hg z>?Sk!&UbmCxh@auUqV$+6vykcP~a!Nt83dnkO^;%`VgP3NCvm(GDlW}*$=fgCDWqaP%`8oo57c{N9P%CnR5_7adHoJN|RjFqkad;NNz`k{A% zfV+rv`9IQI;eqlRWSX_)v;J$IpDlNL^z+H(j4HJc9nC&Z@HXf2rU^a3ndQj?zx-vG z7WpiDLyU8dH(%(hg>GoE097d66C%a_`@E2*vgIdoc|t%}BAC7g=RE6o=G zV>IoO>TAqTayq=%JMC3VObV}6YAqs@6Z#(6MrP8KiJX;{B=Nx1T`952wJ33DPkCE5 zW#!m|Y>~$`mdj}8HCI@W5(mGXmi5$1iKp&?2~nIu(lWS@2WACqnn{#y&)H6uCs!qO z%OYxp7nG==m178rfm8fGB5Tg{iD{oZQO8J!Dc{=Rr@Q&Q&q{eB2EN=dYW)-S$(a$0 z7!R&Y+7Lz;fY$fcI+@YDHyc z-tUE)y$(81R+YL^FODLWn`;O4?}g2FR8TSnQ12j8B$-_s|uu&sfofo%IA&p*wxCWL>ljQ2AAZRyrWd{)3un%jSO0`ZK28IaQNE1V6?mE`96CC%~EliA?DGb5o$JoL?2mPh+DPFV5wmh%Vy*)I?cMQaey^Rr^BYQ zzS5^CZ?B`%*H*tV?%q)u02Iz`Cu+j-`B;R!H2t+uR``7Xl>oKdh_6PFQBqa)N>$bU z&Kn$|b9Q$5>0ZVD4qyisv*rn_$$%;w+i6L*o7>i2m_YFRe&5h}wChqyhjS^@ey{K| z4u-An(DZP=>D||Q;wm&1N}9pJ)i;X&lKe)r7Hj8qre9`qOS1NhM4x!o&)@qS!@Sgx zSChEgakKd=|LVPY;dW~pxvizP1h3<@J%k^{;O!BY8Ww9M_>)i}YN3b5x8;Opv)`G* zOC*{eQPx&ce>J{IgS!0Nlo;EsmzwLdHpKQ8xh&#m^6TUj@VOPZvG!wt-?$+E^=2LGc3K4keX8CNuHUw-w+M&pzSf zH>0aFX<26Y*%PJPkeT_nm1j>vXrFv07w}zWYdy&5i?xiN)s36ygW!lA z3HaRSAAbNwd&`F~dzI){e5Eg%4P@>IDq}6+Y$--x4pXgyxM^X^dw{&UpI#5c3>??W z%!X8M%7fnySNm#(6W_b#ugRVYx{fQdwLSalrkR@|1rTr@JWVhfwvjf$jtBGkT*QHHn)PZ{vbs zt9B$hju@2z%bnAd%oU3^F*B}$Da8VaK1231__cEUGg6be-ssdl`x;fr>iP?a)Mis^ zhk^qchnE$FBW4=5Am^ zc92RnD&%usIfimzcUGh2*lfXP$$ub3dOh)H+kqcyX_C=QdO5^Ph$6^n73j;v^34KA%FVKmRO%gsm?6C3;LHK6Bw;CG_hf8a42}3#CxaD2$|CeT-AJT z=Q{cpkW=c-mM~-Jul_jn{CAFU?K+Tq%y(%o)x$8khgm1alvz|dA{wr-Xm6&-e5(HBFBhg^~mA{Yss7oBo-Ipcu2)LMt~f! zI)Sw0ePGd~A^e{!D+e4;uE6$`Lr7^gIFO&HS_+upf6h!cj78>IpJ`1AqnLN?dhYi5 zA#q|oic$|hTYkx+KC*xwUf%f(uIYKZ668gt0C0NX_yX&fp;r@x5b=B6hLht5^4SfT zn!aqLe|ZRj(aT=-K>YZtxCe!OMIHvWbI@IlDl_LE5SoU{v3|OO+0&N)qbTK(EZPTV z((!7a$$j{SlqsyYdNejZsZ(hy%xz99-Rg66WKH|Xb2w?Xp2;reqn4x6>9Wf$lbHe9vj08Owu*{sCSY8vaPe+>aTeY^>6Q zBuF>WWU9h-evCba|JLwn%18>0ltctjxvlrQhx_;S ze3_OZIe9W$vKL(N>{PcoY~QaV?U30rdi0*rVNe>nNNn`<+B+AyA5{u9=N-|1TBZK( z^}B;~6_M}ta63o^ho~Y=Hzv`udu?Yd|G+T$QgWlU*ZOV$67r<})8p=HeWu%dcAB>O zPae@DcPku7c5mqgZ}WH53+svNa5lgBl|5r*9$YnuJ_~J!nHgKo^k&wJ)>7tYjiXq_ zD1q`58>p0b;8;KNGNX3!j7MI@H zPq6&*D$$~Tcod_F>$ssWn_#1-C{747=$Gt=Zy&cl=&XJ&Ut{InW4vSQaauZGQu5Jy{Cv@9e z?XJ$c>P{(9^aXlfiBH*j=A>)6JgDT{x{(AO2)k*{^guyu7Iur*7dg$+prB?E!w%T=Fa=7=tqE#hia4jZSp} z0vmQoy?$QwhWc*Ttw-+w`P$Em*O=Q=%&ucDYL?yon+*$Jhvm-sVPi8BMqft$U90{g z13VYIH$<7~9;qC7{eKiSNaquy+_BTxTEN~-d7qzbn6+NKK$ESe0h5rpOIZHx7jVm~ zw)|*@&Jw*3y6rE=o}%^T7jAl8cPX5(Jk5Ns=F6bntpp}Ge2fKc6;)u(ak~*?bO8Ao zOn{QTr?^>MnNI6V5kW-oMu?M5Wp{#|+dtts#KNmGj!?judd1O?2i{WS*EvV2MLd)g z>R)v&{O*!v2N*N#&SBr-!D6njq4X5Kw6(#-I?Jn#x<`g7@j4+}GS{N|g4(r)>rV`9G`dZkhjp%rrFz4_|VVz4(~aD!Lg&F|NRX$ z$^4fhV3VuIJ2vUSn?Ad|852G>@Y=jm2;JrqS7&Yp(?4Qii*hTs|4~nxbCO`cLftM< zw>G}7bFdA zMl8dXCyCKxN%PcEZFG@JYWG5JyhN#nUH4|(gO6~21hMqhR&Dq4#Fee1Exy%!T@SH| zFk_VizkT6Q$}r8ggr%!-`rYgo*;IA8{A-n+ALDV-r>>g@hUp>*5O zKmcVlqXGM9FCy-$w*8IT$SsCiZUXfp=+f8W{D6QR&@GTw4uyiBcPdt~%D2RgyY+qD9m;9bwcwtnlJ_L=DMs9MD%#dFtmDA| zhI`6b7T1|1(YwMF=)k3De)~|^kNPA1lyt%fK~T6)Z6*RL;zdDP>RDicUK@MDTG9_( ziPLdoWm;_(l-3e9@X67^pbgB@vsjCF!mMtKq?ioRwXT_<)=klBkp!cjL;*g?Qs3Vx zQ>8aT<$y9f*jn1)Q_CrY>!QO0KmLQaAq<-8vKaBg)cb-`a)K?m<+ZG-jAIc?a{|Fu z&^&iwar$}I#y~`^j%O34_A6C`|53b=4YR5cO8NMjqagIFK$@$-IJL-=uf>}V%wMM} z4s44DkUJ~C{*VcM??6nswK>4!{*3U^f_rN|uzf5vcz9DnEXQ|XJpD$k|}G!^nEW-PM9g=(N()5_C@e0H5k zI0UKXizu$~_r*sUhpTM=qsH!zyX(g!8Wqk2-V>R`VE3}YV>Il5Z4dEDBiaeeT${$; zLW-N;Ocjzr)S|bag1q*>S3a{7L%Cl)n04S)Qw|`NQv%ON#Sj-)3e}Zl0jxKTfiI z(TH&2IE26DqsEKirr*C781dvLoL5>&`9#@v-EW>??l6=wO@B76(I=o~mwXe9GH)0M z`JfmxQbrso^K=E+r8gT=y(_o#M=x%JoH}O2wrQSl13W62T<1nO(XyK*04rj>?EbKkuOBpv5v5d>7;7!!YTt~P1i7c5 z(8TVVFYVml9$yogv|K&QH48UU%$U5R9lGCRUrHXA3>IRx2^@0?&5J|3^?a$-eabT*YeDJvWixOM3s$RTX4nsX?#nA8n5bMN z`}0sr3U~W?Q%-Y=t+lR>1)~ldWj@(ivTFg)HAk5N|IH+cnpIIpqX9@ zE}z7w+*7U0_IDKHXKbp2$E9e7?*F_YM~+8imDgC3ol)g8nhHeCqEERB({$dIT5l~) zRm$m{$W|#Rop&MGaP^5yt)nV(a}y>X_CNiX*#|O{&+58*!lK^A5&C3BaG)n#oZ{+T z`d=s`Tj#%iFK@D|ifp(lE-8^SRVhv*JFWgh0hHo+$o?yG%@@I`u$<0Qp$J#x_9+Kv zYBFLFpqxdf);Y%|G7*<7hw$bN|Mx`%RI9-r?JYz0Sq-j!!K0<9wx_|Y-*ryS0XCJn1kXmGSbz^jwl#V7L&o^T7ACPKb zd#Y!z6_NSN*1ve)mEX2n>RIIwQhS8cWgn8M=mq`?{0eZZ{vSoNXRq&|iuzLh11NhH z%wRS{aPbKF#oB39%P#)%ryI0KQ5OsQbgBMLde#%BL2PQdr@|E&B1rrU=R58--m+LK zYt&2=>7@?!v()nS8W@JOO0|CDjA1b~ct!=69@LfZccZUcP4L(%x&^BE5y+qY&KC6U z5Rsf;h8IkoYn~*pm<5lLTZRy-l7<-JDFN4j+jBRK#q6Je`@a?r}`c2GUfAQVY(RE_N<)DRTigLeLq%vN(bWUuqB*k?VPX z=o0wc7$}BnI>iJs5ZZEb>(2GPMiNnJOy0AScTo&$&e1K=phDJ9e^HyRrcx;)_s?sp zZVT#oj67yc7*NjOmpxop4xLXvF->LgKuNl(8lU#vSEGq?_dOR;qK_2;K zMt4_Jb6UO{NVk8}6PpN48xfXcEq8nrwgrMSQZ9az8Xk$f&%F= zt7}rnpwv5^$_u{t>#F<%-=2HFRIQvIpXTUn;zG!mS?gJ}RW$WkyOmB}irAB^sFQK= zKIQj7Qqoo>N%!w222G(?W+aV1mM*z{3CWPu(+CEG1Vbk)77t+j8u@PR905LtuGzdR zMEy4uF#7SmT|e}zH1a7xSpLYu)my&ocreMRSZ#+DirpOuVmIo+l42nJubk}7Do zVwWq+QV*oYRZiJX4ly5xialB^`L|K?q)9f|)cB6hlgK1g-?&qJ(0QMnWwWb{kwT4x z$lftdsfxiF_FM9y+h-Tc4qmd^jC-?uNm5=aDVYY9oDGSM9dkmk41PseQff0zUB5o| z$emCss%a^HzT=S9@qObiwl%9=h@Wi$H*FQT%$ot;w^cc>5GQj>Q|Sq*a${sztF9Yg zBWs4nSLq0yA&A*K)7nO32CYR&WhH5gnf(VT+ZYMXjCp!90n&l_tazD1e;8fh%|p=l zhR!5x#CuT8v!k9O*s%y4ac_F_GI!ND^wa++ZuSXpmAd?zNF+uE*sGv=g2gE!0+m{vXfQtY;Pj{SCLpCL*akJ}B znRH$k2eMcvy4dN0r4Bq-!#4gajh}v-Y^sUn@2x~ew?cAzM9s@e!^|fed-N!HThP~* z+JbjeWmhn&fcCPZd(zc@Eq-eqlIN@1<0<=2S-~52Uw+75MlC?!k~qGyUY1iMtZOJX zyPUg{EQH@h^$aV2NqnCm<&v*CP{7;jfb$kio^ri>&=md69@BxXag}Rxd$6*Le+oF% z^PVj@vbN(*fkefqhBvMbyvAg z70*?S2M0e6duVS0Ui4ng3P%VJDM!BVwMZ}5Wou(Htl1?KiXC`{%c%Oh7`p|#^)~5Gv+;Oaa@&Fa z#E+b_ieQ12ehcd$gRehorQ3Zj2yoiH8gE4|A7zi+%M}!6#zy6T6apmt%&v?m)m84y za3%PJvnXoc?af_Vch2UDepM^1&{{PY;P52T33b1 z{3E*G{|)dNsT_cf)nz(>%13Lxp6(6v1=&iQ`L9C6fAIgA?K=#Y?|!`Ih&Y^E{GGkq zVfdh5HmCvQs4WzLIwVBaum#CCz9{o16KN{PJp3c4)V>=^EVt^R4(~Q__ zjf@*L%>1+VX@@=vEs1Bnr$qk2|F~dm`%^jy6|<|m=*xhJv&gQn`TU=q23Q+7PJl_c+g`?w7@o$2A`z`z(RU@!o;m!v@k-$s+^O$~d5`V#-)xsh2;)<=IHEoP#9N70T;R8T zdd-L}_WaD!(MB@CXpkFzxD8R-6p^dG;ir5P(9Ze3Tu<5JbzN4k9ZJh{;V;+q2~h~S z>}pyN19$yaQ!1xxR#0QE#k8epgyABx1DJdNUStPdM8;h-L&;y|CjeP^mKJH#iv1qzL_F_WAwnRl4z zn@=#8oyf_1`$U5KitRcQAKdei7wNwGM9$WRDuk5WB?>1IXo~8pK5aT69&5*GHOEHv z>68`1poH3E_xy3T%Fuh03gk$h5p|l<4KYfzHyLj!tZHmaT=6raESchk+k+fatEOZ6 z4CA4$Q@Ra_D0snI6SF#0Gy_sGYnUUslB_Vh@ciaC>#IRcy-a@2<_tYOy}q-Dpj9r* zber{nTA%0Uj|6jD2bA0eRCyMq%dC2ij30zIkHv2)l174Z{SXILG@!@0@7FNsp|)g5 zHh?S3d`~bZ(OrP4wCL9alQX(&jgy^cSf0QHqbNtOa&eHy@Fipi&=fh=Kza>3oN_hQ z6J{!ev+>KpVl6!tyQz3Sr3aKS;cKYhz7#Gg{ia&XjE&F}CZD@Cndmf&Ru43VLQPd2 z2yQ?(=2%lra%6huKUNoSG8w@2-+{cuk~tj;MW+tX0jb0U{|il!ul|>Q2$0HGAb0q} z2*kq}*Z+)6*dpwIt|M}9uTCOfhE7D5>^kx;`#(%qVkx=U*MZNqp6QT0zbD&}c&Db( zwAE})vim%s5BS<0yGX{+(f?rlx^>-56t6DSx}zfq}iTsZz|>Xt>pWJyEVKqR;5486^t$3fdsF0+cu5BextN zc)r97i#tu%Yy>hYRqsq7cAKjBi$mK)r3vsrF{|GCid#^fb)H>(IK?e9FCnLO+}UH7 z*(w-9-OEchQAB>nW!zA-@mR2`tL?ysgfH6JY=Cs4pFTu&w#zV!x@FbANxFU??Ym$w zT_G9@%aBIcC1}wW?c1s2s((GVcQ+q3U~BRJ-2nLFJ6<})5IFZVs}O-LaPSM`%DF** zlGq8 z1Y6E;^X?qazYu%vXHWPZX#N<%apE5@Oj{{@srwxRJB9Pwi5l?=g+qrHEUST z{f4}>gOXw41r)W$2WxN15X~ESKm3S61LwjO@~h4)U=eDh{Ms&Z9XwG+(rOxYx6!|H zSBRUcT7!+Ty93P^R@&K<<$jJI$vqChLB&xn2T~yTl?ptae z#0#Q0UqNo${%xt7hdWxk1(VT+@oK#D=}Z*xbgw5wFVYrIOBaF;-af_D6QIHx?+$JZO(7WU}Of8GDVR#3K?%PKoO`h=lsDml=>KQrUkc3IiY+g%9y z&MqP@-?IklGBAY*&}Si5IeG&lJ=q)U6+vp~i-N~2mTQd8fjJULN7g$T}T*!Rr%Jo z)ZyZ*gNHkJY$Z&-PZWjBGfG-yTMN7mcA#jf< z^0UMF!kkhf82-%Y4Gd1A<{22Yp>ukWEIrCJjn9`A)N|jWHa)&;xAf`exhj;U^YNWh zX+R2f%6kHeeEPjc+WzgyFBBMZ9}; zNB%Ct>H-PJQBhc|tJSdDLqvuXbLdQTM;qa-Pr*;mp@fx-ZNx0)p__?u3{CemY%tfs z$zraONmz<=d@6aj$m2Ly%>({N*KgDrG4cNWMw`MNMO|~bUxOsdL{u;Iv^%z~h%B;6Z8d!+a-y<@J{d@8)gozXSca|L*FY_%OvL%jd^wNVw?EEa zEUNvfRAIO`4Qc`$bc7H5KTBBe`UF$&0z;r~VzV9DFK!ut!=}*ehx=p)* zk_b7RWL$b9jE=OEGbFrMYOugE3Bpx%b4dO2`NHCH`vz zG?2Wc>gl~IZUK=~Ky)v+B_Acs3wfwD5X6T6Tu(KaVfY?Bxh7^lV`%)Acq08GNuda8 z9`*g(Mm#JvZ8RHCBADv}zkBmX-{SMGzAs=VAQi*I+(uFLTbc2xB~zUR!CQZK9J&Jt`b=2@v{lZ#$v86>hf+`sTfM4BFvY!-l?T zQQwgH8vx@@Grc0wDBG$%t9~#vQPz5zc=;^~weP=Af41|`NX$N7-wL$uz^yH#be#TZ zWM_Br&$&QP>5?>wmPBtg$WfR=M8PI{8q^`KllRw2fUyEcltfp3!=&fAlss3 zDQagTX6K~s;Va3M-%ED!8xe1?kbU?FR?wtAcJ$>2X#O$)q`q!+qHOXbbY{G5?pTC= zaMV0&-1z|Ik;;1rjKYzK*}ksOfrt2x5Ep)Z^UEXv`(c9{*E7hmk+PC6k!Y77_{#K* zo}mw=@RMt3XXrhA@2EjqODGYmv{fO_9p+pf*+aQzw0NA#qAG}chqiD(Em7|Y)iNYr5X$Ldg?KwIerrrbXICiSFXMtlRXtF z^VBcURc*DCMMyv=&QY%J?vf*Fy!8h^kweJgnY-jZJ7Q)h`xzDpZjXVb!j84&iP*0DHNUFl^Or zAPc1Sjk3}>CtJ4-a>PBP!_r(^m3i}se5=**!EMRPOy)^n)<+x-nl0E(oQ&SKW#>^h zzEN;n;|1XhpDXz#60*K3mmGwS9t4yvSmUSTs|j=~a35<>cVQb7f$YqhZN20uJh|ir z_~{6%NXC}!$TfFs1$_|S1)Xxt8(A>R<(v3E6>B=nFyfymm2IDh#L!Q288r$k{rF?% zzb8Y3+mj=q3$UwTRov@h?V8wJ6m74*tTlPe=J!GkW@d&$zG==S7Hao-b-o??v*(A- zu)}Y|*7^AJGbyPzl|y{Q6_KyF~3NNHaBt{L~l&qIce9cF@~AvF`bJ#XB;dNKE} z`Z_=W1!L>oLE;bJIz)$xr%gYdAUpxSTGSKrn{_@q>1K|75~v!^i!Xf zE>pC%ltjAhEysTWy4+8F^eFs#*+E<|nLj4T(X@>UhFUWP_X>(q^mA@Cd?}km!M#(8 z`x|7Ll8$5FP8ox(1uI^Ftvv{L^=%sh(9CcF*ehAH;tIWy^B^W-IXnY^nB>z8{?AzR z8P87tk8S?b@PEhq^8buA$*G3m|HbqUD;F|r^UE5y zwZ{)am5w(8$$W8Aw^C@m#lotdhtqOxERM%P612c2rZiavf6+cmbmFk!oyV8`n0iF z8NULcdAs$DZ{l($ToGB0N9MMv)!h{~XstHO3FgBX|6X~Qk3*Jid8linn?4xv= z-NCzhmYfp=eikddZ#U|r%dSha$z~gH;@263A2Y@;AAUBeGbq)0BCxE~!@Okv@es!A zO2bf*qLEX@{fD0<=fYB6!1mlh=fepzgS_E}sZZ{C2TY+1UoL2qsR>auw&{|CIm_93J3s{2p)esZ{Aydt$MLH##cA z>EbPTrru;IYR^vcCJRKW6bl6PTKL>^&uJ~`_{9;cTh`MB+lCaG)%I)qmV%!4{Vi~$ zLl?_8OeBaw7kOlkZC`-ir=5!HQ4#CQm>13O(=}6J+O40i_5~SNV-6PNR=K>a?Pg5i z`U$<$m$l$r2~_#Lg9Irn1}C|v{QbI_>iQx!s#b-y?A}0ryQeLH$z!lWcq?Z%oqWbx z&IQrmTR12p-p7dko*Y8H-R0G!8f}B-*ky$>?dv5#fIUlU3Hv-$CLzDI_*<*T^;<&^ zQ#sT!6+hEkQ`g$2z$F{=S>%ZE&L?TMt$OZh znaVx6vsfhK{dhm_AHlPXKjsP}5i=>g%y7ku$pba*U}xUoJ@;k==;dm)l~;aQ z`d3Kd_N}PO{V`B7R6tDywd1QV&N894+h{eIQNJXqfP8V-tYl|BKsu9;CO~y*F3fNy zr(AQDZw=@>1&Š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%0AWHwocA8_E0QS{De7zV5tw5E)@=(41 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