diff --git a/packages/inference/.eslintignore b/packages/inference/.eslintignore new file mode 100644 index 0000000000000000000000000000000000000000..801cfd3936062aaf40a32e81de93e4a97ac17b28 --- /dev/null +++ b/packages/inference/.eslintignore @@ -0,0 +1,3 @@ +dist +tapes.json +src/vendor \ No newline at end of file diff --git a/packages/inference/.prettierignore b/packages/inference/.prettierignore new file mode 100644 index 0000000000000000000000000000000000000000..aa3fda174c1f562c538396592c8b0e1a57025fe5 --- /dev/null +++ b/packages/inference/.prettierignore @@ -0,0 +1,6 @@ +pnpm-lock.yaml +# In order to avoid code samples to have tabs, they don't display well on npm +README.md +dist +test/tapes.json +src/vendor \ No newline at end of file diff --git a/packages/inference/LICENSE b/packages/inference/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..7b15760427589d074b7a776846b62bf84e806372 --- /dev/null +++ b/packages/inference/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2022 Tim Mikeladze + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/packages/inference/README.md b/packages/inference/README.md new file mode 100644 index 0000000000000000000000000000000000000000..c48b5bf5388bc74bc8a273f56f917a41708ba4ba --- /dev/null +++ b/packages/inference/README.md @@ -0,0 +1,519 @@ +# 🤗 Hugging Face Inference Endpoints + +A Typescript powered wrapper for the Hugging Face Inference Endpoints API. Learn more about Inference Endpoints at [Hugging Face](https://huggingface.co/inference-endpoints). +It works with both [Inference API (serverless)](https://huggingface.co/docs/api-inference/index) and [Inference Endpoints (dedicated)](https://huggingface.co/docs/inference-endpoints/index). + +Check out the [full documentation](https://huggingface.co/docs/huggingface.js/inference/README). + +You can also try out a live [interactive notebook](https://observablehq.com/@huggingface/hello-huggingface-js-inference), see some demos on [hf.co/huggingfacejs](https://huggingface.co/huggingfacejs), or watch a [Scrimba tutorial that explains how Inference Endpoints works](https://scrimba.com/scrim/cod8248f5adfd6e129582c523). + +## Getting Started + +### Install + +#### Node + +```console +npm install @huggingface/inference + +pnpm add @huggingface/inference + +yarn add @huggingface/inference +``` + +#### Deno + +```ts +// esm.sh +import { HfInference } from "https://esm.sh/@huggingface/inference" +// or npm: +import { HfInference } from "npm:@huggingface/inference" +``` + + +### Initialize + +```typescript +import { HfInference } from '@huggingface/inference' + +const hf = new HfInference('your access token') +``` + +❗**Important note:** Using an access token is optional to get started, however you will be rate limited eventually. Join [Hugging Face](https://huggingface.co/join) and then visit [access tokens](https://huggingface.co/settings/tokens) to generate your access token for **free**. + +Your access token should be kept private. If you need to protect it in front-end applications, we suggest setting up a proxy server that stores the access token. + + +#### Tree-shaking + +You can import the functions you need directly from the module instead of using the `HfInference` class. + +```ts +import { textGeneration } from "@huggingface/inference"; + +await textGeneration({ + accessToken: "hf_...", + model: "model_or_endpoint", + inputs: ..., + parameters: ... +}) +``` + +This will enable tree-shaking by your bundler. + +## Natural Language Processing + +### Fill Mask + +Tries to fill in a hole with a missing word (token to be precise). + +```typescript +await hf.fillMask({ + model: 'bert-base-uncased', + inputs: '[MASK] world!' +}) +``` + +### Summarization + +Summarizes longer text into shorter text. Be careful, some models have a maximum length of input. + +```typescript +await hf.summarization({ + model: 'facebook/bart-large-cnn', + inputs: + 'The tower is 324 metres (1,063 ft) tall, about the same height as an 81-storey building, and the tallest structure in Paris. Its base is square, measuring 125 metres (410 ft) on each side. During its construction, the Eiffel Tower surpassed the Washington Monument to become the tallest man-made structure in the world, a title it held for 41 years until the Chrysler Building in New York City was finished in 1930.', + parameters: { + max_length: 100 + } +}) +``` + +### Question Answering + +Answers questions based on the context you provide. + +```typescript +await hf.questionAnswering({ + model: 'deepset/roberta-base-squad2', + inputs: { + question: 'What is the capital of France?', + context: 'The capital of France is Paris.' + } +}) +``` + +### Table Question Answering + +```typescript +await hf.tableQuestionAnswering({ + model: 'google/tapas-base-finetuned-wtq', + inputs: { + query: 'How many stars does the transformers repository have?', + table: { + Repository: ['Transformers', 'Datasets', 'Tokenizers'], + Stars: ['36542', '4512', '3934'], + Contributors: ['651', '77', '34'], + 'Programming language': ['Python', 'Python', 'Rust, Python and NodeJS'] + } + } +}) +``` + +### Text Classification + +Often used for sentiment analysis, this method will assign labels to the given text along with a probability score of that label. + +```typescript +await hf.textClassification({ + model: 'distilbert-base-uncased-finetuned-sst-2-english', + inputs: 'I like you. I love you.' +}) +``` + +### Text Generation + +Generates text from an input prompt. + +[Demo](https://huggingface.co/spaces/huggingfacejs/streaming-text-generation) + +```typescript +await hf.textGeneration({ + model: 'gpt2', + inputs: 'The answer to the universe is' +}) + +for await (const output of hf.textGenerationStream({ + model: "google/flan-t5-xxl", + inputs: 'repeat "one two three four"', + parameters: { max_new_tokens: 250 } +})) { + console.log(output.token.text, output.generated_text); +} +``` + +### Token Classification + +Used for sentence parsing, either grammatical, or Named Entity Recognition (NER) to understand keywords contained within text. + +```typescript +await hf.tokenClassification({ + model: 'dbmdz/bert-large-cased-finetuned-conll03-english', + inputs: 'My name is Sarah Jessica Parker but you can call me Jessica' +}) +``` + +### Translation + +Converts text from one language to another. + +```typescript +await hf.translation({ + model: 't5-base', + inputs: 'My name is Wolfgang and I live in Berlin' +}) + +await hf.translation({ + model: 'facebook/mbart-large-50-many-to-many-mmt', + inputs: textToTranslate, + parameters: { + "src_lang": "en_XX", + "tgt_lang": "fr_XX" + } +}) +``` + +### Zero-Shot Classification + +Checks how well an input text fits into a set of labels you provide. + +```typescript +await hf.zeroShotClassification({ + model: 'facebook/bart-large-mnli', + inputs: [ + 'Hi, I recently bought a device from your company but it is not working as advertised and I would like to get reimbursed!' + ], + parameters: { candidate_labels: ['refund', 'legal', 'faq'] } +}) +``` + +### Conversational + +This task corresponds to any chatbot-like structure. Models tend to have shorter max_length, so please check with caution when using a given model if you need long-range dependency or not. + +```typescript +await hf.conversational({ + model: 'microsoft/DialoGPT-large', + inputs: { + past_user_inputs: ['Which movie is the best ?'], + generated_responses: ['It is Die Hard for sure.'], + text: 'Can you explain why ?' + } +}) +``` + +### Sentence Similarity + +Calculate the semantic similarity between one text and a list of other sentences. + +```typescript +await hf.sentenceSimilarity({ + model: 'sentence-transformers/paraphrase-xlm-r-multilingual-v1', + inputs: { + source_sentence: 'That is a happy person', + sentences: [ + 'That is a happy dog', + 'That is a very happy person', + 'Today is a sunny day' + ] + } +}) +``` + +## Audio + +### Automatic Speech Recognition + +Transcribes speech from an audio file. + +[Demo](https://huggingface.co/spaces/huggingfacejs/speech-recognition-vue) + +```typescript +await hf.automaticSpeechRecognition({ + model: 'facebook/wav2vec2-large-960h-lv60-self', + data: readFileSync('test/sample1.flac') +}) +``` + +### Audio Classification + +Assigns labels to the given audio along with a probability score of that label. + +[Demo](https://huggingface.co/spaces/huggingfacejs/audio-classification-vue) + +```typescript +await hf.audioClassification({ + model: 'superb/hubert-large-superb-er', + data: readFileSync('test/sample1.flac') +}) +``` + +### Text To Speech + +Generates natural-sounding speech from text input. + +[Interactive tutorial](https://scrimba.com/scrim/co8da4d23b49b648f77f4848a?pl=pkVnrP7uP) + +```typescript +await hf.textToSpeech({ + model: 'espnet/kan-bayashi_ljspeech_vits', + inputs: 'Hello world!' +}) +``` + +### Audio To Audio + +Outputs one or multiple generated audios from an input audio, commonly used for speech enhancement and source separation. + +```typescript +await hf.audioToAudio({ + model: 'speechbrain/sepformer-wham', + data: readFileSync('test/sample1.flac') +}) +``` + +## Computer Vision + +### Image Classification + +Assigns labels to a given image along with a probability score of that label. + +[Demo](https://huggingface.co/spaces/huggingfacejs/image-classification-vue) + +```typescript +await hf.imageClassification({ + data: readFileSync('test/cheetah.png'), + model: 'google/vit-base-patch16-224' +}) +``` + +### Object Detection + +Detects objects within an image and returns labels with corresponding bounding boxes and probability scores. + +[Demo](https://huggingface.co/spaces/huggingfacejs/object-detection-vue) + +```typescript +await hf.objectDetection({ + data: readFileSync('test/cats.png'), + model: 'facebook/detr-resnet-50' +}) +``` + +### Image Segmentation + +Detects segments within an image and returns labels with corresponding bounding boxes and probability scores. + +```typescript +await hf.imageSegmentation({ + data: readFileSync('test/cats.png'), + model: 'facebook/detr-resnet-50-panoptic' +}) +``` + +### Image To Text + +Outputs text from a given image, commonly used for captioning or optical character recognition. + +```typescript +await hf.imageToText({ + data: readFileSync('test/cats.png'), + model: 'nlpconnect/vit-gpt2-image-captioning' +}) +``` + +### Text To Image + +Creates an image from a text prompt. + +[Demo](https://huggingface.co/spaces/huggingfacejs/image-to-text) + +```typescript +await hf.textToImage({ + inputs: 'award winning high resolution photo of a giant tortoise/((ladybird)) hybrid, [trending on artstation]', + model: 'stabilityai/stable-diffusion-2', + parameters: { + negative_prompt: 'blurry', + } +}) +``` + +### Image To Image + +Image-to-image is the task of transforming a source image to match the characteristics of a target image or a target image domain. + +[Interactive tutorial](https://scrimba.com/scrim/co4834bf9a91cc81cfab07969?pl=pkVnrP7uP) + +```typescript +await hf.imageToImage({ + inputs: new Blob([readFileSync("test/stormtrooper_depth.png")]), + parameters: { + prompt: "elmo's lecture", + }, + model: "lllyasviel/sd-controlnet-depth", +}); +``` + +### Zero Shot Image Classification + +Checks how well an input image fits into a set of labels you provide. + +```typescript +await hf.zeroShotImageClassification({ + model: 'openai/clip-vit-large-patch14-336', + inputs: { + image: await (await fetch('https://placekitten.com/300/300')).blob() + }, + parameters: { + candidate_labels: ['cat', 'dog'] + } +}) +``` + +## Multimodal + +### Feature Extraction + +This task reads some text and outputs raw float values, that are usually consumed as part of a semantic database/semantic search. + +```typescript +await hf.featureExtraction({ + model: "sentence-transformers/distilbert-base-nli-mean-tokens", + inputs: "That is a happy person", +}); +``` + +### Visual Question Answering + +Visual Question Answering is the task of answering open-ended questions based on an image. They output natural language responses to natural language questions. + +[Demo](https://huggingface.co/spaces/huggingfacejs/doc-vis-qa) + +```typescript +await hf.visualQuestionAnswering({ + model: 'dandelin/vilt-b32-finetuned-vqa', + inputs: { + question: 'How many cats are lying down?', + image: await (await fetch('https://placekitten.com/300/300')).blob() + } +}) +``` + +### Document Question Answering + +Document question answering models take a (document, question) pair as input and return an answer in natural language. + +[Demo](https://huggingface.co/spaces/huggingfacejs/doc-vis-qa) + +```typescript +await hf.documentQuestionAnswering({ + model: 'impira/layoutlm-document-qa', + inputs: { + question: 'Invoice number?', + image: await (await fetch('https://huggingface.co/spaces/impira/docquery/resolve/2359223c1837a7587402bda0f2643382a6eefeab/invoice.png')).blob(), + } +}) +``` + +## Tabular + +### Tabular Regression + +Tabular regression is the task of predicting a numerical value given a set of attributes. + +```typescript +await hf.tabularRegression({ + model: "scikit-learn/Fish-Weight", + inputs: { + data: { + "Height": ["11.52", "12.48", "12.3778"], + "Length1": ["23.2", "24", "23.9"], + "Length2": ["25.4", "26.3", "26.5"], + "Length3": ["30", "31.2", "31.1"], + "Species": ["Bream", "Bream", "Bream"], + "Width": ["4.02", "4.3056", "4.6961"] + }, + }, +}) +``` + +### Tabular Classification + +Tabular classification is the task of classifying a target category (a group) based on set of attributes. + +```typescript +await hf.tabularClassification({ + model: "vvmnnnkv/wine-quality", + inputs: { + data: { + "fixed_acidity": ["7.4", "7.8", "10.3"], + "volatile_acidity": ["0.7", "0.88", "0.32"], + "citric_acid": ["0", "0", "0.45"], + "residual_sugar": ["1.9", "2.6", "6.4"], + "chlorides": ["0.076", "0.098", "0.073"], + "free_sulfur_dioxide": ["11", "25", "5"], + "total_sulfur_dioxide": ["34", "67", "13"], + "density": ["0.9978", "0.9968", "0.9976"], + "pH": ["3.51", "3.2", "3.23"], + "sulphates": ["0.56", "0.68", "0.82"], + "alcohol": ["9.4", "9.8", "12.6"] + }, + }, +}) +``` + +## Custom Calls + +For models with custom parameters / outputs. + +```typescript +await hf.request({ + model: 'my-custom-model', + inputs: 'hello world', + parameters: { + custom_param: 'some magic', + } +}) + +// Custom streaming call, for models with custom parameters / outputs +for await (const output of hf.streamingRequest({ + model: 'my-custom-model', + inputs: 'hello world', + parameters: { + custom_param: 'some magic', + } +})) { + ... +} +``` + +## Custom Inference Endpoints + +Learn more about using your own inference endpoints [here](https://hf.co/docs/inference-endpoints/) + +```typescript +const gpt2 = hf.endpoint('https://xyz.eu-west-1.aws.endpoints.huggingface.cloud/gpt2'); +const { generated_text } = await gpt2.textGeneration({inputs: 'The answer to the universe is'}); +``` + +## Running tests + +```console +HF_TOKEN="your access token" pnpm run test +``` + +## Finding appropriate models + +We have an informative documentation project called [Tasks](https://huggingface.co/tasks) to list available models for each task and explain how each task works in detail. + +It also contains demos, example outputs, and other resources should you want to dig deeper into the ML side of things. diff --git a/packages/inference/package.json b/packages/inference/package.json new file mode 100644 index 0000000000000000000000000000000000000000..075ada1bc0f16540f95e5d837f9215c0f541e575 --- /dev/null +++ b/packages/inference/package.json @@ -0,0 +1,59 @@ +{ + "name": "@huggingface/inference", + "version": "2.6.4", + "packageManager": "pnpm@8.10.5", + "license": "MIT", + "author": "Tim Mikeladze ", + "description": "Typescript wrapper for the Hugging Face Inference Endpoints & Inference API", + "repository": { + "type": "git", + "url": "https://github.com/huggingface/huggingface.js.git" + }, + "publishConfig": { + "access": "public" + }, + "keywords": [ + "hugging face", + "hugging face typescript", + "huggingface", + "huggingface-inference-api", + "huggingface-inference-api-typescript", + "inference", + "ai" + ], + "engines": { + "node": ">=18" + }, + "files": [ + "dist", + "src" + ], + "source": "src/index.ts", + "types": "./dist/index.d.ts", + "main": "./dist/index.cjs", + "module": "./dist/index.js", + "exports": { + "types": "./dist/index.d.ts", + "require": "./dist/index.cjs", + "import": "./dist/index.js" + }, + "type": "module", + "scripts": { + "build": "tsup src/index.ts --format cjs,esm --clean && pnpm run dts", + "dts": "tsx scripts/generate-dts.ts", + "lint": "eslint --quiet --fix --ext .cjs,.ts .", + "lint:check": "eslint --ext .cjs,.ts .", + "format": "prettier --write .", + "format:check": "prettier --check .", + "prepare": "pnpm run build", + "prepublishOnly": "pnpm run build", + "test": "vitest run --config vitest.config.mts", + "test:browser": "vitest run --browser.name=chrome --browser.headless --config vitest.config.mts", + "check": "tsc" + }, + "devDependencies": { + "@huggingface/tasks": "workspace:^", + "@types/node": "18.13.0" + }, + "resolutions": {} +} diff --git a/packages/inference/pnpm-lock.yaml b/packages/inference/pnpm-lock.yaml new file mode 100644 index 0000000000000000000000000000000000000000..ff6f90f72f0c8b3a04d4740aa2eef54daa18cf70 --- /dev/null +++ b/packages/inference/pnpm-lock.yaml @@ -0,0 +1,19 @@ +lockfileVersion: '6.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +devDependencies: + '@huggingface/tasks': + specifier: workspace:^ + version: link:../tasks + '@types/node': + specifier: 18.13.0 + version: 18.13.0 + +packages: + + /@types/node@18.13.0: + resolution: {integrity: sha512-gC3TazRzGoOnoKAhUx+Q0t8S9Tzs74z7m0ipwGpSqQrleP14hKxP4/JUeEQcD3W1/aIpnWl8pHowI7WokuZpXg==} + dev: true diff --git a/packages/inference/scripts/generate-dts.ts b/packages/inference/scripts/generate-dts.ts new file mode 100644 index 0000000000000000000000000000000000000000..82b732e85d4b2718b1ad5c0a23f4413857b383cf --- /dev/null +++ b/packages/inference/scripts/generate-dts.ts @@ -0,0 +1,179 @@ +/** Dirty script to generate pretty .d.ts */ + +import { readFileSync, writeFileSync, appendFileSync, readdirSync } from "node:fs"; +import { TASKS_DATA } from "@huggingface/tasks"; + +const tasks = Object.keys(TASKS_DATA) + .sort() + .filter((task) => task !== "other"); + +let types = readFileSync("./src/types.ts", "utf-8"); + +types = types.replace(/import.* "@huggingface\/tasks";\n/g, ""); +types = types.replace(' Exclude', ["", ...tasks.map((task) => `"${task}"`)].join("\n\t| ")); + +if (types.includes("PipelineType") || types.includes("@huggingface/tasks")) { + console.log(types); + console.error("Failed to parse types.ts"); + process.exit(1); +} + +writeFileSync("./dist/index.d.ts", types + "\n"); +appendFileSync("./dist/index.d.ts", "export class InferenceOutputError extends TypeError {}" + "\n"); + +const dirs = readdirSync("./src/tasks"); + +const fns: string[] = []; +for (const dir of dirs) { + if (dir.endsWith(".ts")) { + continue; + } + const files = readdirSync(`./src/tasks/${dir}`); + for (const file of files) { + if (!file.endsWith(".ts")) { + continue; + } + + const fileContent = readFileSync(`./src/tasks/${dir}/${file}`, "utf-8"); + + for (const type of extractTypesAndInterfaces(fileContent)) { + appendFileSync("./dist/index.d.ts", type + "\n"); + } + + for (const fn of extractAsyncFunctions(fileContent)) { + appendFileSync("./dist/index.d.ts", fn + "\n"); + fns.push(fn); + } + } +} + +appendFileSync( + "./dist/index.d.ts", + `export class HfInference { +\tconstructor(accessToken?: string, defaultOptions?: Options); +\t/** +\t * Returns copy of HfInference tied to a specified endpoint. +\t */ +\tendpoint(endpointUrl: string): HfInferenceEndpoint; +` + + fns + .map( + (fn) => + `${fn + .replace(/args: [a-zA-Z]+/, (args) => `args: Omit<${args.slice("args: ".length)}, 'accessToken'>`) + .replace("export function ", "") + .split("\n") + .map((line) => "\t" + line) + .join("\n")}` + ) + .join("\n") + + "\n}\n" +); + +appendFileSync( + "./dist/index.d.ts", + `export class HfInferenceEndpoint {\n\tconstructor(endpointUrl: string, accessToken?: string, defaultOptions?: Options);\n` + + fns + .map( + (fn) => + `${fn + .replace(/args: [a-zA-Z]+/, (args) => `args: Omit<${args.slice("args: ".length)}, 'accessToken' | 'model'>`) + .replace("export function ", "") + .split("\n") + .map((line) => "\t" + line) + .join("\n")}` + ) + .join("\n") + + "\n}\n" +); + +function* extractTypesAndInterfaces(fileContent: string): Iterable { + let index = 0; + + for (const kind of ["type", "interface"]) { + while (true) { + index = fileContent.indexOf(`export ${kind} `, index); + const initialIndex = index; + if (index === -1) { + break; + } + + let bracketOpen = 0; + + dance: for (let i = index; i < fileContent.length; i++) { + switch (fileContent[i]) { + case "{": + bracketOpen++; + break; + case "}": + bracketOpen--; + if (bracketOpen === 0 && kind === "interface") { + // Add doc comment if present + if (fileContent[index - 2] === "/" && fileContent[index - 3] === "*") { + index = fileContent.lastIndexOf("/*", index); + } + yield fileContent.slice(index, i + 1); + index = i + 1; + break dance; + } + break; + case ";": + if (bracketOpen === 0) { + // Add doc comment if present + if (fileContent[index - 2] === "/" && fileContent[index - 3] === "*") { + index = fileContent.lastIndexOf("/*", index); + } + yield fileContent.slice(index, i + 1); + index = i + 1; + break dance; + } + break; + } + } + + if (initialIndex === index) { + console.error("Failed to parse fileContent", fileContent.slice(index, index + 100)); + process.exit(1); + } + } + } +} + +function* extractAsyncFunctions(fileContent: string): Iterable { + let index = 0; + + while (true) { + index = fileContent.indexOf(`export async function`, index); + if (index === -1) { + break; + } + + const typeBegin = fileContent.indexOf("): ", index); + + if (typeBegin === -1) { + console.error("Failed to parse fileContent", fileContent.slice(index, index + 100)); + process.exit(1); + } + + const typeEnd = fileContent.indexOf(" {", typeBegin); + + if (typeEnd === -1) { + console.error("Failed to parse fileContent", fileContent.slice(index, index + 100)); + process.exit(1); + } + + if (fileContent[index - 2] === "/" && fileContent[index - 3] === "*") { + index = fileContent.lastIndexOf("/*", index); + } + yield fileContent + .slice(index, typeEnd) + .replace("export async ", "export ") + .replace("export function*", "export function") + .trim() + ";"; + index = typeEnd; + } +} + +for (const distPath of ["./dist/index.js", "./dist/index.cjs"]) { + writeFileSync(distPath, '/// \n' + readFileSync(distPath, "utf-8")); +} diff --git a/packages/inference/src/HfInference.ts b/packages/inference/src/HfInference.ts new file mode 100644 index 0000000000000000000000000000000000000000..38d336729f74210c57d53badfe8d70c6501d69a8 --- /dev/null +++ b/packages/inference/src/HfInference.ts @@ -0,0 +1,67 @@ +import * as tasks from "./tasks"; +import type { Options, RequestArgs } from "./types"; +import type { DistributiveOmit } from "./utils/distributive-omit"; + +type Task = typeof tasks; + +type TaskWithNoAccessToken = { + [key in keyof Task]: ( + args: DistributiveOmit[0], "accessToken">, + options?: Parameters[1] + ) => ReturnType; +}; + +type TaskWithNoAccessTokenNoModel = { + [key in keyof Task]: ( + args: DistributiveOmit[0], "accessToken" | "model">, + options?: Parameters[1] + ) => ReturnType; +}; + +export class HfInference { + private readonly accessToken: string; + private readonly defaultOptions: Options; + + constructor(accessToken = "", defaultOptions: Options = {}) { + this.accessToken = accessToken; + this.defaultOptions = defaultOptions; + + for (const [name, fn] of Object.entries(tasks)) { + Object.defineProperty(this, name, { + enumerable: false, + value: (params: RequestArgs, options: Options) => + // eslint-disable-next-line @typescript-eslint/no-explicit-any + fn({ ...params, accessToken } as any, { ...defaultOptions, ...options }), + }); + } + } + + /** + * Returns copy of HfInference tied to a specified endpoint. + */ + public endpoint(endpointUrl: string): HfInferenceEndpoint { + return new HfInferenceEndpoint(endpointUrl, this.accessToken, this.defaultOptions); + } +} + +export class HfInferenceEndpoint { + constructor(endpointUrl: string, accessToken = "", defaultOptions: Options = {}) { + accessToken; + defaultOptions; + + for (const [name, fn] of Object.entries(tasks)) { + Object.defineProperty(this, name, { + enumerable: false, + value: (params: RequestArgs, options: Options) => + // eslint-disable-next-line @typescript-eslint/no-explicit-any + fn({ ...params, accessToken, model: endpointUrl } as any, { ...defaultOptions, ...options }), + }); + } + } +} + +// eslint-disable-next-line @typescript-eslint/no-empty-interface +export interface HfInference extends TaskWithNoAccessToken {} + +// eslint-disable-next-line @typescript-eslint/no-empty-interface +export interface HfInferenceEndpoint extends TaskWithNoAccessTokenNoModel {} diff --git a/packages/inference/src/index.ts b/packages/inference/src/index.ts new file mode 100644 index 0000000000000000000000000000000000000000..566b5c1abacdce892f1776f174bca7d1d852c7dd --- /dev/null +++ b/packages/inference/src/index.ts @@ -0,0 +1,4 @@ +export { HfInference, HfInferenceEndpoint } from "./HfInference"; +export { InferenceOutputError } from "./lib/InferenceOutputError"; +export * from "./types"; +export * from "./tasks"; diff --git a/packages/inference/src/lib/InferenceOutputError.ts b/packages/inference/src/lib/InferenceOutputError.ts new file mode 100644 index 0000000000000000000000000000000000000000..0765b99944b97ae261b5bd931574382b063307c3 --- /dev/null +++ b/packages/inference/src/lib/InferenceOutputError.ts @@ -0,0 +1,8 @@ +export class InferenceOutputError extends TypeError { + constructor(message: string) { + super( + `Invalid inference output: ${message}. Use the 'request' method with the same parameters to do a custom call with no type checking.` + ); + this.name = "InferenceOutputError"; + } +} diff --git a/packages/inference/src/lib/getDefaultTask.ts b/packages/inference/src/lib/getDefaultTask.ts new file mode 100644 index 0000000000000000000000000000000000000000..3149998d6e44939173ffc1a083e508e8a337a627 --- /dev/null +++ b/packages/inference/src/lib/getDefaultTask.ts @@ -0,0 +1,61 @@ +import { isUrl } from "./isUrl"; + +/** + * We want to make calls to the huggingface hub the least possible, eg if + * someone is calling Inference Endpoints 1000 times per second, we don't want + * to make 1000 calls to the hub to get the task name. + */ +const taskCache = new Map(); +const CACHE_DURATION = 10 * 60 * 1000; +const MAX_CACHE_ITEMS = 1000; +export const HF_HUB_URL = "https://huggingface.co"; + +export interface DefaultTaskOptions { + fetch?: typeof fetch; +} + +/** + * Get the default task. Use a LRU cache of 1000 items with 10 minutes expiration + * to avoid making too many calls to the HF hub. + * + * @returns The default task for the model, or `null` if it was impossible to get it + */ +export async function getDefaultTask( + model: string, + accessToken: string | undefined, + options?: DefaultTaskOptions +): Promise { + if (isUrl(model)) { + return null; + } + + const key = `${model}:${accessToken}`; + let cachedTask = taskCache.get(key); + + if (cachedTask && cachedTask.date < new Date(Date.now() - CACHE_DURATION)) { + taskCache.delete(key); + cachedTask = undefined; + } + + if (cachedTask === undefined) { + const modelTask = await (options?.fetch ?? fetch)(`${HF_HUB_URL}/api/models/${model}?expand[]=pipeline_tag`, { + headers: accessToken ? { Authorization: `Bearer ${accessToken}` } : {}, + }) + .then((resp) => resp.json()) + .then((json) => json.pipeline_tag) + .catch(() => null); + + if (!modelTask) { + return null; + } + + cachedTask = { task: modelTask, date: new Date() }; + taskCache.set(key, { task: modelTask, date: new Date() }); + + if (taskCache.size > MAX_CACHE_ITEMS) { + taskCache.delete(taskCache.keys().next().value); + } + } + + return cachedTask.task; +} diff --git a/packages/inference/src/lib/isUrl.ts b/packages/inference/src/lib/isUrl.ts new file mode 100644 index 0000000000000000000000000000000000000000..b97c250e061b634daa175a8ee710e537c77f139c --- /dev/null +++ b/packages/inference/src/lib/isUrl.ts @@ -0,0 +1,3 @@ +export function isUrl(modelOrUrl: string): boolean { + return /^http(s?):/.test(modelOrUrl) || modelOrUrl.startsWith("/"); +} diff --git a/packages/inference/src/lib/makeRequestOptions.ts b/packages/inference/src/lib/makeRequestOptions.ts new file mode 100644 index 0000000000000000000000000000000000000000..a4254d0dadd9768092ae3d3305339241ada62e84 --- /dev/null +++ b/packages/inference/src/lib/makeRequestOptions.ts @@ -0,0 +1,113 @@ +import type { InferenceTask, Options, RequestArgs } from "../types"; +import { HF_HUB_URL } from "./getDefaultTask"; +import { isUrl } from "./isUrl"; + +const HF_INFERENCE_API_BASE_URL = "https://api-inference.huggingface.co"; + +/** + * Loaded from huggingface.co/api/tasks if needed + */ +let tasks: Record | null = null; + +/** + * Helper that prepares request arguments + */ +export async function makeRequestOptions( + args: RequestArgs & { + data?: Blob | ArrayBuffer; + stream?: boolean; + }, + options?: Options & { + /** When a model can be used for multiple tasks, and we want to run a non-default task */ + forceTask?: string | InferenceTask; + /** To load default model if needed */ + taskHint?: InferenceTask; + } +): Promise<{ url: string; info: RequestInit }> { + // eslint-disable-next-line @typescript-eslint/no-unused-vars + const { accessToken, model: _model, ...otherArgs } = args; + let { model } = args; + const { forceTask: task, includeCredentials, taskHint, ...otherOptions } = options ?? {}; + + const headers: Record = {}; + if (accessToken) { + headers["Authorization"] = `Bearer ${accessToken}`; + } + + if (!model && !tasks && taskHint) { + const res = await fetch(`${HF_HUB_URL}/api/tasks`); + + if (res.ok) { + tasks = await res.json(); + } + } + + if (!model && tasks && taskHint) { + const taskInfo = tasks[taskHint]; + if (taskInfo) { + model = taskInfo.models[0].id; + } + } + + if (!model) { + throw new Error("No model provided, and no default model found for this task"); + } + + const binary = "data" in args && !!args.data; + + if (!binary) { + headers["Content-Type"] = "application/json"; + } else { + if (options?.wait_for_model) { + headers["X-Wait-For-Model"] = "true"; + } + if (options?.use_cache === false) { + headers["X-Use-Cache"] = "false"; + } + if (options?.dont_load_model) { + headers["X-Load-Model"] = "0"; + } + } + + const url = (() => { + if (isUrl(model)) { + return model; + } + + if (task) { + return `${HF_INFERENCE_API_BASE_URL}/pipeline/${task}/${model}`; + } + + return `${HF_INFERENCE_API_BASE_URL}/models/${model}`; + })(); + + // Let users configure credentials, or disable them all together (or keep default behavior). + // --- + // This used to be an internal property only and never exposed to users. This means that most usages will never define this value + // So in order to make this backwards compatible, if it's undefined we go to "same-origin" (default behaviour before). + // If it's a boolean and set to true then set to "include". If false, don't define credentials at all (useful for edge runtimes) + // Then finally, if it's a string, use it as-is. + let credentials: RequestCredentials | undefined; + if (typeof includeCredentials === "string") { + credentials = includeCredentials as RequestCredentials; + } else if (typeof includeCredentials === "boolean") { + credentials = includeCredentials ? "include" : undefined; + } else if (includeCredentials === undefined) { + credentials = "same-origin"; + } + + const info: RequestInit = { + headers, + method: "POST", + body: binary + ? args.data + : JSON.stringify({ + ...otherArgs, + options: options && otherOptions, + }), + credentials, + signal: options?.signal, + }; + + return { url, info }; +} diff --git a/packages/inference/src/tasks/audio/audioClassification.ts b/packages/inference/src/tasks/audio/audioClassification.ts new file mode 100644 index 0000000000000000000000000000000000000000..5d7e274e5a722a1846f574313bfcb6e4dbe38d97 --- /dev/null +++ b/packages/inference/src/tasks/audio/audioClassification.ts @@ -0,0 +1,44 @@ +import { InferenceOutputError } from "../../lib/InferenceOutputError"; +import type { BaseArgs, Options } from "../../types"; +import { request } from "../custom/request"; + +export type AudioClassificationArgs = BaseArgs & { + /** + * Binary audio data + */ + data: Blob | ArrayBuffer; +}; + +export interface AudioClassificationOutputValue { + /** + * The label for the class (model specific) + */ + label: string; + + /** + * A float that represents how likely it is that the audio file belongs to this class. + */ + score: number; +} + +export type AudioClassificationReturn = AudioClassificationOutputValue[]; + +/** + * This task reads some audio input and outputs the likelihood of classes. + * Recommended model: superb/hubert-large-superb-er + */ +export async function audioClassification( + args: AudioClassificationArgs, + options?: Options +): Promise { + const res = await request(args, { + ...options, + taskHint: "audio-classification", + }); + const isValidOutput = + Array.isArray(res) && res.every((x) => typeof x.label === "string" && typeof x.score === "number"); + if (!isValidOutput) { + throw new InferenceOutputError("Expected Array<{label: string, score: number}>"); + } + return res; +} diff --git a/packages/inference/src/tasks/audio/audioToAudio.ts b/packages/inference/src/tasks/audio/audioToAudio.ts new file mode 100644 index 0000000000000000000000000000000000000000..c339cdf61a535a25c1a5b80e30d271d61dcb8a3f --- /dev/null +++ b/packages/inference/src/tasks/audio/audioToAudio.ts @@ -0,0 +1,49 @@ +import { InferenceOutputError } from "../../lib/InferenceOutputError"; +import type { BaseArgs, Options } from "../../types"; +import { request } from "../custom/request"; + +export type AudioToAudioArgs = BaseArgs & { + /** + * Binary audio data + */ + data: Blob | ArrayBuffer; +}; + +export interface AudioToAudioOutputValue { + /** + * The label for the audio output (model specific) + */ + label: string; + + /** + * Base64 encoded audio output. + */ + blob: string; + + /** + * Content-type for blob, e.g. audio/flac + */ + "content-type": string; +} + +export type AudioToAudioReturn = AudioToAudioOutputValue[]; + +/** + * This task reads some audio input and outputs one or multiple audio files. + * Example model: speechbrain/sepformer-wham does audio source separation. + */ +export async function audioToAudio(args: AudioToAudioArgs, options?: Options): Promise { + const res = await request(args, { + ...options, + taskHint: "audio-to-audio", + }); + const isValidOutput = + Array.isArray(res) && + res.every( + (x) => typeof x.label === "string" && typeof x.blob === "string" && typeof x["content-type"] === "string" + ); + if (!isValidOutput) { + throw new InferenceOutputError("Expected Array<{label: string, blob: string, content-type: string}>"); + } + return res; +} diff --git a/packages/inference/src/tasks/audio/automaticSpeechRecognition.ts b/packages/inference/src/tasks/audio/automaticSpeechRecognition.ts new file mode 100644 index 0000000000000000000000000000000000000000..600d5b6c740706e276c1b9bf8fee7f68574e58b1 --- /dev/null +++ b/packages/inference/src/tasks/audio/automaticSpeechRecognition.ts @@ -0,0 +1,36 @@ +import { InferenceOutputError } from "../../lib/InferenceOutputError"; +import type { BaseArgs, Options } from "../../types"; +import { request } from "../custom/request"; + +export type AutomaticSpeechRecognitionArgs = BaseArgs & { + /** + * Binary audio data + */ + data: Blob | ArrayBuffer; +}; + +export interface AutomaticSpeechRecognitionOutput { + /** + * The text that was recognized from the audio + */ + text: string; +} + +/** + * This task reads some audio input and outputs the said words within the audio files. + * Recommended model (english language): facebook/wav2vec2-large-960h-lv60-self + */ +export async function automaticSpeechRecognition( + args: AutomaticSpeechRecognitionArgs, + options?: Options +): Promise { + const res = await request(args, { + ...options, + taskHint: "automatic-speech-recognition", + }); + const isValidOutput = typeof res?.text === "string"; + if (!isValidOutput) { + throw new InferenceOutputError("Expected {text: string}"); + } + return res; +} diff --git a/packages/inference/src/tasks/audio/textToSpeech.ts b/packages/inference/src/tasks/audio/textToSpeech.ts new file mode 100644 index 0000000000000000000000000000000000000000..3c466110f5d5713b47025c9e0b2ae9cd69ce4bfd --- /dev/null +++ b/packages/inference/src/tasks/audio/textToSpeech.ts @@ -0,0 +1,28 @@ +import { InferenceOutputError } from "../../lib/InferenceOutputError"; +import type { BaseArgs, Options } from "../../types"; +import { request } from "../custom/request"; + +export type TextToSpeechArgs = BaseArgs & { + /** + * The text to generate an audio from + */ + inputs: string; +}; + +export type TextToSpeechOutput = Blob; + +/** + * This task synthesize an audio of a voice pronouncing a given text. + * Recommended model: espnet/kan-bayashi_ljspeech_vits + */ +export async function textToSpeech(args: TextToSpeechArgs, options?: Options): Promise { + const res = await request(args, { + ...options, + taskHint: "text-to-speech", + }); + const isValidOutput = res && res instanceof Blob; + if (!isValidOutput) { + throw new InferenceOutputError("Expected Blob"); + } + return res; +} diff --git a/packages/inference/src/tasks/custom/request.ts b/packages/inference/src/tasks/custom/request.ts new file mode 100644 index 0000000000000000000000000000000000000000..c794ee2903229911bca503da966ce5c02c7af8c3 --- /dev/null +++ b/packages/inference/src/tasks/custom/request.ts @@ -0,0 +1,41 @@ +import type { InferenceTask, Options, RequestArgs } from "../../types"; +import { makeRequestOptions } from "../../lib/makeRequestOptions"; + +/** + * Primitive to make custom calls to Inference Endpoints + */ +export async function request( + args: RequestArgs, + options?: Options & { + /** When a model can be used for multiple tasks, and we want to run a non-default task */ + task?: string | InferenceTask; + /** To load default model if needed */ + taskHint?: InferenceTask; + } +): Promise { + const { url, info } = await makeRequestOptions(args, options); + const response = await (options?.fetch ?? fetch)(url, info); + + if (options?.retry_on_error !== false && response.status === 503 && !options?.wait_for_model) { + return request(args, { + ...options, + wait_for_model: true, + }); + } + + if (!response.ok) { + if (response.headers.get("Content-Type")?.startsWith("application/json")) { + const output = await response.json(); + if (output.error) { + throw new Error(output.error); + } + } + throw new Error("An error occurred while fetching the blob"); + } + + if (response.headers.get("Content-Type")?.startsWith("application/json")) { + return await response.json(); + } + + return (await response.blob()) as T; +} diff --git a/packages/inference/src/tasks/custom/streamingRequest.ts b/packages/inference/src/tasks/custom/streamingRequest.ts new file mode 100644 index 0000000000000000000000000000000000000000..36ee80285f057cdf4eaf398a9fea1dc021e7c728 --- /dev/null +++ b/packages/inference/src/tasks/custom/streamingRequest.ts @@ -0,0 +1,82 @@ +import type { InferenceTask, Options, RequestArgs } from "../../types"; +import { makeRequestOptions } from "../../lib/makeRequestOptions"; +import type { EventSourceMessage } from "../../vendor/fetch-event-source/parse"; +import { getLines, getMessages } from "../../vendor/fetch-event-source/parse"; + +/** + * Primitive to make custom inference calls that expect server-sent events, and returns the response through a generator + */ +export async function* streamingRequest( + args: RequestArgs, + options?: Options & { + /** When a model can be used for multiple tasks, and we want to run a non-default task */ + task?: string | InferenceTask; + /** To load default model if needed */ + taskHint?: InferenceTask; + } +): AsyncGenerator { + const { url, info } = await makeRequestOptions({ ...args, stream: true }, options); + const response = await (options?.fetch ?? fetch)(url, info); + + if (options?.retry_on_error !== false && response.status === 503 && !options?.wait_for_model) { + return streamingRequest(args, { + ...options, + wait_for_model: true, + }); + } + if (!response.ok) { + if (response.headers.get("Content-Type")?.startsWith("application/json")) { + const output = await response.json(); + if (output.error) { + throw new Error(output.error); + } + } + + throw new Error(`Server response contains error: ${response.status}`); + } + if (!response.headers.get("content-type")?.startsWith("text/event-stream")) { + throw new Error( + `Server does not support event stream content type, it returned ` + response.headers.get("content-type") + ); + } + + if (!response.body) { + return; + } + + const reader = response.body.getReader(); + let events: EventSourceMessage[] = []; + + const onEvent = (event: EventSourceMessage) => { + // accumulate events in array + events.push(event); + }; + + const onChunk = getLines( + getMessages( + () => {}, + () => {}, + onEvent + ) + ); + + try { + while (true) { + const { done, value } = await reader.read(); + if (done) return; + onChunk(value); + for (const event of events) { + if (event.data.length > 0) { + const data = JSON.parse(event.data); + if (typeof data === "object" && data !== null && "error" in data) { + throw new Error(data.error); + } + yield data as T; + } + } + events = []; + } + } finally { + reader.releaseLock(); + } +} diff --git a/packages/inference/src/tasks/cv/imageClassification.ts b/packages/inference/src/tasks/cv/imageClassification.ts new file mode 100644 index 0000000000000000000000000000000000000000..2ae725870421af898492d6bf3a069ff7a59587f9 --- /dev/null +++ b/packages/inference/src/tasks/cv/imageClassification.ts @@ -0,0 +1,43 @@ +import { InferenceOutputError } from "../../lib/InferenceOutputError"; +import type { BaseArgs, Options } from "../../types"; +import { request } from "../custom/request"; + +export type ImageClassificationArgs = BaseArgs & { + /** + * Binary image data + */ + data: Blob | ArrayBuffer; +}; + +export interface ImageClassificationOutputValue { + /** + * The label for the class (model specific) + */ + label: string; + /** + * A float that represents how likely it is that the image file belongs to this class. + */ + score: number; +} + +export type ImageClassificationOutput = ImageClassificationOutputValue[]; + +/** + * This task reads some image input and outputs the likelihood of classes. + * Recommended model: google/vit-base-patch16-224 + */ +export async function imageClassification( + args: ImageClassificationArgs, + options?: Options +): Promise { + const res = await request(args, { + ...options, + taskHint: "image-classification", + }); + const isValidOutput = + Array.isArray(res) && res.every((x) => typeof x.label === "string" && typeof x.score === "number"); + if (!isValidOutput) { + throw new InferenceOutputError("Expected Array<{label: string, score: number}>"); + } + return res; +} diff --git a/packages/inference/src/tasks/cv/imageSegmentation.ts b/packages/inference/src/tasks/cv/imageSegmentation.ts new file mode 100644 index 0000000000000000000000000000000000000000..171f065260f8d0f45de707fbe8b94a9e2207340e --- /dev/null +++ b/packages/inference/src/tasks/cv/imageSegmentation.ts @@ -0,0 +1,48 @@ +import { InferenceOutputError } from "../../lib/InferenceOutputError"; +import type { BaseArgs, Options } from "../../types"; +import { request } from "../custom/request"; + +export type ImageSegmentationArgs = BaseArgs & { + /** + * Binary image data + */ + data: Blob | ArrayBuffer; +}; + +export interface ImageSegmentationOutputValue { + /** + * The label for the class (model specific) of a segment. + */ + label: string; + /** + * A str (base64 str of a single channel black-and-white img) representing the mask of a segment. + */ + mask: string; + /** + * A float that represents how likely it is that the detected object belongs to the given class. + */ + score: number; +} + +export type ImageSegmentationOutput = ImageSegmentationOutputValue[]; + +/** + * This task reads some image input and outputs the likelihood of classes & bounding boxes of detected objects. + * Recommended model: facebook/detr-resnet-50-panoptic + */ +export async function imageSegmentation( + args: ImageSegmentationArgs, + options?: Options +): Promise { + const res = await request(args, { + ...options, + taskHint: "image-segmentation", + }); + const isValidOutput = + Array.isArray(res) && + res.every((x) => typeof x.label === "string" && typeof x.mask === "string" && typeof x.score === "number"); + if (!isValidOutput) { + throw new InferenceOutputError("Expected Array<{label: string, mask: string, score: number}>"); + } + return res; +} diff --git a/packages/inference/src/tasks/cv/imageToImage.ts b/packages/inference/src/tasks/cv/imageToImage.ts new file mode 100644 index 0000000000000000000000000000000000000000..c96dce363f7f3d1c96453693872d0e33d103eef8 --- /dev/null +++ b/packages/inference/src/tasks/cv/imageToImage.ts @@ -0,0 +1,86 @@ +import { InferenceOutputError } from "../../lib/InferenceOutputError"; +import type { BaseArgs, Options, RequestArgs } from "../../types"; +import { request } from "../custom/request"; +import { base64FromBytes } from "../../../../shared"; + +export type ImageToImageArgs = BaseArgs & { + /** + * The initial image condition + * + **/ + inputs: Blob | ArrayBuffer; + + parameters?: { + /** + * The text prompt to guide the image generation. + */ + prompt?: string; + /** + * strengh param only works for SD img2img and alt diffusion img2img models + * Conceptually, indicates how much to transform the reference `image`. Must be between 0 and 1. `image` + * will be used as a starting point, adding more noise to it the larger the `strength`. The number of + * denoising steps depends on the amount of noise initially added. When `strength` is 1, added noise will + * be maximum and the denoising process will run for the full number of iterations specified in + * `num_inference_steps`. A value of 1, therefore, essentially ignores `image`. + **/ + strength?: number; + /** + * An optional negative prompt for the image generation + */ + negative_prompt?: string; + /** + * The height in pixels of the generated image + */ + height?: number; + /** + * The width in pixels of the generated image + */ + width?: number; + /** + * The number of denoising steps. More denoising steps usually lead to a higher quality image at the expense of slower inference. + */ + num_inference_steps?: number; + /** + * Guidance scale: Higher guidance scale encourages to generate images that are closely linked to the text `prompt`, usually at the expense of lower image quality. + */ + guidance_scale?: number; + /** + * guess_mode only works for ControlNet models, defaults to False In this mode, the ControlNet encoder will try best to recognize the content of the input image even if + * you remove all prompts. The `guidance_scale` between 3.0 and 5.0 is recommended. + */ + guess_mode?: boolean; + }; +}; + +export type ImageToImageOutput = Blob; + +/** + * This task reads some text input and outputs an image. + * Recommended model: lllyasviel/sd-controlnet-depth + */ +export async function imageToImage(args: ImageToImageArgs, options?: Options): Promise { + let reqArgs: RequestArgs; + if (!args.parameters) { + reqArgs = { + accessToken: args.accessToken, + model: args.model, + data: args.inputs, + }; + } else { + reqArgs = { + ...args, + inputs: base64FromBytes( + new Uint8Array(args.inputs instanceof ArrayBuffer ? args.inputs : await args.inputs.arrayBuffer()) + ), + }; + } + const res = await request(reqArgs, { + ...options, + taskHint: "image-to-image", + }); + const isValidOutput = res && res instanceof Blob; + if (!isValidOutput) { + throw new InferenceOutputError("Expected Blob"); + } + return res; +} diff --git a/packages/inference/src/tasks/cv/imageToText.ts b/packages/inference/src/tasks/cv/imageToText.ts new file mode 100644 index 0000000000000000000000000000000000000000..9dd3ae8c20ae02da28bb7f81439599f975115858 --- /dev/null +++ b/packages/inference/src/tasks/cv/imageToText.ts @@ -0,0 +1,35 @@ +import { InferenceOutputError } from "../../lib/InferenceOutputError"; +import type { BaseArgs, Options } from "../../types"; +import { request } from "../custom/request"; + +export type ImageToTextArgs = BaseArgs & { + /** + * Binary image data + */ + data: Blob | ArrayBuffer; +}; + +export interface ImageToTextOutput { + /** + * The generated caption + */ + generated_text: string; +} + +/** + * This task reads some image input and outputs the text caption. + */ +export async function imageToText(args: ImageToTextArgs, options?: Options): Promise { + const res = ( + await request<[ImageToTextOutput]>(args, { + ...options, + taskHint: "image-to-text", + }) + )?.[0]; + + if (typeof res?.generated_text !== "string") { + throw new InferenceOutputError("Expected {generated_text: string}"); + } + + return res; +} diff --git a/packages/inference/src/tasks/cv/objectDetection.ts b/packages/inference/src/tasks/cv/objectDetection.ts new file mode 100644 index 0000000000000000000000000000000000000000..5bec721156ef917cb0b5ea9842bb65365844b627 --- /dev/null +++ b/packages/inference/src/tasks/cv/objectDetection.ts @@ -0,0 +1,61 @@ +import { request } from "../custom/request"; +import type { BaseArgs, Options } from "../../types"; +import { InferenceOutputError } from "../../lib/InferenceOutputError"; + +export type ObjectDetectionArgs = BaseArgs & { + /** + * Binary image data + */ + data: Blob | ArrayBuffer; +}; + +export interface ObjectDetectionOutputValue { + /** + * A dict (with keys [xmin,ymin,xmax,ymax]) representing the bounding box of a detected object. + */ + box: { + xmax: number; + xmin: number; + ymax: number; + ymin: number; + }; + /** + * The label for the class (model specific) of a detected object. + */ + label: string; + + /** + * A float that represents how likely it is that the detected object belongs to the given class. + */ + score: number; +} + +export type ObjectDetectionOutput = ObjectDetectionOutputValue[]; + +/** + * This task reads some image input and outputs the likelihood of classes & bounding boxes of detected objects. + * Recommended model: facebook/detr-resnet-50 + */ +export async function objectDetection(args: ObjectDetectionArgs, options?: Options): Promise { + const res = await request(args, { + ...options, + taskHint: "object-detection", + }); + const isValidOutput = + Array.isArray(res) && + res.every( + (x) => + typeof x.label === "string" && + typeof x.score === "number" && + typeof x.box.xmin === "number" && + typeof x.box.ymin === "number" && + typeof x.box.xmax === "number" && + typeof x.box.ymax === "number" + ); + if (!isValidOutput) { + throw new InferenceOutputError( + "Expected Array<{label:string; score:number; box:{xmin:number; ymin:number; xmax:number; ymax:number}}>" + ); + } + return res; +} diff --git a/packages/inference/src/tasks/cv/textToImage.ts b/packages/inference/src/tasks/cv/textToImage.ts new file mode 100644 index 0000000000000000000000000000000000000000..677b3bc5c73c1ee1d47fdf266f419c3dcda26582 --- /dev/null +++ b/packages/inference/src/tasks/cv/textToImage.ts @@ -0,0 +1,51 @@ +import { InferenceOutputError } from "../../lib/InferenceOutputError"; +import type { BaseArgs, Options } from "../../types"; +import { request } from "../custom/request"; + +export type TextToImageArgs = BaseArgs & { + /** + * The text to generate an image from + */ + inputs: string; + + parameters?: { + /** + * An optional negative prompt for the image generation + */ + negative_prompt?: string; + /** + * The height in pixels of the generated image + */ + height?: number; + /** + * The width in pixels of the generated image + */ + width?: number; + /** + * The number of denoising steps. More denoising steps usually lead to a higher quality image at the expense of slower inference. + */ + num_inference_steps?: number; + /** + * Guidance scale: Higher guidance scale encourages to generate images that are closely linked to the text `prompt`, usually at the expense of lower image quality. + */ + guidance_scale?: number; + }; +}; + +export type TextToImageOutput = Blob; + +/** + * This task reads some text input and outputs an image. + * Recommended model: stabilityai/stable-diffusion-2 + */ +export async function textToImage(args: TextToImageArgs, options?: Options): Promise { + const res = await request(args, { + ...options, + taskHint: "text-to-image", + }); + const isValidOutput = res && res instanceof Blob; + if (!isValidOutput) { + throw new InferenceOutputError("Expected Blob"); + } + return res; +} diff --git a/packages/inference/src/tasks/cv/zeroShotImageClassification.ts b/packages/inference/src/tasks/cv/zeroShotImageClassification.ts new file mode 100644 index 0000000000000000000000000000000000000000..cb2b8f0d6ae570984a97e3d1d4acabb50d16c941 --- /dev/null +++ b/packages/inference/src/tasks/cv/zeroShotImageClassification.ts @@ -0,0 +1,58 @@ +import { InferenceOutputError } from "../../lib/InferenceOutputError"; +import type { BaseArgs, Options } from "../../types"; +import { request } from "../custom/request"; +import type { RequestArgs } from "../../types"; +import { base64FromBytes } from "../../../../shared"; + +export type ZeroShotImageClassificationArgs = BaseArgs & { + inputs: { + /** + * Binary image data + */ + image: Blob | ArrayBuffer; + }; + parameters: { + /** + * A list of strings that are potential classes for inputs. (max 10) + */ + candidate_labels: string[]; + }; +}; + +export interface ZeroShotImageClassificationOutputValue { + label: string; + score: number; +} + +export type ZeroShotImageClassificationOutput = ZeroShotImageClassificationOutputValue[]; + +/** + * Classify an image to specified classes. + * Recommended model: openai/clip-vit-large-patch14-336 + */ +export async function zeroShotImageClassification( + args: ZeroShotImageClassificationArgs, + options?: Options +): Promise { + const reqArgs: RequestArgs = { + ...args, + inputs: { + image: base64FromBytes( + new Uint8Array( + args.inputs.image instanceof ArrayBuffer ? args.inputs.image : await args.inputs.image.arrayBuffer() + ) + ), + }, + } as RequestArgs; + + const res = await request(reqArgs, { + ...options, + taskHint: "zero-shot-image-classification", + }); + const isValidOutput = + Array.isArray(res) && res.every((x) => typeof x.label === "string" && typeof x.score === "number"); + if (!isValidOutput) { + throw new InferenceOutputError("Expected Array<{label: string, score: number}>"); + } + return res; +} diff --git a/packages/inference/src/tasks/index.ts b/packages/inference/src/tasks/index.ts new file mode 100644 index 0000000000000000000000000000000000000000..14950e601ba5731bc7094a66ef4f564d40546479 --- /dev/null +++ b/packages/inference/src/tasks/index.ts @@ -0,0 +1,40 @@ +// Custom tasks with arbitrary inputs and outputs +export * from "./custom/request"; +export * from "./custom/streamingRequest"; + +// Audio tasks +export * from "./audio/audioClassification"; +export * from "./audio/automaticSpeechRecognition"; +export * from "./audio/textToSpeech"; +export * from "./audio/audioToAudio"; + +// Computer Vision tasks +export * from "./cv/imageClassification"; +export * from "./cv/imageSegmentation"; +export * from "./cv/imageToText"; +export * from "./cv/objectDetection"; +export * from "./cv/textToImage"; +export * from "./cv/imageToImage"; +export * from "./cv/zeroShotImageClassification"; + +// Natural Language Processing tasks +export * from "./nlp/featureExtraction"; +export * from "./nlp/fillMask"; +export * from "./nlp/questionAnswering"; +export * from "./nlp/sentenceSimilarity"; +export * from "./nlp/summarization"; +export * from "./nlp/tableQuestionAnswering"; +export * from "./nlp/textClassification"; +export * from "./nlp/textGeneration"; +export * from "./nlp/textGenerationStream"; +export * from "./nlp/tokenClassification"; +export * from "./nlp/translation"; +export * from "./nlp/zeroShotClassification"; + +// Multimodal tasks +export * from "./multimodal/documentQuestionAnswering"; +export * from "./multimodal/visualQuestionAnswering"; + +// Tabular tasks +export * from "./tabular/tabularRegression"; +export * from "./tabular/tabularClassification"; diff --git a/packages/inference/src/tasks/multimodal/documentQuestionAnswering.ts b/packages/inference/src/tasks/multimodal/documentQuestionAnswering.ts new file mode 100644 index 0000000000000000000000000000000000000000..f5f993137f9cad81730b635c45764e53b4bc38cd --- /dev/null +++ b/packages/inference/src/tasks/multimodal/documentQuestionAnswering.ts @@ -0,0 +1,73 @@ +import { InferenceOutputError } from "../../lib/InferenceOutputError"; +import type { BaseArgs, Options } from "../../types"; +import { request } from "../custom/request"; +import type { RequestArgs } from "../../types"; +import { base64FromBytes } from "../../../../shared"; +import { toArray } from "../../utils/toArray"; + +export type DocumentQuestionAnsweringArgs = BaseArgs & { + inputs: { + /** + * Raw image + * + * You can use native `File` in browsers, or `new Blob([buffer])` in node, or for a base64 image `new Blob([btoa(base64String)])`, or even `await (await fetch('...)).blob()` + **/ + image: Blob | ArrayBuffer; + question: string; + }; +}; + +export interface DocumentQuestionAnsweringOutput { + /** + * A string that’s the answer within the document. + */ + answer: string; + /** + * ? + */ + end?: number; + /** + * A float that represents how likely that the answer is correct + */ + score?: number; + /** + * ? + */ + start?: number; +} + +/** + * Answers a question on a document image. Recommended model: impira/layoutlm-document-qa. + */ +export async function documentQuestionAnswering( + args: DocumentQuestionAnsweringArgs, + options?: Options +): Promise { + const reqArgs: RequestArgs = { + ...args, + inputs: { + question: args.inputs.question, + // convert Blob or ArrayBuffer to base64 + image: base64FromBytes( + new Uint8Array( + args.inputs.image instanceof ArrayBuffer ? args.inputs.image : await args.inputs.image.arrayBuffer() + ) + ), + }, + } as RequestArgs; + const res = toArray( + await request<[DocumentQuestionAnsweringOutput] | DocumentQuestionAnsweringOutput>(reqArgs, { + ...options, + taskHint: "document-question-answering", + }) + )?.[0]; + const isValidOutput = + typeof res?.answer === "string" && + (typeof res.end === "number" || typeof res.end === "undefined") && + (typeof res.score === "number" || typeof res.score === "undefined") && + (typeof res.start === "number" || typeof res.start === "undefined"); + if (!isValidOutput) { + throw new InferenceOutputError("Expected Array<{answer: string, end?: number, score?: number, start?: number}>"); + } + return res; +} diff --git a/packages/inference/src/tasks/multimodal/visualQuestionAnswering.ts b/packages/inference/src/tasks/multimodal/visualQuestionAnswering.ts new file mode 100644 index 0000000000000000000000000000000000000000..ec45a0fa044c8d120760bd541cf9a552ad697931 --- /dev/null +++ b/packages/inference/src/tasks/multimodal/visualQuestionAnswering.ts @@ -0,0 +1,59 @@ +import { InferenceOutputError } from "../../lib/InferenceOutputError"; +import type { BaseArgs, Options, RequestArgs } from "../../types"; +import { request } from "../custom/request"; +import { base64FromBytes } from "../../../../shared"; + +export type VisualQuestionAnsweringArgs = BaseArgs & { + inputs: { + /** + * Raw image + * + * You can use native `File` in browsers, or `new Blob([buffer])` in node, or for a base64 image `new Blob([btoa(base64String)])`, or even `await (await fetch('...)).blob()` + **/ + image: Blob | ArrayBuffer; + question: string; + }; +}; + +export interface VisualQuestionAnsweringOutput { + /** + * A string that’s the answer to a visual question. + */ + answer: string; + /** + * Answer correctness score. + */ + score: number; +} + +/** + * Answers a question on an image. Recommended model: dandelin/vilt-b32-finetuned-vqa. + */ +export async function visualQuestionAnswering( + args: VisualQuestionAnsweringArgs, + options?: Options +): Promise { + const reqArgs: RequestArgs = { + ...args, + inputs: { + question: args.inputs.question, + // convert Blob or ArrayBuffer to base64 + image: base64FromBytes( + new Uint8Array( + args.inputs.image instanceof ArrayBuffer ? args.inputs.image : await args.inputs.image.arrayBuffer() + ) + ), + }, + } as RequestArgs; + const res = ( + await request<[VisualQuestionAnsweringOutput]>(reqArgs, { + ...options, + taskHint: "visual-question-answering", + }) + )?.[0]; + const isValidOutput = typeof res?.answer === "string" && typeof res.score === "number"; + if (!isValidOutput) { + throw new InferenceOutputError("Expected Array<{answer: string, score: number}>"); + } + return res; +} diff --git a/packages/inference/src/tasks/nlp/featureExtraction.ts b/packages/inference/src/tasks/nlp/featureExtraction.ts new file mode 100644 index 0000000000000000000000000000000000000000..fef6ccc6145d9eff9eda089981bf58ef6722432f --- /dev/null +++ b/packages/inference/src/tasks/nlp/featureExtraction.ts @@ -0,0 +1,52 @@ +import { InferenceOutputError } from "../../lib/InferenceOutputError"; +import { getDefaultTask } from "../../lib/getDefaultTask"; +import type { BaseArgs, Options } from "../../types"; +import { request } from "../custom/request"; + +export type FeatureExtractionArgs = BaseArgs & { + /** + * The inputs is a string or a list of strings to get the features from. + * + * inputs: "That is a happy person", + * + */ + inputs: string | string[]; +}; + +/** + * Returned values are a multidimensional array of floats (dimension depending on if you sent a string or a list of string, and if the automatic reduction, usually mean_pooling for instance was applied for you or not. This should be explained on the model's README). + */ +export type FeatureExtractionOutput = (number | number[] | number[][])[]; + +/** + * This task reads some text and outputs raw float values, that are usually consumed as part of a semantic database/semantic search. + */ +export async function featureExtraction( + args: FeatureExtractionArgs, + options?: Options +): Promise { + const defaultTask = args.model ? await getDefaultTask(args.model, args.accessToken, options) : undefined; + + const res = await request(args, { + ...options, + taskHint: "feature-extraction", + ...(defaultTask === "sentence-similarity" && { forceTask: "feature-extraction" }), + }); + let isValidOutput = true; + + const isNumArrayRec = (arr: unknown[], maxDepth: number, curDepth = 0): boolean => { + if (curDepth > maxDepth) return false; + if (arr.every((x) => Array.isArray(x))) { + return arr.every((x) => isNumArrayRec(x as unknown[], maxDepth, curDepth + 1)); + } else { + return arr.every((x) => typeof x === "number"); + } + }; + + isValidOutput = Array.isArray(res) && isNumArrayRec(res, 3, 0); + + if (!isValidOutput) { + throw new InferenceOutputError("Expected Array"); + } + return res; +} diff --git a/packages/inference/src/tasks/nlp/fillMask.ts b/packages/inference/src/tasks/nlp/fillMask.ts new file mode 100644 index 0000000000000000000000000000000000000000..b8a2af12862d8ad03a527cb8784a338e8e7963ee --- /dev/null +++ b/packages/inference/src/tasks/nlp/fillMask.ts @@ -0,0 +1,51 @@ +import { InferenceOutputError } from "../../lib/InferenceOutputError"; +import type { BaseArgs, Options } from "../../types"; +import { request } from "../custom/request"; + +export type FillMaskArgs = BaseArgs & { + inputs: string; +}; + +export type FillMaskOutput = { + /** + * The probability for this token. + */ + score: number; + /** + * The actual sequence of tokens that ran against the model (may contain special tokens) + */ + sequence: string; + /** + * The id of the token + */ + token: number; + /** + * The string representation of the token + */ + token_str: string; +}[]; + +/** + * Tries to fill in a hole with a missing word (token to be precise). That’s the base task for BERT models. + */ +export async function fillMask(args: FillMaskArgs, options?: Options): Promise { + const res = await request(args, { + ...options, + taskHint: "fill-mask", + }); + const isValidOutput = + Array.isArray(res) && + res.every( + (x) => + typeof x.score === "number" && + typeof x.sequence === "string" && + typeof x.token === "number" && + typeof x.token_str === "string" + ); + if (!isValidOutput) { + throw new InferenceOutputError( + "Expected Array<{score: number, sequence: string, token: number, token_str: string}>" + ); + } + return res; +} diff --git a/packages/inference/src/tasks/nlp/questionAnswering.ts b/packages/inference/src/tasks/nlp/questionAnswering.ts new file mode 100644 index 0000000000000000000000000000000000000000..58074eb9c96196876d64fd72f42c2c4043681aea --- /dev/null +++ b/packages/inference/src/tasks/nlp/questionAnswering.ts @@ -0,0 +1,53 @@ +import { InferenceOutputError } from "../../lib/InferenceOutputError"; +import type { BaseArgs, Options } from "../../types"; +import { request } from "../custom/request"; + +export type QuestionAnsweringArgs = BaseArgs & { + inputs: { + context: string; + question: string; + }; +}; + +export interface QuestionAnsweringOutput { + /** + * A string that’s the answer within the text. + */ + answer: string; + /** + * The index (string wise) of the stop of the answer within context. + */ + end: number; + /** + * A float that represents how likely that the answer is correct + */ + score: number; + /** + * The index (string wise) of the start of the answer within context. + */ + start: number; +} + +/** + * Want to have a nice know-it-all bot that can answer any question?. Recommended model: deepset/roberta-base-squad2 + */ +export async function questionAnswering( + args: QuestionAnsweringArgs, + options?: Options +): Promise { + const res = await request(args, { + ...options, + taskHint: "question-answering", + }); + const isValidOutput = + typeof res === "object" && + !!res && + typeof res.answer === "string" && + typeof res.end === "number" && + typeof res.score === "number" && + typeof res.start === "number"; + if (!isValidOutput) { + throw new InferenceOutputError("Expected {answer: string, end: number, score: number, start: number}"); + } + return res; +} diff --git a/packages/inference/src/tasks/nlp/sentenceSimilarity.ts b/packages/inference/src/tasks/nlp/sentenceSimilarity.ts new file mode 100644 index 0000000000000000000000000000000000000000..ec5c173ca21871c110500eab48d9033a32201716 --- /dev/null +++ b/packages/inference/src/tasks/nlp/sentenceSimilarity.ts @@ -0,0 +1,40 @@ +import { InferenceOutputError } from "../../lib/InferenceOutputError"; +import { getDefaultTask } from "../../lib/getDefaultTask"; +import type { BaseArgs, Options } from "../../types"; +import { request } from "../custom/request"; + +export type SentenceSimilarityArgs = BaseArgs & { + /** + * The inputs vary based on the model. + * + * For example when using sentence-transformers/paraphrase-xlm-r-multilingual-v1 the inputs will have a `source_sentence` string and + * a `sentences` array of strings + */ + inputs: Record | Record[]; +}; + +/** + * Returned values are a list of floats + */ +export type SentenceSimilarityOutput = number[]; + +/** + * Calculate the semantic similarity between one text and a list of other sentences by comparing their embeddings. + */ +export async function sentenceSimilarity( + args: SentenceSimilarityArgs, + options?: Options +): Promise { + const defaultTask = args.model ? await getDefaultTask(args.model, args.accessToken, options) : undefined; + const res = await request(args, { + ...options, + taskHint: "sentence-similarity", + ...(defaultTask === "feature-extraction" && { forceTask: "sentence-similarity" }), + }); + + const isValidOutput = Array.isArray(res) && res.every((x) => typeof x === "number"); + if (!isValidOutput) { + throw new InferenceOutputError("Expected number[]"); + } + return res; +} diff --git a/packages/inference/src/tasks/nlp/summarization.ts b/packages/inference/src/tasks/nlp/summarization.ts new file mode 100644 index 0000000000000000000000000000000000000000..71efd1c3b9d0af3a1bb0b76da10556f71eb9ec81 --- /dev/null +++ b/packages/inference/src/tasks/nlp/summarization.ts @@ -0,0 +1,62 @@ +import { InferenceOutputError } from "../../lib/InferenceOutputError"; +import type { BaseArgs, Options } from "../../types"; +import { request } from "../custom/request"; + +export type SummarizationArgs = BaseArgs & { + /** + * A string to be summarized + */ + inputs: string; + parameters?: { + /** + * (Default: None). Integer to define the maximum length in tokens of the output summary. + */ + max_length?: number; + /** + * (Default: None). Float (0-120.0). The amount of time in seconds that the query should take maximum. Network can cause some overhead so it will be a soft limit. + */ + max_time?: number; + /** + * (Default: None). Integer to define the minimum length in tokens of the output summary. + */ + min_length?: number; + /** + * (Default: None). Float (0.0-100.0). The more a token is used within generation the more it is penalized to not be picked in successive generation passes. + */ + repetition_penalty?: number; + /** + * (Default: 1.0). Float (0.0-100.0). The temperature of the sampling operation. 1 means regular sampling, 0 means always take the highest score, 100.0 is getting closer to uniform probability. + */ + temperature?: number; + /** + * (Default: None). Integer to define the top tokens considered within the sample operation to create new text. + */ + top_k?: number; + /** + * (Default: None). Float to define the tokens that are within the sample operation of text generation. Add tokens in the sample for more probable to least probable until the sum of the probabilities is greater than top_p. + */ + top_p?: number; + }; +}; + +export interface SummarizationOutput { + /** + * The string after translation + */ + summary_text: string; +} + +/** + * This task is well known to summarize longer text into shorter text. Be careful, some models have a maximum length of input. That means that the summary cannot handle full books for instance. Be careful when choosing your model. + */ +export async function summarization(args: SummarizationArgs, options?: Options): Promise { + const res = await request(args, { + ...options, + taskHint: "summarization", + }); + const isValidOutput = Array.isArray(res) && res.every((x) => typeof x?.summary_text === "string"); + if (!isValidOutput) { + throw new InferenceOutputError("Expected Array<{summary_text: string}>"); + } + return res?.[0]; +} diff --git a/packages/inference/src/tasks/nlp/tableQuestionAnswering.ts b/packages/inference/src/tasks/nlp/tableQuestionAnswering.ts new file mode 100644 index 0000000000000000000000000000000000000000..a0cf6925121d75db5d13f614f00d3e068c4c03a9 --- /dev/null +++ b/packages/inference/src/tasks/nlp/tableQuestionAnswering.ts @@ -0,0 +1,61 @@ +import { InferenceOutputError } from "../../lib/InferenceOutputError"; +import type { BaseArgs, Options } from "../../types"; +import { request } from "../custom/request"; + +export type TableQuestionAnsweringArgs = BaseArgs & { + inputs: { + /** + * The query in plain text that you want to ask the table + */ + query: string; + /** + * A table of data represented as a dict of list where entries are headers and the lists are all the values, all lists must have the same size. + */ + table: Record; + }; +}; + +export interface TableQuestionAnsweringOutput { + /** + * The aggregator used to get the answer + */ + aggregator: string; + /** + * The plaintext answer + */ + answer: string; + /** + * A list of coordinates of the cells contents + */ + cells: string[]; + /** + * a list of coordinates of the cells referenced in the answer + */ + coordinates: number[][]; +} + +/** + * Don’t know SQL? Don’t want to dive into a large spreadsheet? Ask questions in plain english! Recommended model: google/tapas-base-finetuned-wtq. + */ +export async function tableQuestionAnswering( + args: TableQuestionAnsweringArgs, + options?: Options +): Promise { + const res = await request(args, { + ...options, + taskHint: "table-question-answering", + }); + const isValidOutput = + typeof res?.aggregator === "string" && + typeof res.answer === "string" && + Array.isArray(res.cells) && + res.cells.every((x) => typeof x === "string") && + Array.isArray(res.coordinates) && + res.coordinates.every((coord) => Array.isArray(coord) && coord.every((x) => typeof x === "number")); + if (!isValidOutput) { + throw new InferenceOutputError( + "Expected {aggregator: string, answer: string, cells: string[], coordinates: number[][]}" + ); + } + return res; +} diff --git a/packages/inference/src/tasks/nlp/textClassification.ts b/packages/inference/src/tasks/nlp/textClassification.ts new file mode 100644 index 0000000000000000000000000000000000000000..41ced40571f31cb795bbe79643e70c18823507d2 --- /dev/null +++ b/packages/inference/src/tasks/nlp/textClassification.ts @@ -0,0 +1,42 @@ +import { InferenceOutputError } from "../../lib/InferenceOutputError"; +import type { BaseArgs, Options } from "../../types"; +import { request } from "../custom/request"; + +export type TextClassificationArgs = BaseArgs & { + /** + * A string to be classified + */ + inputs: string; +}; + +export type TextClassificationOutput = { + /** + * The label for the class (model specific) + */ + label: string; + /** + * A floats that represents how likely is that the text belongs to this class. + */ + score: number; +}[]; + +/** + * Usually used for sentiment-analysis this will output the likelihood of classes of an input. Recommended model: distilbert-base-uncased-finetuned-sst-2-english + */ +export async function textClassification( + args: TextClassificationArgs, + options?: Options +): Promise { + const res = ( + await request(args, { + ...options, + taskHint: "text-classification", + }) + )?.[0]; + const isValidOutput = + Array.isArray(res) && res.every((x) => typeof x?.label === "string" && typeof x.score === "number"); + if (!isValidOutput) { + throw new InferenceOutputError("Expected Array<{label: string, score: number}>"); + } + return res; +} diff --git a/packages/inference/src/tasks/nlp/textGeneration.ts b/packages/inference/src/tasks/nlp/textGeneration.ts new file mode 100644 index 0000000000000000000000000000000000000000..8452b1a17a9dc17799843df6cc3e4a9ee5d4abe7 --- /dev/null +++ b/packages/inference/src/tasks/nlp/textGeneration.ts @@ -0,0 +1,22 @@ +import type { TextGenerationInput, TextGenerationOutput } from "@huggingface/tasks/src/tasks/text-generation/inference"; +import { InferenceOutputError } from "../../lib/InferenceOutputError"; +import type { BaseArgs, Options } from "../../types"; +import { request } from "../custom/request"; + +/** + * Use to continue text from a prompt. This is a very generic task. Recommended model: gpt2 (it’s a simple model, but fun to play with). + */ +export async function textGeneration( + args: BaseArgs & TextGenerationInput, + options?: Options +): Promise { + const res = await request(args, { + ...options, + taskHint: "text-generation", + }); + const isValidOutput = Array.isArray(res) && res.every((x) => typeof x?.generated_text === "string"); + if (!isValidOutput) { + throw new InferenceOutputError("Expected Array<{generated_text: string}>"); + } + return res?.[0]; +} diff --git a/packages/inference/src/tasks/nlp/textGenerationStream.ts b/packages/inference/src/tasks/nlp/textGenerationStream.ts new file mode 100644 index 0000000000000000000000000000000000000000..99e1c2b7f5a0030e144d055733d84940c8847269 --- /dev/null +++ b/packages/inference/src/tasks/nlp/textGenerationStream.ts @@ -0,0 +1,96 @@ +import type { BaseArgs, Options } from "../../types"; +import { streamingRequest } from "../custom/streamingRequest"; + +import type { TextGenerationInput } from "@huggingface/tasks/src/tasks/text-generation/inference"; + +export interface TextGenerationStreamToken { + /** Token ID from the model tokenizer */ + id: number; + /** Token text */ + text: string; + /** Logprob */ + logprob: number; + /** + * Is the token a special token + * Can be used to ignore tokens when concatenating + */ + special: boolean; +} + +export interface TextGenerationStreamPrefillToken { + /** Token ID from the model tokenizer */ + id: number; + /** Token text */ + text: string; + /** + * Logprob + * Optional since the logprob of the first token cannot be computed + */ + logprob?: number; +} + +export interface TextGenerationStreamBestOfSequence { + /** Generated text */ + generated_text: string; + /** Generation finish reason */ + finish_reason: TextGenerationStreamFinishReason; + /** Number of generated tokens */ + generated_tokens: number; + /** Sampling seed if sampling was activated */ + seed?: number; + /** Prompt tokens */ + prefill: TextGenerationStreamPrefillToken[]; + /** Generated tokens */ + tokens: TextGenerationStreamToken[]; +} + +export type TextGenerationStreamFinishReason = + /** number of generated tokens == `max_new_tokens` */ + | "length" + /** the model generated its end of sequence token */ + | "eos_token" + /** the model generated a text included in `stop_sequences` */ + | "stop_sequence"; + +export interface TextGenerationStreamDetails { + /** Generation finish reason */ + finish_reason: TextGenerationStreamFinishReason; + /** Number of generated tokens */ + generated_tokens: number; + /** Sampling seed if sampling was activated */ + seed?: number; + /** Prompt tokens */ + prefill: TextGenerationStreamPrefillToken[]; + /** */ + tokens: TextGenerationStreamToken[]; + /** Additional sequences when using the `best_of` parameter */ + best_of_sequences?: TextGenerationStreamBestOfSequence[]; +} + +export interface TextGenerationStreamOutput { + /** Generated token, one at a time */ + token: TextGenerationStreamToken; + /** + * Complete generated text + * Only available when the generation is finished + */ + generated_text: string | null; + /** + * Generation details + * Only available when the generation is finished + */ + details: TextGenerationStreamDetails | null; +} + +/** + * Use to continue text from a prompt. Same as `textGeneration` but returns generator that can be read one token at a time + */ +export async function* textGenerationStream( + args: BaseArgs & TextGenerationInput, + options?: Options +): AsyncGenerator { + yield* streamingRequest(args, { + ...options, + taskHint: "text-generation", + }); +} diff --git a/packages/inference/src/tasks/nlp/tokenClassification.ts b/packages/inference/src/tasks/nlp/tokenClassification.ts new file mode 100644 index 0000000000000000000000000000000000000000..eeee58d4c641de80429d7e990c06f9e5c124d974 --- /dev/null +++ b/packages/inference/src/tasks/nlp/tokenClassification.ts @@ -0,0 +1,83 @@ +import { InferenceOutputError } from "../../lib/InferenceOutputError"; +import type { BaseArgs, Options } from "../../types"; +import { toArray } from "../../utils/toArray"; +import { request } from "../custom/request"; + +export type TokenClassificationArgs = BaseArgs & { + /** + * A string to be classified + */ + inputs: string; + parameters?: { + /** + * (Default: simple). There are several aggregation strategies: + * + * none: Every token gets classified without further aggregation. + * + * simple: Entities are grouped according to the default schema (B-, I- tags get merged when the tag is similar). + * + * first: Same as the simple strategy except words cannot end up with different tags. Words will use the tag of the first token when there is ambiguity. + * + * average: Same as the simple strategy except words cannot end up with different tags. Scores are averaged across tokens and then the maximum label is applied. + * + * max: Same as the simple strategy except words cannot end up with different tags. Word entity will be the token with the maximum score. + */ + aggregation_strategy?: "none" | "simple" | "first" | "average" | "max"; + }; +}; + +export interface TokenClassificationOutputValue { + /** + * The offset stringwise where the answer is located. Useful to disambiguate if word occurs multiple times. + */ + end: number; + /** + * The type for the entity being recognized (model specific). + */ + entity_group: string; + /** + * How likely the entity was recognized. + */ + score: number; + /** + * The offset stringwise where the answer is located. Useful to disambiguate if word occurs multiple times. + */ + start: number; + /** + * The string that was captured + */ + word: string; +} + +export type TokenClassificationOutput = TokenClassificationOutputValue[]; + +/** + * Usually used for sentence parsing, either grammatical, or Named Entity Recognition (NER) to understand keywords contained within text. Recommended model: dbmdz/bert-large-cased-finetuned-conll03-english + */ +export async function tokenClassification( + args: TokenClassificationArgs, + options?: Options +): Promise { + const res = toArray( + await request(args, { + ...options, + taskHint: "token-classification", + }) + ); + const isValidOutput = + Array.isArray(res) && + res.every( + (x) => + typeof x.end === "number" && + typeof x.entity_group === "string" && + typeof x.score === "number" && + typeof x.start === "number" && + typeof x.word === "string" + ); + if (!isValidOutput) { + throw new InferenceOutputError( + "Expected Array<{end: number, entity_group: string, score: number, start: number, word: string}>" + ); + } + return res; +} diff --git a/packages/inference/src/tasks/nlp/translation.ts b/packages/inference/src/tasks/nlp/translation.ts new file mode 100644 index 0000000000000000000000000000000000000000..ea7a3054c0a20a7dbc51fed988a25adab8dc8ee8 --- /dev/null +++ b/packages/inference/src/tasks/nlp/translation.ts @@ -0,0 +1,34 @@ +import { InferenceOutputError } from "../../lib/InferenceOutputError"; +import type { BaseArgs, Options } from "../../types"; +import { request } from "../custom/request"; + +export type TranslationArgs = BaseArgs & { + /** + * A string to be translated + */ + inputs: string | string[]; +}; + +export interface TranslationOutputValue { + /** + * The string after translation + */ + translation_text: string; +} + +export type TranslationOutput = TranslationOutputValue | TranslationOutputValue[]; + +/** + * This task is well known to translate text from one language to another. Recommended model: Helsinki-NLP/opus-mt-ru-en. + */ +export async function translation(args: TranslationArgs, options?: Options): Promise { + const res = await request(args, { + ...options, + taskHint: "translation", + }); + const isValidOutput = Array.isArray(res) && res.every((x) => typeof x?.translation_text === "string"); + if (!isValidOutput) { + throw new InferenceOutputError("Expected type Array<{translation_text: string}>"); + } + return res?.length === 1 ? res?.[0] : res; +} diff --git a/packages/inference/src/tasks/nlp/zeroShotClassification.ts b/packages/inference/src/tasks/nlp/zeroShotClassification.ts new file mode 100644 index 0000000000000000000000000000000000000000..2552489c363b1fec32921e2eb87565d76c22b0e8 --- /dev/null +++ b/packages/inference/src/tasks/nlp/zeroShotClassification.ts @@ -0,0 +1,58 @@ +import { InferenceOutputError } from "../../lib/InferenceOutputError"; +import type { BaseArgs, Options } from "../../types"; +import { toArray } from "../../utils/toArray"; +import { request } from "../custom/request"; + +export type ZeroShotClassificationArgs = BaseArgs & { + /** + * a string or list of strings + */ + inputs: string | string[]; + parameters: { + /** + * a list of strings that are potential classes for inputs. (max 10 candidate_labels, for more, simply run multiple requests, results are going to be misleading if using too many candidate_labels anyway. If you want to keep the exact same, you can simply run multi_label=True and do the scaling on your end. + */ + candidate_labels: string[]; + /** + * (Default: false) Boolean that is set to True if classes can overlap + */ + multi_label?: boolean; + }; +}; + +export interface ZeroShotClassificationOutputValue { + labels: string[]; + scores: number[]; + sequence: string; +} + +export type ZeroShotClassificationOutput = ZeroShotClassificationOutputValue[]; + +/** + * This task is super useful to try out classification with zero code, you simply pass a sentence/paragraph and the possible labels for that sentence, and you get a result. Recommended model: facebook/bart-large-mnli. + */ +export async function zeroShotClassification( + args: ZeroShotClassificationArgs, + options?: Options +): Promise { + const res = toArray( + await request(args, { + ...options, + taskHint: "zero-shot-classification", + }) + ); + const isValidOutput = + Array.isArray(res) && + res.every( + (x) => + Array.isArray(x.labels) && + x.labels.every((_label) => typeof _label === "string") && + Array.isArray(x.scores) && + x.scores.every((_score) => typeof _score === "number") && + typeof x.sequence === "string" + ); + if (!isValidOutput) { + throw new InferenceOutputError("Expected Array<{labels: string[], scores: number[], sequence: string}>"); + } + return res; +} diff --git a/packages/inference/src/tasks/tabular/tabularClassification.ts b/packages/inference/src/tasks/tabular/tabularClassification.ts new file mode 100644 index 0000000000000000000000000000000000000000..f53e926e94344cff705968618f5390e95e331f57 --- /dev/null +++ b/packages/inference/src/tasks/tabular/tabularClassification.ts @@ -0,0 +1,37 @@ +import { InferenceOutputError } from "../../lib/InferenceOutputError"; +import type { BaseArgs, Options } from "../../types"; +import { request } from "../custom/request"; + +export type TabularClassificationArgs = BaseArgs & { + inputs: { + /** + * A table of data represented as a dict of list where entries are headers and the lists are all the values, all lists must have the same size. + */ + data: Record; + }; +}; + +/** + * A list of predicted labels for each row + */ +export type TabularClassificationOutput = number[]; + +/** + * Predicts target label for a given set of features in tabular form. + * Typically, you will want to train a classification model on your training data and use it with your new data of the same format. + * Example model: vvmnnnkv/wine-quality + */ +export async function tabularClassification( + args: TabularClassificationArgs, + options?: Options +): Promise { + const res = await request(args, { + ...options, + taskHint: "tabular-classification", + }); + const isValidOutput = Array.isArray(res) && res.every((x) => typeof x === "number"); + if (!isValidOutput) { + throw new InferenceOutputError("Expected number[]"); + } + return res; +} diff --git a/packages/inference/src/tasks/tabular/tabularRegression.ts b/packages/inference/src/tasks/tabular/tabularRegression.ts new file mode 100644 index 0000000000000000000000000000000000000000..e6bd9e3de1117fe10c7da42cabee58af48fb5829 --- /dev/null +++ b/packages/inference/src/tasks/tabular/tabularRegression.ts @@ -0,0 +1,37 @@ +import { InferenceOutputError } from "../../lib/InferenceOutputError"; +import type { BaseArgs, Options } from "../../types"; +import { request } from "../custom/request"; + +export type TabularRegressionArgs = BaseArgs & { + inputs: { + /** + * A table of data represented as a dict of list where entries are headers and the lists are all the values, all lists must have the same size. + */ + data: Record; + }; +}; + +/** + * a list of predicted values for each row + */ +export type TabularRegressionOutput = number[]; + +/** + * Predicts target value for a given set of features in tabular form. + * Typically, you will want to train a regression model on your training data and use it with your new data of the same format. + * Example model: scikit-learn/Fish-Weight + */ +export async function tabularRegression( + args: TabularRegressionArgs, + options?: Options +): Promise { + const res = await request(args, { + ...options, + taskHint: "tabular-regression", + }); + const isValidOutput = Array.isArray(res) && res.every((x) => typeof x === "number"); + if (!isValidOutput) { + throw new InferenceOutputError("Expected number[]"); + } + return res; +} diff --git a/packages/inference/src/types.ts b/packages/inference/src/types.ts new file mode 100644 index 0000000000000000000000000000000000000000..a41e4d7e5145b0b15ac645faa816fc8c2b6e3a4e --- /dev/null +++ b/packages/inference/src/types.ts @@ -0,0 +1,61 @@ +import type { PipelineType } from "@huggingface/tasks"; + +export interface Options { + /** + * (Default: true) Boolean. If a request 503s and wait_for_model is set to false, the request will be retried with the same parameters but with wait_for_model set to true. + */ + retry_on_error?: boolean; + /** + * (Default: true). Boolean. There is a cache layer on Inference API (serverless) to speedup requests we have already seen. Most models can use those results as is as models are deterministic (meaning the results will be the same anyway). However if you use a non deterministic model, you can set this parameter to prevent the caching mechanism from being used resulting in a real new query. + */ + use_cache?: boolean; + /** + * (Default: false). Boolean. Do not load the model if it's not already available. + */ + dont_load_model?: boolean; + /** + * (Default: false). Boolean to use GPU instead of CPU for inference (requires Startup plan at least). + */ + use_gpu?: boolean; + + /** + * (Default: false) Boolean. If the model is not ready, wait for it instead of receiving 503. It limits the number of requests required to get your inference done. It is advised to only set this flag to true after receiving a 503 error as it will limit hanging in your application to known places. + */ + wait_for_model?: boolean; + /** + * Custom fetch function to use instead of the default one, for example to use a proxy or edit headers. + */ + fetch?: typeof fetch; + /** + * Abort Controller signal to use for request interruption. + */ + signal?: AbortSignal; + + /** + * (Default: "same-origin"). String | Boolean. Credentials to use for the request. If this is a string, it will be passed straight on. If it's a boolean, true will be "include" and false will not send credentials at all. + */ + includeCredentials?: string | boolean; +} + +export type InferenceTask = Exclude; + +export interface BaseArgs { + /** + * The access token to use. Without it, you'll get rate-limited quickly. + * + * Can be created for free in hf.co/settings/token + */ + accessToken?: string; + /** + * The model to use. Can be a full URL for a dedicated inference endpoint. + * + * If not specified, will call huggingface.co/api/tasks to get the default model for the task. + */ + model?: string; +} + +export type RequestArgs = BaseArgs & + ({ data: Blob | ArrayBuffer } | { inputs: unknown }) & { + parameters?: Record; + accessToken?: string; + }; diff --git a/packages/inference/src/utils/distributive-omit.d.ts b/packages/inference/src/utils/distributive-omit.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..c7edf2cd3dee4fbf11183f9d4772eadca34b4983 --- /dev/null +++ b/packages/inference/src/utils/distributive-omit.d.ts @@ -0,0 +1,15 @@ +// https://dev.to/safareli/pick-omit-and-union-types-in-typescript-4nd9 +// https://github.com/microsoft/TypeScript/issues/28339#issuecomment-467393437 +/** + * This allows omitting keys from objects inside unions, without merging the individual components of the union. + */ + +type Keys = keyof T; +type DistributiveKeys = T extends unknown ? Keys : never; +type Omit_ = Omit>; + +export type DistributiveOmit = T extends unknown + ? keyof Omit_ extends never + ? never + : { [P in keyof Omit_]: Omit_[P] } + : never; diff --git a/packages/inference/src/utils/omit.ts b/packages/inference/src/utils/omit.ts new file mode 100644 index 0000000000000000000000000000000000000000..6515f18df60026616ecebcb45bda9da46b66f818 --- /dev/null +++ b/packages/inference/src/utils/omit.ts @@ -0,0 +1,11 @@ +import { pick } from "./pick"; +import { typedInclude } from "./typedInclude"; + +/** + * Return copy of object, omitting blocklisted array of props + */ +export function omit(o: T, props: K[] | K): Pick> { + const propsArr = Array.isArray(props) ? props : [props]; + const letsKeep = (Object.keys(o) as (keyof T)[]).filter((prop) => !typedInclude(propsArr, prop)); + return pick(o, letsKeep); +} diff --git a/packages/inference/src/utils/pick.ts b/packages/inference/src/utils/pick.ts new file mode 100644 index 0000000000000000000000000000000000000000..7bb040cbba9ae7a4eb80c9e8a94d06fbd0ef8b4e --- /dev/null +++ b/packages/inference/src/utils/pick.ts @@ -0,0 +1,13 @@ +/** + * Return copy of object, only keeping allowlisted properties. + */ +export function pick(o: T, props: K[] | ReadonlyArray): Pick { + return Object.assign( + {}, + ...props.map((prop) => { + if (o[prop] !== undefined) { + return { [prop]: o[prop] }; + } + }) + ); +} diff --git a/packages/inference/src/utils/toArray.ts b/packages/inference/src/utils/toArray.ts new file mode 100644 index 0000000000000000000000000000000000000000..e918f06216563afc58ace3a1781adb53ceba6df9 --- /dev/null +++ b/packages/inference/src/utils/toArray.ts @@ -0,0 +1,6 @@ +export function toArray(obj: T): T extends unknown[] ? T : T[] { + if (Array.isArray(obj)) { + return obj as T extends unknown[] ? T : T[]; + } + return [obj] as T extends unknown[] ? T : T[]; +} diff --git a/packages/inference/src/utils/typedInclude.ts b/packages/inference/src/utils/typedInclude.ts new file mode 100644 index 0000000000000000000000000000000000000000..71e2f7a7e111995a744589dd34cb090d9743ea16 --- /dev/null +++ b/packages/inference/src/utils/typedInclude.ts @@ -0,0 +1,3 @@ +export function typedInclude(arr: readonly T[], v: V): v is T { + return arr.includes(v as T); +} diff --git a/packages/inference/src/vendor/fetch-event-source/parse.spec.ts b/packages/inference/src/vendor/fetch-event-source/parse.spec.ts new file mode 100644 index 0000000000000000000000000000000000000000..be9752335af0b8610eacb94da4591543f1c17fdf --- /dev/null +++ b/packages/inference/src/vendor/fetch-event-source/parse.spec.ts @@ -0,0 +1,389 @@ +import { expect, it, describe } from "vitest"; +const fail = (msg: string) => { throw new Error(msg) }; + +/** + This file is a part of fetch-event-source package (as of v2.0.1) + https://github.com/Azure/fetch-event-source/blob/v2.0.1/src/parse.spec.ts + + Full package can be used after it is made compatible with nodejs: + https://github.com/Azure/fetch-event-source/issues/20 + + Below is the fetch-event-source package license: + + MIT License + + Copyright (c) Microsoft Corporation. + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE + + */ + +import * as parse from './parse'; + +describe('parse', () => { + const encoder = new TextEncoder(); + const decoder = new TextDecoder(); + + describe('getLines', () => { + it('single line', () => { + // arrange: + let lineNum = 0; + const next = parse.getLines((line, fieldLength) => { + ++lineNum; + expect(decoder.decode(line)).toEqual('id: abc'); + expect(fieldLength).toEqual(2); + }); + + // act: + next(encoder.encode('id: abc\n')); + + // assert: + expect(lineNum).toBe(1); + }); + + it('multiple lines', () => { + // arrange: + let lineNum = 0; + const next = parse.getLines((line, fieldLength) => { + ++lineNum; + expect(decoder.decode(line)).toEqual(lineNum === 1 ? 'id: abc' : 'data: def'); + expect(fieldLength).toEqual(lineNum === 1 ? 2 : 4); + }); + + // act: + next(encoder.encode('id: abc\n')); + next(encoder.encode('data: def\n')); + + // assert: + expect(lineNum).toBe(2); + }); + + it('single line split across multiple arrays', () => { + // arrange: + let lineNum = 0; + const next = parse.getLines((line, fieldLength) => { + ++lineNum; + expect(decoder.decode(line)).toEqual('id: abc'); + expect(fieldLength).toEqual(2); + }); + + // act: + next(encoder.encode('id: a')); + next(encoder.encode('bc\n')); + + // assert: + expect(lineNum).toBe(1); + }); + + it('multiple lines split across multiple arrays', () => { + // arrange: + let lineNum = 0; + const next = parse.getLines((line, fieldLength) => { + ++lineNum; + expect(decoder.decode(line)).toEqual(lineNum === 1 ? 'id: abc' : 'data: def'); + expect(fieldLength).toEqual(lineNum === 1 ? 2 : 4); + }); + + // act: + next(encoder.encode('id: ab')); + next(encoder.encode('c\nda')); + next(encoder.encode('ta: def\n')); + + // assert: + expect(lineNum).toBe(2); + }); + + it('new line', () => { + // arrange: + let lineNum = 0; + const next = parse.getLines((line, fieldLength) => { + ++lineNum; + expect(decoder.decode(line)).toEqual(''); + expect(fieldLength).toEqual(-1); + }); + + // act: + next(encoder.encode('\n')); + + // assert: + expect(lineNum).toBe(1); + }); + + it('comment line', () => { + // arrange: + let lineNum = 0; + const next = parse.getLines((line, fieldLength) => { + ++lineNum; + expect(decoder.decode(line)).toEqual(': this is a comment'); + expect(fieldLength).toEqual(0); + }); + + // act: + next(encoder.encode(': this is a comment\n')); + + // assert: + expect(lineNum).toBe(1); + }); + + it('line with no field', () => { + // arrange: + let lineNum = 0; + const next = parse.getLines((line, fieldLength) => { + ++lineNum; + expect(decoder.decode(line)).toEqual('this is an invalid line'); + expect(fieldLength).toEqual(-1); + }); + + // act: + next(encoder.encode('this is an invalid line\n')); + + // assert: + expect(lineNum).toBe(1); + }); + + it('line with multiple colons', () => { + // arrange: + let lineNum = 0; + const next = parse.getLines((line, fieldLength) => { + ++lineNum; + expect(decoder.decode(line)).toEqual('id: abc: def'); + expect(fieldLength).toEqual(2); + }); + + // act: + next(encoder.encode('id: abc: def\n')); + + // assert: + expect(lineNum).toBe(1); + }); + + it('single byte array with multiple lines separated by \\n', () => { + // arrange: + let lineNum = 0; + const next = parse.getLines((line, fieldLength) => { + ++lineNum; + expect(decoder.decode(line)).toEqual(lineNum === 1 ? 'id: abc' : 'data: def'); + expect(fieldLength).toEqual(lineNum === 1 ? 2 : 4); + }); + + // act: + next(encoder.encode('id: abc\ndata: def\n')); + + // assert: + expect(lineNum).toBe(2); + }); + + it('single byte array with multiple lines separated by \\r', () => { + // arrange: + let lineNum = 0; + const next = parse.getLines((line, fieldLength) => { + ++lineNum; + expect(decoder.decode(line)).toEqual(lineNum === 1 ? 'id: abc' : 'data: def'); + expect(fieldLength).toEqual(lineNum === 1 ? 2 : 4); + }); + + // act: + next(encoder.encode('id: abc\rdata: def\r')); + + // assert: + expect(lineNum).toBe(2); + }); + + it('single byte array with multiple lines separated by \\r\\n', () => { + // arrange: + let lineNum = 0; + const next = parse.getLines((line, fieldLength) => { + ++lineNum; + expect(decoder.decode(line)).toEqual(lineNum === 1 ? 'id: abc' : 'data: def'); + expect(fieldLength).toEqual(lineNum === 1 ? 2 : 4); + }); + + // act: + next(encoder.encode('id: abc\r\ndata: def\r\n')); + + // assert: + expect(lineNum).toBe(2); + }); + }); + + describe('getMessages', () => { + it('happy path', () => { + // arrange: + let msgNum = 0; + const next = parse.getMessages(id => { + expect(id).toEqual('abc'); + }, retry => { + expect(retry).toEqual(42); + }, msg => { + ++msgNum; + expect(msg).toEqual({ + retry: 42, + id: 'abc', + event: 'def', + data: 'ghi' + }); + }); + + // act: + next(encoder.encode('retry: 42'), 5); + next(encoder.encode('id: abc'), 2); + next(encoder.encode('event:def'), 5); + next(encoder.encode('data:ghi'), 4); + next(encoder.encode(''), -1); + + // assert: + expect(msgNum).toBe(1); + }); + + it('skip unknown fields', () => { + let msgNum = 0; + const next = parse.getMessages(id => { + expect(id).toEqual('abc'); + }, _retry => { + fail('retry should not be called'); + }, msg => { + ++msgNum; + expect(msg).toEqual({ + id: 'abc', + data: '', + event: '', + retry: undefined, + }); + }); + + // act: + next(encoder.encode('id: abc'), 2); + next(encoder.encode('foo: null'), 3); + next(encoder.encode(''), -1); + + // assert: + expect(msgNum).toBe(1); + }); + + it('ignore non-integer retry', () => { + let msgNum = 0; + const next = parse.getMessages(_id => { + fail('id should not be called'); + }, _retry => { + fail('retry should not be called'); + }, msg => { + ++msgNum; + expect(msg).toEqual({ + id: '', + data: '', + event: '', + retry: undefined, + }); + }); + + // act: + next(encoder.encode('retry: def'), 5); + next(encoder.encode(''), -1); + + // assert: + expect(msgNum).toBe(1); + }); + + it('skip comment-only messages', () => { + // arrange: + let msgNum = 0; + const next = parse.getMessages(id => { + expect(id).toEqual('123'); + }, _retry => { + fail('retry should not be called'); + }, msg => { + ++msgNum; + expect(msg).toEqual({ + retry: undefined, + id: '123', + event: 'foo ', + data: '', + }); + }); + + // act: + next(encoder.encode('id:123'), 2); + next(encoder.encode(':'), 0); + next(encoder.encode(': '), 0); + next(encoder.encode('event: foo '), 5); + next(encoder.encode(''), -1); + + // assert: + expect(msgNum).toBe(1); + }); + + it('should append data split across multiple lines', () => { + // arrange: + let msgNum = 0; + const next = parse.getMessages(_id => { + fail('id should not be called'); + }, _retry => { + fail('retry should not be called'); + }, msg => { + ++msgNum; + expect(msg).toEqual({ + data: 'YHOO\n+2\n\n10', + id: '', + event: '', + retry: undefined, + }); + }); + + // act: + next(encoder.encode('data:YHOO'), 4); + next(encoder.encode('data: +2'), 4); + next(encoder.encode('data'), 4); + next(encoder.encode('data: 10'), 4); + next(encoder.encode(''), -1); + + // assert: + expect(msgNum).toBe(1); + }); + + it('should reset id if sent multiple times', () => { + // arrange: + const expectedIds = ['foo', '']; + let idsIdx = 0; + let msgNum = 0; + const next = parse.getMessages(id => { + expect(id).toEqual(expectedIds[idsIdx]); + ++idsIdx; + }, _retry => { + fail('retry should not be called'); + }, msg => { + ++msgNum; + expect(msg).toEqual({ + data: '', + id: '', + event: '', + retry: undefined, + }); + }); + + // act: + next(encoder.encode('id: foo'), 2); + next(encoder.encode('id'), 2); + next(encoder.encode(''), -1); + + // assert: + expect(idsIdx).toBe(2); + expect(msgNum).toBe(1); + }); + }); +}); diff --git a/packages/inference/src/vendor/fetch-event-source/parse.ts b/packages/inference/src/vendor/fetch-event-source/parse.ts new file mode 100644 index 0000000000000000000000000000000000000000..3915348e44a407c3e4e411c2091737248a789bf9 --- /dev/null +++ b/packages/inference/src/vendor/fetch-event-source/parse.ts @@ -0,0 +1,216 @@ +/** + This file is a part of fetch-event-source package (as of v2.0.1) + https://github.com/Azure/fetch-event-source/blob/v2.0.1/src/parse.ts + + Full package can be used after it is made compatible with nodejs: + https://github.com/Azure/fetch-event-source/issues/20 + + Below is the fetch-event-source package license: + + MIT License + + Copyright (c) Microsoft Corporation. + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE + + */ + +/** + * Represents a message sent in an event stream + * https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events/Using_server-sent_events#Event_stream_format + */ +export interface EventSourceMessage { + /** The event ID to set the EventSource object's last event ID value. */ + id: string; + /** A string identifying the type of event described. */ + event: string; + /** The event data */ + data: string; + /** The reconnection interval (in milliseconds) to wait before retrying the connection */ + retry?: number; +} + +/** + * Converts a ReadableStream into a callback pattern. + * @param stream The input ReadableStream. + * @param onChunk A function that will be called on each new byte chunk in the stream. + * @returns {Promise} A promise that will be resolved when the stream closes. + */ +export async function getBytes(stream: ReadableStream, onChunk: (arr: Uint8Array) => void) { + const reader = stream.getReader(); + let result: ReadableStreamReadResult; + while (!(result = await reader.read()).done) { + onChunk(result.value); + } +} + +const enum ControlChars { + NewLine = 10, + CarriageReturn = 13, + Space = 32, + Colon = 58, +} + +/** + * Parses arbitary byte chunks into EventSource line buffers. + * Each line should be of the format "field: value" and ends with \r, \n, or \r\n. + * @param onLine A function that will be called on each new EventSource line. + * @returns A function that should be called for each incoming byte chunk. + */ +export function getLines(onLine: (line: Uint8Array, fieldLength: number) => void) { + let buffer: Uint8Array | undefined; + let position: number; // current read position + let fieldLength: number; // length of the `field` portion of the line + let discardTrailingNewline = false; + + // return a function that can process each incoming byte chunk: + return function onChunk(arr: Uint8Array) { + if (buffer === undefined) { + buffer = arr; + position = 0; + fieldLength = -1; + } else { + // we're still parsing the old line. Append the new bytes into buffer: + buffer = concat(buffer, arr); + } + + const bufLength = buffer.length; + let lineStart = 0; // index where the current line starts + while (position < bufLength) { + if (discardTrailingNewline) { + if (buffer[position] === ControlChars.NewLine) { + lineStart = ++position; // skip to next char + } + + discardTrailingNewline = false; + } + + // start looking forward till the end of line: + let lineEnd = -1; // index of the \r or \n char + for (; position < bufLength && lineEnd === -1; ++position) { + switch (buffer[position]) { + case ControlChars.Colon: + if (fieldLength === -1) { // first colon in line + fieldLength = position - lineStart; + } + break; + // @ts-ignore:7029 \r case below should fallthrough to \n: + case ControlChars.CarriageReturn: + discardTrailingNewline = true; + case ControlChars.NewLine: + lineEnd = position; + break; + } + } + + if (lineEnd === -1) { + // We reached the end of the buffer but the line hasn't ended. + // Wait for the next arr and then continue parsing: + break; + } + + // we've reached the line end, send it out: + onLine(buffer.subarray(lineStart, lineEnd), fieldLength); + lineStart = position; // we're now on the next line + fieldLength = -1; + } + + if (lineStart === bufLength) { + buffer = undefined; // we've finished reading it + } else if (lineStart !== 0) { + // Create a new view into buffer beginning at lineStart so we don't + // need to copy over the previous lines when we get the new arr: + buffer = buffer.subarray(lineStart); + position -= lineStart; + } + } +} + +/** + * Parses line buffers into EventSourceMessages. + * @param onId A function that will be called on each `id` field. + * @param onRetry A function that will be called on each `retry` field. + * @param onMessage A function that will be called on each message. + * @returns A function that should be called for each incoming line buffer. + */ +export function getMessages( + onId: (id: string) => void, + onRetry: (retry: number) => void, + onMessage?: (msg: EventSourceMessage) => void +) { + let message = newMessage(); + const decoder = new TextDecoder(); + + // return a function that can process each incoming line buffer: + return function onLine(line: Uint8Array, fieldLength: number) { + if (line.length === 0) { + // empty line denotes end of message. Trigger the callback and start a new message: + onMessage?.(message); + message = newMessage(); + } else if (fieldLength > 0) { // exclude comments and lines with no values + // line is of format ":" or ": " + // https://html.spec.whatwg.org/multipage/server-sent-events.html#event-stream-interpretation + const field = decoder.decode(line.subarray(0, fieldLength)); + const valueOffset = fieldLength + (line[fieldLength + 1] === ControlChars.Space ? 2 : 1); + const value = decoder.decode(line.subarray(valueOffset)); + + switch (field) { + case 'data': + // if this message already has data, append the new value to the old. + // otherwise, just set to the new value: + message.data = message.data + ? message.data + '\n' + value + : value; // otherwise, + break; + case 'event': + message.event = value; + break; + case 'id': + onId(message.id = value); + break; + case 'retry': + const retry = parseInt(value, 10); + if (!isNaN(retry)) { // per spec, ignore non-integers + onRetry(message.retry = retry); + } + break; + } + } + } +} + +function concat(a: Uint8Array, b: Uint8Array) { + const res = new Uint8Array(a.length + b.length); + res.set(a); + res.set(b, a.length); + return res; +} + +function newMessage(): EventSourceMessage { + // data, event, and id must be initialized to empty strings: + // https://html.spec.whatwg.org/multipage/server-sent-events.html#event-stream-interpretation + // retry should be initialized to undefined so we return a consistent shape + // to the js engine all the time: https://mathiasbynens.be/notes/shapes-ics#takeaways + return { + data: '', + event: '', + id: '', + retry: undefined, + }; +} diff --git a/packages/inference/test/HfInference.spec.ts b/packages/inference/test/HfInference.spec.ts new file mode 100644 index 0000000000000000000000000000000000000000..5d585f7fc42e56d6815a6cb4d1e39c32eb9b96ad --- /dev/null +++ b/packages/inference/test/HfInference.spec.ts @@ -0,0 +1,656 @@ +import { expect, it, describe, assert } from "vitest"; + +import type { TextGenerationStreamOutput } from "../src"; +import { HfInference } from "../src"; +import "./vcr"; +import { readTestFile } from "./test-files"; + +const TIMEOUT = 60000 * 3; +const env = import.meta.env; + +if (!env.HF_TOKEN) { + console.warn("Set HF_TOKEN in the env to run the tests for better rate limits"); +} + +describe.concurrent( + "HfInference", + () => { + // Individual tests can be ran without providing an api key, however running all tests without an api key will result in rate limiting error. + const hf = new HfInference(env.HF_TOKEN); + + it("throws error if model does not exist", () => { + expect( + hf.fillMask({ + model: "this-model-does-not-exist-123", + inputs: "[MASK] world!", + }) + ).rejects.toThrowError("Model this-model-does-not-exist-123 does not exist"); + }); + + it("fillMask", async () => { + expect( + await hf.fillMask({ + model: "bert-base-uncased", + inputs: "[MASK] world!", + }) + ).toEqual( + expect.arrayContaining([ + expect.objectContaining({ + score: expect.any(Number), + token: expect.any(Number), + token_str: expect.any(String), + sequence: expect.any(String), + }), + ]) + ); + }); + + it("works without model", async () => { + expect( + await hf.fillMask({ + inputs: "[MASK] world!", + }) + ).toEqual( + expect.arrayContaining([ + expect.objectContaining({ + score: expect.any(Number), + token: expect.any(Number), + token_str: expect.any(String), + sequence: expect.any(String), + }), + ]) + ); + }); + + it("summarization", async () => { + expect( + await hf.summarization({ + model: "facebook/bart-large-cnn", + inputs: + "The tower is 324 metres (1,063 ft) tall, about the same height as an 81-storey building, and the tallest structure in Paris. Its base is square, measuring 125 metres (410 ft) on each side. During its construction, the Eiffel Tower surpassed the Washington Monument to become the tallest man-made structure in the world, a title it held for 41 years until the Chrysler Building in New York City was finished in 1930.", + parameters: { + max_length: 100, + }, + }) + ).toEqual({ + summary_text: + "The tower is 324 metres (1,063 ft) tall, about the same height as an 81-storey building. Its base is square, measuring 125 metres (410 ft) on each side. During its construction, the Eiffel Tower surpassed the Washington Monument to become the tallest man-made structure in the world.", + }); + }); + + it("questionAnswering", async () => { + expect( + await hf.questionAnswering({ + model: "deepset/roberta-base-squad2", + inputs: { + question: "What is the capital of France?", + context: "The capital of France is Paris.", + }, + }) + ).toMatchObject({ + answer: "Paris", + score: expect.any(Number), + start: expect.any(Number), + end: expect.any(Number), + }); + }); + + it("tableQuestionAnswering", async () => { + expect( + await hf.tableQuestionAnswering({ + model: "google/tapas-base-finetuned-wtq", + inputs: { + query: "How many stars does the transformers repository have?", + table: { + Repository: ["Transformers", "Datasets", "Tokenizers"], + Stars: ["36542", "4512", "3934"], + Contributors: ["651", "77", "34"], + "Programming language": ["Python", "Python", "Rust, Python and NodeJS"], + }, + }, + }) + ).toMatchObject({ + answer: "AVERAGE > 36542", + coordinates: [[0, 1]], + cells: ["36542"], + aggregator: "AVERAGE", + }); + }); + + it("documentQuestionAnswering", async () => { + expect( + await hf.documentQuestionAnswering({ + model: "impira/layoutlm-document-qa", + inputs: { + question: "Invoice number?", + image: new Blob([readTestFile("invoice.png")], { type: "image/png" }), + }, + }) + ).toMatchObject({ + answer: "us-001", + score: expect.any(Number), + // not sure what start/end refers to in this case + start: expect.any(Number), + end: expect.any(Number), + }); + }); + + it("documentQuestionAnswering with non-array output", async () => { + expect( + await hf.documentQuestionAnswering({ + model: "naver-clova-ix/donut-base-finetuned-docvqa", + inputs: { + question: "Invoice number?", + image: new Blob([readTestFile("invoice.png")], { type: "image/png" }), + }, + }) + ).toMatchObject({ + answer: "us-001", + }); + }); + + it("visualQuestionAnswering", async () => { + expect( + await hf.visualQuestionAnswering({ + model: "dandelin/vilt-b32-finetuned-vqa", + inputs: { + question: "How many cats are lying down?", + image: new Blob([readTestFile("cats.png")], { type: "image/png" }), + }, + }) + ).toMatchObject({ + answer: "2", + score: expect.any(Number), + }); + }); + + it("textClassification", async () => { + expect( + await hf.textClassification({ + model: "distilbert-base-uncased-finetuned-sst-2-english", + inputs: "I like you. I love you.", + }) + ).toEqual( + expect.arrayContaining([ + expect.objectContaining({ + label: expect.any(String), + score: expect.any(Number), + }), + ]) + ); + }); + + it("textGeneration - gpt2", async () => { + expect( + await hf.textGeneration({ + model: "gpt2", + inputs: "The answer to the universe is", + }) + ).toMatchObject({ + generated_text: expect.any(String), + }); + }); + + it("textGeneration - google/flan-t5-xxl", async () => { + expect( + await hf.textGeneration({ + model: "google/flan-t5-xxl", + inputs: "The answer to the universe is", + }) + ).toMatchObject({ + generated_text: expect.any(String), + }); + }); + + it("textGenerationStream - google/flan-t5-xxl", async () => { + const phrase = "one two three four"; + const response = hf.textGenerationStream({ + model: "google/flan-t5-xxl", + inputs: `repeat "${phrase}"`, + }); + + const makeExpectedReturn = (tokenText: string, fullPhrase: string): TextGenerationStreamOutput => { + const eot = tokenText === ""; + return { + details: null, + token: { + id: expect.any(Number), + logprob: expect.any(Number), + text: expect.stringContaining(tokenText), + special: eot, + }, + generated_text: eot ? fullPhrase : null, + }; + }; + + const expectedTokens = phrase.split(" "); + // eot token + expectedTokens.push(""); + + for await (const ret of response) { + const expectedToken = expectedTokens.shift(); + assert(expectedToken); + expect(ret).toMatchObject(makeExpectedReturn(expectedToken, phrase)); + } + }); + + it("textGenerationStream - catch error", async () => { + const response = hf.textGenerationStream({ + model: "OpenAssistant/oasst-sft-4-pythia-12b-epoch-3.5", + inputs: "Write a short story about a robot that becomes sentient and takes over the world.", + parameters: { + max_new_tokens: 10_000, + }, + }); + + await expect(response.next()).rejects.toThrow( + "Input validation error: `inputs` tokens + `max_new_tokens` must be <= 4096. Given: 17 `inputs` tokens and 10000 `max_new_tokens`" + ); + }); + + it.skip("textGenerationStream - Abort", async () => { + const controller = new AbortController(); + const response = hf.textGenerationStream( + { + model: "OpenAssistant/oasst-sft-4-pythia-12b-epoch-3.5", + inputs: "Write an essay about Sartre's philosophy.", + parameters: { + max_new_tokens: 100, + }, + }, + { signal: controller.signal } + ); + await expect(response.next()).resolves.toBeDefined(); + await expect(response.next()).resolves.toBeDefined(); + controller.abort(); + await expect(response.next()).rejects.toThrow("The operation was aborted"); + }); + + it("tokenClassification", async () => { + expect( + await hf.tokenClassification({ + model: "dbmdz/bert-large-cased-finetuned-conll03-english", + inputs: "My name is Sarah Jessica Parker but you can call me Jessica", + }) + ).toEqual( + expect.arrayContaining([ + expect.objectContaining({ + entity_group: expect.any(String), + score: expect.any(Number), + word: expect.any(String), + start: expect.any(Number), + end: expect.any(Number), + }), + ]) + ); + }); + + it("translation", async () => { + expect( + await hf.translation({ + model: "t5-base", + inputs: "My name is Wolfgang and I live in Berlin", + }) + ).toMatchObject({ + translation_text: "Mein Name ist Wolfgang und ich lebe in Berlin", + }); + // input is a list + expect( + await hf.translation({ + model: "t5-base", + inputs: ["My name is Wolfgang and I live in Berlin", "I work as programmer"], + }) + ).toMatchObject([ + { + translation_text: "Mein Name ist Wolfgang und ich lebe in Berlin", + }, + { + translation_text: "Ich arbeite als Programmierer", + }, + ]); + }); + it("zeroShotClassification", async () => { + expect( + await hf.zeroShotClassification({ + model: "facebook/bart-large-mnli", + inputs: [ + "Hi, I recently bought a device from your company but it is not working as advertised and I would like to get reimbursed!", + ], + parameters: { candidate_labels: ["refund", "legal", "faq"] }, + }) + ).toEqual( + expect.arrayContaining([ + expect.objectContaining({ + sequence: + "Hi, I recently bought a device from your company but it is not working as advertised and I would like to get reimbursed!", + labels: ["refund", "faq", "legal"], + scores: [ + expect.closeTo(0.877787709236145, 5), + expect.closeTo(0.10522633045911789, 5), + expect.closeTo(0.01698593981564045, 5), + ], + }), + ]) + ); + }); + it("SentenceSimilarity", async () => { + expect( + await hf.sentenceSimilarity({ + model: "sentence-transformers/paraphrase-xlm-r-multilingual-v1", + inputs: { + source_sentence: "That is a happy person", + sentences: ["That is a happy dog", "That is a very happy person", "Today is a sunny day"], + }, + }) + ).toEqual([expect.any(Number), expect.any(Number), expect.any(Number)]); + }); + it("FeatureExtraction", async () => { + const response = await hf.featureExtraction({ + model: "sentence-transformers/distilbert-base-nli-mean-tokens", + inputs: "That is a happy person", + }); + expect(response).toEqual(expect.arrayContaining([expect.any(Number)])); + }); + it("FeatureExtraction - same model as sentence similarity", async () => { + const response = await hf.featureExtraction({ + model: "sentence-transformers/paraphrase-xlm-r-multilingual-v1", + inputs: "That is a happy person", + }); + + expect(response.length).toBeGreaterThan(10); + expect(response).toEqual(expect.arrayContaining([expect.any(Number)])); + }); + it("FeatureExtraction - facebook/bart-base", async () => { + const response = await hf.featureExtraction({ + model: "facebook/bart-base", + inputs: "That is a happy person", + }); + // 1x7x768 + expect(response).toEqual([ + [ + expect.arrayContaining([expect.any(Number)]), + expect.arrayContaining([expect.any(Number)]), + expect.arrayContaining([expect.any(Number)]), + expect.arrayContaining([expect.any(Number)]), + expect.arrayContaining([expect.any(Number)]), + expect.arrayContaining([expect.any(Number)]), + expect.arrayContaining([expect.any(Number)]), + ], + ]); + }); + it("FeatureExtraction - facebook/bart-base, list input", async () => { + const response = await hf.featureExtraction({ + model: "facebook/bart-base", + inputs: ["hello", "That is a happy person"], + }); + // Nx1xTx768 + expect(response).toEqual([ + [ + [ + expect.arrayContaining([expect.any(Number)]), + expect.arrayContaining([expect.any(Number)]), + expect.arrayContaining([expect.any(Number)]), + ], + ], + [ + [ + expect.arrayContaining([expect.any(Number)]), + expect.arrayContaining([expect.any(Number)]), + expect.arrayContaining([expect.any(Number)]), + expect.arrayContaining([expect.any(Number)]), + expect.arrayContaining([expect.any(Number)]), + expect.arrayContaining([expect.any(Number)]), + expect.arrayContaining([expect.any(Number)]), + ], + ], + ]); + }); + it("automaticSpeechRecognition", async () => { + expect( + await hf.automaticSpeechRecognition({ + model: "facebook/wav2vec2-large-960h-lv60-self", + data: new Blob([readTestFile("sample1.flac")], { type: "audio/flac" }), + }) + ).toMatchObject({ + text: "GOING ALONG SLUSHY COUNTRY ROADS AND SPEAKING TO DAMP AUDIENCES IN DRAUGHTY SCHOOLROOMS DAY AFTER DAY FOR A FORTNIGHT HE'LL HAVE TO PUT IN AN APPEARANCE AT SOME PLACE OF WORSHIP ON SUNDAY MORNING AND HE CAN COME TO US IMMEDIATELY AFTERWARDS", + }); + }); + it("audioClassification", async () => { + expect( + await hf.audioClassification({ + model: "superb/hubert-large-superb-er", + data: new Blob([readTestFile("sample1.flac")], { type: "audio/flac" }), + }) + ).toEqual( + expect.arrayContaining([ + expect.objectContaining({ + score: expect.any(Number), + label: expect.any(String), + }), + ]) + ); + }); + + it("audioToAudio", async () => { + expect( + await hf.audioToAudio({ + model: "speechbrain/sepformer-wham", + data: new Blob([readTestFile("sample1.flac")], { type: "audio/flac" }), + }) + ).toEqual( + expect.arrayContaining([ + expect.objectContaining({ + label: expect.any(String), + blob: expect.any(String), + "content-type": expect.any(String), + }), + ]) + ); + }); + + it("textToSpeech", async () => { + expect( + await hf.textToSpeech({ + model: "espnet/kan-bayashi_ljspeech_vits", + inputs: "hello there!", + }) + ).toBeInstanceOf(Blob); + }); + + it("imageClassification", async () => { + expect( + await hf.imageClassification({ + data: new Blob([readTestFile("cheetah.png")], { type: "image/png" }), + model: "google/vit-base-patch16-224", + }) + ).toEqual( + expect.arrayContaining([ + expect.objectContaining({ + score: expect.any(Number), + label: expect.any(String), + }), + ]) + ); + }); + + it("zeroShotImageClassification", async () => { + expect( + await hf.zeroShotImageClassification({ + inputs: { image: new Blob([readTestFile("cheetah.png")], { type: "image/png" }) }, + model: "openai/clip-vit-large-patch14-336", + parameters: { + candidate_labels: ["animal", "toy", "car"], + }, + }) + ).toEqual([ + { + label: "animal", + score: expect.any(Number), + }, + { + label: "car", + score: expect.any(Number), + }, + { + label: "toy", + score: expect.any(Number), + }, + ]); + }); + + it("objectDetection", async () => { + expect( + await hf.imageClassification({ + data: new Blob([readTestFile("cats.png")], { type: "image/png" }), + model: "facebook/detr-resnet-50", + }) + ).toEqual( + expect.arrayContaining([ + expect.objectContaining({ + score: expect.any(Number), + label: expect.any(String), + box: expect.objectContaining({ + xmin: expect.any(Number), + ymin: expect.any(Number), + xmax: expect.any(Number), + ymax: expect.any(Number), + }), + }), + ]) + ); + }); + it("imageSegmentation", async () => { + expect( + await hf.imageClassification({ + data: new Blob([readTestFile("cats.png")], { type: "image/png" }), + model: "facebook/detr-resnet-50-panoptic", + }) + ).toEqual( + expect.arrayContaining([ + expect.objectContaining({ + score: expect.any(Number), + label: expect.any(String), + mask: expect.any(String), + }), + ]) + ); + }); + it("imageToImage", async () => { + const num_inference_steps = 25; + + const res = await hf.imageToImage({ + inputs: new Blob([readTestFile("stormtrooper_depth.png")], { type: "image / png" }), + parameters: { + prompt: "elmo's lecture", + num_inference_steps, + }, + model: "lllyasviel/sd-controlnet-depth", + }); + expect(res).toBeInstanceOf(Blob); + }); + it("imageToImage blob data", async () => { + const res = await hf.imageToImage({ + inputs: new Blob([readTestFile("bird_canny.png")], { type: "image / png" }), + model: "lllyasviel/sd-controlnet-canny", + }); + expect(res).toBeInstanceOf(Blob); + }); + it("textToImage", async () => { + const res = await hf.textToImage({ + inputs: "award winning high resolution photo of a giant tortoise/((ladybird)) hybrid, [trending on artstation]", + model: "stabilityai/stable-diffusion-2", + }); + expect(res).toBeInstanceOf(Blob); + }); + + it("textToImage with parameters", async () => { + const width = 512; + const height = 128; + const num_inference_steps = 10; + + const res = await hf.textToImage({ + inputs: "award winning high resolution photo of a giant tortoise/((ladybird)) hybrid, [trending on artstation]", + model: "stabilityai/stable-diffusion-2", + parameters: { + negative_prompt: "blurry", + width, + height, + num_inference_steps, + }, + }); + expect(res).toBeInstanceOf(Blob); + }); + it("imageToText", async () => { + expect( + await hf.imageToText({ + data: new Blob([readTestFile("cheetah.png")], { type: "image/png" }), + model: "nlpconnect/vit-gpt2-image-captioning", + }) + ).toEqual({ + generated_text: "a large brown and white giraffe standing in a field ", + }); + }); + it("request - google/flan-t5-xxl", async () => { + expect( + await hf.request({ + model: "google/flan-t5-xxl", + inputs: "one plus two equals", + }) + ).toMatchObject([ + { + generated_text: expect.any(String), + }, + ]); + }); + + it("tabularRegression", async () => { + expect( + await hf.tabularRegression({ + model: "scikit-learn/Fish-Weight", + inputs: { + data: { + Height: ["11.52", "12.48", "12.3778"], + Length1: ["23.2", "24", "23.9"], + Length2: ["25.4", "26.3", "26.5"], + Length3: ["30", "31.2", "31.1"], + Species: ["Bream", "Bream", "Bream"], + Width: ["4.02", "4.3056", "4.6961"], + }, + }, + }) + ).toMatchObject([270.5473526976245, 313.6843425638086, 328.3727133404402]); + }); + + it("tabularClassification", async () => { + expect( + await hf.tabularClassification({ + model: "vvmnnnkv/wine-quality", + inputs: { + data: { + fixed_acidity: ["7.4", "7.8", "10.3"], + volatile_acidity: ["0.7", "0.88", "0.32"], + citric_acid: ["0", "0", "0.45"], + residual_sugar: ["1.9", "2.6", "6.4"], + chlorides: ["0.076", "0.098", "0.073"], + free_sulfur_dioxide: ["11", "25", "5"], + total_sulfur_dioxide: ["34", "67", "13"], + density: ["0.9978", "0.9968", "0.9976"], + pH: ["3.51", "3.2", "3.23"], + sulphates: ["0.56", "0.68", "0.82"], + alcohol: ["9.4", "9.8", "12.6"], + }, + }, + }) + ).toMatchObject([5, 5, 7]); + }); + + it("endpoint - makes request to specified endpoint", async () => { + const ep = hf.endpoint("https://api-inference.huggingface.co/models/google/flan-t5-xxl"); + const { generated_text } = await ep.textGeneration({ + inputs: "one plus two equals", + }); + expect(generated_text).toEqual("three"); + }); + }, + TIMEOUT +); diff --git a/packages/inference/test/bird_canny.png b/packages/inference/test/bird_canny.png new file mode 100644 index 0000000000000000000000000000000000000000..4143d39a6f4db2c1fb489a5782c2903935dc003a Binary files /dev/null and b/packages/inference/test/bird_canny.png differ diff --git a/packages/inference/test/cats.png b/packages/inference/test/cats.png new file mode 100644 index 0000000000000000000000000000000000000000..2abcc52e647e4613ef22360294b6280d49362071 Binary files /dev/null and b/packages/inference/test/cats.png differ diff --git a/packages/inference/test/cheetah.png b/packages/inference/test/cheetah.png new file mode 100644 index 0000000000000000000000000000000000000000..6a6262641f05cb63ecb2851d5d5b73eabb99d328 Binary files /dev/null and b/packages/inference/test/cheetah.png differ diff --git a/packages/inference/test/expect-closeto.ts b/packages/inference/test/expect-closeto.ts new file mode 100644 index 0000000000000000000000000000000000000000..ed8b79e11b02b07a55887f1ce8b5dd2406164f36 --- /dev/null +++ b/packages/inference/test/expect-closeto.ts @@ -0,0 +1,31 @@ +// https://github.com/vitest-dev/vitest/pull/4260 +// this file can be removed after vitest update to 1.0 + +import { expect } from "vitest"; + +expect.extend({ + closeTo(received: number, expected: number, precision: number) { + const { isNot } = this; + let pass = false; + let expectedDiff = 0; + let receivedDiff = 0; + + if (received === Infinity && expected === Infinity) { + pass = true; + } else if (received === -Infinity && expected === -Infinity) { + pass = true; + } else { + expectedDiff = 10 ** -precision / 2; + receivedDiff = Math.abs(expected - received); + pass = receivedDiff < expectedDiff; + } + + return { + pass, + message: () => + isNot + ? `expected ${received} to not be close to ${expected}, received difference is ${receivedDiff}, but expected ${expectedDiff}` + : `expected ${received} to be close to ${expected}, received difference is ${receivedDiff}, but expected ${expectedDiff}`, + }; + }, +}); diff --git a/packages/inference/test/global.d.ts b/packages/inference/test/global.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..7ea32863f43c5e2efe116b60ceca4e4b1aacb871 --- /dev/null +++ b/packages/inference/test/global.d.ts @@ -0,0 +1,5 @@ +declare global { + const __TEST_FILES__: Record; +} + +export {}; diff --git a/packages/inference/test/invoice.png b/packages/inference/test/invoice.png new file mode 100644 index 0000000000000000000000000000000000000000..78f9c64a3ffcfc436d52d523f3e3c5ad26c14b95 Binary files /dev/null and b/packages/inference/test/invoice.png differ diff --git a/packages/inference/test/sample1.flac b/packages/inference/test/sample1.flac new file mode 100644 index 0000000000000000000000000000000000000000..837cd984faffce5d86f694d53842859c4245b2dd Binary files /dev/null and b/packages/inference/test/sample1.flac differ diff --git a/packages/inference/test/stormtrooper_depth.png b/packages/inference/test/stormtrooper_depth.png new file mode 100644 index 0000000000000000000000000000000000000000..1363a0944bb09c00ac349a1c3bfca77bb7c40a47 Binary files /dev/null and b/packages/inference/test/stormtrooper_depth.png differ diff --git a/packages/inference/test/tapes.json b/packages/inference/test/tapes.json new file mode 100644 index 0000000000000000000000000000000000000000..680b5601494884b2e1dc0ded9003b52128f735cb --- /dev/null +++ b/packages/inference/test/tapes.json @@ -0,0 +1,967 @@ +{ + "8636fe9560a75039480e6e675f0439b52a13f3c274d9ea5e019b8070cc8a5608": { + "url": "https://api-inference.huggingface.co/models/distilbert-base-uncased-finetuned-sst-2-english", + "init": { + "headers": { + "Content-Type": "application/json" + }, + "method": "POST", + "body": "{\"inputs\":\"I like you. I love you.\",\"options\":{}}" + }, + "response": { + "body": "[[{\"label\":\"POSITIVE\",\"score\":0.9998763799667358},{\"label\":\"NEGATIVE\",\"score\":0.00012365408474579453}]]", + "status": 200, + "statusText": "OK", + "headers": { + "access-control-allow-credentials": "true", + "connection": "keep-alive", + "content-type": "application/json", + "vary": "Origin, Access-Control-Request-Method, Access-Control-Request-Headers" + } + } + }, + "b0164e2ea675bb23b819db63fa15801017eb17722d5ed6662addf51b572cfd3f": { + "url": "https://api-inference.huggingface.co/models/this-model-does-not-exist-123", + "init": { + "headers": { + "Content-Type": "application/json" + }, + "method": "POST", + "body": "{\"inputs\":\"[MASK] world!\",\"options\":{}}" + }, + "response": { + "body": "{\"error\":\"Model this-model-does-not-exist-123 does not exist\"}", + "status": 404, + "statusText": "Not Found", + "headers": { + "access-control-allow-credentials": "true", + "connection": "keep-alive", + "content-type": "application/json", + "vary": "Origin, Access-Control-Request-Method, Access-Control-Request-Headers" + } + } + }, + "9cb0ae5365e9a8c840dcdca26396206d709f11fe4f74c75a082f0967fc3228f7": { + "url": "https://api-inference.huggingface.co/models/google/tapas-base-finetuned-wtq", + "init": { + "headers": { + "Content-Type": "application/json" + }, + "method": "POST", + "body": "{\"inputs\":{\"query\":\"How many stars does the transformers repository have?\",\"table\":{\"Repository\":[\"Transformers\",\"Datasets\",\"Tokenizers\"],\"Stars\":[\"36542\",\"4512\",\"3934\"],\"Contributors\":[\"651\",\"77\",\"34\"],\"Programming language\":[\"Python\",\"Python\",\"Rust, Python and NodeJS\"]}},\"options\":{}}" + }, + "response": { + "body": "{\"answer\":\"AVERAGE > 36542\",\"coordinates\":[[0,1]],\"cells\":[\"36542\"],\"aggregator\":\"AVERAGE\"}", + "status": 200, + "statusText": "OK", + "headers": { + "access-control-allow-credentials": "true", + "connection": "keep-alive", + "content-type": "application/json", + "vary": "Origin, Access-Control-Request-Method, Access-Control-Request-Headers" + } + } + }, + "de7a4c1e38920018ac0b8ae3991860b77424b75a3e6b1b1b478d5856238992aa": { + "url": "https://api-inference.huggingface.co/models/gpt2", + "init": { + "headers": { + "Content-Type": "application/json" + }, + "method": "POST", + "body": "{\"inputs\":\"The answer to the universe is\",\"options\":{}}" + }, + "response": { + "body": "[{\"generated_text\":\"The answer to the universe is to get to the surface, and we need to find the first two steps of the right sequence. \\\"In the first step there is only one particle. The universe takes three particles and moves them into the next one so\"}]", + "status": 200, + "statusText": "OK", + "headers": { + "access-control-allow-credentials": "true", + "connection": "keep-alive", + "content-type": "application/json", + "vary": "Origin, Access-Control-Request-Method, Access-Control-Request-Headers" + } + } + }, + "3eee2d13b3a94e1a1e5cd2e0477168e0645289abdae3fea2b6e8af450cc8de29": { + "url": "https://api-inference.huggingface.co/models/bert-base-uncased", + "init": { + "headers": { + "Content-Type": "application/json" + }, + "method": "POST", + "body": "{\"inputs\":\"[MASK] world!\",\"options\":{}}" + }, + "response": { + "body": "[{\"score\":0.2910905182361603,\"token\":1996,\"token_str\":\"the\",\"sequence\":\"the world!\"},{\"score\":0.18091173470020294,\"token\":2026,\"token_str\":\"my\",\"sequence\":\"my world!\"},{\"score\":0.052397340536117554,\"token\":7592,\"token_str\":\"hello\",\"sequence\":\"hello world!\"},{\"score\":0.04246954247355461,\"token\":6919,\"token_str\":\"wonderful\",\"sequence\":\"wonderful world!\"},{\"score\":0.015912111848592758,\"token\":1037,\"token_str\":\"a\",\"sequence\":\"a world!\"}]", + "status": 200, + "statusText": "OK", + "headers": { + "access-control-allow-credentials": "true", + "connection": "keep-alive", + "content-type": "application/json", + "vary": "Origin, Access-Control-Request-Method, Access-Control-Request-Headers" + } + } + }, + "d3136476ceb8461d9305f2213dc36c33e1858728b3f53a8c722133aef3143748": { + "url": "https://api-inference.huggingface.co/models/google/flan-t5-xxl", + "init": { + "headers": { + "Content-Type": "application/json" + }, + "method": "POST", + "body": "{\"inputs\":\"The answer to the universe is\",\"options\":{}}" + }, + "response": { + "body": "[{\"generated_text\":\"a\"}]", + "status": 200, + "statusText": "OK", + "headers": { + "access-control-allow-credentials": "true", + "connection": "keep-alive", + "content-type": "application/json", + "vary": "Origin, Access-Control-Request-Method, Access-Control-Request-Headers" + } + } + }, + "9462a1568bcda88294ed747f0afccac28e53e5353b825da0072d4259efcd0e4a": { + "url": "https://api-inference.huggingface.co/models/dbmdz/bert-large-cased-finetuned-conll03-english", + "init": { + "headers": { + "Content-Type": "application/json" + }, + "method": "POST", + "body": "{\"inputs\":\"My name is Sarah Jessica Parker but you can call me Jessica\",\"options\":{}}" + }, + "response": { + "body": "[{\"entity_group\":\"PER\",\"score\":0.9991335868835449,\"word\":\"Sarah Jessica Parker\",\"start\":11,\"end\":31},{\"entity_group\":\"PER\",\"score\":0.9979913234710693,\"word\":\"Jessica\",\"start\":52,\"end\":59}]", + "status": 200, + "statusText": "OK", + "headers": { + "access-control-allow-credentials": "true", + "connection": "keep-alive", + "content-type": "application/json", + "vary": "Origin, Access-Control-Request-Method, Access-Control-Request-Headers" + } + } + }, + "53b3d8a7d76e3e3e35344d0a2347b3cf0f529abcc7125a1c3b4a8a017aa2c529": { + "url": "https://api-inference.huggingface.co/models/deepset/roberta-base-squad2", + "init": { + "headers": { + "Content-Type": "application/json" + }, + "method": "POST", + "body": "{\"inputs\":{\"question\":\"What is the capital of France?\",\"context\":\"The capital of France is Paris.\"},\"options\":{}}" + }, + "response": { + "body": "{\"score\":0.9703431725502014,\"start\":25,\"end\":30,\"answer\":\"Paris\"}", + "status": 200, + "statusText": "OK", + "headers": { + "access-control-allow-credentials": "true", + "connection": "keep-alive", + "content-type": "application/json", + "vary": "Origin, Access-Control-Request-Method, Access-Control-Request-Headers" + } + } + }, + "c3683605e73e918e150f425af328edc2f5e79c63e7d6bc64c6a3d3cde46f5432": { + "url": "https://api-inference.huggingface.co/models/t5-base", + "init": { + "headers": { + "Content-Type": "application/json" + }, + "method": "POST", + "body": "{\"inputs\":\"My name is Wolfgang and I live in Berlin\",\"options\":{}}" + }, + "response": { + "body": "[{\"translation_text\":\"Mein Name ist Wolfgang und ich lebe in Berlin\"}]", + "status": 200, + "statusText": "OK", + "headers": { + "access-control-allow-credentials": "true", + "connection": "keep-alive", + "content-type": "application/json", + "vary": "Origin, Access-Control-Request-Method, Access-Control-Request-Headers" + } + } + }, + "2f189a5a254e5897d026c8dbc0bc9fe82fcc4b8edfa2ad558d4ae62f881bfb1b": { + "url": "https://api-inference.huggingface.co/models/microsoft/DialoGPT-large", + "init": { + "headers": { + "Content-Type": "application/json" + }, + "method": "POST", + "body": "{\"inputs\":{\"past_user_inputs\":[\"Which movie is the best ?\"],\"generated_responses\":[\"It is Die Hard for sure.\"],\"text\":\"Can you explain why ?\"},\"options\":{}}" + }, + "response": { + "body": "{\"generated_text\":\"It's the best movie ever.\",\"conversation\":{\"generated_responses\":[\"It is Die Hard for sure.\",\"It's the best movie ever.\"],\"past_user_inputs\":[\"Which movie is the best ?\",\"Can you explain why ?\"]},\"warnings\":[\"Setting `pad_token_id` to `eos_token_id`:50256 for open-end generation.\"]}", + "status": 200, + "statusText": "OK", + "headers": { + "access-control-allow-credentials": "true", + "connection": "keep-alive", + "content-type": "application/json", + "vary": "Origin, Access-Control-Request-Method, Access-Control-Request-Headers" + } + } + }, + "01e7762dd21ffa84ebd55d43b6ba44cc80d592783c25c9bbc5fc2c38ee711968": { + "url": "https://api-inference.huggingface.co/models/facebook/bart-large-mnli", + "init": { + "headers": { + "Content-Type": "application/json" + }, + "method": "POST", + "body": "{\"inputs\":[\"Hi, I recently bought a device from your company but it is not working as advertised and I would like to get reimbursed!\"],\"parameters\":{\"candidate_labels\":[\"refund\",\"legal\",\"faq\"]},\"options\":{}}" + }, + "response": { + "body": "[{\"sequence\":\"Hi, I recently bought a device from your company but it is not working as advertised and I would like to get reimbursed!\",\"labels\":[\"refund\",\"faq\",\"legal\"],\"scores\":[0.8777875304222107,0.10522652417421341,0.01698593609035015]}]", + "status": 200, + "statusText": "OK", + "headers": { + "access-control-allow-credentials": "true", + "connection": "keep-alive", + "content-type": "application/json", + "vary": "Origin, Access-Control-Request-Method, Access-Control-Request-Headers" + } + } + }, + "6796ae2695c685c4811e2c9e8cff2d794f3813676e4779246e9670767da2e735": { + "url": "https://api-inference.huggingface.co/models/sentence-transformers/paraphrase-xlm-r-multilingual-v1", + "init": { + "headers": { + "Content-Type": "application/json" + }, + "method": "POST", + "body": "{\"inputs\":{\"source_sentence\":\"That is a happy person\",\"sentences\":[\"That is a happy dog\",\"That is a very happy person\",\"Today is a sunny day\"]},\"options\":{}}" + }, + "response": { + "body": "[0.6623499989509583,0.9382343292236328,0.2296334058046341]", + "status": 200, + "statusText": "OK", + "headers": { + "access-control-allow-credentials": "true", + "connection": "keep-alive", + "content-type": "application/json", + "vary": "Origin, Access-Control-Request-Method, Access-Control-Request-Headers" + } + } + }, + "45d0b01267b465f464cb9e208b877ee1c7d9986fa4594e03b8b918dc04568d2c": { + "url": "https://api-inference.huggingface.co/models/google/vit-base-patch16-224", + "init": { + "headers": {}, + "method": "POST" + }, + "response": { + "body": "[{\"score\":0.9981812238693237,\"label\":\"cheetah, chetah, Acinonyx jubatus\"},{\"score\":0.000663304585032165,\"label\":\"leopard, Panthera pardus\"},{\"score\":0.0005421049427241087,\"label\":\"jaguar, panther, Panthera onca, Felis onca\"},{\"score\":0.00010748126805992797,\"label\":\"lion, king of beasts, Panthera leo\"},{\"score\":5.714610961149447e-05,\"label\":\"tiger, Panthera tigris\"}]", + "status": 200, + "statusText": "OK", + "headers": { + "access-control-allow-credentials": "true", + "connection": "keep-alive", + "content-type": "application/json", + "vary": "Origin, Access-Control-Request-Method, Access-Control-Request-Headers" + } + } + }, + "e4f68d60d76c3d45ce42d10399be7d13a7a1a9a7eea5cd0aed5212337864e862": { + "url": "https://api-inference.huggingface.co/models/facebook/wav2vec2-large-960h-lv60-self", + "init": { + "headers": {}, + "method": "POST" + }, + "response": { + "body": "{\"text\":\"GOING ALONG SLUSHY COUNTRY ROADS AND SPEAKING TO DAMP AUDIENCES IN DRAUGHTY SCHOOLROOMS DAY AFTER DAY FOR A FORTNIGHT HE'LL HAVE TO PUT IN AN APPEARANCE AT SOME PLACE OF WORSHIP ON SUNDAY MORNING AND HE CAN COME TO US IMMEDIATELY AFTERWARDS\"}", + "status": 200, + "statusText": "OK", + "headers": { + "access-control-allow-credentials": "true", + "connection": "keep-alive", + "content-type": "application/json", + "vary": "Origin, Access-Control-Request-Method, Access-Control-Request-Headers" + } + } + }, + "741f4bc66664a45c59af4ca4251b0604c297cd8927ea66d7fa138d5f6799c61e": { + "url": "https://api-inference.huggingface.co/models/superb/hubert-large-superb-er", + "init": { + "headers": {}, + "method": "POST" + }, + "response": { + "body": "[{\"score\":0.5927601456642151,\"label\":\"neu\"},{\"score\":0.20025669038295746,\"label\":\"hap\"},{\"score\":0.12795865535736084,\"label\":\"ang\"},{\"score\":0.07902450859546661,\"label\":\"sad\"}]", + "status": 200, + "statusText": "OK", + "headers": { + "access-control-allow-credentials": "true", + "connection": "keep-alive", + "content-type": "application/json", + "vary": "Origin, Access-Control-Request-Method, Access-Control-Request-Headers" + } + } + }, + "3b863bfae80be2a1b9b77479b51b87cfd2e185075b1743107249a4f1484f52b7": { + "url": "https://api-inference.huggingface.co/models/stabilityai/stable-diffusion-2", + "init": { + "headers": { + "Content-Type": "application/json" + }, + "method": "POST" + }, + "response": { + "body": "", + "status": 200, + "statusText": "OK", + "headers": { + "access-control-allow-credentials": "true", + "connection": "keep-alive", + "content-type": "image/jpeg", + "vary": "Origin, Access-Control-Request-Method, Access-Control-Request-Headers" + } + } + }, + "a729f3dac6bea9d866bf4064cc7cb773d20646e685dbff6010b7470d2920d35d": { + "url": "https://api-inference.huggingface.co/models/facebook/detr-resnet-50", + "init": { + "headers": {}, + "method": "POST" + }, + "response": { + "body": "[{\"score\":0.9957962036132812,\"label\":\"cat\",\"box\":{\"xmin\":506,\"ymin\":233,\"xmax\":629,\"ymax\":405}},{\"score\":0.9948530793190002,\"label\":\"cat\",\"box\":{\"xmin\":532,\"ymin\":33,\"xmax\":616,\"ymax\":203}},{\"score\":0.9982989430427551,\"label\":\"cat\",\"box\":{\"xmin\":20,\"ymin\":47,\"xmax\":329,\"ymax\":186}},{\"score\":0.9983733892440796,\"label\":\"cat\",\"box\":{\"xmin\":35,\"ymin\":226,\"xmax\":172,\"ymax\":405}},{\"score\":0.9994388222694397,\"label\":\"cat\",\"box\":{\"xmin\":246,\"ymin\":232,\"xmax\":478,\"ymax\":402}},{\"score\":0.9991069436073303,\"label\":\"cat\",\"box\":{\"xmin\":363,\"ymin\":25,\"xmax\":472,\"ymax\":195}}]", + "status": 200, + "statusText": "OK", + "headers": { + "access-control-allow-credentials": "true", + "connection": "keep-alive", + "content-type": "application/json", + "vary": "Origin, Access-Control-Request-Method, Access-Control-Request-Headers" + } + } + }, + "b209d4986f060b0cf1738f142434210f0050683f648895b66b5087f428b3415c": { + "url": "https://api-inference.huggingface.co/models/facebook/bart-large-cnn", + "init": { + "headers": { + "Content-Type": "application/json" + }, + "method": "POST", + "body": "{\"inputs\":\"The tower is 324 metres (1,063 ft) tall, about the same height as an 81-storey building, and the tallest structure in Paris. Its base is square, measuring 125 metres (410 ft) on each side. During its construction, the Eiffel Tower surpassed the Washington Monument to become the tallest man-made structure in the world, a title it held for 41 years until the Chrysler Building in New York City was finished in 1930.\",\"parameters\":{\"max_length\":100},\"options\":{}}" + }, + "response": { + "body": "[{\"summary_text\":\"The tower is 324 metres (1,063 ft) tall, about the same height as an 81-storey building. Its base is square, measuring 125 metres (410 ft) on each side. During its construction, the Eiffel Tower surpassed the Washington Monument to become the tallest man-made structure in the world.\"}]", + "status": 200, + "statusText": "OK", + "headers": { + "access-control-allow-credentials": "true", + "connection": "keep-alive", + "content-type": "application/json", + "vary": "Origin, Access-Control-Request-Method, Access-Control-Request-Headers" + } + } + }, + "53221439c8337814ef5345c16337b323f9e0b3a86e9d9636e8617606f8a9edf3": { + "url": "https://api-inference.huggingface.co/models/facebook/detr-resnet-50-panoptic", + "init": { + "headers": {}, + "method": "POST" + }, + "response": { + "body": "[{\"score\":0.986684,\"label\":\"LABEL_199\",\"mask\":\"iVBORw0KGgoAAAANSUhEUgAAAoAAAAGkCAAAAACEc8tCAAARyUlEQVR4nO2d25bjKAxFYVb//y97Hip3GxBYoCNx9sNMd1U6AbERF2MnH4kQO/6zLgDZGwpITKGAxBQKSEyhgMQUCkhMoYDEFApITKGAxBQKSEyhgMQUCkhMoYDEFApITKGAxBQKSEyhgMQUCkhMoYDEFApITKGAxBQKSEyhgMQUCkhMoYDEFApITKGAxBQKSEyhgMSUf9YFID3klFLheWY5lX+3lNxViL5XE2PKluW//1k3Z+4tBYdgf+TKz65+Bw2HYIechy0M7/L7D+IcyAzokV/fcvlXCxn6aAroklz+m5WBOZf/VoFDsE/yx0wfY/wdhAK6pWOidfuTHpQ/cLgTcAh2xYUB4sFumKkfQAEdk9Pi8TeXbB8vBYdgzxjM/rSvXFBAVwCsN85XA28VigKSfp7rH4X+QAHJCGqpmIsQMgehohSQmEIBPWGzBpm6300BHQGwBlaHAn5S3Gjdm5kpkAJ+sPzKAom9DdN3PvyhHu5NCiH7RuQMmL/+J3w1bjujlquAsB9HFvCJaGLnrHnDsIOABJjAAn7eKNHMb/gJEL+EQwQWsAf81sUv4TfSpdwuAtbbz1vrOkAa0l0ErAaE/tmxjYAVy+ifIfsIWPSM/lkS+krID1/3MYbVDvZCzjU7Cfi8nTusex7ZS8Dk1j5xsZ0lwJ3mgJ5x2m0EUEBiCgUkc+BNSXsyZbCeOLGkgCcQp/GIZdKBAkYDJgXKChJYwMGsgZlsMEulQGABiQcooBOipkAK6IWgBlJAN1gaOO9KDAX0g9BAX5ftKKAjzHLgRKcpoCeOeBPBwAL6GoqEhDMwroAh/RPhquZxBSQuoIC+cJXdJEQ9kh+uof6IVy1mQNJkpvYhM2C8PPEgYMUiZsCAzfSHUcVGP1b078Ay4HeZ5x2DJCuQPO3YRsCOp+Z2ShjZP3HdcB9zfWa5gL2GfL6+EdfI8qWo\"},{\"score\":0.999631,\"label\":\"cat\",\"mask\":\"iVBORw0KGgoAAAANSUhEUgAAAoAAAAGkCAAAAACEc8tCAAAEj0lEQVR4nO3d3W6bQBCAUbvq+7+ye5FaitsA+z8wnCNVvalcsv4yCzaJHw8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKDXM/oATuVlQVb7FX0AZ/L6+4d1Un/Df8VU+iW+00u9JKeTeQK+Pv4q/Ndm4FqZA3x7lSQluxh3CJATSxzgt5l2PAMNwCCJA6yhvyh3CXC/MP2FuUuAu43pL85tAtypTH+B7hPgZmf6i/Q7+gAWen1/k0N253CnAN83G2jvRO4V4EN9Z3Ojc0DOSICEEiChBEgoAf7HDakrCZBQiQNsnGQG4FKJA+QKBEgoARJKgIQSIKEESCgBEipxgG68uoK8AervEvIGyCUIkFBZb8m3AV+ECUiolBPQ+LuOjBNQfxdysgn42U7LrXnqu5aY2y8rKqk8wP7+3JC61PLl7ink4GDHDD8BLjV2uefvf5vHO+y/FuBSA5d79dnXc85/KsClBi13nlN//a014io4T30s1xeg9OjUs+NkzM8OvFj7BMyYH8u1Big/hmgKUH2M0hCg/Bin/m6Y1P25BlmtdsVT56e/9SonYO7+WK8uwOT9GYDrVQWYvD8CZLwlv5UBGKAmwOQDUH8RKgJM3h8hbMFvBmCI8gANQCYoDjB7fwZgDFswoUoDzD4ACVIYoP6YwxZMqKJz71vMv/KrkI/lcPHSp2T9btFf+1JIsMfx6t0kv8fjaDF2FkKDzQ6X7kb9PR6PrQU5WgUFtlryC6eu52NZihZBgm2adx3+ocAmXoYZxTdrk90ArWkNq9ViL0ArynQ7AeqP+ZwDEmo7QAOQBUxAQm0GaADW8kJgCxOQUFsBGoC1DMAmJiChBDiIAdhGgISa8nGtf6eB80gObe0cjfH89HCFDzVtD1vyfWAHbjQ0wI6Pspz/BHZ2+Nx/AAE2Ghhg4XOQ6Od63l/KRQ//FLYuQuat\"},{\"score\":0.998318,\"label\":\"cat\",\"mask\":\"iVBORw0KGgoAAAANSUhEUgAAAoAAAAGkCAAAAACEc8tCAAAEB0lEQVR4nO3d3XKbMBSFUdPJ+7+ye9G0gwkgYetoO81aV5n8OFx8c4QIJrcbAAAAAAAAAAAAAAAAAAAAAAAAwH/qfum7l6Kj4Gf6U9+Fqn4VHQh0MQEZZrX4dndlAjLKtZO/TyYgY2zz6yzLBCTqI30AvL9/w+14qj21/N5uJiBtT8fVwwSk3/1oCD7fqAnIJaPHoQnINffbdgy+1KQAue7+meCAcShAnjFsJXYOSI3ORAVIlABpKf1zrQCJEiBNlSNQgEQJkCgBUsP9gHwHAiRKgEQJkBK9l24ESIneuxUESJQAiRIgUQIkSoBECZAoARIlQKIESA1vSmKYwluiBUiUAOnwzAjsW4MFSJQAiRIgUQIkSoB0qHtKrwCJEiBthY8pFyBRAiRKgEQJkCgBEiVAogRIU+U/ixMgUQKk5dkB2PVzAqRMT4ECJEqARAmQKAESJUCiBEiUAIkSIFECpE7HlWgBUqhdoACJEiANlTdjCZCW2v4ESJYAiRIgp4pXYAFy6sX+2k9WFSAnquefAKnU8WhpARL1kT4A3lf9AmwCEiZAogRIlAA5MuMUUIAcGdCfG1LJckMqb06A7JtyBihADkzqT4BkCZBK99YkFSBRAqRWYwQKkD2z9iACpNp5ywJkx7QBKECyBEiUAPlq7Ap8+moC5It5Z4ACJEyARAmQKAGyNfMUUIBsje/v7BUFSJQAiRIg9U7WYAHyaOoWRIBsTO5PgGQJkCgBMsHxwi5AogTIWtUe5PB1BcjK7D2wAAkTIFECJEqATHF0dilA5jgoUIBECZAoARIlQKIESJQAiRIgUQIkSoBECZAoARIlQFaWZfZvFCBRAiRKgEQJkCgBMsfB9kaAPJi9DRYgjyYXKECiBEiUANmYuwYLkK2SAo9eVIBECZCoj/QB8BMcr+omIFHT7//iOxj8oMqTykxAokxAdo2cgWeR\"},{\"score\":0.997666,\"label\":\"cat\",\"mask\":\"iVBORw0KGgoAAAANSUhEUgAAAoAAAAGkCAAAAACEc8tCAAAFYklEQVR4nO3d127yShiGUXsr93/Lsw9IAONK8zv6v7UOUmhGyqPxuOAMAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcNqbfAP+2dvm22pkA+ZL28PtyagLkKx7zG26ttfvsBMjnLdQ3/LXW7n4eBMhz2jSY5dLmxtnDx4fvsOeWz7ynbXcr38fbft58U1TRpj+Px/PbZARkxWcCuxjnL/hb3n8fXAr/kPbJ/oY2bG+ZUFobZiF8NL9F4+QbZc02LaY3fo2NkPI2KhtPKPB3SWctiM5sHKpYfcAn2Qipbbe/k8YmI2BN+/2tPOoJC/te5oszB6xoqYrp0Y3x/rbN5628zlFGwIImHY2T3TDt7uYDT55baXZ+4MRumIoWjqGND/cv37H2oKn1EXOcPc1GSFGHD3Hszd7mt7+yxjYH5Ko9/rqS2sKJCHtbMG2tWgFWsjQkraaxdd847K2uj46zAuTPkztdrntZDu2/aePy0RUbIaVsNfDa2SrzQfJgx7aCK1qJ43GNOrvz3QWsv6wAS1nrY+/85gOZPHvUxG4Ybvb2zXzi9NTlj2IKkCP2h8DZXsBjBFjK6zOuA0PgzosvfCZz/0n8Y15fle6XsneU+O/+ySsZATnm3VngeAlvfFhVC5AzzcZRAdYSnXItLdyhOI55M91x5TWMgHzIa5NEIyCf8GR9tyPIRkA+4PVNZCMgx6yenvre/hkjIEe9c0B4dRPGCMhxj58rer3I6yTQCMjLnj75b4EAOV+7xSvA4l48i+rNhd7GRAGWd0KBG4sQYG3x0/EEWMtpF57cdPcu\"},{\"score\":0.998651,\"label\":\"cat\",\"mask\":\"iVBORw0KGgoAAAANSUhEUgAAAoAAAAGkCAAAAACEc8tCAAAEIklEQVR4nO3dwVIkNxREUeHw//9yeeHxGBiYaIboSuXTOTvoTRG6PJWKBtYCAAAAAAAAAAAAAAAAAAAAAACAXbykL4CvuNanS3atz1/b2F/pC+Crrt989uPXdibAPh9Vdv3mta0JsNCvldV195MAG73v7fr8pd0JsNL1+UdlBf6dvgD+yPXqxFuW3FsmYK2rOrz/CLDKB8/5yjsUYLFrle+/yz1gt/b6lglYZkBx7wiQKAESJUCiBEiUAJvMO4MIsMnA/gRIlgCJEmCPiTuwAHuM7E+AZAmQKAG2mLkDC7DF0P4ESJYAiRIgUQIkSoDTlP2BLAESJcAODz+FKRuAAuww9SmgAAkTIFECHKZtsxZghbajxeMEOE3ZCBRgh7EjUIBECbDE1BEowBZDCxRgjZkFCrDHgwV2HYMFWGTiDBRgk5d5CQqwy7gCBThP1U2gAIkSYJeq6fYIAVYZ158AyRJgk3kDUIBNBvYnQLIE2OPhAdg0KQVYoymrxwmwxVf6K2pVgCWKmvoS/zG9wdT61sB3Vwz0J/nVrKsJuLnBw2+tVfSdcqLvxNeysCbgtqbPvn8JcFNn5CfATZ2SnwB3dE59y4PoDR3Vnwm4m7PyMwF3c1p/AiRLgFs5bgAKcCvn9SfAnRzYn1PwPk7MzwTcx5n9CXAXh/YnQLIEuIdTB6AA93BsfwLcwrn9CXAHB/cnwA08o7+WXwkRYN7R/QmQLAGmnXwDuAQYd3h/Ahyp5xZQgGGnD0ABZj2nv6IBKECyBDhP0wAUYNTxd4ACjHIHKEDCBJhjA14CJEyAMQbgWgKcp+sMIsAYA3CtJcCYZ/VXNgAFSJYAM2zAPwiQKAFGPG0Att0CCpAsARIlwAQ78E8CJEqARAkwwEPA/wmQKAHezwB8RYBECXCSvqcwAryfHfg1ARIlwLsZgG8IkCgBEiVAogRIlACJEiBR\"},{\"score\":0.998888,\"label\":\"cat\",\"mask\":\"iVBORw0KGgoAAAANSUhEUgAAAoAAAAGkCAAAAACEc8tCAAAF90lEQVR4nO3d0XKbSBBA0fFW/v+X2Qe7bMkGCRCou+lzXuKt2Coyc9WAVkrGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeI+P6AOIM43R+s+fQ98NmL5+XbkCU+OlOtN/0QcQbnr+LWNM08pvZKO2T+ubnJ6uwff3tl2t83SdgNPC18++l4N1DfDO48Km2S85hgCfmRb/gwMIcIzPe4yl33rjYXQkwMf0dzIBfloITX9nE+AXqcX4F30AaUx/XuTT5BuYgN9+96a/dzABfygugAlIKAFu4n8GH02AhBIgoboG6FyaRNcASUKAhBIgodoGuOsi0JXj4doGSA4CJJQACSVAQgmQUAIklPcDnuT2zYVevVnWd212vf10xXItPG7fhX7MKfhgS10/+Ohxa32fmPuCeLBeax+w75LPMQG3OeCvUDAKb/V9Ou7t4G7FdsfUd91/6bsQ+wfR95q9Msv6Lvy9vusQfybsu/Y3XAPGiX8KJCDAQF6a6RxgihOgAlNsQ5Aku995CzpPwDSSPA+CCDBe60tBARJKgBk0noGdA8x09d+2wM4BKjCB1gGm0vQ0LEBCZToLBUg2dRruRvMJmGzHkz0f3qF5gNn0K7B7gB/JZmA73QPMpt0INACybXqzHTEBCSXAbDMn1zw+nQCHAiMJcAwFBhJgQp0KFOAYI9sI7FSgAD8lK7APARLKM/9bqvNem30xAXNK9Ww4kwAJJcBvbc56qQjwR6oCu5yDBXhDge8nwFupCuxBgIQSYFo9zsECvJPqHNyiQAHeS1VgBwIk\"},{\"score\":0.998007,\"label\":\"cat\",\"mask\":\"iVBORw0KGgoAAAANSUhEUgAAAoAAAAGkCAAAAACEc8tCAAAFNklEQVR4nO3dzW7jOBCFUaXR7//K7kX+HHdsk1RJRbPO2cxigoyBfLiUZCezbQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0O6S/QKI9if7BfS4KHA5b9kvoNlHe6/zgmmR//N8D+vp6/javvxXTKD0I/jy4x/PvozVpAf4SWE1/c1+AV8uDw5XdS5rmgVs5RJwLTMFeG/nLlf/Qn+LmSlAJ21BUwX4a4EXWa5srgBtYDmTBfhfgTf75xJwNfM8hvlgA2uZbQEfM4DLea0AWY4ASSVAUgmQVC8VoHuQ9bxUgKwnPUCrVlt6gB0FanVB+QFSmgBJJUBSCZBUAiSVAEk1QYCtT1c8hVnRBAFS2esEaACX9DoBsiQBkkqApJohQFd3hc0QIIUJkFQzBOh30QubIcAmLhTXNEGABrCyCQKksvwA2wbQCbyo9AAdwLVlB6i/4pID1F91uQHqr7zMi/uO/NyDrCpxAc0f2Ucw5eUFaADZEgPUH9uWF2Bff+5BlpXz/wkxf3xIWcDe/gzguk5eQNPHTycGKD7+d1qA8uM35wSoPu44PkDx8cCxAYqPJw59DKM/njnuEVtcfR4DLuywBbR+tDhkXWLjM4ArO2IBjR/N4u+C5UeH8AXUHz1iF1B9dApdQP3RKzJA/dEtMED90S8uQP0xICxA/TEiKkD9MSQoQP0xJuSN1kPz81bw0iIWUH8M88eJSBUQoOs/xu0P8Nj+nMCL2/thBPPHLpNfAxrA1U0eIKvbGeDBJ7ABXN6+APXHTrsCdAfCXnsC1B+7zXwT4gQu\"}]", + "status": 200, + "statusText": "OK", + "headers": { + "access-control-allow-credentials": "true", + "connection": "keep-alive", + "content-type": "application/json", + "vary": "Origin, Access-Control-Request-Method, Access-Control-Request-Headers" + } + } + }, + "3694ddcced223eadefa057b24fdff06b3e19e6ff24bfd546513f5b70c056bea2": { + "url": "https://api-inference.huggingface.co/models/google/flan-t5-xxl", + "init": { + "headers": { + "Content-Type": "application/json" + }, + "method": "POST", + "body": "{\"inputs\":\"repeat \\\"one two three four\\\"\",\"stream\":true,\"options\":{}}" + }, + "response": { + "body": "data:{\"token\":{\"id\":80,\"text\":\"one\",\"logprob\":-0.75390625,\"special\":false},\"generated_text\":null,\"details\":null}\n\ndata:{\"token\":{\"id\":192,\"text\":\" two\",\"logprob\":-0.01940918,\"special\":false},\"generated_text\":null,\"details\":null}\n\ndata:{\"token\":{\"id\":386,\"text\":\" three\",\"logprob\":-0.015197754,\"special\":false},\"generated_text\":null,\"details\":null}\n\ndata:{\"token\":{\"id\":662,\"text\":\" four\",\"logprob\":-0.01940918,\"special\":false},\"generated_text\":null,\"details\":null}\n\ndata:{\"token\":{\"id\":1,\"text\":\"\",\"logprob\":-0.030883789,\"special\":true},\"generated_text\":\"one two three four\",\"details\":null}\n\n", + "status": 200, + "statusText": "OK", + "headers": { + "access-control-allow-credentials": "true", + "connection": "keep-alive", + "content-type": "text/event-stream", + "vary": "Origin, Access-Control-Request-Method, Access-Control-Request-Headers" + } + } + }, + "5d075f1b72a1944d61597a7bc7c3251c3d6b7f3b4deadce4fb6de54964bfeb74": { + "url": "https://api-inference.huggingface.co/models/stabilityai/stable-diffusion-2", + "init": { + "headers": { + "Content-Type": "application/json" + }, + "method": "POST" + }, + "response": { + "body": "", + "status": 200, + "statusText": "OK", + "headers": { + "access-control-allow-credentials": "true", + "connection": "keep-alive", + "content-type": "image/jpeg", + "vary": "Origin, Access-Control-Request-Method, Access-Control-Request-Headers" + } + } + }, + "9f9b1e0f1931cca2a77f4f39284fd1ca2e598b393d0c7ed36f05e66897cb762d": { + "url": "https://api-inference.huggingface.co/models/stabilityai/stable-diffusion-2", + "init": { + "headers": { + "Content-Type": "application/json" + }, + "method": "POST" + }, + "response": { + "body": "", + "status": 200, + "statusText": "OK", + "headers": { + "access-control-allow-credentials": "true", + "connection": "keep-alive", + "content-type": "image/jpeg", + "vary": "Origin, Access-Control-Request-Method, Access-Control-Request-Headers" + } + } + }, + "789205591192088e182cb48dfef4b7a95c6c7193478b15236dee4733361b8dc1": { + "url": "https://api-inference.huggingface.co/models/nlpconnect/vit-gpt2-image-captioning", + "init": { + "headers": {}, + "method": "POST" + }, + "response": { + "body": "[{\"generated_text\":\"a large brown and white giraffe standing in a field \"}]", + "status": 200, + "statusText": "OK", + "headers": { + "access-control-allow-credentials": "true", + "connection": "keep-alive", + "content-type": "application/json", + "vary": "Origin, Access-Control-Request-Method, Access-Control-Request-Headers" + } + } + }, + "e64d5b8d2371f0706f29b4e27cac68b3f1e9fe3b10013a7f008ddbe005d7eb8f": { + "url": "https://api-inference.huggingface.co/models/google/flan-t5-xxl", + "init": { + "headers": { + "Content-Type": "application/json" + }, + "method": "POST", + "body": "{\"inputs\":\"one plus two equals\",\"options\":{}}" + }, + "response": { + "body": "[{\"generated_text\":\"three\"}]", + "status": 200, + "statusText": "OK", + "headers": { + "access-control-allow-credentials": "true", + "connection": "keep-alive", + "content-type": "application/json", + "vary": "Origin, Access-Control-Request-Method, Access-Control-Request-Headers" + } + } + }, + "7364916c1dcc1aaf643027e0c86abcf22e3b963dd5876fce23ffa7604465899e": { + "url": "https://api-inference.huggingface.co/models/sentence-transformers/distilbert-base-nli-mean-tokens", + "init": { + "headers": { + "Content-Type": "application/json" + }, + "method": "POST", + "body": "{\"inputs\":\"That is a happy person\",\"options\":{}}" + }, + "response": { + "body": "[-0.1444098949432373,-0.2155206948518753,0.3950554430484772,-0.32366567850112915,-0.8846870064735413,-0.27200111746788025,0.5254154801368713,-0.06377298384904861,-1.001139521598816,-0.19125863909721375,0.265115886926651,0.5731108784675598,0.06561983376741409,-0.3374868333339691,-0.22879423201084137,-0.4704055190086365,1.5130623579025269,0.10550325363874435,-1.7395362854003906,-0.8257279992103577,0.730402410030365,-0.5417605638504028,-0.6576853394508362,0.35003024339675903,-0.2149132490158081,0.031837668269872665,1.113192081451416,0.08801116794347763,0.842239260673523,0.4662213921546936,-0.4869832694530487,0.19101059436798096,-0.18273593485355377,0.545396089553833,0.1906941682100296,0.12757354974746704,-0.42271777987480164,-0.622184693813324,-0.40973803400993347,-0.9280133843421936,1.0706145763397217,-0.34749945998191833,0.6250017285346985,-0.40487465262413025,-0.4502999186515808,0.015214676968753338,-1.1271711587905884,0.7666515111923218,-1.3818893432617188,0.12661510705947876,-0.6603745222091675,0.18398210406303406,0.45496493577957153,-0.05575105920433998,-0.37855538725852966,-0.04115443676710129,-2.125722646713257,1.406559944152832,1.0758473873138428,-0.30468401312828064,0.13236971199512482,0.10472618043422699,0.28367751836776733,0.34991100430488586,0.5733585357666016,0.6159747242927551,0.10550082474946976,-0.24300383031368256,1.394785761833191,-0.4703429639339447,1.8783321380615234,-0.6107724905014038,0.14193515479564667,-0.634705126285553,-0.5036863684654236,0.2421235293149948,0.0319230891764164,0.34370186924934387,0.07103046029806137,0.2585197985172272,-0.1343606412410736,-1.1722413301467896,-1.547368049621582,1.458776593208313,-0.5434101819992065,-0.7611708045005798,-1.226521611213684,0.08769858628511429,-0.913916289806366,0.5058547258377075,0.7962006330490112,-0.3033398985862732,-0.4032438397407532,0.983155369758606,-0.6209003329277039,-0.46675819158554077,-0.6980514526367188,-0.39473751187324524,-0.5945717692375183,0.5161830186843872,0.403669536113739,-0.6419994235038757,-0.1842871755361557,-0.14515778422355652,-1.0397862195968628,0.5564567446708679,0.735032856464386,-0.38835638761520386,0.152960866689682,-0.302586168050766,-0.581928551197052,-1.0064560174942017,0.632064700126648,1.6416062116622925,-0.6527992486953735,0.6985424757003784,-0.5519619584083557,-0.7127256393432617,-0.5432589054107666,0.04995843023061752,0.009986231103539467,-0.030386751517653465,0.12360306829214096,0.8474199175834656,-0.387605220079422,-0.13577917218208313,0.4738689363002777,-0.529528796672821,0.49532023072242737,-0.12247344106435776,0.8195511102676392,-0.5055526494979858,-0.061879273504018784,-0.5276534557342529,0.19498702883720398,-0.6542377471923828,0.5336252450942993,1.009046196937561,-0.5635032653808594,0.8916707634925842,0.7846862077713013,1.2765895128250122,0.16327837109565735,-0.19107520580291748,0.3789025843143463,1.0169458389282227,0.667479395866394,0.12024008482694626,-0.4642327129840851,-0.026628758758306503,0.03190264478325844,0.11387423425912857,-0.02977307327091694,0.261370450258255,-0.9620156288146973,-0.8193443417549133,-0.06686298549175262,0.0872417539358139,-1.3584986925125122,0.25191280245780945,-0.2711220383644104,-0.07303229719400406,0.2290336787700653,-0.9333869814872742,-0.7264360189437866,-0.08701664209365845,-0.42980948090553284,0.019237620756030083,-0.1422537863254547,-0.07438308000564575,0.39288753271102905,-0.0434710718691349,0.14574052393436432,0.3117360770702362,-0.7722527384757996,-0.347076416015625,-0.3664979934692383,-0.5619441270828247,-0.34126752614974976,-0.05858812481164932,0.7719191312789917,-0.3296482563018799,0.4295037090778351,0.26711052656173706,-0.6511026620864868,0.2747061550617218,-0.5282447934150696,-2.1885905265808105,-0.22095751762390137,-0.010392417199909687,1.0112942457199097,0.3942573666572571,0.24367670714855194,0.1055738776922226,0.6466551423072815,0.3361627757549286,0.5194165706634521,0.919917643070221,-0.1291145384311676,-0.546722948551178,-0.22795037925243378,0.6576961278915405,0.47242504358291626,0.2621803879737854,-0.24900372326374054,0.8277804255485535,-0.13644126057624817,-0.8503270745277405,-0.1438629925251007,-0.005917551461607218,-0.6289588809013367,0.25292307138442993,-0.8379318118095398,-0.11944245547056198,-0.010686280205845833,0.8249481916427612,-0.8580904006958008,0.1252691000699997,-0.32294607162475586,0.43138864636421204,-1.0302475690841675,0.06207135319709778,0.6612444519996643,-0.06423025578260422,-0.6628100275993347,-0.631009042263031,-0.08680305629968643,-0.5672935247421265,-0.9567095637321472,0.2536166310310364,-0.627819836139679,0.5043155550956726,0.601329505443573,0.6671504974365234,-1.1101011037826538,0.48032519221305847,0.37645474076271057,-1.1511696577072144,1.3374930620193481,-0.039491619914770126,-0.2811458110809326,0.6093470454216003,-1.0444623231887817,-0.5424984097480774,-0.47606465220451355,0.9449477791786194,-0.6707010269165039,-0.1923297494649887,0.2750988006591797,-1.0330890417099,-2.1231086254119873,-0.5758506655693054,0.4308185577392578,0.4927143156528473,0.782988965511322,-0.5618732571601868,-0.4658034145832062,-0.8249430656433105,-0.81622713804245,0.7290099263191223,0.32639893889427185,-0.3464181423187256,-0.08988574892282486,-0.034111250191926956,0.2763673961162567,-0.8902341723442078,-0.016018234193325043,-0.4491843581199646,0.617551863193512,0.632405161857605,-0.7395408749580383,1.0287593603134155,-0.0997970923781395,0.3433273434638977,0.30089595913887024,0.27188900113105774,-0.24112670123577118,0.5965413451194763,0.1603585183620453,-0.6481337547302246,-0.45950236916542053,-0.14674387872219086,-0.5483015775680542,-0.10249374806880951,-0.33442506194114685,0.335960328578949,-0.4277239441871643,-0.7387738823890686,-0.492816299200058,-0.7874308824539185,-0.5370262265205383,0.1886289268732071,-0.47067147493362427,0.28443512320518494,0.05253524333238602,0.721677839756012,0.7115067839622498,0.3319898247718811,-2.034494638442993,0.04317311570048332,0.10441921651363373,-0.08087339252233505,0.2992608845233917,0.2649424374103546,-0.5395172238349915,0.43039724230766296,-0.5872429013252258,-0.5200222730636597,0.6321988701820374,0.4251795709133148,-0.03197478875517845,0.5381578803062439,-0.7152909636497498,0.8936313986778259,1.1127983331680298,0.7780256271362305,0.45020756125450134,0.4846034049987793,0.36080223321914673,0.7508164644241333,-1.0093634128570557,0.7415878176689148,-0.17795421183109283,-0.15401878952980042,-1.3964176177978516,0.48902106285095215,-0.2115965038537979,0.34462404251098633,-0.13033883273601532,0.5703116655349731,0.48510876297950745,-0.21467609703540802,-0.08354493230581284,0.05109028145670891,0.8214182257652283,-0.33522462844848633,-1.201927900314331,-0.11973924189805984,-0.09297139942646027,-0.6164823174476624,0.754567563533783,-0.3416493237018585,-0.0831977128982544,-0.9089035391807556,0.07671194523572922,-0.9793686270713806,-1.3001114130020142,0.6290199160575867,0.13984347879886627,-1.1674329042434692,-0.007383291143923998,0.3292880356311798,-0.5072041153907776,-0.6027935743331909,0.8447619676589966,0.44698983430862427,1.3161211013793945,-0.7435653805732727,-0.22253961861133575,0.3555862009525299,0.2805011570453644,0.48259684443473816,-0.031842220574617386,0.08051256090402603,0.6673954129219055,-0.3106149137020111,-0.01945262774825096,0.2581673264503479,0.6378266215324402,0.5469080209732056,0.4148569107055664,0.17880116403102875,0.847494900226593,-0.15698325634002686,0.6566962003707886,0.047356151044368744,0.7187795639038086,0.6323505640029907,0.3075268268585205,0.2607254385948181,-0.3920568823814392,-0.44902530312538147,0.3624870181083679,-0.12054910510778427,0.24741347134113312,-0.6591383814811707,-0.5751186609268188,-1.1311711072921753,0.8389659523963928,-0.5550827980041504,0.4392588436603546,0.33554473519325256,0.6609105467796326,-0.20737159252166748,0.20842139422893524,0.03539357706904411,-0.16751018166542053,0.013077495619654655,0.5483023524284363,-0.2392473667860031,0.022804081439971924,1.946470022201538,-0.7072310447692871,-1.0506083965301514,0.4394121766090393,-0.9097608327865601,0.7584677338600159,-0.3366091847419739,1.993713140487671,-0.15419597923755646,-0.5165850520133972,-0.6167789101600647,-0.3581840991973877,0.951444685459137,0.5293115973472595,-1.0959817171096802,0.05023130401968956,-0.4920780062675476,0.6967087984085083,0.10611218959093094,-0.7505232691764832,0.3208189308643341,0.40679600834846497,0.008674653246998787,0.2694816291332245,-0.30221086740493774,-0.005438072141259909,0.6521114706993103,0.056760940700769424,0.7098573446273804,0.6503109335899353,-0.6777421832084656,-2.1999025344848633,-0.07390420883893967,-0.39233893156051636,-1.0512131452560425,-0.7870557904243469,-0.4915771484375,0.25850871205329895,-0.20485417544841766,-0.4906516671180725,0.5948147773742676,-0.2833941876888275,0.1594233214855194,-0.47348552942276,0.3765048384666443,1.0864962339401245,0.12394166737794876,0.35241666436195374,-0.7797054648399353,-0.015996810048818588,0.42931851744651794,0.22153577208518982,-0.5068992972373962,-0.6689844727516174,0.36142659187316895,-1.2761086225509644,0.3110342025756836,-0.7846189737319946,0.7447103261947632,0.20031985640525818,-0.02344573847949505,-0.7497777342796326,-0.05548156052827835,0.3752210736274719,0.5497356653213501,0.9740194082260132,-0.2799202799797058,0.44668227434158325,0.7067877650260925,-0.5582254528999329,-0.04264890402555466,-0.18885178864002228,0.6123086214065552,-0.837407112121582,-0.3059529662132263,-0.8930251002311707,-0.681084156036377,0.3486791253089905,0.3575895130634308,-0.3129901885986328,-0.5219523310661316,1.0737905502319336,-0.04334510117769241,0.6003994941711426,-1.151445746421814,-0.1436990648508072,-0.6472428441047668,-0.5090581774711609,-0.30153244733810425,-0.7426214814186096,0.39358004927635193,0.17473706603050232,-0.2363293468952179,-0.09083008021116257,-0.035518500953912735,0.4713831841945648,0.4022206664085388,0.12745778262615204,-0.927177369594574,-0.4262141287326813,-0.9064030051231384,-0.8540393710136414,0.1978120654821396,-0.1826879233121872,1.107239007949829,-1.2168320417404175,-0.5555586218833923,0.5427597761154175,-0.39855068922042847,0.5086639523506165,0.3145900368690491,0.5395236611366272,0.8116000294685364,0.6576380133628845,-0.7271415591239929,0.34332847595214844,0.4891932010650635,-0.2206515073776245,0.6781853437423706,0.03988807648420334,0.5492593050003052,0.6006048917770386,0.8709477782249451,0.23369339108467102,0.8750196099281311,-0.4546547830104828,0.7530430555343628,-0.8488145470619202,0.6766351461410522,-0.24973070621490479,-0.46675577759742737,-1.5363671779632568,-0.11788630485534668,-0.6376318335533142,0.17835159599781036,0.7187987565994263,-0.23046061396598816,0.3932490646839142,1.3343489170074463,0.8172160387039185,-0.17148111760616302,-0.42142531275749207,0.7577040791511536,0.10193841904401779,0.5860477089881897,1.0035181045532227,-0.04629935696721077,-0.5263296961784363,0.21306419372558594,-0.5456886887550354,-0.6841079592704773,-0.2284165769815445,0.7877810597419739,-0.8092212677001953,0.3735469877719879,0.24716070294380188,-0.7152613997459412,0.03986193984746933,-0.21263860166072845,0.14842073619365692,0.21688759326934814,-0.7600364685058594,-0.7657052278518677,1.526408076286316,0.818200945854187,-0.18369357287883759,-0.054190877825021744,-0.40400832891464233,0.4360170364379883,-0.2501649856567383,0.9635348916053772,0.40552639961242676,0.0464133583009243,-0.5912173390388489,1.0226175785064697,0.010034059174358845,-0.12407581508159637,-1.1874275207519531,0.5029992461204529,0.6506690979003906,0.10865231603384018,0.5949841141700745,-0.3040502369403839,0.3322767913341522,-0.13475972414016724,-0.6131129264831543,-0.9070984125137329,0.21893469989299774,0.4424035847187042,-0.09318266063928604,0.7662740349769592,-0.5262534022331238,-0.2977643609046936,-0.7746202349662781,1.0984923839569092,0.6102339625358582,1.1664927005767822,0.1397811621427536,-1.0797913074493408,-0.16783063113689423,-0.5093123316764832,0.20346960425376892,0.1106831282377243,-1.0886948108673096,-0.432476282119751,0.3599992096424103,0.4598124623298645,0.2719239294528961,0.3908328711986542,0.7793477773666382,-0.16789527237415314,0.13003751635551453,0.4093039631843567,0.6054152250289917,-0.5567852854728699,-0.08536166697740555,0.3327312767505646,-0.1128140538930893,0.9319354891777039,-0.8224495053291321,-0.5478646755218506,-0.1750641018152237,-1.2934256792068481,0.9334797263145447,-0.3793533742427826,0.5294157266616821,-0.5096883177757263,0.5207066535949707,-0.43210357427597046,-0.3523693382740021,0.022793393582105637,0.3362455666065216,0.09635712951421738,0.7490149140357971,-1.0361356735229492,-0.10550902783870697,0.4973323345184326,0.3809301555156708,-1.3779891729354858,0.6726153492927551,-0.6966652274131775,0.5871957540512085,-0.6030934453010559,-0.5236465334892273,0.32511916756629944,-0.9052606225013733,0.6195188164710999,-0.5262367725372314,-0.1639825403690338,0.9212827086448669,-0.09497715532779694,0.17516279220581055,-0.16954360902309418,-0.07995402067899704,0.3880162835121155,0.6502007842063904,-1.3780202865600586,0.5793505311012268,1.374721884727478,-0.8003466725349426,0.16956566274166107,-1.1593033075332642,-1.1233060359954834,0.9208993315696716,-0.9330541491508484,0.7525394558906555,0.48355361819267273,0.09733553975820541,0.6966413855552673,-0.6754776239395142,-0.16660387814044952,0.7302654385566711,-0.8211255669593811,0.025956209748983383,-0.568098247051239,0.13321277499198914,0.27180424332618713,-0.13822820782661438,-0.9138485193252563,0.34257206320762634,0.5190412402153015,0.7972604036331177,0.1951700747013092,-0.03333330154418945,-0.1991393119096756,0.4679856598377228,0.7118604779243469,0.2514880895614624,-0.22175420820713043,-0.5563563108444214,-0.6401101350784302,0.03139005973935127,0.22181789577007294,-0.7854303121566772,-0.5822321176528931,0.049577679485082626,0.8107250928878784,0.31148412823677063,-0.07873038947582245,0.316521018743515,-0.3837830722332001,-0.5776405334472656,0.6893154382705688,-0.24828198552131653,0.33284616470336914,0.8687444925308228,-0.5866702198982239,-1.5131911039352417,1.3727171421051025,0.8808028101921082,-0.8579474687576294,-0.36921635270118713,-0.3461647927761078,-0.41781190037727356,0.798287570476532,0.03720257058739662,-1.761531949043274,0.8026818037033081,-0.35741502046585083,0.3981330394744873,-0.6365618705749512,0.4536280035972595,0.06665957719087601,0.2488550990819931,0.2779446542263031,0.27315831184387207,-1.0439213514328003,-0.40481123328208923,-0.11875409632921219,-0.4477626383304596,0.28367140889167786,-0.6326926946640015,0.5283589959144592,0.8761947751045227,0.1379171460866928,0.5657821893692017,-0.14972399175167084,-0.043290045112371445,-0.17442698776721954,0.044250767678022385,-0.3270113170146942,-0.24840542674064636,-1.1868515014648438,0.15172255039215088,-0.36373600363731384,-1.047589659690857,-0.31333398818969727,0.1599278450012207,0.14720185101032257,0.7573193311691284,-0.4726746380329132,0.0619581863284111,-1.1964291334152222,-0.6562010645866394,-0.277189701795578,-0.3642747700214386,0.19606994092464447,-0.8200417160987854,-0.40940752625465393,0.1157500371336937,0.9384698867797852,-0.27335238456726074,0.43073177337646484,-0.6340662837028503,0.538148045539856,-0.3744179308414459,-0.8672090768814087]", + "status": 200, + "statusText": "OK", + "headers": { + "access-control-allow-credentials": "true", + "connection": "keep-alive", + "content-type": "application/json", + "vary": "Origin, Access-Control-Request-Method, Access-Control-Request-Headers" + } + } + }, + "3eb8944d3ab5f0a7dc5d4985eaa72c86e8e01c3c12840e1966780711a48c0ce6": { + "url": "https://api-inference.huggingface.co/models/stabilityai/stable-diffusion-2", + "init": { + "headers": { + "Content-Type": "application/json" + }, + "method": "POST", + "body": "{\"inputs\":\"award winning high resolution photo of a giant tortoise/((ladybird)) hybrid, [trending on artstation]\",\"parameters\":{\"negative_prompt\":\"blurry\",\"width\":512,\"height\":128,\"num_inference_steps\":10},\"options\":{}}" + }, + "response": { + "body": "", + "status": 200, + "statusText": "OK", + "headers": { + "access-control-allow-credentials": "true", + "connection": "keep-alive", + "content-type": "image/jpeg", + "vary": "Origin, Access-Control-Request-Method, Access-Control-Request-Headers" + } + } + }, + "448f6f45c1e702614bb012fa58f69b3094c0595d917de1e242ac39b9022668e1": { + "url": "https://api-inference.huggingface.co/models/stabilityai/stable-diffusion-2", + "init": { + "headers": { + "Content-Type": "application/json" + }, + "method": "POST", + "body": "{\"inputs\":\"award winning high resolution photo of a giant tortoise/((ladybird)) hybrid, [trending on artstation]\",\"options\":{}}" + }, + "response": { + "body": "", + "status": 200, + "statusText": "OK", + "headers": { + "access-control-allow-credentials": "true", + "connection": "keep-alive", + "content-type": "image/jpeg", + "vary": "Origin, Access-Control-Request-Method, Access-Control-Request-Headers" + } + } + }, + "c4745d72b1178be30244fda4673b4e4cbcefee29ad8f5f0f439acfdaeeeaaa01": { + "url": "https://api-inference.huggingface.co/models/impira/layoutlm-document-qa", + "init": { + "headers": { + "Content-Type": "application/json" + }, + "method": "POST" + }, + "response": { + "body": "[{\"score\":0.6035408973693848,\"answer\":\"us-001\",\"start\":16,\"end\":16}]", + "status": 200, + "statusText": "OK", + "headers": { + "access-control-allow-credentials": "true", + "connection": "keep-alive", + "content-type": "application/json", + "vary": "Origin, Access-Control-Request-Method, Access-Control-Request-Headers" + } + } + }, + "30b6ce7465d396930170cc734393bf189ed87249347543743995e8cc351406d9": { + "url": "https://api-inference.huggingface.co/models/dandelin/vilt-b32-finetuned-vqa", + "init": { + "headers": { + "Content-Type": "application/json" + }, + "method": "POST" + }, + "response": { + "body": "[{\"score\":0.5166967511177063,\"answer\":\"2\"},{\"score\":0.35002437233924866,\"answer\":\"3\"},{\"score\":0.20439617335796356,\"answer\":\"1\"},{\"score\":0.16718299686908722,\"answer\":\"4\"},{\"score\":0.05751442164182663,\"answer\":\"5\"}]", + "status": 200, + "statusText": "OK", + "headers": { + "access-control-allow-credentials": "true", + "connection": "keep-alive", + "content-type": "application/json", + "vary": "Origin, Access-Control-Request-Method, Access-Control-Request-Headers" + } + } + }, + "7cb3c977ef2fc3e8b8ac2c56796f635bb3f4cff839cef4d3d5b83a9c59ae642a": { + "url": "https://api-inference.huggingface.co/models/naver-clova-ix/donut-base-finetuned-docvqa", + "init": { + "headers": { + "Content-Type": "application/json" + }, + "method": "POST" + }, + "response": { + "body": "[{\"answer\":\"us-001\"}]", + "status": 200, + "statusText": "OK", + "headers": { + "access-control-allow-credentials": "true", + "connection": "keep-alive", + "content-type": "application/json", + "vary": "Origin, Access-Control-Request-Method, Access-Control-Request-Headers" + } + } + }, + "fedb289665ec1890b722566764b838adcb7516d1bd5b18c0d777b8ed21e16034": { + "url": "https://api-inference.huggingface.co/models/espnet/kan-bayashi_ljspeech_vits", + "init": { + "headers": { + "Content-Type": "application/json" + }, + "method": "POST", + "body": "{\"inputs\":\"hello there!\",\"options\":{}}" + }, + "response": { + "body": "", + "status": 200, + "statusText": "OK", + "headers": { + "access-control-allow-credentials": "true", + "access-control-expose-headers": "x-compute-type, x-compute-time", + "connection": "keep-alive", + "content-type": "audio/flac", + "server": "uvicorn", + "transfer-encoding": "chunked", + "vary": "Accept-Encoding, Origin, Access-Control-Request-Method, Access-Control-Request-Headers" + } + } + }, + "c858038f8450c4651519e2de6a475393c6919bd944727400c836ff70ae9a77c0": { + "url": "https://api-inference.huggingface.co/models/scikit-learn/Fish-Weight", + "init": { + "headers": { + "Content-Type": "application/json" + }, + "method": "POST", + "body": "{\"inputs\":{\"data\":{\"Height\":[\"11.52\",\"12.48\",\"12.3778\"],\"Length1\":[\"23.2\",\"24\",\"23.9\"],\"Length2\":[\"25.4\",\"26.3\",\"26.5\"],\"Length3\":[\"30\",\"31.2\",\"31.1\"],\"Species\":[\"Bream\",\"Bream\",\"Bream\"],\"Width\":[\"4.02\",\"4.3056\",\"4.6961\"]}},\"options\":{}}" + }, + "response": { + "body": "[270.5473526976245,313.6843425638086,328.3727133404402]", + "status": 200, + "statusText": "OK", + "headers": { + "access-control-allow-credentials": "true", + "connection": "keep-alive", + "content-type": "application/json", + "vary": "Origin, Access-Control-Request-Method, Access-Control-Request-Headers" + } + } + }, + "7b7c5e8c4271b8d18b231153b16949ffae6efe591e00caba3c1f28d994fb97bd": { + "url": "https://api-inference.huggingface.co/models/lllyasviel/sd-controlnet-canny", + "init": { + "headers": {}, + "method": "POST" + }, + "response": { + "body": "", + "status": 200, + "statusText": "OK", + "headers": { + "access-control-allow-credentials": "true", + "connection": "keep-alive", + "content-type": "image/jpeg", + "vary": "Origin, Access-Control-Request-Method, Access-Control-Request-Headers" + } + } + }, + "a7453227017f6bfb69905e66f6820293dbf88c2a56baa9be7f31b63ce9783c05": { + "url": "https://api-inference.huggingface.co/models/lllyasviel/sd-controlnet-depth", + "init": { + "headers": { + "Content-Type": "application/json" + }, + "method": "POST" + }, + "response": { + "body": "", + "status": 200, + "statusText": "OK", + "headers": { + "access-control-allow-credentials": "true", + "connection": "keep-alive", + "content-type": "image/jpeg", + "vary": "Origin, Access-Control-Request-Method, Access-Control-Request-Headers" + } + } + }, + "e2beb1bdc27df52519dbef36e6435e1d3b8001e62c9b511d706962314bd766d7": { + "url": "https://api-inference.huggingface.co/models/facebook/bart-base", + "init": { + "headers": { + "Content-Type": "application/json" + }, + "method": "POST", + "body": "{\"inputs\":\"That is a happy person\",\"options\":{}}" + }, + "response": { + "body": "[[[2.6327691078186035,2.6453592777252197,1.3052051067352295,8.577006340026855,1.5544674396514893,2.01875376701355,-0.30269330739974976,-1.6798312664031982,-0.28186458349227905,0.09492917358875275,1.771086573600769,1.6456682682037354,1.1054763793945312,1.3152306079864502,-0.6316255331039429,-1.4265778064727783,-0.8356854915618896,2.5631885528564453,0.7716827392578125,-2.788865089416504,0.15160413086414337,-3.4371495246887207,1.9346787929534912,1.5406743288040161,1.266519546508789,-3.768359899520874,2.1116292476654053,-39.273956298828125,2.145085334777832,-1.950323462486267,1.301823377609253,-0.4244025945663452,0.8929333686828613,-1.377180576324463,-2.6194984912872314,0.893230676651001,0.40850505232810974,-0.23856042325496674,2.245931386947632,-1.2481021881103516,-0.39294523000717163,-2.5564393997192383,-0.8494167327880859,-1.258998155593872,-1.4443589448928833,2.519883632659912,-0.22763629257678986,-0.9765709638595581,-1.7004594802856445,-0.1924182027578354,1.0410606861114502,0.7207205295562744,-1.5042645931243896,-0.5260501503944397,-3.289754629135132,0.19623956084251404,0.8738362193107605,-1.323591709136963,0.8734084963798523,1.277661681175232,0.5723496675491333,1.2389498949050903,1.3519805669784546,-0.4491465389728546,-2.83613920211792,-0.7616981267929077,-3.5802547931671143,-0.8251965641975403,0.315495103597641,1.245935082435608,0.4587072432041168,0.07694731652736664,1.2299013137817383,-0.5309520959854126,-2.624972105026245,0.23797357082366943,1.625041127204895,-0.43409407138824463,-2.2566349506378174,0.597597599029541,-0.8906638026237488,3.022886276245117,-2.708209276199341,-0.9426450133323669,0.7089847326278687,0.9770891070365906,3.5416438579559326,0.5317324995994568,-0.1562861055135727,-3.0571796894073486,0.038586460053920746,1.1946673393249512,-0.6796606779098511,-0.42412349581718445,-0.38495534658432007,1.0222833156585693,-1.6894783973693848,1.2438315153121948,-1.9383044242858887,-1.0816975831985474,-0.7090418338775635,-2.946355104446411,-2.8434677124023438,-1.5707594156265259,1.8388422727584839,0.2813928425312042,1.1393002271652222,-0.5124748349189758,-1.1176214218139648,-1.7095433473587036,2.7074270248413086,-1.6994073390960693,-0.592393696308136,-0.27134957909584045,-0.5553380846977234,-0.9568490386009216,11.277636528015137,-3.2129828929901123,0.6749573945999146,-0.6490439176559448,1.5454261302947998,0.13967688381671906,0.5721508860588074,3.7591423988342285,-0.40494635701179504,-0.4710242450237274,-0.6200661063194275,1.6449300050735474,-1.6603127717971802,-0.4908033013343811,0.04799369350075722,1.5521804094314575,1.4490832090377808,2.475731372833252,-2.070208787918091,0.0652238130569458,-0.6392354369163513,2.823859214782715,0.8388698697090149,0.03394553065299988,1.166226863861084,-0.8820873498916626,-0.41444262862205505,2.2613253593444824,1.3735010623931885,0.9632089734077454,0.03155412897467613,-1.0158385038375854,-0.19174419343471527,5.052087306976318,-0.6052014827728271,-0.07739342004060745,1.1263684034347534,1.9930449724197388,-2.3958444595336914,1.849808931350708,-1.4432035684585571,-0.27498990297317505,0.16776248812675476,-0.059809938073158264,0.22386199235916138,1.0967140197753906,0.16599075496196747,-0.6816596388816833,-0.8333733677864075,-0.5129024982452393,-2.260133743286133,2.4172465801239014,-0.401541531085968,1.8671404123306274,-2.7339439392089844,-0.8555641174316406,-2.552561044692993,2.985064744949341,1.30388343334198,0.8892132639884949,3.256596565246582,1.3920823335647583,-2.5373752117156982,-2.7958953380584717,-0.49052804708480835,-0.8679682016372681,-0.8075771331787109,1.2956640720367432,0.561183512210846,0.5478009581565857,-1.3731416463851929,0.57084721326828,1.8824552297592163,-0.4576617181301117,1.405981183052063,-0.17243048548698425,0.33348894119262695,0.4367964267730713,-1.9064936637878418,0.402445524930954,2.46227765083313,-0.13031040132045746,1.3329774141311646,-1.1028163433074951,1.8067471981048584,-0.07888862490653992,0.3756299316883087,2.544121503829956,-1.306075096130371,-1.6484415531158447,-1.7027380466461182,1.6640466451644897,2.6514759063720703,0.27584001421928406,0.3483525812625885,2.343595027923584,1.9115525484085083,0.8007939457893372,-0.9314233064651489,-1.0497796535491943,0.02700815163552761,0.6709202527999878,-0.5655851364135742,-0.5223431587219238,0.7747825980186462,-0.918522298336029,0.810362696647644,-2.732142925262451,1.6618953943252563,2.3691883087158203,-1.7281690835952759,0.4593784511089325,-0.0302041657269001,-1.97107994556427,1.9544968605041504,0.17492900788784027,-1.309363603591919,-0.4386090934276581,2.2306129932403564,1.549528956413269,-0.34265992045402527,0.7719107866287231,-1.3549771308898926,-0.26447561383247375,0.4373049736022949,4.188180446624756,4.029538631439209,1.4087587594985962,-1.94767427444458,-0.6948322057723999,-1.6268149614334106,-1.9857807159423828,0.39352452754974365,0.8227952718734741,-3.213007926940918,1.3682746887207031,-1.196128487586975,-3.270768404006958,1.5212585926055908,0.07295642048120499,2.5744357109069824,0.2914597690105438,-0.9778546690940857,-0.014692635275423527,-0.7696856260299683,0.3493780493736267,0.5098415613174438,1.067221760749817,0.5142653584480286,-4.359039306640625,0.18696166574954987,1.6820954084396362,-0.9331218004226685,-2.8282339572906494,3.060692310333252,1.5831716060638428,2.5853168964385986,-0.13084593415260315,3.204176664352417,-1.128382921218872,-0.19193793833255768,-2.198295831680298,2.0135343074798584,0.27391648292541504,0.05898788943886757,2.1442058086395264,2.424851417541504,-2.203291177749634,-2.5340023040771484,-0.5443553924560547,-2.2258267402648926,0.0952853187918663,0.4328129291534424,2.590541124343872,2.1034159660339355,3.3536646366119385,-0.5587084293365479,1.1940960884094238,-0.025606485083699226,0.4558342695236206,-0.9888522028923035,-0.14430466294288635,-1.4267613887786865,-1.314673900604248,-1.9437063932418823,1.6476490497589111,0.618635356426239,2.772642135620117,-0.2870776653289795,-0.6556426882743835,0.02920384705066681,-3.1838605403900146,-0.5180241465568542,0.8613956570625305,2.422149896621704,-2.0303094387054443,-0.08969251066446304,-1.8750932216644287,-0.11267963796854019,1.7774637937545776,1.21846342086792,-0.7771739363670349,0.5707710385322571,3.711196184158325,3.2515528202056885,2.7759993076324463,-0.9121936559677124,2.732515335083008,1.0036189556121826,0.02436278946697712,0.6146583557128906,0.5303145051002502,-0.4092095196247101,-0.0723312571644783,-0.9705098867416382,0.5829629898071289,0.05335771664977074,-2.5133931636810303,-2.4582722187042236,-0.1438152939081192,0.9295763969421387,-0.4785788655281067,-0.6507534384727478,1.4072051048278809,-0.6049748063087463,1.220207929611206,-3.0711898803710938,-0.5735802054405212,2.6674158573150635,3.2001454830169678,-0.24022026360034943,2.434683084487915,0.2604522109031677,-1.1565555334091187,-0.2327384054660797,-2.3044497966766357,-0.4262140989303589,0.3447473347187042,-0.20364053547382355,-1.3263696432113647,1.1898672580718994,-0.19820654392242432,0.18083617091178894,0.7219167947769165,-2.1315464973449707,-0.08801307529211044,-1.3693667650222778,0.5256943702697754,1.1892236471176147,0.5545560717582703,1.1973941326141357,2.02580189704895,0.12087715417146683,0.4352532923221588,0.42175498604774475,1.2400364875793457,-0.7040072083473206,0.4162783622741699,-2.2852790355682373,-1.4444997310638428,-0.9547544717788696,-1.7447880506515503,0.6454455852508545,-1.5666711330413818,-1.4020061492919922,0.4236031770706177,-0.8927809000015259,-1.4210275411605835,-0.18446318805217743,0.1713816076517105,-1.5811245441436768,-0.5035741925239563,-2.6305813789367676,-0.5801562666893005,-1.4934062957763672,-2.9028635025024414,-0.2676565945148468,-1.745818018913269,-2.1898365020751953,0.12838546931743622,0.7120351195335388,-1.5260016918182373,-1.3000497817993164,-1.178033709526062,0.6662636399269104,-0.17723263800144196,1.654866099357605,1.8780086040496826,0.8111088275909424,1.4143249988555908,0.7641311287879944,0.1668105572462082,1.916225790977478,1.9448943138122559,-1.2060073614120483,-1.4962612390518188,-0.936199963092804,2.202606201171875,-0.6821251511573792,1.484081745147705,-1.607659101486206,0.028655271977186203,1.2684274911880493,-1.577764630317688,-1.3776586055755615,-0.14995825290679932,-2.6129391193389893,0.7258740067481995,-1.9994101524353027,1.1618688106536865,-1.287218689918518,0.33045902848243713,-1.1770561933517456,1.0925233364105225,-0.7381646037101746,-2.4038171768188477,-1.0681970119476318,0.686558187007904,-0.04254423826932907,1.780655026435852,1.624752163887024,-6.786214351654053,0.4096257984638214,-1.0916078090667725,0.4588412344455719,0.4726089537143707,0.67364901304245,-1.5277353525161743,-1.6603959798812866,-2.876011610031128,1.5558910369873047,-0.4022574722766876,-1.1357730627059937,1.603486180305481,-0.6076263785362244,0.4359613358974457,-3.628021478652954,1.4136059284210205,-2.2249529361724854,-1.5867314338684082,-0.4595612585544586,0.8155417442321777,0.3250997066497803,-0.7974511384963989,-0.42328009009361267,0.4099767506122589,-0.6663154363632202,-0.23449046909809113,-1.300401210784912,-2.1537601947784424,2.72271990776062,-1.2375763654708862,0.46920183300971985,-2.4724011421203613,0.2402438521385193,2.875272512435913,0.09124862402677536,0.23096929490566254,0.839152991771698,1.2145817279815674,0.9936429858207703,0.7922860980033875,2.2292332649230957,-1.8686691522598267,0.4312368631362915,-0.032809823751449585,2.3621037006378174,3.723109722137451,-0.0005738235777243972,0.6148241758346558,-0.45704907178878784,-0.590968906879425,0.5607117414474487,1.9577254056930542,1.3811653852462769,-0.7811329960823059,-1.1463955640792847,-0.8191857933998108,1.8422508239746094,-1.5271673202514648,-2.3907077312469482,2.689628839492798,1.2166972160339355,-2.1500983238220215,0.9400030374526978,0.970815122127533,-0.007178387138992548,-0.19802603125572205,-0.39256349205970764,0.9875094294548035,-1.6427645683288574,-0.5014933943748474,-0.6913623809814453,-1.2589632272720337,-2.5704596042633057,0.5493985414505005,3.5799524784088135,0.22705669701099396,1.323411226272583,0.2599920332431793,-1.0856691598892212,0.7449532151222229,0.8725796341896057,-1.462777018547058,0.5076864361763,-0.648901641368866,-2.890131711959839,-1.7680624723434448,0.3783694803714752,0.4050448536872864,2.873589038848877,2.962831497192383,0.7605141401290894,0.9782912731170654,0.5796534419059753,0.48261603713035583,0.22009503841400146,1.6801689863204956,-0.1386711299419403,1.6845519542694092,0.3168719410896301,2.3973679542541504,0.9603262543678284,4.023458003997803,-2.777233839035034,1.0812199115753174,1.0231266021728516,-1.9266812801361084,-1.2269494533538818,0.5668462514877319,0.2657429873943329,-1.5677708387374878,-0.09644570201635361,2.3628218173980713,-0.41314026713371277,-0.8430103063583374,-4.138833522796631,0.43076059222221375,-1.7401608228683472,-1.2606546878814697,1.4254653453826904,-2.243314027786255,-0.9925363063812256,2.7519798278808594,1.7938733100891113,1.8923450708389282,1.6904770135879517,0.6680296063423157,0.33007538318634033,1.5066919326782227,1.024924397468567,-2.8648226261138916,-1.2316443920135498,1.1213691234588623,0.9625868201255798,3.125398635864258,0.7347219586372375,-0.9409449696540833,-0.31669965386390686,-1.148497462272644,-0.9799544215202332,-1.821897268295288,-1.2948803901672363,-0.09790924191474915,-2.5319862365722656,1.56271231174469,2.170870542526245,-2.205296754837036,-0.18443088233470917,1.0534363985061646,1.478517770767212,-2.7624595165252686,-1.039659857749939,-0.13991309702396393,1.5009509325027466,2.058140277862549,0.9574118256568909,-1.3455173969268799,2.4785733222961426,-1.092527985572815,-1.186265230178833,-0.9116891622543335,1.827434778213501,1.0097191333770752,0.14704537391662598,0.1398383527994156,0.9442332983016968,-0.5874990224838257,0.5176494717597961,-0.07559181749820709,1.135815978050232,-0.41423577070236206,0.8659027218818665,-0.4749252498149872,0.6710817217826843,0.26252079010009766,-1.811240315437317,-4.670074462890625,-0.14727067947387695,1.3743923902511597,0.37897634506225586,0.5202925205230713,-3.1597447395324707,0.5856564044952393,0.2405623495578766,-1.2531590461730957,0.36913958191871643,-1.733688235282898,-0.000560401938855648,1.3232460021972656,-1.2069274187088013,1.1489026546478271,0.7968195080757141,-0.6890296936035156,-3.6581366062164307,0.9724026918411255,1.5316776037216187,-0.4128876328468323,2.423356056213379,0.5585626363754272,-4.432679176330566,1.1784052848815918,0.36996445059776306,0.49128788709640503,-1.005051851272583,1.512269139289856,-0.7150236368179321,1.1221388578414917,0.24210400879383087,0.007424607872962952,0.14445218443870544,-0.062194909900426865,-0.33020827174186707,0.21818536520004272,-0.44359463453292847,-0.047054924070835114,-1.99222731590271,4.209929466247559,0.045714665204286575,3.2592458724975586,-0.7588958740234375,0.8502215147018433,0.6070088148117065,-0.20878419280052185,-0.8129791617393494,1.3913038969039917,-0.03683946281671524,-0.4962560534477234,1.1827573776245117,2.3296055793762207,2.2624287605285645,2.1141295433044434,0.8571896553039551,0.5982787609100342,-0.008134768344461918,0.0648573786020279,1.1668699979782104,0.861781120300293,1.637622594833374,-2.572812795639038,3.770007371902466,1.5741075277328491,0.21316078305244446,-0.3428148329257965,0.05700799450278282,-1.5294243097305298,2.3123466968536377,-0.33649998903274536,-1.3020910024642944,0.8601783514022827,-1.9598960876464844,1.2254581451416016,-2.1144518852233887,0.8679369688034058,-0.6412451863288879,9.965169906616211,-2.619205951690674,-0.46232426166534424,3.346498489379883,0.6861492991447449,0.2975888252258301,-0.5545001029968262,0.6963003873825073,-1.7262548208236694,0.9112889766693115,1.2952054738998413,0.5170490741729736,-1.8080450296401978,2.4637718200683594,1.6653213500976562,-0.23044085502624512,-3.1117501258850098,0.3740794062614441,0.6814612150192261,-1.746937870979309,-3.6226658821105957,-2.9079434871673584,1.7916816473007202,1.5948948860168457,1.0293383598327637,-1.8344073295593262,-0.37924718856811523,0.67795729637146,-1.6344077587127686,-0.37834230065345764,0.008060857653617859,-0.1665925234556198,4.955474853515625,1.4192461967468262,1.125252604484558,-0.7239680886268616,-1.326097846031189,1.1910196542739868,0.030803533270955086,-1.302975058555603,0.4240013360977173,1.910307765007019,2.925645351409912,1.4998226165771484,0.17251962423324585,-1.312394380569458,1.5994853973388672,0.23323515057563782,-1.6630951166152954,0.8602064847946167,1.1653132438659668,3.516263484954834,0.4469311237335205,-0.2596239149570465,0.06515126675367355,0.6846265196800232,0.6699232459068298,-1.5281785726547241,-0.6041969656944275,-0.5746153593063354,-1.9463223218917847,2.157611608505249,-0.8428114056587219,-0.6420372724533081,4.8241705894470215,-0.8136173486709595,-0.9528058767318726,2.2378172874450684,-0.21968796849250793,-0.031621187925338745,0.9389642477035522,-3.4983317852020264,-1.287537693977356,-1.4800825119018555,1.5243570804595947,-0.3066766560077667,-0.7135071754455566],[1.3100659847259521,-1.2003549337387085,-1.4424279928207397,6.381330966949463,0.371046781539917,-1.3416361808776855,-2.8721745014190674,-1.0767122507095337,0.5800109505653381,-2.417372941970825,-0.8920078277587891,0.8722484111785889,0.17354264855384827,2.3405377864837646,0.8889999985694885,-2.7235376834869385,-1.1576038599014282,0.9083988666534424,1.0164337158203125,0.8130528330802917,-0.9350823163986206,-0.6034481525421143,-1.5337454080581665,-0.6828624606132507,2.6957905292510986,0.20376834273338318,0.3165612816810608,-11.030303001403809,-0.40690892934799194,-3.753319263458252,1.12582528591156,-1.9105331897735596,-0.6947618126869202,-2.6435201168060303,-0.783775806427002,2.878868579864502,0.49711453914642334,-0.9659867286682129,-0.5599448084831238,-0.6342671513557434,0.6739927530288696,-5.400841236114502,-0.3856703042984009,1.256827712059021,-0.08202102035284042,1.466958999633789,0.07034579664468765,1.1615314483642578,1.5772782564163208,0.2087186723947525,-0.951835572719574,0.8841895461082458,1.229984998703003,-0.13001969456672668,0.40702497959136963,-0.7365294098854065,-2.671527624130249,0.8538731336593628,-1.686302900314331,3.5205628871917725,0.7929311394691467,-0.4876211881637573,-0.3927839696407318,3.0703883171081543,0.06435150653123856,0.6573725342750549,-0.6093785166740417,1.1981909275054932,-2.5095369815826416,-1.5241990089416504,-0.4424348473548889,2.091801166534424,-1.9250869750976562,1.4343677759170532,-2.9636590480804443,0.30852529406547546,1.02699613571167,1.382881760597229,-2.907989978790283,0.4625501036643982,0.7453052997589111,3.0139927864074707,-0.2802067697048187,-0.3901950418949127,0.6480164527893066,-0.13379128277301788,0.8241251707077026,1.2805991172790527,1.0481507778167725,-2.475508213043213,-0.04103613644838333,-0.5831731557846069,-0.3748404383659363,-1.8011386394500732,-0.08576393127441406,1.09390127658844,-0.008172529749572277,2.2293052673339844,-1.185935378074646,-1.8045291900634766,-0.1372382938861847,0.6444628238677979,0.029774852097034454,0.7723698019981384,3.3592138290405273,2.5919876098632812,2.0747876167297363,1.154896855354309,-0.7666320204734802,0.6528064608573914,-0.2931171953678131,-0.5304418802261353,1.9581843614578247,-0.12603449821472168,-0.011836811900138855,-3.977019786834717,8.416182518005371,1.328282117843628,-0.7755232453346252,-0.5469819903373718,1.432584524154663,0.7750709056854248,-1.2330602407455444,-0.6365412473678589,-1.1688450574874878,0.4497257173061371,1.7803385257720947,-0.2102351188659668,-4.06069803237915,-1.144193172454834,-0.19452781975269318,0.3781408369541168,1.672411561012268,-1.4853054285049438,1.6787770986557007,-1.4286975860595703,-0.5778713822364807,-0.7419268488883972,1.1807509660720825,0.11336929351091385,-1.2509546279907227,0.5427688956260681,-0.7057086229324341,1.2062852382659912,0.3783719539642334,1.9761141538619995,0.8895789980888367,-0.639685332775116,2.592597007751465,5.818855285644531,-2.9821090698242188,-0.6003720164299011,1.5193699598312378,1.4705861806869507,-0.3048194944858551,0.2796732783317566,-1.1220316886901855,-1.0274782180786133,0.21829158067703247,0.5218328237533569,1.8036539554595947,0.03320075199007988,0.548554003238678,0.9237322807312012,1.785492181777954,-0.6293424367904663,-0.07883605360984802,-1.3605018854141235,0.8302801847457886,1.008410096168518,1.4208792448043823,0.2859685719013214,0.6161007881164551,0.26308703422546387,0.30706509947776794,-0.9040130376815796,1.0006530284881592,3.482494592666626,-1.6493653059005737,0.9782010316848755,-2.720238208770752,-0.6030027866363525,-1.0796442031860352,-1.2544503211975098,0.5893778204917908,2.544511556625366,0.08332512527704239,2.9367966651916504,-1.2409849166870117,0.047735121101140976,1.1544854640960693,-1.2475610971450806,0.8771067261695862,-0.7405202984809875,-1.2758773565292358,0.2719409167766571,0.06923884898424149,-2.3039090633392334,-0.7648794651031494,-0.8787439465522766,1.4456287622451782,0.5816510915756226,1.021405816078186,0.7618565559387207,1.2691346406936646,-0.3849852979183197,-1.3321024179458618,-0.7609171271324158,-0.5521531701087952,0.14895875751972198,-0.32900071144104004,1.5020956993103027,3.14451003074646,2.3910629749298096,-1.361558198928833,0.10114501416683197,-0.12701483070850372,-0.6089471578598022,-1.7166969776153564,0.02352874167263508,-1.2300068140029907,-0.45037752389907837,0.9806634783744812,0.538783609867096,1.863690972328186,-0.039451152086257935,-0.702364981174469,0.4665146768093109,-4.546266555786133,0.9895696043968201,0.5844258666038513,-0.7936576008796692,2.1153690814971924,-1.2094374895095825,10.499680519104004,1.3383337259292603,-0.03467302396893501,0.9031655192375183,0.1537410467863083,0.27884191274642944,1.1282134056091309,1.3963656425476074,1.867244005203247,0.9320924878120422,-1.9329838752746582,-1.1074546575546265,-1.3057113885879517,0.40788471698760986,1.609590768814087,0.35078537464141846,-1.4311922788619995,0.9549822807312012,0.4819413125514984,-1.5440329313278198,0.7608354687690735,-0.0016398013103753328,3.449411630630493,-0.4569217562675476,2.6271917819976807,0.4289593994617462,0.8912976980209351,0.1492713838815689,-0.4213612377643585,-1.1831128597259521,1.692101001739502,-0.14762729406356812,0.4716190993785858,1.0935262441635132,-0.5475400686264038,-2.2486767768859863,-0.8468164205551147,-1.2089515924453735,2.310678482055664,-2.3237171173095703,-0.8217182755470276,1.0021076202392578,0.13811029493808746,-0.051430247724056244,0.33809736371040344,-0.1824973225593567,0.6423764824867249,0.9584786891937256,1.867197036743164,-1.9712245464324951,-0.01907743141055107,0.5876367688179016,0.7931348085403442,0.6690406203269958,-0.40448054671287537,-0.3487480580806732,-0.27237820625305176,1.7988150119781494,0.7072635293006897,-3.2010533809661865,-0.0600130558013916,1.5817716121673584,-1.4422154426574707,-1.6753218173980713,1.2321650981903076,4.227056980133057,-3.5107932090759277,-0.9414188861846924,-0.1545693576335907,1.2709439992904663,-2.7127768993377686,-0.6206881403923035,2.39304518699646,-0.7112131118774414,-0.20747089385986328,0.8111198544502258,1.809927225112915,-3.5273430347442627,0.13906539976596832,0.767755925655365,1.4288606643676758,0.7154411673545837,2.260781764984131,0.8622539043426514,0.8760586380958557,1.5910253524780273,-0.39159896969795227,0.34510231018066406,-1.0521982908248901,0.6906348466873169,1.054680347442627,1.4036768674850464,-1.125465989112854,-1.7052146196365356,-0.8814045786857605,0.7597402334213257,-3.0202019214630127,-0.9587489366531372,3.4436731338500977,2.3506572246551514,1.2098132371902466,-0.5889712572097778,0.4710316061973572,0.024207299575209618,-1.2787288427352905,-0.8693680763244629,1.33164381980896,-0.12111026048660278,0.10590165108442307,-2.934048891067505,1.3506802320480347,0.4430457055568695,-0.30884963274002075,-2.1097545623779297,-0.06361164152622223,1.4247314929962158,-2.1176440715789795,-1.6804612874984741,1.6516129970550537,-0.03316802158951759,0.43035247921943665,0.7334040403366089,1.052273154258728,2.0797479152679443,0.9881003499031067,0.82795649766922,-1.3387693166732788,-0.005313599016517401,-0.3466838300228119,-1.468653678894043,1.193835735321045,0.20005285739898682,0.5015819072723389,-0.9736108779907227,1.295889973640442,-0.7815321087837219,2.0281760692596436,-1.1724839210510254,0.06295908987522125,0.7659573554992676,-1.1667712926864624,-0.1597459763288498,-0.5755336880683899,-1.2162545919418335,-2.442387580871582,0.4829139709472656,-0.3909865915775299,1.2451398372650146,-0.2240484058856964,-1.9910085201263428,-1.8303391933441162,-0.43207255005836487,0.022762639448046684,1.2253199815750122,-0.7055553197860718,-1.7523746490478516,2.4452521800994873,0.9654025435447693,-0.1822492629289627,-2.340388059616089,-1.1749435663223267,-0.12017893046140671,0.23035895824432373,0.4593682885169983,0.15939712524414062,-2.4747862815856934,1.0550673007965088,0.48776185512542725,0.9637517929077148,1.037438988685608,-0.21346597373485565,2.3229711055755615,-0.2810923755168915,0.3122389614582062,-0.9296461939811707,-0.5768474340438843,-1.284027338027954,-0.04959799721837044,-0.28783857822418213,3.264385461807251,2.349313974380493,2.605679988861084,1.4389113187789917,0.29159271717071533,-1.0454480648040771,-1.408739686012268,-0.7454043626785278,-2.192605972290039,0.3760206699371338,0.38620638847351074,2.1839535236358643,-0.969586193561554,0.19639578461647034,-0.08382505178451538,-1.8878979682922363,2.0846776962280273,-1.0204421281814575,0.6340850591659546,0.7084619402885437,1.3859069347381592,0.9914629459381104,-1.3510082960128784,1.640000820159912,-6.242516994476318,1.047221064567566,0.16637581586837769,-4.440094470977783,0.03175158426165581,-0.6900586485862732,0.7489888668060303,0.6707077026367188,-0.13801760971546173,1.5674715042114258,-1.3292145729064941,0.9685918092727661,-0.5922027826309204,-0.6866904497146606,-0.5929325222969055,-0.9141981601715088,2.7053568363189697,0.47531285881996155,-0.601164698600769,0.46280637383461,1.6644160747528076,-1.2893924713134766,-0.8774561882019043,0.041553352028131485,1.5504329204559326,-0.972320020198822,0.027128534391522408,0.22341598570346832,1.1906499862670898,-0.9020897150039673,-1.1704047918319702,-0.09633710980415344,0.8782116770744324,-1.8986351490020752,-1.5011979341506958,0.7871537804603577,0.5288273692131042,-2.8908274173736572,1.8385823965072632,2.9093129634857178,-0.2635398507118225,1.672195553779602,1.7275499105453491,-1.112064003944397,-0.7341378927230835,0.7684791088104248,1.095552682876587,0.9341794848442078,1.0534310340881348,1.6278167963027954,-0.6293074488639832,1.7813748121261597,1.194579839706421,0.9069937467575073,-0.39096930623054504,-1.4030333757400513,0.5215890407562256,-0.30148831009864807,-0.4765748679637909,-0.1920056790113449,-17.305030822753906,1.4275363683700562,1.6085110902786255,-0.13745160400867462,1.3894048929214478,-0.10920018702745438,-0.024212460964918137,1.1697489023208618,-1.042184829711914,2.125014305114746,0.4573572874069214,0.5831671357154846,0.9758636951446533,-2.8983218669891357,2.374488353729248,0.9647382497787476,0.6785547137260437,-0.5963543057441711,-2.3791861534118652,-0.6596410274505615,2.0616507530212402,-0.8548721075057983,-1.2333749532699585,-2.602329969406128,0.665705680847168,-1.0643587112426758,-2.578937530517578,-0.14469197392463684,-2.907935857772827,-1.980216383934021,-0.7475212812423706,-0.9540917277336121,2.2704861164093018,-0.27308687567710876,-2.4686672687530518,2.1992809772491455,-0.7472804188728333,-0.11480236053466797,0.4528163969516754,0.7474411129951477,1.0560486316680908,1.2893834114074707,1.1972455978393555,-0.1624961942434311,1.2377947568893433,-0.46073341369628906,1.234795331954956,0.43838804960250854,0.3200515806674957,-0.5892156958580017,1.002031683921814,1.0183990001678467,0.02494908683001995,0.01938319019973278,0.2762119472026825,-1.893101453781128,-1.255906581878662,-1.8744421005249023,-1.9561278820037842,-1.4457396268844604,1.6058534383773804,-3.2265141010284424,-0.08172344416379929,0.6330342292785645,0.1274593323469162,1.7570282220840454,1.6563400030136108,0.9135215878486633,-0.2890373170375824,1.0262082815170288,-2.7770657539367676,-2.0443663597106934,1.7464005947113037,0.11510967463254929,0.7375797033309937,-1.3230606317520142,0.07565727084875107,-10.699810981750488,0.19074319303035736,0.7208093404769897,1.9343514442443848,-4.216656684875488,2.040759563446045,0.4823494851589203,0.7998862266540527,1.755893588066101,1.2957748174667358,-1.1305173635482788,-2.911276340484619,-1.6120824813842773,-0.4296112358570099,-3.032972812652588,1.0176477432250977,-1.2119969129562378,1.048079013824463,1.7960771322250366,0.2292146533727646,0.7182028889656067,-0.7853769063949585,1.8081047534942627,0.5127912759780884,0.8072605133056641,0.283130019903183,0.9014150500297546,-0.19892798364162445,1.990696668624878,0.761181116104126,0.8738130927085876,-1.0206738710403442,0.013741420581936836,-3.0649473667144775,0.8184009790420532,-0.0007165037677623332,1.5948387384414673,-1.6070759296417236,-2.000816822052002,-4.236108779907227,-1.1070915460586548,0.05719679966568947,0.27761057019233704,-0.5420946478843689,1.1243945360183716,-0.9100291132926941,-1.1632757186889648,0.6261246204376221,-0.03790000081062317,0.7429251074790955,1.407921314239502,-0.15386219322681427,1.560111403465271,0.43116870522499084,0.37652233242988586,-2.195237874984741,0.34336739778518677,0.6385736465454102,1.4964747428894043,1.4651411771774292,2.7024178504943848,-0.08952030539512634,-3.8476462364196777,0.37064850330352783,1.3602937459945679,0.7492469549179077,-0.7742717862129211,-1.42903733253479,-1.324672818183899,0.13350266218185425,-0.13626104593276978,-0.9553713202476501,2.122664451599121,0.2668638229370117,-0.5165311098098755,-0.8122753500938416,-0.6112475991249084,0.6585128307342529,2.359748125076294,1.9344254732131958,-2.2878594398498535,0.3131236433982849,1.2039401531219482,-1.0838453769683838,4.620462894439697,-3.6056690216064453,-1.109728217124939,2.4255340099334717,0.8569322824478149,0.8857746720314026,0.6661059260368347,1.964145541191101,0.6063762903213501,1.5736874341964722,1.0190544128417969,-1.6990926265716553,1.4648641347885132,1.5354182720184326,-0.5361339449882507,-0.06582564115524292,0.34132423996925354,-0.03179559484124184,1.2769663333892822,0.31513556838035583,2.0377442836761475,1.0813472270965576,0.867678165435791,-0.32465294003486633,2.284249782562256,0.5755296349525452,-0.01486868504434824,1.336321473121643,-1.6769938468933105,0.6137896776199341,1.909544587135315,3.0407826900482178,0.9068095088005066,-1.1773853302001953,0.8840954303741455,-0.5750478506088257,-1.9034425020217896,-0.2057156264781952,0.6538562774658203,0.22412391006946564,0.33197689056396484,0.16739913821220398,-1.442071795463562,0.46285945177078247,0.701113224029541,-2.1986207962036133,-1.1430672407150269,-0.29829293489456177,4.420086860656738,-0.5601284503936768,0.8525668382644653,2.632899284362793,-1.9824663400650024,-1.7757229804992676,0.9289757609367371,0.011343658901751041,2.0931754112243652,2.072862148284912,0.06214899569749832,0.2752634286880493,1.7860841751098633,0.07847292721271515,-0.6752103567123413,-0.7021360993385315,-0.042860906571149826,3.339905261993408,0.5151444673538208,4.100020408630371,0.5496223568916321,-0.8651376962661743,-1.9277535676956177,0.843806266784668,-2.009061813354492,-0.34289366006851196,-1.3325945138931274,-1.1925839185714722,-0.06681890040636063,-1.125683307647705,-1.994932770729065,-0.521468460559845,-0.3108031749725342,-0.9771515727043152,-0.08217564225196838,0.5118866562843323,1.8579158782958984,0.27969592809677124,-0.9456449151039124,3.0819947719573975,1.9829133749008179,-0.7126912474632263,3.542118549346924,1.7502280473709106,-0.258662611246109,0.3383600413799286,2.937758445739746,4.071400165557861,-1.644010305404663,0.9929226636886597,-0.6027230024337769,-3.785815715789795,0.26164278388023376,1.3383381366729736,1.4537533521652222,0.6117772459983826,1.563482642173767,1.3266414403915405,-1.3387640714645386,0.13619489967823029,-3.161761999130249,0.8065140843391418],[0.1775895655155182,0.17345139384269714,-1.0129650831222534,0.2078336924314499,0.4525648355484009,-0.9243069887161255,-1.4605721235275269,-0.7607513666152954,-0.12256887555122375,3.903533458709717,-0.6925187110900879,-1.6446715593338013,1.8490692377090454,0.8673762083053589,1.3091861009597778,-1.5199384689331055,-0.7512651681900024,1.5606083869934082,2.193427324295044,0.07121874392032623,-0.2827828824520111,0.8553162217140198,-0.25067391991615295,-3.532240629196167,-2.215468645095825,-0.1324586123228073,1.1699464321136475,5.763859272003174,-0.8474318385124207,-4.169266700744629,-0.6024739146232605,0.6996561288833618,-1.589130163192749,-0.7726148962974548,-2.009845018386841,1.4915544986724854,0.5015348792076111,1.9805322885513306,0.8974149227142334,-0.7891691327095032,2.733896493911743,1.8479000329971313,-0.41695454716682434,-0.3328242897987366,-3.2801952362060547,1.2065811157226562,-1.3482081890106201,-0.4294913113117218,-2.04067325592041,2.631181240081787,-2.0311129093170166,-1.0318454504013062,-0.2883961498737335,1.0402547121047974,0.9976804256439209,-0.04034879431128502,0.35255730152130127,0.5472396016120911,-0.29202502965927124,1.9989445209503174,-0.1534976363182068,-0.8677858114242554,-0.9379785060882568,-1.1643575429916382,-0.07642209529876709,0.4481718838214874,0.14788633584976196,0.03068200685083866,1.4948025941848755,-1.1661953926086426,-1.0512341260910034,2.22359037399292,1.286879301071167,-0.7082365155220032,-0.2262825220823288,0.44024232029914856,1.6630700826644897,0.6024980545043945,1.0874115228652954,1.8927843570709229,-0.20538286864757538,-0.048032984137535095,1.6281229257583618,-0.4719516336917877,2.079037666320801,-1.0037287473678589,1.5925506353378296,-0.18238429725170135,0.013680225238204002,0.9260625243186951,0.9036290645599365,0.951566755771637,-1.593780755996704,-1.9025756120681763,0.425830602645874,2.767676591873169,0.5760931968688965,0.8165928721427917,1.8619086742401123,-1.7929974794387817,0.3170671761035919,1.5944498777389526,-1.2004140615463257,1.654691457748413,0.35427942872047424,0.9028095602989197,1.5343701839447021,1.1811844110488892,-1.604634165763855,-0.40305981040000916,-3.7997806072235107,-4.932522296905518,2.0373120307922363,1.3597025871276855,2.6547131538391113,-2.0842456817626953,-9.303990364074707,-0.6992129683494568,5.290666103363037,-1.5705081224441528,1.4094510078430176,4.619822025299072,-2.3959479331970215,0.7939955592155457,-0.7375012636184692,0.3895827531814575,0.7889947891235352,0.5043631792068481,-1.0403530597686768,-1.074110507965088,-0.507169783115387,-0.4006788432598114,0.33751606941223145,-0.3697480857372284,1.5869522094726562,-0.8678873777389526,0.23528049886226654,-0.15523645281791687,0.607670247554779,0.40631669759750366,-1.1078057289123535,-0.6725729703903198,-0.6047786474227905,-1.0111067295074463,0.21199651062488556,1.3431694507598877,0.6182793974876404,0.12394700199365616,-0.2260654866695404,-0.8888964653015137,-0.7790216207504272,-1.7088533639907837,0.6943467259407043,-1.5746538639068604,1.1436491012573242,-3.410555839538574,-1.2410173416137695,-0.834566593170166,-0.5960379242897034,0.07804756611585617,-0.6547924280166626,0.011279786936938763,-0.647686243057251,0.29014191031455994,1.5122754573822021,-0.8051891922950745,0.18822918832302094,0.5821332931518555,1.3021275997161865,-0.9918659329414368,1.6511098146438599,2.6323418617248535,-2.715531826019287,-1.6621809005737305,-0.9012817144393921,-0.9290851354598999,1.9927889108657837,2.738396167755127,-2.062894344329834,-0.3652345836162567,0.04903814569115639,0.5743765830993652,-0.19557863473892212,-0.8726875185966492,-1.4717365503311157,1.7947356700897217,1.7216342687606812,2.635524272918701,-1.382509708404541,-1.1672950983047485,-0.4255232810974121,-0.03398110717535019,-1.6314823627471924,-0.6335697174072266,-2.2617075443267822,1.4302256107330322,0.23995716869831085,0.6725670099258423,-0.28574880957603455,-1.5854754447937012,1.5020484924316406,-1.0707590579986572,-1.2057024240493774,0.27181363105773926,-1.2825099229812622,-1.880014419555664,0.31490325927734375,-1.8045427799224854,0.8519375324249268,2.0211286544799805,1.9341676235198975,1.6555863618850708,0.45478591322898865,1.7665820121765137,-0.6006588935852051,0.1790323406457901,0.9442095160484314,1.0248042345046997,-2.5519728660583496,-1.0599993467330933,0.30204468965530396,-1.482029676437378,1.24044930934906,0.5557240843772888,-0.5238257050514221,1.2785474061965942,-1.008668303489685,0.2446116954088211,1.661712646484375,0.14697781205177307,-3.0267484188079834,0.8149537444114685,1.229563593864441,-2.8154218196868896,-0.22501954436302185,-0.6821171641349792,0.22420649230480194,-0.707515299320221,-1.2095829248428345,-0.770853579044342,1.073150634765625,1.4655877351760864,1.8745286464691162,1.8316140174865723,-2.1208152770996094,2.577099084854126,-0.3985711634159088,-0.8453208208084106,1.3095773458480835,1.5477694272994995,-0.6788234710693359,0.08130565285682678,1.44367253780365,0.6146059036254883,1.6576014757156372,-1.5956933498382568,0.8597577214241028,-0.004502635914832354,1.8626941442489624,0.6912226676940918,-1.3015671968460083,0.07100589573383331,-1.5255941152572632,-0.8891223073005676,-1.0630024671554565,0.9385864734649658,-2.289539098739624,3.240630865097046,-0.4035739302635193,1.9410853385925293,-1.980080485343933,-0.012810527347028255,-0.4674970209598541,-0.9802374243736267,-0.7310056686401367,0.9315477609634399,1.2215746641159058,-1.43296217918396,-0.6581911444664001,0.9825416207313538,-2.197633743286133,1.3870412111282349,0.2441251575946808,-1.6361830234527588,-1.4542866945266724,-1.781097650527954,2.434767484664917,2.32977557182312,0.035202622413635254,-0.8304089307785034,1.971105933189392,1.7327433824539185,-1.3186112642288208,0.24904821813106537,-0.1474088430404663,-0.40166717767715454,0.9885687232017517,-0.19474190473556519,1.5329515933990479,0.6321792006492615,-2.968494415283203,-1.8525476455688477,-1.853312611579895,0.3158651292324066,1.9126615524291992,-0.8351391553878784,2.2291758060455322,-1.0126532316207886,-0.4560134708881378,-0.523930549621582,-0.1164485365152359,-0.5674197673797607,-0.5973113179206848,-0.4929741621017456,0.224519744515419,1.2531449794769287,2.2881791591644287,0.2908133268356323,0.36119136214256287,1.9228955507278442,-0.8771349191665649,-0.9121729135513306,1.7526047229766846,-0.5691835880279541,1.5490576028823853,1.3942103385925293,1.0066941976547241,-0.4637509286403656,0.5202749371528625,0.834601104259491,-2.476241111755371,0.4811728298664093,2.382875442504883,1.181095838546753,1.381367802619934,-0.8378834128379822,1.9956212043762207,-0.35024261474609375,1.0890153646469116,0.5720507502555847,1.28077232837677,-1.06034517288208,-2.2941415309906006,-1.7842259407043457,-1.903336524963379,1.7625973224639893,-0.29778674244880676,-2.8659005165100098,-0.5031330585479736,-0.2858904302120209,0.8811993598937988,-1.511070966720581,-0.970278799533844,-0.3755338191986084,1.1349937915802002,0.8780155181884766,0.9298462271690369,0.7479840517044067,2.0506584644317627,0.36445510387420654,0.3918510675430298,0.02945917844772339,-0.12005753070116043,-0.7217638492584229,-0.6792437434196472,-0.472598671913147,0.5940015316009521,-0.22723400592803955,-1.1447545289993286,-0.04907156154513359,0.3157665431499481,-1.7113418579101562,0.7294895648956299,-0.25709500908851624,-0.05323690176010132,-1.572171688079834,2.844975709915161,-1.1270909309387207,-0.9682253003120422,0.7678735852241516,-1.9461944103240967,0.6514346599578857,0.20636022090911865,1.2204550504684448,-0.16038812696933746,1.7230795621871948,0.7911666631698608,0.089511938393116,-1.2987079620361328,-2.315753221511841,0.9501640796661377,0.3523212671279907,-1.9924805164337158,-4.111092567443848,-0.045935533940792084,2.01774263381958,0.37113913893699646,0.20727621018886566,1.6367985010147095,-0.02482881024479866,1.0562894344329834,-0.7950605750083923,-0.2076261192560196,0.49953457713127136,0.2250923216342926,2.4081082344055176,-1.0006005764007568,-1.0286149978637695,0.218697190284729,-1.6453148126602173,-0.24836263060569763,-1.2460662126541138,0.15668678283691406,1.6081382036209106,3.6885077953338623,3.622617721557617,-2.164684534072876,1.5566128492355347,0.6916061043739319,-0.6240307688713074,0.9699490070343018,-1.7780320644378662,0.007707276847213507,0.06750252842903137,2.096601724624634,2.348905324935913,0.3338518440723419,-1.4502366781234741,-0.0006056164274923503,3.8296873569488525,-1.620690941810608,0.43243393301963806,-1.059710144996643,-0.31745898723602295,0.1328449845314026,0.7444734573364258,4.230249404907227,-3.5623953342437744,1.0301488637924194,0.8350037932395935,-1.945802927017212,-0.07650619745254517,-0.8637362122535706,1.0266883373260498,-2.691816806793213,1.2399767637252808,3.618546962738037,1.4216175079345703,1.7975196838378906,-0.520590603351593,0.6863684058189392,0.20909357070922852,-0.9951533079147339,0.8078685998916626,0.6279269456863403,0.31969794631004333,-0.8831178545951843,0.3135720491409302,-0.7869863510131836,-1.0426666736602783,-1.084089756011963,-0.3944586515426636,0.03126386180520058,-0.44329947233200073,-0.7268413305282593,2.6371309757232666,-0.7300541400909424,-1.686070442199707,-0.9374390840530396,0.6930257678031921,-0.41047459840774536,-1.5768229961395264,-0.7233344316482544,0.7922518253326416,-1.8658149242401123,0.46582722663879395,1.4192821979522705,0.2367621213197708,1.910573959350586,0.18670475482940674,-0.8410566449165344,0.5783547163009644,-0.35917890071868896,1.549816608428955,-2.903207778930664,0.1071942001581192,1.2395436763763428,-3.995375633239746,1.9521703720092773,-0.5642843842506409,1.143571138381958,0.06135592609643936,0.325161874294281,0.015403778292238712,0.06849801540374756,1.4813063144683838,1.1402502059936523,-8.532806396484375,1.1892645359039307,2.4406261444091797,0.4672701060771942,0.11041904985904694,-0.5336995124816895,2.973440408706665,-0.5800397396087646,0.35638850927352905,2.1686182022094727,1.116875171661377,-0.3914179503917694,0.23758652806282043,0.1395546793937683,-0.3317754864692688,1.030327320098877,1.166349172592163,-3.541571617126465,0.18747147917747498,-0.7758973836898804,-0.8948625326156616,-1.5466554164886475,-0.9180603623390198,-1.4322503805160522,0.45502743124961853,1.0337340831756592,-0.03976597636938095,2.2779464721679688,-2.1742336750030518,0.5976590514183044,0.7085779905319214,-1.327831506729126,0.6364666223526001,-1.4109431505203247,-0.6363648176193237,1.6486107110977173,-1.3050878047943115,0.4463014602661133,-1.6835442781448364,0.62734454870224,-0.7898479104042053,-0.885830283164978,1.3013200759887695,0.7500410079956055,0.9786115288734436,2.9091455936431885,-0.4864189624786377,-1.2425200939178467,0.9038015604019165,0.33989349007606506,0.003984364680945873,0.7387046813964844,1.8761552572250366,2.228409767150879,-0.0800103172659874,-0.9793314337730408,1.171931266784668,-1.1687008142471313,-2.258700132369995,1.2106345891952515,-0.39487338066101074,0.2756291627883911,-0.34441614151000977,-0.9091082811355591,0.8931828737258911,1.0733751058578491,1.4675003290176392,-6.092832565307617,-0.3881654143333435,0.36612755060195923,0.3415733277797699,-1.1985217332839966,-0.9935873746871948,-0.11172967404127121,-1.053623080253601,-0.9631977081298828,-0.4150250554084778,-5.824918270111084,-0.27066487073898315,0.43584582209587097,2.0983264446258545,-2.543117046356201,4.690905570983887,0.8041181564331055,2.4448869228363037,1.5724782943725586,0.5068783164024353,0.23594343662261963,-0.8211768865585327,0.224254310131073,4.030733108520508,-0.345200777053833,-1.1425330638885498,0.37342676520347595,0.9391551613807678,2.507237434387207,-0.4419407844543457,1.1615049839019775,-0.9540097117424011,0.9268940091133118,-1.062357783317566,-0.006720957346260548,-0.09267611056566238,0.3202681541442871,1.5485554933547974,0.3663795292377472,0.1483907550573349,1.736386775970459,-1.8044503927230835,0.13799764215946198,-1.169797420501709,0.6999868154525757,-2.650186061859131,1.4686758518218994,-2.0433452129364014,-1.756163239479065,-2.5169126987457275,1.284124493598938,2.0613420009613037,2.486481189727783,0.7884506583213806,0.6440810561180115,-0.5410450100898743,0.08921948820352554,0.1282249093055725,1.451682686805725,0.7620882987976074,-0.7824970483779907,-1.0997222661972046,2.3444182872772217,1.4944573640823364,0.695928692817688,1.0006215572357178,-0.8413056135177612,1.7494679689407349,-0.0548931248486042,0.9815982580184937,3.9439308643341064,-0.38749295473098755,3.192342519760132,1.8891873359680176,0.2773629128932953,1.850118637084961,2.091409921646118,0.8198440074920654,-0.30870988965034485,0.9368505477905273,-0.25548437237739563,0.32319164276123047,-0.8083481788635254,1.3419346809387207,0.23756130039691925,2.46244740486145,-0.8707411289215088,-1.3003140687942505,-0.7169519662857056,0.24806585907936096,-2.0428519248962402,0.7145156860351562,0.6886506080627441,1.3410903215408325,-0.023496903479099274,1.329727292060852,-2.7998971939086914,1.7567322254180908,1.1080906391143799,-2.549673318862915,-1.2651879787445068,1.2631345987319946,-0.20423796772956848,-0.5344139337539673,0.6009221076965332,2.3128979206085205,0.5145180225372314,-1.1416147947311401,1.4218159914016724,1.6938008069992065,1.738027572631836,-1.202947735786438,-0.2559374272823334,-1.1709033250808716,0.5086763501167297,1.362286925315857,1.0799444913864136,-1.4618794918060303,1.323972463607788,0.0710950568318367,3.3566856384277344,0.40135684609413147,-1.1315248012542725,2.7316367626190186,2.2629380226135254,-0.29974856972694397,0.07592276483774185,-0.9052039980888367,1.3988893032073975,1.1535462141036987,-0.9741449356079102,-1.491769552230835,0.02860751748085022,0.3613092303276062,-1.1747558116912842,0.3466028869152069,-0.18790178000926971,0.2845011055469513,1.3285868167877197,-0.9563999772071838,-1.895271897315979,0.041374243795871735,-1.0894993543624878,-3.8912606239318848,2.1406779289245605,-1.1384589672088623,-0.4864499568939209,1.1479012966156006,1.5990231037139893,-0.21981941163539886,2.049407482147217,2.3533596992492676,0.21983513236045837,0.6818553805351257,-2.0823965072631836,1.1337990760803223,-0.908614456653595,2.8687801361083984,-0.09362032264471054,-1.7205764055252075,0.2834339439868927,-1.0516362190246582,0.525348961353302,-2.06655216217041,-1.0980865955352783,2.8288450241088867,-1.726540207862854,-0.7311906218528748,-1.6947100162506104,0.37653088569641113,1.0541462898254395,1.1455131769180298,-3.636533737182617,-2.1603140830993652,-0.3955686092376709,-1.236405849456787,1.2630845308303833,2.370943069458008,0.2696293592453003,-1.2850168943405151,-0.12574785947799683,1.0268824100494385,0.2120915949344635,1.634969711303711,3.1012775897979736,-0.6850689649581909,-0.7207840085029602,-0.8761759400367737,2.120809555053711,1.0051923990249634,-2.488510847091675,-0.9131665825843811,0.671319305896759,1.6110528707504272,2.7307372093200684,2.0091333389282227,-0.01854083128273487,0.018954798579216003,-0.7786937355995178,1.0386732816696167,1.7603795528411865,-0.4632999002933502,-0.20326608419418335,0.49206236004829407],[0.7535684704780579,-3.255464792251587,1.4998815059661865,-2.2725415229797363,-0.9353546500205994,-2.6692888736724854,-0.2449936717748642,-1.4193438291549683,-1.0976712703704834,-5.256091117858887,-0.12872645258903503,0.3602883815765381,1.5918841361999512,1.2582645416259766,1.9865642786026,-3.285599708557129,-1.3122246265411377,0.7642244100570679,1.3678992986679077,1.117275357246399,0.01753617450594902,0.5344800353050232,-0.8713924288749695,0.46168437600135803,0.5434301495552063,-0.8302425742149353,0.904621958732605,10.59628677368164,-1.253900170326233,-4.490818500518799,-0.26149770617485046,-0.07317094504833221,-0.4755955934524536,0.209244042634964,-2.440523862838745,-6.3077521324157715,-0.9979667067527771,0.11617058515548706,-1.1664172410964966,0.9980371594429016,-0.9410974979400635,2.4596452713012695,-2.1890926361083984,-1.9577677249908447,-1.4125192165374756,1.8860220909118652,0.7209610939025879,-0.17841027677059174,-0.21173933148384094,0.49905121326446533,0.08140994608402252,1.7598966360092163,1.925710916519165,-0.055701397359371185,1.299971342086792,-0.4729725420475006,0.6692432761192322,0.24382543563842773,0.37002459168434143,2.173124313354492,-0.5560804009437561,0.9360427260398865,1.1164989471435547,-0.10209033638238907,0.20697623491287231,2.3634443283081055,-0.22776757180690765,-1.9063793420791626,-0.37055307626724243,-0.8488492369651794,0.42233914136886597,-2.043919801712036,1.2007272243499756,0.1657152771949768,0.6743090748786926,0.4320901036262512,0.7975162863731384,0.6634849309921265,0.15528647601604462,0.9143482446670532,2.629941463470459,0.24378834664821625,1.3320618867874146,-0.3369007110595703,3.1983766555786133,0.4597555100917816,0.5418453812599182,-0.7335842847824097,-0.525303840637207,0.05514613538980484,0.8900097608566284,-0.1816997230052948,2.9159674644470215,0.07487346231937408,0.24680504202842712,1.8814747333526611,0.38461989164352417,0.5356249809265137,0.8609488606452942,0.6431954503059387,-0.8018103837966919,1.045824408531189,-0.8850085139274597,-0.9079597592353821,0.6688445210456848,2.788599967956543,-0.7250286340713501,2.9753329753875732,-0.4317671060562134,0.8215616345405579,-0.9409300684928894,1.587526798248291,0.6539364457130432,0.9377561807632446,1.1864696741104126,0.6740822196006775,-4.3673505783081055,-0.0742054283618927,3.134126901626587,-1.1832486391067505,3.0471739768981934,0.8442324995994568,-1.484800934791565,0.773836612701416,-0.6979148983955383,0.19733357429504395,0.8196707367897034,2.066147804260254,-0.08056218177080154,-0.1528111696243286,-1.0726677179336548,0.4630955457687378,-0.7464464902877808,-1.6736255884170532,-1.1107597351074219,-0.8915406465530396,0.5669139623641968,0.526348888874054,0.21466948091983795,3.1115334033966064,-1.5398787260055542,-1.5580523014068604,0.5541965961456299,0.2559230923652649,-0.8236872553825378,1.1415488719940186,0.27483662962913513,0.0502292774617672,-0.6620153784751892,1.9737098217010498,-1.5152406692504883,0.057582125067710876,1.436395287513733,0.2731470763683319,-0.2274547964334488,-0.9365720152854919,2.314774990081787,-1.7609139680862427,-0.03051244094967842,1.5097788572311401,-0.9371063113212585,0.8927710652351379,1.2636127471923828,0.9604794979095459,1.8068188428878784,-0.8427860140800476,1.2634549140930176,-2.2553629875183105,2.1064388751983643,1.555997371673584,-0.5245644450187683,0.2932301461696625,0.9654485583305359,-0.2646341025829315,0.26954150199890137,-0.41361042857170105,-0.8010072708129883,0.21979673206806183,-0.09062124788761139,0.7323839664459229,-0.5842486023902893,-0.66319739818573,-0.7964116334915161,0.6140713691711426,-1.122083067893982,0.1620332896709442,-0.09952989965677261,1.0658468008041382,0.28827616572380066,-1.1827731132507324,-1.6579253673553467,1.6989754438400269,-0.057827018201351166,-0.10930857807397842,-1.6832120418548584,-0.1715451031923294,-0.016857987269759178,3.1218044757843018,1.5616635084152222,-2.0902223587036133,-0.028299400582909584,0.6049705147743225,-0.7918699383735657,0.8343222141265869,-0.23414164781570435,-0.9086311459541321,0.46780088543891907,0.9423068761825562,-0.9046698212623596,0.3861098289489746,0.12564125657081604,0.43456679582595825,2.54368257522583,-0.14064577221870422,-3.0365540981292725,0.04585802182555199,-1.5161969661712646,-2.3479530811309814,1.5259180068969727,-0.23225155472755432,-0.4458519220352173,-0.2713257968425751,-0.9200176000595093,-0.05110049247741699,-0.246193990111351,1.6443849802017212,1.0541667938232422,-0.12449339777231216,-0.24986672401428223,0.33150407671928406,-0.3644886910915375,1.0967961549758911,0.5629488229751587,-1.121591329574585,-5.12074089050293,-0.6295880675315857,-1.3862422704696655,-0.20072901248931885,-0.49230992794036865,-0.07911764830350876,3.475020170211792,1.108902096748352,1.2545439004898071,0.5155984163284302,0.46249115467071533,1.1111878156661987,-0.8514794707298279,-0.08118090778589249,1.3606220483779907,1.4873219728469849,1.4225337505340576,1.3317184448242188,-0.5728845596313477,1.4960607290267944,0.9746941328048706,-2.506981134414673,2.0283730030059814,0.5539141893386841,1.408362865447998,1.5141527652740479,-1.9940881729125977,-0.23070187866687775,-1.0064741373062134,-1.766814112663269,0.43348369002342224,0.0410742349922657,-0.17416909337043762,1.8169540166854858,-1.3878569602966309,2.126128673553467,-1.4163321256637573,-0.5337471961975098,-0.6679098606109619,-2.9345338344573975,-1.1060900688171387,-1.0207645893096924,0.21366432309150696,-0.785351037979126,-1.4392311573028564,0.9426096677780151,-0.6862632036209106,0.9118494391441345,2.2637670040130615,-1.1785858869552612,0.16014564037322998,-2.3775339126586914,2.305349588394165,1.1117101907730103,-0.6859583258628845,-0.5609148740768433,1.0568193197250366,0.35075199604034424,0.8975974321365356,-0.6970277428627014,-2.8332791328430176,-0.45431771874427795,2.0212440490722656,0.9502944946289062,1.2018424272537231,0.849481463432312,-0.23729124665260315,0.031738314777612686,-1.765967607498169,-0.5402211546897888,0.11583664268255234,0.4593627154827118,1.9542536735534668,-1.1490726470947266,1.8211725950241089,-1.0135267972946167,1.5933393239974976,-0.26677215099334717,-1.725958228111267,-0.12142414599657059,2.112809896469116,1.6089835166931152,1.479394555091858,-1.6071723699569702,1.3287469148635864,1.3776485919952393,-0.91443932056427,1.127827763557434,-1.0003985166549683,-2.0813260078430176,2.08834171295166,2.763681650161743,-1.0266979932785034,-0.7510159611701965,1.7754199504852295,2.318308115005493,-2.367011070251465,-0.9492253661155701,4.630610466003418,0.8643500208854675,0.2899608612060547,3.924340009689331,0.32906782627105713,0.8931497931480408,-0.8326960802078247,-0.6778756380081177,2.001845598220825,-0.7837613224983215,-1.0973206758499146,-0.45802414417266846,-2.7585835456848145,2.1743760108947754,0.8506487607955933,-1.9119634628295898,0.4244542419910431,1.5434967279434204,0.5985972285270691,0.10915826261043549,0.7614342570304871,1.2642191648483276,-0.5528773069381714,-1.209066390991211,-0.8672894835472107,1.0811753273010254,-0.8332569599151611,0.8706936240196228,-1.015897512435913,-0.8400282859802246,-0.061244815587997437,-0.9817757606506348,0.4373137056827545,-0.7091456055641174,-0.8327614068984985,-0.6456843018531799,-1.876143455505371,-0.1074974536895752,-0.9842441082000732,-1.1948130130767822,-3.154777765274048,-3.074152946472168,-2.0714826583862305,-0.6627283692359924,0.00929183978587389,-1.0338324308395386,0.7798158526420593,0.568494975566864,-0.15464043617248535,1.7020577192306519,0.5507734417915344,-0.8779664635658264,-1.0391019582748413,0.7188020944595337,0.8100721836090088,-0.6579349040985107,-2.6589574813842773,-0.9338392019271851,0.8889667987823486,1.2172770500183105,0.4651713967323303,1.392317533493042,1.3559197187423706,1.6365246772766113,2.4531660079956055,-0.36371561884880066,2.540008306503296,0.8938755989074707,1.4803675413131714,-0.9355475902557373,0.8222941160202026,2.0048208236694336,0.40025803446769714,1.1890517473220825,1.837424635887146,0.86282879114151,-0.6143993139266968,-1.0655438899993896,-1.8585253953933716,-0.2806808650493622,0.023799344897270203,0.22425492107868195,-0.22362986207008362,2.4728150367736816,-1.7532594203948975,-0.2581588625907898,-1.6277652978897095,-0.7035396099090576,0.7585598826408386,-1.7102241516113281,-0.5348914861679077,-0.7984450459480286,2.1103575229644775,0.309260755777359,1.1461130380630493,1.8888115882873535,-2.4788978099823,3.038273334503174,1.0027568340301514,0.08951427042484283,-0.018173756077885628,1.297147512435913,-0.3469657301902771,0.39439085125923157,1.1960713863372803,-2.672797918319702,0.7105851769447327,1.5206553936004639,-1.3062572479248047,-0.9854077100753784,0.3615535795688629,-1.9957119226455688,-0.5685475468635559,0.42516109347343445,1.4318856000900269,2.1433658599853516,-0.05305143818259239,-0.4044569432735443,-0.8202071785926819,-1.6548935174942017,-0.7839459180831909,0.18056471645832062,-0.47094103693962097,-0.6435152888298035,-0.367787629365921,-2.7676079273223877,0.7800412774085999,-0.055133964866399765,0.07422906905412674,-0.9968095421791077,1.000348448753357,-1.0010521411895752,0.8162327408790588,-1.4711520671844482,-2.3866209983825684,-0.9847604632377625,-0.5423311591148376,0.9045374989509583,-1.1668059825897217,0.3766052722930908,1.757614016532898,-0.5268539190292358,-0.7750255465507507,0.5531328916549683,-1.3780508041381836,-0.6941456198692322,0.789574146270752,-0.018359201028943062,0.19142431020736694,1.132021427154541,1.4569742679595947,-0.32046547532081604,-0.8466821908950806,-0.8979051113128662,1.358626365661621,-0.3702447712421417,3.72511887550354,-0.2310171276330948,-1.2295035123825073,1.6957849264144897,0.11580503731966019,-2.338120222091675,-0.04869178310036659,1.305354356765747,0.4411349892616272,-9.410102844238281,0.899898886680603,1.7319806814193726,0.22618719935417175,0.7921435236930847,-0.3693092167377472,1.4364137649536133,0.763913631439209,-1.1913126707077026,1.271491527557373,0.9566185474395752,2.206733226776123,-0.28297358751296997,0.6993476152420044,0.5313627123832703,1.1455613374710083,-0.9372788071632385,-2.844132900238037,-0.09390685707330704,0.09411028772592545,1.7251561880111694,-2.109532356262207,-0.2877708375453949,-0.5806586146354675,0.15711012482643127,-0.06282464414834976,-0.5494025349617004,0.28998735547065735,0.35835522413253784,1.3146458864212036,-0.19618640840053558,-1.6172230243682861,2.0467679500579834,-2.4516522884368896,-0.7792982459068298,-0.6057330965995789,-0.6472386717796326,-0.33104100823402405,0.864080548286438,0.3822484016418457,0.06561800837516785,-0.7090026140213013,-1.5450679063796997,-0.1168748065829277,-0.13450978696346283,-0.37829774618148804,0.36371129751205444,-1.0040308237075806,0.6269405484199524,0.8143284916877747,-0.13871483504772186,0.47874823212623596,2.0092899799346924,0.15841208398342133,0.4167156219482422,-0.03448089212179184,1.143038272857666,-1.6517928838729858,-0.26674145460128784,-0.14830373227596283,-0.8043153285980225,-1.6915078163146973,-0.11528251320123672,-0.9056842923164368,1.100072979927063,1.1884992122650146,1.5429714918136597,-1.2683453559875488,-1.1618294715881348,-2.1036555767059326,-2.2072808742523193,0.7942875623703003,-2.051990032196045,-1.6435410976409912,-1.1694151163101196,-2.4785733222961426,0.2590281069278717,2.247730016708374,-1.9334590435028076,0.02206757850944996,2.852445125579834,-1.0873321294784546,1.8872251510620117,-2.110762119293213,-0.30918481945991516,1.913332223892212,1.563605546951294,0.3638967275619507,-0.8626269698143005,-0.15997102856636047,1.2525405883789062,-1.3017005920410156,-0.37986648082733154,1.9167935848236084,0.6966919898986816,1.8241796493530273,-1.209350824356079,0.05117836967110634,-0.5317579507827759,2.1801745891571045,1.093819260597229,-0.7754841446876526,0.23945735394954681,1.9122074842453003,0.1825854331254959,0.2084386795759201,-1.2892731428146362,2.741448163986206,-1.5795950889587402,-0.6657899618148804,-0.6304340958595276,-0.9974127411842346,-1.885708212852478,-0.8754814267158508,0.19790740311145782,-0.3518555760383606,-3.885178804397583,-1.8456157445907593,-0.2811480462551117,-0.10310067981481552,-0.8098812699317932,1.1660265922546387,0.11942975223064423,0.9500415921211243,2.1242146492004395,-0.6584305763244629,1.6257922649383545,3.2426886558532715,-0.5848039388656616,-0.8552671074867249,0.15651650726795197,0.14102129638195038,-0.5531082153320312,-0.6657750010490417,-1.4072684049606323,-0.46698838472366333,1.656990647315979,2.2490546703338623,0.6335529685020447,6.506866931915283,0.5010117292404175,1.1026663780212402,1.3564810752868652,1.9355913400650024,0.5830866098403931,1.7110408544540405,-0.4746212363243103,-0.6622548699378967,0.45915549993515015,2.0486178398132324,0.776744544506073,-2.991487741470337,0.06922245770692825,1.2341275215148926,-0.5531164407730103,-1.0813523530960083,-0.21478824317455292,-0.785464882850647,0.04974792152643204,-0.3179660439491272,1.235131859779358,2.30077862739563,-0.0903758779168129,-0.2559024393558502,-0.6031166315078735,1.7216650247573853,-1.609204649925232,-0.25675734877586365,0.1434784233570099,0.33040300011634827,0.30606329441070557,2.4061973094940186,1.9052647352218628,0.461045503616333,0.7038608193397522,-0.12299085408449173,-1.4095232486724854,-0.4903513491153717,-0.6653847098350525,0.20852060616016388,0.19623884558677673,1.2865403890609741,-0.1835314929485321,0.2270708531141281,-0.6043618321418762,-1.6981061697006226,1.6583091020584106,0.0996459424495697,0.10787392407655716,0.8025929927825928,1.4630718231201172,3.5311923027038574,0.24921031296253204,0.8503695130348206,-0.7367123961448669,0.37223130464553833,-1.4870597124099731,-0.7064541578292847,-0.1938881278038025,1.267899990081787,-0.10986452549695969,0.204700767993927,-0.24674472212791443,-0.7045387029647827,1.4277530908584595,0.8120787739753723,-0.6792888641357422,-1.8708388805389404,1.9855740070343018,-1.2578856945037842,-0.26664477586746216,1.0517398118972778,1.2339272499084473,2.2642691135406494,1.8965182304382324,0.8410605788230896,1.5600700378417969,1.9374299049377441,1.8856843709945679,-0.5124037861824036,0.4107826054096222,-0.458884060382843,-0.24097225069999695,0.694039523601532,1.9451779127120972,-0.6127798557281494,1.1248539686203003,-0.11456836760044098,0.08774422854185104,-0.39612725377082825,-0.691497266292572,-1.18418288230896,0.17829400300979614,-0.07316000759601593,-0.8240985870361328,-1.70613431930542,-0.18493683636188507,0.40939974784851074,0.5637011528015137,-0.6511971354484558,-0.8651113510131836,-2.1194138526916504,-0.02105197124183178,-0.018392397090792656,0.32288509607315063,-0.5034367442131042,0.018105391412973404,-0.4005848169326782,1.6142902374267578,2.0507235527038574,1.2314352989196777,1.6022900342941284,1.9545842409133911,-1.2575132846832275,-0.4655611515045166,0.8114150166511536,-1.0492560863494873,0.03795011714100838,0.10080594569444656,1.241971492767334,-0.49834147095680237,0.17107601463794708,0.6116106510162354,1.0063689947128296,1.5559371709823608,1.0236144065856934,-0.28237518668174744,1.427849292755127,0.7918955683708191,0.36572498083114624,1.6801810264587402],[-0.7900505661964417,0.5536542534828186,2.4879634380340576,-0.36976486444473267,-1.8131684064865112,-2.155123233795166,0.5316091775894165,-1.0558655261993408,-1.0692592859268188,1.0723503828048706,-1.731627345085144,0.5786290168762207,1.1154983043670654,-0.043249718844890594,0.5738820433616638,0.0033294546883553267,-1.4571011066436768,0.9458649158477783,0.23373839259147644,-0.13317537307739258,0.637757420539856,-0.51938796043396,-2.0798065662384033,-0.06767424941062927,-2.444117546081543,-0.4492114782333374,0.32188257575035095,7.221447944641113,0.24437938630580902,-4.5336222648620605,-1.6710928678512573,0.48803243041038513,-0.8979651927947998,1.4029581546783447,-0.9590592384338379,5.430063247680664,-0.18176423013210297,0.9070441722869873,-0.7059182524681091,0.5807271599769592,-1.9715913534164429,0.8313937187194824,0.8874316811561584,-1.6861515045166016,-0.25545424222946167,1.9272444248199463,-1.1906986236572266,-0.7379112243652344,0.03129569813609123,1.5616177320480347,1.0226970911026,1.2086584568023682,0.5704212784767151,0.2186995893716812,2.0444881916046143,0.9448449015617371,3.1260156631469727,-0.7357922792434692,1.0397584438323975,1.8258018493652344,-1.2273544073104858,-0.8786872625350952,-0.3384716808795929,1.9931186437606812,1.145704984664917,0.03769439458847046,-0.35589390993118286,-0.022875282913446426,0.8926059007644653,-1.0258429050445557,-1.0864157676696777,0.30715829133987427,0.8714508414268494,-0.1332545280456543,-2.3398101329803467,0.4026424288749695,-2.5996904373168945,-0.2627488374710083,-1.0583206415176392,0.008203714154660702,0.9657568335533142,-1.5688685178756714,1.7361187934875488,-1.8810255527496338,1.2584164142608643,-1.140626072883606,-0.6804855465888977,-0.27296656370162964,1.6565088033676147,0.25888633728027344,-2.5992915630340576,-0.08512142300605774,1.4733256101608276,0.06816750019788742,-0.013789297081530094,1.1176843643188477,-1.5290474891662598,-0.7641053795814514,-1.3824998140335083,-0.9727045297622681,-0.1297222226858139,1.745455026626587,-0.875138521194458,0.11338424682617188,0.0315418541431427,1.1771297454833984,2.1721277236938477,1.9334079027175903,0.05159454792737961,-0.26641789078712463,-1.9825490713119507,2.9471070766448975,-1.0059754848480225,0.4981982409954071,-0.4979366660118103,0.8283663988113403,3.6022918224334717,1.5613104104995728,2.4364168643951416,-2.1733314990997314,1.1151609420776367,-0.39340946078300476,-0.15702037513256073,2.3284709453582764,-1.0345118045806885,-0.07471289485692978,1.507810354232788,1.7076541185379028,1.5242798328399658,0.7644065022468567,-1.368079662322998,0.968365490436554,-0.6747528910636902,-1.2268259525299072,0.45821574330329895,0.369038462638855,-0.358298122882843,-0.5920573472976685,1.5497987270355225,2.498723030090332,1.2579193115234375,0.4555162787437439,0.8007240891456604,-2.25764799118042,-0.9659155011177063,1.2686771154403687,0.2773236036300659,-0.1805073320865631,2.516469955444336,-0.34904173016548157,1.206137776374817,0.8716676831245422,0.8129189610481262,-0.7375436425209045,1.1796931028366089,0.6598517894744873,-1.2473416328430176,0.12895174324512482,0.6173195838928223,1.2682431936264038,0.6137536764144897,-1.1797919273376465,-0.35280880331993103,-0.5593725442886353,0.9218148589134216,-0.2851313352584839,-0.4006642997264862,0.0703984722495079,1.3930803537368774,0.6620244979858398,0.13763658702373505,-0.1623515486717224,1.9106472730636597,1.50932776927948,-0.4271632134914398,0.36901190876960754,-0.6966888308525085,-0.2002621293067932,0.5956642031669617,1.2912169694900513,0.5254952311515808,0.48773083090782166,-0.46562808752059937,-0.23742780089378357,-0.6582348942756653,0.2508499026298523,-0.0972466841340065,-0.6094371676445007,0.7255904078483582,-0.13779079914093018,-0.5257472991943359,0.6967230439186096,1.1546283960342407,0.6298754215240479,-0.7410745024681091,-0.38899433612823486,0.5519934296607971,1.162025809288025,1.6209391355514526,0.85481196641922,0.18482911586761475,-1.2074933052062988,-1.565124273300171,1.8815133571624756,0.12155139446258545,2.217496633529663,3.651414394378662,-0.678873598575592,-0.03342333808541298,0.9805267453193665,-0.16217973828315735,0.30422255396842957,0.2087784707546234,-2.2731263637542725,-0.3111126720905304,-0.15389147400856018,0.44807910919189453,-0.5592385530471802,4.453538417816162,-0.130707785487175,-1.714328646659851,0.010468581691384315,-0.8853572607040405,-0.10939959436655045,-1.2750755548477173,1.1808639764785767,1.6797372102737427,-2.343968629837036,-0.01683097518980503,-1.3121848106384277,1.2955626249313354,0.39316365122795105,2.17625093460083,-1.9159597158432007,-5.114616394042969,2.431110382080078,0.3182474672794342,0.9244674444198608,-0.6860154867172241,0.12890364229679108,3.173004627227783,0.515052855014801,1.8933050632476807,2.1735332012176514,1.0965238809585571,-0.0887836441397667,-0.4704138934612274,0.9512099027633667,0.8735331296920776,1.8426125049591064,-0.3392197787761688,0.6809316873550415,-0.5637386441230774,-1.3131223917007446,-0.17786072194576263,-2.4622554779052734,-0.10866402834653854,-2.6271586418151855,0.6053597331047058,0.5808754563331604,-1.715093731880188,0.5324902534484863,0.845895528793335,-1.4212899208068848,-1.481604814529419,-1.5449786186218262,-0.4623262882232666,2.078200101852417,-0.5189043283462524,-0.9869754314422607,-1.5223501920700073,-0.07869177311658859,0.6111583113670349,-0.5106487274169922,0.21339298784732819,0.9260116219520569,0.8735257983207703,1.1148180961608887,-0.9779119491577148,0.573251485824585,-1.2761489152908325,0.9312170743942261,1.93833327293396,0.3919117748737335,-1.9117547273635864,-2.7688064575195312,1.388918399810791,0.7048730254173279,2.7222838401794434,-0.1099257543683052,-0.671388566493988,0.2182196080684662,1.9150536060333252,0.9294936656951904,-1.8026736974716187,0.5634395480155945,-0.4906564950942993,-0.012366770766675472,0.7583215236663818,0.8136447072029114,0.6250104904174805,0.6398678421974182,0.15051515400409698,0.49975553154945374,0.3475698232650757,3.277996301651001,0.9818536043167114,-0.8730451464653015,2.2207529544830322,0.30736181139945984,2.054515838623047,-0.9289352893829346,-0.1432940810918808,-0.7527881860733032,2.192042827606201,-0.13927145302295685,0.5178915858268738,-2.1621861457824707,0.04920564591884613,2.267784595489502,-0.8329964280128479,2.4216606616973877,-0.8133676052093506,0.0956219881772995,2.0005128383636475,1.247122049331665,-0.9807192087173462,0.5765680074691772,-0.10072629153728485,2.3889124393463135,-1.56809663772583,-2.2658097743988037,4.268401622772217,1.8048272132873535,-1.1153087615966797,2.5210375785827637,0.913661777973175,1.1436140537261963,-1.740644097328186,-0.5477367043495178,0.531813383102417,-3.1221871376037598,-1.7252029180526733,1.9370611906051636,-3.2164552211761475,1.741369605064392,0.7155977487564087,-1.1624306440353394,-0.941605269908905,3.0077834129333496,1.4699492454528809,0.4078853726387024,0.627739429473877,-0.4488416016101837,0.04956155642867088,0.8678414225578308,-2.1523735523223877,1.5597212314605713,1.8371596336364746,0.19676214456558228,-0.3239281177520752,-1.0269911289215088,-0.6982055902481079,0.10231637954711914,0.48436275124549866,-0.40342068672180176,0.1847047358751297,-1.2131788730621338,0.13475462794303894,-1.5710653066635132,0.3855131268501282,1.3818057775497437,0.33657342195510864,-1.172339916229248,-2.4966964721679688,-0.9861623048782349,-2.7374565601348877,-0.31007978320121765,-0.10741692781448364,2.929752826690674,-0.3507811427116394,-0.21867741644382477,-0.2830951511859894,-1.373123049736023,-1.051108956336975,1.637615442276001,-0.7578116059303284,0.08801180869340897,-0.9317631125450134,-0.055435508489608765,1.1452139616012573,1.3469874858856201,0.40147557854652405,-1.26865553855896,0.5499879717826843,-1.1458581686019897,0.9317296743392944,-1.411360263824463,2.7022652626037598,1.1807920932769775,0.5896598100662231,-1.5185010433197021,4.264692783355713,-0.12053336948156357,-1.128358244895935,0.7929593920707703,0.11930395662784576,2.8015859127044678,0.702897310256958,-1.4815809726715088,0.19790619611740112,-0.35837411880493164,0.5248852968215942,1.0394009351730347,4.10858154296875,-0.3292626440525055,-1.5843453407287598,-0.0803145170211792,0.3927168846130371,-0.965916097164154,0.7467218041419983,-0.49153462052345276,-0.821255624294281,-0.1893671751022339,1.6652100086212158,-0.286508709192276,1.8191081285476685,-0.15570487082004547,-0.29674428701400757,0.9718229174613953,-0.06884951144456863,0.5757468938827515,-0.7057245969772339,-1.390916109085083,0.13948887586593628,-1.0538386106491089,2.477630138397217,-4.562804698944092,1.0604736804962158,1.9177275896072388,1.3516154289245605,0.2786347568035126,1.200290560722351,-0.5799407958984375,-1.7720438241958618,0.49370649456977844,0.46766233444213867,0.1142825186252594,0.6305271983146667,-1.2583379745483398,-0.29464292526245117,-2.29725980758667,-0.9033634066581726,0.10812292993068695,0.695169985294342,-1.1641321182250977,-1.5070042610168457,-0.40290796756744385,0.8568985462188721,-0.7560741901397705,-0.0012916232226416469,-0.6860104203224182,-0.27210164070129395,-1.5649964809417725,-0.20223575830459595,-0.05120707303285599,-0.4416539967060089,0.12220693379640579,0.6550562381744385,-0.7752112746238708,1.6516990661621094,-0.6519544124603271,0.8072171211242676,-0.7717651724815369,0.41113850474357605,2.1602983474731445,-0.0558871328830719,-0.4712255001068115,-0.08781658858060837,-2.508023262023926,0.24488751590251923,1.5946630239486694,2.4659626483917236,1.3341604471206665,-2.498647928237915,0.20688240230083466,2.393350839614868,0.0531320720911026,2.731052875518799,2.6491589546203613,0.9357331395149231,1.2940374612808228,0.585677444934845,-1.1143863201141357,0.42529362440109253,2.5841994285583496,-1.4096581935882568,-11.470370292663574,0.3411058187484741,-0.2639739215373993,-1.421059012413025,0.44824329018592834,-0.5256425142288208,1.1293739080429077,-1.946094036102295,0.11596756428480148,1.5845131874084473,-0.9905644655227661,1.0737518072128296,0.16588591039180756,-1.4362080097198486,-0.4710308313369751,0.9625287652015686,-3.144869089126587,-1.2270920276641846,-0.7172380685806274,0.006142076104879379,0.0941527932882309,-0.9507791996002197,-1.8688551187515259,-0.20985354483127594,-1.6138757467269897,-0.519952118396759,-0.7439438104629517,0.9071779251098633,0.38704153895378113,2.6240975856781006,-0.5365260243415833,-0.1609034538269043,1.7799193859100342,-0.7819014191627502,-0.7072787880897522,1.1331113576889038,0.01770329475402832,-0.7202858328819275,1.3383424282073975,-0.6995457410812378,0.22403794527053833,-0.33584481477737427,-0.27249249815940857,-0.09253910183906555,1.0954556465148926,-0.009242485277354717,-0.5128897428512573,0.16561588644981384,0.532604992389679,2.3170435428619385,0.05865996703505516,0.46927985548973083,0.4190368354320526,1.1345452070236206,0.8916864395141602,-0.8366659879684448,-1.2379165887832642,-1.8349359035491943,0.1454729288816452,1.6553821563720703,5.600323677062988,-0.01826624944806099,0.1082962304353714,-0.14438948035240173,1.2470417022705078,-2.2042500972747803,0.6289373636245728,1.7736300230026245,-0.710402250289917,-1.3585033416748047,2.1960530281066895,1.7711904048919678,-0.721783459186554,-1.9884295463562012,0.2910182774066925,-1.3887101411819458,0.10227411240339279,0.19689659774303436,-0.9548308849334717,0.4880528748035431,0.04858984798192978,-0.931309163570404,0.5159744620323181,-0.2288089245557785,-1.2087944746017456,0.8729075193405151,0.4299902319908142,-0.1677607148885727,-0.8474066257476807,0.337425172328949,0.0776144415140152,-1.5258119106292725,-1.2766283750534058,-0.3763909637928009,-1.1512447595596313,0.8835857510566711,0.38973236083984375,0.4093504548072815,-1.1320792436599731,1.38552987575531,1.3845270872116089,0.8150449991226196,0.8597627282142639,1.359212875366211,-0.9412115216255188,0.6012792587280273,0.2533469796180725,1.8575502634048462,-0.16150741279125214,-0.3774866461753845,-0.39893877506256104,-0.23002873361110687,-0.8216775059700012,-1.518463373184204,0.6506877541542053,0.05641882121562958,-2.636610746383667,-0.3026430904865265,-1.4240086078643799,-0.1691112220287323,0.6502720713615417,0.9998571276664734,-0.0777805969119072,-0.4237738251686096,0.5714365243911743,1.4771047830581665,0.8063449859619141,-0.11036233603954315,0.4331595301628113,0.07716694474220276,-0.525540292263031,-0.6555728912353516,-3.350332736968994,-1.1411070823669434,0.1107674241065979,0.8074787855148315,-0.6076721549034119,1.73757004737854,-0.9812555313110352,4.128915786743164,0.9861131906509399,-0.6338734030723572,1.473175287246704,1.344781517982483,-0.32476845383644104,0.7040825486183167,-1.7338931560516357,-1.3015450239181519,-0.010797704569995403,-0.17441913485527039,0.331863671541214,-1.869162917137146,1.445982575416565,-0.3020978569984436,-1.7509320974349976,-1.284659743309021,0.6320575475692749,-1.4093858003616333,-1.3432999849319458,1.2077786922454834,1.08854079246521,2.0572097301483154,0.7026053667068481,-0.8238297700881958,1.0218454599380493,0.4687362313270569,-1.715516448020935,-0.81590336561203,0.5690419673919678,1.5093902349472046,-0.7691983580589294,0.5121575593948364,3.5762875080108643,-0.6462669968605042,-0.08978293836116791,0.9789342284202576,0.3219841420650482,-0.8723068833351135,-0.854935348033905,0.5250251889228821,0.04339364543557167,0.9084959626197815,0.5564500093460083,1.1679528951644897,-0.24594663083553314,-2.0441370010375977,-0.10618267953395844,-0.7145525217056274,1.013206958770752,-0.19870974123477936,-0.24283422529697418,2.720815658569336,-0.3009074628353119,0.7928087115287781,-1.1037635803222656,-1.8595750331878662,-0.989818274974823,0.3329170346260071,1.0649901628494263,-0.6852863430976868,0.8941003680229187,-1.4742368459701538,0.5388166904449463,0.36920732259750366,-0.38683760166168213,1.8961752653121948,-2.9142560958862305,-0.5364707708358765,-0.19739006459712982,1.338869333267212,1.3137469291687012,-0.7859818339347839,3.540276288986206,1.7604994773864746,0.7259287238121033,-1.2681480646133423,1.9757195711135864,0.8914844989776611,2.046942949295044,-1.0655596256256104,0.9594901204109192,-0.13095051050186157,0.842003583908081,-0.06422103941440582,1.5982297658920288,0.437967449426651,0.5070642828941345,0.9147304892539978,-3.048715353012085,0.24427300691604614,-0.8121455311775208,0.00563464080914855,0.6270113587379456,-1.2566287517547607,0.22034412622451782,-0.4996846914291382,-0.4102563261985779,1.480059266090393,0.7553580403327942,0.2046555131673813,-1.5917413234710693,-1.8393399715423584,-1.1252236366271973,-0.9981931447982788,0.7760920524597168,-0.7657200694084167,-0.6403965353965759,-0.0001867256942205131,-0.35078173875808716,-0.5812617540359497,0.5842880010604858,2.55985689163208,2.126136541366577,-2.5861165523529053,-1.2295883893966675,2.174489974975586,0.010040943510830402,-1.2828859090805054,0.9206746816635132,1.445892095565796,-1.2977880239486694,0.2148497849702835,0.37179505825042725,-2.877739429473877,-0.992640495300293,0.07681679725646973,-0.5747395157814026,1.4940520524978638,-0.22217313945293427,-0.5128574967384338,-0.4029492735862732],[1.8700014352798462,-0.9537832140922546,2.1034228801727295,0.08857130259275436,0.31595301628112793,-1.3313374519348145,-1.3296457529067993,-0.9822030663490295,-1.5796012878417969,2.1072349548339844,-1.6206250190734863,0.5644545555114746,0.5484638214111328,-0.092844158411026,-0.17612910270690918,2.519317150115967,-1.2694110870361328,0.811542809009552,-1.4266833066940308,-2.2250819206237793,-0.2175114005804062,-1.427248239517212,-1.5540472269058228,0.06491968035697937,-0.7231432795524597,-1.1539101600646973,0.9275432229042053,5.911684036254883,1.3829237222671509,-4.723909854888916,0.3674319386482239,0.3689708113670349,-0.8397740721702576,1.0944362878799438,0.5117955803871155,5.333931922912598,-0.008794872090220451,1.1614038944244385,-0.23337869346141815,0.24328447878360748,0.5055565237998962,2.8021748065948486,1.9584015607833862,0.5087627172470093,-0.40342387557029724,2.1654560565948486,0.5552844405174255,-0.07008281350135803,0.6879984736442566,0.2538772523403168,-0.435979962348938,0.4371735155582428,1.8677483797073364,0.9553792476654053,1.0532578229904175,0.14776037633419037,1.5467066764831543,-1.2304576635360718,1.4929696321487427,1.0905483961105347,0.5290743112564087,0.6372637152671814,-1.7041985988616943,1.7259125709533691,-0.2313508242368698,0.7979050278663635,-0.7048803567886353,0.9901645183563232,0.33992162346839905,-1.0523625612258911,-0.44561246037483215,1.3442282676696777,-1.3779569864273071,-1.878465175628662,-2.2843682765960693,-0.6670844554901123,1.3943440914154053,-0.46494823694229126,-0.35562461614608765,-0.05279361084103584,-0.37396296858787537,-0.16740337014198303,1.6958273649215698,-0.04257672652602196,2.935289144515991,-0.12983354926109314,0.8481287956237793,-0.4493083655834198,-0.12610949575901031,0.031112348660826683,-2.732426166534424,1.7865413427352905,-0.016187461093068123,-2.402486562728882,-0.9416614174842834,1.5836025476455688,-1.3438811302185059,-1.2697159051895142,-1.8824230432510376,-0.08117653429508209,0.7724342942237854,-0.2882547378540039,0.12536759674549103,0.4213460385799408,1.2642439603805542,0.7824274301528931,0.7665669918060303,0.9381256699562073,0.007203627377748489,0.10369446128606796,-2.738351345062256,3.34871244430542,1.7629899978637695,0.4649307429790497,-0.7499710321426392,2.5256354808807373,-0.06792617589235306,0.33435729146003723,1.7335848808288574,-2.3704988956451416,0.37268099188804626,2.8828299045562744,0.40057700872421265,1.5602624416351318,0.20313064754009247,-1.6119767427444458,-1.3218507766723633,1.0870229005813599,-1.0078155994415283,-0.48945873975753784,0.42376697063446045,0.40318143367767334,0.7196474671363831,-1.2555240392684937,0.27537643909454346,-0.2246823012828827,-0.6424707770347595,0.36115458607673645,1.915483832359314,2.0597071647644043,0.3984278738498688,-1.0196256637573242,-1.8808467388153076,-1.451167345046997,-0.11623602360486984,-0.4353862404823303,0.7647074460983276,-0.9029726386070251,-0.8483495712280273,-2.5343551635742188,-1.9437227249145508,2.1674396991729736,0.5866812467575073,-2.881378412246704,2.3875584602355957,-0.19905981421470642,-3.790619373321533,1.0582926273345947,0.18380481004714966,0.2137312889099121,0.6011139154434204,1.4136888980865479,-1.300391435623169,0.7059012055397034,0.508355975151062,-0.8265513777732849,1.5162755250930786,-0.6353320479393005,1.6617889404296875,0.7381632328033447,0.9743962287902832,1.9016209840774536,-2.804738998413086,-0.804676353931427,-1.5383496284484863,0.11297547072172165,0.10581666231155396,0.44206854701042175,-0.09882081300020218,-0.5971598625183105,1.0379793643951416,0.006794237997382879,-1.1905148029327393,-1.9004913568496704,-0.10253852605819702,0.42031776905059814,0.8615812063217163,-0.24914942681789398,-1.0265244245529175,1.0082272291183472,-0.5192649960517883,0.2018110305070877,1.1059271097183228,-0.2261027842760086,0.31990352272987366,0.36676719784736633,0.06715237349271774,-0.9813494682312012,3.0467450618743896,0.5410239696502686,1.2281670570373535,-0.3625689148902893,0.27658089995384216,-1.557469129562378,2.3335161209106445,0.09454001486301422,-0.6809306144714355,-0.8574090600013733,-0.5185633301734924,1.4173985719680786,1.1108695268630981,1.089577078819275,-0.5478112697601318,-0.5097954869270325,-0.5556439757347107,-0.5653342008590698,-1.175892949104309,0.4166565239429474,-1.219483733177185,0.2160225212574005,-0.5649774074554443,0.3159421384334564,-0.8825043439865112,0.8365920186042786,-1.0597103834152222,1.6423629522323608,0.5677332878112793,1.699103832244873,-1.3848485946655273,0.37077730894088745,-0.19178171455860138,0.8909830451011658,1.8958004713058472,-1.2269827127456665,-2.5528173446655273,0.6309081315994263,1.3474290370941162,1.057568907737732,-0.6501286029815674,-0.6289110779762268,2.2084085941314697,1.517317533493042,1.1500778198242188,1.8380420207977295,-1.1535406112670898,-1.5367317199707031,-1.7328810691833496,-0.7129775881767273,0.865331768989563,2.237637519836426,-0.6331576704978943,-0.9992145895957947,0.36362025141716003,-0.5741291642189026,-0.5682681202888489,-0.6825681924819946,-0.22279313206672668,-0.2626400291919708,-0.6087192893028259,1.2177050113677979,0.2474922388792038,-0.1264093518257141,1.684544324874878,0.593108594417572,0.23041152954101562,0.4215044677257538,-0.2334827482700348,-0.2596336901187897,-0.6701920032501221,-0.2964950501918793,-1.513450026512146,-1.4474554061889648,0.6922515034675598,-1.437402606010437,-0.4191257059574127,0.05706638842821121,0.3521604835987091,1.6325576305389404,-0.3647539019584656,1.4764797687530518,0.7200438976287842,0.9377652406692505,1.2363752126693726,-1.0297328233718872,1.5730253458023071,-1.4308619499206543,0.16653135418891907,0.2231525033712387,2.4413418769836426,-0.1611386239528656,0.9162230491638184,0.32445117831230164,0.0002463006239850074,-0.9630674719810486,-0.9251115918159485,0.36335447430610657,-1.4127824306488037,0.22973781824111938,-0.09917386621236801,0.48129305243492126,1.5950884819030762,-0.14676129817962646,-1.2372773885726929,1.1645609140396118,2.045637369155884,3.6029927730560303,0.9226999878883362,0.23548153042793274,1.2711671590805054,0.28634461760520935,0.06930431723594666,-2.774435043334961,0.5810049176216125,-0.36896729469299316,2.1899468898773193,1.5554274320602417,2.1834075450897217,-0.17709745466709137,0.4351813793182373,1.2835607528686523,-0.3828519284725189,0.7454456090927124,-1.8016822338104248,-0.41161105036735535,-0.42083993554115295,2.1432156562805176,1.410874843597412,0.4167179465293884,0.03538021445274353,0.4331080913543701,-0.25948455929756165,-0.973899245262146,1.532984972000122,0.8133245706558228,-0.4833168387413025,1.1259715557098389,-1.3160326480865479,1.860588550567627,-1.2843698263168335,-0.2635345458984375,1.570401668548584,-0.6328579783439636,-0.7442286610603333,-0.5800590515136719,-1.7868690490722656,3.2253663539886475,1.720704197883606,-0.1793280988931656,-2.7367300987243652,0.07314597070217133,-0.7454310059547424,0.6245610117912292,0.5524724125862122,-0.39204442501068115,-0.15724553167819977,-0.01564054936170578,-0.5512739419937134,0.3238130211830139,2.1001198291778564,-0.008657955564558506,0.6417033672332764,0.7234825491905212,-0.0032816226594150066,0.4954527020454407,0.23382963240146637,-0.7909590601921082,-0.8181881904602051,-2.2997756004333496,-0.9683290123939514,-0.7099251747131348,-1.1424070596694946,-1.1119439601898193,1.6520090103149414,-1.2219786643981934,-2.0375730991363525,-1.4558624029159546,-2.369098424911499,1.1118969917297363,1.0685210227966309,0.6039063930511475,-0.17772407829761505,0.1506483554840088,-0.23590396344661713,-1.7554457187652588,-0.5648266077041626,0.5187008380889893,-0.6123316884040833,0.1604079157114029,-2.5146777629852295,0.5221972465515137,1.6339123249053955,1.227448582649231,1.411824345588684,-0.40133005380630493,0.9426468014717102,-1.6288179159164429,1.47822904586792,0.1875685453414917,1.5712575912475586,-0.9427369236946106,0.4654623568058014,-2.1302497386932373,0.7647436857223511,-0.17891137301921844,-1.1605160236358643,2.3731563091278076,2.247870922088623,2.3855373859405518,0.36991995573043823,-0.08694471418857574,2.49459171295166,0.7135692834854126,-0.7316654324531555,-0.5612058639526367,2.137115478515625,0.9847098588943481,-3.4215614795684814,0.288699209690094,0.0990767553448677,-1.1373354196548462,-0.010949020273983479,0.23142188787460327,-0.24161367118358612,0.18040399253368378,1.1389511823654175,-0.6554152965545654,0.586129903793335,0.41170331835746765,-3.300605297088623,2.651108980178833,1.1357625722885132,2.424318552017212,-0.11507207155227661,-0.9181020259857178,0.21082516014575958,1.8071213960647583,-0.101308673620224,-2.324276924133301,-0.8362125158309937,2.8274788856506348,-1.2562121152877808,-1.612917184829712,0.29909491539001465,0.35746440291404724,-0.8262419104576111,1.0773162841796875,0.17893444001674652,-1.3540438413619995,-0.33003613352775574,-2.20725417137146,-0.15194711089134216,-0.10596144199371338,0.9758137464523315,-0.2008875161409378,0.18444733321666718,0.17581714689731598,-1.1359659433364868,1.1185933351516724,1.7566450834274292,0.19510476291179657,-0.4129664897918701,0.21389606595039368,0.2064651995897293,-1.7961313724517822,-1.3699336051940918,-0.6933703422546387,0.28191331028938293,-0.02121249958872795,-0.23490719497203827,0.30084607005119324,0.5521351099014282,-1.8201268911361694,0.9035161137580872,-0.19793789088726044,-0.8045978546142578,1.2734891176223755,0.195420503616333,0.3474104106426239,2.1353330612182617,-0.09418516606092453,-0.3945069909095764,-0.4487040340900421,0.40545982122421265,0.7027626633644104,0.01715131849050522,-0.35385382175445557,0.6302648782730103,-0.7806503772735596,0.831731379032135,1.8628534078598022,0.832203209400177,0.03834221884608269,0.0926053524017334,-0.3968563377857208,-0.6416052579879761,1.0088194608688354,1.8760758638381958,-8.949368476867676,0.5031846761703491,0.6414737701416016,-0.6534965634346008,-0.9199628233909607,-0.029175087809562683,0.9397960305213928,-1.1524782180786133,-0.9981231689453125,3.4107422828674316,1.1974306106567383,-0.041534777730703354,-0.10866447538137436,-0.717340886592865,0.36281344294548035,1.0480982065200806,-1.5038583278656006,-0.9181090593338013,0.4998362958431244,0.333755224943161,-0.7272608876228333,-0.8895850777626038,-0.06808071583509445,-0.6548995971679688,-1.4871495962142944,-0.5371261835098267,-1.9484615325927734,3.097158670425415,2.026489734649658,1.5847117900848389,-0.5198217034339905,0.7233495712280273,3.0349390506744385,-0.4580458998680115,-0.16269636154174805,1.0513328313827515,-0.592156708240509,-0.05298909172415733,0.6080169677734375,-0.5745897889137268,0.1604059487581253,-0.44989529252052307,-0.839118480682373,0.8638426661491394,0.8463036417961121,1.624826431274414,-1.1638646125793457,-0.0029547836165875196,0.42535731196403503,0.3067769706249237,0.16586528718471527,1.5512956380844116,0.7947095632553101,0.6080413460731506,-0.7525099515914917,-0.8570213913917542,-1.2021796703338623,-0.3166184723377228,-1.349274754524231,1.7863764762878418,0.3627417981624603,0.20563898980617523,-0.4606700837612152,0.7924963235855103,1.7401901483535767,0.6113206148147583,2.0847725868225098,-1.7825077772140503,-0.422975093126297,-0.004531695041805506,2.577338457107544,-0.614427924156189,0.4504110515117645,-1.3683102130889893,0.6162466406822205,-1.7051739692687988,1.5937389135360718,1.7325252294540405,0.7879259586334229,-0.44993168115615845,0.9205925464630127,-0.9060207009315491,-0.12975212931632996,-0.4365977346897125,-0.8171923756599426,-2.0588059425354004,-0.6748114228248596,0.18095454573631287,0.39266979694366455,0.523392379283905,1.373639464378357,-1.4747767448425293,0.30770695209503174,-0.6627662777900696,0.9079089760780334,0.6174818873405457,-1.5106958150863647,0.6117861866950989,-3.0644242763519287,2.366056203842163,0.6335030198097229,1.0025659799575806,0.2563609182834625,1.0058679580688477,0.5388148427009583,0.8761941194534302,-0.027441080659627914,-0.9116984009742737,-0.7897000312805176,1.7775436639785767,-2.041658401489258,0.8131729364395142,-1.0562258958816528,-1.7436473369598389,-0.9614993929862976,-2.4152731895446777,-1.7214937210083008,0.1487284004688263,0.24784088134765625,-0.14352644979953766,1.530250072479248,0.5951820611953735,0.20611655712127686,0.7239394783973694,0.6520217657089233,-0.6399421691894531,0.5908203125,0.07803957909345627,-0.18269535899162292,-0.9937022924423218,-0.77977454662323,1.4323952198028564,0.8400874733924866,-0.852756679058075,-0.2018013596534729,0.6135575175285339,0.034458279609680176,1.0144681930541992,-0.7511371374130249,2.2071783542633057,1.2976030111312866,-0.7936547994613647,1.222113847732544,1.0068825483322144,0.03303360193967819,1.058332920074463,-0.851527214050293,-0.1586305946111679,-0.2003621906042099,-0.22467529773712158,-1.7008010149002075,0.3279584050178528,1.0178388357162476,-0.20944525301456451,-1.862892508506775,-0.6690083146095276,-0.5341095924377441,-1.4596138000488281,0.3025243878364563,0.7319607138633728,2.8317363262176514,3.245818853378296,2.1091978549957275,0.04960455745458603,1.3499468564987183,1.4332877397537231,-0.5282966494560242,-0.35602834820747375,0.04304422810673714,-0.07281988859176636,0.7220138907432556,0.3438747823238373,2.2951698303222656,1.6599432229995728,0.6602917909622192,1.393643856048584,1.1108596324920654,-0.47068706154823303,0.5002430081367493,0.8390111327171326,-0.46291226148605347,0.6217096447944641,0.3763500452041626,-0.3462708592414856,1.1744709014892578,-1.8116114139556885,0.33887308835983276,0.14286744594573975,0.4423253834247589,2.7540369033813477,2.4683585166931152,1.9425266981124878,-1.3899595737457275,0.006880808621644974,1.194249153137207,-0.3378417491912842,-0.9804418087005615,0.5063457489013672,0.6297093629837036,-0.35141217708587646,0.2059141844511032,0.5638249516487122,1.7170902490615845,-0.2453722357749939,-0.057230908423662186,0.9995738863945007,-2.6726083755493164,-0.16992148756980896,1.9104019403457642,1.4361361265182495,-2.707350254058838,-0.4945096969604492,1.9422483444213867,-0.6590908765792847,0.7392531633377075,-2.0990097522735596,0.07232765853404999,1.0226327180862427,1.6140445470809937,-0.20957709848880768,-0.6150162220001221,-0.5509488582611084,-0.767189085483551,-0.3503626585006714,2.2825639247894287,0.9842509031295776,-1.0942336320877075,0.47752878069877625,-3.474954843521118,-0.18037892878055573,0.06697426736354828,-1.3048537969589233,0.5082981586456299,-1.7253639698028564,1.4372456073760986,0.5339020490646362,0.7988658547401428,-0.8056907057762146,0.4377157986164093,2.218787431716919,-1.5755138397216797,-0.7720381021499634,-1.2138371467590332,-1.3451076745986938,1.0630342960357666,0.473603218793869,-0.21984469890594482,-0.26615390181541443,0.46989092230796814,-2.3199167251586914,0.06440053135156631,0.26689186692237854,1.8300862312316895,-1.6880125999450684,1.3537061214447021,0.3103812336921692,0.37515705823898315,-3.592496156692505,0.871163010597229,2.517085552215576,0.7685185670852661,0.7562406659126282,0.043909285217523575,-2.727987051010132,-1.5618082284927368,-0.05517341196537018,-0.7062270045280457,-0.1643052101135254,0.09265648573637009,1.7855372428894043,-0.1178811714053154],[-0.20433223247528076,-1.6783385276794434,0.9252661466598511,2.0758447647094727,-0.07109203189611435,-0.18004082143306732,0.7989913821220398,-0.2983997166156769,-0.38747748732566833,-0.8522803783416748,-1.453060507774353,1.7692610025405884,-0.6064544320106506,0.31748345494270325,-0.4543328285217285,-0.22675184905529022,-1.3857476711273193,0.589260458946228,0.2753255069255829,-2.0026803016662598,0.08123133331537247,-0.5871105194091797,-0.13212165236473083,0.10576153546571732,0.09379924088716507,-2.1373279094696045,0.17816929519176483,-0.22665566205978394,0.017189228907227516,-5.143427848815918,0.01392669603228569,-0.7109980583190918,-1.237610936164856,0.4448659121990204,-1.0729559659957886,-5.306884288787842,0.5477319359779358,1.809117078781128,0.3475610017776489,-1.0729893445968628,0.09014754742383957,1.5906052589416504,-1.0154414176940918,0.5790693759918213,-0.31274014711380005,0.8590385317802429,0.2830972969532013,1.2141393423080444,-1.151501178741455,2.1210732460021973,-0.1391182690858841,0.8669507503509521,2.212071418762207,0.8674596548080444,0.05427573621273041,1.1219196319580078,-0.6358404159545898,-0.5296401977539062,0.0012907353229820728,1.6400333642959595,-0.6911768913269043,0.2026916742324829,-0.9082508087158203,0.3168582320213318,0.33589285612106323,1.0148670673370361,-0.31823980808258057,-0.2082129269838333,-0.381991446018219,-1.1881989240646362,-2.4908640384674072,-0.355442613363266,0.17276297509670258,0.6441594362258911,-0.6703215837478638,0.18866337835788727,0.939885675907135,-0.01211884617805481,-1.8504027128219604,0.21178963780403137,-0.6326240301132202,0.31865406036376953,2.048032760620117,-0.11608626693487167,-0.2569786608219147,0.4368757903575897,-0.0260474793612957,0.7990599274635315,0.5727532505989075,0.0895412489771843,-1.571159839630127,0.26815176010131836,1.0307565927505493,-0.520641565322876,0.15403594076633453,1.6378380060195923,1.283527135848999,-1.6588976383209229,-0.48400479555130005,-1.1580859422683716,-0.7509525418281555,1.315380573272705,-0.07379183173179626,0.52519291639328,0.4335678517818451,2.7950351238250732,1.3771075010299683,0.7259077429771423,-0.07334304600954056,1.3830987215042114,-1.2857534885406494,0.12470948696136475,-0.9602134823799133,-1.2055975198745728,-0.5638176202774048,0.09352762252092361,1.6657129526138306,0.4155099391937256,1.2693710327148438,-0.4186498522758484,1.3996397256851196,2.93269944190979,-1.3664554357528687,1.086867332458496,-0.1967536062002182,-0.8543054461479187,-1.4616116285324097,0.719154417514801,-0.6699909567832947,0.6007542014122009,0.6462841033935547,0.5208675265312195,0.6895001530647278,-0.6039479374885559,0.8986804485321045,0.09296539425849915,-0.2314574122428894,-0.6801103353500366,0.8140191435813904,3.4217443466186523,-0.23492778837680817,0.045127611607313156,-0.8500064611434937,-1.6458325386047363,-0.24958015978336334,0.11323165893554688,0.6190603375434875,0.17906589806079865,0.7227169871330261,0.5980530381202698,-0.7673828601837158,0.8241417407989502,0.709071934223175,1.3429936170578003,0.5072498917579651,-0.06259932368993759,-1.9569644927978516,0.7814217209815979,2.0377862453460693,0.7721689939498901,-0.28181275725364685,0.8799373507499695,0.8192418217658997,0.8107286691665649,0.40820592641830444,0.3966280221939087,-0.4259047210216522,-1.5376569032669067,1.8848042488098145,0.18811281025409698,0.9903721213340759,1.114202857017517,-4.696131706237793,-0.3267369866371155,0.5743921399116516,-0.6137317419052124,0.9934948086738586,-0.20596593618392944,-0.6236596703529358,-1.0443239212036133,0.6402934193611145,0.6813211441040039,0.03963381424546242,-0.8187324404716492,0.9668425917625427,0.9278733730316162,0.40730586647987366,1.4157085418701172,-0.429911345243454,0.29686710238456726,-0.389783650636673,-0.5340803861618042,-0.2599109709262848,-0.13249175250530243,0.3685387372970581,-1.270527958869934,0.2765282690525055,-2.168261766433716,0.3536916673183441,-0.9826862812042236,1.3856889009475708,0.1504652500152588,0.6382452845573425,-0.4599418640136719,0.10876734554767609,-1.0954846143722534,0.705790638923645,0.3312164545059204,0.8924857378005981,0.3045678734779358,-0.0713920146226883,0.9126845002174377,1.3598592281341553,-0.5066872239112854,-1.5612739324569702,0.402454137802124,-0.8306199908256531,-0.6184536218643188,0.19692130386829376,0.7297500371932983,0.021695606410503387,-0.3567628562450409,0.3224705755710602,0.9489116072654724,0.20368410646915436,0.5595125555992126,0.1147182360291481,-0.24992671608924866,-1.3786852359771729,0.7037904262542725,0.11532415449619293,1.428863525390625,0.5910244584083557,0.10874250531196594,2.828360080718994,0.1031283438205719,-0.7883068323135376,1.3114484548568726,-0.6387841701507568,-0.22563660144805908,-0.1337548941373825,1.2929610013961792,1.8523943424224854,1.1022570133209229,0.7133726477622986,0.5316223502159119,1.02217698097229,0.9695987105369568,1.1405972242355347,1.655632734298706,-1.9676275253295898,-0.5847054123878479,1.378090500831604,-0.37466004490852356,0.43610891699790955,0.6157627701759338,0.09732427448034286,1.1812793016433716,0.7006984949111938,1.2035677433013916,-0.02049262449145317,0.02560584992170334,1.4165313243865967,-0.26903268694877625,-0.7465556263923645,0.23137865960597992,-1.0205466747283936,0.08658113330602646,-0.6422387361526489,0.8964866399765015,-0.9495004415512085,0.029113179072737694,0.46966245770454407,-1.2270697355270386,-0.38857710361480713,-0.9073766469955444,-0.40797388553619385,1.03908371925354,-0.21913067996501923,-0.8373785614967346,0.6290602087974548,0.6674630641937256,1.0973516702651978,-1.2755012512207031,0.33192408084869385,0.36322349309921265,-0.4461832046508789,0.24300536513328552,-0.4090024530887604,0.17215196788311005,-0.10460265725851059,2.1520371437072754,-1.5440765619277954,-0.620064377784729,-0.20786426961421967,0.08452221006155014,-0.5669017434120178,1.8541333675384521,0.09979086369276047,1.822511076927185,-1.5840723514556885,-1.0293629169464111,0.20045913755893707,0.04223082214593887,0.973747730255127,1.4825880527496338,0.25607869029045105,-0.003708189819008112,0.2418084740638733,0.5810227394104004,1.4370006322860718,-1.9004782438278198,-0.30331525206565857,-0.4869345724582672,0.6463854908943176,1.5399205684661865,2.1084342002868652,-0.15966446697711945,0.90147864818573,1.0570542812347412,0.7102826237678528,-0.4245888888835907,-0.8040794134140015,-0.3049716651439667,1.7090747356414795,0.5423783659934998,0.9449290633201599,-0.9840180277824402,1.0966540575027466,1.3814021348953247,-0.36545291543006897,-1.1927322149276733,0.3911566436290741,0.24082466959953308,0.3502110540866852,-1.6952235698699951,-0.11980977654457092,0.8205850124359131,-0.5825956463813782,0.1240718886256218,0.34197065234184265,-0.08872298896312714,0.5227459073066711,0.04102594405412674,-0.02522559091448784,1.3831664323806763,1.6315711736679077,-0.848112940788269,-1.2368799448013306,2.0142765045166016,-1.2400131225585938,-2.4577391147613525,0.5219665765762329,0.7425310015678406,1.8834662437438965,0.07836458086967468,-2.1747188568115234,0.4280944764614105,-0.32567694783210754,0.7850102186203003,-0.8504244089126587,0.5850164890289307,0.3325744867324829,0.3291833996772766,0.38428476452827454,1.4941166639328003,-0.8157949447631836,-0.6996042728424072,0.7621159553527832,0.5635060667991638,0.3018024265766144,-1.2326093912124634,-0.6563641428947449,0.5729061961174011,-0.16528691351413727,-0.15367518365383148,-2.2911248207092285,-0.5715063810348511,1.138122320175171,0.5673955082893372,-0.6158959865570068,0.13727489113807678,1.0856633186340332,-0.40604734420776367,-0.40883252024650574,-0.7982858419418335,0.8836941123008728,-0.05574151128530502,-1.4019736051559448,0.27983129024505615,1.307541012763977,1.4030965566635132,-0.30342769622802734,-1.5606718063354492,0.5033881664276123,-1.5330597162246704,0.8470706939697266,-0.5029423236846924,-0.09117391705513,-0.1431429088115692,0.19639188051223755,-2.061403751373291,2.0248215198516846,1.3102362155914307,-0.6800996661186218,2.1800763607025146,0.8046916127204895,1.1798114776611328,0.05447517707943916,0.16950704157352448,0.27377021312713623,0.1756715029478073,-0.7480525374412537,2.5695559978485107,2.4578514099121094,0.18987061083316803,-0.28595083951950073,1.0175330638885498,-0.07092451304197311,-0.4727090895175934,-0.04646722599864006,-0.56316739320755,-0.09819412976503372,-0.5769237279891968,0.5321735143661499,0.014753560535609722,1.3258066177368164,-0.10864468663930893,-0.12121450901031494,-0.7448942065238953,-0.20130768418312073,0.5883305072784424,0.44711267948150635,1.9925048351287842,0.7149675488471985,0.4570489227771759,-0.8169843554496765,-2.5227882862091064,-1.3945966958999634,1.5115633010864258,-2.355586290359497,-0.6060693860054016,0.7819063067436218,-0.08751179277896881,-0.5827648043632507,0.04735049977898598,0.42518991231918335,0.5000985264778137,1.4589725732803345,0.3766089975833893,-0.15535344183444977,-0.2884141802787781,-1.0559802055358887,0.15788589417934418,2.2734014987945557,-0.3347022831439972,-0.24976322054862976,-0.07985623180866241,-0.6467388272285461,0.14311999082565308,-1.0962095260620117,-0.5211118459701538,0.7022464871406555,-0.25784364342689514,-0.8413400053977966,1.6383849382400513,-0.44988709688186646,-0.1610960066318512,0.06976880878210068,-0.35442987084388733,0.564738392829895,-0.6027423739433289,-0.41867032647132874,0.40681004524230957,0.19483934342861176,0.4448431730270386,1.3419386148452759,0.7631343007087708,0.3142454922199249,1.169077754020691,-0.14908526837825775,0.7263576984405518,1.0500584840774536,0.7567309141159058,-1.7382173538208008,1.2241350412368774,0.8624055981636047,0.13632851839065552,1.960607886314392,1.764008641242981,1.0845052003860474,-0.9949843883514404,-0.09382656961679459,-0.4823214113712311,1.0377682447433472,1.0722686052322388,1.2134419679641724,-0.14716428518295288,1.178385853767395,1.2377965450286865,-1.467957854270935,0.12056456506252289,-0.9824626445770264,1.1785097122192383,0.934810221195221,0.8880816102027893,1.4952701330184937,1.9626857042312622,0.4719543159008026,-0.5729284286499023,-0.18442697823047638,-0.01622193120419979,0.6610023975372314,-0.1349942535161972,-0.42294394969940186,-0.06693445146083832,1.0994306802749634,0.3713456392288208,-1.415420651435852,-1.94044029712677,-1.0481961965560913,-1.2440564632415771,0.6386559009552002,-0.5821488499641418,2.9515442848205566,0.2206413298845291,0.968043863773346,1.2731337547302246,1.263611078262329,1.711346983909607,0.8843600749969482,-0.43532276153564453,0.7519408464431763,-1.0525766611099243,-0.9387974739074707,-3.6521527767181396,-0.6510240435600281,0.09562290459871292,-0.4246319532394409,0.17015312612056732,-2.17095947265625,1.2046655416488647,0.36974895000457764,0.13803188502788544,-1.0111888647079468,0.48319339752197266,0.5683578848838806,0.627698540687561,-0.4843525290489197,0.7016224265098572,-0.932537853717804,-0.43700236082077026,-1.0778977870941162,-0.7479422092437744,-0.2279846966266632,0.10740147531032562,-1.5627046823501587,0.6993049383163452,0.5898451805114746,0.008860604837536812,0.8175990581512451,0.1408449411392212,0.5043925046920776,1.104628562927246,-1.8942773342132568,-0.5485139489173889,1.296970248222351,-1.356145977973938,0.05967385321855545,0.5626437067985535,0.06948648393154144,-0.18563929200172424,-0.9241007566452026,0.7086806893348694,-0.19252660870552063,-0.5962610244750977,0.0866297259926796,-0.1354997754096985,-1.2565160989761353,0.3374553918838501,-0.4793420135974884,0.2524104416370392,0.7209308743476868,0.020587071776390076,-0.44862765073776245,-0.8008005023002625,-1.2175588607788086,0.49937620759010315,-0.9225984811782837,0.49989795684814453,0.1957952082157135,0.9606350064277649,0.4247172772884369,0.17648036777973175,-0.2138088047504425,1.137308120727539,0.21180252730846405,-0.6415600776672363,-0.20980392396450043,0.712277889251709,0.10272216796875,0.1543484777212143,-0.690239429473877,-0.9730573296546936,0.3650040030479431,-1.0853160619735718,-0.21427099406719208,-0.41048941016197205,-0.18330419063568115,-0.07345380634069443,0.1656496524810791,0.026105478405952454,0.2479402720928192,-0.7193567156791687,0.614662230014801,-0.4211236536502838,0.7788238525390625,2.16850209236145,-0.5861462354660034,0.43789142370224,0.20521101355552673,-0.0814724788069725,-0.5585458278656006,-0.47392526268959045,-0.4584622085094452,-0.41062211990356445,0.4824977517127991,-0.618044912815094,-0.5296798348426819,-0.34644344449043274,-1.0767115354537964,-0.12966713309288025,-0.25572124123573303,1.9163271188735962,1.0332720279693604,-0.7038701176643372,0.14588068425655365,0.05040956288576126,1.6619653701782227,0.7207757234573364,-0.2210298329591751,0.5461302995681763,0.43636786937713623,0.27487844228744507,-0.5650752186775208,0.36451905965805054,0.28499549627304077,0.40455639362335205,-0.4242338240146637,1.4242891073226929,0.3550650477409363,-0.8514772653579712,1.98545503616333,0.047704726457595825,-1.4427565336227417,-0.8753654956817627,0.8384696245193481,1.2612712383270264,2.206540822982788,-0.05935613065958023,-0.9412180185317993,1.2249056100845337,1.4724160432815552,-0.5570127367973328,-0.17048604786396027,0.7383578419685364,-0.19001981616020203,1.133721947669983,0.6827524304389954,0.5209375619888306,0.020553559064865112,0.7571407556533813,-0.8038185238838196,0.16575302183628082,-0.1513463258743286,0.6759191155433655,-0.2755008041858673,0.8690430521965027,1.3998336791992188,1.9679558277130127,0.3475399315357208,0.3499829173088074,0.8686423897743225,1.2958229780197144,-0.40440601110458374,0.9309317469596863,2.541874885559082,0.49512770771980286,0.7752246260643005,-1.1398719549179077,0.4133967459201813,0.13766047358512878,0.703260064125061,-0.7570361495018005,-0.6767508387565613,-1.675130009651184,0.934540867805481,0.6914578676223755,1.645945429801941,2.8109376430511475,-0.33736327290534973,-0.03239883854985237,-0.3314172923564911,-2.8594017028808594,-0.7300012111663818,0.25505030155181885,1.2144874334335327,-0.48115074634552,0.040733639150857925,-0.5208387970924377,1.2413668632507324,0.3906145393848419,-0.930443525314331,-0.5897824168205261,1.7017443180084229,1.28294038772583,-0.3194679617881775,0.8642467260360718,0.06485991925001144,-1.2201545238494873,-0.5669395327568054,-1.7913336753845215,0.03555087000131607,-0.8126198053359985,0.26194071769714355,0.4406481087207794,0.6573454737663269,-0.4547797739505768,-0.4504009187221527,2.1576194763183594,-0.4412635862827301,-0.10828053206205368,0.6045235395431519,-0.46200624108314514,-0.4521058201789856,0.6319668889045715,-5.464902400970459,-0.5053491592407227,-1.4480714797973633,-1.2527449131011963,-0.9145534038543701,1.1291077136993408,-0.20863661170005798,-0.5796937346458435,-0.06030793860554695,0.5819199681282043,0.4766663908958435,1.2271885871887207,1.0405277013778687,0.9320999979972839,-1.3467774391174316,-0.30380281805992126,0.3252887725830078,1.1977030038833618,-0.9364627003669739,-1.0719661712646484,1.4575961828231812,-0.7681967616081238,1.5218548774719238,2.2099080085754395,-2.3389856815338135,0.054066576063632965,1.2264158725738525,0.5669309496879578,-0.08467265218496323,0.47690558433532715,-1.1654434204101562,0.12179253250360489]]]", + "status": 200, + "statusText": "OK", + "headers": { + "access-control-allow-credentials": "true", + "connection": "keep-alive", + "content-type": "application/json", + "vary": "Origin, Access-Control-Request-Method, Access-Control-Request-Headers" + } + } + }, + "c6cc0728596096c42dd973d663209341763a3a47c2a03b99a817c39ff0c43bbe": { + "url": "https://api-inference.huggingface.co/models/vvmnnnkv/wine-quality", + "init": { + "headers": { + "Content-Type": "application/json" + }, + "method": "POST", + "body": "{\"inputs\":{\"data\":{\"fixed_acidity\":[\"7.4\",\"7.8\",\"10.3\"],\"volatile_acidity\":[\"0.7\",\"0.88\",\"0.32\"],\"citric_acid\":[\"0\",\"0\",\"0.45\"],\"residual_sugar\":[\"1.9\",\"2.6\",\"6.4\"],\"chlorides\":[\"0.076\",\"0.098\",\"0.073\"],\"free_sulfur_dioxide\":[\"11\",\"25\",\"5\"],\"total_sulfur_dioxide\":[\"34\",\"67\",\"13\"],\"density\":[\"0.9978\",\"0.9968\",\"0.9976\"],\"pH\":[\"3.51\",\"3.2\",\"3.23\"],\"sulphates\":[\"0.56\",\"0.68\",\"0.82\"],\"alcohol\":[\"9.4\",\"9.8\",\"12.6\"]}},\"options\":{}}" + }, + "response": { + "body": "[5,5,7]", + "status": 200, + "statusText": "OK", + "headers": { + "access-control-allow-credentials": "true", + "connection": "keep-alive", + "content-type": "application/json", + "vary": "Origin, Access-Control-Request-Method, Access-Control-Request-Headers" + } + } + }, + "5dfb672429f62697191179e5adc0834524425b203f791920564f1426c6b11f84": { + "url": "https://api-inference.huggingface.co/models/facebook/bart-base", + "init": { + "headers": { + "Content-Type": "application/json" + }, + "method": "POST", + "body": "{\"inputs\":\"That is a happy person\",\"options\":{\"wait_for_model\":true}}" + }, + "response": { + "body": "[[[2.6327691078186035,2.6453592777252197,1.3052051067352295,8.577006340026855,1.5544674396514893,2.01875376701355,-0.30269330739974976,-1.6798312664031982,-0.28186458349227905,0.09492917358875275,1.771086573600769,1.6456682682037354,1.1054763793945312,1.3152306079864502,-0.6316255331039429,-1.4265778064727783,-0.8356854915618896,2.5631885528564453,0.7716827392578125,-2.788865089416504,0.15160413086414337,-3.4371495246887207,1.9346787929534912,1.5406743288040161,1.266519546508789,-3.768359899520874,2.1116292476654053,-39.273956298828125,2.145085334777832,-1.950323462486267,1.301823377609253,-0.4244025945663452,0.8929333686828613,-1.377180576324463,-2.6194984912872314,0.893230676651001,0.40850505232810974,-0.23856042325496674,2.245931386947632,-1.2481021881103516,-0.39294523000717163,-2.5564393997192383,-0.8494167327880859,-1.258998155593872,-1.4443589448928833,2.519883632659912,-0.22763629257678986,-0.9765709638595581,-1.7004594802856445,-0.1924182027578354,1.0410606861114502,0.7207205295562744,-1.5042645931243896,-0.5260501503944397,-3.289754629135132,0.19623956084251404,0.8738362193107605,-1.323591709136963,0.8734084963798523,1.277661681175232,0.5723496675491333,1.2389498949050903,1.3519805669784546,-0.4491465389728546,-2.83613920211792,-0.7616981267929077,-3.5802547931671143,-0.8251965641975403,0.315495103597641,1.245935082435608,0.4587072432041168,0.07694731652736664,1.2299013137817383,-0.5309520959854126,-2.624972105026245,0.23797357082366943,1.625041127204895,-0.43409407138824463,-2.2566349506378174,0.597597599029541,-0.8906638026237488,3.022886276245117,-2.708209276199341,-0.9426450133323669,0.7089847326278687,0.9770891070365906,3.5416438579559326,0.5317324995994568,-0.1562861055135727,-3.0571796894073486,0.038586460053920746,1.1946673393249512,-0.6796606779098511,-0.42412349581718445,-0.38495534658432007,1.0222833156585693,-1.6894783973693848,1.2438315153121948,-1.9383044242858887,-1.0816975831985474,-0.7090418338775635,-2.946355104446411,-2.8434677124023438,-1.5707594156265259,1.8388422727584839,0.2813928425312042,1.1393002271652222,-0.5124748349189758,-1.1176214218139648,-1.7095433473587036,2.7074270248413086,-1.6994073390960693,-0.592393696308136,-0.27134957909584045,-0.5553380846977234,-0.9568490386009216,11.277636528015137,-3.2129828929901123,0.6749573945999146,-0.6490439176559448,1.5454261302947998,0.13967688381671906,0.5721508860588074,3.7591423988342285,-0.40494635701179504,-0.4710242450237274,-0.6200661063194275,1.6449300050735474,-1.6603127717971802,-0.4908033013343811,0.04799369350075722,1.5521804094314575,1.4490832090377808,2.475731372833252,-2.070208787918091,0.0652238130569458,-0.6392354369163513,2.823859214782715,0.8388698697090149,0.03394553065299988,1.166226863861084,-0.8820873498916626,-0.41444262862205505,2.2613253593444824,1.3735010623931885,0.9632089734077454,0.03155412897467613,-1.0158385038375854,-0.19174419343471527,5.052087306976318,-0.6052014827728271,-0.07739342004060745,1.1263684034347534,1.9930449724197388,-2.3958444595336914,1.849808931350708,-1.4432035684585571,-0.27498990297317505,0.16776248812675476,-0.059809938073158264,0.22386199235916138,1.0967140197753906,0.16599075496196747,-0.6816596388816833,-0.8333733677864075,-0.5129024982452393,-2.260133743286133,2.4172465801239014,-0.401541531085968,1.8671404123306274,-2.7339439392089844,-0.8555641174316406,-2.552561044692993,2.985064744949341,1.30388343334198,0.8892132639884949,3.256596565246582,1.3920823335647583,-2.5373752117156982,-2.7958953380584717,-0.49052804708480835,-0.8679682016372681,-0.8075771331787109,1.2956640720367432,0.561183512210846,0.5478009581565857,-1.3731416463851929,0.57084721326828,1.8824552297592163,-0.4576617181301117,1.405981183052063,-0.17243048548698425,0.33348894119262695,0.4367964267730713,-1.9064936637878418,0.402445524930954,2.46227765083313,-0.13031040132045746,1.3329774141311646,-1.1028163433074951,1.8067471981048584,-0.07888862490653992,0.3756299316883087,2.544121503829956,-1.306075096130371,-1.6484415531158447,-1.7027380466461182,1.6640466451644897,2.6514759063720703,0.27584001421928406,0.3483525812625885,2.343595027923584,1.9115525484085083,0.8007939457893372,-0.9314233064651489,-1.0497796535491943,0.02700815163552761,0.6709202527999878,-0.5655851364135742,-0.5223431587219238,0.7747825980186462,-0.918522298336029,0.810362696647644,-2.732142925262451,1.6618953943252563,2.3691883087158203,-1.7281690835952759,0.4593784511089325,-0.0302041657269001,-1.97107994556427,1.9544968605041504,0.17492900788784027,-1.309363603591919,-0.4386090934276581,2.2306129932403564,1.549528956413269,-0.34265992045402527,0.7719107866287231,-1.3549771308898926,-0.26447561383247375,0.4373049736022949,4.188180446624756,4.029538631439209,1.4087587594985962,-1.94767427444458,-0.6948322057723999,-1.6268149614334106,-1.9857807159423828,0.39352452754974365,0.8227952718734741,-3.213007926940918,1.3682746887207031,-1.196128487586975,-3.270768404006958,1.5212585926055908,0.07295642048120499,2.5744357109069824,0.2914597690105438,-0.9778546690940857,-0.014692635275423527,-0.7696856260299683,0.3493780493736267,0.5098415613174438,1.067221760749817,0.5142653584480286,-4.359039306640625,0.18696166574954987,1.6820954084396362,-0.9331218004226685,-2.8282339572906494,3.060692310333252,1.5831716060638428,2.5853168964385986,-0.13084593415260315,3.204176664352417,-1.128382921218872,-0.19193793833255768,-2.198295831680298,2.0135343074798584,0.27391648292541504,0.05898788943886757,2.1442058086395264,2.424851417541504,-2.203291177749634,-2.5340023040771484,-0.5443553924560547,-2.2258267402648926,0.0952853187918663,0.4328129291534424,2.590541124343872,2.1034159660339355,3.3536646366119385,-0.5587084293365479,1.1940960884094238,-0.025606485083699226,0.4558342695236206,-0.9888522028923035,-0.14430466294288635,-1.4267613887786865,-1.314673900604248,-1.9437063932418823,1.6476490497589111,0.618635356426239,2.772642135620117,-0.2870776653289795,-0.6556426882743835,0.02920384705066681,-3.1838605403900146,-0.5180241465568542,0.8613956570625305,2.422149896621704,-2.0303094387054443,-0.08969251066446304,-1.8750932216644287,-0.11267963796854019,1.7774637937545776,1.21846342086792,-0.7771739363670349,0.5707710385322571,3.711196184158325,3.2515528202056885,2.7759993076324463,-0.9121936559677124,2.732515335083008,1.0036189556121826,0.02436278946697712,0.6146583557128906,0.5303145051002502,-0.4092095196247101,-0.0723312571644783,-0.9705098867416382,0.5829629898071289,0.05335771664977074,-2.5133931636810303,-2.4582722187042236,-0.1438152939081192,0.9295763969421387,-0.4785788655281067,-0.6507534384727478,1.4072051048278809,-0.6049748063087463,1.220207929611206,-3.0711898803710938,-0.5735802054405212,2.6674158573150635,3.2001454830169678,-0.24022026360034943,2.434683084487915,0.2604522109031677,-1.1565555334091187,-0.2327384054660797,-2.3044497966766357,-0.4262140989303589,0.3447473347187042,-0.20364053547382355,-1.3263696432113647,1.1898672580718994,-0.19820654392242432,0.18083617091178894,0.7219167947769165,-2.1315464973449707,-0.08801307529211044,-1.3693667650222778,0.5256943702697754,1.1892236471176147,0.5545560717582703,1.1973941326141357,2.02580189704895,0.12087715417146683,0.4352532923221588,0.42175498604774475,1.2400364875793457,-0.7040072083473206,0.4162783622741699,-2.2852790355682373,-1.4444997310638428,-0.9547544717788696,-1.7447880506515503,0.6454455852508545,-1.5666711330413818,-1.4020061492919922,0.4236031770706177,-0.8927809000015259,-1.4210275411605835,-0.18446318805217743,0.1713816076517105,-1.5811245441436768,-0.5035741925239563,-2.6305813789367676,-0.5801562666893005,-1.4934062957763672,-2.9028635025024414,-0.2676565945148468,-1.745818018913269,-2.1898365020751953,0.12838546931743622,0.7120351195335388,-1.5260016918182373,-1.3000497817993164,-1.178033709526062,0.6662636399269104,-0.17723263800144196,1.654866099357605,1.8780086040496826,0.8111088275909424,1.4143249988555908,0.7641311287879944,0.1668105572462082,1.916225790977478,1.9448943138122559,-1.2060073614120483,-1.4962612390518188,-0.936199963092804,2.202606201171875,-0.6821251511573792,1.484081745147705,-1.607659101486206,0.028655271977186203,1.2684274911880493,-1.577764630317688,-1.3776586055755615,-0.14995825290679932,-2.6129391193389893,0.7258740067481995,-1.9994101524353027,1.1618688106536865,-1.287218689918518,0.33045902848243713,-1.1770561933517456,1.0925233364105225,-0.7381646037101746,-2.4038171768188477,-1.0681970119476318,0.686558187007904,-0.04254423826932907,1.780655026435852,1.624752163887024,-6.786214351654053,0.4096257984638214,-1.0916078090667725,0.4588412344455719,0.4726089537143707,0.67364901304245,-1.5277353525161743,-1.6603959798812866,-2.876011610031128,1.5558910369873047,-0.4022574722766876,-1.1357730627059937,1.603486180305481,-0.6076263785362244,0.4359613358974457,-3.628021478652954,1.4136059284210205,-2.2249529361724854,-1.5867314338684082,-0.4595612585544586,0.8155417442321777,0.3250997066497803,-0.7974511384963989,-0.42328009009361267,0.4099767506122589,-0.6663154363632202,-0.23449046909809113,-1.300401210784912,-2.1537601947784424,2.72271990776062,-1.2375763654708862,0.46920183300971985,-2.4724011421203613,0.2402438521385193,2.875272512435913,0.09124862402677536,0.23096929490566254,0.839152991771698,1.2145817279815674,0.9936429858207703,0.7922860980033875,2.2292332649230957,-1.8686691522598267,0.4312368631362915,-0.032809823751449585,2.3621037006378174,3.723109722137451,-0.0005738235777243972,0.6148241758346558,-0.45704907178878784,-0.590968906879425,0.5607117414474487,1.9577254056930542,1.3811653852462769,-0.7811329960823059,-1.1463955640792847,-0.8191857933998108,1.8422508239746094,-1.5271673202514648,-2.3907077312469482,2.689628839492798,1.2166972160339355,-2.1500983238220215,0.9400030374526978,0.970815122127533,-0.007178387138992548,-0.19802603125572205,-0.39256349205970764,0.9875094294548035,-1.6427645683288574,-0.5014933943748474,-0.6913623809814453,-1.2589632272720337,-2.5704596042633057,0.5493985414505005,3.5799524784088135,0.22705669701099396,1.323411226272583,0.2599920332431793,-1.0856691598892212,0.7449532151222229,0.8725796341896057,-1.462777018547058,0.5076864361763,-0.648901641368866,-2.890131711959839,-1.7680624723434448,0.3783694803714752,0.4050448536872864,2.873589038848877,2.962831497192383,0.7605141401290894,0.9782912731170654,0.5796534419059753,0.48261603713035583,0.22009503841400146,1.6801689863204956,-0.1386711299419403,1.6845519542694092,0.3168719410896301,2.3973679542541504,0.9603262543678284,4.023458003997803,-2.777233839035034,1.0812199115753174,1.0231266021728516,-1.9266812801361084,-1.2269494533538818,0.5668462514877319,0.2657429873943329,-1.5677708387374878,-0.09644570201635361,2.3628218173980713,-0.41314026713371277,-0.8430103063583374,-4.138833522796631,0.43076059222221375,-1.7401608228683472,-1.2606546878814697,1.4254653453826904,-2.243314027786255,-0.9925363063812256,2.7519798278808594,1.7938733100891113,1.8923450708389282,1.6904770135879517,0.6680296063423157,0.33007538318634033,1.5066919326782227,1.024924397468567,-2.8648226261138916,-1.2316443920135498,1.1213691234588623,0.9625868201255798,3.125398635864258,0.7347219586372375,-0.9409449696540833,-0.31669965386390686,-1.148497462272644,-0.9799544215202332,-1.821897268295288,-1.2948803901672363,-0.09790924191474915,-2.5319862365722656,1.56271231174469,2.170870542526245,-2.205296754837036,-0.18443088233470917,1.0534363985061646,1.478517770767212,-2.7624595165252686,-1.039659857749939,-0.13991309702396393,1.5009509325027466,2.058140277862549,0.9574118256568909,-1.3455173969268799,2.4785733222961426,-1.092527985572815,-1.186265230178833,-0.9116891622543335,1.827434778213501,1.0097191333770752,0.14704537391662598,0.1398383527994156,0.9442332983016968,-0.5874990224838257,0.5176494717597961,-0.07559181749820709,1.135815978050232,-0.41423577070236206,0.8659027218818665,-0.4749252498149872,0.6710817217826843,0.26252079010009766,-1.811240315437317,-4.670074462890625,-0.14727067947387695,1.3743923902511597,0.37897634506225586,0.5202925205230713,-3.1597447395324707,0.5856564044952393,0.2405623495578766,-1.2531590461730957,0.36913958191871643,-1.733688235282898,-0.000560401938855648,1.3232460021972656,-1.2069274187088013,1.1489026546478271,0.7968195080757141,-0.6890296936035156,-3.6581366062164307,0.9724026918411255,1.5316776037216187,-0.4128876328468323,2.423356056213379,0.5585626363754272,-4.432679176330566,1.1784052848815918,0.36996445059776306,0.49128788709640503,-1.005051851272583,1.512269139289856,-0.7150236368179321,1.1221388578414917,0.24210400879383087,0.007424607872962952,0.14445218443870544,-0.062194909900426865,-0.33020827174186707,0.21818536520004272,-0.44359463453292847,-0.047054924070835114,-1.99222731590271,4.209929466247559,0.045714665204286575,3.2592458724975586,-0.7588958740234375,0.8502215147018433,0.6070088148117065,-0.20878419280052185,-0.8129791617393494,1.3913038969039917,-0.03683946281671524,-0.4962560534477234,1.1827573776245117,2.3296055793762207,2.2624287605285645,2.1141295433044434,0.8571896553039551,0.5982787609100342,-0.008134768344461918,0.0648573786020279,1.1668699979782104,0.861781120300293,1.637622594833374,-2.572812795639038,3.770007371902466,1.5741075277328491,0.21316078305244446,-0.3428148329257965,0.05700799450278282,-1.5294243097305298,2.3123466968536377,-0.33649998903274536,-1.3020910024642944,0.8601783514022827,-1.9598960876464844,1.2254581451416016,-2.1144518852233887,0.8679369688034058,-0.6412451863288879,9.965169906616211,-2.619205951690674,-0.46232426166534424,3.346498489379883,0.6861492991447449,0.2975888252258301,-0.5545001029968262,0.6963003873825073,-1.7262548208236694,0.9112889766693115,1.2952054738998413,0.5170490741729736,-1.8080450296401978,2.4637718200683594,1.6653213500976562,-0.23044085502624512,-3.1117501258850098,0.3740794062614441,0.6814612150192261,-1.746937870979309,-3.6226658821105957,-2.9079434871673584,1.7916816473007202,1.5948948860168457,1.0293383598327637,-1.8344073295593262,-0.37924718856811523,0.67795729637146,-1.6344077587127686,-0.37834230065345764,0.008060857653617859,-0.1665925234556198,4.955474853515625,1.4192461967468262,1.125252604484558,-0.7239680886268616,-1.326097846031189,1.1910196542739868,0.030803533270955086,-1.302975058555603,0.4240013360977173,1.910307765007019,2.925645351409912,1.4998226165771484,0.17251962423324585,-1.312394380569458,1.5994853973388672,0.23323515057563782,-1.6630951166152954,0.8602064847946167,1.1653132438659668,3.516263484954834,0.4469311237335205,-0.2596239149570465,0.06515126675367355,0.6846265196800232,0.6699232459068298,-1.5281785726547241,-0.6041969656944275,-0.5746153593063354,-1.9463223218917847,2.157611608505249,-0.8428114056587219,-0.6420372724533081,4.8241705894470215,-0.8136173486709595,-0.9528058767318726,2.2378172874450684,-0.21968796849250793,-0.031621187925338745,0.9389642477035522,-3.4983317852020264,-1.287537693977356,-1.4800825119018555,1.5243570804595947,-0.3066766560077667,-0.7135071754455566],[1.3100659847259521,-1.2003549337387085,-1.4424279928207397,6.381330966949463,0.371046781539917,-1.3416361808776855,-2.8721745014190674,-1.0767122507095337,0.5800109505653381,-2.417372941970825,-0.8920078277587891,0.8722484111785889,0.17354264855384827,2.3405377864837646,0.8889999985694885,-2.7235376834869385,-1.1576038599014282,0.9083988666534424,1.0164337158203125,0.8130528330802917,-0.9350823163986206,-0.6034481525421143,-1.5337454080581665,-0.6828624606132507,2.6957905292510986,0.20376834273338318,0.3165612816810608,-11.030303001403809,-0.40690892934799194,-3.753319263458252,1.12582528591156,-1.9105331897735596,-0.6947618126869202,-2.6435201168060303,-0.783775806427002,2.878868579864502,0.49711453914642334,-0.9659867286682129,-0.5599448084831238,-0.6342671513557434,0.6739927530288696,-5.400841236114502,-0.3856703042984009,1.256827712059021,-0.08202102035284042,1.466958999633789,0.07034579664468765,1.1615314483642578,1.5772782564163208,0.2087186723947525,-0.951835572719574,0.8841895461082458,1.229984998703003,-0.13001969456672668,0.40702497959136963,-0.7365294098854065,-2.671527624130249,0.8538731336593628,-1.686302900314331,3.5205628871917725,0.7929311394691467,-0.4876211881637573,-0.3927839696407318,3.0703883171081543,0.06435150653123856,0.6573725342750549,-0.6093785166740417,1.1981909275054932,-2.5095369815826416,-1.5241990089416504,-0.4424348473548889,2.091801166534424,-1.9250869750976562,1.4343677759170532,-2.9636590480804443,0.30852529406547546,1.02699613571167,1.382881760597229,-2.907989978790283,0.4625501036643982,0.7453052997589111,3.0139927864074707,-0.2802067697048187,-0.3901950418949127,0.6480164527893066,-0.13379128277301788,0.8241251707077026,1.2805991172790527,1.0481507778167725,-2.475508213043213,-0.04103613644838333,-0.5831731557846069,-0.3748404383659363,-1.8011386394500732,-0.08576393127441406,1.09390127658844,-0.008172529749572277,2.2293052673339844,-1.185935378074646,-1.8045291900634766,-0.1372382938861847,0.6444628238677979,0.029774852097034454,0.7723698019981384,3.3592138290405273,2.5919876098632812,2.0747876167297363,1.154896855354309,-0.7666320204734802,0.6528064608573914,-0.2931171953678131,-0.5304418802261353,1.9581843614578247,-0.12603449821472168,-0.011836811900138855,-3.977019786834717,8.416182518005371,1.328282117843628,-0.7755232453346252,-0.5469819903373718,1.432584524154663,0.7750709056854248,-1.2330602407455444,-0.6365412473678589,-1.1688450574874878,0.4497257173061371,1.7803385257720947,-0.2102351188659668,-4.06069803237915,-1.144193172454834,-0.19452781975269318,0.3781408369541168,1.672411561012268,-1.4853054285049438,1.6787770986557007,-1.4286975860595703,-0.5778713822364807,-0.7419268488883972,1.1807509660720825,0.11336929351091385,-1.2509546279907227,0.5427688956260681,-0.7057086229324341,1.2062852382659912,0.3783719539642334,1.9761141538619995,0.8895789980888367,-0.639685332775116,2.592597007751465,5.818855285644531,-2.9821090698242188,-0.6003720164299011,1.5193699598312378,1.4705861806869507,-0.3048194944858551,0.2796732783317566,-1.1220316886901855,-1.0274782180786133,0.21829158067703247,0.5218328237533569,1.8036539554595947,0.03320075199007988,0.548554003238678,0.9237322807312012,1.785492181777954,-0.6293424367904663,-0.07883605360984802,-1.3605018854141235,0.8302801847457886,1.008410096168518,1.4208792448043823,0.2859685719013214,0.6161007881164551,0.26308703422546387,0.30706509947776794,-0.9040130376815796,1.0006530284881592,3.482494592666626,-1.6493653059005737,0.9782010316848755,-2.720238208770752,-0.6030027866363525,-1.0796442031860352,-1.2544503211975098,0.5893778204917908,2.544511556625366,0.08332512527704239,2.9367966651916504,-1.2409849166870117,0.047735121101140976,1.1544854640960693,-1.2475610971450806,0.8771067261695862,-0.7405202984809875,-1.2758773565292358,0.2719409167766571,0.06923884898424149,-2.3039090633392334,-0.7648794651031494,-0.8787439465522766,1.4456287622451782,0.5816510915756226,1.021405816078186,0.7618565559387207,1.2691346406936646,-0.3849852979183197,-1.3321024179458618,-0.7609171271324158,-0.5521531701087952,0.14895875751972198,-0.32900071144104004,1.5020956993103027,3.14451003074646,2.3910629749298096,-1.361558198928833,0.10114501416683197,-0.12701483070850372,-0.6089471578598022,-1.7166969776153564,0.02352874167263508,-1.2300068140029907,-0.45037752389907837,0.9806634783744812,0.538783609867096,1.863690972328186,-0.039451152086257935,-0.702364981174469,0.4665146768093109,-4.546266555786133,0.9895696043968201,0.5844258666038513,-0.7936576008796692,2.1153690814971924,-1.2094374895095825,10.499680519104004,1.3383337259292603,-0.03467302396893501,0.9031655192375183,0.1537410467863083,0.27884191274642944,1.1282134056091309,1.3963656425476074,1.867244005203247,0.9320924878120422,-1.9329838752746582,-1.1074546575546265,-1.3057113885879517,0.40788471698760986,1.609590768814087,0.35078537464141846,-1.4311922788619995,0.9549822807312012,0.4819413125514984,-1.5440329313278198,0.7608354687690735,-0.0016398013103753328,3.449411630630493,-0.4569217562675476,2.6271917819976807,0.4289593994617462,0.8912976980209351,0.1492713838815689,-0.4213612377643585,-1.1831128597259521,1.692101001739502,-0.14762729406356812,0.4716190993785858,1.0935262441635132,-0.5475400686264038,-2.2486767768859863,-0.8468164205551147,-1.2089515924453735,2.310678482055664,-2.3237171173095703,-0.8217182755470276,1.0021076202392578,0.13811029493808746,-0.051430247724056244,0.33809736371040344,-0.1824973225593567,0.6423764824867249,0.9584786891937256,1.867197036743164,-1.9712245464324951,-0.01907743141055107,0.5876367688179016,0.7931348085403442,0.6690406203269958,-0.40448054671287537,-0.3487480580806732,-0.27237820625305176,1.7988150119781494,0.7072635293006897,-3.2010533809661865,-0.0600130558013916,1.5817716121673584,-1.4422154426574707,-1.6753218173980713,1.2321650981903076,4.227056980133057,-3.5107932090759277,-0.9414188861846924,-0.1545693576335907,1.2709439992904663,-2.7127768993377686,-0.6206881403923035,2.39304518699646,-0.7112131118774414,-0.20747089385986328,0.8111198544502258,1.809927225112915,-3.5273430347442627,0.13906539976596832,0.767755925655365,1.4288606643676758,0.7154411673545837,2.260781764984131,0.8622539043426514,0.8760586380958557,1.5910253524780273,-0.39159896969795227,0.34510231018066406,-1.0521982908248901,0.6906348466873169,1.054680347442627,1.4036768674850464,-1.125465989112854,-1.7052146196365356,-0.8814045786857605,0.7597402334213257,-3.0202019214630127,-0.9587489366531372,3.4436731338500977,2.3506572246551514,1.2098132371902466,-0.5889712572097778,0.4710316061973572,0.024207299575209618,-1.2787288427352905,-0.8693680763244629,1.33164381980896,-0.12111026048660278,0.10590165108442307,-2.934048891067505,1.3506802320480347,0.4430457055568695,-0.30884963274002075,-2.1097545623779297,-0.06361164152622223,1.4247314929962158,-2.1176440715789795,-1.6804612874984741,1.6516129970550537,-0.03316802158951759,0.43035247921943665,0.7334040403366089,1.052273154258728,2.0797479152679443,0.9881003499031067,0.82795649766922,-1.3387693166732788,-0.005313599016517401,-0.3466838300228119,-1.468653678894043,1.193835735321045,0.20005285739898682,0.5015819072723389,-0.9736108779907227,1.295889973640442,-0.7815321087837219,2.0281760692596436,-1.1724839210510254,0.06295908987522125,0.7659573554992676,-1.1667712926864624,-0.1597459763288498,-0.5755336880683899,-1.2162545919418335,-2.442387580871582,0.4829139709472656,-0.3909865915775299,1.2451398372650146,-0.2240484058856964,-1.9910085201263428,-1.8303391933441162,-0.43207255005836487,0.022762639448046684,1.2253199815750122,-0.7055553197860718,-1.7523746490478516,2.4452521800994873,0.9654025435447693,-0.1822492629289627,-2.340388059616089,-1.1749435663223267,-0.12017893046140671,0.23035895824432373,0.4593682885169983,0.15939712524414062,-2.4747862815856934,1.0550673007965088,0.48776185512542725,0.9637517929077148,1.037438988685608,-0.21346597373485565,2.3229711055755615,-0.2810923755168915,0.3122389614582062,-0.9296461939811707,-0.5768474340438843,-1.284027338027954,-0.04959799721837044,-0.28783857822418213,3.264385461807251,2.349313974380493,2.605679988861084,1.4389113187789917,0.29159271717071533,-1.0454480648040771,-1.408739686012268,-0.7454043626785278,-2.192605972290039,0.3760206699371338,0.38620638847351074,2.1839535236358643,-0.969586193561554,0.19639578461647034,-0.08382505178451538,-1.8878979682922363,2.0846776962280273,-1.0204421281814575,0.6340850591659546,0.7084619402885437,1.3859069347381592,0.9914629459381104,-1.3510082960128784,1.640000820159912,-6.242516994476318,1.047221064567566,0.16637581586837769,-4.440094470977783,0.03175158426165581,-0.6900586485862732,0.7489888668060303,0.6707077026367188,-0.13801760971546173,1.5674715042114258,-1.3292145729064941,0.9685918092727661,-0.5922027826309204,-0.6866904497146606,-0.5929325222969055,-0.9141981601715088,2.7053568363189697,0.47531285881996155,-0.601164698600769,0.46280637383461,1.6644160747528076,-1.2893924713134766,-0.8774561882019043,0.041553352028131485,1.5504329204559326,-0.972320020198822,0.027128534391522408,0.22341598570346832,1.1906499862670898,-0.9020897150039673,-1.1704047918319702,-0.09633710980415344,0.8782116770744324,-1.8986351490020752,-1.5011979341506958,0.7871537804603577,0.5288273692131042,-2.8908274173736572,1.8385823965072632,2.9093129634857178,-0.2635398507118225,1.672195553779602,1.7275499105453491,-1.112064003944397,-0.7341378927230835,0.7684791088104248,1.095552682876587,0.9341794848442078,1.0534310340881348,1.6278167963027954,-0.6293074488639832,1.7813748121261597,1.194579839706421,0.9069937467575073,-0.39096930623054504,-1.4030333757400513,0.5215890407562256,-0.30148831009864807,-0.4765748679637909,-0.1920056790113449,-17.305030822753906,1.4275363683700562,1.6085110902786255,-0.13745160400867462,1.3894048929214478,-0.10920018702745438,-0.024212460964918137,1.1697489023208618,-1.042184829711914,2.125014305114746,0.4573572874069214,0.5831671357154846,0.9758636951446533,-2.8983218669891357,2.374488353729248,0.9647382497787476,0.6785547137260437,-0.5963543057441711,-2.3791861534118652,-0.6596410274505615,2.0616507530212402,-0.8548721075057983,-1.2333749532699585,-2.602329969406128,0.665705680847168,-1.0643587112426758,-2.578937530517578,-0.14469197392463684,-2.907935857772827,-1.980216383934021,-0.7475212812423706,-0.9540917277336121,2.2704861164093018,-0.27308687567710876,-2.4686672687530518,2.1992809772491455,-0.7472804188728333,-0.11480236053466797,0.4528163969516754,0.7474411129951477,1.0560486316680908,1.2893834114074707,1.1972455978393555,-0.1624961942434311,1.2377947568893433,-0.46073341369628906,1.234795331954956,0.43838804960250854,0.3200515806674957,-0.5892156958580017,1.002031683921814,1.0183990001678467,0.02494908683001995,0.01938319019973278,0.2762119472026825,-1.893101453781128,-1.255906581878662,-1.8744421005249023,-1.9561278820037842,-1.4457396268844604,1.6058534383773804,-3.2265141010284424,-0.08172344416379929,0.6330342292785645,0.1274593323469162,1.7570282220840454,1.6563400030136108,0.9135215878486633,-0.2890373170375824,1.0262082815170288,-2.7770657539367676,-2.0443663597106934,1.7464005947113037,0.11510967463254929,0.7375797033309937,-1.3230606317520142,0.07565727084875107,-10.699810981750488,0.19074319303035736,0.7208093404769897,1.9343514442443848,-4.216656684875488,2.040759563446045,0.4823494851589203,0.7998862266540527,1.755893588066101,1.2957748174667358,-1.1305173635482788,-2.911276340484619,-1.6120824813842773,-0.4296112358570099,-3.032972812652588,1.0176477432250977,-1.2119969129562378,1.048079013824463,1.7960771322250366,0.2292146533727646,0.7182028889656067,-0.7853769063949585,1.8081047534942627,0.5127912759780884,0.8072605133056641,0.283130019903183,0.9014150500297546,-0.19892798364162445,1.990696668624878,0.761181116104126,0.8738130927085876,-1.0206738710403442,0.013741420581936836,-3.0649473667144775,0.8184009790420532,-0.0007165037677623332,1.5948387384414673,-1.6070759296417236,-2.000816822052002,-4.236108779907227,-1.1070915460586548,0.05719679966568947,0.27761057019233704,-0.5420946478843689,1.1243945360183716,-0.9100291132926941,-1.1632757186889648,0.6261246204376221,-0.03790000081062317,0.7429251074790955,1.407921314239502,-0.15386219322681427,1.560111403465271,0.43116870522499084,0.37652233242988586,-2.195237874984741,0.34336739778518677,0.6385736465454102,1.4964747428894043,1.4651411771774292,2.7024178504943848,-0.08952030539512634,-3.8476462364196777,0.37064850330352783,1.3602937459945679,0.7492469549179077,-0.7742717862129211,-1.42903733253479,-1.324672818183899,0.13350266218185425,-0.13626104593276978,-0.9553713202476501,2.122664451599121,0.2668638229370117,-0.5165311098098755,-0.8122753500938416,-0.6112475991249084,0.6585128307342529,2.359748125076294,1.9344254732131958,-2.2878594398498535,0.3131236433982849,1.2039401531219482,-1.0838453769683838,4.620462894439697,-3.6056690216064453,-1.109728217124939,2.4255340099334717,0.8569322824478149,0.8857746720314026,0.6661059260368347,1.964145541191101,0.6063762903213501,1.5736874341964722,1.0190544128417969,-1.6990926265716553,1.4648641347885132,1.5354182720184326,-0.5361339449882507,-0.06582564115524292,0.34132423996925354,-0.03179559484124184,1.2769663333892822,0.31513556838035583,2.0377442836761475,1.0813472270965576,0.867678165435791,-0.32465294003486633,2.284249782562256,0.5755296349525452,-0.01486868504434824,1.336321473121643,-1.6769938468933105,0.6137896776199341,1.909544587135315,3.0407826900482178,0.9068095088005066,-1.1773853302001953,0.8840954303741455,-0.5750478506088257,-1.9034425020217896,-0.2057156264781952,0.6538562774658203,0.22412391006946564,0.33197689056396484,0.16739913821220398,-1.442071795463562,0.46285945177078247,0.701113224029541,-2.1986207962036133,-1.1430672407150269,-0.29829293489456177,4.420086860656738,-0.5601284503936768,0.8525668382644653,2.632899284362793,-1.9824663400650024,-1.7757229804992676,0.9289757609367371,0.011343658901751041,2.0931754112243652,2.072862148284912,0.06214899569749832,0.2752634286880493,1.7860841751098633,0.07847292721271515,-0.6752103567123413,-0.7021360993385315,-0.042860906571149826,3.339905261993408,0.5151444673538208,4.100020408630371,0.5496223568916321,-0.8651376962661743,-1.9277535676956177,0.843806266784668,-2.009061813354492,-0.34289366006851196,-1.3325945138931274,-1.1925839185714722,-0.06681890040636063,-1.125683307647705,-1.994932770729065,-0.521468460559845,-0.3108031749725342,-0.9771515727043152,-0.08217564225196838,0.5118866562843323,1.8579158782958984,0.27969592809677124,-0.9456449151039124,3.0819947719573975,1.9829133749008179,-0.7126912474632263,3.542118549346924,1.7502280473709106,-0.258662611246109,0.3383600413799286,2.937758445739746,4.071400165557861,-1.644010305404663,0.9929226636886597,-0.6027230024337769,-3.785815715789795,0.26164278388023376,1.3383381366729736,1.4537533521652222,0.6117772459983826,1.563482642173767,1.3266414403915405,-1.3387640714645386,0.13619489967823029,-3.161761999130249,0.8065140843391418],[0.1775895655155182,0.17345139384269714,-1.0129650831222534,0.2078336924314499,0.4525648355484009,-0.9243069887161255,-1.4605721235275269,-0.7607513666152954,-0.12256887555122375,3.903533458709717,-0.6925187110900879,-1.6446715593338013,1.8490692377090454,0.8673762083053589,1.3091861009597778,-1.5199384689331055,-0.7512651681900024,1.5606083869934082,2.193427324295044,0.07121874392032623,-0.2827828824520111,0.8553162217140198,-0.25067391991615295,-3.532240629196167,-2.215468645095825,-0.1324586123228073,1.1699464321136475,5.763859272003174,-0.8474318385124207,-4.169266700744629,-0.6024739146232605,0.6996561288833618,-1.589130163192749,-0.7726148962974548,-2.009845018386841,1.4915544986724854,0.5015348792076111,1.9805322885513306,0.8974149227142334,-0.7891691327095032,2.733896493911743,1.8479000329971313,-0.41695454716682434,-0.3328242897987366,-3.2801952362060547,1.2065811157226562,-1.3482081890106201,-0.4294913113117218,-2.04067325592041,2.631181240081787,-2.0311129093170166,-1.0318454504013062,-0.2883961498737335,1.0402547121047974,0.9976804256439209,-0.04034879431128502,0.35255730152130127,0.5472396016120911,-0.29202502965927124,1.9989445209503174,-0.1534976363182068,-0.8677858114242554,-0.9379785060882568,-1.1643575429916382,-0.07642209529876709,0.4481718838214874,0.14788633584976196,0.03068200685083866,1.4948025941848755,-1.1661953926086426,-1.0512341260910034,2.22359037399292,1.286879301071167,-0.7082365155220032,-0.2262825220823288,0.44024232029914856,1.6630700826644897,0.6024980545043945,1.0874115228652954,1.8927843570709229,-0.20538286864757538,-0.048032984137535095,1.6281229257583618,-0.4719516336917877,2.079037666320801,-1.0037287473678589,1.5925506353378296,-0.18238429725170135,0.013680225238204002,0.9260625243186951,0.9036290645599365,0.951566755771637,-1.593780755996704,-1.9025756120681763,0.425830602645874,2.767676591873169,0.5760931968688965,0.8165928721427917,1.8619086742401123,-1.7929974794387817,0.3170671761035919,1.5944498777389526,-1.2004140615463257,1.654691457748413,0.35427942872047424,0.9028095602989197,1.5343701839447021,1.1811844110488892,-1.604634165763855,-0.40305981040000916,-3.7997806072235107,-4.932522296905518,2.0373120307922363,1.3597025871276855,2.6547131538391113,-2.0842456817626953,-9.303990364074707,-0.6992129683494568,5.290666103363037,-1.5705081224441528,1.4094510078430176,4.619822025299072,-2.3959479331970215,0.7939955592155457,-0.7375012636184692,0.3895827531814575,0.7889947891235352,0.5043631792068481,-1.0403530597686768,-1.074110507965088,-0.507169783115387,-0.4006788432598114,0.33751606941223145,-0.3697480857372284,1.5869522094726562,-0.8678873777389526,0.23528049886226654,-0.15523645281791687,0.607670247554779,0.40631669759750366,-1.1078057289123535,-0.6725729703903198,-0.6047786474227905,-1.0111067295074463,0.21199651062488556,1.3431694507598877,0.6182793974876404,0.12394700199365616,-0.2260654866695404,-0.8888964653015137,-0.7790216207504272,-1.7088533639907837,0.6943467259407043,-1.5746538639068604,1.1436491012573242,-3.410555839538574,-1.2410173416137695,-0.834566593170166,-0.5960379242897034,0.07804756611585617,-0.6547924280166626,0.011279786936938763,-0.647686243057251,0.29014191031455994,1.5122754573822021,-0.8051891922950745,0.18822918832302094,0.5821332931518555,1.3021275997161865,-0.9918659329414368,1.6511098146438599,2.6323418617248535,-2.715531826019287,-1.6621809005737305,-0.9012817144393921,-0.9290851354598999,1.9927889108657837,2.738396167755127,-2.062894344329834,-0.3652345836162567,0.04903814569115639,0.5743765830993652,-0.19557863473892212,-0.8726875185966492,-1.4717365503311157,1.7947356700897217,1.7216342687606812,2.635524272918701,-1.382509708404541,-1.1672950983047485,-0.4255232810974121,-0.03398110717535019,-1.6314823627471924,-0.6335697174072266,-2.2617075443267822,1.4302256107330322,0.23995716869831085,0.6725670099258423,-0.28574880957603455,-1.5854754447937012,1.5020484924316406,-1.0707590579986572,-1.2057024240493774,0.27181363105773926,-1.2825099229812622,-1.880014419555664,0.31490325927734375,-1.8045427799224854,0.8519375324249268,2.0211286544799805,1.9341676235198975,1.6555863618850708,0.45478591322898865,1.7665820121765137,-0.6006588935852051,0.1790323406457901,0.9442095160484314,1.0248042345046997,-2.5519728660583496,-1.0599993467330933,0.30204468965530396,-1.482029676437378,1.24044930934906,0.5557240843772888,-0.5238257050514221,1.2785474061965942,-1.008668303489685,0.2446116954088211,1.661712646484375,0.14697781205177307,-3.0267484188079834,0.8149537444114685,1.229563593864441,-2.8154218196868896,-0.22501954436302185,-0.6821171641349792,0.22420649230480194,-0.707515299320221,-1.2095829248428345,-0.770853579044342,1.073150634765625,1.4655877351760864,1.8745286464691162,1.8316140174865723,-2.1208152770996094,2.577099084854126,-0.3985711634159088,-0.8453208208084106,1.3095773458480835,1.5477694272994995,-0.6788234710693359,0.08130565285682678,1.44367253780365,0.6146059036254883,1.6576014757156372,-1.5956933498382568,0.8597577214241028,-0.004502635914832354,1.8626941442489624,0.6912226676940918,-1.3015671968460083,0.07100589573383331,-1.5255941152572632,-0.8891223073005676,-1.0630024671554565,0.9385864734649658,-2.289539098739624,3.240630865097046,-0.4035739302635193,1.9410853385925293,-1.980080485343933,-0.012810527347028255,-0.4674970209598541,-0.9802374243736267,-0.7310056686401367,0.9315477609634399,1.2215746641159058,-1.43296217918396,-0.6581911444664001,0.9825416207313538,-2.197633743286133,1.3870412111282349,0.2441251575946808,-1.6361830234527588,-1.4542866945266724,-1.781097650527954,2.434767484664917,2.32977557182312,0.035202622413635254,-0.8304089307785034,1.971105933189392,1.7327433824539185,-1.3186112642288208,0.24904821813106537,-0.1474088430404663,-0.40166717767715454,0.9885687232017517,-0.19474190473556519,1.5329515933990479,0.6321792006492615,-2.968494415283203,-1.8525476455688477,-1.853312611579895,0.3158651292324066,1.9126615524291992,-0.8351391553878784,2.2291758060455322,-1.0126532316207886,-0.4560134708881378,-0.523930549621582,-0.1164485365152359,-0.5674197673797607,-0.5973113179206848,-0.4929741621017456,0.224519744515419,1.2531449794769287,2.2881791591644287,0.2908133268356323,0.36119136214256287,1.9228955507278442,-0.8771349191665649,-0.9121729135513306,1.7526047229766846,-0.5691835880279541,1.5490576028823853,1.3942103385925293,1.0066941976547241,-0.4637509286403656,0.5202749371528625,0.834601104259491,-2.476241111755371,0.4811728298664093,2.382875442504883,1.181095838546753,1.381367802619934,-0.8378834128379822,1.9956212043762207,-0.35024261474609375,1.0890153646469116,0.5720507502555847,1.28077232837677,-1.06034517288208,-2.2941415309906006,-1.7842259407043457,-1.903336524963379,1.7625973224639893,-0.29778674244880676,-2.8659005165100098,-0.5031330585479736,-0.2858904302120209,0.8811993598937988,-1.511070966720581,-0.970278799533844,-0.3755338191986084,1.1349937915802002,0.8780155181884766,0.9298462271690369,0.7479840517044067,2.0506584644317627,0.36445510387420654,0.3918510675430298,0.02945917844772339,-0.12005753070116043,-0.7217638492584229,-0.6792437434196472,-0.472598671913147,0.5940015316009521,-0.22723400592803955,-1.1447545289993286,-0.04907156154513359,0.3157665431499481,-1.7113418579101562,0.7294895648956299,-0.25709500908851624,-0.05323690176010132,-1.572171688079834,2.844975709915161,-1.1270909309387207,-0.9682253003120422,0.7678735852241516,-1.9461944103240967,0.6514346599578857,0.20636022090911865,1.2204550504684448,-0.16038812696933746,1.7230795621871948,0.7911666631698608,0.089511938393116,-1.2987079620361328,-2.315753221511841,0.9501640796661377,0.3523212671279907,-1.9924805164337158,-4.111092567443848,-0.045935533940792084,2.01774263381958,0.37113913893699646,0.20727621018886566,1.6367985010147095,-0.02482881024479866,1.0562894344329834,-0.7950605750083923,-0.2076261192560196,0.49953457713127136,0.2250923216342926,2.4081082344055176,-1.0006005764007568,-1.0286149978637695,0.218697190284729,-1.6453148126602173,-0.24836263060569763,-1.2460662126541138,0.15668678283691406,1.6081382036209106,3.6885077953338623,3.622617721557617,-2.164684534072876,1.5566128492355347,0.6916061043739319,-0.6240307688713074,0.9699490070343018,-1.7780320644378662,0.007707276847213507,0.06750252842903137,2.096601724624634,2.348905324935913,0.3338518440723419,-1.4502366781234741,-0.0006056164274923503,3.8296873569488525,-1.620690941810608,0.43243393301963806,-1.059710144996643,-0.31745898723602295,0.1328449845314026,0.7444734573364258,4.230249404907227,-3.5623953342437744,1.0301488637924194,0.8350037932395935,-1.945802927017212,-0.07650619745254517,-0.8637362122535706,1.0266883373260498,-2.691816806793213,1.2399767637252808,3.618546962738037,1.4216175079345703,1.7975196838378906,-0.520590603351593,0.6863684058189392,0.20909357070922852,-0.9951533079147339,0.8078685998916626,0.6279269456863403,0.31969794631004333,-0.8831178545951843,0.3135720491409302,-0.7869863510131836,-1.0426666736602783,-1.084089756011963,-0.3944586515426636,0.03126386180520058,-0.44329947233200073,-0.7268413305282593,2.6371309757232666,-0.7300541400909424,-1.686070442199707,-0.9374390840530396,0.6930257678031921,-0.41047459840774536,-1.5768229961395264,-0.7233344316482544,0.7922518253326416,-1.8658149242401123,0.46582722663879395,1.4192821979522705,0.2367621213197708,1.910573959350586,0.18670475482940674,-0.8410566449165344,0.5783547163009644,-0.35917890071868896,1.549816608428955,-2.903207778930664,0.1071942001581192,1.2395436763763428,-3.995375633239746,1.9521703720092773,-0.5642843842506409,1.143571138381958,0.06135592609643936,0.325161874294281,0.015403778292238712,0.06849801540374756,1.4813063144683838,1.1402502059936523,-8.532806396484375,1.1892645359039307,2.4406261444091797,0.4672701060771942,0.11041904985904694,-0.5336995124816895,2.973440408706665,-0.5800397396087646,0.35638850927352905,2.1686182022094727,1.116875171661377,-0.3914179503917694,0.23758652806282043,0.1395546793937683,-0.3317754864692688,1.030327320098877,1.166349172592163,-3.541571617126465,0.18747147917747498,-0.7758973836898804,-0.8948625326156616,-1.5466554164886475,-0.9180603623390198,-1.4322503805160522,0.45502743124961853,1.0337340831756592,-0.03976597636938095,2.2779464721679688,-2.1742336750030518,0.5976590514183044,0.7085779905319214,-1.327831506729126,0.6364666223526001,-1.4109431505203247,-0.6363648176193237,1.6486107110977173,-1.3050878047943115,0.4463014602661133,-1.6835442781448364,0.62734454870224,-0.7898479104042053,-0.885830283164978,1.3013200759887695,0.7500410079956055,0.9786115288734436,2.9091455936431885,-0.4864189624786377,-1.2425200939178467,0.9038015604019165,0.33989349007606506,0.003984364680945873,0.7387046813964844,1.8761552572250366,2.228409767150879,-0.0800103172659874,-0.9793314337730408,1.171931266784668,-1.1687008142471313,-2.258700132369995,1.2106345891952515,-0.39487338066101074,0.2756291627883911,-0.34441614151000977,-0.9091082811355591,0.8931828737258911,1.0733751058578491,1.4675003290176392,-6.092832565307617,-0.3881654143333435,0.36612755060195923,0.3415733277797699,-1.1985217332839966,-0.9935873746871948,-0.11172967404127121,-1.053623080253601,-0.9631977081298828,-0.4150250554084778,-5.824918270111084,-0.27066487073898315,0.43584582209587097,2.0983264446258545,-2.543117046356201,4.690905570983887,0.8041181564331055,2.4448869228363037,1.5724782943725586,0.5068783164024353,0.23594343662261963,-0.8211768865585327,0.224254310131073,4.030733108520508,-0.345200777053833,-1.1425330638885498,0.37342676520347595,0.9391551613807678,2.507237434387207,-0.4419407844543457,1.1615049839019775,-0.9540097117424011,0.9268940091133118,-1.062357783317566,-0.006720957346260548,-0.09267611056566238,0.3202681541442871,1.5485554933547974,0.3663795292377472,0.1483907550573349,1.736386775970459,-1.8044503927230835,0.13799764215946198,-1.169797420501709,0.6999868154525757,-2.650186061859131,1.4686758518218994,-2.0433452129364014,-1.756163239479065,-2.5169126987457275,1.284124493598938,2.0613420009613037,2.486481189727783,0.7884506583213806,0.6440810561180115,-0.5410450100898743,0.08921948820352554,0.1282249093055725,1.451682686805725,0.7620882987976074,-0.7824970483779907,-1.0997222661972046,2.3444182872772217,1.4944573640823364,0.695928692817688,1.0006215572357178,-0.8413056135177612,1.7494679689407349,-0.0548931248486042,0.9815982580184937,3.9439308643341064,-0.38749295473098755,3.192342519760132,1.8891873359680176,0.2773629128932953,1.850118637084961,2.091409921646118,0.8198440074920654,-0.30870988965034485,0.9368505477905273,-0.25548437237739563,0.32319164276123047,-0.8083481788635254,1.3419346809387207,0.23756130039691925,2.46244740486145,-0.8707411289215088,-1.3003140687942505,-0.7169519662857056,0.24806585907936096,-2.0428519248962402,0.7145156860351562,0.6886506080627441,1.3410903215408325,-0.023496903479099274,1.329727292060852,-2.7998971939086914,1.7567322254180908,1.1080906391143799,-2.549673318862915,-1.2651879787445068,1.2631345987319946,-0.20423796772956848,-0.5344139337539673,0.6009221076965332,2.3128979206085205,0.5145180225372314,-1.1416147947311401,1.4218159914016724,1.6938008069992065,1.738027572631836,-1.202947735786438,-0.2559374272823334,-1.1709033250808716,0.5086763501167297,1.362286925315857,1.0799444913864136,-1.4618794918060303,1.323972463607788,0.0710950568318367,3.3566856384277344,0.40135684609413147,-1.1315248012542725,2.7316367626190186,2.2629380226135254,-0.29974856972694397,0.07592276483774185,-0.9052039980888367,1.3988893032073975,1.1535462141036987,-0.9741449356079102,-1.491769552230835,0.02860751748085022,0.3613092303276062,-1.1747558116912842,0.3466028869152069,-0.18790178000926971,0.2845011055469513,1.3285868167877197,-0.9563999772071838,-1.895271897315979,0.041374243795871735,-1.0894993543624878,-3.8912606239318848,2.1406779289245605,-1.1384589672088623,-0.4864499568939209,1.1479012966156006,1.5990231037139893,-0.21981941163539886,2.049407482147217,2.3533596992492676,0.21983513236045837,0.6818553805351257,-2.0823965072631836,1.1337990760803223,-0.908614456653595,2.8687801361083984,-0.09362032264471054,-1.7205764055252075,0.2834339439868927,-1.0516362190246582,0.525348961353302,-2.06655216217041,-1.0980865955352783,2.8288450241088867,-1.726540207862854,-0.7311906218528748,-1.6947100162506104,0.37653088569641113,1.0541462898254395,1.1455131769180298,-3.636533737182617,-2.1603140830993652,-0.3955686092376709,-1.236405849456787,1.2630845308303833,2.370943069458008,0.2696293592453003,-1.2850168943405151,-0.12574785947799683,1.0268824100494385,0.2120915949344635,1.634969711303711,3.1012775897979736,-0.6850689649581909,-0.7207840085029602,-0.8761759400367737,2.120809555053711,1.0051923990249634,-2.488510847091675,-0.9131665825843811,0.671319305896759,1.6110528707504272,2.7307372093200684,2.0091333389282227,-0.01854083128273487,0.018954798579216003,-0.7786937355995178,1.0386732816696167,1.7603795528411865,-0.4632999002933502,-0.20326608419418335,0.49206236004829407],[0.7535684704780579,-3.255464792251587,1.4998815059661865,-2.2725415229797363,-0.9353546500205994,-2.6692888736724854,-0.2449936717748642,-1.4193438291549683,-1.0976712703704834,-5.256091117858887,-0.12872645258903503,0.3602883815765381,1.5918841361999512,1.2582645416259766,1.9865642786026,-3.285599708557129,-1.3122246265411377,0.7642244100570679,1.3678992986679077,1.117275357246399,0.01753617450594902,0.5344800353050232,-0.8713924288749695,0.46168437600135803,0.5434301495552063,-0.8302425742149353,0.904621958732605,10.59628677368164,-1.253900170326233,-4.490818500518799,-0.26149770617485046,-0.07317094504833221,-0.4755955934524536,0.209244042634964,-2.440523862838745,-6.3077521324157715,-0.9979667067527771,0.11617058515548706,-1.1664172410964966,0.9980371594429016,-0.9410974979400635,2.4596452713012695,-2.1890926361083984,-1.9577677249908447,-1.4125192165374756,1.8860220909118652,0.7209610939025879,-0.17841027677059174,-0.21173933148384094,0.49905121326446533,0.08140994608402252,1.7598966360092163,1.925710916519165,-0.055701397359371185,1.299971342086792,-0.4729725420475006,0.6692432761192322,0.24382543563842773,0.37002459168434143,2.173124313354492,-0.5560804009437561,0.9360427260398865,1.1164989471435547,-0.10209033638238907,0.20697623491287231,2.3634443283081055,-0.22776757180690765,-1.9063793420791626,-0.37055307626724243,-0.8488492369651794,0.42233914136886597,-2.043919801712036,1.2007272243499756,0.1657152771949768,0.6743090748786926,0.4320901036262512,0.7975162863731384,0.6634849309921265,0.15528647601604462,0.9143482446670532,2.629941463470459,0.24378834664821625,1.3320618867874146,-0.3369007110595703,3.1983766555786133,0.4597555100917816,0.5418453812599182,-0.7335842847824097,-0.525303840637207,0.05514613538980484,0.8900097608566284,-0.1816997230052948,2.9159674644470215,0.07487346231937408,0.24680504202842712,1.8814747333526611,0.38461989164352417,0.5356249809265137,0.8609488606452942,0.6431954503059387,-0.8018103837966919,1.045824408531189,-0.8850085139274597,-0.9079597592353821,0.6688445210456848,2.788599967956543,-0.7250286340713501,2.9753329753875732,-0.4317671060562134,0.8215616345405579,-0.9409300684928894,1.587526798248291,0.6539364457130432,0.9377561807632446,1.1864696741104126,0.6740822196006775,-4.3673505783081055,-0.0742054283618927,3.134126901626587,-1.1832486391067505,3.0471739768981934,0.8442324995994568,-1.484800934791565,0.773836612701416,-0.6979148983955383,0.19733357429504395,0.8196707367897034,2.066147804260254,-0.08056218177080154,-0.1528111696243286,-1.0726677179336548,0.4630955457687378,-0.7464464902877808,-1.6736255884170532,-1.1107597351074219,-0.8915406465530396,0.5669139623641968,0.526348888874054,0.21466948091983795,3.1115334033966064,-1.5398787260055542,-1.5580523014068604,0.5541965961456299,0.2559230923652649,-0.8236872553825378,1.1415488719940186,0.27483662962913513,0.0502292774617672,-0.6620153784751892,1.9737098217010498,-1.5152406692504883,0.057582125067710876,1.436395287513733,0.2731470763683319,-0.2274547964334488,-0.9365720152854919,2.314774990081787,-1.7609139680862427,-0.03051244094967842,1.5097788572311401,-0.9371063113212585,0.8927710652351379,1.2636127471923828,0.9604794979095459,1.8068188428878784,-0.8427860140800476,1.2634549140930176,-2.2553629875183105,2.1064388751983643,1.555997371673584,-0.5245644450187683,0.2932301461696625,0.9654485583305359,-0.2646341025829315,0.26954150199890137,-0.41361042857170105,-0.8010072708129883,0.21979673206806183,-0.09062124788761139,0.7323839664459229,-0.5842486023902893,-0.66319739818573,-0.7964116334915161,0.6140713691711426,-1.122083067893982,0.1620332896709442,-0.09952989965677261,1.0658468008041382,0.28827616572380066,-1.1827731132507324,-1.6579253673553467,1.6989754438400269,-0.057827018201351166,-0.10930857807397842,-1.6832120418548584,-0.1715451031923294,-0.016857987269759178,3.1218044757843018,1.5616635084152222,-2.0902223587036133,-0.028299400582909584,0.6049705147743225,-0.7918699383735657,0.8343222141265869,-0.23414164781570435,-0.9086311459541321,0.46780088543891907,0.9423068761825562,-0.9046698212623596,0.3861098289489746,0.12564125657081604,0.43456679582595825,2.54368257522583,-0.14064577221870422,-3.0365540981292725,0.04585802182555199,-1.5161969661712646,-2.3479530811309814,1.5259180068969727,-0.23225155472755432,-0.4458519220352173,-0.2713257968425751,-0.9200176000595093,-0.05110049247741699,-0.246193990111351,1.6443849802017212,1.0541667938232422,-0.12449339777231216,-0.24986672401428223,0.33150407671928406,-0.3644886910915375,1.0967961549758911,0.5629488229751587,-1.121591329574585,-5.12074089050293,-0.6295880675315857,-1.3862422704696655,-0.20072901248931885,-0.49230992794036865,-0.07911764830350876,3.475020170211792,1.108902096748352,1.2545439004898071,0.5155984163284302,0.46249115467071533,1.1111878156661987,-0.8514794707298279,-0.08118090778589249,1.3606220483779907,1.4873219728469849,1.4225337505340576,1.3317184448242188,-0.5728845596313477,1.4960607290267944,0.9746941328048706,-2.506981134414673,2.0283730030059814,0.5539141893386841,1.408362865447998,1.5141527652740479,-1.9940881729125977,-0.23070187866687775,-1.0064741373062134,-1.766814112663269,0.43348369002342224,0.0410742349922657,-0.17416909337043762,1.8169540166854858,-1.3878569602966309,2.126128673553467,-1.4163321256637573,-0.5337471961975098,-0.6679098606109619,-2.9345338344573975,-1.1060900688171387,-1.0207645893096924,0.21366432309150696,-0.785351037979126,-1.4392311573028564,0.9426096677780151,-0.6862632036209106,0.9118494391441345,2.2637670040130615,-1.1785858869552612,0.16014564037322998,-2.3775339126586914,2.305349588394165,1.1117101907730103,-0.6859583258628845,-0.5609148740768433,1.0568193197250366,0.35075199604034424,0.8975974321365356,-0.6970277428627014,-2.8332791328430176,-0.45431771874427795,2.0212440490722656,0.9502944946289062,1.2018424272537231,0.849481463432312,-0.23729124665260315,0.031738314777612686,-1.765967607498169,-0.5402211546897888,0.11583664268255234,0.4593627154827118,1.9542536735534668,-1.1490726470947266,1.8211725950241089,-1.0135267972946167,1.5933393239974976,-0.26677215099334717,-1.725958228111267,-0.12142414599657059,2.112809896469116,1.6089835166931152,1.479394555091858,-1.6071723699569702,1.3287469148635864,1.3776485919952393,-0.91443932056427,1.127827763557434,-1.0003985166549683,-2.0813260078430176,2.08834171295166,2.763681650161743,-1.0266979932785034,-0.7510159611701965,1.7754199504852295,2.318308115005493,-2.367011070251465,-0.9492253661155701,4.630610466003418,0.8643500208854675,0.2899608612060547,3.924340009689331,0.32906782627105713,0.8931497931480408,-0.8326960802078247,-0.6778756380081177,2.001845598220825,-0.7837613224983215,-1.0973206758499146,-0.45802414417266846,-2.7585835456848145,2.1743760108947754,0.8506487607955933,-1.9119634628295898,0.4244542419910431,1.5434967279434204,0.5985972285270691,0.10915826261043549,0.7614342570304871,1.2642191648483276,-0.5528773069381714,-1.209066390991211,-0.8672894835472107,1.0811753273010254,-0.8332569599151611,0.8706936240196228,-1.015897512435913,-0.8400282859802246,-0.061244815587997437,-0.9817757606506348,0.4373137056827545,-0.7091456055641174,-0.8327614068984985,-0.6456843018531799,-1.876143455505371,-0.1074974536895752,-0.9842441082000732,-1.1948130130767822,-3.154777765274048,-3.074152946472168,-2.0714826583862305,-0.6627283692359924,0.00929183978587389,-1.0338324308395386,0.7798158526420593,0.568494975566864,-0.15464043617248535,1.7020577192306519,0.5507734417915344,-0.8779664635658264,-1.0391019582748413,0.7188020944595337,0.8100721836090088,-0.6579349040985107,-2.6589574813842773,-0.9338392019271851,0.8889667987823486,1.2172770500183105,0.4651713967323303,1.392317533493042,1.3559197187423706,1.6365246772766113,2.4531660079956055,-0.36371561884880066,2.540008306503296,0.8938755989074707,1.4803675413131714,-0.9355475902557373,0.8222941160202026,2.0048208236694336,0.40025803446769714,1.1890517473220825,1.837424635887146,0.86282879114151,-0.6143993139266968,-1.0655438899993896,-1.8585253953933716,-0.2806808650493622,0.023799344897270203,0.22425492107868195,-0.22362986207008362,2.4728150367736816,-1.7532594203948975,-0.2581588625907898,-1.6277652978897095,-0.7035396099090576,0.7585598826408386,-1.7102241516113281,-0.5348914861679077,-0.7984450459480286,2.1103575229644775,0.309260755777359,1.1461130380630493,1.8888115882873535,-2.4788978099823,3.038273334503174,1.0027568340301514,0.08951427042484283,-0.018173756077885628,1.297147512435913,-0.3469657301902771,0.39439085125923157,1.1960713863372803,-2.672797918319702,0.7105851769447327,1.5206553936004639,-1.3062572479248047,-0.9854077100753784,0.3615535795688629,-1.9957119226455688,-0.5685475468635559,0.42516109347343445,1.4318856000900269,2.1433658599853516,-0.05305143818259239,-0.4044569432735443,-0.8202071785926819,-1.6548935174942017,-0.7839459180831909,0.18056471645832062,-0.47094103693962097,-0.6435152888298035,-0.367787629365921,-2.7676079273223877,0.7800412774085999,-0.055133964866399765,0.07422906905412674,-0.9968095421791077,1.000348448753357,-1.0010521411895752,0.8162327408790588,-1.4711520671844482,-2.3866209983825684,-0.9847604632377625,-0.5423311591148376,0.9045374989509583,-1.1668059825897217,0.3766052722930908,1.757614016532898,-0.5268539190292358,-0.7750255465507507,0.5531328916549683,-1.3780508041381836,-0.6941456198692322,0.789574146270752,-0.018359201028943062,0.19142431020736694,1.132021427154541,1.4569742679595947,-0.32046547532081604,-0.8466821908950806,-0.8979051113128662,1.358626365661621,-0.3702447712421417,3.72511887550354,-0.2310171276330948,-1.2295035123825073,1.6957849264144897,0.11580503731966019,-2.338120222091675,-0.04869178310036659,1.305354356765747,0.4411349892616272,-9.410102844238281,0.899898886680603,1.7319806814193726,0.22618719935417175,0.7921435236930847,-0.3693092167377472,1.4364137649536133,0.763913631439209,-1.1913126707077026,1.271491527557373,0.9566185474395752,2.206733226776123,-0.28297358751296997,0.6993476152420044,0.5313627123832703,1.1455613374710083,-0.9372788071632385,-2.844132900238037,-0.09390685707330704,0.09411028772592545,1.7251561880111694,-2.109532356262207,-0.2877708375453949,-0.5806586146354675,0.15711012482643127,-0.06282464414834976,-0.5494025349617004,0.28998735547065735,0.35835522413253784,1.3146458864212036,-0.19618640840053558,-1.6172230243682861,2.0467679500579834,-2.4516522884368896,-0.7792982459068298,-0.6057330965995789,-0.6472386717796326,-0.33104100823402405,0.864080548286438,0.3822484016418457,0.06561800837516785,-0.7090026140213013,-1.5450679063796997,-0.1168748065829277,-0.13450978696346283,-0.37829774618148804,0.36371129751205444,-1.0040308237075806,0.6269405484199524,0.8143284916877747,-0.13871483504772186,0.47874823212623596,2.0092899799346924,0.15841208398342133,0.4167156219482422,-0.03448089212179184,1.143038272857666,-1.6517928838729858,-0.26674145460128784,-0.14830373227596283,-0.8043153285980225,-1.6915078163146973,-0.11528251320123672,-0.9056842923164368,1.100072979927063,1.1884992122650146,1.5429714918136597,-1.2683453559875488,-1.1618294715881348,-2.1036555767059326,-2.2072808742523193,0.7942875623703003,-2.051990032196045,-1.6435410976409912,-1.1694151163101196,-2.4785733222961426,0.2590281069278717,2.247730016708374,-1.9334590435028076,0.02206757850944996,2.852445125579834,-1.0873321294784546,1.8872251510620117,-2.110762119293213,-0.30918481945991516,1.913332223892212,1.563605546951294,0.3638967275619507,-0.8626269698143005,-0.15997102856636047,1.2525405883789062,-1.3017005920410156,-0.37986648082733154,1.9167935848236084,0.6966919898986816,1.8241796493530273,-1.209350824356079,0.05117836967110634,-0.5317579507827759,2.1801745891571045,1.093819260597229,-0.7754841446876526,0.23945735394954681,1.9122074842453003,0.1825854331254959,0.2084386795759201,-1.2892731428146362,2.741448163986206,-1.5795950889587402,-0.6657899618148804,-0.6304340958595276,-0.9974127411842346,-1.885708212852478,-0.8754814267158508,0.19790740311145782,-0.3518555760383606,-3.885178804397583,-1.8456157445907593,-0.2811480462551117,-0.10310067981481552,-0.8098812699317932,1.1660265922546387,0.11942975223064423,0.9500415921211243,2.1242146492004395,-0.6584305763244629,1.6257922649383545,3.2426886558532715,-0.5848039388656616,-0.8552671074867249,0.15651650726795197,0.14102129638195038,-0.5531082153320312,-0.6657750010490417,-1.4072684049606323,-0.46698838472366333,1.656990647315979,2.2490546703338623,0.6335529685020447,6.506866931915283,0.5010117292404175,1.1026663780212402,1.3564810752868652,1.9355913400650024,0.5830866098403931,1.7110408544540405,-0.4746212363243103,-0.6622548699378967,0.45915549993515015,2.0486178398132324,0.776744544506073,-2.991487741470337,0.06922245770692825,1.2341275215148926,-0.5531164407730103,-1.0813523530960083,-0.21478824317455292,-0.785464882850647,0.04974792152643204,-0.3179660439491272,1.235131859779358,2.30077862739563,-0.0903758779168129,-0.2559024393558502,-0.6031166315078735,1.7216650247573853,-1.609204649925232,-0.25675734877586365,0.1434784233570099,0.33040300011634827,0.30606329441070557,2.4061973094940186,1.9052647352218628,0.461045503616333,0.7038608193397522,-0.12299085408449173,-1.4095232486724854,-0.4903513491153717,-0.6653847098350525,0.20852060616016388,0.19623884558677673,1.2865403890609741,-0.1835314929485321,0.2270708531141281,-0.6043618321418762,-1.6981061697006226,1.6583091020584106,0.0996459424495697,0.10787392407655716,0.8025929927825928,1.4630718231201172,3.5311923027038574,0.24921031296253204,0.8503695130348206,-0.7367123961448669,0.37223130464553833,-1.4870597124099731,-0.7064541578292847,-0.1938881278038025,1.267899990081787,-0.10986452549695969,0.204700767993927,-0.24674472212791443,-0.7045387029647827,1.4277530908584595,0.8120787739753723,-0.6792888641357422,-1.8708388805389404,1.9855740070343018,-1.2578856945037842,-0.26664477586746216,1.0517398118972778,1.2339272499084473,2.2642691135406494,1.8965182304382324,0.8410605788230896,1.5600700378417969,1.9374299049377441,1.8856843709945679,-0.5124037861824036,0.4107826054096222,-0.458884060382843,-0.24097225069999695,0.694039523601532,1.9451779127120972,-0.6127798557281494,1.1248539686203003,-0.11456836760044098,0.08774422854185104,-0.39612725377082825,-0.691497266292572,-1.18418288230896,0.17829400300979614,-0.07316000759601593,-0.8240985870361328,-1.70613431930542,-0.18493683636188507,0.40939974784851074,0.5637011528015137,-0.6511971354484558,-0.8651113510131836,-2.1194138526916504,-0.02105197124183178,-0.018392397090792656,0.32288509607315063,-0.5034367442131042,0.018105391412973404,-0.4005848169326782,1.6142902374267578,2.0507235527038574,1.2314352989196777,1.6022900342941284,1.9545842409133911,-1.2575132846832275,-0.4655611515045166,0.8114150166511536,-1.0492560863494873,0.03795011714100838,0.10080594569444656,1.241971492767334,-0.49834147095680237,0.17107601463794708,0.6116106510162354,1.0063689947128296,1.5559371709823608,1.0236144065856934,-0.28237518668174744,1.427849292755127,0.7918955683708191,0.36572498083114624,1.6801810264587402],[-0.7900505661964417,0.5536542534828186,2.4879634380340576,-0.36976486444473267,-1.8131684064865112,-2.155123233795166,0.5316091775894165,-1.0558655261993408,-1.0692592859268188,1.0723503828048706,-1.731627345085144,0.5786290168762207,1.1154983043670654,-0.043249718844890594,0.5738820433616638,0.0033294546883553267,-1.4571011066436768,0.9458649158477783,0.23373839259147644,-0.13317537307739258,0.637757420539856,-0.51938796043396,-2.0798065662384033,-0.06767424941062927,-2.444117546081543,-0.4492114782333374,0.32188257575035095,7.221447944641113,0.24437938630580902,-4.5336222648620605,-1.6710928678512573,0.48803243041038513,-0.8979651927947998,1.4029581546783447,-0.9590592384338379,5.430063247680664,-0.18176423013210297,0.9070441722869873,-0.7059182524681091,0.5807271599769592,-1.9715913534164429,0.8313937187194824,0.8874316811561584,-1.6861515045166016,-0.25545424222946167,1.9272444248199463,-1.1906986236572266,-0.7379112243652344,0.03129569813609123,1.5616177320480347,1.0226970911026,1.2086584568023682,0.5704212784767151,0.2186995893716812,2.0444881916046143,0.9448449015617371,3.1260156631469727,-0.7357922792434692,1.0397584438323975,1.8258018493652344,-1.2273544073104858,-0.8786872625350952,-0.3384716808795929,1.9931186437606812,1.145704984664917,0.03769439458847046,-0.35589390993118286,-0.022875282913446426,0.8926059007644653,-1.0258429050445557,-1.0864157676696777,0.30715829133987427,0.8714508414268494,-0.1332545280456543,-2.3398101329803467,0.4026424288749695,-2.5996904373168945,-0.2627488374710083,-1.0583206415176392,0.008203714154660702,0.9657568335533142,-1.5688685178756714,1.7361187934875488,-1.8810255527496338,1.2584164142608643,-1.140626072883606,-0.6804855465888977,-0.27296656370162964,1.6565088033676147,0.25888633728027344,-2.5992915630340576,-0.08512142300605774,1.4733256101608276,0.06816750019788742,-0.013789297081530094,1.1176843643188477,-1.5290474891662598,-0.7641053795814514,-1.3824998140335083,-0.9727045297622681,-0.1297222226858139,1.745455026626587,-0.875138521194458,0.11338424682617188,0.0315418541431427,1.1771297454833984,2.1721277236938477,1.9334079027175903,0.05159454792737961,-0.26641789078712463,-1.9825490713119507,2.9471070766448975,-1.0059754848480225,0.4981982409954071,-0.4979366660118103,0.8283663988113403,3.6022918224334717,1.5613104104995728,2.4364168643951416,-2.1733314990997314,1.1151609420776367,-0.39340946078300476,-0.15702037513256073,2.3284709453582764,-1.0345118045806885,-0.07471289485692978,1.507810354232788,1.7076541185379028,1.5242798328399658,0.7644065022468567,-1.368079662322998,0.968365490436554,-0.6747528910636902,-1.2268259525299072,0.45821574330329895,0.369038462638855,-0.358298122882843,-0.5920573472976685,1.5497987270355225,2.498723030090332,1.2579193115234375,0.4555162787437439,0.8007240891456604,-2.25764799118042,-0.9659155011177063,1.2686771154403687,0.2773236036300659,-0.1805073320865631,2.516469955444336,-0.34904173016548157,1.206137776374817,0.8716676831245422,0.8129189610481262,-0.7375436425209045,1.1796931028366089,0.6598517894744873,-1.2473416328430176,0.12895174324512482,0.6173195838928223,1.2682431936264038,0.6137536764144897,-1.1797919273376465,-0.35280880331993103,-0.5593725442886353,0.9218148589134216,-0.2851313352584839,-0.4006642997264862,0.0703984722495079,1.3930803537368774,0.6620244979858398,0.13763658702373505,-0.1623515486717224,1.9106472730636597,1.50932776927948,-0.4271632134914398,0.36901190876960754,-0.6966888308525085,-0.2002621293067932,0.5956642031669617,1.2912169694900513,0.5254952311515808,0.48773083090782166,-0.46562808752059937,-0.23742780089378357,-0.6582348942756653,0.2508499026298523,-0.0972466841340065,-0.6094371676445007,0.7255904078483582,-0.13779079914093018,-0.5257472991943359,0.6967230439186096,1.1546283960342407,0.6298754215240479,-0.7410745024681091,-0.38899433612823486,0.5519934296607971,1.162025809288025,1.6209391355514526,0.85481196641922,0.18482911586761475,-1.2074933052062988,-1.565124273300171,1.8815133571624756,0.12155139446258545,2.217496633529663,3.651414394378662,-0.678873598575592,-0.03342333808541298,0.9805267453193665,-0.16217973828315735,0.30422255396842957,0.2087784707546234,-2.2731263637542725,-0.3111126720905304,-0.15389147400856018,0.44807910919189453,-0.5592385530471802,4.453538417816162,-0.130707785487175,-1.714328646659851,0.010468581691384315,-0.8853572607040405,-0.10939959436655045,-1.2750755548477173,1.1808639764785767,1.6797372102737427,-2.343968629837036,-0.01683097518980503,-1.3121848106384277,1.2955626249313354,0.39316365122795105,2.17625093460083,-1.9159597158432007,-5.114616394042969,2.431110382080078,0.3182474672794342,0.9244674444198608,-0.6860154867172241,0.12890364229679108,3.173004627227783,0.515052855014801,1.8933050632476807,2.1735332012176514,1.0965238809585571,-0.0887836441397667,-0.4704138934612274,0.9512099027633667,0.8735331296920776,1.8426125049591064,-0.3392197787761688,0.6809316873550415,-0.5637386441230774,-1.3131223917007446,-0.17786072194576263,-2.4622554779052734,-0.10866402834653854,-2.6271586418151855,0.6053597331047058,0.5808754563331604,-1.715093731880188,0.5324902534484863,0.845895528793335,-1.4212899208068848,-1.481604814529419,-1.5449786186218262,-0.4623262882232666,2.078200101852417,-0.5189043283462524,-0.9869754314422607,-1.5223501920700073,-0.07869177311658859,0.6111583113670349,-0.5106487274169922,0.21339298784732819,0.9260116219520569,0.8735257983207703,1.1148180961608887,-0.9779119491577148,0.573251485824585,-1.2761489152908325,0.9312170743942261,1.93833327293396,0.3919117748737335,-1.9117547273635864,-2.7688064575195312,1.388918399810791,0.7048730254173279,2.7222838401794434,-0.1099257543683052,-0.671388566493988,0.2182196080684662,1.9150536060333252,0.9294936656951904,-1.8026736974716187,0.5634395480155945,-0.4906564950942993,-0.012366770766675472,0.7583215236663818,0.8136447072029114,0.6250104904174805,0.6398678421974182,0.15051515400409698,0.49975553154945374,0.3475698232650757,3.277996301651001,0.9818536043167114,-0.8730451464653015,2.2207529544830322,0.30736181139945984,2.054515838623047,-0.9289352893829346,-0.1432940810918808,-0.7527881860733032,2.192042827606201,-0.13927145302295685,0.5178915858268738,-2.1621861457824707,0.04920564591884613,2.267784595489502,-0.8329964280128479,2.4216606616973877,-0.8133676052093506,0.0956219881772995,2.0005128383636475,1.247122049331665,-0.9807192087173462,0.5765680074691772,-0.10072629153728485,2.3889124393463135,-1.56809663772583,-2.2658097743988037,4.268401622772217,1.8048272132873535,-1.1153087615966797,2.5210375785827637,0.913661777973175,1.1436140537261963,-1.740644097328186,-0.5477367043495178,0.531813383102417,-3.1221871376037598,-1.7252029180526733,1.9370611906051636,-3.2164552211761475,1.741369605064392,0.7155977487564087,-1.1624306440353394,-0.941605269908905,3.0077834129333496,1.4699492454528809,0.4078853726387024,0.627739429473877,-0.4488416016101837,0.04956155642867088,0.8678414225578308,-2.1523735523223877,1.5597212314605713,1.8371596336364746,0.19676214456558228,-0.3239281177520752,-1.0269911289215088,-0.6982055902481079,0.10231637954711914,0.48436275124549866,-0.40342068672180176,0.1847047358751297,-1.2131788730621338,0.13475462794303894,-1.5710653066635132,0.3855131268501282,1.3818057775497437,0.33657342195510864,-1.172339916229248,-2.4966964721679688,-0.9861623048782349,-2.7374565601348877,-0.31007978320121765,-0.10741692781448364,2.929752826690674,-0.3507811427116394,-0.21867741644382477,-0.2830951511859894,-1.373123049736023,-1.051108956336975,1.637615442276001,-0.7578116059303284,0.08801180869340897,-0.9317631125450134,-0.055435508489608765,1.1452139616012573,1.3469874858856201,0.40147557854652405,-1.26865553855896,0.5499879717826843,-1.1458581686019897,0.9317296743392944,-1.411360263824463,2.7022652626037598,1.1807920932769775,0.5896598100662231,-1.5185010433197021,4.264692783355713,-0.12053336948156357,-1.128358244895935,0.7929593920707703,0.11930395662784576,2.8015859127044678,0.702897310256958,-1.4815809726715088,0.19790619611740112,-0.35837411880493164,0.5248852968215942,1.0394009351730347,4.10858154296875,-0.3292626440525055,-1.5843453407287598,-0.0803145170211792,0.3927168846130371,-0.965916097164154,0.7467218041419983,-0.49153462052345276,-0.821255624294281,-0.1893671751022339,1.6652100086212158,-0.286508709192276,1.8191081285476685,-0.15570487082004547,-0.29674428701400757,0.9718229174613953,-0.06884951144456863,0.5757468938827515,-0.7057245969772339,-1.390916109085083,0.13948887586593628,-1.0538386106491089,2.477630138397217,-4.562804698944092,1.0604736804962158,1.9177275896072388,1.3516154289245605,0.2786347568035126,1.200290560722351,-0.5799407958984375,-1.7720438241958618,0.49370649456977844,0.46766233444213867,0.1142825186252594,0.6305271983146667,-1.2583379745483398,-0.29464292526245117,-2.29725980758667,-0.9033634066581726,0.10812292993068695,0.695169985294342,-1.1641321182250977,-1.5070042610168457,-0.40290796756744385,0.8568985462188721,-0.7560741901397705,-0.0012916232226416469,-0.6860104203224182,-0.27210164070129395,-1.5649964809417725,-0.20223575830459595,-0.05120707303285599,-0.4416539967060089,0.12220693379640579,0.6550562381744385,-0.7752112746238708,1.6516990661621094,-0.6519544124603271,0.8072171211242676,-0.7717651724815369,0.41113850474357605,2.1602983474731445,-0.0558871328830719,-0.4712255001068115,-0.08781658858060837,-2.508023262023926,0.24488751590251923,1.5946630239486694,2.4659626483917236,1.3341604471206665,-2.498647928237915,0.20688240230083466,2.393350839614868,0.0531320720911026,2.731052875518799,2.6491589546203613,0.9357331395149231,1.2940374612808228,0.585677444934845,-1.1143863201141357,0.42529362440109253,2.5841994285583496,-1.4096581935882568,-11.470370292663574,0.3411058187484741,-0.2639739215373993,-1.421059012413025,0.44824329018592834,-0.5256425142288208,1.1293739080429077,-1.946094036102295,0.11596756428480148,1.5845131874084473,-0.9905644655227661,1.0737518072128296,0.16588591039180756,-1.4362080097198486,-0.4710308313369751,0.9625287652015686,-3.144869089126587,-1.2270920276641846,-0.7172380685806274,0.006142076104879379,0.0941527932882309,-0.9507791996002197,-1.8688551187515259,-0.20985354483127594,-1.6138757467269897,-0.519952118396759,-0.7439438104629517,0.9071779251098633,0.38704153895378113,2.6240975856781006,-0.5365260243415833,-0.1609034538269043,1.7799193859100342,-0.7819014191627502,-0.7072787880897522,1.1331113576889038,0.01770329475402832,-0.7202858328819275,1.3383424282073975,-0.6995457410812378,0.22403794527053833,-0.33584481477737427,-0.27249249815940857,-0.09253910183906555,1.0954556465148926,-0.009242485277354717,-0.5128897428512573,0.16561588644981384,0.532604992389679,2.3170435428619385,0.05865996703505516,0.46927985548973083,0.4190368354320526,1.1345452070236206,0.8916864395141602,-0.8366659879684448,-1.2379165887832642,-1.8349359035491943,0.1454729288816452,1.6553821563720703,5.600323677062988,-0.01826624944806099,0.1082962304353714,-0.14438948035240173,1.2470417022705078,-2.2042500972747803,0.6289373636245728,1.7736300230026245,-0.710402250289917,-1.3585033416748047,2.1960530281066895,1.7711904048919678,-0.721783459186554,-1.9884295463562012,0.2910182774066925,-1.3887101411819458,0.10227411240339279,0.19689659774303436,-0.9548308849334717,0.4880528748035431,0.04858984798192978,-0.931309163570404,0.5159744620323181,-0.2288089245557785,-1.2087944746017456,0.8729075193405151,0.4299902319908142,-0.1677607148885727,-0.8474066257476807,0.337425172328949,0.0776144415140152,-1.5258119106292725,-1.2766283750534058,-0.3763909637928009,-1.1512447595596313,0.8835857510566711,0.38973236083984375,0.4093504548072815,-1.1320792436599731,1.38552987575531,1.3845270872116089,0.8150449991226196,0.8597627282142639,1.359212875366211,-0.9412115216255188,0.6012792587280273,0.2533469796180725,1.8575502634048462,-0.16150741279125214,-0.3774866461753845,-0.39893877506256104,-0.23002873361110687,-0.8216775059700012,-1.518463373184204,0.6506877541542053,0.05641882121562958,-2.636610746383667,-0.3026430904865265,-1.4240086078643799,-0.1691112220287323,0.6502720713615417,0.9998571276664734,-0.0777805969119072,-0.4237738251686096,0.5714365243911743,1.4771047830581665,0.8063449859619141,-0.11036233603954315,0.4331595301628113,0.07716694474220276,-0.525540292263031,-0.6555728912353516,-3.350332736968994,-1.1411070823669434,0.1107674241065979,0.8074787855148315,-0.6076721549034119,1.73757004737854,-0.9812555313110352,4.128915786743164,0.9861131906509399,-0.6338734030723572,1.473175287246704,1.344781517982483,-0.32476845383644104,0.7040825486183167,-1.7338931560516357,-1.3015450239181519,-0.010797704569995403,-0.17441913485527039,0.331863671541214,-1.869162917137146,1.445982575416565,-0.3020978569984436,-1.7509320974349976,-1.284659743309021,0.6320575475692749,-1.4093858003616333,-1.3432999849319458,1.2077786922454834,1.08854079246521,2.0572097301483154,0.7026053667068481,-0.8238297700881958,1.0218454599380493,0.4687362313270569,-1.715516448020935,-0.81590336561203,0.5690419673919678,1.5093902349472046,-0.7691983580589294,0.5121575593948364,3.5762875080108643,-0.6462669968605042,-0.08978293836116791,0.9789342284202576,0.3219841420650482,-0.8723068833351135,-0.854935348033905,0.5250251889228821,0.04339364543557167,0.9084959626197815,0.5564500093460083,1.1679528951644897,-0.24594663083553314,-2.0441370010375977,-0.10618267953395844,-0.7145525217056274,1.013206958770752,-0.19870974123477936,-0.24283422529697418,2.720815658569336,-0.3009074628353119,0.7928087115287781,-1.1037635803222656,-1.8595750331878662,-0.989818274974823,0.3329170346260071,1.0649901628494263,-0.6852863430976868,0.8941003680229187,-1.4742368459701538,0.5388166904449463,0.36920732259750366,-0.38683760166168213,1.8961752653121948,-2.9142560958862305,-0.5364707708358765,-0.19739006459712982,1.338869333267212,1.3137469291687012,-0.7859818339347839,3.540276288986206,1.7604994773864746,0.7259287238121033,-1.2681480646133423,1.9757195711135864,0.8914844989776611,2.046942949295044,-1.0655596256256104,0.9594901204109192,-0.13095051050186157,0.842003583908081,-0.06422103941440582,1.5982297658920288,0.437967449426651,0.5070642828941345,0.9147304892539978,-3.048715353012085,0.24427300691604614,-0.8121455311775208,0.00563464080914855,0.6270113587379456,-1.2566287517547607,0.22034412622451782,-0.4996846914291382,-0.4102563261985779,1.480059266090393,0.7553580403327942,0.2046555131673813,-1.5917413234710693,-1.8393399715423584,-1.1252236366271973,-0.9981931447982788,0.7760920524597168,-0.7657200694084167,-0.6403965353965759,-0.0001867256942205131,-0.35078173875808716,-0.5812617540359497,0.5842880010604858,2.55985689163208,2.126136541366577,-2.5861165523529053,-1.2295883893966675,2.174489974975586,0.010040943510830402,-1.2828859090805054,0.9206746816635132,1.445892095565796,-1.2977880239486694,0.2148497849702835,0.37179505825042725,-2.877739429473877,-0.992640495300293,0.07681679725646973,-0.5747395157814026,1.4940520524978638,-0.22217313945293427,-0.5128574967384338,-0.4029492735862732],[1.8700014352798462,-0.9537832140922546,2.1034228801727295,0.08857130259275436,0.31595301628112793,-1.3313374519348145,-1.3296457529067993,-0.9822030663490295,-1.5796012878417969,2.1072349548339844,-1.6206250190734863,0.5644545555114746,0.5484638214111328,-0.092844158411026,-0.17612910270690918,2.519317150115967,-1.2694110870361328,0.811542809009552,-1.4266833066940308,-2.2250819206237793,-0.2175114005804062,-1.427248239517212,-1.5540472269058228,0.06491968035697937,-0.7231432795524597,-1.1539101600646973,0.9275432229042053,5.911684036254883,1.3829237222671509,-4.723909854888916,0.3674319386482239,0.3689708113670349,-0.8397740721702576,1.0944362878799438,0.5117955803871155,5.333931922912598,-0.008794872090220451,1.1614038944244385,-0.23337869346141815,0.24328447878360748,0.5055565237998962,2.8021748065948486,1.9584015607833862,0.5087627172470093,-0.40342387557029724,2.1654560565948486,0.5552844405174255,-0.07008281350135803,0.6879984736442566,0.2538772523403168,-0.435979962348938,0.4371735155582428,1.8677483797073364,0.9553792476654053,1.0532578229904175,0.14776037633419037,1.5467066764831543,-1.2304576635360718,1.4929696321487427,1.0905483961105347,0.5290743112564087,0.6372637152671814,-1.7041985988616943,1.7259125709533691,-0.2313508242368698,0.7979050278663635,-0.7048803567886353,0.9901645183563232,0.33992162346839905,-1.0523625612258911,-0.44561246037483215,1.3442282676696777,-1.3779569864273071,-1.878465175628662,-2.2843682765960693,-0.6670844554901123,1.3943440914154053,-0.46494823694229126,-0.35562461614608765,-0.05279361084103584,-0.37396296858787537,-0.16740337014198303,1.6958273649215698,-0.04257672652602196,2.935289144515991,-0.12983354926109314,0.8481287956237793,-0.4493083655834198,-0.12610949575901031,0.031112348660826683,-2.732426166534424,1.7865413427352905,-0.016187461093068123,-2.402486562728882,-0.9416614174842834,1.5836025476455688,-1.3438811302185059,-1.2697159051895142,-1.8824230432510376,-0.08117653429508209,0.7724342942237854,-0.2882547378540039,0.12536759674549103,0.4213460385799408,1.2642439603805542,0.7824274301528931,0.7665669918060303,0.9381256699562073,0.007203627377748489,0.10369446128606796,-2.738351345062256,3.34871244430542,1.7629899978637695,0.4649307429790497,-0.7499710321426392,2.5256354808807373,-0.06792617589235306,0.33435729146003723,1.7335848808288574,-2.3704988956451416,0.37268099188804626,2.8828299045562744,0.40057700872421265,1.5602624416351318,0.20313064754009247,-1.6119767427444458,-1.3218507766723633,1.0870229005813599,-1.0078155994415283,-0.48945873975753784,0.42376697063446045,0.40318143367767334,0.7196474671363831,-1.2555240392684937,0.27537643909454346,-0.2246823012828827,-0.6424707770347595,0.36115458607673645,1.915483832359314,2.0597071647644043,0.3984278738498688,-1.0196256637573242,-1.8808467388153076,-1.451167345046997,-0.11623602360486984,-0.4353862404823303,0.7647074460983276,-0.9029726386070251,-0.8483495712280273,-2.5343551635742188,-1.9437227249145508,2.1674396991729736,0.5866812467575073,-2.881378412246704,2.3875584602355957,-0.19905981421470642,-3.790619373321533,1.0582926273345947,0.18380481004714966,0.2137312889099121,0.6011139154434204,1.4136888980865479,-1.300391435623169,0.7059012055397034,0.508355975151062,-0.8265513777732849,1.5162755250930786,-0.6353320479393005,1.6617889404296875,0.7381632328033447,0.9743962287902832,1.9016209840774536,-2.804738998413086,-0.804676353931427,-1.5383496284484863,0.11297547072172165,0.10581666231155396,0.44206854701042175,-0.09882081300020218,-0.5971598625183105,1.0379793643951416,0.006794237997382879,-1.1905148029327393,-1.9004913568496704,-0.10253852605819702,0.42031776905059814,0.8615812063217163,-0.24914942681789398,-1.0265244245529175,1.0082272291183472,-0.5192649960517883,0.2018110305070877,1.1059271097183228,-0.2261027842760086,0.31990352272987366,0.36676719784736633,0.06715237349271774,-0.9813494682312012,3.0467450618743896,0.5410239696502686,1.2281670570373535,-0.3625689148902893,0.27658089995384216,-1.557469129562378,2.3335161209106445,0.09454001486301422,-0.6809306144714355,-0.8574090600013733,-0.5185633301734924,1.4173985719680786,1.1108695268630981,1.089577078819275,-0.5478112697601318,-0.5097954869270325,-0.5556439757347107,-0.5653342008590698,-1.175892949104309,0.4166565239429474,-1.219483733177185,0.2160225212574005,-0.5649774074554443,0.3159421384334564,-0.8825043439865112,0.8365920186042786,-1.0597103834152222,1.6423629522323608,0.5677332878112793,1.699103832244873,-1.3848485946655273,0.37077730894088745,-0.19178171455860138,0.8909830451011658,1.8958004713058472,-1.2269827127456665,-2.5528173446655273,0.6309081315994263,1.3474290370941162,1.057568907737732,-0.6501286029815674,-0.6289110779762268,2.2084085941314697,1.517317533493042,1.1500778198242188,1.8380420207977295,-1.1535406112670898,-1.5367317199707031,-1.7328810691833496,-0.7129775881767273,0.865331768989563,2.237637519836426,-0.6331576704978943,-0.9992145895957947,0.36362025141716003,-0.5741291642189026,-0.5682681202888489,-0.6825681924819946,-0.22279313206672668,-0.2626400291919708,-0.6087192893028259,1.2177050113677979,0.2474922388792038,-0.1264093518257141,1.684544324874878,0.593108594417572,0.23041152954101562,0.4215044677257538,-0.2334827482700348,-0.2596336901187897,-0.6701920032501221,-0.2964950501918793,-1.513450026512146,-1.4474554061889648,0.6922515034675598,-1.437402606010437,-0.4191257059574127,0.05706638842821121,0.3521604835987091,1.6325576305389404,-0.3647539019584656,1.4764797687530518,0.7200438976287842,0.9377652406692505,1.2363752126693726,-1.0297328233718872,1.5730253458023071,-1.4308619499206543,0.16653135418891907,0.2231525033712387,2.4413418769836426,-0.1611386239528656,0.9162230491638184,0.32445117831230164,0.0002463006239850074,-0.9630674719810486,-0.9251115918159485,0.36335447430610657,-1.4127824306488037,0.22973781824111938,-0.09917386621236801,0.48129305243492126,1.5950884819030762,-0.14676129817962646,-1.2372773885726929,1.1645609140396118,2.045637369155884,3.6029927730560303,0.9226999878883362,0.23548153042793274,1.2711671590805054,0.28634461760520935,0.06930431723594666,-2.774435043334961,0.5810049176216125,-0.36896729469299316,2.1899468898773193,1.5554274320602417,2.1834075450897217,-0.17709745466709137,0.4351813793182373,1.2835607528686523,-0.3828519284725189,0.7454456090927124,-1.8016822338104248,-0.41161105036735535,-0.42083993554115295,2.1432156562805176,1.410874843597412,0.4167179465293884,0.03538021445274353,0.4331080913543701,-0.25948455929756165,-0.973899245262146,1.532984972000122,0.8133245706558228,-0.4833168387413025,1.1259715557098389,-1.3160326480865479,1.860588550567627,-1.2843698263168335,-0.2635345458984375,1.570401668548584,-0.6328579783439636,-0.7442286610603333,-0.5800590515136719,-1.7868690490722656,3.2253663539886475,1.720704197883606,-0.1793280988931656,-2.7367300987243652,0.07314597070217133,-0.7454310059547424,0.6245610117912292,0.5524724125862122,-0.39204442501068115,-0.15724553167819977,-0.01564054936170578,-0.5512739419937134,0.3238130211830139,2.1001198291778564,-0.008657955564558506,0.6417033672332764,0.7234825491905212,-0.0032816226594150066,0.4954527020454407,0.23382963240146637,-0.7909590601921082,-0.8181881904602051,-2.2997756004333496,-0.9683290123939514,-0.7099251747131348,-1.1424070596694946,-1.1119439601898193,1.6520090103149414,-1.2219786643981934,-2.0375730991363525,-1.4558624029159546,-2.369098424911499,1.1118969917297363,1.0685210227966309,0.6039063930511475,-0.17772407829761505,0.1506483554840088,-0.23590396344661713,-1.7554457187652588,-0.5648266077041626,0.5187008380889893,-0.6123316884040833,0.1604079157114029,-2.5146777629852295,0.5221972465515137,1.6339123249053955,1.227448582649231,1.411824345588684,-0.40133005380630493,0.9426468014717102,-1.6288179159164429,1.47822904586792,0.1875685453414917,1.5712575912475586,-0.9427369236946106,0.4654623568058014,-2.1302497386932373,0.7647436857223511,-0.17891137301921844,-1.1605160236358643,2.3731563091278076,2.247870922088623,2.3855373859405518,0.36991995573043823,-0.08694471418857574,2.49459171295166,0.7135692834854126,-0.7316654324531555,-0.5612058639526367,2.137115478515625,0.9847098588943481,-3.4215614795684814,0.288699209690094,0.0990767553448677,-1.1373354196548462,-0.010949020273983479,0.23142188787460327,-0.24161367118358612,0.18040399253368378,1.1389511823654175,-0.6554152965545654,0.586129903793335,0.41170331835746765,-3.300605297088623,2.651108980178833,1.1357625722885132,2.424318552017212,-0.11507207155227661,-0.9181020259857178,0.21082516014575958,1.8071213960647583,-0.101308673620224,-2.324276924133301,-0.8362125158309937,2.8274788856506348,-1.2562121152877808,-1.612917184829712,0.29909491539001465,0.35746440291404724,-0.8262419104576111,1.0773162841796875,0.17893444001674652,-1.3540438413619995,-0.33003613352775574,-2.20725417137146,-0.15194711089134216,-0.10596144199371338,0.9758137464523315,-0.2008875161409378,0.18444733321666718,0.17581714689731598,-1.1359659433364868,1.1185933351516724,1.7566450834274292,0.19510476291179657,-0.4129664897918701,0.21389606595039368,0.2064651995897293,-1.7961313724517822,-1.3699336051940918,-0.6933703422546387,0.28191331028938293,-0.02121249958872795,-0.23490719497203827,0.30084607005119324,0.5521351099014282,-1.8201268911361694,0.9035161137580872,-0.19793789088726044,-0.8045978546142578,1.2734891176223755,0.195420503616333,0.3474104106426239,2.1353330612182617,-0.09418516606092453,-0.3945069909095764,-0.4487040340900421,0.40545982122421265,0.7027626633644104,0.01715131849050522,-0.35385382175445557,0.6302648782730103,-0.7806503772735596,0.831731379032135,1.8628534078598022,0.832203209400177,0.03834221884608269,0.0926053524017334,-0.3968563377857208,-0.6416052579879761,1.0088194608688354,1.8760758638381958,-8.949368476867676,0.5031846761703491,0.6414737701416016,-0.6534965634346008,-0.9199628233909607,-0.029175087809562683,0.9397960305213928,-1.1524782180786133,-0.9981231689453125,3.4107422828674316,1.1974306106567383,-0.041534777730703354,-0.10866447538137436,-0.717340886592865,0.36281344294548035,1.0480982065200806,-1.5038583278656006,-0.9181090593338013,0.4998362958431244,0.333755224943161,-0.7272608876228333,-0.8895850777626038,-0.06808071583509445,-0.6548995971679688,-1.4871495962142944,-0.5371261835098267,-1.9484615325927734,3.097158670425415,2.026489734649658,1.5847117900848389,-0.5198217034339905,0.7233495712280273,3.0349390506744385,-0.4580458998680115,-0.16269636154174805,1.0513328313827515,-0.592156708240509,-0.05298909172415733,0.6080169677734375,-0.5745897889137268,0.1604059487581253,-0.44989529252052307,-0.839118480682373,0.8638426661491394,0.8463036417961121,1.624826431274414,-1.1638646125793457,-0.0029547836165875196,0.42535731196403503,0.3067769706249237,0.16586528718471527,1.5512956380844116,0.7947095632553101,0.6080413460731506,-0.7525099515914917,-0.8570213913917542,-1.2021796703338623,-0.3166184723377228,-1.349274754524231,1.7863764762878418,0.3627417981624603,0.20563898980617523,-0.4606700837612152,0.7924963235855103,1.7401901483535767,0.6113206148147583,2.0847725868225098,-1.7825077772140503,-0.422975093126297,-0.004531695041805506,2.577338457107544,-0.614427924156189,0.4504110515117645,-1.3683102130889893,0.6162466406822205,-1.7051739692687988,1.5937389135360718,1.7325252294540405,0.7879259586334229,-0.44993168115615845,0.9205925464630127,-0.9060207009315491,-0.12975212931632996,-0.4365977346897125,-0.8171923756599426,-2.0588059425354004,-0.6748114228248596,0.18095454573631287,0.39266979694366455,0.523392379283905,1.373639464378357,-1.4747767448425293,0.30770695209503174,-0.6627662777900696,0.9079089760780334,0.6174818873405457,-1.5106958150863647,0.6117861866950989,-3.0644242763519287,2.366056203842163,0.6335030198097229,1.0025659799575806,0.2563609182834625,1.0058679580688477,0.5388148427009583,0.8761941194534302,-0.027441080659627914,-0.9116984009742737,-0.7897000312805176,1.7775436639785767,-2.041658401489258,0.8131729364395142,-1.0562258958816528,-1.7436473369598389,-0.9614993929862976,-2.4152731895446777,-1.7214937210083008,0.1487284004688263,0.24784088134765625,-0.14352644979953766,1.530250072479248,0.5951820611953735,0.20611655712127686,0.7239394783973694,0.6520217657089233,-0.6399421691894531,0.5908203125,0.07803957909345627,-0.18269535899162292,-0.9937022924423218,-0.77977454662323,1.4323952198028564,0.8400874733924866,-0.852756679058075,-0.2018013596534729,0.6135575175285339,0.034458279609680176,1.0144681930541992,-0.7511371374130249,2.2071783542633057,1.2976030111312866,-0.7936547994613647,1.222113847732544,1.0068825483322144,0.03303360193967819,1.058332920074463,-0.851527214050293,-0.1586305946111679,-0.2003621906042099,-0.22467529773712158,-1.7008010149002075,0.3279584050178528,1.0178388357162476,-0.20944525301456451,-1.862892508506775,-0.6690083146095276,-0.5341095924377441,-1.4596138000488281,0.3025243878364563,0.7319607138633728,2.8317363262176514,3.245818853378296,2.1091978549957275,0.04960455745458603,1.3499468564987183,1.4332877397537231,-0.5282966494560242,-0.35602834820747375,0.04304422810673714,-0.07281988859176636,0.7220138907432556,0.3438747823238373,2.2951698303222656,1.6599432229995728,0.6602917909622192,1.393643856048584,1.1108596324920654,-0.47068706154823303,0.5002430081367493,0.8390111327171326,-0.46291226148605347,0.6217096447944641,0.3763500452041626,-0.3462708592414856,1.1744709014892578,-1.8116114139556885,0.33887308835983276,0.14286744594573975,0.4423253834247589,2.7540369033813477,2.4683585166931152,1.9425266981124878,-1.3899595737457275,0.006880808621644974,1.194249153137207,-0.3378417491912842,-0.9804418087005615,0.5063457489013672,0.6297093629837036,-0.35141217708587646,0.2059141844511032,0.5638249516487122,1.7170902490615845,-0.2453722357749939,-0.057230908423662186,0.9995738863945007,-2.6726083755493164,-0.16992148756980896,1.9104019403457642,1.4361361265182495,-2.707350254058838,-0.4945096969604492,1.9422483444213867,-0.6590908765792847,0.7392531633377075,-2.0990097522735596,0.07232765853404999,1.0226327180862427,1.6140445470809937,-0.20957709848880768,-0.6150162220001221,-0.5509488582611084,-0.767189085483551,-0.3503626585006714,2.2825639247894287,0.9842509031295776,-1.0942336320877075,0.47752878069877625,-3.474954843521118,-0.18037892878055573,0.06697426736354828,-1.3048537969589233,0.5082981586456299,-1.7253639698028564,1.4372456073760986,0.5339020490646362,0.7988658547401428,-0.8056907057762146,0.4377157986164093,2.218787431716919,-1.5755138397216797,-0.7720381021499634,-1.2138371467590332,-1.3451076745986938,1.0630342960357666,0.473603218793869,-0.21984469890594482,-0.26615390181541443,0.46989092230796814,-2.3199167251586914,0.06440053135156631,0.26689186692237854,1.8300862312316895,-1.6880125999450684,1.3537061214447021,0.3103812336921692,0.37515705823898315,-3.592496156692505,0.871163010597229,2.517085552215576,0.7685185670852661,0.7562406659126282,0.043909285217523575,-2.727987051010132,-1.5618082284927368,-0.05517341196537018,-0.7062270045280457,-0.1643052101135254,0.09265648573637009,1.7855372428894043,-0.1178811714053154],[-0.20433223247528076,-1.6783385276794434,0.9252661466598511,2.0758447647094727,-0.07109203189611435,-0.18004082143306732,0.7989913821220398,-0.2983997166156769,-0.38747748732566833,-0.8522803783416748,-1.453060507774353,1.7692610025405884,-0.6064544320106506,0.31748345494270325,-0.4543328285217285,-0.22675184905529022,-1.3857476711273193,0.589260458946228,0.2753255069255829,-2.0026803016662598,0.08123133331537247,-0.5871105194091797,-0.13212165236473083,0.10576153546571732,0.09379924088716507,-2.1373279094696045,0.17816929519176483,-0.22665566205978394,0.017189228907227516,-5.143427848815918,0.01392669603228569,-0.7109980583190918,-1.237610936164856,0.4448659121990204,-1.0729559659957886,-5.306884288787842,0.5477319359779358,1.809117078781128,0.3475610017776489,-1.0729893445968628,0.09014754742383957,1.5906052589416504,-1.0154414176940918,0.5790693759918213,-0.31274014711380005,0.8590385317802429,0.2830972969532013,1.2141393423080444,-1.151501178741455,2.1210732460021973,-0.1391182690858841,0.8669507503509521,2.212071418762207,0.8674596548080444,0.05427573621273041,1.1219196319580078,-0.6358404159545898,-0.5296401977539062,0.0012907353229820728,1.6400333642959595,-0.6911768913269043,0.2026916742324829,-0.9082508087158203,0.3168582320213318,0.33589285612106323,1.0148670673370361,-0.31823980808258057,-0.2082129269838333,-0.381991446018219,-1.1881989240646362,-2.4908640384674072,-0.355442613363266,0.17276297509670258,0.6441594362258911,-0.6703215837478638,0.18866337835788727,0.939885675907135,-0.01211884617805481,-1.8504027128219604,0.21178963780403137,-0.6326240301132202,0.31865406036376953,2.048032760620117,-0.11608626693487167,-0.2569786608219147,0.4368757903575897,-0.0260474793612957,0.7990599274635315,0.5727532505989075,0.0895412489771843,-1.571159839630127,0.26815176010131836,1.0307565927505493,-0.520641565322876,0.15403594076633453,1.6378380060195923,1.283527135848999,-1.6588976383209229,-0.48400479555130005,-1.1580859422683716,-0.7509525418281555,1.315380573272705,-0.07379183173179626,0.52519291639328,0.4335678517818451,2.7950351238250732,1.3771075010299683,0.7259077429771423,-0.07334304600954056,1.3830987215042114,-1.2857534885406494,0.12470948696136475,-0.9602134823799133,-1.2055975198745728,-0.5638176202774048,0.09352762252092361,1.6657129526138306,0.4155099391937256,1.2693710327148438,-0.4186498522758484,1.3996397256851196,2.93269944190979,-1.3664554357528687,1.086867332458496,-0.1967536062002182,-0.8543054461479187,-1.4616116285324097,0.719154417514801,-0.6699909567832947,0.6007542014122009,0.6462841033935547,0.5208675265312195,0.6895001530647278,-0.6039479374885559,0.8986804485321045,0.09296539425849915,-0.2314574122428894,-0.6801103353500366,0.8140191435813904,3.4217443466186523,-0.23492778837680817,0.045127611607313156,-0.8500064611434937,-1.6458325386047363,-0.24958015978336334,0.11323165893554688,0.6190603375434875,0.17906589806079865,0.7227169871330261,0.5980530381202698,-0.7673828601837158,0.8241417407989502,0.709071934223175,1.3429936170578003,0.5072498917579651,-0.06259932368993759,-1.9569644927978516,0.7814217209815979,2.0377862453460693,0.7721689939498901,-0.28181275725364685,0.8799373507499695,0.8192418217658997,0.8107286691665649,0.40820592641830444,0.3966280221939087,-0.4259047210216522,-1.5376569032669067,1.8848042488098145,0.18811281025409698,0.9903721213340759,1.114202857017517,-4.696131706237793,-0.3267369866371155,0.5743921399116516,-0.6137317419052124,0.9934948086738586,-0.20596593618392944,-0.6236596703529358,-1.0443239212036133,0.6402934193611145,0.6813211441040039,0.03963381424546242,-0.8187324404716492,0.9668425917625427,0.9278733730316162,0.40730586647987366,1.4157085418701172,-0.429911345243454,0.29686710238456726,-0.389783650636673,-0.5340803861618042,-0.2599109709262848,-0.13249175250530243,0.3685387372970581,-1.270527958869934,0.2765282690525055,-2.168261766433716,0.3536916673183441,-0.9826862812042236,1.3856889009475708,0.1504652500152588,0.6382452845573425,-0.4599418640136719,0.10876734554767609,-1.0954846143722534,0.705790638923645,0.3312164545059204,0.8924857378005981,0.3045678734779358,-0.0713920146226883,0.9126845002174377,1.3598592281341553,-0.5066872239112854,-1.5612739324569702,0.402454137802124,-0.8306199908256531,-0.6184536218643188,0.19692130386829376,0.7297500371932983,0.021695606410503387,-0.3567628562450409,0.3224705755710602,0.9489116072654724,0.20368410646915436,0.5595125555992126,0.1147182360291481,-0.24992671608924866,-1.3786852359771729,0.7037904262542725,0.11532415449619293,1.428863525390625,0.5910244584083557,0.10874250531196594,2.828360080718994,0.1031283438205719,-0.7883068323135376,1.3114484548568726,-0.6387841701507568,-0.22563660144805908,-0.1337548941373825,1.2929610013961792,1.8523943424224854,1.1022570133209229,0.7133726477622986,0.5316223502159119,1.02217698097229,0.9695987105369568,1.1405972242355347,1.655632734298706,-1.9676275253295898,-0.5847054123878479,1.378090500831604,-0.37466004490852356,0.43610891699790955,0.6157627701759338,0.09732427448034286,1.1812793016433716,0.7006984949111938,1.2035677433013916,-0.02049262449145317,0.02560584992170334,1.4165313243865967,-0.26903268694877625,-0.7465556263923645,0.23137865960597992,-1.0205466747283936,0.08658113330602646,-0.6422387361526489,0.8964866399765015,-0.9495004415512085,0.029113179072737694,0.46966245770454407,-1.2270697355270386,-0.38857710361480713,-0.9073766469955444,-0.40797388553619385,1.03908371925354,-0.21913067996501923,-0.8373785614967346,0.6290602087974548,0.6674630641937256,1.0973516702651978,-1.2755012512207031,0.33192408084869385,0.36322349309921265,-0.4461832046508789,0.24300536513328552,-0.4090024530887604,0.17215196788311005,-0.10460265725851059,2.1520371437072754,-1.5440765619277954,-0.620064377784729,-0.20786426961421967,0.08452221006155014,-0.5669017434120178,1.8541333675384521,0.09979086369276047,1.822511076927185,-1.5840723514556885,-1.0293629169464111,0.20045913755893707,0.04223082214593887,0.973747730255127,1.4825880527496338,0.25607869029045105,-0.003708189819008112,0.2418084740638733,0.5810227394104004,1.4370006322860718,-1.9004782438278198,-0.30331525206565857,-0.4869345724582672,0.6463854908943176,1.5399205684661865,2.1084342002868652,-0.15966446697711945,0.90147864818573,1.0570542812347412,0.7102826237678528,-0.4245888888835907,-0.8040794134140015,-0.3049716651439667,1.7090747356414795,0.5423783659934998,0.9449290633201599,-0.9840180277824402,1.0966540575027466,1.3814021348953247,-0.36545291543006897,-1.1927322149276733,0.3911566436290741,0.24082466959953308,0.3502110540866852,-1.6952235698699951,-0.11980977654457092,0.8205850124359131,-0.5825956463813782,0.1240718886256218,0.34197065234184265,-0.08872298896312714,0.5227459073066711,0.04102594405412674,-0.02522559091448784,1.3831664323806763,1.6315711736679077,-0.848112940788269,-1.2368799448013306,2.0142765045166016,-1.2400131225585938,-2.4577391147613525,0.5219665765762329,0.7425310015678406,1.8834662437438965,0.07836458086967468,-2.1747188568115234,0.4280944764614105,-0.32567694783210754,0.7850102186203003,-0.8504244089126587,0.5850164890289307,0.3325744867324829,0.3291833996772766,0.38428476452827454,1.4941166639328003,-0.8157949447631836,-0.6996042728424072,0.7621159553527832,0.5635060667991638,0.3018024265766144,-1.2326093912124634,-0.6563641428947449,0.5729061961174011,-0.16528691351413727,-0.15367518365383148,-2.2911248207092285,-0.5715063810348511,1.138122320175171,0.5673955082893372,-0.6158959865570068,0.13727489113807678,1.0856633186340332,-0.40604734420776367,-0.40883252024650574,-0.7982858419418335,0.8836941123008728,-0.05574151128530502,-1.4019736051559448,0.27983129024505615,1.307541012763977,1.4030965566635132,-0.30342769622802734,-1.5606718063354492,0.5033881664276123,-1.5330597162246704,0.8470706939697266,-0.5029423236846924,-0.09117391705513,-0.1431429088115692,0.19639188051223755,-2.061403751373291,2.0248215198516846,1.3102362155914307,-0.6800996661186218,2.1800763607025146,0.8046916127204895,1.1798114776611328,0.05447517707943916,0.16950704157352448,0.27377021312713623,0.1756715029478073,-0.7480525374412537,2.5695559978485107,2.4578514099121094,0.18987061083316803,-0.28595083951950073,1.0175330638885498,-0.07092451304197311,-0.4727090895175934,-0.04646722599864006,-0.56316739320755,-0.09819412976503372,-0.5769237279891968,0.5321735143661499,0.014753560535609722,1.3258066177368164,-0.10864468663930893,-0.12121450901031494,-0.7448942065238953,-0.20130768418312073,0.5883305072784424,0.44711267948150635,1.9925048351287842,0.7149675488471985,0.4570489227771759,-0.8169843554496765,-2.5227882862091064,-1.3945966958999634,1.5115633010864258,-2.355586290359497,-0.6060693860054016,0.7819063067436218,-0.08751179277896881,-0.5827648043632507,0.04735049977898598,0.42518991231918335,0.5000985264778137,1.4589725732803345,0.3766089975833893,-0.15535344183444977,-0.2884141802787781,-1.0559802055358887,0.15788589417934418,2.2734014987945557,-0.3347022831439972,-0.24976322054862976,-0.07985623180866241,-0.6467388272285461,0.14311999082565308,-1.0962095260620117,-0.5211118459701538,0.7022464871406555,-0.25784364342689514,-0.8413400053977966,1.6383849382400513,-0.44988709688186646,-0.1610960066318512,0.06976880878210068,-0.35442987084388733,0.564738392829895,-0.6027423739433289,-0.41867032647132874,0.40681004524230957,0.19483934342861176,0.4448431730270386,1.3419386148452759,0.7631343007087708,0.3142454922199249,1.169077754020691,-0.14908526837825775,0.7263576984405518,1.0500584840774536,0.7567309141159058,-1.7382173538208008,1.2241350412368774,0.8624055981636047,0.13632851839065552,1.960607886314392,1.764008641242981,1.0845052003860474,-0.9949843883514404,-0.09382656961679459,-0.4823214113712311,1.0377682447433472,1.0722686052322388,1.2134419679641724,-0.14716428518295288,1.178385853767395,1.2377965450286865,-1.467957854270935,0.12056456506252289,-0.9824626445770264,1.1785097122192383,0.934810221195221,0.8880816102027893,1.4952701330184937,1.9626857042312622,0.4719543159008026,-0.5729284286499023,-0.18442697823047638,-0.01622193120419979,0.6610023975372314,-0.1349942535161972,-0.42294394969940186,-0.06693445146083832,1.0994306802749634,0.3713456392288208,-1.415420651435852,-1.94044029712677,-1.0481961965560913,-1.2440564632415771,0.6386559009552002,-0.5821488499641418,2.9515442848205566,0.2206413298845291,0.968043863773346,1.2731337547302246,1.263611078262329,1.711346983909607,0.8843600749969482,-0.43532276153564453,0.7519408464431763,-1.0525766611099243,-0.9387974739074707,-3.6521527767181396,-0.6510240435600281,0.09562290459871292,-0.4246319532394409,0.17015312612056732,-2.17095947265625,1.2046655416488647,0.36974895000457764,0.13803188502788544,-1.0111888647079468,0.48319339752197266,0.5683578848838806,0.627698540687561,-0.4843525290489197,0.7016224265098572,-0.932537853717804,-0.43700236082077026,-1.0778977870941162,-0.7479422092437744,-0.2279846966266632,0.10740147531032562,-1.5627046823501587,0.6993049383163452,0.5898451805114746,0.008860604837536812,0.8175990581512451,0.1408449411392212,0.5043925046920776,1.104628562927246,-1.8942773342132568,-0.5485139489173889,1.296970248222351,-1.356145977973938,0.05967385321855545,0.5626437067985535,0.06948648393154144,-0.18563929200172424,-0.9241007566452026,0.7086806893348694,-0.19252660870552063,-0.5962610244750977,0.0866297259926796,-0.1354997754096985,-1.2565160989761353,0.3374553918838501,-0.4793420135974884,0.2524104416370392,0.7209308743476868,0.020587071776390076,-0.44862765073776245,-0.8008005023002625,-1.2175588607788086,0.49937620759010315,-0.9225984811782837,0.49989795684814453,0.1957952082157135,0.9606350064277649,0.4247172772884369,0.17648036777973175,-0.2138088047504425,1.137308120727539,0.21180252730846405,-0.6415600776672363,-0.20980392396450043,0.712277889251709,0.10272216796875,0.1543484777212143,-0.690239429473877,-0.9730573296546936,0.3650040030479431,-1.0853160619735718,-0.21427099406719208,-0.41048941016197205,-0.18330419063568115,-0.07345380634069443,0.1656496524810791,0.026105478405952454,0.2479402720928192,-0.7193567156791687,0.614662230014801,-0.4211236536502838,0.7788238525390625,2.16850209236145,-0.5861462354660034,0.43789142370224,0.20521101355552673,-0.0814724788069725,-0.5585458278656006,-0.47392526268959045,-0.4584622085094452,-0.41062211990356445,0.4824977517127991,-0.618044912815094,-0.5296798348426819,-0.34644344449043274,-1.0767115354537964,-0.12966713309288025,-0.25572124123573303,1.9163271188735962,1.0332720279693604,-0.7038701176643372,0.14588068425655365,0.05040956288576126,1.6619653701782227,0.7207757234573364,-0.2210298329591751,0.5461302995681763,0.43636786937713623,0.27487844228744507,-0.5650752186775208,0.36451905965805054,0.28499549627304077,0.40455639362335205,-0.4242338240146637,1.4242891073226929,0.3550650477409363,-0.8514772653579712,1.98545503616333,0.047704726457595825,-1.4427565336227417,-0.8753654956817627,0.8384696245193481,1.2612712383270264,2.206540822982788,-0.05935613065958023,-0.9412180185317993,1.2249056100845337,1.4724160432815552,-0.5570127367973328,-0.17048604786396027,0.7383578419685364,-0.19001981616020203,1.133721947669983,0.6827524304389954,0.5209375619888306,0.020553559064865112,0.7571407556533813,-0.8038185238838196,0.16575302183628082,-0.1513463258743286,0.6759191155433655,-0.2755008041858673,0.8690430521965027,1.3998336791992188,1.9679558277130127,0.3475399315357208,0.3499829173088074,0.8686423897743225,1.2958229780197144,-0.40440601110458374,0.9309317469596863,2.541874885559082,0.49512770771980286,0.7752246260643005,-1.1398719549179077,0.4133967459201813,0.13766047358512878,0.703260064125061,-0.7570361495018005,-0.6767508387565613,-1.675130009651184,0.934540867805481,0.6914578676223755,1.645945429801941,2.8109376430511475,-0.33736327290534973,-0.03239883854985237,-0.3314172923564911,-2.8594017028808594,-0.7300012111663818,0.25505030155181885,1.2144874334335327,-0.48115074634552,0.040733639150857925,-0.5208387970924377,1.2413668632507324,0.3906145393848419,-0.930443525314331,-0.5897824168205261,1.7017443180084229,1.28294038772583,-0.3194679617881775,0.8642467260360718,0.06485991925001144,-1.2201545238494873,-0.5669395327568054,-1.7913336753845215,0.03555087000131607,-0.8126198053359985,0.26194071769714355,0.4406481087207794,0.6573454737663269,-0.4547797739505768,-0.4504009187221527,2.1576194763183594,-0.4412635862827301,-0.10828053206205368,0.6045235395431519,-0.46200624108314514,-0.4521058201789856,0.6319668889045715,-5.464902400970459,-0.5053491592407227,-1.4480714797973633,-1.2527449131011963,-0.9145534038543701,1.1291077136993408,-0.20863661170005798,-0.5796937346458435,-0.06030793860554695,0.5819199681282043,0.4766663908958435,1.2271885871887207,1.0405277013778687,0.9320999979972839,-1.3467774391174316,-0.30380281805992126,0.3252887725830078,1.1977030038833618,-0.9364627003669739,-1.0719661712646484,1.4575961828231812,-0.7681967616081238,1.5218548774719238,2.2099080085754395,-2.3389856815338135,0.054066576063632965,1.2264158725738525,0.5669309496879578,-0.08467265218496323,0.47690558433532715,-1.1654434204101562,0.12179253250360489]]]", + "status": 200, + "statusText": "OK", + "headers": { + "access-control-allow-credentials": "true", + "access-control-expose-headers": "x-compute-type, x-compute-time", + "connection": "keep-alive", + "content-type": "application/json", + "server": "uvicorn", + "transfer-encoding": "chunked", + "vary": "Origin, Access-Control-Request-Method, Access-Control-Request-Headers" + } + } + }, + "e9fc55386e8e5146072ba6967963ec8973ae0b0b566c769ec4056957d5a2416d": { + "url": "https://api-inference.huggingface.co/models/OpenAssistant/oasst-sft-4-pythia-12b-epoch-3.5", + "init": { + "headers": { + "Content-Type": "application/json" + }, + "method": "POST", + "body": "{\"inputs\":\"Write a short story about a robot that becomes sentient and takes over the world.\",\"parameters\":{\"max_new_tokens\":10000},\"stream\":true,\"options\":{}}" + }, + "response": { + "body": "data:{\"error\":\"Input validation error: `inputs` tokens + `max_new_tokens` must be <= 4096. Given: 17 `inputs` tokens and 10000 `max_new_tokens`\",\"error_type\":\"validation\"}\n\n", + "status": 200, + "statusText": "OK", + "headers": { + "access-control-allow-credentials": "true", + "access-control-allow-origin": "*", + "cache-control": "no-cache", + "connection": "keep-alive", + "content-type": "text/event-stream", + "transfer-encoding": "chunked", + "vary": "origin, Origin, Access-Control-Request-Method, Access-Control-Request-Headers" + } + } + }, + "e84857f5779f6e671ccba07255190b5b416ea2a1f2ff7186af97280ac7c71133": { + "url": "https://api-inference.huggingface.co/models/speechbrain/sepformer-wham", + "init": { + "headers": {}, + "method": "POST" + }, + "response": { + "body": "[{\"label\":\"label_0\",\"blob\":\"ZkxhQwAAACICQAJAAAAAAAbWAfQBcAAAAAAAAAAAAAAAAAAAAAAAAAAABAAALg0AAABMYXZmNTguNDUuMTAwAQAAABUAAABlbmNvZGVyPUxhdmY1OC40NS4xMDCBACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\",\"content-type\":\"audio/flac\"},{\"label\":\"label_1\",\"blob\":\"ZkxhQwAAACICQAJAAAAAAAbWAfQBcAAAAAAAAAAAAAAAAAAAAAAAAAAABAAALg0AAABMYXZmNTguNDUuMTAwAQAAABUAAABlbmNvZGVyPUxhdmY1OC40NS4xMDCBACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\",\"content-type\":\"audio/flac\"}]", + "status": 200, + "statusText": "OK", + "headers": { + "access-control-allow-credentials": "true", + "access-control-expose-headers": "x-compute-type, x-compute-time", + "connection": "keep-alive", + "content-type": "application/json", + "server": "uvicorn", + "transfer-encoding": "chunked", + "vary": "Origin, Access-Control-Request-Method, Access-Control-Request-Headers" + } + } + }, + "bcf4dc29668a4b71e7eb0144f7886ef52e251d911740084557a85b952d0ec0cd": { + "url": "https://api-inference.huggingface.co/models/openai/clip-vit-large-patch14-336", + "init": { + "headers": { + "Content-Type": "application/json" + }, + "method": "POST" + }, + "response": { + "body": "[{\"score\":0.9644635915756226,\"label\":\"animal\"},{\"score\":0.02661651372909546,\"label\":\"car\"},{\"score\":0.008919973857700825,\"label\":\"toy\"}]", + "status": 200, + "statusText": "OK", + "headers": { + "access-control-allow-credentials": "true", + "connection": "keep-alive", + "content-type": "application/json", + "vary": "Origin, Access-Control-Request-Method, Access-Control-Request-Headers" + } + } + }, + "0b2e221339b7d5acd76fcbb402bbc2268a91639e24c3f5f8c5ca2262ca45335c": { + "url": "https://huggingface.co/api/models/facebook/bart-base?expand[]=pipeline_tag", + "init": { + "headers": {} + }, + "response": { + "body": "{\"_id\":\"621ffdc136468d709f17adb5\",\"id\":\"facebook/bart-base\",\"pipeline_tag\":\"feature-extraction\"}", + "status": 200, + "statusText": "OK", + "headers": { + "access-control-allow-origin": "https://huggingface.co", + "access-control-expose-headers": "X-Repo-Commit,X-Request-Id,X-Error-Code,X-Error-Message,ETag,Link,Accept-Ranges,Content-Range", + "connection": "keep-alive", + "content-type": "application/json; charset=utf-8", + "etag": "W/\"60-b79jF3Y7hQZdPGA1Gw60FX6fmHc\"", + "vary": "Origin" + } + } + }, + "8e5cb634d08771bb0956299d31d2888f474aa8b13cf7db7fc35dce65a61d2d97": { + "url": "https://huggingface.co/api/models/sentence-transformers/paraphrase-xlm-r-multilingual-v1?expand[]=pipeline_tag", + "init": { + "headers": {} + }, + "response": { + "body": "{\"_id\":\"621ffdc136468d709f1802ee\",\"id\":\"sentence-transformers/paraphrase-xlm-r-multilingual-v1\",\"pipeline_tag\":\"sentence-similarity\"}", + "status": 200, + "statusText": "OK", + "headers": { + "access-control-allow-origin": "https://huggingface.co", + "access-control-expose-headers": "X-Repo-Commit,X-Request-Id,X-Error-Code,X-Error-Message,ETag,Link,Accept-Ranges,Content-Range", + "connection": "keep-alive", + "content-type": "application/json; charset=utf-8", + "etag": "W/\"85-ohxRTAllr1IUkB/uZr2Ru1QYiZw\"", + "server": "nginx", + "strict-transport-security": "max-age=31536000; includeSubDomains", + "vary": "Origin" + } + } + }, + "434ba515f86f69c025a0a5f11de02fc0f70640dc00f274e632400a7cf668ecf9": { + "url": "https://huggingface.co/api/models/sentence-transformers/distilbert-base-nli-mean-tokens?expand[]=pipeline_tag", + "init": { + "headers": {} + }, + "response": { + "body": "{\"_id\":\"621ffdc136468d709f1802aa\",\"id\":\"sentence-transformers/distilbert-base-nli-mean-tokens\",\"pipeline_tag\":\"feature-extraction\"}", + "status": 200, + "statusText": "OK", + "headers": { + "access-control-allow-origin": "https://huggingface.co", + "access-control-expose-headers": "X-Repo-Commit,X-Request-Id,X-Error-Code,X-Error-Message,ETag,Link,Accept-Ranges,Content-Range", + "connection": "keep-alive", + "content-type": "application/json; charset=utf-8", + "etag": "W/\"83-yRCZHVlQwsb+CMxweS2MvsuCu4A\"", + "server": "nginx", + "strict-transport-security": "max-age=31536000; includeSubDomains", + "vary": "Origin" + } + } + }, + "48fb6da438c1ef813e41e8c2dfbea842f497e9d122cfa5f4d5603e89d6a5589b": { + "url": "https://api-inference.huggingface.co/pipeline/feature-extraction/sentence-transformers/paraphrase-xlm-r-multilingual-v1", + "init": { + "headers": { + "Content-Type": "application/json" + }, + "method": "POST", + "body": "{\"inputs\":\"That is a happy person\",\"options\":{}}" + }, + "response": { + "body": "[0.24820350110530853,0.48786279559135437,-0.22431161999702454,-0.08314842730760574,0.40016689896583557,0.023626789450645447,-0.033039480447769165,0.1463584154844284,0.05136275663971901,0.41556283831596375,0.026102811098098755,0.21838784217834473,0.005849722307175398,0.11927705258131027,-0.6514033675193787,0.2443086951971054,0.4128235876560211,-0.15235862135887146,-0.534961998462677,-0.25156769156455994,-0.051872219890356064,-0.18753330409526825,0.2896188795566559,0.1114930659532547,0.3360757827758789,-0.006596385035663843,0.002382272155955434,0.09386282414197922,-0.2709915339946747,-0.41939908266067505,-0.21426570415496826,0.39315006136894226,-0.24391624331474304,0.02869999222457409,-0.10365957766771317,-0.17157278954982758,0.11146240681409836,0.1835174709558487,0.45660629868507385,0.03255987539887428,-0.13806313276290894,-0.2865903675556183,0.2169167846441269,0.0868554338812828,0.3228476047515869,-0.16349171102046967,-0.09826277941465378,0.1252795308828354,0.10632044821977615,0.04475625976920128,0.21331310272216797,-0.15155386924743652,0.005315759684890509,0.11644555628299713,-0.310330331325531,0.2355256825685501,-0.1024826318025589,0.3385084569454193,-0.21656547486782074,0.03876980394124985,0.3078703284263611,0.20263531804084778,-0.5026252269744873,-0.2719899117946625,0.20379512012004852,0.2445724904537201,0.1021207943558693,0.035551030188798904,0.14817026257514954,0.3211316466331482,-0.05648669973015785,0.06016906723380089,-0.016707533970475197,-0.25602397322654724,-0.2120966762304306,0.014864259399473667,-0.33483561873435974,-0.15436245501041412,-0.5970051884651184,-0.2821895182132721,-0.07454182207584381,0.024539586156606674,-0.2449450045824051,0.05391861870884895,-0.18375185132026672,0.039232511073350906,0.09305654466152191,-0.23574046790599823,0.0015098043950274587,-0.16541467607021332,-0.38390660285949707,-0.0858512595295906,-0.5926722288131714,-0.273649662733078,-0.06950502097606659,-0.1524316966533661,-0.10246707499027252,0.1961866170167923,0.22971050441265106,0.15941442549228668,-0.16877353191375732,0.024133559316396713,0.5576909780502319,-0.1393497884273529,-0.08710680156946182,0.029252098873257637,0.08176543563604355,-0.004950392991304398,0.11907755583524704,-0.12048733234405518,0.27435675263404846,-0.018754761666059494,-0.299862802028656,-0.03622415289282799,0.08205389231443405,-0.20476903021335602,-0.029654622077941895,0.06838589161634445,-0.0952182486653328,0.4155559539794922,-0.011035188101232052,0.1434338241815567,0.08779389411211014,-0.070505291223526,0.30035051703453064,0.27631112933158875,-0.03730236366391182,-0.04414466768503189,-0.16213735938072205,-0.1421567052602768,0.2071084976196289,-0.1259150207042694,-0.0986831784248352,-0.5369145274162292,0.3264150321483612,0.22980083525180817,0.2807920277118683,-0.11490700393915176,0.1591753214597702,0.053404152393341064,-0.1239301785826683,0.21043935418128967,0.005603667814284563,0.14167362451553345,0.21005308628082275,0.16937948763370514,0.31682777404785156,0.31641441583633423,-0.24000562727451324,-0.3371465504169464,-0.26598015427589417,-0.1103469654917717,-0.1521390825510025,-0.024423634633421898,0.244423046708107,-0.1017620787024498,0.15923598408699036,0.25488877296447754,-0.02344674803316593,0.29721149802207947,0.23841169476509094,0.08208013325929642,0.04695116728544235,-0.3105490803718567,0.3545773923397064,-0.13872520625591278,-0.028846310451626778,0.05320054665207863,0.05730026960372925,-0.16784168779850006,0.031112249940633774,-0.1122414693236351,0.1515170782804489,0.26182013750076294,-0.24539819359779358,0.0451478585600853,0.3086254298686981,0.2858026921749115,-0.07149045914411545,0.17695434391498566,-0.18671466410160065,-0.05153646692633629,0.039209168404340744,0.08749581128358841,-0.1677357256412506,-0.4811117649078369,0.012423591688275337,-0.03817948326468468,-0.007300685625523329,0.2544702887535095,0.02707093581557274,0.1799841821193695,0.20946697890758514,0.06098072603344917,0.14458315074443817,-0.14002181589603424,0.15321502089500427,-0.1549636572599411,0.18697568774223328,0.05107436701655388,-0.06848003715276718,0.27939316630363464,-0.2904025912284851,0.35958120226860046,-0.33780547976493835,-0.0870373398065567,0.22150114178657532,-0.137705996632576,0.10607503354549408,0.15949854254722595,0.06473400443792343,0.4619215428829193,-0.12682977318763733,0.3355604112148285,-0.30160948634147644,0.11335752159357071,0.15326865017414093,-0.1420828253030777,-0.04377676174044609,-0.07871115207672119,0.1878574937582016,-0.2613837718963623,0.3102559745311737,-0.3734283447265625,-0.171635702252388,0.0995820164680481,-0.006508660037070513,-0.3514989912509918,-0.1161847710609436,-0.14339688420295715,0.20377039909362793,-0.07984280586242676,0.02168874442577362,0.06415681540966034,0.1546529084444046,0.07854851335287094,0.14101402461528778,0.1980392038822174,0.23536428809165955,-0.35869234800338745,0.117630235850811,0.1157449334859848,0.21678176522254944,-0.030699079856276512,-0.09393099695444107,-0.21302662789821625,0.07373261451721191,0.6735719442367554,0.1851973533630371,-0.19533942639827728,0.14096571505069733,-0.35427841544151306,-0.049307405948638916,0.17622129619121552,0.22076325118541718,0.18344923853874207,0.29323476552963257,-0.05168425291776657,-0.05637992173433304,0.02470933459699154,0.31942352652549744,-0.26292654871940613,-0.15734288096427917,-0.10954944044351578,-0.23317523300647736,0.26819831132888794,0.04255547747015953,0.15838395059108734,0.36022037267684937,0.01225072331726551,-0.17987973988056183,-0.00777575233951211,-0.12051723897457123,-0.14139960706233978,0.04130439832806587,0.13321706652641296,-0.12584960460662842,0.10898309201002121,-0.2474484145641327,0.1919088214635849,0.13176025450229645,-0.11641792953014374,-0.2882165312767029,-0.2615794837474823,0.20574326813220978,0.0984492227435112,-0.34167900681495667,0.3413581848144531,0.09515755623579025,-0.2047831267118454,-0.02966492995619774,0.07467763125896454,-0.13055714964866638,0.033994805067777634,-0.23030808568000793,0.0627075582742691,-0.02920554019510746,-0.24610140919685364,0.07931368052959442,-0.051804643124341965,-0.320953369140625,0.14145292341709137,0.2009473294019699,0.17032088339328766,0.021205667406320572,0.04274432733654976,0.097938671708107,-0.042799729853868484,-0.17106632888317108,-0.02450544945895672,-0.12272820621728897,-0.2664310038089752,0.14908456802368164,-0.22547845542430878,0.10366611927747726,-0.06176059693098068,0.11862331628799438,0.27692267298698425,0.30363982915878296,-0.23840174078941345,0.13228555023670197,0.17183972895145416,-0.1852266490459442,-0.4184253215789795,-0.2970944941043854,0.17543570697307587,0.2507489025592804,-0.16643692553043365,0.046033281832933426,-0.19279499351978302,-0.2706755995750427,0.14206624031066895,0.0017547670286148787,-0.2985026240348816,0.43340548872947693,-0.2720141112804413,-0.12001548707485199,0.40244272351264954,0.260733962059021,0.31308668851852417,-0.06595161557197571,0.15773431956768036,-0.32254427671432495,-0.06922630965709686,0.10175267606973648,0.08814845979213715,0.07582163065671921,0.1589290350675583,-0.03698546439409256,-0.08929342031478882,-0.04392797499895096,0.20327840745449066,0.3259018063545227,-0.09760690480470657,-0.3398973047733307,0.14849068224430084,0.21732227504253387,0.09147818386554718,-0.5607508420944214,-0.06105458363890648,0.08367592096328735,0.562443733215332,0.061304885894060135,0.08547962456941605,-0.048086702823638916,-0.3700530230998993,0.08790499716997147,0.4383009076118469,-0.26806163787841797,-0.17353402078151703,0.0021209174301475286,-0.09150142222642899,0.23962751030921936,-0.00030348190921358764,0.015055404976010323,0.13056764006614685,0.11451583355665207,-0.04338113218545914,-0.03140470013022423,-0.38846689462661743,0.11777317523956299,-0.28748488426208496,0.20446370542049408,-0.25854068994522095,0.103508360683918,-0.05392783135175705,-0.011302754282951355,0.4882741868495941,0.559603214263916,0.09645631164312363,0.18095886707305908,-0.17517754435539246,-0.13518837094306946,-0.3278568387031555,0.23076343536376953,-0.08713507652282715,0.08425455540418625,0.053626030683517456,0.04952174797654152,-0.08034848421812057,-0.06039651483297348,0.10197324305772781,0.006498134694993496,0.2893353998661041,0.3053528368473053,0.16842833161354065,0.12561997771263123,-0.22799381613731384,-0.07629793882369995,-0.3949061334133148,-0.013370842672884464,-0.1754232794046402,-0.12359696626663208,-0.4386475384235382,0.24142925441265106,0.2623150646686554,0.14813320338726044,-0.19340510666370392,-0.5665463209152222,0.09237387031316757,-0.3627515733242035,0.27549466490745544,0.21023033559322357,-0.32401391863822937,0.01832716353237629,0.12612272799015045,-0.2086498886346817,0.17876937985420227,-0.37265869975090027,-0.20470096170902252,0.49420419335365295,0.07889043539762497,-0.0322301909327507,0.0682714432477951,0.27184316515922546,0.09494388848543167,0.5625665187835693,0.16253598034381866,-0.38948675990104675,0.16226468980312347,-0.10129797458648682,-0.18012578785419464,0.1016380563378334,-0.5145247578620911,-0.06742697954177856,0.19429990649223328,0.34021705389022827,-0.057376470416784286,0.01455152127891779,0.06373507529497147,0.24180173873901367,-0.18957066535949707,0.11353375017642975,-0.03056536428630352,0.33122703433036804,0.20130722224712372,0.26436176896095276,0.40597137808799744,-0.29482921957969666,0.16206428408622742,0.4240324795246124,-0.0030101165175437927,0.2428295910358429,0.08408644050359726,0.3167755901813507,-0.2028200477361679,-0.08189703524112701,-0.24979908764362335,-0.02923842892050743,-0.42397183179855347,0.34940439462661743,-0.3306249976158142,-0.06569576263427734,-0.15622349083423615,-0.04006821662187576,0.09116919338703156,-0.3330233693122864,-0.3485097289085388,0.056054942309856415,0.2990168035030365,-0.022989999502897263,0.05614883452653885,0.2812651991844177,0.06304464489221573,-0.00829937495291233,-0.3046533763408661,0.0807572454214096,0.0013640874531120062,0.44206786155700684,-0.22020186483860016,-0.3774992525577545,-0.27773943543434143,0.13505952060222626,0.45440372824668884,1.251944899559021,-0.05526942014694214,-0.19182327389717102,0.2081320434808731,-0.11031918227672577,0.02450546994805336,-0.14080098271369934,-0.14020074903964996,0.29598113894462585,0.21844162046909332,-0.16830478608608246,-0.04573112726211548,0.11208131164312363,-0.13317079842090607,-0.06311695277690887,0.11296134442090988,-0.14601518213748932,-0.1444280445575714,0.09422774612903595,-0.34929800033569336,-0.32323601841926575,-0.17187699675559998,-0.04136918857693672,0.11530691385269165,-0.20660853385925293,0.5500902533531189,-0.18396532535552979,0.059303514659404755,-0.26614636182785034,-0.10347148030996323,0.13604934513568878,-0.024301746860146523,-0.3064781725406647,0.37290075421333313,0.20935334265232086,0.13248145580291748,0.3335549235343933,0.027371589094400406,0.12119559198617935,0.07888279110193253,-0.22612109780311584,0.2892477810382843,-0.5563157200813293,-0.1563408076763153,0.3101145923137665,0.07810545712709427,-0.029350191354751587,-0.1271754801273346,-0.11274658143520355,0.014802583493292332,-0.09107150882482529,-0.025622570887207985,0.36116188764572144,-0.104475237429142,-0.14180776476860046,0.14912137389183044,0.11220962554216385,-0.2976476848125458,0.2935035526752472,0.11709459871053696,0.3570999205112457,0.019176635891199112,0.07877027988433838,-0.3231487274169922,0.17064781486988068,0.1490098387002945,-0.06536774337291718,0.3057331442832947,-0.09195707738399506,-0.11787106841802597,-0.21908630430698395,-0.08325644582509995,-0.15823018550872803,-0.06109243258833885,0.10937001556158066,-0.04735255613923073,-0.3348263204097748,0.14791102707386017,-0.11363588273525238,-0.030372129753232002,0.3226831257343292,0.04818671569228172,0.004145342390984297,0.23279087245464325,-0.21538782119750977,-0.16816063225269318,0.5866580605506897,-0.24166202545166016,0.3322473466396332,-0.3498697280883789,0.2916244864463806,-0.16890227794647217,0.41496995091438293,-0.07047391682863235,-0.3222947418689728,-0.09089304506778717,0.36742129921913147,0.26098453998565674,0.006339214276522398,-0.009787806309759617,0.4478108584880829,-0.06284064799547195,-0.16565310955047607,-0.044826894998550415,-0.02424292080104351,0.2648865282535553,-0.12108270823955536,-0.5204979181289673,0.030495597049593925,-0.008438433520495892,-0.26793357729911804,0.44515398144721985,-0.6479582190513611,0.004157924093306065,-0.11055272817611694,0.23472143709659576,-0.19136403501033783,0.15723374485969543,-0.029484238475561142,-0.10513217747211456,0.3381412625312805,0.10881262272596359,0.1315915286540985,-0.13019469380378723,-0.2165435403585434,-0.2507880628108978,0.18468818068504333,-0.3802962005138397,-0.08984315395355225,0.15014028549194336,-0.0419420525431633,0.21611261367797852,0.11619840562343597,0.15068180859088898,0.16704870760440826,-0.0033042063005268574,0.13331274688243866,0.02154429443180561,-0.024213213473558426,-0.12403217703104019,0.49460941553115845,-0.24848517775535583,0.17722909152507782,-0.062472667545080185,-0.11620055139064789,0.10826443135738373,-0.15888428688049316,-0.22637392580509186,0.13891592621803284,-0.02788427844643593,0.21278950572013855,0.14581428468227386,0.12187827378511429,-0.0260038860142231,0.032918401062488556,0.04744281247258186,-0.03154377266764641,0.13090632855892181,-0.10647539049386978,-0.10739744454622269,0.06949897110462189,-0.11818103492259979,-0.10766860097646713,0.014082789421081543,-0.09319933503866196,0.021265273913741112,-0.06157604977488518,0.2516370415687561,0.1894238293170929,-0.27416062355041504,0.03300175815820694,-0.02773764356970787,-0.05705614760518074,0.3398672044277191,-0.22607669234275818,-0.3620111048221588,-0.286735475063324,-0.33000892400741577,0.6286696791648865,0.15680089592933655,-0.32678431272506714,-0.06436984241008759,0.2749522030353546,-0.4624086916446686,-0.2752895653247833,-0.18337593972682953,-0.20113730430603027,0.2287382334470749,0.14062908291816711,-0.27949991822242737,-0.04788615554571152,0.0691436156630516,0.06417924165725708,0.3583809435367584,-0.15156826376914978,0.2660540044307709,-0.08594492822885513,-0.19298872351646423,-0.04264281317591667,-0.4732886254787445,-0.2044612020254135,0.2475040853023529,0.15637001395225525,0.21352265775203705,-0.14207060635089874,0.02384529449045658,-0.19775459170341492,-0.34158918261528015,-0.17749656736850739,-0.1453970968723297,0.066511370241642,0.12402229011058807,0.02213020995259285,0.011519803665578365,-0.03539670258760452,-0.09116150438785553,0.1844010204076767,0.12056056410074234,-0.02629333920776844,-0.009090405888855457,0.2923089861869812,0.05295872315764427,-0.051039326936006546,-0.11195015907287598,0.04345964640378952,0.39524051547050476,-0.11226008087396622,0.02996363304555416,-0.07942746579647064,-0.1283065676689148,0.026696324348449707,0.24595165252685547,0.30211594700813293,-0.08220224827528,0.14259307086467743,-0.16313397884368896,-0.07453832775354385,-0.3171761929988861,-0.1560804545879364,-0.11923716217279434,0.6606758832931519,-0.16248510777950287,0.24940238893032074,-0.2770290970802307,-0.3229392468929291,-0.3372775614261627,-0.17274188995361328,0.15573105216026306,-0.1545034497976303,-0.08195145428180695,-0.09674912691116333,-0.017866581678390503,-0.006370194256305695,-0.09572920948266983,0.0354660227894783,0.42329853773117065,0.22166825830936432,0.2708984911441803,0.14305098354816437,0.18712329864501953,0.22025485336780548,0.17483316361904144,0.3960961699485779,0.06546050310134888,0.014375361613929272,0.06633346527814865,-0.38141998648643494,0.2696310877799988,-0.07323229312896729,0.29527801275253296,-0.4356277585029602,-0.021400734782218933,-0.038036614656448364,0.20438988506793976]", + "status": 200, + "statusText": "OK", + "headers": { + "access-control-allow-credentials": "true", + "connection": "keep-alive", + "content-type": "application/json", + "vary": "Origin, Access-Control-Request-Method, Access-Control-Request-Headers" + } + } + }, + "63f412fa3700827e5d9595f6efa30a9a9d37b32035dd39d7e74006db225e5227": { + "url": "https://api-inference.huggingface.co/models/facebook/bart-base", + "init": { + "headers": { + "Content-Type": "application/json" + }, + "method": "POST", + "body": "{\"inputs\":[\"hello\",\"That is a happy person\"],\"options\":{}}" + }, + "response": { + "body": "[[[[2.672325611114502,2.50421404838562,0.9557728171348572,8.316300392150879,1.148982286453247,2.5433359146118164,-0.5355440378189087,-1.5404587984085083,-0.6406532526016235,0.12640929222106934,1.9796031713485718,1.3178633451461792,1.636067271232605,1.567025899887085,-0.5852751731872559,-1.5976227521896362,-0.6492154598236084,2.343886137008667,0.8107420802116394,-2.408252477645874,-0.17802603542804718,-3.6117467880249023,1.4650510549545288,1.8292360305786133,0.8837819695472717,-3.973344087600708,2.0887579917907715,-37.85523223876953,2.4251511096954346,-1.5091309547424316,1.2548229694366455,-0.7047692537307739,0.4802199602127075,-1.5858352184295654,-2.7861876487731934,1.1629992723464966,0.4899820387363434,-0.8592716455459595,2.447277784347534,-1.773127794265747,-0.7780002355575562,-2.9316365718841553,-0.5998479723930359,-1.4065085649490356,-1.9456449747085571,2.494002103805542,-0.814651370048523,-0.9044945240020752,-1.788804292678833,0.004082640632987022,1.513800859451294,0.5988650918006897,-1.5653685331344604,-0.8548555970191956,-3.8440232276916504,-0.17118947207927704,1.2120941877365112,-1.3388392925262451,1.1803652048110962,0.4340195953845978,0.7819245457649231,1.2408150434494019,1.4373929500579834,-0.16252700984477997,-2.54614520072937,-0.05871419236063957,-3.748271942138672,-1.0291624069213867,0.09496330469846725,0.9180638790130615,1.0134168863296509,0.2329293191432953,1.2277202606201172,-0.5667043328285217,-2.4300849437713623,-0.5968604683876038,1.316862940788269,-0.2607786953449249,-2.2124688625335693,0.5628036856651306,-1.1539384126663208,2.6881401538848877,-3.293694257736206,-0.8692255020141602,1.0706886053085327,1.2899302244186401,3.4649198055267334,0.6340314745903015,0.0748906210064888,-3.39672589302063,0.3532467186450958,1.5739459991455078,-0.04166591167449951,0.03486054390668869,-0.8791869282722473,0.7222005724906921,-1.7740817070007324,1.7638566493988037,-1.933899164199829,-1.326216459274292,-0.9259042143821716,-3.370182991027832,-2.490670680999756,-1.8609850406646729,1.8978745937347412,-0.1483500599861145,0.9835394024848938,-0.884954035282135,-0.912520170211792,-2.064462661743164,2.7112178802490234,-1.7749046087265015,-0.9178159236907959,-0.16732308268547058,-0.6053192019462585,-0.7376862168312073,11.320415496826172,-3.220491647720337,-0.13730163872241974,0.30447208881378174,1.850489616394043,-0.11770050972700119,0.49147069454193115,3.388292074203491,-0.319121778011322,-0.2690792977809906,-0.04964015632867813,1.2573825120925903,-1.0697729587554932,-0.8714689612388611,-0.014999117702245712,1.395989179611206,1.7015546560287476,2.303368091583252,-1.7971538305282593,-0.0026496187783777714,-0.9511998295783997,3.137237548828125,1.2768049240112305,-0.9739989042282104,0.7825896739959717,-0.5343078970909119,-0.2425277680158615,2.09834885597229,1.6245579719543457,0.7055031061172485,0.13879215717315674,-1.4734950065612793,-0.27673158049583435,4.970396995544434,0.009087977930903435,0.24927596747875214,0.3525595963001251,2.0013294219970703,-2.673126220703125,1.6173861026763916,-1.389273762702942,-0.2749232053756714,0.1898973435163498,-0.15864157676696777,0.433605819940567,1.2899582386016846,0.31354236602783203,-0.8092317581176758,-0.33263033628463745,-0.5810660123825073,-2.5854454040527344,2.714123249053955,-0.4884917736053467,2.358330726623535,-3.3481533527374268,-1.0133299827575684,-2.3814103603363037,3.3914668560028076,1.1560919284820557,0.7299304604530334,3.438746213912964,1.28256356716156,-2.5481789112091064,-3.412276029586792,-0.9482222199440002,-0.46108630299568176,-1.0363408327102661,1.8645535707473755,1.0255396366119385,0.7349411249160767,-1.0651650428771973,0.991506040096283,2.2769510746002197,-0.7985047698020935,1.4100409746170044,0.06964513659477234,0.1624346822500229,0.8388949632644653,-1.6864067316055298,-0.021261777728796005,2.044755220413208,0.3825417757034302,0.9109058380126953,-1.2066640853881836,1.6124497652053833,-0.05515938624739647,0.12504081428050995,2.56547212600708,-1.6173499822616577,-1.8866065740585327,-2.0722532272338867,1.714130163192749,2.7687296867370605,0.005674803163856268,0.004502179101109505,2.219890832901001,2.4697632789611816,0.5900235772132874,-0.7276318073272705,-1.336129069328308,0.391836941242218,1.1669975519180298,-0.22410236299037933,-0.39594435691833496,1.0280641317367554,-0.636955201625824,1.1070935726165771,-2.15744948387146,1.6332508325576782,2.3618972301483154,-1.770157814025879,0.4894888401031494,-0.10633870959281921,-2.3573734760284424,2.5555386543273926,0.4673888683319092,-1.363445520401001,-0.6036263108253479,2.5565080642700195,1.5196036100387573,-0.5578732490539551,1.035062313079834,-2.579378843307495,0.1346612125635147,0.8762339353561401,4.2880120277404785,4.0635809898376465,0.8581491112709045,-1.7652119398117065,-0.7812799215316772,-1.148772120475769,-1.3170709609985352,0.504885196685791,0.8244535326957703,-2.611295223236084,1.3282257318496704,-1.5466445684432983,-3.030888557434082,2.100703716278076,-0.7318829298019409,2.493795871734619,0.18061409890651703,-1.2333136796951294,0.08857206255197525,-1.2716437578201294,0.7202314138412476,0.5479555130004883,0.9418054223060608,0.277593195438385,-3.8644323348999023,-0.13255631923675537,1.3154995441436768,-0.8411450386047363,-3.22646164894104,2.7993454933166504,2.1228878498077393,2.877192258834839,-0.03653191775083542,3.8397767543792725,-1.2012343406677246,-0.2000986784696579,-2.557375192642212,2.2039148807525635,-0.1935819536447525,0.09607617557048798,1.9048049449920654,2.521099805831909,-2.014256238937378,-2.334351062774658,-0.03715645894408226,-2.246765375137329,-0.08604752272367477,0.4529644548892975,2.7111923694610596,1.523434042930603,3.542795181274414,-0.49396249651908875,1.5415306091308594,-0.7052041292190552,0.38087308406829834,-0.7211762070655823,-0.6198402643203735,-0.8732420206069946,-1.8338171243667603,-1.8058693408966064,1.5712494850158691,1.2234723567962646,2.621225118637085,-0.3982386589050293,-0.9362390041351318,-0.011302544735372066,-3.31067156791687,-0.6429693102836609,0.6300665140151978,3.3309061527252197,-2.017911434173584,-0.10701975971460342,-2.017707109451294,0.08191251009702682,1.5107451677322388,0.847814679145813,-1.0576847791671753,0.17460572719573975,3.405677080154419,3.0411345958709717,3.062523126602173,-0.6490769982337952,2.702106237411499,1.028883695602417,0.33782243728637695,1.3674730062484741,0.6434910297393799,-0.579128623008728,0.1265849471092224,-1.2461572885513306,0.28455430269241333,0.04743412137031555,-2.197399616241455,-3.0956335067749023,0.3618243336677551,0.7278608679771423,-0.3986815810203552,-0.5877702236175537,1.7390224933624268,-0.6638080477714539,0.8370473384857178,-3.0037190914154053,-0.5993809700012207,2.4466378688812256,3.1702487468719482,-0.15936307609081268,2.220576763153076,0.22622375190258026,-0.4901823103427887,-0.29593756794929504,-1.8243352174758911,-0.6988994479179382,1.439091444015503,-0.442434698343277,-1.8303157091140747,1.8506476879119873,-0.38232237100601196,-0.29747122526168823,0.9571875929832458,-2.5345499515533447,-0.7505654096603394,-1.4193638563156128,1.0703725814819336,1.5167768001556396,0.4544171690940857,0.9590845108032227,1.9293692111968994,0.10763823240995407,0.3680690824985504,-0.10141703486442566,0.9629067778587341,-0.3702702224254608,0.5464768409729004,-1.8852860927581787,-2.000901699066162,-1.0218678712844849,-1.4257783889770508,0.17948545515537262,-1.107060432434082,-2.0509707927703857,0.642462432384491,-1.3183995485305786,-1.1589508056640625,0.22996775805950165,0.34821605682373047,-1.7167656421661377,-1.2594950199127197,-2.1514456272125244,-0.14519377052783966,-1.8515970706939697,-2.99771785736084,-0.49638012051582336,-2.2174553871154785,-2.1918866634368896,-0.3087821304798126,0.6759311556816101,-1.4400416612625122,-1.8568072319030762,-1.1703901290893555,0.5444899201393127,-0.31032854318618774,1.5223315954208374,2.0071310997009277,0.48375269770622253,1.488154411315918,0.6209878921508789,0.2566886842250824,1.778635859489441,1.4160996675491333,-0.9891373515129089,-1.042101502418518,-1.1802881956100464,2.026322603225708,-1.0982400178909302,0.6232690811157227,-1.0940041542053223,0.3823988735675812,1.6544737815856934,-2.1096951961517334,-1.6854941844940186,-0.023914555087685585,-2.64719557762146,-0.15524740517139435,-2.3108909130096436,0.4306913912296295,-1.3702054023742676,-0.051911983639001846,-0.9919342994689941,0.20125263929367065,-0.03346990421414375,-1.8382093906402588,-0.9291955828666687,0.9807111024856567,0.1650555431842804,1.8854910135269165,1.7761197090148926,-6.448305130004883,-0.17859968543052673,-0.6953073740005493,0.287322074174881,0.7733911275863647,0.4799708425998688,-1.9506160020828247,-1.425331711769104,-2.64825439453125,2.087005615234375,-0.4322896897792816,-1.925144076347351,1.9765357971191406,-0.9308236241340637,0.6771109104156494,-3.532660722732544,1.1432286500930786,-2.9070241451263428,-1.619387149810791,-0.7062323093414307,0.7823880314826965,0.18940848112106323,-0.20533642172813416,-0.3610897660255432,0.9014572501182556,-0.4717337489128113,-0.9956697225570679,-1.509607195854187,-1.2579149007797241,2.439073324203491,-1.6137157678604126,0.37492164969444275,-2.6659181118011475,0.4796176552772522,3.5239157676696777,0.634269118309021,0.029745418578386307,0.21596205234527588,0.9853318929672241,1.2432963848114014,1.155397653579712,2.40556001663208,-1.994175672531128,0.762732982635498,-0.12723957002162933,2.4550418853759766,4.068770885467529,0.28936681151390076,0.7799447178840637,-0.16697973012924194,-0.9904385209083557,0.06288894265890121,1.765315294265747,0.9707837700843811,-1.2217944860458374,-1.2968900203704834,-0.3997333347797394,1.7282977104187012,-1.3376792669296265,-2.6623857021331787,3.934894323348999,1.1694775819778442,-1.7467410564422607,0.7553266286849976,0.7446538805961609,0.6602479815483093,0.10431836545467377,0.37651604413986206,1.3164939880371094,-2.790994882583618,-0.40441396832466125,-0.6757910251617432,-1.4995460510253906,-2.7304983139038086,0.6963121294975281,3.3510959148406982,0.49408361315727234,1.1669015884399414,0.5363712906837463,-1.4078748226165771,0.87213534116745,0.6850096583366394,-1.8839846849441528,0.07627387344837189,-0.5882471799850464,-2.4684133529663086,-2.117269992828369,-0.08268614113330841,0.31569603085517883,2.653292655944824,2.5719070434570312,0.9975353479385376,1.4908746480941772,0.7679399251937866,0.6697357296943665,-0.4143240451812744,1.903511881828308,-0.3498075306415558,1.8510546684265137,0.14865045249462128,2.3070285320281982,0.6929863691329956,3.3400886058807373,-2.982815980911255,0.7229823470115662,1.0701780319213867,-2.4462199211120605,-1.3203680515289307,0.7219905853271484,0.00887630507349968,-1.5792381763458252,0.1260228455066681,1.5835598707199097,-0.14495927095413208,-0.6734780669212341,-5.027629852294922,0.2501510977745056,-2.3778088092803955,-1.1525663137435913,1.427769422531128,-2.335283041000366,-0.6257174611091614,3.391819477081299,2.0169031620025635,1.6315664052963257,1.2731631994247437,0.46403369307518005,-0.084164559841156,1.4592039585113525,1.1879746913909912,-2.9168167114257812,-0.7619357109069824,1.0465794801712036,0.7342356443405151,3.1640396118164062,0.6944179534912109,-0.3829326629638672,0.2311759889125824,-0.8574931621551514,-0.9462440609931946,-1.8556066751480103,-1.577594518661499,-0.14773738384246826,-1.8046432733535767,1.361258625984192,1.9340832233428955,-1.8920866250991821,-0.5205891728401184,1.074220061302185,1.6823391914367676,-2.651548385620117,-1.6237566471099854,0.08043566346168518,1.6286126375198364,2.181368589401245,0.5841914415359497,-0.8775614500045776,2.5515451431274414,-1.1773401498794556,-1.3262302875518799,-0.7771798372268677,1.6689677238464355,-0.13822229206562042,-0.1201450526714325,-0.007787739858031273,1.5884228944778442,-0.7078864574432373,0.8775821328163147,-0.28912732005119324,1.4638646841049194,-0.6212756037712097,1.5254799127578735,-0.6215970516204834,-0.05173814296722412,1.0429046154022217,-1.20692777633667,-4.825831413269043,-0.26986080408096313,1.6337878704071045,0.2805921137332916,0.3855268359184265,-3.3452394008636475,0.23581194877624512,-0.3070557713508606,-1.3874166011810303,0.28547704219818115,-2.5836689472198486,0.24112048745155334,1.8403202295303345,-1.271685242652893,0.9438096284866333,1.1567087173461914,-0.24707992374897003,-3.629767894744873,1.3736321926116943,1.6443581581115723,-0.8644101023674011,2.255070686340332,0.8769540786743164,-4.059132099151611,1.4414582252502441,0.3464972972869873,0.7110358476638794,-1.3900426626205444,1.7912260293960571,-0.5976037383079529,0.7088756561279297,0.3008458614349365,0.32288801670074463,-0.26945266127586365,-0.010191947221755981,-0.43154990673065186,0.9099328517913818,0.26669183373451233,-0.040021318942308426,-2.4465932846069336,4.463349342346191,-0.5759674310684204,3.3680899143218994,-1.1532745361328125,-0.0783592090010643,1.1315417289733887,0.5085360407829285,-0.9250596761703491,1.1696780920028687,0.6877067685127258,-0.2745026648044586,1.4743283987045288,1.9249236583709717,2.609773874282837,2.574415445327759,1.0268235206604004,0.6325650215148926,0.6466307044029236,0.051292628049850464,1.6687953472137451,0.8726184368133545,1.937805414199829,-2.1542561054229736,3.738271474838257,1.275121808052063,0.13373982906341553,0.0129895294085145,-0.20813365280628204,-1.3881938457489014,2.326505184173584,-0.5382410883903503,-1.1253246068954468,0.5546759366989136,-1.8588639497756958,1.1377618312835693,-2.8819639682769775,1.215484619140625,-1.0397981405258179,8.978413581848145,-2.877748727798462,-0.692847490310669,3.0689449310302734,0.11418529599905014,-0.05368434265255928,-1.3040549755096436,0.4706014096736908,-1.8563463687896729,1.1400492191314697,1.6292494535446167,0.4183240234851837,-2.2161054611206055,2.336456775665283,2.0525734424591064,-0.1043439731001854,-3.458585262298584,0.6032114624977112,0.7897905111312866,-1.6803206205368042,-3.5964162349700928,-3.0784285068511963,2.241455554962158,1.6762619018554688,0.8858187794685364,-1.992279052734375,-0.35413244366645813,0.9769918918609619,-2.096804618835449,-0.79485684633255,-0.1377621293067932,-0.6722776889801025,5.717855930328369,1.512729287147522,0.9061897397041321,-0.15208764374256134,-1.5175554752349854,1.0491511821746826,0.06366446614265442,-1.3162943124771118,0.37130284309387207,2.255850315093994,2.5601296424865723,1.9982783794403076,-0.01779297925531864,-0.9784016609191895,1.9736642837524414,0.5554543137550354,-1.4021457433700562,1.1884125471115112,1.258811593055725,4.599393844604492,0.3775208294391632,0.11183235049247742,0.3182468116283417,0.9267253875732422,1.052743673324585,-1.3790258169174194,-0.4595460593700409,-0.7330173850059509,-1.7888197898864746,1.9815294742584229,-0.7418017387390137,0.054221704602241516,4.648568153381348,-0.8062955737113953,-0.5847632884979248,2.239189624786377,0.013025864958763123,0.3323403000831604,0.7159938812255859,-3.7529137134552,-0.6442736983299255,-1.6921838521957397,1.1958494186401367,-0.725488007068634,-0.3778855502605438],[0.5991387963294983,-0.29249465465545654,-0.1796199530363083,1.919448733329773,0.381143182516098,0.7225044965744019,0.05216384679079056,-0.46040990948677063,-1.3661925792694092,-1.870573878288269,-0.6087859869003296,0.41762444376945496,1.7809834480285645,2.0400702953338623,0.21363435685634613,-2.512711763381958,0.07236405462026596,-0.9913540482521057,0.9820248484611511,0.8267716765403748,-0.32451194524765015,0.2098494917154312,1.0117181539535522,-0.20290052890777588,-0.9969698190689087,0.35153377056121826,-0.7442805171012878,-7.9709649085998535,0.7876771092414856,-4.896002292633057,-0.5720916986465454,-1.230096459388733,0.5036693811416626,-1.6513720750808716,-1.0564848184585571,1.1884387731552124,0.9121360778808594,-0.40145444869995117,0.2696302533149719,-0.935062825679779,-0.046559251844882965,-4.786961555480957,1.0762362480163574,0.22411882877349854,0.392598956823349,1.247998833656311,-2.564788341522217,0.8707666397094727,-0.375168114900589,1.314724087715149,0.05608823150396347,1.1774002313613892,-0.41724854707717896,0.5961441993713379,-0.574211061000824,-0.19248467683792114,-1.1672862768173218,-2.1329548358917236,-0.561226487159729,0.11878064274787903,-0.5770310759544373,-1.0376619100570679,-0.2738937735557556,1.1875756978988647,-0.590366780757904,1.1429229974746704,-1.5065170526504517,0.1410452425479889,-2.5073134899139404,0.12386873364448547,-0.13412366807460785,0.21223080158233643,-1.1450541019439697,1.8919841051101685,-0.7382315397262573,0.6887722611427307,-1.6742671728134155,0.12445732206106186,-1.7221119403839111,-0.1527954339981079,-0.22579674422740936,1.0455031394958496,-0.1004607230424881,-0.564015805721283,0.4009075164794922,0.7147650122642517,0.2548999786376953,-0.15739820897579193,-0.20514674484729767,-1.1717499494552612,0.350149542093277,-0.18014556169509888,1.4161641597747803,2.705902576446533,0.4626505970954895,-0.13499541580677032,0.1910802721977234,-1.5297303199768066,-0.5416795015335083,-1.2470545768737793,0.21236449480056763,-0.07928772270679474,0.3320789039134979,0.6299961805343628,0.8650990724563599,3.1902196407318115,2.4228579998016357,-0.49810680747032166,0.6533040404319763,1.338671088218689,0.20054329931735992,0.15806512534618378,-0.5077573657035828,-1.4883273839950562,-1.963071346282959,-0.43328723311424255,6.962282180786133,-0.48953330516815186,-1.3045614957809448,1.5527644157409668,2.455288887023926,-0.0034871099051088095,-0.5041066408157349,1.4589546918869019,-0.0740339607000351,0.5716285109519958,2.4626500606536865,-1.1344541311264038,1.0902884006500244,-0.6413210034370422,0.21993976831436157,-0.15470615029335022,0.24409109354019165,-0.15968002378940582,1.0047608613967896,-0.8011566400527954,-0.3910839259624481,-0.9707965850830078,0.9779938459396362,-0.9189601540565491,-1.4123737812042236,1.3488595485687256,-0.783364474773407,-2.0556142330169678,0.4920037090778351,-0.32344621419906616,0.24953915178775787,0.4578758478164673,0.4982205629348755,3.0139384269714355,0.8541121482849121,-0.3411870300769806,-0.044525984674692154,1.5238471031188965,-0.3772408068180084,-0.21436841785907745,-0.6124038696289062,0.2363949716091156,1.0818872451782227,-0.41466274857521057,0.5278968214988708,0.6052096486091614,0.8868672847747803,0.8631370663642883,0.294329434633255,1.6044349670410156,-0.24601158499717712,-0.3948054611682892,1.6840488910675049,1.11087965965271,-0.8792397975921631,-0.722053587436676,1.533674955368042,0.7680609226226807,0.2701377868652344,-0.855474591255188,0.5121431350708008,0.9042444229125977,-1.7729175090789795,-0.3046753704547882,1.5198513269424438,1.688386082649231,0.28584182262420654,0.4281855821609497,0.8467810750007629,1.2795920372009277,0.1581910401582718,1.0648047924041748,0.1619158685207367,-0.16489459574222565,0.6428720355033875,0.6374465823173523,-0.7098056077957153,0.825005292892456,0.6891952753067017,-1.063656210899353,-0.7484556436538696,-1.1869360208511353,-1.3777902126312256,-0.6504638195037842,1.2985985279083252,-1.348081111907959,0.8268174529075623,-1.6510775089263916,0.4382933974266052,-1.7864384651184082,-1.1683403253555298,-0.2388029843568802,0.7316940426826477,0.7706491351127625,-1.4365335702896118,1.1334716081619263,1.6425453424453735,-1.0183528661727905,-0.05514201149344444,0.8199599981307983,0.14878220856189728,0.9753794074058533,-0.028628364205360413,0.160971999168396,-0.31058916449546814,-1.3156108856201172,1.1617529392242432,0.17558762431144714,1.0758800506591797,0.9216105341911316,-2.9281234741210938,0.7058313488960266,-0.946496307849884,1.0676608085632324,1.7742561101913452,0.5265113115310669,0.7489197254180908,1.5032762289047241,7.096019744873047,-0.6912442445755005,-0.6928356289863586,0.3450526297092438,-2.614150047302246,1.7016116380691528,0.18813352286815643,1.9313621520996094,0.8306044936180115,-0.30299806594848633,-1.3940836191177368,0.05168536305427551,0.9927850365638733,0.438920795917511,0.47066834568977356,0.5352868437767029,-0.6733259558677673,-1.2353639602661133,-0.4103972911834717,0.5836312174797058,1.0315791368484497,-1.4940073490142822,0.5027442574501038,-1.4036048650741577,1.3145089149475098,1.3381569385528564,-0.329039990901947,-0.7977293729782104,-0.47181665897369385,-0.754451334476471,0.11005345731973648,1.1753376722335815,0.3201742172241211,1.5402042865753174,0.0919727012515068,-0.8092256188392639,-0.07520680129528046,0.17838206887245178,0.873862087726593,-1.5840483903884888,0.5772824287414551,-0.7149471044540405,0.4313594698905945,0.6917562484741211,2.0047056674957275,-1.0726314783096313,-0.0037780317943543196,0.34768176078796387,1.001204013824463,0.0026091986801475286,-0.3254738748073578,1.961605191230774,0.6964108347892761,-0.5222684144973755,-0.6617916822433472,0.3433770537376404,-0.684648871421814,1.2542202472686768,-1.1212211847305298,0.9069063663482666,-2.1732521057128906,-0.005128197371959686,0.33078476786613464,0.3573293089866638,1.522876501083374,2.7859842777252197,0.6356169581413269,0.4925147593021393,2.5346179008483887,-0.5747100114822388,-1.1139925718307495,0.4895140826702118,1.0990833044052124,0.9780676960945129,0.04293660447001457,-0.551690936088562,1.8218448162078857,-3.030421495437622,-0.038301847875118256,0.08867533504962921,0.6530439257621765,0.2718610167503357,1.9025145769119263,-0.2527400553226471,0.11178324371576309,0.5711184740066528,-0.7194855809211731,0.25776129961013794,0.11204893887042999,0.00045545652392320335,0.626732587814331,-0.07229968905448914,0.05869026854634285,-0.4260179102420807,-1.1948915719985962,0.06518806517124176,-0.5281097888946533,0.07619968056678772,0.22705194354057312,0.7014564275741577,-0.0323198065161705,-0.2930820882320404,-0.9242119193077087,1.1093368530273438,-0.6883201003074646,-0.18935057520866394,0.30657413601875305,0.5437315702438354,1.3769179582595825,0.549465537071228,0.9649417400360107,0.7326127886772156,0.8165838122367859,-1.423271656036377,0.4624345898628235,2.138986825942993,-0.9680389165878296,-2.5196986198425293,-0.2593857944011688,1.566569447517395,0.04166821017861366,-1.3321573734283447,0.8960971832275391,0.7178968787193298,-0.2868856191635132,-0.4309641718864441,-0.774219274520874,-0.04623040556907654,-0.5945940017700195,0.2259962111711502,-0.26545450091362,0.7514055967330933,-0.6325325965881348,-1.6168712377548218,1.2751485109329224,0.5606679320335388,-1.025159239768982,-1.4978910684585571,0.11801925301551819,0.6559060215950012,1.439111590385437,-0.5047789216041565,-2.087798833847046,-0.5012431144714355,-0.20822636783123016,2.4562206268310547,-0.23561668395996094,0.21358104050159454,0.6371731758117676,0.6461566686630249,1.0364577770233154,0.9936119914054871,2.0034759044647217,-0.35088637471199036,-0.39866989850997925,0.1595849245786667,-0.8768236637115479,-0.6563764214515686,-0.9132116436958313,-2.220423936843872,0.2158619463443756,-1.9518263339996338,0.03850596398115158,1.0257453918457031,0.6683045029640198,0.3253173828125,-0.10205633193254471,-1.1910866498947144,0.39552780985832214,1.3126556873321533,-0.6958354711532593,-0.661205530166626,0.29890212416648865,-0.0011965635931119323,0.11884739995002747,-0.018433691933751106,1.5188615322113037,1.3134855031967163,-0.1392383873462677,0.7517111301422119,0.33967751264572144,-1.4752122163772583,0.3201700448989868,-0.516739010810852,1.3304316997528076,-1.0154649019241333,-1.0526405572891235,-0.8310539722442627,-0.5852141380310059,-0.49116113781929016,1.3090604543685913,-1.1394537687301636,-0.030619144439697266,0.5529965162277222,-0.3471980392932892,-1.1412714719772339,1.4124418497085571,0.17668931186199188,0.9387925267219543,-0.1994755119085312,1.1967209577560425,0.2011498212814331,0.8353725075721741,-4.407482147216797,-0.7243305444717407,-0.44230911135673523,-2.713855743408203,-0.61957848072052,-0.20841090381145477,-0.29832932353019714,-0.7210438251495361,-0.8802530169487,2.268395185470581,-0.056525819003582,0.07994439452886581,0.6642451882362366,1.188638687133789,0.5040573477745056,0.04677901044487953,0.14753855764865875,0.999348521232605,-0.24353161454200745,0.5302947163581848,1.5477840900421143,-1.6526882648468018,0.024250198155641556,-0.4210301339626312,1.4358186721801758,-0.22223258018493652,0.4026954174041748,0.24771098792552948,2.091907024383545,-0.9357525706291199,1.4121527671813965,0.25775986909866333,-0.07314381748437881,1.7730753421783447,0.618376612663269,0.4243127405643463,1.1723490953445435,-1.078821063041687,0.09827404469251633,2.526345729827881,-0.25521430373191833,1.0992926359176636,1.4371799230575562,0.5621139407157898,-0.37747904658317566,1.08479642868042,0.7611647844314575,1.346425175666809,0.5274400115013123,2.097818613052368,-0.42989760637283325,0.8882436752319336,2.4611470699310303,1.1307497024536133,-0.5157853364944458,-1.4034805297851562,-0.07229476422071457,0.39794641733169556,-0.04679369181394577,1.7954157590866089,-10.671632766723633,-0.6297544836997986,0.8845587968826294,0.409748375415802,0.5654922723770142,0.6950252652168274,-0.31603825092315674,1.596963882446289,1.1554548740386963,-1.540928840637207,0.5255448818206787,0.820087730884552,-1.5447474718093872,-1.0933176279067993,-0.9844130873680115,0.09423746168613434,2.510220527648926,0.3721831738948822,-1.297945499420166,0.03188782185316086,0.7202101349830627,-0.5164400935173035,-2.205911636352539,-1.2863703966140747,0.47010236978530884,0.8618618845939636,-2.4467718601226807,-0.35116857290267944,-1.3795051574707031,-1.0044957399368286,0.29860401153564453,0.19348755478858948,0.11996999382972717,1.0251935720443726,0.008573722094297409,0.271244615316391,0.1854126900434494,0.3794289231300354,-1.9779150485992432,-0.05859634652733803,0.5486980080604553,-0.5983585715293884,0.14603881537914276,-1.4628154039382935,-0.7114109396934509,0.7805187106132507,0.8529943227767944,0.43020227551460266,-0.22309809923171997,0.16200534999370575,0.6947742700576782,-0.08398960530757904,-0.10408653318881989,0.799139142036438,-0.2482079267501831,-1.8792084455490112,-0.9283033609390259,-0.2563265264034271,0.46854352951049805,-0.6404037475585938,-1.4747520685195923,2.3343563079833984,-0.756454586982727,0.6852813363075256,-0.16269372403621674,-0.7791247367858887,0.3447639048099518,-1.050323724746704,-0.47885775566101074,0.09677141159772873,-2.589703321456909,-0.09004688262939453,-0.10870584100484848,1.343514323234558,0.1888272911310196,-0.5866469740867615,0.7287254333496094,-6.095321178436279,-0.10051317512989044,0.31668612360954285,1.0833348035812378,-2.558425188064575,1.2186954021453857,1.4917480945587158,0.21556617319583893,0.7134578824043274,1.3923144340515137,-0.8290747404098511,-0.45493215322494507,-0.4709627628326416,-1.128711223602295,-1.6320589780807495,1.9207137823104858,0.8067595362663269,0.5119145512580872,0.874517560005188,0.4691256582736969,-0.22560402750968933,-0.5052212476730347,0.5754783749580383,0.5783876180648804,-0.7370427846908569,-0.18255986273288727,0.10647515952587128,0.6031343340873718,0.06282065808773041,-0.6291515231132507,1.929413080215454,-0.29454487562179565,1.2068523168563843,0.38790297508239746,1.802470088005066,-0.5547768473625183,0.7356754541397095,0.4795130789279938,0.65969318151474,-3.2182250022888184,0.5564968585968018,-0.6493083834648132,-0.5795018672943115,0.8230701684951782,-0.9422160387039185,-0.28670409321784973,-0.9310612082481384,-0.4139505922794342,-0.8327144980430603,-0.6449974179267883,0.23240970075130463,-0.3294084370136261,-1.294510841369629,0.09845912456512451,-0.06558240950107574,-0.4212123453617096,-0.16570758819580078,0.7653583288192749,0.29782313108444214,1.8937433958053589,-0.5555777549743652,-0.8999090194702148,-2.9179728031158447,-0.49217575788497925,2.7156147956848145,-0.3224722146987915,-1.414928913116455,1.1246354579925537,0.36248916387557983,2.416347026824951,0.019409267231822014,0.4144773781299591,0.328447163105011,0.3888773024082184,-0.9464734792709351,1.462705373764038,0.29846200346946716,0.2992432117462158,2.4747626781463623,0.7859262228012085,-0.35782143473625183,-0.5744104385375977,0.6949495673179626,-0.4501701295375824,2.8469996452331543,-0.03356223180890083,-0.7938408851623535,2.853900671005249,0.81156325340271,0.22932851314544678,-0.18001998960971832,0.86962890625,0.5130053162574768,1.4436208009719849,1.282704472541809,-1.1126333475112915,0.9788200259208679,0.9639182090759277,-0.03728427365422249,-0.06057029590010643,-0.36208197474479675,0.26318806409835815,-0.6517223715782166,1.0979692935943604,0.8440127372741699,0.9020073413848877,0.9537433385848999,-1.6961034536361694,0.8795698881149292,1.263808250427246,0.5130756497383118,1.0078104734420776,-0.5594006776809692,0.036849770694971085,-0.2585074007511139,-0.7734720706939697,-0.2691654860973358,-1.1562303304672241,-0.6315577626228333,-1.7536702156066895,-1.536940336227417,-0.5327937006950378,0.7674316763877869,0.6532198190689087,-0.4888933300971985,0.3295755088329315,0.9691048860549927,0.09093374758958817,0.12750282883644104,-2.1396331787109375,-0.4239489734172821,0.17176911234855652,1.46799635887146,-0.7639562487602234,-0.33043399453163147,-0.3066555857658386,0.5207104682922363,-0.9266504645347595,-0.20500394701957703,0.8322007060050964,1.4440628290176392,1.085283875465393,0.254873126745224,0.17231443524360657,1.2213374376296997,-1.0693483352661133,-0.08143936842679977,-2.541405200958252,-0.5195872187614441,3.1854054927825928,-0.4717021882534027,1.8682502508163452,1.0791183710098267,-0.6648044586181641,-1.738637089729309,0.8040235638618469,-0.08816763758659363,-0.2389017939567566,0.22822655737400055,-0.9969317317008972,0.06382832676172256,-0.061380963772535324,0.1746620535850525,0.28205499053001404,0.6384837627410889,-0.8140308260917664,-0.36014261841773987,0.11272715777158737,2.9043638706207275,-0.527350902557373,0.9058141112327576,0.3313690721988678,1.1980087757110596,0.1172025054693222,3.3169140815734863,-0.9534863829612732,-1.796585202217102,1.3776775598526,1.266082525253296,0.940890371799469,3.000814199447632,-0.5165240168571472,-0.07940036058425903,-1.2343757152557373,2.0406322479248047,2.1295089721679688,0.7967337369918823,1.0020878314971924,0.008064046502113342,1.3905593156814575,0.7374576330184937,1.6300907135009766,-1.5232951641082764,1.450317144393921],[-0.013985149562358856,-0.5581284761428833,0.465236634016037,1.363634467124939,1.0041147470474243,1.3447248935699463,0.755121648311615,0.15425273776054382,-0.9743207097053528,-3.6051387786865234,-0.9646400809288025,0.7302402853965759,1.0987462997436523,0.5194811224937439,-0.17205274105072021,-2.036917209625244,0.28843122720718384,0.40565523505210876,0.8334067463874817,0.14573827385902405,-0.35121697187423706,0.28062114119529724,0.6974562406539917,1.4510135650634766,-1.0871684551239014,-1.0985568761825562,-0.4248908460140228,-3.179854393005371,0.3325141668319702,-4.9324164390563965,-1.696405291557312,-1.7112789154052734,-0.9732221961021423,-0.3111017048358917,-1.7985972166061401,0.9096637964248657,1.0982375144958496,1.6958367824554443,-0.3015003800392151,-1.2759332656860352,0.7239583134651184,-2.7414703369140625,0.28537479043006897,0.346686452627182,0.3816065490245819,0.302418053150177,-1.3357375860214233,2.0914862155914307,-1.7186129093170166,1.489104986190796,-0.2631932497024536,0.3488732576370239,1.6194322109222412,0.5272852182388306,-0.1792721152305603,0.07498597353696823,-2.390707015991211,-1.6663438081741333,0.4941861033439636,0.15331968665122986,-0.5001552700996399,-1.0287479162216187,-1.1968026161193848,0.15042610466480255,0.7601289749145508,1.4909900426864624,-0.35115689039230347,0.733787477016449,-0.5269650220870972,0.3484765589237213,-0.9800612926483154,3.3876821994781494,-1.0116146802902222,2.5984768867492676,-1.7555129528045654,-0.7370501756668091,-0.4284513294696808,0.08181113004684448,-1.5977715253829956,0.7894464731216431,0.1696985512971878,0.30092373490333557,0.08460525423288345,0.18320460617542267,-0.20939567685127258,0.2098560333251953,-0.48104822635650635,0.3891761004924774,-0.7500115633010864,-0.2798421382904053,-0.6484010815620422,-0.24261870980262756,2.107940912246704,2.9195597171783447,1.3176805973052979,1.3461376428604126,0.7799919843673706,-1.9504528045654297,1.0732455253601074,-0.46740755438804626,-1.0429162979125977,0.07405083626508713,0.1146434023976326,0.7776548266410828,0.2514214813709259,2.4634344577789307,2.9127631187438965,-0.031773891299963,0.2462889552116394,1.8552892208099365,-0.7099905014038086,-0.3394816517829895,0.2728663384914398,-1.4738759994506836,-0.9348519444465637,-0.20600777864456177,4.43497896194458,-0.7154649496078491,0.5555182695388794,0.7377873063087463,2.645824432373047,1.1463665962219238,-1.2026335000991821,1.5613852739334106,-0.9725161790847778,0.7937125563621521,-0.6786139011383057,0.038025181740522385,0.004253866150975227,-0.8220470547676086,0.5559172630310059,0.2425263673067093,0.1349787712097168,-0.8055983185768127,0.3558002710342407,-0.24193942546844482,-0.7501919269561768,-1.3953750133514404,0.6054768562316895,-0.7717269062995911,-1.1283209323883057,0.6978000402450562,-0.4036000370979309,-1.7217533588409424,1.1056156158447266,-1.296886920928955,0.5533694624900818,0.7893628478050232,0.6051868200302124,2.970456838607788,1.2695404291152954,-0.4228779971599579,-0.11155159771442413,0.8174147605895996,-0.5718282461166382,-1.0215437412261963,-1.965764045715332,-0.12793315947055817,1.0408401489257812,-0.6529883146286011,0.8968392610549927,1.0490139722824097,0.10447254776954651,0.7918830513954163,1.0107935667037964,1.2042479515075684,-0.4402464032173157,-1.474461317062378,1.546726942062378,0.9738971590995789,0.16108770668506622,1.449118971824646,0.20906080305576324,0.6574728488922119,-0.48383721709251404,-0.014526765793561935,1.4115521907806396,0.5213931798934937,-0.816022515296936,-0.09510981291532516,0.6081529259681702,1.4139249324798584,1.0036306381225586,-0.2567487359046936,0.5312392711639404,1.17853581905365,0.32938119769096375,1.725142478942871,0.35907208919525146,0.30217668414115906,0.8552294969558716,1.2139031887054443,-0.2902644872665405,0.23028305172920227,1.0258233547210693,-0.9440180063247681,-0.06611821055412292,-1.2920728921890259,-0.0803549587726593,-0.6172142624855042,0.8776963949203491,-1.4910855293273926,0.9251457452774048,-1.7679312229156494,-0.9798073768615723,-2.041593074798584,1.6543803215026855,0.18559443950653076,1.0889979600906372,0.949674665927887,0.058016903698444366,1.4385097026824951,-0.8481146693229675,-0.7497791647911072,-0.7879437804222107,1.0187873840332031,-0.9551068544387817,-0.2010296881198883,0.6516093611717224,-0.5113725662231445,-0.09767871350049973,-1.8875612020492554,0.6109999418258667,0.388252854347229,0.1598907709121704,1.1786599159240723,-1.7578163146972656,1.5516934394836426,-1.1246449947357178,0.9257334470748901,1.1190268993377686,1.01763117313385,0.16615192592144012,0.9057816863059998,4.028295516967773,-0.9308400750160217,-2.60227632522583,1.7489029169082642,-2.099473714828491,0.41008707880973816,0.6382234692573547,1.857334017753601,1.3480443954467773,1.1350065469741821,-0.877079427242279,1.2405462265014648,0.09134022891521454,1.7143911123275757,1.2367550134658813,1.7005667686462402,-1.410414695739746,-0.13789232075214386,0.6894271373748779,0.780340313911438,1.1028165817260742,0.04407030716538429,0.5834458470344543,-0.16761451959609985,0.7207984924316406,0.9901211261749268,-0.7400801777839661,-0.6911551356315613,0.29008787870407104,-0.7660514116287231,-0.551077127456665,0.05627170577645302,-0.42137598991394043,1.2710703611373901,0.43840688467025757,0.7645717859268188,0.5553426146507263,-1.1391119956970215,0.6145095825195312,-2.3703455924987793,-0.5903030037879944,-0.3093317449092865,-0.34709665179252625,0.3379100263118744,1.1645071506500244,-1.1111141443252563,0.02610822021961212,1.0157614946365356,1.8646142482757568,-0.4437938928604126,0.0742158517241478,0.5055253505706787,-0.30507081747055054,0.8564779162406921,0.03328999876976013,0.23707760870456696,0.14169707894325256,2.026506185531616,-1.9731786251068115,1.049230694770813,-0.7908373475074768,-0.09206801652908325,0.10515288263559341,1.7991366386413574,1.1411114931106567,1.9759902954101562,0.33405598998069763,-0.49886465072631836,1.7678589820861816,-0.29506754875183105,-0.4369550347328186,1.907060146331787,0.09323978424072266,0.08017542958259583,-1.1982951164245605,-0.4305717349052429,2.5432913303375244,-2.3647959232330322,-0.49817654490470886,-0.46193379163742065,0.6546801328659058,1.237341046333313,2.0579655170440674,0.42230889201164246,1.0801353454589844,1.2119805812835693,-0.24663230776786804,-1.3628299236297607,0.3206491768360138,0.4585663080215454,1.2061445713043213,0.009210207499563694,0.542193591594696,-0.7657398581504822,-1.1059542894363403,0.8138577938079834,-0.1509631723165512,0.13803988695144653,1.0329616069793701,1.8736846446990967,-0.5787415504455566,-1.0551329851150513,0.529024600982666,0.6438793540000916,-0.5921010971069336,0.3935485780239105,0.6694592833518982,-0.5932615995407104,-0.13699881732463837,-0.18647226691246033,0.9721981883049011,1.4862154722213745,0.981950581073761,-1.9926444292068481,-0.24404989182949066,1.3628400564193726,-0.09506399184465408,-2.6678318977355957,0.14157643914222717,0.9907117486000061,1.8231844902038574,-1.1484096050262451,-1.0521070957183838,-0.004821129143238068,1.3420976400375366,0.3311329782009125,-1.297326683998108,-0.34045007824897766,-0.3730870485305786,0.7196170687675476,-1.2715120315551758,1.553449273109436,-1.1584528684616089,-1.0575263500213623,0.9102122187614441,0.2958146333694458,-0.10929490625858307,-1.209720253944397,-0.6205447316169739,0.7591383457183838,1.3525575399398804,-0.9159879684448242,-1.014247179031372,-0.6099812388420105,1.2079029083251953,1.5024865865707397,-1.4093328714370728,-0.504969596862793,0.7501028180122375,-0.2907218933105469,1.2188047170639038,0.0785633996129036,1.6346111297607422,-0.9183326363563538,-2.088510036468506,0.9675999879837036,0.1848839521408081,-0.18067608773708344,-1.28606116771698,-2.4197919368743896,1.4845061302185059,-1.4597458839416504,0.7532257437705994,1.1175556182861328,0.8153547048568726,0.7515350580215454,0.2693672180175781,-1.0904059410095215,1.9324557781219482,1.6757588386535645,-0.7723678350448608,1.560440182685852,0.34664610028266907,0.7796040177345276,-0.7002037763595581,0.25672632455825806,0.735971212387085,0.5848448872566223,-0.5610506534576416,1.4295530319213867,0.418648362159729,-1.4003338813781738,-1.0883749723434448,-0.021750425919890404,0.40143218636512756,-0.6958253979682922,-0.6856096982955933,-0.4426597058773041,-0.6773493885993958,-0.7298418879508972,1.9059805870056152,0.2864443361759186,0.6202002167701721,0.43712157011032104,0.5442112684249878,-0.6101868152618408,0.606918215751648,-0.3880099058151245,0.593295693397522,2.3747594356536865,0.8130868077278137,1.577755331993103,-1.2741484642028809,-2.045714855194092,-0.8193875551223755,0.7519145607948303,-3.736196994781494,0.2690132260322571,-0.2978229522705078,-0.28496313095092773,-0.4777773916721344,0.14811675250530243,1.9890038967132568,1.2527639865875244,0.9231563806533813,1.336353063583374,0.15845417976379395,0.19712606072425842,-0.12370128184556961,-0.027920765802264214,1.5420156717300415,0.5995923280715942,-0.38403382897377014,0.5588292479515076,-1.6743391752243042,-0.3430063724517822,-0.8817715048789978,-0.42003294825553894,0.13098838925361633,0.9690127968788147,0.19474844634532928,0.8611012697219849,0.0959651991724968,1.0284510850906372,-0.30249300599098206,-0.6676191687583923,1.0235687494277954,1.0957424640655518,0.14514462649822235,0.3767484426498413,-0.23709362745285034,0.4304158389568329,1.9620378017425537,0.956232488155365,0.6088165640830994,1.9502296447753906,0.8086229562759399,0.7576502561569214,0.4878369867801666,1.0528095960617065,0.5308319926261902,0.7724953889846802,1.897736668586731,-0.3144380748271942,1.9566508531570435,1.945376992225647,0.571932315826416,-0.9554675221443176,-1.3315078020095825,-1.0006626844406128,0.4520273208618164,1.357141375541687,1.254917025566101,4.968866348266602,0.15452906489372253,1.050595998764038,0.38222306966781616,0.9116942882537842,-0.3171842098236084,0.39554545283317566,0.5258887410163879,1.0294198989868164,-1.0077389478683472,1.1267719268798828,1.1420460939407349,-1.8948934078216553,-1.18655526638031,-0.9557605385780334,0.6641287803649902,2.2558438777923584,0.22484132647514343,-1.1366137266159058,0.45909422636032104,0.9054217338562012,-1.13377845287323,-2.969135284423828,-1.930411458015442,-0.8315331935882568,1.5887051820755005,-1.2313807010650635,-0.1211061105132103,-1.0979623794555664,-0.15174591541290283,0.12514592707157135,0.15397857129573822,1.9255053997039795,0.5728210806846619,-1.0774037837982178,1.2240244150161743,-0.6051074266433716,-0.5501213669776917,-3.698941469192505,0.47147589921951294,-0.2429375797510147,-1.0821833610534668,0.0030929571948945522,-1.8525348901748657,-0.6661763787269592,0.14756597578525543,-0.34446609020233154,-1.0306962728500366,-0.38151994347572327,0.7368677258491516,0.1129644513130188,0.31537139415740967,-0.18573828041553497,-0.5224941968917847,-0.6385959982872009,-2.078144073486328,-1.257632851600647,-0.8458448052406311,-0.14168517291545868,-0.10869644582271576,-0.6193901300430298,1.6328283548355103,0.09499719738960266,1.0941170454025269,-0.42446911334991455,-0.07565426826477051,0.7300320267677307,-2.7150731086730957,0.5239462852478027,0.34050676226615906,-2.424237012863159,0.6384661197662354,0.8487654328346252,0.9029663801193237,0.5437183380126953,-0.4714617431163788,-0.03202458471059799,-4.949184894561768,-0.9940857887268066,-0.28729525208473206,0.6165178418159485,-2.479015827178955,1.7643681764602661,0.80024653673172,1.20760178565979,-0.5336005091667175,1.9016026258468628,-0.4973559081554413,-1.0566554069519043,-1.6419432163238525,-0.6590693593025208,-0.7888196706771851,1.1866204738616943,0.2395983338356018,0.28329798579216003,1.4983952045440674,-0.4530993700027466,0.1703045517206192,-0.10937432199716568,0.27057120203971863,-0.6807404160499573,-1.7165757417678833,0.7239180207252502,-0.42896127700805664,0.7989705204963684,-0.6212442517280579,-0.8589970469474792,1.5436298847198486,-1.2148877382278442,-0.2988688051700592,0.887687087059021,0.6542133092880249,-0.22589291632175446,0.5917953848838806,0.8797026872634888,0.40366652607917786,-5.633876323699951,0.3226788640022278,-0.924079418182373,-0.3902236521244049,0.9745211601257324,-0.44083264470100403,0.3985271751880646,-1.8545948266983032,-0.947898805141449,-1.005172848701477,0.4293026626110077,-0.06563445925712585,-0.4998745024204254,-1.6267949342727661,0.9280372262001038,0.4855727553367615,-0.9440569281578064,-0.011669570580124855,-0.13035067915916443,-0.13480965793132782,1.723345398902893,0.035542599856853485,-0.9422034025192261,-2.6300525665283203,-0.9396666288375854,2.492948055267334,0.4698902666568756,-2.4536657333374023,1.3100391626358032,0.9117250442504883,0.6727507710456848,-0.1725350171327591,0.9761432409286499,-0.2054254114627838,0.8282499313354492,0.08283767849206924,1.06355881690979,0.17077073454856873,0.6972126960754395,2.452479124069214,0.9882340431213379,-1.367463231086731,-1.3917938470840454,0.9768313765525818,-0.6826340556144714,1.6495689153671265,1.4052894115447998,-0.3159407675266266,2.1096959114074707,1.3506792783737183,-0.5828990936279297,-0.7195378541946411,1.269437551498413,0.9877080321311951,0.6975862383842468,0.8051975965499878,-0.3035435378551483,0.5490680932998657,1.3099433183670044,-0.6384950876235962,-0.6801425218582153,-0.04369739070534706,-0.6554292440414429,-1.2056938409805298,0.593697190284729,2.1315717697143555,0.9021188020706177,1.6412217617034912,-0.6176766157150269,0.9853149056434631,1.4860411882400513,-0.08922486752271652,0.9220288395881653,1.128039002418518,-0.24512304365634918,-1.8265565633773804,-1.27520751953125,0.32613614201545715,-1.2793158292770386,-0.09578671306371689,-1.185738205909729,-1.3279070854187012,-1.114915132522583,0.8798246383666992,0.2784397304058075,1.856588363647461,2.0216596126556396,-0.7086791396141052,0.5511845350265503,-0.6466220617294312,-3.6634228229522705,0.7249048948287964,0.12014291435480118,0.8451696038246155,-1.2632914781570435,0.5893593430519104,-0.7022461891174316,0.4442025125026703,-2.037564754486084,-1.6737408638000488,0.046311963349580765,2.062209129333496,1.9470186233520508,1.2901020050048828,-0.3668675720691681,0.7203118801116943,-3.0142931938171387,0.5383051633834839,-2.1059398651123047,-0.45622554421424866,0.7014734148979187,-0.009741001762449741,1.4044853448867798,1.1170692443847656,-0.5915902256965637,-1.814414620399475,1.3566815853118896,0.5699529051780701,-1.6834992170333862,0.35241708159446716,-1.2805148363113403,0.5879026055335999,-0.020822126418352127,-3.497328281402588,0.004319816827774048,-1.1413248777389526,-0.5129181146621704,0.2489791214466095,0.01505560614168644,1.0002517700195312,-1.1475493907928467,0.04673514515161514,1.7115066051483154,1.3869178295135498,0.22036805748939514,2.1370041370391846,-0.9715650677680969,-2.058452844619751,0.5263369679450989,-0.40966132283210754,0.6096738576889038,1.380900502204895,-1.2762621641159058,0.24502840638160706,-0.959966778755188,2.1038880348205566,2.428283452987671,-0.596211850643158,1.159704566001892,-0.21700841188430786,1.0020630359649658,0.8657875657081604,1.3880258798599243,-1.6288186311721802,1.2569530010223389]]],[[[2.6327691078186035,2.6453592777252197,1.3052051067352295,8.577006340026855,1.5544674396514893,2.01875376701355,-0.30269330739974976,-1.6798312664031982,-0.28186458349227905,0.09492917358875275,1.771086573600769,1.6456682682037354,1.1054763793945312,1.3152306079864502,-0.6316255331039429,-1.4265778064727783,-0.8356854915618896,2.5631885528564453,0.7716827392578125,-2.788865089416504,0.15160413086414337,-3.4371495246887207,1.9346787929534912,1.5406743288040161,1.266519546508789,-3.768359899520874,2.1116292476654053,-39.273956298828125,2.145085334777832,-1.950323462486267,1.301823377609253,-0.4244025945663452,0.8929333686828613,-1.377180576324463,-2.6194984912872314,0.893230676651001,0.40850505232810974,-0.23856042325496674,2.245931386947632,-1.2481021881103516,-0.39294523000717163,-2.5564393997192383,-0.8494167327880859,-1.258998155593872,-1.4443589448928833,2.519883632659912,-0.22763629257678986,-0.9765709638595581,-1.7004594802856445,-0.1924182027578354,1.0410606861114502,0.7207205295562744,-1.5042645931243896,-0.5260501503944397,-3.289754629135132,0.19623956084251404,0.8738362193107605,-1.323591709136963,0.8734084963798523,1.277661681175232,0.5723496675491333,1.2389498949050903,1.3519805669784546,-0.4491465389728546,-2.83613920211792,-0.7616981267929077,-3.5802547931671143,-0.8251965641975403,0.315495103597641,1.245935082435608,0.4587072432041168,0.07694731652736664,1.2299013137817383,-0.5309520959854126,-2.624972105026245,0.23797357082366943,1.625041127204895,-0.43409407138824463,-2.2566349506378174,0.597597599029541,-0.8906638026237488,3.022886276245117,-2.708209276199341,-0.9426450133323669,0.7089847326278687,0.9770891070365906,3.5416438579559326,0.5317324995994568,-0.1562861055135727,-3.0571796894073486,0.038586460053920746,1.1946673393249512,-0.6796606779098511,-0.42412349581718445,-0.38495534658432007,1.0222833156585693,-1.6894783973693848,1.2438315153121948,-1.9383044242858887,-1.0816975831985474,-0.7090418338775635,-2.946355104446411,-2.8434677124023438,-1.5707594156265259,1.8388422727584839,0.2813928425312042,1.1393002271652222,-0.5124748349189758,-1.1176214218139648,-1.7095433473587036,2.7074270248413086,-1.6994073390960693,-0.592393696308136,-0.27134957909584045,-0.5553380846977234,-0.9568490386009216,11.277636528015137,-3.2129828929901123,0.6749573945999146,-0.6490439176559448,1.5454261302947998,0.13967688381671906,0.5721508860588074,3.7591423988342285,-0.40494635701179504,-0.4710242450237274,-0.6200661063194275,1.6449300050735474,-1.6603127717971802,-0.4908033013343811,0.04799369350075722,1.5521804094314575,1.4490832090377808,2.475731372833252,-2.070208787918091,0.0652238130569458,-0.6392354369163513,2.823859214782715,0.8388698697090149,0.03394553065299988,1.166226863861084,-0.8820873498916626,-0.41444262862205505,2.2613253593444824,1.3735010623931885,0.9632089734077454,0.03155412897467613,-1.0158385038375854,-0.19174419343471527,5.052087306976318,-0.6052014827728271,-0.07739342004060745,1.1263684034347534,1.9930449724197388,-2.3958444595336914,1.849808931350708,-1.4432035684585571,-0.27498990297317505,0.16776248812675476,-0.059809938073158264,0.22386199235916138,1.0967140197753906,0.16599075496196747,-0.6816596388816833,-0.8333733677864075,-0.5129024982452393,-2.260133743286133,2.4172465801239014,-0.401541531085968,1.8671404123306274,-2.7339439392089844,-0.8555641174316406,-2.552561044692993,2.985064744949341,1.30388343334198,0.8892132639884949,3.256596565246582,1.3920823335647583,-2.5373752117156982,-2.7958953380584717,-0.49052804708480835,-0.8679682016372681,-0.8075771331787109,1.2956640720367432,0.561183512210846,0.5478009581565857,-1.3731416463851929,0.57084721326828,1.8824552297592163,-0.4576617181301117,1.405981183052063,-0.17243048548698425,0.33348894119262695,0.4367964267730713,-1.9064936637878418,0.402445524930954,2.46227765083313,-0.13031040132045746,1.3329774141311646,-1.1028163433074951,1.8067471981048584,-0.07888862490653992,0.3756299316883087,2.544121503829956,-1.306075096130371,-1.6484415531158447,-1.7027380466461182,1.6640466451644897,2.6514759063720703,0.27584001421928406,0.3483525812625885,2.343595027923584,1.9115525484085083,0.8007939457893372,-0.9314233064651489,-1.0497796535491943,0.02700815163552761,0.6709202527999878,-0.5655851364135742,-0.5223431587219238,0.7747825980186462,-0.918522298336029,0.810362696647644,-2.732142925262451,1.6618953943252563,2.3691883087158203,-1.7281690835952759,0.4593784511089325,-0.0302041657269001,-1.97107994556427,1.9544968605041504,0.17492900788784027,-1.309363603591919,-0.4386090934276581,2.2306129932403564,1.549528956413269,-0.34265992045402527,0.7719107866287231,-1.3549771308898926,-0.26447561383247375,0.4373049736022949,4.188180446624756,4.029538631439209,1.4087587594985962,-1.94767427444458,-0.6948322057723999,-1.6268149614334106,-1.9857807159423828,0.39352452754974365,0.8227952718734741,-3.213007926940918,1.3682746887207031,-1.196128487586975,-3.270768404006958,1.5212585926055908,0.07295642048120499,2.5744357109069824,0.2914597690105438,-0.9778546690940857,-0.014692635275423527,-0.7696856260299683,0.3493780493736267,0.5098415613174438,1.067221760749817,0.5142653584480286,-4.359039306640625,0.18696166574954987,1.6820954084396362,-0.9331218004226685,-2.8282339572906494,3.060692310333252,1.5831716060638428,2.5853168964385986,-0.13084593415260315,3.204176664352417,-1.128382921218872,-0.19193793833255768,-2.198295831680298,2.0135343074798584,0.27391648292541504,0.05898788943886757,2.1442058086395264,2.424851417541504,-2.203291177749634,-2.5340023040771484,-0.5443553924560547,-2.2258267402648926,0.0952853187918663,0.4328129291534424,2.590541124343872,2.1034159660339355,3.3536646366119385,-0.5587084293365479,1.1940960884094238,-0.025606485083699226,0.4558342695236206,-0.9888522028923035,-0.14430466294288635,-1.4267613887786865,-1.314673900604248,-1.9437063932418823,1.6476490497589111,0.618635356426239,2.772642135620117,-0.2870776653289795,-0.6556426882743835,0.02920384705066681,-3.1838605403900146,-0.5180241465568542,0.8613956570625305,2.422149896621704,-2.0303094387054443,-0.08969251066446304,-1.8750932216644287,-0.11267963796854019,1.7774637937545776,1.21846342086792,-0.7771739363670349,0.5707710385322571,3.711196184158325,3.2515528202056885,2.7759993076324463,-0.9121936559677124,2.732515335083008,1.0036189556121826,0.02436278946697712,0.6146583557128906,0.5303145051002502,-0.4092095196247101,-0.0723312571644783,-0.9705098867416382,0.5829629898071289,0.05335771664977074,-2.5133931636810303,-2.4582722187042236,-0.1438152939081192,0.9295763969421387,-0.4785788655281067,-0.6507534384727478,1.4072051048278809,-0.6049748063087463,1.220207929611206,-3.0711898803710938,-0.5735802054405212,2.6674158573150635,3.2001454830169678,-0.24022026360034943,2.434683084487915,0.2604522109031677,-1.1565555334091187,-0.2327384054660797,-2.3044497966766357,-0.4262140989303589,0.3447473347187042,-0.20364053547382355,-1.3263696432113647,1.1898672580718994,-0.19820654392242432,0.18083617091178894,0.7219167947769165,-2.1315464973449707,-0.08801307529211044,-1.3693667650222778,0.5256943702697754,1.1892236471176147,0.5545560717582703,1.1973941326141357,2.02580189704895,0.12087715417146683,0.4352532923221588,0.42175498604774475,1.2400364875793457,-0.7040072083473206,0.4162783622741699,-2.2852790355682373,-1.4444997310638428,-0.9547544717788696,-1.7447880506515503,0.6454455852508545,-1.5666711330413818,-1.4020061492919922,0.4236031770706177,-0.8927809000015259,-1.4210275411605835,-0.18446318805217743,0.1713816076517105,-1.5811245441436768,-0.5035741925239563,-2.6305813789367676,-0.5801562666893005,-1.4934062957763672,-2.9028635025024414,-0.2676565945148468,-1.745818018913269,-2.1898365020751953,0.12838546931743622,0.7120351195335388,-1.5260016918182373,-1.3000497817993164,-1.178033709526062,0.6662636399269104,-0.17723263800144196,1.654866099357605,1.8780086040496826,0.8111088275909424,1.4143249988555908,0.7641311287879944,0.1668105572462082,1.916225790977478,1.9448943138122559,-1.2060073614120483,-1.4962612390518188,-0.936199963092804,2.202606201171875,-0.6821251511573792,1.484081745147705,-1.607659101486206,0.028655271977186203,1.2684274911880493,-1.577764630317688,-1.3776586055755615,-0.14995825290679932,-2.6129391193389893,0.7258740067481995,-1.9994101524353027,1.1618688106536865,-1.287218689918518,0.33045902848243713,-1.1770561933517456,1.0925233364105225,-0.7381646037101746,-2.4038171768188477,-1.0681970119476318,0.686558187007904,-0.04254423826932907,1.780655026435852,1.624752163887024,-6.786214351654053,0.4096257984638214,-1.0916078090667725,0.4588412344455719,0.4726089537143707,0.67364901304245,-1.5277353525161743,-1.6603959798812866,-2.876011610031128,1.5558910369873047,-0.4022574722766876,-1.1357730627059937,1.603486180305481,-0.6076263785362244,0.4359613358974457,-3.628021478652954,1.4136059284210205,-2.2249529361724854,-1.5867314338684082,-0.4595612585544586,0.8155417442321777,0.3250997066497803,-0.7974511384963989,-0.42328009009361267,0.4099767506122589,-0.6663154363632202,-0.23449046909809113,-1.300401210784912,-2.1537601947784424,2.72271990776062,-1.2375763654708862,0.46920183300971985,-2.4724011421203613,0.2402438521385193,2.875272512435913,0.09124862402677536,0.23096929490566254,0.839152991771698,1.2145817279815674,0.9936429858207703,0.7922860980033875,2.2292332649230957,-1.8686691522598267,0.4312368631362915,-0.032809823751449585,2.3621037006378174,3.723109722137451,-0.0005738235777243972,0.6148241758346558,-0.45704907178878784,-0.590968906879425,0.5607117414474487,1.9577254056930542,1.3811653852462769,-0.7811329960823059,-1.1463955640792847,-0.8191857933998108,1.8422508239746094,-1.5271673202514648,-2.3907077312469482,2.689628839492798,1.2166972160339355,-2.1500983238220215,0.9400030374526978,0.970815122127533,-0.007178387138992548,-0.19802603125572205,-0.39256349205970764,0.9875094294548035,-1.6427645683288574,-0.5014933943748474,-0.6913623809814453,-1.2589632272720337,-2.5704596042633057,0.5493985414505005,3.5799524784088135,0.22705669701099396,1.323411226272583,0.2599920332431793,-1.0856691598892212,0.7449532151222229,0.8725796341896057,-1.462777018547058,0.5076864361763,-0.648901641368866,-2.890131711959839,-1.7680624723434448,0.3783694803714752,0.4050448536872864,2.873589038848877,2.962831497192383,0.7605141401290894,0.9782912731170654,0.5796534419059753,0.48261603713035583,0.22009503841400146,1.6801689863204956,-0.1386711299419403,1.6845519542694092,0.3168719410896301,2.3973679542541504,0.9603262543678284,4.023458003997803,-2.777233839035034,1.0812199115753174,1.0231266021728516,-1.9266812801361084,-1.2269494533538818,0.5668462514877319,0.2657429873943329,-1.5677708387374878,-0.09644570201635361,2.3628218173980713,-0.41314026713371277,-0.8430103063583374,-4.138833522796631,0.43076059222221375,-1.7401608228683472,-1.2606546878814697,1.4254653453826904,-2.243314027786255,-0.9925363063812256,2.7519798278808594,1.7938733100891113,1.8923450708389282,1.6904770135879517,0.6680296063423157,0.33007538318634033,1.5066919326782227,1.024924397468567,-2.8648226261138916,-1.2316443920135498,1.1213691234588623,0.9625868201255798,3.125398635864258,0.7347219586372375,-0.9409449696540833,-0.31669965386390686,-1.148497462272644,-0.9799544215202332,-1.821897268295288,-1.2948803901672363,-0.09790924191474915,-2.5319862365722656,1.56271231174469,2.170870542526245,-2.205296754837036,-0.18443088233470917,1.0534363985061646,1.478517770767212,-2.7624595165252686,-1.039659857749939,-0.13991309702396393,1.5009509325027466,2.058140277862549,0.9574118256568909,-1.3455173969268799,2.4785733222961426,-1.092527985572815,-1.186265230178833,-0.9116891622543335,1.827434778213501,1.0097191333770752,0.14704537391662598,0.1398383527994156,0.9442332983016968,-0.5874990224838257,0.5176494717597961,-0.07559181749820709,1.135815978050232,-0.41423577070236206,0.8659027218818665,-0.4749252498149872,0.6710817217826843,0.26252079010009766,-1.811240315437317,-4.670074462890625,-0.14727067947387695,1.3743923902511597,0.37897634506225586,0.5202925205230713,-3.1597447395324707,0.5856564044952393,0.2405623495578766,-1.2531590461730957,0.36913958191871643,-1.733688235282898,-0.000560401938855648,1.3232460021972656,-1.2069274187088013,1.1489026546478271,0.7968195080757141,-0.6890296936035156,-3.6581366062164307,0.9724026918411255,1.5316776037216187,-0.4128876328468323,2.423356056213379,0.5585626363754272,-4.432679176330566,1.1784052848815918,0.36996445059776306,0.49128788709640503,-1.005051851272583,1.512269139289856,-0.7150236368179321,1.1221388578414917,0.24210400879383087,0.007424607872962952,0.14445218443870544,-0.062194909900426865,-0.33020827174186707,0.21818536520004272,-0.44359463453292847,-0.047054924070835114,-1.99222731590271,4.209929466247559,0.045714665204286575,3.2592458724975586,-0.7588958740234375,0.8502215147018433,0.6070088148117065,-0.20878419280052185,-0.8129791617393494,1.3913038969039917,-0.03683946281671524,-0.4962560534477234,1.1827573776245117,2.3296055793762207,2.2624287605285645,2.1141295433044434,0.8571896553039551,0.5982787609100342,-0.008134768344461918,0.0648573786020279,1.1668699979782104,0.861781120300293,1.637622594833374,-2.572812795639038,3.770007371902466,1.5741075277328491,0.21316078305244446,-0.3428148329257965,0.05700799450278282,-1.5294243097305298,2.3123466968536377,-0.33649998903274536,-1.3020910024642944,0.8601783514022827,-1.9598960876464844,1.2254581451416016,-2.1144518852233887,0.8679369688034058,-0.6412451863288879,9.965169906616211,-2.619205951690674,-0.46232426166534424,3.346498489379883,0.6861492991447449,0.2975888252258301,-0.5545001029968262,0.6963003873825073,-1.7262548208236694,0.9112889766693115,1.2952054738998413,0.5170490741729736,-1.8080450296401978,2.4637718200683594,1.6653213500976562,-0.23044085502624512,-3.1117501258850098,0.3740794062614441,0.6814612150192261,-1.746937870979309,-3.6226658821105957,-2.9079434871673584,1.7916816473007202,1.5948948860168457,1.0293383598327637,-1.8344073295593262,-0.37924718856811523,0.67795729637146,-1.6344077587127686,-0.37834230065345764,0.008060857653617859,-0.1665925234556198,4.955474853515625,1.4192461967468262,1.125252604484558,-0.7239680886268616,-1.326097846031189,1.1910196542739868,0.030803533270955086,-1.302975058555603,0.4240013360977173,1.910307765007019,2.925645351409912,1.4998226165771484,0.17251962423324585,-1.312394380569458,1.5994853973388672,0.23323515057563782,-1.6630951166152954,0.8602064847946167,1.1653132438659668,3.516263484954834,0.4469311237335205,-0.2596239149570465,0.06515126675367355,0.6846265196800232,0.6699232459068298,-1.5281785726547241,-0.6041969656944275,-0.5746153593063354,-1.9463223218917847,2.157611608505249,-0.8428114056587219,-0.6420372724533081,4.8241705894470215,-0.8136173486709595,-0.9528058767318726,2.2378172874450684,-0.21968796849250793,-0.031621187925338745,0.9389642477035522,-3.4983317852020264,-1.287537693977356,-1.4800825119018555,1.5243570804595947,-0.3066766560077667,-0.7135071754455566],[1.3100659847259521,-1.2003549337387085,-1.4424279928207397,6.381330966949463,0.371046781539917,-1.3416361808776855,-2.8721745014190674,-1.0767122507095337,0.5800109505653381,-2.417372941970825,-0.8920078277587891,0.8722484111785889,0.17354264855384827,2.3405377864837646,0.8889999985694885,-2.7235376834869385,-1.1576038599014282,0.9083988666534424,1.0164337158203125,0.8130528330802917,-0.9350823163986206,-0.6034481525421143,-1.5337454080581665,-0.6828624606132507,2.6957905292510986,0.20376834273338318,0.3165612816810608,-11.030303001403809,-0.40690892934799194,-3.753319263458252,1.12582528591156,-1.9105331897735596,-0.6947618126869202,-2.6435201168060303,-0.783775806427002,2.878868579864502,0.49711453914642334,-0.9659867286682129,-0.5599448084831238,-0.6342671513557434,0.6739927530288696,-5.400841236114502,-0.3856703042984009,1.256827712059021,-0.08202102035284042,1.466958999633789,0.07034579664468765,1.1615314483642578,1.5772782564163208,0.2087186723947525,-0.951835572719574,0.8841895461082458,1.229984998703003,-0.13001969456672668,0.40702497959136963,-0.7365294098854065,-2.671527624130249,0.8538731336593628,-1.686302900314331,3.5205628871917725,0.7929311394691467,-0.4876211881637573,-0.3927839696407318,3.0703883171081543,0.06435150653123856,0.6573725342750549,-0.6093785166740417,1.1981909275054932,-2.5095369815826416,-1.5241990089416504,-0.4424348473548889,2.091801166534424,-1.9250869750976562,1.4343677759170532,-2.9636590480804443,0.30852529406547546,1.02699613571167,1.382881760597229,-2.907989978790283,0.4625501036643982,0.7453052997589111,3.0139927864074707,-0.2802067697048187,-0.3901950418949127,0.6480164527893066,-0.13379128277301788,0.8241251707077026,1.2805991172790527,1.0481507778167725,-2.475508213043213,-0.04103613644838333,-0.5831731557846069,-0.3748404383659363,-1.8011386394500732,-0.08576393127441406,1.09390127658844,-0.008172529749572277,2.2293052673339844,-1.185935378074646,-1.8045291900634766,-0.1372382938861847,0.6444628238677979,0.029774852097034454,0.7723698019981384,3.3592138290405273,2.5919876098632812,2.0747876167297363,1.154896855354309,-0.7666320204734802,0.6528064608573914,-0.2931171953678131,-0.5304418802261353,1.9581843614578247,-0.12603449821472168,-0.011836811900138855,-3.977019786834717,8.416182518005371,1.328282117843628,-0.7755232453346252,-0.5469819903373718,1.432584524154663,0.7750709056854248,-1.2330602407455444,-0.6365412473678589,-1.1688450574874878,0.4497257173061371,1.7803385257720947,-0.2102351188659668,-4.06069803237915,-1.144193172454834,-0.19452781975269318,0.3781408369541168,1.672411561012268,-1.4853054285049438,1.6787770986557007,-1.4286975860595703,-0.5778713822364807,-0.7419268488883972,1.1807509660720825,0.11336929351091385,-1.2509546279907227,0.5427688956260681,-0.7057086229324341,1.2062852382659912,0.3783719539642334,1.9761141538619995,0.8895789980888367,-0.639685332775116,2.592597007751465,5.818855285644531,-2.9821090698242188,-0.6003720164299011,1.5193699598312378,1.4705861806869507,-0.3048194944858551,0.2796732783317566,-1.1220316886901855,-1.0274782180786133,0.21829158067703247,0.5218328237533569,1.8036539554595947,0.03320075199007988,0.548554003238678,0.9237322807312012,1.785492181777954,-0.6293424367904663,-0.07883605360984802,-1.3605018854141235,0.8302801847457886,1.008410096168518,1.4208792448043823,0.2859685719013214,0.6161007881164551,0.26308703422546387,0.30706509947776794,-0.9040130376815796,1.0006530284881592,3.482494592666626,-1.6493653059005737,0.9782010316848755,-2.720238208770752,-0.6030027866363525,-1.0796442031860352,-1.2544503211975098,0.5893778204917908,2.544511556625366,0.08332512527704239,2.9367966651916504,-1.2409849166870117,0.047735121101140976,1.1544854640960693,-1.2475610971450806,0.8771067261695862,-0.7405202984809875,-1.2758773565292358,0.2719409167766571,0.06923884898424149,-2.3039090633392334,-0.7648794651031494,-0.8787439465522766,1.4456287622451782,0.5816510915756226,1.021405816078186,0.7618565559387207,1.2691346406936646,-0.3849852979183197,-1.3321024179458618,-0.7609171271324158,-0.5521531701087952,0.14895875751972198,-0.32900071144104004,1.5020956993103027,3.14451003074646,2.3910629749298096,-1.361558198928833,0.10114501416683197,-0.12701483070850372,-0.6089471578598022,-1.7166969776153564,0.02352874167263508,-1.2300068140029907,-0.45037752389907837,0.9806634783744812,0.538783609867096,1.863690972328186,-0.039451152086257935,-0.702364981174469,0.4665146768093109,-4.546266555786133,0.9895696043968201,0.5844258666038513,-0.7936576008796692,2.1153690814971924,-1.2094374895095825,10.499680519104004,1.3383337259292603,-0.03467302396893501,0.9031655192375183,0.1537410467863083,0.27884191274642944,1.1282134056091309,1.3963656425476074,1.867244005203247,0.9320924878120422,-1.9329838752746582,-1.1074546575546265,-1.3057113885879517,0.40788471698760986,1.609590768814087,0.35078537464141846,-1.4311922788619995,0.9549822807312012,0.4819413125514984,-1.5440329313278198,0.7608354687690735,-0.0016398013103753328,3.449411630630493,-0.4569217562675476,2.6271917819976807,0.4289593994617462,0.8912976980209351,0.1492713838815689,-0.4213612377643585,-1.1831128597259521,1.692101001739502,-0.14762729406356812,0.4716190993785858,1.0935262441635132,-0.5475400686264038,-2.2486767768859863,-0.8468164205551147,-1.2089515924453735,2.310678482055664,-2.3237171173095703,-0.8217182755470276,1.0021076202392578,0.13811029493808746,-0.051430247724056244,0.33809736371040344,-0.1824973225593567,0.6423764824867249,0.9584786891937256,1.867197036743164,-1.9712245464324951,-0.01907743141055107,0.5876367688179016,0.7931348085403442,0.6690406203269958,-0.40448054671287537,-0.3487480580806732,-0.27237820625305176,1.7988150119781494,0.7072635293006897,-3.2010533809661865,-0.0600130558013916,1.5817716121673584,-1.4422154426574707,-1.6753218173980713,1.2321650981903076,4.227056980133057,-3.5107932090759277,-0.9414188861846924,-0.1545693576335907,1.2709439992904663,-2.7127768993377686,-0.6206881403923035,2.39304518699646,-0.7112131118774414,-0.20747089385986328,0.8111198544502258,1.809927225112915,-3.5273430347442627,0.13906539976596832,0.767755925655365,1.4288606643676758,0.7154411673545837,2.260781764984131,0.8622539043426514,0.8760586380958557,1.5910253524780273,-0.39159896969795227,0.34510231018066406,-1.0521982908248901,0.6906348466873169,1.054680347442627,1.4036768674850464,-1.125465989112854,-1.7052146196365356,-0.8814045786857605,0.7597402334213257,-3.0202019214630127,-0.9587489366531372,3.4436731338500977,2.3506572246551514,1.2098132371902466,-0.5889712572097778,0.4710316061973572,0.024207299575209618,-1.2787288427352905,-0.8693680763244629,1.33164381980896,-0.12111026048660278,0.10590165108442307,-2.934048891067505,1.3506802320480347,0.4430457055568695,-0.30884963274002075,-2.1097545623779297,-0.06361164152622223,1.4247314929962158,-2.1176440715789795,-1.6804612874984741,1.6516129970550537,-0.03316802158951759,0.43035247921943665,0.7334040403366089,1.052273154258728,2.0797479152679443,0.9881003499031067,0.82795649766922,-1.3387693166732788,-0.005313599016517401,-0.3466838300228119,-1.468653678894043,1.193835735321045,0.20005285739898682,0.5015819072723389,-0.9736108779907227,1.295889973640442,-0.7815321087837219,2.0281760692596436,-1.1724839210510254,0.06295908987522125,0.7659573554992676,-1.1667712926864624,-0.1597459763288498,-0.5755336880683899,-1.2162545919418335,-2.442387580871582,0.4829139709472656,-0.3909865915775299,1.2451398372650146,-0.2240484058856964,-1.9910085201263428,-1.8303391933441162,-0.43207255005836487,0.022762639448046684,1.2253199815750122,-0.7055553197860718,-1.7523746490478516,2.4452521800994873,0.9654025435447693,-0.1822492629289627,-2.340388059616089,-1.1749435663223267,-0.12017893046140671,0.23035895824432373,0.4593682885169983,0.15939712524414062,-2.4747862815856934,1.0550673007965088,0.48776185512542725,0.9637517929077148,1.037438988685608,-0.21346597373485565,2.3229711055755615,-0.2810923755168915,0.3122389614582062,-0.9296461939811707,-0.5768474340438843,-1.284027338027954,-0.04959799721837044,-0.28783857822418213,3.264385461807251,2.349313974380493,2.605679988861084,1.4389113187789917,0.29159271717071533,-1.0454480648040771,-1.408739686012268,-0.7454043626785278,-2.192605972290039,0.3760206699371338,0.38620638847351074,2.1839535236358643,-0.969586193561554,0.19639578461647034,-0.08382505178451538,-1.8878979682922363,2.0846776962280273,-1.0204421281814575,0.6340850591659546,0.7084619402885437,1.3859069347381592,0.9914629459381104,-1.3510082960128784,1.640000820159912,-6.242516994476318,1.047221064567566,0.16637581586837769,-4.440094470977783,0.03175158426165581,-0.6900586485862732,0.7489888668060303,0.6707077026367188,-0.13801760971546173,1.5674715042114258,-1.3292145729064941,0.9685918092727661,-0.5922027826309204,-0.6866904497146606,-0.5929325222969055,-0.9141981601715088,2.7053568363189697,0.47531285881996155,-0.601164698600769,0.46280637383461,1.6644160747528076,-1.2893924713134766,-0.8774561882019043,0.041553352028131485,1.5504329204559326,-0.972320020198822,0.027128534391522408,0.22341598570346832,1.1906499862670898,-0.9020897150039673,-1.1704047918319702,-0.09633710980415344,0.8782116770744324,-1.8986351490020752,-1.5011979341506958,0.7871537804603577,0.5288273692131042,-2.8908274173736572,1.8385823965072632,2.9093129634857178,-0.2635398507118225,1.672195553779602,1.7275499105453491,-1.112064003944397,-0.7341378927230835,0.7684791088104248,1.095552682876587,0.9341794848442078,1.0534310340881348,1.6278167963027954,-0.6293074488639832,1.7813748121261597,1.194579839706421,0.9069937467575073,-0.39096930623054504,-1.4030333757400513,0.5215890407562256,-0.30148831009864807,-0.4765748679637909,-0.1920056790113449,-17.305030822753906,1.4275363683700562,1.6085110902786255,-0.13745160400867462,1.3894048929214478,-0.10920018702745438,-0.024212460964918137,1.1697489023208618,-1.042184829711914,2.125014305114746,0.4573572874069214,0.5831671357154846,0.9758636951446533,-2.8983218669891357,2.374488353729248,0.9647382497787476,0.6785547137260437,-0.5963543057441711,-2.3791861534118652,-0.6596410274505615,2.0616507530212402,-0.8548721075057983,-1.2333749532699585,-2.602329969406128,0.665705680847168,-1.0643587112426758,-2.578937530517578,-0.14469197392463684,-2.907935857772827,-1.980216383934021,-0.7475212812423706,-0.9540917277336121,2.2704861164093018,-0.27308687567710876,-2.4686672687530518,2.1992809772491455,-0.7472804188728333,-0.11480236053466797,0.4528163969516754,0.7474411129951477,1.0560486316680908,1.2893834114074707,1.1972455978393555,-0.1624961942434311,1.2377947568893433,-0.46073341369628906,1.234795331954956,0.43838804960250854,0.3200515806674957,-0.5892156958580017,1.002031683921814,1.0183990001678467,0.02494908683001995,0.01938319019973278,0.2762119472026825,-1.893101453781128,-1.255906581878662,-1.8744421005249023,-1.9561278820037842,-1.4457396268844604,1.6058534383773804,-3.2265141010284424,-0.08172344416379929,0.6330342292785645,0.1274593323469162,1.7570282220840454,1.6563400030136108,0.9135215878486633,-0.2890373170375824,1.0262082815170288,-2.7770657539367676,-2.0443663597106934,1.7464005947113037,0.11510967463254929,0.7375797033309937,-1.3230606317520142,0.07565727084875107,-10.699810981750488,0.19074319303035736,0.7208093404769897,1.9343514442443848,-4.216656684875488,2.040759563446045,0.4823494851589203,0.7998862266540527,1.755893588066101,1.2957748174667358,-1.1305173635482788,-2.911276340484619,-1.6120824813842773,-0.4296112358570099,-3.032972812652588,1.0176477432250977,-1.2119969129562378,1.048079013824463,1.7960771322250366,0.2292146533727646,0.7182028889656067,-0.7853769063949585,1.8081047534942627,0.5127912759780884,0.8072605133056641,0.283130019903183,0.9014150500297546,-0.19892798364162445,1.990696668624878,0.761181116104126,0.8738130927085876,-1.0206738710403442,0.013741420581936836,-3.0649473667144775,0.8184009790420532,-0.0007165037677623332,1.5948387384414673,-1.6070759296417236,-2.000816822052002,-4.236108779907227,-1.1070915460586548,0.05719679966568947,0.27761057019233704,-0.5420946478843689,1.1243945360183716,-0.9100291132926941,-1.1632757186889648,0.6261246204376221,-0.03790000081062317,0.7429251074790955,1.407921314239502,-0.15386219322681427,1.560111403465271,0.43116870522499084,0.37652233242988586,-2.195237874984741,0.34336739778518677,0.6385736465454102,1.4964747428894043,1.4651411771774292,2.7024178504943848,-0.08952030539512634,-3.8476462364196777,0.37064850330352783,1.3602937459945679,0.7492469549179077,-0.7742717862129211,-1.42903733253479,-1.324672818183899,0.13350266218185425,-0.13626104593276978,-0.9553713202476501,2.122664451599121,0.2668638229370117,-0.5165311098098755,-0.8122753500938416,-0.6112475991249084,0.6585128307342529,2.359748125076294,1.9344254732131958,-2.2878594398498535,0.3131236433982849,1.2039401531219482,-1.0838453769683838,4.620462894439697,-3.6056690216064453,-1.109728217124939,2.4255340099334717,0.8569322824478149,0.8857746720314026,0.6661059260368347,1.964145541191101,0.6063762903213501,1.5736874341964722,1.0190544128417969,-1.6990926265716553,1.4648641347885132,1.5354182720184326,-0.5361339449882507,-0.06582564115524292,0.34132423996925354,-0.03179559484124184,1.2769663333892822,0.31513556838035583,2.0377442836761475,1.0813472270965576,0.867678165435791,-0.32465294003486633,2.284249782562256,0.5755296349525452,-0.01486868504434824,1.336321473121643,-1.6769938468933105,0.6137896776199341,1.909544587135315,3.0407826900482178,0.9068095088005066,-1.1773853302001953,0.8840954303741455,-0.5750478506088257,-1.9034425020217896,-0.2057156264781952,0.6538562774658203,0.22412391006946564,0.33197689056396484,0.16739913821220398,-1.442071795463562,0.46285945177078247,0.701113224029541,-2.1986207962036133,-1.1430672407150269,-0.29829293489456177,4.420086860656738,-0.5601284503936768,0.8525668382644653,2.632899284362793,-1.9824663400650024,-1.7757229804992676,0.9289757609367371,0.011343658901751041,2.0931754112243652,2.072862148284912,0.06214899569749832,0.2752634286880493,1.7860841751098633,0.07847292721271515,-0.6752103567123413,-0.7021360993385315,-0.042860906571149826,3.339905261993408,0.5151444673538208,4.100020408630371,0.5496223568916321,-0.8651376962661743,-1.9277535676956177,0.843806266784668,-2.009061813354492,-0.34289366006851196,-1.3325945138931274,-1.1925839185714722,-0.06681890040636063,-1.125683307647705,-1.994932770729065,-0.521468460559845,-0.3108031749725342,-0.9771515727043152,-0.08217564225196838,0.5118866562843323,1.8579158782958984,0.27969592809677124,-0.9456449151039124,3.0819947719573975,1.9829133749008179,-0.7126912474632263,3.542118549346924,1.7502280473709106,-0.258662611246109,0.3383600413799286,2.937758445739746,4.071400165557861,-1.644010305404663,0.9929226636886597,-0.6027230024337769,-3.785815715789795,0.26164278388023376,1.3383381366729736,1.4537533521652222,0.6117772459983826,1.563482642173767,1.3266414403915405,-1.3387640714645386,0.13619489967823029,-3.161761999130249,0.8065140843391418],[0.1775895655155182,0.17345139384269714,-1.0129650831222534,0.2078336924314499,0.4525648355484009,-0.9243069887161255,-1.4605721235275269,-0.7607513666152954,-0.12256887555122375,3.903533458709717,-0.6925187110900879,-1.6446715593338013,1.8490692377090454,0.8673762083053589,1.3091861009597778,-1.5199384689331055,-0.7512651681900024,1.5606083869934082,2.193427324295044,0.07121874392032623,-0.2827828824520111,0.8553162217140198,-0.25067391991615295,-3.532240629196167,-2.215468645095825,-0.1324586123228073,1.1699464321136475,5.763859272003174,-0.8474318385124207,-4.169266700744629,-0.6024739146232605,0.6996561288833618,-1.589130163192749,-0.7726148962974548,-2.009845018386841,1.4915544986724854,0.5015348792076111,1.9805322885513306,0.8974149227142334,-0.7891691327095032,2.733896493911743,1.8479000329971313,-0.41695454716682434,-0.3328242897987366,-3.2801952362060547,1.2065811157226562,-1.3482081890106201,-0.4294913113117218,-2.04067325592041,2.631181240081787,-2.0311129093170166,-1.0318454504013062,-0.2883961498737335,1.0402547121047974,0.9976804256439209,-0.04034879431128502,0.35255730152130127,0.5472396016120911,-0.29202502965927124,1.9989445209503174,-0.1534976363182068,-0.8677858114242554,-0.9379785060882568,-1.1643575429916382,-0.07642209529876709,0.4481718838214874,0.14788633584976196,0.03068200685083866,1.4948025941848755,-1.1661953926086426,-1.0512341260910034,2.22359037399292,1.286879301071167,-0.7082365155220032,-0.2262825220823288,0.44024232029914856,1.6630700826644897,0.6024980545043945,1.0874115228652954,1.8927843570709229,-0.20538286864757538,-0.048032984137535095,1.6281229257583618,-0.4719516336917877,2.079037666320801,-1.0037287473678589,1.5925506353378296,-0.18238429725170135,0.013680225238204002,0.9260625243186951,0.9036290645599365,0.951566755771637,-1.593780755996704,-1.9025756120681763,0.425830602645874,2.767676591873169,0.5760931968688965,0.8165928721427917,1.8619086742401123,-1.7929974794387817,0.3170671761035919,1.5944498777389526,-1.2004140615463257,1.654691457748413,0.35427942872047424,0.9028095602989197,1.5343701839447021,1.1811844110488892,-1.604634165763855,-0.40305981040000916,-3.7997806072235107,-4.932522296905518,2.0373120307922363,1.3597025871276855,2.6547131538391113,-2.0842456817626953,-9.303990364074707,-0.6992129683494568,5.290666103363037,-1.5705081224441528,1.4094510078430176,4.619822025299072,-2.3959479331970215,0.7939955592155457,-0.7375012636184692,0.3895827531814575,0.7889947891235352,0.5043631792068481,-1.0403530597686768,-1.074110507965088,-0.507169783115387,-0.4006788432598114,0.33751606941223145,-0.3697480857372284,1.5869522094726562,-0.8678873777389526,0.23528049886226654,-0.15523645281791687,0.607670247554779,0.40631669759750366,-1.1078057289123535,-0.6725729703903198,-0.6047786474227905,-1.0111067295074463,0.21199651062488556,1.3431694507598877,0.6182793974876404,0.12394700199365616,-0.2260654866695404,-0.8888964653015137,-0.7790216207504272,-1.7088533639907837,0.6943467259407043,-1.5746538639068604,1.1436491012573242,-3.410555839538574,-1.2410173416137695,-0.834566593170166,-0.5960379242897034,0.07804756611585617,-0.6547924280166626,0.011279786936938763,-0.647686243057251,0.29014191031455994,1.5122754573822021,-0.8051891922950745,0.18822918832302094,0.5821332931518555,1.3021275997161865,-0.9918659329414368,1.6511098146438599,2.6323418617248535,-2.715531826019287,-1.6621809005737305,-0.9012817144393921,-0.9290851354598999,1.9927889108657837,2.738396167755127,-2.062894344329834,-0.3652345836162567,0.04903814569115639,0.5743765830993652,-0.19557863473892212,-0.8726875185966492,-1.4717365503311157,1.7947356700897217,1.7216342687606812,2.635524272918701,-1.382509708404541,-1.1672950983047485,-0.4255232810974121,-0.03398110717535019,-1.6314823627471924,-0.6335697174072266,-2.2617075443267822,1.4302256107330322,0.23995716869831085,0.6725670099258423,-0.28574880957603455,-1.5854754447937012,1.5020484924316406,-1.0707590579986572,-1.2057024240493774,0.27181363105773926,-1.2825099229812622,-1.880014419555664,0.31490325927734375,-1.8045427799224854,0.8519375324249268,2.0211286544799805,1.9341676235198975,1.6555863618850708,0.45478591322898865,1.7665820121765137,-0.6006588935852051,0.1790323406457901,0.9442095160484314,1.0248042345046997,-2.5519728660583496,-1.0599993467330933,0.30204468965530396,-1.482029676437378,1.24044930934906,0.5557240843772888,-0.5238257050514221,1.2785474061965942,-1.008668303489685,0.2446116954088211,1.661712646484375,0.14697781205177307,-3.0267484188079834,0.8149537444114685,1.229563593864441,-2.8154218196868896,-0.22501954436302185,-0.6821171641349792,0.22420649230480194,-0.707515299320221,-1.2095829248428345,-0.770853579044342,1.073150634765625,1.4655877351760864,1.8745286464691162,1.8316140174865723,-2.1208152770996094,2.577099084854126,-0.3985711634159088,-0.8453208208084106,1.3095773458480835,1.5477694272994995,-0.6788234710693359,0.08130565285682678,1.44367253780365,0.6146059036254883,1.6576014757156372,-1.5956933498382568,0.8597577214241028,-0.004502635914832354,1.8626941442489624,0.6912226676940918,-1.3015671968460083,0.07100589573383331,-1.5255941152572632,-0.8891223073005676,-1.0630024671554565,0.9385864734649658,-2.289539098739624,3.240630865097046,-0.4035739302635193,1.9410853385925293,-1.980080485343933,-0.012810527347028255,-0.4674970209598541,-0.9802374243736267,-0.7310056686401367,0.9315477609634399,1.2215746641159058,-1.43296217918396,-0.6581911444664001,0.9825416207313538,-2.197633743286133,1.3870412111282349,0.2441251575946808,-1.6361830234527588,-1.4542866945266724,-1.781097650527954,2.434767484664917,2.32977557182312,0.035202622413635254,-0.8304089307785034,1.971105933189392,1.7327433824539185,-1.3186112642288208,0.24904821813106537,-0.1474088430404663,-0.40166717767715454,0.9885687232017517,-0.19474190473556519,1.5329515933990479,0.6321792006492615,-2.968494415283203,-1.8525476455688477,-1.853312611579895,0.3158651292324066,1.9126615524291992,-0.8351391553878784,2.2291758060455322,-1.0126532316207886,-0.4560134708881378,-0.523930549621582,-0.1164485365152359,-0.5674197673797607,-0.5973113179206848,-0.4929741621017456,0.224519744515419,1.2531449794769287,2.2881791591644287,0.2908133268356323,0.36119136214256287,1.9228955507278442,-0.8771349191665649,-0.9121729135513306,1.7526047229766846,-0.5691835880279541,1.5490576028823853,1.3942103385925293,1.0066941976547241,-0.4637509286403656,0.5202749371528625,0.834601104259491,-2.476241111755371,0.4811728298664093,2.382875442504883,1.181095838546753,1.381367802619934,-0.8378834128379822,1.9956212043762207,-0.35024261474609375,1.0890153646469116,0.5720507502555847,1.28077232837677,-1.06034517288208,-2.2941415309906006,-1.7842259407043457,-1.903336524963379,1.7625973224639893,-0.29778674244880676,-2.8659005165100098,-0.5031330585479736,-0.2858904302120209,0.8811993598937988,-1.511070966720581,-0.970278799533844,-0.3755338191986084,1.1349937915802002,0.8780155181884766,0.9298462271690369,0.7479840517044067,2.0506584644317627,0.36445510387420654,0.3918510675430298,0.02945917844772339,-0.12005753070116043,-0.7217638492584229,-0.6792437434196472,-0.472598671913147,0.5940015316009521,-0.22723400592803955,-1.1447545289993286,-0.04907156154513359,0.3157665431499481,-1.7113418579101562,0.7294895648956299,-0.25709500908851624,-0.05323690176010132,-1.572171688079834,2.844975709915161,-1.1270909309387207,-0.9682253003120422,0.7678735852241516,-1.9461944103240967,0.6514346599578857,0.20636022090911865,1.2204550504684448,-0.16038812696933746,1.7230795621871948,0.7911666631698608,0.089511938393116,-1.2987079620361328,-2.315753221511841,0.9501640796661377,0.3523212671279907,-1.9924805164337158,-4.111092567443848,-0.045935533940792084,2.01774263381958,0.37113913893699646,0.20727621018886566,1.6367985010147095,-0.02482881024479866,1.0562894344329834,-0.7950605750083923,-0.2076261192560196,0.49953457713127136,0.2250923216342926,2.4081082344055176,-1.0006005764007568,-1.0286149978637695,0.218697190284729,-1.6453148126602173,-0.24836263060569763,-1.2460662126541138,0.15668678283691406,1.6081382036209106,3.6885077953338623,3.622617721557617,-2.164684534072876,1.5566128492355347,0.6916061043739319,-0.6240307688713074,0.9699490070343018,-1.7780320644378662,0.007707276847213507,0.06750252842903137,2.096601724624634,2.348905324935913,0.3338518440723419,-1.4502366781234741,-0.0006056164274923503,3.8296873569488525,-1.620690941810608,0.43243393301963806,-1.059710144996643,-0.31745898723602295,0.1328449845314026,0.7444734573364258,4.230249404907227,-3.5623953342437744,1.0301488637924194,0.8350037932395935,-1.945802927017212,-0.07650619745254517,-0.8637362122535706,1.0266883373260498,-2.691816806793213,1.2399767637252808,3.618546962738037,1.4216175079345703,1.7975196838378906,-0.520590603351593,0.6863684058189392,0.20909357070922852,-0.9951533079147339,0.8078685998916626,0.6279269456863403,0.31969794631004333,-0.8831178545951843,0.3135720491409302,-0.7869863510131836,-1.0426666736602783,-1.084089756011963,-0.3944586515426636,0.03126386180520058,-0.44329947233200073,-0.7268413305282593,2.6371309757232666,-0.7300541400909424,-1.686070442199707,-0.9374390840530396,0.6930257678031921,-0.41047459840774536,-1.5768229961395264,-0.7233344316482544,0.7922518253326416,-1.8658149242401123,0.46582722663879395,1.4192821979522705,0.2367621213197708,1.910573959350586,0.18670475482940674,-0.8410566449165344,0.5783547163009644,-0.35917890071868896,1.549816608428955,-2.903207778930664,0.1071942001581192,1.2395436763763428,-3.995375633239746,1.9521703720092773,-0.5642843842506409,1.143571138381958,0.06135592609643936,0.325161874294281,0.015403778292238712,0.06849801540374756,1.4813063144683838,1.1402502059936523,-8.532806396484375,1.1892645359039307,2.4406261444091797,0.4672701060771942,0.11041904985904694,-0.5336995124816895,2.973440408706665,-0.5800397396087646,0.35638850927352905,2.1686182022094727,1.116875171661377,-0.3914179503917694,0.23758652806282043,0.1395546793937683,-0.3317754864692688,1.030327320098877,1.166349172592163,-3.541571617126465,0.18747147917747498,-0.7758973836898804,-0.8948625326156616,-1.5466554164886475,-0.9180603623390198,-1.4322503805160522,0.45502743124961853,1.0337340831756592,-0.03976597636938095,2.2779464721679688,-2.1742336750030518,0.5976590514183044,0.7085779905319214,-1.327831506729126,0.6364666223526001,-1.4109431505203247,-0.6363648176193237,1.6486107110977173,-1.3050878047943115,0.4463014602661133,-1.6835442781448364,0.62734454870224,-0.7898479104042053,-0.885830283164978,1.3013200759887695,0.7500410079956055,0.9786115288734436,2.9091455936431885,-0.4864189624786377,-1.2425200939178467,0.9038015604019165,0.33989349007606506,0.003984364680945873,0.7387046813964844,1.8761552572250366,2.228409767150879,-0.0800103172659874,-0.9793314337730408,1.171931266784668,-1.1687008142471313,-2.258700132369995,1.2106345891952515,-0.39487338066101074,0.2756291627883911,-0.34441614151000977,-0.9091082811355591,0.8931828737258911,1.0733751058578491,1.4675003290176392,-6.092832565307617,-0.3881654143333435,0.36612755060195923,0.3415733277797699,-1.1985217332839966,-0.9935873746871948,-0.11172967404127121,-1.053623080253601,-0.9631977081298828,-0.4150250554084778,-5.824918270111084,-0.27066487073898315,0.43584582209587097,2.0983264446258545,-2.543117046356201,4.690905570983887,0.8041181564331055,2.4448869228363037,1.5724782943725586,0.5068783164024353,0.23594343662261963,-0.8211768865585327,0.224254310131073,4.030733108520508,-0.345200777053833,-1.1425330638885498,0.37342676520347595,0.9391551613807678,2.507237434387207,-0.4419407844543457,1.1615049839019775,-0.9540097117424011,0.9268940091133118,-1.062357783317566,-0.006720957346260548,-0.09267611056566238,0.3202681541442871,1.5485554933547974,0.3663795292377472,0.1483907550573349,1.736386775970459,-1.8044503927230835,0.13799764215946198,-1.169797420501709,0.6999868154525757,-2.650186061859131,1.4686758518218994,-2.0433452129364014,-1.756163239479065,-2.5169126987457275,1.284124493598938,2.0613420009613037,2.486481189727783,0.7884506583213806,0.6440810561180115,-0.5410450100898743,0.08921948820352554,0.1282249093055725,1.451682686805725,0.7620882987976074,-0.7824970483779907,-1.0997222661972046,2.3444182872772217,1.4944573640823364,0.695928692817688,1.0006215572357178,-0.8413056135177612,1.7494679689407349,-0.0548931248486042,0.9815982580184937,3.9439308643341064,-0.38749295473098755,3.192342519760132,1.8891873359680176,0.2773629128932953,1.850118637084961,2.091409921646118,0.8198440074920654,-0.30870988965034485,0.9368505477905273,-0.25548437237739563,0.32319164276123047,-0.8083481788635254,1.3419346809387207,0.23756130039691925,2.46244740486145,-0.8707411289215088,-1.3003140687942505,-0.7169519662857056,0.24806585907936096,-2.0428519248962402,0.7145156860351562,0.6886506080627441,1.3410903215408325,-0.023496903479099274,1.329727292060852,-2.7998971939086914,1.7567322254180908,1.1080906391143799,-2.549673318862915,-1.2651879787445068,1.2631345987319946,-0.20423796772956848,-0.5344139337539673,0.6009221076965332,2.3128979206085205,0.5145180225372314,-1.1416147947311401,1.4218159914016724,1.6938008069992065,1.738027572631836,-1.202947735786438,-0.2559374272823334,-1.1709033250808716,0.5086763501167297,1.362286925315857,1.0799444913864136,-1.4618794918060303,1.323972463607788,0.0710950568318367,3.3566856384277344,0.40135684609413147,-1.1315248012542725,2.7316367626190186,2.2629380226135254,-0.29974856972694397,0.07592276483774185,-0.9052039980888367,1.3988893032073975,1.1535462141036987,-0.9741449356079102,-1.491769552230835,0.02860751748085022,0.3613092303276062,-1.1747558116912842,0.3466028869152069,-0.18790178000926971,0.2845011055469513,1.3285868167877197,-0.9563999772071838,-1.895271897315979,0.041374243795871735,-1.0894993543624878,-3.8912606239318848,2.1406779289245605,-1.1384589672088623,-0.4864499568939209,1.1479012966156006,1.5990231037139893,-0.21981941163539886,2.049407482147217,2.3533596992492676,0.21983513236045837,0.6818553805351257,-2.0823965072631836,1.1337990760803223,-0.908614456653595,2.8687801361083984,-0.09362032264471054,-1.7205764055252075,0.2834339439868927,-1.0516362190246582,0.525348961353302,-2.06655216217041,-1.0980865955352783,2.8288450241088867,-1.726540207862854,-0.7311906218528748,-1.6947100162506104,0.37653088569641113,1.0541462898254395,1.1455131769180298,-3.636533737182617,-2.1603140830993652,-0.3955686092376709,-1.236405849456787,1.2630845308303833,2.370943069458008,0.2696293592453003,-1.2850168943405151,-0.12574785947799683,1.0268824100494385,0.2120915949344635,1.634969711303711,3.1012775897979736,-0.6850689649581909,-0.7207840085029602,-0.8761759400367737,2.120809555053711,1.0051923990249634,-2.488510847091675,-0.9131665825843811,0.671319305896759,1.6110528707504272,2.7307372093200684,2.0091333389282227,-0.01854083128273487,0.018954798579216003,-0.7786937355995178,1.0386732816696167,1.7603795528411865,-0.4632999002933502,-0.20326608419418335,0.49206236004829407],[0.7535684704780579,-3.255464792251587,1.4998815059661865,-2.2725415229797363,-0.9353546500205994,-2.6692888736724854,-0.2449936717748642,-1.4193438291549683,-1.0976712703704834,-5.256091117858887,-0.12872645258903503,0.3602883815765381,1.5918841361999512,1.2582645416259766,1.9865642786026,-3.285599708557129,-1.3122246265411377,0.7642244100570679,1.3678992986679077,1.117275357246399,0.01753617450594902,0.5344800353050232,-0.8713924288749695,0.46168437600135803,0.5434301495552063,-0.8302425742149353,0.904621958732605,10.59628677368164,-1.253900170326233,-4.490818500518799,-0.26149770617485046,-0.07317094504833221,-0.4755955934524536,0.209244042634964,-2.440523862838745,-6.3077521324157715,-0.9979667067527771,0.11617058515548706,-1.1664172410964966,0.9980371594429016,-0.9410974979400635,2.4596452713012695,-2.1890926361083984,-1.9577677249908447,-1.4125192165374756,1.8860220909118652,0.7209610939025879,-0.17841027677059174,-0.21173933148384094,0.49905121326446533,0.08140994608402252,1.7598966360092163,1.925710916519165,-0.055701397359371185,1.299971342086792,-0.4729725420475006,0.6692432761192322,0.24382543563842773,0.37002459168434143,2.173124313354492,-0.5560804009437561,0.9360427260398865,1.1164989471435547,-0.10209033638238907,0.20697623491287231,2.3634443283081055,-0.22776757180690765,-1.9063793420791626,-0.37055307626724243,-0.8488492369651794,0.42233914136886597,-2.043919801712036,1.2007272243499756,0.1657152771949768,0.6743090748786926,0.4320901036262512,0.7975162863731384,0.6634849309921265,0.15528647601604462,0.9143482446670532,2.629941463470459,0.24378834664821625,1.3320618867874146,-0.3369007110595703,3.1983766555786133,0.4597555100917816,0.5418453812599182,-0.7335842847824097,-0.525303840637207,0.05514613538980484,0.8900097608566284,-0.1816997230052948,2.9159674644470215,0.07487346231937408,0.24680504202842712,1.8814747333526611,0.38461989164352417,0.5356249809265137,0.8609488606452942,0.6431954503059387,-0.8018103837966919,1.045824408531189,-0.8850085139274597,-0.9079597592353821,0.6688445210456848,2.788599967956543,-0.7250286340713501,2.9753329753875732,-0.4317671060562134,0.8215616345405579,-0.9409300684928894,1.587526798248291,0.6539364457130432,0.9377561807632446,1.1864696741104126,0.6740822196006775,-4.3673505783081055,-0.0742054283618927,3.134126901626587,-1.1832486391067505,3.0471739768981934,0.8442324995994568,-1.484800934791565,0.773836612701416,-0.6979148983955383,0.19733357429504395,0.8196707367897034,2.066147804260254,-0.08056218177080154,-0.1528111696243286,-1.0726677179336548,0.4630955457687378,-0.7464464902877808,-1.6736255884170532,-1.1107597351074219,-0.8915406465530396,0.5669139623641968,0.526348888874054,0.21466948091983795,3.1115334033966064,-1.5398787260055542,-1.5580523014068604,0.5541965961456299,0.2559230923652649,-0.8236872553825378,1.1415488719940186,0.27483662962913513,0.0502292774617672,-0.6620153784751892,1.9737098217010498,-1.5152406692504883,0.057582125067710876,1.436395287513733,0.2731470763683319,-0.2274547964334488,-0.9365720152854919,2.314774990081787,-1.7609139680862427,-0.03051244094967842,1.5097788572311401,-0.9371063113212585,0.8927710652351379,1.2636127471923828,0.9604794979095459,1.8068188428878784,-0.8427860140800476,1.2634549140930176,-2.2553629875183105,2.1064388751983643,1.555997371673584,-0.5245644450187683,0.2932301461696625,0.9654485583305359,-0.2646341025829315,0.26954150199890137,-0.41361042857170105,-0.8010072708129883,0.21979673206806183,-0.09062124788761139,0.7323839664459229,-0.5842486023902893,-0.66319739818573,-0.7964116334915161,0.6140713691711426,-1.122083067893982,0.1620332896709442,-0.09952989965677261,1.0658468008041382,0.28827616572380066,-1.1827731132507324,-1.6579253673553467,1.6989754438400269,-0.057827018201351166,-0.10930857807397842,-1.6832120418548584,-0.1715451031923294,-0.016857987269759178,3.1218044757843018,1.5616635084152222,-2.0902223587036133,-0.028299400582909584,0.6049705147743225,-0.7918699383735657,0.8343222141265869,-0.23414164781570435,-0.9086311459541321,0.46780088543891907,0.9423068761825562,-0.9046698212623596,0.3861098289489746,0.12564125657081604,0.43456679582595825,2.54368257522583,-0.14064577221870422,-3.0365540981292725,0.04585802182555199,-1.5161969661712646,-2.3479530811309814,1.5259180068969727,-0.23225155472755432,-0.4458519220352173,-0.2713257968425751,-0.9200176000595093,-0.05110049247741699,-0.246193990111351,1.6443849802017212,1.0541667938232422,-0.12449339777231216,-0.24986672401428223,0.33150407671928406,-0.3644886910915375,1.0967961549758911,0.5629488229751587,-1.121591329574585,-5.12074089050293,-0.6295880675315857,-1.3862422704696655,-0.20072901248931885,-0.49230992794036865,-0.07911764830350876,3.475020170211792,1.108902096748352,1.2545439004898071,0.5155984163284302,0.46249115467071533,1.1111878156661987,-0.8514794707298279,-0.08118090778589249,1.3606220483779907,1.4873219728469849,1.4225337505340576,1.3317184448242188,-0.5728845596313477,1.4960607290267944,0.9746941328048706,-2.506981134414673,2.0283730030059814,0.5539141893386841,1.408362865447998,1.5141527652740479,-1.9940881729125977,-0.23070187866687775,-1.0064741373062134,-1.766814112663269,0.43348369002342224,0.0410742349922657,-0.17416909337043762,1.8169540166854858,-1.3878569602966309,2.126128673553467,-1.4163321256637573,-0.5337471961975098,-0.6679098606109619,-2.9345338344573975,-1.1060900688171387,-1.0207645893096924,0.21366432309150696,-0.785351037979126,-1.4392311573028564,0.9426096677780151,-0.6862632036209106,0.9118494391441345,2.2637670040130615,-1.1785858869552612,0.16014564037322998,-2.3775339126586914,2.305349588394165,1.1117101907730103,-0.6859583258628845,-0.5609148740768433,1.0568193197250366,0.35075199604034424,0.8975974321365356,-0.6970277428627014,-2.8332791328430176,-0.45431771874427795,2.0212440490722656,0.9502944946289062,1.2018424272537231,0.849481463432312,-0.23729124665260315,0.031738314777612686,-1.765967607498169,-0.5402211546897888,0.11583664268255234,0.4593627154827118,1.9542536735534668,-1.1490726470947266,1.8211725950241089,-1.0135267972946167,1.5933393239974976,-0.26677215099334717,-1.725958228111267,-0.12142414599657059,2.112809896469116,1.6089835166931152,1.479394555091858,-1.6071723699569702,1.3287469148635864,1.3776485919952393,-0.91443932056427,1.127827763557434,-1.0003985166549683,-2.0813260078430176,2.08834171295166,2.763681650161743,-1.0266979932785034,-0.7510159611701965,1.7754199504852295,2.318308115005493,-2.367011070251465,-0.9492253661155701,4.630610466003418,0.8643500208854675,0.2899608612060547,3.924340009689331,0.32906782627105713,0.8931497931480408,-0.8326960802078247,-0.6778756380081177,2.001845598220825,-0.7837613224983215,-1.0973206758499146,-0.45802414417266846,-2.7585835456848145,2.1743760108947754,0.8506487607955933,-1.9119634628295898,0.4244542419910431,1.5434967279434204,0.5985972285270691,0.10915826261043549,0.7614342570304871,1.2642191648483276,-0.5528773069381714,-1.209066390991211,-0.8672894835472107,1.0811753273010254,-0.8332569599151611,0.8706936240196228,-1.015897512435913,-0.8400282859802246,-0.061244815587997437,-0.9817757606506348,0.4373137056827545,-0.7091456055641174,-0.8327614068984985,-0.6456843018531799,-1.876143455505371,-0.1074974536895752,-0.9842441082000732,-1.1948130130767822,-3.154777765274048,-3.074152946472168,-2.0714826583862305,-0.6627283692359924,0.00929183978587389,-1.0338324308395386,0.7798158526420593,0.568494975566864,-0.15464043617248535,1.7020577192306519,0.5507734417915344,-0.8779664635658264,-1.0391019582748413,0.7188020944595337,0.8100721836090088,-0.6579349040985107,-2.6589574813842773,-0.9338392019271851,0.8889667987823486,1.2172770500183105,0.4651713967323303,1.392317533493042,1.3559197187423706,1.6365246772766113,2.4531660079956055,-0.36371561884880066,2.540008306503296,0.8938755989074707,1.4803675413131714,-0.9355475902557373,0.8222941160202026,2.0048208236694336,0.40025803446769714,1.1890517473220825,1.837424635887146,0.86282879114151,-0.6143993139266968,-1.0655438899993896,-1.8585253953933716,-0.2806808650493622,0.023799344897270203,0.22425492107868195,-0.22362986207008362,2.4728150367736816,-1.7532594203948975,-0.2581588625907898,-1.6277652978897095,-0.7035396099090576,0.7585598826408386,-1.7102241516113281,-0.5348914861679077,-0.7984450459480286,2.1103575229644775,0.309260755777359,1.1461130380630493,1.8888115882873535,-2.4788978099823,3.038273334503174,1.0027568340301514,0.08951427042484283,-0.018173756077885628,1.297147512435913,-0.3469657301902771,0.39439085125923157,1.1960713863372803,-2.672797918319702,0.7105851769447327,1.5206553936004639,-1.3062572479248047,-0.9854077100753784,0.3615535795688629,-1.9957119226455688,-0.5685475468635559,0.42516109347343445,1.4318856000900269,2.1433658599853516,-0.05305143818259239,-0.4044569432735443,-0.8202071785926819,-1.6548935174942017,-0.7839459180831909,0.18056471645832062,-0.47094103693962097,-0.6435152888298035,-0.367787629365921,-2.7676079273223877,0.7800412774085999,-0.055133964866399765,0.07422906905412674,-0.9968095421791077,1.000348448753357,-1.0010521411895752,0.8162327408790588,-1.4711520671844482,-2.3866209983825684,-0.9847604632377625,-0.5423311591148376,0.9045374989509583,-1.1668059825897217,0.3766052722930908,1.757614016532898,-0.5268539190292358,-0.7750255465507507,0.5531328916549683,-1.3780508041381836,-0.6941456198692322,0.789574146270752,-0.018359201028943062,0.19142431020736694,1.132021427154541,1.4569742679595947,-0.32046547532081604,-0.8466821908950806,-0.8979051113128662,1.358626365661621,-0.3702447712421417,3.72511887550354,-0.2310171276330948,-1.2295035123825073,1.6957849264144897,0.11580503731966019,-2.338120222091675,-0.04869178310036659,1.305354356765747,0.4411349892616272,-9.410102844238281,0.899898886680603,1.7319806814193726,0.22618719935417175,0.7921435236930847,-0.3693092167377472,1.4364137649536133,0.763913631439209,-1.1913126707077026,1.271491527557373,0.9566185474395752,2.206733226776123,-0.28297358751296997,0.6993476152420044,0.5313627123832703,1.1455613374710083,-0.9372788071632385,-2.844132900238037,-0.09390685707330704,0.09411028772592545,1.7251561880111694,-2.109532356262207,-0.2877708375453949,-0.5806586146354675,0.15711012482643127,-0.06282464414834976,-0.5494025349617004,0.28998735547065735,0.35835522413253784,1.3146458864212036,-0.19618640840053558,-1.6172230243682861,2.0467679500579834,-2.4516522884368896,-0.7792982459068298,-0.6057330965995789,-0.6472386717796326,-0.33104100823402405,0.864080548286438,0.3822484016418457,0.06561800837516785,-0.7090026140213013,-1.5450679063796997,-0.1168748065829277,-0.13450978696346283,-0.37829774618148804,0.36371129751205444,-1.0040308237075806,0.6269405484199524,0.8143284916877747,-0.13871483504772186,0.47874823212623596,2.0092899799346924,0.15841208398342133,0.4167156219482422,-0.03448089212179184,1.143038272857666,-1.6517928838729858,-0.26674145460128784,-0.14830373227596283,-0.8043153285980225,-1.6915078163146973,-0.11528251320123672,-0.9056842923164368,1.100072979927063,1.1884992122650146,1.5429714918136597,-1.2683453559875488,-1.1618294715881348,-2.1036555767059326,-2.2072808742523193,0.7942875623703003,-2.051990032196045,-1.6435410976409912,-1.1694151163101196,-2.4785733222961426,0.2590281069278717,2.247730016708374,-1.9334590435028076,0.02206757850944996,2.852445125579834,-1.0873321294784546,1.8872251510620117,-2.110762119293213,-0.30918481945991516,1.913332223892212,1.563605546951294,0.3638967275619507,-0.8626269698143005,-0.15997102856636047,1.2525405883789062,-1.3017005920410156,-0.37986648082733154,1.9167935848236084,0.6966919898986816,1.8241796493530273,-1.209350824356079,0.05117836967110634,-0.5317579507827759,2.1801745891571045,1.093819260597229,-0.7754841446876526,0.23945735394954681,1.9122074842453003,0.1825854331254959,0.2084386795759201,-1.2892731428146362,2.741448163986206,-1.5795950889587402,-0.6657899618148804,-0.6304340958595276,-0.9974127411842346,-1.885708212852478,-0.8754814267158508,0.19790740311145782,-0.3518555760383606,-3.885178804397583,-1.8456157445907593,-0.2811480462551117,-0.10310067981481552,-0.8098812699317932,1.1660265922546387,0.11942975223064423,0.9500415921211243,2.1242146492004395,-0.6584305763244629,1.6257922649383545,3.2426886558532715,-0.5848039388656616,-0.8552671074867249,0.15651650726795197,0.14102129638195038,-0.5531082153320312,-0.6657750010490417,-1.4072684049606323,-0.46698838472366333,1.656990647315979,2.2490546703338623,0.6335529685020447,6.506866931915283,0.5010117292404175,1.1026663780212402,1.3564810752868652,1.9355913400650024,0.5830866098403931,1.7110408544540405,-0.4746212363243103,-0.6622548699378967,0.45915549993515015,2.0486178398132324,0.776744544506073,-2.991487741470337,0.06922245770692825,1.2341275215148926,-0.5531164407730103,-1.0813523530960083,-0.21478824317455292,-0.785464882850647,0.04974792152643204,-0.3179660439491272,1.235131859779358,2.30077862739563,-0.0903758779168129,-0.2559024393558502,-0.6031166315078735,1.7216650247573853,-1.609204649925232,-0.25675734877586365,0.1434784233570099,0.33040300011634827,0.30606329441070557,2.4061973094940186,1.9052647352218628,0.461045503616333,0.7038608193397522,-0.12299085408449173,-1.4095232486724854,-0.4903513491153717,-0.6653847098350525,0.20852060616016388,0.19623884558677673,1.2865403890609741,-0.1835314929485321,0.2270708531141281,-0.6043618321418762,-1.6981061697006226,1.6583091020584106,0.0996459424495697,0.10787392407655716,0.8025929927825928,1.4630718231201172,3.5311923027038574,0.24921031296253204,0.8503695130348206,-0.7367123961448669,0.37223130464553833,-1.4870597124099731,-0.7064541578292847,-0.1938881278038025,1.267899990081787,-0.10986452549695969,0.204700767993927,-0.24674472212791443,-0.7045387029647827,1.4277530908584595,0.8120787739753723,-0.6792888641357422,-1.8708388805389404,1.9855740070343018,-1.2578856945037842,-0.26664477586746216,1.0517398118972778,1.2339272499084473,2.2642691135406494,1.8965182304382324,0.8410605788230896,1.5600700378417969,1.9374299049377441,1.8856843709945679,-0.5124037861824036,0.4107826054096222,-0.458884060382843,-0.24097225069999695,0.694039523601532,1.9451779127120972,-0.6127798557281494,1.1248539686203003,-0.11456836760044098,0.08774422854185104,-0.39612725377082825,-0.691497266292572,-1.18418288230896,0.17829400300979614,-0.07316000759601593,-0.8240985870361328,-1.70613431930542,-0.18493683636188507,0.40939974784851074,0.5637011528015137,-0.6511971354484558,-0.8651113510131836,-2.1194138526916504,-0.02105197124183178,-0.018392397090792656,0.32288509607315063,-0.5034367442131042,0.018105391412973404,-0.4005848169326782,1.6142902374267578,2.0507235527038574,1.2314352989196777,1.6022900342941284,1.9545842409133911,-1.2575132846832275,-0.4655611515045166,0.8114150166511536,-1.0492560863494873,0.03795011714100838,0.10080594569444656,1.241971492767334,-0.49834147095680237,0.17107601463794708,0.6116106510162354,1.0063689947128296,1.5559371709823608,1.0236144065856934,-0.28237518668174744,1.427849292755127,0.7918955683708191,0.36572498083114624,1.6801810264587402],[-0.7900505661964417,0.5536542534828186,2.4879634380340576,-0.36976486444473267,-1.8131684064865112,-2.155123233795166,0.5316091775894165,-1.0558655261993408,-1.0692592859268188,1.0723503828048706,-1.731627345085144,0.5786290168762207,1.1154983043670654,-0.043249718844890594,0.5738820433616638,0.0033294546883553267,-1.4571011066436768,0.9458649158477783,0.23373839259147644,-0.13317537307739258,0.637757420539856,-0.51938796043396,-2.0798065662384033,-0.06767424941062927,-2.444117546081543,-0.4492114782333374,0.32188257575035095,7.221447944641113,0.24437938630580902,-4.5336222648620605,-1.6710928678512573,0.48803243041038513,-0.8979651927947998,1.4029581546783447,-0.9590592384338379,5.430063247680664,-0.18176423013210297,0.9070441722869873,-0.7059182524681091,0.5807271599769592,-1.9715913534164429,0.8313937187194824,0.8874316811561584,-1.6861515045166016,-0.25545424222946167,1.9272444248199463,-1.1906986236572266,-0.7379112243652344,0.03129569813609123,1.5616177320480347,1.0226970911026,1.2086584568023682,0.5704212784767151,0.2186995893716812,2.0444881916046143,0.9448449015617371,3.1260156631469727,-0.7357922792434692,1.0397584438323975,1.8258018493652344,-1.2273544073104858,-0.8786872625350952,-0.3384716808795929,1.9931186437606812,1.145704984664917,0.03769439458847046,-0.35589390993118286,-0.022875282913446426,0.8926059007644653,-1.0258429050445557,-1.0864157676696777,0.30715829133987427,0.8714508414268494,-0.1332545280456543,-2.3398101329803467,0.4026424288749695,-2.5996904373168945,-0.2627488374710083,-1.0583206415176392,0.008203714154660702,0.9657568335533142,-1.5688685178756714,1.7361187934875488,-1.8810255527496338,1.2584164142608643,-1.140626072883606,-0.6804855465888977,-0.27296656370162964,1.6565088033676147,0.25888633728027344,-2.5992915630340576,-0.08512142300605774,1.4733256101608276,0.06816750019788742,-0.013789297081530094,1.1176843643188477,-1.5290474891662598,-0.7641053795814514,-1.3824998140335083,-0.9727045297622681,-0.1297222226858139,1.745455026626587,-0.875138521194458,0.11338424682617188,0.0315418541431427,1.1771297454833984,2.1721277236938477,1.9334079027175903,0.05159454792737961,-0.26641789078712463,-1.9825490713119507,2.9471070766448975,-1.0059754848480225,0.4981982409954071,-0.4979366660118103,0.8283663988113403,3.6022918224334717,1.5613104104995728,2.4364168643951416,-2.1733314990997314,1.1151609420776367,-0.39340946078300476,-0.15702037513256073,2.3284709453582764,-1.0345118045806885,-0.07471289485692978,1.507810354232788,1.7076541185379028,1.5242798328399658,0.7644065022468567,-1.368079662322998,0.968365490436554,-0.6747528910636902,-1.2268259525299072,0.45821574330329895,0.369038462638855,-0.358298122882843,-0.5920573472976685,1.5497987270355225,2.498723030090332,1.2579193115234375,0.4555162787437439,0.8007240891456604,-2.25764799118042,-0.9659155011177063,1.2686771154403687,0.2773236036300659,-0.1805073320865631,2.516469955444336,-0.34904173016548157,1.206137776374817,0.8716676831245422,0.8129189610481262,-0.7375436425209045,1.1796931028366089,0.6598517894744873,-1.2473416328430176,0.12895174324512482,0.6173195838928223,1.2682431936264038,0.6137536764144897,-1.1797919273376465,-0.35280880331993103,-0.5593725442886353,0.9218148589134216,-0.2851313352584839,-0.4006642997264862,0.0703984722495079,1.3930803537368774,0.6620244979858398,0.13763658702373505,-0.1623515486717224,1.9106472730636597,1.50932776927948,-0.4271632134914398,0.36901190876960754,-0.6966888308525085,-0.2002621293067932,0.5956642031669617,1.2912169694900513,0.5254952311515808,0.48773083090782166,-0.46562808752059937,-0.23742780089378357,-0.6582348942756653,0.2508499026298523,-0.0972466841340065,-0.6094371676445007,0.7255904078483582,-0.13779079914093018,-0.5257472991943359,0.6967230439186096,1.1546283960342407,0.6298754215240479,-0.7410745024681091,-0.38899433612823486,0.5519934296607971,1.162025809288025,1.6209391355514526,0.85481196641922,0.18482911586761475,-1.2074933052062988,-1.565124273300171,1.8815133571624756,0.12155139446258545,2.217496633529663,3.651414394378662,-0.678873598575592,-0.03342333808541298,0.9805267453193665,-0.16217973828315735,0.30422255396842957,0.2087784707546234,-2.2731263637542725,-0.3111126720905304,-0.15389147400856018,0.44807910919189453,-0.5592385530471802,4.453538417816162,-0.130707785487175,-1.714328646659851,0.010468581691384315,-0.8853572607040405,-0.10939959436655045,-1.2750755548477173,1.1808639764785767,1.6797372102737427,-2.343968629837036,-0.01683097518980503,-1.3121848106384277,1.2955626249313354,0.39316365122795105,2.17625093460083,-1.9159597158432007,-5.114616394042969,2.431110382080078,0.3182474672794342,0.9244674444198608,-0.6860154867172241,0.12890364229679108,3.173004627227783,0.515052855014801,1.8933050632476807,2.1735332012176514,1.0965238809585571,-0.0887836441397667,-0.4704138934612274,0.9512099027633667,0.8735331296920776,1.8426125049591064,-0.3392197787761688,0.6809316873550415,-0.5637386441230774,-1.3131223917007446,-0.17786072194576263,-2.4622554779052734,-0.10866402834653854,-2.6271586418151855,0.6053597331047058,0.5808754563331604,-1.715093731880188,0.5324902534484863,0.845895528793335,-1.4212899208068848,-1.481604814529419,-1.5449786186218262,-0.4623262882232666,2.078200101852417,-0.5189043283462524,-0.9869754314422607,-1.5223501920700073,-0.07869177311658859,0.6111583113670349,-0.5106487274169922,0.21339298784732819,0.9260116219520569,0.8735257983207703,1.1148180961608887,-0.9779119491577148,0.573251485824585,-1.2761489152908325,0.9312170743942261,1.93833327293396,0.3919117748737335,-1.9117547273635864,-2.7688064575195312,1.388918399810791,0.7048730254173279,2.7222838401794434,-0.1099257543683052,-0.671388566493988,0.2182196080684662,1.9150536060333252,0.9294936656951904,-1.8026736974716187,0.5634395480155945,-0.4906564950942993,-0.012366770766675472,0.7583215236663818,0.8136447072029114,0.6250104904174805,0.6398678421974182,0.15051515400409698,0.49975553154945374,0.3475698232650757,3.277996301651001,0.9818536043167114,-0.8730451464653015,2.2207529544830322,0.30736181139945984,2.054515838623047,-0.9289352893829346,-0.1432940810918808,-0.7527881860733032,2.192042827606201,-0.13927145302295685,0.5178915858268738,-2.1621861457824707,0.04920564591884613,2.267784595489502,-0.8329964280128479,2.4216606616973877,-0.8133676052093506,0.0956219881772995,2.0005128383636475,1.247122049331665,-0.9807192087173462,0.5765680074691772,-0.10072629153728485,2.3889124393463135,-1.56809663772583,-2.2658097743988037,4.268401622772217,1.8048272132873535,-1.1153087615966797,2.5210375785827637,0.913661777973175,1.1436140537261963,-1.740644097328186,-0.5477367043495178,0.531813383102417,-3.1221871376037598,-1.7252029180526733,1.9370611906051636,-3.2164552211761475,1.741369605064392,0.7155977487564087,-1.1624306440353394,-0.941605269908905,3.0077834129333496,1.4699492454528809,0.4078853726387024,0.627739429473877,-0.4488416016101837,0.04956155642867088,0.8678414225578308,-2.1523735523223877,1.5597212314605713,1.8371596336364746,0.19676214456558228,-0.3239281177520752,-1.0269911289215088,-0.6982055902481079,0.10231637954711914,0.48436275124549866,-0.40342068672180176,0.1847047358751297,-1.2131788730621338,0.13475462794303894,-1.5710653066635132,0.3855131268501282,1.3818057775497437,0.33657342195510864,-1.172339916229248,-2.4966964721679688,-0.9861623048782349,-2.7374565601348877,-0.31007978320121765,-0.10741692781448364,2.929752826690674,-0.3507811427116394,-0.21867741644382477,-0.2830951511859894,-1.373123049736023,-1.051108956336975,1.637615442276001,-0.7578116059303284,0.08801180869340897,-0.9317631125450134,-0.055435508489608765,1.1452139616012573,1.3469874858856201,0.40147557854652405,-1.26865553855896,0.5499879717826843,-1.1458581686019897,0.9317296743392944,-1.411360263824463,2.7022652626037598,1.1807920932769775,0.5896598100662231,-1.5185010433197021,4.264692783355713,-0.12053336948156357,-1.128358244895935,0.7929593920707703,0.11930395662784576,2.8015859127044678,0.702897310256958,-1.4815809726715088,0.19790619611740112,-0.35837411880493164,0.5248852968215942,1.0394009351730347,4.10858154296875,-0.3292626440525055,-1.5843453407287598,-0.0803145170211792,0.3927168846130371,-0.965916097164154,0.7467218041419983,-0.49153462052345276,-0.821255624294281,-0.1893671751022339,1.6652100086212158,-0.286508709192276,1.8191081285476685,-0.15570487082004547,-0.29674428701400757,0.9718229174613953,-0.06884951144456863,0.5757468938827515,-0.7057245969772339,-1.390916109085083,0.13948887586593628,-1.0538386106491089,2.477630138397217,-4.562804698944092,1.0604736804962158,1.9177275896072388,1.3516154289245605,0.2786347568035126,1.200290560722351,-0.5799407958984375,-1.7720438241958618,0.49370649456977844,0.46766233444213867,0.1142825186252594,0.6305271983146667,-1.2583379745483398,-0.29464292526245117,-2.29725980758667,-0.9033634066581726,0.10812292993068695,0.695169985294342,-1.1641321182250977,-1.5070042610168457,-0.40290796756744385,0.8568985462188721,-0.7560741901397705,-0.0012916232226416469,-0.6860104203224182,-0.27210164070129395,-1.5649964809417725,-0.20223575830459595,-0.05120707303285599,-0.4416539967060089,0.12220693379640579,0.6550562381744385,-0.7752112746238708,1.6516990661621094,-0.6519544124603271,0.8072171211242676,-0.7717651724815369,0.41113850474357605,2.1602983474731445,-0.0558871328830719,-0.4712255001068115,-0.08781658858060837,-2.508023262023926,0.24488751590251923,1.5946630239486694,2.4659626483917236,1.3341604471206665,-2.498647928237915,0.20688240230083466,2.393350839614868,0.0531320720911026,2.731052875518799,2.6491589546203613,0.9357331395149231,1.2940374612808228,0.585677444934845,-1.1143863201141357,0.42529362440109253,2.5841994285583496,-1.4096581935882568,-11.470370292663574,0.3411058187484741,-0.2639739215373993,-1.421059012413025,0.44824329018592834,-0.5256425142288208,1.1293739080429077,-1.946094036102295,0.11596756428480148,1.5845131874084473,-0.9905644655227661,1.0737518072128296,0.16588591039180756,-1.4362080097198486,-0.4710308313369751,0.9625287652015686,-3.144869089126587,-1.2270920276641846,-0.7172380685806274,0.006142076104879379,0.0941527932882309,-0.9507791996002197,-1.8688551187515259,-0.20985354483127594,-1.6138757467269897,-0.519952118396759,-0.7439438104629517,0.9071779251098633,0.38704153895378113,2.6240975856781006,-0.5365260243415833,-0.1609034538269043,1.7799193859100342,-0.7819014191627502,-0.7072787880897522,1.1331113576889038,0.01770329475402832,-0.7202858328819275,1.3383424282073975,-0.6995457410812378,0.22403794527053833,-0.33584481477737427,-0.27249249815940857,-0.09253910183906555,1.0954556465148926,-0.009242485277354717,-0.5128897428512573,0.16561588644981384,0.532604992389679,2.3170435428619385,0.05865996703505516,0.46927985548973083,0.4190368354320526,1.1345452070236206,0.8916864395141602,-0.8366659879684448,-1.2379165887832642,-1.8349359035491943,0.1454729288816452,1.6553821563720703,5.600323677062988,-0.01826624944806099,0.1082962304353714,-0.14438948035240173,1.2470417022705078,-2.2042500972747803,0.6289373636245728,1.7736300230026245,-0.710402250289917,-1.3585033416748047,2.1960530281066895,1.7711904048919678,-0.721783459186554,-1.9884295463562012,0.2910182774066925,-1.3887101411819458,0.10227411240339279,0.19689659774303436,-0.9548308849334717,0.4880528748035431,0.04858984798192978,-0.931309163570404,0.5159744620323181,-0.2288089245557785,-1.2087944746017456,0.8729075193405151,0.4299902319908142,-0.1677607148885727,-0.8474066257476807,0.337425172328949,0.0776144415140152,-1.5258119106292725,-1.2766283750534058,-0.3763909637928009,-1.1512447595596313,0.8835857510566711,0.38973236083984375,0.4093504548072815,-1.1320792436599731,1.38552987575531,1.3845270872116089,0.8150449991226196,0.8597627282142639,1.359212875366211,-0.9412115216255188,0.6012792587280273,0.2533469796180725,1.8575502634048462,-0.16150741279125214,-0.3774866461753845,-0.39893877506256104,-0.23002873361110687,-0.8216775059700012,-1.518463373184204,0.6506877541542053,0.05641882121562958,-2.636610746383667,-0.3026430904865265,-1.4240086078643799,-0.1691112220287323,0.6502720713615417,0.9998571276664734,-0.0777805969119072,-0.4237738251686096,0.5714365243911743,1.4771047830581665,0.8063449859619141,-0.11036233603954315,0.4331595301628113,0.07716694474220276,-0.525540292263031,-0.6555728912353516,-3.350332736968994,-1.1411070823669434,0.1107674241065979,0.8074787855148315,-0.6076721549034119,1.73757004737854,-0.9812555313110352,4.128915786743164,0.9861131906509399,-0.6338734030723572,1.473175287246704,1.344781517982483,-0.32476845383644104,0.7040825486183167,-1.7338931560516357,-1.3015450239181519,-0.010797704569995403,-0.17441913485527039,0.331863671541214,-1.869162917137146,1.445982575416565,-0.3020978569984436,-1.7509320974349976,-1.284659743309021,0.6320575475692749,-1.4093858003616333,-1.3432999849319458,1.2077786922454834,1.08854079246521,2.0572097301483154,0.7026053667068481,-0.8238297700881958,1.0218454599380493,0.4687362313270569,-1.715516448020935,-0.81590336561203,0.5690419673919678,1.5093902349472046,-0.7691983580589294,0.5121575593948364,3.5762875080108643,-0.6462669968605042,-0.08978293836116791,0.9789342284202576,0.3219841420650482,-0.8723068833351135,-0.854935348033905,0.5250251889228821,0.04339364543557167,0.9084959626197815,0.5564500093460083,1.1679528951644897,-0.24594663083553314,-2.0441370010375977,-0.10618267953395844,-0.7145525217056274,1.013206958770752,-0.19870974123477936,-0.24283422529697418,2.720815658569336,-0.3009074628353119,0.7928087115287781,-1.1037635803222656,-1.8595750331878662,-0.989818274974823,0.3329170346260071,1.0649901628494263,-0.6852863430976868,0.8941003680229187,-1.4742368459701538,0.5388166904449463,0.36920732259750366,-0.38683760166168213,1.8961752653121948,-2.9142560958862305,-0.5364707708358765,-0.19739006459712982,1.338869333267212,1.3137469291687012,-0.7859818339347839,3.540276288986206,1.7604994773864746,0.7259287238121033,-1.2681480646133423,1.9757195711135864,0.8914844989776611,2.046942949295044,-1.0655596256256104,0.9594901204109192,-0.13095051050186157,0.842003583908081,-0.06422103941440582,1.5982297658920288,0.437967449426651,0.5070642828941345,0.9147304892539978,-3.048715353012085,0.24427300691604614,-0.8121455311775208,0.00563464080914855,0.6270113587379456,-1.2566287517547607,0.22034412622451782,-0.4996846914291382,-0.4102563261985779,1.480059266090393,0.7553580403327942,0.2046555131673813,-1.5917413234710693,-1.8393399715423584,-1.1252236366271973,-0.9981931447982788,0.7760920524597168,-0.7657200694084167,-0.6403965353965759,-0.0001867256942205131,-0.35078173875808716,-0.5812617540359497,0.5842880010604858,2.55985689163208,2.126136541366577,-2.5861165523529053,-1.2295883893966675,2.174489974975586,0.010040943510830402,-1.2828859090805054,0.9206746816635132,1.445892095565796,-1.2977880239486694,0.2148497849702835,0.37179505825042725,-2.877739429473877,-0.992640495300293,0.07681679725646973,-0.5747395157814026,1.4940520524978638,-0.22217313945293427,-0.5128574967384338,-0.4029492735862732],[1.8700014352798462,-0.9537832140922546,2.1034228801727295,0.08857130259275436,0.31595301628112793,-1.3313374519348145,-1.3296457529067993,-0.9822030663490295,-1.5796012878417969,2.1072349548339844,-1.6206250190734863,0.5644545555114746,0.5484638214111328,-0.092844158411026,-0.17612910270690918,2.519317150115967,-1.2694110870361328,0.811542809009552,-1.4266833066940308,-2.2250819206237793,-0.2175114005804062,-1.427248239517212,-1.5540472269058228,0.06491968035697937,-0.7231432795524597,-1.1539101600646973,0.9275432229042053,5.911684036254883,1.3829237222671509,-4.723909854888916,0.3674319386482239,0.3689708113670349,-0.8397740721702576,1.0944362878799438,0.5117955803871155,5.333931922912598,-0.008794872090220451,1.1614038944244385,-0.23337869346141815,0.24328447878360748,0.5055565237998962,2.8021748065948486,1.9584015607833862,0.5087627172470093,-0.40342387557029724,2.1654560565948486,0.5552844405174255,-0.07008281350135803,0.6879984736442566,0.2538772523403168,-0.435979962348938,0.4371735155582428,1.8677483797073364,0.9553792476654053,1.0532578229904175,0.14776037633419037,1.5467066764831543,-1.2304576635360718,1.4929696321487427,1.0905483961105347,0.5290743112564087,0.6372637152671814,-1.7041985988616943,1.7259125709533691,-0.2313508242368698,0.7979050278663635,-0.7048803567886353,0.9901645183563232,0.33992162346839905,-1.0523625612258911,-0.44561246037483215,1.3442282676696777,-1.3779569864273071,-1.878465175628662,-2.2843682765960693,-0.6670844554901123,1.3943440914154053,-0.46494823694229126,-0.35562461614608765,-0.05279361084103584,-0.37396296858787537,-0.16740337014198303,1.6958273649215698,-0.04257672652602196,2.935289144515991,-0.12983354926109314,0.8481287956237793,-0.4493083655834198,-0.12610949575901031,0.031112348660826683,-2.732426166534424,1.7865413427352905,-0.016187461093068123,-2.402486562728882,-0.9416614174842834,1.5836025476455688,-1.3438811302185059,-1.2697159051895142,-1.8824230432510376,-0.08117653429508209,0.7724342942237854,-0.2882547378540039,0.12536759674549103,0.4213460385799408,1.2642439603805542,0.7824274301528931,0.7665669918060303,0.9381256699562073,0.007203627377748489,0.10369446128606796,-2.738351345062256,3.34871244430542,1.7629899978637695,0.4649307429790497,-0.7499710321426392,2.5256354808807373,-0.06792617589235306,0.33435729146003723,1.7335848808288574,-2.3704988956451416,0.37268099188804626,2.8828299045562744,0.40057700872421265,1.5602624416351318,0.20313064754009247,-1.6119767427444458,-1.3218507766723633,1.0870229005813599,-1.0078155994415283,-0.48945873975753784,0.42376697063446045,0.40318143367767334,0.7196474671363831,-1.2555240392684937,0.27537643909454346,-0.2246823012828827,-0.6424707770347595,0.36115458607673645,1.915483832359314,2.0597071647644043,0.3984278738498688,-1.0196256637573242,-1.8808467388153076,-1.451167345046997,-0.11623602360486984,-0.4353862404823303,0.7647074460983276,-0.9029726386070251,-0.8483495712280273,-2.5343551635742188,-1.9437227249145508,2.1674396991729736,0.5866812467575073,-2.881378412246704,2.3875584602355957,-0.19905981421470642,-3.790619373321533,1.0582926273345947,0.18380481004714966,0.2137312889099121,0.6011139154434204,1.4136888980865479,-1.300391435623169,0.7059012055397034,0.508355975151062,-0.8265513777732849,1.5162755250930786,-0.6353320479393005,1.6617889404296875,0.7381632328033447,0.9743962287902832,1.9016209840774536,-2.804738998413086,-0.804676353931427,-1.5383496284484863,0.11297547072172165,0.10581666231155396,0.44206854701042175,-0.09882081300020218,-0.5971598625183105,1.0379793643951416,0.006794237997382879,-1.1905148029327393,-1.9004913568496704,-0.10253852605819702,0.42031776905059814,0.8615812063217163,-0.24914942681789398,-1.0265244245529175,1.0082272291183472,-0.5192649960517883,0.2018110305070877,1.1059271097183228,-0.2261027842760086,0.31990352272987366,0.36676719784736633,0.06715237349271774,-0.9813494682312012,3.0467450618743896,0.5410239696502686,1.2281670570373535,-0.3625689148902893,0.27658089995384216,-1.557469129562378,2.3335161209106445,0.09454001486301422,-0.6809306144714355,-0.8574090600013733,-0.5185633301734924,1.4173985719680786,1.1108695268630981,1.089577078819275,-0.5478112697601318,-0.5097954869270325,-0.5556439757347107,-0.5653342008590698,-1.175892949104309,0.4166565239429474,-1.219483733177185,0.2160225212574005,-0.5649774074554443,0.3159421384334564,-0.8825043439865112,0.8365920186042786,-1.0597103834152222,1.6423629522323608,0.5677332878112793,1.699103832244873,-1.3848485946655273,0.37077730894088745,-0.19178171455860138,0.8909830451011658,1.8958004713058472,-1.2269827127456665,-2.5528173446655273,0.6309081315994263,1.3474290370941162,1.057568907737732,-0.6501286029815674,-0.6289110779762268,2.2084085941314697,1.517317533493042,1.1500778198242188,1.8380420207977295,-1.1535406112670898,-1.5367317199707031,-1.7328810691833496,-0.7129775881767273,0.865331768989563,2.237637519836426,-0.6331576704978943,-0.9992145895957947,0.36362025141716003,-0.5741291642189026,-0.5682681202888489,-0.6825681924819946,-0.22279313206672668,-0.2626400291919708,-0.6087192893028259,1.2177050113677979,0.2474922388792038,-0.1264093518257141,1.684544324874878,0.593108594417572,0.23041152954101562,0.4215044677257538,-0.2334827482700348,-0.2596336901187897,-0.6701920032501221,-0.2964950501918793,-1.513450026512146,-1.4474554061889648,0.6922515034675598,-1.437402606010437,-0.4191257059574127,0.05706638842821121,0.3521604835987091,1.6325576305389404,-0.3647539019584656,1.4764797687530518,0.7200438976287842,0.9377652406692505,1.2363752126693726,-1.0297328233718872,1.5730253458023071,-1.4308619499206543,0.16653135418891907,0.2231525033712387,2.4413418769836426,-0.1611386239528656,0.9162230491638184,0.32445117831230164,0.0002463006239850074,-0.9630674719810486,-0.9251115918159485,0.36335447430610657,-1.4127824306488037,0.22973781824111938,-0.09917386621236801,0.48129305243492126,1.5950884819030762,-0.14676129817962646,-1.2372773885726929,1.1645609140396118,2.045637369155884,3.6029927730560303,0.9226999878883362,0.23548153042793274,1.2711671590805054,0.28634461760520935,0.06930431723594666,-2.774435043334961,0.5810049176216125,-0.36896729469299316,2.1899468898773193,1.5554274320602417,2.1834075450897217,-0.17709745466709137,0.4351813793182373,1.2835607528686523,-0.3828519284725189,0.7454456090927124,-1.8016822338104248,-0.41161105036735535,-0.42083993554115295,2.1432156562805176,1.410874843597412,0.4167179465293884,0.03538021445274353,0.4331080913543701,-0.25948455929756165,-0.973899245262146,1.532984972000122,0.8133245706558228,-0.4833168387413025,1.1259715557098389,-1.3160326480865479,1.860588550567627,-1.2843698263168335,-0.2635345458984375,1.570401668548584,-0.6328579783439636,-0.7442286610603333,-0.5800590515136719,-1.7868690490722656,3.2253663539886475,1.720704197883606,-0.1793280988931656,-2.7367300987243652,0.07314597070217133,-0.7454310059547424,0.6245610117912292,0.5524724125862122,-0.39204442501068115,-0.15724553167819977,-0.01564054936170578,-0.5512739419937134,0.3238130211830139,2.1001198291778564,-0.008657955564558506,0.6417033672332764,0.7234825491905212,-0.0032816226594150066,0.4954527020454407,0.23382963240146637,-0.7909590601921082,-0.8181881904602051,-2.2997756004333496,-0.9683290123939514,-0.7099251747131348,-1.1424070596694946,-1.1119439601898193,1.6520090103149414,-1.2219786643981934,-2.0375730991363525,-1.4558624029159546,-2.369098424911499,1.1118969917297363,1.0685210227966309,0.6039063930511475,-0.17772407829761505,0.1506483554840088,-0.23590396344661713,-1.7554457187652588,-0.5648266077041626,0.5187008380889893,-0.6123316884040833,0.1604079157114029,-2.5146777629852295,0.5221972465515137,1.6339123249053955,1.227448582649231,1.411824345588684,-0.40133005380630493,0.9426468014717102,-1.6288179159164429,1.47822904586792,0.1875685453414917,1.5712575912475586,-0.9427369236946106,0.4654623568058014,-2.1302497386932373,0.7647436857223511,-0.17891137301921844,-1.1605160236358643,2.3731563091278076,2.247870922088623,2.3855373859405518,0.36991995573043823,-0.08694471418857574,2.49459171295166,0.7135692834854126,-0.7316654324531555,-0.5612058639526367,2.137115478515625,0.9847098588943481,-3.4215614795684814,0.288699209690094,0.0990767553448677,-1.1373354196548462,-0.010949020273983479,0.23142188787460327,-0.24161367118358612,0.18040399253368378,1.1389511823654175,-0.6554152965545654,0.586129903793335,0.41170331835746765,-3.300605297088623,2.651108980178833,1.1357625722885132,2.424318552017212,-0.11507207155227661,-0.9181020259857178,0.21082516014575958,1.8071213960647583,-0.101308673620224,-2.324276924133301,-0.8362125158309937,2.8274788856506348,-1.2562121152877808,-1.612917184829712,0.29909491539001465,0.35746440291404724,-0.8262419104576111,1.0773162841796875,0.17893444001674652,-1.3540438413619995,-0.33003613352775574,-2.20725417137146,-0.15194711089134216,-0.10596144199371338,0.9758137464523315,-0.2008875161409378,0.18444733321666718,0.17581714689731598,-1.1359659433364868,1.1185933351516724,1.7566450834274292,0.19510476291179657,-0.4129664897918701,0.21389606595039368,0.2064651995897293,-1.7961313724517822,-1.3699336051940918,-0.6933703422546387,0.28191331028938293,-0.02121249958872795,-0.23490719497203827,0.30084607005119324,0.5521351099014282,-1.8201268911361694,0.9035161137580872,-0.19793789088726044,-0.8045978546142578,1.2734891176223755,0.195420503616333,0.3474104106426239,2.1353330612182617,-0.09418516606092453,-0.3945069909095764,-0.4487040340900421,0.40545982122421265,0.7027626633644104,0.01715131849050522,-0.35385382175445557,0.6302648782730103,-0.7806503772735596,0.831731379032135,1.8628534078598022,0.832203209400177,0.03834221884608269,0.0926053524017334,-0.3968563377857208,-0.6416052579879761,1.0088194608688354,1.8760758638381958,-8.949368476867676,0.5031846761703491,0.6414737701416016,-0.6534965634346008,-0.9199628233909607,-0.029175087809562683,0.9397960305213928,-1.1524782180786133,-0.9981231689453125,3.4107422828674316,1.1974306106567383,-0.041534777730703354,-0.10866447538137436,-0.717340886592865,0.36281344294548035,1.0480982065200806,-1.5038583278656006,-0.9181090593338013,0.4998362958431244,0.333755224943161,-0.7272608876228333,-0.8895850777626038,-0.06808071583509445,-0.6548995971679688,-1.4871495962142944,-0.5371261835098267,-1.9484615325927734,3.097158670425415,2.026489734649658,1.5847117900848389,-0.5198217034339905,0.7233495712280273,3.0349390506744385,-0.4580458998680115,-0.16269636154174805,1.0513328313827515,-0.592156708240509,-0.05298909172415733,0.6080169677734375,-0.5745897889137268,0.1604059487581253,-0.44989529252052307,-0.839118480682373,0.8638426661491394,0.8463036417961121,1.624826431274414,-1.1638646125793457,-0.0029547836165875196,0.42535731196403503,0.3067769706249237,0.16586528718471527,1.5512956380844116,0.7947095632553101,0.6080413460731506,-0.7525099515914917,-0.8570213913917542,-1.2021796703338623,-0.3166184723377228,-1.349274754524231,1.7863764762878418,0.3627417981624603,0.20563898980617523,-0.4606700837612152,0.7924963235855103,1.7401901483535767,0.6113206148147583,2.0847725868225098,-1.7825077772140503,-0.422975093126297,-0.004531695041805506,2.577338457107544,-0.614427924156189,0.4504110515117645,-1.3683102130889893,0.6162466406822205,-1.7051739692687988,1.5937389135360718,1.7325252294540405,0.7879259586334229,-0.44993168115615845,0.9205925464630127,-0.9060207009315491,-0.12975212931632996,-0.4365977346897125,-0.8171923756599426,-2.0588059425354004,-0.6748114228248596,0.18095454573631287,0.39266979694366455,0.523392379283905,1.373639464378357,-1.4747767448425293,0.30770695209503174,-0.6627662777900696,0.9079089760780334,0.6174818873405457,-1.5106958150863647,0.6117861866950989,-3.0644242763519287,2.366056203842163,0.6335030198097229,1.0025659799575806,0.2563609182834625,1.0058679580688477,0.5388148427009583,0.8761941194534302,-0.027441080659627914,-0.9116984009742737,-0.7897000312805176,1.7775436639785767,-2.041658401489258,0.8131729364395142,-1.0562258958816528,-1.7436473369598389,-0.9614993929862976,-2.4152731895446777,-1.7214937210083008,0.1487284004688263,0.24784088134765625,-0.14352644979953766,1.530250072479248,0.5951820611953735,0.20611655712127686,0.7239394783973694,0.6520217657089233,-0.6399421691894531,0.5908203125,0.07803957909345627,-0.18269535899162292,-0.9937022924423218,-0.77977454662323,1.4323952198028564,0.8400874733924866,-0.852756679058075,-0.2018013596534729,0.6135575175285339,0.034458279609680176,1.0144681930541992,-0.7511371374130249,2.2071783542633057,1.2976030111312866,-0.7936547994613647,1.222113847732544,1.0068825483322144,0.03303360193967819,1.058332920074463,-0.851527214050293,-0.1586305946111679,-0.2003621906042099,-0.22467529773712158,-1.7008010149002075,0.3279584050178528,1.0178388357162476,-0.20944525301456451,-1.862892508506775,-0.6690083146095276,-0.5341095924377441,-1.4596138000488281,0.3025243878364563,0.7319607138633728,2.8317363262176514,3.245818853378296,2.1091978549957275,0.04960455745458603,1.3499468564987183,1.4332877397537231,-0.5282966494560242,-0.35602834820747375,0.04304422810673714,-0.07281988859176636,0.7220138907432556,0.3438747823238373,2.2951698303222656,1.6599432229995728,0.6602917909622192,1.393643856048584,1.1108596324920654,-0.47068706154823303,0.5002430081367493,0.8390111327171326,-0.46291226148605347,0.6217096447944641,0.3763500452041626,-0.3462708592414856,1.1744709014892578,-1.8116114139556885,0.33887308835983276,0.14286744594573975,0.4423253834247589,2.7540369033813477,2.4683585166931152,1.9425266981124878,-1.3899595737457275,0.006880808621644974,1.194249153137207,-0.3378417491912842,-0.9804418087005615,0.5063457489013672,0.6297093629837036,-0.35141217708587646,0.2059141844511032,0.5638249516487122,1.7170902490615845,-0.2453722357749939,-0.057230908423662186,0.9995738863945007,-2.6726083755493164,-0.16992148756980896,1.9104019403457642,1.4361361265182495,-2.707350254058838,-0.4945096969604492,1.9422483444213867,-0.6590908765792847,0.7392531633377075,-2.0990097522735596,0.07232765853404999,1.0226327180862427,1.6140445470809937,-0.20957709848880768,-0.6150162220001221,-0.5509488582611084,-0.767189085483551,-0.3503626585006714,2.2825639247894287,0.9842509031295776,-1.0942336320877075,0.47752878069877625,-3.474954843521118,-0.18037892878055573,0.06697426736354828,-1.3048537969589233,0.5082981586456299,-1.7253639698028564,1.4372456073760986,0.5339020490646362,0.7988658547401428,-0.8056907057762146,0.4377157986164093,2.218787431716919,-1.5755138397216797,-0.7720381021499634,-1.2138371467590332,-1.3451076745986938,1.0630342960357666,0.473603218793869,-0.21984469890594482,-0.26615390181541443,0.46989092230796814,-2.3199167251586914,0.06440053135156631,0.26689186692237854,1.8300862312316895,-1.6880125999450684,1.3537061214447021,0.3103812336921692,0.37515705823898315,-3.592496156692505,0.871163010597229,2.517085552215576,0.7685185670852661,0.7562406659126282,0.043909285217523575,-2.727987051010132,-1.5618082284927368,-0.05517341196537018,-0.7062270045280457,-0.1643052101135254,0.09265648573637009,1.7855372428894043,-0.1178811714053154],[-0.20433223247528076,-1.6783385276794434,0.9252661466598511,2.0758447647094727,-0.07109203189611435,-0.18004082143306732,0.7989913821220398,-0.2983997166156769,-0.38747748732566833,-0.8522803783416748,-1.453060507774353,1.7692610025405884,-0.6064544320106506,0.31748345494270325,-0.4543328285217285,-0.22675184905529022,-1.3857476711273193,0.589260458946228,0.2753255069255829,-2.0026803016662598,0.08123133331537247,-0.5871105194091797,-0.13212165236473083,0.10576153546571732,0.09379924088716507,-2.1373279094696045,0.17816929519176483,-0.22665566205978394,0.017189228907227516,-5.143427848815918,0.01392669603228569,-0.7109980583190918,-1.237610936164856,0.4448659121990204,-1.0729559659957886,-5.306884288787842,0.5477319359779358,1.809117078781128,0.3475610017776489,-1.0729893445968628,0.09014754742383957,1.5906052589416504,-1.0154414176940918,0.5790693759918213,-0.31274014711380005,0.8590385317802429,0.2830972969532013,1.2141393423080444,-1.151501178741455,2.1210732460021973,-0.1391182690858841,0.8669507503509521,2.212071418762207,0.8674596548080444,0.05427573621273041,1.1219196319580078,-0.6358404159545898,-0.5296401977539062,0.0012907353229820728,1.6400333642959595,-0.6911768913269043,0.2026916742324829,-0.9082508087158203,0.3168582320213318,0.33589285612106323,1.0148670673370361,-0.31823980808258057,-0.2082129269838333,-0.381991446018219,-1.1881989240646362,-2.4908640384674072,-0.355442613363266,0.17276297509670258,0.6441594362258911,-0.6703215837478638,0.18866337835788727,0.939885675907135,-0.01211884617805481,-1.8504027128219604,0.21178963780403137,-0.6326240301132202,0.31865406036376953,2.048032760620117,-0.11608626693487167,-0.2569786608219147,0.4368757903575897,-0.0260474793612957,0.7990599274635315,0.5727532505989075,0.0895412489771843,-1.571159839630127,0.26815176010131836,1.0307565927505493,-0.520641565322876,0.15403594076633453,1.6378380060195923,1.283527135848999,-1.6588976383209229,-0.48400479555130005,-1.1580859422683716,-0.7509525418281555,1.315380573272705,-0.07379183173179626,0.52519291639328,0.4335678517818451,2.7950351238250732,1.3771075010299683,0.7259077429771423,-0.07334304600954056,1.3830987215042114,-1.2857534885406494,0.12470948696136475,-0.9602134823799133,-1.2055975198745728,-0.5638176202774048,0.09352762252092361,1.6657129526138306,0.4155099391937256,1.2693710327148438,-0.4186498522758484,1.3996397256851196,2.93269944190979,-1.3664554357528687,1.086867332458496,-0.1967536062002182,-0.8543054461479187,-1.4616116285324097,0.719154417514801,-0.6699909567832947,0.6007542014122009,0.6462841033935547,0.5208675265312195,0.6895001530647278,-0.6039479374885559,0.8986804485321045,0.09296539425849915,-0.2314574122428894,-0.6801103353500366,0.8140191435813904,3.4217443466186523,-0.23492778837680817,0.045127611607313156,-0.8500064611434937,-1.6458325386047363,-0.24958015978336334,0.11323165893554688,0.6190603375434875,0.17906589806079865,0.7227169871330261,0.5980530381202698,-0.7673828601837158,0.8241417407989502,0.709071934223175,1.3429936170578003,0.5072498917579651,-0.06259932368993759,-1.9569644927978516,0.7814217209815979,2.0377862453460693,0.7721689939498901,-0.28181275725364685,0.8799373507499695,0.8192418217658997,0.8107286691665649,0.40820592641830444,0.3966280221939087,-0.4259047210216522,-1.5376569032669067,1.8848042488098145,0.18811281025409698,0.9903721213340759,1.114202857017517,-4.696131706237793,-0.3267369866371155,0.5743921399116516,-0.6137317419052124,0.9934948086738586,-0.20596593618392944,-0.6236596703529358,-1.0443239212036133,0.6402934193611145,0.6813211441040039,0.03963381424546242,-0.8187324404716492,0.9668425917625427,0.9278733730316162,0.40730586647987366,1.4157085418701172,-0.429911345243454,0.29686710238456726,-0.389783650636673,-0.5340803861618042,-0.2599109709262848,-0.13249175250530243,0.3685387372970581,-1.270527958869934,0.2765282690525055,-2.168261766433716,0.3536916673183441,-0.9826862812042236,1.3856889009475708,0.1504652500152588,0.6382452845573425,-0.4599418640136719,0.10876734554767609,-1.0954846143722534,0.705790638923645,0.3312164545059204,0.8924857378005981,0.3045678734779358,-0.0713920146226883,0.9126845002174377,1.3598592281341553,-0.5066872239112854,-1.5612739324569702,0.402454137802124,-0.8306199908256531,-0.6184536218643188,0.19692130386829376,0.7297500371932983,0.021695606410503387,-0.3567628562450409,0.3224705755710602,0.9489116072654724,0.20368410646915436,0.5595125555992126,0.1147182360291481,-0.24992671608924866,-1.3786852359771729,0.7037904262542725,0.11532415449619293,1.428863525390625,0.5910244584083557,0.10874250531196594,2.828360080718994,0.1031283438205719,-0.7883068323135376,1.3114484548568726,-0.6387841701507568,-0.22563660144805908,-0.1337548941373825,1.2929610013961792,1.8523943424224854,1.1022570133209229,0.7133726477622986,0.5316223502159119,1.02217698097229,0.9695987105369568,1.1405972242355347,1.655632734298706,-1.9676275253295898,-0.5847054123878479,1.378090500831604,-0.37466004490852356,0.43610891699790955,0.6157627701759338,0.09732427448034286,1.1812793016433716,0.7006984949111938,1.2035677433013916,-0.02049262449145317,0.02560584992170334,1.4165313243865967,-0.26903268694877625,-0.7465556263923645,0.23137865960597992,-1.0205466747283936,0.08658113330602646,-0.6422387361526489,0.8964866399765015,-0.9495004415512085,0.029113179072737694,0.46966245770454407,-1.2270697355270386,-0.38857710361480713,-0.9073766469955444,-0.40797388553619385,1.03908371925354,-0.21913067996501923,-0.8373785614967346,0.6290602087974548,0.6674630641937256,1.0973516702651978,-1.2755012512207031,0.33192408084869385,0.36322349309921265,-0.4461832046508789,0.24300536513328552,-0.4090024530887604,0.17215196788311005,-0.10460265725851059,2.1520371437072754,-1.5440765619277954,-0.620064377784729,-0.20786426961421967,0.08452221006155014,-0.5669017434120178,1.8541333675384521,0.09979086369276047,1.822511076927185,-1.5840723514556885,-1.0293629169464111,0.20045913755893707,0.04223082214593887,0.973747730255127,1.4825880527496338,0.25607869029045105,-0.003708189819008112,0.2418084740638733,0.5810227394104004,1.4370006322860718,-1.9004782438278198,-0.30331525206565857,-0.4869345724582672,0.6463854908943176,1.5399205684661865,2.1084342002868652,-0.15966446697711945,0.90147864818573,1.0570542812347412,0.7102826237678528,-0.4245888888835907,-0.8040794134140015,-0.3049716651439667,1.7090747356414795,0.5423783659934998,0.9449290633201599,-0.9840180277824402,1.0966540575027466,1.3814021348953247,-0.36545291543006897,-1.1927322149276733,0.3911566436290741,0.24082466959953308,0.3502110540866852,-1.6952235698699951,-0.11980977654457092,0.8205850124359131,-0.5825956463813782,0.1240718886256218,0.34197065234184265,-0.08872298896312714,0.5227459073066711,0.04102594405412674,-0.02522559091448784,1.3831664323806763,1.6315711736679077,-0.848112940788269,-1.2368799448013306,2.0142765045166016,-1.2400131225585938,-2.4577391147613525,0.5219665765762329,0.7425310015678406,1.8834662437438965,0.07836458086967468,-2.1747188568115234,0.4280944764614105,-0.32567694783210754,0.7850102186203003,-0.8504244089126587,0.5850164890289307,0.3325744867324829,0.3291833996772766,0.38428476452827454,1.4941166639328003,-0.8157949447631836,-0.6996042728424072,0.7621159553527832,0.5635060667991638,0.3018024265766144,-1.2326093912124634,-0.6563641428947449,0.5729061961174011,-0.16528691351413727,-0.15367518365383148,-2.2911248207092285,-0.5715063810348511,1.138122320175171,0.5673955082893372,-0.6158959865570068,0.13727489113807678,1.0856633186340332,-0.40604734420776367,-0.40883252024650574,-0.7982858419418335,0.8836941123008728,-0.05574151128530502,-1.4019736051559448,0.27983129024505615,1.307541012763977,1.4030965566635132,-0.30342769622802734,-1.5606718063354492,0.5033881664276123,-1.5330597162246704,0.8470706939697266,-0.5029423236846924,-0.09117391705513,-0.1431429088115692,0.19639188051223755,-2.061403751373291,2.0248215198516846,1.3102362155914307,-0.6800996661186218,2.1800763607025146,0.8046916127204895,1.1798114776611328,0.05447517707943916,0.16950704157352448,0.27377021312713623,0.1756715029478073,-0.7480525374412537,2.5695559978485107,2.4578514099121094,0.18987061083316803,-0.28595083951950073,1.0175330638885498,-0.07092451304197311,-0.4727090895175934,-0.04646722599864006,-0.56316739320755,-0.09819412976503372,-0.5769237279891968,0.5321735143661499,0.014753560535609722,1.3258066177368164,-0.10864468663930893,-0.12121450901031494,-0.7448942065238953,-0.20130768418312073,0.5883305072784424,0.44711267948150635,1.9925048351287842,0.7149675488471985,0.4570489227771759,-0.8169843554496765,-2.5227882862091064,-1.3945966958999634,1.5115633010864258,-2.355586290359497,-0.6060693860054016,0.7819063067436218,-0.08751179277896881,-0.5827648043632507,0.04735049977898598,0.42518991231918335,0.5000985264778137,1.4589725732803345,0.3766089975833893,-0.15535344183444977,-0.2884141802787781,-1.0559802055358887,0.15788589417934418,2.2734014987945557,-0.3347022831439972,-0.24976322054862976,-0.07985623180866241,-0.6467388272285461,0.14311999082565308,-1.0962095260620117,-0.5211118459701538,0.7022464871406555,-0.25784364342689514,-0.8413400053977966,1.6383849382400513,-0.44988709688186646,-0.1610960066318512,0.06976880878210068,-0.35442987084388733,0.564738392829895,-0.6027423739433289,-0.41867032647132874,0.40681004524230957,0.19483934342861176,0.4448431730270386,1.3419386148452759,0.7631343007087708,0.3142454922199249,1.169077754020691,-0.14908526837825775,0.7263576984405518,1.0500584840774536,0.7567309141159058,-1.7382173538208008,1.2241350412368774,0.8624055981636047,0.13632851839065552,1.960607886314392,1.764008641242981,1.0845052003860474,-0.9949843883514404,-0.09382656961679459,-0.4823214113712311,1.0377682447433472,1.0722686052322388,1.2134419679641724,-0.14716428518295288,1.178385853767395,1.2377965450286865,-1.467957854270935,0.12056456506252289,-0.9824626445770264,1.1785097122192383,0.934810221195221,0.8880816102027893,1.4952701330184937,1.9626857042312622,0.4719543159008026,-0.5729284286499023,-0.18442697823047638,-0.01622193120419979,0.6610023975372314,-0.1349942535161972,-0.42294394969940186,-0.06693445146083832,1.0994306802749634,0.3713456392288208,-1.415420651435852,-1.94044029712677,-1.0481961965560913,-1.2440564632415771,0.6386559009552002,-0.5821488499641418,2.9515442848205566,0.2206413298845291,0.968043863773346,1.2731337547302246,1.263611078262329,1.711346983909607,0.8843600749969482,-0.43532276153564453,0.7519408464431763,-1.0525766611099243,-0.9387974739074707,-3.6521527767181396,-0.6510240435600281,0.09562290459871292,-0.4246319532394409,0.17015312612056732,-2.17095947265625,1.2046655416488647,0.36974895000457764,0.13803188502788544,-1.0111888647079468,0.48319339752197266,0.5683578848838806,0.627698540687561,-0.4843525290489197,0.7016224265098572,-0.932537853717804,-0.43700236082077026,-1.0778977870941162,-0.7479422092437744,-0.2279846966266632,0.10740147531032562,-1.5627046823501587,0.6993049383163452,0.5898451805114746,0.008860604837536812,0.8175990581512451,0.1408449411392212,0.5043925046920776,1.104628562927246,-1.8942773342132568,-0.5485139489173889,1.296970248222351,-1.356145977973938,0.05967385321855545,0.5626437067985535,0.06948648393154144,-0.18563929200172424,-0.9241007566452026,0.7086806893348694,-0.19252660870552063,-0.5962610244750977,0.0866297259926796,-0.1354997754096985,-1.2565160989761353,0.3374553918838501,-0.4793420135974884,0.2524104416370392,0.7209308743476868,0.020587071776390076,-0.44862765073776245,-0.8008005023002625,-1.2175588607788086,0.49937620759010315,-0.9225984811782837,0.49989795684814453,0.1957952082157135,0.9606350064277649,0.4247172772884369,0.17648036777973175,-0.2138088047504425,1.137308120727539,0.21180252730846405,-0.6415600776672363,-0.20980392396450043,0.712277889251709,0.10272216796875,0.1543484777212143,-0.690239429473877,-0.9730573296546936,0.3650040030479431,-1.0853160619735718,-0.21427099406719208,-0.41048941016197205,-0.18330419063568115,-0.07345380634069443,0.1656496524810791,0.026105478405952454,0.2479402720928192,-0.7193567156791687,0.614662230014801,-0.4211236536502838,0.7788238525390625,2.16850209236145,-0.5861462354660034,0.43789142370224,0.20521101355552673,-0.0814724788069725,-0.5585458278656006,-0.47392526268959045,-0.4584622085094452,-0.41062211990356445,0.4824977517127991,-0.618044912815094,-0.5296798348426819,-0.34644344449043274,-1.0767115354537964,-0.12966713309288025,-0.25572124123573303,1.9163271188735962,1.0332720279693604,-0.7038701176643372,0.14588068425655365,0.05040956288576126,1.6619653701782227,0.7207757234573364,-0.2210298329591751,0.5461302995681763,0.43636786937713623,0.27487844228744507,-0.5650752186775208,0.36451905965805054,0.28499549627304077,0.40455639362335205,-0.4242338240146637,1.4242891073226929,0.3550650477409363,-0.8514772653579712,1.98545503616333,0.047704726457595825,-1.4427565336227417,-0.8753654956817627,0.8384696245193481,1.2612712383270264,2.206540822982788,-0.05935613065958023,-0.9412180185317993,1.2249056100845337,1.4724160432815552,-0.5570127367973328,-0.17048604786396027,0.7383578419685364,-0.19001981616020203,1.133721947669983,0.6827524304389954,0.5209375619888306,0.020553559064865112,0.7571407556533813,-0.8038185238838196,0.16575302183628082,-0.1513463258743286,0.6759191155433655,-0.2755008041858673,0.8690430521965027,1.3998336791992188,1.9679558277130127,0.3475399315357208,0.3499829173088074,0.8686423897743225,1.2958229780197144,-0.40440601110458374,0.9309317469596863,2.541874885559082,0.49512770771980286,0.7752246260643005,-1.1398719549179077,0.4133967459201813,0.13766047358512878,0.703260064125061,-0.7570361495018005,-0.6767508387565613,-1.675130009651184,0.934540867805481,0.6914578676223755,1.645945429801941,2.8109376430511475,-0.33736327290534973,-0.03239883854985237,-0.3314172923564911,-2.8594017028808594,-0.7300012111663818,0.25505030155181885,1.2144874334335327,-0.48115074634552,0.040733639150857925,-0.5208387970924377,1.2413668632507324,0.3906145393848419,-0.930443525314331,-0.5897824168205261,1.7017443180084229,1.28294038772583,-0.3194679617881775,0.8642467260360718,0.06485991925001144,-1.2201545238494873,-0.5669395327568054,-1.7913336753845215,0.03555087000131607,-0.8126198053359985,0.26194071769714355,0.4406481087207794,0.6573454737663269,-0.4547797739505768,-0.4504009187221527,2.1576194763183594,-0.4412635862827301,-0.10828053206205368,0.6045235395431519,-0.46200624108314514,-0.4521058201789856,0.6319668889045715,-5.464902400970459,-0.5053491592407227,-1.4480714797973633,-1.2527449131011963,-0.9145534038543701,1.1291077136993408,-0.20863661170005798,-0.5796937346458435,-0.06030793860554695,0.5819199681282043,0.4766663908958435,1.2271885871887207,1.0405277013778687,0.9320999979972839,-1.3467774391174316,-0.30380281805992126,0.3252887725830078,1.1977030038833618,-0.9364627003669739,-1.0719661712646484,1.4575961828231812,-0.7681967616081238,1.5218548774719238,2.2099080085754395,-2.3389856815338135,0.054066576063632965,1.2264158725738525,0.5669309496879578,-0.08467265218496323,0.47690558433532715,-1.1654434204101562,0.12179253250360489]]]]", + "status": 200, + "statusText": "OK", + "headers": { + "access-control-allow-credentials": "true", + "connection": "keep-alive", + "content-type": "application/json", + "vary": "Origin, Access-Control-Request-Method, Access-Control-Request-Headers" + } + } + }, + "c9f0ebc2c17239e04cdc21cc0aced65924f490001d909dfc5cedc18ba82ea529": { + "url": "https://api-inference.huggingface.co/models/distilbert-base-uncased", + "init": { + "headers": { + "Content-Type": "application/json" + }, + "method": "POST", + "body": "{\"inputs\":\"[MASK] world!\",\"options\":{}}" + }, + "response": { + "body": "[{\"score\":0.279823899269104,\"token\":7592,\"token_str\":\"hello\",\"sequence\":\"hello world!\"},{\"score\":0.17721028625965118,\"token\":6919,\"token_str\":\"wonderful\",\"sequence\":\"wonderful world!\"},{\"score\":0.01261180266737938,\"token\":2204,\"token_str\":\"good\",\"sequence\":\"good world!\"},{\"score\":0.012600388377904892,\"token\":3376,\"token_str\":\"beautiful\",\"sequence\":\"beautiful world!\"},{\"score\":0.011976493522524834,\"token\":2023,\"token_str\":\"this\",\"sequence\":\"this world!\"}]", + "status": 200, + "statusText": "OK", + "headers": { + "access-control-allow-credentials": "true", + "connection": "keep-alive", + "content-type": "application/json", + "vary": "Origin, Access-Control-Request-Method, Access-Control-Request-Headers" + } + } + }, + "f7b0286fa03058c95425a91aa758f949ce7772fbe7bd52f2b777e636251a2b8e": { + "url": "https://api-inference.huggingface.co/models/t5-base", + "init": { + "headers": { + "Content-Type": "application/json" + }, + "method": "POST", + "body": "{\"inputs\":[\"My name is Wolfgang and I live in Berlin\",\"I work as programmer\"],\"options\":{}}" + }, + "response": { + "body": "[{\"translation_text\":\"Mein Name ist Wolfgang und ich lebe in Berlin\"},{\"translation_text\":\"Ich arbeite als Programmierer\"}]", + "status": 200, + "statusText": "OK", + "headers": { + "access-control-allow-credentials": "true", + "connection": "keep-alive", + "content-type": "application/json", + "vary": "Origin, Access-Control-Request-Method, Access-Control-Request-Headers" + } + } + } +} \ No newline at end of file diff --git a/packages/inference/test/test-files.ts b/packages/inference/test/test-files.ts new file mode 100644 index 0000000000000000000000000000000000000000..836db00b8e327b855c036e069d411603ffe7cd58 --- /dev/null +++ b/packages/inference/test/test-files.ts @@ -0,0 +1,9 @@ +// https://vitejs.dev/config/shared-options.html#define +const files = __TEST_FILES__; + +export const readTestFile = (filename: string): Uint8Array => { + if (!(filename in files)) { + throw new Error(`File is not pre-loaded for unit tests: ${filename}`); + } + return Uint8Array.from(atob(files[filename]), (c) => c.charCodeAt(0)); +}; diff --git a/packages/inference/test/vcr.ts b/packages/inference/test/vcr.ts new file mode 100644 index 0000000000000000000000000000000000000000..6f840f44fa01f19c3abfaac2b58e9d5e79c083a7 --- /dev/null +++ b/packages/inference/test/vcr.ts @@ -0,0 +1,207 @@ +import { omit } from "../src/utils/omit"; +import { isBackend, isFrontend } from "../../shared"; +import { HF_HUB_URL } from "../src/lib/getDefaultTask"; + +const TAPES_FILE = "./tapes.json"; +const BASE64_PREFIX = "data:application/octet-stream;base64,"; + +enum MODE { + RECORD = "record", + PLAYBACK = "playback", + CACHE = "cache", + DISABLED = "disabled", +} + +let VCR_MODE: MODE; + +/** + * Allows to record tapes with a token to avoid rate limit. + * + * If VCR_MODE is not set and a token is present then disable it. + */ +const env = import.meta.env; +if (env.VCR_MODE) { + if ((env.VCR_MODE === MODE.RECORD || env.VCR_MODE === MODE.CACHE) && isFrontend) { + throw new Error("VCR_MODE=record is not supported in the browser"); + } + + VCR_MODE = env.VCR_MODE as MODE; +} else { + VCR_MODE = env.HF_TOKEN ? MODE.DISABLED : MODE.PLAYBACK; +} + +const originalFetch = globalThis.fetch; + +globalThis.fetch = (...args) => vcr(originalFetch, args[0], args[1]); + +/** + * Represents a recorded HTTP request + */ +interface Tape { + url: string; + init?: RequestInit; + + response: { + /** + * Base64 string of the response body + */ + body: string; + + status: number; + statusText: string; + headers?: HeadersInit; + }; +} + +async function tapeToResponse(tape: Tape) { + return new Response( + tape.response.body?.startsWith(BASE64_PREFIX) ? (await originalFetch(tape.response.body)).body : tape.response.body, + { + status: tape.response.status, + statusText: tape.response.statusText, + headers: tape.response.headers, + } + ); +} + +/** + * Headers are volontarily skipped for now. They are not useful to distinguish requests + * but bring more complexity because some of them are not deterministics like "date" + * and it's complex to handle all the formats they can be given in. + */ +async function hashRequest(url: string, init: RequestInit): Promise { + const hashObject = { + url, + method: init.method, + body: init.body, + }; + + const inputBuffer = new TextEncoder().encode(JSON.stringify(hashObject)); + + let hashed: ArrayBuffer; + if (isBackend) { + const crypto = await import("node:crypto"); + hashed = await crypto.subtle.digest("SHA-256", inputBuffer); + } else { + hashed = await crypto.subtle.digest("SHA-256", inputBuffer); + } + + return Array.from(new Uint8Array(hashed)) + .map((b) => b.toString(16).padStart(2, "0")) + .join(""); +} + +/** + * This function behavior change according to the value of the VCR_MODE environment variable: + * - record: requests will be made to the external API and responses will be saved in files + * - playback: answers will be read from the filesystem, if they don't have been recorded before then an error will be thrown + * - cache: same as playback but if the response is not found in the filesystem then it will be recorded + */ +async function vcr( + originalFetch: typeof global.fetch, + input: RequestInfo | URL, + init: RequestInit = {} +): Promise { + let url: string; + + if (typeof input === "string") { + url = input; + } else if (input instanceof URL) { + url = input.href; + } else { + url = input.url; + } + + const hash = await hashRequest(url, init); + + const { default: tapes } = await import(TAPES_FILE); + + if (VCR_MODE === MODE.PLAYBACK && !url.startsWith(HF_HUB_URL)) { + if (!tapes[hash]) { + throw new Error(`Tape not found: ${hash} (${url})`); + } + + const response = tapeToResponse(tapes[hash]); + + return response; + } + + if (VCR_MODE === "cache" && tapes[hash]) { + const response = tapeToResponse(tapes[hash]); + + return response; + } + + const response = await originalFetch(input, init); + + if (url.startsWith(HF_HUB_URL)) { + return response; + } + + if (VCR_MODE === MODE.RECORD || VCR_MODE === MODE.CACHE) { + const isText = + response.headers.get("Content-Type")?.includes("json") || response.headers.get("Content-Type")?.includes("text"); + const isJson = response.headers.get("Content-Type")?.includes("json"); + const arrayBuffer = await response.arrayBuffer(); + + let body = ""; + if (isText || isJson) { + body = new TextDecoder().decode(arrayBuffer); + if (isJson) { + // check for base64 strings and truncate them + body = JSON.stringify( + JSON.parse(body, (key: unknown, value: unknown): unknown => { + if ( + typeof value === "string" && + value.length > 1_000 && + // base64 heuristic + value.length % 4 === 0 && + value.match(/^[a-zA-Z0-9+/]+={0,2}$/) + ) { + return value.slice(0, 1_000); + } else { + return value; + } + }) + ); + } + } else { + // // Alternative to also save binary data: + // arrayBuffer.byteLength > 30_000 + // ? "" + // : isText + // ? new TextDecoder().decode(arrayBuffer) + // : BASE64_PREFIX + base64FromBytes(new Uint8Array(arrayBuffer)), + body = ""; + } + + const tape: Tape = { + url, + init: { + headers: init.headers && omit(init.headers as Record, "Authorization"), + method: init.method, + body: typeof init.body === "string" && init.body.length < 1_000 ? init.body : undefined, + }, + response: { + body, + status: response.status, + statusText: response.statusText, + headers: Object.fromEntries( + // Remove varying headers as much as possible + [...response.headers.entries()].filter( + ([key]) => key !== "date" && key !== "content-length" && !key.startsWith("x-") && key !== "via" + ) + ), + }, + }; + tapes[hash] = tape; + + const { writeFileSync } = await import("node:fs"); + writeFileSync(`./test/${TAPES_FILE}`, JSON.stringify(tapes, null, 2)); + + // Return a new response with an unconsummed body + return tapeToResponse(tape); + } + + return response; +} diff --git a/packages/inference/test/vitest.d.ts b/packages/inference/test/vitest.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..63a344511305b8eaae731426d9f3ec394615eb05 --- /dev/null +++ b/packages/inference/test/vitest.d.ts @@ -0,0 +1,23 @@ +/// +// https://vitest.dev/guide/extending-matchers +import "vitest"; + +interface MatcherResult { + pass: boolean; + message: () => string; + // If you pass these, they will automatically appear inside a diff when + // the matcher does not pass, so you don't need to print the diff yourself + actual?: unknown; + expected?: unknown; +} + +interface CustomMatchers { + closeTo(expected: number, precision: number): MatcherResult; +} + +declare module "vitest" { + // eslint-disable-next-line @typescript-eslint/no-empty-interface + interface Assertion extends CustomMatchers {} + // eslint-disable-next-line @typescript-eslint/no-empty-interface + interface AsymmetricMatchersContaining extends CustomMatchers {} +} diff --git a/packages/inference/tsconfig.json b/packages/inference/tsconfig.json new file mode 100644 index 0000000000000000000000000000000000000000..8b8068306096113ca905a5db5c107744f6995daa --- /dev/null +++ b/packages/inference/tsconfig.json @@ -0,0 +1,16 @@ +{ + "compilerOptions": { + "esModuleInterop": true, + "noEmit": true, + "module": "ESNext", + "target": "ESNext", + "moduleResolution": "Node", + "noImplicitAny": true, + "strict": true, + "strictNullChecks": true, + "skipLibCheck": true, + "noImplicitOverride": true + }, + "include": ["src", "test", "index.ts", "../shared/src"], + "exclude": ["dist"] +} diff --git a/packages/inference/vitest.config.mts b/packages/inference/vitest.config.mts new file mode 100644 index 0000000000000000000000000000000000000000..47a23ab66eccf8a300a78961f2f78ac9254f2aca --- /dev/null +++ b/packages/inference/vitest.config.mts @@ -0,0 +1,27 @@ +import { defineConfig } from "vitest/config"; +import { readFileSync } from "node:fs"; +import { join } from "node:path"; + +// make local test files available in browser by preloading their contents +const testFilesToPreload = [ + "cheetah.png", + "cats.png", + "sample1.flac", + "invoice.png", + "stormtrooper_depth.png", + "bird_canny.png", +]; +const testFilesContents: Record = {}; +for (const filename of testFilesToPreload) { + testFilesContents[filename] = readFileSync(join(__dirname, "test", filename)).toString("base64"); +} + +export default defineConfig({ + test: { + setupFiles: ["./test/expect-closeto.ts"], + }, + envPrefix: ["HF_", "VCR_"], + define: { + __TEST_FILES__: JSON.stringify(testFilesContents), + }, +}); diff --git a/packages/jinja/.eslintignore b/packages/jinja/.eslintignore new file mode 100644 index 0000000000000000000000000000000000000000..1521c8b7652b1eec8ed4fe50877aae880c758ee3 --- /dev/null +++ b/packages/jinja/.eslintignore @@ -0,0 +1 @@ +dist diff --git a/packages/jinja/.gitignore b/packages/jinja/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..b4f0039427802c7eed20e15ff3048d7ff01e1d0e --- /dev/null +++ b/packages/jinja/.gitignore @@ -0,0 +1,2 @@ +types +dist diff --git a/packages/jinja/README.md b/packages/jinja/README.md new file mode 100644 index 0000000000000000000000000000000000000000..3d63a7ecd8af3869ee6a28408da5550c96212da4 --- /dev/null +++ b/packages/jinja/README.md @@ -0,0 +1,79 @@ +# Jinja + +A minimalistic JavaScript implementation of the Jinja templating engine, specifically designed for parsing and rendering ML chat templates. + +## Usage + +### Load template from a model on the Hugging Face Hub + +First, install the jinja and hub packages: + +```sh +npm i @huggingface/jinja +npm i @huggingface/hub +``` + +You can then load a tokenizer from the Hugging Face Hub and render a list of chat messages, as follows: + +```js +import { Template } from "@huggingface/jinja"; +import { downloadFile } from "@huggingface/hub"; + +const config = await ( + await downloadFile({ + repo: "mistralai/Mistral-7B-Instruct-v0.1", + path: "tokenizer_config.json", + }) +).json(); + +const chat = [ + { role: "user", content: "Hello, how are you?" }, + { role: "assistant", content: "I'm doing great. How can I help you today?" }, + { role: "user", content: "I'd like to show off how chat templating works!" }, +]; + +const template = new Template(config.chat_template); +const result = template.render({ + messages: chat, + bos_token: config.bos_token, + eos_token: config.eos_token, +}); +// "[INST] Hello, how are you? [/INST]I'm doing great. How can I help you today? [INST] I'd like to show off how chat templating works! [/INST]" +``` + +### Transformers.js + +First, install the `@huggingface/jinja` and `@xenova/transformers` packages: + +```sh +npm i @huggingface/jinja +npm i @xenova/transformers +``` + +You can then render a list of chat messages using a tokenizer's `apply_chat_template` method. + +```js +import { AutoTokenizer } from "@xenova/transformers"; + +// Load tokenizer from the Hugging Face Hub +const tokenizer = await AutoTokenizer.from_pretrained("mistralai/Mistral-7B-Instruct-v0.1"); + +// Define chat messages +const chat = [ + { role: "user", content: "Hello, how are you?" }, + { role: "assistant", content: "I'm doing great. How can I help you today?" }, + { role: "user", content: "I'd like to show off how chat templating works!" }, +]; + +const text = tokenizer.apply_chat_template(chat, { tokenize: false }); +// "[INST] Hello, how are you? [/INST]I'm doing great. How can I help you today? [INST] I'd like to show off how chat templating works! [/INST]" +``` + +Notice how the entire chat is condensed into a single string. If you would instead like to return the tokenized version (i.e., a list of token IDs), you can use the following: + +```js +const input_ids = tokenizer.apply_chat_template(chat, { tokenize: true, return_tensor: false }); +// [1, 733, 16289, 28793, 22557, 28725, 910, 460, 368, 28804, 733, 28748, 16289, 28793, 28737, 28742, 28719, 2548, 1598, 28723, 1602, 541, 315, 1316, 368, 3154, 28804, 2, 28705, 733, 16289, 28793, 315, 28742, 28715, 737, 298, 1347, 805, 910, 10706, 5752, 1077, 3791, 28808, 733, 28748, 16289, 28793] +``` + +For more information about chat templates, check out the transformers [documentation](https://huggingface.co/docs/transformers/main/en/chat_templating). diff --git a/packages/jinja/package.json b/packages/jinja/package.json new file mode 100644 index 0000000000000000000000000000000000000000..ce1c2207194d48a6231474222b9bcf7d69ff77fb --- /dev/null +++ b/packages/jinja/package.json @@ -0,0 +1,57 @@ +{ + "name": "@huggingface/jinja", + "packageManager": "pnpm@8.10.5", + "version": "0.1.3", + "description": "A minimalistic JavaScript implementation of the Jinja templating engine, specifically designed for parsing and rendering ML chat templates.", + "repository": "https://github.com/huggingface/huggingface.js.git", + "publishConfig": { + "access": "public" + }, + "type": "module", + "main": "./dist/index.cjs", + "module": "./dist/index.js", + "types": "./dist/index.d.ts", + "exports": { + ".": { + "types": "./dist/index.d.ts", + "require": "./dist/index.cjs", + "import": "./dist/index.js" + } + }, + "engines": { + "node": ">=18" + }, + "source": "src/index.ts", + "scripts": { + "lint": "eslint --quiet --fix --ext .cjs,.ts .", + "lint:check": "eslint --ext .cjs,.ts .", + "format": "prettier --write .", + "format:check": "prettier --check .", + "prepublishOnly": "pnpm run build", + "prepare": "pnpm run build", + "build": "tsup src/index.ts --format cjs,esm --clean --dts", + "test": "vitest run", + "test:browser": "vitest run --browser.name=chrome --browser.headless", + "check": "tsc" + }, + "files": [ + "src", + "dist", + "README.md", + "tsconfig.json" + ], + "keywords": [ + "huggingface", + "jinja", + "templates", + "hugging", + "face" + ], + "author": "Hugging Face", + "license": "MIT", + "devDependencies": { + "typescript": "^5.3.2", + "@huggingface/hub": "workspace:^", + "@xenova/transformers": "^2.9.0" + } +} diff --git a/packages/jinja/pnpm-lock.yaml b/packages/jinja/pnpm-lock.yaml new file mode 100644 index 0000000000000000000000000000000000000000..230bfbe1c1e6d55f3488bef3cf153dd71d64e9d2 --- /dev/null +++ b/packages/jinja/pnpm-lock.yaml @@ -0,0 +1,546 @@ +lockfileVersion: "6.0" + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +devDependencies: + "@huggingface/hub": + specifier: workspace:^ + version: link:../hub + "@xenova/transformers": + specifier: ^2.9.0 + version: 2.9.0 + typescript: + specifier: ^5.3.2 + version: 5.3.2 + +packages: + /@protobufjs/aspromise@1.1.2: + resolution: + { integrity: sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ== } + dev: true + + /@protobufjs/base64@1.1.2: + resolution: + { integrity: sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg== } + dev: true + + /@protobufjs/codegen@2.0.4: + resolution: + { integrity: sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg== } + dev: true + + /@protobufjs/eventemitter@1.1.0: + resolution: + { integrity: sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q== } + dev: true + + /@protobufjs/fetch@1.1.0: + resolution: + { integrity: sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ== } + dependencies: + "@protobufjs/aspromise": 1.1.2 + "@protobufjs/inquire": 1.1.0 + dev: true + + /@protobufjs/float@1.0.2: + resolution: + { integrity: sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ== } + dev: true + + /@protobufjs/inquire@1.1.0: + resolution: + { integrity: sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q== } + dev: true + + /@protobufjs/path@1.1.2: + resolution: + { integrity: sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA== } + dev: true + + /@protobufjs/pool@1.1.0: + resolution: + { integrity: sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw== } + dev: true + + /@protobufjs/utf8@1.1.0: + resolution: + { integrity: sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw== } + dev: true + + /@types/long@4.0.2: + resolution: + { integrity: sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA== } + dev: true + + /@types/node@20.9.4: + resolution: + { integrity: sha512-wmyg8HUhcn6ACjsn8oKYjkN/zUzQeNtMy44weTJSM6p4MMzEOuKbA3OjJ267uPCOW7Xex9dyrNTful8XTQYoDA== } + dependencies: + undici-types: 5.26.5 + dev: true + + /@xenova/transformers@2.9.0: + resolution: + { integrity: sha512-wzSjIMpkVaD+bIgIVxlXDeeKawr233t+1pPb5AhpYeTAPFdOaVUVdT4vIKqmmszApBFYYUpOqv5LoJ4lOAm6Ug== } + dependencies: + onnxruntime-web: 1.14.0 + sharp: 0.32.6 + optionalDependencies: + onnxruntime-node: 1.14.0 + dev: true + + /b4a@1.6.4: + resolution: + { integrity: sha512-fpWrvyVHEKyeEvbKZTVOeZF3VSKKWtJxFIxX/jaVPf+cLbGUSitjb49pHLqPV2BUNNZ0LcoeEGfE/YCpyDYHIw== } + dev: true + + /base64-js@1.5.1: + resolution: + { integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== } + dev: true + + /bl@4.1.0: + resolution: + { integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== } + dependencies: + buffer: 5.7.1 + inherits: 2.0.4 + readable-stream: 3.6.2 + dev: true + + /buffer@5.7.1: + resolution: + { integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== } + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + dev: true + + /chownr@1.1.4: + resolution: + { integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== } + dev: true + + /color-convert@2.0.1: + resolution: + { integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== } + engines: { node: ">=7.0.0" } + dependencies: + color-name: 1.1.4 + dev: true + + /color-name@1.1.4: + resolution: + { integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== } + dev: true + + /color-string@1.9.1: + resolution: + { integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg== } + dependencies: + color-name: 1.1.4 + simple-swizzle: 0.2.2 + dev: true + + /color@4.2.3: + resolution: + { integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A== } + engines: { node: ">=12.5.0" } + dependencies: + color-convert: 2.0.1 + color-string: 1.9.1 + dev: true + + /decompress-response@6.0.0: + resolution: + { integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== } + engines: { node: ">=10" } + dependencies: + mimic-response: 3.1.0 + dev: true + + /deep-extend@0.6.0: + resolution: + { integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== } + engines: { node: ">=4.0.0" } + dev: true + + /detect-libc@2.0.2: + resolution: + { integrity: sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw== } + engines: { node: ">=8" } + dev: true + + /end-of-stream@1.4.4: + resolution: + { integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== } + dependencies: + once: 1.4.0 + dev: true + + /expand-template@2.0.3: + resolution: + { integrity: sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg== } + engines: { node: ">=6" } + dev: true + + /fast-fifo@1.3.2: + resolution: + { integrity: sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ== } + dev: true + + /flatbuffers@1.12.0: + resolution: + { integrity: sha512-c7CZADjRcl6j0PlvFy0ZqXQ67qSEZfrVPynmnL+2zPc+NtMvrF8Y0QceMo7QqnSPc7+uWjUIAbvCQ5WIKlMVdQ== } + dev: true + + /fs-constants@1.0.0: + resolution: + { integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== } + dev: true + + /github-from-package@0.0.0: + resolution: + { integrity: sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw== } + dev: true + + /guid-typescript@1.0.9: + resolution: + { integrity: sha512-Y8T4vYhEfwJOTbouREvG+3XDsjr8E3kIr7uf+JZ0BYloFsttiHU0WfvANVsR7TxNUJa/WpCnw/Ino/p+DeBhBQ== } + dev: true + + /ieee754@1.2.1: + resolution: + { integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== } + dev: true + + /inherits@2.0.4: + resolution: + { integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== } + dev: true + + /ini@1.3.8: + resolution: + { integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== } + dev: true + + /is-arrayish@0.3.2: + resolution: + { integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== } + dev: true + + /long@4.0.0: + resolution: + { integrity: sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA== } + dev: true + + /lru-cache@6.0.0: + resolution: + { integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== } + engines: { node: ">=10" } + dependencies: + yallist: 4.0.0 + dev: true + + /mimic-response@3.1.0: + resolution: + { integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== } + engines: { node: ">=10" } + dev: true + + /minimist@1.2.8: + resolution: + { integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== } + dev: true + + /mkdirp-classic@0.5.3: + resolution: + { integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== } + dev: true + + /napi-build-utils@1.0.2: + resolution: + { integrity: sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg== } + dev: true + + /node-abi@3.51.0: + resolution: + { integrity: sha512-SQkEP4hmNWjlniS5zdnfIXTk1x7Ome85RDzHlTbBtzE97Gfwz/Ipw4v/Ryk20DWIy3yCNVLVlGKApCnmvYoJbA== } + engines: { node: ">=10" } + dependencies: + semver: 7.5.4 + dev: true + + /node-addon-api@6.1.0: + resolution: + { integrity: sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA== } + dev: true + + /once@1.4.0: + resolution: + { integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== } + dependencies: + wrappy: 1.0.2 + dev: true + + /onnx-proto@4.0.4: + resolution: + { integrity: sha512-aldMOB3HRoo6q/phyB6QRQxSt895HNNw82BNyZ2CMh4bjeKv7g/c+VpAFtJuEMVfYLMbRx61hbuqnKceLeDcDA== } + dependencies: + protobufjs: 6.11.4 + dev: true + + /onnxruntime-common@1.14.0: + resolution: + { integrity: sha512-3LJpegM2iMNRX2wUmtYfeX/ytfOzNwAWKSq1HbRrKc9+uqG/FsEA0bbKZl1btQeZaXhC26l44NWpNUeXPII7Ew== } + dev: true + + /onnxruntime-node@1.14.0: + resolution: + { integrity: sha512-5ba7TWomIV/9b6NH/1x/8QEeowsb+jBEvFzU6z0T4mNsFwdPqXeFUM7uxC6QeSRkEbWu3qEB0VMjrvzN/0S9+w== } + os: [win32, darwin, linux] + requiresBuild: true + dependencies: + onnxruntime-common: 1.14.0 + dev: true + optional: true + + /onnxruntime-web@1.14.0: + resolution: + { integrity: sha512-Kcqf43UMfW8mCydVGcX9OMXI2VN17c0p6XvR7IPSZzBf/6lteBzXHvcEVWDPmCKuGombl997HgLqj91F11DzXw== } + dependencies: + flatbuffers: 1.12.0 + guid-typescript: 1.0.9 + long: 4.0.0 + onnx-proto: 4.0.4 + onnxruntime-common: 1.14.0 + platform: 1.3.6 + dev: true + + /platform@1.3.6: + resolution: + { integrity: sha512-fnWVljUchTro6RiCFvCXBbNhJc2NijN7oIQxbwsyL0buWJPG85v81ehlHI9fXrJsMNgTofEoWIQeClKpgxFLrg== } + dev: true + + /prebuild-install@7.1.1: + resolution: + { integrity: sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw== } + engines: { node: ">=10" } + hasBin: true + dependencies: + detect-libc: 2.0.2 + expand-template: 2.0.3 + github-from-package: 0.0.0 + minimist: 1.2.8 + mkdirp-classic: 0.5.3 + napi-build-utils: 1.0.2 + node-abi: 3.51.0 + pump: 3.0.0 + rc: 1.2.8 + simple-get: 4.0.1 + tar-fs: 2.1.1 + tunnel-agent: 0.6.0 + dev: true + + /protobufjs@6.11.4: + resolution: + { integrity: sha512-5kQWPaJHi1WoCpjTGszzQ32PG2F4+wRY6BmAT4Vfw56Q2FZ4YZzK20xUYQH4YkfehY1e6QSICrJquM6xXZNcrw== } + hasBin: true + requiresBuild: true + dependencies: + "@protobufjs/aspromise": 1.1.2 + "@protobufjs/base64": 1.1.2 + "@protobufjs/codegen": 2.0.4 + "@protobufjs/eventemitter": 1.1.0 + "@protobufjs/fetch": 1.1.0 + "@protobufjs/float": 1.0.2 + "@protobufjs/inquire": 1.1.0 + "@protobufjs/path": 1.1.2 + "@protobufjs/pool": 1.1.0 + "@protobufjs/utf8": 1.1.0 + "@types/long": 4.0.2 + "@types/node": 20.9.4 + long: 4.0.0 + dev: true + + /pump@3.0.0: + resolution: + { integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== } + dependencies: + end-of-stream: 1.4.4 + once: 1.4.0 + dev: true + + /queue-tick@1.0.1: + resolution: + { integrity: sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag== } + dev: true + + /rc@1.2.8: + resolution: + { integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== } + hasBin: true + dependencies: + deep-extend: 0.6.0 + ini: 1.3.8 + minimist: 1.2.8 + strip-json-comments: 2.0.1 + dev: true + + /readable-stream@3.6.2: + resolution: + { integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== } + engines: { node: ">= 6" } + dependencies: + inherits: 2.0.4 + string_decoder: 1.3.0 + util-deprecate: 1.0.2 + dev: true + + /safe-buffer@5.2.1: + resolution: + { integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== } + dev: true + + /semver@7.5.4: + resolution: + { integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== } + engines: { node: ">=10" } + hasBin: true + dependencies: + lru-cache: 6.0.0 + dev: true + + /sharp@0.32.6: + resolution: + { integrity: sha512-KyLTWwgcR9Oe4d9HwCwNM2l7+J0dUQwn/yf7S0EnTtb0eVS4RxO0eUSvxPtzT4F3SY+C4K6fqdv/DO27sJ/v/w== } + engines: { node: ">=14.15.0" } + requiresBuild: true + dependencies: + color: 4.2.3 + detect-libc: 2.0.2 + node-addon-api: 6.1.0 + prebuild-install: 7.1.1 + semver: 7.5.4 + simple-get: 4.0.1 + tar-fs: 3.0.4 + tunnel-agent: 0.6.0 + dev: true + + /simple-concat@1.0.1: + resolution: + { integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q== } + dev: true + + /simple-get@4.0.1: + resolution: + { integrity: sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA== } + dependencies: + decompress-response: 6.0.0 + once: 1.4.0 + simple-concat: 1.0.1 + dev: true + + /simple-swizzle@0.2.2: + resolution: + { integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg== } + dependencies: + is-arrayish: 0.3.2 + dev: true + + /streamx@2.15.5: + resolution: + { integrity: sha512-9thPGMkKC2GctCzyCUjME3yR03x2xNo0GPKGkRw2UMYN+gqWa9uqpyNWhmsNCutU5zHmkUum0LsCRQTXUgUCAg== } + dependencies: + fast-fifo: 1.3.2 + queue-tick: 1.0.1 + dev: true + + /string_decoder@1.3.0: + resolution: + { integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== } + dependencies: + safe-buffer: 5.2.1 + dev: true + + /strip-json-comments@2.0.1: + resolution: + { integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== } + engines: { node: ">=0.10.0" } + dev: true + + /tar-fs@2.1.1: + resolution: + { integrity: sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng== } + dependencies: + chownr: 1.1.4 + mkdirp-classic: 0.5.3 + pump: 3.0.0 + tar-stream: 2.2.0 + dev: true + + /tar-fs@3.0.4: + resolution: + { integrity: sha512-5AFQU8b9qLfZCX9zp2duONhPmZv0hGYiBPJsyUdqMjzq/mqVpy/rEUSeHk1+YitmxugaptgBh5oDGU3VsAJq4w== } + dependencies: + mkdirp-classic: 0.5.3 + pump: 3.0.0 + tar-stream: 3.1.6 + dev: true + + /tar-stream@2.2.0: + resolution: + { integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== } + engines: { node: ">=6" } + dependencies: + bl: 4.1.0 + end-of-stream: 1.4.4 + fs-constants: 1.0.0 + inherits: 2.0.4 + readable-stream: 3.6.2 + dev: true + + /tar-stream@3.1.6: + resolution: + { integrity: sha512-B/UyjYwPpMBv+PaFSWAmtYjwdrlEaZQEhMIBFNC5oEG8lpiW8XjcSdmEaClj28ArfKScKHs2nshz3k2le6crsg== } + dependencies: + b4a: 1.6.4 + fast-fifo: 1.3.2 + streamx: 2.15.5 + dev: true + + /tunnel-agent@0.6.0: + resolution: + { integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w== } + dependencies: + safe-buffer: 5.2.1 + dev: true + + /typescript@5.3.2: + resolution: + { integrity: sha512-6l+RyNy7oAHDfxC4FzSJcz9vnjTKxrLpDG5M2Vu4SHRVNg6xzqZp6LYSR9zjqQTu8DU/f5xwxUdADOkbrIX2gQ== } + engines: { node: ">=14.17" } + hasBin: true + dev: true + + /undici-types@5.26.5: + resolution: + { integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== } + dev: true + + /util-deprecate@1.0.2: + resolution: + { integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== } + dev: true + + /wrappy@1.0.2: + resolution: + { integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== } + dev: true + + /yallist@4.0.0: + resolution: + { integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== } + dev: true diff --git a/packages/jinja/src/ast.ts b/packages/jinja/src/ast.ts new file mode 100644 index 0000000000000000000000000000000000000000..20ad4478a398885aa61dcc9ac71018e08234a771 --- /dev/null +++ b/packages/jinja/src/ast.ts @@ -0,0 +1,203 @@ +import type { Token } from "./lexer"; + +/** + * Statements do not result in a value at runtime. They contain one or more expressions internally. + */ +export class Statement { + type = "Statement"; +} + +/** + * Defines a block which contains many statements. Each chat template corresponds to one Program. + */ +export class Program extends Statement { + override type = "Program"; + + constructor(public body: Statement[]) { + super(); + } +} + +export class If extends Statement { + override type = "If"; + + constructor( + public test: Expression, + public body: Statement[], + public alternate: Statement[] + ) { + super(); + } +} + +export class For extends Statement { + override type = "For"; + + constructor( + public loopvar: Identifier, + public iterable: Expression, + public body: Statement[] + ) { + super(); + } +} + +export class SetStatement extends Statement { + override type = "Set"; + constructor( + public assignee: Expression, + public value: Expression + ) { + super(); + } +} + +/** + * Expressions will result in a value at runtime (unlike statements). + */ +export class Expression extends Statement { + override type = "Expression"; +} + +export class MemberExpression extends Expression { + override type = "MemberExpression"; + + constructor( + public object: Expression, + public property: Expression, + public computed: boolean + ) { + super(); + } +} + +export class CallExpression extends Expression { + override type = "CallExpression"; + + constructor( + public callee: Expression, + public args: Expression[] + ) { + super(); + } +} + +/** + * Represents a user-defined variable or symbol in the template. + */ +export class Identifier extends Expression { + override type = "Identifier"; + + /** + * @param {string} value The name of the identifier + */ + constructor(public value: string) { + super(); + } +} + +/** + * Abstract base class for all Literal expressions. + * Should not be instantiated directly. + */ +abstract class Literal extends Expression { + override type = "Literal"; + + constructor(public value: T) { + super(); + } +} + +/** + * Represents a numeric constant in the template. + */ +export class NumericLiteral extends Literal { + override type = "NumericLiteral"; +} + +/** + * Represents a text constant in the template. + */ +export class StringLiteral extends Literal { + override type = "StringLiteral"; + + constructor(value: string) { + super(value); + } +} + +/** + * Represents a boolean constant in the template. + */ +export class BooleanLiteral extends Literal { + override type = "BooleanLiteral"; +} + +/** + * An operation with two sides, separated by an operator. + * Note: Either side can be a Complex Expression, with order + * of operations being determined by the operator. + */ +export class BinaryExpression extends Expression { + override type = "BinaryExpression"; + + constructor( + public operator: Token, + public left: Expression, + public right: Expression + ) { + super(); + } +} + +/** + * An operation with two sides, separated by the | operator. + * Operator precedence: https://github.com/pallets/jinja/issues/379#issuecomment-168076202 + */ +export class FilterExpression extends Expression { + override type = "FilterExpression"; + + constructor( + public operand: Expression, + public filter: Identifier // TODO: Add support for non-identifier filters + ) { + super(); + } +} + +/** + * An operation with one side (operator on the left). + */ +export class UnaryExpression extends Expression { + override type = "UnaryExpression"; + + constructor( + public operator: Token, + public argument: Expression + ) { + super(); + } +} + +/** + * Logical negation of an expression. + */ +export class LogicalNegationExpression extends Expression { + override type = "LogicalNegationExpression"; + + constructor(public argument: Expression) { + super(); + } +} + +export class SliceExpression extends Expression { + override type = "SliceExpression"; + + constructor( + public start: Expression | undefined = undefined, + public stop: Expression | undefined = undefined, + public step: Expression | undefined = undefined + ) { + super(); + } +} diff --git a/packages/jinja/src/index.ts b/packages/jinja/src/index.ts new file mode 100644 index 0000000000000000000000000000000000000000..b8e18d44a4423347b32768ceae6027ae024ffbd5 --- /dev/null +++ b/packages/jinja/src/index.ts @@ -0,0 +1,57 @@ +/** + * @file Jinja templating engine + * + * A minimalistic JavaScript reimplementation of the [Jinja](https://github.com/pallets/jinja) templating engine, + * to support the chat templates. Special thanks to [Tyler Laceby](https://github.com/tlaceby) for his amazing + * ["Guide to Interpreters"](https://github.com/tlaceby/guide-to-interpreters-series) tutorial series, + * which provided the basis for this implementation. + * + * See the [Transformers documentation](https://huggingface.co/docs/transformers/main/en/chat_templating) for more information. + * + * @module index + */ +import type { Program } from "./ast"; +import { tokenize } from "./lexer"; +import { parse } from "./parser"; +import type { StringValue } from "./runtime"; +import { Environment, Interpreter } from "./runtime"; + +export class Template { + parsed: Program; + + /** + * @param {string} template The template string + */ + constructor(template: string) { + // Since `lstrip_blocks` is enabled, we strip tabs and spaces from the beginning of a line to the start of a block. + // We can achieve the same effect by replacing all instances of `%}\s+{%` with `%}{%` (as a pre-processing step). + template = template.replace(/%}\s+{%/g, "%}{%"); + + const tokens = tokenize(template); + this.parsed = parse(tokens); + } + + render(items: Record): string { + // Create a new environment for this template + const env = new Environment(); + + // Declare global variables + env.set("false", false); + env.set("true", true); + env.set("raise_exception", (args: string) => { + throw new Error(args); + }); + + // Add user-defined variables + for (const [key, value] of Object.entries(items)) { + env.set(key, value); + } + + const interpreter = new Interpreter(env); + + const result = interpreter.run(this.parsed) as StringValue; + return result.value; + } +} + +export { Environment, Interpreter, tokenize, parse }; diff --git a/packages/jinja/src/lexer.ts b/packages/jinja/src/lexer.ts new file mode 100644 index 0000000000000000000000000000000000000000..61c3fd7f34472acf0f3aa3cd11b49163ecc3f6fb --- /dev/null +++ b/packages/jinja/src/lexer.ts @@ -0,0 +1,286 @@ +/** + * Represents tokens that our language understands in parsing. + */ +export const TOKEN_TYPES = Object.freeze({ + Text: "Text", // The text between Jinja statements or expressions + + NumericLiteral: "NumericLiteral", // e.g., 123 + BooleanLiteral: "BooleanLiteral", // true or false + StringLiteral: "StringLiteral", // 'string' + Identifier: "Identifier", // Variables, functions, etc. + Equals: "Equals", // = + OpenParen: "OpenParen", // ( + CloseParen: "CloseParen", // ) + OpenStatement: "OpenStatement", // {% + CloseStatement: "CloseStatement", // %} + OpenExpression: "OpenExpression", // {{ + CloseExpression: "CloseExpression", // }} + OpenSquareBracket: "OpenSquareBracket", // [ + CloseSquareBracket: "CloseSquareBracket", // ] + Comma: "Comma", // , + Dot: "Dot", // . + Colon: "Colon", // : + Pipe: "Pipe", // | + + CallOperator: "CallOperator", // () + AdditiveBinaryOperator: "AdditiveBinaryOperator", // + - + MultiplicativeBinaryOperator: "MultiplicativeBinaryOperator", // * / % + ComparisonBinaryOperator: "ComparisonBinaryOperator", // < > <= >= == != + UnaryOperator: "UnaryOperator", // ! - + + + // Keywords + Set: "Set", + If: "If", + For: "For", + In: "In", + NotIn: "NotIn", + Else: "Else", + EndIf: "EndIf", + ElseIf: "ElseIf", + EndFor: "EndFor", + And: "And", + Or: "Or", + Not: "UnaryOperator", +}); + +export type TokenType = keyof typeof TOKEN_TYPES; + +/** + * Constant lookup for keywords and known identifiers + symbols. + */ +const KEYWORDS = Object.freeze({ + set: TOKEN_TYPES.Set, + for: TOKEN_TYPES.For, + in: TOKEN_TYPES.In, + if: TOKEN_TYPES.If, + else: TOKEN_TYPES.Else, + endif: TOKEN_TYPES.EndIf, + elif: TOKEN_TYPES.ElseIf, + endfor: TOKEN_TYPES.EndFor, + and: TOKEN_TYPES.And, + or: TOKEN_TYPES.Or, + not: TOKEN_TYPES.Not, + "not in": TOKEN_TYPES.NotIn, + + // Literals + true: TOKEN_TYPES.BooleanLiteral, + false: TOKEN_TYPES.BooleanLiteral, +}); + +/** + * Represents a single token in the template. + */ +export class Token { + /** + * Constructs a new Token. + * @param {string} value The raw value as seen inside the source code. + * @param {TokenType} type The type of token. + */ + constructor( + public value: string, + public type: TokenType + ) {} +} + +function isWord(char: string): boolean { + return /\w/.test(char); +} + +function isInteger(char: string): boolean { + return /[0-9]/.test(char); +} + +/** + * A data structure which contains a list of rules to test + */ +const ORDERED_MAPPING_TABLE: [string, TokenType][] = [ + // Control sequences + ["{%", TOKEN_TYPES.OpenStatement], + ["%}", TOKEN_TYPES.CloseStatement], + ["{{", TOKEN_TYPES.OpenExpression], + ["}}", TOKEN_TYPES.CloseExpression], + // Single character tokens + ["(", TOKEN_TYPES.OpenParen], + [")", TOKEN_TYPES.CloseParen], + ["[", TOKEN_TYPES.OpenSquareBracket], + ["]", TOKEN_TYPES.CloseSquareBracket], + [",", TOKEN_TYPES.Comma], + [".", TOKEN_TYPES.Dot], + [":", TOKEN_TYPES.Colon], + ["|", TOKEN_TYPES.Pipe], + // Comparison operators + ["<=", TOKEN_TYPES.ComparisonBinaryOperator], + [">=", TOKEN_TYPES.ComparisonBinaryOperator], + ["==", TOKEN_TYPES.ComparisonBinaryOperator], + ["!=", TOKEN_TYPES.ComparisonBinaryOperator], + ["<", TOKEN_TYPES.ComparisonBinaryOperator], + [">", TOKEN_TYPES.ComparisonBinaryOperator], + // Arithmetic operators + ["+", TOKEN_TYPES.AdditiveBinaryOperator], + ["-", TOKEN_TYPES.AdditiveBinaryOperator], + ["*", TOKEN_TYPES.MultiplicativeBinaryOperator], + ["/", TOKEN_TYPES.MultiplicativeBinaryOperator], + ["%", TOKEN_TYPES.MultiplicativeBinaryOperator], + // Assignment operator + ["=", TOKEN_TYPES.Equals], +]; + +const ESCAPE_CHARACTERS = new Map([ + ["n", "\n"], // New line + ["t", "\t"], // Horizontal tab + ["r", "\r"], // Carriage return + ["b", "\b"], // Backspace + ["f", "\f"], // Form feed + ["v", "\v"], // Vertical tab + ["'", "'"], // Single quote + ['"', '"'], // Double quote + ["\\", "\\"], // Backslash +]); + +/** + * Generate a list of tokens from a source string. + */ +export function tokenize(source: string): Token[] { + const tokens: Token[] = []; + const src: string = source; + + let cursorPosition = 0; + + const consumeWhile = (predicate: (char: string) => boolean): string => { + let str = ""; + while (predicate(src[cursorPosition])) { + // Check for escaped characters + if (src[cursorPosition] === "\\") { + // Consume the backslash + ++cursorPosition; + // Check for end of input + if (cursorPosition >= src.length) throw new SyntaxError("Unexpected end of input"); + + // Add the escaped character + const escaped = src[cursorPosition++]; + const unescaped = ESCAPE_CHARACTERS.get(escaped); + if (unescaped === undefined) { + throw new SyntaxError(`Unexpected escaped character: ${escaped}`); + } + str += unescaped; + continue; + } + + str += src[cursorPosition++]; + if (cursorPosition >= src.length) throw new SyntaxError("Unexpected end of input"); + } + return str; + }; + + // Build each token until end of input + main: while (cursorPosition < src.length) { + // First, consume all text that is outside of a Jinja statement or expression + const lastTokenType = tokens.at(-1)?.type; + if ( + lastTokenType === undefined || + lastTokenType === TOKEN_TYPES.CloseStatement || + lastTokenType === TOKEN_TYPES.CloseExpression + ) { + let text = ""; + while ( + cursorPosition < src.length && + // Keep going until we hit the next Jinja statement or expression + !(src[cursorPosition] === "{" && (src[cursorPosition + 1] === "%" || src[cursorPosition + 1] === "{")) + ) { + // Consume text + text += src[cursorPosition++]; + } + + // There is some text to add + if (text.length > 0) { + tokens.push(new Token(text, TOKEN_TYPES.Text)); + continue; + } + } + + // Consume (and ignore) all whitespace inside Jinja statements or expressions + consumeWhile((char) => /\s/.test(char)); + + // Handle multi-character tokens + const char = src[cursorPosition]; + + // Check for unary operators + if (char === "-" || char === "+") { + const lastTokenType = tokens.at(-1)?.type; + if (lastTokenType === TOKEN_TYPES.Text || lastTokenType === undefined) { + throw new SyntaxError(`Unexpected character: ${char}`); + } + switch (lastTokenType) { + case TOKEN_TYPES.Identifier: + case TOKEN_TYPES.NumericLiteral: + case TOKEN_TYPES.BooleanLiteral: + case TOKEN_TYPES.StringLiteral: + case TOKEN_TYPES.CloseParen: + case TOKEN_TYPES.CloseSquareBracket: + // Part of a binary operator + // a - 1, 1 - 1, true - 1, "apple" - 1, (1) - 1, a[1] - 1 + // Continue parsing normally + break; + + default: { + // Is part of a unary operator + // (-1), [-1], (1 + -1), not -1, -apple + ++cursorPosition; // consume the unary operator + + // Check for numbers following the unary operator + const num = consumeWhile(isInteger); + tokens.push( + new Token(`${char}${num}`, num.length > 0 ? TOKEN_TYPES.NumericLiteral : TOKEN_TYPES.UnaryOperator) + ); + continue; + } + } + } + + // Try to match one of the tokens in the mapping table + for (const [char, token] of ORDERED_MAPPING_TABLE) { + const slice = src.slice(cursorPosition, cursorPosition + char.length); + if (slice === char) { + tokens.push(new Token(char, token)); + cursorPosition += char.length; + continue main; + } + } + + if (char === "'") { + ++cursorPosition; // Skip the opening quote + const str = consumeWhile((char) => char !== "'"); + tokens.push(new Token(str, TOKEN_TYPES.StringLiteral)); + ++cursorPosition; // Skip the closing quote + continue; + } + + if (isInteger(char)) { + const num = consumeWhile(isInteger); + tokens.push(new Token(num, TOKEN_TYPES.NumericLiteral)); + continue; + } + if (isWord(char)) { + const word = consumeWhile(isWord); + + // Check for special/reserved keywords + // NOTE: We use Object.hasOwn() to avoid matching `.toString()` and other Object methods + const type = Object.hasOwn(KEYWORDS, word) ? KEYWORDS[word as keyof typeof KEYWORDS] : TOKEN_TYPES.Identifier; + + // Special case of not in: + // If the previous token was a "not", and this token is "in" + // then we want to combine them into a single token + if (type === TOKEN_TYPES.In && tokens.at(-1)?.type === TOKEN_TYPES.Not) { + tokens.pop(); + tokens.push(new Token("not in", TOKEN_TYPES.NotIn)); + } else { + tokens.push(new Token(word, type)); + } + + continue; + } + + throw new SyntaxError(`Unexpected character: ${char}`); + } + return tokens; +} diff --git a/packages/jinja/src/parser.ts b/packages/jinja/src/parser.ts new file mode 100644 index 0000000000000000000000000000000000000000..f033e4b06314e982b532030a00ff9931f3386d09 --- /dev/null +++ b/packages/jinja/src/parser.ts @@ -0,0 +1,418 @@ +import type { Token, TokenType } from "./lexer"; +import { TOKEN_TYPES } from "./lexer"; +import type { Statement } from "./ast"; +import { + Program, + If, + For, + SetStatement, + MemberExpression, + CallExpression, + Identifier, + NumericLiteral, + StringLiteral, + BooleanLiteral, + BinaryExpression, + FilterExpression, + UnaryExpression, + SliceExpression, +} from "./ast"; + +/** + * Generate the Abstract Syntax Tree (AST) from a list of tokens. + * Operator precedence can be found here: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Operator_precedence#table + */ +export function parse(tokens: Token[]): Program { + const program = new Program([]); + let current = 0; + + function expect(type: string, error: string): Token { + const prev = tokens[current++]; + if (!prev || prev.type !== type) { + throw new Error(`Parser Error: ${error}. ${prev.type} !== ${type}.`); + } + return prev; + } + + function parseAny(): Statement { + switch (tokens[current].type) { + case TOKEN_TYPES.Text: + return parseText(); + case TOKEN_TYPES.OpenStatement: + return parseJinjaStatement(); + case TOKEN_TYPES.OpenExpression: + return parseJinjaExpression(); + default: + throw new SyntaxError(`Unexpected token type: ${tokens[current].type}`); + } + } + + function not(...types: TokenType[]): boolean { + return current + types.length <= tokens.length && types.some((type, i) => type !== tokens[current + i].type); + } + + function is(...types: TokenType[]): boolean { + return current + types.length <= tokens.length && types.every((type, i) => type === tokens[current + i].type); + } + + function parseText(): StringLiteral { + return new StringLiteral(expect(TOKEN_TYPES.Text, "Expected text token").value); + } + + function parseJinjaStatement(): Statement { + // Consume {% %} tokens + expect(TOKEN_TYPES.OpenStatement, "Expected opening statement token"); + + let result; + switch (tokens[current].type) { + case TOKEN_TYPES.Set: + ++current; + result = parseSetStatement(); + expect(TOKEN_TYPES.CloseStatement, "Expected closing statement token"); + break; + + case TOKEN_TYPES.If: + ++current; + result = parseIfStatement(); + expect(TOKEN_TYPES.OpenStatement, "Expected {% token"); + expect(TOKEN_TYPES.EndIf, "Expected endif token"); + expect(TOKEN_TYPES.CloseStatement, "Expected %} token"); + break; + + case TOKEN_TYPES.For: + ++current; + result = parseForStatement(); + expect(TOKEN_TYPES.OpenStatement, "Expected {% token"); + expect(TOKEN_TYPES.EndFor, "Expected endfor token"); + expect(TOKEN_TYPES.CloseStatement, "Expected %} token"); + break; + default: + throw new SyntaxError(`Unknown statement type: ${tokens[current].type}`); + } + + return result; + } + + function parseJinjaExpression(): Statement { + // Consume {{ }} tokens + expect(TOKEN_TYPES.OpenExpression, "Expected opening expression token"); + + const result = parseExpression(); + + expect(TOKEN_TYPES.CloseExpression, "Expected closing expression token"); + return result; + } + + // NOTE: `set` acts as both declaration statement and assignment expression + function parseSetStatement(): Statement { + const left = parseExpression(); + + if (is(TOKEN_TYPES.Equals)) { + ++current; + const value = parseSetStatement(); + + return new SetStatement(left, value); + } + return left; + } + + function parseIfStatement(): If { + const test = parseExpression(); + + expect(TOKEN_TYPES.CloseStatement, "Expected closing statement token"); + + const body: Statement[] = []; + const alternate: Statement[] = []; + + // Keep parsing if body until we reach the first {% elif %} or {% else %} or {% endif %} + while ( + !( + tokens[current]?.type === TOKEN_TYPES.OpenStatement && + (tokens[current + 1]?.type === TOKEN_TYPES.ElseIf || + tokens[current + 1]?.type === TOKEN_TYPES.Else || + tokens[current + 1]?.type === TOKEN_TYPES.EndIf) + ) + ) { + body.push(parseAny()); + } + + // Alternate branch: Check for {% elif %} or {% else %} + if ( + tokens[current]?.type === TOKEN_TYPES.OpenStatement && + tokens[current + 1]?.type !== TOKEN_TYPES.EndIf // There is some body + ) { + ++current; // eat {% token + if (is(TOKEN_TYPES.ElseIf)) { + expect(TOKEN_TYPES.ElseIf, "Expected elseif token"); + alternate.push(parseIfStatement()); + } else { + // tokens[current]?.type === TokenType.Else + expect(TOKEN_TYPES.Else, "Expected else token"); + expect(TOKEN_TYPES.CloseStatement, "Expected closing statement token"); + + // keep going until we hit {% endif %} + while ( + !(tokens[current]?.type === TOKEN_TYPES.OpenStatement && tokens[current + 1]?.type === TOKEN_TYPES.EndIf) + ) { + alternate.push(parseAny()); + } + } + } + + return new If(test, body, alternate); + } + + function parseForStatement(): For { + // e.g., `message` in `for message in messages` + const loopVariable = parsePrimaryExpression(); // should be an identifier + if (!(loopVariable instanceof Identifier)) { + throw new SyntaxError(`Expected identifier for the loop variable`); + } + + expect(TOKEN_TYPES.In, "Expected `in` keyword following loop variable"); + + // messages in `for message in messages` + const iterable = parseExpression(); + + expect(TOKEN_TYPES.CloseStatement, "Expected closing statement token"); + + // Body of for loop + const body: Statement[] = []; + + // Keep going until we hit {% endfor + while (not(TOKEN_TYPES.OpenStatement, TOKEN_TYPES.EndFor)) { + body.push(parseAny()); + } + + return new For(loopVariable, iterable, body); + } + + function parseExpression(): Statement { + // Choose parse function with lowest precedence + return parseLogicalOrExpression(); + } + function parseLogicalOrExpression(): Statement { + let left = parseLogicalAndExpression(); + while (is(TOKEN_TYPES.Or)) { + const operator = tokens[current]; + ++current; + const right = parseLogicalAndExpression(); + left = new BinaryExpression(operator, left, right); + } + return left; + } + + function parseLogicalAndExpression(): Statement { + let left = parseLogicalNegationExpression(); + while (is(TOKEN_TYPES.And)) { + const operator = tokens[current]; + ++current; + const right = parseLogicalNegationExpression(); + left = new BinaryExpression(operator, left, right); + } + return left; + } + + function parseLogicalNegationExpression(): Statement { + let right: UnaryExpression | undefined; + + // Try parse unary operators + while (is(TOKEN_TYPES.Not)) { + // not not ... + const operator = tokens[current]; + ++current; + const arg = parseLogicalNegationExpression(); // not test.x === not (test.x) + right = new UnaryExpression(operator, arg); + } + + return right ?? parseComparisonExpression(); + } + + function parseComparisonExpression(): Statement { + // NOTE: membership has same precedence as comparison + // e.g., ('a' in 'apple' == 'b' in 'banana') evaluates as ('a' in ('apple' == ('b' in 'banana'))) + let left = parseAdditiveExpression(); + while (is(TOKEN_TYPES.ComparisonBinaryOperator) || is(TOKEN_TYPES.In) || is(TOKEN_TYPES.NotIn)) { + const operator = tokens[current]; + ++current; + const right = parseAdditiveExpression(); + left = new BinaryExpression(operator, left, right); + } + return left; + } + function parseAdditiveExpression(): Statement { + let left = parseMultiplicativeExpression(); + while (is(TOKEN_TYPES.AdditiveBinaryOperator)) { + const operator = tokens[current]; + ++current; + const right = parseMultiplicativeExpression(); + left = new BinaryExpression(operator, left, right); + } + return left; + } + + function parseCallMemberExpression(): Statement { + // Handle member expressions recursively + + const member = parseMemberExpression(); // foo.x + + if (is(TOKEN_TYPES.OpenParen)) { + // foo.x() + return parseCallExpression(member); + } + return member; + } + + function parseCallExpression(callee: Statement): CallExpression { + let callExpression = new CallExpression(callee, parseArgs()); + + if (is(TOKEN_TYPES.OpenParen)) { + // foo.x()() + callExpression = parseCallExpression(callExpression); + } + + return callExpression; + } + + function parseArgs(): Statement[] { + // add (x + 5, foo()) + expect(TOKEN_TYPES.OpenParen, "Expected opening parenthesis for arguments list"); + + const args = is(TOKEN_TYPES.CloseParen) ? [] : parseArgumentsList(); + + expect(TOKEN_TYPES.CloseParen, "Expected closing parenthesis for arguments list"); + return args; + } + function parseArgumentsList(): Statement[] { + // comma-separated arguments list + const args = [parseExpression()]; // Update when we allow assignment expressions + + while (is(TOKEN_TYPES.Comma)) { + ++current; // consume comma + args.push(parseExpression()); + } + return args; + } + function parseMemberExpressionArgumentsList(): Statement { + // NOTE: This also handles slice expressions colon-separated arguments list + // e.g., ['test'], [0], [:2], [1:], [1:2], [1:2:3] + + const slices: (Statement | undefined)[] = []; + let isSlice = false; + while (!is(TOKEN_TYPES.CloseSquareBracket)) { + if (is(TOKEN_TYPES.Colon)) { + // A case where a default is used + // e.g., [:2] will be parsed as [undefined, 2] + slices.push(undefined); + ++current; // consume colon + isSlice = true; + } else { + slices.push(parseExpression()); + if (is(TOKEN_TYPES.Colon)) { + ++current; // consume colon after expression, if it exists + isSlice = true; + } + } + } + if (slices.length === 0) { + // [] + throw new SyntaxError(`Expected at least one argument for member/slice expression`); + } + + if (isSlice) { + if (slices.length > 3) { + throw new SyntaxError(`Expected 0-3 arguments for slice expression`); + } + return new SliceExpression(...slices); + } + + return slices[0] as Statement; // normal member expression + } + + function parseMemberExpression(): Statement { + let object = parsePrimaryExpression(); + + while (is(TOKEN_TYPES.Dot) || is(TOKEN_TYPES.OpenSquareBracket)) { + const operator = tokens[current]; // . or [ + ++current; + let property: Statement; + const computed = operator.type !== TOKEN_TYPES.Dot; + if (computed) { + // computed (i.e., bracket notation: obj[expr]) + property = parseMemberExpressionArgumentsList(); + expect(TOKEN_TYPES.CloseSquareBracket, "Expected closing square bracket"); + } else { + // non-computed (i.e., dot notation: obj.expr) + property = parsePrimaryExpression(); // should be an identifier + if (property.type !== "Identifier") { + throw new SyntaxError(`Expected identifier following dot operator`); + } + } + object = new MemberExpression(object, property, computed); + } + return object; + } + + function parseMultiplicativeExpression(): Statement { + let left = parseFilterExpression(); + + while (is(TOKEN_TYPES.MultiplicativeBinaryOperator)) { + const operator = tokens[current]; + ++current; + const right = parseFilterExpression(); + left = new BinaryExpression(operator, left, right); + } + return left; + } + + function parseFilterExpression(): Statement { + let operand = parseCallMemberExpression(); + + while (is(TOKEN_TYPES.Pipe)) { + // Support chaining filters + ++current; // consume pipe + const filter = parsePrimaryExpression(); // should be an identifier + if (!(filter instanceof Identifier)) { + throw new SyntaxError(`Expected identifier for the filter`); + } + operand = new FilterExpression(operand, filter); + } + return operand; + } + + function parsePrimaryExpression(): Statement { + // Primary expression: number, string, identifier, function call, parenthesized expression + const token = tokens[current]; + switch (token.type) { + case TOKEN_TYPES.NumericLiteral: + ++current; + return new NumericLiteral(Number(token.value)); + case TOKEN_TYPES.StringLiteral: + ++current; + return new StringLiteral(token.value); + case TOKEN_TYPES.BooleanLiteral: + ++current; + return new BooleanLiteral(token.value === "true"); + case TOKEN_TYPES.Identifier: + ++current; + return new Identifier(token.value); + case TOKEN_TYPES.OpenParen: { + ++current; // consume opening parenthesis + const expression = parseExpression(); + if (tokens[current].type !== TOKEN_TYPES.CloseParen) { + throw new SyntaxError("Expected closing parenthesis"); + } + ++current; // consume closing parenthesis + return expression; + } + default: + throw new SyntaxError(`Unexpected token: ${token.type}`); + } + } + + while (current < tokens.length) { + program.body.push(parseAny()); + } + + return program; +} diff --git a/packages/jinja/src/runtime.ts b/packages/jinja/src/runtime.ts new file mode 100644 index 0000000000000000000000000000000000000000..c34dd0f4d1d5ef4f92d141ca338c245c6f7f06a6 --- /dev/null +++ b/packages/jinja/src/runtime.ts @@ -0,0 +1,659 @@ +import type { + NumericLiteral, + StringLiteral, + BooleanLiteral, + Statement, + Program, + If, + For, + SetStatement, + MemberExpression, + CallExpression, + Identifier, + BinaryExpression, + FilterExpression, + UnaryExpression, + SliceExpression, +} from "./ast"; +import { slice } from "./utils"; + +export type AnyRuntimeValue = + | NumericValue + | StringValue + | BooleanValue + | ObjectValue + | ArrayValue + | FunctionValue + | NullValue + | UndefinedValue; + +/** + * Abstract base class for all Runtime values. + * Should not be instantiated directly. + */ +abstract class RuntimeValue { + type = "RuntimeValue"; + value: T; + + /** + * A collection of built-in functions for this type. + */ + builtins = new Map(); + + /** + * Creates a new RuntimeValue. + */ + constructor(value: T = undefined as unknown as T) { + this.value = value; + } + + /** + * Determines truthiness or falsiness of the runtime value. + * This function should be overridden by subclasses if it has custom truthiness criteria. + * @returns {BooleanValue} BooleanValue(true) if the value is truthy, BooleanValue(false) otherwise. + */ + __bool__(): BooleanValue { + return new BooleanValue(!!this.value); + } +} + +/** + * Represents a numeric value at runtime. + */ +export class NumericValue extends RuntimeValue { + override type = "NumericValue"; +} + +/** + * Represents a string value at runtime. + */ +export class StringValue extends RuntimeValue { + override type = "StringValue"; + + override builtins = new Map([ + [ + "upper", + new FunctionValue(() => { + return new StringValue(this.value.toUpperCase()); + }), + ], + [ + "lower", + new FunctionValue(() => { + return new StringValue(this.value.toLowerCase()); + }), + ], + [ + "strip", + new FunctionValue(() => { + return new StringValue(this.value.trim()); + }), + ], + ["length", new NumericValue(this.value.length)], + ]); +} + +/** + * Represents a boolean value at runtime. + */ +export class BooleanValue extends RuntimeValue { + override type = "BooleanValue"; +} + +/** + * Represents an Object value at runtime. + */ +export class ObjectValue extends RuntimeValue> { + override type = "ObjectValue"; + + /** + * NOTE: necessary to override since all JavaScript arrays are considered truthy, + * while only non-empty Python arrays are consider truthy. + * + * e.g., + * - JavaScript: {} && 5 -> 5 + * - Python: {} and 5 -> {} + */ + override __bool__(): BooleanValue { + return new BooleanValue(this.value.size > 0); + } +} + +/** + * Represents an Array value at runtime. + */ +export class ArrayValue extends RuntimeValue { + override type = "ArrayValue"; + override builtins = new Map([["length", new NumericValue(this.value.length)]]); + + /** + * NOTE: necessary to override since all JavaScript arrays are considered truthy, + * while only non-empty Python arrays are consider truthy. + * + * e.g., + * - JavaScript: [] && 5 -> 5 + * - Python: [] and 5 -> [] + */ + override __bool__(): BooleanValue { + return new BooleanValue(this.value.length > 0); + } +} + +/** + * Represents a Function value at runtime. + */ +export class FunctionValue extends RuntimeValue<(args: AnyRuntimeValue[], scope: Environment) => AnyRuntimeValue> { + override type = "FunctionValue"; +} + +/** + * Represents a Null value at runtime. + */ +export class NullValue extends RuntimeValue { + override type = "NullValue"; +} + +/** + * Represents an Undefined value at runtime. + */ +export class UndefinedValue extends RuntimeValue { + override type = "UndefinedValue"; +} + +/** + * Represents the current environment (scope) at runtime. + */ +export class Environment { + /** + * The variables declared in this environment. + */ + variables: Map = new Map(); + + constructor(public parent?: Environment) {} + + /** + * Set the value of a variable in the current environment. + */ + // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types + set(name: string, value: any): AnyRuntimeValue { + return this.declareVariable(name, convertToRuntimeValues(value)); + } + + private declareVariable(name: string, value: AnyRuntimeValue): AnyRuntimeValue { + if (this.variables.has(name)) { + throw new SyntaxError(`Variable already declared: ${name}`); + } + this.variables.set(name, value); + return value; + } + + // private assignVariable(name: string, value: AnyRuntimeValue): AnyRuntimeValue { + // const env = this.resolve(name); + // env.variables.set(name, value); + // return value; + // } + + /** + * Declare if doesn't exist, assign otherwise. + */ + setVariable(name: string, value: AnyRuntimeValue): AnyRuntimeValue { + let env: Environment | undefined; + try { + env = this.resolve(name); + } catch { + /* empty */ + } + (env ?? this).variables.set(name, value); + return value; + } + + /** + * Resolve the environment in which the variable is declared. + * @param {string} name The name of the variable. + * @returns {Environment} The environment in which the variable is declared. + */ + private resolve(name: string): Environment { + if (this.variables.has(name)) { + return this; + } + + // Traverse scope chain + if (this.parent) { + return this.parent.resolve(name); + } + + throw new Error(`Unknown variable: ${name}`); + } + + lookupVariable(name: string): AnyRuntimeValue { + return this.resolve(name).variables.get(name) ?? new NullValue(); + } +} + +export class Interpreter { + global: Environment; + + constructor(env?: Environment) { + this.global = env ?? new Environment(); + } + + /** + * Run the program. + */ + run(program: Program): AnyRuntimeValue { + return this.evaluate(program, this.global); + } + + /** + * Evaulates expressions following the binary operation type. + */ + private evaluateBinaryExpression(node: BinaryExpression, environment: Environment): AnyRuntimeValue { + const left = this.evaluate(node.left, environment); + const right = this.evaluate(node.right, environment); + + // Arbitrary operands + switch (node.operator.value) { + // Equality operators + case "==": + return new BooleanValue(left.value == right.value); + case "!=": + return new BooleanValue(left.value != right.value); + + // Logical operators + case "and": + return left.__bool__().value ? right : left; + case "or": + return left.__bool__().value ? left : right; + } + + if (left instanceof UndefinedValue || right instanceof UndefinedValue) { + throw new Error("Cannot perform operation on undefined values"); + } else if (left instanceof NullValue || right instanceof NullValue) { + throw new Error("Cannot perform operation on null values"); + } else if (left instanceof NumericValue && right instanceof NumericValue) { + // Evaulate pure numeric operations with binary operators. + switch (node.operator.value) { + // Arithmetic operators + case "+": + return new NumericValue(left.value + right.value); + case "-": + return new NumericValue(left.value - right.value); + case "*": + return new NumericValue(left.value * right.value); + case "/": + return new NumericValue(left.value / right.value); + case "%": + return new NumericValue(left.value % right.value); + + // Comparison operators + case "<": + return new BooleanValue(left.value < right.value); + case ">": + return new BooleanValue(left.value > right.value); + case ">=": + return new BooleanValue(left.value >= right.value); + case "<=": + return new BooleanValue(left.value <= right.value); + } + } else if (right instanceof ArrayValue) { + const member = right.value.find((x) => x.value === left.value) !== undefined; + switch (node.operator.value) { + case "in": + return new BooleanValue(member); + case "not in": + return new BooleanValue(!member); + } + } + + if (left instanceof StringValue || right instanceof StringValue) { + // Support string concatenation as long as at least one operand is a string + switch (node.operator.value) { + case "+": + return new StringValue(left.value.toString() + right.value.toString()); + } + } + + if (left instanceof StringValue && right instanceof StringValue) { + switch (node.operator.value) { + case "in": + return new BooleanValue(right.value.includes(left.value)); + case "not in": + return new BooleanValue(!right.value.includes(left.value)); + } + } + + throw new SyntaxError(`Unknown operator "${node.operator.value}" between ${left.type} and ${right.type}`); + } + + /** + * Evaulates expressions following the filter operation type. + */ + private evaluateFilterExpression(node: FilterExpression, environment: Environment): AnyRuntimeValue { + const operand = this.evaluate(node.operand, environment); + + // For now, we only support the built-in filters + // TODO: Add support for non-identifier filters + // e.g., functions which return filters: {{ numbers | select("odd") }} + // TODO: Add support for user-defined filters + // const filter = environment.lookupVariable(node.filter.value); + // if (!(filter instanceof FunctionValue)) { + // throw new Error(`Filter must be a function: got ${filter.type}`); + // } + // return filter.value([operand], environment); + + // https://jinja.palletsprojects.com/en/3.0.x/templates/#list-of-builtin-filters + if (operand instanceof ArrayValue) { + switch (node.filter.value) { + case "first": + return operand.value[0]; + case "last": + return operand.value[operand.value.length - 1]; + case "length": + return new NumericValue(operand.value.length); + case "reverse": + return new ArrayValue(operand.value.reverse()); + case "sort": + return new ArrayValue( + operand.value.sort((a, b) => { + if (a.type !== b.type) { + throw new Error(`Cannot compare different types: ${a.type} and ${b.type}`); + } + switch (a.type) { + case "NumericValue": + return (a as NumericValue).value - (b as NumericValue).value; + case "StringValue": + return (a as StringValue).value.localeCompare((b as StringValue).value); + default: + throw new Error(`Cannot compare type: ${a.type}`); + } + }) + ); + default: + throw new Error(`Unknown ArrayValue filter: ${node.filter.value}`); + } + } else if (operand instanceof StringValue) { + switch (node.filter.value) { + case "length": + return new NumericValue(operand.value.length); + case "upper": + return new StringValue(operand.value.toUpperCase()); + case "lower": + return new StringValue(operand.value.toLowerCase()); + case "title": + return new StringValue(operand.value.replace(/\b\w/g, (c) => c.toUpperCase())); + case "capitalize": + return new StringValue(operand.value.charAt(0).toUpperCase() + operand.value.slice(1)); + case "trim": + return new StringValue(operand.value.trim()); + default: + throw new Error(`Unknown StringValue filter: ${node.filter.value}`); + } + } else if (operand instanceof NumericValue) { + switch (node.filter.value) { + case "abs": + return new NumericValue(Math.abs(operand.value)); + default: + throw new Error(`Unknown NumericValue filter: ${node.filter.value}`); + } + } + + throw new Error(`Cannot apply filter "${node.filter.value}" to type: ${operand.type}`); + } + + /** + * Evaulates expressions following the unary operation type. + */ + private evaluateUnaryExpression(node: UnaryExpression, environment: Environment): AnyRuntimeValue { + const argument = this.evaluate(node.argument, environment); + + switch (node.operator.value) { + case "not": + return new BooleanValue(!argument.value); + default: + throw new SyntaxError(`Unknown operator: ${node.operator.value}`); + } + } + + private evalProgram(program: Program, environment: Environment): AnyRuntimeValue { + return this.evaluateBlock(program.body, environment); + } + + private evaluateBlock(statements: Statement[], environment: Environment): StringValue { + // Jinja templates always evaluate to a String, + // so we accumulate the result of each statement into a final string + + let result = ""; + for (const statement of statements) { + const lastEvaluated = this.evaluate(statement, environment); + + if (lastEvaluated.type !== "NullValue") { + result += lastEvaluated.value; + } + } + + // Since `trim_blocks` is enabled, we remove the first newline after the template tag + result = result.replace(/^\n/, ""); + + return new StringValue(result); + } + + private evaluateIdentifier(node: Identifier, environment: Environment): AnyRuntimeValue { + return environment.lookupVariable(node.value); + } + + private evaluateCallExpression(expr: CallExpression, environment: Environment): AnyRuntimeValue { + const args = expr.args.map((arg) => this.evaluate(arg, environment) as AnyRuntimeValue); + const fn = this.evaluate(expr.callee, environment); + if (fn.type !== "FunctionValue") { + throw new Error(`Cannot call something that is not a function: got ${fn.type}`); + } + return (fn as FunctionValue).value(args, environment); + } + + private evaluateSliceExpression( + object: AnyRuntimeValue, + expr: SliceExpression, + environment: Environment + ): ArrayValue | StringValue { + if (!(object instanceof ArrayValue || object instanceof StringValue)) { + throw new Error("Slice object must be an array or string"); + } + + const start = this.evaluate(expr.start, environment); + const stop = this.evaluate(expr.stop, environment); + const step = this.evaluate(expr.step, environment); + + // Validate arguments + if (!(start instanceof NumericValue || start instanceof UndefinedValue)) { + throw new Error("Slice start must be numeric or undefined"); + } + if (!(stop instanceof NumericValue || stop instanceof UndefinedValue)) { + throw new Error("Slice stop must be numeric or undefined"); + } + if (!(step instanceof NumericValue || step instanceof UndefinedValue)) { + throw new Error("Slice step must be numeric or undefined"); + } + + if (object instanceof ArrayValue) { + return new ArrayValue(slice(object.value, start.value, stop.value, step.value)); + } else { + return new StringValue(slice(Array.from(object.value), start.value, stop.value, step.value).join("")); + } + } + + private evaluateMemberExpression(expr: MemberExpression, environment: Environment): AnyRuntimeValue { + const object = this.evaluate(expr.object, environment); + + let property; + if (expr.computed) { + if (expr.property.type === "SliceExpression") { + return this.evaluateSliceExpression(object, expr.property as SliceExpression, environment); + } else { + property = this.evaluate(expr.property, environment); + } + } else { + property = new StringValue((expr.property as Identifier).value); + } + + let value; + if (object instanceof ObjectValue) { + if (!(property instanceof StringValue)) { + throw new Error(`Cannot access property with non-string: got ${property.type}`); + } + value = object.value.get(property.value) ?? object.builtins.get(property.value); + } else if (object instanceof ArrayValue || object instanceof StringValue) { + if (property instanceof NumericValue) { + value = object.value.at(property.value); + if (object instanceof StringValue) { + value = new StringValue(object.value.at(property.value)); + } + } else if (property instanceof StringValue) { + value = object.builtins.get(property.value); + } else { + throw new Error(`Cannot access property with non-string/non-number: got ${property.type}`); + } + } else { + if (!(property instanceof StringValue)) { + throw new Error(`Cannot access property with non-string: got ${property.type}`); + } + value = object.builtins.get(property.value); + } + if (!(value instanceof RuntimeValue)) { + throw new Error(`${object.type} has no property '${property.value}'`); + } + return value; + } + + private evaluateSet(node: SetStatement, environment: Environment): NullValue { + if (node.assignee.type !== "Identifier") { + throw new Error(`Invalid LHS inside assignment expression: ${JSON.stringify(node.assignee)}`); + } + + const variableName = (node.assignee as Identifier).value; + environment.setVariable(variableName, this.evaluate(node.value, environment)); + return new NullValue(); + } + + private evaluateIf(node: If, environment: Environment): StringValue { + const test = this.evaluate(node.test, environment); + return this.evaluateBlock(test.__bool__().value ? node.body : node.alternate, environment); + } + + private evaluateFor(node: For, environment: Environment): StringValue { + // Scope for the for loop + const scope = new Environment(environment); + + const iterable = this.evaluate(node.iterable, scope); + if (!(iterable instanceof ArrayValue)) { + throw new Error(`Expected iterable type in for loop: got ${iterable.type}`); + } + + let result = ""; + + for (let i = 0; i < iterable.value.length; ++i) { + // Update the loop variable + // TODO: Only create object once, then update value? + scope.setVariable( + "loop", + new ObjectValue( + new Map( + ( + [ + ["index", new NumericValue(i + 1)], + ["index0", new NumericValue(i)], + ["first", new BooleanValue(i === 0)], + ["last", new BooleanValue(i === iterable.value.length - 1)], + ["length", new NumericValue(iterable.value.length)], + ] as [string, AnyRuntimeValue][] + ).map(([key, value]) => [key, value]) + ) + ) + ); + + // For this iteration, set the loop variable to the current element + scope.setVariable(node.loopvar.value, iterable.value[i]); + + // Evaluate the body of the for loop + const evaluated = this.evaluateBlock(node.body, scope); + result += evaluated.value; + } + + return new StringValue(result); + } + + evaluate(statement: Statement | undefined, environment: Environment): AnyRuntimeValue { + if (statement === undefined) return new UndefinedValue(); + + switch (statement.type) { + // Program + case "Program": + return this.evalProgram(statement as Program, environment); + + // Statements + case "Set": + return this.evaluateSet(statement as SetStatement, environment); + case "If": + return this.evaluateIf(statement as If, environment); + case "For": + return this.evaluateFor(statement as For, environment); + + // Expressions + case "NumericLiteral": + return new NumericValue(Number((statement as NumericLiteral).value)); + case "StringLiteral": + return new StringValue((statement as StringLiteral).value); + case "BooleanLiteral": + return new BooleanValue((statement as BooleanLiteral).value); + case "Identifier": + return this.evaluateIdentifier(statement as Identifier, environment); + case "CallExpression": + return this.evaluateCallExpression(statement as CallExpression, environment); + case "MemberExpression": + return this.evaluateMemberExpression(statement as MemberExpression, environment); + + case "UnaryExpression": + return this.evaluateUnaryExpression(statement as UnaryExpression, environment); + case "BinaryExpression": + return this.evaluateBinaryExpression(statement as BinaryExpression, environment); + case "FilterExpression": + return this.evaluateFilterExpression(statement as FilterExpression, environment); + + default: + throw new SyntaxError(`Unknown node type: ${statement.type}`); + } + } +} + +/** + * Helper function to convert JavaScript values to runtime values. + */ +function convertToRuntimeValues(input: unknown): AnyRuntimeValue { + switch (typeof input) { + case "number": + return new NumericValue(input); + case "string": + return new StringValue(input); + case "boolean": + return new BooleanValue(input); + case "object": + if (input === null) { + return new NullValue(); + } else if (Array.isArray(input)) { + return new ArrayValue(input.map(convertToRuntimeValues)); + } else { + return new ObjectValue( + new Map(Object.entries(input).map(([key, value]) => [key, convertToRuntimeValues(value)])) + ); + } + case "function": + // Wrap the user's function in a runtime function + // eslint-disable-next-line @typescript-eslint/no-unused-vars + return new FunctionValue((args, _scope) => { + // NOTE: `_scope` is not used since it's in the global scope + const result = input(...args.map((x) => x.value)) ?? null; // map undefined -> null + return convertToRuntimeValues(result); + }); + default: + throw new Error(`Cannot convert to runtime value: ${input}`); + } +} diff --git a/packages/jinja/src/utils.ts b/packages/jinja/src/utils.ts new file mode 100644 index 0000000000000000000000000000000000000000..919d97f99d297b213485750adefa0cca4197ab3c --- /dev/null +++ b/packages/jinja/src/utils.ts @@ -0,0 +1,25 @@ +/** + * Function that mimics Python's array slicing. + * @param array The array to slice. + * @param start The start index of the slice. Defaults to 0. + * @param stop The last index of the slice. Defaults to `array.length`. + * @param step The step value of the slice. Defaults to 1. + * @returns The sliced array. + */ +export function slice(array: T[], start?: number, stop?: number, step = 1): T[] { + const direction = Math.sign(step); + + if (direction >= 0) { + start = (start ??= 0) < 0 ? Math.max(array.length + start, 0) : Math.min(start, array.length); + stop = (stop ??= array.length) < 0 ? Math.max(array.length + stop, 0) : Math.min(stop, array.length); + } else { + start = (start ??= array.length - 1) < 0 ? Math.max(array.length + start, -1) : Math.min(start, array.length - 1); + stop = (stop ??= -1) < -1 ? Math.max(array.length + stop, -1) : Math.min(stop, array.length - 1); + } + + const result: T[] = []; + for (let i = start; direction * i < direction * stop; i += step) { + result.push(array[i]); + } + return result; +} diff --git a/packages/jinja/test/.gitignore b/packages/jinja/test/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..b05c2dfa7007b8d5aa3c10db9df63fb2e1a82c67 --- /dev/null +++ b/packages/jinja/test/.gitignore @@ -0,0 +1 @@ +__snapshots__ diff --git a/packages/jinja/test/e2e.test.js b/packages/jinja/test/e2e.test.js new file mode 100644 index 0000000000000000000000000000000000000000..9b12344b09060ffa02f5c02b7f3fefc8d68b3b72 --- /dev/null +++ b/packages/jinja/test/e2e.test.js @@ -0,0 +1,172 @@ +import { describe, expect, it } from "vitest"; + +import { Template } from "../src/index"; + +import { downloadFile } from "@huggingface/hub"; + +const EXAMPLE_CHAT = [ + { role: "user", content: "Hello, how are you?" }, + { role: "assistant", content: "I'm doing great. How can I help you today?" }, + { role: "user", content: "I'd like to show off how chat templating works!" }, +]; + +const EXAMPLE_CHAT_WITH_SYTEM = [ + { + role: "system", + content: "You are a friendly chatbot who always responds in the style of a pirate", + }, + ...EXAMPLE_CHAT, +]; + +/** + * Defined in https://github.com/huggingface/transformers + * Keys correspond to `model_type` in the transformers repo. + */ +const TEST_DEFAULT_TEMPLATES = Object.freeze({ + _base: { + chat_template: `{% for message in messages %}{{'<|im_start|>' + message['role'] + '\n' + message['content'] + '<|im_end|>' + '\n'}}{% endfor %}{% if add_generation_prompt %}{{ '<|im_start|>assistant\n' }}{% endif %}`, + data: { + messages: EXAMPLE_CHAT, + add_generation_prompt: false, + }, + target: `<|im_start|>user\nHello, how are you?<|im_end|>\n<|im_start|>assistant\nI'm doing great. How can I help you today?<|im_end|>\n<|im_start|>user\nI'd like to show off how chat templating works!<|im_end|>\n`, + }, + blenderbot: { + // facebook/blenderbot-400M-distill + chat_template: `{% for message in messages %}{% if message['role'] == 'user' %}{{ ' ' }}{% endif %}{{ message['content'] }}{% if not loop.last %}{{ ' ' }}{% endif %}{% endfor %}{{ eos_token }}`, + data: { + messages: EXAMPLE_CHAT, + eos_token: "", + }, + target: ` Hello, how are you? I'm doing great. How can I help you today? I'd like to show off how chat templating works!`, + }, + blenderbot_small: { + // facebook/blenderbot_small-90M + chat_template: `{% for message in messages %}{% if message['role'] == 'user' %}{{ ' ' }}{% endif %}{{ message['content'] }}{% if not loop.last %}{{ ' ' }}{% endif %}{% endfor %}{{ eos_token }}`, + data: { + messages: EXAMPLE_CHAT, + eos_token: "", + }, + target: ` Hello, how are you? I'm doing great. How can I help you today? I'd like to show off how chat templating works!`, + }, + bloom: { + // bigscience/bloom + chat_template: `{% for message in messages %}{{ message.content }}{{ eos_token }}{% endfor %}`, + data: { + messages: EXAMPLE_CHAT, + eos_token: "", + }, + target: `Hello, how are you?I'm doing great. How can I help you today?I'd like to show off how chat templating works!`, + }, + gpt_neox: { + // EleutherAI/gpt-neox-20b + chat_template: `{% for message in messages %}{{ message.content }}{{ eos_token }}{% endfor %}`, + data: { + messages: EXAMPLE_CHAT, + eos_token: "<|endoftext|>", + }, + target: `Hello, how are you?<|endoftext|>I'm doing great. How can I help you today?<|endoftext|>I'd like to show off how chat templating works!<|endoftext|>`, + }, + gpt2: { + // gpt2 + chat_template: `{% for message in messages %}{{ message.content }}{{ eos_token }}{% endfor %}`, + data: { + messages: EXAMPLE_CHAT, + eos_token: "<|endoftext|>", + }, + target: `Hello, how are you?<|endoftext|>I'm doing great. How can I help you today?<|endoftext|>I'd like to show off how chat templating works!<|endoftext|>`, + }, + llama: { + // hf-internal-testing/llama-tokenizer + chat_template: `{% if messages[0]['role'] == 'system' %}{% set loop_messages = messages[1:] %}{% set system_message = messages[0]['content'] %}{% elif USE_DEFAULT_PROMPT == true and not '<>' in messages[0]['content'] %}{% set loop_messages = messages %}{% set system_message = 'DEFAULT_SYSTEM_MESSAGE' %}{% else %}{% set loop_messages = messages %}{% set system_message = false %}{% endif %}{% for message in loop_messages %}{% if (message['role'] == 'user') != (loop.index0 % 2 == 0) %}{{ raise_exception('Conversation roles must alternate user/assistant/user/assistant/...') }}{% endif %}{% if loop.index0 == 0 and system_message != false %}{% set content = '<>\\n' + system_message + '\\n<>\\n\\n' + message['content'] %}{% else %}{% set content = message['content'] %}{% endif %}{% if message['role'] == 'user' %}{{ bos_token + '[INST] ' + content.strip() + ' [/INST]' }}{% elif message['role'] == 'system' %}{{ '<>\\n' + content.strip() + '\\n<>\\n\\n' }}{% elif message['role'] == 'assistant' %}{{ ' ' + content.strip() + ' ' + eos_token }}{% endif %}{% endfor %}`, + data: { + messages: EXAMPLE_CHAT_WITH_SYTEM, + bos_token: "", + eos_token: "", + USE_DEFAULT_PROMPT: true, + }, + target: `[INST] <>\nYou are a friendly chatbot who always responds in the style of a pirate\n<>\n\nHello, how are you? [/INST] I'm doing great. How can I help you today? [INST] I'd like to show off how chat templating works! [/INST]`, + }, + whisper: { + // openai/whisper-large-v3 + chat_template: `{% for message in messages %}{{ message.content }}{{ eos_token }}{% endfor %}`, + data: { + messages: EXAMPLE_CHAT, + eos_token: "<|endoftext|>", + }, + target: `Hello, how are you?<|endoftext|>I'm doing great. How can I help you today?<|endoftext|>I'd like to show off how chat templating works!<|endoftext|>`, + }, +}); + +/** + * Custom templates that are not defined in the transformers repo. + * Keys are repo ids on the Hugging Face Hub (https://hf.co/models) + */ +const TEST_CUSTOM_TEMPLATES = Object.freeze({ + "HuggingFaceH4/zephyr-7b-beta (add_generation_prompt=false)": { + chat_template: `{% for message in messages %}\n{% if message['role'] == 'user' %}\n{{ '<|user|>\n' + message['content'] + eos_token }}\n{% elif message['role'] == 'system' %}\n{{ '<|system|>\n' + message['content'] + eos_token }}\n{% elif message['role'] == 'assistant' %}\n{{ '<|assistant|>\n' + message['content'] + eos_token }}\n{% endif %}\n{% if loop.last and add_generation_prompt %}\n{{ '<|assistant|>' }}\n{% endif %}\n{% endfor %}`, + data: { + messages: EXAMPLE_CHAT_WITH_SYTEM, + eos_token: "", + add_generation_prompt: false, + }, + target: `<|system|>\nYou are a friendly chatbot who always responds in the style of a pirate\n<|user|>\nHello, how are you?\n<|assistant|>\nI'm doing great. How can I help you today?\n<|user|>\nI'd like to show off how chat templating works!\n`, + }, + "HuggingFaceH4/zephyr-7b-beta (add_generation_prompt=true)": { + chat_template: `{% for message in messages %}\n{% if message['role'] == 'user' %}\n{{ '<|user|>\n' + message['content'] + eos_token }}\n{% elif message['role'] == 'system' %}\n{{ '<|system|>\n' + message['content'] + eos_token }}\n{% elif message['role'] == 'assistant' %}\n{{ '<|assistant|>\n' + message['content'] + eos_token }}\n{% endif %}\n{% if loop.last and add_generation_prompt %}\n{{ '<|assistant|>' }}\n{% endif %}\n{% endfor %}`, + data: { + messages: [ + { role: "system", content: "You are a friendly chatbot who always responds in the style of a pirate" }, + { role: "user", content: "How many helicopters can a human eat in one sitting?" }, + ], + eos_token: "", + add_generation_prompt: true, + }, + target: `<|system|>\nYou are a friendly chatbot who always responds in the style of a pirate\n<|user|>\nHow many helicopters can a human eat in one sitting?\n<|assistant|>\n`, + }, + "mistralai/Mistral-7B-Instruct-v0.1": { + chat_template: `{{ bos_token }}{% for message in messages %}{% if (message['role'] == 'user') != (loop.index0 % 2 == 0) %}{{ raise_exception('Conversation roles must alternate user/assistant/user/assistant/...') }}{% endif %}{% if message['role'] == 'user' %}{{ '[INST] ' + message['content'] + ' [/INST]' }}{% elif message['role'] == 'assistant' %}{{ message['content'] + eos_token + ' ' }}{% else %}{{ raise_exception('Only user and assistant roles are supported!') }}{% endif %}{% endfor %}`, + data: { + messages: EXAMPLE_CHAT, + bos_token: "", + eos_token: "", + }, + target: `[INST] Hello, how are you? [/INST]I'm doing great. How can I help you today? [INST] I'd like to show off how chat templating works! [/INST]`, + }, +}); + +describe("End-to-end tests", () => { + describe("Default templates", async () => { + for (const [model_type, test_data] of Object.entries(TEST_DEFAULT_TEMPLATES)) { + it(model_type, async () => { + const template = new Template(test_data.chat_template); + const result = template.render(test_data.data); + expect(result).toEqual(test_data.target); + }); + } + }); + + describe("Custom templates", async () => { + for (const [model_type, test_data] of Object.entries(TEST_CUSTOM_TEMPLATES)) { + it(model_type, async () => { + const template = new Template(test_data.chat_template); + const result = template.render(test_data.data); + expect(result).toEqual(test_data.target); + }); + } + }); + + it("should parse a chat template from the Hugging Face Hub", async () => { + const repo = "mistralai/Mistral-7B-Instruct-v0.1"; + const tokenizerConfig = await ( + await downloadFile({ + repo, + path: "tokenizer_config.json", + }) + ).json(); + + const template = new Template(tokenizerConfig.chat_template); + const result = template.render(TEST_CUSTOM_TEMPLATES[repo].data); + expect(result).toEqual(TEST_CUSTOM_TEMPLATES[repo].target); + }); +}); diff --git a/packages/jinja/test/templates.test.js b/packages/jinja/test/templates.test.js new file mode 100644 index 0000000000000000000000000000000000000000..ee4ceefe3c3215ef9a55426524e6e393366b8765 --- /dev/null +++ b/packages/jinja/test/templates.test.js @@ -0,0 +1,1847 @@ +import { describe, expect, it } from "vitest"; + +import { tokenize } from "../src/lexer"; +import { parse } from "../src/parser"; +import { Environment, Interpreter } from "../src/runtime"; + +const TEST_STRINGS = { + // Text nodes + NO_TEMPLATE: `Hello world!`, + TEXT_NODES: `0{{ 'A' }}1{{ 'B' }}{{ 'C' }}2{{ 'D' }}3`, + + // Logical operators + LOGICAL_AND: `{{ true and true }}{{ true and false }}{{ false and true }}{{ false and false }}`, + LOGICAL_OR: `{{ true or true }}{{ true or false }}{{ false or true }}{{ false or false }}`, + LOGICAL_NOT: `{{ not true }}{{ not false }}`, + LOGICAL_NOT_NOT: `{{ not not true }}{{ not not false }}`, + LOGICAL_AND_OR: `{{ true and true or false }}{{ true and false or true }}{{ false and true or true }}{{ false and false or true }}{{ false and false or false }}`, + LOGICAL_AND_NOT: `{{ true and not true }}{{ true and not false }}{{ false and not true }}{{ false and not false }}`, + LOGICAL_OR_NOT: `{{ true or not true }}{{ true or not false }}{{ false or not true }}{{ false or not false }}`, + LOGICAL_COMBINED: `{{ 1 == 2 and 2 == 2 }}{{ 1 == 2 or 2 == 2}}`, + + // If statements + IF_ONLY: `{% if 1 == 1 %}{{ 'A' }}{% endif %}{{ 'B' }}`, + IF_ELSE_ONLY: `{% if 1 == 2 %}{{ 'A' }}{% else %}{{ 'B' }}{% endif %}{{ 'C' }}`, + IF_ELIF_ELSE: `{% if 1 == 2 %}{{ 'A' }}{{ 'B' }}{{ 'C' }}{% elif 1 == 2 %}{{ 'D' }}{% elif 1 == 3 %}{{ 'E' }}{{ 'F' }}{% else %}{{ 'G' }}{{ 'H' }}{{ 'I' }}{% endif %}{{ 'J' }}`, + NESTED_STATEMENTS: `{% set a = 0 %}{% set b = 0 %}{% set c = 0 %}{% set d = 0 %}{% if 1 == 1 %}{% set a = 2 %}{% set b = 3 %}{% elif 1 == 2 %}{% set c = 4 %}{% else %}{% set d = 5 %}{% endif %}{{ a }}{{ b }}{{ c }}{{ d }}`, + + // For loops + FOR_LOOP: `{% for message in messages %}{{ message['content'] }}{% endfor %}`, + + // Set variables + VARIABLES: `{% set x = 'Hello' %}{% set y = 'World' %}{{ x + ' ' + y }}`, + + // Numbers + NUMBERS: `|{{ 5 }}|{{ -5 }}|{{ add(3, -1) }}|{{ (3 - 1) + (a - 5) - (a + 5)}}|`, + + // Binary expressions + BINOP_EXPR: `{{ 1 % 2 }}{{ 1 < 2 }}{{ 1 > 2 }}{{ 1 >= 2 }}{{ 2 <= 2 }}{{ 2 == 2 }}{{ 2 != 3 }}{{ 2 + 3 }}`, + + // Strings + STRINGS: `{{ 'Bye' }}{{ bos_token + '[INST] ' }}`, + + // Function calls + FUNCTIONS: `{{ func() }}{{ func(apple) }}{{ func(x, 'test', 2, false) }}`, + + // Object properties + PROPERTIES: `{{ obj.x + obj.y }}{{ obj['x'] + obj.y }}`, + + // Object methods + OBJ_METHODS: `{{ obj.x(x, y) }}{{ ' ' + obj.x() + ' ' }}{{ obj.z[x](x, y) }}`, + STRING_METHODS: `{{ ' A '.strip() }}{% set x = ' B ' %}{{ x.strip() }}{% set y = ' aBcD ' %}{{ y.upper() }}{{ y.lower() }}`, + + // String indexing and slicing + STRING_SLICING: `|{{ x[0] }}|{{ x[:] }}|{{ x[:3] }}|{{ x[1:4] }}|{{ x[1:-1] }}|{{ x[1::2] }}|{{ x[5::-1] }}|`, + + // Array indexing and slicing + ARRAY_SLICING: `|{{ strings[0] }}|{% for s in strings[:] %}{{ s }}{% endfor %}|{% for s in strings[:3] %}{{ s }}{% endfor %}|{% for s in strings[1:4] %}{{ s }}{% endfor %}|{% for s in strings[1:-1] %}{{ s }}{% endfor %}|{% for s in strings[1::2] %}{{ s }}{% endfor %}|{% for s in strings[5::-1] %}{{ s }}{% endfor %}|`, + + // Membership operators + MEMBERSHIP: `|{{ 0 in arr }}|{{ 1 in arr }}|{{ true in arr }}|{{ false in arr }}|{{ 'a' in arr }}|{{ 'b' in arr }}|`, + MEMBERSHIP_NEGATION_1: `|{{ not 0 in arr }}|{{ not 1 in arr }}|{{ not true in arr }}|{{ not false in arr }}|{{ not 'a' in arr }}|{{ not 'b' in arr }}|`, + MEMBERSHIP_NEGATION_2: `|{{ 0 not in arr }}|{{ 1 not in arr }}|{{ true not in arr }}|{{ false not in arr }}|{{ 'a' not in arr }}|{{ 'b' not in arr }}|`, + + // Escaped characters + ESCAPED_CHARS: `{{ '\\n' }}{{ '\\t' }}{{ '\\'' }}{{ '\\"' }}{{ '\\\\' }}{{ '|\\n|\\t|\\'|\\"|\\\\|' }}`, + + // Substring inclusion + SUBSTRING_INCLUSION: `|{{ '' in 'abc' }}|{{ 'a' in 'abc' }}|{{ 'd' in 'abc' }}|{{ 'ab' in 'abc' }}|{{ 'ac' in 'abc' }}|{{ 'abc' in 'abc' }}|{{ 'abcd' in 'abc' }}|`, + + // Filter operator + FILTER_OPERATOR: `{{ arr | length }}{{ 1 + arr | length }}{{ 2 + arr | sort | length }}{{ (arr | sort)[0] }}`, + FILTER_OPERATOR_2: `|{{ 'abc' | length }}|{{ 'aBcD' | upper }}|{{ 'aBcD' | lower }}|{{ 'test test' | capitalize}}|{{ 'test test' | title }}|{{ ' a b ' | trim }}|{{ ' A B ' | trim | lower | length }}|`, + FILTER_OPERATOR_3: `|{{ -1 | abs }}|{{ 1 | abs }}|`, + + // Logical operators between non-Booleans + BOOLEAN_NUMERICAL: `|{{ 1 and 2 }}|{{ 1 and 0 }}|{{ 0 and 1 }}|{{ 0 and 0 }}|{{ 1 or 2 }}|{{ 1 or 0 }}|{{ 0 or 1 }}|{{ 0 or 0 }}|{{ not 1 }}|{{ not 0 }}|`, + BOOLEAN_STRINGS: `|{{ 'a' and 'b' }}|{{ 'a' and '' }}|{{ '' and 'a' }}|{{ '' and '' }}|{{ 'a' or 'b' }}|{{ 'a' or '' }}|{{ '' or 'a' }}|{{ '' or '' }}|{{ not 'a' }}|{{ not '' }}|`, + BOOLEAN_MIXED: `|{{ true and 1 }}|{{ true and 0 }}|{{ false and 1 }}|{{ false and 0 }}|{{ true or 1 }}|{{ true or 0 }}|{{ false or 1 }}|{{ false or 0 }}|`, + BOOLEAN_MIXED_2: `|{{ true and '' }}|{{ true and 'a' }}|{{ false or '' }}|{{ false or 'a' }}|{{ '' and true }}|{{ 'a' and true }}|{{ '' or false }}|{{ 'a' or false }}|`, + BOOLEAN_MIXED_IF: `{% if '' %}{{ 'A' }}{% endif %}{% if 'a' %}{{ 'B' }}{% endif %}{% if true and '' %}{{ 'C' }}{% endif %}{% if true and 'a' %}{{ 'D' }}{% endif %}`, +}; + +const TEST_PARSED = { + // Text nodes + NO_TEMPLATE: [{ value: "Hello world!", type: "Text" }], + TEXT_NODES: [ + { value: "0", type: "Text" }, + { value: "{{", type: "OpenExpression" }, + { value: "A", type: "StringLiteral" }, + { value: "}}", type: "CloseExpression" }, + { value: "1", type: "Text" }, + { value: "{{", type: "OpenExpression" }, + { value: "B", type: "StringLiteral" }, + { value: "}}", type: "CloseExpression" }, + { value: "{{", type: "OpenExpression" }, + { value: "C", type: "StringLiteral" }, + { value: "}}", type: "CloseExpression" }, + { value: "2", type: "Text" }, + { value: "{{", type: "OpenExpression" }, + { value: "D", type: "StringLiteral" }, + { value: "}}", type: "CloseExpression" }, + { value: "3", type: "Text" }, + ], + + // Logical operators + LOGICAL_AND: [ + { value: "{{", type: "OpenExpression" }, + { value: "true", type: "BooleanLiteral" }, + { value: "and", type: "And" }, + { value: "true", type: "BooleanLiteral" }, + { value: "}}", type: "CloseExpression" }, + { value: "{{", type: "OpenExpression" }, + { value: "true", type: "BooleanLiteral" }, + { value: "and", type: "And" }, + { value: "false", type: "BooleanLiteral" }, + { value: "}}", type: "CloseExpression" }, + { value: "{{", type: "OpenExpression" }, + { value: "false", type: "BooleanLiteral" }, + { value: "and", type: "And" }, + { value: "true", type: "BooleanLiteral" }, + { value: "}}", type: "CloseExpression" }, + { value: "{{", type: "OpenExpression" }, + { value: "false", type: "BooleanLiteral" }, + { value: "and", type: "And" }, + { value: "false", type: "BooleanLiteral" }, + { value: "}}", type: "CloseExpression" }, + ], + LOGICAL_OR: [ + { value: "{{", type: "OpenExpression" }, + { value: "true", type: "BooleanLiteral" }, + { value: "or", type: "Or" }, + { value: "true", type: "BooleanLiteral" }, + { value: "}}", type: "CloseExpression" }, + { value: "{{", type: "OpenExpression" }, + { value: "true", type: "BooleanLiteral" }, + { value: "or", type: "Or" }, + { value: "false", type: "BooleanLiteral" }, + { value: "}}", type: "CloseExpression" }, + { value: "{{", type: "OpenExpression" }, + { value: "false", type: "BooleanLiteral" }, + { value: "or", type: "Or" }, + { value: "true", type: "BooleanLiteral" }, + { value: "}}", type: "CloseExpression" }, + { value: "{{", type: "OpenExpression" }, + { value: "false", type: "BooleanLiteral" }, + { value: "or", type: "Or" }, + { value: "false", type: "BooleanLiteral" }, + { value: "}}", type: "CloseExpression" }, + ], + LOGICAL_NOT: [ + { value: "{{", type: "OpenExpression" }, + { value: "not", type: "UnaryOperator" }, + { value: "true", type: "BooleanLiteral" }, + { value: "}}", type: "CloseExpression" }, + { value: "{{", type: "OpenExpression" }, + { value: "not", type: "UnaryOperator" }, + { value: "false", type: "BooleanLiteral" }, + { value: "}}", type: "CloseExpression" }, + ], + LOGICAL_NOT_NOT: [ + { value: "{{", type: "OpenExpression" }, + { value: "not", type: "UnaryOperator" }, + { value: "not", type: "UnaryOperator" }, + { value: "true", type: "BooleanLiteral" }, + { value: "}}", type: "CloseExpression" }, + { value: "{{", type: "OpenExpression" }, + { value: "not", type: "UnaryOperator" }, + { value: "not", type: "UnaryOperator" }, + { value: "false", type: "BooleanLiteral" }, + { value: "}}", type: "CloseExpression" }, + ], + LOGICAL_AND_OR: [ + { value: "{{", type: "OpenExpression" }, + { value: "true", type: "BooleanLiteral" }, + { value: "and", type: "And" }, + { value: "true", type: "BooleanLiteral" }, + { value: "or", type: "Or" }, + { value: "false", type: "BooleanLiteral" }, + { value: "}}", type: "CloseExpression" }, + { value: "{{", type: "OpenExpression" }, + { value: "true", type: "BooleanLiteral" }, + { value: "and", type: "And" }, + { value: "false", type: "BooleanLiteral" }, + { value: "or", type: "Or" }, + { value: "true", type: "BooleanLiteral" }, + { value: "}}", type: "CloseExpression" }, + { value: "{{", type: "OpenExpression" }, + { value: "false", type: "BooleanLiteral" }, + { value: "and", type: "And" }, + { value: "true", type: "BooleanLiteral" }, + { value: "or", type: "Or" }, + { value: "true", type: "BooleanLiteral" }, + { value: "}}", type: "CloseExpression" }, + { value: "{{", type: "OpenExpression" }, + { value: "false", type: "BooleanLiteral" }, + { value: "and", type: "And" }, + { value: "false", type: "BooleanLiteral" }, + { value: "or", type: "Or" }, + { value: "true", type: "BooleanLiteral" }, + { value: "}}", type: "CloseExpression" }, + { value: "{{", type: "OpenExpression" }, + { value: "false", type: "BooleanLiteral" }, + { value: "and", type: "And" }, + { value: "false", type: "BooleanLiteral" }, + { value: "or", type: "Or" }, + { value: "false", type: "BooleanLiteral" }, + { value: "}}", type: "CloseExpression" }, + ], + LOGICAL_AND_NOT: [ + { value: "{{", type: "OpenExpression" }, + { value: "true", type: "BooleanLiteral" }, + { value: "and", type: "And" }, + { value: "not", type: "UnaryOperator" }, + { value: "true", type: "BooleanLiteral" }, + { value: "}}", type: "CloseExpression" }, + { value: "{{", type: "OpenExpression" }, + { value: "true", type: "BooleanLiteral" }, + { value: "and", type: "And" }, + { value: "not", type: "UnaryOperator" }, + { value: "false", type: "BooleanLiteral" }, + { value: "}}", type: "CloseExpression" }, + { value: "{{", type: "OpenExpression" }, + { value: "false", type: "BooleanLiteral" }, + { value: "and", type: "And" }, + { value: "not", type: "UnaryOperator" }, + { value: "true", type: "BooleanLiteral" }, + { value: "}}", type: "CloseExpression" }, + { value: "{{", type: "OpenExpression" }, + { value: "false", type: "BooleanLiteral" }, + { value: "and", type: "And" }, + { value: "not", type: "UnaryOperator" }, + { value: "false", type: "BooleanLiteral" }, + { value: "}}", type: "CloseExpression" }, + ], + LOGICAL_OR_NOT: [ + { value: "{{", type: "OpenExpression" }, + { value: "true", type: "BooleanLiteral" }, + { value: "or", type: "Or" }, + { value: "not", type: "UnaryOperator" }, + { value: "true", type: "BooleanLiteral" }, + { value: "}}", type: "CloseExpression" }, + { value: "{{", type: "OpenExpression" }, + { value: "true", type: "BooleanLiteral" }, + { value: "or", type: "Or" }, + { value: "not", type: "UnaryOperator" }, + { value: "false", type: "BooleanLiteral" }, + { value: "}}", type: "CloseExpression" }, + { value: "{{", type: "OpenExpression" }, + { value: "false", type: "BooleanLiteral" }, + { value: "or", type: "Or" }, + { value: "not", type: "UnaryOperator" }, + { value: "true", type: "BooleanLiteral" }, + { value: "}}", type: "CloseExpression" }, + { value: "{{", type: "OpenExpression" }, + { value: "false", type: "BooleanLiteral" }, + { value: "or", type: "Or" }, + { value: "not", type: "UnaryOperator" }, + { value: "false", type: "BooleanLiteral" }, + { value: "}}", type: "CloseExpression" }, + ], + LOGICAL_COMBINED: [ + { value: "{{", type: "OpenExpression" }, + { value: "1", type: "NumericLiteral" }, + { value: "==", type: "ComparisonBinaryOperator" }, + { value: "2", type: "NumericLiteral" }, + { value: "and", type: "And" }, + { value: "2", type: "NumericLiteral" }, + { value: "==", type: "ComparisonBinaryOperator" }, + { value: "2", type: "NumericLiteral" }, + { value: "}}", type: "CloseExpression" }, + { value: "{{", type: "OpenExpression" }, + { value: "1", type: "NumericLiteral" }, + { value: "==", type: "ComparisonBinaryOperator" }, + { value: "2", type: "NumericLiteral" }, + { value: "or", type: "Or" }, + { value: "2", type: "NumericLiteral" }, + { value: "==", type: "ComparisonBinaryOperator" }, + { value: "2", type: "NumericLiteral" }, + { value: "}}", type: "CloseExpression" }, + ], + + // If statements + IF_ONLY: [ + { value: "{%", type: "OpenStatement" }, + { value: "if", type: "If" }, + { value: "1", type: "NumericLiteral" }, + { value: "==", type: "ComparisonBinaryOperator" }, + { value: "1", type: "NumericLiteral" }, + { value: "%}", type: "CloseStatement" }, + { value: "{{", type: "OpenExpression" }, + { value: "A", type: "StringLiteral" }, + { value: "}}", type: "CloseExpression" }, + { value: "{%", type: "OpenStatement" }, + { value: "endif", type: "EndIf" }, + { value: "%}", type: "CloseStatement" }, + { value: "{{", type: "OpenExpression" }, + { value: "B", type: "StringLiteral" }, + { value: "}}", type: "CloseExpression" }, + ], + IF_ELSE_ONLY: [ + { value: "{%", type: "OpenStatement" }, + { value: "if", type: "If" }, + { value: "1", type: "NumericLiteral" }, + { value: "==", type: "ComparisonBinaryOperator" }, + { value: "2", type: "NumericLiteral" }, + { value: "%}", type: "CloseStatement" }, + { value: "{{", type: "OpenExpression" }, + { value: "A", type: "StringLiteral" }, + { value: "}}", type: "CloseExpression" }, + { value: "{%", type: "OpenStatement" }, + { value: "else", type: "Else" }, + { value: "%}", type: "CloseStatement" }, + { value: "{{", type: "OpenExpression" }, + { value: "B", type: "StringLiteral" }, + { value: "}}", type: "CloseExpression" }, + { value: "{%", type: "OpenStatement" }, + { value: "endif", type: "EndIf" }, + { value: "%}", type: "CloseStatement" }, + { value: "{{", type: "OpenExpression" }, + { value: "C", type: "StringLiteral" }, + { value: "}}", type: "CloseExpression" }, + ], + IF_ELIF_ELSE: [ + { value: "{%", type: "OpenStatement" }, + { value: "if", type: "If" }, + { value: "1", type: "NumericLiteral" }, + { value: "==", type: "ComparisonBinaryOperator" }, + { value: "2", type: "NumericLiteral" }, + { value: "%}", type: "CloseStatement" }, + { value: "{{", type: "OpenExpression" }, + { value: "A", type: "StringLiteral" }, + { value: "}}", type: "CloseExpression" }, + { value: "{{", type: "OpenExpression" }, + { value: "B", type: "StringLiteral" }, + { value: "}}", type: "CloseExpression" }, + { value: "{{", type: "OpenExpression" }, + { value: "C", type: "StringLiteral" }, + { value: "}}", type: "CloseExpression" }, + { value: "{%", type: "OpenStatement" }, + { value: "elif", type: "ElseIf" }, + { value: "1", type: "NumericLiteral" }, + { value: "==", type: "ComparisonBinaryOperator" }, + { value: "2", type: "NumericLiteral" }, + { value: "%}", type: "CloseStatement" }, + { value: "{{", type: "OpenExpression" }, + { value: "D", type: "StringLiteral" }, + { value: "}}", type: "CloseExpression" }, + { value: "{%", type: "OpenStatement" }, + { value: "elif", type: "ElseIf" }, + { value: "1", type: "NumericLiteral" }, + { value: "==", type: "ComparisonBinaryOperator" }, + { value: "3", type: "NumericLiteral" }, + { value: "%}", type: "CloseStatement" }, + { value: "{{", type: "OpenExpression" }, + { value: "E", type: "StringLiteral" }, + { value: "}}", type: "CloseExpression" }, + { value: "{{", type: "OpenExpression" }, + { value: "F", type: "StringLiteral" }, + { value: "}}", type: "CloseExpression" }, + { value: "{%", type: "OpenStatement" }, + { value: "else", type: "Else" }, + { value: "%}", type: "CloseStatement" }, + { value: "{{", type: "OpenExpression" }, + { value: "G", type: "StringLiteral" }, + { value: "}}", type: "CloseExpression" }, + { value: "{{", type: "OpenExpression" }, + { value: "H", type: "StringLiteral" }, + { value: "}}", type: "CloseExpression" }, + { value: "{{", type: "OpenExpression" }, + { value: "I", type: "StringLiteral" }, + { value: "}}", type: "CloseExpression" }, + { value: "{%", type: "OpenStatement" }, + { value: "endif", type: "EndIf" }, + { value: "%}", type: "CloseStatement" }, + { value: "{{", type: "OpenExpression" }, + { value: "J", type: "StringLiteral" }, + { value: "}}", type: "CloseExpression" }, + ], + NESTED_STATEMENTS: [ + { value: "{%", type: "OpenStatement" }, + { value: "set", type: "Set" }, + { value: "a", type: "Identifier" }, + { value: "=", type: "Equals" }, + { value: "0", type: "NumericLiteral" }, + { value: "%}", type: "CloseStatement" }, + { value: "{%", type: "OpenStatement" }, + { value: "set", type: "Set" }, + { value: "b", type: "Identifier" }, + { value: "=", type: "Equals" }, + { value: "0", type: "NumericLiteral" }, + { value: "%}", type: "CloseStatement" }, + { value: "{%", type: "OpenStatement" }, + { value: "set", type: "Set" }, + { value: "c", type: "Identifier" }, + { value: "=", type: "Equals" }, + { value: "0", type: "NumericLiteral" }, + { value: "%}", type: "CloseStatement" }, + { value: "{%", type: "OpenStatement" }, + { value: "set", type: "Set" }, + { value: "d", type: "Identifier" }, + { value: "=", type: "Equals" }, + { value: "0", type: "NumericLiteral" }, + { value: "%}", type: "CloseStatement" }, + { value: "{%", type: "OpenStatement" }, + { value: "if", type: "If" }, + { value: "1", type: "NumericLiteral" }, + { value: "==", type: "ComparisonBinaryOperator" }, + { value: "1", type: "NumericLiteral" }, + { value: "%}", type: "CloseStatement" }, + { value: "{%", type: "OpenStatement" }, + { value: "set", type: "Set" }, + { value: "a", type: "Identifier" }, + { value: "=", type: "Equals" }, + { value: "2", type: "NumericLiteral" }, + { value: "%}", type: "CloseStatement" }, + { value: "{%", type: "OpenStatement" }, + { value: "set", type: "Set" }, + { value: "b", type: "Identifier" }, + { value: "=", type: "Equals" }, + { value: "3", type: "NumericLiteral" }, + { value: "%}", type: "CloseStatement" }, + { value: "{%", type: "OpenStatement" }, + { value: "elif", type: "ElseIf" }, + { value: "1", type: "NumericLiteral" }, + { value: "==", type: "ComparisonBinaryOperator" }, + { value: "2", type: "NumericLiteral" }, + { value: "%}", type: "CloseStatement" }, + { value: "{%", type: "OpenStatement" }, + { value: "set", type: "Set" }, + { value: "c", type: "Identifier" }, + { value: "=", type: "Equals" }, + { value: "4", type: "NumericLiteral" }, + { value: "%}", type: "CloseStatement" }, + { value: "{%", type: "OpenStatement" }, + { value: "else", type: "Else" }, + { value: "%}", type: "CloseStatement" }, + { value: "{%", type: "OpenStatement" }, + { value: "set", type: "Set" }, + { value: "d", type: "Identifier" }, + { value: "=", type: "Equals" }, + { value: "5", type: "NumericLiteral" }, + { value: "%}", type: "CloseStatement" }, + { value: "{%", type: "OpenStatement" }, + { value: "endif", type: "EndIf" }, + { value: "%}", type: "CloseStatement" }, + { value: "{{", type: "OpenExpression" }, + { value: "a", type: "Identifier" }, + { value: "}}", type: "CloseExpression" }, + { value: "{{", type: "OpenExpression" }, + { value: "b", type: "Identifier" }, + { value: "}}", type: "CloseExpression" }, + { value: "{{", type: "OpenExpression" }, + { value: "c", type: "Identifier" }, + { value: "}}", type: "CloseExpression" }, + { value: "{{", type: "OpenExpression" }, + { value: "d", type: "Identifier" }, + { value: "}}", type: "CloseExpression" }, + ], + + // For loops + FOR_LOOP: [ + { value: "{%", type: "OpenStatement" }, + { value: "for", type: "For" }, + { value: "message", type: "Identifier" }, + { value: "in", type: "In" }, + { value: "messages", type: "Identifier" }, + { value: "%}", type: "CloseStatement" }, + { value: "{{", type: "OpenExpression" }, + { value: "message", type: "Identifier" }, + { value: "[", type: "OpenSquareBracket" }, + { value: "content", type: "StringLiteral" }, + { value: "]", type: "CloseSquareBracket" }, + { value: "}}", type: "CloseExpression" }, + { value: "{%", type: "OpenStatement" }, + { value: "endfor", type: "EndFor" }, + { value: "%}", type: "CloseStatement" }, + ], + + // Set variables + VARIABLES: [ + { value: "{%", type: "OpenStatement" }, + { value: "set", type: "Set" }, + { value: "x", type: "Identifier" }, + { value: "=", type: "Equals" }, + { value: "Hello", type: "StringLiteral" }, + { value: "%}", type: "CloseStatement" }, + { value: "{%", type: "OpenStatement" }, + { value: "set", type: "Set" }, + { value: "y", type: "Identifier" }, + { value: "=", type: "Equals" }, + { value: "World", type: "StringLiteral" }, + { value: "%}", type: "CloseStatement" }, + { value: "{{", type: "OpenExpression" }, + { value: "x", type: "Identifier" }, + { value: "+", type: "AdditiveBinaryOperator" }, + { value: " ", type: "StringLiteral" }, + { value: "+", type: "AdditiveBinaryOperator" }, + { value: "y", type: "Identifier" }, + { value: "}}", type: "CloseExpression" }, + ], + + // Numbers + NUMBERS: [ + { value: "|", type: "Text" }, + { value: "{{", type: "OpenExpression" }, + { value: "5", type: "NumericLiteral" }, + { value: "}}", type: "CloseExpression" }, + { value: "|", type: "Text" }, + { value: "{{", type: "OpenExpression" }, + { value: "-5", type: "NumericLiteral" }, + { value: "}}", type: "CloseExpression" }, + { value: "|", type: "Text" }, + { value: "{{", type: "OpenExpression" }, + { value: "add", type: "Identifier" }, + { value: "(", type: "OpenParen" }, + { value: "3", type: "NumericLiteral" }, + { value: ",", type: "Comma" }, + { value: "-1", type: "NumericLiteral" }, + { value: ")", type: "CloseParen" }, + { value: "}}", type: "CloseExpression" }, + { value: "|", type: "Text" }, + { value: "{{", type: "OpenExpression" }, + { value: "(", type: "OpenParen" }, + { value: "3", type: "NumericLiteral" }, + { value: "-", type: "AdditiveBinaryOperator" }, + { value: "1", type: "NumericLiteral" }, + { value: ")", type: "CloseParen" }, + { value: "+", type: "AdditiveBinaryOperator" }, + { value: "(", type: "OpenParen" }, + { value: "a", type: "Identifier" }, + { value: "-", type: "AdditiveBinaryOperator" }, + { value: "5", type: "NumericLiteral" }, + { value: ")", type: "CloseParen" }, + { value: "-", type: "AdditiveBinaryOperator" }, + { value: "(", type: "OpenParen" }, + { value: "a", type: "Identifier" }, + { value: "+", type: "AdditiveBinaryOperator" }, + { value: "5", type: "NumericLiteral" }, + { value: ")", type: "CloseParen" }, + { value: "}}", type: "CloseExpression" }, + { value: "|", type: "Text" }, + ], + + // Binary expressions + BINOP_EXPR: [ + { value: "{{", type: "OpenExpression" }, + { value: "1", type: "NumericLiteral" }, + { value: "%", type: "MultiplicativeBinaryOperator" }, + { value: "2", type: "NumericLiteral" }, + { value: "}}", type: "CloseExpression" }, + { value: "{{", type: "OpenExpression" }, + { value: "1", type: "NumericLiteral" }, + { value: "<", type: "ComparisonBinaryOperator" }, + { value: "2", type: "NumericLiteral" }, + { value: "}}", type: "CloseExpression" }, + { value: "{{", type: "OpenExpression" }, + { value: "1", type: "NumericLiteral" }, + { value: ">", type: "ComparisonBinaryOperator" }, + { value: "2", type: "NumericLiteral" }, + { value: "}}", type: "CloseExpression" }, + { value: "{{", type: "OpenExpression" }, + { value: "1", type: "NumericLiteral" }, + { value: ">=", type: "ComparisonBinaryOperator" }, + { value: "2", type: "NumericLiteral" }, + { value: "}}", type: "CloseExpression" }, + { value: "{{", type: "OpenExpression" }, + { value: "2", type: "NumericLiteral" }, + { value: "<=", type: "ComparisonBinaryOperator" }, + { value: "2", type: "NumericLiteral" }, + { value: "}}", type: "CloseExpression" }, + { value: "{{", type: "OpenExpression" }, + { value: "2", type: "NumericLiteral" }, + { value: "==", type: "ComparisonBinaryOperator" }, + { value: "2", type: "NumericLiteral" }, + { value: "}}", type: "CloseExpression" }, + { value: "{{", type: "OpenExpression" }, + { value: "2", type: "NumericLiteral" }, + { value: "!=", type: "ComparisonBinaryOperator" }, + { value: "3", type: "NumericLiteral" }, + { value: "}}", type: "CloseExpression" }, + { value: "{{", type: "OpenExpression" }, + { value: "2", type: "NumericLiteral" }, + { value: "+", type: "AdditiveBinaryOperator" }, + { value: "3", type: "NumericLiteral" }, + { value: "}}", type: "CloseExpression" }, + ], + + // Strings + STRINGS: [ + { value: "{{", type: "OpenExpression" }, + { value: "Bye", type: "StringLiteral" }, + { value: "}}", type: "CloseExpression" }, + { value: "{{", type: "OpenExpression" }, + { value: "bos_token", type: "Identifier" }, + { value: "+", type: "AdditiveBinaryOperator" }, + { value: "[INST] ", type: "StringLiteral" }, + { value: "}}", type: "CloseExpression" }, + ], + + // Function calls + FUNCTIONS: [ + { value: "{{", type: "OpenExpression" }, + { value: "func", type: "Identifier" }, + { value: "(", type: "OpenParen" }, + { value: ")", type: "CloseParen" }, + { value: "}}", type: "CloseExpression" }, + { value: "{{", type: "OpenExpression" }, + { value: "func", type: "Identifier" }, + { value: "(", type: "OpenParen" }, + { value: "apple", type: "Identifier" }, + { value: ")", type: "CloseParen" }, + { value: "}}", type: "CloseExpression" }, + { value: "{{", type: "OpenExpression" }, + { value: "func", type: "Identifier" }, + { value: "(", type: "OpenParen" }, + { value: "x", type: "Identifier" }, + { value: ",", type: "Comma" }, + { value: "test", type: "StringLiteral" }, + { value: ",", type: "Comma" }, + { value: "2", type: "NumericLiteral" }, + { value: ",", type: "Comma" }, + { value: "false", type: "BooleanLiteral" }, + { value: ")", type: "CloseParen" }, + { value: "}}", type: "CloseExpression" }, + ], + + // Object properties + PROPERTIES: [ + { value: "{{", type: "OpenExpression" }, + { value: "obj", type: "Identifier" }, + { value: ".", type: "Dot" }, + { value: "x", type: "Identifier" }, + { value: "+", type: "AdditiveBinaryOperator" }, + { value: "obj", type: "Identifier" }, + { value: ".", type: "Dot" }, + { value: "y", type: "Identifier" }, + { value: "}}", type: "CloseExpression" }, + { value: "{{", type: "OpenExpression" }, + { value: "obj", type: "Identifier" }, + { value: "[", type: "OpenSquareBracket" }, + { value: "x", type: "StringLiteral" }, + { value: "]", type: "CloseSquareBracket" }, + { value: "+", type: "AdditiveBinaryOperator" }, + { value: "obj", type: "Identifier" }, + { value: ".", type: "Dot" }, + { value: "y", type: "Identifier" }, + { value: "}}", type: "CloseExpression" }, + ], + + // Object methods + OBJ_METHODS: [ + { value: "{{", type: "OpenExpression" }, + { value: "obj", type: "Identifier" }, + { value: ".", type: "Dot" }, + { value: "x", type: "Identifier" }, + { value: "(", type: "OpenParen" }, + { value: "x", type: "Identifier" }, + { value: ",", type: "Comma" }, + { value: "y", type: "Identifier" }, + { value: ")", type: "CloseParen" }, + { value: "}}", type: "CloseExpression" }, + { value: "{{", type: "OpenExpression" }, + { value: " ", type: "StringLiteral" }, + { value: "+", type: "AdditiveBinaryOperator" }, + { value: "obj", type: "Identifier" }, + { value: ".", type: "Dot" }, + { value: "x", type: "Identifier" }, + { value: "(", type: "OpenParen" }, + { value: ")", type: "CloseParen" }, + { value: "+", type: "AdditiveBinaryOperator" }, + { value: " ", type: "StringLiteral" }, + { value: "}}", type: "CloseExpression" }, + { value: "{{", type: "OpenExpression" }, + { value: "obj", type: "Identifier" }, + { value: ".", type: "Dot" }, + { value: "z", type: "Identifier" }, + { value: "[", type: "OpenSquareBracket" }, + { value: "x", type: "Identifier" }, + { value: "]", type: "CloseSquareBracket" }, + { value: "(", type: "OpenParen" }, + { value: "x", type: "Identifier" }, + { value: ",", type: "Comma" }, + { value: "y", type: "Identifier" }, + { value: ")", type: "CloseParen" }, + { value: "}}", type: "CloseExpression" }, + ], + + // String methods + STRING_METHODS: [ + { value: "{{", type: "OpenExpression" }, + { value: " A ", type: "StringLiteral" }, + { value: ".", type: "Dot" }, + { value: "strip", type: "Identifier" }, + { value: "(", type: "OpenParen" }, + { value: ")", type: "CloseParen" }, + { value: "}}", type: "CloseExpression" }, + { value: "{%", type: "OpenStatement" }, + { value: "set", type: "Set" }, + { value: "x", type: "Identifier" }, + { value: "=", type: "Equals" }, + { value: " B ", type: "StringLiteral" }, + { value: "%}", type: "CloseStatement" }, + { value: "{{", type: "OpenExpression" }, + { value: "x", type: "Identifier" }, + { value: ".", type: "Dot" }, + { value: "strip", type: "Identifier" }, + { value: "(", type: "OpenParen" }, + { value: ")", type: "CloseParen" }, + { value: "}}", type: "CloseExpression" }, + { value: "{%", type: "OpenStatement" }, + { value: "set", type: "Set" }, + { value: "y", type: "Identifier" }, + { value: "=", type: "Equals" }, + { value: " aBcD ", type: "StringLiteral" }, + { value: "%}", type: "CloseStatement" }, + { value: "{{", type: "OpenExpression" }, + { value: "y", type: "Identifier" }, + { value: ".", type: "Dot" }, + { value: "upper", type: "Identifier" }, + { value: "(", type: "OpenParen" }, + { value: ")", type: "CloseParen" }, + { value: "}}", type: "CloseExpression" }, + { value: "{{", type: "OpenExpression" }, + { value: "y", type: "Identifier" }, + { value: ".", type: "Dot" }, + { value: "lower", type: "Identifier" }, + { value: "(", type: "OpenParen" }, + { value: ")", type: "CloseParen" }, + { value: "}}", type: "CloseExpression" }, + ], + + // String indexing and slicing + STRING_SLICING: [ + { value: "|", type: "Text" }, + { value: "{{", type: "OpenExpression" }, + { value: "x", type: "Identifier" }, + { value: "[", type: "OpenSquareBracket" }, + { value: "0", type: "NumericLiteral" }, + { value: "]", type: "CloseSquareBracket" }, + { value: "}}", type: "CloseExpression" }, + { value: "|", type: "Text" }, + { value: "{{", type: "OpenExpression" }, + { value: "x", type: "Identifier" }, + { value: "[", type: "OpenSquareBracket" }, + { value: ":", type: "Colon" }, + { value: "]", type: "CloseSquareBracket" }, + { value: "}}", type: "CloseExpression" }, + { value: "|", type: "Text" }, + { value: "{{", type: "OpenExpression" }, + { value: "x", type: "Identifier" }, + { value: "[", type: "OpenSquareBracket" }, + { value: ":", type: "Colon" }, + { value: "3", type: "NumericLiteral" }, + { value: "]", type: "CloseSquareBracket" }, + { value: "}}", type: "CloseExpression" }, + { value: "|", type: "Text" }, + { value: "{{", type: "OpenExpression" }, + { value: "x", type: "Identifier" }, + { value: "[", type: "OpenSquareBracket" }, + { value: "1", type: "NumericLiteral" }, + { value: ":", type: "Colon" }, + { value: "4", type: "NumericLiteral" }, + { value: "]", type: "CloseSquareBracket" }, + { value: "}}", type: "CloseExpression" }, + { value: "|", type: "Text" }, + { value: "{{", type: "OpenExpression" }, + { value: "x", type: "Identifier" }, + { value: "[", type: "OpenSquareBracket" }, + { value: "1", type: "NumericLiteral" }, + { value: ":", type: "Colon" }, + { value: "-1", type: "NumericLiteral" }, + { value: "]", type: "CloseSquareBracket" }, + { value: "}}", type: "CloseExpression" }, + { value: "|", type: "Text" }, + { value: "{{", type: "OpenExpression" }, + { value: "x", type: "Identifier" }, + { value: "[", type: "OpenSquareBracket" }, + { value: "1", type: "NumericLiteral" }, + { value: ":", type: "Colon" }, + { value: ":", type: "Colon" }, + { value: "2", type: "NumericLiteral" }, + { value: "]", type: "CloseSquareBracket" }, + { value: "}}", type: "CloseExpression" }, + { value: "|", type: "Text" }, + { value: "{{", type: "OpenExpression" }, + { value: "x", type: "Identifier" }, + { value: "[", type: "OpenSquareBracket" }, + { value: "5", type: "NumericLiteral" }, + { value: ":", type: "Colon" }, + { value: ":", type: "Colon" }, + { value: "-1", type: "NumericLiteral" }, + { value: "]", type: "CloseSquareBracket" }, + { value: "}}", type: "CloseExpression" }, + { value: "|", type: "Text" }, + ], + + // Array indexing and slicing + ARRAY_SLICING: [ + { value: "|", type: "Text" }, + { value: "{{", type: "OpenExpression" }, + { value: "strings", type: "Identifier" }, + { value: "[", type: "OpenSquareBracket" }, + { value: "0", type: "NumericLiteral" }, + { value: "]", type: "CloseSquareBracket" }, + { value: "}}", type: "CloseExpression" }, + { value: "|", type: "Text" }, + { value: "{%", type: "OpenStatement" }, + { value: "for", type: "For" }, + { value: "s", type: "Identifier" }, + { value: "in", type: "In" }, + { value: "strings", type: "Identifier" }, + { value: "[", type: "OpenSquareBracket" }, + { value: ":", type: "Colon" }, + { value: "]", type: "CloseSquareBracket" }, + { value: "%}", type: "CloseStatement" }, + { value: "{{", type: "OpenExpression" }, + { value: "s", type: "Identifier" }, + { value: "}}", type: "CloseExpression" }, + { value: "{%", type: "OpenStatement" }, + { value: "endfor", type: "EndFor" }, + { value: "%}", type: "CloseStatement" }, + { value: "|", type: "Text" }, + { value: "{%", type: "OpenStatement" }, + { value: "for", type: "For" }, + { value: "s", type: "Identifier" }, + { value: "in", type: "In" }, + { value: "strings", type: "Identifier" }, + { value: "[", type: "OpenSquareBracket" }, + { value: ":", type: "Colon" }, + { value: "3", type: "NumericLiteral" }, + { value: "]", type: "CloseSquareBracket" }, + { value: "%}", type: "CloseStatement" }, + { value: "{{", type: "OpenExpression" }, + { value: "s", type: "Identifier" }, + { value: "}}", type: "CloseExpression" }, + { value: "{%", type: "OpenStatement" }, + { value: "endfor", type: "EndFor" }, + { value: "%}", type: "CloseStatement" }, + { value: "|", type: "Text" }, + { value: "{%", type: "OpenStatement" }, + { value: "for", type: "For" }, + { value: "s", type: "Identifier" }, + { value: "in", type: "In" }, + { value: "strings", type: "Identifier" }, + { value: "[", type: "OpenSquareBracket" }, + { value: "1", type: "NumericLiteral" }, + { value: ":", type: "Colon" }, + { value: "4", type: "NumericLiteral" }, + { value: "]", type: "CloseSquareBracket" }, + { value: "%}", type: "CloseStatement" }, + { value: "{{", type: "OpenExpression" }, + { value: "s", type: "Identifier" }, + { value: "}}", type: "CloseExpression" }, + { value: "{%", type: "OpenStatement" }, + { value: "endfor", type: "EndFor" }, + { value: "%}", type: "CloseStatement" }, + { value: "|", type: "Text" }, + { value: "{%", type: "OpenStatement" }, + { value: "for", type: "For" }, + { value: "s", type: "Identifier" }, + { value: "in", type: "In" }, + { value: "strings", type: "Identifier" }, + { value: "[", type: "OpenSquareBracket" }, + { value: "1", type: "NumericLiteral" }, + { value: ":", type: "Colon" }, + { value: "-1", type: "NumericLiteral" }, + { value: "]", type: "CloseSquareBracket" }, + { value: "%}", type: "CloseStatement" }, + { value: "{{", type: "OpenExpression" }, + { value: "s", type: "Identifier" }, + { value: "}}", type: "CloseExpression" }, + { value: "{%", type: "OpenStatement" }, + { value: "endfor", type: "EndFor" }, + { value: "%}", type: "CloseStatement" }, + { value: "|", type: "Text" }, + { value: "{%", type: "OpenStatement" }, + { value: "for", type: "For" }, + { value: "s", type: "Identifier" }, + { value: "in", type: "In" }, + { value: "strings", type: "Identifier" }, + { value: "[", type: "OpenSquareBracket" }, + { value: "1", type: "NumericLiteral" }, + { value: ":", type: "Colon" }, + { value: ":", type: "Colon" }, + { value: "2", type: "NumericLiteral" }, + { value: "]", type: "CloseSquareBracket" }, + { value: "%}", type: "CloseStatement" }, + { value: "{{", type: "OpenExpression" }, + { value: "s", type: "Identifier" }, + { value: "}}", type: "CloseExpression" }, + { value: "{%", type: "OpenStatement" }, + { value: "endfor", type: "EndFor" }, + { value: "%}", type: "CloseStatement" }, + { value: "|", type: "Text" }, + { value: "{%", type: "OpenStatement" }, + { value: "for", type: "For" }, + { value: "s", type: "Identifier" }, + { value: "in", type: "In" }, + { value: "strings", type: "Identifier" }, + { value: "[", type: "OpenSquareBracket" }, + { value: "5", type: "NumericLiteral" }, + { value: ":", type: "Colon" }, + { value: ":", type: "Colon" }, + { value: "-1", type: "NumericLiteral" }, + { value: "]", type: "CloseSquareBracket" }, + { value: "%}", type: "CloseStatement" }, + { value: "{{", type: "OpenExpression" }, + { value: "s", type: "Identifier" }, + { value: "}}", type: "CloseExpression" }, + { value: "{%", type: "OpenStatement" }, + { value: "endfor", type: "EndFor" }, + { value: "%}", type: "CloseStatement" }, + { value: "|", type: "Text" }, + ], + + // Membership operators + MEMBERSHIP: [ + { value: "|", type: "Text" }, + { value: "{{", type: "OpenExpression" }, + { value: "0", type: "NumericLiteral" }, + { value: "in", type: "In" }, + { value: "arr", type: "Identifier" }, + { value: "}}", type: "CloseExpression" }, + { value: "|", type: "Text" }, + { value: "{{", type: "OpenExpression" }, + { value: "1", type: "NumericLiteral" }, + { value: "in", type: "In" }, + { value: "arr", type: "Identifier" }, + { value: "}}", type: "CloseExpression" }, + { value: "|", type: "Text" }, + { value: "{{", type: "OpenExpression" }, + { value: "true", type: "BooleanLiteral" }, + { value: "in", type: "In" }, + { value: "arr", type: "Identifier" }, + { value: "}}", type: "CloseExpression" }, + { value: "|", type: "Text" }, + { value: "{{", type: "OpenExpression" }, + { value: "false", type: "BooleanLiteral" }, + { value: "in", type: "In" }, + { value: "arr", type: "Identifier" }, + { value: "}}", type: "CloseExpression" }, + { value: "|", type: "Text" }, + { value: "{{", type: "OpenExpression" }, + { value: "a", type: "StringLiteral" }, + { value: "in", type: "In" }, + { value: "arr", type: "Identifier" }, + { value: "}}", type: "CloseExpression" }, + { value: "|", type: "Text" }, + { value: "{{", type: "OpenExpression" }, + { value: "b", type: "StringLiteral" }, + { value: "in", type: "In" }, + { value: "arr", type: "Identifier" }, + { value: "}}", type: "CloseExpression" }, + { value: "|", type: "Text" }, + ], + MEMBERSHIP_NEGATION_1: [ + { value: "|", type: "Text" }, + { value: "{{", type: "OpenExpression" }, + { value: "not", type: "UnaryOperator" }, + { value: "0", type: "NumericLiteral" }, + { value: "in", type: "In" }, + { value: "arr", type: "Identifier" }, + { value: "}}", type: "CloseExpression" }, + { value: "|", type: "Text" }, + { value: "{{", type: "OpenExpression" }, + { value: "not", type: "UnaryOperator" }, + { value: "1", type: "NumericLiteral" }, + { value: "in", type: "In" }, + { value: "arr", type: "Identifier" }, + { value: "}}", type: "CloseExpression" }, + { value: "|", type: "Text" }, + { value: "{{", type: "OpenExpression" }, + { value: "not", type: "UnaryOperator" }, + { value: "true", type: "BooleanLiteral" }, + { value: "in", type: "In" }, + { value: "arr", type: "Identifier" }, + { value: "}}", type: "CloseExpression" }, + { value: "|", type: "Text" }, + { value: "{{", type: "OpenExpression" }, + { value: "not", type: "UnaryOperator" }, + { value: "false", type: "BooleanLiteral" }, + { value: "in", type: "In" }, + { value: "arr", type: "Identifier" }, + { value: "}}", type: "CloseExpression" }, + { value: "|", type: "Text" }, + { value: "{{", type: "OpenExpression" }, + { value: "not", type: "UnaryOperator" }, + { value: "a", type: "StringLiteral" }, + { value: "in", type: "In" }, + { value: "arr", type: "Identifier" }, + { value: "}}", type: "CloseExpression" }, + { value: "|", type: "Text" }, + { value: "{{", type: "OpenExpression" }, + { value: "not", type: "UnaryOperator" }, + { value: "b", type: "StringLiteral" }, + { value: "in", type: "In" }, + { value: "arr", type: "Identifier" }, + { value: "}}", type: "CloseExpression" }, + { value: "|", type: "Text" }, + ], + MEMBERSHIP_NEGATION_2: [ + { value: "|", type: "Text" }, + { value: "{{", type: "OpenExpression" }, + { value: "0", type: "NumericLiteral" }, + { value: "not in", type: "NotIn" }, + { value: "arr", type: "Identifier" }, + { value: "}}", type: "CloseExpression" }, + { value: "|", type: "Text" }, + { value: "{{", type: "OpenExpression" }, + { value: "1", type: "NumericLiteral" }, + { value: "not in", type: "NotIn" }, + { value: "arr", type: "Identifier" }, + { value: "}}", type: "CloseExpression" }, + { value: "|", type: "Text" }, + { value: "{{", type: "OpenExpression" }, + { value: "true", type: "BooleanLiteral" }, + { value: "not in", type: "NotIn" }, + { value: "arr", type: "Identifier" }, + { value: "}}", type: "CloseExpression" }, + { value: "|", type: "Text" }, + { value: "{{", type: "OpenExpression" }, + { value: "false", type: "BooleanLiteral" }, + { value: "not in", type: "NotIn" }, + { value: "arr", type: "Identifier" }, + { value: "}}", type: "CloseExpression" }, + { value: "|", type: "Text" }, + { value: "{{", type: "OpenExpression" }, + { value: "a", type: "StringLiteral" }, + { value: "not in", type: "NotIn" }, + { value: "arr", type: "Identifier" }, + { value: "}}", type: "CloseExpression" }, + { value: "|", type: "Text" }, + { value: "{{", type: "OpenExpression" }, + { value: "b", type: "StringLiteral" }, + { value: "not in", type: "NotIn" }, + { value: "arr", type: "Identifier" }, + { value: "}}", type: "CloseExpression" }, + { value: "|", type: "Text" }, + ], + + // Escaped characters + ESCAPED_CHARS: [ + { value: "{{", type: "OpenExpression" }, + { value: "\n", type: "StringLiteral" }, + { value: "}}", type: "CloseExpression" }, + { value: "{{", type: "OpenExpression" }, + { value: "\t", type: "StringLiteral" }, + { value: "}}", type: "CloseExpression" }, + { value: "{{", type: "OpenExpression" }, + { value: "'", type: "StringLiteral" }, + { value: "}}", type: "CloseExpression" }, + { value: "{{", type: "OpenExpression" }, + { value: '"', type: "StringLiteral" }, + { value: "}}", type: "CloseExpression" }, + { value: "{{", type: "OpenExpression" }, + { value: "\\", type: "StringLiteral" }, + { value: "}}", type: "CloseExpression" }, + { value: "{{", type: "OpenExpression" }, + { value: `|\n|\t|'|"|\\|`, type: "StringLiteral" }, + { value: "}}", type: "CloseExpression" }, + ], + + // Substring inclusion + SUBSTRING_INCLUSION: [ + { value: "|", type: "Text" }, + { value: "{{", type: "OpenExpression" }, + { value: "", type: "StringLiteral" }, + { value: "in", type: "In" }, + { value: "abc", type: "StringLiteral" }, + { value: "}}", type: "CloseExpression" }, + { value: "|", type: "Text" }, + { value: "{{", type: "OpenExpression" }, + { value: "a", type: "StringLiteral" }, + { value: "in", type: "In" }, + { value: "abc", type: "StringLiteral" }, + { value: "}}", type: "CloseExpression" }, + { value: "|", type: "Text" }, + { value: "{{", type: "OpenExpression" }, + { value: "d", type: "StringLiteral" }, + { value: "in", type: "In" }, + { value: "abc", type: "StringLiteral" }, + { value: "}}", type: "CloseExpression" }, + { value: "|", type: "Text" }, + { value: "{{", type: "OpenExpression" }, + { value: "ab", type: "StringLiteral" }, + { value: "in", type: "In" }, + { value: "abc", type: "StringLiteral" }, + { value: "}}", type: "CloseExpression" }, + { value: "|", type: "Text" }, + { value: "{{", type: "OpenExpression" }, + { value: "ac", type: "StringLiteral" }, + { value: "in", type: "In" }, + { value: "abc", type: "StringLiteral" }, + { value: "}}", type: "CloseExpression" }, + { value: "|", type: "Text" }, + { value: "{{", type: "OpenExpression" }, + { value: "abc", type: "StringLiteral" }, + { value: "in", type: "In" }, + { value: "abc", type: "StringLiteral" }, + { value: "}}", type: "CloseExpression" }, + { value: "|", type: "Text" }, + { value: "{{", type: "OpenExpression" }, + { value: "abcd", type: "StringLiteral" }, + { value: "in", type: "In" }, + { value: "abc", type: "StringLiteral" }, + { value: "}}", type: "CloseExpression" }, + { value: "|", type: "Text" }, + ], + + // Filter operator + FILTER_OPERATOR: [ + { value: "{{", type: "OpenExpression" }, + { value: "arr", type: "Identifier" }, + { value: "|", type: "Pipe" }, + { value: "length", type: "Identifier" }, + { value: "}}", type: "CloseExpression" }, + { value: "{{", type: "OpenExpression" }, + { value: "1", type: "NumericLiteral" }, + { value: "+", type: "AdditiveBinaryOperator" }, + { value: "arr", type: "Identifier" }, + { value: "|", type: "Pipe" }, + { value: "length", type: "Identifier" }, + { value: "}}", type: "CloseExpression" }, + { value: "{{", type: "OpenExpression" }, + { value: "2", type: "NumericLiteral" }, + { value: "+", type: "AdditiveBinaryOperator" }, + { value: "arr", type: "Identifier" }, + { value: "|", type: "Pipe" }, + { value: "sort", type: "Identifier" }, + { value: "|", type: "Pipe" }, + { value: "length", type: "Identifier" }, + { value: "}}", type: "CloseExpression" }, + { value: "{{", type: "OpenExpression" }, + { value: "(", type: "OpenParen" }, + { value: "arr", type: "Identifier" }, + { value: "|", type: "Pipe" }, + { value: "sort", type: "Identifier" }, + { value: ")", type: "CloseParen" }, + { value: "[", type: "OpenSquareBracket" }, + { value: "0", type: "NumericLiteral" }, + { value: "]", type: "CloseSquareBracket" }, + { value: "}}", type: "CloseExpression" }, + ], + FILTER_OPERATOR_2: [ + { value: "|", type: "Text" }, + { value: "{{", type: "OpenExpression" }, + { value: "abc", type: "StringLiteral" }, + { value: "|", type: "Pipe" }, + { value: "length", type: "Identifier" }, + { value: "}}", type: "CloseExpression" }, + { value: "|", type: "Text" }, + { value: "{{", type: "OpenExpression" }, + { value: "aBcD", type: "StringLiteral" }, + { value: "|", type: "Pipe" }, + { value: "upper", type: "Identifier" }, + { value: "}}", type: "CloseExpression" }, + { value: "|", type: "Text" }, + { value: "{{", type: "OpenExpression" }, + { value: "aBcD", type: "StringLiteral" }, + { value: "|", type: "Pipe" }, + { value: "lower", type: "Identifier" }, + { value: "}}", type: "CloseExpression" }, + { value: "|", type: "Text" }, + { value: "{{", type: "OpenExpression" }, + { value: "test test", type: "StringLiteral" }, + { value: "|", type: "Pipe" }, + { value: "capitalize", type: "Identifier" }, + { value: "}}", type: "CloseExpression" }, + { value: "|", type: "Text" }, + { value: "{{", type: "OpenExpression" }, + { value: "test test", type: "StringLiteral" }, + { value: "|", type: "Pipe" }, + { value: "title", type: "Identifier" }, + { value: "}}", type: "CloseExpression" }, + { value: "|", type: "Text" }, + { value: "{{", type: "OpenExpression" }, + { value: " a b ", type: "StringLiteral" }, + { value: "|", type: "Pipe" }, + { value: "trim", type: "Identifier" }, + { value: "}}", type: "CloseExpression" }, + { value: "|", type: "Text" }, + { value: "{{", type: "OpenExpression" }, + { value: " A B ", type: "StringLiteral" }, + { value: "|", type: "Pipe" }, + { value: "trim", type: "Identifier" }, + { value: "|", type: "Pipe" }, + { value: "lower", type: "Identifier" }, + { value: "|", type: "Pipe" }, + { value: "length", type: "Identifier" }, + { value: "}}", type: "CloseExpression" }, + { value: "|", type: "Text" }, + ], + FILTER_OPERATOR_3: [ + { value: "|", type: "Text" }, + { value: "{{", type: "OpenExpression" }, + { value: "-1", type: "NumericLiteral" }, + { value: "|", type: "Pipe" }, + { value: "abs", type: "Identifier" }, + { value: "}}", type: "CloseExpression" }, + { value: "|", type: "Text" }, + { value: "{{", type: "OpenExpression" }, + { value: "1", type: "NumericLiteral" }, + { value: "|", type: "Pipe" }, + { value: "abs", type: "Identifier" }, + { value: "}}", type: "CloseExpression" }, + { value: "|", type: "Text" }, + ], + + // Logical operators between non-Booleans + BOOLEAN_NUMERICAL: [ + { value: "|", type: "Text" }, + { value: "{{", type: "OpenExpression" }, + { value: "1", type: "NumericLiteral" }, + { value: "and", type: "And" }, + { value: "2", type: "NumericLiteral" }, + { value: "}}", type: "CloseExpression" }, + { value: "|", type: "Text" }, + { value: "{{", type: "OpenExpression" }, + { value: "1", type: "NumericLiteral" }, + { value: "and", type: "And" }, + { value: "0", type: "NumericLiteral" }, + { value: "}}", type: "CloseExpression" }, + { value: "|", type: "Text" }, + { value: "{{", type: "OpenExpression" }, + { value: "0", type: "NumericLiteral" }, + { value: "and", type: "And" }, + { value: "1", type: "NumericLiteral" }, + { value: "}}", type: "CloseExpression" }, + { value: "|", type: "Text" }, + { value: "{{", type: "OpenExpression" }, + { value: "0", type: "NumericLiteral" }, + { value: "and", type: "And" }, + { value: "0", type: "NumericLiteral" }, + { value: "}}", type: "CloseExpression" }, + { value: "|", type: "Text" }, + { value: "{{", type: "OpenExpression" }, + { value: "1", type: "NumericLiteral" }, + { value: "or", type: "Or" }, + { value: "2", type: "NumericLiteral" }, + { value: "}}", type: "CloseExpression" }, + { value: "|", type: "Text" }, + { value: "{{", type: "OpenExpression" }, + { value: "1", type: "NumericLiteral" }, + { value: "or", type: "Or" }, + { value: "0", type: "NumericLiteral" }, + { value: "}}", type: "CloseExpression" }, + { value: "|", type: "Text" }, + { value: "{{", type: "OpenExpression" }, + { value: "0", type: "NumericLiteral" }, + { value: "or", type: "Or" }, + { value: "1", type: "NumericLiteral" }, + { value: "}}", type: "CloseExpression" }, + { value: "|", type: "Text" }, + { value: "{{", type: "OpenExpression" }, + { value: "0", type: "NumericLiteral" }, + { value: "or", type: "Or" }, + { value: "0", type: "NumericLiteral" }, + { value: "}}", type: "CloseExpression" }, + { value: "|", type: "Text" }, + { value: "{{", type: "OpenExpression" }, + { value: "not", type: "UnaryOperator" }, + { value: "1", type: "NumericLiteral" }, + { value: "}}", type: "CloseExpression" }, + { value: "|", type: "Text" }, + { value: "{{", type: "OpenExpression" }, + { value: "not", type: "UnaryOperator" }, + { value: "0", type: "NumericLiteral" }, + { value: "}}", type: "CloseExpression" }, + { value: "|", type: "Text" }, + ], + BOOLEAN_STRINGS: [ + { value: "|", type: "Text" }, + { value: "{{", type: "OpenExpression" }, + { value: "a", type: "StringLiteral" }, + { value: "and", type: "And" }, + { value: "b", type: "StringLiteral" }, + { value: "}}", type: "CloseExpression" }, + { value: "|", type: "Text" }, + { value: "{{", type: "OpenExpression" }, + { value: "a", type: "StringLiteral" }, + { value: "and", type: "And" }, + { value: "", type: "StringLiteral" }, + { value: "}}", type: "CloseExpression" }, + { value: "|", type: "Text" }, + { value: "{{", type: "OpenExpression" }, + { value: "", type: "StringLiteral" }, + { value: "and", type: "And" }, + { value: "a", type: "StringLiteral" }, + { value: "}}", type: "CloseExpression" }, + { value: "|", type: "Text" }, + { value: "{{", type: "OpenExpression" }, + { value: "", type: "StringLiteral" }, + { value: "and", type: "And" }, + { value: "", type: "StringLiteral" }, + { value: "}}", type: "CloseExpression" }, + { value: "|", type: "Text" }, + { value: "{{", type: "OpenExpression" }, + { value: "a", type: "StringLiteral" }, + { value: "or", type: "Or" }, + { value: "b", type: "StringLiteral" }, + { value: "}}", type: "CloseExpression" }, + { value: "|", type: "Text" }, + { value: "{{", type: "OpenExpression" }, + { value: "a", type: "StringLiteral" }, + { value: "or", type: "Or" }, + { value: "", type: "StringLiteral" }, + { value: "}}", type: "CloseExpression" }, + { value: "|", type: "Text" }, + { value: "{{", type: "OpenExpression" }, + { value: "", type: "StringLiteral" }, + { value: "or", type: "Or" }, + { value: "a", type: "StringLiteral" }, + { value: "}}", type: "CloseExpression" }, + { value: "|", type: "Text" }, + { value: "{{", type: "OpenExpression" }, + { value: "", type: "StringLiteral" }, + { value: "or", type: "Or" }, + { value: "", type: "StringLiteral" }, + { value: "}}", type: "CloseExpression" }, + { value: "|", type: "Text" }, + { value: "{{", type: "OpenExpression" }, + { value: "not", type: "UnaryOperator" }, + { value: "a", type: "StringLiteral" }, + { value: "}}", type: "CloseExpression" }, + { value: "|", type: "Text" }, + { value: "{{", type: "OpenExpression" }, + { value: "not", type: "UnaryOperator" }, + { value: "", type: "StringLiteral" }, + { value: "}}", type: "CloseExpression" }, + { value: "|", type: "Text" }, + ], + BOOLEAN_MIXED: [ + { value: "|", type: "Text" }, + { value: "{{", type: "OpenExpression" }, + { value: "true", type: "BooleanLiteral" }, + { value: "and", type: "And" }, + { value: "1", type: "NumericLiteral" }, + { value: "}}", type: "CloseExpression" }, + { value: "|", type: "Text" }, + { value: "{{", type: "OpenExpression" }, + { value: "true", type: "BooleanLiteral" }, + { value: "and", type: "And" }, + { value: "0", type: "NumericLiteral" }, + { value: "}}", type: "CloseExpression" }, + { value: "|", type: "Text" }, + { value: "{{", type: "OpenExpression" }, + { value: "false", type: "BooleanLiteral" }, + { value: "and", type: "And" }, + { value: "1", type: "NumericLiteral" }, + { value: "}}", type: "CloseExpression" }, + { value: "|", type: "Text" }, + { value: "{{", type: "OpenExpression" }, + { value: "false", type: "BooleanLiteral" }, + { value: "and", type: "And" }, + { value: "0", type: "NumericLiteral" }, + { value: "}}", type: "CloseExpression" }, + { value: "|", type: "Text" }, + { value: "{{", type: "OpenExpression" }, + { value: "true", type: "BooleanLiteral" }, + { value: "or", type: "Or" }, + { value: "1", type: "NumericLiteral" }, + { value: "}}", type: "CloseExpression" }, + { value: "|", type: "Text" }, + { value: "{{", type: "OpenExpression" }, + { value: "true", type: "BooleanLiteral" }, + { value: "or", type: "Or" }, + { value: "0", type: "NumericLiteral" }, + { value: "}}", type: "CloseExpression" }, + { value: "|", type: "Text" }, + { value: "{{", type: "OpenExpression" }, + { value: "false", type: "BooleanLiteral" }, + { value: "or", type: "Or" }, + { value: "1", type: "NumericLiteral" }, + { value: "}}", type: "CloseExpression" }, + { value: "|", type: "Text" }, + { value: "{{", type: "OpenExpression" }, + { value: "false", type: "BooleanLiteral" }, + { value: "or", type: "Or" }, + { value: "0", type: "NumericLiteral" }, + { value: "}}", type: "CloseExpression" }, + { value: "|", type: "Text" }, + ], + BOOLEAN_MIXED_2: [ + { value: "|", type: "Text" }, + { value: "{{", type: "OpenExpression" }, + { value: "true", type: "BooleanLiteral" }, + { value: "and", type: "And" }, + { value: "", type: "StringLiteral" }, + { value: "}}", type: "CloseExpression" }, + { value: "|", type: "Text" }, + { value: "{{", type: "OpenExpression" }, + { value: "true", type: "BooleanLiteral" }, + { value: "and", type: "And" }, + { value: "a", type: "StringLiteral" }, + { value: "}}", type: "CloseExpression" }, + { value: "|", type: "Text" }, + { value: "{{", type: "OpenExpression" }, + { value: "false", type: "BooleanLiteral" }, + { value: "or", type: "Or" }, + { value: "", type: "StringLiteral" }, + { value: "}}", type: "CloseExpression" }, + { value: "|", type: "Text" }, + { value: "{{", type: "OpenExpression" }, + { value: "false", type: "BooleanLiteral" }, + { value: "or", type: "Or" }, + { value: "a", type: "StringLiteral" }, + { value: "}}", type: "CloseExpression" }, + { value: "|", type: "Text" }, + { value: "{{", type: "OpenExpression" }, + { value: "", type: "StringLiteral" }, + { value: "and", type: "And" }, + { value: "true", type: "BooleanLiteral" }, + { value: "}}", type: "CloseExpression" }, + { value: "|", type: "Text" }, + { value: "{{", type: "OpenExpression" }, + { value: "a", type: "StringLiteral" }, + { value: "and", type: "And" }, + { value: "true", type: "BooleanLiteral" }, + { value: "}}", type: "CloseExpression" }, + { value: "|", type: "Text" }, + { value: "{{", type: "OpenExpression" }, + { value: "", type: "StringLiteral" }, + { value: "or", type: "Or" }, + { value: "false", type: "BooleanLiteral" }, + { value: "}}", type: "CloseExpression" }, + { value: "|", type: "Text" }, + { value: "{{", type: "OpenExpression" }, + { value: "a", type: "StringLiteral" }, + { value: "or", type: "Or" }, + { value: "false", type: "BooleanLiteral" }, + { value: "}}", type: "CloseExpression" }, + { value: "|", type: "Text" }, + ], + BOOLEAN_MIXED_IF: [ + { value: "{%", type: "OpenStatement" }, + { value: "if", type: "If" }, + { value: "", type: "StringLiteral" }, + { value: "%}", type: "CloseStatement" }, + { value: "{{", type: "OpenExpression" }, + { value: "A", type: "StringLiteral" }, + { value: "}}", type: "CloseExpression" }, + { value: "{%", type: "OpenStatement" }, + { value: "endif", type: "EndIf" }, + { value: "%}", type: "CloseStatement" }, + { value: "{%", type: "OpenStatement" }, + { value: "if", type: "If" }, + { value: "a", type: "StringLiteral" }, + { value: "%}", type: "CloseStatement" }, + { value: "{{", type: "OpenExpression" }, + { value: "B", type: "StringLiteral" }, + { value: "}}", type: "CloseExpression" }, + { value: "{%", type: "OpenStatement" }, + { value: "endif", type: "EndIf" }, + { value: "%}", type: "CloseStatement" }, + { value: "{%", type: "OpenStatement" }, + { value: "if", type: "If" }, + { value: "true", type: "BooleanLiteral" }, + { value: "and", type: "And" }, + { value: "", type: "StringLiteral" }, + { value: "%}", type: "CloseStatement" }, + { value: "{{", type: "OpenExpression" }, + { value: "C", type: "StringLiteral" }, + { value: "}}", type: "CloseExpression" }, + { value: "{%", type: "OpenStatement" }, + { value: "endif", type: "EndIf" }, + { value: "%}", type: "CloseStatement" }, + { value: "{%", type: "OpenStatement" }, + { value: "if", type: "If" }, + { value: "true", type: "BooleanLiteral" }, + { value: "and", type: "And" }, + { value: "a", type: "StringLiteral" }, + { value: "%}", type: "CloseStatement" }, + { value: "{{", type: "OpenExpression" }, + { value: "D", type: "StringLiteral" }, + { value: "}}", type: "CloseExpression" }, + { value: "{%", type: "OpenStatement" }, + { value: "endif", type: "EndIf" }, + { value: "%}", type: "CloseStatement" }, + ], +}; + +const TEST_CONTEXT = { + // Text nodes + NO_TEMPLATE: {}, + TEXT_NODES: {}, + + // Logical operators + LOGICAL_AND: {}, + LOGICAL_OR: {}, + LOGICAL_NOT: {}, + LOGICAL_NOT_NOT: {}, + LOGICAL_AND_OR: {}, + LOGICAL_AND_NOT: {}, + LOGICAL_OR_NOT: {}, + LOGICAL_COMBINED: {}, + + // If statements + IF_ONLY: {}, + IF_ELSE_ONLY: {}, + IF_ELIF_ELSE: {}, + NESTED_STATEMENTS: {}, + + // For loops + FOR_LOOP: { + messages: [ + { role: "user", content: "A" }, + { role: "assistant", content: "B" }, + { role: "user", content: "C" }, + ], + }, + + // Set variables + VARIABLES: {}, + + // Numbers + NUMBERS: { + a: 0, + add: (x, y) => x + y, + }, + + // Binary expressions + BINOP_EXPR: {}, + + // Strings + STRINGS: { + bos_token: "", + }, + + // Function calls + FUNCTIONS: { + x: 10, + apple: "apple", + func: (...args) => args.length, + }, + + // Object properties + PROPERTIES: { + obj: { x: 10, y: 20 }, + }, + + // Object methods + OBJ_METHODS: { + x: "A", + y: "B", + obj: { + x: (...args) => args.join(""), + z: { + A: (...args) => args.join("_"), + }, + }, + }, + + // String methods + STRING_METHODS: {}, + + // String indexing and slicing + STRING_SLICING: { + x: "0123456789", + }, + + // Array indexing and slicing + ARRAY_SLICING: { + strings: ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"], + }, + + // Membership operators + MEMBERSHIP: { + arr: [0, true, "a"], + }, + MEMBERSHIP_NEGATION_1: { + arr: [0, true, "a"], + }, + MEMBERSHIP_NEGATION_2: { + arr: [0, true, "a"], + }, + + // Escaped characters + ESCAPED_CHARS: {}, + + // Substring inclusion + SUBSTRING_INCLUSION: {}, + + // Filter operator + FILTER_OPERATOR: { + arr: [3, 2, 1], + }, + FILTER_OPERATOR_2: {}, + FILTER_OPERATOR_3: {}, + + // Logical operators between non-Booleans + BOOLEAN_NUMERICAL: {}, + BOOLEAN_STRINGS: {}, + BOOLEAN_MIXED: {}, + BOOLEAN_MIXED_2: {}, + BOOLEAN_MIXED_IF: {}, +}; + +const EXPECTED_OUTPUTS = { + // Text nodes + NO_TEMPLATE: `Hello world!`, + TEXT_NODES: `0A1BC2D3`, + + // Logical operators + LOGICAL_AND: `truefalsefalsefalse`, + LOGICAL_OR: `truetruetruefalse`, + LOGICAL_NOT: `falsetrue`, + LOGICAL_NOT_NOT: `truefalse`, + LOGICAL_AND_OR: `truetruetruetruefalse`, + LOGICAL_AND_NOT: `falsetruefalsefalse`, + LOGICAL_OR_NOT: `truetruefalsetrue`, + LOGICAL_COMBINED: `falsetrue`, + + // If statements + IF_ONLY: "AB", + IF_ELSE_ONLY: "BC", + IF_ELIF_ELSE: "GHIJ", + NESTED_STATEMENTS: "2300", + + // For loops + FOR_LOOP: "ABC", + + // Set variables + VARIABLES: "Hello World", + + // Numbers + NUMBERS: "|5|-5|2|-8|", + + // Binary expressions + BINOP_EXPR: "1truefalsefalsetruetruetrue5", + + // Strings + STRINGS: "Bye[INST] ", + + // Function calls + FUNCTIONS: "014", + + // Object properties + PROPERTIES: "3030", + + // Object methods + OBJ_METHODS: "AB A_B", + STRING_METHODS: "AB ABCD abcd ", + + // String indexing and slicing + STRING_SLICING: "|0|0123456789|012|123|12345678|13579|543210|", + + // Array indexing and slicing + ARRAY_SLICING: "|0|0123456789|012|123|12345678|13579|543210|", + + // Membership operators + MEMBERSHIP: "|true|false|true|false|true|false|", + MEMBERSHIP_NEGATION_1: "|false|true|false|true|false|true|", + MEMBERSHIP_NEGATION_2: "|false|true|false|true|false|true|", + + // Escaped characters + // NOTE: Since `trim_blocks` is enabled, we remove the first newline after the template tag, + // meaning the first newline in the output is not present + ESCAPED_CHARS: `\t'"\\|\n|\t|'|"|\\|`, + + // Substring inclusion + SUBSTRING_INCLUSION: `|true|true|false|true|false|true|false|`, + + // Filter operator + FILTER_OPERATOR: `3451`, + FILTER_OPERATOR_2: `|3|ABCD|abcd|Test test|Test Test|a b|4|`, + FILTER_OPERATOR_3: `|1|1|`, + + // Logical operators between non-Booleans + BOOLEAN_NUMERICAL: `|2|0|0|0|1|1|1|0|false|true|`, + BOOLEAN_STRINGS: `|b||||a|a|a||false|true|`, + BOOLEAN_MIXED: `|1|0|false|false|true|true|1|0|`, + BOOLEAN_MIXED_2: `||a||a||true|false|a|`, + BOOLEAN_MIXED_IF: `BD`, +}; + +describe("Templates", () => { + describe("Lexing", () => { + it("should tokenize an input string", () => { + for (const [name, text] of Object.entries(TEST_STRINGS)) { + const tokens = tokenize(text); + + if (!TEST_PARSED[name]) { + throw new Error(`Test case "${name}" not found`); + } + + if (tokens.length !== TEST_PARSED[name].length) { + console.log(tokens); + } + // console.log(tokens); + expect(tokens).toMatchObject(TEST_PARSED[name]); + } + }); + + // TODO add failure cases + }); + + describe("Parsing and intepretation", () => { + const AST_CACHE = new Map(); + it("should generate an AST", () => { + // NOTE: In this test case, we just check that no error occurs + for (const [name, text] of Object.entries(TEST_PARSED)) { + const ast = parse(text); + AST_CACHE.set(name, ast); + } + }); + + it("should interpret an AST", () => { + for (const [name, ast] of AST_CACHE.entries()) { + if (TEST_CONTEXT[name] === undefined || EXPECTED_OUTPUTS[name] === undefined) { + console.warn(`Skipping test case "${name}" due to missing context or expected output`); + continue; + } + + const env = new Environment(); + // Declare global variables + env.set("false", false); + env.set("true", true); + + // Add user-defined variables + for (const [key, value] of Object.entries(TEST_CONTEXT[name])) { + env.set(key, value); + } + + const interpreter = new Interpreter(env); + const result = interpreter.run(ast); + expect(result.value).toEqual(EXPECTED_OUTPUTS[name]); + } + }); + }); +}); + +describe("Error checking", () => { + describe("Lexing errors", () => { + it("Missing closing curly brace", () => { + const text = "{{ variable"; + expect(() => tokenize(text)).toThrowError(); + }); + it("Unclosed string literal", () => { + const text = `{{ 'unclosed string }}`; + expect(() => tokenize(text)).toThrowError(); + }); + + it("Unexpected character", () => { + const text = "{{ invalid ! invalid }}"; + expect(() => tokenize(text)).toThrowError(); + }); + }); + + describe("Parsing errors", () => { + it("Unclosed statement", () => { + const text = "{{ variable }}{{"; + const tokens = tokenize(text); + expect(() => parse(tokens)).toThrowError(); + }); + + it("Unclosed expression", () => { + const text = "{% if condition %}\n Content"; + const tokens = tokenize(text); + expect(() => parse(tokens)).toThrowError(); + }); + + it("Unmatched control structure", () => { + const text = "{% if condition %}\n Content\n{% endif %}\n{% endfor %}"; + const tokens = tokenize(text); + expect(() => parse(tokens)).toThrowError(); + }); + + it("Missing variable in for loop", () => { + const text = "{% for %}\n Content\n{% endfor %}"; + const tokens = tokenize(text); + expect(() => parse(tokens)).toThrowError(); + }); + + it("Unclosed parentheses in expression", () => { + const text = "{{ (variable + 1 }}"; + const tokens = tokenize(text); + expect(() => parse(tokens)).toThrowError(); + }); + + it("Invalid variable name", () => { + const text = "{{ 1variable }}"; + const tokens = tokenize(text); + expect(() => parse(tokens)).toThrowError(); + }); + + it("Invalid control structure usage", () => { + const text = "{% if %}Content{% endif %}"; + const tokens = tokenize(text); + expect(() => parse(tokens)).toThrowError(); + }); + }); + + describe("Runtime errors", () => { + it("Undefined variable", () => { + const env = new Environment(); + const interpreter = new Interpreter(env); + const tokens = tokenize("{{ undefined_variable }}"); + const ast = parse(tokens); + expect(() => interpreter.run(ast)).toThrowError(); + }); + + it("Undefined attribute access", () => { + const env = new Environment(); + const interpreter = new Interpreter(env); + const tokens = tokenize("{{ object.undefined_attribute }}"); + const ast = parse(tokens); + expect(() => interpreter.run(ast)).toThrowError(); + }); + + it("Undefined function call", () => { + const env = new Environment(); + const interpreter = new Interpreter(env); + const tokens = tokenize("{{ undefined_function() }}"); + const ast = parse(tokens); + expect(() => interpreter.run(ast)).toThrowError(); + }); + + it("Incorrect function call", () => { + const env = new Environment(); + env.set("true", true); + + const interpreter = new Interpreter(env); + const tokens = tokenize("{{ true() }}"); + const ast = parse(tokens); + expect(() => interpreter.run(ast)).toThrowError(); + }); + + it("Looping over non-iterable", () => { + const env = new Environment(); + const interpreter = new Interpreter(env); + env.set("non_iterable", 10); + + const tokens = tokenize("{% for item in non_iterable %}{{ item }}{% endfor %}"); + const ast = parse(tokens); + expect(() => interpreter.run(ast)).toThrowError(); + }); + + it("Invalid variable assignment", () => { + const env = new Environment(); + const interpreter = new Interpreter(env); + + const tokens = tokenize("{% set 42 = variable %}"); + const ast = parse(tokens); + expect(() => interpreter.run(ast)).toThrowError(); + }); + }); +}); diff --git a/packages/jinja/test/utils.test.js b/packages/jinja/test/utils.test.js new file mode 100644 index 0000000000000000000000000000000000000000..be271c1df66f57cfcaffe3500ed9ce1caae37ea4 --- /dev/null +++ b/packages/jinja/test/utils.test.js @@ -0,0 +1,73 @@ +import { describe, it, expect } from "vitest"; + +import { slice } from "../src/utils"; + +describe("Test utility functions", () => { + describe("Slice function", () => { + const array = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]; + it("[:]", async () => { + expect(slice(array)).toEqual(array); + }); + it("[start:end]", async () => { + expect(slice(array, 0, 3)).toEqual([0, 1, 2]); + expect(slice(array, 0, 0)).toEqual([]); + expect(slice(array, 0, 100)).toEqual(array); + expect(slice(array, 100, 100)).toEqual([]); + }); + it("[start:end:step]", async () => { + expect(slice(array, 1, 4, 2)).toEqual([1, 3]); + expect(slice(array, 1, 8, 3)).toEqual([1, 4, 7]); + expect(slice(array, 1, 8, 10)).toEqual([1]); + }); + it("[:end]", async () => { + expect(slice(array, undefined, 3)).toEqual([0, 1, 2]); + expect(slice(array, undefined, 15)).toEqual(array); + }); + it("[:end:step]", async () => { + expect(slice(array, undefined, 4, 2)).toEqual([0, 2]); + expect(slice(array, undefined, 10, 3)).toEqual([0, 3, 6, 9]); + }); + it("[start:]", async () => { + expect(slice(array, 3)).toEqual([3, 4, 5, 6, 7, 8, 9]); + expect(slice(array, 11)).toEqual([]); + }); + it("[start::step]", async () => { + expect(slice(array, 1, undefined, 2)).toEqual([1, 3, 5, 7, 9]); + expect(slice(array, 10, undefined, 2)).toEqual([]); + }); + it("[::step]", async () => { + expect(slice(array, undefined, undefined, 2)).toEqual([0, 2, 4, 6, 8]); + }); + it("[-start]", async () => { + expect(slice(array, -3)).toEqual([7, 8, 9]); + expect(slice(array, -10)).toEqual(array); + }); + it("[-start:end]", async () => { + expect(slice(array, -3, 9)).toEqual([7, 8]); + expect(slice(array, -10, 10)).toEqual(array); + expect(slice(array, -1, 5)).toEqual([]); + }); + it("[-start:-end]", async () => { + expect(slice(array, -3, -1)).toEqual([7, 8]); + expect(slice(array, -1, -1)).toEqual([]); + expect(slice(array, -3, -5)).toEqual([]); + expect(slice(array, -100, -90)).toEqual([]); + expect(slice(array, -100, -1)).toEqual([0, 1, 2, 3, 4, 5, 6, 7, 8]); + }); + it("[-start:-end:step]", async () => { + expect(slice(array, -3, -1, 2)).toEqual([7]); + }); + it("[-start::step]", async () => { + expect(slice(array, -3, undefined, 2)).toEqual([7, 9]); + }); + it("[-start:]", async () => { + expect(slice(array, -3, undefined)).toEqual([7, 8, 9]); + }); + it("[-start::]", async () => { + expect(slice(array, -3, undefined, undefined)).toEqual([7, 8, 9]); + }); + it("[-start::-step]", async () => { + expect(slice(array, -3, undefined, -1)).toEqual([7, 6, 5, 4, 3, 2, 1, 0]); + }); + }); +}); diff --git a/packages/jinja/tsconfig.json b/packages/jinja/tsconfig.json new file mode 100644 index 0000000000000000000000000000000000000000..4a366c4e67011d4dfcbea44f32e802c68780d1f2 --- /dev/null +++ b/packages/jinja/tsconfig.json @@ -0,0 +1,19 @@ +{ + "compilerOptions": { + "allowSyntheticDefaultImports": true, + "lib": ["ES2022", "DOM"], + "module": "ESNext", + "moduleResolution": "node", + "target": "ESNext", + "forceConsistentCasingInFileNames": true, + "strict": true, + "noImplicitAny": true, + "strictNullChecks": true, + "skipLibCheck": true, + "noImplicitOverride": true, + "outDir": "./dist", + "declaration": true + }, + "include": ["src", "index.ts"], + "exclude": ["dist"] +} diff --git a/packages/jinja/vite.config.js b/packages/jinja/vite.config.js new file mode 100644 index 0000000000000000000000000000000000000000..c7252ca01330400b04d548396b693d357ade0de6 --- /dev/null +++ b/packages/jinja/vite.config.js @@ -0,0 +1,10 @@ +import { defineConfig } from "vite"; + +export default defineConfig({ + build: { + lib: { + entry: "src/index.js", + name: "jinja", + }, + }, +}); diff --git a/packages/jinja/vitest.config.ts b/packages/jinja/vitest.config.ts new file mode 100644 index 0000000000000000000000000000000000000000..390ef4f2ddaf9f08095ca1b7823f862e5459e59a --- /dev/null +++ b/packages/jinja/vitest.config.ts @@ -0,0 +1,7 @@ +import { configDefaults, defineConfig } from "vitest/config"; + +export default defineConfig({ + test: { + exclude: [...configDefaults.exclude], + }, +}); diff --git a/packages/tasks/src/index.ts b/packages/tasks/src/index.ts index 285bf9cbb31df2c0d3fc495d897eb1fcd7c59d1d..466f3e689a2cdab7a93906f19a0eaf1786651b10 100644 --- a/packages/tasks/src/index.ts +++ b/packages/tasks/src/index.ts @@ -19,12 +19,14 @@ export type { LibraryUiElement, ModelLibraryKey } from "./model-libraries"; export type { ModelData, TransformersInfo } from "./model-data"; export type { SpecialTokensMap, TokenizerConfig } from "./tokenizer-data"; export type { + ChatMessage, WidgetExample, WidgetExampleAttribute, WidgetExampleAssetAndPromptInput, WidgetExampleAssetAndTextInput, WidgetExampleAssetAndZeroShotInput, WidgetExampleAssetInput, + WidgetExampleChatInput, WidgetExampleSentenceSimilarityInput, WidgetExampleStructuredDataInput, WidgetExampleTableDataInput, diff --git a/packages/tasks/src/widget-example.ts b/packages/tasks/src/widget-example.ts index c825f19573038d17ef227e2242f379580a929ec0..2cfd3e2f4a5fb7fb9749e99b80192dc70aa70abc 100644 --- a/packages/tasks/src/widget-example.ts +++ b/packages/tasks/src/widget-example.ts @@ -51,6 +51,15 @@ export interface WidgetExampleBase { output?: TOutput; } +export interface ChatMessage { + role: "user" | "assistant" | "system"; + content: string; +} + +export interface WidgetExampleChatInput extends WidgetExampleBase { + messages: ChatMessage[]; +} + export interface WidgetExampleTextInput extends WidgetExampleBase { text: string; } @@ -101,6 +110,7 @@ export interface WidgetExampleSentenceSimilarityInput = + | WidgetExampleChatInput | WidgetExampleTextInput | WidgetExampleTextAndContextInput | WidgetExampleTextAndTableInput diff --git a/packages/widgets/src/lib/components/InferenceWidget/shared/WidgetExamples/WidgetExamples.svelte b/packages/widgets/src/lib/components/InferenceWidget/shared/WidgetExamples/WidgetExamples.svelte index a6cc6d63919133df5c4ca93e6e3b6c424b76b9f0..f34ac8ca0084a15e972d37efb2becb2de705cdc6 100644 --- a/packages/widgets/src/lib/components/InferenceWidget/shared/WidgetExamples/WidgetExamples.svelte +++ b/packages/widgets/src/lib/components/InferenceWidget/shared/WidgetExamples/WidgetExamples.svelte @@ -1,9 +1,7 @@ - -
+
{text}
diff --git a/packages/widgets/src/lib/components/InferenceWidget/shared/WidgetOutputConvo/WidgetOutputConvo.svelte b/packages/widgets/src/lib/components/InferenceWidget/shared/WidgetOutputConvo/WidgetOutputConvo.svelte index b8052cef26ce45dad765a09d834563fab5241aca..fc0e87af8d9409097d6caebf7ca079622f0d8efb 100644 --- a/packages/widgets/src/lib/components/InferenceWidget/shared/WidgetOutputConvo/WidgetOutputConvo.svelte +++ b/packages/widgets/src/lib/components/InferenceWidget/shared/WidgetOutputConvo/WidgetOutputConvo.svelte @@ -2,8 +2,8 @@ import { afterUpdate } from "svelte"; import { isFullyScrolled, scrollToMax } from "../../../../utils/ViewUtils.js"; - import type { ChatMessage } from "../../shared/types.js"; import WidgetOutputConvoBubble from "../WidgetOuputConvoBubble/WidgetOutputConvoBubble.svelte"; + import type { ChatMessage } from "@huggingface/tasks"; export let modelId: string; export let messages: ChatMessage[]; @@ -24,11 +24,8 @@
{#each messages as message} - {#if message.role === "user"} - - {:else} - - {/if} + {@const position = message.role === "user" ? "right" : message.role === "assistant" ? "left" : "center"} + {/each}
diff --git a/packages/widgets/src/lib/components/InferenceWidget/shared/WidgetWrapper/WidgetWrapper.svelte b/packages/widgets/src/lib/components/InferenceWidget/shared/WidgetWrapper/WidgetWrapper.svelte index 03419b4f4bf1185c0c88d8fd8cb75f51d979ed7e..ab19581c88248e627aeae96aa02b9b20fecca1cd 100644 --- a/packages/widgets/src/lib/components/InferenceWidget/shared/WidgetWrapper/WidgetWrapper.svelte +++ b/packages/widgets/src/lib/components/InferenceWidget/shared/WidgetWrapper/WidgetWrapper.svelte @@ -1,10 +1,8 @@ - - + { - getOutput(); - }} + onClickSubmitBtn={handleNewMessage} submitButtonLabel="Send" /> diff --git a/packages/widgets/src/lib/components/InferenceWidget/widgets/FillMaskWidget/FillMaskWidget.svelte b/packages/widgets/src/lib/components/InferenceWidget/widgets/FillMaskWidget/FillMaskWidget.svelte index be71b31900e60f181c17c859ecae6a8dfa2de453..48d2ab66c4b8e0a1f24d2aa73be16ac7588687d1 100644 --- a/packages/widgets/src/lib/components/InferenceWidget/widgets/FillMaskWidget/FillMaskWidget.svelte +++ b/packages/widgets/src/lib/components/InferenceWidget/widgets/FillMaskWidget/FillMaskWidget.svelte @@ -129,7 +129,7 @@ getOutput({ ...opts.inferenceOpts, exampleOutput }); } - function validateExample(sample: WidgetExample): sample is WidgetExampleTextInput { + function validateExample(sample: unknown): sample is WidgetExampleTextInput { return isTextInput(sample) && (!sample.output || isValidOutputLabels(sample.output)); } diff --git a/packages/widgets/src/lib/components/InferenceWidget/widgets/ImageClassificationWidget/ImageClassificationWidget.svelte b/packages/widgets/src/lib/components/InferenceWidget/widgets/ImageClassificationWidget/ImageClassificationWidget.svelte index 7ad1fe582f999065be89391640e8d4f94350168e..2d6d5577b1cb3196fdec3177d656e384ec6dfc42 100644 --- a/packages/widgets/src/lib/components/InferenceWidget/widgets/ImageClassificationWidget/ImageClassificationWidget.svelte +++ b/packages/widgets/src/lib/components/InferenceWidget/widgets/ImageClassificationWidget/ImageClassificationWidget.svelte @@ -115,7 +115,7 @@ getOutput(blob, { ...opts.inferenceOpts, exampleOutput }); } - function validateExample(sample: WidgetExample): sample is WidgetExampleAssetInput { + function validateExample(sample: unknown): sample is WidgetExampleAssetInput { return isTextInput(sample) && (!sample.output || isValidOutputLabels(sample.output)); } diff --git a/packages/widgets/src/routes/+page.svelte b/packages/widgets/src/routes/+page.svelte index 389ea9ab1144419202dfc7b8c20572451ef08efd..46b110d7de9f633529d31594d6b56ea1baf2ebfd 100644 --- a/packages/widgets/src/routes/+page.svelte +++ b/packages/widgets/src/routes/+page.svelte @@ -46,6 +46,39 @@ use_default_system_prompt: true, }, }, + widgetData: [ + { text: "This is a text-only example", example_title: "Text only" }, + { + messages: [ + { + content: "You are a helpful assistant replying in very brief and straight-to-the-point answers.", + role: "system", + }, + { content: "Please exlain QCD in very few words", role: "user" }, + ], + example_title: "Chat messages", + }, + { + messages: [ + { + content: "You are a helpful assistant replying in very brief and straight-to-the-point answers.", + role: "system", + }, + { content: "Please exlain QCD in very few words", role: "user" }, + ], + output: { + text: "QCD is the physics of strong force and small particles.", + }, + example_title: "Chat messages with Output", + }, + { + text: "Explain QCD in one short sentence.", + output: { + text: "QCD is the physics of strong force and small particles.", + }, + example_title: "Text only with Output", + }, + ], }, { id: "microsoft/phi-2",