├── LICENSE ├── README.md ├── package.json ├── src ├── app.ts ├── controllers │ ├── image_randomization.ts │ └── search_controller.ts ├── routes │ ├── hentai │ │ └── search.ts │ ├── home.ts │ └── porn │ │ └── search.ts └── utils │ └── scrapers │ ├── pornpics │ └── index.ts │ ├── pornwhite │ ├── index.ts │ ├── scraper.ts │ └── search.ts │ ├── rule34 │ ├── images.ts │ └── index.ts │ └── sfmcompile │ ├── index.ts │ └── pages.ts ├── tags.txt ├── tsconfig.json └── yarn.lock /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2023 Baby 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |

2 | 3 | 4 | 5 | 7 | 8 |

9 | 10 | # nsfw-api 11 | an api to "generate" nsfw images randomly. 12 | 13 | ## to search hentai images or videos 14 | **/h/image/search?q=** 15 | **/h/video/search?q=** 16 | 17 | ## to search real videos 18 | **/r/video/search?q=** 19 | 20 | ## 110 types are also available in the route 21 | **/r/image/< tag >** 22 | 23 | tags are available at `tags.txt` 24 | 25 | # in the air is like: 26 | https://nsfw-api-p302.onrender.com/ 27 | 28 | 29 | ## deployment guide 30 | ```bash 31 | cd nsfw-api2 32 | yarn 33 | tsc 34 | node dist/app.js 35 | ``` 36 | 37 | yes, this is the same code as before, it was taken down and I reuploaded it. 38 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": { 3 | "@types/node": "^20.10.6", 4 | "axios": "^1.6.3", 5 | "body-parser": "^1.20.2", 6 | "cheerio": "^1.0.0-rc.12", 7 | "express": "^4.18.2", 8 | "lodash": "^4.17.21" 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/app.ts: -------------------------------------------------------------------------------- 1 | import * as express from "express"; 2 | import * as bodyParser from "body-parser"; 3 | import home from "./routes/home"; 4 | import hentaiSearch from "./routes/hentai/search"; 5 | import pornSearch from "./routes/porn/search"; 6 | const app = express(); 7 | app.use(bodyParser.json()); 8 | 9 | app.use("/", 10 | hentaiSearch, 11 | pornSearch, 12 | home 13 | ); 14 | 15 | app.listen(3000, () => { 16 | console.log("running"); 17 | }); 18 | -------------------------------------------------------------------------------- /src/controllers/image_randomization.ts: -------------------------------------------------------------------------------- 1 | import {readdir, readFileSync} from "fs"; 2 | import {sample} from "lodash"; 3 | 4 | export const imageRandomization = (folder, response) => { 5 | readdir(folder, (err, files) => { 6 | if(err) throw err; 7 | response.contentType('image/jpeg'); 8 | const randomImage = sample(files); 9 | response.send(readFileSync(`${folder}/${randomImage}`)); 10 | }); 11 | } -------------------------------------------------------------------------------- /src/controllers/search_controller.ts: -------------------------------------------------------------------------------- 1 | import {scraper} from "../utils/scrapers/rule34/index"; 2 | 3 | export const surveyController = (search) => { 4 | let data: any[] = [] 5 | const awaitPromise = () => { 6 | return new Promise(async(resolve) => { 7 | data = await scraper(search); 8 | resolve(data); 9 | }); 10 | } 11 | const main = async() => { 12 | try{ 13 | await awaitPromise(); 14 | return data; 15 | }catch{ 16 | return {"error": 10060}; 17 | } 18 | } 19 | return main() 20 | } -------------------------------------------------------------------------------- /src/routes/hentai/search.ts: -------------------------------------------------------------------------------- 1 | import {surveyController} from "../../controllers/search_controller"; 2 | import {searchVideos} from "../../utils/scrapers/sfmcompile/index"; 3 | import {Router, requests, response} from "express"; 4 | const routes = Router(); 5 | 6 | routes.get("/h/image/search", async(request, response) => { 7 | const resp = await surveyController(request.query.q) 8 | if(resp[0]){ 9 | response.send(resp); 10 | }else{ 11 | response.send({"error": "not found"}); 12 | } 13 | }); 14 | routes.get("/h/video/search", async(request, response) => { 15 | const resp = await searchVideos(request.query.q) 16 | if(resp[0]){ 17 | response.send(resp); 18 | }else{ 19 | response.send({"error": "not found"}); 20 | } 21 | }); 22 | 23 | export default routes; 24 | -------------------------------------------------------------------------------- /src/routes/home.ts: -------------------------------------------------------------------------------- 1 | import {Router, requests, response} from "express"; 2 | const routes = Router() 3 | 4 | routes.get("/", async(request, response) => { 5 | response.send({"response":"see the routes in : https://github.com/Swag666baby/nsfw-api"}) 6 | }); 7 | 8 | export default routes; -------------------------------------------------------------------------------- /src/routes/porn/search.ts: -------------------------------------------------------------------------------- 1 | import {searchPornImages} from "../../utils/scrapers/pornpics"; 2 | import {searchPornVideos} from "../../utils/scrapers/pornwhite"; 3 | import {Router, requests, response} from "express"; 4 | const routes = Router(); 5 | 6 | routes.get("/r/image/:tag", async(request, response) => { 7 | const resp = await searchPornImages(request.params.tag) 8 | if(resp[0]){ 9 | response.send(resp); 10 | }else{ 11 | response.send({"error": "tag not found. see the documentation at: https://github.com/Swag666baby/nsfw-api"}); 12 | } 13 | }); 14 | routes.get("/r/video/search", async(request, response) => { 15 | const resp = await searchPornVideos(request.query.q) 16 | if(resp[0]){ 17 | response.send(resp); 18 | }else{ 19 | response.send({"error": "tag not found. see the documentation at: https://github.com/Swag666baby/nsfw-api"}); 20 | } 21 | }); 22 | export default routes; 23 | -------------------------------------------------------------------------------- /src/utils/scrapers/pornpics/index.ts: -------------------------------------------------------------------------------- 1 | import {load} from "cheerio"; 2 | import { default as axios} from "axios"; 3 | 4 | export const searchPornImages = async(query) => { 5 | let data: any[] = [] 6 | try{ 7 | const request = await axios.get(`https://www.pornpics.com/${query}/`); 8 | let $ = load(request.data); 9 | 10 | $(".rel-link img").map((index, element) => { 11 | data.push(`${$(element).attr("data-src")}`); 12 | }); 13 | return data 14 | }catch{ 15 | return [] 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/utils/scrapers/pornwhite/index.ts: -------------------------------------------------------------------------------- 1 | import {search} from "./search"; 2 | import {scraper} from "./scraper"; 3 | 4 | export const searchPornVideos = async(query) => { 5 | const images: any[] = await search(query); 6 | let data: any[] = []; 7 | 8 | for(let image of images){ 9 | data.push(await scraper(image)) 10 | } 11 | return data; 12 | } -------------------------------------------------------------------------------- /src/utils/scrapers/pornwhite/scraper.ts: -------------------------------------------------------------------------------- 1 | import {load} from "cheerio"; 2 | import axios from "axios"; 3 | 4 | export const scraper = async(url) => { 5 | const response = await axios.get(url); 6 | let $ = load(`${response.data}`); 7 | let data: any[] = [] 8 | const images = $(".player meta").map((index, element) => { 9 | data.push(`${$(element).attr("content")}`); 10 | }); 11 | 12 | return { 13 | "title": data[0], 14 | "thumbnail": data[2], 15 | "video": data[4], 16 | "date": data[5], 17 | "url": data[6], 18 | } 19 | } -------------------------------------------------------------------------------- /src/utils/scrapers/pornwhite/search.ts: -------------------------------------------------------------------------------- 1 | import {load} from "cheerio"; 2 | import axios from "axios"; 3 | 4 | export const search = async(search) => { 5 | 6 | const response = await axios.get(`https://www.pornwhite.com/search/?q=${search}`); 7 | let $ = load(`${response.data}`); 8 | let data: any[] = [] 9 | const images = $("a").map((index, element) => { 10 | let image = `${$(element).attr("href")}` 11 | if(image?.startsWith("https://www.pornwhite.com/videos/")){ 12 | data.push(image); 13 | } 14 | }); 15 | 16 | return data; 17 | } -------------------------------------------------------------------------------- /src/utils/scrapers/rule34/images.ts: -------------------------------------------------------------------------------- 1 | import {load} from "cheerio"; 2 | import {default as axios} from "axios"; 3 | 4 | export const resolvedImages = async(urls) => { 5 | let resolvedImages: any[] = [] 6 | 7 | for(let url of urls){ 8 | const headers = { 9 | "User-Agent": "Mozilla/5.0 (Linux; Android 12; SM-S906N Build/QP1A.190711.020; wv) AppleWebKit/537.36 (KHTML, como Gecko) Versão/4.0 Chrome/80.0.3987.119 Mobile Safari/537.36", 10 | } 11 | const response = await axios.get(url, {headers}); 12 | let $ = load(`${response.data}`); 13 | let data: any[] = [] 14 | $(".container img").map((index, element) => { 15 | const image = $(element).attr("src") 16 | if(!image?.endsWith(".svg")){ 17 | resolvedImages.push(image); 18 | } 19 | }); 20 | } 21 | return resolvedImages; 22 | } -------------------------------------------------------------------------------- /src/utils/scrapers/rule34/index.ts: -------------------------------------------------------------------------------- 1 | import {load} from "cheerio"; 2 | import {resolvedImages} from "./images"; 3 | import axios from "axios"; 4 | 5 | export const scraper = async(search) => { 6 | const headers = { 7 | "User-Agent": "Mozilla/5.0 (Linux; Android 12; SM-S906N Build/QP1A.190711.020; wv) AppleWebKit/537.36 (KHTML, como Gecko) Versão/4.0 Chrome/80.0.3987.119 Mobile Safari/537.36", 8 | } 9 | const response = await axios.get(`https://www.rule34.us/index.php?r=posts/index&q=${search}`, {headers}); 10 | let $ = load(`${response.data}`); 11 | let data: any[] = [] 12 | const images = $(".thumbail-container a").map((index, element) => { 13 | data.push(`${$(element).attr("href")}`); 14 | }); 15 | return resolvedImages(data); 16 | } -------------------------------------------------------------------------------- /src/utils/scrapers/sfmcompile/index.ts: -------------------------------------------------------------------------------- 1 | import {pages} from "./pages"; 2 | import {load} from "cheerio"; 3 | import {default as axios} from "axios"; 4 | 5 | export const searchVideos = async(query) => { 6 | const pageUrls = await pages(query) 7 | let data: any[] = [] 8 | for(let page of pageUrls){ 9 | const response = await axios.get(page) 10 | const $ = load(response.data) 11 | 12 | $(".wp-video-shortcode source").map((index, element) => { 13 | var url = $(element).attr("src") 14 | if(url?.endsWith(".mp4")){ 15 | data.push(url) 16 | } 17 | }); 18 | } 19 | return data; 20 | } -------------------------------------------------------------------------------- /src/utils/scrapers/sfmcompile/pages.ts: -------------------------------------------------------------------------------- 1 | import {load} from "cheerio"; 2 | import {default as axios} from "axios"; 3 | 4 | export const pages = async(query) => { 5 | const response = await axios.get(`https://sfmcompile.club/?s=${query}`) 6 | const $ = load(response.data) 7 | let pages: any[] = [] 8 | 9 | $("a").map((index, element) => { 10 | var url = $(element).attr("href") 11 | if(url?.includes("/page/")){ 12 | pages.push(url) 13 | } 14 | }); 15 | return pages 16 | } -------------------------------------------------------------------------------- /tags.txt: -------------------------------------------------------------------------------- 1 | Amateur 2 | Anal 3 | Anal-Gape 4 | Arab 5 | Argentina 6 | Asian 7 | Ass 8 | Ass-Licking 9 | Asshole 10 | Babe 11 | BBC 12 | BBW 13 | BDSM 14 | Big-Tits 15 | Beach 16 | Beautiful 17 | Big-Clit 18 | Big-Cock 19 | Big-Tits 20 | Bikini 21 | Blonde 22 | Blowjob 23 | Brazilian 24 | Ebony 25 | Facial 26 | Feet 27 | Anal 28 | Gangbang 29 | Gay 30 | Glasses 31 | Gloryhole 32 | Goth 33 | Granny 34 | Gym 35 | Hairy 36 | Handjob 37 | Hardcore 38 | High-Heels 39 | Homemade 40 | Indian 41 | Interracial 42 | Japanese 43 | Jeans 44 | Korean 45 | Pussy 46 | Ladyboy 47 | Latina 48 | Legs 49 | Brunette 50 | Bukkake 51 | Cameltoe 52 | Casting 53 | Chinese 54 | Chubby 55 | Colombian 56 | Cosplay 57 | Teen 58 | Cougar 59 | Cowgirl 60 | Creampie 61 | Cuckold 62 | Cum-In-Mouth 63 | Cum-In-Pussy 64 | Cumshot 65 | Curvy 66 | Cute 67 | Deepthroat 68 | Dildo 69 | Doggy-Style 70 | Double-Penetration 71 | Dress 72 | Tall 73 | Tattoo 74 | Teacher 75 | Teen 76 | Thai 77 | Thong 78 | Threesome 79 | Upskirt 80 | Venezuela 81 | Vintage 82 | Webcams 83 | White 84 | Wife 85 | Yoga 86 | Yoga-Pants 87 | Redhead 88 | Russian 89 | Saggy-Tits 90 | Sandals 91 | Schoolgirl 92 | Secretary 93 | Selfie 94 | Shemale 95 | Short-Hair 96 | Latina 97 | Shorts 98 | Shower 99 | Skinny 100 | Skirt 101 | Solo 102 | SSBBW 103 | Stockings 104 | Tall 105 | Tattoo 106 | Teacher 107 | Teen 108 | Thai 109 | Thong 110 | Threesome -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es2015", 4 | "module": "commonjs", 5 | "outDir": "./dist", 6 | "rootDir": "src" 7 | }, 8 | "include": [ 9 | "src/**/*.ts" 10 | ], 11 | "exclude": [ 12 | "node_modules" 13 | ], 14 | "scripts": { 15 | "start": "src/index.js" 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@types/node@^20.10.6": 6 | version "20.10.6" 7 | resolved "https://registry.yarnpkg.com/@types/node/-/node-20.10.6.tgz#a3ec84c22965802bf763da55b2394424f22bfbb5" 8 | integrity sha512-Vac8H+NlRNNlAmDfGUP7b5h/KA+AtWIzuXy0E6OyP8f1tCLYAtPvKRRDJjAPqhpCb0t6U2j7/xqAuLEebW2kiw== 9 | dependencies: 10 | undici-types "~5.26.4" 11 | 12 | accepts@~1.3.8: 13 | version "1.3.8" 14 | resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" 15 | integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== 16 | dependencies: 17 | mime-types "~2.1.34" 18 | negotiator "0.6.3" 19 | 20 | array-flatten@1.1.1: 21 | version "1.1.1" 22 | resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" 23 | integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== 24 | 25 | asynckit@^0.4.0: 26 | version "0.4.0" 27 | resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" 28 | integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== 29 | 30 | axios@^1.6.3: 31 | version "1.6.3" 32 | resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.3.tgz#7f50f23b3aa246eff43c54834272346c396613f4" 33 | integrity sha512-fWyNdeawGam70jXSVlKl+SUNVcL6j6W79CuSIPfi6HnDUmSCH6gyUys/HrqHeA/wU0Az41rRgean494d0Jb+ww== 34 | dependencies: 35 | follow-redirects "^1.15.0" 36 | form-data "^4.0.0" 37 | proxy-from-env "^1.1.0" 38 | 39 | body-parser@1.20.1: 40 | version "1.20.1" 41 | resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.1.tgz#b1812a8912c195cd371a3ee5e66faa2338a5c668" 42 | integrity sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw== 43 | dependencies: 44 | bytes "3.1.2" 45 | content-type "~1.0.4" 46 | debug "2.6.9" 47 | depd "2.0.0" 48 | destroy "1.2.0" 49 | http-errors "2.0.0" 50 | iconv-lite "0.4.24" 51 | on-finished "2.4.1" 52 | qs "6.11.0" 53 | raw-body "2.5.1" 54 | type-is "~1.6.18" 55 | unpipe "1.0.0" 56 | 57 | body-parser@^1.20.2: 58 | version "1.20.2" 59 | resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.2.tgz#6feb0e21c4724d06de7ff38da36dad4f57a747fd" 60 | integrity sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA== 61 | dependencies: 62 | bytes "3.1.2" 63 | content-type "~1.0.5" 64 | debug "2.6.9" 65 | depd "2.0.0" 66 | destroy "1.2.0" 67 | http-errors "2.0.0" 68 | iconv-lite "0.4.24" 69 | on-finished "2.4.1" 70 | qs "6.11.0" 71 | raw-body "2.5.2" 72 | type-is "~1.6.18" 73 | unpipe "1.0.0" 74 | 75 | boolbase@^1.0.0: 76 | version "1.0.0" 77 | resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" 78 | integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== 79 | 80 | bytes@3.1.2: 81 | version "3.1.2" 82 | resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" 83 | integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== 84 | 85 | call-bind@^1.0.0: 86 | version "1.0.5" 87 | resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.5.tgz#6fa2b7845ce0ea49bf4d8b9ef64727a2c2e2e513" 88 | integrity sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ== 89 | dependencies: 90 | function-bind "^1.1.2" 91 | get-intrinsic "^1.2.1" 92 | set-function-length "^1.1.1" 93 | 94 | cheerio-select@^2.1.0: 95 | version "2.1.0" 96 | resolved "https://registry.yarnpkg.com/cheerio-select/-/cheerio-select-2.1.0.tgz#4d8673286b8126ca2a8e42740d5e3c4884ae21b4" 97 | integrity sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g== 98 | dependencies: 99 | boolbase "^1.0.0" 100 | css-select "^5.1.0" 101 | css-what "^6.1.0" 102 | domelementtype "^2.3.0" 103 | domhandler "^5.0.3" 104 | domutils "^3.0.1" 105 | 106 | cheerio@^1.0.0-rc.12: 107 | version "1.0.0-rc.12" 108 | resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.12.tgz#788bf7466506b1c6bf5fae51d24a2c4d62e47683" 109 | integrity sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q== 110 | dependencies: 111 | cheerio-select "^2.1.0" 112 | dom-serializer "^2.0.0" 113 | domhandler "^5.0.3" 114 | domutils "^3.0.1" 115 | htmlparser2 "^8.0.1" 116 | parse5 "^7.0.0" 117 | parse5-htmlparser2-tree-adapter "^7.0.0" 118 | 119 | combined-stream@^1.0.8: 120 | version "1.0.8" 121 | resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" 122 | integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== 123 | dependencies: 124 | delayed-stream "~1.0.0" 125 | 126 | content-disposition@0.5.4: 127 | version "0.5.4" 128 | resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" 129 | integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== 130 | dependencies: 131 | safe-buffer "5.2.1" 132 | 133 | content-type@~1.0.4, content-type@~1.0.5: 134 | version "1.0.5" 135 | resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" 136 | integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== 137 | 138 | cookie-signature@1.0.6: 139 | version "1.0.6" 140 | resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" 141 | integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== 142 | 143 | cookie@0.5.0: 144 | version "0.5.0" 145 | resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" 146 | integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== 147 | 148 | css-select@^5.1.0: 149 | version "5.1.0" 150 | resolved "https://registry.yarnpkg.com/css-select/-/css-select-5.1.0.tgz#b8ebd6554c3637ccc76688804ad3f6a6fdaea8a6" 151 | integrity sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg== 152 | dependencies: 153 | boolbase "^1.0.0" 154 | css-what "^6.1.0" 155 | domhandler "^5.0.2" 156 | domutils "^3.0.1" 157 | nth-check "^2.0.1" 158 | 159 | css-what@^6.1.0: 160 | version "6.1.0" 161 | resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4" 162 | integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== 163 | 164 | debug@2.6.9: 165 | version "2.6.9" 166 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" 167 | integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== 168 | dependencies: 169 | ms "2.0.0" 170 | 171 | define-data-property@^1.1.1: 172 | version "1.1.1" 173 | resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.1.tgz#c35f7cd0ab09883480d12ac5cb213715587800b3" 174 | integrity sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ== 175 | dependencies: 176 | get-intrinsic "^1.2.1" 177 | gopd "^1.0.1" 178 | has-property-descriptors "^1.0.0" 179 | 180 | delayed-stream@~1.0.0: 181 | version "1.0.0" 182 | resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" 183 | integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== 184 | 185 | depd@2.0.0: 186 | version "2.0.0" 187 | resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" 188 | integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== 189 | 190 | destroy@1.2.0: 191 | version "1.2.0" 192 | resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" 193 | integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== 194 | 195 | dom-serializer@^2.0.0: 196 | version "2.0.0" 197 | resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-2.0.0.tgz#e41b802e1eedf9f6cae183ce5e622d789d7d8e53" 198 | integrity sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg== 199 | dependencies: 200 | domelementtype "^2.3.0" 201 | domhandler "^5.0.2" 202 | entities "^4.2.0" 203 | 204 | domelementtype@^2.3.0: 205 | version "2.3.0" 206 | resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" 207 | integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== 208 | 209 | domhandler@^5.0.2, domhandler@^5.0.3: 210 | version "5.0.3" 211 | resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-5.0.3.tgz#cc385f7f751f1d1fc650c21374804254538c7d31" 212 | integrity sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w== 213 | dependencies: 214 | domelementtype "^2.3.0" 215 | 216 | domutils@^3.0.1: 217 | version "3.1.0" 218 | resolved "https://registry.yarnpkg.com/domutils/-/domutils-3.1.0.tgz#c47f551278d3dc4b0b1ab8cbb42d751a6f0d824e" 219 | integrity sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA== 220 | dependencies: 221 | dom-serializer "^2.0.0" 222 | domelementtype "^2.3.0" 223 | domhandler "^5.0.3" 224 | 225 | ee-first@1.1.1: 226 | version "1.1.1" 227 | resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" 228 | integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== 229 | 230 | encodeurl@~1.0.2: 231 | version "1.0.2" 232 | resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" 233 | integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== 234 | 235 | entities@^4.2.0, entities@^4.4.0: 236 | version "4.5.0" 237 | resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" 238 | integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== 239 | 240 | escape-html@~1.0.3: 241 | version "1.0.3" 242 | resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" 243 | integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== 244 | 245 | etag@~1.8.1: 246 | version "1.8.1" 247 | resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" 248 | integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== 249 | 250 | express@^4.18.2: 251 | version "4.18.2" 252 | resolved "https://registry.yarnpkg.com/express/-/express-4.18.2.tgz#3fabe08296e930c796c19e3c516979386ba9fd59" 253 | integrity sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ== 254 | dependencies: 255 | accepts "~1.3.8" 256 | array-flatten "1.1.1" 257 | body-parser "1.20.1" 258 | content-disposition "0.5.4" 259 | content-type "~1.0.4" 260 | cookie "0.5.0" 261 | cookie-signature "1.0.6" 262 | debug "2.6.9" 263 | depd "2.0.0" 264 | encodeurl "~1.0.2" 265 | escape-html "~1.0.3" 266 | etag "~1.8.1" 267 | finalhandler "1.2.0" 268 | fresh "0.5.2" 269 | http-errors "2.0.0" 270 | merge-descriptors "1.0.1" 271 | methods "~1.1.2" 272 | on-finished "2.4.1" 273 | parseurl "~1.3.3" 274 | path-to-regexp "0.1.7" 275 | proxy-addr "~2.0.7" 276 | qs "6.11.0" 277 | range-parser "~1.2.1" 278 | safe-buffer "5.2.1" 279 | send "0.18.0" 280 | serve-static "1.15.0" 281 | setprototypeof "1.2.0" 282 | statuses "2.0.1" 283 | type-is "~1.6.18" 284 | utils-merge "1.0.1" 285 | vary "~1.1.2" 286 | 287 | finalhandler@1.2.0: 288 | version "1.2.0" 289 | resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.2.0.tgz#7d23fe5731b207b4640e4fcd00aec1f9207a7b32" 290 | integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg== 291 | dependencies: 292 | debug "2.6.9" 293 | encodeurl "~1.0.2" 294 | escape-html "~1.0.3" 295 | on-finished "2.4.1" 296 | parseurl "~1.3.3" 297 | statuses "2.0.1" 298 | unpipe "~1.0.0" 299 | 300 | follow-redirects@^1.15.0: 301 | version "1.15.4" 302 | resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.4.tgz#cdc7d308bf6493126b17ea2191ea0ccf3e535adf" 303 | integrity sha512-Cr4D/5wlrb0z9dgERpUL3LrmPKVDsETIJhaCMeDfuFYcqa5bldGV6wBsAN6X/vxlXQtFBMrXdXxdL8CbDTGniw== 304 | 305 | form-data@^4.0.0: 306 | version "4.0.0" 307 | resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" 308 | integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== 309 | dependencies: 310 | asynckit "^0.4.0" 311 | combined-stream "^1.0.8" 312 | mime-types "^2.1.12" 313 | 314 | forwarded@0.2.0: 315 | version "0.2.0" 316 | resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" 317 | integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== 318 | 319 | fresh@0.5.2: 320 | version "0.5.2" 321 | resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" 322 | integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== 323 | 324 | function-bind@^1.1.2: 325 | version "1.1.2" 326 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" 327 | integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== 328 | 329 | get-intrinsic@^1.0.2, get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2: 330 | version "1.2.2" 331 | resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.2.tgz#281b7622971123e1ef4b3c90fd7539306da93f3b" 332 | integrity sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA== 333 | dependencies: 334 | function-bind "^1.1.2" 335 | has-proto "^1.0.1" 336 | has-symbols "^1.0.3" 337 | hasown "^2.0.0" 338 | 339 | gopd@^1.0.1: 340 | version "1.0.1" 341 | resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" 342 | integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== 343 | dependencies: 344 | get-intrinsic "^1.1.3" 345 | 346 | has-property-descriptors@^1.0.0: 347 | version "1.0.1" 348 | resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz#52ba30b6c5ec87fd89fa574bc1c39125c6f65340" 349 | integrity sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg== 350 | dependencies: 351 | get-intrinsic "^1.2.2" 352 | 353 | has-proto@^1.0.1: 354 | version "1.0.1" 355 | resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" 356 | integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== 357 | 358 | has-symbols@^1.0.3: 359 | version "1.0.3" 360 | resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" 361 | integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== 362 | 363 | hasown@^2.0.0: 364 | version "2.0.0" 365 | resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.0.tgz#f4c513d454a57b7c7e1650778de226b11700546c" 366 | integrity sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA== 367 | dependencies: 368 | function-bind "^1.1.2" 369 | 370 | htmlparser2@^8.0.1: 371 | version "8.0.2" 372 | resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-8.0.2.tgz#f002151705b383e62433b5cf466f5b716edaec21" 373 | integrity sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA== 374 | dependencies: 375 | domelementtype "^2.3.0" 376 | domhandler "^5.0.3" 377 | domutils "^3.0.1" 378 | entities "^4.4.0" 379 | 380 | http-errors@2.0.0: 381 | version "2.0.0" 382 | resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" 383 | integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== 384 | dependencies: 385 | depd "2.0.0" 386 | inherits "2.0.4" 387 | setprototypeof "1.2.0" 388 | statuses "2.0.1" 389 | toidentifier "1.0.1" 390 | 391 | iconv-lite@0.4.24: 392 | version "0.4.24" 393 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" 394 | integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== 395 | dependencies: 396 | safer-buffer ">= 2.1.2 < 3" 397 | 398 | inherits@2.0.4: 399 | version "2.0.4" 400 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 401 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 402 | 403 | ipaddr.js@1.9.1: 404 | version "1.9.1" 405 | resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" 406 | integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== 407 | 408 | lodash@^4.17.21: 409 | version "4.17.21" 410 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" 411 | integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== 412 | 413 | media-typer@0.3.0: 414 | version "0.3.0" 415 | resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" 416 | integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== 417 | 418 | merge-descriptors@1.0.1: 419 | version "1.0.1" 420 | resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" 421 | integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w== 422 | 423 | methods@~1.1.2: 424 | version "1.1.2" 425 | resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" 426 | integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== 427 | 428 | mime-db@1.52.0: 429 | version "1.52.0" 430 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" 431 | integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== 432 | 433 | mime-types@^2.1.12, mime-types@~2.1.24, mime-types@~2.1.34: 434 | version "2.1.35" 435 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" 436 | integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== 437 | dependencies: 438 | mime-db "1.52.0" 439 | 440 | mime@1.6.0: 441 | version "1.6.0" 442 | resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" 443 | integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== 444 | 445 | ms@2.0.0: 446 | version "2.0.0" 447 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" 448 | integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== 449 | 450 | ms@2.1.3: 451 | version "2.1.3" 452 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" 453 | integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== 454 | 455 | negotiator@0.6.3: 456 | version "0.6.3" 457 | resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" 458 | integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== 459 | 460 | nth-check@^2.0.1: 461 | version "2.1.1" 462 | resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" 463 | integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w== 464 | dependencies: 465 | boolbase "^1.0.0" 466 | 467 | object-inspect@^1.9.0: 468 | version "1.13.1" 469 | resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2" 470 | integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== 471 | 472 | on-finished@2.4.1: 473 | version "2.4.1" 474 | resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" 475 | integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== 476 | dependencies: 477 | ee-first "1.1.1" 478 | 479 | parse5-htmlparser2-tree-adapter@^7.0.0: 480 | version "7.0.0" 481 | resolved "https://registry.yarnpkg.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz#23c2cc233bcf09bb7beba8b8a69d46b08c62c2f1" 482 | integrity sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g== 483 | dependencies: 484 | domhandler "^5.0.2" 485 | parse5 "^7.0.0" 486 | 487 | parse5@^7.0.0: 488 | version "7.1.2" 489 | resolved "https://registry.yarnpkg.com/parse5/-/parse5-7.1.2.tgz#0736bebbfd77793823240a23b7fc5e010b7f8e32" 490 | integrity sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw== 491 | dependencies: 492 | entities "^4.4.0" 493 | 494 | parseurl@~1.3.3: 495 | version "1.3.3" 496 | resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" 497 | integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== 498 | 499 | path-to-regexp@0.1.7: 500 | version "0.1.7" 501 | resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" 502 | integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ== 503 | 504 | proxy-addr@~2.0.7: 505 | version "2.0.7" 506 | resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" 507 | integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== 508 | dependencies: 509 | forwarded "0.2.0" 510 | ipaddr.js "1.9.1" 511 | 512 | proxy-from-env@^1.1.0: 513 | version "1.1.0" 514 | resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" 515 | integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== 516 | 517 | qs@6.11.0: 518 | version "6.11.0" 519 | resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" 520 | integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== 521 | dependencies: 522 | side-channel "^1.0.4" 523 | 524 | range-parser@~1.2.1: 525 | version "1.2.1" 526 | resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" 527 | integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== 528 | 529 | raw-body@2.5.1: 530 | version "2.5.1" 531 | resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.1.tgz#fe1b1628b181b700215e5fd42389f98b71392857" 532 | integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== 533 | dependencies: 534 | bytes "3.1.2" 535 | http-errors "2.0.0" 536 | iconv-lite "0.4.24" 537 | unpipe "1.0.0" 538 | 539 | raw-body@2.5.2: 540 | version "2.5.2" 541 | resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.2.tgz#99febd83b90e08975087e8f1f9419a149366b68a" 542 | integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA== 543 | dependencies: 544 | bytes "3.1.2" 545 | http-errors "2.0.0" 546 | iconv-lite "0.4.24" 547 | unpipe "1.0.0" 548 | 549 | safe-buffer@5.2.1: 550 | version "5.2.1" 551 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" 552 | integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== 553 | 554 | "safer-buffer@>= 2.1.2 < 3": 555 | version "2.1.2" 556 | resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" 557 | integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== 558 | 559 | send@0.18.0: 560 | version "0.18.0" 561 | resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" 562 | integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg== 563 | dependencies: 564 | debug "2.6.9" 565 | depd "2.0.0" 566 | destroy "1.2.0" 567 | encodeurl "~1.0.2" 568 | escape-html "~1.0.3" 569 | etag "~1.8.1" 570 | fresh "0.5.2" 571 | http-errors "2.0.0" 572 | mime "1.6.0" 573 | ms "2.1.3" 574 | on-finished "2.4.1" 575 | range-parser "~1.2.1" 576 | statuses "2.0.1" 577 | 578 | serve-static@1.15.0: 579 | version "1.15.0" 580 | resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540" 581 | integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== 582 | dependencies: 583 | encodeurl "~1.0.2" 584 | escape-html "~1.0.3" 585 | parseurl "~1.3.3" 586 | send "0.18.0" 587 | 588 | set-function-length@^1.1.1: 589 | version "1.1.1" 590 | resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.1.1.tgz#4bc39fafb0307224a33e106a7d35ca1218d659ed" 591 | integrity sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ== 592 | dependencies: 593 | define-data-property "^1.1.1" 594 | get-intrinsic "^1.2.1" 595 | gopd "^1.0.1" 596 | has-property-descriptors "^1.0.0" 597 | 598 | setprototypeof@1.2.0: 599 | version "1.2.0" 600 | resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" 601 | integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== 602 | 603 | side-channel@^1.0.4: 604 | version "1.0.4" 605 | resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" 606 | integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== 607 | dependencies: 608 | call-bind "^1.0.0" 609 | get-intrinsic "^1.0.2" 610 | object-inspect "^1.9.0" 611 | 612 | statuses@2.0.1: 613 | version "2.0.1" 614 | resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" 615 | integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== 616 | 617 | toidentifier@1.0.1: 618 | version "1.0.1" 619 | resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" 620 | integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== 621 | 622 | type-is@~1.6.18: 623 | version "1.6.18" 624 | resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" 625 | integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== 626 | dependencies: 627 | media-typer "0.3.0" 628 | mime-types "~2.1.24" 629 | 630 | undici-types@~5.26.4: 631 | version "5.26.5" 632 | resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" 633 | integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== 634 | 635 | unpipe@1.0.0, unpipe@~1.0.0: 636 | version "1.0.0" 637 | resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" 638 | integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== 639 | 640 | utils-merge@1.0.1: 641 | version "1.0.1" 642 | resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" 643 | integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== 644 | 645 | vary@~1.1.2: 646 | version "1.1.2" 647 | resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" 648 | integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== 649 | --------------------------------------------------------------------------------