# Run sent to worker: doanac-reckless == 2026-01-14 13:50:59.524865: Setting up runner on worker == 2026-01-14 13:51:00.542735: Steps to recreate inside simulator wget -O simulate.sh https://api.gavelci.us/projects/jobserv/builds/502/runs/unit-test//.simulate.sh # wget'ing the file may require the --header flag if the # jobserv API requires authentication. sh ./simulate.sh == 2026-01-14 13:51:00.979713: Pulling container: python:3.11-alpine3.19 3.11-alpine3.19: Pulling from library/python Digest: sha256:135b0db9b7c3e33d654ba8893b63cbe9394768cc64fc2a2f283148125ae8aa1f Status: Image is up to date for python:3.11-alpine3.19 docker.io/library/python:3.11-alpine3.19 == 2026-01-14 13:51:02.449876: Preparing bind mounts 2026-01-14 13:51:02.593516: INFO Default docker configuration detected 2026-01-14 13:51:02.735737: INFO Creating secret: githubtok 2026-01-14 13:51:02.872204: INFO Creating secret: webhook-key 2026-01-14 13:51:03.011195: INFO Creating secret: milosz 2026-01-14 13:51:03.155523: INFO Adding shared volume: /lmp-bitbake-cache == 2026-01-14 13:51:03.437773: Creating container .netrc file 2026-01-14 13:51:03.571379: INFO Creating token for jobserv run access 2026-01-14 13:51:03.705520: INFO Creating a github token entry == 2026-01-14 13:51:04.004191: Preparing script == 2026-01-14 13:51:04.267668: Cloning git repository 2026-01-14 13:51:04.404985: INFO Clone_url: https://github.com/foundriesio/jobserv.git 2026-01-14 13:51:04.546607: INFO Checking to see if https://github.com/foundriesio/jobserv.git requires authentication. 2026-01-14 13:51:04.909566: INFO Server does not appear to need credentials for cloning 2026-01-14 13:51:05.060943: INFO Adding githubtok to .gitconfig 2026-01-14 13:51:05.190613: INFO Git install supports submodules Cloning into '/srv/gavelci-worker/runs/tmp8mmfm8cw/repo'... 2026-01-14 13:51:06.142018: INFO Checking out: 298b77eae8e5d30af5071a1536b83c5c1bbaff7f Switched to branch 'jobserv-run' == 2026-01-14 13:51:06.678612: Setting up container environment 2026-01-14 13:51:06.812198: INFO Container environment variables: GH_PRNUM=152 GH_OWNER=foundriesio GH_REPO=jobserv GH_BRANCH=master GH_STATUS_URL=https://api.github.com/repos/foundriesio/jobserv/statuses/298b77eae8e5d30af5071a1536b83c5c1bbaff7f GH_TARGET_REPO=https://github.com/foundriesio/jobserv.git GIT_URL=https://github.com/foundriesio/jobserv.git GIT_SHA_BASE=8caa9de181ac4a6ecca18a79279451417d4a8841 GIT_OLD_SHA=8caa9de181ac4a6ecca18a79279451417d4a8841 GIT_SHA=298b77eae8e5d30af5071a1536b83c5c1bbaff7f H_PROJECT=jobserv H_BUILD=502 H_RUN=unit-test H_RUN_URL=https://api.gavelci.us/projects/jobserv/builds/502/runs/unit-test/ H_WORKER=doanac-reckless == 2026-01-14 13:51:07.073251: Running script inside container 2026-01-14 13:51:07.206496: INFO Running with --memory=14639596339 WARNING: Your kernel does not support swap limit capabilities or the cgroup is not mounted. Memory limited without swap. + apk --no-cache add git python3-dev musl-dev g++ openssl libffi-dev openssl-dev rust cargo fetch https://dl-cdn.alpinelinux.org/alpine/v3.19/main/x86_64/APKINDEX.tar.gz fetch https://dl-cdn.alpinelinux.org/alpine/v3.19/community/x86_64/APKINDEX.tar.gz (1/45) Upgrading musl (1.2.4_git20230717-r4 -> 1.2.4_git20230717-r5) (2/45) Upgrading libcrypto3 (3.1.7-r1 -> 3.1.8-r1) (3/45) Upgrading libssl3 (3.1.7-r1 -> 3.1.8-r1) (4/45) Installing libgcc (13.2.1_git20231014-r0) (5/45) Installing jansson (2.14-r4) (6/45) Installing libstdc++ (13.2.1_git20231014-r0) (7/45) Installing zstd-libs (1.5.5-r8) (8/45) Installing binutils (2.41-r1) (9/45) Installing libgomp (13.2.1_git20231014-r0) (10/45) Installing libatomic (13.2.1_git20231014-r0) (11/45) Installing gmp (6.3.0-r0) (12/45) Installing isl26 (0.26-r1) (13/45) Installing mpfr4 (4.2.1-r0) (14/45) Installing mpc1 (1.3.1-r1) (15/45) Installing gcc (13.2.1_git20231014-r0) (16/45) Installing musl-dev (1.2.4_git20230717-r5) (17/45) Installing libxml2 (2.11.8-r3) (18/45) Installing llvm17-libs (17.0.5-r0) (19/45) Installing scudo-malloc (17.0.5-r0) (20/45) Installing rust (1.76.0-r0) (21/45) Installing brotli-libs (1.1.0-r1) (22/45) Installing c-ares (1.27.0-r0) (23/45) Installing libunistring (1.1-r2) (24/45) Installing libidn2 (2.3.4-r4) (25/45) Installing nghttp2-libs (1.58.0-r0) (26/45) Installing libpsl (0.21.5-r0) (27/45) Installing libcurl (8.14.1-r2) (28/45) Installing cargo (1.76.0-r0) (29/45) Installing libstdc++-dev (13.2.1_git20231014-r0) (30/45) Installing libc-dev (0.7.2-r5) (31/45) Installing g++ (13.2.1_git20231014-r0) (32/45) Installing libexpat (2.7.3-r0) (33/45) Installing pcre2 (10.42-r2) (34/45) Installing git (2.43.7-r0) (35/45) Installing linux-headers (6.5-r0) (36/45) Installing pkgconf (2.1.0-r0) (37/45) Installing libffi-dev (3.4.4-r3) (38/45) Installing openssl (3.1.8-r1) (39/45) Installing openssl-dev (3.1.8-r1) (40/45) Installing mpdecimal (2.5.1-r2) (41/45) Installing python3 (3.11.14-r0) (42/45) Installing python3-pycache-pyc0 (3.11.14-r0) (43/45) Installing pyc (3.11.14-r0) (44/45) Installing python3-pyc (3.11.14-r0) (45/45) Installing python3-dev (3.11.14-r0) Executing busybox-1.36.1-r19.trigger Executing ca-certificates-20240226-r0.trigger OK: 1077 MiB in 79 packages + git config --global user.email cibot@example.com + git config --global user.name cibot + git config --system protocol.file.allow always + git config --global --add safe.directory /repo/.git + ls /lmp-bitbake-cache/ dmesg.out + sh ./unit-test.sh + readlink -f ./unit-test.sh + dirname /repo/unit-test.sh + HERE=/repo + cd /repo + mktemp -d + VENV=/tmp/tmp.OGNanl + trap '[ -z ] || docker kill jobserv-db; rm -rf /tmp/tmp.OGNanl' EXIT + '[' -n ] + '[' -z ] + echo 'WARNING: Using sqlite database - work queue testing will be skipped' WARNING: Using sqlite database - work queue testing will be skipped + export 'SQLALCHEMY_DATABASE_URI=sqlite://' + python3 -m venv /tmp/tmp.OGNanl + /tmp/tmp.OGNanl/bin/pip3 install -U pip Requirement already satisfied: pip in /tmp/tmp.OGNanl/lib/python3.11/site-packages (24.0) Collecting pip Downloading pip-25.3-py3-none-any.whl.metadata (4.7 kB) Downloading pip-25.3-py3-none-any.whl (1.8 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.8/1.8 MB 3.8 MB/s eta 0:00:00 Installing collected packages: pip Attempting uninstall: pip Found existing installation: pip 24.0 Uninstalling pip-24.0: Successfully uninstalled pip-24.0 Successfully installed pip-25.3 + /tmp/tmp.OGNanl/bin/pip3 install -U setuptools Requirement already satisfied: setuptools in /tmp/tmp.OGNanl/lib/python3.11/site-packages (65.5.0) Collecting setuptools Downloading setuptools-80.9.0-py3-none-any.whl.metadata (6.6 kB) Downloading setuptools-80.9.0-py3-none-any.whl (1.2 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.2/1.2 MB 859.0 kB/s 0:00:01 Installing collected packages: setuptools Attempting uninstall: setuptools Found existing installation: setuptools 65.5.0 Uninstalling setuptools-65.5.0: Successfully uninstalled setuptools-65.5.0 Successfully installed setuptools-80.9.0 + /tmp/tmp.OGNanl/bin/pip3 install -r requirements.txt Collecting Flask-Migrate==4.0.7 (from -r requirements.txt (line 1)) Downloading Flask_Migrate-4.0.7-py3-none-any.whl.metadata (3.1 kB) Collecting Flask-SQLAlchemy==3.0.5 (from -r requirements.txt (line 2)) Downloading flask_sqlalchemy-3.0.5-py3-none-any.whl.metadata (3.3 kB) Collecting Flask-Testing==0.8.1 (from -r requirements.txt (line 3)) Downloading Flask-Testing-0.8.1.tar.gz (45 kB) Installing build dependencies: started Installing build dependencies: finished with status 'done' Getting requirements to build wheel: started Getting requirements to build wheel: finished with status 'done' Preparing metadata (pyproject.toml): started Preparing metadata (pyproject.toml): finished with status 'done' Collecting Flask==3.1.1 (from -r requirements.txt (line 4)) Downloading flask-3.1.1-py3-none-any.whl.metadata (3.0 kB) Collecting PyJWT==2.10.1 (from -r requirements.txt (line 5)) Downloading PyJWT-2.10.1-py3-none-any.whl.metadata (4.0 kB) Collecting PyMySQL==1.1.2 (from -r requirements.txt (line 6)) Downloading pymysql-1.1.2-py3-none-any.whl.metadata (4.3 kB) Collecting PyYAML==6.0.1 (from -r requirements.txt (line 7)) Downloading PyYAML-6.0.1-cp311-cp311-musllinux_1_1_x86_64.whl.metadata (2.1 kB) Collecting SQLAlchemy==1.4.54 (from -r requirements.txt (line 8)) Downloading sqlalchemy-1.4.54.tar.gz (8.5 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.5/8.5 MB 10.8 MB/s 0:00:00 Installing build dependencies: started Installing build dependencies: finished with status 'done' Getting requirements to build wheel: started Getting requirements to build wheel: finished with status 'done' Preparing metadata (pyproject.toml): started Preparing metadata (pyproject.toml): finished with status 'done' Collecting Werkzeug==3.1.5 (from -r requirements.txt (line 9)) Downloading werkzeug-3.1.5-py3-none-any.whl.metadata (4.0 kB) Collecting bcrypt==5.0.0 (from -r requirements.txt (line 10)) Downloading bcrypt-5.0.0-cp39-abi3-musllinux_1_2_x86_64.whl.metadata (10 kB) Collecting cryptography==44.0.1 (from -r requirements.txt (line 11)) Downloading cryptography-44.0.1-cp39-abi3-musllinux_1_2_x86_64.whl.metadata (5.7 kB) Collecting dataclasses==0.6 (from -r requirements.txt (line 12)) Downloading dataclasses-0.6-py3-none-any.whl.metadata (3.0 kB) Collecting google-cloud-storage==2.10.0 (from -r requirements.txt (line 13)) Downloading google_cloud_storage-2.10.0-py2.py3-none-any.whl.metadata (6.0 kB) Collecting gunicorn==23.0.0 (from -r requirements.txt (line 16)) Downloading gunicorn-23.0.0-py3-none-any.whl.metadata (4.4 kB) Collecting json-logging==1.5.1 (from -r requirements.txt (line 17)) Downloading json_logging-1.5.1-py2.py3-none-any.whl.metadata (1.1 kB) Collecting pykwalify==1.8.0 (from -r requirements.txt (line 18)) Downloading pykwalify-1.8.0-py2.py3-none-any.whl.metadata (5.3 kB) Collecting python-dateutil==2.8.2 (from -r requirements.txt (line 19)) Downloading python_dateutil-2.8.2-py2.py3-none-any.whl.metadata (8.2 kB) Collecting pytz==2023.3 (from -r requirements.txt (line 20)) Downloading pytz-2023.3-py2.py3-none-any.whl.metadata (22 kB) Collecting requests==2.32.5 (from -r requirements.txt (line 21)) Downloading requests-2.32.5-py3-none-any.whl.metadata (4.9 kB) Collecting wheel==0.41.2 (from -r requirements.txt (line 22)) Downloading wheel-0.41.2-py3-none-any.whl.metadata (2.2 kB) Collecting alembic>=1.9.0 (from Flask-Migrate==4.0.7->-r requirements.txt (line 1)) Downloading alembic-1.18.0-py3-none-any.whl.metadata (7.2 kB) Collecting blinker>=1.9.0 (from Flask==3.1.1->-r requirements.txt (line 4)) Downloading blinker-1.9.0-py3-none-any.whl.metadata (1.6 kB) Collecting click>=8.1.3 (from Flask==3.1.1->-r requirements.txt (line 4)) Downloading click-8.3.1-py3-none-any.whl.metadata (2.6 kB) Collecting itsdangerous>=2.2.0 (from Flask==3.1.1->-r requirements.txt (line 4)) Downloading itsdangerous-2.2.0-py3-none-any.whl.metadata (1.9 kB) Collecting jinja2>=3.1.2 (from Flask==3.1.1->-r requirements.txt (line 4)) Downloading jinja2-3.1.6-py3-none-any.whl.metadata (2.9 kB) Collecting markupsafe>=2.1.1 (from Flask==3.1.1->-r requirements.txt (line 4)) Downloading markupsafe-3.0.3-cp311-cp311-musllinux_1_2_x86_64.whl.metadata (2.7 kB) Collecting greenlet!=0.4.17 (from SQLAlchemy==1.4.54->-r requirements.txt (line 8)) Downloading greenlet-3.3.0-cp311-cp311-musllinux_1_2_x86_64.whl.metadata (4.1 kB) Collecting cffi>=1.12 (from cryptography==44.0.1->-r requirements.txt (line 11)) Downloading cffi-2.0.0-cp311-cp311-musllinux_1_2_x86_64.whl.metadata (2.6 kB) Collecting google-auth<3.0dev,>=1.25.0 (from google-cloud-storage==2.10.0->-r requirements.txt (line 13)) Downloading google_auth-2.47.0-py3-none-any.whl.metadata (6.4 kB) Collecting google-api-core!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.0,<3.0.0dev,>=1.31.5 (from google-cloud-storage==2.10.0->-r requirements.txt (line 13)) Downloading google_api_core-2.29.0-py3-none-any.whl.metadata (3.3 kB) Collecting google-cloud-core<3.0dev,>=2.3.0 (from google-cloud-storage==2.10.0->-r requirements.txt (line 13)) Downloading google_cloud_core-2.5.0-py3-none-any.whl.metadata (3.1 kB) Collecting google-resumable-media>=2.3.2 (from google-cloud-storage==2.10.0->-r requirements.txt (line 13)) Downloading google_resumable_media-2.8.0-py3-none-any.whl.metadata (2.6 kB) Collecting charset_normalizer<4,>=2 (from requests==2.32.5->-r requirements.txt (line 21)) Downloading charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_x86_64.whl.metadata (37 kB) Collecting idna<4,>=2.5 (from requests==2.32.5->-r requirements.txt (line 21)) Downloading idna-3.11-py3-none-any.whl.metadata (8.4 kB) Collecting urllib3<3,>=1.21.1 (from requests==2.32.5->-r requirements.txt (line 21)) Downloading urllib3-2.6.3-py3-none-any.whl.metadata (6.9 kB) Collecting certifi>=2017.4.17 (from requests==2.32.5->-r requirements.txt (line 21)) Downloading certifi-2026.1.4-py3-none-any.whl.metadata (2.5 kB) Collecting packaging (from gunicorn==23.0.0->-r requirements.txt (line 16)) Downloading packaging-25.0-py3-none-any.whl.metadata (3.3 kB) Collecting docopt>=0.6.2 (from pykwalify==1.8.0->-r requirements.txt (line 18)) Downloading docopt-0.6.2.tar.gz (25 kB) Installing build dependencies: started Installing build dependencies: finished with status 'done' Getting requirements to build wheel: started Getting requirements to build wheel: finished with status 'done' Preparing metadata (pyproject.toml): started Preparing metadata (pyproject.toml): finished with status 'done' Collecting ruamel.yaml>=0.16.0 (from pykwalify==1.8.0->-r requirements.txt (line 18)) Downloading ruamel_yaml-0.19.1-py3-none-any.whl.metadata (16 kB) Collecting six>=1.5 (from python-dateutil==2.8.2->-r requirements.txt (line 19)) Downloading six-1.17.0-py2.py3-none-any.whl.metadata (1.7 kB) Collecting googleapis-common-protos<2.0.0,>=1.56.2 (from google-api-core!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.0,<3.0.0dev,>=1.31.5->google-cloud-storage==2.10.0->-r requirements.txt (line 13)) Downloading googleapis_common_protos-1.72.0-py3-none-any.whl.metadata (9.4 kB) Collecting protobuf!=3.20.0,!=3.20.1,!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5,<7.0.0,>=3.19.5 (from google-api-core!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.0,<3.0.0dev,>=1.31.5->google-cloud-storage==2.10.0->-r requirements.txt (line 13)) Downloading protobuf-6.33.4-py3-none-any.whl.metadata (593 bytes) Collecting proto-plus<2.0.0,>=1.22.3 (from google-api-core!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.0,<3.0.0dev,>=1.31.5->google-cloud-storage==2.10.0->-r requirements.txt (line 13)) Downloading proto_plus-1.27.0-py3-none-any.whl.metadata (2.2 kB) Collecting pyasn1-modules>=0.2.1 (from google-auth<3.0dev,>=1.25.0->google-cloud-storage==2.10.0->-r requirements.txt (line 13)) Downloading pyasn1_modules-0.4.2-py3-none-any.whl.metadata (3.5 kB) Collecting rsa<5,>=3.1.4 (from google-auth<3.0dev,>=1.25.0->google-cloud-storage==2.10.0->-r requirements.txt (line 13)) Downloading rsa-4.9.1-py3-none-any.whl.metadata (5.6 kB) Collecting pyasn1>=0.1.3 (from rsa<5,>=3.1.4->google-auth<3.0dev,>=1.25.0->google-cloud-storage==2.10.0->-r requirements.txt (line 13)) Downloading pyasn1-0.6.1-py3-none-any.whl.metadata (8.4 kB) Collecting Mako (from alembic>=1.9.0->Flask-Migrate==4.0.7->-r requirements.txt (line 1)) Downloading mako-1.3.10-py3-none-any.whl.metadata (2.9 kB) Collecting typing-extensions>=4.12 (from alembic>=1.9.0->Flask-Migrate==4.0.7->-r requirements.txt (line 1)) Downloading typing_extensions-4.15.0-py3-none-any.whl.metadata (3.3 kB) Collecting pycparser (from cffi>=1.12->cryptography==44.0.1->-r requirements.txt (line 11)) Downloading pycparser-2.23-py3-none-any.whl.metadata (993 bytes) Collecting google-crc32c<2.0.0,>=1.0.0 (from google-resumable-media>=2.3.2->google-cloud-storage==2.10.0->-r requirements.txt (line 13)) Downloading google_crc32c-1.8.0.tar.gz (14 kB) Installing build dependencies: started Installing build dependencies: finished with status 'done' Getting requirements to build wheel: started Getting requirements to build wheel: finished with status 'done' Preparing metadata (pyproject.toml): started Preparing metadata (pyproject.toml): finished with status 'done' Downloading Flask_Migrate-4.0.7-py3-none-any.whl (21 kB) Downloading flask_sqlalchemy-3.0.5-py3-none-any.whl (24 kB) Downloading flask-3.1.1-py3-none-any.whl (103 kB) Downloading PyJWT-2.10.1-py3-none-any.whl (22 kB) Downloading pymysql-1.1.2-py3-none-any.whl (45 kB) Downloading PyYAML-6.0.1-cp311-cp311-musllinux_1_1_x86_64.whl (748 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 748.5/748.5 kB 4.1 MB/s 0:00:00 Downloading werkzeug-3.1.5-py3-none-any.whl (225 kB) Downloading bcrypt-5.0.0-cp39-abi3-musllinux_1_2_x86_64.whl (359 kB) Downloading cryptography-44.0.1-cp39-abi3-musllinux_1_2_x86_64.whl (4.3 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.3/4.3 MB 10.6 MB/s 0:00:00 Downloading dataclasses-0.6-py3-none-any.whl (14 kB) Downloading google_cloud_storage-2.10.0-py2.py3-none-any.whl (114 kB) Downloading requests-2.32.5-py3-none-any.whl (64 kB) Downloading gunicorn-23.0.0-py3-none-any.whl (85 kB) Downloading json_logging-1.5.1-py2.py3-none-any.whl (23 kB) Downloading pykwalify-1.8.0-py2.py3-none-any.whl (24 kB) Downloading python_dateutil-2.8.2-py2.py3-none-any.whl (247 kB) Downloading pytz-2023.3-py2.py3-none-any.whl (502 kB) Downloading wheel-0.41.2-py3-none-any.whl (64 kB) Downloading charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_x86_64.whl (152 kB) Downloading google_api_core-2.29.0-py3-none-any.whl (173 kB) Downloading google_auth-2.47.0-py3-none-any.whl (234 kB) Downloading google_cloud_core-2.5.0-py3-none-any.whl (29 kB) Downloading googleapis_common_protos-1.72.0-py3-none-any.whl (297 kB) Downloading idna-3.11-py3-none-any.whl (71 kB) Downloading proto_plus-1.27.0-py3-none-any.whl (50 kB) Downloading protobuf-6.33.4-py3-none-any.whl (170 kB) Downloading rsa-4.9.1-py3-none-any.whl (34 kB) Downloading urllib3-2.6.3-py3-none-any.whl (131 kB) Downloading alembic-1.18.0-py3-none-any.whl (260 kB) Downloading blinker-1.9.0-py3-none-any.whl (8.5 kB) Downloading certifi-2026.1.4-py3-none-any.whl (152 kB) Downloading cffi-2.0.0-cp311-cp311-musllinux_1_2_x86_64.whl (217 kB) Downloading click-8.3.1-py3-none-any.whl (108 kB) Downloading google_resumable_media-2.8.0-py3-none-any.whl (81 kB) Downloading greenlet-3.3.0-cp311-cp311-musllinux_1_2_x86_64.whl (1.6 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.6/1.6 MB 8.2 MB/s 0:00:00 Downloading itsdangerous-2.2.0-py3-none-any.whl (16 kB) Downloading jinja2-3.1.6-py3-none-any.whl (134 kB) Downloading markupsafe-3.0.3-cp311-cp311-musllinux_1_2_x86_64.whl (22 kB) Downloading pyasn1-0.6.1-py3-none-any.whl (83 kB) Downloading pyasn1_modules-0.4.2-py3-none-any.whl (181 kB) Downloading ruamel_yaml-0.19.1-py3-none-any.whl (118 kB) Downloading six-1.17.0-py2.py3-none-any.whl (11 kB) Downloading typing_extensions-4.15.0-py3-none-any.whl (44 kB) Downloading mako-1.3.10-py3-none-any.whl (78 kB) Downloading packaging-25.0-py3-none-any.whl (66 kB) Downloading pycparser-2.23-py3-none-any.whl (118 kB) Building wheels for collected packages: Flask-Testing, SQLAlchemy, docopt, google-crc32c Building wheel for Flask-Testing (pyproject.toml): started Building wheel for Flask-Testing (pyproject.toml): finished with status 'done' Created wheel for Flask-Testing: filename=flask_testing-0.8.1-py3-none-any.whl size=8268 sha256=885535fb02181ce414405710157d817dc541932c2427fc1d2433013fc849545b Stored in directory: /root/.cache/pip/wheels/9d/aa/a4/a97a989ae422b51b1f164f76b5bdfc21a9c30b1842b7403598 Building wheel for SQLAlchemy (pyproject.toml): started Building wheel for SQLAlchemy (pyproject.toml): finished with status 'done' Created wheel for SQLAlchemy: filename=sqlalchemy-1.4.54-cp311-cp311-linux_x86_64.whl size=1622627 sha256=d824910077fe77d23c8667bb1ec9449bf53cbb38e31a8efae5b535bf21912c27 Stored in directory: /root/.cache/pip/wheels/e6/d5/db/f068d28cbd84d13f9f4c0d31dce260bc385dc39d9ea395bda5 Building wheel for docopt (pyproject.toml): started Building wheel for docopt (pyproject.toml): finished with status 'done' Created wheel for docopt: filename=docopt-0.6.2-py2.py3-none-any.whl size=13783 sha256=544bcfd4400627d70a5806cb9c5174b62c6ecec230267c638988c9db2947dd01 Stored in directory: /root/.cache/pip/wheels/1a/b0/8c/4b75c4116c31f83c8f9f047231251e13cc74481cca4a78a9ce Building wheel for google-crc32c (pyproject.toml): started Building wheel for google-crc32c (pyproject.toml): finished with status 'done' Created wheel for google-crc32c: filename=google_crc32c-1.8.0-py3-none-any.whl size=13802 sha256=8a073fea8a260f20eb9481c1184cc20ca872910940f6c6a1a4935184d04bcd17 Stored in directory: /root/.cache/pip/wheels/bf/c5/4d/1896ad3fcff8c08542fa9a4452e2dec9aa336fa1d63d5fdae6 Successfully built Flask-Testing SQLAlchemy docopt google-crc32c Installing collected packages: pytz, json-logging, docopt, dataclasses, wheel, urllib3, typing-extensions, six, ruamel.yaml, PyYAML, PyMySQL, PyJWT, pycparser, pyasn1, protobuf, packaging, markupsafe, itsdangerous, idna, greenlet, google-crc32c, click, charset_normalizer, certifi, blinker, bcrypt, Werkzeug, SQLAlchemy, rsa, requests, python-dateutil, pyasn1-modules, proto-plus, Mako, jinja2, gunicorn, googleapis-common-protos, google-resumable-media, cffi, pykwalify, google-auth, Flask, cryptography, alembic, google-api-core, Flask-Testing, Flask-SQLAlchemy, google-cloud-core, Flask-Migrate, google-cloud-storage Successfully installed Flask-3.1.1 Flask-Migrate-4.0.7 Flask-SQLAlchemy-3.0.5 Flask-Testing-0.8.1 Mako-1.3.10 PyJWT-2.10.1 PyMySQL-1.1.2 PyYAML-6.0.1 SQLAlchemy-1.4.54 Werkzeug-3.1.5 alembic-1.18.0 bcrypt-5.0.0 blinker-1.9.0 certifi-2026.1.4 cffi-2.0.0 charset_normalizer-3.4.4 click-8.3.1 cryptography-44.0.1 dataclasses-0.6 docopt-0.6.2 google-api-core-2.29.0 google-auth-2.47.0 google-cloud-core-2.5.0 google-cloud-storage-2.10.0 google-crc32c-1.8.0 google-resumable-media-2.8.0 googleapis-common-protos-1.72.0 greenlet-3.3.0 gunicorn-23.0.0 idna-3.11 itsdangerous-2.2.0 jinja2-3.1.6 json-logging-1.5.1 markupsafe-3.0.3 packaging-25.0 proto-plus-1.27.0 protobuf-6.33.4 pyasn1-0.6.1 pyasn1-modules-0.4.2 pycparser-2.23 pykwalify-1.8.0 python-dateutil-2.8.2 pytz-2023.3 requests-2.32.5 rsa-4.9.1 ruamel.yaml-0.19.1 six-1.17.0 typing-extensions-4.15.0 urllib3-2.6.3 wheel-0.41.2 + /tmp/tmp.OGNanl/bin/pip3 install 'junitxml==0.7' 'python-subunit==1.3.0' Collecting junitxml==0.7 Downloading junitxml-0.7.tar.gz (26 kB) Installing build dependencies: started Installing build dependencies: finished with status 'done' Getting requirements to build wheel: started Getting requirements to build wheel: finished with status 'done' Preparing metadata (pyproject.toml): started Preparing metadata (pyproject.toml): finished with status 'done' Collecting python-subunit==1.3.0 Downloading python_subunit-1.3.0-py2.py3-none-any.whl.metadata (21 kB) Collecting extras (from python-subunit==1.3.0) Downloading extras-1.0.0-py2.py3-none-any.whl.metadata (1.7 kB) Collecting testtools>=0.9.34 (from python-subunit==1.3.0) Downloading testtools-2.8.2-py3-none-any.whl.metadata (5.2 kB) Downloading python_subunit-1.3.0-py2.py3-none-any.whl (104 kB) Downloading testtools-2.8.2-py3-none-any.whl (96 kB) Downloading extras-1.0.0-py2.py3-none-any.whl (7.3 kB) Building wheels for collected packages: junitxml Building wheel for junitxml (pyproject.toml): started Building wheel for junitxml (pyproject.toml): finished with status 'done' Created wheel for junitxml: filename=junitxml-0.7-py3-none-any.whl size=16364 sha256=ca79b7500f5e3361708cc8b7570d40cd3fbb5c1126cf2fd871cb67b493aef627 Stored in directory: /root/.cache/pip/wheels/8a/7a/9b/f1dac57e815dbc28e3889797e53848042661a1143aa45f127f Successfully built junitxml Installing collected packages: junitxml, extras, testtools, python-subunit Successfully installed extras-1.0.0 junitxml-0.7 python-subunit-1.3.0 testtools-2.8.2 + set -o pipefail + PYTHONPATH=./ /tmp/tmp.OGNanl/bin/python3 -m subunit.run discover + /tmp/tmp.OGNanl/bin/subunit2junitxml --no-passthrough + tee /archive/junit.xml hint: Using 'master' as the name for the initial branch. This default branch name hint: is subject to change. To configure the initial branch name to use in all hint: of your new repositories, which will suppress this warning, call: hint: hint: git config --global init.defaultBranch hint: hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and hint: 'development'. The just-created branch can be renamed via this command: hint: hint: git branch -m hint: Using 'master' as the name for the initial branch. This default branch name hint: is subject to change. To configure the initial branch name to use in all hint: of your new repositories, which will suppress this warning, call: hint: hint: git config --global init.defaultBranch hint: hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and hint: 'development'. The just-created branch can be renamed via this command: hint: hint: git branch -m Cloning into '/tmp/tmpaaejb4sq/repo-src/submod'... done. hint: Using 'master' as the name for the initial branch. This default branch name hint: is subject to change. To configure the initial branch name to use in all hint: of your new repositories, which will suppress this warning, call: hint: hint: git config --global init.defaultBranch hint: hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and hint: 'development'. The just-created branch can be renamed via this command: hint: hint: git branch -m Cloning into '/tmp/tmpaaejb4sq/nested-par/repo-src'... done. hint: Using 'master' as the name for the initial branch. This default branch name hint: is subject to change. To configure the initial branch name to use in all hint: of your new repositories, which will suppress this warning, call: hint: hint: git config --global init.defaultBranch hint: hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and hint: 'development'. The just-created branch can be renamed via this command: hint: hint: git branch -m hint: Using 'master' as the name for the initial branch. This default branch name hint: is subject to change. To configure the initial branch name to use in all hint: of your new repositories, which will suppress this warning, call: hint: hint: git config --global init.defaultBranch hint: hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and hint: 'development'. The just-created branch can be renamed via this command: hint: hint: git branch -m 2026-01-14 13:53:04.483131: ERROR foo bar == 2026-01-14 13:53:04.483379: test_exec 2026-01-14 13:53:04.483379: ERROR Traceback (most recent call last): | File "/repo/tests/runner/test_logging.py", line 44, in test_exec | raise RuntimeError() |RuntimeError | == 2026-01-14 13:53:04.484001: test_exec_cancelled 2026-01-14 13:53:04.484243: INFO foo bar 2026-01-14 13:53:04.484470: WARN foo bar 2026-01-14 13:53:04,486 DEBUG: Update all existing logger to using JSONLogFormatter {"written_at": "2026-01-14T13:53:04.911Z", "written_ts": 1768398784911696000, "msg": "Run requested a host-tag that is not configured for this project: dont_allow_this", "type": "log", "logger": "root", "thread": "MainThread", "level": "ERROR", "module": "trigger", "line_no": 61, "correlation_id": "596f27b8-f150-11f0-b572-0242ac110002"} {"written_at": "2026-01-14T13:53:05.249Z", "written_ts": 1768398785249349000, "msg": "Unexpected error creating runs for: {'name': 'git', 'type': 'git_poller', 'runs': [{'name': 'run0', 'host-tag': 'foo*', 'container': 'alpine', 'script': 'test'}]}", "type": "log", "logger": "root", "thread": "MainThread", "level": "ERROR", "module": "trigger", "line_no": 72, "exc_info": "Traceback (most recent call last):\n File \"/repo/jobserv/trigger.py\", line 65, in trigger_runs\n storage.set_run_definition(r, rundef)\n File \"/usr/local/lib/python3.11/unittest/mock.py\", line 1124, in __call__\n return self._mock_call(*args, **kwargs)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/usr/local/lib/python3.11/unittest/mock.py\", line 1128, in _mock_call\n return self._execute_mock_call(*args, **kwargs)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/usr/local/lib/python3.11/unittest/mock.py\", line 1183, in _execute_mock_call\n raise effect\nRuntimeError: edge case!!!\n", "filename": "trigger.py", "correlation_id": "59a30bbe-f150-11f0-b572-0242ac110002"} {"written_at": "2026-01-14T13:53:07.311Z", "written_ts": 1768398787311198000, "msg": "Delivered webhook to https://example.com", "type": "log", "logger": "jobserv.flask", "thread": "Thread-1 (deliver)", "level": "INFO", "module": "notify", "line_no": 171, "correlation_id": "5ae4e240-f150-11f0-981b-0242ac110002"} {"written_at": "2026-01-14T13:53:07.627Z", "written_ts": 1768398787627575000, "msg": "Updating the rundef from simple->github_pr", "type": "log", "logger": "root", "thread": "MainThread", "level": "INFO", "module": "trigger", "line_no": 30, "correlation_id": "5b12cb88-f150-11f0-b572-0242ac110002"} {"written_at": "2026-01-14T13:53:07.994Z", "written_ts": 1768398787994346000, "msg": "Updating the rundef from simple->gith_poller", "type": "log", "logger": "root", "thread": "MainThread", "level": "INFO", "module": "trigger", "line_no": 34, "correlation_id": "5b4b3446-f150-11f0-b572-0242ac110002"} {"written_at": "2026-01-14T13:53:08.059Z", "written_ts": 1768398788059804000, "msg": "Caught integrity error and failed run: 1", "type": "log", "logger": "jobserv.flask", "thread": "MainThread", "level": "ERROR", "module": "run", "line_no": 172, "exc_info": "Traceback (most recent call last):\n File \"/repo/jobserv/api/run.py\", line 155, in _handle_triggers\n _create_triggers(\n File \"/repo/jobserv/api/run.py\", line 79, in _create_triggers\n trigger_runs(\n File \"/repo/jobserv/trigger.py\", line 53, in trigger_runs\n raise ValueError('A run named \"%s\" already exists' % name)\nValueError: A run named \"collision-name\" already exists\n", "filename": "run.py", "correlation_id": "5b551c18-f150-11f0-b572-0242ac110002"} {"written_at": "2026-01-14T13:53:08.123Z", "written_ts": 1768398788123007000, "msg": "Updating the rundef from simple->github_pr", "type": "log", "logger": "root", "thread": "MainThread", "level": "INFO", "module": "trigger", "line_no": 30, "correlation_id": "5b5ee1ee-f150-11f0-b572-0242ac110002"} {"written_at": "2026-01-14T13:53:17.025Z", "written_ts": 1768398797025565000, "msg": "Unable to check doesnot matter.git/info/refs?service=git-upload-pack for changes: 500 ", "type": "log", "logger": "root", "thread": "MainThread", "level": "ERROR", "module": "git_poller", "line_no": 168, "correlation_id": "60af3612-f150-11f0-b572-0242ac110002"} {"written_at": "2026-01-14T13:53:17.032Z", "written_ts": 1768398797032976000, "msg": "Adding foo to poller list", "type": "log", "logger": "root", "thread": "MainThread", "level": "INFO", "module": "git_poller", "line_no": 436, "correlation_id": "60b04e26-f150-11f0-b572-0242ac110002"} {"written_at": "2026-01-14T13:53:17.038Z", "written_ts": 1768398797038750000, "msg": "Updating foo", "type": "log", "logger": "root", "thread": "MainThread", "level": "INFO", "module": "git_poller", "line_no": 441, "correlation_id": "60b12f9e-f150-11f0-b572-0242ac110002"} {"written_at": "2026-01-14T13:53:17.040Z", "written_ts": 1768398797040973000, "msg": "Looking for changes to: url1", "type": "log", "logger": "root", "thread": "MainThread", "level": "INFO", "module": "git_poller", "line_no": 187, "correlation_id": "60b18674-f150-11f0-b572-0242ac110002"} {"written_at": "2026-01-14T13:53:17.041Z", "written_ts": 1768398797041267000, "msg": "url1 ref1 change oldsha->sha1", "type": "log", "logger": "root", "thread": "MainThread", "level": "INFO", "module": "git_poller", "line_no": 198, "correlation_id": "60b191d2-f150-11f0-b572-0242ac110002"} {"written_at": "2026-01-14T13:53:17.041Z", "written_ts": 1768398797041899000, "msg": "Looking for changes to: url1", "type": "log", "logger": "root", "thread": "MainThread", "level": "INFO", "module": "git_poller", "line_no": 187, "correlation_id": "60b1aa96-f150-11f0-b572-0242ac110002"} {"written_at": "2026-01-14T13:53:17.042Z", "written_ts": 1768398797042065000, "msg": "First run detected for url1 - ref1", "type": "log", "logger": "root", "thread": "MainThread", "level": "INFO", "module": "git_poller", "line_no": 196, "correlation_id": "60b1b16c-f150-11f0-b572-0242ac110002"} {"written_at": "2026-01-14T13:53:17.042Z", "written_ts": 1768398797042246000, "msg": "Looking for changes to: url1", "type": "log", "logger": "root", "thread": "MainThread", "level": "INFO", "module": "git_poller", "line_no": 187, "correlation_id": "60b1b900-f150-11f0-b572-0242ac110002"} {"written_at": "2026-01-14T13:53:17.042Z", "written_ts": 1768398797042477000, "msg": "First run detected for url1 - ref2", "type": "log", "logger": "root", "thread": "MainThread", "level": "INFO", "module": "git_poller", "line_no": 196, "correlation_id": "60b1c116-f150-11f0-b572-0242ac110002"} {"written_at": "2026-01-14T13:53:17.043Z", "written_ts": 1768398797043238000, "msg": "Trigger build for proj with params: {'GIT_URL': 'fake'}", "type": "log", "logger": "root", "thread": "MainThread", "level": "INFO", "module": "git_poller", "line_no": 353, "correlation_id": "60b1df0c-f150-11f0-b572-0242ac110002"} {"written_at": "2026-01-14T13:53:17.043Z", "written_ts": 1768398797043404000, "msg": "Skipping build for proj because of skip-ci message", "type": "log", "logger": "root", "thread": "MainThread", "level": "INFO", "module": "git_poller", "line_no": 383, "correlation_id": "60b1e560-f150-11f0-b572-0242ac110002"} {"written_at": "2026-01-14T13:53:17.044Z", "written_ts": 1768398797044089000, "msg": "Trigger build for proj with params: {'GIT_URL': 'https://github.com'}", "type": "log", "logger": "root", "thread": "MainThread", "level": "INFO", "module": "git_poller", "line_no": 353, "correlation_id": "60b2002c-f150-11f0-b572-0242ac110002"} {"written_at": "2026-01-14T13:53:17.044Z", "written_ts": 1768398797044297000, "msg": "Skipping build for proj because of skip-ci message", "type": "log", "logger": "root", "thread": "MainThread", "level": "INFO", "module": "git_poller", "line_no": 383, "correlation_id": "60b20950-f150-11f0-b572-0242ac110002"} {"written_at": "2026-01-14T13:53:17.045Z", "written_ts": 1768398797045055000, "msg": "Trigger build for proj with params: {'GIT_URL': 'https://fake.com'}", "type": "log", "logger": "root", "thread": "MainThread", "level": "INFO", "module": "git_poller", "line_no": 353, "correlation_id": "60b225f2-f150-11f0-b572-0242ac110002"} {"written_at": "2026-01-14T13:53:17.045Z", "written_ts": 1768398797045211000, "msg": "Skipping build for proj because of skip-ci message", "type": "log", "logger": "root", "thread": "MainThread", "level": "INFO", "module": "git_poller", "line_no": 383, "correlation_id": "60b22c46-f150-11f0-b572-0242ac110002"} {"written_at": "2026-01-14T13:53:20.468Z", "written_ts": 1768398800468097000, "msg": "validation.invalid", "type": "log", "logger": "pykwalify.core", "thread": "MainThread", "level": "ERROR", "module": "core", "line_no": 190, "correlation_id": "62bc7744-f150-11f0-b572-0242ac110002"} {"written_at": "2026-01-14T13:53:20.468Z", "written_ts": 1768398800468246000, "msg": " --- All found errors ---", "type": "log", "logger": "pykwalify.core", "thread": "MainThread", "level": "ERROR", "module": "core", "line_no": 191, "correlation_id": "62bc7744-f150-11f0-b572-0242ac110002"} {"written_at": "2026-01-14T13:53:20.468Z", "written_ts": 1768398800468349000, "msg": "[\"Cannot find required key 'timeout'. Path: ''\"]", "type": "log", "logger": "pykwalify.core", "thread": "MainThread", "level": "ERROR", "module": "core", "line_no": 192, "correlation_id": "62bc7744-f150-11f0-b572-0242ac110002"} {"written_at": "2026-01-14T13:53:20.759Z", "written_ts": 1768398800759997000, "msg": "Failing cancelled run: proj1/1/bla", "type": "log", "logger": "root", "thread": "MainThread", "level": "ERROR", "module": "worker", "line_no": 235, "correlation_id": "62e90192-f150-11f0-b572-0242ac110002"} {"written_at": "2026-01-14T13:53:21.045Z", "written_ts": 1768398801045121000, "msg": "marking w1 offline 81s without a check-in", "type": "log", "logger": "root", "thread": "MainThread", "level": "INFO", "module": "worker", "line_no": 46, "correlation_id": "6314833a-f150-11f0-b572-0242ac110002"} {"written_at": "2026-01-14T13:53:21.329Z", "written_ts": 1768398801329825000, "msg": "marking w1 offline (no pings log)", "type": "log", "logger": "root", "thread": "MainThread", "level": "INFO", "module": "worker", "line_no": 75, "correlation_id": "633ff466-f150-11f0-b572-0242ac110002"} {"written_at": "2026-01-14T13:53:21.619Z", "written_ts": 1768398801619184000, "msg": "rotating pings log to: /tmp/tmpxwa5vq6p/w1/pings.log.1768398801", "type": "log", "logger": "root", "thread": "MainThread", "level": "INFO", "module": "worker", "line_no": 57, "correlation_id": "636c1b90-f150-11f0-b572-0242ac110002"} {"written_at": "2026-01-14T13:53:21.917Z", "written_ts": 1768398801917613000, "msg": "Run has not been acked by worker: 1 ", "type": "log", "logger": "root", "thread": "MainThread", "level": "ERROR", "module": "worker", "line_no": 269, "correlation_id": "6399a560-f150-11f0-b572-0242ac110002"} {"written_at": "2026-01-14T13:53:22.212Z", "written_ts": 1768398802212919000, "msg": "Found stuck run proj1/1/bla on worker None", "type": "log", "logger": "root", "thread": "MainThread", "level": "ERROR", "module": "worker", "line_no": 212, "correlation_id": "63c6b442-f150-11f0-b572-0242ac110002"} {"written_at": "2026-01-14T13:53:22.216Z", "written_ts": 1768398802216452000, "msg": "Found stuck run proj1/1/bla on worker None", "type": "log", "logger": "root", "thread": "MainThread", "level": "ERROR", "module": "worker", "line_no": 212, "correlation_id": "63c6b442-f150-11f0-b572-0242ac110002"} {"written_at": "2026-01-14T13:53:22.992Z", "written_ts": 1768398802992065000, "msg": "Entering surge support for armhf: count=1", "type": "log", "logger": "root", "thread": "MainThread", "level": "INFO", "module": "worker", "line_no": 170, "correlation_id": "643d97ce-f150-11f0-b572-0242ac110002"} {"written_at": "2026-01-14T13:53:22.998Z", "written_ts": 1768398802998573000, "msg": "Exiting surge support for armhf", "type": "log", "logger": "root", "thread": "MainThread", "level": "INFO", "module": "worker", "line_no": 158, "correlation_id": "643d97ce-f150-11f0-b572-0242ac110002"} {"written_at": "2026-01-14T13:53:22.998Z", "written_ts": 1768398802998811000, "msg": "Entering surge support for amd64: count=2", "type": "log", "logger": "root", "thread": "MainThread", "level": "INFO", "module": "worker", "line_no": 170, "correlation_id": "643d97ce-f150-11f0-b572-0242ac110002"} {"written_at": "2026-01-14T13:53:23.000Z", "written_ts": 1768398803000640000, "msg": "Entering surge support for armhf: count=3", "type": "log", "logger": "root", "thread": "MainThread", "level": "INFO", "module": "worker", "line_no": 170, "correlation_id": "643d97ce-f150-11f0-b572-0242ac110002"} {"written_at": "2026-01-14T13:53:23.291Z", "written_ts": 1768398803291403000, "msg": "Entering surge support for amd64: count=1", "type": "log", "logger": "root", "thread": "MainThread", "level": "INFO", "module": "worker", "line_no": 170, "correlation_id": "646b4494-f150-11f0-b572-0242ac110002"} {"written_at": "2026-01-14T13:53:23.295Z", "written_ts": 1768398803295587000, "msg": "Exiting surge support for amd64", "type": "log", "logger": "root", "thread": "MainThread", "level": "INFO", "module": "worker", "line_no": 158, "correlation_id": "646b4494-f150-11f0-b572-0242ac110002"} {"written_at": "2026-01-14T13:53:23.582Z", "written_ts": 1768398803582515000, "msg": "truncating the pings log", "type": "log", "logger": "root", "thread": "MainThread", "level": "INFO", "module": "worker", "line_no": 60, "correlation_id": "6497b04c-f150-11f0-b572-0242ac110002"} {"written_at": "2026-01-14T13:53:23.593Z", "written_ts": 1768398803593703000, "msg": "Unable to read: bad: Unable to load PEM file. See https://cryptography.io/en/latest/faq/#why-can-t-i-import-my-pem-file for more details. MalformedFraming", "type": "log", "logger": "root", "thread": "MainThread", "level": "ERROR", "module": "worker_jwt", "line_no": 44, "correlation_id": "649964b4-f150-11f0-b572-0242ac110002"} Docker not available Docker not available Test requires MySQL Test requires MySQL Test requires MySQL Test requires MySQL Test requires MySQL Test requires MySQL + '[' -z ] + rm -rf /tmp/tmp.OGNanl Script completed == 2026-01-14 13:53:26.677090: Finding artifacts to upload Uploading 1 items 20583 bytes == 2026-01-14 13:53:27.312021: Analyzing junit results(/srv/gavelci-worker/runs/tmp8mmfm8cw/archive/junit.xml) == 2026-01-14 13:53:27.885794: Runner has completed _ _ | \/ | \__|____|__/ | o o| Thumbs Up |___\/_|_____||_ | _____|__| | | |______| | | | | | | | | |_| |_|