A Visual TrueType Hinting Tool for RoboFont · Fixed startpoint Try all points as startpoint Find...
Transcript of A Visual TrueType Hinting Tool for RoboFont · Fixed startpoint Try all points as startpoint Find...
![Page 1: A Visual TrueType Hinting Tool for RoboFont · Fixed startpoint Try all points as startpoint Find best matching by trying all pointed matchings and picking the best one. Matching](https://reader034.fdocuments.in/reader034/viewer/2022042923/5f7290b61d3bb3301f65b2d4/html5/thumbnails/1.jpg)
A Visual TrueType Hinting Tool for RoboFont
Jérémie Hornus & Samuel Hornus – Robothon 2015
![Page 2: A Visual TrueType Hinting Tool for RoboFont · Fixed startpoint Try all points as startpoint Find best matching by trying all pointed matchings and picking the best one. Matching](https://reader034.fdocuments.in/reader034/viewer/2022042923/5f7290b61d3bb3301f65b2d4/html5/thumbnails/2.jpg)
.TTF
?VTT FontLab
![Page 3: A Visual TrueType Hinting Tool for RoboFont · Fixed startpoint Try all points as startpoint Find best matching by trying all pointed matchings and picking the best one. Matching](https://reader034.fdocuments.in/reader034/viewer/2022042923/5f7290b61d3bb3301f65b2d4/html5/thumbnails/3.jpg)
RoboFont
FontLab
![Page 4: A Visual TrueType Hinting Tool for RoboFont · Fixed startpoint Try all points as startpoint Find best matching by trying all pointed matchings and picking the best one. Matching](https://reader034.fdocuments.in/reader034/viewer/2022042923/5f7290b61d3bb3301f65b2d4/html5/thumbnails/4.jpg)
Contents
• Visual Interactive feedback• Quadratic Converter• From VGP to TT ASM• Inside the UFO• Inside the TTF
• Some tools to help the hinter’s work
![Page 5: A Visual TrueType Hinting Tool for RoboFont · Fixed startpoint Try all points as startpoint Find best matching by trying all pointed matchings and picking the best one. Matching](https://reader034.fdocuments.in/reader034/viewer/2022042923/5f7290b61d3bb3301f65b2d4/html5/thumbnails/5.jpg)
DEMO time
![Page 6: A Visual TrueType Hinting Tool for RoboFont · Fixed startpoint Try all points as startpoint Find best matching by trying all pointed matchings and picking the best one. Matching](https://reader034.fdocuments.in/reader034/viewer/2022042923/5f7290b61d3bb3301f65b2d4/html5/thumbnails/6.jpg)
Cubic(PostScript)
QuadraticConverter
Quadratic(TrueType)
![Page 7: A Visual TrueType Hinting Tool for RoboFont · Fixed startpoint Try all points as startpoint Find best matching by trying all pointed matchings and picking the best one. Matching](https://reader034.fdocuments.in/reader034/viewer/2022042923/5f7290b61d3bb3301f65b2d4/html5/thumbnails/7.jpg)
Interactive Feedback
User modiies Visual Glyph Program
Update TrueType Assembly
Generate Mini Font.TTF
FreeType/freetype-py
grid-itted outline& bitmap
![Page 8: A Visual TrueType Hinting Tool for RoboFont · Fixed startpoint Try all points as startpoint Find best matching by trying all pointed matchings and picking the best one. Matching](https://reader034.fdocuments.in/reader034/viewer/2022042923/5f7290b61d3bb3301f65b2d4/html5/thumbnails/8.jpg)
Visual Glyph Program
Visual Commands:
• Align• Single Link• Double Link• Interpolate• Middle Delta• Final Delta
![Page 9: A Visual TrueType Hinting Tool for RoboFont · Fixed startpoint Try all points as startpoint Find best matching by trying all pointed matchings and picking the best one. Matching](https://reader034.fdocuments.in/reader034/viewer/2022042923/5f7290b61d3bb3301f65b2d4/html5/thumbnails/9.jpg)
Visual Glyph Program
Visual Commands:
• Align• Single Link• Double Link• Interpolate• Middle Delta• Final Delta
![Page 10: A Visual TrueType Hinting Tool for RoboFont · Fixed startpoint Try all points as startpoint Find best matching by trying all pointed matchings and picking the best one. Matching](https://reader034.fdocuments.in/reader034/viewer/2022042923/5f7290b61d3bb3301f65b2d4/html5/thumbnails/10.jpg)
Visual Glyph Program
Topological Sort
Grouping
TrueType Assembly
A before B?B before A?
Doesn’t matter?
Sorts commands by pairs according to
TYPE and POINTS involved.
Set of Rules
Groups consecutive commands having similar types (align, single, interpolate, etc.).
Process Batches
![Page 11: A Visual TrueType Hinting Tool for RoboFont · Fixed startpoint Try all points as startpoint Find best matching by trying all pointed matchings and picking the best one. Matching](https://reader034.fdocuments.in/reader034/viewer/2022042923/5f7290b61d3bb3301f65b2d4/html5/thumbnails/11.jpg)
BATCH
![Page 12: A Visual TrueType Hinting Tool for RoboFont · Fixed startpoint Try all points as startpoint Find best matching by trying all pointed matchings and picking the best one. Matching](https://reader034.fdocuments.in/reader034/viewer/2022042923/5f7290b61d3bb3301f65b2d4/html5/thumbnails/12.jpg)
lib
![Page 13: A Visual TrueType Hinting Tool for RoboFont · Fixed startpoint Try all points as startpoint Find best matching by trying all pointed matchings and picking the best one. Matching](https://reader034.fdocuments.in/reader034/viewer/2022042923/5f7290b61d3bb3301f65b2d4/html5/thumbnails/13.jpg)
.glif
com.fontlab.ttprogramVisual Glyph Programencoded in base 64
com.robofont.robohint.assemblyPlain TrueType Assembly
![Page 14: A Visual TrueType Hinting Tool for RoboFont · Fixed startpoint Try all points as startpoint Find best matching by trying all pointed matchings and picking the best one. Matching](https://reader034.fdocuments.in/reader034/viewer/2022042923/5f7290b61d3bb3301f65b2d4/html5/thumbnails/14.jpg)
ControlValueTable<CVT>
PreProgramor
ControlValueProgram<PREP>
FontProgram<FPGM>
<GASP>
GlyphAssembly<GLYF>
functions size-dependentrasterizercontrol
stems and zonesdeinitions
set stems and zonesaccording to the pixel size
…
.TTF
![Page 15: A Visual TrueType Hinting Tool for RoboFont · Fixed startpoint Try all points as startpoint Find best matching by trying all pointed matchings and picking the best one. Matching](https://reader034.fdocuments.in/reader034/viewer/2022042923/5f7290b61d3bb3301f65b2d4/html5/thumbnails/15.jpg)
Helper Tools
![Page 16: A Visual TrueType Hinting Tool for RoboFont · Fixed startpoint Try all points as startpoint Find best matching by trying all pointed matchings and picking the best one. Matching](https://reader034.fdocuments.in/reader034/viewer/2022042923/5f7290b61d3bb3301f65b2d4/html5/thumbnails/16.jpg)
Helper Tools
Auto-stemFinds typical stem widths
![Page 17: A Visual TrueType Hinting Tool for RoboFont · Fixed startpoint Try all points as startpoint Find best matching by trying all pointed matchings and picking the best one. Matching](https://reader034.fdocuments.in/reader034/viewer/2022042923/5f7290b61d3bb3301f65b2d4/html5/thumbnails/17.jpg)
Helper Tools
Auto-hintGenerates a Visual Glyph Program
Auto-stemFinds typical stem widths
![Page 18: A Visual TrueType Hinting Tool for RoboFont · Fixed startpoint Try all points as startpoint Find best matching by trying all pointed matchings and picking the best one. Matching](https://reader034.fdocuments.in/reader034/viewer/2022042923/5f7290b61d3bb3301f65b2d4/html5/thumbnails/18.jpg)
Helper Tools
Auto-hintGenerates a Visual Glyph Program
Stems and VGPprovide a
starting pointfor the fonthinting job
Auto-stemFinds typical stem widths
![Page 19: A Visual TrueType Hinting Tool for RoboFont · Fixed startpoint Try all points as startpoint Find best matching by trying all pointed matchings and picking the best one. Matching](https://reader034.fdocuments.in/reader034/viewer/2022042923/5f7290b61d3bb3301f65b2d4/html5/thumbnails/19.jpg)
Helper Tools
Auto-matchTransfers VGP to another font [in progress]
Auto-hintGenerates a Visual Glyph Program
Stems and VGPprovide a
starting pointfor the fonthinting job
Auto-stemFinds typical stem widths
![Page 20: A Visual TrueType Hinting Tool for RoboFont · Fixed startpoint Try all points as startpoint Find best matching by trying all pointed matchings and picking the best one. Matching](https://reader034.fdocuments.in/reader034/viewer/2022042923/5f7290b61d3bb3301f65b2d4/html5/thumbnails/20.jpg)
Defining a ‘stem’
‘stem’ = ‘special pair of control points’
![Page 21: A Visual TrueType Hinting Tool for RoboFont · Fixed startpoint Try all points as startpoint Find best matching by trying all pointed matchings and picking the best one. Matching](https://reader034.fdocuments.in/reader034/viewer/2022042923/5f7290b61d3bb3301f65b2d4/html5/thumbnails/21.jpg)
Defining a ‘stem’
Configuration of two points A and B:
- Position
- In- and Out- Tangents
- Clockwise
A
B
![Page 22: A Visual TrueType Hinting Tool for RoboFont · Fixed startpoint Try all points as startpoint Find best matching by trying all pointed matchings and picking the best one. Matching](https://reader034.fdocuments.in/reader034/viewer/2022042923/5f7290b61d3bb3301f65b2d4/html5/thumbnails/22.jpg)
Defining a ‘stem’
The two points A and B form a stem when:
A
B
![Page 23: A Visual TrueType Hinting Tool for RoboFont · Fixed startpoint Try all points as startpoint Find best matching by trying all pointed matchings and picking the best one. Matching](https://reader034.fdocuments.in/reader034/viewer/2022042923/5f7290b61d3bb3301f65b2d4/html5/thumbnails/23.jpg)
Defining a ‘stem’
The two points A and B form a stem when:
A
B
- A and B have two parallel tangents
- A lies on the inkedside of B’s tangentand vice-versa
- Segment [AB]is fully inked
![Page 24: A Visual TrueType Hinting Tool for RoboFont · Fixed startpoint Try all points as startpoint Find best matching by trying all pointed matchings and picking the best one. Matching](https://reader034.fdocuments.in/reader034/viewer/2022042923/5f7290b61d3bb3301f65b2d4/html5/thumbnails/24.jpg)
Finding ‘stems’
- A and B have two parallel tangents
- A lies on the inkedside of B’s tangentand vice-versa
- Segment [AB]is fully inked A
B
Find all stems and sort them intohorizontal stems and vertical stems.
![Page 25: A Visual TrueType Hinting Tool for RoboFont · Fixed startpoint Try all points as startpoint Find best matching by trying all pointed matchings and picking the best one. Matching](https://reader034.fdocuments.in/reader034/viewer/2022042923/5f7290b61d3bb3301f65b2d4/html5/thumbnails/25.jpg)
Finding ‘stems’
B
A
Is AB a stem?horizontal: yesvertical: no
![Page 26: A Visual TrueType Hinting Tool for RoboFont · Fixed startpoint Try all points as startpoint Find best matching by trying all pointed matchings and picking the best one. Matching](https://reader034.fdocuments.in/reader034/viewer/2022042923/5f7290b61d3bb3301f65b2d4/html5/thumbnails/26.jpg)
Auto-stem
[filling the CVT with relevant stem widths]
![Page 27: A Visual TrueType Hinting Tool for RoboFont · Fixed startpoint Try all points as startpoint Find best matching by trying all pointed matchings and picking the best one. Matching](https://reader034.fdocuments.in/reader034/viewer/2022042923/5f7290b61d3bb3301f65b2d4/html5/thumbnails/27.jpg)
Auto-stem
1 Gather stem widths into an array(of numbers)
0 20 40 60 80 100
![Page 28: A Visual TrueType Hinting Tool for RoboFont · Fixed startpoint Try all points as startpoint Find best matching by trying all pointed matchings and picking the best one. Matching](https://reader034.fdocuments.in/reader034/viewer/2022042923/5f7290b61d3bb3301f65b2d4/html5/thumbnails/28.jpg)
Auto-stem
1 Gather stem widths into an array(of numbers)
2 Cluster them into groups (k-means)
0 20 40 60 80 100
![Page 29: A Visual TrueType Hinting Tool for RoboFont · Fixed startpoint Try all points as startpoint Find best matching by trying all pointed matchings and picking the best one. Matching](https://reader034.fdocuments.in/reader034/viewer/2022042923/5f7290b61d3bb3301f65b2d4/html5/thumbnails/29.jpg)
Auto-stem
1 Gather stem widths into an array(of numbers)
2 Cluster them into groups (k-means)
3 Take the mean of each group as arelevant stem width
Control Value Table
0 20 40 60 80 100
16 45 73 102
![Page 30: A Visual TrueType Hinting Tool for RoboFont · Fixed startpoint Try all points as startpoint Find best matching by trying all pointed matchings and picking the best one. Matching](https://reader034.fdocuments.in/reader034/viewer/2022042923/5f7290b61d3bb3301f65b2d4/html5/thumbnails/30.jpg)
Auto-stem
1 Gather stem widths into an array(of numbers)
2 Cluster them into groups (k-means)
3 Take the mean of each group as arelevant stem width
Control Value Table
0 20 40 60 80 100
16 45 73 102
![Page 31: A Visual TrueType Hinting Tool for RoboFont · Fixed startpoint Try all points as startpoint Find best matching by trying all pointed matchings and picking the best one. Matching](https://reader034.fdocuments.in/reader034/viewer/2022042923/5f7290b61d3bb3301f65b2d4/html5/thumbnails/31.jpg)
Auto-hinting
[Automatically generates a VGP]
Two steps:1. Analyse the glyph by structuring its
set of points2. Use this structure to generate the VGP
![Page 32: A Visual TrueType Hinting Tool for RoboFont · Fixed startpoint Try all points as startpoint Find best matching by trying all pointed matchings and picking the best one. Matching](https://reader034.fdocuments.in/reader034/viewer/2022042923/5f7290b61d3bb3301f65b2d4/html5/thumbnails/32.jpg)
Alignments
horizontal alignments for vertical hinting
![Page 33: A Visual TrueType Hinting Tool for RoboFont · Fixed startpoint Try all points as startpoint Find best matching by trying all pointed matchings and picking the best one. Matching](https://reader034.fdocuments.in/reader034/viewer/2022042923/5f7290b61d3bb3301f65b2d4/html5/thumbnails/33.jpg)
Alignments
vertical alignments for horizontal hinting
![Page 34: A Visual TrueType Hinting Tool for RoboFont · Fixed startpoint Try all points as startpoint Find best matching by trying all pointed matchings and picking the best one. Matching](https://reader034.fdocuments.in/reader034/viewer/2022042923/5f7290b61d3bb3301f65b2d4/html5/thumbnails/34.jpg)
Alignments
abstracted
![Page 35: A Visual TrueType Hinting Tool for RoboFont · Fixed startpoint Try all points as startpoint Find best matching by trying all pointed matchings and picking the best one. Matching](https://reader034.fdocuments.in/reader034/viewer/2022042923/5f7290b61d3bb3301f65b2d4/html5/thumbnails/35.jpg)
Groups
![Page 36: A Visual TrueType Hinting Tool for RoboFont · Fixed startpoint Try all points as startpoint Find best matching by trying all pointed matchings and picking the best one. Matching](https://reader034.fdocuments.in/reader034/viewer/2022042923/5f7290b61d3bb3301f65b2d4/html5/thumbnails/36.jpg)
Groups
![Page 37: A Visual TrueType Hinting Tool for RoboFont · Fixed startpoint Try all points as startpoint Find best matching by trying all pointed matchings and picking the best one. Matching](https://reader034.fdocuments.in/reader034/viewer/2022042923/5f7290b61d3bb3301f65b2d4/html5/thumbnails/37.jpg)
Groups
![Page 38: A Visual TrueType Hinting Tool for RoboFont · Fixed startpoint Try all points as startpoint Find best matching by trying all pointed matchings and picking the best one. Matching](https://reader034.fdocuments.in/reader034/viewer/2022042923/5f7290b61d3bb3301f65b2d4/html5/thumbnails/38.jpg)
Groups
3 groups of alignments
![Page 39: A Visual TrueType Hinting Tool for RoboFont · Fixed startpoint Try all points as startpoint Find best matching by trying all pointed matchings and picking the best one. Matching](https://reader034.fdocuments.in/reader034/viewer/2022042923/5f7290b61d3bb3301f65b2d4/html5/thumbnails/39.jpg)
Hinting the groups (in X)
R
RR
![Page 40: A Visual TrueType Hinting Tool for RoboFont · Fixed startpoint Try all points as startpoint Find best matching by trying all pointed matchings and picking the best one. Matching](https://reader034.fdocuments.in/reader034/viewer/2022042923/5f7290b61d3bb3301f65b2d4/html5/thumbnails/40.jpg)
Hinting the groups (in X)
R
RR
I
![Page 41: A Visual TrueType Hinting Tool for RoboFont · Fixed startpoint Try all points as startpoint Find best matching by trying all pointed matchings and picking the best one. Matching](https://reader034.fdocuments.in/reader034/viewer/2022042923/5f7290b61d3bb3301f65b2d4/html5/thumbnails/41.jpg)
Hinting alignments in a group (in X)
leader alignment;received theinterpolate command.
I
![Page 42: A Visual TrueType Hinting Tool for RoboFont · Fixed startpoint Try all points as startpoint Find best matching by trying all pointed matchings and picking the best one. Matching](https://reader034.fdocuments.in/reader034/viewer/2022042923/5f7290b61d3bb3301f65b2d4/html5/thumbnails/42.jpg)
Hinting alignments in a group (in X)
S_X_70 S_X_70S_X_80
I
![Page 43: A Visual TrueType Hinting Tool for RoboFont · Fixed startpoint Try all points as startpoint Find best matching by trying all pointed matchings and picking the best one. Matching](https://reader034.fdocuments.in/reader034/viewer/2022042923/5f7290b61d3bb3301f65b2d4/html5/thumbnails/43.jpg)
Hinting alignments in a group (in X)
Finally,the points in analignment aresingle-link’d.
S
S
![Page 44: A Visual TrueType Hinting Tool for RoboFont · Fixed startpoint Try all points as startpoint Find best matching by trying all pointed matchings and picking the best one. Matching](https://reader034.fdocuments.in/reader034/viewer/2022042923/5f7290b61d3bb3301f65b2d4/html5/thumbnails/44.jpg)
VGP transfer via contour matching
![Page 45: A Visual TrueType Hinting Tool for RoboFont · Fixed startpoint Try all points as startpoint Find best matching by trying all pointed matchings and picking the best one. Matching](https://reader034.fdocuments.in/reader034/viewer/2022042923/5f7290b61d3bb3301f65b2d4/html5/thumbnails/45.jpg)
VGP transfer via contour matching
![Page 46: A Visual TrueType Hinting Tool for RoboFont · Fixed startpoint Try all points as startpoint Find best matching by trying all pointed matchings and picking the best one. Matching](https://reader034.fdocuments.in/reader034/viewer/2022042923/5f7290b61d3bb3301f65b2d4/html5/thumbnails/46.jpg)
VGP transfer via contour matching
transfer
![Page 47: A Visual TrueType Hinting Tool for RoboFont · Fixed startpoint Try all points as startpoint Find best matching by trying all pointed matchings and picking the best one. Matching](https://reader034.fdocuments.in/reader034/viewer/2022042923/5f7290b61d3bb3301f65b2d4/html5/thumbnails/47.jpg)
VGP transfer via contour matching
1. Measuring dissimilarity of 2 points2. Matching 2 pointed contours
(with a startpoint)3. Matching 2 contours4. Matching 2 glyphs
![Page 48: A Visual TrueType Hinting Tool for RoboFont · Fixed startpoint Try all points as startpoint Find best matching by trying all pointed matchings and picking the best one. Matching](https://reader034.fdocuments.in/reader034/viewer/2022042923/5f7290b61d3bb3301f65b2d4/html5/thumbnails/48.jpg)
2 points dissimilarity
A
B
toA
tiA
toBti
B
We choose D(A,B) so that it is small when A
and B are close and have similar tangents.
D(A,B) =(
f(tiA, ti
B) + f(toA, to
B))
× ||A− B||2
where f(tA, tB) =2
1+ tA · tB
For example D(A,B) < D(A,C)
CtoC
tiC
![Page 49: A Visual TrueType Hinting Tool for RoboFont · Fixed startpoint Try all points as startpoint Find best matching by trying all pointed matchings and picking the best one. Matching](https://reader034.fdocuments.in/reader034/viewer/2022042923/5f7290b61d3bb3301f65b2d4/html5/thumbnails/49.jpg)
Matching two pointed contours
startpoint of contour
What is a matching?
![Page 50: A Visual TrueType Hinting Tool for RoboFont · Fixed startpoint Try all points as startpoint Find best matching by trying all pointed matchings and picking the best one. Matching](https://reader034.fdocuments.in/reader034/viewer/2022042923/5f7290b61d3bb3301f65b2d4/html5/thumbnails/50.jpg)
Matching two pointed contours
• Maps each point of source contour to apoint of target contour
![Page 51: A Visual TrueType Hinting Tool for RoboFont · Fixed startpoint Try all points as startpoint Find best matching by trying all pointed matchings and picking the best one. Matching](https://reader034.fdocuments.in/reader034/viewer/2022042923/5f7290b61d3bb3301f65b2d4/html5/thumbnails/51.jpg)
Matching two pointed contours
• Maps each point of source contour to apoint of target contour
• Maps source startpoint to target startpoint• Crossing arrows are forbidden
![Page 52: A Visual TrueType Hinting Tool for RoboFont · Fixed startpoint Try all points as startpoint Find best matching by trying all pointed matchings and picking the best one. Matching](https://reader034.fdocuments.in/reader034/viewer/2022042923/5f7290b61d3bb3301f65b2d4/html5/thumbnails/52.jpg)
Matching two pointed contours
Score of this pointed matching is∑
arrows
D( , )
D D D D D D D D
![Page 53: A Visual TrueType Hinting Tool for RoboFont · Fixed startpoint Try all points as startpoint Find best matching by trying all pointed matchings and picking the best one. Matching](https://reader034.fdocuments.in/reader034/viewer/2022042923/5f7290b61d3bb3301f65b2d4/html5/thumbnails/53.jpg)
Matching two pointed contours
Find the best pointed matching (lowestscore) with dynamic programming
![Page 54: A Visual TrueType Hinting Tool for RoboFont · Fixed startpoint Try all points as startpoint Find best matching by trying all pointed matchings and picking the best one. Matching](https://reader034.fdocuments.in/reader034/viewer/2022042923/5f7290b61d3bb3301f65b2d4/html5/thumbnails/54.jpg)
Matching two contours
Fixed startpoint
Try all points as startpoint
![Page 55: A Visual TrueType Hinting Tool for RoboFont · Fixed startpoint Try all points as startpoint Find best matching by trying all pointed matchings and picking the best one. Matching](https://reader034.fdocuments.in/reader034/viewer/2022042923/5f7290b61d3bb3301f65b2d4/html5/thumbnails/55.jpg)
Matching two contours
Fixed startpoint
Try all points as startpoint
Find best matching by trying all pointedmatchings and picking the best one
![Page 56: A Visual TrueType Hinting Tool for RoboFont · Fixed startpoint Try all points as startpoint Find best matching by trying all pointed matchings and picking the best one. Matching](https://reader034.fdocuments.in/reader034/viewer/2022042923/5f7290b61d3bb3301f65b2d4/html5/thumbnails/56.jpg)
Matching two glyphs
source glyphtarget glyph
![Page 57: A Visual TrueType Hinting Tool for RoboFont · Fixed startpoint Try all points as startpoint Find best matching by trying all pointed matchings and picking the best one. Matching](https://reader034.fdocuments.in/reader034/viewer/2022042923/5f7290b61d3bb3301f65b2d4/html5/thumbnails/57.jpg)
Matching two glyphs
source glyph
![Page 58: A Visual TrueType Hinting Tool for RoboFont · Fixed startpoint Try all points as startpoint Find best matching by trying all pointed matchings and picking the best one. Matching](https://reader034.fdocuments.in/reader034/viewer/2022042923/5f7290b61d3bb3301f65b2d4/html5/thumbnails/58.jpg)
Matching two glyphs
source glyph
target glyph
![Page 59: A Visual TrueType Hinting Tool for RoboFont · Fixed startpoint Try all points as startpoint Find best matching by trying all pointed matchings and picking the best one. Matching](https://reader034.fdocuments.in/reader034/viewer/2022042923/5f7290b61d3bb3301f65b2d4/html5/thumbnails/59.jpg)
VGP Transfer