Efficiently convert XML data to Apache Arrow format.
Project description
XML2ARROW-PYTHON
A Python package for efficiently converting XML files to Apache Arrow tables using a YAML configuration. This package leverages the xml2arrow Rust crate for high performance.
Features
- ๐ High-performance XML parsing using the xml2arrow Rust crate
- ๐ Flexible Mapping: Map complex XML structures to Apache Arrow with YAML
- ๐ Nested Structure Support: Handle deeply nested XML hierarchies
- ๐ฏ Customizable Type Conversion: Automatically convert data types and apply unit conversion.
- ๐ก Attribute & Element Extraction: Seamlessly extract XML attributes or elements
Installation
pip install xml2arrow
Usage
xml2arrow converts XML data to Apache Arrow format using a YAML configuration file.
1. Configuration File (YAML):
The YAML configuration defines the mapping between your XML structure and Arrow tables and fields.
tables:
- name: <table_name> # The name of the resulting Arrow table
xml_path: <xml_path> # The XML path to the *parent* element of the table's row elements
levels: # Index levels for nested XML structures.
- <level1>
- <level2>
fields:
- name: <field_name> # The name of the Arrow field
xml_path: <field_path> # The XML path to the field within a row
data_type: <data_type> # The Arrow data type (see below)
nullable: <true|false> # Whether the field can be null
scale: <number> # Optional scaling factor for floats.
offset: <number> # Optional offset for numeric floats
- name: ... # Define additional tables as needed
tables: A list of table configurations. Each entry defines a separate Arrow table.name: The name of the resulting ArrowRecordBatch(table).xml_path: An XPath-like string specifying the parent element of the row elements. For example, for<library><book>...</book><book>...</book></library>, thexml_pathwould be/library.levels: An array of strings representing parent tables for creating indexes in nested structures. For/library/shelves/shelf/books/book, uselevels: ["shelves", "books"]. This creates indexes named<shelves>and<books>.fields: A list of field configurations (columns) for the Arrow table.name: The name of the field in the Arrow schema.xml_path: An XPath-like string selecting the field's value. Use@to select attributes (e.g.,/library/book/@id).data_type: The Arrow data type. Supported types:Boolean(trueorfalse)Int8,UInt8,Int16,UInt16,Int32,UInt32,Int64,UInt64Float32,Float64Utf8(Strings)
nullable(Optional): Whether the field can be null (defaults tofalse).scale(Optional): A scaling factor for float fields.offset(Optional): An offset value for float fields.
2. Parsing the XML
from xml2arrow import XmlToArrowParser
parser = XmlToArrowParser("config.yaml") # Load configuration
record_batches = parser.parse("data.xml") # Parse XML using configuration
# Process the record batches...
Example
This example demonstrates how to convert meteorological station data from XML to Arrow format.
1. XML Data (stations.xml)
<report>
<header>
<title>Meteorological Station Data</title>
<created_by>National Weather Service</created_by>
<creation_time>2024-12-30T13:59:15Z</creation_time>
</header>
<monitoring_stations>
<monitoring_station id="MS001">
<location>
<latitude>-61.39110459389277</latitude>
<longitude>48.08662749089257</longitude>
<elevation>547.1050788360882</elevation>
</location>
<measurements>
<measurement>
<timestamp>2024-12-30T12:39:15Z</timestamp>
<temperature unit="C">35.486545480326114</temperature>
<pressure unit="hPa">950.439973486407</pressure>
<humidity unit="%">49.77716576844861</humidity>
</measurement>
<measurement>
<timestamp>2024-12-30T12:44:15Z</timestamp>
<temperature unit="C">29.095166644493865</temperature>
<pressure unit="hPa">1049.3215015450517</pressure>
<humidity unit="%">32.5687148391251</humidity>
</measurement>
</measurements>
<metadata>
<description>Located in the Arctic Tundra area, used for Scientific Research.</description>
<install_date>2024-03-31</install_date>
</metadata>
</monitoring_station>
<monitoring_station id="MS002">
<location>
<latitude>11.891496388319311</latitude>
<longitude>135.09336983543022</longitude>
<elevation unit="m">174.53349357280004</elevation>
</location>
<measurements>
<measurement>
<timestamp>2024-12-30T12:39:15Z</timestamp>
<temperature unit="C">24.791842953632283</temperature>
<pressure unit="hPa">989.4054287187706</pressure>
<humidity unit="%">57.70794884397625</humidity>
</measurement>
<measurement>
<timestamp>2024-12-30T12:44:15Z</timestamp>
<temperature unit="C">15.153690541845911</temperature>
<pressure unit="hPa">1001.413052919951</pressure>
<humidity unit="%">45.45094598045342</humidity>
</measurement>
<measurement>
<timestamp>2024-12-30T12:49:15Z</timestamp>
<temperature unit="C">-4.022555715139081</temperature>
<pressure unit="hPa">1000.5225751769922</pressure>
<humidity unit="%">70.40117458947834</humidity>
</measurement>
<measurement>
<timestamp>2024-12-30T12:54:15Z</timestamp>
<temperature unit="C">25.852920542644185</temperature>
<pressure unit="hPa">953.762785698162</pressure>
<humidity unit="%">42.62088244545566</humidity>
</measurement>
</measurements>
<metadata>
<description>Located in the Desert area, used for Weather Forecasting.</description>
<install_date>2024-01-17</install_date>
</metadata>
</monitoring_station>
</monitoring_stations>
</report>
2. Configuration File (stations.yaml)
tables:
- name: report
xml_path: /
levels: []
fields:
- name: title
xml_path: /report/header/title
data_type: Utf8
nullable: false
- name: created_by
xml_path: /report/header/created_by
data_type: Utf8
nullable: false
- name: creation_time
xml_path: /report/header/creation_time
data_type: Utf8
nullable: false
- name: stations
xml_path: /report/monitoring_stations
levels:
- station
fields:
- name: id
xml_path: /report/monitoring_stations/monitoring_station/@id # Path to an attribute
data_type: Utf8
nullable: false
- name: latitude
xml_path: /report/monitoring_stations/monitoring_station/location/latitude
data_type: Float32
nullable: false
- name: longitude
xml_path: /report/monitoring_stations/monitoring_station/location/longitude
data_type: Float32
nullable: false
- name: elevation
xml_path: /report/monitoring_stations/monitoring_station/location/elevation
data_type: Float32
nullable: false
- name: description
xml_path: report/monitoring_stations/monitoring_station/metadata/description
data_type: Utf8
nullable: false
- name: install_date
xml_path: report/monitoring_stations/monitoring_station/metadata/install_date
data_type: Utf8
nullable: false
- name: measurements
xml_path: /report/monitoring_stations/monitoring_station/measurements
levels:
- station # Link to the 'stations' table by element order
- measurement
fields:
- name: timestamp
xml_path: /report/monitoring_stations/monitoring_station/measurements/measurement/timestamp
data_type: Utf8
nullable: false
- name: temperature
xml_path: /report/monitoring_stations/monitoring_station/measurements/measurement/temperature
data_type: Float64
nullable: false
offset: 273.15 # Convert from Celsius to Kelvin
- name: pressure
xml_path: /report/monitoring_stations/monitoring_station/measurements/measurement/pressure
data_type: Float64
nullable: false
scale: 100.0 # Convert from hPa to Pa
- name: humidity
xml_path: /report/monitoring_stations/monitoring_station/measurements/measurement/humidity
data_type: Float64
nullable: false
3. Parsing the XML
from xml2arrow import XmlToArrowParser
parser = XmlToArrowParser("stations.yaml") # Load configuration
record_batches = parser.parse("stations.xml") # Parse XML using configuration
# Accessing the record batches (example)
for name, batch in record_batches.items():
# Process the record batches
4. Expected Record Batches (Conceptual)
- report:
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโ
โ title โ created_by โ creation_time โ
โ --- โ --- โ --- โ
โ str โ str โ str โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโชโโโโโโโโโโโโโโโโโโโโโโโโโโโชโโโโโโโโโโโโโโโโโโโโโโโก
โ Meteorological Station Data โ National Weather Service โ 2024-12-30T13:59:15Z โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโโโโโโ
- stations:
โโโโโโโโโโโโโฌโโโโโโโโฌโโโโโโโโโโโโโฌโโโโโโโโโโโโโฌโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโ
โ <station> โ id โ latitude โ longitude โ elevation โ description โ install_date โ
โ --- โ --- โ --- โ --- โ --- โ --- โ --- โ
โ u32 โ str โ f32 โ f32 โ f32 โ str โ str โ
โโโโโโโโโโโโโชโโโโโโโโชโโโโโโโโโโโโโชโโโโโโโโโโโโโชโโโโโโโโโโโโโชโโโโโโโโโโโโโโโโโโโโโโโโโชโโโโโโโโโโโโโโโก
โ 0 โ MS001 โ -61.391106 โ 48.086628 โ 547.105103 โ Located in the Arctic โ 2024-03-31 โ
โ โ โ โ โ โ Tundra aโฆ โ โ
โ 1 โ MS002 โ 11.891497 โ 135.093369 โ 174.533493 โ Located in the Desert โ 2024-01-17 โ
โ โ โ โ โ โ area, usโฆ โ โ
โโโโโโโโโโโโโดโโโโโโโโดโโโโโโโโโโโโโดโโโโโโโโโโโโโดโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโ
- measurements:
โโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโ
โ <station> โ <measurement> โ timestamp โ temperature โ pressure โ humidity โ
โ --- โ --- โ --- โ --- โ --- โ --- โ
โ u32 โ u32 โ str โ f64 โ f64 โ f64 โ
โโโโโโโโโโโโโชโโโโโโโโโโโโโโโโชโโโโโโโโโโโโโโโโโโโโโโโชโโโโโโโโโโโโโโชโโโโโโโโโโโโโโโโชโโโโโโโโโโโโก
โ 0 โ 0 โ 2024-12-30T12:39:15Z โ 308.636545 โ 95043.997349 โ 49.777166 โ
โ 0 โ 1 โ 2024-12-30T12:44:15Z โ 302.245167 โ 104932.150155 โ 32.568715 โ
โ 1 โ 0 โ 2024-12-30T12:39:15Z โ 297.941843 โ 98940.542872 โ 57.707949 โ
โ 1 โ 1 โ 2024-12-30T12:44:15Z โ 288.303691 โ 100141.305292 โ 45.450946 โ
โ 1 โ 2 โ 2024-12-30T12:49:15Z โ 269.127444 โ 100052.257518 โ 70.401175 โ
โ 1 โ 3 โ 2024-12-30T12:54:15Z โ 299.002921 โ 95376.27857 โ 42.620882 โ
โโโโโโโโโโโโโดโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโดโโโโโโโโโโโโ
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file xml2arrow-0.10.0.tar.gz.
File metadata
- Download URL: xml2arrow-0.10.0.tar.gz
- Upload date:
- Size: 22.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: maturin/1.8.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
38c158425063ad01699adeb66c3b671224a726a95c72a85ee25ea896685fe079
|
|
| MD5 |
086d21ba518dee74426770e119681068
|
|
| BLAKE2b-256 |
d29a38bf4100286180d211234ea833a50e692808d765938d436bbd60b7f10988
|
File details
Details for the file xml2arrow-0.10.0-cp310-abi3-win_amd64.whl.
File metadata
- Download URL: xml2arrow-0.10.0-cp310-abi3-win_amd64.whl
- Upload date:
- Size: 836.0 kB
- Tags: CPython 3.10+, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: maturin/1.8.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b5caec79fbeca606eca3e6ec6766a7d2f4680de67475457446013a650f1238ec
|
|
| MD5 |
7822f612f5b6a07e479528fa8bb060e7
|
|
| BLAKE2b-256 |
5f6d1cad4c23557637aca1b0aceab10ad167fb72962b4fcc4edea2a29f568b7e
|
File details
Details for the file xml2arrow-0.10.0-cp310-abi3-win32.whl.
File metadata
- Download URL: xml2arrow-0.10.0-cp310-abi3-win32.whl
- Upload date:
- Size: 791.5 kB
- Tags: CPython 3.10+, Windows x86
- Uploaded using Trusted Publishing? No
- Uploaded via: maturin/1.8.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
356a4770ac8371d63eeb592b5c5deb910f064a50bf7f968d782c62f5babe3e3d
|
|
| MD5 |
08bd39a8691c6083bab7e602c87a3ab2
|
|
| BLAKE2b-256 |
11261bcbcb25cc08bea95c68827c044d545cde4da9f968920fd78b5477dfc99d
|
File details
Details for the file xml2arrow-0.10.0-cp310-abi3-musllinux_1_2_x86_64.whl.
File metadata
- Download URL: xml2arrow-0.10.0-cp310-abi3-musllinux_1_2_x86_64.whl
- Upload date:
- Size: 1.2 MB
- Tags: CPython 3.10+, musllinux: musl 1.2+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: maturin/1.8.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e4b31d2c851769423658c47b5a3993516afed2f4ff3ff421a373cd0d5373bced
|
|
| MD5 |
fcf6b08f26355e2893c45f3a87731f04
|
|
| BLAKE2b-256 |
5e621d6540f737b7073e13424b6c1f57268c7a91a0f7bd3bb8fbea8b8dd40b23
|
File details
Details for the file xml2arrow-0.10.0-cp310-abi3-musllinux_1_2_i686.whl.
File metadata
- Download URL: xml2arrow-0.10.0-cp310-abi3-musllinux_1_2_i686.whl
- Upload date:
- Size: 1.3 MB
- Tags: CPython 3.10+, musllinux: musl 1.2+ i686
- Uploaded using Trusted Publishing? No
- Uploaded via: maturin/1.8.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6111336b8f74c37a6b24d910f6a2825330e2de0419f49bf7f6f83f398a2c8d7b
|
|
| MD5 |
a41f3ba6a61ede344b1db446ac82f06b
|
|
| BLAKE2b-256 |
def1414b61ba35989f7e2a275398ce706d5aead4724933648505ef326819a08d
|
File details
Details for the file xml2arrow-0.10.0-cp310-abi3-musllinux_1_2_armv7l.whl.
File metadata
- Download URL: xml2arrow-0.10.0-cp310-abi3-musllinux_1_2_armv7l.whl
- Upload date:
- Size: 1.3 MB
- Tags: CPython 3.10+, musllinux: musl 1.2+ ARMv7l
- Uploaded using Trusted Publishing? No
- Uploaded via: maturin/1.8.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
af684c76aa86aaccb1beb919c3b0917bb9f8bb416807626f090aa80567513284
|
|
| MD5 |
b2832903b7950e56adf82373c0770ffc
|
|
| BLAKE2b-256 |
7370d34197e126e7c32f0380a6a2bd41ec504bf792a34372c2301d4509aa23b1
|
File details
Details for the file xml2arrow-0.10.0-cp310-abi3-musllinux_1_2_aarch64.whl.
File metadata
- Download URL: xml2arrow-0.10.0-cp310-abi3-musllinux_1_2_aarch64.whl
- Upload date:
- Size: 1.2 MB
- Tags: CPython 3.10+, musllinux: musl 1.2+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: maturin/1.8.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c3dbd72572b5e2b744addfc0b458ea0bac072e3f42cd3c15df02f3d27860c000
|
|
| MD5 |
d7dd4948a848446d97c55997e7bf8814
|
|
| BLAKE2b-256 |
e013d51dd895d38d9d9f376135efb8b73c421ff94eb0a32e1930c76b543f249b
|
File details
Details for the file xml2arrow-0.10.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: xml2arrow-0.10.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 1.1 MB
- Tags: CPython 3.10+, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: maturin/1.8.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
da1f9beb50f8460e8cabb1f018673c21022264941f2a9f678a91da0ad453487b
|
|
| MD5 |
3fa60b9213832553d6352361dfa96c1f
|
|
| BLAKE2b-256 |
b4e5e2d5c113ba08f8e165460ecb73db06c7e402bdce6565fdac697369979cfc
|
File details
Details for the file xml2arrow-0.10.0-cp310-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl.
File metadata
- Download URL: xml2arrow-0.10.0-cp310-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl
- Upload date:
- Size: 1.1 MB
- Tags: CPython 3.10+, manylinux: glibc 2.17+ s390x
- Uploaded using Trusted Publishing? No
- Uploaded via: maturin/1.8.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
202f1284aaaf11e5e58b074867949120cc8497a94ab44f0ab8c5dc4ddf506195
|
|
| MD5 |
5e7c4193fc2866b267ddf167031a7fa4
|
|
| BLAKE2b-256 |
c31ca8589b8a67d0f9ca1dea30837e71432c040c844710742ad66599e194dd0f
|
File details
Details for the file xml2arrow-0.10.0-cp310-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl.
File metadata
- Download URL: xml2arrow-0.10.0-cp310-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
- Upload date:
- Size: 1.5 MB
- Tags: CPython 3.10+, manylinux: glibc 2.17+ ppc64le
- Uploaded using Trusted Publishing? No
- Uploaded via: maturin/1.8.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b254ccf6715d573baa5dcb9d641fafdd1a009548a3eae0e40a8b46feb6a7b20e
|
|
| MD5 |
32e96958d3e63e830a34de61dea9f413
|
|
| BLAKE2b-256 |
6ddbd3d87604a3ded912723f9ba9fb577a1931b0060ded6001d9a588f406016e
|
File details
Details for the file xml2arrow-0.10.0-cp310-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl.
File metadata
- Download URL: xml2arrow-0.10.0-cp310-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
- Upload date:
- Size: 1.1 MB
- Tags: CPython 3.10+, manylinux: glibc 2.17+ ARMv7l
- Uploaded using Trusted Publishing? No
- Uploaded via: maturin/1.8.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
917a5096e46f917f71e4580d7cc6385f5d5fa153c985da24fd3eca1326b94504
|
|
| MD5 |
f64fb807d81b1368d8630911c0ff5a43
|
|
| BLAKE2b-256 |
7a416e8c6dbc704d509edc5bf0931afdebcb793925537f635f44c2128d5d23a1
|
File details
Details for the file xml2arrow-0.10.0-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.
File metadata
- Download URL: xml2arrow-0.10.0-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
- Upload date:
- Size: 1.0 MB
- Tags: CPython 3.10+, manylinux: glibc 2.17+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: maturin/1.8.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b29c6dc40b8517aebaeb65dc1584c620b22d02ad2d65b1192ea3ccd3751f769c
|
|
| MD5 |
3d700968ba8a29032244a04cac3f2771
|
|
| BLAKE2b-256 |
de92a3fda5c9ae777d856a57f287b09068621a39fae9da15777a29e14820e517
|
File details
Details for the file xml2arrow-0.10.0-cp310-abi3-manylinux_2_5_i686.manylinux1_i686.whl.
File metadata
- Download URL: xml2arrow-0.10.0-cp310-abi3-manylinux_2_5_i686.manylinux1_i686.whl
- Upload date:
- Size: 1.2 MB
- Tags: CPython 3.10+, manylinux: glibc 2.5+ i686
- Uploaded using Trusted Publishing? No
- Uploaded via: maturin/1.8.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
159d7337fcef7c4b67bcf57cd470a9bd3ce879c59e4b5369dfbb01bc1002744f
|
|
| MD5 |
092c4f57b8b5214bc0eea34538fc1091
|
|
| BLAKE2b-256 |
a7ff4226a9598222af75411de551f96929570023ec4c998f989e25780fa862ca
|
File details
Details for the file xml2arrow-0.10.0-cp310-abi3-macosx_11_0_arm64.whl.
File metadata
- Download URL: xml2arrow-0.10.0-cp310-abi3-macosx_11_0_arm64.whl
- Upload date:
- Size: 892.8 kB
- Tags: CPython 3.10+, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: maturin/1.8.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
58c9786d311f83f18b54ef964862596ee708532a8fd0752b96dbf9bdf7b3d87d
|
|
| MD5 |
bdae22c6f27f0a852146c7c33b67d31b
|
|
| BLAKE2b-256 |
d4ec6b0480d8e860872c880e23a12bb95d22f17ba1d8d2cd77b9f603fb8e238f
|
File details
Details for the file xml2arrow-0.10.0-cp310-abi3-macosx_10_12_x86_64.whl.
File metadata
- Download URL: xml2arrow-0.10.0-cp310-abi3-macosx_10_12_x86_64.whl
- Upload date:
- Size: 977.2 kB
- Tags: CPython 3.10+, macOS 10.12+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: maturin/1.8.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8cff8c28f2a69da1cbeaa982bc568a96557eb81e4fd196f37deff7077897c829
|
|
| MD5 |
2bc3543eafd81ad30ad1f2c75aa1119b
|
|
| BLAKE2b-256 |
947d7269fdf6b0c99132a5e6879e25b121b44310d246f298b1d60344b20cc75c
|