diff --git a/assets/fundamentals/html/basic-tags.svg "b/assets/1\355\225\231\353\205\204/1\355\225\231\352\270\260/basic-tags.svg" similarity index 100% rename from assets/fundamentals/html/basic-tags.svg rename to "assets/1\355\225\231\353\205\204/1\355\225\231\352\270\260/basic-tags.svg" diff --git a/assets/fundamentals/html/best-practices.svg "b/assets/1\355\225\231\353\205\204/1\355\225\231\352\270\260/best-practices.svg" similarity index 100% rename from assets/fundamentals/html/best-practices.svg rename to "assets/1\355\225\231\353\205\204/1\355\225\231\352\270\260/best-practices.svg" diff --git a/assets/fundamentals/html/discoverable-content.svg "b/assets/1\355\225\231\353\205\204/1\355\225\231\352\270\260/discoverable-content.svg" similarity index 100% rename from assets/fundamentals/html/discoverable-content.svg rename to "assets/1\355\225\231\353\205\204/1\355\225\231\352\270\260/discoverable-content.svg" diff --git a/assets/fundamentals/html/forms.svg "b/assets/1\355\225\231\353\205\204/1\355\225\231\352\270\260/forms.svg" similarity index 100% rename from assets/fundamentals/html/forms.svg rename to "assets/1\355\225\231\353\205\204/1\355\225\231\352\270\260/forms.svg" diff --git a/assets/fundamentals/html/seo.svg "b/assets/1\355\225\231\353\205\204/1\355\225\231\352\270\260/seo.svg" similarity index 100% rename from assets/fundamentals/html/seo.svg rename to "assets/1\355\225\231\353\205\204/1\355\225\231\352\270\260/seo.svg" diff --git a/assets/fundamentals/html/svg.svg "b/assets/1\355\225\231\353\205\204/1\355\225\231\352\270\260/svg.svg" similarity index 100% rename from assets/fundamentals/html/svg.svg rename to "assets/1\355\225\231\353\205\204/1\355\225\231\352\270\260/svg.svg" diff --git a/assets/fundamentals/html/syntax.svg "b/assets/1\355\225\231\353\205\204/1\355\225\231\352\270\260/syntax.svg" similarity index 100% rename from assets/fundamentals/html/syntax.svg rename to "assets/1\355\225\231\353\205\204/1\355\225\231\352\270\260/syntax.svg" diff --git "a/assets/1\355\225\231\353\205\204/1\355\225\231\352\270\260/\354\235\264\354\202\260\354\210\230\355\225\231.svg" "b/assets/1\355\225\231\353\205\204/1\355\225\231\352\270\260/\354\235\264\354\202\260\354\210\230\355\225\231.svg" new file mode 100644 index 0000000..5f08b74 --- /dev/null +++ "b/assets/1\355\225\231\353\205\204/1\355\225\231\352\270\260/\354\235\264\354\202\260\354\210\230\355\225\231.svg" @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/fundamentals/css/animations.svg "b/assets/1\355\225\231\353\205\204/2\355\225\231\352\270\260/animations.svg" similarity index 100% rename from assets/fundamentals/css/animations.svg rename to "assets/1\355\225\231\353\205\204/2\355\225\231\352\270\260/animations.svg" diff --git a/assets/fundamentals/css/best-practices.svg "b/assets/1\355\225\231\353\205\204/2\355\225\231\352\270\260/best-practices.svg" similarity index 100% rename from assets/fundamentals/css/best-practices.svg rename to "assets/1\355\225\231\353\205\204/2\355\225\231\352\270\260/best-practices.svg" diff --git a/assets/fundamentals/css/box-model.svg "b/assets/1\355\225\231\353\205\204/2\355\225\231\352\270\260/box-model.svg" similarity index 100% rename from assets/fundamentals/css/box-model.svg rename to "assets/1\355\225\231\353\205\204/2\355\225\231\352\270\260/box-model.svg" diff --git a/assets/fundamentals/css/calc.svg "b/assets/1\355\225\231\353\205\204/2\355\225\231\352\270\260/calc.svg" similarity index 100% rename from assets/fundamentals/css/calc.svg rename to "assets/1\355\225\231\353\205\204/2\355\225\231\352\270\260/calc.svg" diff --git a/assets/fundamentals/css/colors.svg "b/assets/1\355\225\231\353\205\204/2\355\225\231\352\270\260/colors.svg" similarity index 100% rename from assets/fundamentals/css/colors.svg rename to "assets/1\355\225\231\353\205\204/2\355\225\231\352\270\260/colors.svg" diff --git a/assets/fundamentals/css/css-variables.svg "b/assets/1\355\225\231\353\205\204/2\355\225\231\352\270\260/css-variables.svg" similarity index 100% rename from assets/fundamentals/css/css-variables.svg rename to "assets/1\355\225\231\353\205\204/2\355\225\231\352\270\260/css-variables.svg" diff --git a/assets/fundamentals/css/flex.svg "b/assets/1\355\225\231\353\205\204/2\355\225\231\352\270\260/flex.svg" similarity index 100% rename from assets/fundamentals/css/flex.svg rename to "assets/1\355\225\231\353\205\204/2\355\225\231\352\270\260/flex.svg" diff --git a/assets/fundamentals/css/grid.svg "b/assets/1\355\225\231\353\205\204/2\355\225\231\352\270\260/grid.svg" similarity index 100% rename from assets/fundamentals/css/grid.svg rename to "assets/1\355\225\231\353\205\204/2\355\225\231\352\270\260/grid.svg" diff --git a/assets/fundamentals/css/images.svg "b/assets/1\355\225\231\353\205\204/2\355\225\231\352\270\260/images.svg" similarity index 100% rename from assets/fundamentals/css/images.svg rename to "assets/1\355\225\231\353\205\204/2\355\225\231\352\270\260/images.svg" diff --git a/assets/fundamentals/css/layout.svg "b/assets/1\355\225\231\353\205\204/2\355\225\231\352\270\260/layout.svg" similarity index 100% rename from assets/fundamentals/css/layout.svg rename to "assets/1\355\225\231\353\205\204/2\355\225\231\352\270\260/layout.svg" diff --git a/assets/fundamentals/css/margin-collapsing.svg "b/assets/1\355\225\231\353\205\204/2\355\225\231\352\270\260/margin-collapsing.svg" similarity index 100% rename from assets/fundamentals/css/margin-collapsing.svg rename to "assets/1\355\225\231\353\205\204/2\355\225\231\352\270\260/margin-collapsing.svg" diff --git a/assets/fundamentals/css/media-queries.svg "b/assets/1\355\225\231\353\205\204/2\355\225\231\352\270\260/media-queries.svg" similarity index 100% rename from assets/fundamentals/css/media-queries.svg rename to "assets/1\355\225\231\353\205\204/2\355\225\231\352\270\260/media-queries.svg" diff --git a/assets/fundamentals/css/overflow.svg "b/assets/1\355\225\231\353\205\204/2\355\225\231\352\270\260/overflow.svg" similarity index 100% rename from assets/fundamentals/css/overflow.svg rename to "assets/1\355\225\231\353\205\204/2\355\225\231\352\270\260/overflow.svg" diff --git a/assets/fundamentals/css/pseudo-selectors.svg "b/assets/1\355\225\231\353\205\204/2\355\225\231\352\270\260/pseudo-selectors.svg" similarity index 100% rename from assets/fundamentals/css/pseudo-selectors.svg rename to "assets/1\355\225\231\353\205\204/2\355\225\231\352\270\260/pseudo-selectors.svg" diff --git a/assets/fundamentals/css/relative-units.svg "b/assets/1\355\225\231\353\205\204/2\355\225\231\352\270\260/relative-units.svg" similarity index 100% rename from assets/fundamentals/css/relative-units.svg rename to "assets/1\355\225\231\353\205\204/2\355\225\231\352\270\260/relative-units.svg" diff --git a/assets/fundamentals/css/responsive-design.svg "b/assets/1\355\225\231\353\205\204/2\355\225\231\352\270\260/responsive-design.svg" similarity index 100% rename from assets/fundamentals/css/responsive-design.svg rename to "assets/1\355\225\231\353\205\204/2\355\225\231\352\270\260/responsive-design.svg" diff --git a/assets/fundamentals/css/selectors.svg "b/assets/1\355\225\231\353\205\204/2\355\225\231\352\270\260/selectors.svg" similarity index 100% rename from assets/fundamentals/css/selectors.svg rename to "assets/1\355\225\231\353\205\204/2\355\225\231\352\270\260/selectors.svg" diff --git a/assets/fundamentals/css/specificity.svg "b/assets/1\355\225\231\353\205\204/2\355\225\231\352\270\260/specificity.svg" similarity index 100% rename from assets/fundamentals/css/specificity.svg rename to "assets/1\355\225\231\353\205\204/2\355\225\231\352\270\260/specificity.svg" diff --git a/assets/fundamentals/css/syntax.svg "b/assets/1\355\225\231\353\205\204/2\355\225\231\352\270\260/syntax.svg" similarity index 100% rename from assets/fundamentals/css/syntax.svg rename to "assets/1\355\225\231\353\205\204/2\355\225\231\352\270\260/syntax.svg" diff --git a/assets/fundamentals/css/transforms.svg "b/assets/1\355\225\231\353\205\204/2\355\225\231\352\270\260/transforms.svg" similarity index 100% rename from assets/fundamentals/css/transforms.svg rename to "assets/1\355\225\231\353\205\204/2\355\225\231\352\270\260/transforms.svg" diff --git a/assets/fundamentals/javascript/async-await.svg "b/assets/1\355\225\231\353\205\204/javascript/async-await.svg" similarity index 100% rename from assets/fundamentals/javascript/async-await.svg rename to "assets/1\355\225\231\353\205\204/javascript/async-await.svg" diff --git a/assets/fundamentals/javascript/best-practices.svg "b/assets/1\355\225\231\353\205\204/javascript/best-practices.svg" similarity index 100% rename from assets/fundamentals/javascript/best-practices.svg rename to "assets/1\355\225\231\353\205\204/javascript/best-practices.svg" diff --git a/assets/fundamentals/javascript/callbacks.svg "b/assets/1\355\225\231\353\205\204/javascript/callbacks.svg" similarity index 100% rename from assets/fundamentals/javascript/callbacks.svg rename to "assets/1\355\225\231\353\205\204/javascript/callbacks.svg" diff --git a/assets/fundamentals/javascript/canvas.svg "b/assets/1\355\225\231\353\205\204/javascript/canvas.svg" similarity index 100% rename from assets/fundamentals/javascript/canvas.svg rename to "assets/1\355\225\231\353\205\204/javascript/canvas.svg" diff --git a/assets/fundamentals/javascript/classes.svg "b/assets/1\355\225\231\353\205\204/javascript/classes.svg" similarity index 100% rename from assets/fundamentals/javascript/classes.svg rename to "assets/1\355\225\231\353\205\204/javascript/classes.svg" diff --git a/assets/fundamentals/javascript/destructuring.svg "b/assets/1\355\225\231\353\205\204/javascript/destructuring.svg" similarity index 100% rename from assets/fundamentals/javascript/destructuring.svg rename to "assets/1\355\225\231\353\205\204/javascript/destructuring.svg" diff --git a/assets/fundamentals/javascript/documentation.svg "b/assets/1\355\225\231\353\205\204/javascript/documentation.svg" similarity index 100% rename from assets/fundamentals/javascript/documentation.svg rename to "assets/1\355\225\231\353\205\204/javascript/documentation.svg" diff --git a/assets/fundamentals/javascript/dom-manipulation.svg "b/assets/1\355\225\231\353\205\204/javascript/dom-manipulation.svg" similarity index 100% rename from assets/fundamentals/javascript/dom-manipulation.svg rename to "assets/1\355\225\231\353\205\204/javascript/dom-manipulation.svg" diff --git a/assets/fundamentals/javascript/dom.svg "b/assets/1\355\225\231\353\205\204/javascript/dom.svg" similarity index 100% rename from assets/fundamentals/javascript/dom.svg rename to "assets/1\355\225\231\353\205\204/javascript/dom.svg" diff --git a/assets/fundamentals/javascript/events.svg "b/assets/1\355\225\231\353\205\204/javascript/events.svg" similarity index 100% rename from assets/fundamentals/javascript/events.svg rename to "assets/1\355\225\231\353\205\204/javascript/events.svg" diff --git a/assets/fundamentals/javascript/fetch.svg "b/assets/1\355\225\231\353\205\204/javascript/fetch.svg" similarity index 100% rename from assets/fundamentals/javascript/fetch.svg rename to "assets/1\355\225\231\353\205\204/javascript/fetch.svg" diff --git a/assets/fundamentals/javascript/intl.svg "b/assets/1\355\225\231\353\205\204/javascript/intl.svg" similarity index 100% rename from assets/fundamentals/javascript/intl.svg rename to "assets/1\355\225\231\353\205\204/javascript/intl.svg" diff --git a/assets/fundamentals/javascript/modules.svg "b/assets/1\355\225\231\353\205\204/javascript/modules.svg" similarity index 100% rename from assets/fundamentals/javascript/modules.svg rename to "assets/1\355\225\231\353\205\204/javascript/modules.svg" diff --git a/assets/fundamentals/javascript/objects.svg "b/assets/1\355\225\231\353\205\204/javascript/objects.svg" similarity index 100% rename from assets/fundamentals/javascript/objects.svg rename to "assets/1\355\225\231\353\205\204/javascript/objects.svg" diff --git a/assets/fundamentals/javascript/promises.svg "b/assets/1\355\225\231\353\205\204/javascript/promises.svg" similarity index 100% rename from assets/fundamentals/javascript/promises.svg rename to "assets/1\355\225\231\353\205\204/javascript/promises.svg" diff --git a/assets/fundamentals/javascript/prototype.svg "b/assets/1\355\225\231\353\205\204/javascript/prototype.svg" similarity index 100% rename from assets/fundamentals/javascript/prototype.svg rename to "assets/1\355\225\231\353\205\204/javascript/prototype.svg" diff --git a/assets/fundamentals/javascript/regex.svg "b/assets/1\355\225\231\353\205\204/javascript/regex.svg" similarity index 100% rename from assets/fundamentals/javascript/regex.svg rename to "assets/1\355\225\231\353\205\204/javascript/regex.svg" diff --git a/assets/fundamentals/javascript/spread.svg "b/assets/1\355\225\231\353\205\204/javascript/spread.svg" similarity index 100% rename from assets/fundamentals/javascript/spread.svg rename to "assets/1\355\225\231\353\205\204/javascript/spread.svg" diff --git a/assets/fundamentals/javascript/syntax.svg "b/assets/1\355\225\231\353\205\204/javascript/syntax.svg" similarity index 100% rename from assets/fundamentals/javascript/syntax.svg rename to "assets/1\355\225\231\353\205\204/javascript/syntax.svg" diff --git a/assets/fundamentals/javascript/template-literals.svg "b/assets/1\355\225\231\353\205\204/javascript/template-literals.svg" similarity index 100% rename from assets/fundamentals/javascript/template-literals.svg rename to "assets/1\355\225\231\353\205\204/javascript/template-literals.svg" diff --git a/assets/fundamentals/javascript/web-animations.svg "b/assets/1\355\225\231\353\205\204/javascript/web-animations.svg" similarity index 100% rename from assets/fundamentals/javascript/web-animations.svg rename to "assets/1\355\225\231\353\205\204/javascript/web-animations.svg" diff --git a/assets/fundamentals/the-browser/blink.svg "b/assets/1\355\225\231\353\205\204/the-browser/blink.svg" similarity index 100% rename from assets/fundamentals/the-browser/blink.svg rename to "assets/1\355\225\231\353\205\204/the-browser/blink.svg" diff --git a/assets/fundamentals/the-browser/breakpoints.svg "b/assets/1\355\225\231\353\205\204/the-browser/breakpoints.svg" similarity index 100% rename from assets/fundamentals/the-browser/breakpoints.svg rename to "assets/1\355\225\231\353\205\204/the-browser/breakpoints.svg" diff --git a/assets/fundamentals/the-browser/browser-engines.svg "b/assets/1\355\225\231\353\205\204/the-browser/browser-engines.svg" similarity index 100% rename from assets/fundamentals/the-browser/browser-engines.svg rename to "assets/1\355\225\231\353\205\204/the-browser/browser-engines.svg" diff --git a/assets/fundamentals/the-browser/console-api.svg "b/assets/1\355\225\231\353\205\204/the-browser/console-api.svg" similarity index 100% rename from assets/fundamentals/the-browser/console-api.svg rename to "assets/1\355\225\231\353\205\204/the-browser/console-api.svg" diff --git a/assets/fundamentals/the-browser/debugging.svg "b/assets/1\355\225\231\353\205\204/the-browser/debugging.svg" similarity index 100% rename from assets/fundamentals/the-browser/debugging.svg rename to "assets/1\355\225\231\353\205\204/the-browser/debugging.svg" diff --git a/assets/fundamentals/the-browser/developer-console.svg "b/assets/1\355\225\231\353\205\204/the-browser/developer-console.svg" similarity index 100% rename from assets/fundamentals/the-browser/developer-console.svg rename to "assets/1\355\225\231\353\205\204/the-browser/developer-console.svg" diff --git a/assets/fundamentals/the-browser/gecko.svg "b/assets/1\355\225\231\353\205\204/the-browser/gecko.svg" similarity index 100% rename from assets/fundamentals/the-browser/gecko.svg rename to "assets/1\355\225\231\353\205\204/the-browser/gecko.svg" diff --git a/assets/fundamentals/the-browser/http.svg "b/assets/1\355\225\231\353\205\204/the-browser/http.svg" similarity index 100% rename from assets/fundamentals/the-browser/http.svg rename to "assets/1\355\225\231\353\205\204/the-browser/http.svg" diff --git a/assets/fundamentals/the-browser/polyfills.svg "b/assets/1\355\225\231\353\205\204/the-browser/polyfills.svg" similarity index 100% rename from assets/fundamentals/the-browser/polyfills.svg rename to "assets/1\355\225\231\353\205\204/the-browser/polyfills.svg" diff --git a/assets/fundamentals/the-browser/specifications.svg "b/assets/1\355\225\231\353\205\204/the-browser/specifications.svg" similarity index 100% rename from assets/fundamentals/the-browser/specifications.svg rename to "assets/1\355\225\231\353\205\204/the-browser/specifications.svg" diff --git a/assets/fundamentals/the-browser/standardization.svg "b/assets/1\355\225\231\353\205\204/the-browser/standardization.svg" similarity index 100% rename from assets/fundamentals/the-browser/standardization.svg rename to "assets/1\355\225\231\353\205\204/the-browser/standardization.svg" diff --git a/assets/fundamentals/the-browser/tc39.svg "b/assets/1\355\225\231\353\205\204/the-browser/tc39.svg" similarity index 100% rename from assets/fundamentals/the-browser/tc39.svg rename to "assets/1\355\225\231\353\205\204/the-browser/tc39.svg" diff --git a/assets/fundamentals/the-browser/the-internet.svg "b/assets/1\355\225\231\353\205\204/the-browser/the-internet.svg" similarity index 100% rename from assets/fundamentals/the-browser/the-internet.svg rename to "assets/1\355\225\231\353\205\204/the-browser/the-internet.svg" diff --git a/assets/fundamentals/the-browser/w3c.svg "b/assets/1\355\225\231\353\205\204/the-browser/w3c.svg" similarity index 100% rename from assets/fundamentals/the-browser/w3c.svg rename to "assets/1\355\225\231\353\205\204/the-browser/w3c.svg" diff --git a/assets/fundamentals/the-browser/webkit.svg "b/assets/1\355\225\231\353\205\204/the-browser/webkit.svg" similarity index 100% rename from assets/fundamentals/the-browser/webkit.svg rename to "assets/1\355\225\231\353\205\204/the-browser/webkit.svg" diff --git a/assets/fundamentals/the-browser/whatwg.svg "b/assets/1\355\225\231\353\205\204/the-browser/whatwg.svg" similarity index 100% rename from assets/fundamentals/the-browser/whatwg.svg rename to "assets/1\355\225\231\353\205\204/the-browser/whatwg.svg" diff --git a/src/data/databases.js b/src/data/databases.js index 26a2a76..0de6800 100644 --- a/src/data/databases.js +++ b/src/data/databases.js @@ -466,7 +466,7 @@ export const databasesCollection = { ["Express", "https://expressjs.com/"], ["Tutorialspoint - Express Framework", "https://www.tutorialspoint.com/nodejs/nodejs_express_framework.htm"], ["Youtube - Express.js & Node.js Course for Beginners", "https://www.youtube.com/watch?v=G8uL0lFFoN0"], - ["Understanding Node.js & Express.js fundamentals", "https://medium.com/@LindaVivah/the-beginners-guide-understanding-node-js-express-js-fundamentals-e15493462be1"], + ["Understanding Node.js & Express.js 1학년", "https://medium.com/@LindaVivah/the-beginners-guide-understanding-node-js-express-js-fundamentals-e15493462be1"], ["Wikipedia - Express.js", "https://en.wikipedia.org/wiki/Express.js"], ] }, diff --git a/src/data/design-and-ux.js b/src/data/design-and-ux.js index 25b268b..9c0e7dd 100644 --- a/src/data/design-and-ux.js +++ b/src/data/design-and-ux.js @@ -24,7 +24,7 @@ export const designAndUXCollection = { links: [ ["Color Theory: Brief Guide For Designers", "https://uxplanet.org/color-theory-brief-guide-for-designers-76e11c57eaa"], ["Color theory and the color wheel", "https://www.canva.com/colors/color-wheel/"], - ["The fundamentals of understanding color theory", "https://99designs.dk/blog/tips/the-7-step-guide-to-understanding-color-theory/"], + ["The 1학년 of understanding color theory", "https://99designs.dk/blog/tips/the-7-step-guide-to-understanding-color-theory/"], ["Adobe - Color wheel", "https://color.adobe.com/"], ] }, diff --git a/src/data/fundamentals.js b/src/data/fundamentals.js index c36872a..378b1eb 100644 --- a/src/data/fundamentals.js +++ b/src/data/fundamentals.js @@ -18,23 +18,22 @@ export const fundamentalsCollection = { { name: "창의공학설계", description: { - text: "Exploration of Future Planning", + text: "Adventure Design", links: [ ["이수구분 : 전선", ""], - ["교과목 번호 : 5111081", ""], - ["학점 : 1-0-2", ""], + ["교과목 번호 : 5111004", ""], + ["학점 : 2-0-4", ""], ] } }, { name: "미래설계탐색", description: { - text: "Learn how to make your content search-friendly.", + text: "Exploration of Future Planning", links: [ - ["web.dev - Discoverable", "https://web.dev/discoverable"], - ["Google Search - Get Started", "https://developers.google.com/search/docs/guides/get-started"], - ["Google Search - SEO basics", "https://developers.google.com/search/docs/guides/javascript-seo-basics"], - ["web.dev - SEO audits", "https://web.dev/lighthouse-seo"] + ["이수 구분 : 전선", ""], + ["교과목 번호 : 5111081", ""], + ["학점 : 1-0-2", ""], ] } }, @@ -69,11 +68,11 @@ export const fundamentalsCollection = { { name: "미래설계준비", description: { - text: "Learn what the CSS box modelS means.", + text: "Preparation of Future Design", links: [ - ["MDN - Introduction to the CSS basic box model", "https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Box_Model/Introduction_to_the_CSS_box_model"], - ["MDN - The box model", "https://developer.mozilla.org/en-US/docs/Learn/CSS/Building_blocks/The_box_model"], - ["CSS Tricks - Inheriting box-sizing", "https://css-tricks.com/inheriting-box-sizing-probably-slightly-better-best-practice/"], + ["이수 구분 : 전선", ""], + ["교과목 번호 : ", ""], + ["학점 : 1-0-2", ""], ] }, diff --git a/src/data/pwa.js b/src/data/pwa.js index 721a87f..6f3643e 100644 --- a/src/data/pwa.js +++ b/src/data/pwa.js @@ -1,11 +1,11 @@ export const pwaCollection = { - name: "Progressive Webapps", + name: "4학년", areas: [ { - name: "API's", + name: "1학기", skills: [ { - name: "Storage", + name: "인턴쉽I", description: { text: "Learn how to store data for your web app.", links: [ @@ -19,7 +19,7 @@ export const pwaCollection = { } }, { - name: "Routing", + name: "인턴쉽IV", description: { text: "Learn what routing means in single page applications.", links: [ @@ -27,27 +27,10 @@ export const pwaCollection = { ["Static Apps - Routing URLs in Static Web Apps", "https://staticapps.org/articles/routing-urls-in-static-apps/"], ["Routing With Single Page Applications or Client Side Routing", "https://pennyforyourcode.com/tldr-routing-with-single-page-applications-or-client-side-routing-327626cdc5dd"], ] - }, - skills: [ - { - name: "History API", - description: { - text: "Learn how to use the history API to add single page applicaiton routing to your web app.", - links: [ - ["MDN - Working with the History API", "https://developer.mozilla.org/en-US/docs/Web/API/History_API/Working_with_the_History_API"], - ["MDN - History API", "https://developer.mozilla.org/en-US/docs/Web/API/History_API"], - ["Single-page application routing in vanilla JavaScript", "https://medium.com/@george.norberg/history-api-getting-started-36bfc82ddefc"], - ["CSS Tricks - Using the HTML5 History API", "https://css-tricks.com/using-the-html5-history-api/"], - ["The History API", "https://flaviocopes.com/history-api/"], - ["Google Devs - History API: Scroll Restoration", "https://developers.google.com/web/updates/2015/09/history-api-scroll-restoration"], - ["MDN - The Document Base URL element", "https://developer.mozilla.org/en-US/docs/Web/HTML/Element/base"] - ] - }, - } - ] + } }, { - name: "Service Workers", + name: "실무프로젝트I", description: { text: "Learn how to register a service worker to provide a rich native-like experience.", links: [ @@ -62,41 +45,10 @@ export const pwaCollection = { ["Google Devs - Debugging Service Workers", "https://developers.google.com/web/fundamentals/codelabs/debugging-service-workers"], ["Caching best practices", "https://jakearchibald.com/2016/caching-best-practices/"], ] - }, - skills: [ - { - name: "Offline first", - description: { - text: "Learn how to make your web app working offline with an offline first approach.", - links: [ - ["Google Devs - The Offline Cookbook", "https://developers.google.com/web/fundamentals/instant-and-offline/offline-cookbook"], - ["Udacity - Offline Web Applications", "https://www.udacity.com/course/offline-web-applications--ud899"], - ["Offline First", "http://offlinefirst.org/"], - ["Google Devs - Offline UX Considerations", "https://developers.google.com/web/fundamentals/instant-and-offline/offline-ux"], - ["Google Devs - Offline Storage for Progressive Web Apps", "https://developers.google.com/web/fundamentals/instant-and-offline/web-storage/offline-for-pwa"], - ["Codelabs - Offline quickstart", "https://codelabs.developers.google.com/codelabs/pwa-offline-quickstart/index.html?index=..%2F..dev-pwa-training#0"], - ["Codelabs - Adding a Service Worker and Offline into your Web App", "https://codelabs.developers.google.com/codelabs/offline/index.html?index=..%2F..%2Findex#0"], - ["Supercharged - Offline Links", "https://www.youtube.com/watch?v=7fnpsF9tMXc"], - ["MDN - Online and offline events", "https://developer.mozilla.org/en-US/docs/Web/API/NavigatorOnLine/Online_and_offline_events"], - ["MDN - Making PWAs work offline", "https://developer.mozilla.org/en-US/docs/Web/Progressive_web_apps/Offline_Service_workers"] - ] - } - }, - { - name: "Push notifications", - description: { - text: "Learn how to add push notifications to your web app.", - links: [ - ["Google Devs - Adding Push Notifications to a Web App", "https://developers.google.com/web/fundamentals/codelabs/push-notifications/"], - ["MDN - How to make PWAs re-engageable", "https://developer.mozilla.org/en-US/docs/Web/Progressive_web_apps/Re-engageable_Notifications_Push"], - ["MDN - Notifications API", "https://developer.mozilla.org/en-US/docs/Web/API/Notifications_API"], - ] - } - }, - ] + } }, { - name: "Web App manifest", + name: "캡스톤디자인I", description: { text: "Learn how to tell the browser about your web app and how it should behave when 'installed' by creating a web app manifest.", links: [ @@ -108,7 +60,7 @@ export const pwaCollection = { } }, { - name: "Add to homescreen", + name: "기계학습", description: { text: "Learn how to make your web app installable.", links: [ @@ -119,7 +71,59 @@ export const pwaCollection = { } }, { - name: "Pointer Events", + name: "임베디드시스템", + description: { + text: "Learn how to handle inputs from pointing devices such as a mouse, pen/stylus or touch.", + links: [ + ["MDN - Pointer Events", "https://developer.mozilla.org/en-US/docs/Web/API/Pointer_events"], + ["Google Devs - Add Touch to Your Site", "https://developers.google.com/web/fundamentals/design-and-ux/input/touch"], + ["Google Devs - Pointing the Way Forward", "https://developers.google.com/web/updates/2016/10/pointer-events"], + ["Google Devs - Touch Action Options", "https://developers.google.com/web/updates/2016/10/touch-action"], + ["W3C - Pointer Events", "https://www.w3.org/TR/pointerevents/"] + ] + } + }, + { + name: "영상처리", + description: { + text: "Learn how to handle inputs from pointing devices such as a mouse, pen/stylus or touch.", + links: [ + ["MDN - Pointer Events", "https://developer.mozilla.org/en-US/docs/Web/API/Pointer_events"], + ["Google Devs - Add Touch to Your Site", "https://developers.google.com/web/fundamentals/design-and-ux/input/touch"], + ["Google Devs - Pointing the Way Forward", "https://developers.google.com/web/updates/2016/10/pointer-events"], + ["Google Devs - Touch Action Options", "https://developers.google.com/web/updates/2016/10/touch-action"], + ["W3C - Pointer Events", "https://www.w3.org/TR/pointerevents/"] + ] + } + }, + { + name: "창업산학초청세미나I", + description: { + text: "Learn how to handle inputs from pointing devices such as a mouse, pen/stylus or touch.", + links: [ + ["MDN - Pointer Events", "https://developer.mozilla.org/en-US/docs/Web/API/Pointer_events"], + ["Google Devs - Add Touch to Your Site", "https://developers.google.com/web/fundamentals/design-and-ux/input/touch"], + ["Google Devs - Pointing the Way Forward", "https://developers.google.com/web/updates/2016/10/pointer-events"], + ["Google Devs - Touch Action Options", "https://developers.google.com/web/updates/2016/10/touch-action"], + ["W3C - Pointer Events", "https://www.w3.org/TR/pointerevents/"] + ] + } + }, + { + name: "정보,컴퓨터교재연구 및 지도법", + description: { + text: "Learn how to handle inputs from pointing devices such as a mouse, pen/stylus or touch.", + links: [ + ["MDN - Pointer Events", "https://developer.mozilla.org/en-US/docs/Web/API/Pointer_events"], + ["Google Devs - Add Touch to Your Site", "https://developers.google.com/web/fundamentals/design-and-ux/input/touch"], + ["Google Devs - Pointing the Way Forward", "https://developers.google.com/web/updates/2016/10/pointer-events"], + ["Google Devs - Touch Action Options", "https://developers.google.com/web/updates/2016/10/touch-action"], + ["W3C - Pointer Events", "https://www.w3.org/TR/pointerevents/"] + ] + } + }, + { + name: "빅데이터시스템설계", description: { text: "Learn how to handle inputs from pointing devices such as a mouse, pen/stylus or touch.", links: [ @@ -134,10 +138,10 @@ export const pwaCollection = { ] }, { - name: "Loading Performance", + name: "2학기", skills: [ { - name: "App shell", + name: "인턴쉽II", description: { text: "Learn how to use an app shell to provide an instant and reliable experience to users on repeat visits", links: [ @@ -147,17 +151,17 @@ export const pwaCollection = { } }, { - name: "Render-Blocking Resources", + name: "인턴쉽III", description: { text: "Learn about render-blocking resources and why they are bad for the user-experience.", links: [ ["MDN - Render-blocking resources", "https://developer.mozilla.org/en-US/docs/Web/Progressive_web_apps/Loading#Render-blocking_resources"], ["Google Devs - Render-Blocking Resources", "https://developers.google.com/web/tools/lighthouse/audits/blocking-resources"] ] - }, + } }, { - name: "Compression", + name: "실무프로젝트II", description: { text: "Learn how to minimize the overall download size by optimizing and compressing resources.", links: [ @@ -168,10 +172,10 @@ export const pwaCollection = { ["Google Devs - Optimize Images", "https://developers.google.com/web/tools/lighthouse/audits/optimize-images"], ["web.dev - Reduce JavaScript execution time", "https://web.dev/bootup-time/"] ] - }, + } }, { - name: "Performance metrics", + name: "창업파일럿프로젝트", description: { text: "Learn why it is important to measure performance and which metrics you should prioritize.", links: [ @@ -179,43 +183,10 @@ export const pwaCollection = { ["Udacity - Website Performance Optimization", "https://www.udacity.com/course/website-performance-optimization--ud884"], ["Udacity - Browser Rendering Optimization", "https://www.udacity.com/course/browser-rendering-optimization--ud860"] ] - }, - skills: [ - { - name: "Largest Contentful Paint", - description: { - text: "Learn about Largest Contentful Paint and how it impacts the overall performance.", - links: [ - ["web.dev - Largest Contentful Paint", "https://web.dev/lcp/"], - ["web.dev - Lighthouse Largest Contentful Paint", "https://web.dev/lighthouse-largest-contentful-paint"], - ["Medium - New Performance Metric: What is Largest Contentful Paint?", "https://medium.com/speedrank-app/new-performance-metric-what-is-largest-contentful-paint-dc784a497dd5"] - ] - }, - }, - { - name: "Total Blocking Time", - description: { - text: "Learn about Total Blocking Time and how it impacts the overall performance.", - links: [ - ["web.dev - First CPU Idle", "https://web.dev/first-cpu-idle"], - ["Google Devs - Total Blocking Time", "https://web.dev/tbt"], - ] - }, - }, - { - name: "Time to Interactive", - description: { - text: "Learn about Time to Interactive and how it impacts the overall performance.", - links: [ - ["web.dev - Total Blocking Time", "https://web.dev/lighthouse-total-blocking-time/"], - ["Google Devs - Time to Interactive", "https://developers.google.com/web/tools/lighthouse/audits/time-to-interactive"], - ] - }, - }, - ] + } }, { - name: "Lazy Loading", + name: "정보검색", description: { text: "Learn how to use lazy loading to lower the initial page payload and load time.", links: [ @@ -223,66 +194,40 @@ export const pwaCollection = { ["Addy Osmani - Lazy Loading Images", "https://addyosmani.com/blog/lazy-loading/"], ["web.dev - Native lazy-loading for the web", "https://web.dev/native-lazy-loading/"] ] - }, - skills: [ - { - name: "Dynamic Import", - description: { - text: "Learn how to use dynamic import to lazy load javascript.", - links: [ - ["V8 - Dynamic import()", "https://v8.dev/features/dynamic-import"], - ["JavaScript dynamic import() & export", "https://medium.com/@WebReflection/javascript-dynamic-import-export-b0e8775a59d4"], - ["MDN - Dynamic Import", "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/import#Dynamic_Imports"], - ["TC39 - proposal-dynamic-import", "https://github.com/tc39/proposal-dynamic-import"] - ] - }, - }, - { - name: "Offscreen images", - description: { - text: "Learn why offscreen images increase the load time and how to avoid them by lazy loading images.", - links: [ - ["web.dev - Defer offscreen images", "https://web.dev/offscreen-images/"], - ["Google Devs - Properly Size Images", "https://developers.google.com/web/tools/lighthouse/audits/oversized-images"], - ["web.dev - Native lazy-loading for the web", "https://web.dev/native-lazy-loading"], - ["Addy Osmani - Native image lazy-loading for the web!", "https://addyosmani.com/blog/lazy-loading/"], - ] - }, - }, - ] + } }, { - name: "Critical Request Chains", + name: "창업산학초청세미나II", description: { text: "Learn about the critical request chains and how to find them in your web app.", links: [ ["Google Devs - Critical Request Chains", "https://developers.google.com/web/tools/lighthouse/audits/critical-request-chains"], ["web.dev - Minimize critical requests depth", "https://web.dev/critical-request-chains"] ] - }, + } }, { - name: "Tree shaking", + name: "정보,컴퓨터논리 및 논술", description: { text: "Learn how to use tree shaking to eliminate dead code.", links: [ ["Google Devs - Reduce JavaScript Payloads", "https://developers.google.com/web/fundamentals/performance/optimizing-javascript/tree-shaking"], ["How to Clean Up Your JavaScript", "https://www.keycdn.com/blog/tree-shaking"], ] - }, + } }, { - name: "Codesplitting", + name: "정보,컴퓨터교육론", description: { text: "Learn about codesplitting an how dividing your code into multiple chunks makes your web app faster.", links: [ ["Google Devs - Reduce JavaScript Payloads", "https://developers.google.com/web/fundamentals/performance/optimizing-javascript/code-splitting"], ["All you need to know about JavaScript code splitting", "https://www.creativebloq.com/how-to/all-you-need-to-know-about-javascript-code-splitting"] ] - }, + } }, { - name: "PRPL Pattern", + name: "자연언어 처리", description: { text: "Learn how to use the PRPL pattern to make web apps more performant.", links: [ @@ -291,10 +236,10 @@ export const pwaCollection = { ["Ben Schwarz - Real world performance", "https://building.calibreapp.com/beyond-the-bubble-real-world-performance-9c991dcd5342?gi=76804aa8f46e"], ["The Cost of Javascript", "https://medium.com/@addyosmani/the-cost-of-javascript-in-2018-7d8950fbb5d4"], ] - }, + } }, { - name: "Resource Prioritization", + name: "빅데이터분석시각화", description: { text: "Learn about resource prioritization and how to inform the browser about the importance of a resource.", links: [ @@ -304,375 +249,19 @@ export const pwaCollection = { ["web.dev - Preconnect to required origins", "https://web.dev/uses-rel-preconnect/"], ["Preload, prefetch and other tags", "https://3perf.com/blog/link-rels/"] ] - }, + } }, { - name: "Caching", + name: "클라우드컴퓨팅", description: { text: "Learn about caching and how it can be uses to make web apps load faster.", links: [ ["Google Devs - HTTP Caching", "https://developers.google.com/web/fundamentals/performance/get-started/httpcaching-6"], ["MDN - HTTP caching", "https://developer.mozilla.org/en-US/docs/Web/HTTP/Caching"] ] - }, - }, - ] - }, - { - name: "Rendering Performance", - skills: [ - { - name: "Rendering", - description: { - text: "Learn about rendering, how a page is rendered and why it is important to keep your web app interactive and smooth running.", - links: [ - ["Google Devs - Constructing the Object Model", "https://developers.google.com/web/fundamentals/performance/critical-rendering-path/constructing-the-object-model"], - ["Google Devs - Rendering Performance", "https://developers.google.com/web/fundamentals/performance/rendering"], - ["Google Devs - Render-tree Construction", "https://developers.google.com/web/fundamentals/performance/critical-rendering-path/render-tree-construction"], - ["Google Devs - Render Blocking CSS", "https://developers.google.com/web/fundamentals/performance/critical-rendering-path/render-blocking-css"] - ] - }, - }, - { - name: "Event loop", - description: { - text: "Learn about the event loop and how Javascript simulate like it’s running our commands in a multi-thread environment.", - links: [ - ["Youtube - Jake Archibald: In The Loop", "https://youtu.be/cCOL7MC4Pl0"], - ["Understanding JavaScript", "https://medium.com/@muratcatal/understanding-javascript-heap-stack-event-loops-and-callback-queue-6fdec3cfe32e"], - ["JavaScript Event Loop Explained", "https://medium.com/front-end-weekly/javascript-event-loop-explained-4cd26af121d4"], - ["Youtube - What the heck is the event loop anyway?", "https://www.youtube.com/watch?v=8aGhZQkoFbQ"], - ["The JavaScript Event Loop", "https://flaviocopes.com/javascript-event-loop/"], - ["dev.to - JavaScript Visualized: Event Loop", "https://dev.to/lydiahallie/javascript-visualized-event-loop-3dif"], - ] - }, - skills: [ - { - name: "Microtask", - description: { - text: "Learn about microtasks and the microtask queue.", - links: [ - ["Tasks, microtasks, queues and schedules", "https://jakearchibald.com/2015/tasks-microtasks-queues-and-schedules/"], - ["MDN - Using microtasks in JavaScript", "https://developer.mozilla.org/en-US/docs/Web/API/HTML_DOM_API/Microtask_guide"], - ["javascript.info - Microtasks and macrotasks", "https://javascript.info/event-loop"], - ["javascript.info - Microtasks", "https://javascript.info/microtask-queue"], - ] - }, - }, - { - name: "Stack", - description: { - text: "Learn about the stack and how to investigate the staack trace when debugging.", - links: [ - ["Javascript Stack Trade - Using it to debug", "https://www.scalyr.com/blog/javascript-stack-trace-understanding-it-and-using-it-to-debug/"], - ["MDN - console.trace()", "https://developer.mozilla.org/en-US/docs/Web/API/Console/trace"], - ["V8 - Stack trace API", "https://v8.dev/docs/stack-trace-api"], - ["Confused about Stack and Heap?", "https://medium.com/fhinkel/confused-about-stack-and-heap-2cf3e6adb771"], - ] - }, - }, - { - name: "Heap", - description: { - text: "Learn about the heap and how to investigate the heap snapshots when debugging.", - links: [ - ["Google Devs - Memory Problems", "https://developers.google.com/web/tools/chrome-devtools/memory-problems/"], - ["Google Devs - Memory Terminology", "https://developers.google.com/web/tools/chrome-devtools/memory-problems/memory-101"], - ["Google Devs - How to Record Heap Snapshots", "https://developers.google.com/web/tools/chrome-devtools/memory-problems/heap-snapshots"], - ["Confused about Stack and Heap?", "https://medium.com/fhinkel/confused-about-stack-and-heap-2cf3e6adb771"], - ["Google Devs - How to Use the Allocation Profiler Tool", "https://developers.google.com/web/tools/chrome-devtools/memory-problems/allocation-profiler"], - ] - }, - }, - ] - }, - { - name: "RAIL Model", - description: { - text: "Learn how to use the RAIL model to ensure a good user experience.", - links: [ - ["Google Devs - RAIL", "https://developers.google.com/web/fundamentals/performance/rail"], - ["Google Devs - Why Performance Matters", "https://developers.google.com/web/fundamentals/performance/why-performance-matters/"], - ["Google Devs - Get Started With Analyzing", "https://developers.google.com/web/tools/chrome-devtools/evaluate-performance/"], - ["Google Devs - Animations and Performance", "https://developers.google.com/web/fundamentals/design-and-ux/animations/animations-and-performance"], - ["Google Devs - CSS Versus JavaScript Animations", "https://developers.google.com/web/fundamentals/design-and-ux/animations/css-vs-javascript"], - ["Google Devs - Choosing the Right Easing", "https://developers.google.com/web/fundamentals/design-and-ux/animations/choosing-the-right-easing"], - ["Google Devs - Animating Modal Views", "https://developers.google.com/web/fundamentals/design-and-ux/animations/animating-modal-views"], - ["MDN - CSS and JavaScript animation performance", "https://developer.mozilla.org/en-US/docs/Web/Performance/CSS_JavaScript_animation_performance"], - ["MDN - Performance fundamentals", "https://developer.mozilla.org/en-US/docs/Web/Performance/Fundamentals"], - ["Youtube - Fast By Default", "https://www.youtube.com/watch?v=_srJ7eHS3IM"], - ] - }, - skills: [ - { - name: "requestAnimationFrame", - description: { - text: "Learn how to use the requestAnimationFrame API to create butter-smooth animations.", - links: [ - ["Google Devs - Optimize JavaScript Execution", "https://developers.google.com/web/fundamentals/performance/rendering/optimize-javascript-execution"], - ["MDN - requestAnimationFrame()", "https://developer.mozilla.org/en-US/docs/Web/API/window/requestAnimationFrame"] - ] - }, - }, - { - name: "requestIdleCallback", - description: { - text: "Learn how to use the requestIdleCallback to defer heavy tasks.", - links: [ - ["MDN - Background Tasks API", "https://developer.mozilla.org/en-US/docs/Web/API/Background_Tasks_API"], - ["Google Dev - requestIdleCallback", "https://developers.google.com/web/updates/2015/08/using-requestidlecallback?hl=en"], - ["MDN - requestIdleCallback()", "https://developer.mozilla.org/en-US/docs/Web/API/Window/requestIdleCallback"] - ] - } - } - ] - }, - { - name: "Critical Rendering Path", - description: { - text: "Learn about the critical rendering path and how to identify it.", - links: [ - ["Google Devs - Critical Rendering Path", "https://developers.google.com/web/fundamentals/performance/critical-rendering-path/"], - ["MDN - Critical Rendering Path", "https://developer.mozilla.org/en-US/docs/Web/Performance/Critical_rendering_path"], - ["Understanding the critical rendering path", "https://medium.com/@luisvieira_gmr/understanding-the-critical-rendering-path-rendering-pages-in-1-second-735c6e45b47a"] - ] - }, - }, - { - name: "The Pixel Pipeline", - description: { - text: "Learn about the five key points in the pixels-to-screen pipeline.", - links: [ - ["Google Devs - The pixel pipeline", "https://developers.google.com/web/fundamentals/performance/rendering#the_pixel_pipeline"], - ["Pixels are expensive", "https://aerotwist.com/blog/pixels-are-expensive/"], - ["Google Devs - The Applied Science of Runtime Performance", "https://www.youtube.com/watch?v=RCFQu0hK6bU"], - ["CSS Triggers", "https://csstriggers.com/"] - ] - }, - skills: [ - { - name: "Style calculations", - description: { - text: "Learn how to optimize your CSS to avoid heavy style calculations.", - links: [ - ["Google Devs - Style Calculations", "https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations"], - ] - }, - }, - { - name: "Transforms", - description: { - text: "Learn about transforms and how it is possible to avoid both layout and paint.", - links: [ - ["Google Devs - Use transform and opacity for animations", "https://developers.google.com/web/fundamentals/performance/rendering/stick-to-compositor-only-properties-and-manage-layer-count#use_transform_and_opacity_changes_for_animations"], - ["Achieving 60 FPS Animations with CSS3", "https://medium.com/outsystems-experts/how-to-achieve-60-fps-animations-with-css3-db7b98610108"], - ["HTML5 Rocks - High Performance Animations", "https://www.html5rocks.com/en/tutorials/speed/high-performance-animations/"], - ] - }, - }, - { - name: "Paint areas", - description: { - text: "Learn about paint areas and how it is possible to reduce them.", - links: [ - ["Google Devs - Paint Areas", "https://developers.google.com/web/fundamentals/performance/rendering/simplify-paint-complexity-and-reduce-paint-areas"], - ["CSS Tricks - Browser painting", "https://css-tricks.com/browser-painting-and-considerations-for-web-performance/"], - ["HTML5 Rocks - Avoiding Unnecessary Paints", "https://www.html5rocks.com/en/tutorials/speed/unnecessary-paints/"] - ] - }, - }, - { - name: "Layout Trashing", - description: { - text: "Learn about layout trashing and how to avoid it.", - links: [ - ["Google Devs - Layout Thrashing", "https://developers.google.com/web/fundamentals/performance/rendering/avoid-large-complex-layouts-and-layout-thrashing"], - ["Beware JavaScript Layout Thrashing!", "https://blog.idrsolutions.com/2014/08/beware-javascript-layout-thrashing/"], - ["Layout thrashing cheatsheet", "https://devhints.io/layout-thrashing"] - ] - }, - }, - { - name: "Layers", - description: { - text: "Learn about layers and how to promote an element to another layer.", - links: [ - ["Google Devs - Manage Layer Count", "https://developers.google.com/web/fundamentals/performance/rendering/stick-to-compositor-only-properties-and-manage-layer-count"], - ["HTML5 Rocks - Accelerated Rendering in Chrome", "https://www.html5rocks.com/en/tutorials/speed/layers/"], - ["Layers and how to force them", "https://dassur.ma/things/forcing-layers/"] - ] - }, - }, - { - name: "Debounce", - description: { - text: "Learn how to debounce computationally expensive code to avoid blocking the UI.", - links: [ - ["Google Devs - Debounce Your Input Handlers", "https://developers.google.com/web/fundamentals/performance/rendering/debounce-your-input-handlers"], - ["What is Debouncing?", "https://medium.com/@jamischarles/what-is-debouncing-2505c0648ff1"], - ["Level Up - Debounce in JavaScript", "https://levelup.gitconnected.com/debounce-in-javascript-improve-your-applications-performance-5b01855e086"] - ] - }, - } - ], - }, - { - name: "CSS Containment", - description: { - text: "Learn how to use CSS containment to improve the performance of your web app.", - links: [ - ["Google Devs - CSS Containment", "https://developers.google.com/web/updates/2016/06/css-containment"], - ["W3C - CSS Containment Module", "https://www.w3.org/TR/css-contain-1/"], - ["An introduction to CSS Containment", "https://blogs.igalia.com/mrego/2019/01/11/an-introduction-to-css-containment/"], - ["MDN - Contain", "https://developer.mozilla.org/en-US/docs/Web/CSS/contain"], - ["CSS Tricks - CSS containment", "https://css-tricks.com/css-containment/"], - ] - }, - }, - { - name: "Web Workers", - description: { - text: "Learn how to use web workers to run a script operation in a background thread separate from the main execution thread.", - links: [ - ["MDN - Web Workers API", "https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API"], - ["HTML5 Rocks - The Basics of Web Workers", "https://www.html5rocks.com/en/tutorials/workers/basics/"], - ["When should you be using Web Workers?", "https://dassur.ma/things/when-workers/"] - ] } } - ], - }, - { - name: "Security", - skills: [ - { - name: "HTTPS", - description: { - text: "Learn about HTTPS and why a website should always be protected with HTTPS.", - links: [ - ["Google Devs - Why HTTPS Matters", "https://developers.google.com/web/fundamentals/security/encrypt-in-transit/why-https"], - ["Google Devs - Enabling HTTPS on Your Servers", "https://developers.google.com/web/fundamentals/security/encrypt-in-transit/enable-https"], - ["Google Devs - Mixed Content", "https://developers.google.com/web/fundamentals/security/prevent-mixed-content/what-is-mixed-content"], - ["Youtube - Stories from the field", "https://www.youtube.com/watch?v=GoXgl9r0Kjk"] - ] - } - }, - { - name: "Browser Sandbox", - description: { - text: "Learn about the sandbox security mechanism and how it restricts the execution environment.", - links: [ - ["web.dev - Browser sandbox", "https://web.dev/browser-sandbox/"], - ["Wikipedia - Sandbox (computer security)", "https://en.wikipedia.org/wiki/Sandbox_(computer_security)"], - ["Howtogeek - Sandboxes Explained", "https://www.howtogeek.com/169139/sandboxes-explained-how-theyre-already-protecting-you-and-how-to-sandbox-any-program/"] - ] - }, - }, - { - name: "OWASP", - description: { - text: "Learn about the OWASP organization and how they help with web application security.", - links: [ - ["Wikipedia - OWASP", "https://en.wikipedia.org/wiki/OWASP"], - ["OWASP - About", "https://www.owasp.org/index.php/About_The_Open_Web_Application_Security_Project"], - ["OWASP - OWASP Top 10", "https://www.owasp.org/images/7/72/OWASP_Top_10-2017_%28en%29.pdf.pdf"], - ["OWASP - Cheatsheets", "https://cheatsheetseries.owasp.org/"], - ["Youtube - OWASP", "https://www.youtube.com/user/OWASPGLOBAL"], - ["OWASP Top 10 Security Risks", "https://blog.sucuri.net/2018/10/owasp-top-10-security-risks-part-i.html"], - ["Wikipedia - Web application security", "https://en.wikipedia.org/wiki/Web_application_security"], - ] - }, - skills: [ - { - name: "Cross-Site Scripting", - description: { - text: "Learn about cross-site scripting and how it is possible mitigate these kind of attacks.", - links: [ - ["MDN - Cross-site scripting", "https://developer.mozilla.org/en-US/docs/Glossary/Cross-site_scripting"], - ["OWASP - Cross-site Scripting (XSS)", "https://www.owasp.org/index.php/Cross-site_Scripting_(XSS)"], - ["OWASP - XSS Cheatsheet", "https://cheatsheetseries.owasp.org/cheatsheets/Cross_Site_Scripting_Prevention_Cheat_Sheet.html"], - ["Excess XSS", "https://excess-xss.com/"] - ] - }, - }, - { - name: "Clickjacking", - description: { - text: "Learn about clickjacking and how it is possible to mitigate these kind of attacks.", - links: [ - ["OWASP - Clickjacking", "https://www.owasp.org/index.php/Clickjacking"], - ["Wikipedia - Clickjacking", "https://en.wikipedia.org/wiki/Clickjacking"], - ["web.dev - Same-origin policy", "https://web.dev/same-origin-policy/#how-to-prevent-clickjacking"], - ["OWASP - Clickjacking Cheatsheet", "https://cheatsheetseries.owasp.org/cheatsheets/Clickjacking_Defense_Cheat_Sheet.html"] - ] - }, - }, - ] - }, - { - name: "Content Security Policy", - description: { - text: "Learn about content security policy and how it can help to detect and mitigate certain types of attacks.", - links: [ - ["MDN - Content Security Policy (CSP)", "https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP"], - ["Google Devs - CSP", "https://developers.google.com/web/fundamentals/security/csp"] - ] - } - }, ] - }, - { - name: "Audits", - description: { - text: "Learn how to do an audit to check the health of your web app.", - links: [ - ["Google Devs - Auditing Performance", "https://developers.google.com/web/fundamentals/performance/audit"], - ["web.dev - Performance audits", "https://web.dev/lighthouse-performance"], - ["Google Devs - Prework", "https://developers.google.com/web/fundamentals/performance/audit/prework"], - ["Google Devs - Check site security", "https://developers.google.com/web/fundamentals/performance/audit/security"], - ["Google Devs - Use tools to measure performance", "https://developers.google.com/web/fundamentals/performance/audit/tools"], - ["Google Devs - Find and Fix Web App Performance Issues", "https://developers.google.com/web/fundamentals/codelabs/web-perf/"], - ["web.dev - Measure", "https://web.dev/measure/"], - ["Google Devs - How To Think About Speed Tools", "https://developers.google.com/web/fundamentals/performance/speed-tools/"], - ["web.dev - PWA audits", "https://web.dev/lighthouse-pwa"], - ["web.dev - Best Practices audits", "https://web.dev/lighthouse-best-practices"] - ] - }, - skills: [ - { - name: "Performance budgets", - description: { - text: "Learn about performance budgets and how you can create one for your web app.", - links: [ - ["web.dev - Performance Budgets", "https://web.dev/performance-budgets-101"], - ["Google Devs - Performance Budget", "https://developers.google.com/web/tools/lighthouse/audits/budgets"], - ["Addy Osmani - Start Performance Budgeting", "https://addyosmani.com/blog/performance-budgets/"] - ] - }, - }, - { - name: "Lighthouse", - description: { - text: "Learn about lighthouse and how it can be used to audit your web app.", - links: [ - ["Google Devs - Lighthouse", "https://developers.google.com/web/tools/lighthouse/"], - ["Youtube - Staying off the Rocks", "https://www.youtube.com/watch?v=NoRYn6gOtVo"], - ["web.dev - Measure", "https://web.dev/measure"] - ] - }, - }, - { - name: "Chrome DevTools", - description: { - text: "Learn about the Chrome DevTools and how it can be used to audit your web app.", - links: [ - ["Google Devs - Chrome DevTools", "https://developers.google.com/web/tools/chrome-devtools"], - ["Google Devs - Inspect animations", "https://developers.google.com/web/tools/chrome-devtools/inspect-styles/animations"], - ["Investigate animation performance with DevTools", "https://calibreapp.com/blog/investigate-animation-performance-with-devtools/"], - ] - }, - } - ] - }, + } ] } diff --git a/src/data/web-components.js b/src/data/web-components.js index 97097d5..0924db0 100644 --- a/src/data/web-components.js +++ b/src/data/web-components.js @@ -1,118 +1,165 @@ export const webcomponentsCollection = { - name: "Web Components", + name: "3학년", areas: [ { + name: "1학기", skills: [ { - name: "Custom Elements", + name: "운영체제", description: { - text: "Learn how to create new HTML tags with Custom Elements.", + text: "운영체제", links: [ - ["Google Devs - Custom Elements", "https://developers.google.com/web/fundamentals/web-components/customelements"], - ["MDN - Using Custom Elements", "https://developer.mozilla.org/en-US/docs/Web/Web_Components/Using_custom_elements"], - ["CSS Tricks - Creating a Custom Element from Scratch", "https://css-tricks.com/creating-a-custom-element-from-scratch/"], - ["Javascript.info - Custom Elements", "https://javascript.info/custom-elements"], - ["dev.to - An introduction to Custom Elements", "https://dev.to/jamesrweb/an-introduction-to-custom-elements-5327"], - ["itnext - Introduction to Web Components", "https://itnext.io/introduction-to-web-components-part-i-custom-elements-4de6713cef9d"], - ["web.dev - Web Components", "https://web.dev/web-components-io-2019/"] + ["이수 구분 : 전필", ""], + ["교과목 번호 : 5111001", ""], + ["학점 : 3-3-0", ""], + ] + }, + + }, + { + name: "객채지향 설계", + description: { + text: "Exploration of Future Planning", + links: [ + ["이수구분 : 전선", ""], + ["교과목 번호 : 5111081", ""], + ["학점 : 1-0-2", ""], ] } }, { - name: "HTML Templates", + name: "오픈소스 웹소프트웨어", description: { - text: "Learn how to use HTML templates to create flexible templates that can then be used to populate the Shadow DOM.", + text: "Learn how to make your content search-friendly.", links: [ - ["MDN - Using Templates & Slots", "https://developer.mozilla.org/en-US/docs/Web/Web_Components/Using_templates_and_slots"], - ["Javascript.info - Template Element", "https://javascript.info/template-element"], - ["MDN - The Content Template element", "https://developer.mozilla.org/en-US/docs/Web/HTML/Element/template"] + ["web.dev - Discoverable", "https://web.dev/discoverable"], + ["Google Search - Get Started", "https://developers.google.com/search/docs/guides/get-started"], + ["Google Search - SEO basics", "https://developers.google.com/search/docs/guides/javascript-seo-basics"], + ["web.dev - SEO audits", "https://web.dev/lighthouse-seo"] ] }, }, { - name: "Shadow DOM", + name: "컴파일러", description: { - text: "Learn how to encapsulate your CSS using Shadow DOM.", + text: "Learn how to work with SVG files to make graphics look crisp across all screen resolutions.", links: [ - ["Google Devs - Shadow DOM", "https://developers.google.com/web/fundamentals/web-components/shadowdom"], - ["MDN - Using Shadow DOM", "https://developer.mozilla.org/en-US/docs/Web/Web_Components/Using_shadow_DOM"], - ["MDN - Shadow Tree", "https://developer.mozilla.org/en-US/docs/Glossary/Shadow_tree"], - ["CSS Tricks - Encapsulating Style and Structure", "https://css-tricks.com/encapsulating-style-and-structure-with-shadow-dom/"], - ["itnext - Introduction to Web Components", "https://itnext.io/introduction-to-web-components-part-ii-shadow-dom-8d1d8e126332"], - ["Monica - Shadow DOM: fast and encapsulated styles", "https://meowni.ca/posts/shadow-dom/"] + ["MDN - Adding vector graphics to the Web", "https://developer.mozilla.org/en-US/docs/Learn/HTML/Multimedia_and_embedding/Adding_vector_graphics_to_the_Web"], + ["SVG on the web", "https://svgontheweb.com/"], + ] + } + }, + { + name: "컴퓨터네트워크", + description: { + text: "Learn the best practices of writing HTML.", + links: [ + ["MDN - HTML guidelines", "https://developer.mozilla.org/en-US/docs/MDN/Contribute/Guidelines/Code_guidelines/HTML"], + ["W3Schools - HTML Coding Conventions", "https://www.w3schools.com/html/html5_syntax.asp"] + ] + } + }, + { + name: "창업기획", + description: { + text: "Learn the best practices of writing HTML.", + links: [ + ["MDN - HTML guidelines", "https://developer.mozilla.org/en-US/docs/MDN/Contribute/Guidelines/Code_guidelines/HTML"], + ["W3Schools - HTML Coding Conventions", "https://www.w3schools.com/html/html5_syntax.asp"] + ] + } + }, + { + name: "오픈소스 전문프로젝트", + description: { + text: "Learn the best practices of writing HTML.", + links: [ + ["MDN - HTML guidelines", "https://developer.mozilla.org/en-US/docs/MDN/Contribute/Guidelines/Code_guidelines/HTML"], + ["W3Schools - HTML Coding Conventions", "https://www.w3schools.com/html/html5_syntax.asp"] + ] + } + } + ] + }, + { + name: "2학기", + skills: [ + { + name: "소프트웨어공학", + description: { + text: "Introduction to Computer Systems", + links: [ + ["이수 구분 : 전필", ""], + ["교과목 번호 : 5111002", ""], + ["학점 : 3-3-0", ""], + ] + } + }, + { + name: "산학프로젝트", + description: { + text: "Introduction to Open Source SW", + links: [ + ["이수 구분 : 전필", ""], + ["교과목 번호 : 5111080", ""], + ["학점 : 2-1-2", ""], + ] + }, + }, + { + name: "펌웨어프로그래밍", + description: { + text: "Learn what the CSS box model means.", + links: [ + ["MDN - Introduction to the CSS basic box model", "https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Box_Model/Introduction_to_the_CSS_box_model"], + ["MDN - The box model", "https://developer.mozilla.org/en-US/docs/Learn/CSS/Building_blocks/The_box_model"], + ["CSS Tricks - Inheriting box-sizing", "https://css-tricks.com/inheriting-box-sizing-probably-slightly-better-best-practice/"], ] }, - skills: [ - { - name: "Shadow Parts", - description: { - text: "Learn how to style the inside of a shadow tree from outside of that Shadow Tree by using Shadow Parts.", - links: [ - ["Fergald - CSS Shadow ::part and ::theme", "https://github.com/fergald/docs/blob/master/explainers/css-shadow-parts-1.md"], - ["MDN - ::part", "https://developer.mozilla.org/en-US/docs/Web/CSS/::part"], - ["W3C - CSS Shadow Parts", "https://www.w3.org/TR/css-shadow-parts-1/"], - ["Monica - ::part and ::theme, an explainer", "https://meowni.ca/posts/part-theme-explainer/"], - ["Youtube - CSS Shadow Parts", "https://www.youtube.com/watch?v=yVrvOueeb3s"], - ["Chrome Status - ::part and ::theme", "https://www.chromestatus.com/features/5763933658939392"] - ] - } - }, - { - name: "Slots", - description: { - text: "Learn how to compose Custom Elements by using slots.", - links: [ - ["Alligator.io - Composing Custom Elements", "https://alligator.io/web-components/composing-slots-named-slots/"], - ["Javascript.info - Slots Composition", "https://javascript.info/slots-composition"], - ["MDN - HTML element", "https://developer.mozilla.org/en-US/docs/Web/HTML/Element/slot"], - ["Component.kitchen - A history of the HTML slot element", "https://component.kitchen/blog/posts/a-history-of-the-html-slot-element"], - ] - } - } - ] + + }, + { + name: "창업설계", + description: { + text: "Learn the best practices of writing HTML.", + links: [ + ["MDN - HTML guidelines", "https://developer.mozilla.org/en-US/docs/MDN/Contribute/Guidelines/Code_guidelines/HTML"], + ["W3Schools - HTML Coding Conventions", "https://www.w3schools.com/html/html5_syntax.asp"] + ] + } }, { - name: "Best practices", + name: "정보보호", description: { - text: "Get familiar with best practices when it comes to building Web Components.", + text: "Learn the best practices of writing HTML.", links: [ - ["Google Devs - Custom Element Best Practices", "https://developers.google.com/web/fundamentals/web-components/best-practices"], - ["Webcomponents.org - Web Components Best Practices", "https://www.webcomponents.org/community/articles/web-components-best-practices"], - ["mateusortiz - Web Components the Right Way", "https://github.com/mateusortiz/webcomponents-the-right-way"], - ["dev.to - Making Web Components for Different Contexts", "https://dev.to/equinusocio/making-web-components-for-different-contexts-25ed"] + ["MDN - HTML guidelines", "https://developer.mozilla.org/en-US/docs/MDN/Contribute/Guidelines/Code_guidelines/HTML"], + ["W3Schools - HTML Coding Conventions", "https://www.w3schools.com/html/html5_syntax.asp"] ] } }, { - name: "Constructible Stylesheets", + name: "인공지능", description: { - text: "Learn how the Constructible Stylesheets proposal enables reusable styles when using shadow dom.", + text: "Learn the best practices of writing HTML.", links: [ - ["Google Devs - Constructable Stylesheets", "https://developers.google.com/web/updates/2019/02/constructable-stylesheets"], - ["W3C - Constructable Stylesheet Objects", "https://wicg.github.io/construct-stylesheets/"], - ["dev.to - Why Would Anyone Use Constructible Stylesheets", "https://dev.to/westbrook/why-would-anyone-use-constructible-stylesheets-anyways-19ng"], - ["Benjamin Farrel - Adopt a Design System", "https://medium.com/swlh/adopt-a-design-system-inside-your-web-components-with-constructable-stylesheets-dd24649261e"], - ["WICG - Constructable Stylesheet Objects", "https://github.com/WICG/construct-stylesheets/blob/gh-pages/explainer.md"], - ["Chrome Status - Constructible Stylesheets", "https://www.chromestatus.com/feature/5394843094220800"] + ["MDN - HTML guidelines", "https://developer.mozilla.org/en-US/docs/MDN/Contribute/Guidelines/Code_guidelines/HTML"], + ["W3Schools - HTML Coding Conventions", "https://www.w3schools.com/html/html5_syntax.asp"] ] } }, { - name: "Form Participation", + name: "데이터베이스시스템", description: { - text: "Learn how the Form Participation API proposal enables elements, other than built-in form control elements, to participate in form submission and validation.", + text: "Learn the best practices of writing HTML.", links: [ - ["Form Participation API Explained", "https://docs.google.com/document/d/1JO8puctCSpW-ZYGU8lF-h4FWRIDQNDVexzHoOQ2iQmY/edit"], - ["Chrome Status - Form-associated custom elements", "https://www.chromestatus.com/features/4708990554472448"], - ["web-platform-tests - Form Participation", "https://github.com/web-platform-tests/wpt/tree/master/custom-elements/form-associated"], - ["Google Devs - Form-associated custom elements", "https://developers.google.com/web/updates/2019/09/nic77#form-associated_custom_elements"], - ["web.dev - More capable form controls", "https://web.dev/more-capable-form-controls/"], - ["W3C - Creating a form-associated custom element", "https://html.spec.whatwg.org/multipage/custom-elements.html#custom-elements-face-example"], + ["MDN - HTML guidelines", "https://developer.mozilla.org/en-US/docs/MDN/Contribute/Guidelines/Code_guidelines/HTML"], + ["W3Schools - HTML Coding Conventions", "https://www.w3schools.com/html/html5_syntax.asp"] ] } } ] } ] -} \ No newline at end of file +} diff --git a/sw.js b/sw.js index 342cd0f..7d91ce7 100644 --- a/sw.js +++ b/sw.js @@ -4,7 +4,7 @@ const CACHE_NAME = `${APP_PREFIX}-v${SW_VERSION}`; const DEBUG = false; const URLS_TO_CACHE = [ "", - "index.html", + "index.1학기", "src/app.js", "src/config.js", "src/data.js", @@ -33,14 +33,14 @@ const URLS_TO_CACHE = [ "src/data/databases.js", "src/data/design-and-ux.js", "src/data/frameworks-and-libraries.js", - "src/data/fundamentals.js", + "src/data/1학년.js", "src/data/modern.js", "src/data/pwa.js", "src/data/team-collaboration.js", "src/data/testing.js", "src/data/web-components.js", "src/styles/shared.js", - "src/styles/global.css", + "src/styles/global.2학기", "web_modules/web-dialog.js" ]; diff --git a/web_modules/common/lit-html-6bb77aec.js b/web_modules/common/lit-html-6bb77aec.js index 634e47f..6315cfc 100644 --- a/web_modules/common/lit-html-6bb77aec.js +++ b/web_modules/common/lit-html-6bb77aec.js @@ -105,4 +105,4 @@ class{handleAttributeExpressions(t,e,s,n){const i=e[0];if("."===i){return new E( * subject to an additional IP rights grant found at * http://polymer.github.io/PATENTS.txt */"undefined"!=typeof window&&(window.litHtmlVersions||(window.litHtmlVersions=[])).push("1.2.1");const I=(t,...e)=>new f(t,e,"html",P),B=(t,...e)=>new x(t,e,"svg",P);export{b as N,r as T,g as a,s as b,h as c,u as d,e,I as h,l as i,n as m,H as p,k as r,B as s,L as t}; -//# sourceMappingURL=lit-html-6bb77aec.js.map +//# sourceMappingURL=lit-1학기-6bb77aec.js.map diff --git a/web_modules/firebase/auth/dist/index.esm.js b/web_modules/firebase/auth/dist/index.esm.js index 3f19d19..27419b1 100644 --- a/web_modules/firebase/auth/dist/index.esm.js +++ b/web_modules/firebase/auth/dist/index.esm.js @@ -1,2 +1,2 @@ -import{t}from"../../../common/index.esm-7362d277.js";(function(){var n,e="function"==typeof Object.defineProperties?Object.defineProperty:function(t,n,e){t!=Array.prototype&&t!=Object.prototype&&(t[n]=e.value)};var i=function(t){t=["object"==typeof window&&window,"object"==typeof self&&self,"object"==typeof global&&global,t];for(var n=0;n>>0),m=0;function g(t,n,e){return t.call.apply(t.bind,arguments)}function b(t,n,e){if(!t)throw Error();if(2t.b&&(t.b++,n.next=t.a,t.a=n)}function x(){this.b=this.a=null}k=O("__EID__")?"__EID__":void 0,T(P,Error),P.prototype.name="CustomError",T(C,P),C.prototype.name="AssertionError",L.prototype.get=function(){if(0/g,nt=/"/g,et=/'/g,it=/\x00/g,rt=/[\x00&<>"']/;function ot(t,n){return-1!=t.indexOf(n)}function at(t,n){return tn?1:0}t:{var st=s.navigator;if(st){var ut=st.userAgent;if(ut){z=ut;break t}}z=""}function ct(t){return ot(z,t)}function ht(t,n){for(var e in t)n.call(void 0,t[e],e,t)}function lt(t){for(var n in t)return!1;return!0}function ft(t){var n,e={};for(n in t)e[n]=t[n];return e}var dt="constructor hasOwnProperty isPrototypeOf propertyIsEnumerable toLocaleString toString valueOf".split(" ");function pt(t,n){for(var e,i,r=1;r"}else o=void 0===t?"undefined":null===t?"null":typeof t;D("Argument is not a %s (or a non-Element, non-Location mock); got: %s",n,o)}}function mt(t,n){this.a=t===yt&&n||"",this.b=bt}function gt(t){return t instanceof mt&&t.constructor===mt&&t.b===bt?t.a:(D("expected object of type Const, got '"+t+"'"),"type_error:Const")}mt.prototype.ra=!0,mt.prototype.qa=function(){return this.a},mt.prototype.toString=function(){return"Const{"+this.a+"}"};var bt={},yt={},wt=new mt(yt,"");function It(t,n){this.a=t===Nt&&n||"",this.b=St}function Tt(t){return t instanceof It&&t.constructor===It&&t.b===St?t.a:(D("expected object of type TrustedResourceUrl, got '"+t+"' of type "+l(t)),"type_error:TrustedResourceUrl")}function Et(t,n){var e=gt(t);if(!kt.test(e))throw Error("Invalid TrustedResourceUrl format: "+e);return t=e.replace(At,(function(t,i){if(!Object.prototype.hasOwnProperty.call(n,i))throw Error('Found marker, "'+i+'", in format string, "'+e+'", but no valid label mapping found in args: '+JSON.stringify(n));return(t=n[i])instanceof mt?gt(t):encodeURIComponent(String(t))})),new It(Nt,t)}It.prototype.ra=!0,It.prototype.qa=function(){return this.a.toString()},It.prototype.toString=function(){return"TrustedResourceUrl{"+this.a+"}"};var At=/%{(\w+)}/g,kt=/^((https:)?\/\/[0-9a-z.:[\]-]+\/|\/[^/\\]|[^:/\\%]+\/|[^:/\\%]*[?#]|about:blank#)/i,St={},Nt={};function _t(t,n){this.a=t===Dt&&n||"",this.b=Ct}function Ot(t){return t instanceof _t&&t.constructor===_t&&t.b===Ct?t.a:(D("expected object of type SafeUrl, got '"+t+"' of type "+l(t)),"type_error:SafeUrl")}_t.prototype.ra=!0,_t.prototype.qa=function(){return this.a.toString()},_t.prototype.toString=function(){return"SafeUrl{"+this.a+"}"};var Rt=/^(?:(?:https?|mailto|ftp):|[^:/?#]*(?:[/?#]|$))/i;function Pt(t){return t instanceof _t?t:(t="object"==typeof t&&t.ra?t.qa():String(t),Rt.test(t)||(t="about:invalid#zClosurez"),new _t(Dt,t))}var Ct={},Dt={};function Lt(){this.a="",this.b=xt}function Mt(t){return t instanceof Lt&&t.constructor===Lt&&t.b===xt?t.a:(D("expected object of type SafeHtml, got '"+t+"' of type "+l(t)),"type_error:SafeHtml")}Lt.prototype.ra=!0,Lt.prototype.qa=function(){return this.a.toString()},Lt.prototype.toString=function(){return"SafeHtml{"+this.a+"}"};var xt={};function jt(t){var n=new Lt;return n.a=t,n}jt("");var Ut=jt("");function Vt(t,n){for(var e=t.split("%s"),i="",r=Array.prototype.slice.call(arguments,1);r.length&&1")&&(t=t.replace(tt,">")),-1!=t.indexOf('"')&&(t=t.replace(nt,""")),-1!=t.indexOf("'")&&(t=t.replace(et,"'")),-1!=t.indexOf("\0")&&(t=t.replace(it,"�"))),t}function qt(t){return qt[" "](t),t}jt("
"),qt[" "]=h;var Kt,Ht,Gt=ct("Opera"),Bt=ct("Trident")||ct("MSIE"),Wt=ct("Edge"),Xt=Wt||Bt,Jt=ct("Gecko")&&!(ot(z.toLowerCase(),"webkit")&&!ct("Edge"))&&!(ct("Trident")||ct("MSIE"))&&!ct("Edge"),Yt=ot(z.toLowerCase(),"webkit")&&!ct("Edge");function zt(){var t=s.document;return t?t.documentMode:void 0}t:{var $t="",Zt=(Ht=z,Jt?/rv:([^\);]+)(\)|;)/.exec(Ht):Wt?/Edge\/([\d\.]+)/.exec(Ht):Bt?/\b(?:MSIE|rv)[: ]([^\);]+)(\)|;)/.exec(Ht):Yt?/WebKit\/(\S+)/.exec(Ht):Gt?/(?:Version)[ \/]?(\S+)/.exec(Ht):void 0);if(Zt&&($t=Zt?Zt[1]:""),Bt){var Qt=zt();if(null!=Qt&&Qt>parseFloat($t)){Kt=String(Qt);break t}}Kt=$t}var tn,nn={};function en(t){return function(t,n){var e=nn;return Object.prototype.hasOwnProperty.call(e,t)?e[t]:e[t]=n(t)}(t,(function(){for(var n=0,e=$(String(Kt)).split("."),i=$(String(t)).split("."),r=Math.max(e.length,i.length),o=0;0==n&&o=t.keyCode)&&(t.keyCode=-1)}catch(t){}},Xn.prototype.f=function(){return this.a};var Yn="closure_listenable_"+(1e6*Math.random()|0),zn=0;function $n(t,n,e,i,r){this.listener=t,this.proxy=null,this.src=n,this.type=e,this.capture=!!i,this.Ta=r,this.key=++zn,this.ua=this.Na=!1}function Zn(t){t.ua=!0,t.listener=null,t.proxy=null,t.src=null,t.Ta=null}function Qn(t){this.src=t,this.a={},this.b=0}function te(t,n){var e=n.type;e in t.a&&W(t.a[e],n)&&(Zn(n),0==t.a[e].length&&(delete t.a[e],t.b--))}function ne(t,n,e,i){for(var r=0;ri.keyCode||null!=i.returnValue)){t:{var r=!1;if(0==i.keyCode)try{i.keyCode=-1;break t}catch(t){r=!0}(r||null==i.returnValue)&&(i.returnValue=!0)}for(i=[],r=n.b;r;r=r.parentNode)i.push(r);for(t=t.type,r=i.length-1;0<=r;r--){n.b=i[r];var o=he(i[r],t,!0,n);e=e&&o}for(r=0;r>>0);function ve(t){return d(t)?t:(t[pe]||(t[pe]=function(n){return t.handleEvent(n)}),t[pe])}function me(){Fn.call(this),this.u=new Qn(this),this.Yb=this,this.eb=null}function ge(t,n,e,i,r){t.u.add(String(n),e,!1,i,r)}function be(t,n,e,i,r){t.u.add(String(n),e,!0,i,r)}function ye(t,n,e,i){if(!(n=t.u.a[String(n)]))return!0;n=n.concat();for(var r=!0,o=0;on)throw Error("Bad port number "+n);t.l=n}else t.l=null}function Pe(t,n,e){n instanceof Ge?(t.a=n,function(t,n){n&&!t.f&&(Be(t),t.c=null,t.a.forEach((function(t,n){var e=n.toLowerCase();n!=e&&(Xe(this,n),Ye(this,e,t))}),t)),t.f=n}(t.a,t.h)):(e||(n=je(n,Ke)),t.a=new Ge(n,t.h))}function Ce(t,n,e){t.a.set(n,e)}function De(t,n){return t.a.get(n)}function Le(t){return t instanceof _e?new _e(t):new _e(t,void 0)}function Me(t,n){var e=new _e(null,void 0);return Oe(e,"https"),t&&(e.b=t),n&&(e.c=n),e}function xe(t,n){return t?n?decodeURI(t.replace(/%25/g,"%2525")):decodeURIComponent(t):""}function je(t,n,e){return"string"==typeof t?(t=encodeURI(t).replace(n,Ue),e&&(t=t.replace(/%25([0-9a-fA-F]{2})/g,"%$1")),t):null}function Ue(t){return"%"+((t=t.charCodeAt(0))>>4&15).toString(16)+(15&t).toString(16)}_e.prototype.toString=function(){var t=[],n=this.f;n&&t.push(je(n,Ve,!0),":");var e=this.b;return(e||"file"==n)&&(t.push("//"),(n=this.i)&&t.push(je(n,Ve,!0),"@"),t.push(encodeURIComponent(String(e)).replace(/%25([0-9a-fA-F]{2})/g,"%$1")),null!=(e=this.l)&&t.push(":",String(e))),(e=this.c)&&(this.b&&"/"!=e.charAt(0)&&t.push("/"),t.push(je(e,"/"==e.charAt(0)?qe:Fe,!0))),(e=this.a.toString())&&t.push("?",e),(e=this.g)&&t.push("#",je(e,He)),t.join("")},_e.prototype.resolve=function(t){var n=new _e(this),e=!!t.f;e?Oe(n,t.f):e=!!t.i,e?n.i=t.i:e=!!t.b,e?n.b=t.b:e=null!=t.l;var i=t.c;if(e)Re(n,t.l);else if(e=!!t.c){if("/"!=i.charAt(0))if(this.b&&!this.c)i="/"+i;else{var r=n.c.lastIndexOf("/");-1!=r&&(i=n.c.substr(0,r+1)+i)}if(".."==(r=i)||"."==r)i="";else if(ot(r,"./")||ot(r,"/.")){i=0==r.lastIndexOf("/",0),r=r.split("/");for(var o=[],a=0;a2*t.c&&ke(t)))}function Je(t,n){return Be(t),n=$e(t,n),Se(t.a.b,n)}function Ye(t,n,e){Xe(t,n),0'),i=a.document)&&(i.write(Mt(t)),i.close())):(a=i.open(Ot(n),e,a))&&t.noopener&&(a.opener=null),a)try{a.focus()}catch(t){}return a}var ci=/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/,hi=/^[^@]+@[^@]+$/;function li(){var t=null;return new yn((function(n){"complete"==s.document.readyState?n():(t=function(){n()},ae(window,"load",t))})).o((function(n){throw se(window,"load",t),n}))}function fi(t){return t=t||Ti(),!("file:"!==Ni()&&"ionic:"!==Ni()||!t.toLowerCase().match(/iphone|ipad|ipod|android/))}function di(){var t=s.window;try{return!(!t||t==t.top)}catch(t){return!1}}function pi(){return void 0!==s.WorkerGlobalScope&&"function"==typeof s.importScripts}function vi(){return t.INTERNAL.hasOwnProperty("reactNative")?"ReactNative":t.INTERNAL.hasOwnProperty("node")?"Node":pi()?"Worker":"Browser"}function mi(){var t=vi();return"ReactNative"===t||"Node"===t}var gi="Firefox",bi="Chrome";function yi(t){var n=t.toLowerCase();return ot(n,"opera/")||ot(n,"opr/")||ot(n,"opios/")?"Opera":ot(n,"iemobile")?"IEMobile":ot(n,"msie")||ot(n,"trident/")?"IE":ot(n,"edge/")?"Edge":ot(n,"firefox/")?gi:ot(n,"silk/")?"Silk":ot(n,"blackberry")?"Blackberry":ot(n,"webos")?"Webos":!ot(n,"safari/")||ot(n,"chrome/")||ot(n,"crios/")||ot(n,"android")?!ot(n,"chrome/")&&!ot(n,"crios/")||ot(n,"edge/")?ot(n,"android")?"Android":(t=t.match(/([a-zA-Z\d\.]+)\/[a-zA-Z\d\.]*$/))&&2==t.length?t[1]:"Other":bi:"Safari"}var wi={jd:"FirebaseCore-web",ld:"FirebaseUI-web"};function Ii(t,n){n=n||[];var e,i=[],r={};for(e in wi)r[wi[e]]=!0;for(e=0;en)throw Error("Short delay should be less than long delay!");this.a=t,this.c=n,t=Ti(),n=vi(),this.b=ai(t)||"ReactNative"===n}function xi(){var t=s.document;return!t||void 0===t.visibilityState||"visible"==t.visibilityState}function ji(t){try{var n=new Date(parseInt(t,10));if(!isNaN(n.getTime())&&!/[^0-9]/.test(t))return n.toUTCString()}catch(t){}return null}function Ui(){return!(!Ei("fireauth.oauthhelper",s)&&!Ei("fireauth.iframe",s))}Mi.prototype.get=function(){var t=s.navigator;return!t||"boolean"!=typeof t.onLine||!Si()&&"chrome-extension:"!==Ni()&&void 0===t.connection||t.onLine?this.b?this.c:this.a:Math.min(5e3,this.a)};var Vi,Fi={};function qi(t){Fi[t]||(Fi[t]=!0,"undefined"!=typeof console&&"function"==typeof console.warn&&console.warn(t))}try{var Ki={};Object.defineProperty(Ki,"abcd",{configurable:!0,enumerable:!0,value:1}),Object.defineProperty(Ki,"abcd",{configurable:!0,enumerable:!0,value:2}),Vi=2==Ki.abcd}catch(Ht){Vi=!1}function Hi(t,n,e){Vi?Object.defineProperty(t,n,{configurable:!0,enumerable:!0,value:e}):t[n]=e}function Gi(t,n){if(n)for(var e in n)n.hasOwnProperty(e)&&Hi(t,e,n[e])}function Bi(t){var n={};return Gi(n,t),n}function Wi(t){var n=t;if("object"==typeof t&&null!=t)for(var e in n="length"in t?[]:{},t)Hi(n,e,Wi(t[e]));return n}function Xi(t){var n=t&&(t[Zi]?"phone":null);if(!(n&&t&&t[$i]))throw new E("internal-error","Internal assert: invalid MultiFactorInfo object");Hi(this,"uid",t[$i]),Hi(this,"displayName",t[Yi]||null);var e=null;t[zi]&&(e=new Date(t[zi]).toUTCString()),Hi(this,"enrollmentTime",e),Hi(this,"factorId",n)}function Ji(t){try{var n=new Qi(t)}catch(t){n=null}return n}Xi.prototype.v=function(){return{uid:this.uid,displayName:this.displayName,factorId:this.factorId,enrollmentTime:this.enrollmentTime}};var Yi="displayName",zi="enrolledAt",$i="mfaEnrollmentId",Zi="phoneInfo";function Qi(t){Xi.call(this,t),Hi(this,"phoneNumber",t[Zi])}function tr(t){var n={},e=t[rr],i=t[ar],r=t[sr];if(t=Ji(t[or]),!r||r!=er&&r!=ir&&!e||r==ir&&!i||r==nr&&!t)throw Error("Invalid checkActionCode response!");r==ir?(n[cr]=e||null,n[lr]=e||null,n[ur]=i):(n[cr]=i||null,n[lr]=i||null,n[ur]=e||null),n[hr]=t||null,Hi(this,dr,r),Hi(this,fr,Wi(n))}T(Qi,Xi),Qi.prototype.v=function(){var t=Qi.Za.v.call(this);return t.phoneNumber=this.phoneNumber,t};var nr="REVERT_SECOND_FACTOR_ADDITION",er="EMAIL_SIGNIN",ir="VERIFY_AND_CHANGE_EMAIL",rr="email",or="mfaInfo",ar="newEmail",sr="requestType",ur="email",cr="fromEmail",hr="multiFactorInfo",lr="previousEmail",fr="data",dr="operation";function pr(t){var n=De(t=Le(t),vr)||null,e=De(t,mr)||null,i=De(t,yr)||null;if(i=i&&Ir[i]||null,!n||!e||!i)throw new E("argument-error",vr+", "+mr+"and "+yr+" are required in a valid action code URL.");Gi(this,{apiKey:n,operation:i,code:e,continueUrl:De(t,gr)||null,languageCode:De(t,br)||null,tenantId:De(t,wr)||null})}var vr="apiKey",mr="oobCode",gr="continueUrl",br="languageCode",yr="mode",wr="tenantId",Ir={recoverEmail:"RECOVER_EMAIL",resetPassword:"PASSWORD_RESET",revertSecondFactorAddition:nr,signIn:er,verifyAndChangeEmail:ir,verifyEmail:"VERIFY_EMAIL"};function Tr(t){try{return new pr(t)}catch(t){return null}}function Er(t){var n=t[_r];if(void 0===n)throw new E("missing-continue-uri");if("string"!=typeof n||"string"==typeof n&&!n.length)throw new E("invalid-continue-uri");this.h=n,this.b=this.a=null,this.g=!1;var e=t[Ar];if(e&&"object"==typeof e){n=e[Pr];var i=e[Or];if(e=e[Rr],"string"==typeof n&&n.length){if(this.a=n,void 0!==i&&"boolean"!=typeof i)throw new E("argument-error",Or+" property must be a boolean when specified.");if(this.g=!!i,void 0!==e&&("string"!=typeof e||"string"==typeof e&&!e.length))throw new E("argument-error",Rr+" property must be a non empty string when specified.");this.b=e||null}else{if(void 0!==n)throw new E("argument-error",Pr+" property must be a non empty string when specified.");if(void 0!==i||void 0!==e)throw new E("missing-android-pkg-name")}}else if(void 0!==e)throw new E("argument-error",Ar+" property must be a non null object when specified.");if(this.f=null,(n=t[Nr])&&"object"==typeof n){if("string"==typeof(n=n[Cr])&&n.length)this.f=n;else if(void 0!==n)throw new E("argument-error",Cr+" property must be a non empty string when specified.")}else if(void 0!==n)throw new E("argument-error",Nr+" property must be a non null object when specified.");if(void 0!==(n=t[Sr])&&"boolean"!=typeof n)throw new E("argument-error",Sr+" property must be a boolean when specified.");if(this.c=!!n,void 0!==(t=t[kr])&&("string"!=typeof t||"string"==typeof t&&!t.length))throw new E("argument-error",kr+" property must be a non empty string when specified.");this.i=t||null}var Ar="android",kr="dynamicLinkDomain",Sr="handleCodeInApp",Nr="iOS",_r="url",Or="installApp",Rr="minimumVersion",Pr="packageName",Cr="bundleId";function Dr(t){var n={};for(var e in n.continueUrl=t.h,n.canHandleCodeInApp=t.c,(n.androidPackageName=t.a)&&(n.androidMinimumVersion=t.b,n.androidInstallApp=t.g),n.iOSBundleId=t.f,n.dynamicLinkDomain=t.i,n)null===n[e]&&delete n[e];return n}var Lr=null;function Mr(t){var n="";return function(t,n){function e(n){for(;ie;e++)for(var i=t.concat(n[e].split("")),r=0;r>4),64!=a&&(n(o<<4&240|a>>2),64!=s&&n(a<<6&192|s))}}(t,(function(t){n+=String.fromCharCode(t)})),n}function xr(t){var n=Ur(t);if(!(n&&n.sub&&n.iss&&n.aud&&n.exp))throw Error("Invalid JWT");this.g=t,this.c=n.exp,this.h=n.sub,this.a=n.provider_id||n.firebase&&n.firebase.sign_in_provider||null,this.f=n.firebase&&n.firebase.tenant||null,this.b=!!n.is_anonymous||"anonymous"==this.a}function jr(t){try{return new xr(t)}catch(t){return null}}function Ur(t){if(!t)return null;if(3!=(t=t.split(".")).length)return null;for(var n=(4-(t=t[1]).length%4)%4,e=0;e Auth section -> Sign in method tab.",t):"http"==i||"https"==i?e=Vt("This domain (%s) is not authorized to run this operation. Add it to the OAuth redirect domains list in the Firebase console -> Auth section -> Sign in method tab.",t):n="operation-not-supported-in-this-environment",E.call(this,n,e)}function Fo(t,n,e){E.call(this,t,e),(t=n||{}).Gb&&Hi(this,"email",t.Gb),t.da&&Hi(this,"phoneNumber",t.da),t.credential&&Hi(this,"credential",t.credential),t.Wb&&Hi(this,"tenantId",t.Wb)}function qo(t){if(t.code){var n=t.code||"";0==n.indexOf(S)&&(n=n.substring(S.length));var e={credential:Co(t),Wb:t.tenantId};if(t.email)e.Gb=t.email;else if(t.phoneNumber)e.da=t.phoneNumber;else if(!e.credential)return new E(n,t.message||void 0);return new Fo(n,e,t.message)}return null}function Ko(){}function Ho(t){return t.c||(t.c=t.b())}function Go(){}function Bo(t){if(!t.f&&"undefined"==typeof XMLHttpRequest&&"undefined"!=typeof ActiveXObject){for(var n=["MSXML2.XMLHTTP.6.0","MSXML2.XMLHTTP.3.0","MSXML2.XMLHTTP","Microsoft.XMLHTTP"],e=0;e=function t(n){return n.c?n.c:n.a?t(n.a):(D("Root logger has no level set."),null)}(this).value)for(d(n)&&(n=n()),t=new Yo(t,String(n),this.f),e&&(t.a=e),e=this;e;)e=e.a};var ea={},ia=null;function ra(t){var n;if(ia||(ia=new zo(""),ea[""]=ia,ia.c=ta),!(n=ea[t])){n=new zo(t);var e=t.lastIndexOf("."),i=t.substr(e+1);(e=ra(t.substr(0,e))).b||(e.b={}),e.b[i]=n,n.a=e,ea[t]=n}return n}function oa(t,n){t&&t.log(na,n,void 0)}function aa(t){this.f=t}function sa(t){me.call(this),this.s=t,this.readyState=ua,this.status=0,this.responseType=this.responseText=this.response=this.statusText="",this.onreadystatechange=null,this.i=new Headers,this.b=null,this.m="GET",this.g="",this.a=!1,this.h=ra("goog.net.FetchXmlHttp"),this.l=this.c=this.f=null}T(aa,Ko),aa.prototype.a=function(){return new sa(this.f)},aa.prototype.b=function(t){return function(){return t}}({}),T(sa,me);var ua=0;function ca(t){t.c.read().then(t.nc.bind(t)).catch(t.Sa.bind(t))}function ha(t,n){n&&t.f&&(t.status=t.f.status,t.statusText=t.f.statusText),t.readyState=4,t.f=null,t.c=null,t.l=null,la(t)}function la(t){t.onreadystatechange&&t.onreadystatechange.call(t)}function fa(t){me.call(this),this.headers=new Ae,this.D=t||null,this.c=!1,this.B=this.a=null,this.h=this.P=this.l="",this.f=this.O=this.i=this.N=!1,this.g=0,this.s=null,this.m=da,this.w=this.R=!1}(n=sa.prototype).open=function(t,n){if(this.readyState!=ua)throw this.abort(),Error("Error reopening a connection");this.m=t,this.g=n,this.readyState=1,la(this)},n.send=function(t){if(1!=this.readyState)throw this.abort(),Error("need to call open() first. ");this.a=!0;var n={headers:this.i,method:this.m,credentials:void 0,cache:void 0};t&&(n.body=t),this.s.fetch(new Request(this.g,n)).then(this.sc.bind(this),this.Sa.bind(this))},n.abort=function(){this.response=this.responseText="",this.i=new Headers,this.status=0,this.c&&this.c.cancel("Request was aborted."),1<=this.readyState&&this.a&&4!=this.readyState&&(this.a=!1,ha(this,!1)),this.readyState=ua},n.sc=function(t){this.a&&(this.f=t,this.b||(this.b=t.headers,this.readyState=2,la(this)),this.a&&(this.readyState=3,la(this),this.a&&("arraybuffer"===this.responseType?t.arrayBuffer().then(this.qc.bind(this),this.Sa.bind(this)):void 0!==s.ReadableStream&&"body"in t?(this.response=this.responseText="",this.c=t.body.getReader(),this.l=new TextDecoder,ca(this)):t.text().then(this.rc.bind(this),this.Sa.bind(this)))))},n.nc=function(t){if(this.a){var n=this.l.decode(t.value?t.value:new Uint8Array(0),{stream:!t.done});n&&(this.response=this.responseText+=n),t.done?ha(this,!0):la(this),3==this.readyState&&ca(this)}},n.rc=function(t){this.a&&(this.response=this.responseText=t,ha(this,!0))},n.qc=function(t){this.a&&(this.response=t,ha(this,!0))},n.Sa=function(t){var n=this.h;n&&n.log(Qo,"Failed to fetch url "+this.g,t instanceof Error?t:Error(t)),this.a&&ha(this,!0)},n.setRequestHeader=function(t,n){this.i.append(t,n)},n.getResponseHeader=function(t){return this.b?this.b.get(t.toLowerCase())||"":((t=this.h)&&t.log(Qo,"Attempting to get response header but no headers have been received for url: "+this.g,void 0),"")},n.getAllResponseHeaders=function(){if(!this.b){var t=this.h;return t&&t.log(Qo,"Attempting to get all response headers but no headers have been received for url: "+this.g,void 0),""}t=[];for(var n=this.b.entries(),e=n.next();!e.done;)e=e.value,t.push(e[0]+": "+e[1]),e=n.next();return t.join("\r\n")},T(fa,me);var da="";fa.prototype.b=ra("goog.net.XhrIo");var pa=/^https?$/i,va=["POST","PUT"];function ma(t,n,e,i,r){if(t.a)throw Error("[goog.net.XhrIo] Object is active with another request="+t.l+"; newUri="+n);e=e?e.toUpperCase():"GET",t.l=n,t.h="",t.P=e,t.N=!1,t.c=!0,t.a=t.D?t.D.a():jo.a(),t.B=t.D?Ho(t.D):Ho(jo),t.a.onreadystatechange=y(t.Sb,t);try{oa(t.b,ka(t,"Opening Xhr")),t.O=!0,t.a.open(e,String(n),!0),t.O=!1}catch(n){return oa(t.b,ka(t,"Error opening Xhr: "+n.message)),void ba(t,n)}n=i||"";var o=new Ae(t.headers);r&&function(t,n){if(t.forEach&&"function"==typeof t.forEach)t.forEach(n,void 0);else if(f(t)||"string"==typeof t)q(t,n,void 0);else for(var e=Ee(t),i=Te(t),r=i.length,o=0;on?null:"string"==typeof t?t.charAt(n):t[n]}(o.X()),i=s.FormData&&n instanceof s.FormData,!B(va,e)||r||i||o.set("Content-Type","application/x-www-form-urlencoded;charset=utf-8"),o.forEach((function(t,n){this.a.setRequestHeader(n,t)}),t),t.m&&(t.a.responseType=t.m),"withCredentials"in t.a&&t.a.withCredentials!==t.R&&(t.a.withCredentials=t.R);try{Ta(t),0=n.l&&n.cancel())}this.w?this.w.call(this.s,this):this.u=!0,this.a||(t=new Da(this),_a(this),Na(this,!1,t))}},Sa.prototype.m=function(t,n){this.i=!1,Na(this,t,n)},Sa.prototype.then=function(t,n,e){var i,r,o=new yn((function(t,n){i=t,r=n}));return Oa(this,i,(function(t){t instanceof Da?o.cancel():r(t)})),o.then(t,n,e)},Sa.prototype.$goog_Thenable=!0,T(Ca,P),Ca.prototype.message="Deferred has already fired",Ca.prototype.name="AlreadyCalledError",T(Da,P),Da.prototype.message="Deferred was canceled",Da.prototype.name="CanceledError",La.prototype.c=function(){throw delete Ma[this.a],this.b};var Ma={};function xa(t){var n,e=document,i=Tt(t).toString(),r=ln(document,"SCRIPT"),o={Tb:r,Ka:void 0},a=new Sa(o);return n=window.setTimeout((function(){Ua(r,!0);var t=new qa(Fa,"Timeout reached for loading script "+i);_a(a),Na(a,!1,t)}),5e3),o.Ka=n,r.onload=r.onreadystatechange=function(){r.readyState&&"loaded"!=r.readyState&&"complete"!=r.readyState||(Ua(r,!1,n),_a(a),Na(a,!0,null))},r.onerror=function(){Ua(r,!0,n);var t=new qa(Va,"Error while loading script "+i);_a(a),Na(a,!1,t)},pt(o={},{type:"text/javascript",charset:"UTF-8"}),an(r,o),function(t,n){vt(t,"HTMLScriptElement"),t.src=Tt(n),null===c&&(c=(n=(n=s.document).querySelector&&n.querySelector("script[nonce]"))&&(n=n.nonce||n.getAttribute("nonce"))&&u.test(n)?n:""),(n=c)&&t.setAttribute("nonce",n)}(r,t),function(t){var n;return(n=(t||document).getElementsByTagName("HEAD"))&&0!=n.length?n[0]:t.documentElement}(e).appendChild(r),a}function ja(){if(this&&this.Tb){var t=this.Tb;t&&"SCRIPT"==t.tagName&&Ua(t,!0,this.Ka)}}function Ua(t,n,e){null!=e&&s.clearTimeout(e),t.onload=h,t.onerror=h,t.onreadystatechange=h,n&&window.setTimeout((function(){t&&t.parentNode&&t.parentNode.removeChild(t)}),0)}var Va=0,Fa=1;function qa(t,n){var e="Jsloader error (code #"+t+")";n&&(e+=": "+n),P.call(this,e),this.code=t}function Ka(t){this.f=t}function Ha(n,e,i){if(this.c=n,n=e||{},this.u=n.secureTokenEndpoint||"https://securetoken.googleapis.com/v1/token",this.m=n.secureTokenTimeout||Wa,this.g=ft(n.secureTokenHeaders||Xa),this.h=n.firebaseEndpoint||"https://www.googleapis.com/identitytoolkit/v3/relyingparty/",this.l=n.identityPlatformEndpoint||"https://identitytoolkit.googleapis.com/v2/",this.i=n.firebaseTimeout||Ja,this.a=ft(n.firebaseHeaders||Ya),i&&(this.a["X-Client-Version"]=i,this.g["X-Client-Version"]=i),i="Node"==vi(),!(i=s.XMLHttpRequest||i&&t.INTERNAL.node&&t.INTERNAL.node.XMLHttpRequest)&&!pi())throw new E("internal-error","The XMLHttpRequest compatibility library was not found.");this.f=void 0,pi()?this.f=new aa(self):mi()?this.f=new Ka(i):this.f=new Wo,this.b=null}T(qa,P),T(Ka,Ko),Ka.prototype.a=function(){return new this.f},Ka.prototype.b=function(){return{}};var Ga,Ba="idToken",Wa=new Mi(3e4,6e4),Xa={"Content-Type":"application/x-www-form-urlencoded"},Ja=new Mi(3e4,6e4),Ya={"Content-Type":"application/json"};function za(t,n){n?t.a["X-Firebase-Locale"]=n:delete t.a["X-Firebase-Locale"]}function $a(t,n){n?(t.a["X-Client-Version"]=n,t.g["X-Client-Version"]=n):(delete t.a["X-Client-Version"],delete t.g["X-Client-Version"])}function Za(t,n,e,i,r,o,a){(function(){var t=Ti();return!((t=yi(t)!=bi?null:(t=t.match(/\sChrome\/(\d+)/i))&&2==t.length?parseInt(t[1],10):null)&&30>t)&&(!Bt||!tn||9n;n++){r=0|e[n-15],i=0|e[n-2];var o=(0|e[n-16])+((r>>>7|r<<25)^(r>>>18|r<<14)^r>>>3)|0,a=(0|e[n-7])+((i>>>17|i<<15)^(i>>>19|i<<13)^i>>>10)|0;e[n]=o+a|0}i=0|t.a[0],r=0|t.a[1];var s=0|t.a[2],u=0|t.a[3],c=0|t.a[4],h=0|t.a[5],l=0|t.a[6];for(o=0|t.a[7],n=0;64>n;n++){var f=((i>>>2|i<<30)^(i>>>13|i<<19)^(i>>>22|i<<10))+(i&r^i&s^r&s)|0;a=(o=o+((c>>>6|c<<26)^(c>>>11|c<<21)^(c>>>25|c<<7))|0)+((a=(a=c&h^~c&l)+(0|$u[n])|0)+(0|e[n])|0)|0,o=l,l=h,h=c,c=u+a|0,u=s,s=r,r=i,i=a+f|0}t.a[0]=t.a[0]+i|0,t.a[1]=t.a[1]+r|0,t.a[2]=t.a[2]+s|0,t.a[3]=t.a[3]+u|0,t.a[4]=t.a[4]+c|0,t.a[5]=t.a[5]+h|0,t.a[6]=t.a[6]+l|0,t.a[7]=t.a[7]+o|0}function sc(t,n,e){void 0===e&&(e=n.length);var i=0,r=t.c;if("string"==typeof n)for(;i=o&&o==(0|o)))throw Error("message must be a byte array");t.f[r++]=o,r==t.b&&(ac(t),r=0)}}t.c=r,t.g+=e}tc.prototype.reset=function(){this.g=this.c=0,this.a=s.Int32Array?new Int32Array(this.h):Y(this.h)};var uc=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298];function cc(){tc.call(this,8,hc)}T(cc,tc);var hc=[1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225];function lc(t,n,e,i,r){this.u=t,this.i=n,this.l=e,this.m=i||null,this.s=r||null,this.h=n+":"+e,this.w=new Qu,this.g=new zu(this.h),this.f=null,this.b=[],this.a=this.c=null}function fc(t){return new E("invalid-cordova-configuration",t)}function dc(t){var n=new cc;sc(n,t),t=[];var e=8*n.g;56>n.c?sc(n,oc,56-n.c):sc(n,oc,n.b-(n.c-56));for(var i=63;56<=i;i--)n.f[i]=255&e,e/=256;for(ac(n),i=e=0;i>r&255;return function(t){return H(t,(function(t){return 1<(t=t.toString(16)).length?t:"0"+t})).join("")}(t)}function pc(t,n){for(var e=0;et.f&&(t.a=t.f),n)}(n,e)).then((function(){return function(){var t=s.document,n=null;return xi()||!t?Sn():new yn((function(e){n=function(){xi()&&(t.removeEventListener("visibilitychange",n,!1),e())},t.addEventListener("visibilitychange",n,!1)})).o((function(e){throw t.removeEventListener("visibilitychange",n,!1),e}))}()})).then((function(){return n.h()})).then((function(){t(n,!0)})).o((function(e){n.i(e)&&t(n,!1)}))}(this,!0)},nh.prototype.stop=function(){this.b&&(this.b.cancel(),this.b=null)},eh.prototype.v=function(){return{apiKey:this.c.c,refreshToken:this.a,accessToken:this.b&&this.b.toString(),expirationTime:ih(this)}},eh.prototype.getToken=function(t){return t=!!t,this.b&&!this.a?Nn(new E("user-token-expired")):t||!this.b||I()>ih(this)-3e4?this.a?oh(this,{grant_type:"refresh_token",refresh_token:this.a}):Sn(null):Sn({accessToken:this.b.toString(),refreshToken:this.a})},ah.prototype.v=function(){return{lastLoginAt:this.b,createdAt:this.a}},T(uh,me),uh.prototype.va=function(t){this.oa=t,za(this.a,t)},uh.prototype.ja=function(){return this.oa},uh.prototype.Ea=function(){return Y(this.W)},uh.prototype.Ma=function(){this.B.b&&(this.B.stop(),this.B.start())},Hi(uh.prototype,"providerId","firebase"),(n=uh.prototype).reload=function(){var t=this;return Lh(this,wh(this).then((function(){return Sh(t).then((function(){return mh(t)})).then(yh)})))},n.mc=function(t){return this.I(t).then((function(t){return new Hc(t)}))},n.I=function(t){var n=this;return Lh(this,wh(this).then((function(){return n.b.getToken(t)})).then((function(t){if(!t)throw new E("internal-error");return t.accessToken!=n.xa&&(vh(n,t.accessToken),n.dispatchEvent(new Zc("tokenChanged"))),Ah(n,"refreshToken",t.refreshToken),t.accessToken})))},n.Ic=function(t){if(!(t=t.users)||!t.length)throw new E("internal-error");bh(this,{uid:(t=t[0]).localId,displayName:t.displayName,photoURL:t.photoUrl,email:t.email,emailVerified:!!t.emailVerified,phoneNumber:t.phoneNumber,lastLoginAt:t.lastLoginAt,createdAt:t.createdAt,tenantId:t.tenantId});for(var n=function(t){return(t=t.providerUserInfo)&&t.length?H(t,(function(t){return new sh(t.rawId,t.providerId,t.email,t.displayName,t.photoUrl,t.phoneNumber)})):[]}(t),e=0;ethis.s&&(this.s=0),0==this.s&&el(this)&&ph(el(this)),this.removeAuthTokenListener(t)},n.addAuthTokenListener=function(t){var n=this;this.m.push(t),ol(this,this.h.then((function(){n.l||B(n.m,t)&&t(il(n))})))},n.removeAuthTokenListener=function(t){X(this.m,(function(n){return n==t}))},n.delete=function(){this.l=!0;for(var t=0;tr||r>=Rl.length)throw new E("internal-error","Argument validator received an unsupported number of arguments.");e=Rl[r],i=(i?"":e+" argument ")+(n.name?'"'+n.name+'" ':"")+"must be "+n.J+".";break t}i=null}}if(i)throw new E("argument-error",t+" failed: "+i)}(n=wl.prototype).Ga=function(){var t=this;return this.f?this.f:this.f=Sl(this,Sn().then((function(){if(Si()&&!pi())return li();throw new E("operation-not-supported-in-this-environment","RecaptchaVerifier is only supported in a browser HTTP/HTTPS environment.")})).then((function(){return t.m.g(t.w())})).then((function(n){return t.g=n,Js(t.s,Ps,{})})).then((function(n){t.a[El]=n.recaptchaSiteKey})).o((function(n){throw t.f=null,n})))},n.render=function(){Nl(this);var t=this;return Sl(this,this.Ga().then((function(){if(null===t.c){var n=t.u;if(!t.i){var e=on(n);n=function(t,n,e){var i=arguments,r=document,o=String(i[0]),a=i[1];if(!rn&&a&&(a.name||a.type)){if(o=["<",o],a.name&&o.push(' name="',Ft(a.name),'"'),a.type){o.push(' type="',Ft(a.type),'"');var s={};pt(s,a),delete s.type,a=s}o.push(">"),o=o.join("")}return o=ln(r,o),a&&("string"==typeof a?o.className=a:Array.isArray(a)?o.className=a.join(" "):an(o,a)),2>>0),m=0;function g(t,n,e){return t.call.apply(t.bind,arguments)}function b(t,n,e){if(!t)throw Error();if(2t.b&&(t.b++,n.next=t.a,t.a=n)}function x(){this.b=this.a=null}k=O("__EID__")?"__EID__":void 0,T(P,Error),P.prototype.name="CustomError",T(C,P),C.prototype.name="AssertionError",L.prototype.get=function(){if(0/g,nt=/"/g,et=/'/g,it=/\x00/g,rt=/[\x00&<>"']/;function ot(t,n){return-1!=t.indexOf(n)}function at(t,n){return tn?1:0}t:{var st=s.navigator;if(st){var ut=st.userAgent;if(ut){z=ut;break t}}z=""}function ct(t){return ot(z,t)}function ht(t,n){for(var e in t)n.call(void 0,t[e],e,t)}function lt(t){for(var n in t)return!1;return!0}function ft(t){var n,e={};for(n in t)e[n]=t[n];return e}var dt="constructor hasOwnProperty isPrototypeOf propertyIsEnumerable toLocaleString toString valueOf".split(" ");function pt(t,n){for(var e,i,r=1;r"}else o=void 0===t?"undefined":null===t?"null":typeof t;D("Argument is not a %s (or a non-Element, non-Location mock); got: %s",n,o)}}function mt(t,n){this.a=t===yt&&n||"",this.b=bt}function gt(t){return t instanceof mt&&t.constructor===mt&&t.b===bt?t.a:(D("expected object of type Const, got '"+t+"'"),"type_error:Const")}mt.prototype.ra=!0,mt.prototype.qa=function(){return this.a},mt.prototype.toString=function(){return"Const{"+this.a+"}"};var bt={},yt={},wt=new mt(yt,"");function It(t,n){this.a=t===Nt&&n||"",this.b=St}function Tt(t){return t instanceof It&&t.constructor===It&&t.b===St?t.a:(D("expected object of type TrustedResourceUrl, got '"+t+"' of type "+l(t)),"type_error:TrustedResourceUrl")}function Et(t,n){var e=gt(t);if(!kt.test(e))throw Error("Invalid TrustedResourceUrl format: "+e);return t=e.replace(At,(function(t,i){if(!Object.prototype.hasOwnProperty.call(n,i))throw Error('Found marker, "'+i+'", in format string, "'+e+'", but no valid label mapping found in args: '+JSON.stringify(n));return(t=n[i])instanceof mt?gt(t):encodeURIComponent(String(t))})),new It(Nt,t)}It.prototype.ra=!0,It.prototype.qa=function(){return this.a.toString()},It.prototype.toString=function(){return"TrustedResourceUrl{"+this.a+"}"};var At=/%{(\w+)}/g,kt=/^((https:)?\/\/[0-9a-z.:[\]-]+\/|\/[^/\\]|[^:/\\%]+\/|[^:/\\%]*[?#]|about:blank#)/i,St={},Nt={};function _t(t,n){this.a=t===Dt&&n||"",this.b=Ct}function Ot(t){return t instanceof _t&&t.constructor===_t&&t.b===Ct?t.a:(D("expected object of type SafeUrl, got '"+t+"' of type "+l(t)),"type_error:SafeUrl")}_t.prototype.ra=!0,_t.prototype.qa=function(){return this.a.toString()},_t.prototype.toString=function(){return"SafeUrl{"+this.a+"}"};var Rt=/^(?:(?:https?|mailto|ftp):|[^:/?#]*(?:[/?#]|$))/i;function Pt(t){return t instanceof _t?t:(t="object"==typeof t&&t.ra?t.qa():String(t),Rt.test(t)||(t="about:invalid#zClosurez"),new _t(Dt,t))}var Ct={},Dt={};function Lt(){this.a="",this.b=xt}function Mt(t){return t instanceof Lt&&t.constructor===Lt&&t.b===xt?t.a:(D("expected object of type SafeHtml, got '"+t+"' of type "+l(t)),"type_error:SafeHtml")}Lt.prototype.ra=!0,Lt.prototype.qa=function(){return this.a.toString()},Lt.prototype.toString=function(){return"SafeHtml{"+this.a+"}"};var xt={};function jt(t){var n=new Lt;return n.a=t,n}jt("");var Ut=jt("");function Vt(t,n){for(var e=t.split("%s"),i="",r=Array.prototype.slice.call(arguments,1);r.length&&1")&&(t=t.replace(tt,">")),-1!=t.indexOf('"')&&(t=t.replace(nt,""")),-1!=t.indexOf("'")&&(t=t.replace(et,"'")),-1!=t.indexOf("\0")&&(t=t.replace(it,"�"))),t}function qt(t){return qt[" "](t),t}jt("
"),qt[" "]=h;var Kt,Ht,Gt=ct("Opera"),Bt=ct("Trident")||ct("MSIE"),Wt=ct("Edge"),Xt=Wt||Bt,Jt=ct("Gecko")&&!(ot(z.toLowerCase(),"webkit")&&!ct("Edge"))&&!(ct("Trident")||ct("MSIE"))&&!ct("Edge"),Yt=ot(z.toLowerCase(),"webkit")&&!ct("Edge");function zt(){var t=s.document;return t?t.documentMode:void 0}t:{var $t="",Zt=(Ht=z,Jt?/rv:([^\);]+)(\)|;)/.exec(Ht):Wt?/Edge\/([\d\.]+)/.exec(Ht):Bt?/\b(?:MSIE|rv)[: ]([^\);]+)(\)|;)/.exec(Ht):Yt?/WebKit\/(\S+)/.exec(Ht):Gt?/(?:Version)[ \/]?(\S+)/.exec(Ht):void 0);if(Zt&&($t=Zt?Zt[1]:""),Bt){var Qt=zt();if(null!=Qt&&Qt>parseFloat($t)){Kt=String(Qt);break t}}Kt=$t}var tn,nn={};function en(t){return function(t,n){var e=nn;return Object.prototype.hasOwnProperty.call(e,t)?e[t]:e[t]=n(t)}(t,(function(){for(var n=0,e=$(String(Kt)).split("."),i=$(String(t)).split("."),r=Math.max(e.length,i.length),o=0;0==n&&o=t.keyCode)&&(t.keyCode=-1)}catch(t){}},Xn.prototype.f=function(){return this.a};var Yn="closure_listenable_"+(1e6*Math.random()|0),zn=0;function $n(t,n,e,i,r){this.listener=t,this.proxy=null,this.src=n,this.type=e,this.capture=!!i,this.Ta=r,this.key=++zn,this.ua=this.Na=!1}function Zn(t){t.ua=!0,t.listener=null,t.proxy=null,t.src=null,t.Ta=null}function Qn(t){this.src=t,this.a={},this.b=0}function te(t,n){var e=n.type;e in t.a&&W(t.a[e],n)&&(Zn(n),0==t.a[e].length&&(delete t.a[e],t.b--))}function ne(t,n,e,i){for(var r=0;ri.keyCode||null!=i.returnValue)){t:{var r=!1;if(0==i.keyCode)try{i.keyCode=-1;break t}catch(t){r=!0}(r||null==i.returnValue)&&(i.returnValue=!0)}for(i=[],r=n.b;r;r=r.parentNode)i.push(r);for(t=t.type,r=i.length-1;0<=r;r--){n.b=i[r];var o=he(i[r],t,!0,n);e=e&&o}for(r=0;r>>0);function ve(t){return d(t)?t:(t[pe]||(t[pe]=function(n){return t.handleEvent(n)}),t[pe])}function me(){Fn.call(this),this.u=new Qn(this),this.Yb=this,this.eb=null}function ge(t,n,e,i,r){t.u.add(String(n),e,!1,i,r)}function be(t,n,e,i,r){t.u.add(String(n),e,!0,i,r)}function ye(t,n,e,i){if(!(n=t.u.a[String(n)]))return!0;n=n.concat();for(var r=!0,o=0;on)throw Error("Bad port number "+n);t.l=n}else t.l=null}function Pe(t,n,e){n instanceof Ge?(t.a=n,function(t,n){n&&!t.f&&(Be(t),t.c=null,t.a.forEach((function(t,n){var e=n.toLowerCase();n!=e&&(Xe(this,n),Ye(this,e,t))}),t)),t.f=n}(t.a,t.h)):(e||(n=je(n,Ke)),t.a=new Ge(n,t.h))}function Ce(t,n,e){t.a.set(n,e)}function De(t,n){return t.a.get(n)}function Le(t){return t instanceof _e?new _e(t):new _e(t,void 0)}function Me(t,n){var e=new _e(null,void 0);return Oe(e,"https"),t&&(e.b=t),n&&(e.c=n),e}function xe(t,n){return t?n?decodeURI(t.replace(/%25/g,"%2525")):decodeURIComponent(t):""}function je(t,n,e){return"string"==typeof t?(t=encodeURI(t).replace(n,Ue),e&&(t=t.replace(/%25([0-9a-fA-F]{2})/g,"%$1")),t):null}function Ue(t){return"%"+((t=t.charCodeAt(0))>>4&15).toString(16)+(15&t).toString(16)}_e.prototype.toString=function(){var t=[],n=this.f;n&&t.push(je(n,Ve,!0),":");var e=this.b;return(e||"file"==n)&&(t.push("//"),(n=this.i)&&t.push(je(n,Ve,!0),"@"),t.push(encodeURIComponent(String(e)).replace(/%25([0-9a-fA-F]{2})/g,"%$1")),null!=(e=this.l)&&t.push(":",String(e))),(e=this.c)&&(this.b&&"/"!=e.charAt(0)&&t.push("/"),t.push(je(e,"/"==e.charAt(0)?qe:Fe,!0))),(e=this.a.toString())&&t.push("?",e),(e=this.g)&&t.push("#",je(e,He)),t.join("")},_e.prototype.resolve=function(t){var n=new _e(this),e=!!t.f;e?Oe(n,t.f):e=!!t.i,e?n.i=t.i:e=!!t.b,e?n.b=t.b:e=null!=t.l;var i=t.c;if(e)Re(n,t.l);else if(e=!!t.c){if("/"!=i.charAt(0))if(this.b&&!this.c)i="/"+i;else{var r=n.c.lastIndexOf("/");-1!=r&&(i=n.c.substr(0,r+1)+i)}if(".."==(r=i)||"."==r)i="";else if(ot(r,"./")||ot(r,"/.")){i=0==r.lastIndexOf("/",0),r=r.split("/");for(var o=[],a=0;a2*t.c&&ke(t)))}function Je(t,n){return Be(t),n=$e(t,n),Se(t.a.b,n)}function Ye(t,n,e){Xe(t,n),0'),i=a.document)&&(i.write(Mt(t)),i.close())):(a=i.open(Ot(n),e,a))&&t.noopener&&(a.opener=null),a)try{a.focus()}catch(t){}return a}var ci=/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/,hi=/^[^@]+@[^@]+$/;function li(){var t=null;return new yn((function(n){"complete"==s.document.readyState?n():(t=function(){n()},ae(window,"load",t))})).o((function(n){throw se(window,"load",t),n}))}function fi(t){return t=t||Ti(),!("file:"!==Ni()&&"ionic:"!==Ni()||!t.toLowerCase().match(/iphone|ipad|ipod|android/))}function di(){var t=s.window;try{return!(!t||t==t.top)}catch(t){return!1}}function pi(){return void 0!==s.WorkerGlobalScope&&"function"==typeof s.importScripts}function vi(){return t.INTERNAL.hasOwnProperty("reactNative")?"ReactNative":t.INTERNAL.hasOwnProperty("node")?"Node":pi()?"Worker":"Browser"}function mi(){var t=vi();return"ReactNative"===t||"Node"===t}var gi="Firefox",bi="Chrome";function yi(t){var n=t.toLowerCase();return ot(n,"opera/")||ot(n,"opr/")||ot(n,"opios/")?"Opera":ot(n,"iemobile")?"IEMobile":ot(n,"msie")||ot(n,"trident/")?"IE":ot(n,"edge/")?"Edge":ot(n,"firefox/")?gi:ot(n,"silk/")?"Silk":ot(n,"blackberry")?"Blackberry":ot(n,"webos")?"Webos":!ot(n,"safari/")||ot(n,"chrome/")||ot(n,"crios/")||ot(n,"android")?!ot(n,"chrome/")&&!ot(n,"crios/")||ot(n,"edge/")?ot(n,"android")?"Android":(t=t.match(/([a-zA-Z\d\.]+)\/[a-zA-Z\d\.]*$/))&&2==t.length?t[1]:"Other":bi:"Safari"}var wi={jd:"FirebaseCore-web",ld:"FirebaseUI-web"};function Ii(t,n){n=n||[];var e,i=[],r={};for(e in wi)r[wi[e]]=!0;for(e=0;en)throw Error("Short delay should be less than long delay!");this.a=t,this.c=n,t=Ti(),n=vi(),this.b=ai(t)||"ReactNative"===n}function xi(){var t=s.document;return!t||void 0===t.visibilityState||"visible"==t.visibilityState}function ji(t){try{var n=new Date(parseInt(t,10));if(!isNaN(n.getTime())&&!/[^0-9]/.test(t))return n.toUTCString()}catch(t){}return null}function Ui(){return!(!Ei("fireauth.oauthhelper",s)&&!Ei("fireauth.iframe",s))}Mi.prototype.get=function(){var t=s.navigator;return!t||"boolean"!=typeof t.onLine||!Si()&&"chrome-extension:"!==Ni()&&void 0===t.connection||t.onLine?this.b?this.c:this.a:Math.min(5e3,this.a)};var Vi,Fi={};function qi(t){Fi[t]||(Fi[t]=!0,"undefined"!=typeof console&&"function"==typeof console.warn&&console.warn(t))}try{var Ki={};Object.defineProperty(Ki,"abcd",{configurable:!0,enumerable:!0,value:1}),Object.defineProperty(Ki,"abcd",{configurable:!0,enumerable:!0,value:2}),Vi=2==Ki.abcd}catch(Ht){Vi=!1}function Hi(t,n,e){Vi?Object.defineProperty(t,n,{configurable:!0,enumerable:!0,value:e}):t[n]=e}function Gi(t,n){if(n)for(var e in n)n.hasOwnProperty(e)&&Hi(t,e,n[e])}function Bi(t){var n={};return Gi(n,t),n}function Wi(t){var n=t;if("object"==typeof t&&null!=t)for(var e in n="length"in t?[]:{},t)Hi(n,e,Wi(t[e]));return n}function Xi(t){var n=t&&(t[Zi]?"phone":null);if(!(n&&t&&t[$i]))throw new E("internal-error","Internal assert: invalid MultiFactorInfo object");Hi(this,"uid",t[$i]),Hi(this,"displayName",t[Yi]||null);var e=null;t[zi]&&(e=new Date(t[zi]).toUTCString()),Hi(this,"enrollmentTime",e),Hi(this,"factorId",n)}function Ji(t){try{var n=new Qi(t)}catch(t){n=null}return n}Xi.prototype.v=function(){return{uid:this.uid,displayName:this.displayName,factorId:this.factorId,enrollmentTime:this.enrollmentTime}};var Yi="displayName",zi="enrolledAt",$i="mfaEnrollmentId",Zi="phoneInfo";function Qi(t){Xi.call(this,t),Hi(this,"phoneNumber",t[Zi])}function tr(t){var n={},e=t[rr],i=t[ar],r=t[sr];if(t=Ji(t[or]),!r||r!=er&&r!=ir&&!e||r==ir&&!i||r==nr&&!t)throw Error("Invalid checkActionCode response!");r==ir?(n[cr]=e||null,n[lr]=e||null,n[ur]=i):(n[cr]=i||null,n[lr]=i||null,n[ur]=e||null),n[hr]=t||null,Hi(this,dr,r),Hi(this,fr,Wi(n))}T(Qi,Xi),Qi.prototype.v=function(){var t=Qi.Za.v.call(this);return t.phoneNumber=this.phoneNumber,t};var nr="REVERT_SECOND_FACTOR_ADDITION",er="EMAIL_SIGNIN",ir="VERIFY_AND_CHANGE_EMAIL",rr="email",or="mfaInfo",ar="newEmail",sr="requestType",ur="email",cr="fromEmail",hr="multiFactorInfo",lr="previousEmail",fr="data",dr="operation";function pr(t){var n=De(t=Le(t),vr)||null,e=De(t,mr)||null,i=De(t,yr)||null;if(i=i&&Ir[i]||null,!n||!e||!i)throw new E("argument-error",vr+", "+mr+"and "+yr+" are required in a valid action code URL.");Gi(this,{apiKey:n,operation:i,code:e,continueUrl:De(t,gr)||null,languageCode:De(t,br)||null,tenantId:De(t,wr)||null})}var vr="apiKey",mr="oobCode",gr="continueUrl",br="languageCode",yr="mode",wr="tenantId",Ir={recoverEmail:"RECOVER_EMAIL",resetPassword:"PASSWORD_RESET",revertSecondFactorAddition:nr,signIn:er,verifyAndChangeEmail:ir,verifyEmail:"VERIFY_EMAIL"};function Tr(t){try{return new pr(t)}catch(t){return null}}function Er(t){var n=t[_r];if(void 0===n)throw new E("missing-continue-uri");if("string"!=typeof n||"string"==typeof n&&!n.length)throw new E("invalid-continue-uri");this.h=n,this.b=this.a=null,this.g=!1;var e=t[Ar];if(e&&"object"==typeof e){n=e[Pr];var i=e[Or];if(e=e[Rr],"string"==typeof n&&n.length){if(this.a=n,void 0!==i&&"boolean"!=typeof i)throw new E("argument-error",Or+" property must be a boolean when specified.");if(this.g=!!i,void 0!==e&&("string"!=typeof e||"string"==typeof e&&!e.length))throw new E("argument-error",Rr+" property must be a non empty string when specified.");this.b=e||null}else{if(void 0!==n)throw new E("argument-error",Pr+" property must be a non empty string when specified.");if(void 0!==i||void 0!==e)throw new E("missing-android-pkg-name")}}else if(void 0!==e)throw new E("argument-error",Ar+" property must be a non null object when specified.");if(this.f=null,(n=t[Nr])&&"object"==typeof n){if("string"==typeof(n=n[Cr])&&n.length)this.f=n;else if(void 0!==n)throw new E("argument-error",Cr+" property must be a non empty string when specified.")}else if(void 0!==n)throw new E("argument-error",Nr+" property must be a non null object when specified.");if(void 0!==(n=t[Sr])&&"boolean"!=typeof n)throw new E("argument-error",Sr+" property must be a boolean when specified.");if(this.c=!!n,void 0!==(t=t[kr])&&("string"!=typeof t||"string"==typeof t&&!t.length))throw new E("argument-error",kr+" property must be a non empty string when specified.");this.i=t||null}var Ar="android",kr="dynamicLinkDomain",Sr="handleCodeInApp",Nr="iOS",_r="url",Or="installApp",Rr="minimumVersion",Pr="packageName",Cr="bundleId";function Dr(t){var n={};for(var e in n.continueUrl=t.h,n.canHandleCodeInApp=t.c,(n.androidPackageName=t.a)&&(n.androidMinimumVersion=t.b,n.androidInstallApp=t.g),n.iOSBundleId=t.f,n.dynamicLinkDomain=t.i,n)null===n[e]&&delete n[e];return n}var Lr=null;function Mr(t){var n="";return function(t,n){function e(n){for(;ie;e++)for(var i=t.concat(n[e].split("")),r=0;r>4),64!=a&&(n(o<<4&240|a>>2),64!=s&&n(a<<6&192|s))}}(t,(function(t){n+=String.fromCharCode(t)})),n}function xr(t){var n=Ur(t);if(!(n&&n.sub&&n.iss&&n.aud&&n.exp))throw Error("Invalid JWT");this.g=t,this.c=n.exp,this.h=n.sub,this.a=n.provider_id||n.firebase&&n.firebase.sign_in_provider||null,this.f=n.firebase&&n.firebase.tenant||null,this.b=!!n.is_anonymous||"anonymous"==this.a}function jr(t){try{return new xr(t)}catch(t){return null}}function Ur(t){if(!t)return null;if(3!=(t=t.split(".")).length)return null;for(var n=(4-(t=t[1]).length%4)%4,e=0;e Auth section -> Sign in method tab.",t):"http"==i||"https"==i?e=Vt("This domain (%s) is not authorized to run this operation. Add it to the OAuth redirect domains list in the Firebase console -> Auth section -> Sign in method tab.",t):n="operation-not-supported-in-this-environment",E.call(this,n,e)}function Fo(t,n,e){E.call(this,t,e),(t=n||{}).Gb&&Hi(this,"email",t.Gb),t.da&&Hi(this,"phoneNumber",t.da),t.credential&&Hi(this,"credential",t.credential),t.Wb&&Hi(this,"tenantId",t.Wb)}function qo(t){if(t.code){var n=t.code||"";0==n.indexOf(S)&&(n=n.substring(S.length));var e={credential:Co(t),Wb:t.tenantId};if(t.email)e.Gb=t.email;else if(t.phoneNumber)e.da=t.phoneNumber;else if(!e.credential)return new E(n,t.message||void 0);return new Fo(n,e,t.message)}return null}function Ko(){}function Ho(t){return t.c||(t.c=t.b())}function Go(){}function Bo(t){if(!t.f&&"undefined"==typeof XMLHttpRequest&&"undefined"!=typeof ActiveXObject){for(var n=["MSXML2.XMLHTTP.6.0","MSXML2.XMLHTTP.3.0","MSXML2.XMLHTTP","Microsoft.XMLHTTP"],e=0;e=function t(n){return n.c?n.c:n.a?t(n.a):(D("Root logger has no level set."),null)}(this).value)for(d(n)&&(n=n()),t=new Yo(t,String(n),this.f),e&&(t.a=e),e=this;e;)e=e.a};var ea={},ia=null;function ra(t){var n;if(ia||(ia=new zo(""),ea[""]=ia,ia.c=ta),!(n=ea[t])){n=new zo(t);var e=t.lastIndexOf("."),i=t.substr(e+1);(e=ra(t.substr(0,e))).b||(e.b={}),e.b[i]=n,n.a=e,ea[t]=n}return n}function oa(t,n){t&&t.log(na,n,void 0)}function aa(t){this.f=t}function sa(t){me.call(this),this.s=t,this.readyState=ua,this.status=0,this.responseType=this.responseText=this.response=this.statusText="",this.onreadystatechange=null,this.i=new Headers,this.b=null,this.m="GET",this.g="",this.a=!1,this.h=ra("goog.net.FetchXmlHttp"),this.l=this.c=this.f=null}T(aa,Ko),aa.prototype.a=function(){return new sa(this.f)},aa.prototype.b=function(t){return function(){return t}}({}),T(sa,me);var ua=0;function ca(t){t.c.read().then(t.nc.bind(t)).catch(t.Sa.bind(t))}function ha(t,n){n&&t.f&&(t.status=t.f.status,t.statusText=t.f.statusText),t.readyState=4,t.f=null,t.c=null,t.l=null,la(t)}function la(t){t.onreadystatechange&&t.onreadystatechange.call(t)}function fa(t){me.call(this),this.headers=new Ae,this.D=t||null,this.c=!1,this.B=this.a=null,this.h=this.P=this.l="",this.f=this.O=this.i=this.N=!1,this.g=0,this.s=null,this.m=da,this.w=this.R=!1}(n=sa.prototype).open=function(t,n){if(this.readyState!=ua)throw this.abort(),Error("Error reopening a connection");this.m=t,this.g=n,this.readyState=1,la(this)},n.send=function(t){if(1!=this.readyState)throw this.abort(),Error("need to call open() first. ");this.a=!0;var n={headers:this.i,method:this.m,credentials:void 0,cache:void 0};t&&(n.body=t),this.s.fetch(new Request(this.g,n)).then(this.sc.bind(this),this.Sa.bind(this))},n.abort=function(){this.response=this.responseText="",this.i=new Headers,this.status=0,this.c&&this.c.cancel("Request was aborted."),1<=this.readyState&&this.a&&4!=this.readyState&&(this.a=!1,ha(this,!1)),this.readyState=ua},n.sc=function(t){this.a&&(this.f=t,this.b||(this.b=t.headers,this.readyState=2,la(this)),this.a&&(this.readyState=3,la(this),this.a&&("arraybuffer"===this.responseType?t.arrayBuffer().then(this.qc.bind(this),this.Sa.bind(this)):void 0!==s.ReadableStream&&"body"in t?(this.response=this.responseText="",this.c=t.body.getReader(),this.l=new TextDecoder,ca(this)):t.text().then(this.rc.bind(this),this.Sa.bind(this)))))},n.nc=function(t){if(this.a){var n=this.l.decode(t.value?t.value:new Uint8Array(0),{stream:!t.done});n&&(this.response=this.responseText+=n),t.done?ha(this,!0):la(this),3==this.readyState&&ca(this)}},n.rc=function(t){this.a&&(this.response=this.responseText=t,ha(this,!0))},n.qc=function(t){this.a&&(this.response=t,ha(this,!0))},n.Sa=function(t){var n=this.h;n&&n.log(Qo,"Failed to fetch url "+this.g,t instanceof Error?t:Error(t)),this.a&&ha(this,!0)},n.setRequestHeader=function(t,n){this.i.append(t,n)},n.getResponseHeader=function(t){return this.b?this.b.get(t.toLowerCase())||"":((t=this.h)&&t.log(Qo,"Attempting to get response header but no headers have been received for url: "+this.g,void 0),"")},n.getAllResponseHeaders=function(){if(!this.b){var t=this.h;return t&&t.log(Qo,"Attempting to get all response headers but no headers have been received for url: "+this.g,void 0),""}t=[];for(var n=this.b.entries(),e=n.next();!e.done;)e=e.value,t.push(e[0]+": "+e[1]),e=n.next();return t.join("\r\n")},T(fa,me);var da="";fa.prototype.b=ra("goog.net.XhrIo");var pa=/^https?$/i,va=["POST","PUT"];function ma(t,n,e,i,r){if(t.a)throw Error("[goog.net.XhrIo] Object is active with another request="+t.l+"; newUri="+n);e=e?e.toUpperCase():"GET",t.l=n,t.h="",t.P=e,t.N=!1,t.c=!0,t.a=t.D?t.D.a():jo.a(),t.B=t.D?Ho(t.D):Ho(jo),t.a.onreadystatechange=y(t.Sb,t);try{oa(t.b,ka(t,"Opening Xhr")),t.O=!0,t.a.open(e,String(n),!0),t.O=!1}catch(n){return oa(t.b,ka(t,"Error opening Xhr: "+n.message)),void ba(t,n)}n=i||"";var o=new Ae(t.headers);r&&function(t,n){if(t.forEach&&"function"==typeof t.forEach)t.forEach(n,void 0);else if(f(t)||"string"==typeof t)q(t,n,void 0);else for(var e=Ee(t),i=Te(t),r=i.length,o=0;on?null:"string"==typeof t?t.charAt(n):t[n]}(o.X()),i=s.FormData&&n instanceof s.FormData,!B(va,e)||r||i||o.set("Content-Type","application/x-www-form-urlencoded;charset=utf-8"),o.forEach((function(t,n){this.a.setRequestHeader(n,t)}),t),t.m&&(t.a.responseType=t.m),"withCredentials"in t.a&&t.a.withCredentials!==t.R&&(t.a.withCredentials=t.R);try{Ta(t),0=n.l&&n.cancel())}this.w?this.w.call(this.s,this):this.u=!0,this.a||(t=new Da(this),_a(this),Na(this,!1,t))}},Sa.prototype.m=function(t,n){this.i=!1,Na(this,t,n)},Sa.prototype.then=function(t,n,e){var i,r,o=new yn((function(t,n){i=t,r=n}));return Oa(this,i,(function(t){t instanceof Da?o.cancel():r(t)})),o.then(t,n,e)},Sa.prototype.$goog_Thenable=!0,T(Ca,P),Ca.prototype.message="Deferred has already fired",Ca.prototype.name="AlreadyCalledError",T(Da,P),Da.prototype.message="Deferred was canceled",Da.prototype.name="CanceledError",La.prototype.c=function(){throw delete Ma[this.a],this.b};var Ma={};function xa(t){var n,e=document,i=Tt(t).toString(),r=ln(document,"SCRIPT"),o={Tb:r,Ka:void 0},a=new Sa(o);return n=window.setTimeout((function(){Ua(r,!0);var t=new qa(Fa,"Timeout reached for loading script "+i);_a(a),Na(a,!1,t)}),5e3),o.Ka=n,r.onload=r.onreadystatechange=function(){r.readyState&&"loaded"!=r.readyState&&"complete"!=r.readyState||(Ua(r,!1,n),_a(a),Na(a,!0,null))},r.onerror=function(){Ua(r,!0,n);var t=new qa(Va,"Error while loading script "+i);_a(a),Na(a,!1,t)},pt(o={},{type:"text/javascript",charset:"UTF-8"}),an(r,o),function(t,n){vt(t,"HTMLScriptElement"),t.src=Tt(n),null===c&&(c=(n=(n=s.document).querySelector&&n.querySelector("script[nonce]"))&&(n=n.nonce||n.getAttribute("nonce"))&&u.test(n)?n:""),(n=c)&&t.setAttribute("nonce",n)}(r,t),function(t){var n;return(n=(t||document).getElementsByTagName("HEAD"))&&0!=n.length?n[0]:t.documentElement}(e).appendChild(r),a}function ja(){if(this&&this.Tb){var t=this.Tb;t&&"SCRIPT"==t.tagName&&Ua(t,!0,this.Ka)}}function Ua(t,n,e){null!=e&&s.clearTimeout(e),t.onload=h,t.onerror=h,t.onreadystatechange=h,n&&window.setTimeout((function(){t&&t.parentNode&&t.parentNode.removeChild(t)}),0)}var Va=0,Fa=1;function qa(t,n){var e="Jsloader error (code #"+t+")";n&&(e+=": "+n),P.call(this,e),this.code=t}function Ka(t){this.f=t}function Ha(n,e,i){if(this.c=n,n=e||{},this.u=n.secureTokenEndpoint||"https://securetoken.googleapis.com/v1/token",this.m=n.secureTokenTimeout||Wa,this.g=ft(n.secureTokenHeaders||Xa),this.h=n.firebaseEndpoint||"https://www.googleapis.com/identitytoolkit/v3/relyingparty/",this.l=n.identityPlatformEndpoint||"https://identitytoolkit.googleapis.com/v2/",this.i=n.firebaseTimeout||Ja,this.a=ft(n.firebaseHeaders||Ya),i&&(this.a["X-Client-Version"]=i,this.g["X-Client-Version"]=i),i="Node"==vi(),!(i=s.XMLHttpRequest||i&&t.INTERNAL.node&&t.INTERNAL.node.XMLHttpRequest)&&!pi())throw new E("internal-error","The XMLHttpRequest compatibility library was not found.");this.f=void 0,pi()?this.f=new aa(self):mi()?this.f=new Ka(i):this.f=new Wo,this.b=null}T(qa,P),T(Ka,Ko),Ka.prototype.a=function(){return new this.f},Ka.prototype.b=function(){return{}};var Ga,Ba="idToken",Wa=new Mi(3e4,6e4),Xa={"Content-Type":"application/x-www-form-urlencoded"},Ja=new Mi(3e4,6e4),Ya={"Content-Type":"application/json"};function za(t,n){n?t.a["X-Firebase-Locale"]=n:delete t.a["X-Firebase-Locale"]}function $a(t,n){n?(t.a["X-Client-Version"]=n,t.g["X-Client-Version"]=n):(delete t.a["X-Client-Version"],delete t.g["X-Client-Version"])}function Za(t,n,e,i,r,o,a){(function(){var t=Ti();return!((t=yi(t)!=bi?null:(t=t.match(/\sChrome\/(\d+)/i))&&2==t.length?parseInt(t[1],10):null)&&30>t)&&(!Bt||!tn||9n;n++){r=0|e[n-15],i=0|e[n-2];var o=(0|e[n-16])+((r>>>7|r<<25)^(r>>>18|r<<14)^r>>>3)|0,a=(0|e[n-7])+((i>>>17|i<<15)^(i>>>19|i<<13)^i>>>10)|0;e[n]=o+a|0}i=0|t.a[0],r=0|t.a[1];var s=0|t.a[2],u=0|t.a[3],c=0|t.a[4],h=0|t.a[5],l=0|t.a[6];for(o=0|t.a[7],n=0;64>n;n++){var f=((i>>>2|i<<30)^(i>>>13|i<<19)^(i>>>22|i<<10))+(i&r^i&s^r&s)|0;a=(o=o+((c>>>6|c<<26)^(c>>>11|c<<21)^(c>>>25|c<<7))|0)+((a=(a=c&h^~c&l)+(0|$u[n])|0)+(0|e[n])|0)|0,o=l,l=h,h=c,c=u+a|0,u=s,s=r,r=i,i=a+f|0}t.a[0]=t.a[0]+i|0,t.a[1]=t.a[1]+r|0,t.a[2]=t.a[2]+s|0,t.a[3]=t.a[3]+u|0,t.a[4]=t.a[4]+c|0,t.a[5]=t.a[5]+h|0,t.a[6]=t.a[6]+l|0,t.a[7]=t.a[7]+o|0}function sc(t,n,e){void 0===e&&(e=n.length);var i=0,r=t.c;if("string"==typeof n)for(;i=o&&o==(0|o)))throw Error("message must be a byte array");t.f[r++]=o,r==t.b&&(ac(t),r=0)}}t.c=r,t.g+=e}tc.prototype.reset=function(){this.g=this.c=0,this.a=s.Int32Array?new Int32Array(this.h):Y(this.h)};var uc=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298];function cc(){tc.call(this,8,hc)}T(cc,tc);var hc=[1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225];function lc(t,n,e,i,r){this.u=t,this.i=n,this.l=e,this.m=i||null,this.s=r||null,this.h=n+":"+e,this.w=new Qu,this.g=new zu(this.h),this.f=null,this.b=[],this.a=this.c=null}function fc(t){return new E("invalid-cordova-configuration",t)}function dc(t){var n=new cc;sc(n,t),t=[];var e=8*n.g;56>n.c?sc(n,oc,56-n.c):sc(n,oc,n.b-(n.c-56));for(var i=63;56<=i;i--)n.f[i]=255&e,e/=256;for(ac(n),i=e=0;i>r&255;return function(t){return H(t,(function(t){return 1<(t=t.toString(16)).length?t:"0"+t})).join("")}(t)}function pc(t,n){for(var e=0;et.f&&(t.a=t.f),n)}(n,e)).then((function(){return function(){var t=s.document,n=null;return xi()||!t?Sn():new yn((function(e){n=function(){xi()&&(t.removeEventListener("visibilitychange",n,!1),e())},t.addEventListener("visibilitychange",n,!1)})).o((function(e){throw t.removeEventListener("visibilitychange",n,!1),e}))}()})).then((function(){return n.h()})).then((function(){t(n,!0)})).o((function(e){n.i(e)&&t(n,!1)}))}(this,!0)},nh.prototype.stop=function(){this.b&&(this.b.cancel(),this.b=null)},eh.prototype.v=function(){return{apiKey:this.c.c,refreshToken:this.a,accessToken:this.b&&this.b.toString(),expirationTime:ih(this)}},eh.prototype.getToken=function(t){return t=!!t,this.b&&!this.a?Nn(new E("user-token-expired")):t||!this.b||I()>ih(this)-3e4?this.a?oh(this,{grant_type:"refresh_token",refresh_token:this.a}):Sn(null):Sn({accessToken:this.b.toString(),refreshToken:this.a})},ah.prototype.v=function(){return{lastLoginAt:this.b,createdAt:this.a}},T(uh,me),uh.prototype.va=function(t){this.oa=t,za(this.a,t)},uh.prototype.ja=function(){return this.oa},uh.prototype.Ea=function(){return Y(this.W)},uh.prototype.Ma=function(){this.B.b&&(this.B.stop(),this.B.start())},Hi(uh.prototype,"providerId","firebase"),(n=uh.prototype).reload=function(){var t=this;return Lh(this,wh(this).then((function(){return Sh(t).then((function(){return mh(t)})).then(yh)})))},n.mc=function(t){return this.I(t).then((function(t){return new Hc(t)}))},n.I=function(t){var n=this;return Lh(this,wh(this).then((function(){return n.b.getToken(t)})).then((function(t){if(!t)throw new E("internal-error");return t.accessToken!=n.xa&&(vh(n,t.accessToken),n.dispatchEvent(new Zc("tokenChanged"))),Ah(n,"refreshToken",t.refreshToken),t.accessToken})))},n.Ic=function(t){if(!(t=t.users)||!t.length)throw new E("internal-error");bh(this,{uid:(t=t[0]).localId,displayName:t.displayName,photoURL:t.photoUrl,email:t.email,emailVerified:!!t.emailVerified,phoneNumber:t.phoneNumber,lastLoginAt:t.lastLoginAt,createdAt:t.createdAt,tenantId:t.tenantId});for(var n=function(t){return(t=t.providerUserInfo)&&t.length?H(t,(function(t){return new sh(t.rawId,t.providerId,t.email,t.displayName,t.photoUrl,t.phoneNumber)})):[]}(t),e=0;ethis.s&&(this.s=0),0==this.s&&el(this)&&ph(el(this)),this.removeAuthTokenListener(t)},n.addAuthTokenListener=function(t){var n=this;this.m.push(t),ol(this,this.h.then((function(){n.l||B(n.m,t)&&t(il(n))})))},n.removeAuthTokenListener=function(t){X(this.m,(function(n){return n==t}))},n.delete=function(){this.l=!0;for(var t=0;tr||r>=Rl.length)throw new E("internal-error","Argument validator received an unsupported number of arguments.");e=Rl[r],i=(i?"":e+" argument ")+(n.name?'"'+n.name+'" ':"")+"must be "+n.J+".";break t}i=null}}if(i)throw new E("argument-error",t+" failed: "+i)}(n=wl.prototype).Ga=function(){var t=this;return this.f?this.f:this.f=Sl(this,Sn().then((function(){if(Si()&&!pi())return li();throw new E("operation-not-supported-in-this-environment","RecaptchaVerifier is only supported in a browser HTTP/HTTPS environment.")})).then((function(){return t.m.g(t.w())})).then((function(n){return t.g=n,Js(t.s,Ps,{})})).then((function(n){t.a[El]=n.recaptchaSiteKey})).o((function(n){throw t.f=null,n})))},n.render=function(){Nl(this);var t=this;return Sl(this,this.Ga().then((function(){if(null===t.c){var n=t.u;if(!t.i){var e=on(n);n=function(t,n,e){var i=arguments,r=document,o=String(i[0]),a=i[1];if(!rn&&a&&(a.name||a.type)){if(o=["<",o],a.name&&o.push(' name="',Ft(a.name),'"'),a.type){o.push(' type="',Ft(a.type),'"');var s={};pt(s,a),delete s.type,a=s}o.push(">"),o=o.join("")}return o=ln(r,o),a&&("string"==typeof a?o.className=a:Array.isArray(a)?o.className=a.join(" "):an(o,a)),2{const s=e.reduce((e,s,r)=>e+(t=>{if(t instanceof C)return t.cssText;if("number"==typeof t)return t;throw new Error(`Value passed to 'css' function must be a 'css' function result: ${t}. Use 'unsafeCSS' to pass non-literal values, but\n take care to ensure page security.`)})(s)+t[r+1],t[0]);return new C(s,v)}; +const b="adoptedStyleSheets"in Document.prototype&&"replace"in CSSStyleSheet.prototype,v=Symbol();class C{constructor(t,e){if(e!==v)throw new Error("CSSResult is not constructable. Use `unsafeCSS` or `2학기` instead.");this.cssText=t}get styleSheet(){return void 0===this._styleSheet&&(b?(this._styleSheet=new CSSStyleSheet,this._styleSheet.replaceSync(this.cssText)):this._styleSheet=null),this._styleSheet}toString(){return this.cssText}}const U=(t,...e)=>{const s=e.reduce((e,s,r)=>e+(t=>{if(t instanceof C)return t.cssText;if("number"==typeof t)return t;throw new Error(`Value passed to 'css' function must be a 'css' function result: ${t}. Use 'unsafeCSS' to pass non-literal values, but\n take care to ensure page security.`)})(s)+t[r+1],t[0]);return new C(s,v)}; /** * @license * Copyright (c) 2017 The Polymer Project Authors. All rights reserved. diff --git a/web_modules/lit-html.js b/web_modules/lit-html.js index 2f5f935..7150c4f 100644 --- a/web_modules/lit-html.js +++ b/web_modules/lit-html.js @@ -1,2 +1,2 @@ export{h as html,r as render,s as svg}from"./common/lit-html-6bb77aec.js"; -//# sourceMappingURL=lit-html.js.map +//# sourceMappingURL=lit-1학기.js.map