fastled 1.2.12__tar.gz → 1.2.14__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (82) hide show
  1. {fastled-1.2.12 → fastled-1.2.14}/PKG-INFO +15 -4
  2. {fastled-1.2.12 → fastled-1.2.14}/README.md +12 -1
  3. {fastled-1.2.12 → fastled-1.2.14}/pyproject.toml +2 -2
  4. {fastled-1.2.12 → fastled-1.2.14}/src/fastled/__init__.py +1 -1
  5. {fastled-1.2.12 → fastled-1.2.14}/src/fastled/open_browser.py +36 -8
  6. {fastled-1.2.12 → fastled-1.2.14}/src/fastled/site/build.py +12 -3
  7. {fastled-1.2.12 → fastled-1.2.14}/src/fastled.egg-info/PKG-INFO +15 -4
  8. {fastled-1.2.12 → fastled-1.2.14}/src/fastled.egg-info/SOURCES.txt +1 -0
  9. {fastled-1.2.12 → fastled-1.2.14}/src/fastled.egg-info/requires.txt +1 -1
  10. {fastled-1.2.12 → fastled-1.2.14}/tests/test_api.py +1 -14
  11. fastled-1.2.14/tests/test_http_server.py +49 -0
  12. {fastled-1.2.12 → fastled-1.2.14}/.aiderignore +0 -0
  13. {fastled-1.2.12 → fastled-1.2.14}/.github/workflows/build_multi_docker_image.yml +0 -0
  14. {fastled-1.2.12 → fastled-1.2.14}/.github/workflows/build_webpage.yml +0 -0
  15. {fastled-1.2.12 → fastled-1.2.14}/.github/workflows/lint.yml +0 -0
  16. {fastled-1.2.12 → fastled-1.2.14}/.github/workflows/publish_release.yml +0 -0
  17. {fastled-1.2.12 → fastled-1.2.14}/.github/workflows/test_build_exe.yml +0 -0
  18. {fastled-1.2.12 → fastled-1.2.14}/.github/workflows/test_macos.yml +0 -0
  19. {fastled-1.2.12 → fastled-1.2.14}/.github/workflows/test_ubuntu.yml +0 -0
  20. {fastled-1.2.12 → fastled-1.2.14}/.github/workflows/test_win.yml +0 -0
  21. {fastled-1.2.12 → fastled-1.2.14}/.gitignore +0 -0
  22. {fastled-1.2.12 → fastled-1.2.14}/.pylintrc +0 -0
  23. {fastled-1.2.12 → fastled-1.2.14}/.vscode/launch.json +0 -0
  24. {fastled-1.2.12 → fastled-1.2.14}/.vscode/settings.json +0 -0
  25. {fastled-1.2.12 → fastled-1.2.14}/.vscode/tasks.json +0 -0
  26. {fastled-1.2.12 → fastled-1.2.14}/LICENSE +0 -0
  27. {fastled-1.2.12 → fastled-1.2.14}/MANIFEST.in +0 -0
  28. {fastled-1.2.12 → fastled-1.2.14}/RELEASE.md +0 -0
  29. {fastled-1.2.12 → fastled-1.2.14}/TODO.md +0 -0
  30. {fastled-1.2.12 → fastled-1.2.14}/build_exe.py +0 -0
  31. {fastled-1.2.12 → fastled-1.2.14}/build_site.py +0 -0
  32. {fastled-1.2.12 → fastled-1.2.14}/clean +0 -0
  33. {fastled-1.2.12 → fastled-1.2.14}/install +0 -0
  34. {fastled-1.2.12 → fastled-1.2.14}/lint +0 -0
  35. {fastled-1.2.12 → fastled-1.2.14}/requirements.testing.txt +0 -0
  36. {fastled-1.2.12 → fastled-1.2.14}/setup.cfg +0 -0
  37. {fastled-1.2.12 → fastled-1.2.14}/setup.py +0 -0
  38. {fastled-1.2.12 → fastled-1.2.14}/src/fastled/app.py +0 -0
  39. {fastled-1.2.12 → fastled-1.2.14}/src/fastled/assets/example.txt +0 -0
  40. {fastled-1.2.12 → fastled-1.2.14}/src/fastled/cli.py +0 -0
  41. {fastled-1.2.12 → fastled-1.2.14}/src/fastled/client_server.py +0 -0
  42. {fastled-1.2.12 → fastled-1.2.14}/src/fastled/compile_server.py +0 -0
  43. {fastled-1.2.12 → fastled-1.2.14}/src/fastled/compile_server_impl.py +0 -0
  44. {fastled-1.2.12 → fastled-1.2.14}/src/fastled/docker_manager.py +0 -0
  45. {fastled-1.2.12 → fastled-1.2.14}/src/fastled/filewatcher.py +0 -0
  46. {fastled-1.2.12 → fastled-1.2.14}/src/fastled/keyboard.py +0 -0
  47. {fastled-1.2.12 → fastled-1.2.14}/src/fastled/live_client.py +0 -0
  48. {fastled-1.2.12 → fastled-1.2.14}/src/fastled/parse_args.py +0 -0
  49. {fastled-1.2.12 → fastled-1.2.14}/src/fastled/paths.py +0 -0
  50. {fastled-1.2.12 → fastled-1.2.14}/src/fastled/project_init.py +0 -0
  51. {fastled-1.2.12 → fastled-1.2.14}/src/fastled/select_sketch_directory.py +0 -0
  52. {fastled-1.2.12 → fastled-1.2.14}/src/fastled/settings.py +0 -0
  53. {fastled-1.2.12 → fastled-1.2.14}/src/fastled/sketch.py +0 -0
  54. {fastled-1.2.12 → fastled-1.2.14}/src/fastled/spinner.py +0 -0
  55. {fastled-1.2.12 → fastled-1.2.14}/src/fastled/string_diff.py +0 -0
  56. {fastled-1.2.12 → fastled-1.2.14}/src/fastled/test/can_run_local_docker_tests.py +0 -0
  57. {fastled-1.2.12 → fastled-1.2.14}/src/fastled/test/examples.py +0 -0
  58. {fastled-1.2.12 → fastled-1.2.14}/src/fastled/types.py +0 -0
  59. {fastled-1.2.12 → fastled-1.2.14}/src/fastled/util.py +0 -0
  60. {fastled-1.2.12 → fastled-1.2.14}/src/fastled/web_compile.py +0 -0
  61. {fastled-1.2.12 → fastled-1.2.14}/src/fastled.egg-info/dependency_links.txt +0 -0
  62. {fastled-1.2.12 → fastled-1.2.14}/src/fastled.egg-info/entry_points.txt +0 -0
  63. {fastled-1.2.12 → fastled-1.2.14}/src/fastled.egg-info/top_level.txt +0 -0
  64. {fastled-1.2.12 → fastled-1.2.14}/test +0 -0
  65. {fastled-1.2.12 → fastled-1.2.14}/tests/html/index.html +0 -0
  66. {fastled-1.2.12 → fastled-1.2.14}/tests/test_bad_ino.py +0 -0
  67. {fastled-1.2.12 → fastled-1.2.14}/tests/test_build.py +0 -0
  68. {fastled-1.2.12 → fastled-1.2.14}/tests/test_build_examples.py +0 -0
  69. {fastled-1.2.12 → fastled-1.2.14}/tests/test_cli.py +0 -0
  70. {fastled-1.2.12 → fastled-1.2.14}/tests/test_compile_server.py +0 -0
  71. {fastled-1.2.12 → fastled-1.2.14}/tests/test_docker_linux_on_windows.py +0 -0
  72. {fastled-1.2.12 → fastled-1.2.14}/tests/test_embedded_data.py +0 -0
  73. {fastled-1.2.12 → fastled-1.2.14}/tests/test_examples.py +0 -0
  74. {fastled-1.2.12 → fastled-1.2.14}/tests/test_filechanger.py +0 -0
  75. {fastled-1.2.12 → fastled-1.2.14}/tests/test_ino/bad/bad.ino +0 -0
  76. {fastled-1.2.12 → fastled-1.2.14}/tests/test_ino/embedded/data/bigdata.dat +0 -0
  77. {fastled-1.2.12 → fastled-1.2.14}/tests/test_ino/embedded/wasm.ino +0 -0
  78. {fastled-1.2.12 → fastled-1.2.14}/tests/test_ino/wasm/wasm.ino +0 -0
  79. {fastled-1.2.12 → fastled-1.2.14}/tests/test_project_init.py +0 -0
  80. {fastled-1.2.12 → fastled-1.2.14}/tests/test_server_and_client_seperatly.py +0 -0
  81. {fastled-1.2.12 → fastled-1.2.14}/tests/test_webcompile.py +0 -0
  82. {fastled-1.2.12 → fastled-1.2.14}/upload_package.sh +0 -0
@@ -1,13 +1,13 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: fastled
3
- Version: 1.2.12
3
+ Version: 1.2.14
4
4
  Summary: FastLED Wasm Compiler
5
5
  Home-page: https://github.com/zackees/fastled-wasm
6
6
  Maintainer: Zachary Vorhies
7
7
  License: BSD 3-Clause License
8
8
  Keywords: template-python-cmd
9
9
  Classifier: Programming Language :: Python :: 3
10
- Requires-Python: >=3.9
10
+ Requires-Python: >=3.10
11
11
  Description-Content-Type: text/markdown
12
12
  License-File: LICENSE
13
13
  Requires-Dist: docker>=7.1.0
@@ -19,7 +19,7 @@ Requires-Dist: disklru>=2.0.1
19
19
  Requires-Dist: appdirs>=1.4.4
20
20
  Requires-Dist: rapidfuzz>=3.10.1
21
21
  Requires-Dist: progress>=1.6
22
- Requires-Dist: nodejs-bin[cmd]
22
+ Requires-Dist: static-npm>=1.0.6
23
23
 
24
24
  # FastLED Wasm compiler
25
25
 
@@ -54,6 +54,17 @@ In every conceivable way, the local compiler will be much faster than the web ve
54
54
 
55
55
  https://zackees.github.io/fastled-wasm/
56
56
 
57
+ # Install
58
+
59
+ `pip install fastled`
60
+
61
+ # Run
62
+
63
+ ```bash
64
+ cd mysketchdirectory
65
+ fastled
66
+ ```
67
+
57
68
  # Tutorial video
58
69
 
59
70
  **Note this video is a little outdated, you will install the app now with `pip install fastled` and run it like `fastled mysketchfolder`**
@@ -271,9 +282,9 @@ A: `delay()` will block `loop()` which blocks the main thread of the browser. Th
271
282
  Q: How can I get the compiled size of my FastLED sketch smaller?
272
283
  A: A big chunk of space is being used by unnecessary javascript `emscripten` bundling. The wasm_compiler_settings.py file in the FastLED repo can tweak this.
273
284
 
274
-
275
285
  # Revisions
276
286
 
287
+ * 1.2.13 - More fixes for npm live-server, now uses `static-npm` to launch it.
277
288
  * 1.2.12 - Fixes for python npm for launching live-server
278
289
  * 1.2.10 - `fastled.Test` now allows you to spawn the http webserver on a folder with an index.html in it.
279
290
  * 1.2.7 - A bunch of fixes for MacOS and probably linux.
@@ -31,6 +31,17 @@ In every conceivable way, the local compiler will be much faster than the web ve
31
31
 
32
32
  https://zackees.github.io/fastled-wasm/
33
33
 
34
+ # Install
35
+
36
+ `pip install fastled`
37
+
38
+ # Run
39
+
40
+ ```bash
41
+ cd mysketchdirectory
42
+ fastled
43
+ ```
44
+
34
45
  # Tutorial video
35
46
 
36
47
  **Note this video is a little outdated, you will install the app now with `pip install fastled` and run it like `fastled mysketchfolder`**
@@ -248,9 +259,9 @@ A: `delay()` will block `loop()` which blocks the main thread of the browser. Th
248
259
  Q: How can I get the compiled size of my FastLED sketch smaller?
249
260
  A: A big chunk of space is being used by unnecessary javascript `emscripten` bundling. The wasm_compiler_settings.py file in the FastLED repo can tweak this.
250
261
 
251
-
252
262
  # Revisions
253
263
 
264
+ * 1.2.13 - More fixes for npm live-server, now uses `static-npm` to launch it.
254
265
  * 1.2.12 - Fixes for python npm for launching live-server
255
266
  * 1.2.10 - `fastled.Test` now allows you to spawn the http webserver on a folder with an index.html in it.
256
267
  * 1.2.7 - A bunch of fixes for MacOS and probably linux.
@@ -6,7 +6,7 @@ build-backend = "setuptools.build_meta"
6
6
  name = "fastled"
7
7
  readme = "README.md"
8
8
  description = "FastLED Wasm Compiler"
9
- requires-python = ">=3.9"
9
+ requires-python = ">=3.10"
10
10
  keywords = ["template-python-cmd"]
11
11
  license = { text = "BSD 3-Clause License" }
12
12
  classifiers = ["Programming Language :: Python :: 3"]
@@ -20,7 +20,7 @@ dependencies = [
20
20
  "appdirs>=1.4.4",
21
21
  "rapidfuzz>=3.10.1",
22
22
  "progress>=1.6",
23
- "nodejs-bin[cmd]",
23
+ "static-npm>=1.0.6",
24
24
  ]
25
25
 
26
26
  dynamic = ["version"]
@@ -14,7 +14,7 @@ from .types import BuildMode, CompileResult, CompileServerError
14
14
  # IMPORTANT! There's a bug in github which will REJECT any version update
15
15
  # that has any other change in the repo. Please bump the version as the
16
16
  # ONLY change in a commit, or else the pypi update and the release will fail.
17
- __version__ = "1.2.12"
17
+ __version__ = "1.2.14"
18
18
 
19
19
 
20
20
  class Api:
@@ -1,30 +1,58 @@
1
1
  import shutil
2
2
  import socket
3
3
  import subprocess
4
- import sys
5
4
  from multiprocessing import Process
6
5
  from pathlib import Path
7
6
 
7
+ from static_npm import Npm, Npx
8
+ from static_npm.paths import CACHE_DIR
9
+ from static_npm.running_process import RunningProcess
10
+
8
11
  DEFAULT_PORT = 8081
9
12
 
10
13
 
11
14
  def open_http_server(
12
15
  fastled_js: Path, port: int | None = None, open_browser=True
13
- ) -> subprocess.Popen:
16
+ ) -> subprocess.Popen | RunningProcess:
14
17
  """Start livereload server in the fastled_js directory using API"""
15
18
  cmd_list: list[str]
16
19
  print(f"\nStarting livereload server in {fastled_js}")
17
- if shutil.which("live-server") is None:
18
- print("live-server not found. Installing it with the embedded npm...")
19
- cmd_list = [sys.executable, "-m", "nodejs.npm", "install", "-g", "live-server"]
20
- subprocess.run(cmd_list)
20
+
21
21
  cmd_list = ["live-server"]
22
22
  if port is not None:
23
23
  cmd_list.extend([f"--port={port}"])
24
24
  if not open_browser:
25
25
  cmd_list.append("--no-browser")
26
- # subprocess.run(["cd", str(fastled_js), "&&"] + cmd_list)
27
- return subprocess.Popen(cmd_list, cwd=str(fastled_js), shell=True)
26
+
27
+ live_server_where = shutil.which("live-server")
28
+ if live_server_where is None:
29
+ print("live-server not found. Installing it with the embedded npm...")
30
+ # cmd_list = [sys.executable, "-m", "nodejs.npm", "install", "-g", "live-server"]
31
+ # npm.call("install -g live-server --force --legacy-peer-deps")
32
+ tool_dir = CACHE_DIR / "live-server"
33
+ tool_dir.mkdir(parents=True, exist_ok=True)
34
+ npm = Npm()
35
+ npx = Npx()
36
+ npm.run(["install", "live-server", "--prefix", tool_dir])
37
+ # npm.run(["install", "live-server", "--prefix", str(tool_dir)])
38
+ cmd_str = subprocess.list2cmdline(
39
+ ["npx"] + ["--prefix", str(tool_dir)] + cmd_list
40
+ )
41
+ print(f"Running: {cmd_str}")
42
+ proc = npx.run(["--prefix", str(tool_dir)] + cmd_list, cwd=fastled_js)
43
+ return proc # type ignore
44
+ else:
45
+ # npx.run("live-server", check=False)
46
+ # subprocess.run(cmd_list)
47
+ live_server_where = shutil.which("live-server")
48
+ print(f"Using live-server from {live_server_where}")
49
+ cmd_list = ["live-server"]
50
+ if port is not None:
51
+ cmd_list.extend([f"--port={port}"])
52
+ if not open_browser:
53
+ cmd_list.append("--no-browser")
54
+ # subprocess.run(["cd", str(fastled_js), "&&"] + cmd_list)
55
+ return subprocess.Popen(cmd_list, cwd=str(fastled_js), shell=True)
28
56
 
29
57
 
30
58
  def _open_browser_python(fastled_js: Path) -> None:
@@ -71,7 +71,7 @@ body {
71
71
  position: fixed;
72
72
  left: var(--spacing-md);
73
73
  top: var(--spacing-md);
74
- padding: var(--spacing-sm) var(--spacing-lg);
74
+ padding: 15px 30px;
75
75
  z-index: 1001;
76
76
  background-color: var(--color-surface);
77
77
  border-radius: var(--border-radius);
@@ -80,7 +80,7 @@ body {
80
80
  justify-content: center;
81
81
  cursor: pointer;
82
82
  color: var(--color-text);
83
- font-size: 16px;
83
+ font-size: 24px;
84
84
  transition: background-color var(--transition-speed) ease;
85
85
  }
86
86
 
@@ -88,6 +88,15 @@ body {
88
88
  background-color: var(--color-surface-transparent);
89
89
  }
90
90
 
91
+ .nav-trigger .fa-chevron-down {
92
+ margin-left: 10px;
93
+ transition: transform var(--transition-speed) ease;
94
+ }
95
+
96
+ .nav-pane.visible + .nav-trigger .fa-chevron-down {
97
+ transform: rotate(180deg);
98
+ }
99
+
91
100
  .nav-pane {
92
101
  position: fixed;
93
102
  left: var(--spacing-md);
@@ -176,7 +185,7 @@ INDEX_TEMPLATE = """<!DOCTYPE html>
176
185
  <div class="splash-text">FastLED</div>
177
186
  </div>
178
187
  <div class="content-wrapper">
179
- <div class="nav-trigger">Examples</div>
188
+ <div class="nav-trigger">Examples <i class="fas fa-chevron-down"></i></div>
180
189
  <nav class="nav-pane">
181
190
  {example_links}
182
191
  </nav>
@@ -1,13 +1,13 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: fastled
3
- Version: 1.2.12
3
+ Version: 1.2.14
4
4
  Summary: FastLED Wasm Compiler
5
5
  Home-page: https://github.com/zackees/fastled-wasm
6
6
  Maintainer: Zachary Vorhies
7
7
  License: BSD 3-Clause License
8
8
  Keywords: template-python-cmd
9
9
  Classifier: Programming Language :: Python :: 3
10
- Requires-Python: >=3.9
10
+ Requires-Python: >=3.10
11
11
  Description-Content-Type: text/markdown
12
12
  License-File: LICENSE
13
13
  Requires-Dist: docker>=7.1.0
@@ -19,7 +19,7 @@ Requires-Dist: disklru>=2.0.1
19
19
  Requires-Dist: appdirs>=1.4.4
20
20
  Requires-Dist: rapidfuzz>=3.10.1
21
21
  Requires-Dist: progress>=1.6
22
- Requires-Dist: nodejs-bin[cmd]
22
+ Requires-Dist: static-npm>=1.0.6
23
23
 
24
24
  # FastLED Wasm compiler
25
25
 
@@ -54,6 +54,17 @@ In every conceivable way, the local compiler will be much faster than the web ve
54
54
 
55
55
  https://zackees.github.io/fastled-wasm/
56
56
 
57
+ # Install
58
+
59
+ `pip install fastled`
60
+
61
+ # Run
62
+
63
+ ```bash
64
+ cd mysketchdirectory
65
+ fastled
66
+ ```
67
+
57
68
  # Tutorial video
58
69
 
59
70
  **Note this video is a little outdated, you will install the app now with `pip install fastled` and run it like `fastled mysketchfolder`**
@@ -271,9 +282,9 @@ A: `delay()` will block `loop()` which blocks the main thread of the browser. Th
271
282
  Q: How can I get the compiled size of my FastLED sketch smaller?
272
283
  A: A big chunk of space is being used by unnecessary javascript `emscripten` bundling. The wasm_compiler_settings.py file in the FastLED repo can tweak this.
273
284
 
274
-
275
285
  # Revisions
276
286
 
287
+ * 1.2.13 - More fixes for npm live-server, now uses `static-npm` to launch it.
277
288
  * 1.2.12 - Fixes for python npm for launching live-server
278
289
  * 1.2.10 - `fastled.Test` now allows you to spawn the http webserver on a folder with an index.html in it.
279
290
  * 1.2.7 - A bunch of fixes for MacOS and probably linux.
@@ -69,6 +69,7 @@ tests/test_docker_linux_on_windows.py
69
69
  tests/test_embedded_data.py
70
70
  tests/test_examples.py
71
71
  tests/test_filechanger.py
72
+ tests/test_http_server.py
72
73
  tests/test_project_init.py
73
74
  tests/test_server_and_client_seperatly.py
74
75
  tests/test_webcompile.py
@@ -7,4 +7,4 @@ disklru>=2.0.1
7
7
  appdirs>=1.4.4
8
8
  rapidfuzz>=3.10.1
9
9
  progress>=1.6
10
- nodejs-bin[cmd]
10
+ static-npm>=1.0.6
@@ -4,14 +4,11 @@ Unit test file.
4
4
 
5
5
  import os
6
6
  import platform
7
- import time
8
7
  import unittest
9
8
  from pathlib import Path
10
9
  from tempfile import TemporaryDirectory
11
10
 
12
- import httpx
13
-
14
- from fastled import Api, CompileServer, LiveClient, Test
11
+ from fastled import Api, CompileServer, LiveClient
15
12
 
16
13
  HERE = Path(__file__).parent
17
14
  INDEX_HTML = HERE / "html" / "index.html"
@@ -66,16 +63,6 @@ class ApiTester(unittest.TestCase):
66
63
  # now test that fastled_js is in the sketch directory
67
64
  self.assertTrue(expected_output_dir.exists())
68
65
 
69
- def test_http_server(self) -> None:
70
- """Test the http server."""
71
- proc = Test.spawn_http_server(INDEX_HTML.parent, port=8081, open_browser=False)
72
- time.sleep(1)
73
- # test get request
74
- response = httpx.get("http://localhost:8081")
75
- self.assertEqual(response.status_code, 200)
76
- proc.kill()
77
- proc.wait()
78
-
79
66
 
80
67
  if __name__ == "__main__":
81
68
  unittest.main()
@@ -0,0 +1,49 @@
1
+ """
2
+ Unit test file.
3
+ """
4
+
5
+ import time
6
+ import unittest
7
+ from pathlib import Path
8
+
9
+ import httpx
10
+
11
+ from fastled import Test
12
+
13
+ HERE = Path(__file__).parent
14
+ INDEX_HTML = HERE / "html" / "index.html"
15
+ TIMEOUT = 120
16
+
17
+ assert INDEX_HTML.exists()
18
+
19
+ # def override(url) -> None:
20
+ # """Override the server url."""
21
+ # assert isinstance(url, str) and "localhost" in url
22
+
23
+ # client_server.TEST_BEFORE_COMPILE = override
24
+
25
+
26
+ class HttpServerTester(unittest.TestCase):
27
+ """Main tester class."""
28
+
29
+ def test_http_server(self) -> None:
30
+ """Test the http server."""
31
+ proc = Test.spawn_http_server(INDEX_HTML.parent, port=8081, open_browser=False)
32
+ time.sleep(1)
33
+ future_time = time.time() + TIMEOUT
34
+ while future_time > time.time():
35
+ try:
36
+ response = httpx.get("http://localhost:8081", timeout=1)
37
+ break
38
+ except Exception:
39
+ continue
40
+ else:
41
+ self.fail("Could not connect to server")
42
+ response = httpx.get("http://localhost:8081", timeout=5)
43
+ self.assertEqual(response.status_code, 200)
44
+ proc.kill()
45
+ proc.wait()
46
+
47
+
48
+ if __name__ == "__main__":
49
+ unittest.main()
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes