From 6b3cf612142934d3b529dc0176bfc0f186418377070ecffcd40f701e624d7de6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adrian=20Schr=C3=B6ter?= Date: Fri, 3 May 2024 23:30:16 +0200 Subject: [PATCH] Sync from SUSE:SLFO:Main python-websocket-client revision dc9454bfb615365275e87e74238b8796 --- .gitattributes | 23 ++ python-websocket-client.changes | 467 ++++++++++++++++++++++++++++++++ python-websocket-client.spec | 88 ++++++ websocket-client-1.5.1.tar.gz | 3 + 4 files changed, 581 insertions(+) create mode 100644 .gitattributes create mode 100644 python-websocket-client.changes create mode 100644 python-websocket-client.spec create mode 100644 websocket-client-1.5.1.tar.gz diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..9b03811 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,23 @@ +## Default LFS +*.7z filter=lfs diff=lfs merge=lfs -text +*.bsp filter=lfs diff=lfs merge=lfs -text +*.bz2 filter=lfs diff=lfs merge=lfs -text +*.gem filter=lfs diff=lfs merge=lfs -text +*.gz filter=lfs diff=lfs merge=lfs -text +*.jar filter=lfs diff=lfs merge=lfs -text +*.lz filter=lfs diff=lfs merge=lfs -text +*.lzma filter=lfs diff=lfs merge=lfs -text +*.obscpio filter=lfs diff=lfs merge=lfs -text +*.oxt filter=lfs diff=lfs merge=lfs -text +*.pdf filter=lfs diff=lfs merge=lfs -text +*.png filter=lfs diff=lfs merge=lfs -text +*.rpm filter=lfs diff=lfs merge=lfs -text +*.tbz filter=lfs diff=lfs merge=lfs -text +*.tbz2 filter=lfs diff=lfs merge=lfs -text +*.tgz filter=lfs diff=lfs merge=lfs -text +*.ttf filter=lfs diff=lfs merge=lfs -text +*.txz filter=lfs diff=lfs merge=lfs -text +*.whl filter=lfs diff=lfs merge=lfs -text +*.xz filter=lfs diff=lfs merge=lfs -text +*.zip filter=lfs diff=lfs merge=lfs -text +*.zst filter=lfs diff=lfs merge=lfs -text diff --git a/python-websocket-client.changes b/python-websocket-client.changes new file mode 100644 index 0000000..2b5fbff --- /dev/null +++ b/python-websocket-client.changes @@ -0,0 +1,467 @@ +------------------------------------------------------------------- +Wed May 10 07:00:29 UTC 2023 - Dirk Müller + +- update to 1.5.1: + * Fix logic bug that can cause disconnects + * Refactor and improve ping/pong logic to resolve several + issues, including an infinite loop issue during reconnect + * Fix issue where `skip_utf8_validation = True` is ignored + * Fix issue where sslopt `is_ssl` is ignored + * Downgrade "websocket connected" message from logging.warning + to logging.info + +------------------------------------------------------------------- +Fri Apr 21 12:38:47 UTC 2023 - Dirk Müller + +- add sle15_python_module_pythons (jsc#PED-68) + +------------------------------------------------------------------- +Thu Apr 13 22:45:54 UTC 2023 - Matej Cepl + +- Make calling of %{sle15modernpython} optional. + +------------------------------------------------------------------- +Mon Nov 14 13:25:02 UTC 2022 - pgajdos@suse.com + +- python-six is not required + +------------------------------------------------------------------- +Wed Nov 9 19:43:22 UTC 2022 - Yogalakshmi Arunachalam + +- Update to version 1.4.2 + - create_dispatcher is determined by URL ws/wss, NOT by presence of sslopt args, to maintain consistency (#875) + - Remove redundant key generation line (#864) + - Updated docs to fix old links and updated CI to include Python 3.11 + +------------------------------------------------------------------- +Tue Oct 11 17:11:02 UTC 2022 - Yogalakshmi Arunachalam + +- Update to version 1.4.1 + - Fix stack growth bug when `run_forever` reconnects (#854) + - Add doctest CI for sphinx docs code examples (d150099) + - General docs improvements + +------------------------------------------------------------------- +Tue Apr 12 13:43:50 UTC 2022 - John Paul Adrian Glaubitz + +- Update to version 1.3.2 + * Add support for pre-initialized stream socket in new WebSocketApp (#804) + * Remove rel.saferead() in examples (f0bf03d) + * Increase scope of linting checks (dca4022) + * Start adding type hints (a8a4099) +- from version 1.3.1 + * Fix 10 year old bug and improve dispatcher handling + for run_forever (#795) + * Fix run_forever to never return None, only + return True or False, and add two tests (#788) + * Remove Python 3.6 support, EOL in Dec 2021 +- from version 1.3.0 + * BREAKING: Set Origin header to use https:// scheme + when wss:// WebSocket URL is passed (#787) + * Replace deprecated/broken WebSocket URLs with working ones (6ad5197) + * Add documentation referencing rel for automatic + reconnection with run_forever() + * Add missing opcodes 1012, 1013 (#771) + * Add errno.ENETUNREACH to improve error handling (da1b050) + * Minor documentation improvements and typo fixes +- from version 1.2.3 + * Fix broken run_forever() functionality (#769) +- from version 1.2.2 + * Migrate wsdump script in setup.py from scripts to newer entry_points (#763) + * Add support for ssl.SSLContext for arbitrary SSL parameters (#762) + * Remove keep_running variable (#752) + * Remove HAVE_CONTEXT_CHECK_HOSTNAME variable (dac1692) + * Replace deprecated ssl.PROTOCOL_TLS with ssl.PROTOCOL_TLS_CLIENT (#760) + * Simplify code and improve Python 3 support (#751, #750, #746) + * Fill default license template fields (#748) + * Update CI tests + * Improve documentation (#732, #733, #734, #737, #766, #768) +- from version 1.2.1 + * Fix python-socks dependency issue mentioned in #728 + * Replace echo.websocket.org with a local websockets + echo server for unit tests (4951de2) +- from version 1.2.0 + * Fix #697, #665: Transition from LGPL 2.1 license to Apache 2.0 license + * Revert #417 and reimplement SOCKS proxy support with + python-socks instead of PySocks (fbcbd43) +- from version 1.1.1 + * Fix #377: increase exception verbosity in _app.py callback exception + * Fix #717: race condition during connection close + * Fix #722: improve handling where credentials include symbols like @ + * Fix #711: improve handling if ssl is None +- from version 1.1.0 + * Set enable_multithread to True by default (beb135a) + * Performance improvement in _mask() function (287970e, #433) + * Performance improvement in recv_strict() function (60e4711, #255) + * Performance improvement by removing numpy-related code (a462d45) + * Support uppercase no_proxy, http_proxy, https_proxy env vars (150df4f, #700) + * Add sslopt 'server_hostname' support (#698) + * Replace deprecated ssl.PROTOCOL_SSLv23 with ssl.PROTOCOL_TLS (494564f) + * Update documentation, README (7c9d604, #704) +- from version 1.0.1 + * Fix exception handling bug #694 +- from version 1.0.0 + * Removed Python 2 code, now only Python 3 compatible (d45343b, b7c5733, ff67af8) + * Use semver for release versions, unlike breaking release 0.58.0 (#669) + * Enhance enableTrace output (13e83b4) + * Improve unit tests to over 80% code coverage (1679ab0, a00dd2d, etc.) + * Fix old _app.py close status code bug (resulted in on_close() requiring 3 args) (#686) + * Replace select import with selectors (#568) +- from version 0.59.0 + * Last main release to support Python 2 + * Fix Python 2 urlparse scheme (#332) + * Add support for headers with multiple values (#627) + * Add debug support for reserved custom status codes (#639) + * Allow multiple Set-Cookie: headers (#649) + * Simplified cookie sorting (#662) + * Add no_proxy support (#671) + * Add Host header to HTTP proxy request (#677) + * Improve PEP8 style compliance (dc3f5c4) +- Drop support for Python2 which was removed upstream +- Rename README.rst to README.md in %files section + +------------------------------------------------------------------- +Tue Aug 24 08:34:34 UTC 2021 - Stefan Schubert + +- Use libalternatives instead of update-alternatives. + +------------------------------------------------------------------- +Thu Apr 29 19:50:49 UTC 2021 - Sebastian Wagner + +- remove RHEL 7 compatibility from specfile +- update to version 0.58.0: + - fix callback + - Capitalize default connection header + - Fix None.lower() when sec-websocket-protocol response header does notexist + - Fix for #516 + - Tweak Python 3.4 build settings + - fix callback + - Fix None.lower() when sec-websocket-protocol response header doesn't exist + - Create README.md and fix minor typo (both from existing pull requests) + - Fix _handshake.py error where subproto is None + - fix documentation: create_connection, settimeout + - Capitalize default connection header + - Edit README.md for clarification and to add missing material from parent repo + - Fix minor typo - getdefauttimeout to getdefaulttimeout + - Remove README text copied from fork that is not applicable + - Add support for Python 3.8 and 3.9 (#596) + - Fix a few minor typo/misspellings (#659) + - Add pip command to README for 2nd dependency + - Improve README code example formatting + - Use thread.is_alive() to replace deprecated thread.isAlive() (#594) + - Add first draft of Sphinx documentation + - Edit README.md to include docs links and badges + - Replace README.md FAQ with link to documentation FAQ page + - Add acknowledgements section to README.md + - Add detail to Autobahn testing README (still needs improvement) + - Add autobahn test report and additional test instructions + - Add sample connection code to example docs page + - Fixes #631 + - Improve documentation, mostly new examples but some code comment upgrades + - Add suppress origin example to documentation + - Add FAQ advice to ping server + - 'ping_interval' should be less than 'ping_timeout' (#611) + - Allow optional, not mandatory, argument for pong() in WebSocket + - Add basic ping/pong and HTTP proxy documentation and examples + - Properly revert _app.py callback to state before PR #442 (previously only partially reverted) + - Add timeout examples to documentation + - Edit documentation to clarify timeout can be int or float (#654) + - Reshuffle and enhance documentation + - Fix #526 by reverting invalid BSD license migration in commit e94ed9e to return to LGPL2.1 + - Fix #526 by reverting invalid BSD license migration in commit e94ed9e to return to LGPL2.1 + - Fix #546 by removing comments introduced by PR #513 + - Update contribution guidelines + - Revert PR #611 + - Replace deprecated assertEquals() with assertEqual() + - The plural 'assertEquals()' is deprecated in Python 3 and triggers a warning + - during CI: + - https://docs.python.org/3/library/unittest.html#deprecated-aliases + +------------------------------------------------------------------- +Thu Mar 12 07:49:24 UTC 2020 - Tomáš Chvátal + +- Fix build without python2 + +------------------------------------------------------------------- +Thu Feb 6 13:48:44 UTC 2020 - Marketa Calabkova + +- update to 0.57.0 + * wsdump: Fix --headers option + * Fix getting 400 bad request with long proxy authorization string + * Create dummy `ssl` object + * Show compressed text messages in wsdump.py + * Expose http connection header to user + * fix the compatible issue with gevent+dnspython + * _handshake: hasattr checks on six before accessing the values + +------------------------------------------------------------------- +Tue Apr 16 11:14:09 UTC 2019 - Tomáš Chvátal + +- Update to 0.56.0: + * Don't retry sockets with timeout set to 0(#536) + * Add response headers in WebSocketBadStatusException (#501) + * Manually assigning WebSocket-Version (#506) + * SSL socket handling fix (#474) + * Let setup.py use the same license as LICENSE file (#517) + * Ensure that "timeout" is passed down, when calling WebSocket.connect() (#513) + * Retry connect on "Interrupted system call" (#528) + +------------------------------------------------------------------- +Wed Mar 6 19:47:18 UTC 2019 - Tomáš Chvátal + +- Update to 0.54.0: + * many fixes all around, see ChangeLog file +- Drop merged use_system_cabundle.patch + +------------------------------------------------------------------- +Tue Dec 4 12:55:59 UTC 2018 - Matej Cepl + +- Remove superfluous devel dependency for noarch package + +------------------------------------------------------------------- +Thu Jan 18 09:55:12 UTC 2018 - sebix+novell.com@sebix.at + +- update to version 0.46.0 (shortened): + - fixed invalid character (#379) +- update to version 0.45.0 (shortened): + - change license to LGP v2.1 + - allow reuse of WebsocketApp.run_forever (#365) + - Parse close frame response correctly when reason present (#354) + - Wrap socket.gaierror with subclass of WebsocketException (#352) + - Resolve a proxy issue and a connection error (#345) + - Allow empty Host header value (#369) + - Fix undefined variable (#347) + - fix: getting a value with the key 'ca_certs' in sslopt dict (#326) +- Add use_system_cabundle.patch to use systems ca bundle file by default (bnc#1076519) + +------------------------------------------------------------------- +Tue Sep 5 07:57:36 UTC 2017 - dmueller@suse.com + +- properly provide/obsolete python3-websocket-client-test + +------------------------------------------------------------------- +Mon Aug 28 16:25:44 UTC 2017 - tbechtold@suse.com + +- Fix build for Leap 42.3 + +------------------------------------------------------------------- +Tue Aug 15 15:10:45 UTC 2017 - toddrme2178@gmail.com + +- Update license to LGPL 3 +- Fix rpmlint issues + +------------------------------------------------------------------- +Mon Jul 24 23:55:01 UTC 2017 - jengelh@inai.de + +- Grammatical/Typographic corrections to the description. + +------------------------------------------------------------------- +Fri Jul 21 17:46:23 UTC 2017 - toddrme2178@gmail.com + +- Fix singlespec macro usage +- Fix source URL. + +------------------------------------------------------------------- +Wed Jul 5 05:10:45 UTC 2017 - tbechtold@suse.com + +- update to 0.44.0: + -renames key in sslopt dict (#326) + - Unkown kwarg 'ca_cert' when calling ssl wrap_socket() (#326) + - Race condition in WebSocket ping/pong (#327) + - Implement simple cookie jar(#292) + - fix: when using pppoe redial will block.(#301) + - Fix insecure_pythons list in setup.py(#304) + - Support WEBSOCKET_CLIENT_CA_BUNDLE being directory(#307) + - WebSocketPayloadException under high traffic and limited network connection(#306) + - Not working --nocert parameter in wsdump.py(#315) + - Avoid the app to block on close on certain systems (#320) + - Fix warning is not defined. (#323) + - move to repository to https://github.com/websocket-client/websocket-client.git + - _send_ping warning fails due to missing reference in _logging.__all__ (#294) + - Fix opcode -> op_code (#286) + - Shuffled around example code (#256) + - _send_ping graceful error handling (#262) + - Allow closing WebSocketApp with status/reason/timeout (#265) + - Support universal wheels (#267) + - _url: Added subnet IP address matching in no_proxy host detection (#270) + - fixed Incorrect encoding in continued messages python3 (#261) + - Pass headers for websocket handshake (#271) + - setup.py: Import `logging` before calling it. (#272) + - Implemented close code 1014 (#273) + - Support CA bundle specified by environment variable (#279) + - Response header values should not be converted to lower case (#264) + - Exclude port 443 from host http header (#248) + - Cleanup code (#249) + - Modify a code block directive in README (#250) + - fixed ping/pong timeouet (#253) +- convert to singlespec +- merge -test package + +------------------------------------------------------------------- +Tue Nov 15 13:11:34 UTC 2016 - dmueller@suse.com + +- update to 0.37.0: + - fixed fialer that `websocket.create_connection` does not accept `origin` as a parameter (#246 ) + - added support for using custom connection class (#235) + - use Named logger (#238) + - implement ping/pong timeout (#241) + - Corrects the syntax highlight code (#243) + - fixed failure to join thread before it is started (#242) + - Prints timings in console (#217) + - use inspect.getfullargspec with Python 3.x (#219) + - Check that exception message is actually a string before trying for substring check (#224) + - Use pre-initialized stream socket (#226) + - fixed TypeError: cafile, capath and cadata cannot be all omitted (#227) + - Change import style (#203) + - fix attribute error on the older python. (#215) + - fixed timeout+ssl error handling bug on python 2.7.10 (#190) + - add proxy support to wsdump.py (#194) + - use wsaccel if available (#193) + - add support for ssl cert chains to support client certs (#195) + - fix string formatting in exception (#196) + - fix typo in README.rst (#197) + - introduce on_data callback to pass data type. (#198) + - WebSocketBadStatusException for Handshake error (#199) + - set close timeout (#192) + - Map dict to headers list (#204) + - support client certification (#207) + - security improvement during handshake (#211) + - improve logging of error from callback (#212) + +------------------------------------------------------------------- +Tue Apr 12 07:57:30 UTC 2016 - andrea@opensuse.org + +- added update-alternatives to allow the python3 version to be installed + +------------------------------------------------------------------- +Wed Oct 21 16:56:55 UTC 2015 - dmueller@suse.com + +- update to 0.32.0 (bsc#954486): + - fix http proxy bug (#189) + - Avoid deprecated BaseException.message (#180) + - Add travis builds (#182) + - fixed wsdump to work with piped input (#183) + - fixed output of wsdump.py with python3 (#185) + - add raw mode to wsdump.py (#186) + +------------------------------------------------------------------- +Fri Jul 24 08:12:07 UTC 2015 - seife+obs@b1-systems.com + +- fix dependencies for RHEL/CentOS 7: they provide their own + python-backports-ssl_match_hostname + +------------------------------------------------------------------- +Thu May 14 13:30:06 UTC 2015 - benoit.monin@gmx.fr + +- update to version 0.30.0: + * fixed if client is behind proxy (#169) + * support SNI for python 2.7.9+ and 3.2+ (#172) + * update Host HTTP header by user. (#171) + * fix typo for isEnabledFor (#173) + * can set verify_mode to CERT_NONE when check_hostname is + enabled.(#175) + * make websockets iterable (#178) +- additional changes from version 0.29.0 + * fixed ssl socket bug +- additional changes from version 0.28.0 + * Fix erroneous argument shadowing(#168) +- additional changes from version 0.27.0 + * remove unittest2 requirements for python 2.6 (#156) + * fixed subprotocol case during header validation (#158) + * get response status and headers (#160) + * fix out-of-memory due to fragmentation when recieving a very + large frame(#163) + * fix error if the payload data is nothing.(#166) + * refactoring. +- additional changes from version 0.26.0 + * all WebSocketException provide message string (#152) + * fixed tests fail when not connected to the network (#155) + * Add command line options and handle closed socket to wsdump.py + (#153) +- additional changes from version 0.25.0 + * fixed for Python 2.6(#151) +- additional changes from version 0.24.0 + * Supporting http-basic auth in WebSocketApp (#143) + * fix failer of test.testInternalRecvStrict(#141) + * skip utf8 validation by skip_utf8_validation argument (#137) + * WebsocketProxyException will be raised if we got error about + proxy.(#138) +- drop fixTestTimeoutIssue.patch: fixed upstream +- point the source URL to pypi +- add new dependency python-backports.ssl_match_hostname +- fix archive name when calling %setup + +------------------------------------------------------------------- +Wed Feb 11 15:57:53 UTC 2015 - rjschwei@suse.com + +- Update fixTestTimeoutIssue.patch to handle different behavior between + python 2.7.x versions + +------------------------------------------------------------------- +Tue Feb 10 13:20:34 UTC 2015 - rjschwei@suse.com + +- Add fixTestTimeoutIssue.patch + + fixes test case in factory + +------------------------------------------------------------------- +Sun Feb 8 13:24:49 UTC 2015 - rjschwei@suse.com + +- Update to version 0.23.0 + - Remove spurious print statement. (#135) + - Fix not thread-safe of Websocket.close() (#120) + - Try to get proxy info from environment if not explicitly provided (#124) + - support proxy basic authenticaiton. (#125) + - Fix NoneType exception at WebsocketApp.send (#126) + - not use proxy for localhost (#132) + - Check for socket before attempting to close (#115) + - Enable turning off SSL verification in wsdump.py(#116) + - Enable to set subprotocol(#118) + - Better support for Autobahn test suite (http://autobahn.ws/testsuite) (#117) - suppress close event message(#107) + - detect socket connection state(#109) + - support for code and reason in on_close callback(#111) + - continuation frame handling seems suspicious(#113) + +------------------------------------------------------------------- +Thu Oct 2 15:56:51 UTC 2014 - toddrme2178@gmail.com + +- Update to version 0.18.0 + - allow override of match_hostname usage on ssl (#105) +- Update to version 0.17.0 + - can't set timeout on a standing websocket connection (#102) + - fixed local variable 'error' referenced before assignment (#102, #98) +- Update to version 0.16.0 + - lock some method for multithread. (#92) + - disable cert verification. (#89) +- Remove upstreamed webSoc_useSystemCert.patch + +------------------------------------------------------------------- +Mon Jun 23 22:01:20 UTC 2014 - rschweikert@suse.com + +- Simplify conditionals in spec file +- Fix patch webSoc_useSystemCert.patch, eliminate tab use spaces + +------------------------------------------------------------------- +Mon Jun 16 21:21:11 UTC 2014 - rschweikert@suse.com + +- Clean up spec file + +------------------------------------------------------------------- +Sat Jun 7 10:21:38 UTC 2014 - rschweikert@suse.com + +- Add Group to sub package, fixes build for SLE 11 + +------------------------------------------------------------------- +Fri Jun 6 11:58:30 UTC 2014 - rschweikert@suse.com + +- Include in SLE 12 (FATE #316168) + +------------------------------------------------------------------- +Thu Jun 5 16:07:15 UTC 2014 - rschweikert@suse.com + +- Fix upstream URL, point to github (development) rather than pypy + +------------------------------------------------------------------- +Thu Jun 5 15:34:01 UTC 2014 - rschweikert@suse.com + +- Initial build + diff --git a/python-websocket-client.spec b/python-websocket-client.spec new file mode 100644 index 0000000..16c3965 --- /dev/null +++ b/python-websocket-client.spec @@ -0,0 +1,88 @@ +# +# spec file for package python-websocket-client +# +# Copyright (c) 2023 SUSE LLC +# +# All modifications and additions to the file contributed by third parties +# remain the property of their copyright owners, unless otherwise agreed +# upon. The license for this file, and modifications and additions to the +# file, is the same license as for the pristine package itself (unless the +# license for the pristine package is not an Open Source License, in which +# case the license is the MIT License). An "Open Source License" is a +# license that conforms to the Open Source Definition (Version 1.9) +# published by the Open Source Initiative. + +# Please submit bugfixes or comments via https://bugs.opensuse.org/ +# + + +%if 0%{?suse_version} > 1500 +%bcond_without libalternatives +%else +%bcond_with libalternatives +%endif + +%{?sle15_python_module_pythons} +Name: python-websocket-client +Version: 1.5.1 +Release: 0 +Summary: WebSocket client implementation +License: LGPL-2.1-only +URL: https://github.com/liris/websocket-client/releases +Source0: https://files.pythonhosted.org/packages/source/w/websocket_client/websocket-client-%{version}.tar.gz +BuildRequires: %{python_module Sphinx >= 3.4} +BuildRequires: %{python_module setuptools} +BuildRequires: %{python_module sphinx_rtd_theme >= 0.5} +BuildRequires: %{python_module websockets} +BuildRequires: fdupes +BuildRequires: python-rpm-macros +%if %{with libalternatives} +Requires: alts +BuildRequires: alts +%else +Requires(post): update-alternatives +Requires(postun):update-alternatives +%endif +Provides: python-websocket-client-test = %{version} +Obsoletes: python-websocket-client-test < %{version} +BuildArch: noarch +%python_subpackages + +%description +The websocket-client module is a WebSocket client for Python. This provides the +low-level APIs for WebSocket. All APIs are synchronous functions. + +Websocket-client supports only hybi-13. + +%prep +%setup -q -n websocket-client-%{version} + +%build +%python_build + +%install +%python_install +%python_expand %fdupes %{buildroot}/%{$python_sitelib} +%python_clone -a %{buildroot}%{_bindir}/wsdump + +%check +%pyunittest discover -v + +%pre +# If libalternatives is used: Removing old update-alternatives entries. +%python_libalternatives_reset_alternative wsdump + +%post +%python_install_alternative wsdump + +%postun +%python_uninstall_alternative wsdump + +%files %{python_files} +%license LICENSE +%doc README.md ChangeLog +%python_alternative %{_bindir}/wsdump +%{python_sitelib}/websocket/ +%{python_sitelib}/websocket_client-%{version}-py*.egg-info + +%changelog diff --git a/websocket-client-1.5.1.tar.gz b/websocket-client-1.5.1.tar.gz new file mode 100644 index 0000000..a4c8ae5 --- /dev/null +++ b/websocket-client-1.5.1.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3f09e6d8230892547132177f575a4e3e73cfdf06526e20cc02aa1c3b47184d40 +size 49942