@vpalmisano/webrtcperf 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +661 -0
- package/README.md +296 -0
- package/app.min.js +2 -0
- package/build/src/app.d.ts +6 -0
- package/build/src/app.js +207 -0
- package/build/src/app.js.map +1 -0
- package/build/src/config.d.ts +104 -0
- package/build/src/config.js +880 -0
- package/build/src/config.js.map +1 -0
- package/build/src/generate-config-docs.d.ts +1 -0
- package/build/src/generate-config-docs.js +41 -0
- package/build/src/generate-config-docs.js.map +1 -0
- package/build/src/index.d.ts +9 -0
- package/build/src/index.js +26 -0
- package/build/src/index.js.map +1 -0
- package/build/src/media.d.ts +33 -0
- package/build/src/media.js +113 -0
- package/build/src/media.js.map +1 -0
- package/build/src/rtcstats.d.ts +302 -0
- package/build/src/rtcstats.js +418 -0
- package/build/src/rtcstats.js.map +1 -0
- package/build/src/server.d.ts +173 -0
- package/build/src/server.js +639 -0
- package/build/src/server.js.map +1 -0
- package/build/src/session.d.ts +277 -0
- package/build/src/session.js +1552 -0
- package/build/src/session.js.map +1 -0
- package/build/src/stats.d.ts +243 -0
- package/build/src/stats.js +1383 -0
- package/build/src/stats.js.map +1 -0
- package/build/src/utils.d.ts +249 -0
- package/build/src/utils.js +1220 -0
- package/build/src/utils.js.map +1 -0
- package/build/src/visqol.d.ts +6 -0
- package/build/src/visqol.js +61 -0
- package/build/src/visqol.js.map +1 -0
- package/build/src/vmaf.d.ts +83 -0
- package/build/src/vmaf.js +624 -0
- package/build/src/vmaf.js.map +1 -0
- package/build/tsconfig.tsbuildinfo +1 -0
- package/package.json +129 -0
- package/src/app.ts +241 -0
- package/src/config.ts +852 -0
- package/src/generate-config-docs.ts +47 -0
- package/src/index.ts +9 -0
- package/src/media.ts +151 -0
- package/src/rtcstats.ts +507 -0
- package/src/server.ts +645 -0
- package/src/session.ts +1908 -0
- package/src/stats.ts +1668 -0
- package/src/utils.ts +1295 -0
- package/src/visqol.ts +62 -0
- package/src/vmaf.ts +771 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vmaf.js","sourceRoot":"","sources":["../../src/vmaf.ts"],"names":[],"mappings":"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","sourcesContent":["import fs from 'fs'\nimport json5 from 'json5'\nimport path from 'path'\nimport os from 'os'\n\nimport { FFProbeProcess, analyzeColors, chunkedPromiseAll, ffprobe, getFiles, logger, runShellCommand } from './utils'\nimport { FastStats } from './stats'\n\nconst log = logger('webrtcperf:vmaf')\n\nconst cpus = os.cpus().length\n\nexport interface IvfFrame {\n pts: number\n recognizedPts?: number\n index: number\n position: number\n size: number\n}\n\nexport async function parseVideo(fpath: string) {\n let width = 0\n let height = 0\n let frameRate = 0\n await ffprobe(fpath, 'video', 'frame=pts,width,height,duration_time', '', frame => {\n const w = parseInt(frame.width)\n const h = parseInt(frame.height)\n if (w > width) width = w\n if (h > height) height = h\n const duration = parseFloat(frame.duration_time)\n if (duration) {\n frameRate = Math.max(Math.round(1 / duration), frameRate)\n }\n return FFProbeProcess.Skip\n })\n return { width, height, frameRate }\n}\n\n/**\n * It prepares a video file for VMAF evaluation applying a timestamp video overlay.\n * @param name The input video file path with the output id (e.g `filename.flv,1`).\n * @param crop If the video should be cropped.\n * @param keepSourceFile If the source file should be kept.\n */\nexport async function prepareVideo(\n {\n vmafPrepareVideo,\n vmafVideoCrop,\n videoWidth,\n videoHeight,\n videoFramerate,\n videoDuration,\n }: {\n vmafPrepareVideo: string\n vmafVideoCrop?: string\n videoWidth: number\n videoHeight: number\n videoFramerate: number\n videoDuration: number\n },\n keepSourceFile = true,\n) {\n const [fpath, id] = vmafPrepareVideo.split(',')\n const outputPath = path.join(path.dirname(fpath), `${id}_send.mp4`)\n if (fs.existsSync(outputPath)) {\n throw new Error(`Output file ${outputPath} already exists`)\n }\n const { width, height, frameRate } = await parseVideo(fpath)\n log.info(\n `prepareVideo ${fpath} ${width}x${height}@${frameRate} -> ${outputPath} ${vmafVideoCrop && `crop: ${vmafVideoCrop}`}`,\n )\n const fontsize = Math.round((videoHeight || height) / 18)\n const textHeight = Math.round(fontsize * 1.2)\n const filter = vmafVideoCrop ? cropFilter(json5.parse(vmafVideoCrop), 0, ',') : ''\n await runShellCommand(\n `ffmpeg -hide_banner -loglevel warning -threads ${Math.min(cpus, 16)} \\\n${videoDuration ? `-t ${videoDuration}` : ''} \\\n-i ${fpath} \\\n-filter_complex \"[0:v]scale=w=${videoWidth || width}:h=${videoHeight || height},fps=${videoFramerate || frameRate},${filter}\\\ndrawbox=x=0:y=0:w=iw:h=${textHeight}:color=black:t=fill,\\\ndrawtext=fontfile=/usr/share/fonts/truetype/noto/NotoMono-Regular.ttf:text='${id || 0}-%{eif\\\\:t*1000\\\\:u}':fontcolor=white:fontsize=${fontsize}:x=(w-text_w)/2:y=(${textHeight}-text_h)/2[out]\" \\\n-map [out] -fps_mode vfr -c:v libx264 -crf 10 -an \\\n-f mp4 -movflags +faststart ${outputPath}`,\n true,\n )\n\n if (!keepSourceFile) {\n await fs.promises.unlink(fpath)\n }\n}\n\n/**\n * It converts a video file to VP8/IVF format.\n * @param fpath The input video file path.\n * @param crop The crop filter.\n * @param keepSourceFile If the source file should be kept.\n */\nexport async function convertToIvf(fpath: string, crop?: string, keepSourceFile = true) {\n const { width, height, frameRate } = await parseVideo(fpath)\n const outputPath = fpath.replace(/\\.[^.]+$/, '.ivf.raw')\n log.debug(`convertToIvf ${fpath} ${width}x${height}@${frameRate} -> ${outputPath} crop:`, crop)\n\n const filter = crop ? `-vf '${cropFilter(json5.parse(crop))}'` : ''\n await runShellCommand(\n `ffmpeg -y -hide_banner -y -loglevel warning -i ${fpath} -map 0:v \\\n -c:v vp8 -quality best -cpu-used 0 -crf 1 -b:v 20M -qmin 1 -qmax 10 \\\n -g 1 -threads ${Math.min(cpus, 16)} ${filter} -an \\\n -f ivf ${outputPath}`,\n true,\n )\n\n await fixIvfFrames(outputPath, keepSourceFile)\n}\n\n/**\n * It recognizes the frames of a video file using OCR.\n * @param fpath The input video file path.\n * @param recover If missing frames should be recovered.\n * @param crop If the video should be cropped.\n * @param debug Enable debug logging.\n */\nexport async function recognizeFrames(fpath: string, recover = false, debug = false) {\n const { width, height, frameRate } = await parseVideo(fpath)\n const fname = path.basename(fpath)\n const frames = new Map<number, number>()\n let skipped = 0\n let failed = 0\n let recovered = 0\n let firstTimestamp = 0\n let lastTimestamp = 0\n let participantDisplayName = ''\n const regExp = /(?<name>[0-9]{1,6})-(?<time>[0-9]{1,13})/\n await ffprobe(\n fpath,\n 'video',\n 'frame=pts,frame_tags=lavfi.ocr.text,lavfi.ocr.confidence',\n `scale=w=1280:h=-1:flags=bicubic,crop=w=min(iw\\\\,ih):h=max((ih/15)\\\\,32):x=(iw-ow)/2:y=0:exact=1,ocr=whitelist=0123456789-`,\n frame => {\n const pts = parseInt(frame.pts)\n if ((!frames.has(pts) || !frames.get(pts)) && frameRate) {\n const confidence = parseFloat(frame.tag_lavfi_ocr_confidence?.trim() || '0')\n const textMatch = regExp.exec(frame.tag_lavfi_ocr_text?.trim() || '')\n if (confidence > 0 && textMatch) {\n const { name, time } = textMatch.groups as { name: string; time: string }\n participantDisplayName = `Participant-${name.padStart(6, '0')}`\n const recognizedTime = parseInt(time)\n const recognizedPts = Math.round((frameRate * recognizedTime) / 1000)\n if (debug) {\n log.debug(\n `recognized frame ${fname} confidence=${confidence} pts=${pts} name=${name} time=${time} recognized=${recognizedPts}`,\n )\n }\n frames.set(pts, recognizedPts)\n if (!firstTimestamp) firstTimestamp = recognizedPts / frameRate\n lastTimestamp = recognizedPts / frameRate\n } else {\n if (recover) frames.set(pts, 0)\n failed++\n }\n } else {\n skipped++\n }\n return FFProbeProcess.Skip\n },\n )\n\n if (recover) {\n const ptsIndex = Array.from(frames.keys()).sort((a, b) => a - b)\n for (const [i, pts] of ptsIndex.entries()) {\n const recognizedPts = frames.get(pts)\n if (!recognizedPts && i) {\n const prevRecognizedPts = frames.get(ptsIndex[i - 1])\n if (prevRecognizedPts) {\n frames.set(pts, prevRecognizedPts + pts - ptsIndex[i - 1])\n recovered++\n } else {\n frames.delete(pts)\n }\n }\n }\n }\n\n log.info(\n `recognizeFrames ${fname} ${width}x${height}@${frameRate} \"${participantDisplayName}\" frames: ${frames.size} skipped: ${skipped} recovered: ${recovered} failed: ${failed} \\\nts: ${firstTimestamp.toFixed(2)}-${lastTimestamp.toFixed(2)} (${(lastTimestamp - firstTimestamp).toFixed(2)})`,\n )\n return { width, height, frameRate, frames, participantDisplayName }\n}\n\nasync function parseIvf(fpath: string, runRecognizer = false) {\n const { width, height } = await parseVideo(fpath)\n const fname = path.basename(fpath)\n const fd = await fs.promises.open(fpath, 'r')\n const headerData = new ArrayBuffer(32)\n const headerView = new DataView(headerData)\n const ret = await fd.read(headerView, 0, 32, 0)\n if (ret.bytesRead !== 32) {\n await fd.close()\n throw new Error('Invalid IVF file')\n }\n const den = headerView.getUint32(16, true)\n const num = headerView.getUint32(20, true)\n const frameRate = den / num\n let participantDisplayName = ''\n let skipped = 0\n\n const frameHeaderView = new DataView(new ArrayBuffer(12))\n let index = 0\n let position = 32\n let bytesRead = 0\n const frames = new Map<number, IvfFrame>()\n let firstTimestamp = 0\n let lastTimestamp = 0\n do {\n const ret = await fd.read(frameHeaderView, 0, frameHeaderView.byteLength, position)\n bytesRead = ret.bytesRead\n if (bytesRead !== 12) {\n break\n }\n const size = frameHeaderView.getUint32(0, true)\n const pts = Number(frameHeaderView.getBigUint64(4, true))\n /* if (pts <= ptsIndex[ptsIndex.length - 1]) {\n log.warn(`IVF file ${fname}: pts ${pts} <= prev ${ptsIndex[ptsIndex.length - 1]}`)\n } */\n if (frames.has(pts)) {\n /* log.debug(`IVF file ${fname}: pts ${pts} already present, skipping`) */\n skipped++\n } else {\n frames.set(pts, { pts, index, position, size: size + 12 })\n index++\n if (!firstTimestamp) {\n firstTimestamp = pts / frameRate\n }\n lastTimestamp = pts / frameRate\n }\n position += size + 12\n } while (bytesRead === 12)\n await fd.close()\n\n log.debug(\n `parseIvf ${fname}: ${width}x${height}@${frameRate} \\\nframes: ${frames.size} skipped: ${skipped} \\\nts: ${firstTimestamp.toFixed(2)}-${lastTimestamp.toFixed(2)} (${(lastTimestamp - firstTimestamp).toFixed(2)}s)`,\n )\n\n if (runRecognizer) {\n const { frames: ptsToRecognized, participantDisplayName: name } = await recognizeFrames(fpath)\n participantDisplayName = name\n for (const [pts, frame] of frames.entries()) {\n const recognizedPts = ptsToRecognized.get(pts)\n if (!recognizedPts) continue\n frame.recognizedPts = recognizedPts\n }\n }\n\n return {\n width,\n height,\n frameRate,\n frames,\n participantDisplayName,\n }\n}\n\nexport async function fixIvfFrames(filePath: string, keepSourceFile = true) {\n const fname = path.basename(filePath)\n const dirPath = path.dirname(filePath)\n if (!fname.endsWith('.ivf.raw')) {\n throw new Error(`fixIvfFrames ${fname}: invalid file extension, expected \".ivf.raw\"`)\n }\n const { width, height, frames, participantDisplayName } = await parseIvf(filePath, true)\n if (!participantDisplayName) {\n throw new Error(`fixIvfFrames ${fname}: no participant name found`)\n }\n if (!frames.size) {\n throw new Error(`fixIvfFrames ${fname}: no frames found`)\n }\n log.debug(`fixIvfFrames ${fname} width=${width} height=${height} (${frames.size} frames)`)\n const fd = await fs.promises.open(filePath, 'r')\n\n const parts = path.basename(filePath).split('_')\n if (!parts[1].startsWith('send') && !parts[1].startsWith('recv')) {\n throw new Error(`fixIvfFrames ${fname}: invalid file name, expected \"<name>_send\" or \"<name>_recv\"`)\n }\n const outFilePath = path.join(\n dirPath,\n parts[1].startsWith('send') ? `${participantDisplayName}.ivf` : `${participantDisplayName}_recv-by_${parts[0]}.ivf`,\n )\n\n const fixedFd = await fs.promises.open(outFilePath, 'w')\n const headerView = new DataView(new ArrayBuffer(32))\n await fd.read(headerView, 0, headerView.byteLength, 0)\n\n let position = 32\n let writtenFrames = 0\n\n const ptsIndex = Array.from(frames.keys())\n .filter(pts => frames.get(pts)?.recognizedPts)\n .sort((a, b) => {\n if (a === b) return (frames.get(a)?.recognizedPts || 0) - (frames.get(b)?.recognizedPts || 0)\n return a - b\n })\n for (const [i, pts] of ptsIndex.entries()) {\n const frame = frames.get(pts)\n if (!frame || !frame.recognizedPts) {\n log.warn(`fixIvfFrames ${fname}: pts ${pts} not found, skipping`)\n continue\n }\n\n const prevFrame = frames.get(ptsIndex[i - 1])\n const nextFrame = frames.get(ptsIndex[i + 1])\n // Skip frames that are not in the correct order.\n if (nextFrame?.recognizedPts && (nextFrame?.recognizedPts || 0) < frame.recognizedPts) {\n continue\n }\n // Keep duplicated frames.\n if (prevFrame?.recognizedPts && frame.recognizedPts === prevFrame.recognizedPts) {\n /* log.warn(\n `${frame.index} pts=${pts}:${frame.recognizedPts} prev ${prevFrame.pts}(${pts - prevFrame.pts}):${prevFrame.recognizedPts}(${frame.recognizedPts - prevFrame.recognizedPts}) next ${nextFrame?.pts}(${(nextFrame?.pts || 0) - pts}):${nextFrame?.recognizedPts}(${(nextFrame?.recognizedPts || 0) - frame.recognizedPts})`,\n ) */\n frame.recognizedPts = prevFrame.recognizedPts + 1\n }\n const frameView = new DataView(new ArrayBuffer(frame.size))\n await fd.read(frameView, 0, frame.size, frame.position)\n frameView.setBigUint64(4, BigInt(frame.recognizedPts), true)\n await fixedFd.write(new Uint8Array(frameView.buffer), 0, frameView.byteLength, position)\n position += frameView.byteLength\n writtenFrames++\n }\n\n headerView.setUint16(12, width, true)\n headerView.setUint16(14, height, true)\n headerView.setUint32(24, writtenFrames, true)\n await fixedFd.write(new Uint8Array(headerView.buffer), 0, headerView.byteLength, 0)\n\n await fd.close()\n await fixedFd.close()\n\n if (!keepSourceFile) {\n await fs.promises.unlink(filePath)\n }\n\n return { participantDisplayName, outFilePath }\n}\n\nexport async function fixIvfFiles(directory: string, keepSourceFiles = true) {\n const reference = new Map<string, string>()\n const degraded = new Map<string, string[]>()\n\n const addFile = (participantDisplayName: string, outFilePath: string) => {\n if (outFilePath.includes('_recv-by_')) {\n if (!degraded.has(participantDisplayName)) {\n degraded.set(participantDisplayName, [])\n }\n degraded.get(participantDisplayName)?.push(outFilePath)\n } else {\n reference.set(participantDisplayName, outFilePath)\n }\n }\n\n const ivfFiles = await getFiles(directory, '.ivf')\n if (ivfFiles.length) {\n log.debug(`using existing ${ivfFiles.length} ivf files`)\n for (const outFilePath of ivfFiles) {\n try {\n const participantDisplayName = path.basename(outFilePath).replace('.ivf', '').split('_')[0]\n addFile(participantDisplayName, outFilePath)\n } catch (err) {\n log.error(`fixIvfFrames error: ${(err as Error).stack}`)\n }\n }\n }\n\n const rawFiles = await getFiles(directory, '.ivf.raw')\n if (rawFiles.length) {\n log.debug(`processing ${rawFiles.length} raw ivf files`)\n const results = await chunkedPromiseAll<\n string,\n { participantDisplayName: string; outFilePath: string } | undefined\n >(\n rawFiles,\n async filePath => {\n try {\n const { participantDisplayName, outFilePath } = await fixIvfFrames(filePath, keepSourceFiles)\n return { participantDisplayName, outFilePath }\n } catch (err) {\n log.error(`fixIvfFrames error: ${(err as Error).stack}`)\n }\n },\n Math.ceil(cpus / 4),\n )\n for (const res of results) {\n if (!res) continue\n const { participantDisplayName, outFilePath } = res\n addFile(participantDisplayName, outFilePath)\n }\n }\n\n return { reference, degraded }\n}\n\nasync function filterIvfFrames(fpath: string, frames: IvfFrame[]) {\n const outFilePath = fpath.replace('.ivf', '.filtered.ivf')\n const fd = await fs.promises.open(fpath, 'r')\n const fixedFd = await fs.promises.open(outFilePath, 'w')\n const headerView = new DataView(new ArrayBuffer(32))\n await fd.read(headerView, 0, headerView.byteLength, 0)\n\n let position = 32\n let writtenFrames = 0\n for (const frame of frames.values()) {\n const frameView = new DataView(new ArrayBuffer(frame.size))\n await fd.read(frameView, 0, frame.size, frame.position)\n await fixedFd.write(new Uint8Array(frameView.buffer), 0, frameView.byteLength, position)\n position += frameView.byteLength\n writtenFrames++\n }\n\n headerView.setUint32(24, writtenFrames, true)\n await fixedFd.write(new Uint8Array(headerView.buffer), 0, headerView.byteLength, 0)\n\n await fd.close()\n await fixedFd.close()\n return outFilePath\n}\n\nexport interface VmafScore {\n sender: string\n receiver: string\n min: number\n max: number\n mean: number\n harmonic_mean: number\n}\n\nexport async function runVmaf(\n referencePath: string,\n degradedPath: string,\n preview: boolean,\n cropConfig: VmafCrop = {},\n cropTimeOverlay = false,\n) {\n const comparisonDir = path.dirname(degradedPath)\n const comparisonName = path.basename(degradedPath.replace(/\\.[^.]+$/, ''))\n const cropDest = cropConfig[comparisonName]\n const crop = { ref: fixCrop(cropDest?.ref), deg: fixCrop(cropDest?.deg) }\n\n log.info('runVmaf', { referencePath, degradedPath, preview, crop })\n await fs.promises.mkdir(path.join(comparisonDir, comparisonName), { recursive: true })\n const vmafLogPath = path.join(comparisonDir, comparisonName, 'vmaf-log.json')\n const psnrLogPath = path.join(comparisonDir, comparisonName, 'psnr.log')\n const comparisonPath = path.join(comparisonDir, comparisonName, 'comparison.mp4')\n\n const sender = path.basename(referencePath).replace('.ivf', '')\n const receiver = path.basename(degradedPath).replace('.ivf', '').split('_recv-by_')[1]\n\n const { frameRate: refFrameRate, frames: refFrames } = await parseIvf(referencePath, false)\n const {\n width: degWidth,\n height: degHeight,\n frameRate: degFrameRate,\n frames: degFrames,\n } = await parseIvf(degradedPath, false)\n\n const textHeight = cropTimeOverlay ? '(ih/15)' : ''\n if (textHeight) {\n crop.ref.h = `${crop.ref.h}-${textHeight}`\n crop.ref.y = `${crop.ref.y}+${textHeight}`\n\n crop.deg.h = `${crop.deg.h}-${textHeight}`\n crop.deg.y = `${crop.deg.y}+${textHeight}`\n }\n\n if (refFrameRate !== degFrameRate) {\n throw new Error(`runVmaf: frame rates do not match: ref=${refFrameRate} deg=${degFrameRate}`)\n }\n\n // Find common frames.\n const commonRefFrames = []\n const commonDegFrames = []\n let firstPts = 0\n let lastPts = 0\n for (const [pts, refFrame] of refFrames.entries()) {\n const degFrame = degFrames.get(pts)\n if (degFrame) {\n commonRefFrames.push(refFrame)\n commonDegFrames.push(degFrame)\n if (!firstPts) {\n firstPts = pts\n }\n lastPts = pts\n }\n }\n const duration = (lastPts - firstPts) / refFrameRate\n\n referencePath = await filterIvfFrames(referencePath, commonRefFrames)\n degradedPath = await filterIvfFrames(degradedPath, commonDegFrames)\n log.debug(\n `common frames: ${commonRefFrames.length} ref: ${refFrames.size} deg: ${degFrames.size} duration: ${duration}s`,\n {\n crop,\n },\n )\n\n const ffmpegCmd = `ffmpeg -hide_banner -loglevel warning -y -threads ${Math.min(cpus, 16)} \\\n-i ${degradedPath} \\\n-i ${referencePath} \\\n`\n\n const filter = `\\\n[0:v]\\\nscale=w=-1:h=${degHeight}:flags=bicubic,\\\n${cropFilter(crop.deg, 0, ',')}\\\n${splitFilter(['deg_vmaf', 'deg_psnr', preview ? 'deg_preview' : ''])};\\\n[1:v]\\\nscale=w=-1:h=${degHeight}:flags=bicubic,crop=w=${degWidth}:x=(iw-${degWidth})/2,\\\n${cropFilter(crop.ref, 0, ',')}\\\n${splitFilter(['ref_vmaf', 'ref_psnr', preview ? 'ref_preview' : ''])};\\\n[deg_vmaf][ref_vmaf]libvmaf=model='path=/usr/share/model/vmaf_v0.6.1.json':log_fmt=json:log_path=${vmafLogPath}:n_subsample=1:n_threads=${cpus}:shortest=1[vmaf];\\\n[deg_psnr][ref_psnr]psnr=stats_file=${psnrLogPath}[psnr]\\\n`\n\n const cmd = preview\n ? `${ffmpegCmd} \\\n-filter_complex \"${filter};[ref_preview][deg_preview]hstack[stacked]\" \\\n-map [vmaf] -f null - \\\n-map [psnr] -f null - \\\n-map [stacked] -fps_mode vfr -c:v libx264 -crf 10 -f mp4 -movflags +faststart ${comparisonPath} \\\n`\n : `${ffmpegCmd} \\\n-filter_complex \"${filter}\" \\\n-map [vmaf] -f null - \\\n-map [psnr] -f null - \\\n`\n\n log.debug('runVmaf', cmd)\n try {\n const { stdout, stderr } = await runShellCommand(cmd)\n\n const vmafLog = JSON.parse(await fs.promises.readFile(vmafLogPath, 'utf-8'))\n log.debug('runVmaf', {\n stdout,\n stderr,\n })\n const metrics = {\n sender,\n receiver,\n\n ...vmafLog.pooled_metrics.vmaf,\n } as VmafScore\n\n log.info(`VMAF metrics ${vmafLogPath}:`, metrics)\n\n try {\n await writeGraph(vmafLogPath)\n } catch (err) {\n log.error(`writeGraph error: ${(err as Error).stack}`)\n }\n\n return metrics\n } finally {\n await fs.promises.unlink(degradedPath)\n await fs.promises.unlink(referencePath)\n }\n}\n\nasync function writeGraph(vmafLogPath: string) {\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n const { ChartJSNodeCanvas } = require('chartjs-node-canvas')\n\n const vmafLog = JSON.parse(await fs.promises.readFile(vmafLogPath, 'utf-8')) as {\n frames: {\n frameNum: number\n metrics: { vmaf: number }\n }[]\n pooled_metrics: {\n vmaf: { min: number; max: number; mean: number; harmonic_mean: number }\n }\n }\n const { min, max, mean } = vmafLog.pooled_metrics.vmaf\n\n const fpath = vmafLogPath.replace('.json', '.png')\n\n const decimation = Math.ceil(vmafLog.frames.length / 500)\n const stats = new FastStats()\n const data = vmafLog.frames\n .reduce(\n (prev, cur) => {\n if (cur.frameNum % decimation === 0) {\n prev.push({\n x: cur.frameNum,\n y: cur.metrics.vmaf,\n count: 1,\n })\n } else {\n prev[prev.length - 1].y += cur.metrics.vmaf\n prev[prev.length - 1].count++\n }\n stats.push(cur.metrics.vmaf)\n return prev\n },\n [] as { x: number; y: number; count: 1 }[],\n )\n .map(d => ({ x: d.x, y: d.y / d.count }))\n\n const chartJSNodeCanvas = new ChartJSNodeCanvas({\n width: 1280,\n height: 720,\n backgroundColour: 'white',\n })\n\n const buffer = await chartJSNodeCanvas.renderToBuffer({\n type: 'line',\n data: {\n labels: data.map(d => d.x),\n datasets: [\n {\n label: `VMAF score (min: ${min.toFixed(2)}, max: ${max.toFixed(\n 2,\n )}, mean: ${mean.toFixed(2)}, P5: ${stats.percentile(5).toFixed(2)})`,\n data: data.map(d => d.y),\n fill: false,\n borderColor: 'rgb(0, 0, 0)',\n borderWidth: 1,\n pointRadius: 0,\n },\n ],\n },\n options: {\n plugins: {\n title: {\n display: true,\n text: path.basename(vmafLogPath).replace('.vmaf.json', '').replace(/_/g, ' '),\n },\n },\n scales: {\n y: {\n min: 0,\n max: 100,\n },\n },\n },\n })\n\n await fs.promises.writeFile(fpath, buffer)\n}\n\ninterface Crop {\n w: string\n h: string\n x: string\n y: string\n}\n\ntype VmafCrop = Record<\n string,\n {\n ref?: Crop\n deg?: Crop\n }\n>\n\nconst fixCrop = (c?: Crop) => {\n return {\n w: c?.w ?? 'iw',\n h: c?.h ?? 'ih',\n x: c?.x ?? '0',\n y: c?.y ?? '0',\n }\n}\n\nconst cropFilter = (crop: Crop, exact = 0, suffix = '') => {\n const { w, h, x, y } = crop\n if (!x && !w && !x && !y) return ''\n return `crop=w=${w}:h=${h}:x=${x}:y=${y}:exact=${exact}${suffix}`\n}\n\nconst splitFilter = (outputs: string[], suffix = '') => {\n const out = outputs\n .filter(o => !!o)\n .map(o => `[${o}]`)\n .join('')\n if (!out) return ''\n return `split=${outputs.length}${out}${suffix}`\n}\n\ninterface VmafConfig {\n vmafPath: string\n vmafPreview: boolean\n vmafKeepIntermediateFiles: boolean\n vmafKeepSourceFiles: boolean\n vmafCrop?: string\n}\n\nexport async function calculateVmafScore(config: VmafConfig): Promise<VmafScore[]> {\n const { vmafPath, vmafPreview, vmafKeepIntermediateFiles, vmafKeepSourceFiles, vmafCrop } = config\n if (!fs.existsSync(config.vmafPath)) {\n throw new Error(`VMAF path ${config.vmafPath} does not exist`)\n }\n log.debug(`calculateVmafScore referencePath=${vmafPath}`)\n\n const { reference, degraded } = await fixIvfFiles(vmafPath, vmafKeepSourceFiles)\n\n const crop: VmafCrop | undefined = vmafCrop ? json5.parse(vmafCrop) : undefined\n\n const ret: VmafScore[] = []\n for (const participantDisplayName of reference.keys()) {\n const vmafReferencePath = reference.get(participantDisplayName)\n if (!vmafReferencePath) continue\n for (const degradedPath of degraded.get(participantDisplayName) ?? []) {\n try {\n const metrics = await runVmaf(vmafReferencePath, degradedPath, vmafPreview, crop)\n ret.push(metrics)\n } catch (err) {\n log.error(`runVmaf error: ${(err as Error).message}`)\n } finally {\n if (!vmafKeepIntermediateFiles) {\n await fs.promises.unlink(degradedPath)\n }\n }\n }\n if (!vmafKeepIntermediateFiles) {\n await fs.promises.unlink(vmafReferencePath)\n }\n }\n await fs.promises.writeFile(path.join(vmafPath, 'vmaf.json'), JSON.stringify(ret, undefined, 2))\n\n return ret\n}\n\nif (require.main === module) {\n ;(async (): Promise<void> => {\n switch (process.argv[2]) {\n case 'convert':\n await convertToIvf(process.argv[3], process.argv[4], false)\n break\n case 'parse': {\n const { frames } = await parseIvf(process.argv[3], true)\n console.log(frames)\n break\n }\n case 'fix':\n await fixIvfFrames(process.argv[3], true)\n break\n case 'analyze':\n console.log(JSON.stringify(await analyzeColors(process.argv[3]), null, 2))\n break\n case 'graph':\n await writeGraph(process.argv[3])\n break\n case 'vmaf':\n await calculateVmafScore({\n vmafPath: process.argv[3],\n vmafPreview: true,\n vmafKeepIntermediateFiles: true,\n vmafKeepSourceFiles: true,\n vmafCrop: json5.stringify({\n 'Participant-000001_recv-by_Participant-000000': {\n ref: { w: '', h: '', x: '', y: '' },\n deg: { w: '', h: '', x: '', y: '' },\n },\n }),\n })\n break\n default:\n throw new Error(`Invalid command: ${process.argv[2]}`)\n }\n })()\n .catch(err => console.error(err))\n .finally(() => process.exit(0))\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"fileNames":["../node_modules/typescript/lib/lib.es5.d.ts","../node_modules/typescript/lib/lib.es2015.d.ts","../node_modules/typescript/lib/lib.es2016.d.ts","../node_modules/typescript/lib/lib.es2017.d.ts","../node_modules/typescript/lib/lib.es2018.d.ts","../node_modules/typescript/lib/lib.es2019.d.ts","../node_modules/typescript/lib/lib.es2020.d.ts","../node_modules/typescript/lib/lib.es2021.d.ts","../node_modules/typescript/lib/lib.es2022.d.ts","../node_modules/typescript/lib/lib.dom.d.ts","../node_modules/typescript/lib/lib.dom.iterable.d.ts","../node_modules/typescript/lib/lib.dom.asynciterable.d.ts","../node_modules/typescript/lib/lib.webworker.importscripts.d.ts","../node_modules/typescript/lib/lib.scripthost.d.ts","../node_modules/typescript/lib/lib.es2015.core.d.ts","../node_modules/typescript/lib/lib.es2015.collection.d.ts","../node_modules/typescript/lib/lib.es2015.generator.d.ts","../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../node_modules/typescript/lib/lib.es2015.promise.d.ts","../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../node_modules/typescript/lib/lib.es2016.intl.d.ts","../node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../node_modules/typescript/lib/lib.es2017.date.d.ts","../node_modules/typescript/lib/lib.es2017.object.d.ts","../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../node_modules/typescript/lib/lib.es2017.string.d.ts","../node_modules/typescript/lib/lib.es2017.intl.d.ts","../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../node_modules/typescript/lib/lib.es2018.intl.d.ts","../node_modules/typescript/lib/lib.es2018.promise.d.ts","../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../node_modules/typescript/lib/lib.es2019.array.d.ts","../node_modules/typescript/lib/lib.es2019.object.d.ts","../node_modules/typescript/lib/lib.es2019.string.d.ts","../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../node_modules/typescript/lib/lib.es2019.intl.d.ts","../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../node_modules/typescript/lib/lib.es2020.date.d.ts","../node_modules/typescript/lib/lib.es2020.promise.d.ts","../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../node_modules/typescript/lib/lib.es2020.string.d.ts","../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../node_modules/typescript/lib/lib.es2020.intl.d.ts","../node_modules/typescript/lib/lib.es2020.number.d.ts","../node_modules/typescript/lib/lib.es2021.promise.d.ts","../node_modules/typescript/lib/lib.es2021.string.d.ts","../node_modules/typescript/lib/lib.es2021.weakref.d.ts","../node_modules/typescript/lib/lib.es2021.intl.d.ts","../node_modules/typescript/lib/lib.es2022.array.d.ts","../node_modules/typescript/lib/lib.es2022.error.d.ts","../node_modules/typescript/lib/lib.es2022.intl.d.ts","../node_modules/typescript/lib/lib.es2022.object.d.ts","../node_modules/typescript/lib/lib.es2022.string.d.ts","../node_modules/typescript/lib/lib.es2022.regexp.d.ts","../node_modules/typescript/lib/lib.decorators.d.ts","../node_modules/typescript/lib/lib.decorators.legacy.d.ts","../node_modules/typescript/lib/lib.es2022.full.d.ts","../node_modules/@vpalmisano/throttler/build/src/app.d.ts","../node_modules/@vpalmisano/throttler/build/src/config.d.ts","../node_modules/@vpalmisano/throttler/build/src/throttle.d.ts","../node_modules/@vpalmisano/throttler/build/src/utils.d.ts","../node_modules/@vpalmisano/throttler/build/src/index.d.ts","../node_modules/no-case/dist/index.d.ts","../node_modules/pascal-case/dist/index.d.ts","../node_modules/camel-case/dist/index.d.ts","../node_modules/capital-case/dist/index.d.ts","../node_modules/constant-case/dist/index.d.ts","../node_modules/dot-case/dist/index.d.ts","../node_modules/header-case/dist/index.d.ts","../node_modules/param-case/dist/index.d.ts","../node_modules/path-case/dist/index.d.ts","../node_modules/sentence-case/dist/index.d.ts","../node_modules/snake-case/dist/index.d.ts","../node_modules/change-case/dist/index.d.ts","../node_modules/json5/lib/parse.d.ts","../node_modules/json5/lib/stringify.d.ts","../node_modules/json5/lib/index.d.ts","../node_modules/word-wrap/index.d.ts","../node_modules/@types/node/compatibility/disposable.d.ts","../node_modules/@types/node/compatibility/indexable.d.ts","../node_modules/@types/node/compatibility/iterators.d.ts","../node_modules/@types/node/compatibility/index.d.ts","../node_modules/@types/node/globals.typedarray.d.ts","../node_modules/@types/node/buffer.buffer.d.ts","../node_modules/buffer/index.d.ts","../node_modules/undici-types/header.d.ts","../node_modules/undici-types/readable.d.ts","../node_modules/undici-types/file.d.ts","../node_modules/undici-types/fetch.d.ts","../node_modules/undici-types/formdata.d.ts","../node_modules/undici-types/connector.d.ts","../node_modules/undici-types/client.d.ts","../node_modules/undici-types/errors.d.ts","../node_modules/undici-types/dispatcher.d.ts","../node_modules/undici-types/global-dispatcher.d.ts","../node_modules/undici-types/global-origin.d.ts","../node_modules/undici-types/pool-stats.d.ts","../node_modules/undici-types/pool.d.ts","../node_modules/undici-types/handlers.d.ts","../node_modules/undici-types/balanced-pool.d.ts","../node_modules/undici-types/agent.d.ts","../node_modules/undici-types/mock-interceptor.d.ts","../node_modules/undici-types/mock-agent.d.ts","../node_modules/undici-types/mock-client.d.ts","../node_modules/undici-types/mock-pool.d.ts","../node_modules/undici-types/mock-errors.d.ts","../node_modules/undici-types/proxy-agent.d.ts","../node_modules/undici-types/env-http-proxy-agent.d.ts","../node_modules/undici-types/retry-handler.d.ts","../node_modules/undici-types/retry-agent.d.ts","../node_modules/undici-types/api.d.ts","../node_modules/undici-types/interceptors.d.ts","../node_modules/undici-types/util.d.ts","../node_modules/undici-types/cookies.d.ts","../node_modules/undici-types/patch.d.ts","../node_modules/undici-types/websocket.d.ts","../node_modules/undici-types/eventsource.d.ts","../node_modules/undici-types/filereader.d.ts","../node_modules/undici-types/diagnostics-channel.d.ts","../node_modules/undici-types/content-type.d.ts","../node_modules/undici-types/cache.d.ts","../node_modules/undici-types/index.d.ts","../node_modules/@types/node/globals.d.ts","../node_modules/@types/node/assert.d.ts","../node_modules/@types/node/assert/strict.d.ts","../node_modules/@types/node/async_hooks.d.ts","../node_modules/@types/node/buffer.d.ts","../node_modules/@types/node/child_process.d.ts","../node_modules/@types/node/cluster.d.ts","../node_modules/@types/node/console.d.ts","../node_modules/@types/node/constants.d.ts","../node_modules/@types/node/crypto.d.ts","../node_modules/@types/node/dgram.d.ts","../node_modules/@types/node/diagnostics_channel.d.ts","../node_modules/@types/node/dns.d.ts","../node_modules/@types/node/dns/promises.d.ts","../node_modules/@types/node/domain.d.ts","../node_modules/@types/node/dom-events.d.ts","../node_modules/@types/node/events.d.ts","../node_modules/@types/node/fs.d.ts","../node_modules/@types/node/fs/promises.d.ts","../node_modules/@types/node/http.d.ts","../node_modules/@types/node/http2.d.ts","../node_modules/@types/node/https.d.ts","../node_modules/@types/node/inspector.d.ts","../node_modules/@types/node/module.d.ts","../node_modules/@types/node/net.d.ts","../node_modules/@types/node/os.d.ts","../node_modules/@types/node/path.d.ts","../node_modules/@types/node/perf_hooks.d.ts","../node_modules/@types/node/process.d.ts","../node_modules/@types/node/punycode.d.ts","../node_modules/@types/node/querystring.d.ts","../node_modules/@types/node/readline.d.ts","../node_modules/@types/node/readline/promises.d.ts","../node_modules/@types/node/repl.d.ts","../node_modules/@types/node/sea.d.ts","../node_modules/@types/node/stream.d.ts","../node_modules/@types/node/stream/promises.d.ts","../node_modules/@types/node/stream/consumers.d.ts","../node_modules/@types/node/stream/web.d.ts","../node_modules/@types/node/string_decoder.d.ts","../node_modules/@types/node/test.d.ts","../node_modules/@types/node/timers.d.ts","../node_modules/@types/node/timers/promises.d.ts","../node_modules/@types/node/tls.d.ts","../node_modules/@types/node/trace_events.d.ts","../node_modules/@types/node/tty.d.ts","../node_modules/@types/node/url.d.ts","../node_modules/@types/node/util.d.ts","../node_modules/@types/node/v8.d.ts","../node_modules/@types/node/vm.d.ts","../node_modules/@types/node/wasi.d.ts","../node_modules/@types/node/worker_threads.d.ts","../node_modules/@types/node/zlib.d.ts","../node_modules/@types/node/index.d.ts","../node_modules/@types/convict/index.d.ts","../node_modules/@types/convict-format-with-validator/index.d.ts","../node_modules/@puppeteer/browsers/lib/cjs/browser-data/types.d.ts","../node_modules/@puppeteer/browsers/lib/cjs/browser-data/chrome.d.ts","../node_modules/@puppeteer/browsers/lib/cjs/browser-data/chrome-headless-shell.d.ts","../node_modules/@puppeteer/browsers/lib/cjs/browser-data/chromedriver.d.ts","../node_modules/@puppeteer/browsers/lib/cjs/browser-data/chromium.d.ts","../node_modules/@puppeteer/browsers/lib/cjs/browser-data/firefox.d.ts","../node_modules/@puppeteer/browsers/lib/cjs/browser-data/browser-data.d.ts","../node_modules/@puppeteer/browsers/lib/cjs/launch.d.ts","../node_modules/@puppeteer/browsers/lib/cjs/Cache.d.ts","../node_modules/@puppeteer/browsers/lib/cjs/install.d.ts","../node_modules/@puppeteer/browsers/lib/cjs/detectPlatform.d.ts","../node_modules/@puppeteer/browsers/lib/cjs/CLI.d.ts","../node_modules/@puppeteer/browsers/lib/cjs/main.d.ts","../node_modules/axios/index.d.cts","../node_modules/form-data/index.d.ts","../node_modules/ipaddr.js/lib/ipaddr.js.d.ts","../node_modules/node-cache/index.d.ts","../node_modules/@types/node-os-utils/lib/cpu.d.ts","../node_modules/@types/node-os-utils/lib/drive.d.ts","../node_modules/@types/node-os-utils/lib/mem.d.ts","../node_modules/@types/node-os-utils/lib/netstat.d.ts","../node_modules/@types/node-os-utils/lib/openfiles.d.ts","../node_modules/@types/node-os-utils/lib/os.d.ts","../node_modules/@types/node-os-utils/lib/oscmd.d.ts","../node_modules/@types/node-os-utils/lib/proc.d.ts","../node_modules/@types/node-os-utils/lib/users.d.ts","../node_modules/@types/node-os-utils/lib/exec.d.ts","../node_modules/@types/node-os-utils/lib/index.d.ts","../node_modules/@types/node-os-utils/index.d.ts","../node_modules/pidtree/index.d.ts","../node_modules/@types/pidusage/index.d.ts","../node_modules/typed-query-selector/parser.d.ts","../node_modules/devtools-protocol/types/protocol.d.ts","../node_modules/devtools-protocol/types/protocol-mapping.d.ts","../node_modules/chromium-bidi/lib/cjs/protocol/generated/webdriver-bidi.d.ts","../node_modules/chromium-bidi/lib/cjs/protocol/cdp.d.ts","../node_modules/chromium-bidi/lib/cjs/protocol/generated/webdriver-bidi-bluetooth.d.ts","../node_modules/chromium-bidi/lib/cjs/protocol/generated/webdriver-bidi-permissions.d.ts","../node_modules/chromium-bidi/lib/cjs/protocol/chromium-bidi.d.ts","../node_modules/chromium-bidi/lib/cjs/protocol/ErrorResponse.d.ts","../node_modules/chromium-bidi/lib/cjs/protocol/protocol.d.ts","../node_modules/puppeteer-core/lib/types.d.ts","../node_modules/chalk/index.d.ts","../node_modules/lorem-ipsum/types/src/constants/formats.d.ts","../node_modules/lorem-ipsum/types/src/constants/units.d.ts","../node_modules/lorem-ipsum/types/src/lib/generator.d.ts","../node_modules/lorem-ipsum/types/src/lib/LoremIpsum.d.ts","../node_modules/lorem-ipsum/types/src/index.d.ts","../node_modules/puppeteer-intercept-and-modify-requests/cjs/urlPattern.d.ts","../node_modules/puppeteer-intercept-and-modify-requests/cjs/main.d.ts","../node_modules/@types/sdp-transform/index.d.ts","../src/rtcstats.ts","../node_modules/@types/fast-stats/index.d.ts","../node_modules/prom-client/index.d.ts","../node_modules/@types/sprintf-js/index.d.ts","../src/stats.ts","../src/media.ts","../src/session.ts","../src/utils.ts","../src/config.ts","../node_modules/@types/mime/index.d.ts","../node_modules/@types/send/index.d.ts","../node_modules/@types/qs/index.d.ts","../node_modules/@types/range-parser/index.d.ts","../node_modules/@types/express-serve-static-core/index.d.ts","../node_modules/@types/http-errors/index.d.ts","../node_modules/@types/serve-static/index.d.ts","../node_modules/@types/connect/index.d.ts","../node_modules/@types/body-parser/index.d.ts","../node_modules/@types/express/index.d.ts","../node_modules/@types/compression/index.d.ts","../node_modules/@types/tar-stream/index.d.ts","../node_modules/@types/tar-fs/index.d.ts","../node_modules/@types/ws/index.d.ts","../node_modules/@types/basic-auth/index.d.ts","../src/server.ts","../src/visqol.ts","../src/vmaf.ts","../src/app.ts","../src/generate-config-docs.ts","../src/index.ts","../node_modules/keyv/src/index.d.ts","../node_modules/@types/http-cache-semantics/index.d.ts","../node_modules/@types/responselike/index.d.ts","../node_modules/@types/cacheable-request/index.d.ts","../node_modules/@types/ms/index.d.ts","../node_modules/@types/debug/index.d.ts","../node_modules/@types/estree/index.d.ts","../node_modules/@types/json-schema/index.d.ts","../node_modules/@types/eslint/use-at-your-own-risk.d.ts","../node_modules/@types/eslint/index.d.ts","../node_modules/@eslint/core/dist/cjs/types.d.cts","../node_modules/eslint/lib/types/use-at-your-own-risk.d.ts","../node_modules/eslint/lib/types/index.d.ts","../node_modules/@types/eslint-scope/index.d.ts","../node_modules/@types/unist/index.d.ts","../node_modules/@types/hast/index.d.ts","../node_modules/@types/json5/index.d.ts","../node_modules/@types/keyv/index.d.ts","../node_modules/@types/semver/classes/semver.d.ts","../node_modules/@types/semver/functions/parse.d.ts","../node_modules/@types/semver/functions/valid.d.ts","../node_modules/@types/semver/functions/clean.d.ts","../node_modules/@types/semver/functions/inc.d.ts","../node_modules/@types/semver/functions/diff.d.ts","../node_modules/@types/semver/functions/major.d.ts","../node_modules/@types/semver/functions/minor.d.ts","../node_modules/@types/semver/functions/patch.d.ts","../node_modules/@types/semver/functions/prerelease.d.ts","../node_modules/@types/semver/functions/compare.d.ts","../node_modules/@types/semver/functions/rcompare.d.ts","../node_modules/@types/semver/functions/compare-loose.d.ts","../node_modules/@types/semver/functions/compare-build.d.ts","../node_modules/@types/semver/functions/sort.d.ts","../node_modules/@types/semver/functions/rsort.d.ts","../node_modules/@types/semver/functions/gt.d.ts","../node_modules/@types/semver/functions/lt.d.ts","../node_modules/@types/semver/functions/eq.d.ts","../node_modules/@types/semver/functions/neq.d.ts","../node_modules/@types/semver/functions/gte.d.ts","../node_modules/@types/semver/functions/lte.d.ts","../node_modules/@types/semver/functions/cmp.d.ts","../node_modules/@types/semver/functions/coerce.d.ts","../node_modules/@types/semver/classes/comparator.d.ts","../node_modules/@types/semver/classes/range.d.ts","../node_modules/@types/semver/functions/satisfies.d.ts","../node_modules/@types/semver/ranges/max-satisfying.d.ts","../node_modules/@types/semver/ranges/min-satisfying.d.ts","../node_modules/@types/semver/ranges/to-comparators.d.ts","../node_modules/@types/semver/ranges/min-version.d.ts","../node_modules/@types/semver/ranges/valid.d.ts","../node_modules/@types/semver/ranges/outside.d.ts","../node_modules/@types/semver/ranges/gtr.d.ts","../node_modules/@types/semver/ranges/ltr.d.ts","../node_modules/@types/semver/ranges/intersects.d.ts","../node_modules/@types/semver/ranges/simplify.d.ts","../node_modules/@types/semver/ranges/subset.d.ts","../node_modules/@types/semver/internals/identifiers.d.ts","../node_modules/@types/semver/index.d.ts","../node_modules/@types/triple-beam/index.d.ts","../node_modules/@types/yauzl/index.d.ts"],"fileIdsList":[[90,133,273],[90,133,160,191],[90,133,191],[90,133,185,186,187,188,189,190],[90,133,185,186],[90,133,185],[90,133],[90,133,191,193],[90,133,134,191],[90,133,191,192,193,194,195,196],[90,133,182],[90,133,148,182,252],[90,133,145,148,175,182,266,267,268],[90,133,254],[90,133,148,182],[90,133,183],[90,133,270],[90,133,272,278],[90,133,272,273,274],[90,133,275],[90,133,145,148,182,246,247,248],[90,133,249,251,253],[90,133,280],[90,133,145,182],[90,133,212],[90,133,202,203,204,205,206,207,208,209,210,211],[90,130,133],[90,132,133],[133],[90,133,138,167],[90,133,134,139,145,146,153,164,175],[90,133,134,135,145,153],[85,86,87,90,133],[90,133,136,176],[90,133,137,138,146,154],[90,133,138,164,172],[90,133,139,141,145,153],[90,132,133,140],[90,133,141,142],[90,133,145],[90,133,143,145],[90,132,133,145],[90,133,145,146,147,164,175],[90,133,145,146,147,160,164,167],[90,128,133,180],[90,133,141,145,148,153,164,175],[90,133,145,146,148,149,153,164,172,175],[90,133,148,150,164,172,175],[88,89,90,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181],[90,133,145,151],[90,133,152,175,180],[90,133,141,145,153,164],[90,133,154],[90,133,155],[90,132,133,156],[90,130,131,132,133,134,135,136,137,138,139,140,141,142,143,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181],[90,133,158],[90,133,159],[90,133,145,160,161],[90,133,160,162,176,178],[90,133,145,164,165,167],[90,133,166,167],[90,133,164,165],[90,133,167],[90,133,168],[90,130,133,164],[90,133,145,170,171],[90,133,170,171],[90,133,138,153,164,172],[90,133,173],[90,133,153,174],[90,133,148,159,175],[90,133,138,176],[90,133,164,177],[90,133,152,178],[90,133,179],[90,133,138,145,147,156,164,175,178,180],[90,133,164,181],[90,133,148,164,182],[90,133,284,323],[90,133,284,308,323],[90,133,323],[90,133,284],[90,133,284,309,323],[90,133,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322],[90,133,309,323],[90,133,146,164,182,245],[90,133,148,182,246,250],[90,133,146,182,256],[90,133,164,182],[90,133,145,148,150,153,164,172,175,181,182],[90,133,145,164,182],[64,65,66,67,90,133],[70,90,133],[69,90,133],[69,70,71,72,73,74,75,76,77,78,79,90,133],[90,133,219],[90,133,217,218,219],[90,133,219,220,221,222],[90,133,219,220,221,222,223,224],[90,133,217],[90,133,272,273,276,277],[90,133,278],[72,90,133],[81,82,90,133],[90,133,228,229,230,231],[90,133,228,230],[74,90,133],[90,133,134,164,182,216,217,218,225],[90,133,226,233],[90,100,104,133,175],[90,100,133,164,175],[90,95,133],[90,97,100,133,172,175],[90,133,153,172],[90,95,133,182],[90,97,100,133,153,175],[90,92,93,96,99,133,145,164,175],[90,100,107,133],[90,92,98,133],[90,100,121,122,133],[90,96,100,133,167,175,182],[90,121,133,182],[90,94,95,133,182],[90,100,133],[90,94,95,96,97,98,99,100,101,102,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,122,123,124,125,126,127,133],[90,100,115,133],[90,100,107,108,133],[90,98,100,108,109,133],[90,99,133],[90,92,95,100,133],[90,100,104,108,109,133],[90,104,133],[90,98,100,103,133,175],[90,92,97,100,107,133],[90,133,164],[90,95,100,121,133,180,182],[68,80,83,84,90,133,146,155,240,241,242,243,244,260,261,262],[90,133,146,154,155,183,184,243],[90,133,147,244],[90,133,236,240,241,242,243,244,260,262,263],[90,133,146,243],[90,130,133,243],[90,133,138,146,148,150,154,155,181,240,242,243,244,254,255,257,258,259],[68,83,90,130,133,145,146,154,155,181,198,201,226,227,232,234,235,236,240,241,243],[83,90,133,145,146,148,150,155,181,198,227,236,237,238,239,242,243],[90,133,134,138,141,146,150,153,154,155,197,198,199,200,201,213,214,215,226,242],[90,133,146,155,243],[83,90,133,146,154,155,240,243]],"fileInfos":[{"version":"69684132aeb9b5642cbcd9e22dff7818ff0ee1aa831728af0ecf97d3364d5546","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","impliedFormat":1},{"version":"ee7bad0c15b58988daa84371e0b89d313b762ab83cb5b31b8a2d1162e8eb41c2","impliedFormat":1},{"version":"092c2bfe125ce69dbb1223c85d68d4d2397d7d8411867b5cc03cec902c233763","affectsGlobalScope":true,"impliedFormat":1},{"version":"07f073f19d67f74d732b1adea08e1dc66b1b58d77cb5b43931dee3d798a2fd53","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7a3c8b952931daebdfc7a2897c53c0a1c73624593fa070e46bd537e64dcd20a","affectsGlobalScope":true,"impliedFormat":1},{"version":"80e18897e5884b6723488d4f5652167e7bb5024f946743134ecc4aa4ee731f89","affectsGlobalScope":true,"impliedFormat":1},{"version":"cd034f499c6cdca722b60c04b5b1b78e058487a7085a8e0d6fb50809947ee573","affectsGlobalScope":true,"impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"936e80ad36a2ee83fc3caf008e7c4c5afe45b3cf3d5c24408f039c1d47bdc1df","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"fef8cfad2e2dc5f5b3d97a6f4f2e92848eb1b88e897bb7318cef0e2820bceaab","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true,"impliedFormat":1},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true,"impliedFormat":1},{"version":"959d36cddf5e7d572a65045b876f2956c973a586da58e5d26cde519184fd9b8a","affectsGlobalScope":true,"impliedFormat":1},{"version":"965f36eae237dd74e6cca203a43e9ca801ce38824ead814728a2807b1910117d","affectsGlobalScope":true,"impliedFormat":1},{"version":"3925a6c820dcb1a06506c90b1577db1fdbf7705d65b62b99dce4be75c637e26b","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a3d63ef2b853447ec4f749d3f368ce642264246e02911fcb1590d8c161b8005","affectsGlobalScope":true,"impliedFormat":1},{"version":"b5ce7a470bc3628408429040c4e3a53a27755022a32fd05e2cb694e7015386c7","affectsGlobalScope":true,"impliedFormat":1},{"version":"8444af78980e3b20b49324f4a16ba35024fef3ee069a0eb67616ea6ca821c47a","affectsGlobalScope":true,"impliedFormat":1},{"version":"3287d9d085fbd618c3971944b65b4be57859f5415f495b33a6adc994edd2f004","affectsGlobalScope":true,"impliedFormat":1},{"version":"b4b67b1a91182421f5df999988c690f14d813b9850b40acd06ed44691f6727ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"3cbad9a1ba4453443026ed38e4b8be018abb26565fa7c944376463ad9df07c41","impliedFormat":1},{"version":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","impliedFormat":1},{"version":"bd28c9f28c2b9008b46ac5a90e3f397f8285f23b4f7c05171971d30649ffaaa0","impliedFormat":1},{"version":"1ac2233a7e5c90b465205cd7312463f9fd15f4655f03c7126a161f9f42ec58da","impliedFormat":1},{"version":"9135f578c1159fbc1a37339a1187c3d44459ec16090e2b84ed6c761900cf8afe","impliedFormat":1},{"version":"99e19059c4bd18df586ee56283eb59b0aba861204fb89cde18e064d64f6dc0ec","impliedFormat":1},{"version":"b4e123af1af6049685c93073a15868b50aebdad666d422edc72fa2b585fa8a37","impliedFormat":1},{"version":"f86c04a744ebcede96bac376f9a2c90f2bd3c422740d91dda4ca6233199d4977","impliedFormat":1},{"version":"6ae1bddee5c790439bd992abd063b9b46e0cadd676c2a8562268d1869213ff60","impliedFormat":1},{"version":"606244fc97a6a74b877f2e924ba7e55b233bc6acb57d7bf40ba84a5be2d9adb0","impliedFormat":1},{"version":"4a1cabac71036b8a14f5db1b753b579f0c901c7d7b9227e6872dadf6efb104e8","impliedFormat":1},{"version":"062959a1d825b96639d87be35fe497cbd3f89544bf06fdad577bbfb85fcf604c","impliedFormat":1},{"version":"4c3672dc8f4e4fdd3d18525b22b31f1b5481f5a415db96550d3ac5163a6c3dd3","impliedFormat":1},{"version":"f9a69ca445010b91fe08f08c06e0f86d79c0d776905f9bdb828477cb2a1eb7fc","impliedFormat":1},{"version":"ad7fd0e7ee457d4884b3aaecbcbd2a80b6803407c4ce2540c296170d4c7918ef","impliedFormat":1},{"version":"a50ef21605f41c6acad6c3ef0307e5311b94963c846ca093c764b80cdb5318d6","impliedFormat":1},{"version":"74b4035dd26d09a417c44ca23ab5ee69b173f8c2f6b2e47350ab0795cf2d4a17","impliedFormat":1},{"version":"918f86ee2b19cc38cb8b1a4cf8f223eb228aaa39df3604c42f700fac2f0b3ea1","impliedFormat":1},{"version":"88a3a6f8c2a1640d8d5fd30d8d86462f8babd86a1e52fab0e8b7f7c141fb348e","impliedFormat":1},{"version":"345f76c854da724803c96f727a3f9c75e26cf95c6e7b8c1064dbc4e7727b74e6","impliedFormat":1},{"version":"ab7b7a15a5d73eb0cfc2b973e580f357f07492bff6608669d7e899e2d49ac9a3","impliedFormat":1},{"version":"14e27c8804ce2fe36fe1cfdbea2c0625cb97f4c20394fa9973567fb09cc03406","impliedFormat":1},{"version":"70521b6ab0dcba37539e5303104f29b721bfb2940b2776da4cc818c07e1fefc1","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab41ef1f2cdafb8df48be20cd969d875602483859dc194e9c97c8a576892c052","affectsGlobalScope":true,"impliedFormat":1},{"version":"d153a11543fd884b596587ccd97aebbeed950b26933ee000f94009f1ab142848","affectsGlobalScope":true,"impliedFormat":1},{"version":"21d819c173c0cf7cc3ce57c3276e77fd9a8a01d35a06ad87158781515c9a438a","impliedFormat":1},{"version":"a79e62f1e20467e11a904399b8b18b18c0c6eea6b50c1168bf215356d5bebfaf","affectsGlobalScope":true,"impliedFormat":1},{"version":"6b80c6175da9de59bace50a72c2d68490d4ab5b07016ff5367bc7ba33cf2f219","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e9c23ba78aabc2e0a27033f18737a6df754067731e69dc5f52823957d60a4b6","impliedFormat":1},{"version":"5929864ce17fba74232584d90cb721a89b7ad277220627cc97054ba15a98ea8f","impliedFormat":1},{"version":"24bd580b5743dc56402c440dc7f9a4f5d592ad7a419f25414d37a7bfe11e342b","impliedFormat":1},{"version":"25c8056edf4314820382a5fdb4bb7816999acdcb929c8f75e3f39473b87e85bc","impliedFormat":1},{"version":"c464d66b20788266e5353b48dc4aa6bc0dc4a707276df1e7152ab0c9ae21fad8","impliedFormat":1},{"version":"78d0d27c130d35c60b5e5566c9f1e5be77caf39804636bc1a40133919a949f21","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"1d6e127068ea8e104a912e42fc0a110e2aa5a66a356a917a163e8cf9a65e4a75","impliedFormat":1},{"version":"5ded6427296cdf3b9542de4471d2aa8d3983671d4cac0f4bf9c637208d1ced43","impliedFormat":1},{"version":"6bdc71028db658243775263e93a7db2fd2abfce3ca569c3cca5aee6ed5eb186d","impliedFormat":1},{"version":"cadc8aced301244057c4e7e73fbcae534b0f5b12a37b150d80e5a45aa4bebcbd","impliedFormat":1},{"version":"385aab901643aa54e1c36f5ef3107913b10d1b5bb8cbcd933d4263b80a0d7f20","impliedFormat":1},{"version":"9670d44354bab9d9982eca21945686b5c24a3f893db73c0dae0fd74217a4c219","impliedFormat":1},{"version":"0b8a9268adaf4da35e7fa830c8981cfa22adbbe5b3f6f5ab91f6658899e657a7","impliedFormat":1},{"version":"11396ed8a44c02ab9798b7dca436009f866e8dae3c9c25e8c1fbc396880bf1bb","impliedFormat":1},{"version":"ba7bc87d01492633cb5a0e5da8a4a42a1c86270e7b3d2dea5d156828a84e4882","impliedFormat":1},{"version":"4893a895ea92c85345017a04ed427cbd6a1710453338df26881a6019432febdd","impliedFormat":1},{"version":"c21dc52e277bcfc75fac0436ccb75c204f9e1b3fa5e12729670910639f27343e","impliedFormat":1},{"version":"13f6f39e12b1518c6650bbb220c8985999020fe0f21d818e28f512b7771d00f9","impliedFormat":1},{"version":"9b5369969f6e7175740bf51223112ff209f94ba43ecd3bb09eefff9fd675624a","impliedFormat":1},{"version":"4fe9e626e7164748e8769bbf74b538e09607f07ed17c2f20af8d680ee49fc1da","impliedFormat":1},{"version":"24515859bc0b836719105bb6cc3d68255042a9f02a6022b3187948b204946bd2","impliedFormat":1},{"version":"ea0148f897b45a76544ae179784c95af1bd6721b8610af9ffa467a518a086a43","impliedFormat":1},{"version":"24c6a117721e606c9984335f71711877293a9651e44f59f3d21c1ea0856f9cc9","impliedFormat":1},{"version":"dd3273ead9fbde62a72949c97dbec2247ea08e0c6952e701a483d74ef92d6a17","impliedFormat":1},{"version":"405822be75ad3e4d162e07439bac80c6bcc6dbae1929e179cf467ec0b9ee4e2e","impliedFormat":1},{"version":"0db18c6e78ea846316c012478888f33c11ffadab9efd1cc8bcc12daded7a60b6","impliedFormat":1},{"version":"4d2b0eb911816f66abe4970898f97a2cfc902bcd743cbfa5017fad79f7ef90d8","impliedFormat":1},{"version":"bd0532fd6556073727d28da0edfd1736417a3f9f394877b6d5ef6ad88fba1d1a","impliedFormat":1},{"version":"89167d696a849fce5ca508032aabfe901c0868f833a8625d5a9c6e861ef935d2","impliedFormat":1},{"version":"e53a3c2a9f624d90f24bf4588aacd223e7bec1b9d0d479b68d2f4a9e6011147f","impliedFormat":1},{"version":"24b8685c62562f5d98615c5a0c1d05f297cf5065f15246edfe99e81ec4c0e011","impliedFormat":1},{"version":"93507c745e8f29090efb99399c3f77bec07db17acd75634249dc92f961573387","impliedFormat":1},{"version":"339dc5265ee5ed92e536a93a04c4ebbc2128f45eeec6ed29f379e0085283542c","impliedFormat":1},{"version":"4732aec92b20fb28c5fe9ad99521fb59974289ed1e45aecb282616202184064f","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"bf67d53d168abc1298888693338cb82854bdb2e69ef83f8a0092093c2d562107","impliedFormat":1},{"version":"08faa97886e71757779428dd4c69a545c32c85fd629d1116d42710b32c6378bc","affectsGlobalScope":true,"impliedFormat":1},{"version":"6b042aa5d277ad6963e2837179fd2f8fbb01968ac67115b0833c0244e93d1d50","impliedFormat":1},{"version":"7394959e5a741b185456e1ef5d64599c36c60a323207450991e7a42e08911419","impliedFormat":1},{"version":"3d77c73be94570813f8cadd1f05ebc3dc5e2e4fdefe4d340ca20cd018724ee36","impliedFormat":1},{"version":"23cfd70b42094e54cc3c5dab996d81b97e2b6f38ccb24ead85454b8ddfe2fc4f","affectsGlobalScope":true,"impliedFormat":1},{"version":"f3e58c4c18a031cbb17abec7a4ad0bd5ae9fc70c1f4ba1e7fb921ad87c504aca","impliedFormat":1},{"version":"a3e8bafb2af8e850c644f4be7f5156cf7d23b7bfdc3b786bd4d10ed40329649c","impliedFormat":1},{"version":"35ec8b6760fd7138bbf5809b84551e31028fb2ba7b6dc91d95d098bf212ca8b4","affectsGlobalScope":true,"impliedFormat":1},{"version":"5524481e56c48ff486f42926778c0a3cce1cc85dc46683b92b1271865bcf015a","impliedFormat":1},{"version":"4b87f767c7bc841511113c876a6b8bf1fd0cb0b718c888ad84478b372ec486b1","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d04e3640dd9eb67f7f1e5bd3d0bf96c784666f7aefc8ac1537af6f2d38d4c29","impliedFormat":1},{"version":"3c884d9d9ec454bdf0d5a0b8465bf8297d2caa4d853851d92cc417ac6f30b969","impliedFormat":1},{"version":"5a369483ac4cfbdf0331c248deeb36140e6907db5e1daed241546b4a2055f82c","impliedFormat":1},{"version":"e8f5b5cc36615c17d330eaf8eebbc0d6bdd942c25991f96ef122f246f4ff722f","impliedFormat":1},{"version":"f0bd7e6d931657b59605c44112eaf8b980ba7f957a5051ed21cb93d978cf2f45","impliedFormat":1},{"version":"ee1ee365d88c4c6c0c0a5a5701d66ebc27ccd0bcfcfaa482c6e2e7fe7b98edf7","affectsGlobalScope":true,"impliedFormat":1},{"version":"0ada07543808f3b967624645a8e1ccd446f8b01ade47842acf1328aec899fed0","affectsGlobalScope":true,"impliedFormat":1},{"version":"b79ca740194c9e90bd6657046411c940d0c79dcc35392a15b02be5ba9ac55eb0","impliedFormat":1},{"version":"71adf5dbc59568663d252a46179e71e4d544c053978bfc526d11543a3f716f42","impliedFormat":1},{"version":"38bf8ff1b403c861e9052c9ea651cb4f38c1ecc084a34d79f8acc6d6477a7321","impliedFormat":1},{"version":"93bd413918fa921c8729cef45302b24d8b6c7855d72d5bf82d3972595ae8dcbf","impliedFormat":1},{"version":"4ff41188773cbf465807dd2f7059c7494cbee5115608efc297383832a1150c43","impliedFormat":1},{"version":"dccdf1677e531e33f8ac961a68bc537418c9a414797c1ea7e91307501cdc3f5e","impliedFormat":1},{"version":"e184c4b8918ef56c8c9e68bd79f3f3780e2d0d75bf2b8a41da1509a40c2deb46","affectsGlobalScope":true,"impliedFormat":1},{"version":"d206b4baf4ddcc15d9d69a9a2f4999a72a2c6adeaa8af20fa7a9960816287555","impliedFormat":1},{"version":"93f437e1398a4f06a984f441f7fa7a9f0535c04399619b5c22e0b87bdee182cb","impliedFormat":1},{"version":"afbe24ab0d74694372baa632ecb28bb375be53f3be53f9b07ecd7fc994907de5","impliedFormat":1},{"version":"70731d10d5311bd4cf710ef7f6539b62660f4b0bfdbb3f9fbe1d25fe6366a7fa","affectsGlobalScope":true,"impliedFormat":1},{"version":"6b19db3600a17af69d4f33d08cc7076a7d19fb65bb36e442cac58929ec7c9482","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e043a1bc8fbf2a255bccf9bf27e0f1caf916c3b0518ea34aa72357c0afd42ec","impliedFormat":1},{"version":"137c2894e8f3e9672d401cc0a305dc7b1db7c69511cf6d3970fb53302f9eae09","impliedFormat":1},{"version":"3bc2f1e2c95c04048212c569ed38e338873f6a8593930cf5a7ef24ffb38fc3b6","impliedFormat":1},{"version":"8145e07aad6da5f23f2fcd8c8e4c5c13fb26ee986a79d03b0829b8fce152d8b2","impliedFormat":1},{"version":"f9d9d753d430ed050dc1bf2667a1bab711ccbb1c1507183d794cc195a5b085cc","impliedFormat":1},{"version":"9eece5e586312581ccd106d4853e861aaaa1a39f8e3ea672b8c3847eedd12f6e","impliedFormat":1},{"version":"ba1f814c22fd970255ddd60d61fb7e00c28271c933ab5d5cc19cd3ca66b8f57c","impliedFormat":1},{"version":"37ba7b45141a45ce6e80e66f2a96c8a5ab1bcef0fc2d0f56bb58df96ec67e972","impliedFormat":1},{"version":"125d792ec6c0c0f657d758055c494301cc5fdb327d9d9d5960b3f129aff76093","impliedFormat":1},{"version":"295f068af94245ee9d780555351bef98adfd58f8baf0b9dadbc31a489b881f8b","affectsGlobalScope":true,"impliedFormat":1},{"version":"1851a3b4db78664f83901bb9cac9e45e03a37bb5933cc5bf37e10bb7e91ab4eb","impliedFormat":1},{"version":"09d479208911ac3ac6a7c2fe86217fc1abe6c4f04e2d52e4890e500699eeab32","affectsGlobalScope":true,"impliedFormat":1},{"version":"12ed4559eba17cd977aa0db658d25c4047067444b51acfdcbf38470630642b23","affectsGlobalScope":true,"impliedFormat":1},{"version":"f3ffabc95802521e1e4bcba4c88d8615176dc6e09111d920c7a213bdda6e1d65","impliedFormat":1},{"version":"4f029899f9bae07e225c43aef893590541b2b43267383bf5e32e3a884d219ed5","impliedFormat":1},{"version":"ae56f65caf3be91108707bd8dfbccc2a57a91feb5daabf7165a06a945545ed26","impliedFormat":1},{"version":"a136d5de521da20f31631a0a96bf712370779d1c05b7015d7019a9b2a0446ca9","impliedFormat":1},{"version":"5b566927cad2ed2139655d55d690ffa87df378b956e7fe1c96024c4d9f75c4cf","affectsGlobalScope":true,"impliedFormat":1},{"version":"bce947017cb7a2deebcc4f5ba04cead891ce6ad1602a4438ae45ed9aa1f39104","affectsGlobalScope":true,"impliedFormat":1},{"version":"d3dffd70e6375b872f0b4e152de4ae682d762c61a24881ecc5eb9f04c5caf76f","impliedFormat":1},{"version":"e2c72c065a36bc9ab2a00ac6a6f51e71501619a72c0609defd304d46610487a4","impliedFormat":1},{"version":"d91a7d8b5655c42986f1bdfe2105c4408f472831c8f20cf11a8c3345b6b56c8c","impliedFormat":1},{"version":"616075a6ac578cf5a013ee12964188b4412823796ce0b202c6f1d2e4ca8480d7","affectsGlobalScope":true,"impliedFormat":1},{"version":"e8a979b8af001c9fc2e774e7809d233c8ca955a28756f52ee5dee88ccb0611d2","impliedFormat":1},{"version":"cac793cc47c29e26e4ac3601dcb00b4435ebed26203485790e44f2ad8b6ad847","impliedFormat":1},{"version":"03d0e8cd16f16b504879544f6323f0e0a9ca9a6e70277c15bf3db9eeedb435cc","impliedFormat":1},{"version":"92d4cd0e80a54da81b6dca627c6b7f3357f91227ee5a2f807fe170c5e1486c85","impliedFormat":1},{"version":"dec3eea620eb3b6a92f34a3b0eacd2ce380b3ee1534dfeb3fdf87292d60a7662","impliedFormat":1},{"version":"43d0b9e548423d5b3e18da5a730a4b88bf79de0da9ee86074ae7407d2d0a3a30","impliedFormat":1},{"version":"926436925f92ab0dc9fa79b2b017ac8021c67bc9e67733b0dccf40f7d4641444","impliedFormat":1},{"version":"926436925f92ab0dc9fa79b2b017ac8021c67bc9e67733b0dccf40f7d4641444","impliedFormat":1},{"version":"8a1aadc9be97a4585462c8f47da805ac76b0d097e735ea7e96cda052ea5d0aa4","impliedFormat":1},{"version":"c7b4e4a9b6385ba6da1c96424422aeed5173dbb4b04d412d5ec7f2364293d906","impliedFormat":1},{"version":"d6affb3b1bb702998a2c688746777657cd67ef8d414a0d1febc0a69c46610219","impliedFormat":1},{"version":"3311f573c7a2c973cb121f9b5936d883791a6c2a8c71edffb423138d387637d4","impliedFormat":1},{"version":"da433bdc883124501021e0a7214d73927aeffbd97e99b10288f491a5c51ba142","impliedFormat":1},{"version":"369b016417b3c87952cb5e74d7d49a28c9478c63e3edacebef0d8ecfff276665","impliedFormat":1},{"version":"c13bd0c085ca142129f97a360a93e9ed3df8ec2800669fecfd89bb9c0f49ce08","impliedFormat":1},{"version":"6804de6b44b809ffb0344ccb983582ef32f7eba5b31bcd5e196260678e5fb9ce","impliedFormat":1},{"version":"c1f982bf2fa1fc66145a71e1e99b6f86e1659ddb83515f19ea0c8c3964460221","impliedFormat":1},{"version":"22588e0164314bd52ab66e6de987083ed0c571eecaae452826f7d34bdde0a728","impliedFormat":1},{"version":"736097ddbb2903bef918bb3b5811ef1c9c5656f2a73bd39b22a91b9cc2525e50","impliedFormat":1},{"version":"4f64ce354176bc42b9f9647ea28cd2452a798296fca13f281c634c32f1473e52","impliedFormat":1},{"version":"6f4e4e5a046171e70dfb4b1f3e6212de786bf2c1e2c4383ae0e61c4726fdd168","impliedFormat":1},{"version":"74fac6716b0c47e28328f1c653979ea898a23becf162e54151e0169cc71f1d5d","impliedFormat":1},{"version":"8d9f98854e03f35560144c7f8f658356894256a171afba67334513de1ed93884","impliedFormat":1},{"version":"15b56e00be72d073e504118fab62a89e426c647d99bb8d5bff0f20779fc0c2d2","impliedFormat":1},{"version":"c21eaf8e9ef83478359d02979320296c8e22f16001d7fb4e05fc3368d3af0a87","impliedFormat":1},{"version":"86be932eda4cfa8d3a94fe867d6ce0931a29f004bc412ce8f0c99c190f83dd96","impliedFormat":1},{"version":"ccb08a3ed167a2e8e5962a45e96579de7d0124a71f468172dc338aa6ffad4c83","impliedFormat":1},{"version":"80969e8d5da1ea6f703dcd8bb53648d1ec868a20428a871b1b4044a93ff7662a","impliedFormat":1},{"version":"52530a73b7ea03cd827b429d287ac2d92f8fbeb8899c6393a5a892d6752b6ac7","impliedFormat":1},{"version":"6817f78a0feb443d7c1d3e26981a6ef299d1b97a9f143ef9a6e0452f772125a4","impliedFormat":1},{"version":"5eddd5ce888c9c67af9d6926fe606f8c2e9d63202fd07015233259dc1b1b3558","impliedFormat":1},{"version":"5d6319684bec5c1c45a09057356f916e5765a061f67bc05ed67403d4d35facaf","impliedFormat":1},{"version":"f061b48a5ab25a86e6b9b5fed906f466036bb2213226117ef4b711d4cacf8863","impliedFormat":1},{"version":"ffaf52a3034df7867ed671a95f983477afa4a76c4b116a2352dc18ca5f86a842","impliedFormat":1},{"version":"327fddc7dd391f1e62262dafe41fc9cabedb4a5758a5cfce979cebab1456abb8","impliedFormat":1},{"version":"f21ce049835dad382b22691fb6b34076d0717307d46d92320893765be010cd56","impliedFormat":1},{"version":"f5dafd7695c26dac2761d179d5e656ff884b76f4d4edebfef3e9fc311a21ea7a","impliedFormat":1},{"version":"105b17e1ab27036dea7ab9f523e7c7f34cf3e42dc00db13a59fe9dd39acbd154","impliedFormat":1},{"version":"7fda4d14bfe38df69ccdf5587320d92a19ccdb0baf37682c847a78bbb5843071","impliedFormat":1},{"version":"b20550496b496031dadad8f80eec01d115b299cb285ffc2bd64873e123efc0cf","impliedFormat":1},{"version":"c46813bfd156c5357506d49c461131c7f75367bf52052274c9889315fd12af29","impliedFormat":1},{"version":"665f83fc3e9992c7a5e15a470e4b9e10e8b588c35593b0058c8d1a9eca487c56","impliedFormat":1},{"version":"abcdf9e587a676297d3ec737c496309e20e8e7b8d042a0288de9f0d239314a8d","impliedFormat":1},{"version":"dd36b144e0e70b4e38f588913af663ed959b10b5cf80952a4beb22a10255bf08","impliedFormat":1},{"version":"d064b43717b5b5dfca0d6cd738022ab377c90e45f05edbcd5a0c8753e6627d88","impliedFormat":1},{"version":"030568f059b70531995fd154a7fe9b67e9a400b8ec985ebda268e4dd01aebfba","impliedFormat":1},{"version":"0d14fa22c41fdc7277e6f71473b20ebc07f40f00e38875142335d5b63cdfc9d2","impliedFormat":1},{"version":"bb0fe1ae87659c3a53f2ff02df8d60bc18db3aa324f0f2105f0fce1165546c6e","impliedFormat":1},{"version":"73637d91bb0797cc4d7c346704029abc1c75c4bb7cbafc99a4c17e65efa33bff","impliedFormat":1},{"version":"db23f52997209dfa4beafc61d3ac53173100ef297d87bac544ffb3a81ce8f1f6","impliedFormat":1},{"version":"53ea7ea793f3927e998fefc4617d667aae1ad63ec64a1c0c9fada7297582ecaa","impliedFormat":1},{"version":"a9ed4e1bdf11b186f99eba452af8f388d299ca5a4993de5cc111b21daedb12cf","impliedFormat":1},{"version":"096ad83367b12202696bd65f246c7bda9bf4d568b5bc41aaf8649bb08f861362","impliedFormat":1},{"version":"99da892bc2b4a6eaa5b5e0364a0bb97d4f77a643c128cea744c29d403512d449","impliedFormat":1},{"version":"c5d07d16211b3c98965b36411c1cf3067555fec3496fe80acc887088e81a5163","impliedFormat":1},{"version":"c301a002eca0cd55f79077df10222b974fb51bc845d99f48c7862bd27c37d4ce","signature":"03ebb0f4c4bcfb7b50eb30113a97eac34d1c477ec62f83c42d727442e3407e7d","impliedFormat":1},{"version":"9a9cce4b3a0dbc348667f76fa160a99564ed2e32d54a7cdab27422c886ecb337","impliedFormat":1},{"version":"e4ffb6aa67b82aca99315bd54365892ece9ed76ad37667a8dea478b7ac9a755a","impliedFormat":1},{"version":"4715c6f2d54ce488397a23f60c78a9d5d78e1230edbb8bc73940f3cbfba6f7c9","impliedFormat":1},{"version":"e492a0dc7b3b82931025bfa58cd11ea0ff8a716eb80bd385fe1590ef482cf874","signature":"0e691426f025401bb7c9a9eb865bc8a145b8c66cde2e3b13352291331cc6b1a8","impliedFormat":1},{"version":"142e417f9c626a88b337e326cf73219825629bedf8da7d0cbd7140118b0b390f","signature":"16df3d13fe974d335492b5269dec7a971d6ebe54a6d26b75b0d935d12e4d1106","impliedFormat":1},{"version":"47f4da38749fc1f191ff667b6540a4d6371b82620966071307a9f566a1d257fa","signature":"4d90e7895661d6aae7d758343564ac4286193bc41452839f3e6d659d8f74376d","affectsGlobalScope":true,"impliedFormat":1},{"version":"53fac25767bb29f82d1b3802e0e999f9450a3af7a6d51cd9fd5ef89f9881090c","signature":"46c67ad9d7989b57edd78155c6469b4ed7845133b30188c00ffcb5fccdf30b85","affectsGlobalScope":true,"impliedFormat":1},{"version":"3a6d1f3434216e52a4ef3995005f9b1c20a66f9470cd3b49666a0e2bac441572","signature":"3f87115add2bdbc6428b77788f90ec7a1ea4671f14b2ab1eccafd97aeebbf72e","impliedFormat":1},{"version":"d3f2d715f57df3f04bf7b16dde01dec10366f64fce44503c92b8f78f614c1769","impliedFormat":1},{"version":"b78cd10245a90e27e62d0558564f5d9a16576294eee724a59ae21b91f9269e4a","impliedFormat":1},{"version":"936eb43a381712a8ec1249f2afc819f6fc7ca68f10dfec71762b428dfdc53bf1","impliedFormat":1},{"version":"2f5747b1508ccf83fad0c251ba1e5da2f5a30b78b09ffa1cfaf633045160afed","impliedFormat":1},{"version":"86ea91bfa7fef1eeb958056f30f1db4e0680bc9b5132e5e9d6e9cfd773c0c4fd","affectsGlobalScope":true,"impliedFormat":1},{"version":"b71c603a539078a5e3a039b20f2b0a0d1708967530cf97dec8850a9ca45baa2b","impliedFormat":1},{"version":"0e13570a7e86c6d83dd92e81758a930f63747483e2cd34ef36fcdb47d1f9726a","impliedFormat":1},{"version":"104c67f0da1bdf0d94865419247e20eded83ce7f9911a1aa75fc675c077ca66e","impliedFormat":1},{"version":"cc0d0b339f31ce0ab3b7a5b714d8e578ce698f1e13d7f8c60bfb766baeb1d35c","impliedFormat":1},{"version":"d26a79f97f25eb1c5fc36a8552e4decc7ad11104a016d31b1307c3afaf48feb1","impliedFormat":1},{"version":"d1b87c21a23c9954f98a83e8c027fc0ef307081dc0057dfeaa15ffa340481ce7","affectsGlobalScope":true,"impliedFormat":1},{"version":"1c335c43fcd4f39e1fdf77bdc399a98fd7a783189181a8c8e8645ce51f4c26e0","impliedFormat":1},{"version":"3a4021d6b737115fee1732ed1a05bf93593f5766678046ea91221c9202721f8d","impliedFormat":1},{"version":"1ba59c8bbeed2cb75b239bb12041582fa3e8ef32f8d0bd0ec802e38442d3f317","impliedFormat":1},{"version":"1e186d52c605184cb8364152c92a35268bbb04f815c77db1f0830ad6eb176cc6","impliedFormat":1},{"version":"a08a07aaba3259ca171501ba502d6975566aa480e37a142c0588ab83653a90fe","signature":"419104be2b7f35964618d77eff7aa6959c26c527aab91cbbc6cc810e26cc8d27","impliedFormat":1},{"version":"1c4558d54d4cbd346b50108c7fcc11446fa0865841ddb1fbea74db1d13e00d71","signature":"7686795c295270d3062cfcd0a94de410c07d6b08777ccd3324a28b3546b0eeaa","impliedFormat":1},{"version":"a80e3b01e42b967937cbe3a5b5797756e9072a1cd71eda12cb8a9ac71bac4db2","signature":"6dab4c563130520ecdf2b5cb11ade6b7c6fb2d0455134e3274ee33fa7c029819","impliedFormat":1},{"version":"1c992e190fbfce6e20de71ed10a994ff2f5c7e8bfc694b633980d48592bce96e","signature":"c8f88915fa9b3149c89b92e146f84f8335eb413a53d08d4798788712068f604c","impliedFormat":1},{"version":"5da53e676d57e5e05aa1f8e18b4c781c7613a77a22b54c9f82a4c8beb4fb0d13","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","impliedFormat":1},{"version":"1ab481e6deb69c252ae1a4e9486d271bc973404e234b62d009f5074a24aaab3a","signature":"9edb5bf6d105244a8e1b50b47420df8a87b893ae8e45f9a755049ea6dbdf1f77","impliedFormat":1},{"version":"42baf4ca38c38deaf411ea73f37bc39ff56c6e5c761a968b64ac1b25c92b5cd8","impliedFormat":1},{"version":"d7dbe0ad36bdca8a6ecf143422a48e72cc8927bab7b23a1a2485c2f78a7022c6","impliedFormat":1},{"version":"8718fa41d7cf4aa91de4e8f164c90f88e0bf343aa92a1b9b725a9c675c64e16b","impliedFormat":1},{"version":"f992cd6cc0bcbaa4e6c810468c90f2d8595f8c6c3cf050c806397d3de8585562","impliedFormat":1},{"version":"fb893a0dfc3c9fb0f9ca93d0648694dd95f33cbad2c0f2c629f842981dfd4e2e","impliedFormat":1},{"version":"3eb11dbf3489064a47a2e1cf9d261b1f100ef0b3b50ffca6c44dd99d6dd81ac1","impliedFormat":1},{"version":"e2b48abff5a8adc6bb1cd13a702b9ef05e6045a98e7cfa95a8779b53b6d0e69d","impliedFormat":1},{"version":"f3d8c757e148ad968f0d98697987db363070abada5f503da3c06aefd9d4248c1","impliedFormat":1},{"version":"a4a39b5714adfcadd3bbea6698ca2e942606d833bde62ad5fb6ec55f5e438ff8","impliedFormat":1},{"version":"bbc1d029093135d7d9bfa4b38cbf8761db505026cc458b5e9c8b74f4000e5e75","impliedFormat":1},{"version":"9b95d5c9fe442cbc7ba96aac63e11edb3918da4988c349eec110473b2a617a37","impliedFormat":1},{"version":"8a190298d0ff502ad1c7294ba6b0abb3a290fc905b3a00603016a97c363a4c7a","impliedFormat":1},{"version":"3fcb21c712eedf41562af5e7c2516c8dc651bb2e4b2e4fcc428cb012977b8c39","impliedFormat":1},{"version":"1f68ab0e055994eb337b67aa87d2a15e0200951e9664959b3866ee6f6b11a0fe","impliedFormat":1},{"version":"89121c1bf2990f5219bfd802a3e7fc557de447c62058d6af68d6b6348d64499a","impliedFormat":1},{"version":"79b4369233a12c6fa4a07301ecb7085802c98f3a77cf9ab97eee27e1656f82e6","impliedFormat":1},{"version":"96d14f21b7652903852eef49379d04dbda28c16ed36468f8c9fa08f7c14c9538","impliedFormat":1},{"version":"fec943fdb3275eb6e006b35e04a8e2e99e9adf3f4b969ddf15315ac7575a93e4","impliedFormat":1},{"version":"cf3d384d082b933d987c4e2fe7bfb8710adfd9dc8155190056ed6695a25a559e","impliedFormat":1},{"version":"9871b7ee672bc16c78833bdab3052615834b08375cb144e4d2cba74473f4a589","impliedFormat":1},{"version":"c863198dae89420f3c552b5a03da6ed6d0acfa3807a64772b895db624b0de707","impliedFormat":1},{"version":"8b03a5e327d7db67112ebbc93b4f744133eda2c1743dbb0a990c61a8007823ef","impliedFormat":1},{"version":"86c73f2ee1752bac8eeeece234fd05dfcf0637a4fbd8032e4f5f43102faa8eec","impliedFormat":1},{"version":"42fad1f540271e35ca37cecda12c4ce2eef27f0f5cf0f8dd761d723c744d3159","impliedFormat":1},{"version":"ff3743a5de32bee10906aff63d1de726f6a7fd6ee2da4b8229054dfa69de2c34","impliedFormat":1},{"version":"83acd370f7f84f203e71ebba33ba61b7f1291ca027d7f9a662c6307d74e4ac22","impliedFormat":1},{"version":"1445cec898f90bdd18b2949b9590b3c012f5b7e1804e6e329fb0fe053946d5ec","impliedFormat":1},{"version":"0e5318ec2275d8da858b541920d9306650ae6ac8012f0e872fe66eb50321a669","impliedFormat":1},{"version":"cf530297c3fb3a92ec9591dd4fa229d58b5981e45fe6702a0bd2bea53a5e59be","impliedFormat":1},{"version":"c1f6f7d08d42148ddfe164d36d7aba91f467dbcb3caa715966ff95f55048b3a4","impliedFormat":1},{"version":"f4e9bf9103191ef3b3612d3ec0044ca4044ca5be27711fe648ada06fad4bcc85","impliedFormat":1},{"version":"0c1ee27b8f6a00097c2d6d91a21ee4d096ab52c1e28350f6362542b55380059a","impliedFormat":1},{"version":"7677d5b0db9e020d3017720f853ba18f415219fb3a9597343b1b1012cfd699f7","impliedFormat":1},{"version":"bc1c6bc119c1784b1a2be6d9c47addec0d83ef0d52c8fbe1f14a51b4dfffc675","impliedFormat":1},{"version":"52cf2ce99c2a23de70225e252e9822a22b4e0adb82643ab0b710858810e00bf1","impliedFormat":1},{"version":"770625067bb27a20b9826255a8d47b6b5b0a2d3dfcbd21f89904c731f671ba77","impliedFormat":1},{"version":"d1ed6765f4d7906a05968fb5cd6d1db8afa14dbe512a4884e8ea5c0f5e142c80","impliedFormat":1},{"version":"799c0f1b07c092626cf1efd71d459997635911bb5f7fc1196efe449bba87e965","impliedFormat":1},{"version":"2a184e4462b9914a30b1b5c41cf80c6d3428f17b20d3afb711fff3f0644001fd","impliedFormat":1},{"version":"9eabde32a3aa5d80de34af2c2206cdc3ee094c6504a8d0c2d6d20c7c179503cc","impliedFormat":1},{"version":"397c8051b6cfcb48aa22656f0faca2553c5f56187262135162ee79d2b2f6c966","impliedFormat":1},{"version":"a8ead142e0c87dcd5dc130eba1f8eeed506b08952d905c47621dc2f583b1bff9","impliedFormat":1},{"version":"a02f10ea5f73130efca046429254a4e3c06b5475baecc8f7b99a0014731be8b3","impliedFormat":1},{"version":"c2576a4083232b0e2d9bd06875dd43d371dee2e090325a9eac0133fd5650c1cb","impliedFormat":1},{"version":"4c9a0564bb317349de6a24eb4efea8bb79898fa72ad63a1809165f5bd42970dd","impliedFormat":1},{"version":"f40ac11d8859092d20f953aae14ba967282c3bb056431a37fced1866ec7a2681","impliedFormat":1},{"version":"cc11e9e79d4746cc59e0e17473a59d6f104692fd0eeea1bdb2e206eabed83b03","impliedFormat":1},{"version":"b444a410d34fb5e98aa5ee2b381362044f4884652e8bc8a11c8fe14bbd85518e","impliedFormat":1},{"version":"c35808c1f5e16d2c571aa65067e3cb95afeff843b259ecfa2fc107a9519b5392","impliedFormat":1},{"version":"14d5dc055143e941c8743c6a21fa459f961cbc3deedf1bfe47b11587ca4b3ef5","impliedFormat":1},{"version":"a3ad4e1fc542751005267d50a6298e6765928c0c3a8dce1572f2ba6ca518661c","impliedFormat":1},{"version":"f237e7c97a3a89f4591afd49ecb3bd8d14f51a1c4adc8fcae3430febedff5eb6","impliedFormat":1},{"version":"3ffdfbec93b7aed71082af62b8c3e0cc71261cc68d796665faa1e91604fbae8f","impliedFormat":1},{"version":"662201f943ed45b1ad600d03a90dffe20841e725203ced8b708c91fcd7f9379a","impliedFormat":1},{"version":"c9ef74c64ed051ea5b958621e7fb853fe3b56e8787c1587aefc6ea988b3c7e79","impliedFormat":1},{"version":"2462ccfac5f3375794b861abaa81da380f1bbd9401de59ffa43119a0b644253d","impliedFormat":1},{"version":"34baf65cfee92f110d6653322e2120c2d368ee64b3c7981dff08ed105c4f19b0","impliedFormat":1},{"version":"844ab83672160ca57a2a2ea46da4c64200d8c18d4ebb2087819649cad099ff0e","impliedFormat":1},{"version":"908217c4f2244ec402b73533ebfcc46d6dcd34fc1c807ff403d7f98702abb3bc","impliedFormat":1},{"version":"74d5a87c3616cd5d8691059d531504403aa857e09cbaecb1c64dfb9ace0db185","impliedFormat":1}],"root":[236,[240,244],[260,265]],"options":{"allowJs":false,"composite":true,"declaration":true,"esModuleInterop":true,"experimentalDecorators":true,"inlineSources":true,"module":100,"outDir":"./","rootDir":"..","skipLibCheck":true,"sourceMap":true,"strict":true,"target":9},"referencedMap":[[276,1],[196,2],[193,3],[191,4],[187,5],[186,6],[188,5],[189,6],[190,6],[185,7],[195,3],[194,8],[192,9],[197,10],[259,11],[253,12],[269,13],[255,14],[252,15],[184,16],[183,11],[271,17],[279,18],[275,19],[274,20],[272,7],[249,21],[254,22],[237,7],[281,23],[267,7],[250,7],[273,7],[282,7],[283,24],[245,7],[270,7],[213,25],[202,7],[203,7],[211,7],[212,26],[204,7],[205,7],[206,7],[207,7],[208,7],[209,7],[210,7],[130,27],[131,27],[132,28],[90,29],[133,30],[134,31],[135,32],[85,7],[88,33],[86,7],[87,7],[136,34],[137,35],[138,36],[139,37],[140,38],[141,39],[142,39],[144,40],[143,41],[145,42],[146,43],[147,44],[129,45],[89,7],[148,46],[149,47],[150,48],[182,49],[151,50],[152,51],[153,52],[154,53],[155,54],[156,55],[157,56],[158,57],[159,58],[160,59],[161,59],[162,60],[163,7],[164,61],[166,62],[165,63],[167,64],[168,65],[169,66],[170,67],[171,68],[172,69],[173,70],[174,71],[175,72],[176,73],[177,74],[178,75],[179,76],[180,77],[181,78],[215,7],[247,7],[248,7],[268,79],[235,7],[308,80],[309,81],[284,82],[287,82],[306,80],[307,80],[297,80],[296,83],[294,80],[289,80],[302,80],[300,80],[304,80],[288,80],[301,80],[305,80],[290,80],[291,80],[303,80],[285,80],[292,80],[293,80],[295,80],[299,80],[310,84],[298,80],[286,80],[323,85],[322,7],[317,84],[319,86],[318,84],[311,84],[312,84],[314,84],[316,84],[320,86],[321,86],[313,86],[315,86],[246,87],[251,88],[239,7],[257,89],[256,90],[324,7],[280,7],[258,91],[325,92],[64,7],[65,7],[68,93],[66,7],[67,7],[198,7],[91,7],[71,94],[72,95],[227,7],[80,96],[224,97],[220,98],[223,99],[221,7],[222,7],[219,7],[225,100],[73,95],[218,101],[217,7],[74,95],[278,102],[277,103],[199,79],[75,104],[200,7],[83,105],[81,7],[82,7],[266,40],[228,7],[229,7],[232,106],[231,107],[230,7],[69,7],[201,24],[76,108],[70,95],[77,108],[214,7],[238,7],[226,109],[234,110],[233,7],[78,95],[79,108],[216,7],[61,7],[62,7],[12,7],[10,7],[11,7],[16,7],[15,7],[2,7],[17,7],[18,7],[19,7],[20,7],[21,7],[22,7],[23,7],[24,7],[3,7],[25,7],[26,7],[4,7],[27,7],[31,7],[28,7],[29,7],[30,7],[32,7],[33,7],[34,7],[5,7],[35,7],[36,7],[37,7],[38,7],[6,7],[42,7],[39,7],[40,7],[41,7],[43,7],[7,7],[44,7],[49,7],[50,7],[45,7],[46,7],[47,7],[48,7],[8,7],[54,7],[51,7],[52,7],[53,7],[55,7],[9,7],[56,7],[63,7],[57,7],[58,7],[60,7],[59,7],[1,7],[14,7],[13,7],[107,111],[117,112],[106,111],[127,113],[98,114],[97,115],[126,11],[120,116],[125,117],[100,118],[114,119],[99,120],[123,121],[95,122],[94,11],[124,123],[96,124],[101,125],[102,7],[105,125],[92,7],[128,126],[118,127],[109,128],[110,129],[112,130],[108,131],[111,132],[121,11],[103,133],[104,134],[113,135],[93,136],[116,127],[115,125],[119,7],[122,137],[84,7],[263,138],[244,139],[264,140],[265,141],[241,142],[236,143],[260,144],[242,145],[240,146],[243,147],[261,148],[262,149]],"latestChangedDtsFile":"./src/rtcstats.d.ts","version":"5.8.2"}
|
package/package.json
ADDED
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@vpalmisano/webrtcperf",
|
|
3
|
+
"version": "4.0.0",
|
|
4
|
+
"repository": {
|
|
5
|
+
"type": "git",
|
|
6
|
+
"url": "https://github.com/vpalmisano/webrtcperf.git"
|
|
7
|
+
},
|
|
8
|
+
"author": {
|
|
9
|
+
"name": "Vittorio Palmisano",
|
|
10
|
+
"url": "https://github.com/vpalmisano"
|
|
11
|
+
},
|
|
12
|
+
"publishConfig": {
|
|
13
|
+
"access": "public",
|
|
14
|
+
"registry": "https://registry.npmjs.org"
|
|
15
|
+
},
|
|
16
|
+
"main": "build/src/index.js",
|
|
17
|
+
"types": "build/src/index.d.ts",
|
|
18
|
+
"files": [
|
|
19
|
+
"build",
|
|
20
|
+
"src"
|
|
21
|
+
],
|
|
22
|
+
"bin": {
|
|
23
|
+
"webrtcperf": "app.min.js"
|
|
24
|
+
},
|
|
25
|
+
"engines": {
|
|
26
|
+
"node": ">=16.0.0"
|
|
27
|
+
},
|
|
28
|
+
"scripts": {
|
|
29
|
+
"prepare": "tsc -b && webpack",
|
|
30
|
+
"prepublishOnly": "yarn lint",
|
|
31
|
+
"postversion": "git push && git push origin $(git tag | sort -V | tail -1)",
|
|
32
|
+
"release:patch": "yarn && yarn docs && npm version patch && npm publish",
|
|
33
|
+
"release:minor": "yarn && yarn docs && npm version minor && npm publish",
|
|
34
|
+
"release:major": "yarn && yarn docs && npm version major && npm publish",
|
|
35
|
+
"start": "node app.min.js",
|
|
36
|
+
"start:dev": "tsc -b && node build/src/app.js",
|
|
37
|
+
"test": "",
|
|
38
|
+
"build": "yarn lint && tsc -b && webpack",
|
|
39
|
+
"build:docker": "yarn && docker build --platform linux/amd64 -t ghcr.io/vpalmisano/webrtcperf:devel .",
|
|
40
|
+
"push:docker": "docker push ghcr.io/vpalmisano/webrtcperf:devel",
|
|
41
|
+
"build:docker-ffmpeg": "docker build --platform linux/amd64 -t ghcr.io/vpalmisano/webrtcperf-ffmpeg:devel -f Dockerfile.ffmpeg .",
|
|
42
|
+
"push:docker-ffmpeg": "docker push ghcr.io/vpalmisano/webrtcperf-ffmpeg:devel",
|
|
43
|
+
"build:docker-visqol": "docker build --platform linux/amd64 -t ghcr.io/vpalmisano/webrtcperf-visqol:devel -f Dockerfile.visqol .",
|
|
44
|
+
"push:docker-visqol": "docker push ghcr.io/vpalmisano/webrtcperf-visqol:devel",
|
|
45
|
+
"clean": "rm -rf app.min.js build _docs",
|
|
46
|
+
"lint": "eslint src examples",
|
|
47
|
+
"lint:fix": "yarn lint --fix",
|
|
48
|
+
"docs": "yarn build && node build/src/generate-config-docs.js && typedoc",
|
|
49
|
+
"build:linux": "nexe --make=\"-j$(nproc 2> /dev/null || echo 1)\" --verbose --build -i app.min.js -o webrtcperf -r package.json && gzip -9 -c webrtcperf > webrtcperf_${npm_package_version}_linux.gz",
|
|
50
|
+
"build:macos": "nexe --target mac-x64-14.15.3 -i app.min.js -o webrtcperf -r package.json && gzip -9 -c webrtcperf > webrtcperf_${npm_package_version}_macos.gz && rm webrtcperf",
|
|
51
|
+
"build:windows": "nexe --target windows-x64-14.15.3 -i app.min.js -o webrtcperf -r package.json && zip webrtcperf_${npm_package_version}_windows.zip webrtcperf.exe && rm webrtcperf.exe",
|
|
52
|
+
"build:all": "yarn && yarn build && yarn build:linux && yarn build:macos && yarn build:windows"
|
|
53
|
+
},
|
|
54
|
+
"license": "AGPL-3.0-or-later",
|
|
55
|
+
"dependencies": {
|
|
56
|
+
"@puppeteer/browsers": "^2.8.0",
|
|
57
|
+
"@vpalmisano/throttler": "0.0.7",
|
|
58
|
+
"@vpalmisano/webrtcperf-js": "1.0.0",
|
|
59
|
+
"axios": "^1.8.4",
|
|
60
|
+
"chalk": "^4.1.2",
|
|
61
|
+
"change-case": "^4.1.2",
|
|
62
|
+
"compression": "^1.8.0",
|
|
63
|
+
"convict": "^6.2.4",
|
|
64
|
+
"convict-format-with-validator": "^6.2.0",
|
|
65
|
+
"debug-level": "^3.2.0",
|
|
66
|
+
"express": "^4.21.0",
|
|
67
|
+
"express-basic-auth": "^1.2.1",
|
|
68
|
+
"fast-stats": "^0.0.7",
|
|
69
|
+
"form-data": "^4.0.2",
|
|
70
|
+
"ipaddr.js": "^2.2.0",
|
|
71
|
+
"json5": "^2.2.3",
|
|
72
|
+
"lorem-ipsum": "^2.0.8",
|
|
73
|
+
"node-cache": "^5.1.2",
|
|
74
|
+
"node-os-utils": "^1.3.7",
|
|
75
|
+
"pidtree": "^0.6.0",
|
|
76
|
+
"pidusage": "^3.0.2",
|
|
77
|
+
"prom-client": "^15.1.3",
|
|
78
|
+
"puppeteer": "^23.4.0",
|
|
79
|
+
"puppeteer-core": "^23.4.0",
|
|
80
|
+
"puppeteer-extra": "^3.3.6",
|
|
81
|
+
"puppeteer-extra-plugin-stealth": "^2.11.2",
|
|
82
|
+
"puppeteer-intercept-and-modify-requests": "^1.3.1",
|
|
83
|
+
"sdp-transform": "^2.14.2",
|
|
84
|
+
"sprintf-js": "^1.1.3",
|
|
85
|
+
"tar-fs": "^3.0.6",
|
|
86
|
+
"word-wrap": "^1.2.5",
|
|
87
|
+
"ws": "^8.18.1"
|
|
88
|
+
},
|
|
89
|
+
"devDependencies": {
|
|
90
|
+
"@eslint/js": "^9.23.0",
|
|
91
|
+
"@types/basic-auth": "^1.1.3",
|
|
92
|
+
"@types/compression": "^1.7.5",
|
|
93
|
+
"@types/convict": "^6.1.6",
|
|
94
|
+
"@types/convict-format-with-validator": "^6.0.5",
|
|
95
|
+
"@types/fast-stats": "^0.0.35",
|
|
96
|
+
"@types/node": "^20.17.28",
|
|
97
|
+
"@types/node-os-utils": "^1.3.4",
|
|
98
|
+
"@types/pidusage": "^2.0.5",
|
|
99
|
+
"@types/sdp-transform": "^2.4.9",
|
|
100
|
+
"@types/sprintf-js": "^1.1.4",
|
|
101
|
+
"@types/tar-fs": "^2.0.4",
|
|
102
|
+
"@types/ws": "^8.18.0",
|
|
103
|
+
"@typescript-eslint/eslint-plugin": "^5.62.0",
|
|
104
|
+
"@typescript-eslint/parser": "^8.28.0",
|
|
105
|
+
"eslint": "^9.23.0",
|
|
106
|
+
"eslint-config-prettier": "^9.1.0",
|
|
107
|
+
"eslint-import-resolver-typescript": "^3.10.0",
|
|
108
|
+
"eslint-plugin-import": "^2.31.0",
|
|
109
|
+
"eslint-plugin-prettier": "^5.2.5",
|
|
110
|
+
"eslint-plugin-simple-import-sort": "^12.1.1",
|
|
111
|
+
"eslint-plugin-unused-imports": "^4.1.4",
|
|
112
|
+
"nexe": "^4.0.0-rc.7",
|
|
113
|
+
"prettier": "^3.5.3",
|
|
114
|
+
"terser-webpack-plugin": "^5.3.14",
|
|
115
|
+
"ts-loader": "^9.5.1",
|
|
116
|
+
"typedoc": "^0.28.1",
|
|
117
|
+
"typescript": "^5.8.2",
|
|
118
|
+
"typescript-eslint": "^8.28.0",
|
|
119
|
+
"webpack": "^5.98.0",
|
|
120
|
+
"webpack-cli": "^5.1.4",
|
|
121
|
+
"webpack-node-externals": "^3.0.0",
|
|
122
|
+
"yarn-upgrade-minor": "^1.0.13"
|
|
123
|
+
},
|
|
124
|
+
"optionalDependencies": {
|
|
125
|
+
"chart.js": "^3.5.1",
|
|
126
|
+
"chartjs-node-canvas": "^4.1.6",
|
|
127
|
+
"zeromq": "^6.4.0"
|
|
128
|
+
}
|
|
129
|
+
}
|