imt-ring 1.3.3__tar.gz → 1.3.5__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.
- {imt_ring-1.3.3 → imt_ring-1.3.5}/PKG-INFO +1 -1
- {imt_ring-1.3.3 → imt_ring-1.3.5}/pyproject.toml +1 -1
- {imt_ring-1.3.3 → imt_ring-1.3.5}/src/imt_ring.egg-info/PKG-INFO +1 -1
- {imt_ring-1.3.3 → imt_ring-1.3.5}/src/ring/algorithms/_random.py +34 -19
- {imt_ring-1.3.3 → imt_ring-1.3.5}/src/ring/algorithms/custom_joints/suntay.py +24 -8
- {imt_ring-1.3.3 → imt_ring-1.3.5}/src/ring/algorithms/generator/batch.py +3 -1
- {imt_ring-1.3.3 → imt_ring-1.3.5}/src/ring/algorithms/jcalc.py +2 -2
- {imt_ring-1.3.3 → imt_ring-1.3.5}/src/ring/base.py +9 -1
- {imt_ring-1.3.3 → imt_ring-1.3.5}/readme.md +0 -0
- {imt_ring-1.3.3 → imt_ring-1.3.5}/setup.cfg +0 -0
- {imt_ring-1.3.3 → imt_ring-1.3.5}/src/imt_ring.egg-info/SOURCES.txt +0 -0
- {imt_ring-1.3.3 → imt_ring-1.3.5}/src/imt_ring.egg-info/dependency_links.txt +0 -0
- {imt_ring-1.3.3 → imt_ring-1.3.5}/src/imt_ring.egg-info/requires.txt +0 -0
- {imt_ring-1.3.3 → imt_ring-1.3.5}/src/imt_ring.egg-info/top_level.txt +0 -0
- {imt_ring-1.3.3 → imt_ring-1.3.5}/src/ring/__init__.py +0 -0
- {imt_ring-1.3.3 → imt_ring-1.3.5}/src/ring/algebra.py +0 -0
- {imt_ring-1.3.3 → imt_ring-1.3.5}/src/ring/algorithms/__init__.py +0 -0
- {imt_ring-1.3.3 → imt_ring-1.3.5}/src/ring/algorithms/custom_joints/__init__.py +0 -0
- {imt_ring-1.3.3 → imt_ring-1.3.5}/src/ring/algorithms/custom_joints/rr_imp_joint.py +0 -0
- {imt_ring-1.3.3 → imt_ring-1.3.5}/src/ring/algorithms/custom_joints/rr_joint.py +0 -0
- {imt_ring-1.3.3 → imt_ring-1.3.5}/src/ring/algorithms/dynamics.py +0 -0
- {imt_ring-1.3.3 → imt_ring-1.3.5}/src/ring/algorithms/generator/__init__.py +0 -0
- {imt_ring-1.3.3 → imt_ring-1.3.5}/src/ring/algorithms/generator/base.py +0 -0
- {imt_ring-1.3.3 → imt_ring-1.3.5}/src/ring/algorithms/generator/motion_artifacts.py +0 -0
- {imt_ring-1.3.3 → imt_ring-1.3.5}/src/ring/algorithms/generator/pd_control.py +0 -0
- {imt_ring-1.3.3 → imt_ring-1.3.5}/src/ring/algorithms/generator/randomize.py +0 -0
- {imt_ring-1.3.3 → imt_ring-1.3.5}/src/ring/algorithms/generator/transforms.py +0 -0
- {imt_ring-1.3.3 → imt_ring-1.3.5}/src/ring/algorithms/generator/types.py +0 -0
- {imt_ring-1.3.3 → imt_ring-1.3.5}/src/ring/algorithms/kinematics.py +0 -0
- {imt_ring-1.3.3 → imt_ring-1.3.5}/src/ring/algorithms/sensors.py +0 -0
- {imt_ring-1.3.3 → imt_ring-1.3.5}/src/ring/io/__init__.py +0 -0
- {imt_ring-1.3.3 → imt_ring-1.3.5}/src/ring/io/examples/branched.xml +0 -0
- {imt_ring-1.3.3 → imt_ring-1.3.5}/src/ring/io/examples/exclude/knee_trans_dof.xml +0 -0
- {imt_ring-1.3.3 → imt_ring-1.3.5}/src/ring/io/examples/exclude/standard_sys.xml +0 -0
- {imt_ring-1.3.3 → imt_ring-1.3.5}/src/ring/io/examples/exclude/standard_sys_rr_imp.xml +0 -0
- {imt_ring-1.3.3 → imt_ring-1.3.5}/src/ring/io/examples/inv_pendulum.xml +0 -0
- {imt_ring-1.3.3 → imt_ring-1.3.5}/src/ring/io/examples/knee_flexible_imus.xml +0 -0
- {imt_ring-1.3.3 → imt_ring-1.3.5}/src/ring/io/examples/spherical_stiff.xml +0 -0
- {imt_ring-1.3.3 → imt_ring-1.3.5}/src/ring/io/examples/symmetric.xml +0 -0
- {imt_ring-1.3.3 → imt_ring-1.3.5}/src/ring/io/examples/test_all_1.xml +0 -0
- {imt_ring-1.3.3 → imt_ring-1.3.5}/src/ring/io/examples/test_all_2.xml +0 -0
- {imt_ring-1.3.3 → imt_ring-1.3.5}/src/ring/io/examples/test_ang0_pos0.xml +0 -0
- {imt_ring-1.3.3 → imt_ring-1.3.5}/src/ring/io/examples/test_control.xml +0 -0
- {imt_ring-1.3.3 → imt_ring-1.3.5}/src/ring/io/examples/test_double_pendulum.xml +0 -0
- {imt_ring-1.3.3 → imt_ring-1.3.5}/src/ring/io/examples/test_free.xml +0 -0
- {imt_ring-1.3.3 → imt_ring-1.3.5}/src/ring/io/examples/test_kinematics.xml +0 -0
- {imt_ring-1.3.3 → imt_ring-1.3.5}/src/ring/io/examples/test_morph_system/four_seg_seg1.xml +0 -0
- {imt_ring-1.3.3 → imt_ring-1.3.5}/src/ring/io/examples/test_morph_system/four_seg_seg3.xml +0 -0
- {imt_ring-1.3.3 → imt_ring-1.3.5}/src/ring/io/examples/test_randomize_position.xml +0 -0
- {imt_ring-1.3.3 → imt_ring-1.3.5}/src/ring/io/examples/test_sensors.xml +0 -0
- {imt_ring-1.3.3 → imt_ring-1.3.5}/src/ring/io/examples/test_three_seg_seg2.xml +0 -0
- {imt_ring-1.3.3 → imt_ring-1.3.5}/src/ring/io/examples.py +0 -0
- {imt_ring-1.3.3 → imt_ring-1.3.5}/src/ring/io/test_examples.py +0 -0
- {imt_ring-1.3.3 → imt_ring-1.3.5}/src/ring/io/xml/__init__.py +0 -0
- {imt_ring-1.3.3 → imt_ring-1.3.5}/src/ring/io/xml/abstract.py +0 -0
- {imt_ring-1.3.3 → imt_ring-1.3.5}/src/ring/io/xml/from_xml.py +0 -0
- {imt_ring-1.3.3 → imt_ring-1.3.5}/src/ring/io/xml/test_from_xml.py +0 -0
- {imt_ring-1.3.3 → imt_ring-1.3.5}/src/ring/io/xml/test_to_xml.py +0 -0
- {imt_ring-1.3.3 → imt_ring-1.3.5}/src/ring/io/xml/to_xml.py +0 -0
- {imt_ring-1.3.3 → imt_ring-1.3.5}/src/ring/maths.py +0 -0
- {imt_ring-1.3.3 → imt_ring-1.3.5}/src/ring/ml/__init__.py +0 -0
- {imt_ring-1.3.3 → imt_ring-1.3.5}/src/ring/ml/base.py +0 -0
- {imt_ring-1.3.3 → imt_ring-1.3.5}/src/ring/ml/callbacks.py +0 -0
- {imt_ring-1.3.3 → imt_ring-1.3.5}/src/ring/ml/ml_utils.py +0 -0
- {imt_ring-1.3.3 → imt_ring-1.3.5}/src/ring/ml/optimizer.py +0 -0
- {imt_ring-1.3.3 → imt_ring-1.3.5}/src/ring/ml/params/0x13e3518065c21cd8.pickle +0 -0
- {imt_ring-1.3.3 → imt_ring-1.3.5}/src/ring/ml/ringnet.py +0 -0
- {imt_ring-1.3.3 → imt_ring-1.3.5}/src/ring/ml/train.py +0 -0
- {imt_ring-1.3.3 → imt_ring-1.3.5}/src/ring/ml/training_loop.py +0 -0
- {imt_ring-1.3.3 → imt_ring-1.3.5}/src/ring/rendering/__init__.py +0 -0
- {imt_ring-1.3.3 → imt_ring-1.3.5}/src/ring/rendering/base_render.py +0 -0
- {imt_ring-1.3.3 → imt_ring-1.3.5}/src/ring/rendering/mujoco_render.py +0 -0
- {imt_ring-1.3.3 → imt_ring-1.3.5}/src/ring/rendering/vispy_render.py +0 -0
- {imt_ring-1.3.3 → imt_ring-1.3.5}/src/ring/rendering/vispy_visuals.py +0 -0
- {imt_ring-1.3.3 → imt_ring-1.3.5}/src/ring/sim2real/__init__.py +0 -0
- {imt_ring-1.3.3 → imt_ring-1.3.5}/src/ring/sim2real/sim2real.py +0 -0
- {imt_ring-1.3.3 → imt_ring-1.3.5}/src/ring/spatial.py +0 -0
- {imt_ring-1.3.3 → imt_ring-1.3.5}/src/ring/sys_composer/__init__.py +0 -0
- {imt_ring-1.3.3 → imt_ring-1.3.5}/src/ring/sys_composer/delete_sys.py +0 -0
- {imt_ring-1.3.3 → imt_ring-1.3.5}/src/ring/sys_composer/inject_sys.py +0 -0
- {imt_ring-1.3.3 → imt_ring-1.3.5}/src/ring/sys_composer/morph_sys.py +0 -0
- {imt_ring-1.3.3 → imt_ring-1.3.5}/src/ring/utils/__init__.py +0 -0
- {imt_ring-1.3.3 → imt_ring-1.3.5}/src/ring/utils/batchsize.py +0 -0
- {imt_ring-1.3.3 → imt_ring-1.3.5}/src/ring/utils/colab.py +0 -0
- {imt_ring-1.3.3 → imt_ring-1.3.5}/src/ring/utils/hdf5.py +0 -0
- {imt_ring-1.3.3 → imt_ring-1.3.5}/src/ring/utils/normalizer.py +0 -0
- {imt_ring-1.3.3 → imt_ring-1.3.5}/src/ring/utils/path.py +0 -0
- {imt_ring-1.3.3 → imt_ring-1.3.5}/src/ring/utils/utils.py +0 -0
- {imt_ring-1.3.3 → imt_ring-1.3.5}/tests/test_algebra.py +0 -0
- {imt_ring-1.3.3 → imt_ring-1.3.5}/tests/test_base.py +0 -0
- {imt_ring-1.3.3 → imt_ring-1.3.5}/tests/test_custom_joints.py +0 -0
- {imt_ring-1.3.3 → imt_ring-1.3.5}/tests/test_dynamics.py +0 -0
- {imt_ring-1.3.3 → imt_ring-1.3.5}/tests/test_generator.py +0 -0
- {imt_ring-1.3.3 → imt_ring-1.3.5}/tests/test_jcalc.py +0 -0
- {imt_ring-1.3.3 → imt_ring-1.3.5}/tests/test_jit.py +0 -0
- {imt_ring-1.3.3 → imt_ring-1.3.5}/tests/test_kinematics.py +0 -0
- {imt_ring-1.3.3 → imt_ring-1.3.5}/tests/test_maths.py +0 -0
- {imt_ring-1.3.3 → imt_ring-1.3.5}/tests/test_ml_utils.py +0 -0
- {imt_ring-1.3.3 → imt_ring-1.3.5}/tests/test_motion_artifacts.py +0 -0
- {imt_ring-1.3.3 → imt_ring-1.3.5}/tests/test_pd_control.py +0 -0
- {imt_ring-1.3.3 → imt_ring-1.3.5}/tests/test_random.py +0 -0
- {imt_ring-1.3.3 → imt_ring-1.3.5}/tests/test_randomize.py +0 -0
- {imt_ring-1.3.3 → imt_ring-1.3.5}/tests/test_rcmg.py +0 -0
- {imt_ring-1.3.3 → imt_ring-1.3.5}/tests/test_render.py +0 -0
- {imt_ring-1.3.3 → imt_ring-1.3.5}/tests/test_sensors.py +0 -0
- {imt_ring-1.3.3 → imt_ring-1.3.5}/tests/test_sim2real.py +0 -0
- {imt_ring-1.3.3 → imt_ring-1.3.5}/tests/test_sys_composer.py +0 -0
- {imt_ring-1.3.3 → imt_ring-1.3.5}/tests/test_train.py +0 -0
- {imt_ring-1.3.3 → imt_ring-1.3.5}/tests/test_utils.py +0 -0
@@ -4,6 +4,7 @@ import warnings
|
|
4
4
|
import jax
|
5
5
|
from jax import random
|
6
6
|
import jax.numpy as jnp
|
7
|
+
|
7
8
|
from ring import maths
|
8
9
|
|
9
10
|
Float = jax.Array
|
@@ -40,20 +41,20 @@ def random_angle_over_time(
|
|
40
41
|
def body_fn_outer(val):
|
41
42
|
i, t, phi, key_t, key_ang, ANG = val
|
42
43
|
|
43
|
-
key_t,
|
44
|
-
|
45
|
-
|
46
|
-
key_ang, consume = random.split(key_ang)
|
47
|
-
phi = _resolve_range_of_motion(
|
44
|
+
key_t, consume_t = random.split(key_t)
|
45
|
+
key_ang, consume_ang = random.split(key_ang)
|
46
|
+
dt, phi = _resolve_range_of_motion(
|
48
47
|
range_of_motion,
|
49
48
|
range_of_motion_method,
|
50
49
|
_to_float(dang_min, t),
|
51
50
|
_to_float(dang_max, t),
|
52
51
|
_to_float(delta_ang_min, t),
|
53
52
|
_to_float(delta_ang_max, t),
|
54
|
-
|
53
|
+
t_min,
|
54
|
+
_to_float(t_max, t),
|
55
55
|
phi,
|
56
|
-
|
56
|
+
consume_t,
|
57
|
+
consume_ang,
|
57
58
|
max_iter,
|
58
59
|
)
|
59
60
|
t += dt
|
@@ -246,12 +247,14 @@ def _resolve_range_of_motion(
|
|
246
247
|
dang_max,
|
247
248
|
delta_ang_min,
|
248
249
|
delta_ang_max,
|
249
|
-
|
250
|
+
t_min,
|
251
|
+
t_max,
|
250
252
|
prev_phi,
|
251
|
-
|
253
|
+
key_t,
|
254
|
+
key_ang,
|
252
255
|
max_iter,
|
253
256
|
):
|
254
|
-
def _next_phi(key):
|
257
|
+
def _next_phi(key, dt):
|
255
258
|
key, consume = random.split(key)
|
256
259
|
|
257
260
|
if range_of_motion:
|
@@ -294,21 +297,33 @@ def _resolve_range_of_motion(
|
|
294
297
|
return prev_phi + sign * dphi
|
295
298
|
|
296
299
|
def body_fn(val):
|
297
|
-
|
298
|
-
|
299
|
-
|
300
|
-
|
300
|
+
key_t, key_ang, _, _, i = val
|
301
|
+
|
302
|
+
key_t, consume_t = jax.random.split(key_t)
|
303
|
+
dt = jax.random.uniform(consume_t, minval=t_min, maxval=t_max)
|
304
|
+
|
305
|
+
key_ang, consume_ang = jax.random.split(key_ang)
|
306
|
+
next_phi = _next_phi(consume_ang, dt)
|
307
|
+
|
308
|
+
return key_t, key_ang, dt, next_phi, i + 1
|
301
309
|
|
302
310
|
def cond_fn(val):
|
303
|
-
_, next_phi, i = val
|
311
|
+
*_, dt, next_phi, i = val
|
304
312
|
delta_phi = jnp.abs(next_phi - prev_phi)
|
305
|
-
#
|
306
|
-
|
313
|
+
# delta_ang is in bounds
|
314
|
+
cond_delta_ang = (delta_phi >= delta_ang_min) & (delta_phi <= delta_ang_max)
|
315
|
+
# dang is in bounds
|
316
|
+
dang = delta_phi / dt
|
317
|
+
cond_dang = (dang >= dang_min) & (dang <= dang_max)
|
318
|
+
|
319
|
+
break_if_true1 = jnp.logical_and(cond_delta_ang, cond_dang)
|
320
|
+
# break out of loop
|
307
321
|
break_if_true2 = i > max_iter
|
308
322
|
return (i == 0) | (jnp.logical_not(break_if_true1 | break_if_true2))
|
309
323
|
|
310
|
-
|
311
|
-
|
324
|
+
init_val = (key_t, key_ang, 1.0, prev_phi, 0)
|
325
|
+
*_, dt, next_phi, _ = jax.lax.while_loop(cond_fn, body_fn, init_val)
|
326
|
+
return dt, next_phi
|
312
327
|
|
313
328
|
|
314
329
|
def cosInterpolate(x, xp, fp):
|
@@ -295,14 +295,21 @@ def register_suntay(sconfig: SuntayConfig, name: str = "suntay"):
|
|
295
295
|
|
296
296
|
def Polynomial_DrawnFnPair(
|
297
297
|
order: int = 2,
|
298
|
-
val: float = 2.0,
|
299
298
|
center: bool = False,
|
300
|
-
|
299
|
+
flexion_center_deg: Optional[float] = None,
|
300
|
+
include_bias: bool = True,
|
301
|
+
enable_scale_delta: bool = True,
|
301
302
|
) -> DrawnFnPairFactory:
|
302
|
-
assert
|
303
|
+
assert not (order == 0 and not include_bias)
|
304
|
+
|
305
|
+
flexion_center = (
|
306
|
+
jnp.deg2rad(flexion_center_deg) if flexion_center_deg is not None else None
|
307
|
+
)
|
308
|
+
del flexion_center_deg
|
303
309
|
|
304
310
|
# because 0-th order is also counted
|
305
311
|
order += 1
|
312
|
+
powers = jnp.arange(order) if include_bias else jnp.arange(1, order)
|
306
313
|
|
307
314
|
def factory(xs, mn, mx):
|
308
315
|
nonlocal flexion_center
|
@@ -311,17 +318,22 @@ def Polynomial_DrawnFnPair(
|
|
311
318
|
flexion_mx = jnp.max(xs)
|
312
319
|
|
313
320
|
def _apply_poly_factors(poly_factors, q):
|
314
|
-
return poly_factors @ jnp.power(q,
|
321
|
+
return poly_factors @ jnp.power(q, powers)
|
315
322
|
|
316
323
|
if flexion_center is None:
|
317
324
|
flexion_center = (flexion_mn + flexion_mx) / 2
|
325
|
+
|
326
|
+
if (order - 1) == 0:
|
327
|
+
method = "clip"
|
328
|
+
minval, maxval = mn, mx
|
318
329
|
else:
|
319
|
-
|
330
|
+
method = "minmax"
|
331
|
+
minval, maxval = -1.0, 1.0
|
320
332
|
|
321
333
|
def init(key):
|
322
|
-
c1, c2 = jax.random.split(key)
|
334
|
+
c1, c2, c3 = jax.random.split(key, 3)
|
323
335
|
poly_factors = jax.random.uniform(
|
324
|
-
c1, shape=(
|
336
|
+
c1, shape=(len(powers),), minval=minval, maxval=maxval
|
325
337
|
)
|
326
338
|
q0 = jax.random.uniform(c2, minval=flexion_mn, maxval=flexion_mx)
|
327
339
|
values = jax.vmap(_apply_poly_factors, in_axes=(None, 0))(
|
@@ -329,13 +341,17 @@ def Polynomial_DrawnFnPair(
|
|
329
341
|
)
|
330
342
|
eps = 1e-6
|
331
343
|
amin, amax = jnp.min(values), jnp.max(values) + eps
|
344
|
+
if enable_scale_delta:
|
345
|
+
delta = amax - amin
|
346
|
+
scale_delta = jnp.clip(jax.random.normal(c3) + 0.5, 1.0)
|
347
|
+
amax = amin + delta * scale_delta
|
332
348
|
return amin, amax, poly_factors, q0
|
333
349
|
|
334
350
|
def _apply(params, q):
|
335
351
|
amin, amax, poly_factors, q0 = params
|
336
352
|
q = q - q0
|
337
353
|
value = _apply_poly_factors(poly_factors, q)
|
338
|
-
return restrict(value, mn, mx, amin, amax)
|
354
|
+
return restrict(value, mn, mx, amin, amax, method=method)
|
339
355
|
|
340
356
|
if center:
|
341
357
|
|
@@ -97,8 +97,10 @@ def batch_generators_eager_to_list(
|
|
97
97
|
for _ in range(n_calls):
|
98
98
|
key, consume = jax.random.split(key)
|
99
99
|
sample = gen_jit(consume)
|
100
|
-
# converts also to numpy
|
100
|
+
# converts also to numpy; but with np.array.flags.writeable = False
|
101
101
|
sample = jax.device_get(sample)
|
102
|
+
# this then sets this flag to True
|
103
|
+
sample = jax.tree_map(np.array, sample)
|
102
104
|
data.extend([jax.tree_map(lambda a: a[i], sample) for i in range(size)])
|
103
105
|
|
104
106
|
return data
|
@@ -424,14 +424,14 @@ def _draw_rxyz(
|
|
424
424
|
# TODO, delete these args and pass a modifified `config` with `replace` instead
|
425
425
|
enable_range_of_motion: bool = True,
|
426
426
|
free_spherical: bool = False,
|
427
|
+
# how often it should try to fullfill the dang_min/max and delta_ang_min/max conds
|
428
|
+
max_iter: int = 5,
|
427
429
|
) -> jax.Array:
|
428
430
|
key_value, consume = jax.random.split(key_value)
|
429
431
|
ANG_0 = jax.random.uniform(consume, minval=config.ang0_min, maxval=config.ang0_max)
|
430
432
|
# `random_angle_over_time` always returns wrapped angles, thus it would be
|
431
433
|
# inconsistent to allow an initial value that is not wrapped
|
432
434
|
ANG_0 = maths.wrap_to_pi(ANG_0)
|
433
|
-
# only used for `delta_ang_min_max` logic
|
434
|
-
max_iter = 5
|
435
435
|
return _random.random_angle_over_time(
|
436
436
|
key_t,
|
437
437
|
key_value,
|
@@ -573,6 +573,8 @@ class System(_Base):
|
|
573
573
|
new_zero: Optional[jax.Array] = None,
|
574
574
|
):
|
575
575
|
"By default damping, stiffness are set to zero."
|
576
|
+
from ring.algorithms import get_joint_model
|
577
|
+
|
576
578
|
q_size, qd_size = Q_WIDTHS[new_joint_type], QD_WIDTHS[new_joint_type]
|
577
579
|
|
578
580
|
def logic_unfreeze_to_spherical(link_name, olt, ola, old, ols, olz):
|
@@ -594,7 +596,13 @@ class System(_Base):
|
|
594
596
|
|
595
597
|
return nlt, nla, nld, nls, nlz
|
596
598
|
|
597
|
-
|
599
|
+
sys = _update_sys_if_replace_joint_type(self, logic_unfreeze_to_spherical)
|
600
|
+
|
601
|
+
jm = get_joint_model(new_joint_type)
|
602
|
+
if jm.init_joint_params is not None:
|
603
|
+
sys = sys.from_str(sys.to_str())
|
604
|
+
|
605
|
+
return sys
|
598
606
|
|
599
607
|
def findall_imus(self) -> list[str]:
|
600
608
|
return [name for name in self.link_names if name[:3] == "imu"]
|
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
|