txt2stix 0.0.4__py3-none-any.whl

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.
Files changed (119) hide show
  1. txt2stix/__init__.py +33 -0
  2. txt2stix/ai_extractor/__init__.py +15 -0
  3. txt2stix/ai_extractor/anthropic.py +12 -0
  4. txt2stix/ai_extractor/base.py +87 -0
  5. txt2stix/ai_extractor/deepseek.py +19 -0
  6. txt2stix/ai_extractor/gemini.py +18 -0
  7. txt2stix/ai_extractor/openai.py +15 -0
  8. txt2stix/ai_extractor/openrouter.py +20 -0
  9. txt2stix/ai_extractor/prompts.py +164 -0
  10. txt2stix/ai_extractor/utils.py +85 -0
  11. txt2stix/attack_flow.py +101 -0
  12. txt2stix/bundler.py +428 -0
  13. txt2stix/common.py +23 -0
  14. txt2stix/extractions.py +59 -0
  15. txt2stix/includes/__init__.py +0 -0
  16. txt2stix/includes/extractions/ai/config.yaml +1023 -0
  17. txt2stix/includes/extractions/lookup/config.yaml +393 -0
  18. txt2stix/includes/extractions/pattern/config.yaml +609 -0
  19. txt2stix/includes/helpers/mimetype_filename_extension_list.csv +936 -0
  20. txt2stix/includes/helpers/stix_relationship_types.txt +41 -0
  21. txt2stix/includes/helpers/tlds.txt +1446 -0
  22. txt2stix/includes/helpers/windows_registry_key_prefix.txt +12 -0
  23. txt2stix/includes/lookups/_README.md +11 -0
  24. txt2stix/includes/lookups/_generate_lookups.py +247 -0
  25. txt2stix/includes/lookups/attack_pattern.txt +1 -0
  26. txt2stix/includes/lookups/campaign.txt +1 -0
  27. txt2stix/includes/lookups/country_iso3166_alpha2.txt +249 -0
  28. txt2stix/includes/lookups/course_of_action.txt +1 -0
  29. txt2stix/includes/lookups/disarm_id_v1_5.txt +345 -0
  30. txt2stix/includes/lookups/disarm_name_v1_5.txt +347 -0
  31. txt2stix/includes/lookups/extensions.txt +78 -0
  32. txt2stix/includes/lookups/identity.txt +1 -0
  33. txt2stix/includes/lookups/infrastructure.txt +1 -0
  34. txt2stix/includes/lookups/intrusion_set.txt +1 -0
  35. txt2stix/includes/lookups/malware.txt +2 -0
  36. txt2stix/includes/lookups/mitre_atlas_id_v4_5_2.txt +116 -0
  37. txt2stix/includes/lookups/mitre_atlas_name_v4_5_2.txt +117 -0
  38. txt2stix/includes/lookups/mitre_attack_enterprise_aliases_v16_0.txt +1502 -0
  39. txt2stix/includes/lookups/mitre_attack_enterprise_id_v16_0.txt +1656 -0
  40. txt2stix/includes/lookups/mitre_attack_enterprise_name_v16_0.txt +1765 -0
  41. txt2stix/includes/lookups/mitre_attack_ics_aliases_v16_0.txt +141 -0
  42. txt2stix/includes/lookups/mitre_attack_ics_id_v16_0.txt +254 -0
  43. txt2stix/includes/lookups/mitre_attack_ics_name_v16_0.txt +293 -0
  44. txt2stix/includes/lookups/mitre_attack_mobile_aliases_v16_0.txt +159 -0
  45. txt2stix/includes/lookups/mitre_attack_mobile_id_v16_0.txt +277 -0
  46. txt2stix/includes/lookups/mitre_attack_mobile_name_v16_0.txt +296 -0
  47. txt2stix/includes/lookups/mitre_capec_id_v3_9.txt +559 -0
  48. txt2stix/includes/lookups/mitre_capec_name_v3_9.txt +560 -0
  49. txt2stix/includes/lookups/mitre_cwe_id_v4_15.txt +939 -0
  50. txt2stix/includes/lookups/mitre_cwe_name_v4_15.txt +939 -0
  51. txt2stix/includes/lookups/threat_actor.txt +1 -0
  52. txt2stix/includes/lookups/tld.txt +1422 -0
  53. txt2stix/includes/lookups/tool.txt +1 -0
  54. txt2stix/includes/tests/test_cases.yaml +695 -0
  55. txt2stix/indicator.py +860 -0
  56. txt2stix/lookups.py +68 -0
  57. txt2stix/pattern/__init__.py +13 -0
  58. txt2stix/pattern/extractors/__init__.py +0 -0
  59. txt2stix/pattern/extractors/base_extractor.py +167 -0
  60. txt2stix/pattern/extractors/card/README.md +34 -0
  61. txt2stix/pattern/extractors/card/__init__.py +15 -0
  62. txt2stix/pattern/extractors/card/amex_card_extractor.py +52 -0
  63. txt2stix/pattern/extractors/card/diners_card_extractor.py +47 -0
  64. txt2stix/pattern/extractors/card/discover_card_extractor.py +48 -0
  65. txt2stix/pattern/extractors/card/jcb_card_extractor.py +43 -0
  66. txt2stix/pattern/extractors/card/master_card_extractor.py +63 -0
  67. txt2stix/pattern/extractors/card/union_card_extractor.py +38 -0
  68. txt2stix/pattern/extractors/card/visa_card_extractor.py +46 -0
  69. txt2stix/pattern/extractors/crypto/__init__.py +3 -0
  70. txt2stix/pattern/extractors/crypto/btc_extractor.py +38 -0
  71. txt2stix/pattern/extractors/directory/__init__.py +10 -0
  72. txt2stix/pattern/extractors/directory/unix_directory_extractor.py +40 -0
  73. txt2stix/pattern/extractors/directory/unix_file_path_extractor.py +42 -0
  74. txt2stix/pattern/extractors/directory/windows_directory_path_extractor.py +47 -0
  75. txt2stix/pattern/extractors/directory/windows_file_path_extractor.py +42 -0
  76. txt2stix/pattern/extractors/domain/__init__.py +8 -0
  77. txt2stix/pattern/extractors/domain/domain_extractor.py +39 -0
  78. txt2stix/pattern/extractors/domain/hostname_extractor.py +36 -0
  79. txt2stix/pattern/extractors/domain/sub_domain_extractor.py +49 -0
  80. txt2stix/pattern/extractors/hashes/__init__.py +16 -0
  81. txt2stix/pattern/extractors/hashes/md5_extractor.py +16 -0
  82. txt2stix/pattern/extractors/hashes/sha1_extractor.py +14 -0
  83. txt2stix/pattern/extractors/hashes/sha224_extractor.py +18 -0
  84. txt2stix/pattern/extractors/hashes/sha2_256_exactor.py +14 -0
  85. txt2stix/pattern/extractors/hashes/sha2_512_exactor.py +13 -0
  86. txt2stix/pattern/extractors/hashes/sha3_256_exactor.py +15 -0
  87. txt2stix/pattern/extractors/hashes/sha3_512_exactor.py +16 -0
  88. txt2stix/pattern/extractors/helper.py +64 -0
  89. txt2stix/pattern/extractors/ip/__init__.py +14 -0
  90. txt2stix/pattern/extractors/ip/ipv4_cidr_extractor.py +49 -0
  91. txt2stix/pattern/extractors/ip/ipv4_extractor.py +18 -0
  92. txt2stix/pattern/extractors/ip/ipv4_port_extractor.py +42 -0
  93. txt2stix/pattern/extractors/ip/ipv6_cidr_extractor.py +18 -0
  94. txt2stix/pattern/extractors/ip/ipv6_extractor.py +16 -0
  95. txt2stix/pattern/extractors/ip/ipv6_port_extractor.py +46 -0
  96. txt2stix/pattern/extractors/others/__init__.py +22 -0
  97. txt2stix/pattern/extractors/others/asn_extractor.py +14 -0
  98. txt2stix/pattern/extractors/others/cpe_extractor.py +29 -0
  99. txt2stix/pattern/extractors/others/cve_extractor.py +14 -0
  100. txt2stix/pattern/extractors/others/email_extractor.py +21 -0
  101. txt2stix/pattern/extractors/others/filename_extractor.py +17 -0
  102. txt2stix/pattern/extractors/others/iban_extractor.py +15 -0
  103. txt2stix/pattern/extractors/others/mac_address_extractor.py +13 -0
  104. txt2stix/pattern/extractors/others/phonenumber_extractor.py +41 -0
  105. txt2stix/pattern/extractors/others/user_agent_extractor.py +20 -0
  106. txt2stix/pattern/extractors/others/windows_registry_key_extractor.py +18 -0
  107. txt2stix/pattern/extractors/url/__init__.py +7 -0
  108. txt2stix/pattern/extractors/url/url_extractor.py +22 -0
  109. txt2stix/pattern/extractors/url/url_file_extractor.py +21 -0
  110. txt2stix/pattern/extractors/url/url_path_extractor.py +74 -0
  111. txt2stix/retriever.py +126 -0
  112. txt2stix/stix.py +1 -0
  113. txt2stix/txt2stix.py +336 -0
  114. txt2stix/utils.py +86 -0
  115. txt2stix-0.0.4.dist-info/METADATA +190 -0
  116. txt2stix-0.0.4.dist-info/RECORD +119 -0
  117. txt2stix-0.0.4.dist-info/WHEEL +4 -0
  118. txt2stix-0.0.4.dist-info/entry_points.txt +2 -0
  119. txt2stix-0.0.4.dist-info/licenses/LICENSE +202 -0
@@ -0,0 +1,12 @@
1
+ HKEY_CLASSES_ROOT
2
+ HKCR
3
+ HKEY_CURRENT_USER
4
+ HKCU
5
+ HKEY_LOCAL_MACHINE
6
+ HKLM
7
+ HKEY_USERS
8
+ HKU
9
+ HKEY_CURRENT_CONFIG
10
+ HKCC
11
+ HKEY_PERFORMANCE_DATA
12
+ HKEY_DYN_DATA
@@ -0,0 +1,11 @@
1
+ The following script can be run after importing the data -- these scripts will do this for you: https://github.com/muchdogesec/stix2arango/blob/main/utilities/README.md
2
+
3
+ Make sure the versions imported, match those in the searches below.
4
+
5
+ ```shell
6
+ pip3 install python-arango
7
+ ```
8
+
9
+ ```shell
10
+ python3 includes/lookups/_generate_lookups.py
11
+ ```
@@ -0,0 +1,247 @@
1
+ import os
2
+ from arango import ArangoClient
3
+
4
+ # Connect to ArangoDB
5
+ client = ArangoClient()
6
+ db = client.db('ctibutler_database', username='root', password='')
7
+
8
+ # Get the directory where the script is located
9
+ script_dir = os.path.dirname(os.path.abspath(__file__))
10
+
11
+ # Define queries and output files
12
+ queries = {
13
+ "mitre_cwe_id_v4_15.txt":
14
+ """
15
+ FOR doc IN mitre_cwe_vertex_collection
16
+ FILTER doc._stix2arango_note == "version=4_15"
17
+ AND IS_ARRAY(doc.external_references)
18
+ AND doc.x_mitre_deprecated != true
19
+ AND doc.revoked != true
20
+ AND doc.type == "weakness"
21
+ AND doc.name != null
22
+ AND !CONTAINS(doc.name, "DEPRECATED:")
23
+ FOR reference IN doc.external_references
24
+ FILTER reference.source_name == "cwe"
25
+ SORT reference.external_id ASC
26
+ RETURN reference.external_id
27
+ """,
28
+ "mitre_cwe_name_v4_15.txt":
29
+ """
30
+ FOR doc IN mitre_cwe_vertex_collection
31
+ FILTER doc._stix2arango_note == "version=4_15"
32
+ AND IS_ARRAY(doc.external_references)
33
+ AND doc.x_mitre_deprecated != true
34
+ AND doc.revoked != true
35
+ AND doc.type == "weakness"
36
+ AND doc.name != null
37
+ AND !CONTAINS(doc.name, "DEPRECATED:")
38
+ RETURN doc.name
39
+ """,
40
+ "mitre_capec_id_v3_9.txt":
41
+ """
42
+ FOR doc IN mitre_capec_vertex_collection
43
+ FILTER doc._stix2arango_note == "version=3_9"
44
+ AND doc.x_mitre_deprecated != true
45
+ AND doc.revoked != true
46
+ AND doc.type != "course-of-action"
47
+ AND doc.name != null
48
+ AND !CONTAINS(doc.name, "DEPRECATED:")
49
+ AND IS_ARRAY(doc.external_references)
50
+ FOR reference IN doc.external_references
51
+ FILTER reference.source_name == "capec"
52
+ SORT reference.external_id ASC
53
+ RETURN reference.external_id
54
+ """,
55
+ "mitre_capec_name_v3_9.txt":
56
+ """
57
+ FOR doc IN mitre_capec_vertex_collection
58
+ FILTER doc._stix2arango_note == "version=3_9"
59
+ AND doc.x_mitre_deprecated != true
60
+ AND doc.revoked != true
61
+ AND doc.type != "course-of-action"
62
+ AND doc.name != null
63
+ AND !CONTAINS(doc.name, "DEPRECATED:")
64
+ RETURN doc.name
65
+ """,
66
+ "mitre_attack_enterprise_id_v16_0.txt":
67
+ """
68
+ FOR doc IN mitre_attack_enterprise_vertex_collection
69
+ FILTER doc._stix2arango_note == "version=16_0"
70
+ AND doc.type != "x-mitre-matrix"
71
+ AND doc.x_mitre_deprecated != true
72
+ AND doc.revoked != true
73
+ AND IS_ARRAY(doc.external_references)
74
+ FOR reference IN doc.external_references
75
+ FILTER reference.source_name == "mitre-attack"
76
+ SORT reference.external_id ASC
77
+ RETURN reference.external_id
78
+ """,
79
+ "mitre_attack_enterprise_name_v16_0.txt":
80
+ """
81
+ FOR doc IN mitre_attack_enterprise_vertex_collection
82
+ FILTER doc._stix2arango_note == "version=16_0"
83
+ AND doc.type != "x-mitre-matrix"
84
+ AND doc.x_mitre_deprecated != true
85
+ AND doc.revoked != true
86
+ RETURN doc.name
87
+ """,
88
+ "mitre_attack_enterprise_aliases_v16_0.txt":
89
+ """
90
+ FOR alias IN UNIQUE(
91
+ FLATTEN(
92
+ FOR doc IN mitre_attack_enterprise_vertex_collection
93
+ FILTER doc._stix2arango_note == "version=16_0"
94
+ AND doc.type != "x-mitre-matrix"
95
+ AND doc.x_mitre_deprecated != true
96
+ AND doc.revoked != true
97
+ LET combined_aliases = APPEND(
98
+ doc.aliases ? doc.aliases : [],
99
+ doc.x_mitre_aliases ? doc.x_mitre_aliases : []
100
+ )
101
+ FILTER LENGTH(combined_aliases) > 0
102
+ RETURN combined_aliases
103
+ )
104
+ )
105
+ RETURN alias
106
+ """,
107
+ "mitre_attack_ics_id_v16_0.txt":
108
+ """
109
+ FOR doc IN mitre_attack_ics_vertex_collection
110
+ FILTER doc._stix2arango_note == "version=16_0"
111
+ AND doc.type != "x-mitre-matrix"
112
+ AND doc.x_mitre_deprecated != true
113
+ AND doc.revoked != true
114
+ AND IS_ARRAY(doc.external_references)
115
+ FOR reference IN doc.external_references
116
+ FILTER reference.source_name == "mitre-attack"
117
+ SORT reference.external_id ASC
118
+ RETURN reference.external_id
119
+ """,
120
+ "mitre_attack_ics_name_v16_0.txt":
121
+ """
122
+ FOR doc IN mitre_attack_ics_vertex_collection
123
+ FILTER doc._stix2arango_note == "version=16_0"
124
+ AND doc.type != "x-mitre-matrix"
125
+ AND doc.x_mitre_deprecated != true
126
+ AND doc.revoked != true
127
+ RETURN doc.name
128
+ """,
129
+ "mitre_attack_ics_aliases_v16_0.txt":
130
+ """
131
+ FOR alias IN UNIQUE(
132
+ FLATTEN(
133
+ FOR doc IN mitre_attack_ics_vertex_collection
134
+ FILTER doc._stix2arango_note == "version=16_0"
135
+ AND doc.type != "x-mitre-matrix"
136
+ AND doc.x_mitre_deprecated != true
137
+ AND doc.revoked != true
138
+ LET combined_aliases = APPEND(
139
+ doc.aliases ? doc.aliases : [],
140
+ doc.x_mitre_aliases ? doc.x_mitre_aliases : []
141
+ )
142
+ FILTER LENGTH(combined_aliases) > 0
143
+ RETURN combined_aliases
144
+ )
145
+ )
146
+ RETURN alias
147
+ """,
148
+ "mitre_attack_mobile_id_v16_0.txt":
149
+ """
150
+ FOR doc IN mitre_attack_mobile_vertex_collection
151
+ FILTER doc._stix2arango_note == "version=16_0"
152
+ AND doc.type != "x-mitre-matrix"
153
+ AND doc.x_mitre_deprecated != true
154
+ AND doc.revoked != true
155
+ AND IS_ARRAY(doc.external_references)
156
+ FOR reference IN doc.external_references
157
+ FILTER reference.source_name == "mitre-attack"
158
+ SORT reference.external_id ASC
159
+ RETURN reference.external_id
160
+ """,
161
+ "mitre_attack_mobile_name_v16_0.txt":
162
+ """
163
+ FOR doc IN mitre_attack_mobile_vertex_collection
164
+ FILTER doc._stix2arango_note == "version=16_0"
165
+ AND doc.type != "x-mitre-matrix"
166
+ AND doc.x_mitre_deprecated != true
167
+ AND doc.revoked != true
168
+ RETURN doc.name
169
+ """,
170
+ "mitre_attack_mobile_aliases_v16_0.txt":
171
+ """
172
+ FOR alias IN UNIQUE(
173
+ FLATTEN(
174
+ FOR doc IN mitre_attack_mobile_vertex_collection
175
+ FILTER doc._stix2arango_note == "version=16_0"
176
+ AND doc.type != "x-mitre-matrix"
177
+ AND doc.x_mitre_deprecated != true
178
+ AND doc.revoked != true
179
+ LET combined_aliases = APPEND(
180
+ doc.aliases ? doc.aliases : [],
181
+ doc.x_mitre_aliases ? doc.x_mitre_aliases : []
182
+ )
183
+ FILTER LENGTH(combined_aliases) > 0
184
+ RETURN combined_aliases
185
+ )
186
+ )
187
+ RETURN alias
188
+ """,
189
+ "mitre_atlas_id_v4_5_2.txt":
190
+ """
191
+ FOR doc IN mitre_atlas_vertex_collection
192
+ FILTER doc._stix2arango_note == "version=4_5_2"
193
+ AND doc.type != "x-mitre-matrix"
194
+ AND doc.x_mitre_deprecated != true
195
+ AND doc.revoked != true
196
+ AND IS_ARRAY(doc.external_references)
197
+ FOR reference IN doc.external_references
198
+ FILTER reference.source_name == "mitre-atlas"
199
+ SORT reference.external_id ASC
200
+ RETURN reference.external_id
201
+ """,
202
+ "mitre_atlas_name_v4_5_2.txt":
203
+ """
204
+ FOR doc IN mitre_atlas_vertex_collection
205
+ FILTER doc._stix2arango_note == "version=4_5_2"
206
+ AND doc.type != "x-mitre-matrix"
207
+ AND doc.x_mitre_deprecated != true
208
+ AND doc.revoked != true
209
+ RETURN doc.name
210
+ """,
211
+ "disarm_id_v1_5.txt":
212
+ """
213
+ FOR doc IN disarm_vertex_collection
214
+ FILTER doc._stix2arango_note == "version=1_5"
215
+ AND doc.type != "x-mitre-matrix"
216
+ AND doc.x_mitre_deprecated != true
217
+ AND doc.revoked != true
218
+ AND IS_ARRAY(doc.external_references)
219
+ FOR reference IN doc.external_references
220
+ FILTER reference.source_name == "DISARM"
221
+ SORT reference.external_id ASC
222
+ RETURN reference.external_id
223
+ """,
224
+ "disarm_name_v1_5.txt":
225
+ """
226
+ FOR doc IN disarm_vertex_collection
227
+ FILTER doc._stix2arango_note == "version=1_5"
228
+ AND doc.type != "x-mitre-matrix"
229
+ AND doc.x_mitre_deprecated != true
230
+ AND doc.revoked != true
231
+ RETURN doc.name
232
+ """
233
+ }
234
+
235
+ # Execute each query and save the results in the script's directory
236
+ for filename, query in queries.items():
237
+ cursor = db.aql.execute(query)
238
+ results = [str(doc) for doc in cursor]
239
+
240
+ # Full path for each output file
241
+ filepath = os.path.join(script_dir, filename)
242
+
243
+ # Write results to a text file with each result on a new line
244
+ with open(filepath, 'w') as f:
245
+ f.write("\n".join(results))
246
+
247
+ print(f"Results saved to {filepath}")
@@ -0,0 +1 @@
1
+ Content Spoofer
@@ -0,0 +1 @@
1
+ Inspector-1
@@ -0,0 +1,249 @@
1
+ AD
2
+ AE
3
+ AF
4
+ AG
5
+ AI
6
+ AL
7
+ AM
8
+ AO
9
+ AQ
10
+ AR
11
+ AS
12
+ AT
13
+ AU
14
+ AW
15
+ AX
16
+ AZ
17
+ BA
18
+ BB
19
+ BD
20
+ BE
21
+ BF
22
+ BG
23
+ BH
24
+ BI
25
+ BJ
26
+ BL
27
+ BM
28
+ BN
29
+ BO
30
+ BQ
31
+ BR
32
+ BS
33
+ BT
34
+ BV
35
+ BW
36
+ BY
37
+ BZ
38
+ CA
39
+ CC
40
+ CD
41
+ CF
42
+ CG
43
+ CH
44
+ CI
45
+ CK
46
+ CL
47
+ CM
48
+ CN
49
+ CO
50
+ CR
51
+ CU
52
+ CV
53
+ CW
54
+ CX
55
+ CY
56
+ CZ
57
+ DE
58
+ DJ
59
+ DK
60
+ DM
61
+ DO
62
+ DZ
63
+ EC
64
+ EE
65
+ EG
66
+ EH
67
+ ER
68
+ ES
69
+ ET
70
+ FI
71
+ FJ
72
+ FK
73
+ FM
74
+ FO
75
+ FR
76
+ GA
77
+ GB
78
+ GD
79
+ GE
80
+ GF
81
+ GG
82
+ GH
83
+ GI
84
+ GL
85
+ GM
86
+ GN
87
+ GP
88
+ GQ
89
+ GR
90
+ GS
91
+ GT
92
+ GU
93
+ GW
94
+ GY
95
+ HK
96
+ HM
97
+ HN
98
+ HR
99
+ HT
100
+ HU
101
+ ID
102
+ IE
103
+ IL
104
+ IM
105
+ IN
106
+ IO
107
+ IQ
108
+ IR
109
+ IS
110
+ IT
111
+ JE
112
+ JM
113
+ JO
114
+ JP
115
+ KE
116
+ KG
117
+ KH
118
+ KI
119
+ KM
120
+ KN
121
+ KP
122
+ KR
123
+ KW
124
+ KY
125
+ KZ
126
+ LA
127
+ LB
128
+ LC
129
+ LI
130
+ LK
131
+ LR
132
+ LS
133
+ LT
134
+ LU
135
+ LV
136
+ LY
137
+ MA
138
+ MC
139
+ MD
140
+ ME
141
+ MF
142
+ MG
143
+ MH
144
+ MK
145
+ ML
146
+ MM
147
+ MN
148
+ MO
149
+ MP
150
+ MQ
151
+ MR
152
+ MS
153
+ MT
154
+ MU
155
+ MV
156
+ MW
157
+ MX
158
+ MY
159
+ MZ
160
+ NA
161
+ NC
162
+ NE
163
+ NF
164
+ NG
165
+ NI
166
+ NL
167
+ NO
168
+ NP
169
+ NR
170
+ NU
171
+ NZ
172
+ OM
173
+ PA
174
+ PE
175
+ PF
176
+ PG
177
+ PH
178
+ PK
179
+ PL
180
+ PM
181
+ PN
182
+ PR
183
+ PS
184
+ PT
185
+ PW
186
+ PY
187
+ QA
188
+ RE
189
+ RO
190
+ RS
191
+ RU
192
+ RW
193
+ SA
194
+ SB
195
+ SC
196
+ SD
197
+ SE
198
+ SG
199
+ SH
200
+ SI
201
+ SJ
202
+ SK
203
+ SL
204
+ SM
205
+ SN
206
+ SO
207
+ SR
208
+ SS
209
+ ST
210
+ SV
211
+ SX
212
+ SY
213
+ SZ
214
+ TC
215
+ TD
216
+ TF
217
+ TG
218
+ TH
219
+ TJ
220
+ TK
221
+ TL
222
+ TM
223
+ TN
224
+ TO
225
+ TR
226
+ TT
227
+ TV
228
+ TW
229
+ TZ
230
+ UA
231
+ UG
232
+ UM
233
+ US
234
+ UY
235
+ UZ
236
+ VA
237
+ VC
238
+ VE
239
+ VG
240
+ VI
241
+ VN
242
+ VU
243
+ WF
244
+ WS
245
+ YE
246
+ YT
247
+ ZA
248
+ ZM
249
+ ZW
@@ -0,0 +1 @@
1
+ Patch server