summaryrefslogtreecommitdiffstats
path: root/gfx/wr/wrench/reftests/text
diff options
context:
space:
mode:
Diffstat (limited to 'gfx/wr/wrench/reftests/text')
-rw-r--r--gfx/wr/wrench/reftests/text/1658-ref.yaml26
-rw-r--r--gfx/wr/wrench/reftests/text/1658.yaml19
-rw-r--r--gfx/wr/wrench/reftests/text/Ahem.ttfbin0 -> 21768 bytes
-rw-r--r--gfx/wr/wrench/reftests/text/FreeSans.ttfbin0 -> 714456 bytes
-rw-r--r--gfx/wr/wrench/reftests/text/Proggy-License.txt10
-rw-r--r--gfx/wr/wrench/reftests/text/Proggy.ttfbin0 -> 5284 bytes
-rw-r--r--gfx/wr/wrench/reftests/text/VeraBd.ttfbin0 -> 58716 bytes
-rw-r--r--gfx/wr/wrench/reftests/text/ahem-ref.yaml18
-rw-r--r--gfx/wr/wrench/reftests/text/ahem.yaml219
-rw-r--r--gfx/wr/wrench/reftests/text/allow-subpixel-ref.yaml8
-rw-r--r--gfx/wr/wrench/reftests/text/allow-subpixel.yaml19
-rw-r--r--gfx/wr/wrench/reftests/text/alpha-transform.pngbin0 -> 23933 bytes
-rw-r--r--gfx/wr/wrench/reftests/text/alpha-transform.yaml10
-rw-r--r--gfx/wr/wrench/reftests/text/blank.yaml2
-rw-r--r--gfx/wr/wrench/reftests/text/blurred-shadow-local-clip-rect-ref.pngbin0 -> 19462 bytes
-rw-r--r--gfx/wr/wrench/reftests/text/blurred-shadow-local-clip-rect.yaml48
-rw-r--r--gfx/wr/wrench/reftests/text/border-radius-alpha.pngbin0 -> 14077 bytes
-rw-r--r--gfx/wr/wrench/reftests/text/border-radius-subpx.pngbin0 -> 14413 bytes
-rw-r--r--gfx/wr/wrench/reftests/text/border-radius.yaml18
-rw-r--r--gfx/wr/wrench/reftests/text/clipped-transform.pngbin0 -> 1790 bytes
-rw-r--r--gfx/wr/wrench/reftests/text/clipped-transform.yaml12
-rw-r--r--gfx/wr/wrench/reftests/text/color-bitmap-shadow-ref.yaml30
-rw-r--r--gfx/wr/wrench/reftests/text/color-bitmap-shadow.yaml34
-rw-r--r--gfx/wr/wrench/reftests/text/colors-alpha.pngbin0 -> 101403 bytes
-rw-r--r--gfx/wr/wrench/reftests/text/colors-subpx.pngbin0 -> 133545 bytes
-rw-r--r--gfx/wr/wrench/reftests/text/colors.yaml211
-rw-r--r--gfx/wr/wrench/reftests/text/decorations-ref.yaml19
-rw-r--r--gfx/wr/wrench/reftests/text/decorations-suite.pngbin0 -> 23790 bytes
-rw-r--r--gfx/wr/wrench/reftests/text/decorations-suite.yaml348
-rw-r--r--gfx/wr/wrench/reftests/text/decorations.yaml36
-rw-r--r--gfx/wr/wrench/reftests/text/diacritics-ref.yaml6
-rw-r--r--gfx/wr/wrench/reftests/text/diacritics.yaml6
-rw-r--r--gfx/wr/wrench/reftests/text/embedded-bitmaps.pngbin0 -> 2288 bytes
-rw-r--r--gfx/wr/wrench/reftests/text/embedded-bitmaps.yaml9
-rw-r--r--gfx/wr/wrench/reftests/text/intermediate-transform.yaml54
-rw-r--r--gfx/wr/wrench/reftests/text/isolated-text.pngbin0 -> 7159 bytes
-rw-r--r--gfx/wr/wrench/reftests/text/isolated-text.yaml14
-rw-r--r--gfx/wr/wrench/reftests/text/large-glyphs.yaml8
-rw-r--r--gfx/wr/wrench/reftests/text/large-line-decoration.yaml43
-rw-r--r--gfx/wr/wrench/reftests/text/long-text.yaml610
-rw-r--r--gfx/wr/wrench/reftests/text/mix-blend-layers-ref.yaml50
-rw-r--r--gfx/wr/wrench/reftests/text/mix-blend-layers.yaml53
-rw-r--r--gfx/wr/wrench/reftests/text/negative-pos.yaml10
-rw-r--r--gfx/wr/wrench/reftests/text/non-opaque-notref.yaml10
-rw-r--r--gfx/wr/wrench/reftests/text/non-opaque.yaml10
-rw-r--r--gfx/wr/wrench/reftests/text/perspective-clip.pngbin0 -> 1701 bytes
-rw-r--r--gfx/wr/wrench/reftests/text/perspective-clip.yaml28
-rw-r--r--gfx/wr/wrench/reftests/text/raster-space-snap-ref.yaml10
-rw-r--r--gfx/wr/wrench/reftests/text/raster-space-snap.yaml10
-rw-r--r--gfx/wr/wrench/reftests/text/raster-space.pngbin0 -> 62107 bytes
-rw-r--r--gfx/wr/wrench/reftests/text/raster-space.yaml29
-rw-r--r--gfx/wr/wrench/reftests/text/raster_root_C_8192.yaml391
-rw-r--r--gfx/wr/wrench/reftests/text/raster_root_C_ref.yaml391
-rw-r--r--gfx/wr/wrench/reftests/text/reftest.list82
-rw-r--r--gfx/wr/wrench/reftests/text/rotate-snap-clip-ref.yaml26
-rw-r--r--gfx/wr/wrench/reftests/text/rotate-snap-clip.yaml29
-rw-r--r--gfx/wr/wrench/reftests/text/rotate-snap-filter-ref.yaml14
-rw-r--r--gfx/wr/wrench/reftests/text/rotate-snap-filter.yaml16
-rw-r--r--gfx/wr/wrench/reftests/text/shadow-atomic-ref.yaml81
-rw-r--r--gfx/wr/wrench/reftests/text/shadow-atomic.yaml42
-rw-r--r--gfx/wr/wrench/reftests/text/shadow-border.yaml19
-rw-r--r--gfx/wr/wrench/reftests/text/shadow-clip-rect.yaml45
-rw-r--r--gfx/wr/wrench/reftests/text/shadow-clip-ref.yaml11
-rw-r--r--gfx/wr/wrench/reftests/text/shadow-clip.yaml26
-rw-r--r--gfx/wr/wrench/reftests/text/shadow-clipped-text.yaml24
-rw-r--r--gfx/wr/wrench/reftests/text/shadow-complex.yaml46
-rw-r--r--gfx/wr/wrench/reftests/text/shadow-cover-1.yaml18
-rw-r--r--gfx/wr/wrench/reftests/text/shadow-cover-2.yaml26
-rw-r--r--gfx/wr/wrench/reftests/text/shadow-fast-clip-ref.yaml23
-rw-r--r--gfx/wr/wrench/reftests/text/shadow-fast-clip.yaml24
-rw-r--r--gfx/wr/wrench/reftests/text/shadow-grey-ref.yaml6
-rw-r--r--gfx/wr/wrench/reftests/text/shadow-grey-transparent.yaml19
-rw-r--r--gfx/wr/wrench/reftests/text/shadow-grey.yaml19
-rw-r--r--gfx/wr/wrench/reftests/text/shadow-huge-ref.yaml18
-rw-r--r--gfx/wr/wrench/reftests/text/shadow-huge.yaml18
-rw-r--r--gfx/wr/wrench/reftests/text/shadow-image.yaml14
-rw-r--r--gfx/wr/wrench/reftests/text/shadow-many.yaml30
-rw-r--r--gfx/wr/wrench/reftests/text/shadow-ordering-ref.yaml131
-rw-r--r--gfx/wr/wrench/reftests/text/shadow-ordering.yaml48
-rw-r--r--gfx/wr/wrench/reftests/text/shadow-partial-glyph-ref.yaml50
-rw-r--r--gfx/wr/wrench/reftests/text/shadow-partial-glyph.yaml43
-rw-r--r--gfx/wr/wrench/reftests/text/shadow-red-ref.yaml5
-rw-r--r--gfx/wr/wrench/reftests/text/shadow-red.yaml19
-rw-r--r--gfx/wr/wrench/reftests/text/shadow-ref.yaml25
-rw-r--r--gfx/wr/wrench/reftests/text/shadow-rotate.yaml18
-rw-r--r--gfx/wr/wrench/reftests/text/shadow-single.yaml18
-rw-r--r--gfx/wr/wrench/reftests/text/shadow-solid-ref.yaml16
-rw-r--r--gfx/wr/wrench/reftests/text/shadow-transforms.pngbin0 -> 94776 bytes
-rw-r--r--gfx/wr/wrench/reftests/text/shadow-transforms.yaml58
-rw-r--r--gfx/wr/wrench/reftests/text/shadow.yaml33
-rw-r--r--gfx/wr/wrench/reftests/text/snap-clip-ref.yaml7
-rw-r--r--gfx/wr/wrench/reftests/text/snap-clip.yaml8
-rw-r--r--gfx/wr/wrench/reftests/text/snap-text-offset-ref.yaml11
-rw-r--r--gfx/wr/wrench/reftests/text/snap-text-offset.yaml10
-rw-r--r--gfx/wr/wrench/reftests/text/split-batch-ref.yaml18
-rw-r--r--gfx/wr/wrench/reftests/text/split-batch.yaml18
-rw-r--r--gfx/wr/wrench/reftests/text/subpixel-rotate.pngbin0 -> 19021 bytes
-rw-r--r--gfx/wr/wrench/reftests/text/subpixel-rotate.yaml10
-rw-r--r--gfx/wr/wrench/reftests/text/subpixel-scale.pngbin0 -> 14069 bytes
-rw-r--r--gfx/wr/wrench/reftests/text/subpixel-scale.yaml10
-rw-r--r--gfx/wr/wrench/reftests/text/subpixel-skew.pngbin0 -> 15332 bytes
-rw-r--r--gfx/wr/wrench/reftests/text/subpixel-skew.yaml10
-rw-r--r--gfx/wr/wrench/reftests/text/subpixel-translate-ref.yaml12
-rw-r--r--gfx/wr/wrench/reftests/text/subpixel-translate.yaml13
-rw-r--r--gfx/wr/wrench/reftests/text/subpx-bg-mask-ref.yaml8
-rw-r--r--gfx/wr/wrench/reftests/text/subpx-bg-mask.yaml28
-rw-r--r--gfx/wr/wrench/reftests/text/subtle-shadow-ref.yaml27
-rw-r--r--gfx/wr/wrench/reftests/text/subtle-shadow.yaml21
-rw-r--r--gfx/wr/wrench/reftests/text/synthetic-bold-not-ref.yaml5
-rw-r--r--gfx/wr/wrench/reftests/text/synthetic-bold-transparent-ref.yaml10
-rw-r--r--gfx/wr/wrench/reftests/text/synthetic-bold-transparent.yaml7
-rw-r--r--gfx/wr/wrench/reftests/text/synthetic-bold.yaml6
-rw-r--r--gfx/wr/wrench/reftests/text/synthetic-italics-custom.yaml7
-rw-r--r--gfx/wr/wrench/reftests/text/synthetic-italics-ref.yaml5
-rw-r--r--gfx/wr/wrench/reftests/text/synthetic-italics.yaml7
-rw-r--r--gfx/wr/wrench/reftests/text/text-fixed-slice-fast.pngbin0 -> 5353 bytes
-rw-r--r--gfx/wr/wrench/reftests/text/text-fixed-slice-slow.pngbin0 -> 7081 bytes
-rw-r--r--gfx/wr/wrench/reftests/text/text-fixed-slice.yaml27
-rw-r--r--gfx/wr/wrench/reftests/text/text.yaml10
-rw-r--r--gfx/wr/wrench/reftests/text/transparent-no-aa-ref.yaml17
-rw-r--r--gfx/wr/wrench/reftests/text/transparent-no-aa.yaml9
-rw-r--r--gfx/wr/wrench/reftests/text/two-shadows.pngbin0 -> 11313 bytes
-rw-r--r--gfx/wr/wrench/reftests/text/two-shadows.yaml24
-rw-r--r--gfx/wr/wrench/reftests/text/white-opacity.pngbin0 -> 8266 bytes
-rw-r--r--gfx/wr/wrench/reftests/text/white-opacity.yaml17
-rw-r--r--gfx/wr/wrench/reftests/text/writing-modes-ref.yaml19
-rw-r--r--gfx/wr/wrench/reftests/text/writing-modes.yaml15
127 files changed, 4365 insertions, 0 deletions
diff --git a/gfx/wr/wrench/reftests/text/1658-ref.yaml b/gfx/wr/wrench/reftests/text/1658-ref.yaml
new file mode 100644
index 0000000000..4f5fbe15c5
--- /dev/null
+++ b/gfx/wr/wrench/reftests/text/1658-ref.yaml
@@ -0,0 +1,26 @@
+---
+root:
+ items:
+ -
+ type: "shadow"
+ blur-radius: 5
+ bounds: [14, 18, 205, 35]
+ offset: [0, 0]
+ color: black
+ -
+ bounds: [14, 18, 205, 35]
+ glyphs: [55]
+ offsets: [16, 43]
+ size: 18
+ color: [0, 0, 0, 0.0]
+ font: "VeraBd.ttf"
+ -
+ type: "pop-all-shadows"
+ -
+ type: text
+ bounds: [14, 18, 205, 35]
+ glyphs: [55]
+ offsets: [16, 43]
+ size: 18
+ color: [0, 0, 0, 1.0]
+ font: "VeraBd.ttf"
diff --git a/gfx/wr/wrench/reftests/text/1658.yaml b/gfx/wr/wrench/reftests/text/1658.yaml
new file mode 100644
index 0000000000..523e7b1143
--- /dev/null
+++ b/gfx/wr/wrench/reftests/text/1658.yaml
@@ -0,0 +1,19 @@
+---
+root:
+ items:
+ -
+ type: "shadow"
+ blur-radius: 5
+ bounds: [14, 18, 205, 35]
+ offset: [0, 0]
+ color: black
+ -
+ bounds: [14, 18, 205, 35]
+ glyphs: [55]
+ offsets: [16, 43]
+ size: 18
+ color: [0, 0, 0, 1.0]
+ font: "VeraBd.ttf"
+ -
+ type: "pop-all-shadows"
+
diff --git a/gfx/wr/wrench/reftests/text/Ahem.ttf b/gfx/wr/wrench/reftests/text/Ahem.ttf
new file mode 100644
index 0000000000..4d4785a412
--- /dev/null
+++ b/gfx/wr/wrench/reftests/text/Ahem.ttf
Binary files differ
diff --git a/gfx/wr/wrench/reftests/text/FreeSans.ttf b/gfx/wr/wrench/reftests/text/FreeSans.ttf
new file mode 100644
index 0000000000..9db958532c
--- /dev/null
+++ b/gfx/wr/wrench/reftests/text/FreeSans.ttf
Binary files differ
diff --git a/gfx/wr/wrench/reftests/text/Proggy-License.txt b/gfx/wr/wrench/reftests/text/Proggy-License.txt
new file mode 100644
index 0000000000..f45a0d4bed
--- /dev/null
+++ b/gfx/wr/wrench/reftests/text/Proggy-License.txt
@@ -0,0 +1,10 @@
+The "Proggy.ttf" font was downloaded from https://proggyfonts.net/download/ on Dec 5, 2017.
+The following license applies to "Proggy.ttf":
+
+Copyright (c) 2004, 2005 Tristan Grimmer
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/gfx/wr/wrench/reftests/text/Proggy.ttf b/gfx/wr/wrench/reftests/text/Proggy.ttf
new file mode 100644
index 0000000000..308d3e1ac9
--- /dev/null
+++ b/gfx/wr/wrench/reftests/text/Proggy.ttf
Binary files differ
diff --git a/gfx/wr/wrench/reftests/text/VeraBd.ttf b/gfx/wr/wrench/reftests/text/VeraBd.ttf
new file mode 100644
index 0000000000..51d6111d72
--- /dev/null
+++ b/gfx/wr/wrench/reftests/text/VeraBd.ttf
Binary files differ
diff --git a/gfx/wr/wrench/reftests/text/ahem-ref.yaml b/gfx/wr/wrench/reftests/text/ahem-ref.yaml
new file mode 100644
index 0000000000..061e62abbf
--- /dev/null
+++ b/gfx/wr/wrench/reftests/text/ahem-ref.yaml
@@ -0,0 +1,18 @@
+---
+root:
+ items:
+ - type: rect
+ bounds: [ 16, 16, 520, 280 ]
+ color: 128 128 128 1.0
+ - type: rect
+ bounds: [ 56, 56, 440, 200 ]
+ color: white
+ - type: rect
+ bounds: [ 56, 56, 80, 160 ]
+ color: blue
+ - type: rect
+ bounds: [ 56, 216, 120, 40 ]
+ color: black
+ - type: rect
+ bounds: [ 176, 56, 80, 160 ]
+ color: 255 165 0 1.0000
diff --git a/gfx/wr/wrench/reftests/text/ahem.yaml b/gfx/wr/wrench/reftests/text/ahem.yaml
new file mode 100644
index 0000000000..60f2dbc6a2
--- /dev/null
+++ b/gfx/wr/wrench/reftests/text/ahem.yaml
@@ -0,0 +1,219 @@
+---
+root:
+ items:
+ -
+ bounds: [0, 0, 0, 0]
+ "clip-rect": [0, 0, 0, 0]
+ "backface-visible": true
+ -
+ bounds: [0, 0, 2560, 1294]
+ "clip-rect": [0, 0, 2560, 1294]
+ "backface-visible": true
+ type: rect
+ color: white
+ -
+ bounds: [0, 0, 2560, 1294]
+ "clip-rect": [0, 0, 2560, 1294]
+ "backface-visible": true
+ type: clip
+ id: 10
+ "content-size": [2560, 1294]
+ -
+ "clip-rect": [0, 0, 2560, 1294]
+ "backface-visible": true
+ type: "scroll-frame"
+ id: 2
+ "content-size": [2560, 1294]
+ bounds: [0, 0, 2560, 1294]
+ -
+ bounds: [0, 0, 2560, 1294]
+ "clip-rect": [0, 0, 2560, 1294]
+ "backface-visible": true
+ type: clip
+ id: 3
+ "content-size": [2560, 1294]
+ -
+ bounds: [0, 0, 2560, 1294]
+ "clip-rect": [0, 0, 2560, 1294]
+ "backface-visible": true
+ type: rect
+ color: white
+ -
+ bounds: [16, 16, 520, 280]
+ "clip-rect": [16, 16, 520, 280]
+ "backface-visible": true
+ type: border
+ width: 40
+ "border-type": normal
+ color: 128 128 128 1.0000
+ style: solid
+ -
+ bounds: [56, 216, 80, 40]
+ "clip-rect": [56, 216, 80, 40]
+ "backface-visible": true
+ type: clip
+ id: 4
+ "content-size": [80, 40]
+ -
+ bounds: [56, 216, 80, 40]
+ "clip-rect": [56, 216, 80, 40]
+ "backface-visible": true
+ type: rect
+ color: black
+ -
+ bounds: [54, 55, 124, 42]
+ "clip-rect": [0, 0, 2560, 1294]
+ "backface-visible": true
+ glyphs: [67, 68]
+ offsets: [56, 88, 96, 88]
+ size: 30
+ color: 0 0 255 1.0000
+ font: "Ahem.ttf"
+ -
+ bounds: [54, 95, 124, 42]
+ "clip-rect": [0, 0, 2560, 1294]
+ "backface-visible": true
+ glyphs: [69, 70]
+ offsets: [56, 128, 96, 128]
+ size: 30
+ color: 0 0 255 1.0000
+ font: "Ahem.ttf"
+ -
+ bounds: [54, 135, 124, 42]
+ "clip-rect": [0, 0, 2560, 1294]
+ "backface-visible": true
+ glyphs: [71, 72]
+ offsets: [56, 168, 96, 168]
+ size: 30
+ color: 0 0 255 1.0000
+ font: "Ahem.ttf"
+ -
+ bounds: [54, 175, 124, 42]
+ "clip-rect": [0, 0, 2560, 1294]
+ "backface-visible": true
+ glyphs: [73, 74]
+ offsets: [56, 208, 96, 208]
+ size: 30
+ color: 0 0 255 1.0000
+ font: "Ahem.ttf"
+ -
+ bounds: [54, 215, 124, 42]
+ "clip-rect": [0, 0, 2560, 1294]
+ "backface-visible": true
+ glyphs: [19, 20, 21]
+ offsets: [56, 248, 96, 248, 136, 248]
+ size: 30
+ color: black
+ font: "Ahem.ttf"
+ -
+ bounds: [174, 55, 124, 42]
+ "clip-rect": [0, 0, 2560, 1294]
+ "backface-visible": true
+ glyphs: [75, 76]
+ offsets: [176, 88, 216, 88]
+ size: 30
+ color: 255 165 0 1.0000
+ font: "Ahem.ttf"
+ -
+ bounds: [174, 95, 124, 42]
+ "clip-rect": [0, 0, 2560, 1294]
+ "backface-visible": true
+ glyphs: [77, 78]
+ offsets: [176, 128, 216, 128]
+ size: 30
+ color: 255 165 0 1.0000
+ font: "Ahem.ttf"
+ -
+ bounds: [174, 135, 124, 42]
+ "clip-rect": [0, 0, 2560, 1294]
+ "backface-visible": true
+ glyphs: [79, 80]
+ offsets: [176, 168, 216, 168]
+ size: 30
+ color: 255 165 0 1.0000
+ font: "Ahem.ttf"
+ -
+ bounds: [174, 175, 124, 42]
+ "clip-rect": [0, 0, 2560, 1294]
+ "backface-visible": true
+ glyphs: [81, 83]
+ offsets: [176, 208, 216, 208]
+ size: 30
+ color: 255 165 0 1.0000
+ font: "Ahem.ttf"
+ -
+ bounds: [174, 215, 124, 42]
+ "clip-rect": [0, 0, 2560, 1294]
+ "backface-visible": true
+ glyphs: [67, 68]
+ offsets: [176, 248, 216, 248]
+ size: 30
+ color: white
+ font: "Ahem.ttf"
+ -
+ bounds: [294, 55, 124, 42]
+ "clip-rect": [0, 0, 2560, 1294]
+ "backface-visible": true
+ glyphs: [69, 70]
+ offsets: [296, 88, 336, 88]
+ size: 30
+ color: white
+ font: "Ahem.ttf"
+ -
+ bounds: [294, 95, 124, 42]
+ "clip-rect": [0, 0, 2560, 1294]
+ "backface-visible": true
+ glyphs: [71, 72]
+ offsets: [296, 128, 336, 128]
+ size: 30
+ color: white
+ font: "Ahem.ttf"
+ -
+ bounds: [294, 135, 124, 42]
+ "clip-rect": [0, 0, 2560, 1294]
+ "backface-visible": true
+ glyphs: [73, 74]
+ offsets: [296, 168, 336, 168]
+ size: 30
+ color: white
+ font: "Ahem.ttf"
+ -
+ bounds: [294, 175, 124, 42]
+ "clip-rect": [0, 0, 2560, 1294]
+ "backface-visible": true
+ glyphs: [84, 85]
+ offsets: [296, 208, 336, 208]
+ size: 30
+ color: white
+ font: "Ahem.ttf"
+ -
+ bounds: [294, 215, 124, 42]
+ "clip-rect": [0, 0, 2560, 1294]
+ "backface-visible": true
+ glyphs: [86, 87]
+ offsets: [296, 248, 336, 248]
+ size: 30
+ color: white
+ font: "Ahem.ttf"
+ -
+ bounds: [414, 55, 124, 42]
+ "clip-rect": [0, 0, 2560, 1294]
+ "backface-visible": true
+ glyphs: [88, 89]
+ offsets: [416, 88, 456, 88]
+ size: 30
+ color: white
+ font: "Ahem.ttf"
+ -
+ bounds: [414, 95, 124, 42]
+ "clip-rect": [0, 0, 2560, 1294]
+ "backface-visible": true
+ glyphs: [90, 91]
+ offsets: [416, 128, 456, 128]
+ size: 30
+ color: white
+ font: "Ahem.ttf"
+ -
+ bounds: [0, 0, 0, 0]
+ "clip-rect": [0, 0, 0, 0]
+ "backface-visible": true
diff --git a/gfx/wr/wrench/reftests/text/allow-subpixel-ref.yaml b/gfx/wr/wrench/reftests/text/allow-subpixel-ref.yaml
new file mode 100644
index 0000000000..d99c91b77f
--- /dev/null
+++ b/gfx/wr/wrench/reftests/text/allow-subpixel-ref.yaml
@@ -0,0 +1,8 @@
+---
+root:
+ items:
+ - text: "This should not be subpixel text"
+ origin: 20 120
+ size: 18
+ color: black
+ font: "VeraBd.ttf"
diff --git a/gfx/wr/wrench/reftests/text/allow-subpixel.yaml b/gfx/wr/wrench/reftests/text/allow-subpixel.yaml
new file mode 100644
index 0000000000..d7bd98a287
--- /dev/null
+++ b/gfx/wr/wrench/reftests/text/allow-subpixel.yaml
@@ -0,0 +1,19 @@
+--- # Verify that subpixel AA is disabled if the text's enclosing stacking context requires an intermediate surface
+root:
+ items:
+ - type: stacking-context
+ bounds: [0, 0, 500, 200]
+ blend-container: true
+ items:
+ - text: "This should not be subpixel text"
+ origin: 20 120
+ size: 18
+ color: black
+ font: "VeraBd.ttf"
+ - type: stacking-context
+ bounds: [0, 0, 100, 100]
+ mix-blend-mode: multiply
+ items:
+ - type: rect
+ bounds: [0, 0, 100, 100]
+ color: white
diff --git a/gfx/wr/wrench/reftests/text/alpha-transform.png b/gfx/wr/wrench/reftests/text/alpha-transform.png
new file mode 100644
index 0000000000..e22066b8c6
--- /dev/null
+++ b/gfx/wr/wrench/reftests/text/alpha-transform.png
Binary files differ
diff --git a/gfx/wr/wrench/reftests/text/alpha-transform.yaml b/gfx/wr/wrench/reftests/text/alpha-transform.yaml
new file mode 100644
index 0000000000..8a623b8067
--- /dev/null
+++ b/gfx/wr/wrench/reftests/text/alpha-transform.yaml
@@ -0,0 +1,10 @@
+root:
+ items:
+ - type: stacking-context
+ bounds: [0, 0, 660, 210]
+ transform: scale(1.5, 2.5) rotate(-10)
+ items:
+ - text: "a Bcd Efgh Ijklm Nopqrs Tuvwxyz"
+ origin: 20 50
+ size: 20
+ font: "FreeSans.ttf"
diff --git a/gfx/wr/wrench/reftests/text/blank.yaml b/gfx/wr/wrench/reftests/text/blank.yaml
new file mode 100644
index 0000000000..c4eb3ab673
--- /dev/null
+++ b/gfx/wr/wrench/reftests/text/blank.yaml
@@ -0,0 +1,2 @@
+---
+root:
diff --git a/gfx/wr/wrench/reftests/text/blurred-shadow-local-clip-rect-ref.png b/gfx/wr/wrench/reftests/text/blurred-shadow-local-clip-rect-ref.png
new file mode 100644
index 0000000000..944d0b7847
--- /dev/null
+++ b/gfx/wr/wrench/reftests/text/blurred-shadow-local-clip-rect-ref.png
Binary files differ
diff --git a/gfx/wr/wrench/reftests/text/blurred-shadow-local-clip-rect.yaml b/gfx/wr/wrench/reftests/text/blurred-shadow-local-clip-rect.yaml
new file mode 100644
index 0000000000..bbfc2f1f9f
--- /dev/null
+++ b/gfx/wr/wrench/reftests/text/blurred-shadow-local-clip-rect.yaml
@@ -0,0 +1,48 @@
+# This test ensures that for text that has a shadow and blurred shadow, the
+# shadows are clipped in the same way (via the local clip rect) as the shadowed
+# element.
+---
+root:
+ items:
+ -
+ type: "shadow"
+ bounds: [10, 14, 220, 200]
+ blur-radius: 0
+ offset: [0, 50]
+ color: black
+ -
+ type: "shadow"
+ bounds: [10, 14, 220, 100]
+ blur-radius: 3
+ offset: [0, 25]
+ color: black
+ -
+ bounds: [10, 14, 215, 45]
+ clip-rect: [10, 14, 122, 40]
+ glyphs: [55, 75, 76, 86, 3, 76, 86, 3, 87, 75, 72, 3, 69, 72, 86, 87]
+ offsets: [16, 43, 35.533333, 43, 51.533333, 43, 60.4, 43, 72.833336, 43, 80.833336, 43, 89.7, 43, 102.13333, 43, 110.13333, 43, 119, 43, 135, 43, 149.2, 43, 157.2, 43, 173.2, 43, 187.4, 43, 196.26666, 43]
+ size: 18
+ color: green
+ font: "VeraBd.ttf"
+ -
+ type: line
+ clip-rect: [10, 14, 122, 40]
+ baseline: 45
+ start: 14
+ end: 210
+ width: 3
+ orientation: horizontal
+ color: green
+ style: solid
+ -
+ type: line
+ clip-rect: [10, 14, 122, 40]
+ baseline: 32
+ start: 14
+ end: 210
+ width: 3
+ orientation: horizontal
+ color: green
+ style: solid
+ -
+ type: "pop-all-shadows"
diff --git a/gfx/wr/wrench/reftests/text/border-radius-alpha.png b/gfx/wr/wrench/reftests/text/border-radius-alpha.png
new file mode 100644
index 0000000000..e20302a562
--- /dev/null
+++ b/gfx/wr/wrench/reftests/text/border-radius-alpha.png
Binary files differ
diff --git a/gfx/wr/wrench/reftests/text/border-radius-subpx.png b/gfx/wr/wrench/reftests/text/border-radius-subpx.png
new file mode 100644
index 0000000000..4361f563db
--- /dev/null
+++ b/gfx/wr/wrench/reftests/text/border-radius-subpx.png
Binary files differ
diff --git a/gfx/wr/wrench/reftests/text/border-radius.yaml b/gfx/wr/wrench/reftests/text/border-radius.yaml
new file mode 100644
index 0000000000..e61622b957
--- /dev/null
+++ b/gfx/wr/wrench/reftests/text/border-radius.yaml
@@ -0,0 +1,18 @@
+---
+root:
+ items:
+ - type: clip
+ id: 2
+ complex:
+ - rect: [20, 20, 100, 100]
+ radius: 32
+ - type: rect
+ bounds: [20, 20, 100, 100]
+ color: blue
+ clip-chain: [2]
+ - text: "A"
+ origin: 30 120
+ size: 200
+ color: red
+ font: "FreeSans.ttf"
+ clip-chain: [2]
diff --git a/gfx/wr/wrench/reftests/text/clipped-transform.png b/gfx/wr/wrench/reftests/text/clipped-transform.png
new file mode 100644
index 0000000000..24459d2d3c
--- /dev/null
+++ b/gfx/wr/wrench/reftests/text/clipped-transform.png
Binary files differ
diff --git a/gfx/wr/wrench/reftests/text/clipped-transform.yaml b/gfx/wr/wrench/reftests/text/clipped-transform.yaml
new file mode 100644
index 0000000000..7f9c9b8661
--- /dev/null
+++ b/gfx/wr/wrench/reftests/text/clipped-transform.yaml
@@ -0,0 +1,12 @@
+--- # checks that local clip rects don't inappropriately shear transformed glyphs
+root:
+ items:
+ - type: stacking-context
+ bounds: [0, 0, 65, 70]
+ transform: [0.7086478, 0.7055624, 0, 0, -0.7055624, 0.7086478, 0, 0, 0, 0, 1, 0, 40, 10, 0, 1]
+ items:
+ - text: "O"
+ clip-rect: [0, 0, 44, 44]
+ origin: 0 38
+ size: 30
+ font: "FreeSans.ttf"
diff --git a/gfx/wr/wrench/reftests/text/color-bitmap-shadow-ref.yaml b/gfx/wr/wrench/reftests/text/color-bitmap-shadow-ref.yaml
new file mode 100644
index 0000000000..039f3c6edf
--- /dev/null
+++ b/gfx/wr/wrench/reftests/text/color-bitmap-shadow-ref.yaml
@@ -0,0 +1,30 @@
+---
+root:
+ items:
+ -
+ text: "\u263A"
+ origin: [8, 56]
+ size: 36
+ color: white
+ family: "Apple Color Emoji"
+ embedded-bitmaps: true
+ -
+ type: rect
+ bounds: [56, 56, 48, 48]
+ color: yellow
+ -
+ type: rect
+ bounds: [56, 56, 48, 12]
+ color: black
+ -
+ type: rect
+ bounds: [56, 92, 48, 12]
+ color: black
+ -
+ type: rect
+ bounds: [56, 56, 12, 48]
+ color: black
+ -
+ type: rect
+ bounds: [92, 56, 12, 48]
+ color: black
diff --git a/gfx/wr/wrench/reftests/text/color-bitmap-shadow.yaml b/gfx/wr/wrench/reftests/text/color-bitmap-shadow.yaml
new file mode 100644
index 0000000000..4ead9270cd
--- /dev/null
+++ b/gfx/wr/wrench/reftests/text/color-bitmap-shadow.yaml
@@ -0,0 +1,34 @@
+--- # checks that color emoji fast shadows use the shadow color
+root:
+ items:
+ -
+ type: "shadow"
+ bounds: [0, 0, 115, 115]
+ offset: [48, 48]
+ blur-radius: 0
+ color: yellow
+ -
+ text: "\u263A"
+ origin: [8, 56]
+ size: 36
+ color: blue
+ family: "Apple Color Emoji"
+ embedded-bitmaps: true
+ -
+ type: "pop-all-shadows"
+ -
+ type: rect
+ bounds: [56, 56, 48, 12]
+ color: black
+ -
+ type: rect
+ bounds: [56, 92, 48, 12]
+ color: black
+ -
+ type: rect
+ bounds: [56, 56, 12, 48]
+ color: black
+ -
+ type: rect
+ bounds: [92, 56, 12, 48]
+ color: black
diff --git a/gfx/wr/wrench/reftests/text/colors-alpha.png b/gfx/wr/wrench/reftests/text/colors-alpha.png
new file mode 100644
index 0000000000..3e8d985025
--- /dev/null
+++ b/gfx/wr/wrench/reftests/text/colors-alpha.png
Binary files differ
diff --git a/gfx/wr/wrench/reftests/text/colors-subpx.png b/gfx/wr/wrench/reftests/text/colors-subpx.png
new file mode 100644
index 0000000000..50d5c36be3
--- /dev/null
+++ b/gfx/wr/wrench/reftests/text/colors-subpx.png
Binary files differ
diff --git a/gfx/wr/wrench/reftests/text/colors.yaml b/gfx/wr/wrench/reftests/text/colors.yaml
new file mode 100644
index 0000000000..aceb032898
--- /dev/null
+++ b/gfx/wr/wrench/reftests/text/colors.yaml
@@ -0,0 +1,211 @@
+root:
+ items:
+ - type: rect
+ bounds: [10, 10, 250, 50]
+ color: white
+ - text: "A B C a b c"
+ origin: 20 50
+ size: 32
+ font: "FreeSans.ttf"
+
+ - type: rect
+ bounds: [270, 10, 250, 50]
+ color: red
+ - text: "A B C a b c"
+ origin: 280 50
+ size: 32
+ font: "FreeSans.ttf"
+
+ - type: rect
+ bounds: [530, 10, 250, 50]
+ color: green
+ - text: "A B C a b c"
+ origin: 540 50
+ size: 32
+ font: "FreeSans.ttf"
+
+ - type: rect
+ bounds: [10, 70, 250, 50]
+ color: blue
+ - text: "A B C a b c"
+ origin: 20 110
+ size: 32
+ font: "FreeSans.ttf"
+
+ - type: rect
+ bounds: [270, 70, 250, 50]
+ color: [100, 100, 100]
+ - text: "A B C a b c"
+ origin: 280 110
+ size: 32
+ font: "FreeSans.ttf"
+
+ - type: rect
+ bounds: [530, 70, 250, 50]
+ color: [200, 100, 150]
+ - text: "A B C a b c"
+ origin: 540 110
+ size: 32
+ font: "FreeSans.ttf"
+
+ - type: rect
+ bounds: [10, 130, 250, 50]
+ color: white
+ - text: "A B C a b c"
+ origin: 20 170
+ size: 32
+ font: "FreeSans.ttf"
+ color: white
+
+ - type: rect
+ bounds: [270, 130, 250, 50]
+ color: red
+ - text: "A B C a b c"
+ origin: 280 170
+ size: 32
+ font: "FreeSans.ttf"
+ color: white
+
+ - type: rect
+ bounds: [530, 130, 250, 50]
+ color: green
+ - text: "A B C a b c"
+ origin: 540 170
+ size: 32
+ font: "FreeSans.ttf"
+ color: white
+
+ - type: rect
+ bounds: [10, 190, 250, 50]
+ color: blue
+ - text: "A B C a b c"
+ origin: 20 230
+ size: 32
+ font: "FreeSans.ttf"
+ color: white
+
+ - type: rect
+ bounds: [270, 190, 250, 50]
+ color: [100, 100, 100]
+ - text: "A B C a b c"
+ origin: 280 230
+ size: 32
+ font: "FreeSans.ttf"
+ color: white
+
+ - type: rect
+ bounds: [530, 190, 250, 50]
+ color: [200, 100, 150]
+ - text: "A B C a b c"
+ origin: 540 230
+ size: 32
+ font: "FreeSans.ttf"
+ color: white
+
+ - type: rect
+ bounds: [10, 250, 250, 50]
+ color: white
+ - text: "A B C a b c"
+ origin: 20 290
+ size: 32
+ font: "FreeSans.ttf"
+ color: [200, 180, 200]
+
+ - type: rect
+ bounds: [270, 250, 250, 50]
+ color: red
+ - text: "A B C a b c"
+ origin: 280 290
+ size: 32
+ font: "FreeSans.ttf"
+ color: [200, 180, 200]
+
+ - type: rect
+ bounds: [530, 250, 250, 50]
+ color: green
+ - text: "A B C a b c"
+ origin: 540 290
+ size: 32
+ font: "FreeSans.ttf"
+ color: [200, 180, 200]
+
+ - type: rect
+ bounds: [10, 310, 250, 50]
+ color: blue
+ - text: "A B C a b c"
+ origin: 20 350
+ size: 32
+ font: "FreeSans.ttf"
+ color: [200, 180, 200]
+
+ - type: rect
+ bounds: [270, 310, 250, 50]
+ color: [100, 100, 100]
+ - text: "A B C a b c"
+ origin: 280 350
+ size: 32
+ font: "FreeSans.ttf"
+ color: [200, 180, 200]
+
+ - type: rect
+ bounds: [530, 310, 250, 50]
+ color: [200, 100, 150]
+ - text: "A B C a b c"
+ origin: 540 350
+ size: 32
+ font: "FreeSans.ttf"
+ color: [200, 180, 200]
+
+ - type: rect
+ bounds: [10, 370, 250, 50]
+ color: white
+ - text: "A B C a b c"
+ origin: 20 410
+ size: 32
+ font: "FreeSans.ttf"
+ color: [50, 50, 50, 0.5]
+
+ - type: rect
+ bounds: [270, 370, 250, 50]
+ color: red
+ - text: "A B C a b c"
+ origin: 280 410
+ size: 32
+ font: "FreeSans.ttf"
+ color: [50, 50, 50, 0.5]
+
+ - type: rect
+ bounds: [530, 370, 250, 50]
+ color: green
+ - text: "A B C a b c"
+ origin: 540 410
+ size: 32
+ font: "FreeSans.ttf"
+ color: [50, 50, 50, 0.5]
+
+ - type: rect
+ bounds: [10, 430, 250, 50]
+ color: blue
+ - text: "A B C a b c"
+ origin: 20 470
+ size: 32
+ font: "FreeSans.ttf"
+ color: [50, 50, 50, 0.5]
+
+ - type: rect
+ bounds: [270, 430, 250, 50]
+ color: [100, 100, 100]
+ - text: "A B C a b c"
+ origin: 280 470
+ size: 32
+ font: "FreeSans.ttf"
+ color: [50, 50, 50, 0.5]
+
+ - type: rect
+ bounds: [530, 430, 250, 50]
+ color: [200, 100, 150]
+ - text: "A B C a b c"
+ origin: 540 470
+ size: 32
+ font: "FreeSans.ttf"
+ color: [50, 50, 50, 0.5]
diff --git a/gfx/wr/wrench/reftests/text/decorations-ref.yaml b/gfx/wr/wrench/reftests/text/decorations-ref.yaml
new file mode 100644
index 0000000000..5ad75109fa
--- /dev/null
+++ b/gfx/wr/wrench/reftests/text/decorations-ref.yaml
@@ -0,0 +1,19 @@
+---
+root:
+ items:
+ - type: rect # short, horizontal
+ bounds: [ 4, 2, 5, 1 ]
+ color: green
+ - type: rect # short, vertical
+ bounds: [ 12, 14, 1, 5 ]
+ color: red
+ style: solid
+ - type: rect # long, horizontal
+ bounds: [ 34, 32, 200, 3 ]
+ color: blue
+ style: solid
+ - type: rect # long, vertical
+ bounds: [ 52, 54, 3, 200 ]
+ color: black
+ style: solid
+
diff --git a/gfx/wr/wrench/reftests/text/decorations-suite.png b/gfx/wr/wrench/reftests/text/decorations-suite.png
new file mode 100644
index 0000000000..c596ededeb
--- /dev/null
+++ b/gfx/wr/wrench/reftests/text/decorations-suite.png
Binary files differ
diff --git a/gfx/wr/wrench/reftests/text/decorations-suite.yaml b/gfx/wr/wrench/reftests/text/decorations-suite.yaml
new file mode 100644
index 0000000000..bbe02dcc95
--- /dev/null
+++ b/gfx/wr/wrench/reftests/text/decorations-suite.yaml
@@ -0,0 +1,348 @@
+---
+root:
+ items:
+ - type: line
+ baseline: 10
+ start: 10
+ end: 210
+ width: 1
+ orientation: horizontal
+ color: black
+ style: solid
+ - type: line
+ baseline: 20
+ start: 10
+ end: 210
+ width: 1
+ orientation: horizontal
+ color: blue
+ style: dashed
+ - type: line
+ baseline: 30
+ start: 10
+ end: 210
+ width: 1
+ orientation: horizontal
+ color: green
+ style: dotted
+ - type: line
+ baseline: 40
+ start: 10
+ end: 210
+ width: 3
+ thickness: 1
+ orientation: horizontal
+ color: red
+ style: wavy
+
+ - type: line
+ baseline: 50
+ start: 10
+ end: 210
+ width: 2
+ orientation: horizontal
+ color: black
+ style: solid
+ - type: line
+ baseline: 65
+ start: 10
+ end: 210
+ width: 2
+ orientation: horizontal
+ color: blue
+ style: dashed
+ - type: line
+ baseline: 80
+ start: 10
+ end: 207 # pruposefully cut off
+ width: 2
+ orientation: horizontal
+ color: green
+ style: dotted
+ - type: line
+ baseline: 95
+ start: 10
+ end: 210
+ width: 6
+ thickness: 2
+ orientation: horizontal
+ color: red
+ style: wavy
+
+ -
+ type: "shadow"
+ bounds: [8, 100, 225, 50]
+ blur-radius: 0
+ offset: [2, 2]
+ color: red
+ - type: line
+ baseline: 110
+ start: 10
+ end: 210
+ width: 1
+ orientation: horizontal
+ color: [0,0,0,0]
+ style: solid
+ - type: line
+ baseline: 120
+ start: 10
+ end: 210
+ width: 1
+ orientation: horizontal
+ color: [0,0,0,0]
+ style: dashed
+ - type: line
+ baseline: 130
+ start: 10
+ end: 209
+ width: 1
+ orientation: horizontal
+ color: [0,0,0,0]
+ style: dotted
+ - type: line
+ baseline: 140
+ start: 10
+ end: 210
+ width: 3
+ thickness: 1
+ orientation: horizontal
+ color: [0,0,0,0]
+ style: wavy
+ -
+ type: pop-all-shadows
+
+ -
+ type: "shadow"
+ bounds: [8, 145, 225, 65]
+ blur-radius: 1
+ offset: [2, 3]
+ color: red
+ - type: line
+ baseline: 150
+ start: 10
+ end: 210
+ width: 2
+ orientation: horizontal
+ color: black
+ style: solid
+ - type: line
+ baseline: 165
+ start: 10
+ end: 210
+ width: 2
+ orientation: horizontal
+ color: blue
+ style: dashed
+ - type: line
+ baseline: 180
+ start: 10
+ end: 207 # purposefully cut off
+ width: 2
+ orientation: horizontal
+ color: green
+ style: dotted
+ - type: line
+ baseline: 195
+ start: 10
+ end: 210
+ width: 6
+ thickness: 2
+ orientation: horizontal
+ color: red
+ style: wavy
+ -
+ type: pop-all-shadows
+
+ -
+ type: "shadow"
+ bounds: [8, 220, 225, 40]
+ blur-radius: 0
+ offset: [5, 7]
+ color: red
+ - type: line
+ baseline: 230
+ start: 10
+ end: 210
+ width: 8
+ orientation: horizontal
+ color: black
+ style: solid
+ - type: line
+ baseline: 250
+ start: 10
+ end: 210
+ width: 8
+ orientation: horizontal
+ color: blue
+ style: dashed
+ - type: line
+ baseline: 270
+ start: 10
+ end: 205 # purposefully cut off
+ width: 8
+ orientation: horizontal
+ color: green
+ style: dotted
+ - type: line
+ baseline: 290
+ start: 10
+ end: 210
+ width: 12
+ thickness: 3
+ orientation: horizontal
+ color: black
+ style: wavy
+ -
+ type: "pop-all-shadows"
+
+ -
+ type: "shadow"
+ bounds: [0, 320, 240, 140]
+ blur-radius: 3
+ offset: [5, 7]
+ color: red
+ - type: line
+ baseline: 330
+ start: 10
+ end: 210
+ width: 8
+ orientation: horizontal
+ color: black
+ style: solid
+ - type: line
+ baseline: 350
+ start: 10
+ end: 210
+ width: 8
+ orientation: horizontal
+ color: blue
+ style: dashed
+ - type: line
+ baseline: 370
+ start: 10
+ end: 205 # purposefully cut off
+ width: 8
+ orientation: horizontal
+ color: green
+ style: dotted
+ - type: line
+ baseline: 390
+ start: 10
+ end: 210
+ width: 16
+ thickness: 4
+ orientation: horizontal
+ color: black
+ style: wavy
+ -
+ type: "pop-all-shadows"
+
+ - type: line
+ baseline: 220
+ start: 10
+ end: 210
+ width: 1
+ orientation: vertical
+ color: black
+ style: solid
+ - type: line
+ baseline: 230
+ start: 10
+ end: 210
+ width: 1
+ orientation: vertical
+ color: blue
+ style: dashed
+ - type: line
+ baseline: 240
+ start: 10
+ end: 210
+ width: 1
+ orientation: vertical
+ color: green
+ style: dotted
+ - type: line
+ baseline: 250
+ start: 10
+ end: 210
+ thickness: 1
+ width: 3
+ orientation: vertical
+ color: red
+ style: wavy
+
+ - type: line
+ baseline: 270
+ start: 10
+ end: 210
+ width: 2
+ orientation: vertical
+ color: black
+ style: solid
+ - type: line
+ baseline: 290
+ start: 10
+ end: 210
+ width: 2
+ orientation: vertical
+ color: blue
+ style: dashed
+ - type: line
+ baseline: 310
+ start: 10
+ end: 207 # purposefully cut off
+ width: 2
+ orientation: vertical
+ color: green
+ style: dotted
+ - type: line
+ baseline: 330
+ start: 10
+ end: 210
+ thickness: 2
+ width: 6
+ orientation: vertical
+ color: red
+ style: wavy
+
+ -
+ type: "shadow"
+ bounds: [350, 0, 120, 240]
+ blur-radius: 3
+ offset: [5, 2]
+ color: black
+ - type: line
+ baseline: 380
+ start: 10
+ end: 210
+ width: 8
+ orientation: vertical
+ color: yellow
+ style: solid
+ - type: line
+ baseline: 400
+ start: 10
+ end: 210
+ width: 8
+ orientation: vertical
+ color: blue
+ style: dashed
+ - type: line
+ baseline: 420
+ start: 10
+ end: 205 # purposefully cut off
+ width: 8
+ orientation: vertical
+ color: green
+ style: dotted
+ - type: line
+ baseline: 440
+ start: 10
+ end: 210
+ thickness: 4
+ width: 16
+ orientation: vertical
+ color: red
+ style: wavy
+ -
+ type: "pop-all-shadows"
diff --git a/gfx/wr/wrench/reftests/text/decorations.yaml b/gfx/wr/wrench/reftests/text/decorations.yaml
new file mode 100644
index 0000000000..db15551a74
--- /dev/null
+++ b/gfx/wr/wrench/reftests/text/decorations.yaml
@@ -0,0 +1,36 @@
+---
+root:
+ items:
+ - type: line # short, horizontal
+ baseline: 2
+ start: 4
+ end: 9
+ width: 1
+ orientation: horizontal
+ color: green
+ style: solid
+ - type: line # short, vertical
+ baseline: 12
+ start: 14
+ end: 19
+ width: 1
+ orientation: vertical
+ color: red
+ style: solid
+ - type: line # long, horizontal
+ baseline: 32
+ start: 34
+ end: 234
+ width: 3
+ orientation: horizontal
+ color: blue
+ style: solid
+ - type: line # long, vertical
+ baseline: 52
+ start: 54
+ end: 254
+ width: 3
+ orientation: vertical
+ color: black
+ style: solid
+
diff --git a/gfx/wr/wrench/reftests/text/diacritics-ref.yaml b/gfx/wr/wrench/reftests/text/diacritics-ref.yaml
new file mode 100644
index 0000000000..334e1899ee
--- /dev/null
+++ b/gfx/wr/wrench/reftests/text/diacritics-ref.yaml
@@ -0,0 +1,6 @@
+root:
+ items:
+ - text: "x"
+ origin: 20 30
+ size: 20
+ font: "FreeSans.ttf"
diff --git a/gfx/wr/wrench/reftests/text/diacritics.yaml b/gfx/wr/wrench/reftests/text/diacritics.yaml
new file mode 100644
index 0000000000..7c613c3aa6
--- /dev/null
+++ b/gfx/wr/wrench/reftests/text/diacritics.yaml
@@ -0,0 +1,6 @@
+root:
+ items:
+ - text: "x̂"
+ origin: 20 30
+ size: 20
+ font: "FreeSans.ttf"
diff --git a/gfx/wr/wrench/reftests/text/embedded-bitmaps.png b/gfx/wr/wrench/reftests/text/embedded-bitmaps.png
new file mode 100644
index 0000000000..a8039015a5
--- /dev/null
+++ b/gfx/wr/wrench/reftests/text/embedded-bitmaps.png
Binary files differ
diff --git a/gfx/wr/wrench/reftests/text/embedded-bitmaps.yaml b/gfx/wr/wrench/reftests/text/embedded-bitmaps.yaml
new file mode 100644
index 0000000000..f22b11d95f
--- /dev/null
+++ b/gfx/wr/wrench/reftests/text/embedded-bitmaps.yaml
@@ -0,0 +1,9 @@
+--- # checks that embedded bitmaps are rasterized and use a proper layout
+root:
+ items:
+ - text: "ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz 0123456789 {}[]()<>$*-+=/#_%^@\\&|~?'\"!,.;:"
+ origin: 20 30
+ bounds: [0, 0, 710, 50]
+ size: 8.25
+ font: "Proggy.ttf"
+ embedded-bitmaps: true
diff --git a/gfx/wr/wrench/reftests/text/intermediate-transform.yaml b/gfx/wr/wrench/reftests/text/intermediate-transform.yaml
new file mode 100644
index 0000000000..ab2e51804c
--- /dev/null
+++ b/gfx/wr/wrench/reftests/text/intermediate-transform.yaml
@@ -0,0 +1,54 @@
+# This test case makes the text flipped relative to the surface it renders to, but not to the world.
+---
+root:
+ items:
+ -
+ type: "stacking-context"
+ items:
+ -
+ type: "reference-frame"
+ transform: [0.7753850221633911, 0, 0, 0, 0, 0.7753850221633911, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]
+ items:
+ -
+ type: "stacking-context"
+ items:
+ -
+ type: "stacking-context"
+ transform-style: "preserve-3d"
+ origin: [237, 246]
+ items:
+ -
+ type: "reference-frame"
+ transform-style: "preserve-3d"
+ transform: [1, 0, 0, 0, 0, 1, 0, 0, -0.09215625375509262, -0.05100416764616966, 1, -0.0001250000059371814, 0, -3, 0, 1]
+ items:
+ -
+ type: "stacking-context"
+ transform-style: "preserve-3d"
+ items:
+ -
+ type: "reference-frame"
+ transform: [-1, 0, 0, 0, 0, -0.9659258127212524, 0.258819043636322, 0, 0, 0.258819043636322, 0.9659258127212524, 0, 1474.5, 802.0977172851563, -105.5981674194336, 1]
+ items:
+ -
+ type: "stacking-context"
+ items:
+ -
+ rect: [0, 0, 1475, 408]
+ color: red
+ -
+ type: "reference-frame"
+ transform: [-1, 0, 0, 0, 0, -1, 0, 0, 0, 0, 1, 0, 1474.5, 408, 0, 1]
+ items:
+ -
+ type: "stacking-context"
+ items:
+ -
+ glyphs: [55,43,40,3,44,54,36,37,40,47,47,36]
+ offsets: [511, 290, 551.2000122070313, 290, 597.066650390625, 290, 637.2666625976563, 290, 656.1333618164063, 290, 682.0999755859375, 290, 716.6333618164063, 290, 759.6666870117188, 290, 799.8666381835938, 290, 840.066650390625, 290, 880.2666625976563, 290, 920.4666748046875, 290]
+ size: 22
+ color: black
+ font: "../text/VeraBd.ttf"
+ bounds: [509, 250, 457, 54]
+ clip-rect: [508, 249, 459, 56]
+
diff --git a/gfx/wr/wrench/reftests/text/isolated-text.png b/gfx/wr/wrench/reftests/text/isolated-text.png
new file mode 100644
index 0000000000..a0c8ed3650
--- /dev/null
+++ b/gfx/wr/wrench/reftests/text/isolated-text.png
Binary files differ
diff --git a/gfx/wr/wrench/reftests/text/isolated-text.yaml b/gfx/wr/wrench/reftests/text/isolated-text.yaml
new file mode 100644
index 0000000000..897d410a84
--- /dev/null
+++ b/gfx/wr/wrench/reftests/text/isolated-text.yaml
@@ -0,0 +1,14 @@
+root:
+ items:
+ - type: stacking-context
+ bounds: [0, 0, 1000, 100]
+ transform: perspective(1000)
+ items:
+ - type: stacking-context
+ bounds: [0, 0, 1000, 100]
+ transform-style: preserve-3d
+ items:
+ - text: "Cats making all the muffins knock over christmas tree"
+ origin: 20 30
+ size: 20
+ font: "FreeSans.ttf"
diff --git a/gfx/wr/wrench/reftests/text/large-glyphs.yaml b/gfx/wr/wrench/reftests/text/large-glyphs.yaml
new file mode 100644
index 0000000000..4bbd3ee10c
--- /dev/null
+++ b/gfx/wr/wrench/reftests/text/large-glyphs.yaml
@@ -0,0 +1,8 @@
+--- # Verify that large glyphs actually render at all.
+root:
+ items:
+ - text: "HI"
+ origin: 0 1234
+ size: 1234
+ color: black
+ font: "VeraBd.ttf"
diff --git a/gfx/wr/wrench/reftests/text/large-line-decoration.yaml b/gfx/wr/wrench/reftests/text/large-line-decoration.yaml
new file mode 100644
index 0000000000..ec12a5dc31
--- /dev/null
+++ b/gfx/wr/wrench/reftests/text/large-line-decoration.yaml
@@ -0,0 +1,43 @@
+---
+root:
+ items:
+ - type: line
+ baseline: 0
+ start: 0
+ end: 50
+ width: 5000
+ thickness: 5000
+ orientation: horizontal
+ color: red
+ style: solid
+
+ - type: line
+ baseline: 0
+ start: 100
+ end: 150
+ width: 5000
+ thickness: 5000
+ orientation: horizontal
+ color: green
+ style: dashed
+
+ - type: line
+ baseline: 0
+ start: 200
+ end: 250
+ width: 5000
+ thickness: 5000
+ orientation: horizontal
+ color: blue
+ style: dotted
+
+ - type: line
+ baseline: 0
+ start: 300
+ end: 350
+ width: 5000
+ thickness: 5000
+ orientation: horizontal
+ color: yellow
+ style: wavy
+
diff --git a/gfx/wr/wrench/reftests/text/long-text.yaml b/gfx/wr/wrench/reftests/text/long-text.yaml
new file mode 100644
index 0000000000..e44658ca99
--- /dev/null
+++ b/gfx/wr/wrench/reftests/text/long-text.yaml
@@ -0,0 +1,610 @@
+---
+root:
+ items:
+ -
+ bounds: [14, 18, 205, 35]
+ glyphs: [55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ ]
+ offsets: [16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43, 16, 43,
+ ]
+ size: 18
+ color: black
+ font: "VeraBd.ttf"
diff --git a/gfx/wr/wrench/reftests/text/mix-blend-layers-ref.yaml b/gfx/wr/wrench/reftests/text/mix-blend-layers-ref.yaml
new file mode 100644
index 0000000000..0d9f6b8864
--- /dev/null
+++ b/gfx/wr/wrench/reftests/text/mix-blend-layers-ref.yaml
@@ -0,0 +1,50 @@
+---
+root:
+ items:
+ - type: stacking-context
+ bounds: [100, 100, 0, 0]
+ blend-container: true
+ items:
+ - type: "shadow"
+ blur-radius: 0
+ offset: [-10, -4]
+ color: [255, 255, 0, 1]
+ - text: "Fault"
+ origin: 200 300
+ size: 200
+ color: [0, 0, 0, 0]
+ font: "VeraBd.ttf"
+ -
+ type: "pop-all-shadows"
+
+ - type: stacking-context
+ blend-container: true
+ mix-blend-mode: darken
+ items:
+ - type: "shadow"
+ blur-radius: 0
+ offset: [6, -8]
+ color: [0, 255, 255, 1]
+ - text: "Fault"
+ origin: 200 300
+ size: 200
+ color: [0, 0, 0, 0]
+ font: "VeraBd.ttf"
+ -
+ type: "pop-all-shadows"
+
+ - type: stacking-context
+ blend-container: true
+ mix-blend-mode: darken
+ items:
+ - type: "shadow"
+ blur-radius: 0
+ offset: [10, 4]
+ color: [255, 0, 255, 1]
+ - text: "Fault"
+ origin: 200 300
+ size: 200
+ color: [0, 0, 0, 0]
+ font: "VeraBd.ttf"
+ -
+ type: "pop-all-shadows"
diff --git a/gfx/wr/wrench/reftests/text/mix-blend-layers.yaml b/gfx/wr/wrench/reftests/text/mix-blend-layers.yaml
new file mode 100644
index 0000000000..5c21935100
--- /dev/null
+++ b/gfx/wr/wrench/reftests/text/mix-blend-layers.yaml
@@ -0,0 +1,53 @@
+# Verify that surfaces with differing surface/raster spatial nodes correctly sample from
+# parent mix-blend container surfaces
+---
+root:
+ items:
+ - type: stacking-context
+ bounds: [100, 100, 0, 0]
+ transform: scale(2)
+ blend-container: true
+ items:
+ - type: "shadow"
+ blur-radius: 0
+ offset: [-5, -2]
+ color: [255, 255, 0, 1]
+ - text: "Fault"
+ origin: 100 150
+ size: 100
+ color: [0, 0, 0, 0]
+ font: "VeraBd.ttf"
+ -
+ type: "pop-all-shadows"
+
+ - type: stacking-context
+ blend-container: true
+ mix-blend-mode: darken
+ items:
+ - type: "shadow"
+ blur-radius: 0
+ offset: [3, -4]
+ color: [0, 255, 255, 1]
+ - text: "Fault"
+ origin: 100 150
+ size: 100
+ color: [0, 0, 0, 0]
+ font: "VeraBd.ttf"
+ -
+ type: "pop-all-shadows"
+
+ - type: stacking-context
+ blend-container: true
+ mix-blend-mode: darken
+ items:
+ - type: "shadow"
+ blur-radius: 0
+ offset: [5, 2]
+ color: [255, 0, 255, 1]
+ - text: "Fault"
+ origin: 100 150
+ size: 100
+ color: [0, 0, 0, 0]
+ font: "VeraBd.ttf"
+ -
+ type: "pop-all-shadows"
diff --git a/gfx/wr/wrench/reftests/text/negative-pos.yaml b/gfx/wr/wrench/reftests/text/negative-pos.yaml
new file mode 100644
index 0000000000..7dac5c4961
--- /dev/null
+++ b/gfx/wr/wrench/reftests/text/negative-pos.yaml
@@ -0,0 +1,10 @@
+---
+root:
+ items:
+ -
+ bounds: [14, 18, 205, 35]
+ glyphs: [55]
+ offsets: [-2, 43]
+ size: 24
+ color: black
+ font: "VeraBd.ttf"
diff --git a/gfx/wr/wrench/reftests/text/non-opaque-notref.yaml b/gfx/wr/wrench/reftests/text/non-opaque-notref.yaml
new file mode 100644
index 0000000000..53d878b958
--- /dev/null
+++ b/gfx/wr/wrench/reftests/text/non-opaque-notref.yaml
@@ -0,0 +1,10 @@
+---
+root:
+ items:
+ -
+ bounds: [0, 0, 500, 500]
+ glyphs: [55]
+ offsets: [200, 200]
+ size: 100
+ color: [0, 0, 0]
+ font: "VeraBd.ttf"
diff --git a/gfx/wr/wrench/reftests/text/non-opaque.yaml b/gfx/wr/wrench/reftests/text/non-opaque.yaml
new file mode 100644
index 0000000000..ff2573dbfa
--- /dev/null
+++ b/gfx/wr/wrench/reftests/text/non-opaque.yaml
@@ -0,0 +1,10 @@
+---
+root:
+ items:
+ -
+ bounds: [0, 0, 500, 500]
+ glyphs: [55]
+ offsets: [200, 200]
+ size: 100
+ color: [0, 0, 0, 0.5]
+ font: "VeraBd.ttf"
diff --git a/gfx/wr/wrench/reftests/text/perspective-clip.png b/gfx/wr/wrench/reftests/text/perspective-clip.png
new file mode 100644
index 0000000000..b790a7f30f
--- /dev/null
+++ b/gfx/wr/wrench/reftests/text/perspective-clip.png
Binary files differ
diff --git a/gfx/wr/wrench/reftests/text/perspective-clip.yaml b/gfx/wr/wrench/reftests/text/perspective-clip.yaml
new file mode 100644
index 0000000000..0fab8b3bf6
--- /dev/null
+++ b/gfx/wr/wrench/reftests/text/perspective-clip.yaml
@@ -0,0 +1,28 @@
+---
+root:
+ items:
+ -
+ type: stacking-context
+ perspective: 1
+ perspective-origin: 0 0
+ items:
+ -
+ type: stacking-context
+ transform: 10 0 0 0 0 10 0 0 0 0 10 0 0 0 -9 1
+ items:
+ - type: clip
+ id: 2
+ complex:
+ - rect: [50, 50, 200, 200]
+ radius: 8
+ -
+ type: rect
+ bounds: [50, 50, 200, 200]
+ color: green
+ clip-chain: [2]
+ -
+ text: "X"
+ origin: 100 150
+ size: 100
+ font: "Ahem.ttf"
+ clip-chain: [2]
diff --git a/gfx/wr/wrench/reftests/text/raster-space-snap-ref.yaml b/gfx/wr/wrench/reftests/text/raster-space-snap-ref.yaml
new file mode 100644
index 0000000000..43e4ccdf46
--- /dev/null
+++ b/gfx/wr/wrench/reftests/text/raster-space-snap-ref.yaml
@@ -0,0 +1,10 @@
+root:
+ items:
+ - type: stacking-context
+ bounds: [0, 0, 480, 80]
+ raster-space: screen
+ items:
+ - text: "a Bcd Efgh Ijklm Nopqrs Tuvwxyz"
+ origin: 20.5 50
+ size: 20
+ font: "FreeSans.ttf"
diff --git a/gfx/wr/wrench/reftests/text/raster-space-snap.yaml b/gfx/wr/wrench/reftests/text/raster-space-snap.yaml
new file mode 100644
index 0000000000..4ae3f8c99f
--- /dev/null
+++ b/gfx/wr/wrench/reftests/text/raster-space-snap.yaml
@@ -0,0 +1,10 @@
+root:
+ items:
+ - type: stacking-context
+ bounds: [0, 0, 480, 80]
+ raster-space: local(1.0)
+ items:
+ - text: "a Bcd Efgh Ijklm Nopqrs Tuvwxyz"
+ origin: 20.5 50
+ size: 20
+ font: "FreeSans.ttf"
diff --git a/gfx/wr/wrench/reftests/text/raster-space.png b/gfx/wr/wrench/reftests/text/raster-space.png
new file mode 100644
index 0000000000..8289e428d5
--- /dev/null
+++ b/gfx/wr/wrench/reftests/text/raster-space.png
Binary files differ
diff --git a/gfx/wr/wrench/reftests/text/raster-space.yaml b/gfx/wr/wrench/reftests/text/raster-space.yaml
new file mode 100644
index 0000000000..a4efba37fd
--- /dev/null
+++ b/gfx/wr/wrench/reftests/text/raster-space.yaml
@@ -0,0 +1,29 @@
+root:
+ items:
+ - type: stacking-context
+ transform: scale(5.0) rotate(-45)
+ transform-origin: 300 300
+ raster-space: local(1.0)
+ filters: [opacity(0.5)]
+ items:
+ - text: "Local"
+ origin: 20 50
+ size: 20
+ font: "FreeSans.ttf"
+ - type: stacking-context
+ transform: scale(5.0) rotate(-45)
+ transform-origin: 0 400
+ items:
+ - text: "Screen"
+ origin: 20 50
+ size: 20
+ font: "FreeSans.ttf"
+ - type: stacking-context
+ transform: scale(5.0) rotate(-45)
+ transform-origin: -80 240
+ raster-space: local(5.0)
+ items:
+ - text: "Local (scaled)"
+ origin: 20 50
+ size: 10
+ font: "FreeSans.ttf"
diff --git a/gfx/wr/wrench/reftests/text/raster_root_C_8192.yaml b/gfx/wr/wrench/reftests/text/raster_root_C_8192.yaml
new file mode 100644
index 0000000000..8bb175d211
--- /dev/null
+++ b/gfx/wr/wrench/reftests/text/raster_root_C_8192.yaml
@@ -0,0 +1,391 @@
+root:
+ items:
+ - type: "stacking-context"
+ transform: scale(0.125)
+ items:
+ - type: "stacking-context"
+ perspective: 100
+ perspective-origin: 100 50
+ blend-container: true
+ items:
+ - image: checkerboard(0, 512, 16);
+ bounds: [1600, 1600, 8192, 8192]
+ - type: rect
+ color: [180, 140, 120, 0.4]
+ bounds: 2400 2400 8192 8192
+ - type: clip
+ id: 101
+ complex:
+ - rect: [1920, 1920, 4096, 4096]
+ radius: [2048, 2048]
+ - type: clip-chain
+ id: 201
+ clips: [101]
+ - type: "stacking-context"
+ bounds: [0, 0, 8192, 8192]
+ filters: [invert(1)]
+ mix-blend-mode: exclusion
+ clip-chain: 201
+ items:
+ - type: "stacking-context"
+ transform: scale(24)
+ items:
+ - type: line
+ baseline: 16
+ start: 16
+ end: 208
+ width: 1
+ orientation: horizontal
+ color: black
+ style: solid
+ - type: line
+ baseline: 24
+ start: 16
+ end: 208
+ width: 1
+ orientation: horizontal
+ color: blue
+ style: dashed
+ - type: line
+ baseline: 32
+ start: 16
+ end: 208
+ width: 1
+ orientation: horizontal
+ color: green
+ style: dotted
+ - type: line
+ baseline: 40
+ start: 16
+ end: 208
+ width: 4
+ thickness: 1
+ orientation: horizontal
+ color: red
+ style: wavy
+ - type: line
+ baseline: 48
+ start: 16
+ end: 208
+ width: 2
+ orientation: horizontal
+ color: black
+ style: solid
+ - type: line
+ baseline: 64
+ start: 16
+ end: 208
+ width: 2
+ orientation: horizontal
+ color: blue
+ style: dashed
+ - type: line
+ baseline: 80
+ start: 16
+ end: 207 # pruposefully cut off
+ width: 2
+ orientation: horizontal
+ color: green
+ style: dotted
+ - type: line
+ baseline: 96
+ start: 16
+ end: 208
+ width: 6
+ thickness: 2
+ orientation: horizontal
+ color: red
+ style: wavy
+
+ -
+ type: "shadow"
+ bounds: [8, 100, 225, 50]
+ blur-radius: 0
+ offset: [2, 2]
+ color: red
+ - type: line
+ baseline: 112
+ start: 16
+ end: 208
+ width: 1
+ orientation: horizontal
+ color: [0,0,0,0]
+ style: solid
+ - type: line
+ baseline: 120
+ start: 16
+ end: 208
+ width: 1
+ orientation: horizontal
+ color: [0,0,0,0]
+ style: dashed
+ - type: line
+ baseline: 128
+ start: 16
+ end: 209
+ width: 1
+ orientation: horizontal
+ color: [0,0,0,0]
+ style: dotted
+ - type: line
+ baseline: 136
+ start: 16
+ end: 208
+ width: 4
+ thickness: 1
+ orientation: horizontal
+ color: [0,0,0,0]
+ style: wavy
+ -
+ type: pop-all-shadows
+
+ -
+ type: "shadow"
+ bounds: [8, 145, 225, 65]
+ blur-radius: 1
+ offset: [2, 3]
+ color: red
+ - type: line
+ baseline: 160
+ start: 16
+ end: 208
+ width: 2
+ orientation: horizontal
+ color: black
+ style: solid
+ - type: line
+ baseline: 168
+ start: 16
+ end: 208
+ width: 2
+ orientation: horizontal
+ color: blue
+ style: dashed
+ - type: line
+ baseline: 184
+ start: 16
+ end: 207 # purposefully cut off
+ width: 2
+ orientation: horizontal
+ color: green
+ style: dotted
+ - type: line
+ baseline: 192
+ start: 16
+ end: 208
+ width: 6
+ thickness: 2
+ orientation: horizontal
+ color: red
+ style: wavy
+ -
+ type: pop-all-shadows
+
+ -
+ type: "shadow"
+ bounds: [8, 220, 225, 40]
+ blur-radius: 0
+ offset: [5, 7]
+ color: red
+ - type: line
+ baseline: 232
+ start: 16
+ end: 208
+ width: 8
+ orientation: horizontal
+ color: black
+ style: solid
+ - type: line
+ baseline: 248
+ start: 16
+ end: 208
+ width: 8
+ orientation: horizontal
+ color: blue
+ style: dashed
+ - type: line
+ baseline: 272
+ start: 16
+ end: 205 # purposefully cut off
+ width: 8
+ orientation: horizontal
+ color: green
+ style: dotted
+ - type: line
+ baseline: 296
+ start: 16
+ end: 208
+ width: 12
+ thickness: 3
+ orientation: horizontal
+ color: black
+ style: wavy
+ -
+ type: "pop-all-shadows"
+
+ -
+ type: "shadow"
+ bounds: [0, 320, 240, 140]
+ blur-radius: 3
+ offset: [5, 7]
+ color: red
+ - type: line
+ baseline: 320
+ start: 16
+ end: 208
+ width: 8
+ orientation: horizontal
+ color: black
+ style: solid
+ - type: line
+ baseline: 352
+ start: 16
+ end: 208
+ width: 8
+ orientation: horizontal
+ color: blue
+ style: dashed
+ - type: line
+ baseline: 368
+ start: 16
+ end: 205 # purposefully cut off
+ width: 8
+ orientation: horizontal
+ color: green
+ style: dotted
+ - type: line
+ baseline: 392
+ start: 16
+ end: 208
+ width: 16
+ thickness: 4
+ orientation: horizontal
+ color: black
+ style: wavy
+ -
+ type: "pop-all-shadows"
+
+ - type: line
+ baseline: 224
+ start: 16
+ end: 208
+ width: 1
+ orientation: vertical
+ color: black
+ style: solid
+ - type: line
+ baseline: 232
+ start: 16
+ end: 208
+ width: 1
+ orientation: vertical
+ color: blue
+ style: dashed
+ - type: line
+ baseline: 240
+ start: 16
+ end: 208
+ width: 1
+ orientation: vertical
+ color: green
+ style: dotted
+ - type: line
+ baseline: 256
+ start: 16
+ end: 208
+ thickness: 1
+ width: 4
+ orientation: vertical
+ color: red
+ style: wavy
+
+ - type: line
+ baseline: 272
+ start: 16
+ end: 208
+ width: 2
+ orientation: vertical
+ color: black
+ style: solid
+ - type: line
+ baseline: 296
+ start: 16
+ end: 208
+ width: 2
+ orientation: vertical
+ color: blue
+ style: dashed
+ - type: line
+ baseline: 320
+ start: 16
+ end: 207 # purposefully cut off
+ width: 2
+ orientation: vertical
+ color: green
+ style: dotted
+ - type: line
+ baseline: 336
+ start: 16
+ end: 208
+ thickness: 2
+ width: 6
+ orientation: vertical
+ color: red
+ style: wavy
+
+ -
+ type: "shadow"
+ bounds: [350, 0, 120, 240]
+ blur-radius: 3
+ offset: [5, 2]
+ color: black
+ - type: line
+ baseline: 384
+ start: 16
+ end: 208
+ width: 8
+ orientation: vertical
+ color: yellow
+ style: solid
+ - type: line
+ baseline: 400
+ start: 16
+ end: 208
+ width: 8
+ orientation: vertical
+ color: blue
+ style: dashed
+ - type: line
+ baseline: 416
+ start: 16
+ end: 205 # purposefully cut off
+ width: 8
+ orientation: vertical
+ color: green
+ style: dotted
+ - type: line
+ baseline: 440
+ start: 16
+ end: 208
+ thickness: 4
+ width: 16
+ orientation: vertical
+ color: red
+ style: wavy
+ -
+ type: "pop-all-shadows"
+ - text: "side-left"
+ origin: 80 120
+ size: 32
+ transpose: true
+ flip-x: true
+ font: "VeraBd.ttf"
+ color: [40,40,40,1.0]
+ - text: "side-right"
+ origin: 240 240
+ size: 32
+ color: [190,180,200,1.0]
+ transpose: true
+ flip-y: true
+ font: "FreeSans.ttf"
+
diff --git a/gfx/wr/wrench/reftests/text/raster_root_C_ref.yaml b/gfx/wr/wrench/reftests/text/raster_root_C_ref.yaml
new file mode 100644
index 0000000000..4c28f76ced
--- /dev/null
+++ b/gfx/wr/wrench/reftests/text/raster_root_C_ref.yaml
@@ -0,0 +1,391 @@
+root:
+ items:
+ - type: "stacking-context"
+ transform: scale(0.5)
+ items:
+ - type: "stacking-context"
+ perspective: 100
+ perspective-origin: 100 50
+ blend-container: true
+ items:
+ - image: checkerboard(0, 128, 16);
+ bounds: [400, 400, 2048, 2048]
+ - type: rect
+ color: [180, 140, 120, 0.4]
+ bounds: 600 600 2048 2048
+ - type: clip
+ id: 101
+ complex:
+ - rect: [480, 480, 1024, 1024]
+ radius: [512, 512]
+ - type: clip-chain
+ id: 201
+ clips: [101]
+ - type: "stacking-context"
+ bounds: [0, 0, 2048, 2048]
+ filters: [invert(1)]
+ mix-blend-mode: exclusion
+ clip-chain: 201
+ items:
+ - type: "stacking-context"
+ transform: scale(6)
+ items:
+ - type: line
+ baseline: 16
+ start: 16
+ end: 208
+ width: 1
+ orientation: horizontal
+ color: black
+ style: solid
+ - type: line
+ baseline: 24
+ start: 16
+ end: 208
+ width: 1
+ orientation: horizontal
+ color: blue
+ style: dashed
+ - type: line
+ baseline: 32
+ start: 16
+ end: 208
+ width: 1
+ orientation: horizontal
+ color: green
+ style: dotted
+ - type: line
+ baseline: 40
+ start: 16
+ end: 208
+ width: 4
+ thickness: 1
+ orientation: horizontal
+ color: red
+ style: wavy
+ - type: line
+ baseline: 48
+ start: 16
+ end: 208
+ width: 2
+ orientation: horizontal
+ color: black
+ style: solid
+ - type: line
+ baseline: 64
+ start: 16
+ end: 208
+ width: 2
+ orientation: horizontal
+ color: blue
+ style: dashed
+ - type: line
+ baseline: 80
+ start: 16
+ end: 207 # pruposefully cut off
+ width: 2
+ orientation: horizontal
+ color: green
+ style: dotted
+ - type: line
+ baseline: 96
+ start: 16
+ end: 208
+ width: 6
+ thickness: 2
+ orientation: horizontal
+ color: red
+ style: wavy
+
+ -
+ type: "shadow"
+ bounds: [8, 100, 225, 50]
+ blur-radius: 0
+ offset: [2, 2]
+ color: red
+ - type: line
+ baseline: 112
+ start: 16
+ end: 208
+ width: 1
+ orientation: horizontal
+ color: [0,0,0,0]
+ style: solid
+ - type: line
+ baseline: 120
+ start: 16
+ end: 208
+ width: 1
+ orientation: horizontal
+ color: [0,0,0,0]
+ style: dashed
+ - type: line
+ baseline: 128
+ start: 16
+ end: 209
+ width: 1
+ orientation: horizontal
+ color: [0,0,0,0]
+ style: dotted
+ - type: line
+ baseline: 136
+ start: 16
+ end: 208
+ width: 4
+ thickness: 1
+ orientation: horizontal
+ color: [0,0,0,0]
+ style: wavy
+ -
+ type: pop-all-shadows
+
+ -
+ type: "shadow"
+ bounds: [8, 145, 225, 65]
+ blur-radius: 1
+ offset: [2, 3]
+ color: red
+ - type: line
+ baseline: 160
+ start: 16
+ end: 208
+ width: 2
+ orientation: horizontal
+ color: black
+ style: solid
+ - type: line
+ baseline: 168
+ start: 16
+ end: 208
+ width: 2
+ orientation: horizontal
+ color: blue
+ style: dashed
+ - type: line
+ baseline: 184
+ start: 16
+ end: 207 # purposefully cut off
+ width: 2
+ orientation: horizontal
+ color: green
+ style: dotted
+ - type: line
+ baseline: 192
+ start: 16
+ end: 208
+ width: 6
+ thickness: 2
+ orientation: horizontal
+ color: red
+ style: wavy
+ -
+ type: pop-all-shadows
+
+ -
+ type: "shadow"
+ bounds: [8, 220, 225, 40]
+ blur-radius: 0
+ offset: [5, 7]
+ color: red
+ - type: line
+ baseline: 232
+ start: 16
+ end: 208
+ width: 8
+ orientation: horizontal
+ color: black
+ style: solid
+ - type: line
+ baseline: 248
+ start: 16
+ end: 208
+ width: 8
+ orientation: horizontal
+ color: blue
+ style: dashed
+ - type: line
+ baseline: 272
+ start: 16
+ end: 205 # purposefully cut off
+ width: 8
+ orientation: horizontal
+ color: green
+ style: dotted
+ - type: line
+ baseline: 296
+ start: 16
+ end: 208
+ width: 12
+ thickness: 3
+ orientation: horizontal
+ color: black
+ style: wavy
+ -
+ type: "pop-all-shadows"
+
+ -
+ type: "shadow"
+ bounds: [0, 320, 240, 140]
+ blur-radius: 3
+ offset: [5, 7]
+ color: red
+ - type: line
+ baseline: 320
+ start: 16
+ end: 208
+ width: 8
+ orientation: horizontal
+ color: black
+ style: solid
+ - type: line
+ baseline: 352
+ start: 16
+ end: 208
+ width: 8
+ orientation: horizontal
+ color: blue
+ style: dashed
+ - type: line
+ baseline: 368
+ start: 16
+ end: 205 # purposefully cut off
+ width: 8
+ orientation: horizontal
+ color: green
+ style: dotted
+ - type: line
+ baseline: 392
+ start: 16
+ end: 208
+ width: 16
+ thickness: 4
+ orientation: horizontal
+ color: black
+ style: wavy
+ -
+ type: "pop-all-shadows"
+
+ - type: line
+ baseline: 224
+ start: 16
+ end: 208
+ width: 1
+ orientation: vertical
+ color: black
+ style: solid
+ - type: line
+ baseline: 232
+ start: 16
+ end: 208
+ width: 1
+ orientation: vertical
+ color: blue
+ style: dashed
+ - type: line
+ baseline: 240
+ start: 16
+ end: 208
+ width: 1
+ orientation: vertical
+ color: green
+ style: dotted
+ - type: line
+ baseline: 256
+ start: 16
+ end: 208
+ thickness: 1
+ width: 4
+ orientation: vertical
+ color: red
+ style: wavy
+
+ - type: line
+ baseline: 272
+ start: 16
+ end: 208
+ width: 2
+ orientation: vertical
+ color: black
+ style: solid
+ - type: line
+ baseline: 296
+ start: 16
+ end: 208
+ width: 2
+ orientation: vertical
+ color: blue
+ style: dashed
+ - type: line
+ baseline: 320
+ start: 16
+ end: 207 # purposefully cut off
+ width: 2
+ orientation: vertical
+ color: green
+ style: dotted
+ - type: line
+ baseline: 336
+ start: 16
+ end: 208
+ thickness: 2
+ width: 6
+ orientation: vertical
+ color: red
+ style: wavy
+
+ -
+ type: "shadow"
+ bounds: [350, 0, 120, 240]
+ blur-radius: 3
+ offset: [5, 2]
+ color: black
+ - type: line
+ baseline: 384
+ start: 16
+ end: 208
+ width: 8
+ orientation: vertical
+ color: yellow
+ style: solid
+ - type: line
+ baseline: 400
+ start: 16
+ end: 208
+ width: 8
+ orientation: vertical
+ color: blue
+ style: dashed
+ - type: line
+ baseline: 416
+ start: 16
+ end: 205 # purposefully cut off
+ width: 8
+ orientation: vertical
+ color: green
+ style: dotted
+ - type: line
+ baseline: 440
+ start: 16
+ end: 208
+ thickness: 4
+ width: 16
+ orientation: vertical
+ color: red
+ style: wavy
+ -
+ type: "pop-all-shadows"
+ - text: "side-left"
+ origin: 80 120
+ size: 32
+ transpose: true
+ flip-x: true
+ font: "VeraBd.ttf"
+ color: [40,40,40,1.0]
+ - text: "side-right"
+ origin: 240 240
+ size: 32
+ color: [190,180,200,1.0]
+ transpose: true
+ flip-y: true
+ font: "FreeSans.ttf"
+
diff --git a/gfx/wr/wrench/reftests/text/reftest.list b/gfx/wr/wrench/reftests/text/reftest.list
new file mode 100644
index 0000000000..4a145ae359
--- /dev/null
+++ b/gfx/wr/wrench/reftests/text/reftest.list
@@ -0,0 +1,82 @@
+!= text.yaml blank.yaml
+!= long-text.yaml blank.yaml
+!= negative-pos.yaml blank.yaml
+!= shadow.yaml text.yaml
+!= shadow-single.yaml blank.yaml
+!= shadow-cover-1.yaml blank.yaml
+!= shadow-cover-2.yaml blank.yaml
+
+skip_on(android,device) fuzzy(1,3) == shadow.yaml shadow-ref.yaml # Fails on Pixel2
+fuzzy(1,1) == shadow-huge.yaml shadow-huge-ref.yaml
+!= shadow-cover-1.yaml shadow-cover-2.yaml
+!= shadow-many.yaml shadow.yaml
+!= shadow-complex.yaml shadow-many.yaml
+!= shadow-clipped-text.yaml blank.yaml
+!= non-opaque.yaml non-opaque-notref.yaml
+== decorations.yaml decorations-ref.yaml
+skip_on(android,device) fuzzy(1,3692) fuzzy-if(platform(swgl),3,13540) == decorations-suite.yaml decorations-suite.png # Fails on Pixel2
+== 1658.yaml 1658-ref.yaml
+fuzzy(2,405) fuzzy-if(platform(swgl),2,1510) == split-batch.yaml split-batch-ref.yaml
+# Next 3 tests affected by bug 1548099 on Android
+skip_on(android) == shadow-red.yaml shadow-red-ref.yaml
+skip_on(android) fuzzy(1,999) fuzzy-if(platform(swgl),2,1324) == shadow-grey.yaml shadow-grey-ref.yaml
+skip_on(android) fuzzy(1,828) fuzzy-if(platform(swgl),2,1538) == shadow-grey-transparent.yaml shadow-grey-ref.yaml
+== subtle-shadow.yaml subtle-shadow-ref.yaml
+fuzzy(1,64) == shadow-atomic.yaml shadow-atomic-ref.yaml
+fuzzy(1,64) == shadow-clip-rect.yaml shadow-atomic-ref.yaml
+fuzzy(1,1) platform(linux) == shadow-ordering.yaml shadow-ordering-ref.yaml
+# Next 6 tests affected by bug 1548099 on Android
+skip_on(android) != synthetic-bold.yaml synthetic-bold-not-ref.yaml
+skip_on(android) fuzzy(1,1786) options(disable-subpixel) == synthetic-bold-transparent.yaml synthetic-bold-transparent-ref.yaml
+skip_on(android) != synthetic-bold-transparent.yaml synthetic-bold.yaml
+skip_on(android) != synthetic-italics.yaml synthetic-italics-ref.yaml
+skip_on(android) != synthetic-italics-custom.yaml synthetic-italics-ref.yaml
+skip_on(android) != synthetic-italics-custom.yaml synthetic-italics.yaml
+options(disable-aa) == ahem.yaml ahem-ref.yaml
+platform(linux) == isolated-text.yaml isolated-text.png
+platform(mac) skip_on(mac,>=10.14) fuzzy(3,67) == white-opacity.yaml white-opacity.png
+fuzzy(1,113) platform(linux) options(disable-subpixel) == colors.yaml colors-alpha.png
+fuzzy(1,774) platform(linux) draw_calls(3) == colors.yaml colors-subpx.png
+platform(linux) options(disable-subpixel) == border-radius.yaml border-radius-alpha.png
+platform(linux) == border-radius.yaml border-radius-subpx.png
+options(disable-aa) == transparent-no-aa.yaml transparent-no-aa-ref.yaml
+!= diacritics.yaml diacritics-ref.yaml
+fuzzy(1,30) platform(linux) options(disable-subpixel) == alpha-transform.yaml alpha-transform.png
+fuzzy(1,20) platform(linux) == subpixel-rotate.yaml subpixel-rotate.png
+fuzzy(1,72) platform(linux) == subpixel-scale.yaml subpixel-scale.png
+fuzzy(1,26) platform(linux) == subpixel-skew.yaml subpixel-skew.png
+fuzzy(1,381) platform(linux) == subpixel-translate.yaml subpixel-translate-ref.yaml
+!= shadow-rotate.yaml blank.yaml
+platform(linux) == embedded-bitmaps.yaml embedded-bitmaps.png
+fuzzy(1,13) platform(linux) == clipped-transform.yaml clipped-transform.png
+platform(mac) fuzzy(195,30) == color-bitmap-shadow.yaml color-bitmap-shadow-ref.yaml
+platform(linux) == writing-modes.yaml writing-modes-ref.yaml
+fuzzy(1,5) platform(linux) == blurred-shadow-local-clip-rect.yaml blurred-shadow-local-clip-rect-ref.png
+fuzzy(1,1) platform(linux) == two-shadows.yaml two-shadows.png
+== shadow-clip.yaml shadow-clip-ref.yaml
+== shadow-fast-clip.yaml shadow-fast-clip-ref.yaml
+skip_on(android,device) == shadow-partial-glyph.yaml shadow-partial-glyph-ref.yaml # Fails on Pixel2
+fuzzy(2,212) platform(linux) == shadow-transforms.yaml shadow-transforms.png
+fuzzy(2,370) platform(linux) == raster-space.yaml raster-space.png
+skip_on(android) skip_on(mac,>=10.14) != allow-subpixel.yaml allow-subpixel-ref.yaml # Android: we don't enable sub-px aa on this platform.
+!= large-glyphs.yaml blank.yaml
+!= large-line-decoration.yaml blank.yaml
+skip_on(android,device) == snap-text-offset.yaml snap-text-offset-ref.yaml
+fuzzy(5,4435) == shadow-border.yaml shadow-solid-ref.yaml
+fuzzy(5,4435) == shadow-image.yaml shadow-solid-ref.yaml
+options(disable-aa) == snap-clip.yaml snap-clip-ref.yaml
+platform(linux) == perspective-clip.yaml perspective-clip.png
+fuzzy(1,150) options(disable-subpixel) == raster-space-snap.yaml raster-space-snap-ref.yaml
+# == intermediate-transform.yaml intermediate-transform-ref.yaml # fails because of AA inavailable with an intermediate surface
+fuzzy(1,15) platform(linux) force_subpixel_aa_where_possible(true) == text-fixed-slice.yaml text-fixed-slice-slow.png
+fuzzy(1,15) platform(linux) force_subpixel_aa_where_possible(false) == text-fixed-slice.yaml text-fixed-slice-fast.png
+
+# a 8544x8544 raster root vs. 2136x2136
+# most pixels are off by a small amount, but a few pixels on the edge vary by a lot, pushing up the fuzzy max-diff;
+# the main goal of the test is that everything is in the same place, at the same scale, clipped the same way,
+# despite 4x on-the-fly scale change.
+skip_on(android) fuzzy(120,20800) == raster_root_C_8192.yaml raster_root_C_ref.yaml
+== subpx-bg-mask.yaml subpx-bg-mask-ref.yaml
+platform(linux,mac) == rotate-snap-clip.yaml rotate-snap-clip-ref.yaml
+platform(linux,mac) == rotate-snap-filter.yaml rotate-snap-filter-ref.yaml
+fuzzy-if(env(android,device),47,6860) fuzzy-if(not(env(android,device)),4,6600) == mix-blend-layers.yaml mix-blend-layers-ref.yaml # Android device is Samsung Galaxy A51
diff --git a/gfx/wr/wrench/reftests/text/rotate-snap-clip-ref.yaml b/gfx/wr/wrench/reftests/text/rotate-snap-clip-ref.yaml
new file mode 100644
index 0000000000..b0212e9929
--- /dev/null
+++ b/gfx/wr/wrench/reftests/text/rotate-snap-clip-ref.yaml
@@ -0,0 +1,26 @@
+---
+root:
+ items:
+ - type: clip
+ id: 2
+ complex:
+ - rect: [0, 0, 400, 30]
+ radius: {
+ top-left: 2,
+ top-right: 2,
+ bottom-left: 2,
+ bottom-right: 2,
+ }
+ - type: clip-chain
+ id: 12
+ clips: [2]
+ - type: stacking-context
+ clip-chain: 12
+ items:
+ - type: stacking-context
+ items:
+ - text: "Should be upright"
+ origin: 20 24
+ size: 18
+ color: black
+ font: "VeraBd.ttf"
diff --git a/gfx/wr/wrench/reftests/text/rotate-snap-clip.yaml b/gfx/wr/wrench/reftests/text/rotate-snap-clip.yaml
new file mode 100644
index 0000000000..3861bf0e21
--- /dev/null
+++ b/gfx/wr/wrench/reftests/text/rotate-snap-clip.yaml
@@ -0,0 +1,29 @@
+# Verify that snapping on a clipped surface with a 180 deg rotation + a local 180 deg rotation works correctly
+---
+root:
+ items:
+ - type: clip
+ id: 2
+ complex:
+ - rect: [0, 0, 400, 30]
+ radius: {
+ top-left: 2,
+ top-right: 2,
+ bottom-left: 2,
+ bottom-right: 2,
+ }
+ - type: clip-chain
+ id: 12
+ clips: [2]
+ - type: stacking-context
+ clip-chain: 12
+ transform: rotate(180)
+ items:
+ - type: stacking-context
+ transform: rotate(180)
+ items:
+ - text: "Should be upright"
+ origin: 20 24
+ size: 18
+ color: black
+ font: "VeraBd.ttf"
diff --git a/gfx/wr/wrench/reftests/text/rotate-snap-filter-ref.yaml b/gfx/wr/wrench/reftests/text/rotate-snap-filter-ref.yaml
new file mode 100644
index 0000000000..ae230425ac
--- /dev/null
+++ b/gfx/wr/wrench/reftests/text/rotate-snap-filter-ref.yaml
@@ -0,0 +1,14 @@
+# Verify that snapping on a filtered surface with a 180 deg rotation + a local 180 deg rotation works correctly
+---
+root:
+ items:
+ - type: stacking-context
+ filters: [opacity(0.5)]
+ items:
+ - type: stacking-context
+ items:
+ - text: "Should be upright"
+ origin: 20 24
+ size: 18
+ color: black
+ font: "VeraBd.ttf"
diff --git a/gfx/wr/wrench/reftests/text/rotate-snap-filter.yaml b/gfx/wr/wrench/reftests/text/rotate-snap-filter.yaml
new file mode 100644
index 0000000000..48be649aa2
--- /dev/null
+++ b/gfx/wr/wrench/reftests/text/rotate-snap-filter.yaml
@@ -0,0 +1,16 @@
+# Verify that snapping on a filtered surface with a 180 deg rotation + a local 180 deg rotation works correctly
+---
+root:
+ items:
+ - type: stacking-context
+ filters: [opacity(0.5)]
+ transform: rotate(180)
+ items:
+ - type: stacking-context
+ transform: rotate(180)
+ items:
+ - text: "Should be upright"
+ origin: 20 24
+ size: 18
+ color: black
+ font: "VeraBd.ttf"
diff --git a/gfx/wr/wrench/reftests/text/shadow-atomic-ref.yaml b/gfx/wr/wrench/reftests/text/shadow-atomic-ref.yaml
new file mode 100644
index 0000000000..ccf159b5a7
--- /dev/null
+++ b/gfx/wr/wrench/reftests/text/shadow-atomic-ref.yaml
@@ -0,0 +1,81 @@
+---
+root:
+ items:
+# equivalent of shadow with [20, 16] offset
+ -
+ type: line
+ baseline: 61
+ start: 34
+ end: 230
+ width: 3
+ orientation: horizontal
+ color: green
+ style: solid
+ -
+ bounds: [34, 34, 205, 35]
+ glyphs: [55, 75, 76, 86, 3, 76, 86, 3, 87, 75, 72, 3, 69, 72, 86, 87]
+ offsets: [36, 59, 55.533333, 59, 71.533333, 59, 80.4, 59, 92.833336, 59, 100.833336, 59, 109.7, 59, 122.13333, 59, 130.13333, 59, 139, 59, 155, 59, 169.2, 59, 177.2, 59, 193.2, 59, 207.4, 59, 216.26666, 59]
+ size: 18
+ color: green
+ font: "VeraBd.ttf"
+ -
+ type: line
+ baseline: 48
+ start: 34
+ end: 230
+ width: 3
+ orientation: horizontal
+ color: green
+ style: solid
+# equivalent of shadow with [10, 8] offset
+ -
+ type: line
+ baseline: 53
+ start: 24
+ end: 220
+ width: 3
+ orientation: horizontal
+ color: black
+ style: solid
+ -
+ bounds: [24, 26, 205, 35]
+ glyphs: [55, 75, 76, 86, 3, 76, 86, 3, 87, 75, 72, 3, 69, 72, 86, 87]
+ offsets: [26, 51, 45.533333, 51, 61.533333, 51, 70.4, 51, 82.833336, 51, 90.833336, 51, 99.7, 51, 112.13333, 51, 120.13333, 51, 129, 51, 145, 51, 159.2, 51, 167.2, 51, 183.2, 51, 197.4, 51, 206.26666, 51]
+ size: 18
+ color: black
+ font: "VeraBd.ttf"
+ -
+ type: line
+ baseline: 40
+ start: 24
+ end: 220
+ width: 3
+ orientation: horizontal
+ color: black
+ style: solid
+# same as shadow-atomic.yaml
+ -
+ type: line
+ baseline: 45
+ start: 14
+ end: 210
+ width: 3
+ orientation: horizontal
+ color: red
+ style: solid
+ -
+ bounds: [14, 18, 205, 35]
+ glyphs: [55, 75, 76, 86, 3, 76, 86, 3, 87, 75, 72, 3, 69, 72, 86, 87]
+ offsets: [16, 43, 35.533333, 43, 51.533333, 43, 60.4, 43, 72.833336, 43, 80.833336, 43, 89.7, 43, 102.13333, 43, 110.13333, 43, 119, 43, 135, 43, 149.2, 43, 157.2, 43, 173.2, 43, 187.4, 43, 196.26666, 43]
+ size: 18
+ color: red
+ font: "VeraBd.ttf"
+ -
+ type: line
+ baseline: 32
+ start: 14
+ end: 210
+ width: 3
+ orientation: horizontal
+ color: red
+ style: solid
diff --git a/gfx/wr/wrench/reftests/text/shadow-atomic.yaml b/gfx/wr/wrench/reftests/text/shadow-atomic.yaml
new file mode 100644
index 0000000000..21b9eac876
--- /dev/null
+++ b/gfx/wr/wrench/reftests/text/shadow-atomic.yaml
@@ -0,0 +1,42 @@
+--- # checks that decorations on "real" content and "shadow" content are on seperate, atomic, layers
+root:
+ items:
+ -
+ type: "shadow"
+ bounds: [14, 18, 205, 35]
+ blur-radius: 0
+ offset: [20, 16]
+ color: green
+ -
+ type: "shadow"
+ bounds: [14, 18, 205, 35]
+ blur-radius: 0
+ offset: [10, 8]
+ color: black
+ -
+ type: line
+ baseline: 45
+ start: 14
+ end: 210
+ width: 3
+ orientation: horizontal
+ color: red
+ style: solid
+ -
+ bounds: [14, 18, 205, 35]
+ glyphs: [55, 75, 76, 86, 3, 76, 86, 3, 87, 75, 72, 3, 69, 72, 86, 87]
+ offsets: [16, 43, 35.533333, 43, 51.533333, 43, 60.4, 43, 72.833336, 43, 80.833336, 43, 89.7, 43, 102.13333, 43, 110.13333, 43, 119, 43, 135, 43, 149.2, 43, 157.2, 43, 173.2, 43, 187.4, 43, 196.26666, 43]
+ size: 18
+ color: red
+ font: "VeraBd.ttf"
+ -
+ type: line
+ baseline: 32
+ start: 14
+ end: 210
+ width: 3
+ orientation: horizontal
+ color: red
+ style: solid
+ -
+ type: "pop-all-shadows"
diff --git a/gfx/wr/wrench/reftests/text/shadow-border.yaml b/gfx/wr/wrench/reftests/text/shadow-border.yaml
new file mode 100644
index 0000000000..b05fb88cb5
--- /dev/null
+++ b/gfx/wr/wrench/reftests/text/shadow-border.yaml
@@ -0,0 +1,19 @@
+---
+root:
+ items:
+ -
+ type: "shadow"
+ blur-radius: 25
+ bounds: [0, 0, 90, 90]
+ offset: [0, 0]
+ color: [0, 0, 0, 0.8]
+ -
+ type: border
+ bounds: [ 30, 30, 30, 30 ]
+ width: [ 15, 15, 15, 15 ]
+ border-type: normal
+ style: solid
+ color: blue
+ radius: 0
+ -
+ type: "pop-all-shadows"
diff --git a/gfx/wr/wrench/reftests/text/shadow-clip-rect.yaml b/gfx/wr/wrench/reftests/text/shadow-clip-rect.yaml
new file mode 100644
index 0000000000..6edf6ccb5a
--- /dev/null
+++ b/gfx/wr/wrench/reftests/text/shadow-clip-rect.yaml
@@ -0,0 +1,45 @@
+--- # checks that decorations on "real" content and "shadow" content are on seperate, atomic, layers
+root:
+ items:
+ -
+ type: "shadow"
+ bounds: [14, 18, 205, 35]
+ blur-radius: 0
+ offset: [20, 16]
+ color: green
+ -
+ type: "shadow"
+ bounds: [14, 18, 205, 35]
+ blur-radius: 0
+ offset: [10, 8]
+ color: black
+ -
+ type: line
+ clip-rect: [14, 18, 205, 35]
+ baseline: 45
+ start: 14
+ end: 210
+ width: 3
+ orientation: horizontal
+ color: red
+ style: solid
+ -
+ bounds: [14, 18, 205, 35]
+ clip-rect: [14, 18, 205, 35]
+ glyphs: [55, 75, 76, 86, 3, 76, 86, 3, 87, 75, 72, 3, 69, 72, 86, 87]
+ offsets: [16, 43, 35.533333, 43, 51.533333, 43, 60.4, 43, 72.833336, 43, 80.833336, 43, 89.7, 43, 102.13333, 43, 110.13333, 43, 119, 43, 135, 43, 149.2, 43, 157.2, 43, 173.2, 43, 187.4, 43, 196.26666, 43]
+ size: 18
+ color: red
+ font: "VeraBd.ttf"
+ -
+ type: line
+ clip-rect: [14, 18, 205, 35]
+ baseline: 32
+ start: 14
+ end: 210
+ width: 3
+ orientation: horizontal
+ color: red
+ style: solid
+ -
+ type: "pop-all-shadows"
diff --git a/gfx/wr/wrench/reftests/text/shadow-clip-ref.yaml b/gfx/wr/wrench/reftests/text/shadow-clip-ref.yaml
new file mode 100644
index 0000000000..ff57bfde63
--- /dev/null
+++ b/gfx/wr/wrench/reftests/text/shadow-clip-ref.yaml
@@ -0,0 +1,11 @@
+# Test that the clip-chain local rect is not applied
+# to the text run being drawn in the shadow. If it was
+# applied, the edges of the quad will be a slightly
+# different color, since the blur will include some
+# clipped out pixels.
+---
+root:
+ items:
+ - type: rect
+ bounds: [28, 28, 80, 80]
+ color: [255, 127, 127, 1]
diff --git a/gfx/wr/wrench/reftests/text/shadow-clip.yaml b/gfx/wr/wrench/reftests/text/shadow-clip.yaml
new file mode 100644
index 0000000000..92b5886acf
--- /dev/null
+++ b/gfx/wr/wrench/reftests/text/shadow-clip.yaml
@@ -0,0 +1,26 @@
+# Test that the clip-chain local rect is not applied
+# to the text run being drawn in the shadow. If it was
+# applied, the edges of the quad will be a slightly
+# different color, since the blur will include some
+# clipped out pixels.
+---
+root:
+ items:
+ - type: clip
+ id: 2
+ bounds: [28, 28, 80, 80]
+ -
+ type: "shadow"
+ bounds: [0, 0, 200, 200]
+ blur-radius: 2
+ color: [255, 0, 0, 0.5]
+ clip-chain: [2]
+ -
+ bounds: [6, 6, 132, 133]
+ glyphs: [67]
+ offsets: [8, 111]
+ size: 128
+ color: [0, 0, 0, 0]
+ font: "Ahem.ttf"
+ -
+ type: "pop-all-shadows"
diff --git a/gfx/wr/wrench/reftests/text/shadow-clipped-text.yaml b/gfx/wr/wrench/reftests/text/shadow-clipped-text.yaml
new file mode 100644
index 0000000000..9ab01d0a3f
--- /dev/null
+++ b/gfx/wr/wrench/reftests/text/shadow-clipped-text.yaml
@@ -0,0 +1,24 @@
+# Tests that the unclipped parts of a shadow still render even if the associated
+# text is clipped out.
+---
+root:
+ items:
+ - type: scroll-frame
+ bounds: [14, 18, 10, 5]
+ content-size: [10, 5]
+ items:
+ -
+ type: "shadow"
+ bounds: [11, 20, 100, 100]
+ blur-radius: 3
+ offset: [0, 0]
+ color: black
+ -
+ bounds: [14, 23, 100, 100]
+ glyphs: [55]
+ offsets: [16, 43]
+ size: 18
+ color: black
+ font: "VeraBd.ttf"
+ -
+ type: "pop-all-shadows"
diff --git a/gfx/wr/wrench/reftests/text/shadow-complex.yaml b/gfx/wr/wrench/reftests/text/shadow-complex.yaml
new file mode 100644
index 0000000000..e1bfbc1b3a
--- /dev/null
+++ b/gfx/wr/wrench/reftests/text/shadow-complex.yaml
@@ -0,0 +1,46 @@
+--- # The same as shadow-many.yaml, except the shadows only apply to parts of the text
+root:
+ items:
+ -
+ type: "shadow"
+ bounds: [14, 18, 205, 35]
+ blur-radius: 5
+ offset: [0, 0]
+ color: black
+ -
+ type: "shadow"
+ bounds: [14, 18, 205, 35]
+ blur-radius: 0
+ offset: [2, 3]
+ color: red
+ -
+ bounds: [14, 18, 205, 35]
+ glyphs: [55, 75, 76, 86]
+ offsets: [16, 43, 35.533333, 43, 51.533333, 43, 60.4, 43]
+ size: 18
+ color: [0, 0, 0, 0] # actual text is transparent
+ font: "VeraBd.ttf"
+ -
+ type: "pop-all-shadows"
+ -
+ type: "shadow"
+ bounds: [14, 18, 205, 35]
+ blur-radius: 3
+ offset: [-2, 3.5]
+ color: blue
+ -
+ bounds: [14, 18, 205, 35]
+ glyphs: [3, 76, 86, 3, 87, 75]
+ offsets: [72.833336, 43, 80.833336, 43, 89.7, 43, 102.13333, 43, 110.13333, 43, 119, 43]
+ size: 18
+ color: [0, 0, 0, 0] # actual text is transparent
+ font: "VeraBd.ttf"
+ -
+ bounds: [14, 18, 205, 35]
+ glyphs: [72, 3, 69, 72, 86, 87]
+ offsets: [135, 43, 149.2, 43, 157.2, 43, 173.2, 43, 187.4, 43, 196.26666, 43]
+ size: 18
+ color: [0, 0, 0, 0] # actual text is transparent
+ font: "VeraBd.ttf"
+ -
+ type: "pop-all-shadows"
diff --git a/gfx/wr/wrench/reftests/text/shadow-cover-1.yaml b/gfx/wr/wrench/reftests/text/shadow-cover-1.yaml
new file mode 100644
index 0000000000..088c26f1c5
--- /dev/null
+++ b/gfx/wr/wrench/reftests/text/shadow-cover-1.yaml
@@ -0,0 +1,18 @@
+--- # text covering a shadow
+root:
+ items:
+ -
+ type: "shadow"
+ bounds: [14, 18, 205, 35]
+ blur-radius: 3
+ offset: [0, 0]
+ color: red
+ -
+ bounds: [14, 18, 205, 35]
+ glyphs: [55, 75, 76, 86, 3, 76, 86, 3, 87, 75, 72, 3, 69, 72, 86, 87]
+ offsets: [16, 43, 35.533333, 43, 51.533333, 43, 60.4, 43, 72.833336, 43, 80.833336, 43, 89.7, 43, 102.13333, 43, 110.13333, 43, 119, 43, 135, 43, 149.2, 43, 157.2, 43, 173.2, 43, 187.4, 43, 196.26666, 43]
+ size: 18
+ color: green
+ font: "VeraBd.ttf"
+ -
+ type: "pop-all-shadows"
diff --git a/gfx/wr/wrench/reftests/text/shadow-cover-2.yaml b/gfx/wr/wrench/reftests/text/shadow-cover-2.yaml
new file mode 100644
index 0000000000..c18e277340
--- /dev/null
+++ b/gfx/wr/wrench/reftests/text/shadow-cover-2.yaml
@@ -0,0 +1,26 @@
+--- # shadow covering text
+root:
+ items:
+ -
+ bounds: [14, 18, 205, 35]
+ glyphs: [55, 75, 76, 86, 3, 76, 86, 3, 87, 75, 72, 3, 69, 72, 86, 87]
+ offsets: [16, 43, 35.533333, 43, 51.533333, 43, 60.4, 43, 72.833336, 43, 80.833336, 43, 89.7, 43, 102.13333, 43, 110.13333, 43, 119, 43, 135, 43, 149.2, 43, 157.2, 43, 173.2, 43, 187.4, 43, 196.26666, 43]
+ size: 18
+ color: green
+ font: "VeraBd.ttf"
+ -
+ type: "shadow"
+ bounds: [14, 18, 205, 35]
+ blur-radius: 3
+ offset: [0, 0]
+ color: red
+ -
+ bounds: [14, 18, 205, 35]
+ glyphs: [55, 75, 76, 86, 3, 76, 86, 3, 87, 75, 72, 3, 69, 72, 86, 87]
+ offsets: [16, 43, 35.533333, 43, 51.533333, 43, 60.4, 43, 72.833336, 43, 80.833336, 43, 89.7, 43, 102.13333, 43, 110.13333, 43, 119, 43, 135, 43, 149.2, 43, 157.2, 43, 173.2, 43, 187.4, 43, 196.26666, 43]
+ size: 18
+ color: [0, 0, 0, 0] # text transparent
+ font: "VeraBd.ttf"
+ -
+ type: "pop-all-shadows"
+
diff --git a/gfx/wr/wrench/reftests/text/shadow-fast-clip-ref.yaml b/gfx/wr/wrench/reftests/text/shadow-fast-clip-ref.yaml
new file mode 100644
index 0000000000..490b7d7b51
--- /dev/null
+++ b/gfx/wr/wrench/reftests/text/shadow-fast-clip-ref.yaml
@@ -0,0 +1,23 @@
+# Test that fast shadows actually apply clips
+---
+root:
+ items:
+ - type: clip
+ id: 2
+ bounds: [28, 28, 80, 80]
+ -
+ bounds: [6, 6, 132, 133]
+ text: "overflow text"
+ origin: [9, 101]
+ size: 12
+ color: [0, 0, 0, 1]
+ font: "VeraBd.ttf"
+ clip-chain: [2]
+ -
+ bounds: [6, 6, 132, 133]
+ text: "overflow text"
+ origin: [8, 100]
+ size: 12
+ color: [255, 0, 0, 1]
+ font: "VeraBd.ttf"
+ clip-chain: [2]
diff --git a/gfx/wr/wrench/reftests/text/shadow-fast-clip.yaml b/gfx/wr/wrench/reftests/text/shadow-fast-clip.yaml
new file mode 100644
index 0000000000..2a33267c96
--- /dev/null
+++ b/gfx/wr/wrench/reftests/text/shadow-fast-clip.yaml
@@ -0,0 +1,24 @@
+# Test that fast shadows actually apply clips
+---
+root:
+ items:
+ - type: clip
+ id: 2
+ bounds: [28, 28, 80, 80]
+ -
+ type: "shadow"
+ bounds: [0, 0, 200, 200]
+ blur-radius: 0
+ offset: [1, 1]
+ color: [0, 0, 0, 1]
+ clip-chain: [2]
+ -
+ bounds: [6, 6, 132, 133]
+ text: "overflow text"
+ origin: [8, 100]
+ size: 12
+ color: [255, 0, 0, 1]
+ font: "VeraBd.ttf"
+ clip-chain: [2]
+ -
+ type: "pop-all-shadows"
diff --git a/gfx/wr/wrench/reftests/text/shadow-grey-ref.yaml b/gfx/wr/wrench/reftests/text/shadow-grey-ref.yaml
new file mode 100644
index 0000000000..d40d997161
--- /dev/null
+++ b/gfx/wr/wrench/reftests/text/shadow-grey-ref.yaml
@@ -0,0 +1,6 @@
+---
+root:
+ items:
+ - rect: [14, 10, 205, 38]
+ color: [100, 100, 100, 1.0]
+
diff --git a/gfx/wr/wrench/reftests/text/shadow-grey-transparent.yaml b/gfx/wr/wrench/reftests/text/shadow-grey-transparent.yaml
new file mode 100644
index 0000000000..ba54ede1e2
--- /dev/null
+++ b/gfx/wr/wrench/reftests/text/shadow-grey-transparent.yaml
@@ -0,0 +1,19 @@
+---
+root:
+ items:
+ - rect: [14, 10, 205, 38]
+ color: [100, 100, 100, 1.0]
+ -
+ type: "shadow"
+ blur-radius: 2
+ color: [100, 100, 100, 0.2]
+ bounds: [14, 10, 205, 38]
+ -
+ bounds: [14, 18, 205, 35]
+ glyphs: [55, 75, 76, 86, 3, 76, 86, 3, 87, 75, 72, 3, 69, 72, 86, 87]
+ offsets: [16, 43, 35.533333, 43, 51.533333, 43, 60.4, 43, 72.833336, 43, 80.833336, 43, 89.7, 43, 102.13333, 43, 110.13333, 43, 119, 43, 135, 43, 149.2, 43, 157.2, 43, 173.2, 43, 187.4, 43, 196.26666, 43]
+ size: 24
+ color: [0,0,0,0]
+ -
+ type: "pop-all-shadows"
+
diff --git a/gfx/wr/wrench/reftests/text/shadow-grey.yaml b/gfx/wr/wrench/reftests/text/shadow-grey.yaml
new file mode 100644
index 0000000000..a728518ce3
--- /dev/null
+++ b/gfx/wr/wrench/reftests/text/shadow-grey.yaml
@@ -0,0 +1,19 @@
+---
+root:
+ items:
+ - rect: [14, 10, 205, 38]
+ color: [100, 100, 100, 1.0]
+ -
+ type: "shadow"
+ blur-radius: 2
+ color: [100, 100, 100, 1.0]
+ bounds: [14, 10, 205, 38]
+ -
+ bounds: [14, 18, 205, 35]
+ glyphs: [55, 75, 76, 86, 3, 76, 86, 3, 87, 75, 72, 3, 69, 72, 86, 87]
+ offsets: [16, 43, 35.533333, 43, 51.533333, 43, 60.4, 43, 72.833336, 43, 80.833336, 43, 89.7, 43, 102.13333, 43, 110.13333, 43, 119, 43, 135, 43, 149.2, 43, 157.2, 43, 173.2, 43, 187.4, 43, 196.26666, 43]
+ size: 24
+ color: [0,0,0,0]
+ -
+ type: "pop-all-shadows"
+
diff --git a/gfx/wr/wrench/reftests/text/shadow-huge-ref.yaml b/gfx/wr/wrench/reftests/text/shadow-huge-ref.yaml
new file mode 100644
index 0000000000..c0f8332a9e
--- /dev/null
+++ b/gfx/wr/wrench/reftests/text/shadow-huge-ref.yaml
@@ -0,0 +1,18 @@
+---
+root:
+ items:
+ -
+ type: "shadow"
+ bounds: [14, 18, 205, 35]
+ blur-radius: 600
+ offset: [10, 10]
+ color: black
+ -
+ bounds: [14, 18, 205, 35]
+ glyphs: [55, 75, 76, 86, 3, 76, 86, 3, 87, 75, 72, 3, 69, 72, 86, 87]
+ offsets: [16, 43, 35.533333, 43, 51.533333, 43, 60.4, 43, 72.833336, 43, 80.833336, 43, 89.7, 43, 102.13333, 43, 110.13333, 43, 119, 43, 135, 43, 149.2, 43, 157.2, 43, 173.2, 43, 187.4, 43, 196.26666, 43]
+ size: 18
+ color: [0, 0, 0, 1]
+ font: "VeraBd.ttf"
+ -
+ type: "pop-all-shadows"
diff --git a/gfx/wr/wrench/reftests/text/shadow-huge.yaml b/gfx/wr/wrench/reftests/text/shadow-huge.yaml
new file mode 100644
index 0000000000..1814dcf1df
--- /dev/null
+++ b/gfx/wr/wrench/reftests/text/shadow-huge.yaml
@@ -0,0 +1,18 @@
+---
+root:
+ items:
+ -
+ type: "shadow"
+ bounds: [14, 18, 205, 35]
+ blur-radius: 100000000
+ offset: [10, 10]
+ color: black
+ -
+ bounds: [14, 18, 205, 35]
+ glyphs: [55, 75, 76, 86, 3, 76, 86, 3, 87, 75, 72, 3, 69, 72, 86, 87]
+ offsets: [16, 43, 35.533333, 43, 51.533333, 43, 60.4, 43, 72.833336, 43, 80.833336, 43, 89.7, 43, 102.13333, 43, 110.13333, 43, 119, 43, 135, 43, 149.2, 43, 157.2, 43, 173.2, 43, 187.4, 43, 196.26666, 43]
+ size: 18
+ color: [0, 0, 0, 1]
+ font: "VeraBd.ttf"
+ -
+ type: "pop-all-shadows"
diff --git a/gfx/wr/wrench/reftests/text/shadow-image.yaml b/gfx/wr/wrench/reftests/text/shadow-image.yaml
new file mode 100644
index 0000000000..4d472aadc4
--- /dev/null
+++ b/gfx/wr/wrench/reftests/text/shadow-image.yaml
@@ -0,0 +1,14 @@
+---
+root:
+ items:
+ -
+ type: "shadow"
+ blur-radius: 25
+ bounds: [0, 0, 90, 90]
+ offset: [0, 0]
+ color: [0, 0, 0, 0.8]
+ -
+ bounds: [ 30, 30, 30, 30 ]
+ image: solid-color(0, 0, 255, 255, 30, 30)
+ -
+ type: "pop-all-shadows"
diff --git a/gfx/wr/wrench/reftests/text/shadow-many.yaml b/gfx/wr/wrench/reftests/text/shadow-many.yaml
new file mode 100644
index 0000000000..b5daabe669
--- /dev/null
+++ b/gfx/wr/wrench/reftests/text/shadow-many.yaml
@@ -0,0 +1,30 @@
+--- # the same as shadow.yaml, except there are many shadows with different offsets and colors
+root:
+ items:
+ -
+ type: "shadow"
+ bounds: [14, 18, 205, 35]
+ blur-radius: 5
+ offset: [0, 0]
+ color: black
+ -
+ type: "shadow"
+ bounds: [14, 18, 205, 35]
+ blur-radius: 0
+ offset: [2, 3]
+ color: red
+ -
+ type: "shadow"
+ bounds: [14, 18, 205, 35]
+ blur-radius: 3
+ offset: [-2, 3.5]
+ color: blue
+ -
+ bounds: [14, 18, 205, 35]
+ glyphs: [55, 75, 76, 86, 3, 76, 86, 3, 87, 75, 72, 3, 69, 72, 86, 87]
+ offsets: [16, 43, 35.533333, 43, 51.533333, 43, 60.4, 43, 72.833336, 43, 80.833336, 43, 89.7, 43, 102.13333, 43, 110.13333, 43, 119, 43, 135, 43, 149.2, 43, 157.2, 43, 173.2, 43, 187.4, 43, 196.26666, 43]
+ size: 18
+ color: [0, 0, 0, 0] # actual text is transparent
+ font: "VeraBd.ttf"
+ -
+ type: "pop-all-shadows"
diff --git a/gfx/wr/wrench/reftests/text/shadow-ordering-ref.yaml b/gfx/wr/wrench/reftests/text/shadow-ordering-ref.yaml
new file mode 100644
index 0000000000..cc0b378cb0
--- /dev/null
+++ b/gfx/wr/wrench/reftests/text/shadow-ordering-ref.yaml
@@ -0,0 +1,131 @@
+--- # checks that decorations on "real" content and "shadow" content are on seperate, atomic, layers
+root:
+ items:
+ -
+ type: "shadow"
+ bounds: [44, 42, 205, 35]
+ blur-radius: 1.0
+ offset: [30, 24]
+ color: blue
+ -
+ type: line
+ baseline: 45
+ start: 14
+ end: 210
+ width: 3
+ orientation: horizontal
+ color: [0,0,0,0] # transparent
+ style: solid
+ -
+ bounds: [14, 18, 205, 35]
+ glyphs: [55, 75, 76, 86, 3, 76, 86, 3, 87, 75, 72, 3, 69, 72, 86, 87]
+ offsets: [16, 43, 35.533333, 43, 51.533333, 43, 60.4, 43, 72.833336, 43, 80.833336, 43, 89.7, 43, 102.13333, 43, 110.13333, 43, 119, 43, 135, 43, 149.2, 43, 157.2, 43, 173.2, 43, 187.4, 43, 196.26666, 43]
+ size: 18
+ color: [0,0,0,0] # transparent
+ font: "VeraBd.ttf"
+ -
+ type: line
+ baseline: 32
+ start: 14
+ end: 210
+ width: 3
+ orientation: horizontal
+ color: [0,0,0,0] # transparent
+ style: solid
+ -
+ type: "pop-all-shadows"
+
+ -
+ type: "shadow"
+ bounds: [34, 34, 205, 35]
+ blur-radius: 0.0 # no blur to tigger fast shadows
+ offset: [20, 16]
+ color: green
+ -
+ type: line
+ baseline: 45
+ start: 14
+ end: 210
+ width: 3
+ orientation: horizontal
+ color: [0,0,0,0] # transparent
+ style: solid
+ -
+ bounds: [14, 18, 205, 35]
+ glyphs: [55, 75, 76, 86, 3, 76, 86, 3, 87, 75, 72, 3, 69, 72, 86, 87]
+ offsets: [16, 43, 35.533333, 43, 51.533333, 43, 60.4, 43, 72.833336, 43, 80.833336, 43, 89.7, 43, 102.13333, 43, 110.13333, 43, 119, 43, 135, 43, 149.2, 43, 157.2, 43, 173.2, 43, 187.4, 43, 196.26666, 43]
+ size: 18
+ color: [0,0,0,0] # transparent
+ font: "VeraBd.ttf"
+ -
+ type: line
+ baseline: 32
+ start: 14
+ end: 210
+ width: 3
+ orientation: horizontal
+ color: [0,0,0,0] # transparent
+ style: solid
+ -
+ type: "pop-all-shadows"
+
+ -
+ type: "shadow"
+ bounds: [24, 26, 205, 35]
+ blur-radius: 1.0
+ offset: [10, 8]
+ color: black
+ -
+ type: line
+ baseline: 45
+ start: 14
+ end: 210
+ width: 3
+ orientation: horizontal
+ color: [0,0,0,0] # transparent
+ style: solid
+ -
+ bounds: [14, 18, 205, 35]
+ glyphs: [55, 75, 76, 86, 3, 76, 86, 3, 87, 75, 72, 3, 69, 72, 86, 87]
+ offsets: [16, 43, 35.533333, 43, 51.533333, 43, 60.4, 43, 72.833336, 43, 80.833336, 43, 89.7, 43, 102.13333, 43, 110.13333, 43, 119, 43, 135, 43, 149.2, 43, 157.2, 43, 173.2, 43, 187.4, 43, 196.26666, 43]
+ size: 18
+ color: [0,0,0,0] # transparent
+ font: "VeraBd.ttf"
+ -
+ type: line
+ baseline: 32
+ start: 14
+ end: 210
+ width: 3
+ orientation: horizontal
+ color: [0,0,0,0] # transparent
+ style: solid
+ -
+ type: "pop-all-shadows"
+
+ # real text
+ -
+ type: line
+ baseline: 45
+ start: 14
+ end: 210
+ width: 3
+ orientation: horizontal
+ color: red
+ style: solid
+ -
+ bounds: [14, 18, 205, 35]
+ glyphs: [55, 75, 76, 86, 3, 76, 86, 3, 87, 75, 72, 3, 69, 72, 86, 87]
+ offsets: [16, 43, 35.533333, 43, 51.533333, 43, 60.4, 43, 72.833336, 43, 80.833336, 43, 89.7, 43, 102.13333, 43, 110.13333, 43, 119, 43, 135, 43, 149.2, 43, 157.2, 43, 173.2, 43, 187.4, 43, 196.26666, 43]
+ size: 18
+ color: red
+ font: "VeraBd.ttf"
+ -
+ type: line
+ baseline: 32
+ start: 14
+ end: 210
+ width: 3
+ orientation: horizontal
+ color: red
+ style: solid
diff --git a/gfx/wr/wrench/reftests/text/shadow-ordering.yaml b/gfx/wr/wrench/reftests/text/shadow-ordering.yaml
new file mode 100644
index 0000000000..d1969ef09b
--- /dev/null
+++ b/gfx/wr/wrench/reftests/text/shadow-ordering.yaml
@@ -0,0 +1,48 @@
+--- # checks that decorations on "real" content and "shadow" content are on seperate, atomic, layers
+root:
+ items:
+ -
+ type: "shadow"
+ bounds: [44, 42, 205, 35]
+ blur-radius: 1.0
+ offset: [30, 24]
+ color: blue
+ -
+ type: "shadow"
+ bounds: [34, 34, 205, 35]
+ blur-radius: 0.0 # no blur to tigger fast shadows
+ offset: [20, 16]
+ color: green
+ -
+ type: "shadow"
+ bounds: [24, 26, 205, 35]
+ blur-radius: 1.0
+ offset: [10, 8]
+ color: black
+ -
+ type: line
+ baseline: 45
+ start: 14
+ end: 210
+ width: 3
+ orientation: horizontal
+ color: red
+ style: solid
+ -
+ bounds: [14, 18, 205, 35]
+ glyphs: [55, 75, 76, 86, 3, 76, 86, 3, 87, 75, 72, 3, 69, 72, 86, 87]
+ offsets: [16, 43, 35.533333, 43, 51.533333, 43, 60.4, 43, 72.833336, 43, 80.833336, 43, 89.7, 43, 102.13333, 43, 110.13333, 43, 119, 43, 135, 43, 149.2, 43, 157.2, 43, 173.2, 43, 187.4, 43, 196.26666, 43]
+ size: 18
+ color: red
+ font: "VeraBd.ttf"
+ -
+ type: line
+ baseline: 32
+ start: 14
+ end: 210
+ width: 3
+ orientation: horizontal
+ color: red
+ style: solid
+ -
+ type: "pop-all-shadows"
diff --git a/gfx/wr/wrench/reftests/text/shadow-partial-glyph-ref.yaml b/gfx/wr/wrench/reftests/text/shadow-partial-glyph-ref.yaml
new file mode 100644
index 0000000000..e49ec68e97
--- /dev/null
+++ b/gfx/wr/wrench/reftests/text/shadow-partial-glyph-ref.yaml
@@ -0,0 +1,50 @@
+--- # taking the shadow of multiple copies of a glyph with different clips should look the same as the unclipped glyph
+root:
+ items:
+ -
+ type: "shadow"
+ blur-radius: 2
+ bounds: [14, 18, 205, 35]
+ offset: [40, 0]
+ color: black
+ -
+ bounds: [14, 18, 205, 35]
+ glyphs: [58]
+ offsets: [16, 43]
+ size: 18
+ color: [0, 0, 0, 0]
+ font: "VeraBd.ttf"
+ -
+ type: "pop-all-shadows"
+ -
+ bounds: [14, 18, 205, 35]
+ clip-rect: [16, 18, 14, 14]
+ glyphs: [58]
+ offsets: [16, 43]
+ size: 18
+ color: [255, 0, 0, 1]
+ font: "VeraBd.ttf"
+ -
+ bounds: [14, 18, 205, 35]
+ clip-rect: [30, 18, 14, 14]
+ glyphs: [58]
+ offsets: [16, 43]
+ size: 18
+ color: [0, 255, 0, 1]
+ font: "VeraBd.ttf"
+ -
+ bounds: [14, 18, 205, 35]
+ clip-rect: [16, 32, 14, 14]
+ glyphs: [58]
+ offsets: [16, 43]
+ size: 18
+ color: [0, 0, 255, 1]
+ font: "VeraBd.ttf"
+ -
+ bounds: [14, 18, 205, 35]
+ clip-rect: [30, 32, 14, 14]
+ glyphs: [58]
+ offsets: [16, 43]
+ size: 18
+ color: [255, 0, 255, 1]
+ font: "VeraBd.ttf" \ No newline at end of file
diff --git a/gfx/wr/wrench/reftests/text/shadow-partial-glyph.yaml b/gfx/wr/wrench/reftests/text/shadow-partial-glyph.yaml
new file mode 100644
index 0000000000..ccf455d0f6
--- /dev/null
+++ b/gfx/wr/wrench/reftests/text/shadow-partial-glyph.yaml
@@ -0,0 +1,43 @@
+--- # taking the shadow of multiple copies of a glyph with different clips should look the same as the unclipped glyph
+root:
+ items:
+ -
+ type: "shadow"
+ blur-radius: 2
+ bounds: [14, 18, 205, 35]
+ offset: [40, 0]
+ color: black
+ -
+ bounds: [14, 18, 205, 35]
+ clip-rect: [16, 18, 14, 14]
+ glyphs: [58]
+ offsets: [16, 43]
+ size: 18
+ color: [255, 0, 0, 1]
+ font: "VeraBd.ttf"
+ -
+ bounds: [14, 18, 205, 35]
+ clip-rect: [30, 18, 14, 14]
+ glyphs: [58]
+ offsets: [16, 43]
+ size: 18
+ color: [0, 255, 0, 1]
+ font: "VeraBd.ttf"
+ -
+ bounds: [14, 18, 205, 35]
+ clip-rect: [16, 32, 14, 14]
+ glyphs: [58]
+ offsets: [16, 43]
+ size: 18
+ color: [0, 0, 255, 1]
+ font: "VeraBd.ttf"
+ -
+ bounds: [14, 18, 205, 35]
+ clip-rect: [30, 32, 14, 14]
+ glyphs: [58]
+ offsets: [16, 43]
+ size: 18
+ color: [255, 0, 255, 1]
+ font: "VeraBd.ttf"
+ -
+ type: "pop-all-shadows" \ No newline at end of file
diff --git a/gfx/wr/wrench/reftests/text/shadow-red-ref.yaml b/gfx/wr/wrench/reftests/text/shadow-red-ref.yaml
new file mode 100644
index 0000000000..6c2f50fba0
--- /dev/null
+++ b/gfx/wr/wrench/reftests/text/shadow-red-ref.yaml
@@ -0,0 +1,5 @@
+---
+root:
+ items:
+ - rect: [14, 10, 205, 38]
+ color: red
diff --git a/gfx/wr/wrench/reftests/text/shadow-red.yaml b/gfx/wr/wrench/reftests/text/shadow-red.yaml
new file mode 100644
index 0000000000..62df9fc39c
--- /dev/null
+++ b/gfx/wr/wrench/reftests/text/shadow-red.yaml
@@ -0,0 +1,19 @@
+---
+root:
+ items:
+ - rect: [14, 10, 205, 38]
+ color: red
+ -
+ type: "shadow"
+ blur-radius: 1
+ color: red
+ bounds: [14, 10, 205, 38]
+ -
+ bounds: [14, 18, 205, 35]
+ glyphs: [55, 75, 76, 86, 3, 76, 86, 3, 87, 75, 72, 3, 69, 72, 86, 87]
+ offsets: [16, 43, 35.533333, 43, 51.533333, 43, 60.4, 43, 72.833336, 43, 80.833336, 43, 89.7, 43, 102.13333, 43, 110.13333, 43, 119, 43, 135, 43, 149.2, 43, 157.2, 43, 173.2, 43, 187.4, 43, 196.26666, 43]
+ size: 24
+ color: [0,0,0,0]
+ -
+ type: "pop-all-shadows"
+
diff --git a/gfx/wr/wrench/reftests/text/shadow-ref.yaml b/gfx/wr/wrench/reftests/text/shadow-ref.yaml
new file mode 100644
index 0000000000..efc8d2d9f0
--- /dev/null
+++ b/gfx/wr/wrench/reftests/text/shadow-ref.yaml
@@ -0,0 +1,25 @@
+---
+root:
+ items:
+ - # Compare non-blurred offset shadow to text with all glyphs offset that much
+ bounds: [16, 21, 205, 35]
+ glyphs: [55, 75, 76, 86, 3, 76, 86, 3, 87, 75, 72, 3, 69, 72, 86, 87]
+ offsets: [18, 46, 37.533333, 46, 53.533333, 46, 62.4, 46, 74.833336, 46, 82.833336, 46, 91.7, 46, 104.13333, 46, 112.13333, 46, 121, 46, 137, 46, 151.2, 46, 159.2, 46, 175.2, 46, 189.4, 46, 198.26666, 46]
+ size: 18
+ color: black
+ font: "VeraBd.ttf"
+ - # Compare blurred offset shadow to shadow
+ type: "shadow"
+ bounds: [12, 314, 205, 35]
+ blur-radius: 5
+ offset: [0, 0]
+ color: red
+ -
+ bounds: [14, 318, 205, 35]
+ glyphs: [55, 75, 76, 86, 3, 76, 86, 3, 87, 75, 72, 3, 69, 72, 86, 87]
+ offsets: [14, 339, 33.533333, 339, 49.533333, 339, 58.4, 339, 70.833336, 339, 78.833336, 339, 87.7, 339, 100.13333, 339, 108.13333, 339, 117, 339, 133, 339, 147.2, 339, 155.2, 339, 171.2, 339, 185.4, 339, 194.26666, 339]
+ size: 18
+ color: [0, 0, 0, 0] # actual text is transparent
+ font: "VeraBd.ttf"
+ -
+ type: "pop-all-shadows"
diff --git a/gfx/wr/wrench/reftests/text/shadow-rotate.yaml b/gfx/wr/wrench/reftests/text/shadow-rotate.yaml
new file mode 100644
index 0000000000..e0ffc9ac03
--- /dev/null
+++ b/gfx/wr/wrench/reftests/text/shadow-rotate.yaml
@@ -0,0 +1,18 @@
+--- #checks that transformed text shadows can locate glyphs in the glyph cache
+root:
+ items:
+ - type: stacking-context
+ bounds: [0, 0, 430, 330]
+ transform: rotate(30)
+ items:
+ - type: "shadow"
+ bounds: [0, 0, 430, 330]
+ blur-radius: 1
+ offset: [0, 1]
+ color: blue
+ - text: "a Bcd Efgh Ijklm Nopqrs Tuvwxyz"
+ origin: 50 200
+ size: 20
+ font: "FreeSans.ttf"
+ - type: "pop-all-shadows"
+
diff --git a/gfx/wr/wrench/reftests/text/shadow-single.yaml b/gfx/wr/wrench/reftests/text/shadow-single.yaml
new file mode 100644
index 0000000000..1804a073ff
--- /dev/null
+++ b/gfx/wr/wrench/reftests/text/shadow-single.yaml
@@ -0,0 +1,18 @@
+---
+root:
+ items:
+ -
+ type: "shadow"
+ blur-radius: 5
+ bounds: [14, 18, 205, 35]
+ offset: [0, 0]
+ color: black
+ -
+ bounds: [14, 18, 205, 35]
+ glyphs: [55]
+ offsets: [16, 43]
+ size: 18
+ color: [0, 0, 0, 0] # actual text is transparent
+ font: "VeraBd.ttf"
+ -
+ type: "pop-all-shadows"
diff --git a/gfx/wr/wrench/reftests/text/shadow-solid-ref.yaml b/gfx/wr/wrench/reftests/text/shadow-solid-ref.yaml
new file mode 100644
index 0000000000..264b1e1096
--- /dev/null
+++ b/gfx/wr/wrench/reftests/text/shadow-solid-ref.yaml
@@ -0,0 +1,16 @@
+---
+root:
+ items:
+ -
+ type: "shadow"
+ blur-radius: 25
+ bounds: [0, 0, 90, 90]
+ offset: [0, 0]
+ color: [0, 0, 0, 0.8]
+ -
+ bounds: [30, 30, 30, 30]
+ type: rect
+ style: solid
+ color: blue
+ -
+ type: "pop-all-shadows"
diff --git a/gfx/wr/wrench/reftests/text/shadow-transforms.png b/gfx/wr/wrench/reftests/text/shadow-transforms.png
new file mode 100644
index 0000000000..61e50a5547
--- /dev/null
+++ b/gfx/wr/wrench/reftests/text/shadow-transforms.png
Binary files differ
diff --git a/gfx/wr/wrench/reftests/text/shadow-transforms.yaml b/gfx/wr/wrench/reftests/text/shadow-transforms.yaml
new file mode 100644
index 0000000000..7a75133dab
--- /dev/null
+++ b/gfx/wr/wrench/reftests/text/shadow-transforms.yaml
@@ -0,0 +1,58 @@
+# Various tests for rotated text shadows, such as
+# blur radius, offset, shadow color.
+root:
+ items:
+ - type: stacking-context
+ transform: rotate(-30)
+ transform-origin: 80 80
+ items:
+ -
+ type: "shadow"
+ bounds: [0, 0, 350, 100]
+ blur-radius: 5
+ color: [255, 0, 0, 1]
+ - text: "A red shadow"
+ origin: 50 40
+ size: 20
+ font: "FreeSans.ttf"
+ -
+ type: "pop-all-shadows"
+
+ -
+ type: "shadow"
+ bounds: [100, 100, 350, 100]
+ blur-radius: 2
+ offset: 10 10
+ color: [0, 255, 0, 0.5]
+ - text: "Red text, green shadow"
+ origin: 150 140
+ size: 20
+ font: "FreeSans.ttf"
+ color: red
+ -
+ type: "pop-all-shadows"
+
+ - type: stacking-context
+ perspective: 100
+ perspective-origin: 650 100
+ items:
+ - type: "stacking-context"
+ transform-origin: 235 235
+ transform: rotate-x(-15)
+ items:
+ -
+ type: "shadow"
+ blur-radius: 5
+ color: [255, 0, 0, 1]
+ offset: [0, 20]
+ -
+ type: "shadow"
+ blur-radius: 0
+ color: [0, 0, 255, 1]
+ offset: [0, -20]
+ - text: "PERSPECTIVE!!!"
+ origin: 500 100
+ size: 100
+ font: "FreeSans.ttf"
+ -
+ type: "pop-all-shadows"
diff --git a/gfx/wr/wrench/reftests/text/shadow.yaml b/gfx/wr/wrench/reftests/text/shadow.yaml
new file mode 100644
index 0000000000..56ffdde93b
--- /dev/null
+++ b/gfx/wr/wrench/reftests/text/shadow.yaml
@@ -0,0 +1,33 @@
+---
+root:
+ items:
+ -
+ type: "shadow"
+ bounds: [14, 18, 205, 35]
+ blur-radius: 0
+ offset: [2, 3]
+ color: black
+ -
+ bounds: [14, 18, 205, 35]
+ glyphs: [55, 75, 76, 86, 3, 76, 86, 3, 87, 75, 72, 3, 69, 72, 86, 87]
+ offsets: [16, 43, 35.533333, 43, 51.533333, 43, 60.4, 43, 72.833336, 43, 80.833336, 43, 89.7, 43, 102.13333, 43, 110.13333, 43, 119, 43, 135, 43, 149.2, 43, 157.2, 43, 173.2, 43, 187.4, 43, 196.26666, 43]
+ size: 18
+ color: [0, 0, 0, 0] # actual text is transparent
+ font: "VeraBd.ttf"
+ -
+ type: "pop-all-shadows"
+ -
+ type: "shadow"
+ bounds: [12, 314, 205, 35]
+ blur-radius: 5
+ offset: [-2, -4]
+ color: red
+ -
+ bounds: [14, 318, 205, 35]
+ glyphs: [55, 75, 76, 86, 3, 76, 86, 3, 87, 75, 72, 3, 69, 72, 86, 87]
+ offsets: [16, 343, 35.533333, 343, 51.533333, 343, 60.4, 343, 72.833336, 343, 80.833336, 343, 89.7, 343, 102.13333, 343, 110.13333, 343, 119, 343, 135, 343, 149.2, 343, 157.2, 343, 173.2, 343, 187.4, 343, 196.26666, 343]
+ size: 18
+ color: [0, 0, 0, 0] # actual text is transparent
+ font: "VeraBd.ttf"
+ -
+ type: "pop-all-shadows"
diff --git a/gfx/wr/wrench/reftests/text/snap-clip-ref.yaml b/gfx/wr/wrench/reftests/text/snap-clip-ref.yaml
new file mode 100644
index 0000000000..676b7c80c5
--- /dev/null
+++ b/gfx/wr/wrench/reftests/text/snap-clip-ref.yaml
@@ -0,0 +1,7 @@
+root:
+ items:
+ - bounds: [0, 0, 35, 35]
+ glyphs: [50]
+ offsets: [10, 30]
+ size: 20
+ font: "FreeSans.ttf"
diff --git a/gfx/wr/wrench/reftests/text/snap-clip.yaml b/gfx/wr/wrench/reftests/text/snap-clip.yaml
new file mode 100644
index 0000000000..6ee30aa09b
--- /dev/null
+++ b/gfx/wr/wrench/reftests/text/snap-clip.yaml
@@ -0,0 +1,8 @@
+root:
+ items:
+ - bounds: [0, 0, 35, 35]
+ glyphs: [50]
+ offsets: [10.3, 30]
+ clip-rect: [0, 0, 29.7, 35]
+ size: 20
+ font: "FreeSans.ttf"
diff --git a/gfx/wr/wrench/reftests/text/snap-text-offset-ref.yaml b/gfx/wr/wrench/reftests/text/snap-text-offset-ref.yaml
new file mode 100644
index 0000000000..51b6a8c7c9
--- /dev/null
+++ b/gfx/wr/wrench/reftests/text/snap-text-offset-ref.yaml
@@ -0,0 +1,11 @@
+root:
+ items:
+ - type: stacking-context
+ bounds: [0, 0, 200, 100]
+ transform: translate(0.5, 0.5)
+ items:
+ - bounds: [0, 0, 200, 100]
+ glyphs: [68, 3, 37, 70, 71, 3, 40, 73, 74, 75]
+ offsets: [20.3, 50, 35, 50, 43, 50.49, 61.2, 50, 75.4, 50, 90.6, 50, 98.8, 50, 116.7, 50, 124.1, 50, 139.5, 50]
+ size: 20
+ font: "FreeSans.ttf"
diff --git a/gfx/wr/wrench/reftests/text/snap-text-offset.yaml b/gfx/wr/wrench/reftests/text/snap-text-offset.yaml
new file mode 100644
index 0000000000..df8c3680d8
--- /dev/null
+++ b/gfx/wr/wrench/reftests/text/snap-text-offset.yaml
@@ -0,0 +1,10 @@
+root:
+ items:
+ - type: stacking-context
+ bounds: [0.5, 0.5, 200, 100]
+ items:
+ - bounds: [0, 0, 200, 100]
+ glyphs: [68, 3, 37, 70, 71, 3, 40, 73, 74, 75]
+ offsets: [20.3, 50, 35, 50, 43, 50.49, 61.2, 50, 75.4, 50, 90.6, 50, 98.8, 50, 116.7, 50, 124.1, 50, 139.5, 50]
+ size: 20
+ font: "FreeSans.ttf"
diff --git a/gfx/wr/wrench/reftests/text/split-batch-ref.yaml b/gfx/wr/wrench/reftests/text/split-batch-ref.yaml
new file mode 100644
index 0000000000..687b051607
--- /dev/null
+++ b/gfx/wr/wrench/reftests/text/split-batch-ref.yaml
@@ -0,0 +1,18 @@
+---
+root:
+ items:
+ -
+ type: "shadow"
+ bounds: [0, 0, 650, 670]
+ blur-radius: 2
+ offset: [10, 10]
+ color: black
+ -
+ bounds: [0, 0, 650, 670]
+ glyphs: [55, 45]
+ offsets: [20, 500, 400, 500]
+ size: 500
+ color: [255, 0, 0, 1]
+ font: "VeraBd.ttf"
+ -
+ type: "pop-all-shadows"
diff --git a/gfx/wr/wrench/reftests/text/split-batch.yaml b/gfx/wr/wrench/reftests/text/split-batch.yaml
new file mode 100644
index 0000000000..687b051607
--- /dev/null
+++ b/gfx/wr/wrench/reftests/text/split-batch.yaml
@@ -0,0 +1,18 @@
+---
+root:
+ items:
+ -
+ type: "shadow"
+ bounds: [0, 0, 650, 670]
+ blur-radius: 2
+ offset: [10, 10]
+ color: black
+ -
+ bounds: [0, 0, 650, 670]
+ glyphs: [55, 45]
+ offsets: [20, 500, 400, 500]
+ size: 500
+ color: [255, 0, 0, 1]
+ font: "VeraBd.ttf"
+ -
+ type: "pop-all-shadows"
diff --git a/gfx/wr/wrench/reftests/text/subpixel-rotate.png b/gfx/wr/wrench/reftests/text/subpixel-rotate.png
new file mode 100644
index 0000000000..1eaf89db1f
--- /dev/null
+++ b/gfx/wr/wrench/reftests/text/subpixel-rotate.png
Binary files differ
diff --git a/gfx/wr/wrench/reftests/text/subpixel-rotate.yaml b/gfx/wr/wrench/reftests/text/subpixel-rotate.yaml
new file mode 100644
index 0000000000..296afb0d28
--- /dev/null
+++ b/gfx/wr/wrench/reftests/text/subpixel-rotate.yaml
@@ -0,0 +1,10 @@
+root:
+ items:
+ - type: stacking-context
+ bounds: [0, 0, 430, 330]
+ transform: rotate(-30)
+ items:
+ - text: "a Bcd Efgh Ijklm Nopqrs Tuvwxyz"
+ origin: 50 200
+ size: 20
+ font: "FreeSans.ttf"
diff --git a/gfx/wr/wrench/reftests/text/subpixel-scale.png b/gfx/wr/wrench/reftests/text/subpixel-scale.png
new file mode 100644
index 0000000000..5999d2d5dd
--- /dev/null
+++ b/gfx/wr/wrench/reftests/text/subpixel-scale.png
Binary files differ
diff --git a/gfx/wr/wrench/reftests/text/subpixel-scale.yaml b/gfx/wr/wrench/reftests/text/subpixel-scale.yaml
new file mode 100644
index 0000000000..84e7b72bfd
--- /dev/null
+++ b/gfx/wr/wrench/reftests/text/subpixel-scale.yaml
@@ -0,0 +1,10 @@
+root:
+ items:
+ - type: stacking-context
+ bounds: [0, 0, 680, 80]
+ transform: scale-x(1.5)
+ items:
+ - text: "a Bcd Efgh Ijklm Nopqrs Tuvwxyz"
+ origin: 20 50
+ size: 20
+ font: "FreeSans.ttf"
diff --git a/gfx/wr/wrench/reftests/text/subpixel-skew.png b/gfx/wr/wrench/reftests/text/subpixel-skew.png
new file mode 100644
index 0000000000..9dcfde0088
--- /dev/null
+++ b/gfx/wr/wrench/reftests/text/subpixel-skew.png
Binary files differ
diff --git a/gfx/wr/wrench/reftests/text/subpixel-skew.yaml b/gfx/wr/wrench/reftests/text/subpixel-skew.yaml
new file mode 100644
index 0000000000..7d06f722b2
--- /dev/null
+++ b/gfx/wr/wrench/reftests/text/subpixel-skew.yaml
@@ -0,0 +1,10 @@
+root:
+ items:
+ - type: stacking-context
+ bounds: [0, 0, 480, 80]
+ transform: skew-x(30)
+ items:
+ - text: "a Bcd Efgh Ijklm Nopqrs Tuvwxyz"
+ origin: 20 50
+ size: 20
+ font: "FreeSans.ttf"
diff --git a/gfx/wr/wrench/reftests/text/subpixel-translate-ref.yaml b/gfx/wr/wrench/reftests/text/subpixel-translate-ref.yaml
new file mode 100644
index 0000000000..a4377ee76d
--- /dev/null
+++ b/gfx/wr/wrench/reftests/text/subpixel-translate-ref.yaml
@@ -0,0 +1,12 @@
+root:
+ items:
+ - type: stacking-context
+ bounds: [0, 0, 500, 500]
+ items:
+ -
+ bounds: [0, 0, 500, 500]
+ glyphs: [80, 80, 80, 80, 80]
+ offsets: [50, 100, 71.111, 100, 92.222, 100, 113.333, 100, 134.444, 100]
+ origin: 0 0
+ size: 20
+ font: "FreeSans.ttf"
diff --git a/gfx/wr/wrench/reftests/text/subpixel-translate.yaml b/gfx/wr/wrench/reftests/text/subpixel-translate.yaml
new file mode 100644
index 0000000000..940dc6fef7
--- /dev/null
+++ b/gfx/wr/wrench/reftests/text/subpixel-translate.yaml
@@ -0,0 +1,13 @@
+root:
+ items:
+ - type: stacking-context
+ bounds: [0, 0, 500, 500]
+ transform: translate(0.444, 0)
+ items:
+ -
+ bounds: [0, 0, 500, 500]
+ glyphs: [80, 80, 80, 80, 80]
+ offsets: [50, 100, 71.111, 100, 92.222, 100, 113.333, 100, 134.444, 100]
+ origin: 0 0
+ size: 20
+ font: "FreeSans.ttf"
diff --git a/gfx/wr/wrench/reftests/text/subpx-bg-mask-ref.yaml b/gfx/wr/wrench/reftests/text/subpx-bg-mask-ref.yaml
new file mode 100644
index 0000000000..782907b5c3
--- /dev/null
+++ b/gfx/wr/wrench/reftests/text/subpx-bg-mask-ref.yaml
@@ -0,0 +1,8 @@
+---
+root:
+ items:
+ - text: "A"
+ origin: 20 190
+ size: 180
+ color: black
+ font: "FreeSans.ttf"
diff --git a/gfx/wr/wrench/reftests/text/subpx-bg-mask.yaml b/gfx/wr/wrench/reftests/text/subpx-bg-mask.yaml
new file mode 100644
index 0000000000..4d375d3884
--- /dev/null
+++ b/gfx/wr/wrench/reftests/text/subpx-bg-mask.yaml
@@ -0,0 +1,28 @@
+# Verify that text on a picture cache slice where the background
+# has a rounded-rect clip correct enables subpixel AA
+---
+root:
+ items:
+ - type: rect
+ bounds: [0, 0, 100, 100]
+ color: white
+ - type: scroll-frame
+ bounds: [0, 0, 200, 200]
+ content-size: [200, 200]
+ scroll-offset: [0, 0]
+ items:
+ - type: clip
+ id: 2
+ complex:
+ - rect: [0, 0, 200, 200]
+ radius: 4
+ - type: rect
+ bounds: [0, 0, 200, 200]
+ color: white
+ clip-chain: [2]
+ - text: "A"
+ origin: 20 190
+ size: 180
+ color: black
+ font: "FreeSans.ttf"
+ clip-chain: [2]
diff --git a/gfx/wr/wrench/reftests/text/subtle-shadow-ref.yaml b/gfx/wr/wrench/reftests/text/subtle-shadow-ref.yaml
new file mode 100644
index 0000000000..54374e1191
--- /dev/null
+++ b/gfx/wr/wrench/reftests/text/subtle-shadow-ref.yaml
@@ -0,0 +1,27 @@
+--- # incredibly faint shadows showing up as opaque black??
+root:
+ items:
+ - type: rect
+ bounds: [0, 0, 255, 85]
+ color: [245, 100, 100, 1.0]
+ -
+ type: "shadow"
+ bounds: [14, 18, 205, 35]
+ blur-radius: 0
+ offset: [0, 1]
+ color: [0.0,0.0,0.0, 0.101961]
+ -
+ bounds: [14, 18, 205, 35]
+ glyphs: [55, 75, 76, 86, 3, 76, 86, 3, 87, 75, 72, 3, 69, 72, 86, 87]
+ offsets: [16, 43, 35.533333, 43, 51.533333, 43, 60.4, 43, 72.833336, 43, 80.833336, 43, 89.7, 43, 102.13333, 43, 110.13333, 43, 119, 43, 135, 43, 149.2, 43, 157.2, 43, 173.2, 43, 187.4, 43, 196.26666, 43]
+ size: 12
+ color: [168, 168, 168, 0.0]
+ font: "VeraBd.ttf"
+ -
+ type: "pop-all-shadows"
+ - bounds: [14, 18, 205, 35]
+ glyphs: [55, 75, 76, 86, 3, 76, 86, 3, 87, 75, 72, 3, 69, 72, 86, 87]
+ offsets: [16, 43, 35.533333, 43, 51.533333, 43, 60.4, 43, 72.833336, 43, 80.833336, 43, 89.7, 43, 102.13333, 43, 110.13333, 43, 119, 43, 135, 43, 149.2, 43, 157.2, 43, 173.2, 43, 187.4, 43, 196.26666, 43]
+ size: 12
+ color: [168, 168, 168, 1.0]
+ font: "VeraBd.ttf"
diff --git a/gfx/wr/wrench/reftests/text/subtle-shadow.yaml b/gfx/wr/wrench/reftests/text/subtle-shadow.yaml
new file mode 100644
index 0000000000..67d19e81fd
--- /dev/null
+++ b/gfx/wr/wrench/reftests/text/subtle-shadow.yaml
@@ -0,0 +1,21 @@
+---
+root:
+ items:
+ - type: rect
+ bounds: [0, 0, 255, 85]
+ color: [245, 100, 100, 1.0]
+ -
+ type: "shadow"
+ bounds: [14, 18, 205, 35]
+ blur-radius: 0
+ offset: [0, 1]
+ color: [0.0,0.0,0.0, 0.101961]
+ -
+ bounds: [14, 18, 205, 35]
+ glyphs: [55, 75, 76, 86, 3, 76, 86, 3, 87, 75, 72, 3, 69, 72, 86, 87]
+ offsets: [16, 43, 35.533333, 43, 51.533333, 43, 60.4, 43, 72.833336, 43, 80.833336, 43, 89.7, 43, 102.13333, 43, 110.13333, 43, 119, 43, 135, 43, 149.2, 43, 157.2, 43, 173.2, 43, 187.4, 43, 196.26666, 43]
+ size: 12
+ color: [168, 168, 168, 1.0]
+ font: "VeraBd.ttf"
+ -
+ type: "pop-all-shadows"
diff --git a/gfx/wr/wrench/reftests/text/synthetic-bold-not-ref.yaml b/gfx/wr/wrench/reftests/text/synthetic-bold-not-ref.yaml
new file mode 100644
index 0000000000..b947bf4597
--- /dev/null
+++ b/gfx/wr/wrench/reftests/text/synthetic-bold-not-ref.yaml
@@ -0,0 +1,5 @@
+root:
+ items:
+ - text: "Fake bold is great"
+ origin: 20 40
+ size: 20
diff --git a/gfx/wr/wrench/reftests/text/synthetic-bold-transparent-ref.yaml b/gfx/wr/wrench/reftests/text/synthetic-bold-transparent-ref.yaml
new file mode 100644
index 0000000000..c7db0a3426
--- /dev/null
+++ b/gfx/wr/wrench/reftests/text/synthetic-bold-transparent-ref.yaml
@@ -0,0 +1,10 @@
+root:
+ items:
+ - type: stacking-context
+ bounds: [0, 0, 660, 210]
+ filters: opacity(0.5)
+ items:
+ - text: "Fake bold is great"
+ origin: 20 40
+ size: 20
+ synthetic-bold: true
diff --git a/gfx/wr/wrench/reftests/text/synthetic-bold-transparent.yaml b/gfx/wr/wrench/reftests/text/synthetic-bold-transparent.yaml
new file mode 100644
index 0000000000..043a6da781
--- /dev/null
+++ b/gfx/wr/wrench/reftests/text/synthetic-bold-transparent.yaml
@@ -0,0 +1,7 @@
+root:
+ items:
+ - text: "Fake bold is great"
+ origin: 20 40
+ size: 20
+ color: [0, 0, 0, 0.5]
+ synthetic-bold: true
diff --git a/gfx/wr/wrench/reftests/text/synthetic-bold.yaml b/gfx/wr/wrench/reftests/text/synthetic-bold.yaml
new file mode 100644
index 0000000000..8181dbb84e
--- /dev/null
+++ b/gfx/wr/wrench/reftests/text/synthetic-bold.yaml
@@ -0,0 +1,6 @@
+root:
+ items:
+ - text: "Fake bold is great"
+ origin: 20 40
+ size: 20
+ synthetic-bold: true
diff --git a/gfx/wr/wrench/reftests/text/synthetic-italics-custom.yaml b/gfx/wr/wrench/reftests/text/synthetic-italics-custom.yaml
new file mode 100644
index 0000000000..00f30a776f
--- /dev/null
+++ b/gfx/wr/wrench/reftests/text/synthetic-italics-custom.yaml
@@ -0,0 +1,7 @@
+root:
+ items:
+ - text: "Fake italics are great"
+ origin: 20 40
+ size: 20
+ synthetic-italics: 45
+
diff --git a/gfx/wr/wrench/reftests/text/synthetic-italics-ref.yaml b/gfx/wr/wrench/reftests/text/synthetic-italics-ref.yaml
new file mode 100644
index 0000000000..5c5be707f7
--- /dev/null
+++ b/gfx/wr/wrench/reftests/text/synthetic-italics-ref.yaml
@@ -0,0 +1,5 @@
+root:
+ items:
+ - text: "Fake italics are great"
+ origin: 20 40
+ size: 20
diff --git a/gfx/wr/wrench/reftests/text/synthetic-italics.yaml b/gfx/wr/wrench/reftests/text/synthetic-italics.yaml
new file mode 100644
index 0000000000..fa9b78a3f0
--- /dev/null
+++ b/gfx/wr/wrench/reftests/text/synthetic-italics.yaml
@@ -0,0 +1,7 @@
+root:
+ items:
+ - text: "Fake italics are great"
+ origin: 20 40
+ size: 20
+ synthetic-italics: true
+
diff --git a/gfx/wr/wrench/reftests/text/text-fixed-slice-fast.png b/gfx/wr/wrench/reftests/text/text-fixed-slice-fast.png
new file mode 100644
index 0000000000..e6d6147219
--- /dev/null
+++ b/gfx/wr/wrench/reftests/text/text-fixed-slice-fast.png
Binary files differ
diff --git a/gfx/wr/wrench/reftests/text/text-fixed-slice-slow.png b/gfx/wr/wrench/reftests/text/text-fixed-slice-slow.png
new file mode 100644
index 0000000000..4ccfff39b2
--- /dev/null
+++ b/gfx/wr/wrench/reftests/text/text-fixed-slice-slow.png
Binary files differ
diff --git a/gfx/wr/wrench/reftests/text/text-fixed-slice.yaml b/gfx/wr/wrench/reftests/text/text-fixed-slice.yaml
new file mode 100644
index 0000000000..9ee4dfcc56
--- /dev/null
+++ b/gfx/wr/wrench/reftests/text/text-fixed-slice.yaml
@@ -0,0 +1,27 @@
+# Verify that the option to configure performance / quality settings for
+# subpixel AA with picture caching is respected.
+root:
+ items:
+ - type: scroll-frame
+ bounds: [0, 0, 500, 200]
+ content-size: [500, 500]
+ clip-to-frame: true
+ id: 2
+ items:
+ - type: rect
+ bounds: [0, 0, 500, 200]
+ color: white
+ clip-chain: [2]
+ - type: clip
+ id: 3
+ bounds: [0, 0, 500, 200]
+ - type: rect
+ bounds: [0, 0, 500, 200]
+ color: white
+ clip-chain: [3]
+ - text: "The sun has frightened off the night!"
+ origin: 20 40
+ size: 20
+ font: "FreeSans.ttf"
+ spatial-id: 2
+ clip-chain: [2]
diff --git a/gfx/wr/wrench/reftests/text/text.yaml b/gfx/wr/wrench/reftests/text/text.yaml
new file mode 100644
index 0000000000..35e51fa92f
--- /dev/null
+++ b/gfx/wr/wrench/reftests/text/text.yaml
@@ -0,0 +1,10 @@
+---
+root:
+ items:
+ -
+ bounds: [14, 18, 205, 35]
+ glyphs: [55, 75, 76, 86, 3, 76, 86, 3, 87, 75, 72, 3, 69, 72, 86, 87]
+ offsets: [16, 43, 35.533333, 43, 51.533333, 43, 60.4, 43, 72.833336, 43, 80.833336, 43, 89.7, 43, 102.13333, 43, 110.13333, 43, 119, 43, 135, 43, 149.2, 43, 157.2, 43, 173.2, 43, 187.4, 43, 196.26666, 43]
+ size: 18
+ color: black
+ font: "VeraBd.ttf"
diff --git a/gfx/wr/wrench/reftests/text/transparent-no-aa-ref.yaml b/gfx/wr/wrench/reftests/text/transparent-no-aa-ref.yaml
new file mode 100644
index 0000000000..800b7a9f2a
--- /dev/null
+++ b/gfx/wr/wrench/reftests/text/transparent-no-aa-ref.yaml
@@ -0,0 +1,17 @@
+---
+root:
+ items:
+ -
+ type: "shadow"
+ bounds: [0, 0, 200, 200]
+ offset: [0, 0]
+ blur-radius: 0
+ color: [0, 0, 0, 0.5]
+ -
+ text: "hello everybody"
+ origin: [10, 20]
+ size: 18
+ color: [0, 0, 0, 0]
+ font: "VeraBd.ttf"
+ -
+ type: "pop-all-shadows"
diff --git a/gfx/wr/wrench/reftests/text/transparent-no-aa.yaml b/gfx/wr/wrench/reftests/text/transparent-no-aa.yaml
new file mode 100644
index 0000000000..3a5376f7a2
--- /dev/null
+++ b/gfx/wr/wrench/reftests/text/transparent-no-aa.yaml
@@ -0,0 +1,9 @@
+---
+root:
+ items:
+ -
+ text: "hello everybody"
+ origin: [10, 20]
+ size: 18
+ color: [0, 0, 0, 0.5]
+ font: "VeraBd.ttf"
diff --git a/gfx/wr/wrench/reftests/text/two-shadows.png b/gfx/wr/wrench/reftests/text/two-shadows.png
new file mode 100644
index 0000000000..3907f1be74
--- /dev/null
+++ b/gfx/wr/wrench/reftests/text/two-shadows.png
Binary files differ
diff --git a/gfx/wr/wrench/reftests/text/two-shadows.yaml b/gfx/wr/wrench/reftests/text/two-shadows.yaml
new file mode 100644
index 0000000000..cd16bd1fcf
--- /dev/null
+++ b/gfx/wr/wrench/reftests/text/two-shadows.yaml
@@ -0,0 +1,24 @@
+--- # A simple example of two shadows
+root:
+ items:
+ -
+ type: "shadow"
+ bounds: [14, 18, 205, 35]
+ blur-radius: 2
+ offset: [-2, -2]
+ color: [255, 0, 0, 1]
+ -
+ type: "shadow"
+ bounds: [14, 18, 205, 35]
+ blur-radius: 2
+ offset: [2, 2]
+ color: [0, 0, 255, 1]
+ -
+ bounds: [14, 18, 205, 35]
+ glyphs: [55, 75, 76, 86, 3, 76, 86, 3, 87, 75, 72, 3, 69, 72, 86, 87]
+ offsets: [16, 43, 35.533333, 43, 51.533333, 43, 60.4, 43, 72.833336, 43, 80.833336, 43, 89.7, 43, 102.13333, 43, 110.13333, 43, 119, 43, 135, 43, 149.2, 43, 157.2, 43, 173.2, 43, 187.4, 43, 196.26666, 43]
+ size: 18
+ color: [0, 0, 0, 0]
+ font: "VeraBd.ttf"
+ -
+ type: "pop-all-shadows"
diff --git a/gfx/wr/wrench/reftests/text/white-opacity.png b/gfx/wr/wrench/reftests/text/white-opacity.png
new file mode 100644
index 0000000000..69c76b28ae
--- /dev/null
+++ b/gfx/wr/wrench/reftests/text/white-opacity.png
Binary files differ
diff --git a/gfx/wr/wrench/reftests/text/white-opacity.yaml b/gfx/wr/wrench/reftests/text/white-opacity.yaml
new file mode 100644
index 0000000000..0e16856c14
--- /dev/null
+++ b/gfx/wr/wrench/reftests/text/white-opacity.yaml
@@ -0,0 +1,17 @@
+root:
+ items:
+ - type: stacking-context
+ bounds: [10, 10, 1000, 100]
+ items:
+ - type: rect
+ bounds: [0, 0, 720, 100]
+ color: [211, 211, 211, 1]
+ - type: stacking-context
+ bounds: [0, 0, 500, 100]
+ filters: [opacity(0.4)]
+ items:
+ - text: "Look, no white edges!!"
+ origin: 20 50
+ size: 40
+ color: white
+ font: "VeraBd.ttf"
diff --git a/gfx/wr/wrench/reftests/text/writing-modes-ref.yaml b/gfx/wr/wrench/reftests/text/writing-modes-ref.yaml
new file mode 100644
index 0000000000..c392822e60
--- /dev/null
+++ b/gfx/wr/wrench/reftests/text/writing-modes-ref.yaml
@@ -0,0 +1,19 @@
+root:
+ items:
+ - type: stacking-context
+ bounds: [0, 0, 300, 60]
+ transform: rotate(-90) translate(-120, 160)
+ items:
+ - text: "This is sideways-left"
+ origin: 0 40
+ size: 20
+ font: "FreeSans.ttf"
+ - type: stacking-context
+ bounds: [0, 0, 300, 60]
+ transform: rotate(90) translate(-90, 120)
+ items:
+ - text: "This is sideways-right"
+ origin: 0 40
+ size: 20
+ font: "FreeSans.ttf"
+
diff --git a/gfx/wr/wrench/reftests/text/writing-modes.yaml b/gfx/wr/wrench/reftests/text/writing-modes.yaml
new file mode 100644
index 0000000000..2c55e209e0
--- /dev/null
+++ b/gfx/wr/wrench/reftests/text/writing-modes.yaml
@@ -0,0 +1,15 @@
+root:
+ items:
+ - text: "This is sideways-left"
+ origin: 20 40
+ size: 20
+ transpose: true
+ flip-x: true
+ font: "FreeSans.ttf"
+ - text: "This is sideways-right"
+ origin: 70 300
+ size: 20
+ transpose: true
+ flip-y: true
+ font: "FreeSans.ttf"
+