honeybee-core 1.64.2__tar.gz → 1.64.4__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.
- {honeybee_core-1.64.2/honeybee_core.egg-info → honeybee_core-1.64.4}/PKG-INFO +1 -1
- {honeybee_core-1.64.2 → honeybee_core-1.64.4}/honeybee/model.py +37 -19
- {honeybee_core-1.64.2 → honeybee_core-1.64.4}/honeybee/room.py +22 -7
- {honeybee_core-1.64.2 → honeybee_core-1.64.4/honeybee_core.egg-info}/PKG-INFO +1 -1
- {honeybee_core-1.64.2 → honeybee_core-1.64.4}/.github/workflows/ci.yaml +0 -0
- {honeybee_core-1.64.2 → honeybee_core-1.64.4}/.github/workflows/dependency-release.yaml +0 -0
- {honeybee_core-1.64.2 → honeybee_core-1.64.4}/.gitignore +0 -0
- {honeybee_core-1.64.2 → honeybee_core-1.64.4}/.releaserc.json +0 -0
- {honeybee_core-1.64.2 → honeybee_core-1.64.4}/CODE_OF_CONDUCT.md +0 -0
- {honeybee_core-1.64.2 → honeybee_core-1.64.4}/CONTRIBUTING.md +0 -0
- {honeybee_core-1.64.2 → honeybee_core-1.64.4}/LICENSE +0 -0
- {honeybee_core-1.64.2 → honeybee_core-1.64.4}/MANIFEST.in +0 -0
- {honeybee_core-1.64.2 → honeybee_core-1.64.4}/README.md +0 -0
- {honeybee_core-1.64.2 → honeybee_core-1.64.4}/deploy.sh +0 -0
- {honeybee_core-1.64.2 → honeybee_core-1.64.4}/dev-requirements.txt +0 -0
- {honeybee_core-1.64.2 → honeybee_core-1.64.4}/docs/_build/.nojekyll +0 -0
- {honeybee_core-1.64.2 → honeybee_core-1.64.4}/docs/_build/README.md +0 -0
- {honeybee_core-1.64.2 → honeybee_core-1.64.4}/docs/_build/docs/README.md +0 -0
- {honeybee_core-1.64.2 → honeybee_core-1.64.4}/docs/_static/custom.css +0 -0
- {honeybee_core-1.64.2 → honeybee_core-1.64.4}/docs/_templates/layout.html +0 -0
- {honeybee_core-1.64.2 → honeybee_core-1.64.4}/docs/cli/index.rst +0 -0
- {honeybee_core-1.64.2 → honeybee_core-1.64.4}/docs/conf.py +0 -0
- {honeybee_core-1.64.2 → honeybee_core-1.64.4}/docs/index.rst +0 -0
- {honeybee_core-1.64.2 → honeybee_core-1.64.4}/honeybee/__init__.py +0 -0
- {honeybee_core-1.64.2 → honeybee_core-1.64.4}/honeybee/__main__.py +0 -0
- {honeybee_core-1.64.2 → honeybee_core-1.64.4}/honeybee/_base.py +0 -0
- {honeybee_core-1.64.2 → honeybee_core-1.64.4}/honeybee/_basewithshade.py +0 -0
- {honeybee_core-1.64.2 → honeybee_core-1.64.4}/honeybee/_lockable.py +0 -0
- {honeybee_core-1.64.2 → honeybee_core-1.64.4}/honeybee/altnumber.py +0 -0
- {honeybee_core-1.64.2 → honeybee_core-1.64.4}/honeybee/aperture.py +0 -0
- {honeybee_core-1.64.2 → honeybee_core-1.64.4}/honeybee/boundarycondition.py +0 -0
- {honeybee_core-1.64.2 → honeybee_core-1.64.4}/honeybee/checkdup.py +0 -0
- {honeybee_core-1.64.2 → honeybee_core-1.64.4}/honeybee/cli/__init__.py +0 -0
- {honeybee_core-1.64.2 → honeybee_core-1.64.4}/honeybee/cli/compare.py +0 -0
- {honeybee_core-1.64.2 → honeybee_core-1.64.4}/honeybee/cli/create.py +0 -0
- {honeybee_core-1.64.2 → honeybee_core-1.64.4}/honeybee/cli/edit.py +0 -0
- {honeybee_core-1.64.2 → honeybee_core-1.64.4}/honeybee/cli/lib.py +0 -0
- {honeybee_core-1.64.2 → honeybee_core-1.64.4}/honeybee/cli/setconfig.py +0 -0
- {honeybee_core-1.64.2 → honeybee_core-1.64.4}/honeybee/cli/validate.py +0 -0
- {honeybee_core-1.64.2 → honeybee_core-1.64.4}/honeybee/colorobj.py +0 -0
- {honeybee_core-1.64.2 → honeybee_core-1.64.4}/honeybee/config.json +0 -0
- {honeybee_core-1.64.2 → honeybee_core-1.64.4}/honeybee/config.py +0 -0
- {honeybee_core-1.64.2 → honeybee_core-1.64.4}/honeybee/dictutil.py +0 -0
- {honeybee_core-1.64.2 → honeybee_core-1.64.4}/honeybee/door.py +0 -0
- {honeybee_core-1.64.2 → honeybee_core-1.64.4}/honeybee/extensionutil.py +0 -0
- {honeybee_core-1.64.2 → honeybee_core-1.64.4}/honeybee/face.py +0 -0
- {honeybee_core-1.64.2 → honeybee_core-1.64.4}/honeybee/facetype.py +0 -0
- {honeybee_core-1.64.2 → honeybee_core-1.64.4}/honeybee/logutil.py +0 -0
- {honeybee_core-1.64.2 → honeybee_core-1.64.4}/honeybee/orientation.py +0 -0
- {honeybee_core-1.64.2 → honeybee_core-1.64.4}/honeybee/properties.py +0 -0
- {honeybee_core-1.64.2 → honeybee_core-1.64.4}/honeybee/search.py +0 -0
- {honeybee_core-1.64.2 → honeybee_core-1.64.4}/honeybee/shade.py +0 -0
- {honeybee_core-1.64.2 → honeybee_core-1.64.4}/honeybee/shademesh.py +0 -0
- {honeybee_core-1.64.2 → honeybee_core-1.64.4}/honeybee/typing.py +0 -0
- {honeybee_core-1.64.2 → honeybee_core-1.64.4}/honeybee/units.py +0 -0
- {honeybee_core-1.64.2 → honeybee_core-1.64.4}/honeybee/writer/__init__.py +0 -0
- {honeybee_core-1.64.2 → honeybee_core-1.64.4}/honeybee/writer/aperture.py +0 -0
- {honeybee_core-1.64.2 → honeybee_core-1.64.4}/honeybee/writer/door.py +0 -0
- {honeybee_core-1.64.2 → honeybee_core-1.64.4}/honeybee/writer/face.py +0 -0
- {honeybee_core-1.64.2 → honeybee_core-1.64.4}/honeybee/writer/model.py +0 -0
- {honeybee_core-1.64.2 → honeybee_core-1.64.4}/honeybee/writer/room.py +0 -0
- {honeybee_core-1.64.2 → honeybee_core-1.64.4}/honeybee/writer/shade.py +0 -0
- {honeybee_core-1.64.2 → honeybee_core-1.64.4}/honeybee/writer/shademesh.py +0 -0
- {honeybee_core-1.64.2 → honeybee_core-1.64.4}/honeybee_core.egg-info/SOURCES.txt +0 -0
- {honeybee_core-1.64.2 → honeybee_core-1.64.4}/honeybee_core.egg-info/dependency_links.txt +0 -0
- {honeybee_core-1.64.2 → honeybee_core-1.64.4}/honeybee_core.egg-info/entry_points.txt +0 -0
- {honeybee_core-1.64.2 → honeybee_core-1.64.4}/honeybee_core.egg-info/requires.txt +0 -0
- {honeybee_core-1.64.2 → honeybee_core-1.64.4}/honeybee_core.egg-info/top_level.txt +0 -0
- {honeybee_core-1.64.2 → honeybee_core-1.64.4}/requirements.txt +0 -0
- {honeybee_core-1.64.2 → honeybee_core-1.64.4}/setup.cfg +0 -0
- {honeybee_core-1.64.2 → honeybee_core-1.64.4}/setup.py +0 -0
- {honeybee_core-1.64.2 → honeybee_core-1.64.4}/tests/__init__.py +0 -0
- {honeybee_core-1.64.2 → honeybee_core-1.64.4}/tests/aperture_test.py +0 -0
- {honeybee_core-1.64.2 → honeybee_core-1.64.4}/tests/boundary_condition_test.py +0 -0
- {honeybee_core-1.64.2 → honeybee_core-1.64.4}/tests/cli_compare_test.py +0 -0
- {honeybee_core-1.64.2 → honeybee_core-1.64.4}/tests/cli_create_test.py +0 -0
- {honeybee_core-1.64.2 → honeybee_core-1.64.4}/tests/cli_edit_test.py +0 -0
- {honeybee_core-1.64.2 → honeybee_core-1.64.4}/tests/cli_validate_test.py +0 -0
- {honeybee_core-1.64.2 → honeybee_core-1.64.4}/tests/colorobj_test.py +0 -0
- {honeybee_core-1.64.2 → honeybee_core-1.64.4}/tests/config_test.py +0 -0
- {honeybee_core-1.64.2 → honeybee_core-1.64.4}/tests/dictutil_test.py +0 -0
- {honeybee_core-1.64.2 → honeybee_core-1.64.4}/tests/door_test.py +0 -0
- {honeybee_core-1.64.2 → honeybee_core-1.64.4}/tests/face_test.py +0 -0
- {honeybee_core-1.64.2 → honeybee_core-1.64.4}/tests/facetype_test.py +0 -0
- {honeybee_core-1.64.2 → honeybee_core-1.64.4}/tests/json/ShoeBox.json +0 -0
- {honeybee_core-1.64.2 → honeybee_core-1.64.4}/tests/json/bad_geometry_model.hbjson +0 -0
- {honeybee_core-1.64.2 → honeybee_core-1.64.4}/tests/json/colliding_room_volumes.hbjson +0 -0
- {honeybee_core-1.64.2 → honeybee_core-1.64.4}/tests/json/compare_model_1.hbjson +0 -0
- {honeybee_core-1.64.2 → honeybee_core-1.64.4}/tests/json/compare_model_2.hbjson +0 -0
- {honeybee_core-1.64.2 → honeybee_core-1.64.4}/tests/json/complex_polyfaces.json +0 -0
- {honeybee_core-1.64.2 → honeybee_core-1.64.4}/tests/json/minor_geometry/existing_model.hbjson +0 -0
- {honeybee_core-1.64.2 → honeybee_core-1.64.4}/tests/json/minor_geometry/updated_model.hbjson +0 -0
- {honeybee_core-1.64.2 → honeybee_core-1.64.4}/tests/json/mismatched_area_adj.hbjson +0 -0
- {honeybee_core-1.64.2 → honeybee_core-1.64.4}/tests/json/model_with_adiabatic.hbjson +0 -0
- {honeybee_core-1.64.2 → honeybee_core-1.64.4}/tests/json/model_with_holes.hbjson +0 -0
- {honeybee_core-1.64.2 → honeybee_core-1.64.4}/tests/json/model_without_adjacency.hbjson +0 -0
- {honeybee_core-1.64.2 → honeybee_core-1.64.4}/tests/json/nonascii_face.json +0 -0
- {honeybee_core-1.64.2 → honeybee_core-1.64.4}/tests/json/polygons_for_gap_boundary.json +0 -0
- {honeybee_core-1.64.2 → honeybee_core-1.64.4}/tests/json/room_for_window_offset.hbjson +0 -0
- {honeybee_core-1.64.2 → honeybee_core-1.64.4}/tests/json/single_family_home.hbjson +0 -0
- {honeybee_core-1.64.2 → honeybee_core-1.64.4}/tests/lockable_test.py +0 -0
- {honeybee_core-1.64.2 → honeybee_core-1.64.4}/tests/model_test.py +0 -0
- {honeybee_core-1.64.2 → honeybee_core-1.64.4}/tests/orientation_test.py +0 -0
- {honeybee_core-1.64.2 → honeybee_core-1.64.4}/tests/room_test.py +0 -0
- {honeybee_core-1.64.2 → honeybee_core-1.64.4}/tests/search_test.py +0 -0
- {honeybee_core-1.64.2 → honeybee_core-1.64.4}/tests/shade_test.py +0 -0
- {honeybee_core-1.64.2 → honeybee_core-1.64.4}/tests/shademesh_test.py +0 -0
- {honeybee_core-1.64.2 → honeybee_core-1.64.4}/tests/stl/cube_ascii.stl +0 -0
- {honeybee_core-1.64.2 → honeybee_core-1.64.4}/tests/stl/cube_binary.stl +0 -0
- {honeybee_core-1.64.2 → honeybee_core-1.64.4}/tests/typing_test.py +0 -0
- {honeybee_core-1.64.2 → honeybee_core-1.64.4}/tests/units_test.py +0 -0
|
@@ -1478,7 +1478,7 @@ class Model(_Base):
|
|
|
1478
1478
|
)
|
|
1479
1479
|
return shades
|
|
1480
1480
|
|
|
1481
|
-
def classified_envelope_edges(self, tolerance=None, exclude_coplanar=
|
|
1481
|
+
def classified_envelope_edges(self, tolerance=None, exclude_coplanar=True):
|
|
1482
1482
|
"""Get classified edges of this Model's envelope based on Faces they adjoin.
|
|
1483
1483
|
|
|
1484
1484
|
The edges returned by this method will only exist along the exterior
|
|
@@ -1490,7 +1490,7 @@ class Model(_Base):
|
|
|
1490
1490
|
considered equivalent. If None, the Model's tolerance will be used.
|
|
1491
1491
|
exclude_coplanar: Boolean to note whether edges falling between two
|
|
1492
1492
|
coplanar Faces in the building envelope should be included
|
|
1493
|
-
in the result (False) or excluded from it (True). (Default:
|
|
1493
|
+
in the result (False) or excluded from it (True). (Default: True).
|
|
1494
1494
|
|
|
1495
1495
|
Returns:
|
|
1496
1496
|
A tuple with eight items where each item is a list containing
|
|
@@ -1562,43 +1562,61 @@ class Model(_Base):
|
|
|
1562
1562
|
- window_mullions - Apertures meet one another.
|
|
1563
1563
|
|
|
1564
1564
|
- door_frames - Doors meet their parent exterior wall or roof.
|
|
1565
|
+
|
|
1566
|
+
- door_mullions - Doors meet one another.
|
|
1565
1567
|
"""
|
|
1566
|
-
# set up
|
|
1567
|
-
window_frames, window_mullions = [], []
|
|
1568
|
+
# set up variables to be used for all sub_faces
|
|
1568
1569
|
tol = tolerance if tolerance is not None else self.tolerance
|
|
1569
1570
|
a_tol = math.radians(angle_tolerance) if angle_tolerance is not None else \
|
|
1570
1571
|
math.radians(self.angle_tolerance)
|
|
1571
1572
|
mul_thick = tol if mullion_thickness is None else mullion_thickness
|
|
1572
1573
|
|
|
1574
|
+
# get the edges of the sub_faces
|
|
1575
|
+
window_frames, window_mullions = \
|
|
1576
|
+
self._classify_mullions(self.apertures, mul_thick, tol, a_tol)
|
|
1577
|
+
door_frames, door_mullions = \
|
|
1578
|
+
self._classify_mullions(self.doors, mul_thick, tol, a_tol)
|
|
1579
|
+
return window_frames, window_mullions, door_frames, door_mullions
|
|
1580
|
+
|
|
1581
|
+
@staticmethod
|
|
1582
|
+
def _classify_mullions(sub_faces, mul_thick, tol, a_tol):
|
|
1583
|
+
"""Organize subface edges depending on whether they are frames or mullions."""
|
|
1584
|
+
sub_face_frames, sub_face_mullions = [], []
|
|
1573
1585
|
# group the apertures by the plane in which they exist
|
|
1574
|
-
|
|
1575
|
-
|
|
1576
|
-
|
|
1577
|
-
|
|
1586
|
+
coplanar_dict = {}
|
|
1587
|
+
sub_faces = [sf for sf in sub_faces
|
|
1588
|
+
if isinstance(sf.boundary_condition, Outdoors)]
|
|
1589
|
+
if len(sub_faces) != 0:
|
|
1590
|
+
coplanar_dict = {sub_faces[0].geometry.plane: [sub_faces[0]]}
|
|
1591
|
+
for sf in sub_faces[1:]:
|
|
1578
1592
|
for pln, f_list in coplanar_dict.items():
|
|
1579
|
-
if
|
|
1580
|
-
f_list.append(
|
|
1593
|
+
if sf.geometry.plane.is_coplanar_tolerance(pln, tol, a_tol):
|
|
1594
|
+
f_list.append(sf)
|
|
1581
1595
|
break
|
|
1582
1596
|
else: # the first face with this type of plane
|
|
1583
|
-
coplanar_dict[
|
|
1597
|
+
coplanar_dict[sf.geometry.plane] = [sf]
|
|
1584
1598
|
|
|
1585
1599
|
# for each group, intersect their edges and extract edges from a Polyface3D
|
|
1586
|
-
for plane,
|
|
1600
|
+
for plane, sfs in coplanar_dict.items():
|
|
1587
1601
|
# intersect edges that are close enough to one another within thickness
|
|
1588
1602
|
polygons = []
|
|
1589
|
-
for
|
|
1590
|
-
pts_2d = [plane.xyz_to_xy(pt) for pt in
|
|
1591
|
-
|
|
1603
|
+
for sf in sfs:
|
|
1604
|
+
pts_2d = [plane.xyz_to_xy(pt) for pt in sf.geometry.boundary]
|
|
1605
|
+
try:
|
|
1606
|
+
poly = Polygon2D(pts_2d).remove_colinear_vertices(mul_thick)
|
|
1607
|
+
polygons.append(poly)
|
|
1608
|
+
except AssertionError:
|
|
1609
|
+
pass # too small of a geometry
|
|
1592
1610
|
polygons = Polygon2D.intersect_polygon_segments(polygons, mul_thick)
|
|
1593
1611
|
faces = []
|
|
1594
1612
|
for poly in polygons:
|
|
1595
|
-
faces.append(Face3D([plane.xy_to_xyz(pt) for pt in poly]))
|
|
1613
|
+
faces.append(Face3D([plane.xy_to_xyz(pt) for pt in poly], plane))
|
|
1596
1614
|
# create a joined Polyface3D and classify the edges
|
|
1597
1615
|
ap_polyface = Polyface3D.from_faces(faces, mul_thick)
|
|
1598
|
-
|
|
1599
|
-
|
|
1616
|
+
sub_face_frames.extend(ap_polyface.naked_edges)
|
|
1617
|
+
sub_face_mullions.extend(ap_polyface.internal_edges)
|
|
1600
1618
|
|
|
1601
|
-
return
|
|
1619
|
+
return sub_face_frames, sub_face_mullions
|
|
1602
1620
|
|
|
1603
1621
|
def add_prefix(self, prefix):
|
|
1604
1622
|
"""Change the identifier of this object and child objects by inserting a prefix.
|
|
@@ -6,8 +6,8 @@ import re
|
|
|
6
6
|
import uuid
|
|
7
7
|
|
|
8
8
|
from ladybug_geometry.geometry2d import Point2D, Vector2D, Polygon2D
|
|
9
|
-
from ladybug_geometry.geometry3d import Point3D, Vector3D, Ray3D,
|
|
10
|
-
Mesh3D, Polyface3D
|
|
9
|
+
from ladybug_geometry.geometry3d import Point3D, Vector3D, Ray3D, LineSegment3D, \
|
|
10
|
+
Plane, Face3D, Mesh3D, Polyface3D
|
|
11
11
|
from ladybug_geometry.bounding import overlapping_bounding_boxes
|
|
12
12
|
from ladybug_geometry_polyskel.polysplit import perimeter_core_subpolygons
|
|
13
13
|
|
|
@@ -640,22 +640,37 @@ class Room(_BaseWithShade):
|
|
|
640
640
|
exterior_wall_to_wall, roof_ridge, exposed_floor_to_floor = [], [], []
|
|
641
641
|
underground, interior = [], []
|
|
642
642
|
|
|
643
|
-
# get all of the edges
|
|
644
|
-
|
|
643
|
+
# get all of the edges in a way that colinear edges are broken down
|
|
644
|
+
base_edges = list(self.geometry.internal_edges)
|
|
645
|
+
base_vertices = self.geometry.vertices
|
|
646
|
+
edges = []
|
|
647
|
+
for i, edge in enumerate(base_edges):
|
|
648
|
+
for pt in base_vertices:
|
|
649
|
+
if edge.distance_to_point(pt) < tolerance and \
|
|
650
|
+
not edge.p1.distance_to_point(pt) < tolerance and \
|
|
651
|
+
not edge.p2.distance_to_point(pt) < tolerance:
|
|
652
|
+
# split the edge in two at the point
|
|
653
|
+
base_edges.append(LineSegment3D.from_end_points(edge.p1, pt))
|
|
654
|
+
base_edges.append(LineSegment3D.from_end_points(pt, edge.p2))
|
|
655
|
+
break
|
|
656
|
+
else: # no further subdivision needed
|
|
657
|
+
edges.append(edge)
|
|
658
|
+
|
|
659
|
+
# map the edges to room faces
|
|
645
660
|
edge_faces = [[] for _ in edges]
|
|
646
661
|
for i, edge in enumerate(edges):
|
|
647
662
|
for face in self.faces:
|
|
648
663
|
if overlapping_bounding_boxes(face.geometry, edge, tolerance):
|
|
649
664
|
for f_edge in face.geometry.segments:
|
|
650
|
-
if
|
|
651
|
-
|
|
665
|
+
if f_edge.distance_to_point(edge.p1) < tolerance and \
|
|
666
|
+
f_edge.distance_to_point(edge.p2) < tolerance:
|
|
652
667
|
edge_faces[i].append(face)
|
|
653
668
|
break
|
|
654
669
|
|
|
655
670
|
# classify the edges by analyzing the faces they adjoin
|
|
656
671
|
for edge, faces in zip(edges, edge_faces):
|
|
657
672
|
# first check for cases where the edge should be excluded
|
|
658
|
-
if len(
|
|
673
|
+
if len(faces) <= 1: # not an edge between two faces
|
|
659
674
|
continue
|
|
660
675
|
if angle_tolerance is not None:
|
|
661
676
|
ang_tol = math.radians(angle_tolerance)
|
|
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
|
{honeybee_core-1.64.2 → honeybee_core-1.64.4}/tests/json/minor_geometry/existing_model.hbjson
RENAMED
|
File without changes
|
{honeybee_core-1.64.2 → honeybee_core-1.64.4}/tests/json/minor_geometry/updated_model.hbjson
RENAMED
|
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
|