rdworks 0.39.1__tar.gz → 0.40.1__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.
- {rdworks-0.39.1 → rdworks-0.40.1}/PKG-INFO +1 -1
- {rdworks-0.39.1 → rdworks-0.40.1}/src/rdworks/__init__.py +1 -1
- {rdworks-0.39.1 → rdworks-0.40.1}/src/rdworks/conf.py +14 -5
- {rdworks-0.39.1 → rdworks-0.40.1}/src/rdworks/mol.py +9 -3
- rdworks-0.40.1/src/rdworks/testdata.py +24 -0
- {rdworks-0.39.1 → rdworks-0.40.1}/src/rdworks/utils.py +29 -0
- {rdworks-0.39.1 → rdworks-0.40.1}/src/rdworks.egg-info/PKG-INFO +1 -1
- {rdworks-0.39.1 → rdworks-0.40.1}/src/rdworks.egg-info/SOURCES.txt +1 -0
- {rdworks-0.39.1 → rdworks-0.40.1}/tests/test_basics.py +4 -0
- {rdworks-0.39.1 → rdworks-0.40.1}/LICENSE +0 -0
- {rdworks-0.39.1 → rdworks-0.40.1}/README.md +0 -0
- {rdworks-0.39.1 → rdworks-0.40.1}/pyproject.toml +0 -0
- {rdworks-0.39.1 → rdworks-0.40.1}/setup.cfg +0 -0
- {rdworks-0.39.1 → rdworks-0.40.1}/src/rdworks/autograph/__init__.py +0 -0
- {rdworks-0.39.1 → rdworks-0.40.1}/src/rdworks/autograph/autograph.py +0 -0
- {rdworks-0.39.1 → rdworks-0.40.1}/src/rdworks/autograph/centroid.py +0 -0
- {rdworks-0.39.1 → rdworks-0.40.1}/src/rdworks/autograph/dynamictreecut.py +0 -0
- {rdworks-0.39.1 → rdworks-0.40.1}/src/rdworks/autograph/nmrclust.py +0 -0
- {rdworks-0.39.1 → rdworks-0.40.1}/src/rdworks/autograph/rckmeans.py +0 -0
- {rdworks-0.39.1 → rdworks-0.40.1}/src/rdworks/bitqt/__init__.py +0 -0
- {rdworks-0.39.1 → rdworks-0.40.1}/src/rdworks/bitqt/bitqt.py +0 -0
- {rdworks-0.39.1 → rdworks-0.40.1}/src/rdworks/descriptor.py +0 -0
- {rdworks-0.39.1 → rdworks-0.40.1}/src/rdworks/display.py +0 -0
- {rdworks-0.39.1 → rdworks-0.40.1}/src/rdworks/ionized.py +0 -0
- {rdworks-0.39.1 → rdworks-0.40.1}/src/rdworks/matchedseries.py +0 -0
- {rdworks-0.39.1 → rdworks-0.40.1}/src/rdworks/mollibr.py +0 -0
- {rdworks-0.39.1 → rdworks-0.40.1}/src/rdworks/pka.py +0 -0
- {rdworks-0.39.1 → rdworks-0.40.1}/src/rdworks/predefined/Asinex_fragment.xml +0 -0
- {rdworks-0.39.1 → rdworks-0.40.1}/src/rdworks/predefined/Astex_RO3.xml +0 -0
- {rdworks-0.39.1 → rdworks-0.40.1}/src/rdworks/predefined/Baell2010_PAINS/Baell2010A.xml +0 -0
- {rdworks-0.39.1 → rdworks-0.40.1}/src/rdworks/predefined/Baell2010_PAINS/Baell2010B.xml +0 -0
- {rdworks-0.39.1 → rdworks-0.40.1}/src/rdworks/predefined/Baell2010_PAINS/Baell2010C.xml +0 -0
- {rdworks-0.39.1 → rdworks-0.40.1}/src/rdworks/predefined/Baell2010_PAINS/PAINS-less-than-015-hits.xml +0 -0
- {rdworks-0.39.1 → rdworks-0.40.1}/src/rdworks/predefined/Baell2010_PAINS/PAINS-less-than-150-hits.xml +0 -0
- {rdworks-0.39.1 → rdworks-0.40.1}/src/rdworks/predefined/Baell2010_PAINS/PAINS-more-than-150-hits.xml +0 -0
- {rdworks-0.39.1 → rdworks-0.40.1}/src/rdworks/predefined/Baell2010_PAINS/makexml.py +0 -0
- {rdworks-0.39.1 → rdworks-0.40.1}/src/rdworks/predefined/Brenk2008_Dundee/makexml.py +0 -0
- {rdworks-0.39.1 → rdworks-0.40.1}/src/rdworks/predefined/CNS.xml +0 -0
- {rdworks-0.39.1 → rdworks-0.40.1}/src/rdworks/predefined/ChEMBL_Walters/BMS.xml +0 -0
- {rdworks-0.39.1 → rdworks-0.40.1}/src/rdworks/predefined/ChEMBL_Walters/Dundee.xml +0 -0
- {rdworks-0.39.1 → rdworks-0.40.1}/src/rdworks/predefined/ChEMBL_Walters/Glaxo.xml +0 -0
- {rdworks-0.39.1 → rdworks-0.40.1}/src/rdworks/predefined/ChEMBL_Walters/Inpharmatica.xml +0 -0
- {rdworks-0.39.1 → rdworks-0.40.1}/src/rdworks/predefined/ChEMBL_Walters/LINT.xml +0 -0
- {rdworks-0.39.1 → rdworks-0.40.1}/src/rdworks/predefined/ChEMBL_Walters/MLSMR.xml +0 -0
- {rdworks-0.39.1 → rdworks-0.40.1}/src/rdworks/predefined/ChEMBL_Walters/PAINS.xml +0 -0
- {rdworks-0.39.1 → rdworks-0.40.1}/src/rdworks/predefined/ChEMBL_Walters/SureChEMBL.xml +0 -0
- {rdworks-0.39.1 → rdworks-0.40.1}/src/rdworks/predefined/ChEMBL_Walters/makexml.py +0 -0
- {rdworks-0.39.1 → rdworks-0.40.1}/src/rdworks/predefined/Hann1999_Glaxo/Hann1999.xml +0 -0
- {rdworks-0.39.1 → rdworks-0.40.1}/src/rdworks/predefined/Hann1999_Glaxo/Hann1999Acid.xml +0 -0
- {rdworks-0.39.1 → rdworks-0.40.1}/src/rdworks/predefined/Hann1999_Glaxo/Hann1999Base.xml +0 -0
- {rdworks-0.39.1 → rdworks-0.40.1}/src/rdworks/predefined/Hann1999_Glaxo/Hann1999ElPh.xml +0 -0
- {rdworks-0.39.1 → rdworks-0.40.1}/src/rdworks/predefined/Hann1999_Glaxo/Hann1999NuPh.xml +0 -0
- {rdworks-0.39.1 → rdworks-0.40.1}/src/rdworks/predefined/Hann1999_Glaxo/makexml.py +0 -0
- {rdworks-0.39.1 → rdworks-0.40.1}/src/rdworks/predefined/Kazius2005/Kazius2005.xml +0 -0
- {rdworks-0.39.1 → rdworks-0.40.1}/src/rdworks/predefined/Kazius2005/makexml.py +0 -0
- {rdworks-0.39.1 → rdworks-0.40.1}/src/rdworks/predefined/ZINC_druglike.xml +0 -0
- {rdworks-0.39.1 → rdworks-0.40.1}/src/rdworks/predefined/ZINC_fragment.xml +0 -0
- {rdworks-0.39.1 → rdworks-0.40.1}/src/rdworks/predefined/ZINC_leadlike.xml +0 -0
- {rdworks-0.39.1 → rdworks-0.40.1}/src/rdworks/predefined/fragment.xml +0 -0
- {rdworks-0.39.1 → rdworks-0.40.1}/src/rdworks/predefined/ionized/simple_smarts_pattern.csv +0 -0
- {rdworks-0.39.1 → rdworks-0.40.1}/src/rdworks/predefined/ionized/smarts_pattern.csv +0 -0
- {rdworks-0.39.1 → rdworks-0.40.1}/src/rdworks/predefined/misc/makexml.py +0 -0
- {rdworks-0.39.1 → rdworks-0.40.1}/src/rdworks/predefined/misc/reactive-part-2.xml +0 -0
- {rdworks-0.39.1 → rdworks-0.40.1}/src/rdworks/predefined/misc/reactive-part-3.xml +0 -0
- {rdworks-0.39.1 → rdworks-0.40.1}/src/rdworks/predefined/misc/reactive.xml +0 -0
- {rdworks-0.39.1 → rdworks-0.40.1}/src/rdworks/readin.py +0 -0
- {rdworks-0.39.1 → rdworks-0.40.1}/src/rdworks/rgroup.py +0 -0
- {rdworks-0.39.1 → rdworks-0.40.1}/src/rdworks/scaffold.py +0 -0
- {rdworks-0.39.1 → rdworks-0.40.1}/src/rdworks/std.py +0 -0
- {rdworks-0.39.1 → rdworks-0.40.1}/src/rdworks/stereoisomers.py +0 -0
- {rdworks-0.39.1 → rdworks-0.40.1}/src/rdworks/tautomers.py +0 -0
- {rdworks-0.39.1 → rdworks-0.40.1}/src/rdworks/torsion.py +0 -0
- {rdworks-0.39.1 → rdworks-0.40.1}/src/rdworks/units.py +0 -0
- {rdworks-0.39.1 → rdworks-0.40.1}/src/rdworks/xml.py +0 -0
- {rdworks-0.39.1 → rdworks-0.40.1}/src/rdworks/xtb/__init__.py +0 -0
- {rdworks-0.39.1 → rdworks-0.40.1}/src/rdworks/xtb/wrapper.py +0 -0
- {rdworks-0.39.1 → rdworks-0.40.1}/src/rdworks.egg-info/dependency_links.txt +0 -0
- {rdworks-0.39.1 → rdworks-0.40.1}/src/rdworks.egg-info/requires.txt +0 -0
- {rdworks-0.39.1 → rdworks-0.40.1}/src/rdworks.egg-info/top_level.txt +0 -0
- {rdworks-0.39.1 → rdworks-0.40.1}/tests/test_decimals.py +0 -0
- {rdworks-0.39.1 → rdworks-0.40.1}/tests/test_gypsumdl.py +0 -0
- {rdworks-0.39.1 → rdworks-0.40.1}/tests/test_iupac_name.py +0 -0
- {rdworks-0.39.1 → rdworks-0.40.1}/tests/test_nn_xtb.py +0 -0
- {rdworks-0.39.1 → rdworks-0.40.1}/tests/test_web.py +0 -0
- {rdworks-0.39.1 → rdworks-0.40.1}/tests/test_xtb_wrapper.py +0 -0
@@ -19,7 +19,7 @@ from PIL import Image
|
|
19
19
|
from rdworks.std import clean_2d
|
20
20
|
from rdworks.torsion import get_torsion_atoms, create_torsion_fragment
|
21
21
|
from rdworks.units import ev2kcalpermol, pm2angstrom
|
22
|
-
from rdworks.utils import recursive_round
|
22
|
+
from rdworks.utils import recursive_round, compress_string, decompress_string
|
23
23
|
from rdworks.xtb.wrapper import GFN2xTB
|
24
24
|
from rdworks.display import render_png, render_svg
|
25
25
|
|
@@ -581,7 +581,7 @@ class Conf:
|
|
581
581
|
return json.dumps(self.props)
|
582
582
|
|
583
583
|
|
584
|
-
def serialize(self, decimals: int = 3) -> str:
|
584
|
+
def serialize(self, decimals: int = 3, compressed: bool = False) -> str:
|
585
585
|
"""Serialize information necessary to rebuild a Conf object.
|
586
586
|
Args:
|
587
587
|
decimals (int, optional): number of decimal places for float data type. Defaults to 3.
|
@@ -598,10 +598,13 @@ class Conf:
|
|
598
598
|
'molblock' : self.to_molblock(),
|
599
599
|
})
|
600
600
|
|
601
|
+
if compressed:
|
602
|
+
serialized = compress_string(serialized)
|
603
|
+
|
601
604
|
return serialized
|
602
605
|
|
603
606
|
|
604
|
-
def deserialize(self, serialized: str) -> Self:
|
607
|
+
def deserialize(self, serialized: str, compressed: bool = False) -> Self:
|
605
608
|
"""De-serialize information and rebuild a Conf object.
|
606
609
|
|
607
610
|
Example:
|
@@ -614,6 +617,9 @@ class Conf:
|
|
614
617
|
Returns:
|
615
618
|
Self: modified self.
|
616
619
|
"""
|
620
|
+
if compressed:
|
621
|
+
serialized = decompress_string(serialized)
|
622
|
+
|
617
623
|
data = json.loads(serialized)
|
618
624
|
|
619
625
|
self.name = data['name']
|
@@ -626,9 +632,12 @@ class Conf:
|
|
626
632
|
return self
|
627
633
|
|
628
634
|
|
629
|
-
def to_molblock(self) -> str:
|
635
|
+
def to_molblock(self, compressed: bool = False) -> str:
|
630
636
|
"""Returns MolBlock"""
|
631
|
-
|
637
|
+
molblock = Chem.MolToMolBlock(self.rdmol)
|
638
|
+
if compressed:
|
639
|
+
molblock = compress_string(molblock)
|
640
|
+
return molblock
|
632
641
|
|
633
642
|
|
634
643
|
def to_xyz(self) -> str:
|
@@ -37,7 +37,7 @@ from rdworks.std import generate_inchi_key, desalt_smiles, standardize, clean_2d
|
|
37
37
|
from rdworks.xml import list_predefined_xml, get_predefined_xml, parse_xml
|
38
38
|
from rdworks.scaffold import rigid_fragment_indices
|
39
39
|
from rdworks.descriptor import rd_descriptor, rd_descriptor_f
|
40
|
-
from rdworks.utils import convert_tril_to_symm, QT, recursive_round
|
40
|
+
from rdworks.utils import convert_tril_to_symm, QT, recursive_round, compress_string, decompress_string
|
41
41
|
from rdworks.units import ev2kcalpermol
|
42
42
|
from rdworks.autograph import NMRCLUST, DynamicTreeCut, RCKmeans, AutoGraph
|
43
43
|
from rdworks.bitqt import BitQT
|
@@ -1558,7 +1558,7 @@ class Mol:
|
|
1558
1558
|
return json.dumps(props)
|
1559
1559
|
|
1560
1560
|
|
1561
|
-
def serialize(self, decimals: int = 2) -> str:
|
1561
|
+
def serialize(self, decimals: int = 2, compressed: bool = False) -> str:
|
1562
1562
|
"""Serialize information necessary to rebuild a Mol object.
|
1563
1563
|
|
1564
1564
|
Args:
|
@@ -1575,10 +1575,13 @@ class Mol:
|
|
1575
1575
|
'confs' : [conf.serialize() for conf in self.confs],
|
1576
1576
|
})
|
1577
1577
|
|
1578
|
+
if compressed:
|
1579
|
+
serialized = compress_string(serialized)
|
1580
|
+
|
1578
1581
|
return serialized
|
1579
1582
|
|
1580
1583
|
|
1581
|
-
def deserialize(self, serialized: str) -> Self:
|
1584
|
+
def deserialize(self, serialized: str, compressed: bool = False) -> Self:
|
1582
1585
|
"""De-serialize the information and build a new Mol object.
|
1583
1586
|
|
1584
1587
|
Example:
|
@@ -1591,6 +1594,9 @@ class Mol:
|
|
1591
1594
|
Returns:
|
1592
1595
|
Self: modified self.
|
1593
1596
|
"""
|
1597
|
+
if compressed:
|
1598
|
+
serialized = decompress_string(serialized)
|
1599
|
+
|
1594
1600
|
data = json.loads(serialized)
|
1595
1601
|
|
1596
1602
|
self.name = data['name']
|
@@ -0,0 +1,24 @@
|
|
1
|
+
drugs = {
|
2
|
+
'Acetaminophen': 'CC(=O)Nc1ccc(O)cc1',
|
3
|
+
'Aspirin': 'CC(=O)OC1=CC=CC=C1C(=O)O',
|
4
|
+
'Atorvastatin': 'CC(C)C1=C(C(=C(N1CC[C@H](C[C@H](CC(=O)O)O)O)C2=CC=C(C=C2)F)C3=CC=CC=C3)C(=O)NC4=CC=CC=C4',
|
5
|
+
'Atovaquone': 'C1CC(CCC1C2=CC=C(C=C2)Cl)C3=C(C4=CC=CC=C4C(=O)C3=O)O',
|
6
|
+
'Cefdinir': 'C=CC1=C(N2[C@@H]([C@@H](C2=O)NC(=O)/C(=N\\O)/C3=CSC(=N3)N)SC1)C(=O)O',
|
7
|
+
'Chlorprothixene': 'CN(CC/C=C1C2=CC=CC=C2SC3=C/1C=C(Cl)C=C3)C',
|
8
|
+
'Cimetidine': 'CC1=C(N=CN1)CSCCNC(=NC)NC#N',
|
9
|
+
'Clomipramine': 'CN(C)CCCN1C2=CC=CC=C2CCC3=C1C=C(C=C3)Cl',
|
10
|
+
'Ethopropazine': 'CCN(CC)C(C)CN1C2=CC=CC=C2SC3=CC=CC=C31',
|
11
|
+
'Famotidine': 'C1=C(N=C(S1)N=C(N)N)CSCC/C(=N/S(=O)(=O)N)/N',
|
12
|
+
'Fluconazole': 'C1=CC(=C(C=C1F)F)C(CN2C=NC=N2)(CN3C=NC=N3)O',
|
13
|
+
'Granisetron': 'CN1[C@@H]2CCC[C@H]1CC(C2)NC(=O)C3=NN(C4=CC=CC=C43)C',
|
14
|
+
'Leflunomide': 'CC1=C(C=NO1)C(=O)NC2=CC=C(C=C2)C(F)(F)F',
|
15
|
+
'Linezolid': 'CC(=O)NC[C@H]1CN(C(=O)O1)C2=CC(=C(C=C2)N3CCOCC3)F',
|
16
|
+
'Methixene': 'CN1CCCC(C1)CC2C3=CC=CC=C3SC4=CC=CC=C24',
|
17
|
+
'Molindone': 'CCC1=C(NC2=C1C(=O)C(CC2)CN3CCOCC3)C',
|
18
|
+
'Paroxetine': 'C1CNC[C@H]([C@@H]1C2=CC=C(C=C2)F)COC3=CC4=C(C=C3)OCO4',
|
19
|
+
'Pergolide': 'CCCN1C[C@@H](C[C@H]2[C@H]1CC3=CNC4=CC=CC2=C34)CSC',
|
20
|
+
'Rifampin': 'C[C@H]1/C=C/C=C(\\C(=O)NC2=C(C(=C3C(=C2O)C(=C(C4=C3C(=O)[C@](O4)(O/C=C/[C@@H]([C@H]([C@H]([C@@H]([C@@H]([C@@H]([C@H]1O)C)O)C)OC(=O)C)C)OC)C)C)O)O)/C=N/N5CCN(CC5)C)/C',
|
21
|
+
'Simvastatin': 'O=C(O[C@@H]1[C@H]3C(=C/[C@H](C)C1)\\C=C/[C@@H]([C@@H]3CC[C@H]2OC(=O)C[C@H](O)C2)C)C(C)(C)CC',
|
22
|
+
'Sitagliptin': 'Fc1cc(c(F)cc1F)C[C@@H](N)CC(=O)N3Cc2nnc(n2CC3)C(F)(F)F',
|
23
|
+
'Sofosbuvir': 'C[C@@H](C(OC(C)C)=O)N[P@](OC[C@@H]1[C@H]([C@@](F)([C@@H](O1)N2C=CC(NC2=O)=O)C)O)(OC3=CC=CC=C3)=O',
|
24
|
+
}
|
@@ -1,6 +1,8 @@
|
|
1
1
|
import numpy as np
|
2
2
|
import math
|
3
3
|
import operator
|
4
|
+
import gzip
|
5
|
+
import base64
|
4
6
|
|
5
7
|
from pathlib import Path
|
6
8
|
from types import SimpleNamespace
|
@@ -14,6 +16,33 @@ from rdkit import Chem
|
|
14
16
|
from rdworks.autograph.centroid import centroid_medoid
|
15
17
|
|
16
18
|
|
19
|
+
def compress_string(text: str) -> str:
|
20
|
+
"""compress string to base64-encoded string.
|
21
|
+
|
22
|
+
Args:
|
23
|
+
text (str): original string.
|
24
|
+
|
25
|
+
Returns:
|
26
|
+
str: base64-encoded compressed string.
|
27
|
+
"""
|
28
|
+
compressed_bytes = gzip.compress(text.encode('utf-8'))
|
29
|
+
return base64.b64encode(compressed_bytes).decode('utf-8')
|
30
|
+
|
31
|
+
|
32
|
+
def decompress_string(compressed_text: str) -> str:
|
33
|
+
"""decompress base64-encoded string to original string.
|
34
|
+
|
35
|
+
Args:
|
36
|
+
compressed_text (str): base64-encoded compressed string.
|
37
|
+
|
38
|
+
Returns:
|
39
|
+
str: original string.
|
40
|
+
"""
|
41
|
+
compressed_bytes = base64.b64decode(compressed_text)
|
42
|
+
decompressed_text = gzip.decompress(compressed_bytes).decode('utf-8')
|
43
|
+
return decompressed_text
|
44
|
+
|
45
|
+
|
17
46
|
def compute(fn:Callable, largs: list, **kwargs) -> list:
|
18
47
|
max_workers = kwargs.get('max_workers', 1)
|
19
48
|
chunksize = kwargs.get('chunksize', 10)
|
@@ -42,6 +42,8 @@ drug_smiles = [
|
|
42
42
|
"CC(=O)OC1=CC=CC=C1C(=O)O",
|
43
43
|
"C1=CC(=C(C=C1F)F)C(CN2C=NC=N2)(CN3C=NC=N3)O",
|
44
44
|
"CC(=O)NC[C@H]1CN(C(=O)O1)C2=CC(=C(C=C2)N3CCOCC3)F", # [19]
|
45
|
+
"CC(C)C1=C(C(=C(N1CC[C@H](C[C@H](CC(=O)O)O)O)C2=CC=C(C=C2)F)C3=CC=CC=C3)C(=O)NC4=CC=CC=C4",
|
46
|
+
"CC(=O)Nc1ccc(O)cc1",
|
45
47
|
]
|
46
48
|
|
47
49
|
drug_names = [
|
@@ -49,6 +51,7 @@ drug_names = [
|
|
49
51
|
"Granisetron", "Pergolide", "Molindone", "Rifampin", "Cefdinir",
|
50
52
|
"Cimetidine", "Famotidine", "Atovaquone", "Chlorprothixene", "Clomipramine",
|
51
53
|
"Methixene", "Ethopropazine", "Aspirin", "Fluconazole", "Linezolid",
|
54
|
+
"Atorvastatin", "Acetaminophen"
|
52
55
|
]
|
53
56
|
|
54
57
|
# Lahey, S.-L. J., Thien Phuc, T. N. & Rowley, C. N.
|
@@ -511,6 +514,7 @@ def test_torsion_fragment_from_conf():
|
|
511
514
|
assert frag_ijkl == ta2[0]
|
512
515
|
|
513
516
|
ref_conf2 = ref_conf2.torsion_energies(calculator='MMFF94', interval=15)
|
517
|
+
ref_conf3 = ref_conf2.torsion_energies_one(calculator='MMFF94', indices=frag_ijkl)
|
514
518
|
|
515
519
|
|
516
520
|
def test_torsion_energies():
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|