PyPtt 1.2.13.dev90917__tar.gz → 1.2.15__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.
- {pyptt-1.2.13.dev90917 → pyptt-1.2.15}/PKG-INFO +2 -2
- {pyptt-1.2.13.dev90917 → pyptt-1.2.15}/PyPtt/__init__.py +1 -1
- {pyptt-1.2.13.dev90917 → pyptt-1.2.15}/PyPtt/_api_comment.py +22 -17
- {pyptt-1.2.13.dev90917 → pyptt-1.2.15}/PyPtt/_api_get_post.py +7 -3
- {pyptt-1.2.13.dev90917 → pyptt-1.2.15}/PyPtt/_api_loginout.py +6 -33
- pyptt-1.2.15/PyPtt/ssl_config.py +24 -0
- {pyptt-1.2.13.dev90917 → pyptt-1.2.15}/PyPtt.egg-info/PKG-INFO +2 -2
- {pyptt-1.2.13.dev90917 → pyptt-1.2.15}/README.md +2 -2
- {pyptt-1.2.13.dev90917 → pyptt-1.2.15}/setup.py +3 -1
- pyptt-1.2.13.dev90917/PyPtt/ssl_config.py +0 -24
- {pyptt-1.2.13.dev90917 → pyptt-1.2.15}/LICENSE +0 -0
- {pyptt-1.2.13.dev90917 → pyptt-1.2.15}/MANIFEST.in +0 -0
- {pyptt-1.2.13.dev90917 → pyptt-1.2.15}/PyPtt/PTT.py +0 -0
- {pyptt-1.2.13.dev90917 → pyptt-1.2.15}/PyPtt/_api_bucket.py +0 -0
- {pyptt-1.2.13.dev90917 → pyptt-1.2.15}/PyPtt/_api_call_status.py +0 -0
- {pyptt-1.2.13.dev90917 → pyptt-1.2.15}/PyPtt/_api_change_pw.py +0 -0
- {pyptt-1.2.13.dev90917 → pyptt-1.2.15}/PyPtt/_api_del_post.py +0 -0
- {pyptt-1.2.13.dev90917 → pyptt-1.2.15}/PyPtt/_api_get_board_info.py +0 -0
- {pyptt-1.2.13.dev90917 → pyptt-1.2.15}/PyPtt/_api_get_board_list.py +0 -0
- {pyptt-1.2.13.dev90917 → pyptt-1.2.15}/PyPtt/_api_get_bottom_post_list.py +0 -0
- {pyptt-1.2.13.dev90917 → pyptt-1.2.15}/PyPtt/_api_get_favourite_board.py +0 -0
- {pyptt-1.2.13.dev90917 → pyptt-1.2.15}/PyPtt/_api_get_newest_index.py +0 -0
- {pyptt-1.2.13.dev90917 → pyptt-1.2.15}/PyPtt/_api_get_post_index.py +0 -0
- {pyptt-1.2.13.dev90917 → pyptt-1.2.15}/PyPtt/_api_get_time.py +0 -0
- {pyptt-1.2.13.dev90917 → pyptt-1.2.15}/PyPtt/_api_get_user.py +0 -0
- {pyptt-1.2.13.dev90917 → pyptt-1.2.15}/PyPtt/_api_give_money.py +0 -0
- {pyptt-1.2.13.dev90917 → pyptt-1.2.15}/PyPtt/_api_has_new_mail.py +0 -0
- {pyptt-1.2.13.dev90917 → pyptt-1.2.15}/PyPtt/_api_mail.py +0 -0
- {pyptt-1.2.13.dev90917 → pyptt-1.2.15}/PyPtt/_api_mark_post.py +0 -0
- {pyptt-1.2.13.dev90917 → pyptt-1.2.15}/PyPtt/_api_post.py +0 -0
- {pyptt-1.2.13.dev90917 → pyptt-1.2.15}/PyPtt/_api_reply_post.py +0 -0
- {pyptt-1.2.13.dev90917 → pyptt-1.2.15}/PyPtt/_api_search_user.py +0 -0
- {pyptt-1.2.13.dev90917 → pyptt-1.2.15}/PyPtt/_api_set_board_title.py +0 -0
- {pyptt-1.2.13.dev90917 → pyptt-1.2.15}/PyPtt/_api_util.py +0 -0
- {pyptt-1.2.13.dev90917 → pyptt-1.2.15}/PyPtt/check_value.py +0 -0
- {pyptt-1.2.13.dev90917 → pyptt-1.2.15}/PyPtt/command.py +0 -0
- {pyptt-1.2.13.dev90917 → pyptt-1.2.15}/PyPtt/config.py +0 -0
- {pyptt-1.2.13.dev90917 → pyptt-1.2.15}/PyPtt/connect_core.py +0 -0
- {pyptt-1.2.13.dev90917 → pyptt-1.2.15}/PyPtt/data_type.py +0 -0
- {pyptt-1.2.13.dev90917 → pyptt-1.2.15}/PyPtt/exceptions.py +0 -0
- {pyptt-1.2.13.dev90917 → pyptt-1.2.15}/PyPtt/i18n.py +0 -0
- {pyptt-1.2.13.dev90917 → pyptt-1.2.15}/PyPtt/lang_en_US.py +0 -0
- {pyptt-1.2.13.dev90917 → pyptt-1.2.15}/PyPtt/lang_zh_TW.py +0 -0
- {pyptt-1.2.13.dev90917 → pyptt-1.2.15}/PyPtt/lib_util.py +0 -0
- {pyptt-1.2.13.dev90917 → pyptt-1.2.15}/PyPtt/log.py +0 -0
- {pyptt-1.2.13.dev90917 → pyptt-1.2.15}/PyPtt/screens.py +0 -0
- {pyptt-1.2.13.dev90917 → pyptt-1.2.15}/PyPtt/service.py +0 -0
- {pyptt-1.2.13.dev90917 → pyptt-1.2.15}/PyPtt.egg-info/SOURCES.txt +0 -0
- {pyptt-1.2.13.dev90917 → pyptt-1.2.15}/PyPtt.egg-info/dependency_links.txt +0 -0
- {pyptt-1.2.13.dev90917 → pyptt-1.2.15}/PyPtt.egg-info/requires.txt +0 -0
- {pyptt-1.2.13.dev90917 → pyptt-1.2.15}/PyPtt.egg-info/top_level.txt +0 -0
- {pyptt-1.2.13.dev90917 → pyptt-1.2.15}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: PyPtt
|
|
3
|
-
Version: 1.2.
|
|
3
|
+
Version: 1.2.15
|
|
4
4
|
Summary: PyPtt
|
|
5
5
|
Home-page: https://pyptt.cc/
|
|
6
6
|
Author: CodingMan
|
|
@@ -61,7 +61,7 @@ pip install PyPtt
|
|
|
61
61
|
#### 你可以在 Telegram 上找到 PyPtt 社群 [](https://t.me/PyPtt)
|
|
62
62
|
|
|
63
63
|
## 贊助
|
|
64
|
-
####
|
|
64
|
+
#### issue 解太慢嗎?幫我增加一點動力吧!
|
|
65
65
|
####
|
|
66
66
|
#### [](http://paypal.me/CodingMan)
|
|
67
67
|
|
|
@@ -174,26 +174,31 @@ def comment(api, board: str, push_type: data_type.CommentType, push_content: str
|
|
|
174
174
|
max_push_length = 58 - len(api.ptt_id)
|
|
175
175
|
|
|
176
176
|
push_content = push_content.strip()
|
|
177
|
-
|
|
178
177
|
push_list = []
|
|
178
|
+
|
|
179
179
|
while push_content:
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
if index == len(push_content):
|
|
186
|
-
break
|
|
187
|
-
if push_content[index] == '\n':
|
|
188
|
-
jump = 1
|
|
180
|
+
# 先找出符合長度限制的最大子字串
|
|
181
|
+
test_content = push_content
|
|
182
|
+
while test_content:
|
|
183
|
+
if len(test_content.encode('big5uao', 'replace')) <= max_push_length:
|
|
189
184
|
break
|
|
185
|
+
test_content = test_content[:-1]
|
|
186
|
+
|
|
187
|
+
# 找換行符號
|
|
188
|
+
newline_pos = test_content.find('\n')
|
|
189
|
+
if newline_pos != -1:
|
|
190
|
+
# 如果有換行,就切到換行為止
|
|
191
|
+
push_list.append(push_content[:newline_pos])
|
|
192
|
+
push_content = push_content[newline_pos + 1:]
|
|
193
|
+
else:
|
|
194
|
+
# 沒有換行就用符合長度的最大子字串
|
|
195
|
+
if not test_content:
|
|
196
|
+
# 保險起見,避免無限迴圈
|
|
197
|
+
test_content = push_content[:1]
|
|
198
|
+
push_list.append(test_content)
|
|
199
|
+
push_content = push_content[len(test_content):]
|
|
190
200
|
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
push_list.append(push_content[:index])
|
|
194
|
-
push_content = push_content[index + jump:]
|
|
195
|
-
|
|
196
|
-
push_list = filter(None, push_list)
|
|
201
|
+
push_list = list(filter(None, push_list))
|
|
197
202
|
|
|
198
203
|
for comment in push_list:
|
|
199
204
|
|
|
@@ -208,4 +213,4 @@ def comment(api, board: str, push_type: data_type.CommentType, push_content: str
|
|
|
208
213
|
log.logger.info(i18n.wait_for_no_fast_comment)
|
|
209
214
|
time.sleep(5.2)
|
|
210
215
|
|
|
211
|
-
log.logger.info(i18n.comment
|
|
216
|
+
log.logger.info(f"{i18n.comment}...{i18n.success}")
|
|
@@ -50,10 +50,14 @@ def get_post(api, board: str, aid: Optional[str] = None, index: Optional[int] =
|
|
|
50
50
|
if len(board) == 0:
|
|
51
51
|
raise ValueError(f'board error parameter: {board}')
|
|
52
52
|
|
|
53
|
-
if index
|
|
53
|
+
if index > 0 and aid is not None:
|
|
54
54
|
raise ValueError('wrong parameter index and aid can\'t both input')
|
|
55
55
|
|
|
56
|
-
if
|
|
56
|
+
if aid is not None:
|
|
57
|
+
pass
|
|
58
|
+
elif index > 0:
|
|
59
|
+
pass
|
|
60
|
+
else:
|
|
57
61
|
raise ValueError('wrong parameter index or aid must input')
|
|
58
62
|
|
|
59
63
|
search_cmd = None
|
|
@@ -63,7 +67,7 @@ def get_post(api, board: str, aid: Optional[str] = None, index: Optional[int] =
|
|
|
63
67
|
else:
|
|
64
68
|
current_index = api.get_newest_index(data_type.NewIndex.BOARD, board=board)
|
|
65
69
|
|
|
66
|
-
if index is not None:
|
|
70
|
+
if index is not None and index > 0:
|
|
67
71
|
check_value.check_index('index', index, current_index)
|
|
68
72
|
|
|
69
73
|
max_retry = 2
|
|
@@ -45,7 +45,7 @@ def logout(api) -> None:
|
|
|
45
45
|
log.logger.info(i18n.logout, '...', i18n.success)
|
|
46
46
|
|
|
47
47
|
|
|
48
|
-
def login(api, ptt_id: str, ptt_pw: str, kick_other_session: bool):
|
|
48
|
+
def login(api, ptt_id: str, ptt_pw: str, kick_other_session: bool) -> None:
|
|
49
49
|
_api_util.one_thread(api)
|
|
50
50
|
|
|
51
51
|
check_value.check_type(ptt_id, str, 'ptt_id')
|
|
@@ -57,34 +57,17 @@ def login(api, ptt_id: str, ptt_pw: str, kick_other_session: bool):
|
|
|
57
57
|
|
|
58
58
|
api.config.kick_other_session = kick_other_session
|
|
59
59
|
|
|
60
|
-
def kick_other_login_display_msg():
|
|
61
|
-
if api.config.kick_other_session:
|
|
62
|
-
return i18n.kick_other_login
|
|
63
|
-
return i18n.not_kick_other_login
|
|
64
|
-
|
|
65
60
|
def kick_other_login_response(screen):
|
|
66
|
-
if api.config.kick_other_session
|
|
67
|
-
return 'y' + command.enter
|
|
68
|
-
return 'n' + command.enter
|
|
61
|
+
return ('y' if api.config.kick_other_session else 'n') + command.enter
|
|
69
62
|
|
|
70
63
|
api.is_mailbox_full = False
|
|
71
64
|
|
|
72
|
-
# def is_mailbox_full():
|
|
73
|
-
# log.log(
|
|
74
|
-
# api.config,
|
|
75
|
-
# LogLevel.INFO,
|
|
76
|
-
# i18n.MailBoxFull)
|
|
77
|
-
# api.is_mailbox_full = True
|
|
78
|
-
|
|
79
65
|
def register_processing(screen):
|
|
80
66
|
pattern = re.compile(r'[\d]+')
|
|
81
67
|
api.process_picks = int(pattern.search(screen).group(0))
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
ptt_id = ptt_id.strip()
|
|
87
|
-
ptt_pw = ptt_pw.strip()
|
|
68
|
+
|
|
69
|
+
ptt_id = ptt_id[:12].strip()
|
|
70
|
+
ptt_pw = ptt_pw[:8].strip()
|
|
88
71
|
|
|
89
72
|
api.ptt_id = ptt_id
|
|
90
73
|
api._ptt_pw = ptt_pw
|
|
@@ -108,11 +91,7 @@ def login(api, ptt_id: str, ptt_pw: str, kick_other_session: bool):
|
|
|
108
91
|
connect_core.TargetUnit('有一篇文章尚未完成', response='Q' + command.enter),
|
|
109
92
|
connect_core.TargetUnit(
|
|
110
93
|
'請重新設定您的聯絡信箱', break_detect=True, exceptions_=exceptions.ResetYourContactEmail()),
|
|
111
|
-
# connect_core.TargetUnit(
|
|
112
|
-
# i18n.in_login_process_please_wait,
|
|
113
|
-
# '登入中,請稍候'),
|
|
114
94
|
connect_core.TargetUnit('密碼正確'),
|
|
115
|
-
# 密碼正確
|
|
116
95
|
connect_core.TargetUnit('您想刪除其他重複登入的連線嗎', response=kick_other_login_response),
|
|
117
96
|
connect_core.TargetUnit('◆ 您的註冊申請單尚在處理中', response=command.enter, handler=register_processing),
|
|
118
97
|
connect_core.TargetUnit('任意鍵', response=' '),
|
|
@@ -162,7 +141,6 @@ def login(api, ptt_id: str, ptt_pw: str, kick_other_session: bool):
|
|
|
162
141
|
|
|
163
142
|
if current_capacity > max_capacity:
|
|
164
143
|
api.is_mailbox_full = True
|
|
165
|
-
|
|
166
144
|
log.logger.info(i18n.mail_box_full)
|
|
167
145
|
|
|
168
146
|
if api.is_mailbox_full:
|
|
@@ -182,12 +160,7 @@ def login(api, ptt_id: str, ptt_pw: str, kick_other_session: bool):
|
|
|
182
160
|
|
|
183
161
|
ori_screen = api.connect_core.get_screen_queue()[-1]
|
|
184
162
|
|
|
185
|
-
is_login =
|
|
186
|
-
|
|
187
|
-
for t in screens.Target.MainMenu:
|
|
188
|
-
if t not in ori_screen:
|
|
189
|
-
is_login = False
|
|
190
|
-
break
|
|
163
|
+
is_login = all(t in ori_screen for t in screens.Target.MainMenu)
|
|
191
164
|
|
|
192
165
|
if not is_login:
|
|
193
166
|
raise exceptions.LoginError()
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
key = """-----BEGIN EC PARAMETERS-----
|
|
2
|
+
BggqhkjOPQMBBw==
|
|
3
|
+
-----END EC PARAMETERS-----
|
|
4
|
+
-----BEGIN EC PRIVATE KEY-----
|
|
5
|
+
MHcCAQEEIOyDTLND3RsmE5QK1ZLy4X0J11ANZL2kg7vCAhbUu+jfoAoGCCqGSM49
|
|
6
|
+
AwEHoUQDQgAE7G3geMo6gWleTxHcT6YM53cUZOBhvZnNjqa8ryFY/72JDE8iwDyg
|
|
7
|
+
dE2GV/m+7v/ZqSrGWaCJvqGIHviz8vqFew==
|
|
8
|
+
-----END EC PRIVATE KEY-----
|
|
9
|
+
"""
|
|
10
|
+
|
|
11
|
+
cert = """-----BEGIN CERTIFICATE-----
|
|
12
|
+
MIIB6TCCAY8CFApGApebO1nE8H1SGJZqLo92zC75MAoGCCqGSM49BAMCMHcxCzAJ
|
|
13
|
+
BgNVBAYTAlRXMQ4wDAYDVQQIDAVTdGF0ZTENMAsGA1UEBwwEQ2l0eTEVMBMGA1UE
|
|
14
|
+
CgwMT3JnYW5pemF0aW9uMRwwGgYDVQQLDBNPcmdhbml6YXRpb25hbCBVbml0MRQw
|
|
15
|
+
EgYDVQQDDAtDb21tb24gTmFtZTAeFw0yNDEyMjQwOTM4NThaFw0zNDEyMjIwOTM4
|
|
16
|
+
NThaMHcxCzAJBgNVBAYTAlRXMQ4wDAYDVQQIDAVTdGF0ZTENMAsGA1UEBwwEQ2l0
|
|
17
|
+
eTEVMBMGA1UECgwMT3JnYW5pemF0aW9uMRwwGgYDVQQLDBNPcmdhbml6YXRpb25h
|
|
18
|
+
bCBVbml0MRQwEgYDVQQDDAtDb21tb24gTmFtZTBZMBMGByqGSM49AgEGCCqGSM49
|
|
19
|
+
AwEHA0IABOxt4HjKOoFpXk8R3E+mDOd3FGTgYb2ZzY6mvK8hWP+9iQxPIsA8oHRN
|
|
20
|
+
hlf5vu7/2akqxlmgib6hiB74s/L6hXswCgYIKoZIzj0EAwIDSAAwRQIhALv/VqZ7
|
|
21
|
+
brO5uTieVKL/HX1G1m41DHNQj/jvLUtGXVQsAiBYzqP95jiNt7Bc0NgzaqFns2xG
|
|
22
|
+
Dt2SjgFsmmChyXLyuA==
|
|
23
|
+
-----END CERTIFICATE-----
|
|
24
|
+
"""
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: PyPtt
|
|
3
|
-
Version: 1.2.
|
|
3
|
+
Version: 1.2.15
|
|
4
4
|
Summary: PyPtt
|
|
5
5
|
Home-page: https://pyptt.cc/
|
|
6
6
|
Author: CodingMan
|
|
@@ -61,7 +61,7 @@ pip install PyPtt
|
|
|
61
61
|
#### 你可以在 Telegram 上找到 PyPtt 社群 [](https://t.me/PyPtt)
|
|
62
62
|
|
|
63
63
|
## 贊助
|
|
64
|
-
####
|
|
64
|
+
#### issue 解太慢嗎?幫我增加一點動力吧!
|
|
65
65
|
####
|
|
66
66
|
#### [](http://paypal.me/CodingMan)
|
|
67
67
|
|
|
@@ -28,10 +28,10 @@ pip install PyPtt
|
|
|
28
28
|
#### 你可以在 Telegram 上找到 PyPtt 社群 [](https://t.me/PyPtt)
|
|
29
29
|
|
|
30
30
|
## 贊助
|
|
31
|
-
####
|
|
31
|
+
#### issue 解太慢嗎?幫我增加一點動力吧!
|
|
32
32
|
####
|
|
33
33
|
#### [](http://paypal.me/CodingMan)
|
|
34
34
|
|
|
35
35
|
## 贊助清單
|
|
36
36
|
|
|
37
|
-
#### leftc
|
|
37
|
+
#### leftc
|
|
@@ -7,7 +7,9 @@ from setuptools import setup
|
|
|
7
7
|
|
|
8
8
|
def version_automation_script():
|
|
9
9
|
is_merged = os.environ.get('GITHUB_EVENT_NAME') == 'pull_request'
|
|
10
|
+
branch = os.environ.get('GITHUB_REF_NAME')
|
|
10
11
|
print('is_merged:', is_merged)
|
|
12
|
+
print('branch:', branch)
|
|
11
13
|
|
|
12
14
|
# read the main version from __init__.py
|
|
13
15
|
with open('PyPtt/__init__.py', 'r', encoding='utf-8') as f:
|
|
@@ -37,7 +39,7 @@ def version_automation_script():
|
|
|
37
39
|
if version is None or pypi_version is None:
|
|
38
40
|
raise ValueError('Can not get version from pypi')
|
|
39
41
|
|
|
40
|
-
if not
|
|
42
|
+
if 'master' not in branch:
|
|
41
43
|
commit_file = '/tmp/commit_hash.txt'
|
|
42
44
|
if os.path.exists(commit_file):
|
|
43
45
|
with open(commit_file, 'r', encoding='utf-8') as f:
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
key = """-----BEGIN EC PARAMETERS-----
|
|
2
|
-
BggqhkjOPQMBBw==
|
|
3
|
-
-----END EC PARAMETERS-----
|
|
4
|
-
-----BEGIN EC PRIVATE KEY-----
|
|
5
|
-
MHcCAQEEIHit9XnExnupbNahUy2w9r8KAfoW7VPHxnuutRLSWzUvoAoGCCqGSM49
|
|
6
|
-
AwEHoUQDQgAE0Sk6fmqeDy5x8q3D9+ziWwZon/pQoL5z3H6NzwZr4g7Q5MdBYsIp
|
|
7
|
-
/D/4EQit0oAImedt20nNs5V7yg7bMNpnNQ==
|
|
8
|
-
-----END EC PRIVATE KEY-----
|
|
9
|
-
"""
|
|
10
|
-
|
|
11
|
-
cert = """-----BEGIN CERTIFICATE-----
|
|
12
|
-
MIIB6DCCAY8CFBldwwA6lE9CoSWVmt8Z5h9I3F0mMAoGCCqGSM49BAMCMHcxCzAJ
|
|
13
|
-
BgNVBAYTAlRXMQ4wDAYDVQQIDAVTdGF0ZTENMAsGA1UEBwwEQ2l0eTEVMBMGA1UE
|
|
14
|
-
CgwMT3JnYW5pemF0aW9uMRwwGgYDVQQLDBNPcmdhbml6YXRpb25hbCBVbml0MRQw
|
|
15
|
-
EgYDVQQDDAtDb21tb24gTmFtZTAeFw0yNDA5MDkwMjUyMDdaFw0zNDA5MDcwMjUy
|
|
16
|
-
MDdaMHcxCzAJBgNVBAYTAlRXMQ4wDAYDVQQIDAVTdGF0ZTENMAsGA1UEBwwEQ2l0
|
|
17
|
-
eTEVMBMGA1UECgwMT3JnYW5pemF0aW9uMRwwGgYDVQQLDBNPcmdhbml6YXRpb25h
|
|
18
|
-
bCBVbml0MRQwEgYDVQQDDAtDb21tb24gTmFtZTBZMBMGByqGSM49AgEGCCqGSM49
|
|
19
|
-
AwEHA0IABNEpOn5qng8ucfKtw/fs4lsGaJ/6UKC+c9x+jc8Ga+IO0OTHQWLCKfw/
|
|
20
|
-
+BEIrdKACJnnbdtJzbOVe8oO2zDaZzUwCgYIKoZIzj0EAwIDRwAwRAIgUUkdxyJ3
|
|
21
|
-
bycxT//S4wWMB16suAlzL0io+f01B0In5XoCID+JAIvxU+CT2nfpaL43KMYTr7C5
|
|
22
|
-
aTq2gJjVhDAxA1i6
|
|
23
|
-
-----END CERTIFICATE-----
|
|
24
|
-
"""
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|