openrunner-sdk 2.19.0__tar.gz → 2.19.2__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.
- {openrunner_sdk-2.19.0 → openrunner_sdk-2.19.2}/PKG-INFO +1 -1
- {openrunner_sdk-2.19.0 → openrunner_sdk-2.19.2}/openrunner/__init__.py +1 -1
- {openrunner_sdk-2.19.0 → openrunner_sdk-2.19.2}/openrunner/install_commands.py +52 -44
- {openrunner_sdk-2.19.0 → openrunner_sdk-2.19.2}/pyproject.toml +1 -1
- {openrunner_sdk-2.19.0 → openrunner_sdk-2.19.2}/.gitignore +0 -0
- {openrunner_sdk-2.19.0 → openrunner_sdk-2.19.2}/=6.0 +0 -0
- {openrunner_sdk-2.19.0 → openrunner_sdk-2.19.2}/=8.1 +0 -0
- {openrunner_sdk-2.19.0 → openrunner_sdk-2.19.2}/README.md +0 -0
- {openrunner_sdk-2.19.0 → openrunner_sdk-2.19.2}/openrunner/CLAUDE.md +0 -0
- {openrunner_sdk-2.19.0 → openrunner_sdk-2.19.2}/openrunner/api_client.py +0 -0
- {openrunner_sdk-2.19.0 → openrunner_sdk-2.19.2}/openrunner/artifact.py +0 -0
- {openrunner_sdk-2.19.0 → openrunner_sdk-2.19.2}/openrunner/buffer.py +0 -0
- {openrunner_sdk-2.19.0 → openrunner_sdk-2.19.2}/openrunner/cache.py +0 -0
- {openrunner_sdk-2.19.0 → openrunner_sdk-2.19.2}/openrunner/cli.py +0 -0
- {openrunner_sdk-2.19.0 → openrunner_sdk-2.19.2}/openrunner/config.py +0 -0
- {openrunner_sdk-2.19.0 → openrunner_sdk-2.19.2}/openrunner/cost.py +0 -0
- {openrunner_sdk-2.19.0 → openrunner_sdk-2.19.2}/openrunner/dataset.py +0 -0
- {openrunner_sdk-2.19.0 → openrunner_sdk-2.19.2}/openrunner/environment.py +0 -0
- {openrunner_sdk-2.19.0 → openrunner_sdk-2.19.2}/openrunner/evaluation.py +0 -0
- {openrunner_sdk-2.19.0 → openrunner_sdk-2.19.2}/openrunner/feedback.py +0 -0
- {openrunner_sdk-2.19.0 → openrunner_sdk-2.19.2}/openrunner/git_info.py +0 -0
- {openrunner_sdk-2.19.0 → openrunner_sdk-2.19.2}/openrunner/guardrails.py +0 -0
- {openrunner_sdk-2.19.0 → openrunner_sdk-2.19.2}/openrunner/integration/__init__.py +0 -0
- {openrunner_sdk-2.19.0 → openrunner_sdk-2.19.2}/openrunner/integration/accelerate.py +0 -0
- {openrunner_sdk-2.19.0 → openrunner_sdk-2.19.2}/openrunner/integration/anthropic_tracer.py +0 -0
- {openrunner_sdk-2.19.0 → openrunner_sdk-2.19.2}/openrunner/integration/catboost.py +0 -0
- {openrunner_sdk-2.19.0 → openrunner_sdk-2.19.2}/openrunner/integration/diffusers.py +0 -0
- {openrunner_sdk-2.19.0 → openrunner_sdk-2.19.2}/openrunner/integration/fastai.py +0 -0
- {openrunner_sdk-2.19.0 → openrunner_sdk-2.19.2}/openrunner/integration/forced_alignment.py +0 -0
- {openrunner_sdk-2.19.0 → openrunner_sdk-2.19.2}/openrunner/integration/gladia.py +0 -0
- {openrunner_sdk-2.19.0 → openrunner_sdk-2.19.2}/openrunner/integration/gymnasium.py +0 -0
- {openrunner_sdk-2.19.0 → openrunner_sdk-2.19.2}/openrunner/integration/huggingface.py +0 -0
- {openrunner_sdk-2.19.0 → openrunner_sdk-2.19.2}/openrunner/integration/hydra.py +0 -0
- {openrunner_sdk-2.19.0 → openrunner_sdk-2.19.2}/openrunner/integration/ignite.py +0 -0
- {openrunner_sdk-2.19.0 → openrunner_sdk-2.19.2}/openrunner/integration/jax.py +0 -0
- {openrunner_sdk-2.19.0 → openrunner_sdk-2.19.2}/openrunner/integration/keras.py +0 -0
- {openrunner_sdk-2.19.0 → openrunner_sdk-2.19.2}/openrunner/integration/langchain.py +0 -0
- {openrunner_sdk-2.19.0 → openrunner_sdk-2.19.2}/openrunner/integration/lightgbm.py +0 -0
- {openrunner_sdk-2.19.0 → openrunner_sdk-2.19.2}/openrunner/integration/lightning.py +0 -0
- {openrunner_sdk-2.19.0 → openrunner_sdk-2.19.2}/openrunner/integration/llamaindex.py +0 -0
- {openrunner_sdk-2.19.0 → openrunner_sdk-2.19.2}/openrunner/integration/openai_finetune.py +0 -0
- {openrunner_sdk-2.19.0 → openrunner_sdk-2.19.2}/openrunner/integration/openai_tracer.py +0 -0
- {openrunner_sdk-2.19.0 → openrunner_sdk-2.19.2}/openrunner/integration/optuna.py +0 -0
- {openrunner_sdk-2.19.0 → openrunner_sdk-2.19.2}/openrunner/integration/pytorch.py +0 -0
- {openrunner_sdk-2.19.0 → openrunner_sdk-2.19.2}/openrunner/integration/sb3.py +0 -0
- {openrunner_sdk-2.19.0 → openrunner_sdk-2.19.2}/openrunner/integration/sklearn.py +0 -0
- {openrunner_sdk-2.19.0 → openrunner_sdk-2.19.2}/openrunner/integration/tensorflow.py +0 -0
- {openrunner_sdk-2.19.0 → openrunner_sdk-2.19.2}/openrunner/integration/trl.py +0 -0
- {openrunner_sdk-2.19.0 → openrunner_sdk-2.19.2}/openrunner/integration/tts.py +0 -0
- {openrunner_sdk-2.19.0 → openrunner_sdk-2.19.2}/openrunner/integration/ultralytics.py +0 -0
- {openrunner_sdk-2.19.0 → openrunner_sdk-2.19.2}/openrunner/integration/voice_agent.py +0 -0
- {openrunner_sdk-2.19.0 → openrunner_sdk-2.19.2}/openrunner/integration/whisper.py +0 -0
- {openrunner_sdk-2.19.0 → openrunner_sdk-2.19.2}/openrunner/integration/xgboost.py +0 -0
- {openrunner_sdk-2.19.0 → openrunner_sdk-2.19.2}/openrunner/launch.py +0 -0
- {openrunner_sdk-2.19.0 → openrunner_sdk-2.19.2}/openrunner/mcp_server.py +0 -0
- {openrunner_sdk-2.19.0 → openrunner_sdk-2.19.2}/openrunner/media.py +0 -0
- {openrunner_sdk-2.19.0 → openrunner_sdk-2.19.2}/openrunner/migrate.py +0 -0
- {openrunner_sdk-2.19.0 → openrunner_sdk-2.19.2}/openrunner/model.py +0 -0
- {openrunner_sdk-2.19.0 → openrunner_sdk-2.19.2}/openrunner/offline.py +0 -0
- {openrunner_sdk-2.19.0 → openrunner_sdk-2.19.2}/openrunner/pii.py +0 -0
- {openrunner_sdk-2.19.0 → openrunner_sdk-2.19.2}/openrunner/plot.py +0 -0
- {openrunner_sdk-2.19.0 → openrunner_sdk-2.19.2}/openrunner/prompt.py +0 -0
- {openrunner_sdk-2.19.0 → openrunner_sdk-2.19.2}/openrunner/query_api.py +0 -0
- {openrunner_sdk-2.19.0 → openrunner_sdk-2.19.2}/openrunner/redact.py +0 -0
- {openrunner_sdk-2.19.0 → openrunner_sdk-2.19.2}/openrunner/run.py +0 -0
- {openrunner_sdk-2.19.0 → openrunner_sdk-2.19.2}/openrunner/scorers.py +0 -0
- {openrunner_sdk-2.19.0 → openrunner_sdk-2.19.2}/openrunner/sender.py +0 -0
- {openrunner_sdk-2.19.0 → openrunner_sdk-2.19.2}/openrunner/session.py +0 -0
- {openrunner_sdk-2.19.0 → openrunner_sdk-2.19.2}/openrunner/settings.py +0 -0
- {openrunner_sdk-2.19.0 → openrunner_sdk-2.19.2}/openrunner/summary.py +0 -0
- {openrunner_sdk-2.19.0 → openrunner_sdk-2.19.2}/openrunner/sweep.py +0 -0
- {openrunner_sdk-2.19.0 → openrunner_sdk-2.19.2}/openrunner/system_metrics.py +0 -0
- {openrunner_sdk-2.19.0 → openrunner_sdk-2.19.2}/openrunner/tensorboard.py +0 -0
- {openrunner_sdk-2.19.0 → openrunner_sdk-2.19.2}/openrunner/trace.py +0 -0
- {openrunner_sdk-2.19.0 → openrunner_sdk-2.19.2}/openrunner/transcript_formatter.py +0 -0
- {openrunner_sdk-2.19.0 → openrunner_sdk-2.19.2}/openrunner/wal.py +0 -0
- {openrunner_sdk-2.19.0 → openrunner_sdk-2.19.2}/openrunner/wandb_compat/__init__.py +0 -0
- {openrunner_sdk-2.19.0 → openrunner_sdk-2.19.2}/openrunner/wandb_compat/_shim.py +0 -0
- {openrunner_sdk-2.19.0 → openrunner_sdk-2.19.2}/openrunner/wer.py +0 -0
- {openrunner_sdk-2.19.0 → openrunner_sdk-2.19.2}/tests/__init__.py +0 -0
- {openrunner_sdk-2.19.0 → openrunner_sdk-2.19.2}/tests/conftest.py +0 -0
- {openrunner_sdk-2.19.0 → openrunner_sdk-2.19.2}/tests/test_alert.py +0 -0
- {openrunner_sdk-2.19.0 → openrunner_sdk-2.19.2}/tests/test_aliases.py +0 -0
- {openrunner_sdk-2.19.0 → openrunner_sdk-2.19.2}/tests/test_api_client.py +0 -0
- {openrunner_sdk-2.19.0 → openrunner_sdk-2.19.2}/tests/test_artifact.py +0 -0
- {openrunner_sdk-2.19.0 → openrunner_sdk-2.19.2}/tests/test_buffer.py +0 -0
- {openrunner_sdk-2.19.0 → openrunner_sdk-2.19.2}/tests/test_cache.py +0 -0
- {openrunner_sdk-2.19.0 → openrunner_sdk-2.19.2}/tests/test_class_scorers.py +0 -0
- {openrunner_sdk-2.19.0 → openrunner_sdk-2.19.2}/tests/test_cli.py +0 -0
- {openrunner_sdk-2.19.0 → openrunner_sdk-2.19.2}/tests/test_config.py +0 -0
- {openrunner_sdk-2.19.0 → openrunner_sdk-2.19.2}/tests/test_evaluation.py +0 -0
- {openrunner_sdk-2.19.0 → openrunner_sdk-2.19.2}/tests/test_finish.py +0 -0
- {openrunner_sdk-2.19.0 → openrunner_sdk-2.19.2}/tests/test_git_info.py +0 -0
- {openrunner_sdk-2.19.0 → openrunner_sdk-2.19.2}/tests/test_init.py +0 -0
- {openrunner_sdk-2.19.0 → openrunner_sdk-2.19.2}/tests/test_integration_fastai.py +0 -0
- {openrunner_sdk-2.19.0 → openrunner_sdk-2.19.2}/tests/test_integration_huggingface.py +0 -0
- {openrunner_sdk-2.19.0 → openrunner_sdk-2.19.2}/tests/test_integration_keras.py +0 -0
- {openrunner_sdk-2.19.0 → openrunner_sdk-2.19.2}/tests/test_integration_langchain.py +0 -0
- {openrunner_sdk-2.19.0 → openrunner_sdk-2.19.2}/tests/test_integration_lightning.py +0 -0
- {openrunner_sdk-2.19.0 → openrunner_sdk-2.19.2}/tests/test_integration_pytorch.py +0 -0
- {openrunner_sdk-2.19.0 → openrunner_sdk-2.19.2}/tests/test_integration_sklearn.py +0 -0
- {openrunner_sdk-2.19.0 → openrunner_sdk-2.19.2}/tests/test_integration_xgboost.py +0 -0
- {openrunner_sdk-2.19.0 → openrunner_sdk-2.19.2}/tests/test_launch.py +0 -0
- {openrunner_sdk-2.19.0 → openrunner_sdk-2.19.2}/tests/test_log.py +0 -0
- {openrunner_sdk-2.19.0 → openrunner_sdk-2.19.2}/tests/test_log_code.py +0 -0
- {openrunner_sdk-2.19.0 → openrunner_sdk-2.19.2}/tests/test_media.py +0 -0
- {openrunner_sdk-2.19.0 → openrunner_sdk-2.19.2}/tests/test_migrate.py +0 -0
- {openrunner_sdk-2.19.0 → openrunner_sdk-2.19.2}/tests/test_offline.py +0 -0
- {openrunner_sdk-2.19.0 → openrunner_sdk-2.19.2}/tests/test_offline_sync.py +0 -0
- {openrunner_sdk-2.19.0 → openrunner_sdk-2.19.2}/tests/test_pii.py +0 -0
- {openrunner_sdk-2.19.0 → openrunner_sdk-2.19.2}/tests/test_plot.py +0 -0
- {openrunner_sdk-2.19.0 → openrunner_sdk-2.19.2}/tests/test_query_api.py +0 -0
- {openrunner_sdk-2.19.0 → openrunner_sdk-2.19.2}/tests/test_resume.py +0 -0
- {openrunner_sdk-2.19.0 → openrunner_sdk-2.19.2}/tests/test_sdk_features.py +0 -0
- {openrunner_sdk-2.19.0 → openrunner_sdk-2.19.2}/tests/test_sender.py +0 -0
- {openrunner_sdk-2.19.0 → openrunner_sdk-2.19.2}/tests/test_summary.py +0 -0
- {openrunner_sdk-2.19.0 → openrunner_sdk-2.19.2}/tests/test_sweep.py +0 -0
- {openrunner_sdk-2.19.0 → openrunner_sdk-2.19.2}/tests/test_system_metrics.py +0 -0
- {openrunner_sdk-2.19.0 → openrunner_sdk-2.19.2}/tests/test_trace.py +0 -0
- {openrunner_sdk-2.19.0 → openrunner_sdk-2.19.2}/tests/test_wandb_compat.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: openrunner-sdk
|
|
3
|
-
Version: 2.19.
|
|
3
|
+
Version: 2.19.2
|
|
4
4
|
Summary: OpenRunner SDK - W&B-compatible ML experiment tracking client
|
|
5
5
|
Project-URL: Homepage, https://github.com/jqueguiner/openrunner
|
|
6
6
|
Project-URL: Repository, https://github.com/jqueguiner/openrunner
|
|
@@ -120,7 +120,7 @@ launch.from_run = _launch_from_run # type: ignore[attr-defined]
|
|
|
120
120
|
# openrunner.trace.patch_openai() syntax
|
|
121
121
|
trace.patch_openai = _patch_openai # type: ignore[attr-defined]
|
|
122
122
|
|
|
123
|
-
__version__ = "2.19.
|
|
123
|
+
__version__ = "2.19.2"
|
|
124
124
|
|
|
125
125
|
logger = logging.getLogger("openrunner")
|
|
126
126
|
|
|
@@ -875,18 +875,59 @@ for run in runs[:3]:
|
|
|
875
875
|
m = {}
|
|
876
876
|
elif 'metrics' in m:
|
|
877
877
|
m = m['metrics']
|
|
878
|
+
# Read user-configured metrics from ~/.openrunner/statusline.json
|
|
879
|
+
# Format: {"metrics": ["train/loss", "wer"], "sparkline": "train/loss"}
|
|
880
|
+
# If not configured, auto-detect: sparkline first loss-like key, show first 2 metrics
|
|
881
|
+
import json as _j
|
|
882
|
+
sl_cfg_path = os.path.expanduser('~/.openrunner/statusline.json')
|
|
883
|
+
sl_cfg = {}
|
|
884
|
+
if os.path.isfile(sl_cfg_path):
|
|
885
|
+
try: sl_cfg = _j.loads(open(sl_cfg_path).read())
|
|
886
|
+
except: pass
|
|
887
|
+
show_metrics = sl_cfg.get('metrics', [])
|
|
888
|
+
spark_key = sl_cfg.get('sparkline', '')
|
|
889
|
+
# Auto-detect if not configured
|
|
890
|
+
if not show_metrics:
|
|
891
|
+
all_keys = list(m.keys())
|
|
892
|
+
# Pick loss-like for sparkline, then next interesting metric
|
|
893
|
+
for k in all_keys:
|
|
894
|
+
if 'loss' in k.lower() and not spark_key:
|
|
895
|
+
spark_key = k
|
|
896
|
+
elif k not in ('epoch', 'lr', 'learning_rate') and len(show_metrics) < 2:
|
|
897
|
+
if 'system' not in k.lower():
|
|
898
|
+
show_metrics.append(k)
|
|
899
|
+
if spark_key and spark_key not in show_metrics:
|
|
900
|
+
show_metrics.insert(0, spark_key)
|
|
901
|
+
if not spark_key and show_metrics:
|
|
902
|
+
spark_key = show_metrics[0]
|
|
878
903
|
bits = [f"{name}{icon}"]
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
|
|
904
|
+
# Sparkline for primary metric
|
|
905
|
+
spark_data = m.get(spark_key, [])
|
|
906
|
+
if spark_data:
|
|
907
|
+
last = spark_data[-1]
|
|
882
908
|
v = last.get('value', last) if isinstance(last, dict) else last
|
|
883
909
|
s = last.get('step', '?') if isinstance(last, dict) else '?'
|
|
884
|
-
|
|
885
|
-
|
|
886
|
-
|
|
887
|
-
|
|
910
|
+
bars = '\\u2581\\u2582\\u2583\\u2584\\u2585\\u2586\\u2587\\u2588'
|
|
911
|
+
vals = [pt.get('value', pt) if isinstance(pt, dict) else pt for pt in spark_data[-10:]]
|
|
912
|
+
vals = [x for x in vals if isinstance(x, (int, float))]
|
|
913
|
+
spark = ''
|
|
914
|
+
if len(vals) > 1:
|
|
915
|
+
mn, mx = min(vals), max(vals)
|
|
916
|
+
rng = mx - mn or 1
|
|
917
|
+
spark = ''.join(bars[int((x - mn) / rng * 7)] for x in vals)
|
|
918
|
+
bits.append(f"s{s} {spark} {v:.2f}")
|
|
919
|
+
# Additional configured metrics
|
|
920
|
+
for mk in show_metrics:
|
|
921
|
+
if mk == spark_key: continue
|
|
922
|
+
pts = m.get(mk, [])
|
|
923
|
+
if not pts: continue
|
|
924
|
+
last = pts[-1]
|
|
888
925
|
v = last.get('value', last) if isinstance(last, dict) else last
|
|
889
|
-
|
|
926
|
+
label = mk.split('/')[-1][:6]
|
|
927
|
+
if isinstance(v, float):
|
|
928
|
+
bits.append(f"{label}={v:.3f}" if v < 1 else f"{label}={v:.1f}")
|
|
929
|
+
else:
|
|
930
|
+
bits.append(f"{label}={v}")
|
|
890
931
|
parts.append(' '.join(bits))
|
|
891
932
|
print(' | '.join(parts) if parts else 'no runs')
|
|
892
933
|
client.close()
|
|
@@ -970,42 +1011,9 @@ When the user asks about papers, research, or sessions:
|
|
|
970
1011
|
statusline_script.chmod(0o755)
|
|
971
1012
|
files.append(str(statusline_script))
|
|
972
1013
|
|
|
973
|
-
#
|
|
974
|
-
#
|
|
975
|
-
#
|
|
976
|
-
gsd_statusline = Path.home() / ".claude" / "hooks" / "gsd-statusline.js"
|
|
977
|
-
if gsd_statusline.exists():
|
|
978
|
-
content = gsd_statusline.read_text()
|
|
979
|
-
if "claude-statusline-" not in content:
|
|
980
|
-
# Inject generic plugin segment reader before "// Output"
|
|
981
|
-
patch = """ // Plugin statusline segments: read all /tmp/claude-statusline-*.txt
|
|
982
|
-
// Any plugin can write a one-liner to /tmp/claude-statusline-<name>.txt
|
|
983
|
-
let plugins = '';
|
|
984
|
-
try {
|
|
985
|
-
const tmpDir = os.tmpdir();
|
|
986
|
-
const files = fs.readdirSync(tmpDir)
|
|
987
|
-
.filter(f => f.startsWith('claude-statusline-') && f.endsWith('.txt'));
|
|
988
|
-
for (const f of files) {
|
|
989
|
-
try {
|
|
990
|
-
const fp = path.join(tmpDir, f);
|
|
991
|
-
const stat = fs.statSync(fp);
|
|
992
|
-
const ageS = (Date.now() - stat.mtimeMs) / 1000;
|
|
993
|
-
if (ageS > 120) continue;
|
|
994
|
-
const content = fs.readFileSync(fp, 'utf8').trim();
|
|
995
|
-
if (content && content.length < 200) {
|
|
996
|
-
plugins += ` | ${content}`;
|
|
997
|
-
}
|
|
998
|
-
} catch (e) {}
|
|
999
|
-
}
|
|
1000
|
-
} catch (e) {}
|
|
1001
|
-
|
|
1002
|
-
"""
|
|
1003
|
-
if "// Output" in content:
|
|
1004
|
-
content = content.replace("// Output", patch + " // Output")
|
|
1005
|
-
# Add ${plugins} to output lines
|
|
1006
|
-
content = content.replace("${ctx}`)", "${ctx}${plugins}`)")
|
|
1007
|
-
gsd_statusline.write_text(content)
|
|
1008
|
-
files.append(str(gsd_statusline))
|
|
1014
|
+
# Convention: OpenRunner writes to /tmp/claude-statusline-openrunner.txt
|
|
1015
|
+
# Any statusline runner that reads /tmp/claude-statusline-*.txt will pick it up.
|
|
1016
|
+
# No patching of other plugins — purely convention-based.
|
|
1009
1017
|
|
|
1010
1018
|
return files
|
|
1011
1019
|
|
|
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
|
|
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
|
|
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
|
|
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
|