diff --git a/darwin/cli.py b/darwin/cli.py index 197b885bc..6b7645213 100644 --- a/darwin/cli.py +++ b/darwin/cli.py @@ -157,6 +157,9 @@ def _run(args: Namespace, parser: ArgumentParser) -> None: args.w, args.h, ) + # Annotation schema validation + elif args.command == "validate": + f.validate_schemas(location=args.location, pattern=args.pattern, silent=args.silent, output=args.output) if __name__ == "__main__": diff --git a/darwin/cli_functions.py b/darwin/cli_functions.py index 50a743514..89188b67c 100644 --- a/darwin/cli_functions.py +++ b/darwin/cli_functions.py @@ -1,9 +1,11 @@ import argparse import concurrent.futures import datetime +import json import os import sys import traceback +from glob import glob from itertools import tee from pathlib import Path from typing import Any, Dict, Iterator, List, NoReturn, Optional, Set, Union @@ -34,12 +36,15 @@ from darwin.dataset.utils import get_release_path from darwin.datatypes import ExportParser, ImportParser, PathLike, Team from darwin.exceptions import ( + AnnotationFileValidationError, IncompatibleOptions, InvalidLogin, MissingConfig, + MissingSchema, NameTaken, NotFound, Unauthenticated, + UnknownAnnotationFileSchema, UnrecognizableFileEncoding, UnsupportedExportFormat, UnsupportedFileType, @@ -55,6 +60,7 @@ persist_client_configuration, prompt, secure_continue_request, + validate_file_against_schema, ) @@ -798,6 +804,10 @@ def dataset_import( _error(str(e)) except UnrecognizableFileEncoding as e: _error(str(e)) + except UnknownAnnotationFileSchema as e: + _error(str(e)) + except AnnotationFileValidationError as e: + _error(str(e)) def list_files( @@ -939,7 +949,75 @@ def delete_files(dataset_slug: str, files: List[str], skip_user_confirmation: bo except NotFound as e: _error(f"No dataset with name '{e.name}'") except: - _error(f"An error has occurred, please try again later.") + _error("An error has occurred, please try again later.") + + +def validate_schemas( + location: str, + pattern: bool = False, + silent: bool = False, + output: Optional[Path] = None, +) -> None: + """ + Validate function for the CLI. Takes one of 3 required key word arguments describing the location of files and prints and/or saves an output + + Parameters + ---------- + location : str + str path to a folder or file location to search + pattern : bool, optional + glob style pattern matching, by default None + silent : bool, optional + flag to set silent console printing, only showing errors, by default False + output : Optional[Path], optional + filename for saving to output, by default None + """ + + all_errors = {} + if pattern: + to_validate = [Path(filename) for filename in glob(location)] + elif os.path.isfile(location): + to_validate = [Path(location)] + elif os.path.isdir(location): + to_validate = [Path(filename) for filename in Path(location).glob("*.json")] + else: + to_validate = [] + + console = Console(theme=_console_theme(), stderr=True) + + if not to_validate: + console.print("No files found to validate", style="warning") + return + + console.print(f"Validating schemas for {len(to_validate)} files") + + for file in to_validate: + try: + errors = [{"message": e.message, "location": e.json_path} for e in validate_file_against_schema(file)] + except MissingSchema as e: + errors = [{"message": e.message, "location": "schema link"}] + + all_errors[str(file)] = errors + if not errors: + if not silent: + console.print(f"{str(file)}: No Errors", style="success") + continue + console.print(f"{str(file)}: {len(errors)} errors", style="error") + for error in errors: + console.print(f"\t- Problem found in {error['location']}", style="error") + console.print(f"\t\t- {error['message']}", style="error") + + if output: + try: + filename: Path = output + if os.path.isdir(output): + filename = Path(os.path.join(output, "report.json")) + with open(filename, "w") as outfile: + json.dump(all_errors, outfile, indent=2) + console.print(f"Writing report to {filename}", style="success") + except Exception as e: + console.print(f"Error writing output file with {e}", style="error") + console.print("Did you supply an invalid filename?") def dataset_convert(dataset_identifier: str, format: str, output_dir: Optional[PathLike] = None) -> None: diff --git a/darwin/datatypes.py b/darwin/datatypes.py index c3c1cf6d9..61e0c81e8 100644 --- a/darwin/datatypes.py +++ b/darwin/datatypes.py @@ -286,6 +286,9 @@ class AnnotationFileVersion: minor: int = 0 suffix: str = "" + def __str__(self) -> str: + return f"{self.major}.{self.minor}{self.suffix}" + @dataclass class AnnotationFile: diff --git a/darwin/exceptions.py b/darwin/exceptions.py index 8088cd4d0..d5368804a 100644 --- a/darwin/exceptions.py +++ b/darwin/exceptions.py @@ -1,4 +1,11 @@ +from cmath import exp from pathlib import Path +from textwrap import dedent +from typing import List + +from jsonschema.exceptions import ValidationError as jscValidationError + +from darwin.datatypes import AnnotationFileVersion class IncompatibleOptions(Exception): @@ -146,6 +153,84 @@ class RequestEntitySizeExceeded(Exception): """ +class MissingSchema(Exception): + """ + Used to indicate a problem loading or finding the schema + """ + + def __init__(self, message: str): + """_summary_ + + Parameters + ---------- + message : str + Message to propogate up the stack + """ + self.message = message + + def __str__(self) -> str: + return self.message + + +class AnnotationFileValidationError(Exception): + """ + Used to indicate error while validation JSON annotation files. + """ + + def __init__(self, parent_error: jscValidationError, file_path: Path): + """ + Parameters + ---------- + parent_error: ValidationError + Error reported by ``jsonschema``. + file_path: Path + Path to annotation file that failed to validate. + """ + self.parent_error = parent_error + self.file_path = file_path + + def __str__(self) -> str: + return f"Unable to verify annotation file: '{self.file_path}'\n\n{self.parent_error.__str__()}".rstrip() + + +class UnknownAnnotationFileSchema(Exception): + """ + Used to indicate error when inferring schema for JSON annotation file. + """ + + def __init__( + self, file_path: Path, supported_versions: List[AnnotationFileVersion], detected_version: AnnotationFileVersion + ): + """ + Parameters + ---------- + file_path: Path + Path to annotation file that failed to validate. + + supported_versions: List[AnnotationFileVersion] + todo + + detected_version: AnnotationFileVersion + todo + """ + self.file_path = file_path + self.detected_version = detected_version + self.supported_versions = list(map(str, supported_versions)) + + def __str__(self) -> str: + return dedent( + f"""\ + Unable to find JSON schema for annotation file: '{self.file_path}' + + Given annotation file should have either: + * optional `schema_ref` field with URL to JSON schema + * `version` field set to one of supported natively versions: {self.supported_versions} + + Detected annotation file version is: '{self.detected_version}'. + """ + ) + + class UnknownExportVersion(Exception): """Used when dataset version is not recognized.""" @@ -177,9 +262,7 @@ def __init__(self, import_type: str, annotation_type: str): annotation_type: str The unsupported annotation type. """ - super().__init__( - f"Unsupported annotation type {annotation_type} for {import_type} import" - ) + super().__init__(f"Unsupported annotation type {annotation_type} for {import_type} import") self.import_type = import_type self.annotation_type = annotation_type diff --git a/darwin/options.py b/darwin/options.py index 0b2261021..5f4e575ae 100644 --- a/darwin/options.py +++ b/darwin/options.py @@ -45,6 +45,24 @@ def __init__(self): parser_convert.add_argument("output_dir", type=str, help="Where to store output files.") + # VALIDATE SCHEMA + parser_validate_schema = subparsers.add_parser( + "validate", help="Validate annotation files against Darwin schema" + ) + parser_validate_schema.add_argument( + "location", + help="Location of file/folder to validate. Accepts single files or a folder to search *.json files", + ) + parser_validate_schema.add_argument( + "--pattern", + action="store_true", + help="'location' is a Folder + File glob style pattern to search (eg: ./*.json)", + ) + + parser_validate_schema.add_argument( + "--silent", action="store_true", help="Flag to suppress all output except errors to console" + ) + parser_validate_schema.add_argument("--output", help="name of file to write output json to") # DATASET dataset = subparsers.add_parser( "dataset", help="Dataset related functions.", description="Arguments to interact with datasets" diff --git a/darwin/utils.py b/darwin/utils.py index 72d1aa93c..333c8d467 100644 --- a/darwin/utils.py +++ b/darwin/utils.py @@ -21,13 +21,21 @@ import deprecation import numpy as np import orjson as json -from requests import Response +import requests +from jsonschema import exceptions, validators +from requests import Response, request from rich.progress import ProgressType, track from upolygon import draw_polygon import darwin.datatypes as dt from darwin.config import Config -from darwin.exceptions import OutdatedDarwinJSONFormat, UnsupportedFileType +from darwin.exceptions import ( + AnnotationFileValidationError, + MissingSchema, + OutdatedDarwinJSONFormat, + UnknownAnnotationFileSchema, + UnsupportedFileType, +) from darwin.version import __version__ if TYPE_CHECKING: @@ -48,6 +56,8 @@ ] SUPPORTED_EXTENSIONS = SUPPORTED_IMAGE_EXTENSIONS + SUPPORTED_VIDEO_EXTENSIONS +_darwin_schema_cache = {} + def is_extension_allowed_by_filename(filename: str) -> bool: """ @@ -337,6 +347,43 @@ def _get_local_filename(metadata: Dict[str, Any]) -> str: return metadata["filename"] +def _get_schema(data: dict) -> Optional[dict]: + version = _parse_version(data) + schema_url = data.get("schema_ref") or _default_schema(version) + if not schema_url: + return None + if schema_url not in _darwin_schema_cache: + response = requests.get(schema_url) + response.raise_for_status() + schema = response.json() + _darwin_schema_cache[schema_url] = schema + return _darwin_schema_cache[schema_url] + + +def validate_file_against_schema(path: Path) -> List: + data, _ = load_data_from_file(path) + return validate_data_against_schema(data) + + +def validate_data_against_schema(data) -> List: + try: + schema = _get_schema(data) + except requests.exceptions.RequestException as e: + raise MissingSchema(f"Error retrieving schema from url: {e}") + if not schema: + raise MissingSchema("Schema not found") + validator = validators.Draft202012Validator(schema) + errors = list(validator.iter_errors(data)) + return errors + + +def load_data_from_file(path: Path): + with path.open() as infile: + data = json.loads(infile.read()) + version = _parse_version(data) + return data, version + + def parse_darwin_json(path: Path, count: Optional[int]) -> Optional[dt.AnnotationFile]: """ Parses the given JSON file in v7's darwin proprietary format. Works for images, split frame @@ -363,18 +410,18 @@ def parse_darwin_json(path: Path, count: Optional[int]) -> Optional[dt.Annotatio """ path = Path(path) - with path.open() as f: - data = json.loads(f.read()) - if "annotations" not in data: - return None - if _parse_version(data).major == 2: - return _parse_darwin_v2(path, data) + data, version = load_data_from_file(path) + if "annotations" not in data: + return None + + if version.major == 2: + return _parse_darwin_v2(path, data) + else: + if "fps" in data["image"] or "frame_count" in data["image"]: + return _parse_darwin_video(path, data, count) else: - if "fps" in data["image"] or "frame_count" in data["image"]: - return _parse_darwin_video(path, data, count) - else: - return _parse_darwin_image(path, data, count) + return _parse_darwin_image(path, data, count) def _parse_darwin_v2(path: Path, data: Dict[str, Any]) -> dt.AnnotationFile: @@ -995,3 +1042,11 @@ def _data_to_annotations(data: Dict[str, Any]) -> List[Union[dt.Annotation, dt.V filter(None, map(_parse_darwin_video_annotation, raw_video_annotations)) ) return [*image_annotations, *video_annotations] + + +def _supported_schema_versions(): + return {(2, 0, ""): "https://darwin-public.s3.eu-west-1.amazonaws.com/darwin_json/2.0/schema.json"} + + +def _default_schema(version: dt.AnnotationFileVersion): + return _supported_schema_versions().get((version.major, version.minor, version.suffix)) diff --git a/report.json b/report.json new file mode 100644 index 000000000..db357b4e3 --- /dev/null +++ b/report.json @@ -0,0 +1,57 @@ +{ + "../playground/d2-test/000000002.json": [], + "../playground/d2-test/PLAX_MOVIE1.json": [], + "../playground/d2-test/5a02e88abac48e5b1cfcd3a4_10_00002.json": [], + "../playground/d2-test/000000003.json": [], + "../playground/d2-test/no_schema.json": [ + { + "message": "Error retrieving schema from url: Invalid URL 'asd': No scheme supplied. Perhaps you meant https://asd?", + "location": "schema link" + } + ], + "../playground/d2-test/IMG_20200104_183214.json": [], + "../playground/d2-test/000000000_2.json": [ + { + "message": "'item' is a required property", + "location": "$" + } + ], + "../playground/d2-test/5a5a20fa5a9ef7cb5df18e5c_10_00026.json": [], + "../playground/d2-test/614953988c56070006259d23_10_00003.json": [], + "../playground/d2-test/5a5a20fa5a9ef7cb5df18e5c_10_00050.json": [], + "../playground/d2-test/610160855a90f10006fd303e_10_00464.json": [], + "../playground/d2-test/614953988c56070006259d23_10_00000.json": [], + "../playground/d2-test/610160855a90f10006fd303e_10_00492.json": [], + "../playground/d2-test/5a5a20fa5a9ef7cb5df18e5c_10_00009.json": [], + "../playground/d2-test/5a5a20fa5a9ef7cb5df18e5c_10_00025.json": [], + "../playground/d2-test/seg_401-DUAL__AX__SE-07653.json": [], + "../playground/d2-test/000000000.json": [ + { + "message": "'annotations' is a required property", + "location": "$" + } + ], + "../playground/d2-test/leonor_aspiazu_10_00000.jpg5b10408a2b6a08001185f427_10_00185.json": [], + "../playground/d2-test/5a00bf89bac48e5b1cf74f14_10_00000.json": [ + { + "message": "{} is not valid under any of the given schemas", + "location": "$.annotations[0]" + } + ], + "../playground/d2-test/5a02e88abac48e5b1cfcd3a4_10_00000.json": [ + { + "message": "{'bounding_box': {'h': 237.82999999999993, 'y': 1811.52}, 'id': 'ffec73e0-5037-4c7d-ada1-b7809b1cdafe', 'polygon': {'paths': [[{'x': 1198.31, 'y': 2048.42}, {'x': 1197.35, 'y': 2040.78}, {'x': 1199.02, 'y': 2036.25}, {'x': 1203.56, 'y': 2034.34}, {'x': 1215.5, 'y': 2034.1}, {'x': 1218.13, 'y': 2033.38}, {'x': 1218.13, 'y': 2031.71}, {'x': 1213.83, 'y': 2026.69}, {'x': 1214.54, 'y': 2004.97}, {'x': 1207.38, 'y': 1998.52}, {'x': 1204.51, 'y': 1997.8}, {'x': 1202.37, 'y': 1998.52}, {'x': 1196.4, 'y': 2005.92}, {'x': 1194.96, 'y': 2011.65}, {'x': 1190.9, 'y': 2016.19}, {'x': 1185.41, 'y': 2019.53}, {'x': 1177.53, 'y': 2020.01}, {'x': 1174.43, 'y': 2017.62}, {'x': 1172.28, 'y': 2011.89}, {'x': 1170.13, 'y': 2009.74}, {'x': 1166.79, 'y': 2008.55}, {'x': 1154.61, 'y': 2007.98}, {'x': 1152.16, 'y': 2003.5}, {'x': 1149.31, 'y': 2000.23}, {'x': 1136.66, 'y': 1988.41}, {'x': 1124.02, 'y': 1983.92}, {'x': 1117.09, 'y': 1979.43}, {'x': 1113.42, 'y': 1974.54}, {'x': 1112.19, 'y': 1970.05}, {'x': 1112.19, 'y': 1958.63}, {'x': 1113.82, 'y': 1954.15}, {'x': 1113.01, 'y': 1941.91}, {'x': 1120.03, 'y': 1929.29}, {'x': 1123.27, 'y': 1909.45}, {'x': 1121.79, 'y': 1907.98}, {'x': 1115.9, 'y': 1909.45}, {'x': 1101.15, 'y': 1908.96}, {'x': 1099.19, 'y': 1906.5}, {'x': 1097.71, 'y': 1906.01}, {'x': 1098.69, 'y': 1894.21}, {'x': 1098.2, 'y': 1891.76}, {'x': 1096.24, 'y': 1888.81}, {'x': 1090.83, 'y': 1884.88}, {'x': 1089.36, 'y': 1882.91}, {'x': 1088.33, 'y': 1874.47}, {'x': 1090.0, 'y': 1866.11}, {'x': 1090.0, 'y': 1853.58}, {'x': 1092.09, 'y': 1850.23}, {'x': 1093.76, 'y': 1848.56}, {'x': 1095.43, 'y': 1848.14}, {'x': 1099.61, 'y': 1847.31}, {'x': 1103.79, 'y': 1847.73}, {'x': 1105.46, 'y': 1848.98}, {'x': 1109.39, 'y': 1858.48}, {'x': 1111.93, 'y': 1861.02}, {'x': 1114.89, 'y': 1861.02}, {'x': 1116.58, 'y': 1860.18}, {'x': 1119.54, 'y': 1854.68}, {'x': 1122.93, 'y': 1852.98}, {'x': 1123.77, 'y': 1851.71}, {'x': 1124.62, 'y': 1840.71}, {'x': 1128.43, 'y': 1837.75}, {'x': 1138.58, 'y': 1837.33}, {'x': 1139.85, 'y': 1836.48}, {'x': 1140.69, 'y': 1833.1}, {'x': 1138.16, 'y': 1826.75}, {'x': 1137.73, 'y': 1820.41}, {'x': 1139.85, 'y': 1819.14}, {'x': 1143.66, 'y': 1819.14}, {'x': 1145.35, 'y': 1817.44}, {'x': 1147.04, 'y': 1817.02}, {'x': 1148.73, 'y': 1814.91}, {'x': 1152.96, 'y': 1812.79}, {'x': 1154.66, 'y': 1812.79}, {'x': 1155.93, 'y': 1811.52}, {'x': 1158.46, 'y': 1811.52}, {'x': 1166.08, 'y': 1814.91}, {'x': 1167.35, 'y': 1816.17}, {'x': 1174.54, 'y': 1818.29}, {'x': 1177.08, 'y': 1821.25}, {'x': 1181.31, 'y': 1830.56}, {'x': 1185.54, 'y': 1836.48}, {'x': 1188.08, 'y': 1838.17}, {'x': 1196.54, 'y': 1837.75}, {'x': 1198.23, 'y': 1838.6}, {'x': 1199.5, 'y': 1842.41}, {'x': 1202.89, 'y': 1846.64}, {'x': 1202.46, 'y': 1847.06}, {'x': 1209.32, 'y': 1855.32}, {'x': 1209.75, 'y': 1858.32}, {'x': 1212.32, 'y': 1862.18}, {'x': 1217.88, 'y': 1863.03}, {'x': 1222.17, 'y': 1866.03}, {'x': 1222.6, 'y': 1868.6}, {'x': 1223.45, 'y': 1869.46}, {'x': 1223.45, 'y': 1876.74}, {'x': 1221.74, 'y': 1881.02}, {'x': 1217.88, 'y': 1884.45}, {'x': 1206.75, 'y': 1884.87}, {'x': 1202.89, 'y': 1892.16}, {'x': 1202.89, 'y': 1895.58}, {'x': 1205.89, 'y': 1899.44}, {'x': 1205.89, 'y': 1901.15}, {'x': 1203.75, 'y': 1905.0}, {'x': 1203.75, 'y': 1911.0}, {'x': 1204.61, 'y': 1912.29}, {'x': 1211.89, 'y': 1918.71}, {'x': 1217.03, 'y': 1924.71}, {'x': 1220.45, 'y': 1926.42}, {'x': 1223.45, 'y': 1929.42}, {'x': 1230.3, 'y': 1933.7}, {'x': 1236.3, 'y': 1940.55}, {'x': 1253.15, 'y': 1956.02}, {'x': 1257.28, 'y': 1957.57}, {'x': 1257.8, 'y': 1958.6}, {'x': 1262.96, 'y': 1961.18}, {'x': 1271.22, 'y': 1961.18}, {'x': 1278.44, 'y': 1963.76}, {'x': 1291.35, 'y': 1964.8}, {'x': 1305.8, 'y': 1972.54}, {'x': 1308.9, 'y': 1974.6}, {'x': 1309.41, 'y': 1976.15}, {'x': 1313.54, 'y': 1979.76}, {'x': 1320.77, 'y': 1983.89}, {'x': 1327.99, 'y': 1985.44}, {'x': 1335.22, 'y': 1985.44}, {'x': 1338.83, 'y': 1982.34}, {'x': 1339.86, 'y': 1979.76}, {'x': 1359.65, 'y': 1972.93}, {'x': 1361.15, 'y': 1971.81}, {'x': 1356.67, 'y': 1968.08}, {'x': 1355.92, 'y': 1966.58}, {'x': 1355.92, 'y': 1962.11}, {'x': 1358.16, 'y': 1958.37}, {'x': 1361.89, 'y': 1956.51}, {'x': 1370.1, 'y': 1954.27}, {'x': 1383.54, 'y': 1953.52}, {'x': 1392.5, 'y': 1947.18}, {'x': 1400.33, 'y': 1946.43}, {'x': 1402.2, 'y': 1944.56}, {'x': 1402.2, 'y': 1942.7}, {'x': 1403.69, 'y': 1940.46}, {'x': 1414.92, 'y': 1942.11}, {'x': 1424.09, 'y': 1941.34}, {'x': 1446.02, 'y': 1930.76}, {'x': 1455.13, 'y': 1925.3}, {'x': 1459.23, 'y': 1924.38}, {'x': 1475.16, 'y': 1924.38}, {'x': 1476.07, 'y': 1925.3}, {'x': 1481.99, 'y': 1926.66}, {'x': 1483.36, 'y': 1928.03}, {'x': 1490.64, 'y': 1931.21}, {'x': 1494.74, 'y': 1934.4}, {'x': 1500.66, 'y': 1935.31}, {'x': 1506.12, 'y': 1935.31}, {'x': 1508.4, 'y': 1934.86}, {'x': 1510.22, 'y': 1933.49}, {'x': 1516.14, 'y': 1932.58}, {'x': 1521.15, 'y': 1928.94}, {'x': 1530.25, 'y': 1928.03}, {'x': 1532.08, 'y': 1927.12}, {'x': 1540.27, 'y': 1927.12}, {'x': 1542.09, 'y': 1927.57}, {'x': 1543.91, 'y': 1929.85}, {'x': 1548.47, 'y': 1933.04}, {'x': 1550.74, 'y': 1936.68}, {'x': 1557.57, 'y': 1943.96}, {'x': 1562.13, 'y': 1944.42}, {'x': 1567.59, 'y': 1941.69}, {'x': 1571.23, 'y': 1941.69}, {'x': 1570.32, 'y': 1941.23}, {'x': 1596.9, 'y': 1941.8}, {'x': 1602.39, 'y': 1937.96}, {'x': 1603.48, 'y': 1936.31}, {'x': 1603.48, 'y': 1934.67}, {'x': 1607.32, 'y': 1929.18}, {'x': 1613.36, 'y': 1925.89}, {'x': 1616.65, 'y': 1925.34}, {'x': 1618.3, 'y': 1923.69}, {'x': 1623.79, 'y': 1922.6}, {'x': 1624.33, 'y': 1921.5}, {'x': 1625.98, 'y': 1920.95}, {'x': 1632.02, 'y': 1920.4}, {'x': 1642.44, 'y': 1920.95}, {'x': 1644.09, 'y': 1928.63}, {'x': 1645.19, 'y': 1930.28}, {'x': 1651.77, 'y': 1933.02}, {'x': 1656.71, 'y': 1933.57}, {'x': 1663.29, 'y': 1937.41}, {'x': 1668.78, 'y': 1937.41}, {'x': 1677.56, 'y': 1933.02}, {'x': 1681.95, 'y': 1931.92}, {'x': 1687.44, 'y': 1927.53}, {'x': 1690.18, 'y': 1924.24}, {'x': 1693.47, 'y': 1923.14}, {'x': 1696.76, 'y': 1920.95}, {'x': 1698.41, 'y': 1918.76}, {'x': 1701.15, 'y': 1918.21}, {'x': 1702.8, 'y': 1916.56}, {'x': 1714.32, 'y': 1916.01}, {'x': 1717.07, 'y': 1917.66}, {'x': 1734.08, 'y': 1918.21}, {'x': 1737.92, 'y': 1923.69}, {'x': 1737.92, 'y': 1930.83}, {'x': 1736.82, 'y': 1934.67}, {'x': 1735.17, 'y': 1936.86}, {'x': 1735.72, 'y': 1941.8}, {'x': 1737.37, 'y': 1943.45}, {'x': 1757.12, 'y': 1944.0}, {'x': 1764.25, 'y': 1956.62}, {'x': 1765.9, 'y': 1964.3}, {'x': 1765.9, 'y': 1993.93}, {'x': 1767.0, 'y': 1996.12}, {'x': 1771.94, 'y': 2001.06}, {'x': 1774.13, 'y': 2001.06}, {'x': 1775.78, 'y': 1999.96}, {'x': 1777.42, 'y': 2000.51}, {'x': 1776.87, 'y': 2019.17}, {'x': 1782.36, 'y': 2022.46}, {'x': 1802.11, 'y': 2023.56}, {'x': 1806.5, 'y': 2030.14}, {'x': 1811.99, 'y': 2035.63}, {'x': 1813.09, 'y': 2035.63}, {'x': 1814.74, 'y': 2037.28}, {'x': 1815.83, 'y': 2040.02}, {'x': 1816.38, 'y': 2046.05}, {'x': 1814.19, 'y': 2049.35}]]}, 'slot_names': ['0']} is not valid under any of the given schemas", + "location": "$.annotations[0]" + } + ], + "../playground/d2-test/000000001.json": [ + { + "message": "'name' is a required property", + "location": "$.item" + }, + { + "message": "'path' is a required property", + "location": "$.item" + } + ] +} \ No newline at end of file diff --git a/setup.py b/setup.py index 40d068661..8abcba511 100644 --- a/setup.py +++ b/setup.py @@ -31,7 +31,7 @@ "requests", "rich", "upolygon==0.1.8", - "jsonschema==3.2.0", + "jsonschema>=4.0.0", "deprecation", "pydantic", "ujson", diff --git a/test_output_for_nifti_import_test.json b/test_output_for_nifti_import_test.json new file mode 100644 index 000000000..9485bb973 --- /dev/null +++ b/test_output_for_nifti_import_test.json @@ -0,0 +1,11489 @@ +{ + "annotation_classes": [ + { + "annotation_internal_type": "polygon", + "annotation_type": "polygon", + "name": "brain" + } + ], + "annotations": [ + { + "annotation_class": "brain", + "annotation_type": "polygon", + "frames": { + "74": { + "keyframe": true, + "polygon": { + "path": [ + { + "x": 69, + "y": 96 + }, + { + "x": 69, + "y": 109 + }, + { + "x": 70, + "y": 110 + }, + { + "x": 70, + "y": 134 + }, + { + "x": 70, + "y": 135 + }, + { + "x": 69, + "y": 136 + }, + { + "x": 69, + "y": 139 + }, + { + "x": 69, + "y": 140 + }, + { + "x": 71, + "y": 140 + }, + { + "x": 72, + "y": 139 + }, + { + "x": 74, + "y": 139 + }, + { + "x": 75, + "y": 139 + }, + { + "x": 76, + "y": 140 + }, + { + "x": 77, + "y": 141 + }, + { + "x": 77, + "y": 144 + }, + { + "x": 78, + "y": 145 + }, + { + "x": 78, + "y": 150 + }, + { + "x": 79, + "y": 151 + }, + { + "x": 79, + "y": 160 + }, + { + "x": 79, + "y": 161 + }, + { + "x": 80, + "y": 162 + }, + { + "x": 80, + "y": 163 + }, + { + "x": 81, + "y": 164 + }, + { + "x": 81, + "y": 165 + }, + { + "x": 82, + "y": 166 + }, + { + "x": 82, + "y": 167 + }, + { + "x": 83, + "y": 168 + }, + { + "x": 83, + "y": 169 + }, + { + "x": 84, + "y": 170 + }, + { + "x": 84, + "y": 171 + }, + { + "x": 85, + "y": 172 + }, + { + "x": 86, + "y": 173 + }, + { + "x": 87, + "y": 173 + }, + { + "x": 88, + "y": 174 + }, + { + "x": 89, + "y": 174 + }, + { + "x": 90, + "y": 174 + }, + { + "x": 91, + "y": 173 + }, + { + "x": 92, + "y": 173 + }, + { + "x": 92, + "y": 171 + }, + { + "x": 93, + "y": 170 + }, + { + "x": 93, + "y": 167 + }, + { + "x": 93, + "y": 166 + }, + { + "x": 94, + "y": 165 + }, + { + "x": 94, + "y": 164 + }, + { + "x": 94, + "y": 163 + }, + { + "x": 95, + "y": 162 + }, + { + "x": 95, + "y": 161 + }, + { + "x": 96, + "y": 160 + }, + { + "x": 97, + "y": 159 + }, + { + "x": 97, + "y": 158 + }, + { + "x": 98, + "y": 157 + }, + { + "x": 98, + "y": 156 + }, + { + "x": 99, + "y": 155 + }, + { + "x": 99, + "y": 152 + }, + { + "x": 99, + "y": 151 + }, + { + "x": 100, + "y": 150 + }, + { + "x": 100, + "y": 146 + }, + { + "x": 100, + "y": 145 + }, + { + "x": 101, + "y": 144 + }, + { + "x": 102, + "y": 144 + }, + { + "x": 103, + "y": 143 + }, + { + "x": 107, + "y": 143 + }, + { + "x": 108, + "y": 143 + }, + { + "x": 108, + "y": 141 + }, + { + "x": 109, + "y": 140 + }, + { + "x": 109, + "y": 137 + }, + { + "x": 108, + "y": 136 + }, + { + "x": 108, + "y": 126 + }, + { + "x": 108, + "y": 125 + }, + { + "x": 109, + "y": 124 + }, + { + "x": 109, + "y": 122 + }, + { + "x": 109, + "y": 121 + }, + { + "x": 108, + "y": 121 + }, + { + "x": 107, + "y": 122 + }, + { + "x": 106, + "y": 122 + }, + { + "x": 105, + "y": 123 + }, + { + "x": 104, + "y": 122 + }, + { + "x": 104, + "y": 118 + }, + { + "x": 104, + "y": 117 + }, + { + "x": 103, + "y": 116 + }, + { + "x": 103, + "y": 115 + }, + { + "x": 102, + "y": 114 + }, + { + "x": 102, + "y": 113 + }, + { + "x": 101, + "y": 112 + }, + { + "x": 101, + "y": 106 + }, + { + "x": 101, + "y": 105 + }, + { + "x": 100, + "y": 104 + }, + { + "x": 99, + "y": 104 + }, + { + "x": 98, + "y": 103 + }, + { + "x": 97, + "y": 102 + }, + { + "x": 96, + "y": 102 + }, + { + "x": 95, + "y": 101 + }, + { + "x": 94, + "y": 101 + }, + { + "x": 93, + "y": 100 + }, + { + "x": 87, + "y": 100 + }, + { + "x": 86, + "y": 100 + }, + { + "x": 85, + "y": 99 + }, + { + "x": 85, + "y": 98 + }, + { + "x": 84, + "y": 97 + }, + { + "x": 84, + "y": 93 + }, + { + "x": 84, + "y": 92 + }, + { + "x": 74, + "y": 92 + }, + { + "x": 73, + "y": 92 + }, + { + "x": 69, + "y": 96 + } + ] + } + }, + "75": { + "keyframe": true, + "polygon": { + "path": [ + { + "x": 69, + "y": 96 + }, + { + "x": 69, + "y": 108 + }, + { + "x": 70, + "y": 109 + }, + { + "x": 70, + "y": 133 + }, + { + "x": 70, + "y": 134 + }, + { + "x": 69, + "y": 135 + }, + { + "x": 69, + "y": 138 + }, + { + "x": 69, + "y": 139 + }, + { + "x": 75, + "y": 139 + }, + { + "x": 76, + "y": 140 + }, + { + "x": 76, + "y": 142 + }, + { + "x": 77, + "y": 143 + }, + { + "x": 77, + "y": 146 + }, + { + "x": 78, + "y": 147 + }, + { + "x": 78, + "y": 150 + }, + { + "x": 79, + "y": 151 + }, + { + "x": 79, + "y": 160 + }, + { + "x": 79, + "y": 161 + }, + { + "x": 80, + "y": 162 + }, + { + "x": 80, + "y": 163 + }, + { + "x": 81, + "y": 164 + }, + { + "x": 81, + "y": 165 + }, + { + "x": 82, + "y": 166 + }, + { + "x": 82, + "y": 167 + }, + { + "x": 83, + "y": 168 + }, + { + "x": 83, + "y": 169 + }, + { + "x": 84, + "y": 170 + }, + { + "x": 84, + "y": 171 + }, + { + "x": 85, + "y": 171 + }, + { + "x": 86, + "y": 172 + }, + { + "x": 89, + "y": 172 + }, + { + "x": 90, + "y": 172 + }, + { + "x": 91, + "y": 171 + }, + { + "x": 92, + "y": 171 + }, + { + "x": 92, + "y": 170 + }, + { + "x": 92, + "y": 169 + }, + { + "x": 93, + "y": 168 + }, + { + "x": 93, + "y": 166 + }, + { + "x": 93, + "y": 165 + }, + { + "x": 94, + "y": 164 + }, + { + "x": 94, + "y": 163 + }, + { + "x": 94, + "y": 162 + }, + { + "x": 95, + "y": 161 + }, + { + "x": 95, + "y": 160 + }, + { + "x": 96, + "y": 159 + }, + { + "x": 96, + "y": 158 + }, + { + "x": 97, + "y": 157 + }, + { + "x": 97, + "y": 156 + }, + { + "x": 98, + "y": 155 + }, + { + "x": 98, + "y": 153 + }, + { + "x": 98, + "y": 152 + }, + { + "x": 99, + "y": 151 + }, + { + "x": 99, + "y": 148 + }, + { + "x": 99, + "y": 147 + }, + { + "x": 100, + "y": 146 + }, + { + "x": 100, + "y": 145 + }, + { + "x": 100, + "y": 144 + }, + { + "x": 101, + "y": 143 + }, + { + "x": 102, + "y": 143 + }, + { + "x": 103, + "y": 142 + }, + { + "x": 107, + "y": 142 + }, + { + "x": 108, + "y": 142 + }, + { + "x": 108, + "y": 140 + }, + { + "x": 109, + "y": 139 + }, + { + "x": 109, + "y": 136 + }, + { + "x": 108, + "y": 135 + }, + { + "x": 108, + "y": 126 + }, + { + "x": 108, + "y": 125 + }, + { + "x": 109, + "y": 124 + }, + { + "x": 109, + "y": 121 + }, + { + "x": 109, + "y": 120 + }, + { + "x": 108, + "y": 120 + }, + { + "x": 107, + "y": 121 + }, + { + "x": 106, + "y": 121 + }, + { + "x": 104, + "y": 123 + }, + { + "x": 103, + "y": 122 + }, + { + "x": 103, + "y": 118 + }, + { + "x": 103, + "y": 117 + }, + { + "x": 102, + "y": 116 + }, + { + "x": 102, + "y": 114 + }, + { + "x": 102, + "y": 113 + }, + { + "x": 101, + "y": 112 + }, + { + "x": 101, + "y": 109 + }, + { + "x": 101, + "y": 108 + }, + { + "x": 100, + "y": 107 + }, + { + "x": 100, + "y": 106 + }, + { + "x": 100, + "y": 105 + }, + { + "x": 99, + "y": 104 + }, + { + "x": 98, + "y": 103 + }, + { + "x": 97, + "y": 103 + }, + { + "x": 96, + "y": 102 + }, + { + "x": 95, + "y": 101 + }, + { + "x": 94, + "y": 101 + }, + { + "x": 93, + "y": 100 + }, + { + "x": 88, + "y": 100 + }, + { + "x": 87, + "y": 100 + }, + { + "x": 86, + "y": 99 + }, + { + "x": 85, + "y": 98 + }, + { + "x": 85, + "y": 97 + }, + { + "x": 84, + "y": 96 + }, + { + "x": 84, + "y": 93 + }, + { + "x": 84, + "y": 92 + }, + { + "x": 74, + "y": 92 + }, + { + "x": 73, + "y": 92 + }, + { + "x": 69, + "y": 96 + } + ] + } + }, + "76": { + "keyframe": true, + "polygon": { + "path": [ + { + "x": 69, + "y": 96 + }, + { + "x": 69, + "y": 108 + }, + { + "x": 70, + "y": 109 + }, + { + "x": 70, + "y": 132 + }, + { + "x": 70, + "y": 133 + }, + { + "x": 69, + "y": 134 + }, + { + "x": 69, + "y": 137 + }, + { + "x": 69, + "y": 138 + }, + { + "x": 75, + "y": 138 + }, + { + "x": 76, + "y": 139 + }, + { + "x": 76, + "y": 142 + }, + { + "x": 77, + "y": 143 + }, + { + "x": 77, + "y": 148 + }, + { + "x": 78, + "y": 149 + }, + { + "x": 78, + "y": 158 + }, + { + "x": 78, + "y": 159 + }, + { + "x": 79, + "y": 160 + }, + { + "x": 79, + "y": 161 + }, + { + "x": 80, + "y": 162 + }, + { + "x": 80, + "y": 163 + }, + { + "x": 81, + "y": 164 + }, + { + "x": 82, + "y": 165 + }, + { + "x": 82, + "y": 166 + }, + { + "x": 83, + "y": 167 + }, + { + "x": 83, + "y": 168 + }, + { + "x": 84, + "y": 169 + }, + { + "x": 85, + "y": 170 + }, + { + "x": 86, + "y": 170 + }, + { + "x": 87, + "y": 171 + }, + { + "x": 88, + "y": 171 + }, + { + "x": 89, + "y": 170 + }, + { + "x": 90, + "y": 170 + }, + { + "x": 91, + "y": 169 + }, + { + "x": 91, + "y": 168 + }, + { + "x": 92, + "y": 167 + }, + { + "x": 92, + "y": 166 + }, + { + "x": 92, + "y": 165 + }, + { + "x": 93, + "y": 164 + }, + { + "x": 93, + "y": 163 + }, + { + "x": 93, + "y": 162 + }, + { + "x": 94, + "y": 161 + }, + { + "x": 94, + "y": 160 + }, + { + "x": 95, + "y": 159 + }, + { + "x": 95, + "y": 158 + }, + { + "x": 96, + "y": 157 + }, + { + "x": 96, + "y": 156 + }, + { + "x": 97, + "y": 155 + }, + { + "x": 97, + "y": 154 + }, + { + "x": 98, + "y": 153 + }, + { + "x": 98, + "y": 152 + }, + { + "x": 98, + "y": 151 + }, + { + "x": 99, + "y": 150 + }, + { + "x": 99, + "y": 148 + }, + { + "x": 99, + "y": 147 + }, + { + "x": 100, + "y": 146 + }, + { + "x": 100, + "y": 145 + }, + { + "x": 100, + "y": 144 + }, + { + "x": 102, + "y": 142 + }, + { + "x": 103, + "y": 141 + }, + { + "x": 107, + "y": 141 + }, + { + "x": 108, + "y": 141 + }, + { + "x": 108, + "y": 130 + }, + { + "x": 107, + "y": 129 + }, + { + "x": 107, + "y": 125 + }, + { + "x": 107, + "y": 124 + }, + { + "x": 108, + "y": 123 + }, + { + "x": 108, + "y": 120 + }, + { + "x": 108, + "y": 119 + }, + { + "x": 107, + "y": 119 + }, + { + "x": 104, + "y": 122 + }, + { + "x": 103, + "y": 121 + }, + { + "x": 103, + "y": 117 + }, + { + "x": 103, + "y": 116 + }, + { + "x": 102, + "y": 115 + }, + { + "x": 102, + "y": 114 + }, + { + "x": 101, + "y": 113 + }, + { + "x": 101, + "y": 112 + }, + { + "x": 100, + "y": 111 + }, + { + "x": 100, + "y": 106 + }, + { + "x": 100, + "y": 105 + }, + { + "x": 99, + "y": 104 + }, + { + "x": 98, + "y": 104 + }, + { + "x": 97, + "y": 103 + }, + { + "x": 96, + "y": 102 + }, + { + "x": 95, + "y": 102 + }, + { + "x": 94, + "y": 101 + }, + { + "x": 93, + "y": 101 + }, + { + "x": 92, + "y": 100 + }, + { + "x": 88, + "y": 100 + }, + { + "x": 87, + "y": 100 + }, + { + "x": 86, + "y": 99 + }, + { + "x": 85, + "y": 98 + }, + { + "x": 85, + "y": 97 + }, + { + "x": 84, + "y": 96 + }, + { + "x": 84, + "y": 93 + }, + { + "x": 84, + "y": 92 + }, + { + "x": 74, + "y": 92 + }, + { + "x": 73, + "y": 92 + }, + { + "x": 69, + "y": 96 + } + ] + } + }, + "77": { + "keyframe": true, + "polygon": { + "path": [ + { + "x": 68, + "y": 134 + }, + { + "x": 68, + "y": 136 + }, + { + "x": 68, + "y": 137 + }, + { + "x": 73, + "y": 137 + }, + { + "x": 74, + "y": 137 + }, + { + "x": 75, + "y": 138 + }, + { + "x": 76, + "y": 139 + }, + { + "x": 76, + "y": 142 + }, + { + "x": 77, + "y": 143 + }, + { + "x": 77, + "y": 148 + }, + { + "x": 78, + "y": 149 + }, + { + "x": 78, + "y": 157 + }, + { + "x": 78, + "y": 158 + }, + { + "x": 79, + "y": 159 + }, + { + "x": 79, + "y": 160 + }, + { + "x": 80, + "y": 161 + }, + { + "x": 80, + "y": 162 + }, + { + "x": 81, + "y": 163 + }, + { + "x": 81, + "y": 164 + }, + { + "x": 82, + "y": 165 + }, + { + "x": 82, + "y": 166 + }, + { + "x": 83, + "y": 167 + }, + { + "x": 84, + "y": 168 + }, + { + "x": 85, + "y": 168 + }, + { + "x": 86, + "y": 169 + }, + { + "x": 90, + "y": 169 + }, + { + "x": 91, + "y": 168 + }, + { + "x": 91, + "y": 167 + }, + { + "x": 91, + "y": 166 + }, + { + "x": 92, + "y": 165 + }, + { + "x": 92, + "y": 164 + }, + { + "x": 93, + "y": 163 + }, + { + "x": 93, + "y": 162 + }, + { + "x": 93, + "y": 161 + }, + { + "x": 94, + "y": 160 + }, + { + "x": 94, + "y": 159 + }, + { + "x": 95, + "y": 158 + }, + { + "x": 95, + "y": 157 + }, + { + "x": 96, + "y": 156 + }, + { + "x": 96, + "y": 155 + }, + { + "x": 97, + "y": 154 + }, + { + "x": 97, + "y": 153 + }, + { + "x": 98, + "y": 152 + }, + { + "x": 98, + "y": 151 + }, + { + "x": 98, + "y": 150 + }, + { + "x": 99, + "y": 149 + }, + { + "x": 99, + "y": 147 + }, + { + "x": 99, + "y": 146 + }, + { + "x": 100, + "y": 145 + }, + { + "x": 100, + "y": 144 + }, + { + "x": 100, + "y": 143 + }, + { + "x": 101, + "y": 142 + }, + { + "x": 102, + "y": 142 + }, + { + "x": 103, + "y": 141 + }, + { + "x": 104, + "y": 141 + }, + { + "x": 105, + "y": 141 + }, + { + "x": 106, + "y": 140 + }, + { + "x": 107, + "y": 140 + }, + { + "x": 108, + "y": 140 + }, + { + "x": 108, + "y": 135 + }, + { + "x": 107, + "y": 134 + }, + { + "x": 107, + "y": 125 + }, + { + "x": 107, + "y": 124 + }, + { + "x": 108, + "y": 123 + }, + { + "x": 108, + "y": 120 + }, + { + "x": 108, + "y": 119 + }, + { + "x": 107, + "y": 119 + }, + { + "x": 106, + "y": 119 + }, + { + "x": 105, + "y": 120 + }, + { + "x": 104, + "y": 120 + }, + { + "x": 103, + "y": 121 + }, + { + "x": 102, + "y": 120 + }, + { + "x": 102, + "y": 116 + }, + { + "x": 102, + "y": 115 + }, + { + "x": 101, + "y": 114 + }, + { + "x": 101, + "y": 113 + }, + { + "x": 101, + "y": 112 + }, + { + "x": 100, + "y": 111 + }, + { + "x": 100, + "y": 109 + }, + { + "x": 100, + "y": 108 + }, + { + "x": 99, + "y": 107 + }, + { + "x": 99, + "y": 106 + }, + { + "x": 99, + "y": 105 + }, + { + "x": 98, + "y": 104 + }, + { + "x": 97, + "y": 103 + }, + { + "x": 96, + "y": 103 + }, + { + "x": 95, + "y": 102 + }, + { + "x": 94, + "y": 101 + }, + { + "x": 93, + "y": 101 + }, + { + "x": 92, + "y": 100 + }, + { + "x": 90, + "y": 100 + }, + { + "x": 89, + "y": 100 + }, + { + "x": 88, + "y": 99 + }, + { + "x": 87, + "y": 99 + }, + { + "x": 86, + "y": 99 + }, + { + "x": 85, + "y": 98 + }, + { + "x": 85, + "y": 97 + }, + { + "x": 84, + "y": 96 + }, + { + "x": 84, + "y": 95 + }, + { + "x": 84, + "y": 94 + }, + { + "x": 83, + "y": 93 + }, + { + "x": 83, + "y": 92 + }, + { + "x": 74, + "y": 92 + }, + { + "x": 73, + "y": 92 + }, + { + "x": 70, + "y": 95 + }, + { + "x": 69, + "y": 96 + }, + { + "x": 69, + "y": 107 + }, + { + "x": 70, + "y": 108 + }, + { + "x": 70, + "y": 130 + }, + { + "x": 70, + "y": 131 + }, + { + "x": 69, + "y": 132 + }, + { + "x": 69, + "y": 133 + }, + { + "x": 68, + "y": 134 + } + ] + } + }, + "78": { + "keyframe": true, + "polygon": { + "path": [ + { + "x": 68, + "y": 133 + }, + { + "x": 68, + "y": 135 + }, + { + "x": 68, + "y": 136 + }, + { + "x": 70, + "y": 136 + }, + { + "x": 71, + "y": 136 + }, + { + "x": 72, + "y": 137 + }, + { + "x": 75, + "y": 137 + }, + { + "x": 76, + "y": 138 + }, + { + "x": 76, + "y": 144 + }, + { + "x": 77, + "y": 145 + }, + { + "x": 77, + "y": 156 + }, + { + "x": 77, + "y": 157 + }, + { + "x": 78, + "y": 158 + }, + { + "x": 78, + "y": 159 + }, + { + "x": 80, + "y": 161 + }, + { + "x": 80, + "y": 162 + }, + { + "x": 82, + "y": 164 + }, + { + "x": 82, + "y": 165 + }, + { + "x": 83, + "y": 166 + }, + { + "x": 84, + "y": 166 + }, + { + "x": 85, + "y": 167 + }, + { + "x": 88, + "y": 167 + }, + { + "x": 89, + "y": 167 + }, + { + "x": 90, + "y": 166 + }, + { + "x": 91, + "y": 166 + }, + { + "x": 91, + "y": 165 + }, + { + "x": 92, + "y": 164 + }, + { + "x": 92, + "y": 162 + }, + { + "x": 92, + "y": 161 + }, + { + "x": 93, + "y": 160 + }, + { + "x": 93, + "y": 159 + }, + { + "x": 93, + "y": 158 + }, + { + "x": 94, + "y": 157 + }, + { + "x": 94, + "y": 156 + }, + { + "x": 95, + "y": 155 + }, + { + "x": 96, + "y": 154 + }, + { + "x": 96, + "y": 153 + }, + { + "x": 97, + "y": 152 + }, + { + "x": 97, + "y": 151 + }, + { + "x": 98, + "y": 150 + }, + { + "x": 98, + "y": 149 + }, + { + "x": 99, + "y": 148 + }, + { + "x": 99, + "y": 146 + }, + { + "x": 99, + "y": 145 + }, + { + "x": 100, + "y": 144 + }, + { + "x": 100, + "y": 143 + }, + { + "x": 100, + "y": 142 + }, + { + "x": 101, + "y": 141 + }, + { + "x": 102, + "y": 140 + }, + { + "x": 103, + "y": 140 + }, + { + "x": 104, + "y": 140 + }, + { + "x": 105, + "y": 139 + }, + { + "x": 106, + "y": 139 + }, + { + "x": 107, + "y": 139 + }, + { + "x": 107, + "y": 137 + }, + { + "x": 108, + "y": 136 + }, + { + "x": 108, + "y": 134 + }, + { + "x": 107, + "y": 133 + }, + { + "x": 107, + "y": 124 + }, + { + "x": 107, + "y": 123 + }, + { + "x": 108, + "y": 122 + }, + { + "x": 108, + "y": 119 + }, + { + "x": 108, + "y": 118 + }, + { + "x": 107, + "y": 118 + }, + { + "x": 106, + "y": 119 + }, + { + "x": 105, + "y": 119 + }, + { + "x": 104, + "y": 120 + }, + { + "x": 103, + "y": 121 + }, + { + "x": 102, + "y": 120 + }, + { + "x": 102, + "y": 116 + }, + { + "x": 102, + "y": 115 + }, + { + "x": 101, + "y": 114 + }, + { + "x": 101, + "y": 113 + }, + { + "x": 100, + "y": 112 + }, + { + "x": 100, + "y": 111 + }, + { + "x": 99, + "y": 110 + }, + { + "x": 99, + "y": 109 + }, + { + "x": 99, + "y": 108 + }, + { + "x": 98, + "y": 107 + }, + { + "x": 98, + "y": 106 + }, + { + "x": 98, + "y": 105 + }, + { + "x": 94, + "y": 101 + }, + { + "x": 93, + "y": 100 + }, + { + "x": 92, + "y": 100 + }, + { + "x": 91, + "y": 99 + }, + { + "x": 87, + "y": 99 + }, + { + "x": 86, + "y": 99 + }, + { + "x": 85, + "y": 98 + }, + { + "x": 85, + "y": 97 + }, + { + "x": 84, + "y": 96 + }, + { + "x": 84, + "y": 95 + }, + { + "x": 84, + "y": 94 + }, + { + "x": 83, + "y": 93 + }, + { + "x": 83, + "y": 92 + }, + { + "x": 74, + "y": 92 + }, + { + "x": 73, + "y": 92 + }, + { + "x": 70, + "y": 95 + }, + { + "x": 69, + "y": 96 + }, + { + "x": 69, + "y": 107 + }, + { + "x": 70, + "y": 108 + }, + { + "x": 70, + "y": 129 + }, + { + "x": 70, + "y": 130 + }, + { + "x": 69, + "y": 131 + }, + { + "x": 69, + "y": 132 + }, + { + "x": 68, + "y": 133 + } + ] + } + }, + "79": { + "keyframe": true, + "polygon": { + "path": [ + { + "x": 68, + "y": 130 + }, + { + "x": 68, + "y": 134 + }, + { + "x": 68, + "y": 135 + }, + { + "x": 70, + "y": 135 + }, + { + "x": 71, + "y": 135 + }, + { + "x": 72, + "y": 136 + }, + { + "x": 74, + "y": 136 + }, + { + "x": 75, + "y": 137 + }, + { + "x": 75, + "y": 140 + }, + { + "x": 76, + "y": 141 + }, + { + "x": 76, + "y": 146 + }, + { + "x": 77, + "y": 147 + }, + { + "x": 77, + "y": 155 + }, + { + "x": 77, + "y": 156 + }, + { + "x": 78, + "y": 157 + }, + { + "x": 78, + "y": 158 + }, + { + "x": 80, + "y": 160 + }, + { + "x": 81, + "y": 161 + }, + { + "x": 81, + "y": 162 + }, + { + "x": 84, + "y": 165 + }, + { + "x": 85, + "y": 166 + }, + { + "x": 86, + "y": 166 + }, + { + "x": 87, + "y": 165 + }, + { + "x": 88, + "y": 165 + }, + { + "x": 89, + "y": 165 + }, + { + "x": 90, + "y": 164 + }, + { + "x": 91, + "y": 164 + }, + { + "x": 91, + "y": 163 + }, + { + "x": 92, + "y": 162 + }, + { + "x": 92, + "y": 160 + }, + { + "x": 92, + "y": 159 + }, + { + "x": 93, + "y": 158 + }, + { + "x": 93, + "y": 157 + }, + { + "x": 93, + "y": 156 + }, + { + "x": 94, + "y": 155 + }, + { + "x": 94, + "y": 154 + }, + { + "x": 95, + "y": 153 + }, + { + "x": 95, + "y": 152 + }, + { + "x": 96, + "y": 151 + }, + { + "x": 96, + "y": 150 + }, + { + "x": 97, + "y": 149 + }, + { + "x": 97, + "y": 148 + }, + { + "x": 98, + "y": 147 + }, + { + "x": 98, + "y": 146 + }, + { + "x": 99, + "y": 145 + }, + { + "x": 99, + "y": 144 + }, + { + "x": 99, + "y": 143 + }, + { + "x": 100, + "y": 142 + }, + { + "x": 100, + "y": 141 + }, + { + "x": 101, + "y": 140 + }, + { + "x": 102, + "y": 139 + }, + { + "x": 106, + "y": 139 + }, + { + "x": 107, + "y": 139 + }, + { + "x": 107, + "y": 137 + }, + { + "x": 108, + "y": 136 + }, + { + "x": 108, + "y": 133 + }, + { + "x": 107, + "y": 132 + }, + { + "x": 107, + "y": 119 + }, + { + "x": 107, + "y": 118 + }, + { + "x": 106, + "y": 118 + }, + { + "x": 105, + "y": 118 + }, + { + "x": 104, + "y": 119 + }, + { + "x": 103, + "y": 119 + }, + { + "x": 102, + "y": 120 + }, + { + "x": 101, + "y": 119 + }, + { + "x": 101, + "y": 116 + }, + { + "x": 101, + "y": 115 + }, + { + "x": 100, + "y": 114 + }, + { + "x": 100, + "y": 113 + }, + { + "x": 99, + "y": 112 + }, + { + "x": 99, + "y": 111 + }, + { + "x": 98, + "y": 110 + }, + { + "x": 98, + "y": 105 + }, + { + "x": 98, + "y": 104 + }, + { + "x": 97, + "y": 103 + }, + { + "x": 96, + "y": 102 + }, + { + "x": 95, + "y": 102 + }, + { + "x": 94, + "y": 101 + }, + { + "x": 93, + "y": 100 + }, + { + "x": 92, + "y": 100 + }, + { + "x": 91, + "y": 99 + }, + { + "x": 87, + "y": 99 + }, + { + "x": 86, + "y": 99 + }, + { + "x": 85, + "y": 98 + }, + { + "x": 85, + "y": 97 + }, + { + "x": 84, + "y": 96 + }, + { + "x": 84, + "y": 95 + }, + { + "x": 84, + "y": 94 + }, + { + "x": 83, + "y": 93 + }, + { + "x": 83, + "y": 92 + }, + { + "x": 74, + "y": 92 + }, + { + "x": 73, + "y": 92 + }, + { + "x": 72, + "y": 93 + }, + { + "x": 72, + "y": 94 + }, + { + "x": 71, + "y": 95 + }, + { + "x": 70, + "y": 96 + }, + { + "x": 70, + "y": 121 + }, + { + "x": 70, + "y": 122 + }, + { + "x": 69, + "y": 123 + }, + { + "x": 69, + "y": 128 + }, + { + "x": 69, + "y": 129 + }, + { + "x": 68, + "y": 130 + } + ] + } + }, + "80": { + "keyframe": true, + "polygon": { + "path": [ + { + "x": 68, + "y": 129 + }, + { + "x": 68, + "y": 133 + }, + { + "x": 68, + "y": 134 + }, + { + "x": 70, + "y": 134 + }, + { + "x": 71, + "y": 134 + }, + { + "x": 72, + "y": 135 + }, + { + "x": 74, + "y": 135 + }, + { + "x": 75, + "y": 136 + }, + { + "x": 75, + "y": 139 + }, + { + "x": 76, + "y": 140 + }, + { + "x": 76, + "y": 145 + }, + { + "x": 77, + "y": 146 + }, + { + "x": 77, + "y": 153 + }, + { + "x": 77, + "y": 154 + }, + { + "x": 78, + "y": 155 + }, + { + "x": 78, + "y": 156 + }, + { + "x": 79, + "y": 157 + }, + { + "x": 79, + "y": 158 + }, + { + "x": 80, + "y": 159 + }, + { + "x": 80, + "y": 160 + }, + { + "x": 81, + "y": 161 + }, + { + "x": 81, + "y": 162 + }, + { + "x": 82, + "y": 163 + }, + { + "x": 83, + "y": 163 + }, + { + "x": 84, + "y": 164 + }, + { + "x": 88, + "y": 164 + }, + { + "x": 89, + "y": 164 + }, + { + "x": 90, + "y": 163 + }, + { + "x": 90, + "y": 162 + }, + { + "x": 90, + "y": 161 + }, + { + "x": 91, + "y": 160 + }, + { + "x": 91, + "y": 159 + }, + { + "x": 92, + "y": 158 + }, + { + "x": 92, + "y": 157 + }, + { + "x": 93, + "y": 156 + }, + { + "x": 93, + "y": 155 + }, + { + "x": 94, + "y": 154 + }, + { + "x": 94, + "y": 153 + }, + { + "x": 95, + "y": 152 + }, + { + "x": 95, + "y": 151 + }, + { + "x": 96, + "y": 150 + }, + { + "x": 96, + "y": 149 + }, + { + "x": 97, + "y": 148 + }, + { + "x": 97, + "y": 147 + }, + { + "x": 98, + "y": 146 + }, + { + "x": 98, + "y": 144 + }, + { + "x": 98, + "y": 143 + }, + { + "x": 99, + "y": 142 + }, + { + "x": 99, + "y": 141 + }, + { + "x": 99, + "y": 140 + }, + { + "x": 100, + "y": 139 + }, + { + "x": 101, + "y": 139 + }, + { + "x": 102, + "y": 138 + }, + { + "x": 106, + "y": 138 + }, + { + "x": 107, + "y": 138 + }, + { + "x": 107, + "y": 136 + }, + { + "x": 108, + "y": 135 + }, + { + "x": 108, + "y": 133 + }, + { + "x": 107, + "y": 132 + }, + { + "x": 107, + "y": 127 + }, + { + "x": 106, + "y": 126 + }, + { + "x": 106, + "y": 123 + }, + { + "x": 106, + "y": 122 + }, + { + "x": 107, + "y": 121 + }, + { + "x": 107, + "y": 118 + }, + { + "x": 107, + "y": 117 + }, + { + "x": 106, + "y": 117 + }, + { + "x": 105, + "y": 117 + }, + { + "x": 104, + "y": 118 + }, + { + "x": 103, + "y": 118 + }, + { + "x": 102, + "y": 119 + }, + { + "x": 101, + "y": 118 + }, + { + "x": 101, + "y": 115 + }, + { + "x": 101, + "y": 114 + }, + { + "x": 100, + "y": 113 + }, + { + "x": 100, + "y": 112 + }, + { + "x": 99, + "y": 111 + }, + { + "x": 99, + "y": 110 + }, + { + "x": 98, + "y": 109 + }, + { + "x": 98, + "y": 108 + }, + { + "x": 98, + "y": 107 + }, + { + "x": 97, + "y": 106 + }, + { + "x": 97, + "y": 105 + }, + { + "x": 97, + "y": 104 + }, + { + "x": 94, + "y": 101 + }, + { + "x": 93, + "y": 100 + }, + { + "x": 92, + "y": 100 + }, + { + "x": 91, + "y": 99 + }, + { + "x": 90, + "y": 99 + }, + { + "x": 89, + "y": 99 + }, + { + "x": 88, + "y": 98 + }, + { + "x": 87, + "y": 98 + }, + { + "x": 86, + "y": 98 + }, + { + "x": 85, + "y": 97 + }, + { + "x": 85, + "y": 96 + }, + { + "x": 84, + "y": 95 + }, + { + "x": 84, + "y": 94 + }, + { + "x": 83, + "y": 93 + }, + { + "x": 83, + "y": 92 + }, + { + "x": 74, + "y": 92 + }, + { + "x": 73, + "y": 92 + }, + { + "x": 71, + "y": 94 + }, + { + "x": 70, + "y": 95 + }, + { + "x": 70, + "y": 120 + }, + { + "x": 70, + "y": 121 + }, + { + "x": 69, + "y": 122 + }, + { + "x": 69, + "y": 127 + }, + { + "x": 69, + "y": 128 + }, + { + "x": 68, + "y": 129 + } + ] + } + }, + "81": { + "keyframe": true, + "polygon": { + "path": [ + { + "x": 67, + "y": 129 + }, + { + "x": 67, + "y": 130 + }, + { + "x": 67, + "y": 131 + }, + { + "x": 68, + "y": 132 + }, + { + "x": 68, + "y": 133 + }, + { + "x": 69, + "y": 133 + }, + { + "x": 70, + "y": 134 + }, + { + "x": 71, + "y": 134 + }, + { + "x": 72, + "y": 134 + }, + { + "x": 73, + "y": 135 + }, + { + "x": 74, + "y": 135 + }, + { + "x": 75, + "y": 136 + }, + { + "x": 75, + "y": 141 + }, + { + "x": 76, + "y": 142 + }, + { + "x": 76, + "y": 152 + }, + { + "x": 76, + "y": 153 + }, + { + "x": 77, + "y": 154 + }, + { + "x": 77, + "y": 155 + }, + { + "x": 80, + "y": 158 + }, + { + "x": 80, + "y": 159 + }, + { + "x": 84, + "y": 163 + }, + { + "x": 85, + "y": 163 + }, + { + "x": 86, + "y": 162 + }, + { + "x": 87, + "y": 162 + }, + { + "x": 88, + "y": 162 + }, + { + "x": 89, + "y": 161 + }, + { + "x": 90, + "y": 161 + }, + { + "x": 90, + "y": 160 + }, + { + "x": 91, + "y": 159 + }, + { + "x": 91, + "y": 158 + }, + { + "x": 92, + "y": 157 + }, + { + "x": 92, + "y": 156 + }, + { + "x": 92, + "y": 155 + }, + { + "x": 93, + "y": 154 + }, + { + "x": 93, + "y": 153 + }, + { + "x": 94, + "y": 152 + }, + { + "x": 94, + "y": 151 + }, + { + "x": 95, + "y": 150 + }, + { + "x": 96, + "y": 149 + }, + { + "x": 96, + "y": 148 + }, + { + "x": 97, + "y": 147 + }, + { + "x": 97, + "y": 146 + }, + { + "x": 98, + "y": 145 + }, + { + "x": 98, + "y": 143 + }, + { + "x": 98, + "y": 142 + }, + { + "x": 99, + "y": 141 + }, + { + "x": 99, + "y": 140 + }, + { + "x": 99, + "y": 139 + }, + { + "x": 100, + "y": 138 + }, + { + "x": 101, + "y": 138 + }, + { + "x": 102, + "y": 137 + }, + { + "x": 105, + "y": 137 + }, + { + "x": 106, + "y": 137 + }, + { + "x": 106, + "y": 135 + }, + { + "x": 107, + "y": 134 + }, + { + "x": 107, + "y": 126 + }, + { + "x": 106, + "y": 125 + }, + { + "x": 106, + "y": 122 + }, + { + "x": 106, + "y": 121 + }, + { + "x": 107, + "y": 120 + }, + { + "x": 107, + "y": 117 + }, + { + "x": 107, + "y": 116 + }, + { + "x": 106, + "y": 116 + }, + { + "x": 105, + "y": 116 + }, + { + "x": 104, + "y": 117 + }, + { + "x": 103, + "y": 117 + }, + { + "x": 102, + "y": 118 + }, + { + "x": 101, + "y": 117 + }, + { + "x": 101, + "y": 116 + }, + { + "x": 100, + "y": 115 + }, + { + "x": 100, + "y": 114 + }, + { + "x": 100, + "y": 113 + }, + { + "x": 99, + "y": 112 + }, + { + "x": 99, + "y": 111 + }, + { + "x": 98, + "y": 110 + }, + { + "x": 98, + "y": 109 + }, + { + "x": 97, + "y": 108 + }, + { + "x": 97, + "y": 105 + }, + { + "x": 97, + "y": 104 + }, + { + "x": 96, + "y": 103 + }, + { + "x": 95, + "y": 102 + }, + { + "x": 94, + "y": 102 + }, + { + "x": 93, + "y": 101 + }, + { + "x": 92, + "y": 100 + }, + { + "x": 91, + "y": 100 + }, + { + "x": 90, + "y": 99 + }, + { + "x": 89, + "y": 99 + }, + { + "x": 88, + "y": 99 + }, + { + "x": 87, + "y": 98 + }, + { + "x": 86, + "y": 98 + }, + { + "x": 85, + "y": 97 + }, + { + "x": 84, + "y": 96 + }, + { + "x": 84, + "y": 95 + }, + { + "x": 84, + "y": 94 + }, + { + "x": 83, + "y": 93 + }, + { + "x": 83, + "y": 92 + }, + { + "x": 74, + "y": 92 + }, + { + "x": 73, + "y": 92 + }, + { + "x": 71, + "y": 94 + }, + { + "x": 70, + "y": 95 + }, + { + "x": 70, + "y": 119 + }, + { + "x": 70, + "y": 120 + }, + { + "x": 69, + "y": 121 + }, + { + "x": 69, + "y": 125 + }, + { + "x": 69, + "y": 126 + }, + { + "x": 68, + "y": 127 + }, + { + "x": 68, + "y": 128 + }, + { + "x": 67, + "y": 129 + } + ] + } + }, + "82": { + "keyframe": true, + "polygon": { + "path": [ + { + "x": 67, + "y": 128 + }, + { + "x": 67, + "y": 131 + }, + { + "x": 67, + "y": 132 + }, + { + "x": 68, + "y": 132 + }, + { + "x": 69, + "y": 133 + }, + { + "x": 71, + "y": 133 + }, + { + "x": 72, + "y": 133 + }, + { + "x": 73, + "y": 134 + }, + { + "x": 74, + "y": 134 + }, + { + "x": 75, + "y": 135 + }, + { + "x": 75, + "y": 141 + }, + { + "x": 76, + "y": 142 + }, + { + "x": 76, + "y": 151 + }, + { + "x": 76, + "y": 152 + }, + { + "x": 77, + "y": 153 + }, + { + "x": 77, + "y": 154 + }, + { + "x": 78, + "y": 155 + }, + { + "x": 78, + "y": 156 + }, + { + "x": 80, + "y": 158 + }, + { + "x": 80, + "y": 159 + }, + { + "x": 81, + "y": 160 + }, + { + "x": 82, + "y": 160 + }, + { + "x": 83, + "y": 161 + }, + { + "x": 84, + "y": 161 + }, + { + "x": 85, + "y": 161 + }, + { + "x": 86, + "y": 160 + }, + { + "x": 87, + "y": 160 + }, + { + "x": 88, + "y": 160 + }, + { + "x": 89, + "y": 159 + }, + { + "x": 90, + "y": 159 + }, + { + "x": 90, + "y": 158 + }, + { + "x": 91, + "y": 157 + }, + { + "x": 91, + "y": 156 + }, + { + "x": 92, + "y": 155 + }, + { + "x": 92, + "y": 154 + }, + { + "x": 93, + "y": 153 + }, + { + "x": 93, + "y": 152 + }, + { + "x": 94, + "y": 151 + }, + { + "x": 94, + "y": 150 + }, + { + "x": 95, + "y": 149 + }, + { + "x": 96, + "y": 148 + }, + { + "x": 96, + "y": 147 + }, + { + "x": 97, + "y": 146 + }, + { + "x": 97, + "y": 145 + }, + { + "x": 98, + "y": 144 + }, + { + "x": 98, + "y": 142 + }, + { + "x": 98, + "y": 141 + }, + { + "x": 99, + "y": 140 + }, + { + "x": 99, + "y": 139 + }, + { + "x": 101, + "y": 137 + }, + { + "x": 102, + "y": 136 + }, + { + "x": 105, + "y": 136 + }, + { + "x": 106, + "y": 136 + }, + { + "x": 106, + "y": 134 + }, + { + "x": 107, + "y": 133 + }, + { + "x": 107, + "y": 131 + }, + { + "x": 106, + "y": 130 + }, + { + "x": 106, + "y": 117 + }, + { + "x": 106, + "y": 116 + }, + { + "x": 104, + "y": 116 + }, + { + "x": 103, + "y": 116 + }, + { + "x": 102, + "y": 117 + }, + { + "x": 101, + "y": 117 + }, + { + "x": 100, + "y": 116 + }, + { + "x": 100, + "y": 114 + }, + { + "x": 100, + "y": 113 + }, + { + "x": 99, + "y": 112 + }, + { + "x": 99, + "y": 111 + }, + { + "x": 98, + "y": 110 + }, + { + "x": 98, + "y": 109 + }, + { + "x": 97, + "y": 108 + }, + { + "x": 97, + "y": 107 + }, + { + "x": 97, + "y": 106 + }, + { + "x": 96, + "y": 105 + }, + { + "x": 96, + "y": 104 + }, + { + "x": 93, + "y": 101 + }, + { + "x": 92, + "y": 100 + }, + { + "x": 91, + "y": 100 + }, + { + "x": 90, + "y": 99 + }, + { + "x": 89, + "y": 99 + }, + { + "x": 88, + "y": 99 + }, + { + "x": 87, + "y": 98 + }, + { + "x": 86, + "y": 98 + }, + { + "x": 85, + "y": 97 + }, + { + "x": 84, + "y": 96 + }, + { + "x": 84, + "y": 95 + }, + { + "x": 84, + "y": 94 + }, + { + "x": 83, + "y": 93 + }, + { + "x": 83, + "y": 92 + }, + { + "x": 74, + "y": 92 + }, + { + "x": 73, + "y": 92 + }, + { + "x": 71, + "y": 94 + }, + { + "x": 70, + "y": 95 + }, + { + "x": 70, + "y": 117 + }, + { + "x": 70, + "y": 118 + }, + { + "x": 69, + "y": 119 + }, + { + "x": 69, + "y": 123 + }, + { + "x": 69, + "y": 124 + }, + { + "x": 68, + "y": 125 + }, + { + "x": 68, + "y": 126 + }, + { + "x": 68, + "y": 127 + }, + { + "x": 67, + "y": 128 + } + ] + } + }, + "83": { + "keyframe": true, + "polygon": { + "path": [ + { + "x": 67, + "y": 127 + }, + { + "x": 67, + "y": 130 + }, + { + "x": 67, + "y": 131 + }, + { + "x": 68, + "y": 131 + }, + { + "x": 69, + "y": 132 + }, + { + "x": 70, + "y": 132 + }, + { + "x": 71, + "y": 132 + }, + { + "x": 72, + "y": 133 + }, + { + "x": 73, + "y": 133 + }, + { + "x": 74, + "y": 134 + }, + { + "x": 74, + "y": 137 + }, + { + "x": 75, + "y": 138 + }, + { + "x": 75, + "y": 143 + }, + { + "x": 76, + "y": 144 + }, + { + "x": 76, + "y": 150 + }, + { + "x": 76, + "y": 151 + }, + { + "x": 77, + "y": 152 + }, + { + "x": 77, + "y": 153 + }, + { + "x": 79, + "y": 155 + }, + { + "x": 80, + "y": 156 + }, + { + "x": 80, + "y": 157 + }, + { + "x": 81, + "y": 158 + }, + { + "x": 82, + "y": 158 + }, + { + "x": 83, + "y": 159 + }, + { + "x": 87, + "y": 159 + }, + { + "x": 88, + "y": 159 + }, + { + "x": 89, + "y": 158 + }, + { + "x": 89, + "y": 157 + }, + { + "x": 90, + "y": 156 + }, + { + "x": 90, + "y": 155 + }, + { + "x": 91, + "y": 154 + }, + { + "x": 91, + "y": 153 + }, + { + "x": 92, + "y": 152 + }, + { + "x": 92, + "y": 151 + }, + { + "x": 94, + "y": 149 + }, + { + "x": 95, + "y": 148 + }, + { + "x": 95, + "y": 147 + }, + { + "x": 96, + "y": 146 + }, + { + "x": 97, + "y": 145 + }, + { + "x": 97, + "y": 144 + }, + { + "x": 98, + "y": 143 + }, + { + "x": 98, + "y": 141 + }, + { + "x": 98, + "y": 140 + }, + { + "x": 99, + "y": 139 + }, + { + "x": 99, + "y": 138 + }, + { + "x": 100, + "y": 137 + }, + { + "x": 101, + "y": 137 + }, + { + "x": 102, + "y": 136 + }, + { + "x": 103, + "y": 136 + }, + { + "x": 104, + "y": 135 + }, + { + "x": 105, + "y": 135 + }, + { + "x": 106, + "y": 135 + }, + { + "x": 106, + "y": 133 + }, + { + "x": 107, + "y": 132 + }, + { + "x": 107, + "y": 130 + }, + { + "x": 106, + "y": 129 + }, + { + "x": 106, + "y": 116 + }, + { + "x": 106, + "y": 115 + }, + { + "x": 104, + "y": 115 + }, + { + "x": 103, + "y": 115 + }, + { + "x": 102, + "y": 116 + }, + { + "x": 101, + "y": 116 + }, + { + "x": 100, + "y": 115 + }, + { + "x": 100, + "y": 114 + }, + { + "x": 99, + "y": 113 + }, + { + "x": 99, + "y": 112 + }, + { + "x": 98, + "y": 111 + }, + { + "x": 98, + "y": 110 + }, + { + "x": 97, + "y": 109 + }, + { + "x": 97, + "y": 108 + }, + { + "x": 96, + "y": 107 + }, + { + "x": 96, + "y": 106 + }, + { + "x": 95, + "y": 105 + }, + { + "x": 95, + "y": 104 + }, + { + "x": 91, + "y": 100 + }, + { + "x": 90, + "y": 99 + }, + { + "x": 89, + "y": 99 + }, + { + "x": 88, + "y": 99 + }, + { + "x": 87, + "y": 98 + }, + { + "x": 86, + "y": 98 + }, + { + "x": 85, + "y": 97 + }, + { + "x": 84, + "y": 96 + }, + { + "x": 84, + "y": 95 + }, + { + "x": 84, + "y": 94 + }, + { + "x": 83, + "y": 93 + }, + { + "x": 83, + "y": 92 + }, + { + "x": 74, + "y": 92 + }, + { + "x": 73, + "y": 92 + }, + { + "x": 71, + "y": 94 + }, + { + "x": 70, + "y": 95 + }, + { + "x": 70, + "y": 116 + }, + { + "x": 70, + "y": 117 + }, + { + "x": 69, + "y": 118 + }, + { + "x": 69, + "y": 122 + }, + { + "x": 69, + "y": 123 + }, + { + "x": 68, + "y": 124 + }, + { + "x": 68, + "y": 125 + }, + { + "x": 68, + "y": 126 + }, + { + "x": 67, + "y": 127 + } + ] + } + }, + "84": { + "keyframe": true, + "polygon": { + "path": [ + { + "x": 67, + "y": 126 + }, + { + "x": 67, + "y": 129 + }, + { + "x": 67, + "y": 130 + }, + { + "x": 68, + "y": 130 + }, + { + "x": 69, + "y": 131 + }, + { + "x": 70, + "y": 131 + }, + { + "x": 71, + "y": 131 + }, + { + "x": 72, + "y": 132 + }, + { + "x": 73, + "y": 132 + }, + { + "x": 74, + "y": 133 + }, + { + "x": 74, + "y": 139 + }, + { + "x": 75, + "y": 140 + }, + { + "x": 75, + "y": 149 + }, + { + "x": 75, + "y": 150 + }, + { + "x": 78, + "y": 153 + }, + { + "x": 78, + "y": 154 + }, + { + "x": 80, + "y": 156 + }, + { + "x": 81, + "y": 157 + }, + { + "x": 82, + "y": 157 + }, + { + "x": 83, + "y": 158 + }, + { + "x": 84, + "y": 158 + }, + { + "x": 85, + "y": 157 + }, + { + "x": 86, + "y": 157 + }, + { + "x": 87, + "y": 157 + }, + { + "x": 88, + "y": 156 + }, + { + "x": 89, + "y": 156 + }, + { + "x": 89, + "y": 155 + }, + { + "x": 90, + "y": 154 + }, + { + "x": 90, + "y": 153 + }, + { + "x": 91, + "y": 152 + }, + { + "x": 91, + "y": 151 + }, + { + "x": 92, + "y": 150 + }, + { + "x": 92, + "y": 149 + }, + { + "x": 93, + "y": 148 + }, + { + "x": 93, + "y": 147 + }, + { + "x": 94, + "y": 146 + }, + { + "x": 95, + "y": 145 + }, + { + "x": 95, + "y": 144 + }, + { + "x": 96, + "y": 143 + }, + { + "x": 97, + "y": 142 + }, + { + "x": 97, + "y": 141 + }, + { + "x": 98, + "y": 140 + }, + { + "x": 98, + "y": 139 + }, + { + "x": 99, + "y": 138 + }, + { + "x": 99, + "y": 137 + }, + { + "x": 100, + "y": 136 + }, + { + "x": 101, + "y": 136 + }, + { + "x": 102, + "y": 135 + }, + { + "x": 103, + "y": 135 + }, + { + "x": 104, + "y": 134 + }, + { + "x": 105, + "y": 134 + }, + { + "x": 106, + "y": 134 + }, + { + "x": 106, + "y": 133 + }, + { + "x": 107, + "y": 132 + }, + { + "x": 107, + "y": 130 + }, + { + "x": 106, + "y": 129 + }, + { + "x": 106, + "y": 124 + }, + { + "x": 105, + "y": 123 + }, + { + "x": 105, + "y": 120 + }, + { + "x": 105, + "y": 119 + }, + { + "x": 106, + "y": 118 + }, + { + "x": 106, + "y": 116 + }, + { + "x": 106, + "y": 115 + }, + { + "x": 105, + "y": 114 + }, + { + "x": 104, + "y": 114 + }, + { + "x": 103, + "y": 114 + }, + { + "x": 102, + "y": 115 + }, + { + "x": 101, + "y": 115 + }, + { + "x": 100, + "y": 116 + }, + { + "x": 99, + "y": 115 + }, + { + "x": 99, + "y": 112 + }, + { + "x": 99, + "y": 111 + }, + { + "x": 98, + "y": 110 + }, + { + "x": 97, + "y": 109 + }, + { + "x": 97, + "y": 108 + }, + { + "x": 96, + "y": 107 + }, + { + "x": 96, + "y": 106 + }, + { + "x": 95, + "y": 105 + }, + { + "x": 95, + "y": 104 + }, + { + "x": 95, + "y": 103 + }, + { + "x": 91, + "y": 99 + }, + { + "x": 90, + "y": 98 + }, + { + "x": 89, + "y": 98 + }, + { + "x": 88, + "y": 98 + }, + { + "x": 87, + "y": 97 + }, + { + "x": 86, + "y": 97 + }, + { + "x": 85, + "y": 96 + }, + { + "x": 84, + "y": 95 + }, + { + "x": 84, + "y": 94 + }, + { + "x": 83, + "y": 93 + }, + { + "x": 82, + "y": 92 + }, + { + "x": 74, + "y": 92 + }, + { + "x": 73, + "y": 92 + }, + { + "x": 71, + "y": 94 + }, + { + "x": 70, + "y": 95 + }, + { + "x": 70, + "y": 115 + }, + { + "x": 70, + "y": 116 + }, + { + "x": 69, + "y": 117 + }, + { + "x": 69, + "y": 120 + }, + { + "x": 69, + "y": 121 + }, + { + "x": 68, + "y": 122 + }, + { + "x": 68, + "y": 124 + }, + { + "x": 68, + "y": 125 + }, + { + "x": 67, + "y": 126 + } + ] + } + }, + "85": { + "keyframe": true, + "polygon": { + "path": [ + { + "x": 66, + "y": 125 + }, + { + "x": 66, + "y": 126 + }, + { + "x": 66, + "y": 127 + }, + { + "x": 67, + "y": 128 + }, + { + "x": 67, + "y": 129 + }, + { + "x": 68, + "y": 129 + }, + { + "x": 69, + "y": 130 + }, + { + "x": 70, + "y": 130 + }, + { + "x": 71, + "y": 131 + }, + { + "x": 72, + "y": 131 + }, + { + "x": 73, + "y": 132 + }, + { + "x": 74, + "y": 133 + }, + { + "x": 74, + "y": 138 + }, + { + "x": 75, + "y": 139 + }, + { + "x": 75, + "y": 148 + }, + { + "x": 75, + "y": 149 + }, + { + "x": 77, + "y": 151 + }, + { + "x": 77, + "y": 152 + }, + { + "x": 79, + "y": 154 + }, + { + "x": 80, + "y": 155 + }, + { + "x": 81, + "y": 155 + }, + { + "x": 82, + "y": 156 + }, + { + "x": 83, + "y": 156 + }, + { + "x": 84, + "y": 156 + }, + { + "x": 85, + "y": 155 + }, + { + "x": 86, + "y": 155 + }, + { + "x": 87, + "y": 155 + }, + { + "x": 88, + "y": 154 + }, + { + "x": 89, + "y": 154 + }, + { + "x": 90, + "y": 153 + }, + { + "x": 90, + "y": 152 + }, + { + "x": 91, + "y": 151 + }, + { + "x": 91, + "y": 150 + }, + { + "x": 92, + "y": 149 + }, + { + "x": 92, + "y": 148 + }, + { + "x": 93, + "y": 147 + }, + { + "x": 93, + "y": 146 + }, + { + "x": 94, + "y": 145 + }, + { + "x": 95, + "y": 144 + }, + { + "x": 95, + "y": 143 + }, + { + "x": 96, + "y": 142 + }, + { + "x": 97, + "y": 141 + }, + { + "x": 97, + "y": 140 + }, + { + "x": 98, + "y": 139 + }, + { + "x": 98, + "y": 138 + }, + { + "x": 99, + "y": 137 + }, + { + "x": 99, + "y": 136 + }, + { + "x": 100, + "y": 135 + }, + { + "x": 101, + "y": 134 + }, + { + "x": 102, + "y": 134 + }, + { + "x": 103, + "y": 133 + }, + { + "x": 104, + "y": 133 + }, + { + "x": 105, + "y": 133 + }, + { + "x": 106, + "y": 132 + }, + { + "x": 106, + "y": 131 + }, + { + "x": 107, + "y": 130 + }, + { + "x": 107, + "y": 129 + }, + { + "x": 106, + "y": 128 + }, + { + "x": 106, + "y": 124 + }, + { + "x": 105, + "y": 123 + }, + { + "x": 105, + "y": 115 + }, + { + "x": 105, + "y": 114 + }, + { + "x": 101, + "y": 114 + }, + { + "x": 100, + "y": 114 + }, + { + "x": 99, + "y": 113 + }, + { + "x": 99, + "y": 112 + }, + { + "x": 98, + "y": 111 + }, + { + "x": 98, + "y": 110 + }, + { + "x": 97, + "y": 109 + }, + { + "x": 96, + "y": 108 + }, + { + "x": 96, + "y": 107 + }, + { + "x": 95, + "y": 106 + }, + { + "x": 95, + "y": 105 + }, + { + "x": 94, + "y": 104 + }, + { + "x": 94, + "y": 103 + }, + { + "x": 92, + "y": 101 + }, + { + "x": 92, + "y": 100 + }, + { + "x": 91, + "y": 99 + }, + { + "x": 90, + "y": 99 + }, + { + "x": 89, + "y": 98 + }, + { + "x": 88, + "y": 98 + }, + { + "x": 87, + "y": 98 + }, + { + "x": 85, + "y": 96 + }, + { + "x": 84, + "y": 95 + }, + { + "x": 84, + "y": 94 + }, + { + "x": 83, + "y": 93 + }, + { + "x": 82, + "y": 92 + }, + { + "x": 74, + "y": 92 + }, + { + "x": 73, + "y": 92 + }, + { + "x": 71, + "y": 94 + }, + { + "x": 70, + "y": 95 + }, + { + "x": 70, + "y": 114 + }, + { + "x": 70, + "y": 115 + }, + { + "x": 69, + "y": 116 + }, + { + "x": 69, + "y": 119 + }, + { + "x": 69, + "y": 120 + }, + { + "x": 68, + "y": 121 + }, + { + "x": 68, + "y": 122 + }, + { + "x": 67, + "y": 123 + }, + { + "x": 67, + "y": 124 + }, + { + "x": 66, + "y": 125 + } + ] + } + }, + "86": { + "keyframe": true, + "polygon": { + "path": [ + { + "x": 66, + "y": 124 + }, + { + "x": 66, + "y": 125 + }, + { + "x": 66, + "y": 126 + }, + { + "x": 67, + "y": 127 + }, + { + "x": 67, + "y": 128 + }, + { + "x": 68, + "y": 128 + }, + { + "x": 69, + "y": 129 + }, + { + "x": 70, + "y": 129 + }, + { + "x": 71, + "y": 130 + }, + { + "x": 72, + "y": 130 + }, + { + "x": 73, + "y": 131 + }, + { + "x": 73, + "y": 134 + }, + { + "x": 74, + "y": 135 + }, + { + "x": 74, + "y": 140 + }, + { + "x": 75, + "y": 141 + }, + { + "x": 75, + "y": 147 + }, + { + "x": 75, + "y": 148 + }, + { + "x": 77, + "y": 150 + }, + { + "x": 77, + "y": 151 + }, + { + "x": 79, + "y": 153 + }, + { + "x": 80, + "y": 154 + }, + { + "x": 81, + "y": 154 + }, + { + "x": 82, + "y": 155 + }, + { + "x": 83, + "y": 155 + }, + { + "x": 84, + "y": 154 + }, + { + "x": 85, + "y": 154 + }, + { + "x": 86, + "y": 153 + }, + { + "x": 87, + "y": 153 + }, + { + "x": 88, + "y": 152 + }, + { + "x": 89, + "y": 152 + }, + { + "x": 90, + "y": 151 + }, + { + "x": 90, + "y": 150 + }, + { + "x": 91, + "y": 149 + }, + { + "x": 91, + "y": 148 + }, + { + "x": 92, + "y": 147 + }, + { + "x": 92, + "y": 146 + }, + { + "x": 93, + "y": 145 + }, + { + "x": 94, + "y": 144 + }, + { + "x": 94, + "y": 143 + }, + { + "x": 95, + "y": 142 + }, + { + "x": 96, + "y": 141 + }, + { + "x": 96, + "y": 140 + }, + { + "x": 97, + "y": 139 + }, + { + "x": 97, + "y": 138 + }, + { + "x": 97, + "y": 137 + }, + { + "x": 98, + "y": 136 + }, + { + "x": 98, + "y": 135 + }, + { + "x": 99, + "y": 134 + }, + { + "x": 100, + "y": 134 + }, + { + "x": 101, + "y": 133 + }, + { + "x": 102, + "y": 133 + }, + { + "x": 103, + "y": 132 + }, + { + "x": 104, + "y": 132 + }, + { + "x": 105, + "y": 132 + }, + { + "x": 105, + "y": 131 + }, + { + "x": 106, + "y": 130 + }, + { + "x": 106, + "y": 123 + }, + { + "x": 105, + "y": 122 + }, + { + "x": 105, + "y": 114 + }, + { + "x": 105, + "y": 113 + }, + { + "x": 100, + "y": 113 + }, + { + "x": 99, + "y": 114 + }, + { + "x": 98, + "y": 113 + }, + { + "x": 98, + "y": 111 + }, + { + "x": 98, + "y": 110 + }, + { + "x": 97, + "y": 109 + }, + { + "x": 96, + "y": 108 + }, + { + "x": 96, + "y": 107 + }, + { + "x": 95, + "y": 106 + }, + { + "x": 95, + "y": 105 + }, + { + "x": 94, + "y": 104 + }, + { + "x": 94, + "y": 103 + }, + { + "x": 90, + "y": 99 + }, + { + "x": 89, + "y": 98 + }, + { + "x": 88, + "y": 98 + }, + { + "x": 87, + "y": 98 + }, + { + "x": 85, + "y": 96 + }, + { + "x": 84, + "y": 95 + }, + { + "x": 84, + "y": 94 + }, + { + "x": 83, + "y": 93 + }, + { + "x": 82, + "y": 92 + }, + { + "x": 74, + "y": 92 + }, + { + "x": 73, + "y": 92 + }, + { + "x": 71, + "y": 94 + }, + { + "x": 70, + "y": 95 + }, + { + "x": 70, + "y": 113 + }, + { + "x": 70, + "y": 114 + }, + { + "x": 69, + "y": 115 + }, + { + "x": 69, + "y": 118 + }, + { + "x": 69, + "y": 119 + }, + { + "x": 68, + "y": 120 + }, + { + "x": 68, + "y": 121 + }, + { + "x": 67, + "y": 122 + }, + { + "x": 67, + "y": 123 + }, + { + "x": 66, + "y": 124 + } + ] + } + }, + "87": { + "keyframe": true, + "polygon": { + "path": [ + { + "x": 66, + "y": 123 + }, + { + "x": 66, + "y": 124 + }, + { + "x": 66, + "y": 125 + }, + { + "x": 67, + "y": 126 + }, + { + "x": 68, + "y": 127 + }, + { + "x": 69, + "y": 127 + }, + { + "x": 70, + "y": 128 + }, + { + "x": 71, + "y": 129 + }, + { + "x": 72, + "y": 129 + }, + { + "x": 73, + "y": 130 + }, + { + "x": 73, + "y": 137 + }, + { + "x": 74, + "y": 138 + }, + { + "x": 74, + "y": 146 + }, + { + "x": 74, + "y": 147 + }, + { + "x": 78, + "y": 151 + }, + { + "x": 79, + "y": 152 + }, + { + "x": 80, + "y": 152 + }, + { + "x": 81, + "y": 153 + }, + { + "x": 82, + "y": 153 + }, + { + "x": 83, + "y": 153 + }, + { + "x": 84, + "y": 152 + }, + { + "x": 85, + "y": 152 + }, + { + "x": 86, + "y": 152 + }, + { + "x": 87, + "y": 151 + }, + { + "x": 88, + "y": 151 + }, + { + "x": 89, + "y": 150 + }, + { + "x": 89, + "y": 149 + }, + { + "x": 91, + "y": 147 + }, + { + "x": 91, + "y": 146 + }, + { + "x": 93, + "y": 144 + }, + { + "x": 94, + "y": 143 + }, + { + "x": 94, + "y": 142 + }, + { + "x": 95, + "y": 141 + }, + { + "x": 96, + "y": 140 + }, + { + "x": 96, + "y": 139 + }, + { + "x": 97, + "y": 138 + }, + { + "x": 97, + "y": 137 + }, + { + "x": 97, + "y": 136 + }, + { + "x": 98, + "y": 135 + }, + { + "x": 98, + "y": 134 + }, + { + "x": 99, + "y": 133 + }, + { + "x": 100, + "y": 133 + }, + { + "x": 101, + "y": 132 + }, + { + "x": 102, + "y": 132 + }, + { + "x": 103, + "y": 131 + }, + { + "x": 104, + "y": 131 + }, + { + "x": 105, + "y": 131 + }, + { + "x": 105, + "y": 130 + }, + { + "x": 106, + "y": 129 + }, + { + "x": 106, + "y": 127 + }, + { + "x": 105, + "y": 126 + }, + { + "x": 105, + "y": 122 + }, + { + "x": 104, + "y": 121 + }, + { + "x": 104, + "y": 119 + }, + { + "x": 104, + "y": 118 + }, + { + "x": 105, + "y": 117 + }, + { + "x": 105, + "y": 114 + }, + { + "x": 105, + "y": 113 + }, + { + "x": 104, + "y": 113 + }, + { + "x": 103, + "y": 113 + }, + { + "x": 102, + "y": 112 + }, + { + "x": 100, + "y": 112 + }, + { + "x": 99, + "y": 113 + }, + { + "x": 98, + "y": 112 + }, + { + "x": 98, + "y": 111 + }, + { + "x": 97, + "y": 110 + }, + { + "x": 97, + "y": 109 + }, + { + "x": 96, + "y": 108 + }, + { + "x": 95, + "y": 107 + }, + { + "x": 95, + "y": 106 + }, + { + "x": 94, + "y": 105 + }, + { + "x": 93, + "y": 104 + }, + { + "x": 93, + "y": 103 + }, + { + "x": 91, + "y": 101 + }, + { + "x": 91, + "y": 100 + }, + { + "x": 90, + "y": 99 + }, + { + "x": 89, + "y": 98 + }, + { + "x": 88, + "y": 98 + }, + { + "x": 87, + "y": 98 + }, + { + "x": 85, + "y": 96 + }, + { + "x": 84, + "y": 95 + }, + { + "x": 84, + "y": 94 + }, + { + "x": 83, + "y": 93 + }, + { + "x": 82, + "y": 92 + }, + { + "x": 74, + "y": 92 + }, + { + "x": 73, + "y": 92 + }, + { + "x": 71, + "y": 94 + }, + { + "x": 70, + "y": 95 + }, + { + "x": 70, + "y": 102 + }, + { + "x": 69, + "y": 103 + }, + { + "x": 69, + "y": 116 + }, + { + "x": 69, + "y": 117 + }, + { + "x": 68, + "y": 118 + }, + { + "x": 68, + "y": 119 + }, + { + "x": 68, + "y": 120 + }, + { + "x": 67, + "y": 121 + }, + { + "x": 67, + "y": 122 + }, + { + "x": 66, + "y": 123 + } + ] + } + }, + "88": { + "keyframe": true, + "polygon": { + "path": [ + { + "x": 66, + "y": 122 + }, + { + "x": 66, + "y": 124 + }, + { + "x": 66, + "y": 125 + }, + { + "x": 68, + "y": 127 + }, + { + "x": 69, + "y": 127 + }, + { + "x": 72, + "y": 130 + }, + { + "x": 73, + "y": 131 + }, + { + "x": 73, + "y": 136 + }, + { + "x": 74, + "y": 137 + }, + { + "x": 74, + "y": 145 + }, + { + "x": 74, + "y": 146 + }, + { + "x": 78, + "y": 150 + }, + { + "x": 79, + "y": 151 + }, + { + "x": 82, + "y": 151 + }, + { + "x": 83, + "y": 151 + }, + { + "x": 84, + "y": 150 + }, + { + "x": 85, + "y": 150 + }, + { + "x": 86, + "y": 150 + }, + { + "x": 87, + "y": 149 + }, + { + "x": 88, + "y": 149 + }, + { + "x": 89, + "y": 148 + }, + { + "x": 89, + "y": 147 + }, + { + "x": 91, + "y": 145 + }, + { + "x": 91, + "y": 144 + }, + { + "x": 95, + "y": 140 + }, + { + "x": 96, + "y": 139 + }, + { + "x": 96, + "y": 138 + }, + { + "x": 97, + "y": 137 + }, + { + "x": 97, + "y": 136 + }, + { + "x": 98, + "y": 135 + }, + { + "x": 98, + "y": 134 + }, + { + "x": 99, + "y": 133 + }, + { + "x": 100, + "y": 133 + }, + { + "x": 101, + "y": 132 + }, + { + "x": 102, + "y": 132 + }, + { + "x": 103, + "y": 131 + }, + { + "x": 104, + "y": 131 + }, + { + "x": 105, + "y": 130 + }, + { + "x": 105, + "y": 129 + }, + { + "x": 106, + "y": 128 + }, + { + "x": 106, + "y": 127 + }, + { + "x": 105, + "y": 126 + }, + { + "x": 105, + "y": 122 + }, + { + "x": 104, + "y": 121 + }, + { + "x": 104, + "y": 117 + }, + { + "x": 105, + "y": 116 + }, + { + "x": 105, + "y": 115 + }, + { + "x": 104, + "y": 114 + }, + { + "x": 104, + "y": 113 + }, + { + "x": 104, + "y": 112 + }, + { + "x": 102, + "y": 112 + }, + { + "x": 101, + "y": 111 + }, + { + "x": 100, + "y": 111 + }, + { + "x": 99, + "y": 111 + }, + { + "x": 99, + "y": 112 + }, + { + "x": 98, + "y": 113 + }, + { + "x": 97, + "y": 112 + }, + { + "x": 97, + "y": 109 + }, + { + "x": 97, + "y": 108 + }, + { + "x": 96, + "y": 107 + }, + { + "x": 95, + "y": 106 + }, + { + "x": 94, + "y": 106 + }, + { + "x": 93, + "y": 105 + }, + { + "x": 93, + "y": 103 + }, + { + "x": 93, + "y": 102 + }, + { + "x": 92, + "y": 101 + }, + { + "x": 91, + "y": 100 + }, + { + "x": 90, + "y": 100 + }, + { + "x": 88, + "y": 98 + }, + { + "x": 87, + "y": 98 + }, + { + "x": 86, + "y": 97 + }, + { + "x": 85, + "y": 96 + }, + { + "x": 85, + "y": 95 + }, + { + "x": 84, + "y": 94 + }, + { + "x": 84, + "y": 93 + }, + { + "x": 83, + "y": 92 + }, + { + "x": 74, + "y": 92 + }, + { + "x": 73, + "y": 92 + }, + { + "x": 72, + "y": 93 + }, + { + "x": 71, + "y": 93 + }, + { + "x": 70, + "y": 94 + }, + { + "x": 70, + "y": 100 + }, + { + "x": 69, + "y": 101 + }, + { + "x": 69, + "y": 115 + }, + { + "x": 69, + "y": 116 + }, + { + "x": 68, + "y": 117 + }, + { + "x": 68, + "y": 118 + }, + { + "x": 68, + "y": 119 + }, + { + "x": 67, + "y": 120 + }, + { + "x": 67, + "y": 121 + }, + { + "x": 66, + "y": 122 + } + ] + } + }, + "89": { + "keyframe": true, + "polygon": { + "path": [ + { + "x": 66, + "y": 121 + }, + { + "x": 66, + "y": 123 + }, + { + "x": 66, + "y": 124 + }, + { + "x": 68, + "y": 126 + }, + { + "x": 69, + "y": 126 + }, + { + "x": 72, + "y": 129 + }, + { + "x": 73, + "y": 130 + }, + { + "x": 73, + "y": 135 + }, + { + "x": 74, + "y": 136 + }, + { + "x": 74, + "y": 144 + }, + { + "x": 74, + "y": 145 + }, + { + "x": 75, + "y": 146 + }, + { + "x": 76, + "y": 147 + }, + { + "x": 77, + "y": 147 + }, + { + "x": 79, + "y": 149 + }, + { + "x": 80, + "y": 150 + }, + { + "x": 81, + "y": 150 + }, + { + "x": 82, + "y": 149 + }, + { + "x": 83, + "y": 149 + }, + { + "x": 84, + "y": 149 + }, + { + "x": 85, + "y": 148 + }, + { + "x": 86, + "y": 148 + }, + { + "x": 87, + "y": 147 + }, + { + "x": 88, + "y": 147 + }, + { + "x": 90, + "y": 145 + }, + { + "x": 90, + "y": 144 + }, + { + "x": 93, + "y": 141 + }, + { + "x": 94, + "y": 140 + }, + { + "x": 94, + "y": 139 + }, + { + "x": 95, + "y": 138 + }, + { + "x": 96, + "y": 137 + }, + { + "x": 96, + "y": 136 + }, + { + "x": 97, + "y": 135 + }, + { + "x": 97, + "y": 134 + }, + { + "x": 98, + "y": 133 + }, + { + "x": 99, + "y": 132 + }, + { + "x": 100, + "y": 132 + }, + { + "x": 101, + "y": 131 + }, + { + "x": 102, + "y": 131 + }, + { + "x": 103, + "y": 130 + }, + { + "x": 104, + "y": 130 + }, + { + "x": 105, + "y": 129 + }, + { + "x": 105, + "y": 128 + }, + { + "x": 106, + "y": 127 + }, + { + "x": 106, + "y": 126 + }, + { + "x": 105, + "y": 125 + }, + { + "x": 105, + "y": 121 + }, + { + "x": 104, + "y": 120 + }, + { + "x": 104, + "y": 113 + }, + { + "x": 104, + "y": 112 + }, + { + "x": 103, + "y": 111 + }, + { + "x": 102, + "y": 111 + }, + { + "x": 101, + "y": 110 + }, + { + "x": 100, + "y": 110 + }, + { + "x": 99, + "y": 110 + }, + { + "x": 99, + "y": 111 + }, + { + "x": 98, + "y": 112 + }, + { + "x": 97, + "y": 111 + }, + { + "x": 97, + "y": 110 + }, + { + "x": 97, + "y": 109 + }, + { + "x": 96, + "y": 108 + }, + { + "x": 96, + "y": 107 + }, + { + "x": 92, + "y": 103 + }, + { + "x": 92, + "y": 102 + }, + { + "x": 85, + "y": 95 + }, + { + "x": 84, + "y": 94 + }, + { + "x": 84, + "y": 93 + }, + { + "x": 83, + "y": 92 + }, + { + "x": 74, + "y": 92 + }, + { + "x": 73, + "y": 92 + }, + { + "x": 72, + "y": 93 + }, + { + "x": 71, + "y": 93 + }, + { + "x": 70, + "y": 94 + }, + { + "x": 70, + "y": 100 + }, + { + "x": 69, + "y": 101 + }, + { + "x": 69, + "y": 114 + }, + { + "x": 69, + "y": 115 + }, + { + "x": 68, + "y": 116 + }, + { + "x": 68, + "y": 117 + }, + { + "x": 68, + "y": 118 + }, + { + "x": 67, + "y": 119 + }, + { + "x": 67, + "y": 120 + }, + { + "x": 66, + "y": 121 + } + ] + } + }, + "90": { + "keyframe": true, + "polygon": { + "path": [ + { + "x": 65, + "y": 120 + }, + { + "x": 65, + "y": 121 + }, + { + "x": 65, + "y": 122 + }, + { + "x": 67, + "y": 124 + }, + { + "x": 68, + "y": 125 + }, + { + "x": 69, + "y": 125 + }, + { + "x": 71, + "y": 127 + }, + { + "x": 72, + "y": 128 + }, + { + "x": 72, + "y": 134 + }, + { + "x": 73, + "y": 135 + }, + { + "x": 73, + "y": 143 + }, + { + "x": 73, + "y": 144 + }, + { + "x": 74, + "y": 145 + }, + { + "x": 75, + "y": 146 + }, + { + "x": 76, + "y": 146 + }, + { + "x": 77, + "y": 147 + }, + { + "x": 78, + "y": 148 + }, + { + "x": 81, + "y": 148 + }, + { + "x": 82, + "y": 148 + }, + { + "x": 83, + "y": 147 + }, + { + "x": 85, + "y": 147 + }, + { + "x": 86, + "y": 147 + }, + { + "x": 87, + "y": 146 + }, + { + "x": 88, + "y": 146 + }, + { + "x": 90, + "y": 144 + }, + { + "x": 90, + "y": 143 + }, + { + "x": 93, + "y": 140 + }, + { + "x": 94, + "y": 139 + }, + { + "x": 94, + "y": 138 + }, + { + "x": 95, + "y": 137 + }, + { + "x": 96, + "y": 136 + }, + { + "x": 96, + "y": 135 + }, + { + "x": 97, + "y": 134 + }, + { + "x": 97, + "y": 133 + }, + { + "x": 98, + "y": 132 + }, + { + "x": 99, + "y": 131 + }, + { + "x": 100, + "y": 131 + }, + { + "x": 101, + "y": 130 + }, + { + "x": 102, + "y": 130 + }, + { + "x": 103, + "y": 129 + }, + { + "x": 104, + "y": 129 + }, + { + "x": 105, + "y": 128 + }, + { + "x": 105, + "y": 127 + }, + { + "x": 106, + "y": 126 + }, + { + "x": 106, + "y": 125 + }, + { + "x": 105, + "y": 124 + }, + { + "x": 105, + "y": 120 + }, + { + "x": 104, + "y": 119 + }, + { + "x": 104, + "y": 112 + }, + { + "x": 104, + "y": 111 + }, + { + "x": 103, + "y": 111 + }, + { + "x": 102, + "y": 111 + }, + { + "x": 101, + "y": 110 + }, + { + "x": 100, + "y": 110 + }, + { + "x": 99, + "y": 109 + }, + { + "x": 98, + "y": 109 + }, + { + "x": 98, + "y": 110 + }, + { + "x": 97, + "y": 111 + }, + { + "x": 96, + "y": 110 + }, + { + "x": 96, + "y": 108 + }, + { + "x": 96, + "y": 107 + }, + { + "x": 95, + "y": 106 + }, + { + "x": 94, + "y": 105 + }, + { + "x": 93, + "y": 105 + }, + { + "x": 92, + "y": 104 + }, + { + "x": 91, + "y": 103 + }, + { + "x": 91, + "y": 102 + }, + { + "x": 88, + "y": 99 + }, + { + "x": 87, + "y": 98 + }, + { + "x": 87, + "y": 97 + }, + { + "x": 85, + "y": 95 + }, + { + "x": 84, + "y": 94 + }, + { + "x": 84, + "y": 93 + }, + { + "x": 83, + "y": 92 + }, + { + "x": 74, + "y": 92 + }, + { + "x": 73, + "y": 92 + }, + { + "x": 72, + "y": 93 + }, + { + "x": 71, + "y": 94 + }, + { + "x": 71, + "y": 96 + }, + { + "x": 70, + "y": 97 + }, + { + "x": 70, + "y": 101 + }, + { + "x": 70, + "y": 102 + }, + { + "x": 69, + "y": 103 + }, + { + "x": 69, + "y": 107 + }, + { + "x": 69, + "y": 108 + }, + { + "x": 68, + "y": 109 + }, + { + "x": 68, + "y": 112 + }, + { + "x": 68, + "y": 113 + }, + { + "x": 67, + "y": 114 + }, + { + "x": 67, + "y": 115 + }, + { + "x": 67, + "y": 116 + }, + { + "x": 66, + "y": 117 + }, + { + "x": 66, + "y": 118 + }, + { + "x": 66, + "y": 119 + }, + { + "x": 65, + "y": 120 + } + ] + } + }, + "91": { + "keyframe": true, + "polygon": { + "path": [ + { + "x": 65, + "y": 119 + }, + { + "x": 65, + "y": 120 + }, + { + "x": 65, + "y": 121 + }, + { + "x": 71, + "y": 127 + }, + { + "x": 72, + "y": 128 + }, + { + "x": 72, + "y": 134 + }, + { + "x": 73, + "y": 135 + }, + { + "x": 73, + "y": 142 + }, + { + "x": 73, + "y": 143 + }, + { + "x": 74, + "y": 144 + }, + { + "x": 75, + "y": 144 + }, + { + "x": 76, + "y": 145 + }, + { + "x": 77, + "y": 145 + }, + { + "x": 78, + "y": 146 + }, + { + "x": 79, + "y": 147 + }, + { + "x": 80, + "y": 147 + }, + { + "x": 81, + "y": 146 + }, + { + "x": 82, + "y": 146 + }, + { + "x": 83, + "y": 146 + }, + { + "x": 84, + "y": 145 + }, + { + "x": 85, + "y": 145 + }, + { + "x": 86, + "y": 144 + }, + { + "x": 87, + "y": 144 + }, + { + "x": 89, + "y": 142 + }, + { + "x": 89, + "y": 141 + }, + { + "x": 97, + "y": 133 + }, + { + "x": 97, + "y": 132 + }, + { + "x": 98, + "y": 131 + }, + { + "x": 99, + "y": 130 + }, + { + "x": 100, + "y": 130 + }, + { + "x": 101, + "y": 129 + }, + { + "x": 102, + "y": 129 + }, + { + "x": 103, + "y": 128 + }, + { + "x": 104, + "y": 128 + }, + { + "x": 104, + "y": 127 + }, + { + "x": 105, + "y": 126 + }, + { + "x": 105, + "y": 122 + }, + { + "x": 105, + "y": 121 + }, + { + "x": 104, + "y": 120 + }, + { + "x": 104, + "y": 117 + }, + { + "x": 103, + "y": 116 + }, + { + "x": 103, + "y": 115 + }, + { + "x": 104, + "y": 114 + }, + { + "x": 104, + "y": 113 + }, + { + "x": 103, + "y": 112 + }, + { + "x": 103, + "y": 111 + }, + { + "x": 103, + "y": 110 + }, + { + "x": 102, + "y": 110 + }, + { + "x": 101, + "y": 109 + }, + { + "x": 100, + "y": 109 + }, + { + "x": 99, + "y": 108 + }, + { + "x": 98, + "y": 108 + }, + { + "x": 98, + "y": 109 + }, + { + "x": 97, + "y": 110 + }, + { + "x": 96, + "y": 109 + }, + { + "x": 96, + "y": 108 + }, + { + "x": 95, + "y": 107 + }, + { + "x": 95, + "y": 106 + }, + { + "x": 94, + "y": 105 + }, + { + "x": 93, + "y": 105 + }, + { + "x": 92, + "y": 104 + }, + { + "x": 91, + "y": 103 + }, + { + "x": 91, + "y": 102 + }, + { + "x": 89, + "y": 100 + }, + { + "x": 89, + "y": 99 + }, + { + "x": 84, + "y": 94 + }, + { + "x": 84, + "y": 93 + }, + { + "x": 83, + "y": 93 + }, + { + "x": 82, + "y": 92 + }, + { + "x": 74, + "y": 92 + }, + { + "x": 73, + "y": 92 + }, + { + "x": 72, + "y": 93 + }, + { + "x": 71, + "y": 94 + }, + { + "x": 71, + "y": 96 + }, + { + "x": 70, + "y": 97 + }, + { + "x": 70, + "y": 101 + }, + { + "x": 69, + "y": 102 + }, + { + "x": 69, + "y": 106 + }, + { + "x": 69, + "y": 107 + }, + { + "x": 68, + "y": 108 + }, + { + "x": 68, + "y": 111 + }, + { + "x": 68, + "y": 112 + }, + { + "x": 67, + "y": 113 + }, + { + "x": 67, + "y": 114 + }, + { + "x": 67, + "y": 115 + }, + { + "x": 66, + "y": 116 + }, + { + "x": 66, + "y": 117 + }, + { + "x": 66, + "y": 118 + }, + { + "x": 65, + "y": 119 + } + ] + } + }, + "92": { + "keyframe": true, + "polygon": { + "path": [ + { + "x": 65, + "y": 118 + }, + { + "x": 65, + "y": 119 + }, + { + "x": 65, + "y": 120 + }, + { + "x": 67, + "y": 122 + }, + { + "x": 68, + "y": 123 + }, + { + "x": 68, + "y": 124 + }, + { + "x": 71, + "y": 127 + }, + { + "x": 72, + "y": 128 + }, + { + "x": 72, + "y": 141 + }, + { + "x": 72, + "y": 142 + }, + { + "x": 73, + "y": 142 + }, + { + "x": 74, + "y": 143 + }, + { + "x": 75, + "y": 143 + }, + { + "x": 76, + "y": 144 + }, + { + "x": 78, + "y": 144 + }, + { + "x": 79, + "y": 145 + }, + { + "x": 80, + "y": 145 + }, + { + "x": 81, + "y": 144 + }, + { + "x": 82, + "y": 144 + }, + { + "x": 83, + "y": 144 + }, + { + "x": 84, + "y": 143 + }, + { + "x": 85, + "y": 143 + }, + { + "x": 86, + "y": 142 + }, + { + "x": 87, + "y": 142 + }, + { + "x": 97, + "y": 132 + }, + { + "x": 97, + "y": 131 + }, + { + "x": 99, + "y": 129 + }, + { + "x": 100, + "y": 128 + }, + { + "x": 101, + "y": 128 + }, + { + "x": 102, + "y": 127 + }, + { + "x": 103, + "y": 127 + }, + { + "x": 104, + "y": 126 + }, + { + "x": 104, + "y": 125 + }, + { + "x": 105, + "y": 124 + }, + { + "x": 104, + "y": 123 + }, + { + "x": 104, + "y": 119 + }, + { + "x": 103, + "y": 118 + }, + { + "x": 103, + "y": 111 + }, + { + "x": 103, + "y": 110 + }, + { + "x": 102, + "y": 109 + }, + { + "x": 101, + "y": 109 + }, + { + "x": 100, + "y": 108 + }, + { + "x": 98, + "y": 108 + }, + { + "x": 97, + "y": 109 + }, + { + "x": 96, + "y": 108 + }, + { + "x": 95, + "y": 107 + }, + { + "x": 95, + "y": 106 + }, + { + "x": 95, + "y": 105 + }, + { + "x": 94, + "y": 104 + }, + { + "x": 93, + "y": 104 + }, + { + "x": 92, + "y": 103 + }, + { + "x": 91, + "y": 103 + }, + { + "x": 90, + "y": 102 + }, + { + "x": 89, + "y": 101 + }, + { + "x": 89, + "y": 100 + }, + { + "x": 88, + "y": 99 + }, + { + "x": 88, + "y": 98 + }, + { + "x": 87, + "y": 97 + }, + { + "x": 86, + "y": 97 + }, + { + "x": 85, + "y": 96 + }, + { + "x": 85, + "y": 95 + }, + { + "x": 84, + "y": 94 + }, + { + "x": 84, + "y": 93 + }, + { + "x": 83, + "y": 93 + }, + { + "x": 82, + "y": 92 + }, + { + "x": 74, + "y": 92 + }, + { + "x": 73, + "y": 92 + }, + { + "x": 72, + "y": 93 + }, + { + "x": 71, + "y": 94 + }, + { + "x": 71, + "y": 96 + }, + { + "x": 70, + "y": 97 + }, + { + "x": 70, + "y": 100 + }, + { + "x": 69, + "y": 101 + }, + { + "x": 69, + "y": 105 + }, + { + "x": 69, + "y": 106 + }, + { + "x": 68, + "y": 107 + }, + { + "x": 68, + "y": 110 + }, + { + "x": 68, + "y": 111 + }, + { + "x": 67, + "y": 112 + }, + { + "x": 67, + "y": 113 + }, + { + "x": 67, + "y": 114 + }, + { + "x": 66, + "y": 115 + }, + { + "x": 66, + "y": 116 + }, + { + "x": 66, + "y": 117 + }, + { + "x": 65, + "y": 118 + } + ] + } + }, + "93": { + "keyframe": true, + "polygon": { + "path": [ + { + "x": 65, + "y": 117 + }, + { + "x": 65, + "y": 119 + }, + { + "x": 65, + "y": 120 + }, + { + "x": 71, + "y": 126 + }, + { + "x": 72, + "y": 127 + }, + { + "x": 72, + "y": 140 + }, + { + "x": 72, + "y": 141 + }, + { + "x": 73, + "y": 141 + }, + { + "x": 74, + "y": 142 + }, + { + "x": 75, + "y": 142 + }, + { + "x": 76, + "y": 143 + }, + { + "x": 79, + "y": 143 + }, + { + "x": 80, + "y": 143 + }, + { + "x": 81, + "y": 142 + }, + { + "x": 84, + "y": 142 + }, + { + "x": 85, + "y": 142 + }, + { + "x": 86, + "y": 141 + }, + { + "x": 87, + "y": 141 + }, + { + "x": 89, + "y": 139 + }, + { + "x": 89, + "y": 138 + }, + { + "x": 96, + "y": 131 + }, + { + "x": 96, + "y": 130 + }, + { + "x": 97, + "y": 129 + }, + { + "x": 98, + "y": 128 + }, + { + "x": 99, + "y": 128 + }, + { + "x": 100, + "y": 127 + }, + { + "x": 101, + "y": 127 + }, + { + "x": 102, + "y": 126 + }, + { + "x": 103, + "y": 126 + }, + { + "x": 104, + "y": 125 + }, + { + "x": 104, + "y": 124 + }, + { + "x": 105, + "y": 123 + }, + { + "x": 104, + "y": 122 + }, + { + "x": 104, + "y": 118 + }, + { + "x": 103, + "y": 117 + }, + { + "x": 103, + "y": 110 + }, + { + "x": 103, + "y": 109 + }, + { + "x": 102, + "y": 109 + }, + { + "x": 101, + "y": 109 + }, + { + "x": 100, + "y": 108 + }, + { + "x": 99, + "y": 108 + }, + { + "x": 98, + "y": 107 + }, + { + "x": 97, + "y": 107 + }, + { + "x": 96, + "y": 107 + }, + { + "x": 93, + "y": 104 + }, + { + "x": 92, + "y": 104 + }, + { + "x": 90, + "y": 102 + }, + { + "x": 90, + "y": 101 + }, + { + "x": 85, + "y": 96 + }, + { + "x": 84, + "y": 95 + }, + { + "x": 84, + "y": 94 + }, + { + "x": 84, + "y": 93 + }, + { + "x": 83, + "y": 93 + }, + { + "x": 82, + "y": 92 + }, + { + "x": 74, + "y": 92 + }, + { + "x": 73, + "y": 92 + }, + { + "x": 72, + "y": 93 + }, + { + "x": 71, + "y": 94 + }, + { + "x": 71, + "y": 95 + }, + { + "x": 71, + "y": 96 + }, + { + "x": 70, + "y": 97 + }, + { + "x": 70, + "y": 99 + }, + { + "x": 70, + "y": 100 + }, + { + "x": 69, + "y": 101 + }, + { + "x": 69, + "y": 104 + }, + { + "x": 69, + "y": 105 + }, + { + "x": 68, + "y": 106 + }, + { + "x": 68, + "y": 108 + }, + { + "x": 68, + "y": 109 + }, + { + "x": 67, + "y": 110 + }, + { + "x": 67, + "y": 112 + }, + { + "x": 67, + "y": 113 + }, + { + "x": 66, + "y": 114 + }, + { + "x": 66, + "y": 115 + }, + { + "x": 66, + "y": 116 + }, + { + "x": 65, + "y": 117 + } + ] + } + }, + "94": { + "keyframe": true, + "polygon": { + "path": [ + { + "x": 64, + "y": 116 + }, + { + "x": 64, + "y": 117 + }, + { + "x": 64, + "y": 118 + }, + { + "x": 70, + "y": 124 + }, + { + "x": 71, + "y": 125 + }, + { + "x": 71, + "y": 130 + }, + { + "x": 71, + "y": 131 + }, + { + "x": 72, + "y": 132 + }, + { + "x": 72, + "y": 138 + }, + { + "x": 72, + "y": 139 + }, + { + "x": 73, + "y": 139 + }, + { + "x": 74, + "y": 140 + }, + { + "x": 75, + "y": 140 + }, + { + "x": 76, + "y": 141 + }, + { + "x": 77, + "y": 141 + }, + { + "x": 78, + "y": 142 + }, + { + "x": 79, + "y": 142 + }, + { + "x": 80, + "y": 141 + }, + { + "x": 81, + "y": 141 + }, + { + "x": 82, + "y": 141 + }, + { + "x": 83, + "y": 140 + }, + { + "x": 84, + "y": 140 + }, + { + "x": 85, + "y": 139 + }, + { + "x": 86, + "y": 139 + }, + { + "x": 88, + "y": 137 + }, + { + "x": 89, + "y": 137 + }, + { + "x": 97, + "y": 129 + }, + { + "x": 98, + "y": 128 + }, + { + "x": 99, + "y": 128 + }, + { + "x": 101, + "y": 126 + }, + { + "x": 102, + "y": 126 + }, + { + "x": 103, + "y": 125 + }, + { + "x": 104, + "y": 124 + }, + { + "x": 104, + "y": 123 + }, + { + "x": 105, + "y": 122 + }, + { + "x": 104, + "y": 121 + }, + { + "x": 104, + "y": 118 + }, + { + "x": 103, + "y": 117 + }, + { + "x": 103, + "y": 113 + }, + { + "x": 103, + "y": 112 + }, + { + "x": 102, + "y": 111 + }, + { + "x": 102, + "y": 109 + }, + { + "x": 102, + "y": 108 + }, + { + "x": 101, + "y": 108 + }, + { + "x": 100, + "y": 107 + }, + { + "x": 99, + "y": 107 + }, + { + "x": 98, + "y": 106 + }, + { + "x": 97, + "y": 106 + }, + { + "x": 96, + "y": 107 + }, + { + "x": 95, + "y": 106 + }, + { + "x": 94, + "y": 105 + }, + { + "x": 94, + "y": 104 + }, + { + "x": 93, + "y": 103 + }, + { + "x": 92, + "y": 103 + }, + { + "x": 91, + "y": 102 + }, + { + "x": 90, + "y": 102 + }, + { + "x": 89, + "y": 101 + }, + { + "x": 88, + "y": 100 + }, + { + "x": 88, + "y": 99 + }, + { + "x": 85, + "y": 96 + }, + { + "x": 84, + "y": 95 + }, + { + "x": 84, + "y": 93 + }, + { + "x": 84, + "y": 92 + }, + { + "x": 74, + "y": 92 + }, + { + "x": 73, + "y": 92 + }, + { + "x": 72, + "y": 93 + }, + { + "x": 71, + "y": 94 + }, + { + "x": 71, + "y": 95 + }, + { + "x": 70, + "y": 96 + }, + { + "x": 70, + "y": 99 + }, + { + "x": 69, + "y": 100 + }, + { + "x": 69, + "y": 103 + }, + { + "x": 69, + "y": 104 + }, + { + "x": 68, + "y": 105 + }, + { + "x": 68, + "y": 107 + }, + { + "x": 68, + "y": 108 + }, + { + "x": 67, + "y": 109 + }, + { + "x": 67, + "y": 110 + }, + { + "x": 66, + "y": 111 + }, + { + "x": 66, + "y": 112 + }, + { + "x": 66, + "y": 113 + }, + { + "x": 65, + "y": 114 + }, + { + "x": 65, + "y": 115 + }, + { + "x": 64, + "y": 116 + } + ] + } + }, + "95": { + "keyframe": true, + "polygon": { + "path": [ + { + "x": 64, + "y": 115 + }, + { + "x": 64, + "y": 116 + }, + { + "x": 64, + "y": 117 + }, + { + "x": 67, + "y": 120 + }, + { + "x": 68, + "y": 121 + }, + { + "x": 68, + "y": 122 + }, + { + "x": 70, + "y": 124 + }, + { + "x": 71, + "y": 125 + }, + { + "x": 71, + "y": 137 + }, + { + "x": 71, + "y": 138 + }, + { + "x": 72, + "y": 138 + }, + { + "x": 73, + "y": 139 + }, + { + "x": 74, + "y": 139 + }, + { + "x": 75, + "y": 140 + }, + { + "x": 77, + "y": 140 + }, + { + "x": 78, + "y": 140 + }, + { + "x": 79, + "y": 139 + }, + { + "x": 81, + "y": 139 + }, + { + "x": 82, + "y": 139 + }, + { + "x": 83, + "y": 138 + }, + { + "x": 84, + "y": 138 + }, + { + "x": 85, + "y": 137 + }, + { + "x": 86, + "y": 137 + }, + { + "x": 87, + "y": 136 + }, + { + "x": 88, + "y": 136 + }, + { + "x": 89, + "y": 135 + }, + { + "x": 90, + "y": 135 + }, + { + "x": 97, + "y": 128 + }, + { + "x": 98, + "y": 127 + }, + { + "x": 99, + "y": 127 + }, + { + "x": 104, + "y": 122 + }, + { + "x": 105, + "y": 121 + }, + { + "x": 104, + "y": 120 + }, + { + "x": 104, + "y": 119 + }, + { + "x": 104, + "y": 118 + }, + { + "x": 103, + "y": 117 + }, + { + "x": 103, + "y": 115 + }, + { + "x": 102, + "y": 114 + }, + { + "x": 102, + "y": 109 + }, + { + "x": 102, + "y": 108 + }, + { + "x": 101, + "y": 108 + }, + { + "x": 100, + "y": 107 + }, + { + "x": 99, + "y": 106 + }, + { + "x": 98, + "y": 106 + }, + { + "x": 97, + "y": 105 + }, + { + "x": 96, + "y": 105 + }, + { + "x": 95, + "y": 104 + }, + { + "x": 94, + "y": 104 + }, + { + "x": 93, + "y": 103 + }, + { + "x": 92, + "y": 103 + }, + { + "x": 91, + "y": 102 + }, + { + "x": 90, + "y": 102 + }, + { + "x": 89, + "y": 102 + }, + { + "x": 88, + "y": 101 + }, + { + "x": 87, + "y": 100 + }, + { + "x": 87, + "y": 99 + }, + { + "x": 86, + "y": 98 + }, + { + "x": 85, + "y": 97 + }, + { + "x": 85, + "y": 96 + }, + { + "x": 84, + "y": 95 + }, + { + "x": 84, + "y": 93 + }, + { + "x": 84, + "y": 92 + }, + { + "x": 74, + "y": 92 + }, + { + "x": 73, + "y": 92 + }, + { + "x": 72, + "y": 93 + }, + { + "x": 71, + "y": 94 + }, + { + "x": 71, + "y": 95 + }, + { + "x": 70, + "y": 96 + }, + { + "x": 70, + "y": 98 + }, + { + "x": 69, + "y": 99 + }, + { + "x": 69, + "y": 102 + }, + { + "x": 69, + "y": 103 + }, + { + "x": 68, + "y": 104 + }, + { + "x": 68, + "y": 106 + }, + { + "x": 68, + "y": 107 + }, + { + "x": 67, + "y": 108 + }, + { + "x": 67, + "y": 109 + }, + { + "x": 66, + "y": 110 + }, + { + "x": 66, + "y": 111 + }, + { + "x": 66, + "y": 112 + }, + { + "x": 65, + "y": 113 + }, + { + "x": 65, + "y": 114 + }, + { + "x": 64, + "y": 115 + } + ] + } + }, + "96": { + "keyframe": true, + "polygon": { + "path": [ + { + "x": 64, + "y": 114 + }, + { + "x": 64, + "y": 115 + }, + { + "x": 64, + "y": 116 + }, + { + "x": 67, + "y": 119 + }, + { + "x": 68, + "y": 120 + }, + { + "x": 68, + "y": 121 + }, + { + "x": 70, + "y": 123 + }, + { + "x": 71, + "y": 124 + }, + { + "x": 71, + "y": 136 + }, + { + "x": 71, + "y": 137 + }, + { + "x": 73, + "y": 137 + }, + { + "x": 74, + "y": 138 + }, + { + "x": 77, + "y": 138 + }, + { + "x": 78, + "y": 138 + }, + { + "x": 79, + "y": 137 + }, + { + "x": 81, + "y": 137 + }, + { + "x": 82, + "y": 136 + }, + { + "x": 85, + "y": 136 + }, + { + "x": 86, + "y": 136 + }, + { + "x": 88, + "y": 134 + }, + { + "x": 89, + "y": 134 + }, + { + "x": 92, + "y": 131 + }, + { + "x": 93, + "y": 131 + }, + { + "x": 97, + "y": 127 + }, + { + "x": 98, + "y": 126 + }, + { + "x": 99, + "y": 126 + }, + { + "x": 100, + "y": 125 + }, + { + "x": 101, + "y": 124 + }, + { + "x": 102, + "y": 124 + }, + { + "x": 104, + "y": 122 + }, + { + "x": 105, + "y": 121 + }, + { + "x": 105, + "y": 120 + }, + { + "x": 104, + "y": 119 + }, + { + "x": 104, + "y": 118 + }, + { + "x": 104, + "y": 117 + }, + { + "x": 103, + "y": 116 + }, + { + "x": 103, + "y": 115 + }, + { + "x": 102, + "y": 114 + }, + { + "x": 102, + "y": 108 + }, + { + "x": 102, + "y": 107 + }, + { + "x": 101, + "y": 107 + }, + { + "x": 100, + "y": 106 + }, + { + "x": 99, + "y": 106 + }, + { + "x": 98, + "y": 105 + }, + { + "x": 97, + "y": 105 + }, + { + "x": 96, + "y": 104 + }, + { + "x": 95, + "y": 104 + }, + { + "x": 94, + "y": 103 + }, + { + "x": 93, + "y": 102 + }, + { + "x": 92, + "y": 102 + }, + { + "x": 91, + "y": 101 + }, + { + "x": 89, + "y": 101 + }, + { + "x": 88, + "y": 101 + }, + { + "x": 87, + "y": 100 + }, + { + "x": 87, + "y": 99 + }, + { + "x": 86, + "y": 98 + }, + { + "x": 85, + "y": 97 + }, + { + "x": 85, + "y": 96 + }, + { + "x": 84, + "y": 95 + }, + { + "x": 84, + "y": 93 + }, + { + "x": 84, + "y": 92 + }, + { + "x": 74, + "y": 92 + }, + { + "x": 73, + "y": 92 + }, + { + "x": 72, + "y": 93 + }, + { + "x": 71, + "y": 94 + }, + { + "x": 71, + "y": 95 + }, + { + "x": 70, + "y": 96 + }, + { + "x": 70, + "y": 97 + }, + { + "x": 69, + "y": 98 + }, + { + "x": 69, + "y": 100 + }, + { + "x": 69, + "y": 101 + }, + { + "x": 68, + "y": 102 + }, + { + "x": 68, + "y": 104 + }, + { + "x": 68, + "y": 105 + }, + { + "x": 67, + "y": 106 + }, + { + "x": 67, + "y": 107 + }, + { + "x": 67, + "y": 108 + }, + { + "x": 66, + "y": 109 + }, + { + "x": 66, + "y": 110 + }, + { + "x": 65, + "y": 111 + }, + { + "x": 65, + "y": 112 + }, + { + "x": 65, + "y": 113 + }, + { + "x": 64, + "y": 114 + } + ] + } + }, + "97": { + "keyframe": true, + "polygon": { + "path": [ + { + "x": 64, + "y": 113 + }, + { + "x": 64, + "y": 114 + }, + { + "x": 64, + "y": 115 + }, + { + "x": 65, + "y": 116 + }, + { + "x": 66, + "y": 117 + }, + { + "x": 66, + "y": 118 + }, + { + "x": 68, + "y": 120 + }, + { + "x": 69, + "y": 121 + }, + { + "x": 69, + "y": 122 + }, + { + "x": 70, + "y": 123 + }, + { + "x": 70, + "y": 128 + }, + { + "x": 70, + "y": 129 + }, + { + "x": 71, + "y": 130 + }, + { + "x": 71, + "y": 135 + }, + { + "x": 71, + "y": 136 + }, + { + "x": 73, + "y": 136 + }, + { + "x": 74, + "y": 137 + }, + { + "x": 76, + "y": 137 + }, + { + "x": 77, + "y": 137 + }, + { + "x": 78, + "y": 136 + }, + { + "x": 80, + "y": 136 + }, + { + "x": 81, + "y": 136 + }, + { + "x": 82, + "y": 135 + }, + { + "x": 83, + "y": 135 + }, + { + "x": 84, + "y": 135 + }, + { + "x": 85, + "y": 134 + }, + { + "x": 86, + "y": 134 + }, + { + "x": 87, + "y": 133 + }, + { + "x": 88, + "y": 132 + }, + { + "x": 89, + "y": 132 + }, + { + "x": 90, + "y": 131 + }, + { + "x": 91, + "y": 130 + }, + { + "x": 92, + "y": 130 + }, + { + "x": 93, + "y": 129 + }, + { + "x": 94, + "y": 129 + }, + { + "x": 97, + "y": 126 + }, + { + "x": 98, + "y": 125 + }, + { + "x": 99, + "y": 125 + }, + { + "x": 101, + "y": 123 + }, + { + "x": 102, + "y": 123 + }, + { + "x": 103, + "y": 122 + }, + { + "x": 103, + "y": 121 + }, + { + "x": 104, + "y": 120 + }, + { + "x": 103, + "y": 119 + }, + { + "x": 103, + "y": 116 + }, + { + "x": 102, + "y": 115 + }, + { + "x": 102, + "y": 111 + }, + { + "x": 102, + "y": 110 + }, + { + "x": 101, + "y": 109 + }, + { + "x": 101, + "y": 107 + }, + { + "x": 101, + "y": 106 + }, + { + "x": 100, + "y": 105 + }, + { + "x": 99, + "y": 105 + }, + { + "x": 98, + "y": 104 + }, + { + "x": 97, + "y": 104 + }, + { + "x": 96, + "y": 103 + }, + { + "x": 95, + "y": 103 + }, + { + "x": 94, + "y": 102 + }, + { + "x": 92, + "y": 102 + }, + { + "x": 91, + "y": 102 + }, + { + "x": 90, + "y": 101 + }, + { + "x": 89, + "y": 101 + }, + { + "x": 88, + "y": 101 + }, + { + "x": 87, + "y": 100 + }, + { + "x": 86, + "y": 99 + }, + { + "x": 86, + "y": 98 + }, + { + "x": 86, + "y": 97 + }, + { + "x": 85, + "y": 96 + }, + { + "x": 84, + "y": 95 + }, + { + "x": 84, + "y": 93 + }, + { + "x": 84, + "y": 92 + }, + { + "x": 72, + "y": 92 + }, + { + "x": 71, + "y": 93 + }, + { + "x": 71, + "y": 94 + }, + { + "x": 70, + "y": 95 + }, + { + "x": 70, + "y": 96 + }, + { + "x": 69, + "y": 97 + }, + { + "x": 69, + "y": 99 + }, + { + "x": 69, + "y": 100 + }, + { + "x": 68, + "y": 101 + }, + { + "x": 68, + "y": 103 + }, + { + "x": 68, + "y": 104 + }, + { + "x": 67, + "y": 105 + }, + { + "x": 67, + "y": 106 + }, + { + "x": 67, + "y": 107 + }, + { + "x": 66, + "y": 108 + }, + { + "x": 66, + "y": 109 + }, + { + "x": 65, + "y": 110 + }, + { + "x": 65, + "y": 111 + }, + { + "x": 65, + "y": 112 + }, + { + "x": 64, + "y": 113 + } + ] + } + }, + "98": { + "keyframe": true, + "polygon": { + "path": [ + { + "x": 63, + "y": 112 + }, + { + "x": 63, + "y": 113 + }, + { + "x": 63, + "y": 114 + }, + { + "x": 64, + "y": 115 + }, + { + "x": 65, + "y": 116 + }, + { + "x": 65, + "y": 117 + }, + { + "x": 67, + "y": 119 + }, + { + "x": 68, + "y": 120 + }, + { + "x": 68, + "y": 121 + }, + { + "x": 69, + "y": 122 + }, + { + "x": 70, + "y": 123 + }, + { + "x": 70, + "y": 134 + }, + { + "x": 70, + "y": 135 + }, + { + "x": 76, + "y": 135 + }, + { + "x": 77, + "y": 135 + }, + { + "x": 78, + "y": 134 + }, + { + "x": 80, + "y": 134 + }, + { + "x": 81, + "y": 134 + }, + { + "x": 82, + "y": 133 + }, + { + "x": 83, + "y": 133 + }, + { + "x": 84, + "y": 132 + }, + { + "x": 85, + "y": 132 + }, + { + "x": 86, + "y": 131 + }, + { + "x": 87, + "y": 131 + }, + { + "x": 88, + "y": 130 + }, + { + "x": 89, + "y": 130 + }, + { + "x": 90, + "y": 129 + }, + { + "x": 91, + "y": 129 + }, + { + "x": 92, + "y": 128 + }, + { + "x": 93, + "y": 128 + }, + { + "x": 94, + "y": 127 + }, + { + "x": 95, + "y": 126 + }, + { + "x": 96, + "y": 126 + }, + { + "x": 97, + "y": 125 + }, + { + "x": 98, + "y": 124 + }, + { + "x": 99, + "y": 124 + }, + { + "x": 101, + "y": 122 + }, + { + "x": 102, + "y": 122 + }, + { + "x": 103, + "y": 121 + }, + { + "x": 103, + "y": 120 + }, + { + "x": 104, + "y": 119 + }, + { + "x": 103, + "y": 118 + }, + { + "x": 103, + "y": 117 + }, + { + "x": 103, + "y": 116 + }, + { + "x": 102, + "y": 115 + }, + { + "x": 102, + "y": 113 + }, + { + "x": 101, + "y": 112 + }, + { + "x": 101, + "y": 107 + }, + { + "x": 101, + "y": 106 + }, + { + "x": 100, + "y": 105 + }, + { + "x": 99, + "y": 105 + }, + { + "x": 98, + "y": 104 + }, + { + "x": 97, + "y": 103 + }, + { + "x": 96, + "y": 103 + }, + { + "x": 95, + "y": 102 + }, + { + "x": 94, + "y": 102 + }, + { + "x": 93, + "y": 101 + }, + { + "x": 89, + "y": 101 + }, + { + "x": 88, + "y": 101 + }, + { + "x": 87, + "y": 100 + }, + { + "x": 86, + "y": 99 + }, + { + "x": 86, + "y": 98 + }, + { + "x": 85, + "y": 97 + }, + { + "x": 85, + "y": 96 + }, + { + "x": 84, + "y": 95 + }, + { + "x": 84, + "y": 93 + }, + { + "x": 84, + "y": 92 + }, + { + "x": 73, + "y": 92 + }, + { + "x": 72, + "y": 92 + }, + { + "x": 71, + "y": 93 + }, + { + "x": 71, + "y": 94 + }, + { + "x": 70, + "y": 95 + }, + { + "x": 70, + "y": 96 + }, + { + "x": 69, + "y": 97 + }, + { + "x": 69, + "y": 98 + }, + { + "x": 69, + "y": 99 + }, + { + "x": 68, + "y": 100 + }, + { + "x": 68, + "y": 101 + }, + { + "x": 68, + "y": 102 + }, + { + "x": 67, + "y": 103 + }, + { + "x": 67, + "y": 104 + }, + { + "x": 66, + "y": 105 + }, + { + "x": 66, + "y": 106 + }, + { + "x": 66, + "y": 107 + }, + { + "x": 65, + "y": 108 + }, + { + "x": 65, + "y": 109 + }, + { + "x": 64, + "y": 110 + }, + { + "x": 64, + "y": 111 + }, + { + "x": 63, + "y": 112 + } + ] + } + }, + "99": { + "keyframe": true, + "polygon": { + "path": [ + { + "x": 63, + "y": 111 + }, + { + "x": 63, + "y": 112 + }, + { + "x": 64, + "y": 113 + }, + { + "x": 64, + "y": 114 + }, + { + "x": 65, + "y": 115 + }, + { + "x": 66, + "y": 116 + }, + { + "x": 66, + "y": 117 + }, + { + "x": 68, + "y": 119 + }, + { + "x": 69, + "y": 120 + }, + { + "x": 69, + "y": 121 + }, + { + "x": 70, + "y": 122 + }, + { + "x": 70, + "y": 133 + }, + { + "x": 70, + "y": 134 + }, + { + "x": 75, + "y": 134 + }, + { + "x": 76, + "y": 134 + }, + { + "x": 77, + "y": 133 + }, + { + "x": 78, + "y": 133 + }, + { + "x": 79, + "y": 132 + }, + { + "x": 80, + "y": 132 + }, + { + "x": 81, + "y": 132 + }, + { + "x": 82, + "y": 131 + }, + { + "x": 83, + "y": 131 + }, + { + "x": 84, + "y": 130 + }, + { + "x": 85, + "y": 130 + }, + { + "x": 86, + "y": 129 + }, + { + "x": 87, + "y": 129 + }, + { + "x": 88, + "y": 128 + }, + { + "x": 89, + "y": 128 + }, + { + "x": 90, + "y": 127 + }, + { + "x": 91, + "y": 127 + }, + { + "x": 92, + "y": 126 + }, + { + "x": 93, + "y": 126 + }, + { + "x": 94, + "y": 125 + }, + { + "x": 95, + "y": 125 + }, + { + "x": 96, + "y": 124 + }, + { + "x": 97, + "y": 124 + }, + { + "x": 98, + "y": 123 + }, + { + "x": 99, + "y": 123 + }, + { + "x": 103, + "y": 119 + }, + { + "x": 104, + "y": 118 + }, + { + "x": 104, + "y": 117 + }, + { + "x": 103, + "y": 116 + }, + { + "x": 103, + "y": 115 + }, + { + "x": 102, + "y": 114 + }, + { + "x": 102, + "y": 113 + }, + { + "x": 101, + "y": 112 + }, + { + "x": 101, + "y": 106 + }, + { + "x": 101, + "y": 105 + }, + { + "x": 100, + "y": 104 + }, + { + "x": 99, + "y": 104 + }, + { + "x": 98, + "y": 103 + }, + { + "x": 97, + "y": 102 + }, + { + "x": 96, + "y": 102 + }, + { + "x": 95, + "y": 101 + }, + { + "x": 94, + "y": 101 + }, + { + "x": 93, + "y": 100 + }, + { + "x": 87, + "y": 100 + }, + { + "x": 86, + "y": 100 + }, + { + "x": 85, + "y": 99 + }, + { + "x": 85, + "y": 98 + }, + { + "x": 84, + "y": 97 + }, + { + "x": 84, + "y": 93 + }, + { + "x": 84, + "y": 92 + }, + { + "x": 74, + "y": 92 + }, + { + "x": 73, + "y": 92 + }, + { + "x": 70, + "y": 95 + }, + { + "x": 69, + "y": 96 + }, + { + "x": 69, + "y": 97 + }, + { + "x": 68, + "y": 98 + }, + { + "x": 68, + "y": 99 + }, + { + "x": 68, + "y": 100 + }, + { + "x": 67, + "y": 101 + }, + { + "x": 67, + "y": 102 + }, + { + "x": 66, + "y": 103 + }, + { + "x": 66, + "y": 104 + }, + { + "x": 66, + "y": 105 + }, + { + "x": 65, + "y": 106 + }, + { + "x": 65, + "y": 107 + }, + { + "x": 65, + "y": 108 + }, + { + "x": 64, + "y": 109 + }, + { + "x": 64, + "y": 110 + }, + { + "x": 63, + "y": 111 + } + ] + } + }, + "100": { + "keyframe": true, + "polygon": { + "path": [ + { + "x": 63, + "y": 111 + }, + { + "x": 63, + "y": 112 + }, + { + "x": 64, + "y": 113 + }, + { + "x": 64, + "y": 114 + }, + { + "x": 65, + "y": 115 + }, + { + "x": 66, + "y": 116 + }, + { + "x": 66, + "y": 117 + }, + { + "x": 68, + "y": 119 + }, + { + "x": 69, + "y": 120 + }, + { + "x": 69, + "y": 121 + }, + { + "x": 70, + "y": 122 + }, + { + "x": 70, + "y": 133 + }, + { + "x": 70, + "y": 134 + }, + { + "x": 75, + "y": 134 + }, + { + "x": 76, + "y": 134 + }, + { + "x": 77, + "y": 133 + }, + { + "x": 78, + "y": 133 + }, + { + "x": 79, + "y": 132 + }, + { + "x": 80, + "y": 132 + }, + { + "x": 81, + "y": 132 + }, + { + "x": 82, + "y": 131 + }, + { + "x": 83, + "y": 131 + }, + { + "x": 84, + "y": 130 + }, + { + "x": 85, + "y": 130 + }, + { + "x": 86, + "y": 129 + }, + { + "x": 87, + "y": 129 + }, + { + "x": 88, + "y": 128 + }, + { + "x": 89, + "y": 128 + }, + { + "x": 90, + "y": 127 + }, + { + "x": 91, + "y": 127 + }, + { + "x": 92, + "y": 126 + }, + { + "x": 93, + "y": 126 + }, + { + "x": 94, + "y": 125 + }, + { + "x": 95, + "y": 125 + }, + { + "x": 96, + "y": 124 + }, + { + "x": 97, + "y": 124 + }, + { + "x": 98, + "y": 123 + }, + { + "x": 99, + "y": 123 + }, + { + "x": 103, + "y": 119 + }, + { + "x": 104, + "y": 118 + }, + { + "x": 104, + "y": 117 + }, + { + "x": 103, + "y": 116 + }, + { + "x": 103, + "y": 115 + }, + { + "x": 102, + "y": 114 + }, + { + "x": 102, + "y": 113 + }, + { + "x": 101, + "y": 112 + }, + { + "x": 101, + "y": 106 + }, + { + "x": 101, + "y": 105 + }, + { + "x": 100, + "y": 104 + }, + { + "x": 99, + "y": 104 + }, + { + "x": 98, + "y": 103 + }, + { + "x": 97, + "y": 102 + }, + { + "x": 96, + "y": 102 + }, + { + "x": 95, + "y": 101 + }, + { + "x": 94, + "y": 101 + }, + { + "x": 93, + "y": 100 + }, + { + "x": 87, + "y": 100 + }, + { + "x": 86, + "y": 100 + }, + { + "x": 85, + "y": 99 + }, + { + "x": 85, + "y": 98 + }, + { + "x": 84, + "y": 97 + }, + { + "x": 84, + "y": 93 + }, + { + "x": 84, + "y": 92 + }, + { + "x": 74, + "y": 92 + }, + { + "x": 73, + "y": 92 + }, + { + "x": 70, + "y": 95 + }, + { + "x": 69, + "y": 96 + }, + { + "x": 69, + "y": 97 + }, + { + "x": 68, + "y": 98 + }, + { + "x": 68, + "y": 99 + }, + { + "x": 68, + "y": 100 + }, + { + "x": 67, + "y": 101 + }, + { + "x": 67, + "y": 102 + }, + { + "x": 66, + "y": 103 + }, + { + "x": 66, + "y": 104 + }, + { + "x": 66, + "y": 105 + }, + { + "x": 65, + "y": 106 + }, + { + "x": 65, + "y": 107 + }, + { + "x": 65, + "y": 108 + }, + { + "x": 64, + "y": 109 + }, + { + "x": 64, + "y": 110 + }, + { + "x": 63, + "y": 111 + } + ] + } + }, + "101": { + "keyframe": true, + "polygon": { + "path": [ + { + "x": 63, + "y": 111 + }, + { + "x": 63, + "y": 112 + }, + { + "x": 64, + "y": 113 + }, + { + "x": 64, + "y": 114 + }, + { + "x": 65, + "y": 115 + }, + { + "x": 66, + "y": 116 + }, + { + "x": 66, + "y": 117 + }, + { + "x": 68, + "y": 119 + }, + { + "x": 69, + "y": 120 + }, + { + "x": 69, + "y": 121 + }, + { + "x": 70, + "y": 122 + }, + { + "x": 70, + "y": 133 + }, + { + "x": 70, + "y": 134 + }, + { + "x": 75, + "y": 134 + }, + { + "x": 76, + "y": 134 + }, + { + "x": 77, + "y": 133 + }, + { + "x": 78, + "y": 133 + }, + { + "x": 79, + "y": 132 + }, + { + "x": 80, + "y": 132 + }, + { + "x": 81, + "y": 132 + }, + { + "x": 82, + "y": 131 + }, + { + "x": 83, + "y": 131 + }, + { + "x": 84, + "y": 130 + }, + { + "x": 85, + "y": 130 + }, + { + "x": 86, + "y": 129 + }, + { + "x": 87, + "y": 129 + }, + { + "x": 88, + "y": 128 + }, + { + "x": 89, + "y": 128 + }, + { + "x": 90, + "y": 127 + }, + { + "x": 91, + "y": 127 + }, + { + "x": 92, + "y": 126 + }, + { + "x": 93, + "y": 126 + }, + { + "x": 94, + "y": 125 + }, + { + "x": 95, + "y": 125 + }, + { + "x": 96, + "y": 124 + }, + { + "x": 97, + "y": 124 + }, + { + "x": 98, + "y": 123 + }, + { + "x": 99, + "y": 123 + }, + { + "x": 103, + "y": 119 + }, + { + "x": 104, + "y": 118 + }, + { + "x": 104, + "y": 117 + }, + { + "x": 103, + "y": 116 + }, + { + "x": 103, + "y": 115 + }, + { + "x": 102, + "y": 114 + }, + { + "x": 102, + "y": 113 + }, + { + "x": 101, + "y": 112 + }, + { + "x": 101, + "y": 106 + }, + { + "x": 101, + "y": 105 + }, + { + "x": 100, + "y": 104 + }, + { + "x": 99, + "y": 104 + }, + { + "x": 98, + "y": 103 + }, + { + "x": 97, + "y": 102 + }, + { + "x": 96, + "y": 102 + }, + { + "x": 95, + "y": 101 + }, + { + "x": 94, + "y": 101 + }, + { + "x": 93, + "y": 100 + }, + { + "x": 87, + "y": 100 + }, + { + "x": 86, + "y": 100 + }, + { + "x": 85, + "y": 99 + }, + { + "x": 85, + "y": 98 + }, + { + "x": 84, + "y": 97 + }, + { + "x": 84, + "y": 93 + }, + { + "x": 84, + "y": 92 + }, + { + "x": 74, + "y": 92 + }, + { + "x": 73, + "y": 92 + }, + { + "x": 70, + "y": 95 + }, + { + "x": 69, + "y": 96 + }, + { + "x": 69, + "y": 97 + }, + { + "x": 68, + "y": 98 + }, + { + "x": 68, + "y": 99 + }, + { + "x": 68, + "y": 100 + }, + { + "x": 67, + "y": 101 + }, + { + "x": 67, + "y": 102 + }, + { + "x": 66, + "y": 103 + }, + { + "x": 66, + "y": 104 + }, + { + "x": 66, + "y": 105 + }, + { + "x": 65, + "y": 106 + }, + { + "x": 65, + "y": 107 + }, + { + "x": 65, + "y": 108 + }, + { + "x": 64, + "y": 109 + }, + { + "x": 64, + "y": 110 + }, + { + "x": 63, + "y": 111 + } + ] + } + }, + "102": { + "keyframe": true, + "polygon": { + "path": [ + { + "x": 63, + "y": 111 + }, + { + "x": 63, + "y": 112 + }, + { + "x": 64, + "y": 113 + }, + { + "x": 64, + "y": 114 + }, + { + "x": 65, + "y": 115 + }, + { + "x": 66, + "y": 116 + }, + { + "x": 66, + "y": 117 + }, + { + "x": 68, + "y": 119 + }, + { + "x": 69, + "y": 120 + }, + { + "x": 69, + "y": 121 + }, + { + "x": 70, + "y": 122 + }, + { + "x": 70, + "y": 133 + }, + { + "x": 70, + "y": 134 + }, + { + "x": 75, + "y": 134 + }, + { + "x": 76, + "y": 134 + }, + { + "x": 77, + "y": 133 + }, + { + "x": 78, + "y": 133 + }, + { + "x": 79, + "y": 132 + }, + { + "x": 80, + "y": 132 + }, + { + "x": 81, + "y": 132 + }, + { + "x": 82, + "y": 131 + }, + { + "x": 83, + "y": 131 + }, + { + "x": 84, + "y": 130 + }, + { + "x": 85, + "y": 130 + }, + { + "x": 86, + "y": 129 + }, + { + "x": 87, + "y": 129 + }, + { + "x": 88, + "y": 128 + }, + { + "x": 89, + "y": 128 + }, + { + "x": 90, + "y": 127 + }, + { + "x": 91, + "y": 127 + }, + { + "x": 92, + "y": 126 + }, + { + "x": 93, + "y": 126 + }, + { + "x": 94, + "y": 125 + }, + { + "x": 95, + "y": 125 + }, + { + "x": 96, + "y": 124 + }, + { + "x": 97, + "y": 124 + }, + { + "x": 98, + "y": 123 + }, + { + "x": 99, + "y": 123 + }, + { + "x": 103, + "y": 119 + }, + { + "x": 104, + "y": 118 + }, + { + "x": 104, + "y": 117 + }, + { + "x": 103, + "y": 116 + }, + { + "x": 103, + "y": 115 + }, + { + "x": 102, + "y": 114 + }, + { + "x": 102, + "y": 113 + }, + { + "x": 101, + "y": 112 + }, + { + "x": 101, + "y": 106 + }, + { + "x": 101, + "y": 105 + }, + { + "x": 100, + "y": 104 + }, + { + "x": 99, + "y": 104 + }, + { + "x": 98, + "y": 103 + }, + { + "x": 97, + "y": 102 + }, + { + "x": 96, + "y": 102 + }, + { + "x": 95, + "y": 101 + }, + { + "x": 94, + "y": 101 + }, + { + "x": 93, + "y": 100 + }, + { + "x": 87, + "y": 100 + }, + { + "x": 86, + "y": 100 + }, + { + "x": 85, + "y": 99 + }, + { + "x": 85, + "y": 98 + }, + { + "x": 84, + "y": 97 + }, + { + "x": 84, + "y": 93 + }, + { + "x": 84, + "y": 92 + }, + { + "x": 74, + "y": 92 + }, + { + "x": 73, + "y": 92 + }, + { + "x": 70, + "y": 95 + }, + { + "x": 69, + "y": 96 + }, + { + "x": 69, + "y": 97 + }, + { + "x": 68, + "y": 98 + }, + { + "x": 68, + "y": 99 + }, + { + "x": 68, + "y": 100 + }, + { + "x": 67, + "y": 101 + }, + { + "x": 67, + "y": 102 + }, + { + "x": 66, + "y": 103 + }, + { + "x": 66, + "y": 104 + }, + { + "x": 66, + "y": 105 + }, + { + "x": 65, + "y": 106 + }, + { + "x": 65, + "y": 107 + }, + { + "x": 65, + "y": 108 + }, + { + "x": 64, + "y": 109 + }, + { + "x": 64, + "y": 110 + }, + { + "x": 63, + "y": 111 + } + ] + } + }, + "103": { + "keyframe": true, + "polygon": { + "path": [ + { + "x": 63, + "y": 111 + }, + { + "x": 63, + "y": 112 + }, + { + "x": 64, + "y": 113 + }, + { + "x": 64, + "y": 114 + }, + { + "x": 65, + "y": 115 + }, + { + "x": 66, + "y": 116 + }, + { + "x": 66, + "y": 117 + }, + { + "x": 68, + "y": 119 + }, + { + "x": 69, + "y": 120 + }, + { + "x": 69, + "y": 121 + }, + { + "x": 70, + "y": 122 + }, + { + "x": 70, + "y": 133 + }, + { + "x": 70, + "y": 134 + }, + { + "x": 75, + "y": 134 + }, + { + "x": 76, + "y": 134 + }, + { + "x": 77, + "y": 133 + }, + { + "x": 78, + "y": 133 + }, + { + "x": 79, + "y": 132 + }, + { + "x": 80, + "y": 132 + }, + { + "x": 81, + "y": 132 + }, + { + "x": 82, + "y": 131 + }, + { + "x": 83, + "y": 131 + }, + { + "x": 84, + "y": 130 + }, + { + "x": 85, + "y": 130 + }, + { + "x": 86, + "y": 129 + }, + { + "x": 87, + "y": 129 + }, + { + "x": 88, + "y": 128 + }, + { + "x": 89, + "y": 128 + }, + { + "x": 90, + "y": 127 + }, + { + "x": 91, + "y": 127 + }, + { + "x": 92, + "y": 126 + }, + { + "x": 93, + "y": 126 + }, + { + "x": 94, + "y": 125 + }, + { + "x": 95, + "y": 125 + }, + { + "x": 96, + "y": 124 + }, + { + "x": 97, + "y": 124 + }, + { + "x": 98, + "y": 123 + }, + { + "x": 99, + "y": 123 + }, + { + "x": 103, + "y": 119 + }, + { + "x": 104, + "y": 118 + }, + { + "x": 104, + "y": 117 + }, + { + "x": 103, + "y": 116 + }, + { + "x": 103, + "y": 115 + }, + { + "x": 102, + "y": 114 + }, + { + "x": 102, + "y": 113 + }, + { + "x": 101, + "y": 112 + }, + { + "x": 101, + "y": 106 + }, + { + "x": 101, + "y": 105 + }, + { + "x": 100, + "y": 104 + }, + { + "x": 99, + "y": 104 + }, + { + "x": 98, + "y": 103 + }, + { + "x": 97, + "y": 102 + }, + { + "x": 96, + "y": 102 + }, + { + "x": 95, + "y": 101 + }, + { + "x": 94, + "y": 101 + }, + { + "x": 93, + "y": 100 + }, + { + "x": 87, + "y": 100 + }, + { + "x": 86, + "y": 100 + }, + { + "x": 85, + "y": 99 + }, + { + "x": 85, + "y": 98 + }, + { + "x": 84, + "y": 97 + }, + { + "x": 84, + "y": 93 + }, + { + "x": 84, + "y": 92 + }, + { + "x": 74, + "y": 92 + }, + { + "x": 73, + "y": 92 + }, + { + "x": 70, + "y": 95 + }, + { + "x": 69, + "y": 96 + }, + { + "x": 69, + "y": 97 + }, + { + "x": 68, + "y": 98 + }, + { + "x": 68, + "y": 99 + }, + { + "x": 68, + "y": 100 + }, + { + "x": 67, + "y": 101 + }, + { + "x": 67, + "y": 102 + }, + { + "x": 66, + "y": 103 + }, + { + "x": 66, + "y": 104 + }, + { + "x": 66, + "y": 105 + }, + { + "x": 65, + "y": 106 + }, + { + "x": 65, + "y": 107 + }, + { + "x": 65, + "y": 108 + }, + { + "x": 64, + "y": 109 + }, + { + "x": 64, + "y": 110 + }, + { + "x": 63, + "y": 111 + } + ] + } + } + }, + "interpolated": false, + "keyframes": { + "74": true, + "75": true, + "76": true, + "77": true, + "78": true, + "79": true, + "80": true, + "81": true, + "82": true, + "83": true, + "84": true, + "85": true, + "86": true, + "87": true, + "88": true, + "89": true, + "90": true, + "91": true, + "92": true, + "93": true, + "94": true, + "95": true, + "96": true, + "97": true, + "98": true, + "99": true, + "100": true, + "101": true, + "102": true, + "103": true + }, + "segments": [ + [ + 74, + 103 + ] + ], + "slot_names": [] + } + ], + "filename": "vol0 (1).nii", + "frame_urls": null, + "image_height": null, + "image_url": null, + "image_width": null, + "is_video": false, + "path": "/var/folders/pc/ymnq641d5sq4l4z5tzc8_vtm0000gn/T/tmp807ks14k/annotations.json", + "remote_path": "/", + "seq": null, + "workview_url": null +} \ No newline at end of file diff --git a/tests/darwin/cli_functions_test.py b/tests/darwin/cli_functions_test.py index 926dab984..8af3652cc 100644 --- a/tests/darwin/cli_functions_test.py +++ b/tests/darwin/cli_functions_test.py @@ -5,13 +5,13 @@ import pytest import responses from rich.console import Console -from tests.fixtures import * from darwin.cli_functions import delete_files, set_file_status, upload_data from darwin.client import Client from darwin.config import Config from darwin.dataset import RemoteDataset from darwin.dataset.remote_dataset_v1 import RemoteDatasetV1 +from tests.fixtures import * @pytest.fixture diff --git a/tests/darwin/importer/formats/import_labelbox_test.py b/tests/darwin/importer/formats/import_labelbox_test.py index 89bbf2b20..d0b09cad7 100644 --- a/tests/darwin/importer/formats/import_labelbox_test.py +++ b/tests/darwin/importer/formats/import_labelbox_test.py @@ -2,6 +2,8 @@ from typing import List, Optional, cast import pytest +from jsonschema import ValidationError + from darwin.datatypes import ( Annotation, AnnotationClass, @@ -10,7 +12,6 @@ SubAnnotation, ) from darwin.importer.formats.labelbox import parse_path -from jsonschema import ValidationError def describe_parse_path(): @@ -74,7 +75,7 @@ def test_it_raises_if_label_objects_is_missing(file_path: Path): with pytest.raises(ValidationError) as error: parse_path(file_path) - assert "'objects' is a required propert" in str(error.value) + assert "'objects' is a required property" in str(error.value) def test_it_raises_if_label_object_has_unknown_format(file_path: Path): json: str = """ @@ -92,7 +93,9 @@ def test_it_raises_if_label_object_has_unknown_format(file_path: Path): with pytest.raises(ValidationError) as error: parse_path(file_path) - assert "'point' is a required property" in str(error.value) + assert "is not valid under any of the given schemas" in str( + error.value + ) or "'point' is a required property" in str(error.value) def test_it_raises_if_annotation_has_no_title(file_path: Path): json: str = """ @@ -514,7 +517,9 @@ def test_it_raises_if_classification_object_has_no_answer(file_path: Path): with pytest.raises(ValidationError) as error: parse_path(file_path) - assert "'answer' is a required property" in str(error.value) + assert "is not valid under any of the given schemas" in str( + error.value + ) or "'answer' is a required property" in str(error.value) def test_it_raises_if_classification_answer_has_no_value(file_path: Path): json: str = """ @@ -546,7 +551,8 @@ def test_it_raises_if_classification_answer_has_no_value(file_path: Path): # The library asserts agains both types and if all fail, it prints the error of the # first type only. - assert "{} is not of type 'string'" in str(error.value) + error_str = str(error.value) + assert all(["{}" in error_str, "string" in error_str]) def test_it_imports_classification_from_radio_buttons(file_path: Path): json: str = """ diff --git a/tests/darwin/importer/formats/import_superannotate_test.py b/tests/darwin/importer/formats/import_superannotate_test.py index 8873c09ee..2283d37ad 100644 --- a/tests/darwin/importer/formats/import_superannotate_test.py +++ b/tests/darwin/importer/formats/import_superannotate_test.py @@ -2,6 +2,8 @@ from typing import Dict, List, Optional, cast import pytest +from jsonschema import ValidationError + from darwin.datatypes import ( Annotation, AnnotationClass, @@ -12,7 +14,6 @@ SubAnnotation, ) from darwin.importer.formats.superannotate import parse_path -from jsonschema import ValidationError def describe_parse_path(): @@ -190,7 +191,8 @@ def it_raises_if_point_has_missing_coordinate(annotations_file_path: Path, class with pytest.raises(ValidationError) as error: parse_path(annotations_file_path) - assert "'point' is not one of ['ellipse']" in str(error.value) + error_str = str(error.value) + assert all(["point" in error_str, "ellipse" in error_str]) def it_imports_point_vectors(annotations_file_path: Path, classes_file_path: Path): @@ -244,7 +246,8 @@ def it_raises_if_ellipse_has_missing_coordinate(annotations_file_path: Path, cla with pytest.raises(ValidationError) as error: parse_path(annotations_file_path) - assert "'ellipse' is not one of ['point']" in str(error.value) + error_str = str(error.value) + assert all(["ellipse" in error_str, "point" in error_str]) def it_imports_ellipse_vectors(annotations_file_path: Path, classes_file_path: Path): @@ -316,8 +319,8 @@ def it_raises_if_cuboid_has_missing_point(annotations_file_path: Path, classes_f with pytest.raises(ValidationError) as error: parse_path(annotations_file_path) - - assert "'cuboid' is not one of ['point']" in str(error.value) + error_str = str(error.value) + assert all(["cuboid" in error_str, "point" in error_str]) def it_imports_cuboid_vectors(annotations_file_path: Path, classes_file_path: Path): @@ -392,7 +395,8 @@ def it_raises_if_polygon_has_missing_points(annotations_file_path: Path, classes with pytest.raises(ValidationError) as error: parse_path(annotations_file_path) - assert "'polygon' is not one of ['point']" in str(error.value) + error_str = str(error.value) + assert all(["polygon" in error_str, "point" in error_str]) def it_imports_polygon_vectors(annotations_file_path: Path, classes_file_path: Path): @@ -459,7 +463,8 @@ def it_raises_if_polyline_has_missing_points(annotations_file_path: Path, classe with pytest.raises(ValidationError) as error: parse_path(annotations_file_path) - assert "'polyline' is not one of ['point']" in str(error.value) + error_str = str(error.value) + assert all(["polyline" in error_str, "point" in error_str]) def it_imports_polyline_vectors(annotations_file_path: Path, classes_file_path: Path): @@ -525,7 +530,8 @@ def it_raises_if_bbox_has_missing_points(annotations_file_path: Path, classes_fi with pytest.raises(ValidationError) as error: parse_path(annotations_file_path) - assert "'bbox' is not one of ['point']" in str(error.value) + error_str = str(error.value) + assert all(["bbox" in error_str, "point" in error_str]) def it_imports_bbox_vectors(annotations_file_path: Path, classes_file_path: Path): @@ -606,7 +612,8 @@ def it_raises_if_an_attributes_is_missing(annotations_file_path: Path, classes_f with pytest.raises(ValidationError) as error: parse_path(annotations_file_path) - assert "'bbox' is not one of ['point']" in str(error.value) + error_str = str(error.value) + assert all(["type" in error_str, "bbox" in error_str]) def it_raises_if_an_attribute_from_a_group_is_missing(annotations_file_path: Path, classes_file_path: Path): diff --git a/tests/darwin/utils_test.py b/tests/darwin/utils_test.py index e465f3fef..f346b6c43 100644 --- a/tests/darwin/utils_test.py +++ b/tests/darwin/utils_test.py @@ -1,8 +1,11 @@ from unittest.mock import MagicMock, patch +import pytest +from jsonschema.exceptions import ValidationError from requests import Response import darwin.datatypes as dt +import darwin.exceptions as de from darwin.utils import ( get_response_content, has_json_content_type, @@ -13,9 +16,32 @@ is_video_extension_allowed, parse_darwin_json, urljoin, + validate_data_against_schema, ) +def describe_validation(): + def it_should_raise_missing_schema_url(): + with pytest.raises(de.MissingSchema) as error: + validate_data_against_schema({}) + assert "Schema not found" in str(error.value) + + def it_fails_on_incorrect_data(): + data = { + "schema_ref": "https://darwin-public.s3.eu-west-1.amazonaws.com/darwin_json_2_0.schema.json", + } + assert len(validate_data_against_schema(data)) >= 1 + + def it_validates_correct_data(): + data = { + "version": "2.0", + "schema_ref": "https://darwin-public.s3.eu-west-1.amazonaws.com/darwin_json_2_0.schema.json", + "item": {"name": "", "path": ""}, + "annotations": [], + } + assert len(validate_data_against_schema(data)) == 0 + + def describe_is_extension_allowed(): def it_returns_true_for_allowed_extensions(): assert is_extension_allowed(".png")