Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
42 changes: 42 additions & 0 deletions svg-label-generator/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
# Python
__pycache__/
*.py[cod]
*$py.class
*.so
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
*.egg-info/
.installed.cfg
*.egg
MANIFEST

# Virtual Environment
.venv/

# IDE
.vscode/
.idea/
*.swp
*.swo

# OS
.DS_Store
Thumbs.db

# Output directories
generated_labels/
output/

# Logs
*.log
124 changes: 124 additions & 0 deletions svg-label-generator/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,124 @@
# SVG Label Generator

A Python tool that generates individual SVG labels with dynamic serial numbers and QR codes from CSV data.
A secondary script lays out an array of sequential labels for use in a user defined laser cutter

## Features

### Label Generator

- Reads CSV files containing machine IDs and QR code URLs
- Generates individual SVG labels for each entry
- Dynamically replaces serial numbers, machine names, versions, and QR codes use svg tags
- Interactive file selection from organized directory structure
- Customizable output directory naming

### Laser Layout
- Interactive file selection looks for generated labels
- allows user to input laser cutter dimensions, label padding, and offsets
- calculates the number of layouts needed for a given laser cutter profile and number of labels
- inverts colors for etching

## Requirements

- Python 3.6+
- qrcode library
- Standard library modules (csv, os, sys, xml.etree, re, io, base64, glob)

## Installation

1. Clone this repository:
```bash
git clone [repository-url]
cd svg-label-generator
```

2. Install required dependencies:
```bash
pip install -r requirements.txt
```

3. Set up the directory structure:
```bash
mkdir -p assets/ids assets/templates
```

## Directory Structure

```
svg-label-generator/
├── svg_label_generator.py # Main script
├── requirements.txt # Python dependencies
├── README.md # This file
├── assets/
│ ├── ids/ # Place CSV files here
│ └── templates/ # Place SVG template files here
├── outputs/
│ ├── ids/ # Place CSV files here
│ └── layouts/ # Place SVG template files here
```

## Usage

### 1. Prepare Your Files

**CSV File Format:**
Your CSV file should contain the following columns:
- `Machine ID`: Unique identifier for each machine (e.g., "SC-01-001")
- `Machine QR code URL`: URL to be encoded in the QR code

Example CSV content:
```csv
Machine ID,Machine QR code URL
SC-01-001,https://example.com/machine/SC-01-001
SC-01-002,https://example.com/machine/SC-01-002
```

**SVG Template:**
- Place your SVG template file in `assets/templates/`
- Template should contain placeholder elements for:
- Serial number (in element with id="tspan7")
- Machine name (replace "VxScan")
- Version (replace "v4.0.2")
- QR code area (paths with ids "path13" through "path37")

### 2. Run the Script

```bash
python svg_label_generator.py
```

The script will:
1. Display available template SVG files
2. Display available CSV files
3. Prompt for machine name and version
4. Prompt for output directory name
5. Generate individual SVG files for each CSV entry

### 3. Interactive Prompts

- **Template Selection**: Choose from available SVG templates in `assets/templates/`
- **CSV Selection**: Choose from available CSV files in `assets/ids/`
- **Machine Name**: Enter the machine name (default: "VxScan")
- **Version**: Enter the version string (default: "v4.0.2")
- **Output Directory**: Specify where to save generated files (default: "generated_labels")

## Output

The script generates:
- Individual SVG files named after each Machine ID
- Files saved in the specified output directory
- Each SVG contains the unique serial number and corresponding QR code

## Error Handling

- Validates directory existence before execution
- Handles file selection errors gracefully
- Provides warnings for replacement failures
- Sanitizes input data to remove control characters

### v1.0.0
- Initial release
- Basic SVG label generation with QR codes
- Interactive file selection
- Machine name and version customization
101 changes: 101 additions & 0 deletions svg-label-generator/assets/ids/example-ids.csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
Machine ID,Machine QR code URL
SC-12-001,https://vxqr.org/sn/SC-12-001#MEUCIQCeQN3hqPMQcBIJQ3Zfx538ssPETghT6Ko811JUqXL-mQIgeIvcrrO7mJrXZ1dfbJKxpfC-SeScKT5MozPqdoAe6e4
SC-12-002,https://vxqr.org/sn/SC-12-002#MEUCIQD0S7rT4nhEJbqNJt0z0jEIQR-R5S9QkClVvdZLh9ZldAIgPSqn2gDoVV0fSRDqvcZmFIKzM_Qd6dVd7oZtnYsgDvA
SC-12-003,https://vxqr.org/sn/SC-12-003#MEYCIQCiUJW1vetq8bISQCsFGRKxvVuYnulzPtvT2KL0cvW2BwIhAOm8fe06Qqfd_TCgZNjESe3FaXtsFTdZ9TYnIAaouEDT
SC-12-004,https://vxqr.org/sn/SC-12-004#MEYCIQC2saWfenY9voKG7Nu_k8O_PdJ7W4ECkOICmiUn5Mk-xAIhANt3W_JIk7ydgDdEqplPVrqyXdtxOv2MyPy_LaJPjta0
SC-12-005,https://vxqr.org/sn/SC-12-005#MEYCIQDTRxyOkNBirzHI193PYI0a951LoSiyGryxl_GqQAAQjQIhAKgEjI3dlrSkNHsg6wOsEC_FZuwtuD2PS0TlNsebONhf
SC-12-006,https://vxqr.org/sn/SC-12-006#MEUCIQDm6plRPW2QiBGWrSNk_sCBdKrzW7mROjwDw6pccQRpcgIgTckmE7xdF6mzTvjLJMYzm9Y70TltvZ1IZBSoXQDvB88
SC-12-007,https://vxqr.org/sn/SC-12-007#MEQCICPKqgiSN5A2pH6A8bBZV8Y8WJ_b-LaKV37e4E-dgal7AiBl3qpVaShzt17GizmbRyNlE84-Q3KpyBlV0xcIqF9QJg
SC-12-008,https://vxqr.org/sn/SC-12-008#MEQCIDRRP1swLA8xianRyqwMa8fLFB21UlnbP-KJtPNQVmEPAiB67nBJIragDtPQBdWr0VoPITWoHJl2_L4LNVGoYEnttA
SC-12-009,https://vxqr.org/sn/SC-12-009#MEUCIQD6ccYNFIYe3OMIh2wVbLNECQ5GsWr77XxBbx1JMAzLCwIgL7zL3qNLs78Ti9HGmkTMmO-QeMK4FtQouXdwRskkDGQ
SC-12-010,https://vxqr.org/sn/SC-12-010#MEYCIQC1lkzftNBaBiEebvKAYPjmioB9hM3xSsKRwCEuLl5sNwIhAPqr6D5ezHzJ0t-wvF1ujKvBRCVG8jxGAsNd4QXl-1yV
SC-12-011,https://vxqr.org/sn/SC-12-011#MEUCIQC7AzkjoPt-I_WPQlq3BkFxNKyCR07AAESnYplalzhoNAIgAwBRY2JYpFZRLP0ZCDqoUQl2qVKac2hymHraXjJEsQg
SC-12-012,https://vxqr.org/sn/SC-12-012#MEQCIAa20L_cvji_C0-7JJzFXQ7JWfZJXI6Vl7IHQX3E1kfHAiBpWgWhUd-d39D6ftNI70w10ChAgar1jUKGTLadrFoIgg
SC-12-013,https://vxqr.org/sn/SC-12-013#MEQCIAT60ym-bENtgOktzEB5ojjsjaW9tPaW4QyTVIOMBOKcAiB59Qk04ejOJD8ySP9i8epWa6ozj4xYu41dFNCmLGKWYA
SC-12-014,https://vxqr.org/sn/SC-12-014#MEUCICAnhtPbxLKyQjWZYsXAL8ie1ux4p2hf2wvUzEl3kBD8AiEA6asT-4qs951LinU4sAxHFFoJz4XsIY1rAQV_fcLBwA4
SC-12-015,https://vxqr.org/sn/SC-12-015#MEUCIQC7_IXk8fTV5Xdtp3nZpIcG4bwTekEhiqadfJURUgLXRgIgce5eRGHTZoNJLIEelvC6JtV1nxVbUqeV01F0mhiLT2k
SC-12-016,https://vxqr.org/sn/SC-12-016#MEUCIQCyJ5o-F5NOI0guNFpzDRwh0u3KmGMc9J4t87wBQ2Z6ZQIgPlb1nkQBdne4APXUiJN4E8D2YtFH1qOrTSzU42zxkKk
SC-12-017,https://vxqr.org/sn/SC-12-017#MEUCIQDT6ACQxrb91CY475zheUGhM8q4sHtjPWsvdqo-ld4juQIgT4s-DVHG2snURosZ6pW3VYwEHuI0GMq-TVlCH6Cbuk8
SC-12-018,https://vxqr.org/sn/SC-12-018#MEUCIQCsEXg2G0iIiBTtMS7uTQqXIBXzJoZNQrYfzs19GkKWqQIgGoOW4EJFi33tpVrR2XAQP5RngMTFGcc1e9OLnnYML0w
SC-12-019,https://vxqr.org/sn/SC-12-019#MEQCIEOliDydGEQl6qw0SOC-4ieknHK22rTsXEPXoGxIeQCJAiAIi118-nvn_XLruBK_dQkG-vnhW2gz4NqOEW7k0ip71Q
SC-12-020,https://vxqr.org/sn/SC-12-020#MEUCIHkj2p3Sy6l7Apyx8kSUTJtMaKdd6KCr1p0BMkdPydnbAiEA7XUOnwSzt4yFBtTo-sfE8_91csGyESgUvXQZOIp67QA
SC-12-021,https://vxqr.org/sn/SC-12-021#MEQCICw_AJvCRgyp9yz28rYeHAbl2gL_KCjyGcmWvPOL22klAiA0v8e1Sykk-zJ8wNATxohFotrFFS6QWfbvYFBG1EpEBg
SC-12-022,https://vxqr.org/sn/SC-12-022#MEUCIGXPQ87_BElreJxGHLvyRnpnqDp-ExhUwTbxX6ck76c9AiEAgadJ4IzdE8lj4SsX3OSQQMtJXVk4c9A8tB1uX8G7AeQ
SC-12-023,https://vxqr.org/sn/SC-12-023#MEUCIQDG00h-7PDildoFNa78ih9SjbiC9jmviAsqtZFWnFIgPQIgIqhXk3gMwk28TdR3Z-IFc0clxh2hY1YcCehWwFnNjMk
SC-12-024,https://vxqr.org/sn/SC-12-024#MEQCIHQxoD-9kLxji6ZicerT6DFuWLbn-FInyyNzeEwDREPmAiBvMk63cm5SwQ86Zm_WHCx55unmt87nDovOoMT5jYU8VQ
SC-12-025,https://vxqr.org/sn/SC-12-025#MEUCIQDaS9TUO_dcXWXfYP8jBRmBNSiO_JOHJ9BwSilFAxRtEAIgd5CDQMhmsur5EVXfxw8qMvCXuWSkg_Q52zRIxKjAjsk
SC-12-026,https://vxqr.org/sn/SC-12-026#MEUCIHhr4VspOKPidfWOq-7QwWyw_ARSfbgYriM_FEMermm8AiEA6x8dKdTcGVfq_JmMtkpGulbr6dKBbt28cufPxNEArOo
SC-12-027,https://vxqr.org/sn/SC-12-027#MEYCIQCgxGp3BLjUGKD2HJIMeEonKbxMeJxdsKnnax7p7mQVqQIhAPr7EZjRf08WVbq2dKICv1it5sGjpcNdsWvMKYTupKiX
SC-12-028,https://vxqr.org/sn/SC-12-028#MEUCIQCfYQdHr1RIecmox2Ism7L5DA8MflYmKGMvRuQ9ZSzlNQIgFZ1IGTGWsX9m4Qd4KUaRjABaX4N2UwJLiTJ50_c0pXc
SC-12-029,https://vxqr.org/sn/SC-12-029#MEUCIQCIEtfhUnN3QKirxG5eXdGtura76RvcHHacZpUfD0LZ1gIgAKQj_WPbiH82cq-XSDD995XnWoZE9NbSJIVVOmQaN14
SC-12-030,https://vxqr.org/sn/SC-12-030#MEUCIAQo9gLjOStFdrmyobh0QXT231IFvsxLHaJUkvdre6pCAiEA1q4MCk4b37cevO7_JVyux0vS1qMxhRbVwU_3Hd9wzFE
SC-12-031,https://vxqr.org/sn/SC-12-031#MEQCIBD_sc_88TQ8XgwEDUoJnTbhQp6iDQPszV8bUMgFzbBlAiBayZdC2I1QcbBF7mWM-4s_S2JdZ_mOE0w6aAnfk7P71w
SC-12-032,https://vxqr.org/sn/SC-12-032#MEQCIBADC6hwjcUUwGizUgXwXhS3V72IHlAwlOFWiSHheKn7AiBGcja8ShpHofK6znjQapIRiWh7EySDkyDhhZWUFcHuLw
SC-12-033,https://vxqr.org/sn/SC-12-033#MEQCIGgXiZNqPB2_Sglwvj3ivN7uyO9f7LYP2o-ws82vkta9AiAmKk8xdQkKIizSNgqRjI8_enXAtsAr9qo0wrsFveeLFA
SC-12-034,https://vxqr.org/sn/SC-12-034#MEQCIBjtQiB2szfBbe8Y8-3XneZY9wiM-Jf5jKVR4RU2JUdxAiBI7DVHhmThPOdVgtimmGVzwL85SqQ2AIQ4mtY73J48-w
SC-12-035,https://vxqr.org/sn/SC-12-035#MEYCIQDClRguBRdk72jU5dBQ-1axnhaFK1m8lJmjPHzo6VplJgIhALCoJRxEluTlxBlBMLJQ8CcYWTklCzwqVtgZ5Dl0v7v-
SC-12-036,https://vxqr.org/sn/SC-12-036#MEYCIQCsAa7vwXturjK1e9q17CL5HdVOXOs87Hykltate-_TIAIhAMonsLkLunbv0g-H3LhGD6ujpZ31x9JBsrkqW1nWokNn
SC-12-037,https://vxqr.org/sn/SC-12-037#MEYCIQDHTT_xVa8NMuL6q7Q2OYua6f71UJXQCu7efeDO8CiHrAIhAO6Oy3TssM1vTzHdqW9NyaExp5o4kBmNkZLK2esViAt6
SC-12-038,https://vxqr.org/sn/SC-12-038#MEYCIQD4mpLY6l67PDIa0UC3R8R5DRtmQRzaUUJVHLycTAF-0gIhANj6phYm6GoWSJV9RwR5l_1tHf_BgvVkod1s8X5h2-DW
SC-12-039,https://vxqr.org/sn/SC-12-039#MEQCIAhwPtBHe9_icl3EgvuWaWhJHvjGKqq4bROCspkLl5jVAiBVTQCtJnpoZzqPFz57zY-RM0mdQeSXhBDg1lMudRm1TA
SC-12-040,https://vxqr.org/sn/SC-12-040#MEUCIFlWIHhKYw_sXQ_Zb9TaLwFAhGJICCgVCKc4Z3g2__vLAiEA58jHERWe1FCZOiqVNHneFLDsOfg4sqO8KNtiTeAZcLA
SC-12-041,https://vxqr.org/sn/SC-12-041#MEQCIAxJocyyaD_wvO8tzB_bDppREtg8e1e4-CCMydK7KLaVAiBwFDIer6DvKZf-yqqzY1vf-RxosA79wyBudZV99Oqiwg
SC-12-042,https://vxqr.org/sn/SC-12-042#MEQCIE8_il1JVjZYOajFvmHzCDGNbkPDNFFFQC3p4BX8SC2JAiAy0xROX_9XLIVYqKoREwDsR9qydhRv750LBfmUtBkZdw
SC-12-043,https://vxqr.org/sn/SC-12-043#MEUCIQCMVLYCvJaN6Rg-3ep_qj10Kgg5HvK5ddHHMt-eEeYMFQIgER1klrNZmsJtt-iffL4CopLV0DAYIXehMNGmrc1V7BA
SC-12-044,https://vxqr.org/sn/SC-12-044#MEUCIQCYZzZ3yDwo7A7rMBgzvCkzxGCvnq6MgXj8vWzrA6nk0QIgdpZVPgC_JQcbbziWs-wcngl1lW6aW308NLJCU2wqVIU
SC-12-045,https://vxqr.org/sn/SC-12-045#MEYCIQCWU534zQ23ZgB94VhudXBq-7kHozfKTWj6jp8OBwbjxgIhAP4bDP2h9K4sWM_dwTCZAcH-tynNu0IQ2vKwOnsMQ_wy
SC-12-046,https://vxqr.org/sn/SC-12-046#MEUCIQDAnRAqo0p0Sg58obKdfFUJnql6bewetfy3nR_E7zZC9AIgb_n5hEb59MwZg6_KumkfaQPcDKTVL-jbm7b3wJwdQh4
SC-12-047,https://vxqr.org/sn/SC-12-047#MEQCIFXWwP3Inzs7gTE1-8f_Sv8t2-RJcvIw8u3o5CpOyTQ1AiBxt7hBNVuRBCd4QEfF6A6egXgG6tgbd7beh_KOJzVGFQ
SC-12-048,https://vxqr.org/sn/SC-12-048#MEUCIQCvBlRLq17M5QhhHGOlhit_aENjJGtA9x6DZOTiADIf3gIgFSu5rU3VufQUd3fmv6gDsdQwUE2uGj5bI9QRjayrheo
SC-12-049,https://vxqr.org/sn/SC-12-049#MEUCIQDh5plwQ1tjIYM3XHBZ6tlXjXP3y7Xz8lGWq4dqC09MYAIgdp-e815ZOAPSKA2qgk_5cOimndI59zbJs3oFkV3K5vo
SC-12-050,https://vxqr.org/sn/SC-12-050#MEYCIQDTwP1Vf5WKmCZU0-EWOaTMLdpC-4IWnf1vrqvplupiIwIhAIuRU4iAt5-GcWpDdBaBCfItWmWUrFsg6eSfyzZmJBPi
SC-12-051,https://vxqr.org/sn/SC-12-051#MEUCIQDKdzj32XNcIrVa2AWCnMN5SiM3FCsDsuGcugC1HpWXIQIgEl52XKexBJRIAbuMl2JUVB_jZOAGO8Z6r4KtTxMhJdA
SC-12-052,https://vxqr.org/sn/SC-12-052#MEQCIF6U-x7YsrC8O5Pw9FZrU-45GwwHchZSxeIyXTfvkJ65AiB59Il-vMVpXwA_yv5KuHyfYX2JnMGCCcMPYRBCCjmckw
SC-12-053,https://vxqr.org/sn/SC-12-053#MEQCIAtMbsdTWKoQ_dVZGGpFqSt_epTOQlBb_ju3Q3FCOzI-AiATrPEntCvb7gzCg0ATCWMheLhNumfmYT83qvRu9yengw
SC-12-054,https://vxqr.org/sn/SC-12-054#MEQCIEYo-GIYk6nH3DbEmcM4c8zE5g5nPBzdsjqBWtaOhYB3AiARUKcD8BZqzguxFFcD6qjtkYvbXqyPXyFVWFleIzFoug
SC-12-055,https://vxqr.org/sn/SC-12-055#MEQCIF_UcT_B3k0JPwxtr1cEAwhN5fMx6c_d5w9rDkUfZZBvAiB_o2-N2Fltg2DwyZTaHEbzPXdVZvn8NpLumZgmnvPHbA
SC-12-056,https://vxqr.org/sn/SC-12-056#MEUCIQDodaGRKJFB6WVjxi5tHMhHv9pbXiL4LpnECwCov3-p7gIgJ3Xo8aPVx-eBqXskHXLQZWySYaqWiZdfuTgYAmvgeac
SC-12-057,https://vxqr.org/sn/SC-12-057#MEUCIQCA6guFZBRuS38YNq4u9C9kEJOaSZ65eCyGTQM40xkvLAIgB5Vv32lyPQOzIQ8oD5vsNDs0K00ApK4PhANY7F6y1WQ
SC-12-058,https://vxqr.org/sn/SC-12-058#MEYCIQCvfulC9ien7Zq_QELTfPi3QLY5GX3t59bEgrD-4-qb4wIhAPJZ2mSDRDuJEUZf9In0yxeEU-t5SfZDC3Twq0AeDhHO
SC-12-059,https://vxqr.org/sn/SC-12-059#MEUCIEYVvtMP1VwEVa_PujY-7Ijn-pWFqHBBySlXqqa7gyA4AiEA58ZdZ4IkD6sUclddwukwGpGlSZ9evHyEVpr3hch1TKE
SC-12-060,https://vxqr.org/sn/SC-12-060#MEUCIQD8z2PFOvqLYjvMcy1Dd9AaPJSqkR7xH2E1lC16AOlL7AIgaKrWcsOaKflu44yytzqhxOmXWcBhPnDRDS0iBiUIhfI
SC-12-061,https://vxqr.org/sn/SC-12-061#MEUCIQCtxL1K1Qnp_kk6wq7FqTcMewENBIJ9FnAieq9ygAeslQIgV3olm0SQgrW_Exq8NwvNlrje3FJlXtbz35CJBdqTUZs
SC-12-062,https://vxqr.org/sn/SC-12-062#MEUCIDO1EF6XAB4ebweD80oWwTWYdxDp2k82go8SQ_TQ1naEAiEA3gYnf401tmmROy1HFeJ9Nxo3vWR7jPjRIDhs1i0RLRk
SC-12-063,https://vxqr.org/sn/SC-12-063#MEQCID9grFuByqYDt10MliNNCP-V4v4KqyQnEPfKjMxibeDyAiBs5VIe6L5ZWdY15w23CdWrHcaJb_ymOPNPj3UxT2ThzQ
SC-12-064,https://vxqr.org/sn/SC-12-064#MEQCIFzT3vB5cQ6Pq88TsTr3Y8NmCzH8qCp-FVYJK91nBnzUAiAiqxG9o6HkR5jidYuf9QD0ElhAh7rYNyajbapQHTMyjQ
SC-12-065,https://vxqr.org/sn/SC-12-065#MEYCIQDoazVWX-YT3MxEqMQ8-Pw55Ce8_G6T-t3emlai5UI6fwIhAPmEPtFVkfiZXlUhvdWEfqsNnSSuHH0CyxkykE-PeSmO
SC-12-066,https://vxqr.org/sn/SC-12-066#MEUCIHZoOIDVsye-Ob0I_-gAPnVb0tC4kMLCvEv-93Ga-1RVAiEA5aBua1_5K7JkmlDIFFnaCTnA6--EG0rlpD3JOFxyGPc
SC-12-067,https://vxqr.org/sn/SC-12-067#MEUCIFs88jWRXeXjOA1VbqGGWpv-Z7u1a-QkRwoivftCIo8lAiEAyD7S2l_DXynMBuEbb_8juG3TzLsH6bfhWfCQWTP2b90
SC-12-068,https://vxqr.org/sn/SC-12-068#MEUCIQCwpHYN3Utiy150qnPeQTS9gPz17VGPHCY_qml_6-NmdgIgKdEH7X1nt64lxEmHgLqgdptLIkXscIoAPhupIKR91Qk
SC-12-069,https://vxqr.org/sn/SC-12-069#MEUCIFyp-rRDZK0BvsqDjJ-4OL2xwD9GhJ5ov9lFkckYcjSCAiEApiD-Zw3tYU_2_ceC8hvK5EiHNSdQOAb2P8qG5mQVjvY
SC-12-070,https://vxqr.org/sn/SC-12-070#MEYCIQDzSWGa2DtxywKrmW_6lpnvQuDoNW473nOQ73oBYeNhYAIhAJij1C6PoXjkHpzSi3LHzQuPFJYn3uJoTwRzveocQxf3
SC-12-071,https://vxqr.org/sn/SC-12-071#MEUCIFu9C9u86UBF0hLky4kceNEKtmAGhT36tNLp__r1NzVoAiEAoK3yyvwj3nHlqKzF-6fIe5v288Vw5_gqGQCCxRnoJCk
SC-12-072,https://vxqr.org/sn/SC-12-072#MEYCIQD0_qm5JoSSPpLYfHrR2wl_Qx1srAwkJTP6xOOHE6svWwIhAJH9OCswWr-pQqp6uhb0FKjUkLQykCDcRQFnq9zeL-Eh
SC-12-073,https://vxqr.org/sn/SC-12-073#MEUCIQCtiCAyBs98UJ16B3_USkgh1YgUMs-40nUW56v0EhyKcQIgaPmKcKmrcJXHYtdiEmgXuqDKy9fCAeVLvWb_MIdnMeY
SC-12-074,https://vxqr.org/sn/SC-12-074#MEUCIDQu0kBGCPHqOOXtAGEBHN09v1Grr0VoZQwbkcIqcucKAiEA5_9einJw3AupNekaqcVL1Kxqk3mTtvgYIeFWWPYjl4Y
SC-12-075,https://vxqr.org/sn/SC-12-075#MEUCIQDw3U9Myhp2-OrUd7ramipfqeb1BTmrYn6hCRkaQwCPkgIgLobJAKEUqYWp_-rij2fnd65MsQu7hnpRAb2j4_1Yfh4
SC-12-076,https://vxqr.org/sn/SC-12-076#MEQCIFVpXSepcxQn5N1bip2xZJqqvxqhuy3sqZhXXvw-p10bAiAW1x397-V1iBJ2M36-V5-WV1d6PC625kluWZhNnM4rpg
SC-12-077,https://vxqr.org/sn/SC-12-077#MEQCIGz2FHbS72pct0brVxtUS6NhJ-S3k4xqHFaWk8l_QzvjAiBpLv0hsy6Tix7ANEYxa7pfZWMFm3XlaPSsJT9LzrJF2w
SC-12-078,https://vxqr.org/sn/SC-12-078#MEQCIBMTURYy84XkGHdAcviFArvO2OYtTck1Fq5yTBEMZfMuAiAEh2QuDLeTyprugEwmJr7lQK2JOnpnP04Vs0LL1EUZYA
SC-12-079,https://vxqr.org/sn/SC-12-079#MEYCIQDot3PFtymNtgw1Ib7BpzZGf_ZbxRCsSNsldW8YNWhqhgIhAPxAtC6Dp_0vYd2hUoLmGiDkmejQT3Omm7QAL_VfFjsq
SC-12-080,https://vxqr.org/sn/SC-12-080#MEUCIQDC7qHn6qU_TaPQyGekHfuP9_3bVrKfxkIkE7u7qdlFUgIgeAhiWTmtrFhgyTZ7mYLji8u0Zv7_gzZY7OhstyklgSo
SC-12-081,https://vxqr.org/sn/SC-12-081#MEQCIHhX99vd4tEHg-trMfwm_qV-C8ZZOVEflo7N9nkQOeQqAiBRfZDJsh3BFqY9xkc5WJ__X6VVCZx0flwjkpMxMlkuEg
SC-12-082,https://vxqr.org/sn/SC-12-082#MEQCIA2qlFTEf4_zU0OvAvDeDPvTqmBmZun67s8LA8fi32NYAiAp4DrE1pQYt5KX2T6WN7c8Yt0XOT1ovyOM_XXR0tHhWg
SC-12-083,https://vxqr.org/sn/SC-12-083#MEQCIFSqT1NUE6u4lNELHm_Tbr6Bp32GakmJbS_KuFu31feAAiBvodx6RyIBYOmokAD46GGLlEBstyHBtDvYxjiQn-snzw
SC-12-084,https://vxqr.org/sn/SC-12-084#MEQCIAc1-o-pxr1-JYmvPnrU1c_l8-ZJksjRw-Edv4nmE9qCAiAJxy-SY6tUJ2rdqqv1RGqTGtyNHdiWmxDWMEsuXwVntA
SC-12-085,https://vxqr.org/sn/SC-12-085#MEUCIQCOpILS6FW0WblBQyxCYnicRtoUbkqXlaHk81f-Z3vL8QIgGfLv1egWgEvUDIH3EhondFCezysAdonSbuQvzeZqpLQ
SC-12-086,https://vxqr.org/sn/SC-12-086#MEYCIQDHC1WSx8474S-3V8hPV8iADLb2XLwadGRLPni19-adNwIhALLhai1g4uDetmdx_u717wqj3g6NH_65pNM82TgYi_Pr
SC-12-087,https://vxqr.org/sn/SC-12-087#MEUCIQCZPfjzGx6yK8NslgY2igB-ZqUlH3mSJkheZeotr2wMHQIgLSlAgLWdcB3T1L1az4WFWDztnEaPcpVA67PwSbYA-o8
SC-12-088,https://vxqr.org/sn/SC-12-088#MEUCIQCi_4CwwWMjxFxpRxA9TmyohjtBELhACQ5FlcLJ1hugIwIgBDEvaf57bi3CqyLvzO4pK-6c7Pqz5LK38QGogxIbbhs
SC-12-089,https://vxqr.org/sn/SC-12-089#MEUCIBXDZmKliyv4wMjQnTA6OhDbSJpQn4SZLOuA62Rzdo8cAiEAzi63CFnpIrDSRc3I9IPNTrnyXvhT9TmxvDEaxS_Hf-Q
SC-12-090,https://vxqr.org/sn/SC-12-090#MEUCIQDJ0U7Nf8HPRRa2cWro7dIVHQaKI4Qzjo-dW0W5MXAPewIgdA3YnNksnrrKJO5gHl2pvk49MGeUszFYmHPGLTTDQuY
SC-12-091,https://vxqr.org/sn/SC-12-091#MEUCIQC5Z8e-S7ckgEoXXqWw32yTk1OWJkOd6-2cCQvEzfGXlwIgGm0IBxM5a07--q5x3xDP4xuiOvtDYMilP8vywuDozko
SC-12-092,https://vxqr.org/sn/SC-12-092#MEYCIQCvDf9H3xWheSwYTReYYIU1g21Mu5FDT7hXh2l4I3D2igIhAIrNP1jPb-w73pYkyxBHGD1EbXFUedLAm4egEjo0hA2A
SC-12-093,https://vxqr.org/sn/SC-12-093#MEYCIQCW9S2c13pE-mypVVYkOEQrooMDyKQPnY6D-oolXrkqhwIhAOmJaLsPIYhot4ueptXJ4d1_iWtYh23m4UY90BR5I7VQ
SC-12-094,https://vxqr.org/sn/SC-12-094#MEQCIEu1BABbTEZVNXNIDpK7GYvmMaFqSV8zS7WQCxbh_XcYAiBKLhNRRoB7JT7jf2R85Gd_QRhVqV7qfMBws0nwOKGRCQ
SC-12-095,https://vxqr.org/sn/SC-12-095#MEYCIQCv4BGMg7Mhe2_qqt7HJYK74QhikVqDkHw7bBKkjYxvTAIhAP80ElHfNKpLTwtSsA8uSqr0vJyAz77AMcck9d-WWu5b
SC-12-096,https://vxqr.org/sn/SC-12-096#MEQCIGIaGvYGXTAVWnBJlqrqsr8UIbfzOkptwuvnXt82hHMiAiBX5_lR9saBRCJlm26tMI4WgX3PnQD1Ghzu5HGCxIZw2g
SC-12-097,https://vxqr.org/sn/SC-12-097#MEYCIQDMeFCwJ-UfvSHOadkaffTEHHWQzOERSR9iW_QqLvxdGAIhAOn-pZ8V8uSjBDPtBl7VXnNK71jbPcLpuJnCQ1GbCF4w
SC-12-098,https://vxqr.org/sn/SC-12-098#MEUCIFlxJ-HA3vmfIsgj5k8DUKZQ7FPoHN5-CEcA4x8cBMaaAiEA9vTX7Zq1ieDzSWY4NY5dx7u0A6niKLzi-3voAzYlOSs
SC-12-099,https://vxqr.org/sn/SC-12-099#MEYCIQCTmjY1K2d_aH-oxFPB0tEtssHxmC1kRIHaxQYLGVma-wIhAOEKCazbtfLp-gt2z4HeMCt8hGBwbJaF6ruFNmnMI1Vy
SC-12-100,https://vxqr.org/sn/SC-12-100#MEQCICAcqmLLuLnz8NvJ5Gb68hkhan81S1XRLUbhmr9vqqQwAiBA4RRvGQICe91St6K57ueT-s-ehLmZnvyNyRHW9BJdqw
Loading