diff --git a/.gitignore b/.gitignore index 40bf80082ba..ba00cb8feef 100644 --- a/.gitignore +++ b/.gitignore @@ -91,6 +91,9 @@ ENV/ # pylint .pylint.d/ +#PyCharm +.idea/ + # VS Code .vscode/* !.vscode/cSpell.json diff --git a/supervisor/coresys.py b/supervisor/coresys.py index 027e0f70c48..6ee84abad89 100644 --- a/supervisor/coresys.py +++ b/supervisor/coresys.py @@ -2,6 +2,7 @@ from __future__ import annotations import asyncio +import contextvars from typing import TYPE_CHECKING, Any, Callable, Coroutine, Optional, TypeVar import aiohttp @@ -593,7 +594,12 @@ def sys_run_in_executor( self, funct: Callable[..., T], *args: Any ) -> Coroutine[Any, Any, T]: """Add an job to the executor pool.""" - return self.sys_loop.run_in_executor(None, funct, *args) + def funct_with_context(): + return funct(*args) + + current_context = contextvars.copy_context() + + return self.sys_loop.run_in_executor(None, current_context.run, funct_with_context) def sys_create_task(self, coroutine: Coroutine) -> asyncio.Task: """Create an async task.""" diff --git a/supervisor/docker/__init__.py b/supervisor/docker/__init__.py index 8c0b6c4371f..599ea75a4a6 100644 --- a/supervisor/docker/__init__.py +++ b/supervisor/docker/__init__.py @@ -10,6 +10,7 @@ from packaging import version as pkg_version import requests +from .utils import PullProgress from ..const import ( ATTR_REGISTRIES, DNS_SUFFIX, @@ -290,3 +291,18 @@ def check_denylist_images(self) -> bool: ", ".join(denied_images), ) return True + + def pull_image(self, image, tag, container_name): + """Pull docker image and send progress events to core.""" + pull = PullProgress(container_name) + try: + pull.start() + pull_log = self.api.pull(image, tag, stream=True, decode=True) + for line in pull_log: + pull.process_log(line) + + return self.images.get("{0}{2}{1}".format( + image, tag, "@" if tag.startswith("sha256:") else ":" + )) + finally: + pull.done() diff --git a/supervisor/docker/interface.py b/supervisor/docker/interface.py index aaf4785846d..c15475b914a 100644 --- a/supervisor/docker/interface.py +++ b/supervisor/docker/interface.py @@ -113,7 +113,7 @@ def _install( path = IMAGE_WITH_HOST.match(image) if path: self._docker_login(path.group(1)) - docker_image = self.sys_docker.images.pull(f"{image}:{tag}") + docker_image = self.sys_docker.pull_image(image, tag, self.name) if latest: _LOGGER.info("Tagging image %s with version %s as latest", image, tag) docker_image.tag(image, tag="latest") diff --git a/supervisor/docker/utils.py b/supervisor/docker/utils.py new file mode 100644 index 00000000000..39bebb707f7 --- /dev/null +++ b/supervisor/docker/utils.py @@ -0,0 +1,97 @@ +"""Utils for Docker.""" +import time + +from ..utils import job_monitor + + +class PullProgress: + """Docker pull log progress listener.""" + + def __init__(self, name: str, sleep=1.0) -> None: + """Initialize pull log listener.""" + self._name = name + self._sleep = sleep + self._next_push = 0 + self._downloading = Status() + self._extracting = Status() + self._job_monitor = job_monitor.get() + + def start(self): + """Send progress on start.""" + self._next_push = time.time() + self._send_progress() + + def process_log(self, line): + """Process pull log and yield current status.""" + self._update(line) + now = time.time() + if self._next_push < now: + self._next_push = now + self._sleep + self._send_progress() + + def done(self): + """Mark current pull as done and send this info to HA Core.""" + self._downloading.done_all() + self._extracting.done_all() + self._send_progress() + + def _send_progress(self): + if self._job_monitor: + self._job_monitor.send_progress( + self._name, + self._extracting.get(), + self._downloading.get(), + ) + + def _update(self, data): + try: + layer_id = data["id"] + detail = data["progressDetail"] + if data["status"] == "Pulling fs layer": + # unknown layer size, assume 100MB + self._downloading.update(layer_id, 0, 100e6) + self._extracting.update(layer_id, 0, 100e6) + if data["status"] == "Downloading": + self._downloading.update(layer_id, detail["current"], detail["total"]) + self._extracting.update(layer_id, 0, detail["total"]) + if data["status"] == "Extracting": + self._downloading.done(layer_id) + self._extracting.update(layer_id, detail["current"], detail["total"]) + if data["status"] == "Pull complete": + self._downloading.done(layer_id) + self._extracting.done(layer_id) + except KeyError: + pass + + +class Status: + """Docker image status object.""" + + def __init__(self): + """Initialize status object.""" + self._current = {} + self._total = {} + + def update(self, layer_id, current, total): + """Update one layer status.""" + self._current[layer_id] = current + self._total[layer_id] = total + + def done(self, layer_id): + """Mark one layer as done.""" + if layer_id in self._total: + self._current[layer_id] = self._total[layer_id] + + def done_all(self): + """Mark image as done.""" + if len(self._total) == 0: + self.update("id", 1, 1) + for layer_id in self._total: + self._current[layer_id] = self._total[layer_id] + + def get(self): + """Return the current status.""" + total = sum(self._total.values()) + if total == 0: + return None + return sum(self._current.values()) / total diff --git a/supervisor/utils/__init__.py b/supervisor/utils/__init__.py index ca7bc9d6cd4..aee2db69f43 100644 --- a/supervisor/utils/__init__.py +++ b/supervisor/utils/__init__.py @@ -1,5 +1,6 @@ """Tools file for Supervisor.""" import asyncio +from contextvars import ContextVar from datetime import datetime from ipaddress import IPv4Address import logging @@ -7,10 +8,14 @@ import socket from typing import Any, Optional +from .job_monitor import JobMonitor + _LOGGER: logging.Logger = logging.getLogger(__name__) RE_STRING: re.Pattern = re.compile(r"\x1b(\[.*?[@-~]|\].*?(\x07|\x1b\\))") +job_monitor: ContextVar[Optional[JobMonitor]] = ContextVar("job_monitor", default=None) + def convert_to_ascii(raw: bytes) -> str: """Convert binary to ascii and remove colors.""" @@ -29,6 +34,8 @@ async def wrap_api(api, *args, **kwargs): return False async with api.lock: + job_monitor.set(JobMonitor(api)) + return await method(api, *args, **kwargs) return wrap_api diff --git a/supervisor/utils/job_monitor.py b/supervisor/utils/job_monitor.py new file mode 100644 index 00000000000..9ce738f1873 --- /dev/null +++ b/supervisor/utils/job_monitor.py @@ -0,0 +1,33 @@ +"""Monitoring class for Supervisor jobs.""" +import asyncio +from contextlib import suppress + +from ..exceptions import HomeAssistantAPIError + + +class JobMonitor: + """Monitoring class.""" + + def __init__(self, api): + self._api = api + + def send_progress(self, name, progress, buffer=None): + """Send job progress to core in background task.""" + self._schedule_send("progress", { + "name": name, + "progress": progress, + "buffer": buffer, + }) + + def _schedule_send(self, event, json, timeout=2): + asyncio.run_coroutine_threadsafe( + self._async_send(event, json, timeout), + self._api.sys_loop, + ) + + async def _async_send(self, event, json, timeout) -> None: + with suppress(HomeAssistantAPIError): + async with self._api.sys_homeassistant.api.make_request( + "post", "api/events/hassio_" + event, json=json, timeout=timeout, + ): + pass diff --git a/tests/docker/test_utils.py b/tests/docker/test_utils.py new file mode 100644 index 00000000000..dc1b0507952 --- /dev/null +++ b/tests/docker/test_utils.py @@ -0,0 +1,35 @@ +"""Test Docker Utils.""" +import time +from unittest.mock import MagicMock, call + +from supervisor.docker.utils import PullProgress +from supervisor.utils import JobMonitor, job_monitor +from tests.common import load_json_fixture + + +def test_pull_progress(): + """Test PullProgress class.""" + + job = JobMonitor(None) + job.send_progress = MagicMock() + job_monitor.set(job) + + pull = PullProgress("test-object", 0.01) + pull.start() + for line in _pull_log_stream(): + pull.process_log(line) + pull.done() + + assert 5 <= len(job.send_progress.mock_calls) <= 7 + + first = job.send_progress.mock_calls[0] + last = job.send_progress.mock_calls[-1] + assert first == call("test-object", None, None) + assert last == call("test-object", 1.0, 1.0) + + +def _pull_log_stream(): + pull_log = load_json_fixture("docker-pull-log.json") + for log in pull_log: + time.sleep(0.0001) + yield log diff --git a/tests/fixtures/docker-pull-log.json b/tests/fixtures/docker-pull-log.json new file mode 100644 index 00000000000..c398d6167f5 --- /dev/null +++ b/tests/fixtures/docker-pull-log.json @@ -0,0 +1,307 @@ +[ +{"status":"Pulling from homeassistant/amd64-homeassistant","id":"0.110.1"}, +{"status":"Already exists","progressDetail":{},"id":"cbdbe7a5bc2a"}, +{"status":"Already exists","progressDetail":{},"id":"4505f5630d48"}, +{"status":"Already exists","progressDetail":{},"id":"5816dc4dc9d4"}, +{"status":"Already exists","progressDetail":{},"id":"6abcdd942b0a"}, +{"status":"Already exists","progressDetail":{},"id":"0805e1bc7f2e"}, +{"status":"Already exists","progressDetail":{},"id":"cfd4d0880651"}, +{"status":"Already exists","progressDetail":{},"id":"d552ee4b3fcc"}, +{"status":"Already exists","progressDetail":{},"id":"a3960645a3fc"}, +{"status":"Already exists","progressDetail":{},"id":"dafdf7da33e9"}, +{"status":"Already exists","progressDetail":{},"id":"15c46baee70d"}, +{"status":"Already exists","progressDetail":{},"id":"1a0a2b8a0ead"}, +{"status":"Already exists","progressDetail":{},"id":"93785d50dce7"}, +{"status":"Already exists","progressDetail":{},"id":"e9e0d398cb63"}, +{"status":"Already exists","progressDetail":{},"id":"5740b4979286"}, +{"status":"Already exists","progressDetail":{},"id":"3e864e5de65a"}, +{"status":"Already exists","progressDetail":{},"id":"c1f3c67b403d"}, +{"status":"Pulling fs layer","progressDetail":{},"id":"57dc7b28d77f"}, +{"status":"Pulling fs layer","progressDetail":{},"id":"221c584ce7e1"}, +{"status":"Pulling fs layer","progressDetail":{},"id":"31e56d2e09f8"}, +{"status":"Pulling fs layer","progressDetail":{},"id":"7464903e2a0e"}, +{"status":"Waiting","progressDetail":{},"id":"7464903e2a0e"}, +{"status":"Downloading","progressDetail":{"current":438,"total":833},"progress":"[==========================\\u003e ] 438B/833B","id":"31e56d2e09f8"}, +{"status":"Downloading","progressDetail":{"current":833,"total":833},"progress":"[==================================================\\u003e] 833B/833B","id":"31e56d2e09f8"}, +{"status":"Verifying Checksum","progressDetail":{},"id":"31e56d2e09f8"}, +{"status":"Download complete","progressDetail":{},"id":"31e56d2e09f8"}, +{"status":"Downloading","progressDetail":{"current":44813,"total":4425759},"progress":"[\\u003e ] 44.81kB/4.426MB","id":"57dc7b28d77f"}, +{"status":"Downloading","progressDetail":{"current":619611,"total":4425759},"progress":"[=======\\u003e ] 619.6kB/4.426MB","id":"57dc7b28d77f"}, +{"status":"Downloading","progressDetail":{"current":525421,"total":289059491},"progress":"[\\u003e ] 525.4kB/289.1MB","id":"221c584ce7e1"}, +{"status":"Downloading","progressDetail":{"current":1307739,"total":4425759},"progress":"[==============\\u003e ] 1.308MB/4.426MB","id":"57dc7b28d77f"}, +{"status":"Downloading","progressDetail":{"current":1053805,"total":289059491},"progress":"[\\u003e ] 1.054MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Downloading","progressDetail":{"current":1848411,"total":4425759},"progress":"[====================\\u003e ] 1.848MB/4.426MB","id":"57dc7b28d77f"}, +{"status":"Downloading","progressDetail":{"current":1586285,"total":289059491},"progress":"[\\u003e ] 1.586MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Downloading","progressDetail":{"current":2286683,"total":4425759},"progress":"[=========================\\u003e ] 2.287MB/4.426MB","id":"57dc7b28d77f"}, +{"status":"Downloading","progressDetail":{"current":2643053,"total":289059491},"progress":"[\\u003e ] 2.643MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Downloading","progressDetail":{"current":2585691,"total":4425759},"progress":"[=============================\\u003e ] 2.586MB/4.426MB","id":"57dc7b28d77f"}, +{"status":"Downloading","progressDetail":{"current":3179629,"total":289059491},"progress":"[\\u003e ] 3.18MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Downloading","progressDetail":{"current":3101787,"total":4425759},"progress":"[===================================\\u003e ] 3.102MB/4.426MB","id":"57dc7b28d77f"}, +{"status":"Downloading","progressDetail":{"current":3708013,"total":289059491},"progress":"[\\u003e ] 3.708MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Downloading","progressDetail":{"current":3564635,"total":4425759},"progress":"[========================================\\u003e ] 3.565MB/4.426MB","id":"57dc7b28d77f"}, +{"status":"Downloading","progressDetail":{"current":4109403,"total":4425759},"progress":"[==============================================\\u003e ] 4.109MB/4.426MB","id":"57dc7b28d77f"}, +{"status":"Download complete","progressDetail":{},"id":"57dc7b28d77f"}, +{"status":"Downloading","progressDetail":{"current":4789357,"total":289059491},"progress":"[\\u003e ] 4.789MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Downloading","progressDetail":{"current":95,"total":95},"progress":"[==================================================\\u003e] 95B/95B","id":"7464903e2a0e"}, +{"status":"Verifying Checksum","progressDetail":{},"id":"7464903e2a0e"}, +{"status":"Download complete","progressDetail":{},"id":"7464903e2a0e"}, +{"status":"Extracting","progressDetail":{"current":65536,"total":4425759},"progress":"[\\u003e ] 65.54kB/4.426MB","id":"57dc7b28d77f"}, +{"status":"Downloading","progressDetail":{"current":5854317,"total":289059491},"progress":"[=\\u003e ] 5.854MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Extracting","progressDetail":{"current":655360,"total":4425759},"progress":"[=======\\u003e ] 655.4kB/4.426MB","id":"57dc7b28d77f"}, +{"status":"Downloading","progressDetail":{"current":6923373,"total":289059491},"progress":"[=\\u003e ] 6.923MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Extracting","progressDetail":{"current":1441792,"total":4425759},"progress":"[================\\u003e ] 1.442MB/4.426MB","id":"57dc7b28d77f"}, +{"status":"Extracting","progressDetail":{"current":2031616,"total":4425759},"progress":"[======================\\u003e ] 2.032MB/4.426MB","id":"57dc7b28d77f"}, +{"status":"Downloading","progressDetail":{"current":8000621,"total":289059491},"progress":"[=\\u003e ] 8.001MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Extracting","progressDetail":{"current":2621440,"total":4425759},"progress":"[=============================\\u003e ] 2.621MB/4.426MB","id":"57dc7b28d77f"}, +{"status":"Downloading","progressDetail":{"current":9069677,"total":289059491},"progress":"[=\\u003e ] 9.07MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Extracting","progressDetail":{"current":3211264,"total":4425759},"progress":"[====================================\\u003e ] 3.211MB/4.426MB","id":"57dc7b28d77f"}, +{"status":"Downloading","progressDetail":{"current":10687597,"total":289059491},"progress":"[=\\u003e ] 10.69MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Extracting","progressDetail":{"current":3735552,"total":4425759},"progress":"[==========================================\\u003e ] 3.736MB/4.426MB","id":"57dc7b28d77f"}, +{"status":"Downloading","progressDetail":{"current":12276845,"total":289059491},"progress":"[==\\u003e ] 12.28MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Extracting","progressDetail":{"current":4390912,"total":4425759},"progress":"[=================================================\\u003e ] 4.391MB/4.426MB","id":"57dc7b28d77f"}, +{"status":"Extracting","progressDetail":{"current":4425759,"total":4425759},"progress":"[==================================================\\u003e] 4.426MB/4.426MB","id":"57dc7b28d77f"}, +{"status":"Downloading","progressDetail":{"current":13358189,"total":289059491},"progress":"[==\\u003e ] 13.36MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Pull complete","progressDetail":{},"id":"57dc7b28d77f"}, +{"status":"Downloading","progressDetail":{"current":14435437,"total":289059491},"progress":"[==\\u003e ] 14.44MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Downloading","progressDetail":{"current":16057453,"total":289059491},"progress":"[==\\u003e ] 16.06MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Downloading","progressDetail":{"current":17671277,"total":289059491},"progress":"[===\\u003e ] 17.67MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Downloading","progressDetail":{"current":19272813,"total":289059491},"progress":"[===\\u003e ] 19.27MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Downloading","progressDetail":{"current":20354157,"total":289059491},"progress":"[===\\u003e ] 20.35MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Downloading","progressDetail":{"current":21427309,"total":289059491},"progress":"[===\\u003e ] 21.43MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Downloading","progressDetail":{"current":22496365,"total":289059491},"progress":"[===\\u003e ] 22.5MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Downloading","progressDetail":{"current":24093805,"total":289059491},"progress":"[====\\u003e ] 24.09MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Downloading","progressDetail":{"current":25711725,"total":289059491},"progress":"[====\\u003e ] 25.71MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Downloading","progressDetail":{"current":27845741,"total":289059491},"progress":"[====\\u003e ] 27.85MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Downloading","progressDetail":{"current":30504045,"total":289059491},"progress":"[=====\\u003e ] 30.5MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Downloading","progressDetail":{"current":33715309,"total":289059491},"progress":"[=====\\u003e ] 33.72MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Downloading","progressDetail":{"current":36918381,"total":289059491},"progress":"[======\\u003e ] 36.92MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Downloading","progressDetail":{"current":40137837,"total":289059491},"progress":"[======\\u003e ] 40.14MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Downloading","progressDetail":{"current":43332717,"total":289059491},"progress":"[=======\\u003e ] 43.33MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Downloading","progressDetail":{"current":46548077,"total":289059491},"progress":"[========\\u003e ] 46.55MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Downloading","progressDetail":{"current":49792109,"total":289059491},"progress":"[========\\u003e ] 49.79MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Downloading","progressDetail":{"current":53023853,"total":289059491},"progress":"[=========\\u003e ] 53.02MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Downloading","progressDetail":{"current":56255597,"total":289059491},"progress":"[=========\\u003e ] 56.26MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Downloading","progressDetail":{"current":59475053,"total":289059491},"progress":"[==========\\u003e ] 59.48MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Downloading","progressDetail":{"current":62706797,"total":289059491},"progress":"[==========\\u003e ] 62.71MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Downloading","progressDetail":{"current":65913965,"total":289059491},"progress":"[===========\\u003e ] 65.91MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Downloading","progressDetail":{"current":69149805,"total":289059491},"progress":"[===========\\u003e ] 69.15MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Downloading","progressDetail":{"current":72361069,"total":289059491},"progress":"[============\\u003e ] 72.36MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Downloading","progressDetail":{"current":75592813,"total":289059491},"progress":"[=============\\u003e ] 75.59MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Downloading","progressDetail":{"current":78808173,"total":289059491},"progress":"[=============\\u003e ] 78.81MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Downloading","progressDetail":{"current":82019437,"total":289059491},"progress":"[==============\\u003e ] 82.02MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Downloading","progressDetail":{"current":85251181,"total":289059491},"progress":"[==============\\u003e ] 85.25MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Downloading","progressDetail":{"current":88462445,"total":289059491},"progress":"[===============\\u003e ] 88.46MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Downloading","progressDetail":{"current":91694189,"total":289059491},"progress":"[===============\\u003e ] 91.69MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Downloading","progressDetail":{"current":94901357,"total":289059491},"progress":"[================\\u003e ] 94.9MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Downloading","progressDetail":{"current":98100333,"total":289059491},"progress":"[================\\u003e ] 98.1MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Downloading","progressDetail":{"current":101323885,"total":289059491},"progress":"[=================\\u003e ] 101.3MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Downloading","progressDetail":{"current":103994477,"total":289059491},"progress":"[=================\\u003e ] 104MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Downloading","progressDetail":{"current":106157165,"total":289059491},"progress":"[==================\\u003e ] 106.2MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Downloading","progressDetail":{"current":107762797,"total":289059491},"progress":"[==================\\u003e ] 107.8MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Downloading","progressDetail":{"current":110429293,"total":289059491},"progress":"[===================\\u003e ] 110.4MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Downloading","progressDetail":{"current":112579693,"total":289059491},"progress":"[===================\\u003e ] 112.6MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Downloading","progressDetail":{"current":114717805,"total":289059491},"progress":"[===================\\u003e ] 114.7MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Downloading","progressDetail":{"current":116851821,"total":289059491},"progress":"[====================\\u003e ] 116.9MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Downloading","progressDetail":{"current":118973549,"total":289059491},"progress":"[====================\\u003e ] 119MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Downloading","progressDetail":{"current":121111661,"total":289059491},"progress":"[====================\\u003e ] 121.1MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Downloading","progressDetail":{"current":123245677,"total":289059491},"progress":"[=====================\\u003e ] 123.2MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Downloading","progressDetail":{"current":125916269,"total":289059491},"progress":"[=====================\\u003e ] 125.9MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Downloading","progressDetail":{"current":126456941,"total":289059491},"progress":"[=====================\\u003e ] 126.5MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Downloading","progressDetail":{"current":129143917,"total":289059491},"progress":"[======================\\u003e ] 129.1MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Downloading","progressDetail":{"current":131290221,"total":289059491},"progress":"[======================\\u003e ] 131.3MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Downloading","progressDetail":{"current":133407853,"total":289059491},"progress":"[=======================\\u003e ] 133.4MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Downloading","progressDetail":{"current":135554157,"total":289059491},"progress":"[=======================\\u003e ] 135.6MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Downloading","progressDetail":{"current":137696365,"total":289059491},"progress":"[=======================\\u003e ] 137.7MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Downloading","progressDetail":{"current":139859053,"total":289059491},"progress":"[========================\\u003e ] 139.9MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Downloading","progressDetail":{"current":141988973,"total":289059491},"progress":"[========================\\u003e ] 142MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Downloading","progressDetail":{"current":144118893,"total":289059491},"progress":"[========================\\u003e ] 144.1MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Downloading","progressDetail":{"current":146252909,"total":289059491},"progress":"[=========================\\u003e ] 146.3MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Downloading","progressDetail":{"current":148395117,"total":289059491},"progress":"[=========================\\u003e ] 148.4MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Downloading","progressDetail":{"current":150541421,"total":289059491},"progress":"[==========================\\u003e ] 150.5MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Downloading","progressDetail":{"current":152659053,"total":289059491},"progress":"[==========================\\u003e ] 152.7MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Downloading","progressDetail":{"current":154784877,"total":289059491},"progress":"[==========================\\u003e ] 154.8MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Downloading","progressDetail":{"current":156922989,"total":289059491},"progress":"[===========================\\u003e ] 156.9MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Downloading","progressDetail":{"current":159052909,"total":289059491},"progress":"[===========================\\u003e ] 159.1MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Downloading","progressDetail":{"current":161191021,"total":289059491},"progress":"[===========================\\u003e ] 161.2MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Downloading","progressDetail":{"current":163337325,"total":289059491},"progress":"[============================\\u003e ] 163.3MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Downloading","progressDetail":{"current":165500013,"total":289059491},"progress":"[============================\\u003e ] 165.5MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Downloading","progressDetail":{"current":167662701,"total":289059491},"progress":"[=============================\\u003e ] 167.7MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Downloading","progressDetail":{"current":169804909,"total":289059491},"progress":"[=============================\\u003e ] 169.8MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Downloading","progressDetail":{"current":171955309,"total":289059491},"progress":"[=============================\\u003e ] 172MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Downloading","progressDetail":{"current":174101613,"total":289059491},"progress":"[==============================\\u003e ] 174.1MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Downloading","progressDetail":{"current":176247917,"total":289059491},"progress":"[==============================\\u003e ] 176.2MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Downloading","progressDetail":{"current":178377837,"total":289059491},"progress":"[==============================\\u003e ] 178.4MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Downloading","progressDetail":{"current":179999853,"total":289059491},"progress":"[===============================\\u003e ] 180MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Downloading","progressDetail":{"current":182654061,"total":289059491},"progress":"[===============================\\u003e ] 182.7MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Downloading","progressDetail":{"current":184779885,"total":289059491},"progress":"[===============================\\u003e ] 184.8MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Downloading","progressDetail":{"current":185308269,"total":289059491},"progress":"[================================\\u003e ] 185.3MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Downloading","progressDetail":{"current":186909805,"total":289059491},"progress":"[================================\\u003e ] 186.9MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Downloading","progressDetail":{"current":189584493,"total":289059491},"progress":"[================================\\u003e ] 189.6MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Downloading","progressDetail":{"current":192808045,"total":289059491},"progress":"[=================================\\u003e ] 192.8MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Downloading","progressDetail":{"current":195998829,"total":289059491},"progress":"[=================================\\u003e ] 196MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Downloading","progressDetail":{"current":199214189,"total":289059491},"progress":"[==================================\\u003e ] 199.2MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Downloading","progressDetail":{"current":202441837,"total":289059491},"progress":"[===================================\\u003e ] 202.4MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Downloading","progressDetail":{"current":205640813,"total":289059491},"progress":"[===================================\\u003e ] 205.6MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Downloading","progressDetail":{"current":208868461,"total":289059491},"progress":"[====================================\\u003e ] 208.9MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Downloading","progressDetail":{"current":212075629,"total":289059491},"progress":"[====================================\\u003e ] 212.1MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Downloading","progressDetail":{"current":215270509,"total":289059491},"progress":"[=====================================\\u003e ] 215.3MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Downloading","progressDetail":{"current":217945197,"total":289059491},"progress":"[=====================================\\u003e ] 217.9MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Downloading","progressDetail":{"current":220091501,"total":289059491},"progress":"[======================================\\u003e ] 220.1MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Downloading","progressDetail":{"current":222237805,"total":289059491},"progress":"[======================================\\u003e ] 222.2MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Downloading","progressDetail":{"current":224367725,"total":289059491},"progress":"[======================================\\u003e ] 224.4MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Downloading","progressDetail":{"current":226514029,"total":289059491},"progress":"[=======================================\\u003e ] 226.5MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Downloading","progressDetail":{"current":228668525,"total":289059491},"progress":"[=======================================\\u003e ] 228.7MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Downloading","progressDetail":{"current":230806637,"total":289059491},"progress":"[=======================================\\u003e ] 230.8MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Downloading","progressDetail":{"current":232936557,"total":289059491},"progress":"[========================================\\u003e ] 232.9MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Downloading","progressDetail":{"current":235594861,"total":289059491},"progress":"[========================================\\u003e ] 235.6MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Downloading","progressDetail":{"current":237720685,"total":289059491},"progress":"[=========================================\\u003e ] 237.7MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Downloading","progressDetail":{"current":239866989,"total":289059491},"progress":"[=========================================\\u003e ] 239.9MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Downloading","progressDetail":{"current":242021485,"total":289059491},"progress":"[=========================================\\u003e ] 242MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Downloading","progressDetail":{"current":244155501,"total":289059491},"progress":"[==========================================\\u003e ] 244.2MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Downloading","progressDetail":{"current":246305901,"total":289059491},"progress":"[==========================================\\u003e ] 246.3MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Downloading","progressDetail":{"current":247907437,"total":289059491},"progress":"[==========================================\\u003e ] 247.9MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Downloading","progressDetail":{"current":251106413,"total":289059491},"progress":"[===========================================\\u003e ] 251.1MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Downloading","progressDetail":{"current":253236333,"total":289059491},"progress":"[===========================================\\u003e ] 253.2MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Downloading","progressDetail":{"current":255386733,"total":289059491},"progress":"[============================================\\u003e ] 255.4MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Downloading","progressDetail":{"current":256980077,"total":289059491},"progress":"[============================================\\u003e ] 257MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Downloading","progressDetail":{"current":259642477,"total":289059491},"progress":"[============================================\\u003e ] 259.6MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Downloading","progressDetail":{"current":261788781,"total":289059491},"progress":"[=============================================\\u003e ] 261.8MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Downloading","progressDetail":{"current":263922797,"total":289059491},"progress":"[=============================================\\u003e ] 263.9MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Downloading","progressDetail":{"current":266065005,"total":289059491},"progress":"[==============================================\\u003e ] 266.1MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Downloading","progressDetail":{"current":268194925,"total":289059491},"progress":"[==============================================\\u003e ] 268.2MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Downloading","progressDetail":{"current":270898285,"total":289059491},"progress":"[==============================================\\u003e ] 270.9MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Downloading","progressDetail":{"current":273036397,"total":289059491},"progress":"[===============================================\\u003e ] 273MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Downloading","progressDetail":{"current":275190893,"total":289059491},"progress":"[===============================================\\u003e ] 275.2MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Downloading","progressDetail":{"current":277873773,"total":289059491},"progress":"[================================================\\u003e ] 277.9MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Downloading","progressDetail":{"current":280532077,"total":289059491},"progress":"[================================================\\u003e ] 280.5MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Downloading","progressDetail":{"current":282666093,"total":289059491},"progress":"[================================================\\u003e ] 282.7MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Downloading","progressDetail":{"current":285873261,"total":289059491},"progress":"[=================================================\\u003e ] 285.9MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Verifying Checksum","progressDetail":{},"id":"221c584ce7e1"}, +{"status":"Download complete","progressDetail":{},"id":"221c584ce7e1"}, +{"status":"Extracting","progressDetail":{"current":557056,"total":289059491},"progress":"[\\u003e ] 557.1kB/289.1MB","id":"221c584ce7e1"}, +{"status":"Extracting","progressDetail":{"current":2785280,"total":289059491},"progress":"[\\u003e ] 2.785MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Extracting","progressDetail":{"current":6127616,"total":289059491},"progress":"[=\\u003e ] 6.128MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Extracting","progressDetail":{"current":9469952,"total":289059491},"progress":"[=\\u003e ] 9.47MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Extracting","progressDetail":{"current":12812288,"total":289059491},"progress":"[==\\u003e ] 12.81MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Extracting","progressDetail":{"current":16154624,"total":289059491},"progress":"[==\\u003e ] 16.15MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Extracting","progressDetail":{"current":19496960,"total":289059491},"progress":"[===\\u003e ] 19.5MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Extracting","progressDetail":{"current":22839296,"total":289059491},"progress":"[===\\u003e ] 22.84MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Extracting","progressDetail":{"current":25624576,"total":289059491},"progress":"[====\\u003e ] 25.62MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Extracting","progressDetail":{"current":28409856,"total":289059491},"progress":"[====\\u003e ] 28.41MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Extracting","progressDetail":{"current":30638080,"total":289059491},"progress":"[=====\\u003e ] 30.64MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Extracting","progressDetail":{"current":32309248,"total":289059491},"progress":"[=====\\u003e ] 32.31MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Extracting","progressDetail":{"current":34537472,"total":289059491},"progress":"[=====\\u003e ] 34.54MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Extracting","progressDetail":{"current":36765696,"total":289059491},"progress":"[======\\u003e ] 36.77MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Extracting","progressDetail":{"current":38993920,"total":289059491},"progress":"[======\\u003e ] 38.99MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Extracting","progressDetail":{"current":41222144,"total":289059491},"progress":"[=======\\u003e ] 41.22MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Extracting","progressDetail":{"current":44564480,"total":289059491},"progress":"[=======\\u003e ] 44.56MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Extracting","progressDetail":{"current":47906816,"total":289059491},"progress":"[========\\u003e ] 47.91MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Extracting","progressDetail":{"current":50135040,"total":289059491},"progress":"[========\\u003e ] 50.14MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Extracting","progressDetail":{"current":52920320,"total":289059491},"progress":"[=========\\u003e ] 52.92MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Extracting","progressDetail":{"current":55705600,"total":289059491},"progress":"[=========\\u003e ] 55.71MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Extracting","progressDetail":{"current":58490880,"total":289059491},"progress":"[==========\\u003e ] 58.49MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Extracting","progressDetail":{"current":60719104,"total":289059491},"progress":"[==========\\u003e ] 60.72MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Extracting","progressDetail":{"current":62390272,"total":289059491},"progress":"[==========\\u003e ] 62.39MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Extracting","progressDetail":{"current":64061440,"total":289059491},"progress":"[===========\\u003e ] 64.06MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Extracting","progressDetail":{"current":66289664,"total":289059491},"progress":"[===========\\u003e ] 66.29MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Extracting","progressDetail":{"current":67960832,"total":289059491},"progress":"[===========\\u003e ] 67.96MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Extracting","progressDetail":{"current":70189056,"total":289059491},"progress":"[============\\u003e ] 70.19MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Extracting","progressDetail":{"current":72417280,"total":289059491},"progress":"[============\\u003e ] 72.42MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Extracting","progressDetail":{"current":74088448,"total":289059491},"progress":"[============\\u003e ] 74.09MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Extracting","progressDetail":{"current":75759616,"total":289059491},"progress":"[=============\\u003e ] 75.76MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Extracting","progressDetail":{"current":77430784,"total":289059491},"progress":"[=============\\u003e ] 77.43MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Extracting","progressDetail":{"current":79659008,"total":289059491},"progress":"[=============\\u003e ] 79.66MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Extracting","progressDetail":{"current":83558400,"total":289059491},"progress":"[==============\\u003e ] 83.56MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Extracting","progressDetail":{"current":87457792,"total":289059491},"progress":"[===============\\u003e ] 87.46MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Extracting","progressDetail":{"current":91357184,"total":289059491},"progress":"[===============\\u003e ] 91.36MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Extracting","progressDetail":{"current":95256576,"total":289059491},"progress":"[================\\u003e ] 95.26MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Extracting","progressDetail":{"current":99155968,"total":289059491},"progress":"[=================\\u003e ] 99.16MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Extracting","progressDetail":{"current":101941248,"total":289059491},"progress":"[=================\\u003e ] 101.9MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Extracting","progressDetail":{"current":104169472,"total":289059491},"progress":"[==================\\u003e ] 104.2MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Extracting","progressDetail":{"current":106397696,"total":289059491},"progress":"[==================\\u003e ] 106.4MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Extracting","progressDetail":{"current":108068864,"total":289059491},"progress":"[==================\\u003e ] 108.1MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Extracting","progressDetail":{"current":110854144,"total":289059491},"progress":"[===================\\u003e ] 110.9MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Extracting","progressDetail":{"current":113639424,"total":289059491},"progress":"[===================\\u003e ] 113.6MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Extracting","progressDetail":{"current":116424704,"total":289059491},"progress":"[====================\\u003e ] 116.4MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Extracting","progressDetail":{"current":119767040,"total":289059491},"progress":"[====================\\u003e ] 119.8MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Extracting","progressDetail":{"current":122552320,"total":289059491},"progress":"[=====================\\u003e ] 122.6MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Extracting","progressDetail":{"current":125337600,"total":289059491},"progress":"[=====================\\u003e ] 125.3MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Extracting","progressDetail":{"current":128679936,"total":289059491},"progress":"[======================\\u003e ] 128.7MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Extracting","progressDetail":{"current":132022272,"total":289059491},"progress":"[======================\\u003e ] 132MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Extracting","progressDetail":{"current":133693440,"total":289059491},"progress":"[=======================\\u003e ] 133.7MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Extracting","progressDetail":{"current":135921664,"total":289059491},"progress":"[=======================\\u003e ] 135.9MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Extracting","progressDetail":{"current":138149888,"total":289059491},"progress":"[=======================\\u003e ] 138.1MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Extracting","progressDetail":{"current":141492224,"total":289059491},"progress":"[========================\\u003e ] 141.5MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Extracting","progressDetail":{"current":143720448,"total":289059491},"progress":"[========================\\u003e ] 143.7MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Extracting","progressDetail":{"current":144277504,"total":289059491},"progress":"[========================\\u003e ] 144.3MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Extracting","progressDetail":{"current":146505728,"total":289059491},"progress":"[=========================\\u003e ] 146.5MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Extracting","progressDetail":{"current":149848064,"total":289059491},"progress":"[=========================\\u003e ] 149.8MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Extracting","progressDetail":{"current":152633344,"total":289059491},"progress":"[==========================\\u003e ] 152.6MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Extracting","progressDetail":{"current":154861568,"total":289059491},"progress":"[==========================\\u003e ] 154.9MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Extracting","progressDetail":{"current":157089792,"total":289059491},"progress":"[===========================\\u003e ] 157.1MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Extracting","progressDetail":{"current":159318016,"total":289059491},"progress":"[===========================\\u003e ] 159.3MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Extracting","progressDetail":{"current":162103296,"total":289059491},"progress":"[============================\\u003e ] 162.1MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Extracting","progressDetail":{"current":164888576,"total":289059491},"progress":"[============================\\u003e ] 164.9MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Extracting","progressDetail":{"current":167116800,"total":289059491},"progress":"[============================\\u003e ] 167.1MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Extracting","progressDetail":{"current":169345024,"total":289059491},"progress":"[=============================\\u003e ] 169.3MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Extracting","progressDetail":{"current":172687360,"total":289059491},"progress":"[=============================\\u003e ] 172.7MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Extracting","progressDetail":{"current":175472640,"total":289059491},"progress":"[==============================\\u003e ] 175.5MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Extracting","progressDetail":{"current":178257920,"total":289059491},"progress":"[==============================\\u003e ] 178.3MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Extracting","progressDetail":{"current":179929088,"total":289059491},"progress":"[===============================\\u003e ] 179.9MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Extracting","progressDetail":{"current":182714368,"total":289059491},"progress":"[===============================\\u003e ] 182.7MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Extracting","progressDetail":{"current":185499648,"total":289059491},"progress":"[================================\\u003e ] 185.5MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Extracting","progressDetail":{"current":188284928,"total":289059491},"progress":"[================================\\u003e ] 188.3MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Extracting","progressDetail":{"current":191070208,"total":289059491},"progress":"[=================================\\u003e ] 191.1MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Extracting","progressDetail":{"current":193855488,"total":289059491},"progress":"[=================================\\u003e ] 193.9MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Extracting","progressDetail":{"current":196640768,"total":289059491},"progress":"[==================================\\u003e ] 196.6MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Extracting","progressDetail":{"current":199426048,"total":289059491},"progress":"[==================================\\u003e ] 199.4MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Extracting","progressDetail":{"current":202211328,"total":289059491},"progress":"[==================================\\u003e ] 202.2MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Extracting","progressDetail":{"current":204996608,"total":289059491},"progress":"[===================================\\u003e ] 205MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Extracting","progressDetail":{"current":207781888,"total":289059491},"progress":"[===================================\\u003e ] 207.8MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Extracting","progressDetail":{"current":210567168,"total":289059491},"progress":"[====================================\\u003e ] 210.6MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Extracting","progressDetail":{"current":213352448,"total":289059491},"progress":"[====================================\\u003e ] 213.4MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Extracting","progressDetail":{"current":216137728,"total":289059491},"progress":"[=====================================\\u003e ] 216.1MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Extracting","progressDetail":{"current":218923008,"total":289059491},"progress":"[=====================================\\u003e ] 218.9MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Extracting","progressDetail":{"current":221151232,"total":289059491},"progress":"[======================================\\u003e ] 221.2MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Extracting","progressDetail":{"current":223379456,"total":289059491},"progress":"[======================================\\u003e ] 223.4MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Extracting","progressDetail":{"current":225050624,"total":289059491},"progress":"[======================================\\u003e ] 225.1MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Extracting","progressDetail":{"current":225607680,"total":289059491},"progress":"[=======================================\\u003e ] 225.6MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Extracting","progressDetail":{"current":226721792,"total":289059491},"progress":"[=======================================\\u003e ] 226.7MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Extracting","progressDetail":{"current":228392960,"total":289059491},"progress":"[=======================================\\u003e ] 228.4MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Extracting","progressDetail":{"current":230064128,"total":289059491},"progress":"[=======================================\\u003e ] 230.1MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Extracting","progressDetail":{"current":232849408,"total":289059491},"progress":"[========================================\\u003e ] 232.8MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Extracting","progressDetail":{"current":235634688,"total":289059491},"progress":"[========================================\\u003e ] 235.6MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Extracting","progressDetail":{"current":238419968,"total":289059491},"progress":"[=========================================\\u003e ] 238.4MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Extracting","progressDetail":{"current":240648192,"total":289059491},"progress":"[=========================================\\u003e ] 240.6MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Extracting","progressDetail":{"current":242876416,"total":289059491},"progress":"[==========================================\\u003e ] 242.9MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Extracting","progressDetail":{"current":245104640,"total":289059491},"progress":"[==========================================\\u003e ] 245.1MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Extracting","progressDetail":{"current":250118144,"total":289059491},"progress":"[===========================================\\u003e ] 250.1MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Extracting","progressDetail":{"current":251232256,"total":289059491},"progress":"[===========================================\\u003e ] 251.2MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Extracting","progressDetail":{"current":252346368,"total":289059491},"progress":"[===========================================\\u003e ] 252.3MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Extracting","progressDetail":{"current":254017536,"total":289059491},"progress":"[===========================================\\u003e ] 254MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Extracting","progressDetail":{"current":255688704,"total":289059491},"progress":"[============================================\\u003e ] 255.7MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Extracting","progressDetail":{"current":256802816,"total":289059491},"progress":"[============================================\\u003e ] 256.8MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Extracting","progressDetail":{"current":259031040,"total":289059491},"progress":"[============================================\\u003e ] 259MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Extracting","progressDetail":{"current":261259264,"total":289059491},"progress":"[=============================================\\u003e ] 261.3MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Extracting","progressDetail":{"current":267386880,"total":289059491},"progress":"[==============================================\\u003e ] 267.4MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Extracting","progressDetail":{"current":268500992,"total":289059491},"progress":"[==============================================\\u003e ] 268.5MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Extracting","progressDetail":{"current":270729216,"total":289059491},"progress":"[==============================================\\u003e ] 270.7MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Extracting","progressDetail":{"current":272400384,"total":289059491},"progress":"[===============================================\\u003e ] 272.4MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Extracting","progressDetail":{"current":273514496,"total":289059491},"progress":"[===============================================\\u003e ] 273.5MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Extracting","progressDetail":{"current":275742720,"total":289059491},"progress":"[===============================================\\u003e ] 275.7MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Extracting","progressDetail":{"current":277413888,"total":289059491},"progress":"[===============================================\\u003e ] 277.4MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Extracting","progressDetail":{"current":279085056,"total":289059491},"progress":"[================================================\\u003e ] 279.1MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Extracting","progressDetail":{"current":281313280,"total":289059491},"progress":"[================================================\\u003e ] 281.3MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Extracting","progressDetail":{"current":282984448,"total":289059491},"progress":"[================================================\\u003e ] 283MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Extracting","progressDetail":{"current":284655616,"total":289059491},"progress":"[=================================================\\u003e ] 284.7MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Extracting","progressDetail":{"current":286326784,"total":289059491},"progress":"[=================================================\\u003e ] 286.3MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Extracting","progressDetail":{"current":287997952,"total":289059491},"progress":"[=================================================\\u003e ] 288MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Extracting","progressDetail":{"current":289059491,"total":289059491},"progress":"[==================================================\\u003e] 289.1MB/289.1MB","id":"221c584ce7e1"}, +{"status":"Pull complete","progressDetail":{},"id":"221c584ce7e1"}, +{"status":"Extracting","progressDetail":{"current":833,"total":833},"progress":"[==================================================\\u003e] 833B/833B","id":"31e56d2e09f8"}, +{"status":"Extracting","progressDetail":{"current":833,"total":833},"progress":"[==================================================\\u003e] 833B/833B","id":"31e56d2e09f8"}, +{"status":"Pull complete","progressDetail":{},"id":"31e56d2e09f8"}, +{"status":"Extracting","progressDetail":{"current":95,"total":95},"progress":"[==================================================\\u003e] 95B/95B","id":"7464903e2a0e"}, +{"status":"Extracting","progressDetail":{"current":95,"total":95},"progress":"[==================================================\\u003e] 95B/95B","id":"7464903e2a0e"}, +{"status":"Pull complete","progressDetail":{},"id":"7464903e2a0e"} +] \ No newline at end of file