Replace sk_has_side_effects keyword with $pure.

Going forward, any function will be considered to be pure if it is
marked with the `$pure` modifier. `$pure` is private and only allowed
in modules.

For reference, the old heuristic was both more complicated and less
flexible:
- User functions are never pure.
- Module functions with a body are never pure.
- Module functions without a body are pure when:
  - The function's name must be on the list of known intrinsics
  - The function must not have the `sk_has_side_effects` modifier

Change-Id: I717a619e96f2d6b36561e403c0b6759752aaf8f9
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/583961
Commit-Queue: John Stiles <johnstiles@google.com>
Auto-Submit: John Stiles <johnstiles@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
diff --git a/include/private/SkSLModifiers.h b/include/private/SkSLModifiers.h
index a54274c..1445b97 100644
--- a/include/private/SkSLModifiers.h
+++ b/include/private/SkSLModifiers.h
@@ -53,7 +53,7 @@
         kThreadgroup_Flag    = 1 << 12,
         // SkSL extensions, not present in GLSL
         kES3_Flag            = 1 << 13,
-        kHasSideEffects_Flag = 1 << 14,
+        kPure_Flag           = 1 << 14,
         kInline_Flag         = 1 << 15,
         kNoInline_Flag       = 1 << 16,
     };
@@ -76,8 +76,8 @@
         if (flags & kES3_Flag) {
             result += "$es3 ";
         }
-        if (flags & kHasSideEffects_Flag) {
-            result += "sk_has_side_effects ";
+        if (flags & kPure_Flag) {
+            result += "$pure ";
         }
         if (flags & kInline_Flag) {
             result += "inline ";
diff --git a/resources/sksl/errors/BadModifiers.sksl b/resources/sksl/errors/BadModifiers.sksl
index bfdc217..6dcb1f3 100644
--- a/resources/sksl/errors/BadModifiers.sksl
+++ b/resources/sksl/errors/BadModifiers.sksl
@@ -1,17 +1,16 @@
-const in out uniform flat noperspective sk_has_side_effects inline noinline readonly writeonly
+const in out uniform flat noperspective $pure inline noinline readonly writeonly
 buffer void func1() {}
 
-void func2(const in out uniform flat noperspective sk_has_side_effects
+void func2(const in out uniform flat noperspective $pure
            inline noinline readonly writeonly buffer float test) {}
 
-const in out uniform flat noperspective sk_has_side_effects inline noinline readonly writeonly
+const in out uniform flat noperspective $pure inline noinline readonly writeonly
 buffer float var;
 
-const in out uniform flat noperspective sk_has_side_effects inline noinline readonly writeonly
+const in out uniform flat noperspective $pure inline noinline readonly writeonly
 buffer MyInterfaceBlock { float var; };
 
 /*%%*
-'sk_has_side_effects' is not permitted here
 type 'void' does not support qualifier 'readonly writeonly'
 'const' is not permitted here
 'in' is not permitted here
@@ -19,29 +18,29 @@
 'uniform' is not permitted here
 'flat' is not permitted here
 'noperspective' is not permitted here
+'$pure' is not permitted here
 'buffer' is not permitted here
 functions cannot be both 'inline' and 'noinline'
-'sk_has_side_effects' is not permitted here
 type 'float' does not support qualifier 'readonly writeonly'
 'uniform' is not permitted here
 'flat' is not permitted here
 'noperspective' is not permitted here
-'sk_has_side_effects' is not permitted here
+'$pure' is not permitted here
 'inline' is not permitted here
 'noinline' is not permitted here
 'buffer' is not permitted here
-'sk_has_side_effects' is not permitted here
 type 'float' does not support qualifier 'readonly writeonly'
 'in uniform' variables not permitted
 'uniform buffer' variables not permitted
+'$pure' is not permitted here
 'inline' is not permitted here
 'noinline' is not permitted here
 'buffer' is not permitted here
 'const' variables must be initialized
-'sk_has_side_effects' is not permitted here
 'in uniform' variables not permitted
 'readonly' and 'writeonly' qualifiers cannot be combined
 'uniform buffer' variables not permitted
+'$pure' is not permitted here
 'inline' is not permitted here
 'noinline' is not permitted here
 'const' variables must be initialized
diff --git a/resources/sksl/runtime_errors/IllegalModifiers.rts b/resources/sksl/runtime_errors/IllegalModifiers.rts
index a9a2be2..958d19e 100644
--- a/resources/sksl/runtime_errors/IllegalModifiers.rts
+++ b/resources/sksl/runtime_errors/IllegalModifiers.rts
@@ -4,7 +4,7 @@
 out                 float _out;
 threadgroup         float _threadgroup;
 $es3                float _es3;
-sk_has_side_effects float _sk_has_side_effects;
+$pure               float _pure;
 inline              float _inline;
 noinline            float _noinline;
 readonly            float _readonly;
@@ -16,7 +16,7 @@
 out                 void out_fn() {}
 threadgroup         void threadgroup_fn() {}
 $es3                void es3_fn() {}
-sk_has_side_effects void sk_has_side_effect_fn() {}
+$pure               void sk_pure_fn() {}
 readonly            void readonly_fn() {}
 writeonly           void writeonly_fn() {}
 buffer              void buffer_fn() {}
@@ -32,7 +32,7 @@
 'out' is not permitted here
 'threadgroup' is not permitted here
 '$es3' is not permitted here
-'sk_has_side_effects' is not permitted here
+'$pure' is not permitted here
 'inline' is not permitted here
 'noinline' is not permitted here
 type 'float' does not support qualifier 'readonly'
@@ -43,7 +43,7 @@
 'out' is not permitted here
 'threadgroup' is not permitted here
 '$es3' is not permitted here
-'sk_has_side_effects' is not permitted here
+'$pure' is not permitted here
 type 'void' does not support qualifier 'readonly'
 type 'void' does not support qualifier 'writeonly'
 'buffer' is not permitted here
diff --git a/src/sksl/SkSLLexer.cpp b/src/sksl/SkSLLexer.cpp
index f3b2e97..15a9707 100644
--- a/src/sksl/SkSLLexer.cpp
+++ b/src/sksl/SkSLLexer.cpp
@@ -30,85 +30,85 @@
 };
 static constexpr FullEntry kFull[] = {
         {
-                0,   2,   3,   4,   5,   7,   9,   14,  16,  19,  20,  21,  23,  26,  27,
-                30,  35,  41,  60,  60,  60,  60,  60,  60,  62,  63,  64,  68,  70,  74,
-                75,  84,  84,  84,  84,  84,  84,  84,  84,  84,  85,  86,  87,  84,  90,
-                100, 110, 126, 146, 158, 174, 179, 187, 84,  211, 221, 228, 254, 259, 275,
-                287, 359, 385, 401, 413, 84,  84,  84,  426, 427, 430, 431,
+                0,   2,   3,   4,   5,   7,   9,   18,  20,  23,  24,  25,  27,  30,  31,
+                34,  39,  45,  64,  64,  64,  64,  64,  64,  66,  67,  68,  72,  74,  78,
+                79,  88,  88,  88,  88,  88,  88,  88,  88,  88,  89,  90,  91,  88,  94,
+                104, 114, 130, 150, 162, 178, 183, 191, 88,  215, 225, 232, 258, 263, 279,
+                291, 345, 371, 387, 399, 88,  88,  88,  412, 413, 416, 417,
         },
         {
-                0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0, 0, 0, 0,  42, 0, 50, 50, 50, 50, 50, 50, 51,
-                0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 57, 58, 0, 0,  0,  0,  0,  0,  0,  0,
-                52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0, 0, 0, 57, 0,  0, 58, 0,  0,  0,  0,  0,  0,
+                0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0, 0, 0, 0,  46, 0, 54, 54, 54, 54, 54, 54, 55,
+                0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 0, 0, 0, 61, 62, 0, 0,  0,  0,  0,  0,  0,  0,
+                56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0, 0, 0, 61, 0,  0, 62, 0,  0,  0,  0,  0,  0,
         },
         {
-                0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0, 0, 0, 0,  42, 0, 50, 50, 50, 50, 50, 50, 51,
-                0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 56, 0,  0, 0,  0,  0,  0,  0,  0,  0,
-                52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0, 0, 0, 56, 0,  0, 0,  0,  0,  0,  0,  0,  0,
+                0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0, 0, 0, 0,  46, 0, 54, 54, 54, 54, 54, 54, 55,
+                0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 0, 0, 0, 60, 0,  0, 0,  0,  0,  0,  0,  0,  0,
+                56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0, 0, 0, 60, 0,  0, 0,  0,  0,  0,  0,  0,  0,
         },
         {
-                0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0, 0, 0, 0,  42, 0, 51, 51, 51, 51, 51, 51, 51,
-                0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 55, 0,  0, 0,  0,  0,  0,  0,  0,  0,
-                52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0, 0, 0, 55, 0,  0, 0,  0,  0,  0,  0,  0,  0,
+                0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0, 0, 0, 0,  46, 0, 55, 55, 55, 55, 55, 55, 55,
+                0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 0, 0, 0, 59, 0,  0, 0,  0,  0,  0,  0,  0,  0,
+                56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0, 0, 0, 59, 0,  0, 0,  0,  0,  0,  0,  0,  0,
         },
         {
-                0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0, 0, 0, 0,  42, 0, 61, 61, 61, 61, 61, 61, 61,
-                0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 57, 0,  0, 0,  0,  0,  0,  0,  0,  0,
-                52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0, 0, 0, 57, 0,  0, 0,  0,  0,  0,  0,  0,  0,
+                0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0, 0, 0, 0,  46, 0, 65, 65, 65, 65, 65, 65, 65,
+                0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 0, 0, 0, 61, 0,  0, 0,  0,  0,  0,  0,  0,  0,
+                56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0, 0, 0, 61, 0,  0, 0,  0,  0,  0,  0,  0,  0,
         },
         {
                 0,   0,  0,  0,   0,  0,  0,  0,  0,   0,  0,  0,  0,  0,  0,  0,  0,  10,
                 10,  10, 10, 10,  10, 10, 0,  0,  0,   0,  0,  0,  0,  10, 10, 10, 10, 10,
-                10,  10, 10, 10,  0,  0,  0,  10, 111, 10, 10, 10, 10, 10, 10, 10, 10, 10,
-                114, 10, 10, 117, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 0,  0,  0,  0,
+                10,  10, 10, 10,  0,  0,  0,  10, 115, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+                118, 10, 10, 121, 10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 0,  0,  0,  0,
         },
         {
                 0,  0,  0,  0,   0,  0,  0,  0,  0,  0,   0,  0,  0,   0,  0,  0,  0,   10,
                 10, 10, 10, 10,  10, 10, 0,  0,  0,  0,   0,  0,  0,   10, 10, 10, 10,  10,
-                10, 10, 10, 10,  0,  0,  0,  10, 10, 10,  10, 10, 127, 10, 10, 10, 133, 10,
-                10, 10, 10, 139, 10, 10, 10, 10, 10, 143, 10, 10, 10,  10, 0,  0,  0,   0,
+                10, 10, 10, 10,  0,  0,  0,  10, 10, 10,  10, 10, 131, 10, 10, 10, 137, 10,
+                10, 10, 10, 143, 10, 10, 10, 10, 10, 147, 10, 10, 10,  10, 0,  0,  0,   0,
         },
         {
                 0,   0,  0,   0,  0,  0,  0,  0,  0,  0,  0,  0,   0,  0,  0,  0,  0,  10,
                 10,  10, 10,  10, 10, 10, 0,  0,  0,  0,  0,  0,   0,  10, 10, 10, 10, 10,
                 10,  10, 10,  10, 0,  0,  0,  10, 10, 10, 10, 10,  10, 10, 10, 10, 10, 10,
-                147, 10, 150, 10, 10, 10, 10, 10, 10, 10, 10, 152, 10, 10, 0,  0,  0,  0,
+                151, 10, 154, 10, 10, 10, 10, 10, 10, 10, 10, 156, 10, 10, 0,  0,  0,  0,
         },
         {
                 0,   0,  0,  0,   0,  0,  0,  0,  0,   0,   0,  0,  0,  0,  0,  0,  0,   10,
                 10,  10, 10, 10,  10, 10, 0,  0,  0,   0,   0,  0,  0,  10, 10, 10, 10,  10,
-                10,  10, 10, 10,  0,  0,  0,  10, 159, 10,  10, 10, 10, 10, 10, 10, 163, 10,
-                166, 10, 10, 169, 10, 10, 10, 10, 10,  171, 10, 10, 10, 10, 0,  0,  0,   0,
+                10,  10, 10, 10,  0,  0,  0,  10, 163, 10,  10, 10, 10, 10, 10, 10, 167, 10,
+                170, 10, 10, 173, 10, 10, 10, 10, 10,  175, 10, 10, 10, 10, 0,  0,  0,   0,
         },
         {
                 0,   0,  0,  0,   0,   0,  0,  0,   0,  0,   0,  0,  0,  0,  0,  0,  0,  10,
                 10,  10, 10, 10,  10,  10, 0,  0,   0,  0,   0,  0,  0,  10, 10, 10, 10, 10,
                 10,  10, 10, 10,  0,   0,  0,  10,  10, 10,  10, 10, 10, 10, 10, 10, 10, 10,
-                190, 10, 10, 194, 197, 10, 10, 199, 10, 205, 10, 10, 10, 10, 0,  0,  0,  0,
+                194, 10, 10, 198, 201, 10, 10, 203, 10, 209, 10, 10, 10, 10, 0,  0,  0,  0,
         },
         {
                 0,  0,  0,  0,  0,  0,   0,  0,  0,   0,  0,  0,  0,  0,  0,  0,  0,  10,
                 10, 10, 10, 10, 10, 10,  0,  0,  0,   0,  0,  0,  0,  10, 10, 10, 10, 10,
-                10, 10, 10, 10, 0,  0,   0,  10, 260, 10, 10, 10, 10, 10, 10, 10, 10, 10,
-                10, 10, 10, 10, 10, 264, 10, 10, 271, 10, 10, 10, 10, 10, 0,  0,  0,  0,
+                10, 10, 10, 10, 0,  0,   0,  10, 264, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+                10, 10, 10, 10, 10, 268, 10, 10, 275, 10, 10, 10, 10, 10, 0,  0,  0,  0,
         },
         {
                 0,  0,  0,  0,  0,  0,  0,  0,   0,   0,  0,   0,  0,  0,  0,  0,  0,   10,
                 10, 10, 10, 10, 10, 10, 0,  0,   0,   0,  0,   0,  0,  10, 10, 10, 10,  10,
-                10, 10, 10, 10, 0,  0,  0,  10,  288, 10, 10,  10, 10, 10, 10, 10, 320, 324,
-                10, 10, 10, 10, 10, 10, 10, 342, 350, 10, 354, 10, 10, 10, 0,  0,  0,   0,
+                10, 10, 10, 10, 0,  0,  0,  10,  292, 10, 10,  10, 10, 10, 10, 10, 324, 10,
+                10, 10, 10, 10, 10, 10, 10, 328, 336, 10, 340, 10, 10, 10, 0,  0,  0,   0,
         },
         {
                 0,   0,   0,   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,   0,  0,  10,
-                294, 301, 312, 10, 10, 10, 0,  0,  0,  0,  0,  0,  0,  10, 317, 10, 10, 10,
+                298, 305, 316, 10, 10, 10, 0,  0,  0,  0,  0,  0,  0,  10, 321, 10, 10, 10,
                 10,  10,  10,  10, 0,  0,  0,  10, 10, 10, 10, 10, 10, 10, 10,  10, 10, 10,
                 10,  10,  10,  10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 0,   0,  0,  0,
         },
         {
                 0,  0,  0,  0,  0,  0,   0,  0,  0,  0,  0,  0,  0,   0,  0,  0,   0,  10,
                 10, 10, 10, 10, 10, 10,  0,  0,  0,  0,  0,  0,  0,   10, 10, 10,  10, 10,
-                10, 10, 10, 10, 0,  0,   0,  10, 10, 10, 10, 10, 360, 10, 10, 366, 10, 10,
-                10, 10, 10, 10, 10, 377, 10, 10, 10, 10, 10, 10, 380, 10, 0,  0,   0,  0,
+                10, 10, 10, 10, 0,  0,   0,  10, 10, 10, 10, 10, 346, 10, 10, 352, 10, 10,
+                10, 10, 10, 10, 10, 363, 10, 10, 10, 10, 10, 10, 366, 10, 0,  0,   0,  0,
         },
 };
 static constexpr CompactEntry kCompact[] = {
@@ -217,25 +217,25 @@
                  0,
                  255,
          }},
-        {11 | (10 << 9),
+        {14 | (11 << 9) | (10 << 18),
          {
                  255,
                  255,
                  255,
                  255,
-                 87,
-                 85,
+                 171,
+                 170,
                  255,
-                 127,
-                 85,
-                 85,
-                 127,
-                 85,
-                 84,
-                 85,
-                 85,
-                 85,
-                 85,
+                 191,
+                 170,
+                 170,
+                 191,
+                 170,
+                 169,
+                 170,
+                 138,
+                 170,
+                 170,
                  255,
          }},
         {10,
@@ -301,7 +301,70 @@
                  85,
                  255,
          }},
-        {15,
+        {15 | (10 << 9),
+         {
+                 255,
+                 255,
+                 255,
+                 255,
+                 87,
+                 85,
+                 255,
+                 127,
+                 85,
+                 85,
+                 127,
+                 85,
+                 85,
+                 85,
+                 85,
+                 69,
+                 85,
+                 255,
+         }},
+        {16 | (10 << 9),
+         {
+                 255,
+                 255,
+                 255,
+                 255,
+                 87,
+                 85,
+                 255,
+                 127,
+                 85,
+                 85,
+                 127,
+                 85,
+                 85,
+                 85,
+                 21,
+                 85,
+                 85,
+                 255,
+         }},
+        {17 | (10 << 9),
+         {
+                 255,
+                 255,
+                 255,
+                 255,
+                 87,
+                 85,
+                 255,
+                 127,
+                 85,
+                 85,
+                 127,
+                 85,
+                 84,
+                 85,
+                 85,
+                 85,
+                 85,
+                 255,
+         }},
+        {19,
          {
                  255,
                  255,
@@ -322,7 +385,7 @@
                  255,
                  255,
          }},
-        {18 | (17 << 9),
+        {22 | (21 << 9),
          {
                  255,
                  255,
@@ -343,7 +406,7 @@
                  255,
                  255,
          }},
-        {22,
+        {26,
          {
                  255,
                  255,
@@ -364,32 +427,32 @@
                  255,
                  255,
          }},
-        {25 | (24 << 9),
-         {
-                 255,
-                 255,
-                 255,
-                 253,
-                 255,
-                 255,
-                 63,
-                 255,
-                 255,
-                 255,
-                 255,
-                 255,
-                 255,
-                 255,
-                 255,
-                 255,
-                 255,
-                 255,
-         }},
         {29 | (28 << 9),
          {
                  255,
                  255,
                  255,
+                 253,
+                 255,
+                 255,
+                 63,
+                 255,
+                 255,
+                 255,
+                 255,
+                 255,
+                 255,
+                 255,
+                 255,
+                 255,
+                 255,
+                 255,
+         }},
+        {33 | (32 << 9),
+         {
+                 255,
+                 255,
+                 255,
                  223,
                  255,
                  255,
@@ -406,7 +469,7 @@
                  255,
                  255,
          }},
-        {31,
+        {35,
          {
                  255,
                  255,
@@ -427,7 +490,7 @@
                  255,
                  255,
          }},
-        {32 | (31 << 9),
+        {36 | (35 << 9),
          {
                  255,
                  255,
@@ -448,7 +511,7 @@
                  255,
                  255,
          }},
-        {34 | (33 << 9),
+        {38 | (37 << 9),
          {
                  255,
                  255,
@@ -469,7 +532,7 @@
                  255,
                  255,
          }},
-        {34,
+        {38,
          {
                  255,
                  255,
@@ -490,7 +553,7 @@
                  255,
                  255,
          }},
-        {40 | (39 << 9) | (36 << 18),
+        {44 | (43 << 9) | (40 << 18),
          {
                  255,
                  255,
@@ -511,7 +574,7 @@
                  255,
                  255,
          }},
-        {37 | (36 << 9),
+        {41 | (40 << 9),
          {
                  87,
                  85,
@@ -532,7 +595,7 @@
                  85,
                  85,
          }},
-        {38 | (36 << 9),
+        {42 | (40 << 9),
          {
                  87,
                  85,
@@ -553,7 +616,7 @@
                  85,
                  85,
          }},
-        {39,
+        {43,
          {
                  51,
                  0,
@@ -574,7 +637,7 @@
                  0,
                  0,
          }},
-        {47 | (43 << 9),
+        {51 | (47 << 9),
          {
                  255,
                  255,
@@ -595,7 +658,7 @@
                  255,
                  255,
          }},
-        {44 | (43 << 9),
+        {48 | (47 << 9),
          {
                  255,
                  255,
@@ -616,7 +679,7 @@
                  255,
                  255,
          }},
-        {46 | (45 << 9),
+        {50 | (49 << 9),
          {
                  255,
                  255,
@@ -637,7 +700,7 @@
                  255,
                  255,
          }},
-        {46,
+        {50,
          {
                  255,
                  255,
@@ -658,7 +721,7 @@
                  255,
                  255,
          }},
-        {49 | (48 << 9),
+        {53 | (52 << 9),
          {
                  255,
                  255,
@@ -679,7 +742,7 @@
                  255,
                  255,
          }},
-        {49,
+        {53,
          {
                  255,
                  255,
@@ -700,7 +763,7 @@
                  255,
                  255,
          }},
-        {54 | (53 << 9),
+        {58 | (57 << 9),
          {
                  255,
                  255,
@@ -721,7 +784,7 @@
                  255,
                  255,
          }},
-        {54,
+        {58,
          {
                  255,
                  255,
@@ -742,7 +805,7 @@
                  255,
                  255,
          }},
-        {59,
+        {63,
          {
                  255,
                  255,
@@ -763,7 +826,7 @@
                  255,
                  255,
          }},
-        {59 | (57 << 9),
+        {63 | (61 << 9),
          {
                  255,
                  255,
@@ -784,7 +847,7 @@
                  255,
                  255,
          }},
-        {67 | (65 << 9),
+        {71 | (69 << 9),
          {
                  255,
                  255,
@@ -805,7 +868,7 @@
                  255,
                  255,
          }},
-        {66,
+        {70,
          {
                  255,
                  255,
@@ -826,48 +889,6 @@
                  255,
                  255,
          }},
-        {69,
-         {
-                 255,
-                 255,
-                 255,
-                 255,
-                 255,
-                 255,
-                 63,
-                 255,
-                 255,
-                 255,
-                 255,
-                 255,
-                 255,
-                 255,
-                 255,
-                 255,
-                 255,
-                 255,
-         }},
-        {72 | (71 << 9),
-         {
-                 255,
-                 255,
-                 255,
-                 255,
-                 255,
-                 255,
-                 127,
-                 252,
-                 255,
-                 255,
-                 255,
-                 255,
-                 255,
-                 255,
-                 255,
-                 255,
-                 255,
-                 255,
-         }},
         {73,
          {
                  255,
@@ -889,7 +910,49 @@
                  255,
                  255,
          }},
-        {78 | (76 << 9),
+        {76 | (75 << 9),
+         {
+                 255,
+                 255,
+                 255,
+                 255,
+                 255,
+                 255,
+                 127,
+                 252,
+                 255,
+                 255,
+                 255,
+                 255,
+                 255,
+                 255,
+                 255,
+                 255,
+                 255,
+                 255,
+         }},
+        {77,
+         {
+                 255,
+                 255,
+                 255,
+                 255,
+                 255,
+                 255,
+                 63,
+                 255,
+                 255,
+                 255,
+                 255,
+                 255,
+                 255,
+                 255,
+                 255,
+                 255,
+                 255,
+                 255,
+         }},
+        {82 | (80 << 9),
          {
                  255,
                  255,
@@ -910,69 +973,6 @@
                  255,
                  255,
          }},
-        {77,
-         {
-                 255,
-                 255,
-                 255,
-                 255,
-                 255,
-                 255,
-                 255,
-                 255,
-                 255,
-                 255,
-                 255,
-                 255,
-                 243,
-                 255,
-                 255,
-                 255,
-                 255,
-                 255,
-         }},
-        {79,
-         {
-                 255,
-                 255,
-                 255,
-                 255,
-                 255,
-                 255,
-                 255,
-                 255,
-                 255,
-                 255,
-                 255,
-                 255,
-                 255,
-                 255,
-                 255,
-                 255,
-                 252,
-                 255,
-         }},
-        {80,
-         {
-                 255,
-                 255,
-                 255,
-                 255,
-                 255,
-                 255,
-                 255,
-                 255,
-                 255,
-                 255,
-                 255,
-                 255,
-                 255,
-                 252,
-                 255,
-                 255,
-                 255,
-                 255,
-         }},
         {81,
          {
                  255,
@@ -987,30 +987,9 @@
                  255,
                  255,
                  255,
-                 255,
-                 255,
-                 255,
                  243,
                  255,
                  255,
-         }},
-        {82,
-         {
-                 255,
-                 255,
-                 255,
-                 255,
-                 255,
-                 255,
-                 255,
-                 255,
-                 255,
-                 255,
-                 255,
-                 207,
-                 255,
-                 255,
-                 255,
                  255,
                  255,
                  255,
@@ -1029,6 +1008,90 @@
                  255,
                  255,
                  255,
+                 255,
+                 255,
+                 255,
+                 255,
+                 252,
+                 255,
+         }},
+        {84,
+         {
+                 255,
+                 255,
+                 255,
+                 255,
+                 255,
+                 255,
+                 255,
+                 255,
+                 255,
+                 255,
+                 255,
+                 255,
+                 255,
+                 252,
+                 255,
+                 255,
+                 255,
+                 255,
+         }},
+        {85,
+         {
+                 255,
+                 255,
+                 255,
+                 255,
+                 255,
+                 255,
+                 255,
+                 255,
+                 255,
+                 255,
+                 255,
+                 255,
+                 255,
+                 255,
+                 255,
+                 243,
+                 255,
+                 255,
+         }},
+        {86,
+         {
+                 255,
+                 255,
+                 255,
+                 255,
+                 255,
+                 255,
+                 255,
+                 255,
+                 255,
+                 255,
+                 255,
+                 207,
+                 255,
+                 255,
+                 255,
+                 255,
+                 255,
+                 255,
+         }},
+        {87,
+         {
+                 255,
+                 255,
+                 255,
+                 255,
+                 255,
+                 255,
+                 255,
+                 255,
+                 255,
+                 255,
+                 255,
+                 255,
                  63,
                  255,
                  255,
@@ -1036,7 +1099,7 @@
                  255,
                  255,
          }},
-        {89 | (88 << 9),
+        {93 | (92 << 9),
          {
                  255,
                  255,
@@ -1057,7 +1120,7 @@
                  255,
                  255,
          }},
-        {93 | (91 << 9) | (10 << 18),
+        {97 | (95 << 9) | (10 << 18),
          {
                  255,
                  255,
@@ -1078,69 +1141,6 @@
                  170,
                  255,
          }},
-        {92 | (10 << 9),
-         {
-                 255,
-                 255,
-                 255,
-                 255,
-                 87,
-                 85,
-                 255,
-                 127,
-                 85,
-                 85,
-                 127,
-                 85,
-                 85,
-                 21,
-                 85,
-                 85,
-                 85,
-                 255,
-         }},
-        {94 | (10 << 9),
-         {
-                 255,
-                 255,
-                 255,
-                 255,
-                 87,
-                 85,
-                 255,
-                 127,
-                 85,
-                 85,
-                 127,
-                 85,
-                 85,
-                 85,
-                 85,
-                 81,
-                 85,
-                 255,
-         }},
-        {95 | (10 << 9),
-         {
-                 255,
-                 255,
-                 255,
-                 255,
-                 87,
-                 85,
-                 255,
-                 127,
-                 85,
-                 85,
-                 127,
-                 85,
-                 85,
-                 85,
-                 21,
-                 85,
-                 85,
-                 255,
-         }},
         {96 | (10 << 9),
          {
                  255,
@@ -1156,28 +1156,7 @@
                  127,
                  85,
                  85,
-                 84,
-                 85,
-                 85,
-                 85,
-                 255,
-         }},
-        {97 | (10 << 9),
-         {
-                 255,
-                 255,
-                 255,
-                 255,
-                 87,
-                 85,
-                 255,
-                 127,
-                 85,
-                 85,
-                 127,
-                 81,
-                 85,
-                 85,
+                 21,
                  85,
                  85,
                  85,
@@ -1200,7 +1179,7 @@
                  85,
                  85,
                  85,
-                 69,
+                 81,
                  85,
                  255,
          }},
@@ -1220,200 +1199,242 @@
                  85,
                  85,
                  85,
-                 85,
-                 81,
-                 85,
-                 255,
-         }},
-        {92 | (10 << 9),
-         {
-                 255,
-                 255,
-                 255,
-                 255,
-                 87,
-                 85,
-                 255,
-                 127,
-                 85,
-                 85,
-                 127,
-                 85,
-                 84,
-                 85,
-                 85,
-                 85,
-                 85,
-                 255,
-         }},
-        {105 | (101 << 9) | (10 << 18),
-         {
-                 255,
-                 255,
-                 255,
-                 255,
-                 171,
-                 170,
-                 255,
-                 191,
-                 170,
-                 170,
-                 191,
-                 170,
-                 170,
-                 170,
-                 106,
-                 138,
-                 170,
-                 255,
-         }},
-        {102 | (10 << 9),
-         {
-                 255,
-                 255,
-                 255,
-                 255,
-                 87,
-                 85,
-                 255,
-                 127,
-                 85,
-                 85,
-                 127,
-                 85,
-                 84,
-                 85,
-                 85,
-                 85,
-                 85,
-                 255,
-         }},
-        {103 | (10 << 9),
-         {
-                 255,
-                 255,
-                 255,
-                 255,
-                 87,
-                 85,
-                 255,
-                 127,
-                 85,
-                 85,
-                 127,
-                 84,
-                 85,
-                 85,
-                 85,
-                 85,
-                 85,
-                 255,
-         }},
-        {104 | (10 << 9),
-         {
-                 255,
-                 255,
-                 255,
-                 255,
-                 87,
-                 85,
-                 255,
-                 127,
-                 85,
-                 85,
-                 127,
-                 85,
-                 85,
-                 81,
-                 85,
-                 85,
-                 85,
-                 255,
-         }},
-        {106 | (10 << 9),
-         {
-                 255,
-                 255,
-                 255,
-                 255,
-                 87,
-                 85,
-                 255,
-                 127,
-                 85,
-                 85,
-                 127,
-                 85,
-                 81,
-                 85,
-                 85,
-                 85,
-                 85,
-                 255,
-         }},
-        {107 | (10 << 9),
-         {
-                 255,
-                 255,
-                 255,
-                 255,
-                 87,
-                 85,
-                 255,
-                 127,
-                 85,
-                 85,
-                 127,
-                 85,
-                 81,
-                 85,
-                 85,
-                 85,
-                 85,
-                 255,
-         }},
-        {108 | (10 << 9),
-         {
-                 255,
-                 255,
-                 255,
-                 255,
-                 87,
-                 85,
-                 255,
-                 127,
-                 85,
-                 85,
-                 127,
-                 85,
-                 84,
-                 85,
-                 85,
-                 85,
-                 85,
-                 255,
-         }},
-        {109 | (10 << 9),
-         {
-                 255,
-                 255,
-                 255,
-                 255,
-                 87,
-                 85,
-                 255,
-                 127,
-                 85,
-                 85,
-                 127,
-                 85,
-                 85,
-                 85,
                  21,
                  85,
                  85,
                  255,
          }},
+        {100 | (10 << 9),
+         {
+                 255,
+                 255,
+                 255,
+                 255,
+                 87,
+                 85,
+                 255,
+                 127,
+                 85,
+                 85,
+                 127,
+                 85,
+                 85,
+                 84,
+                 85,
+                 85,
+                 85,
+                 255,
+         }},
+        {101 | (10 << 9),
+         {
+                 255,
+                 255,
+                 255,
+                 255,
+                 87,
+                 85,
+                 255,
+                 127,
+                 85,
+                 85,
+                 127,
+                 81,
+                 85,
+                 85,
+                 85,
+                 85,
+                 85,
+                 255,
+         }},
+        {102 | (10 << 9),
+         {
+                 255,
+                 255,
+                 255,
+                 255,
+                 87,
+                 85,
+                 255,
+                 127,
+                 85,
+                 85,
+                 127,
+                 85,
+                 85,
+                 85,
+                 85,
+                 69,
+                 85,
+                 255,
+         }},
+        {103 | (10 << 9),
+         {
+                 255,
+                 255,
+                 255,
+                 255,
+                 87,
+                 85,
+                 255,
+                 127,
+                 85,
+                 85,
+                 127,
+                 85,
+                 85,
+                 85,
+                 85,
+                 81,
+                 85,
+                 255,
+         }},
+        {96 | (10 << 9),
+         {
+                 255,
+                 255,
+                 255,
+                 255,
+                 87,
+                 85,
+                 255,
+                 127,
+                 85,
+                 85,
+                 127,
+                 85,
+                 84,
+                 85,
+                 85,
+                 85,
+                 85,
+                 255,
+         }},
+        {109 | (105 << 9) | (10 << 18),
+         {
+                 255,
+                 255,
+                 255,
+                 255,
+                 171,
+                 170,
+                 255,
+                 191,
+                 170,
+                 170,
+                 191,
+                 170,
+                 170,
+                 170,
+                 106,
+                 138,
+                 170,
+                 255,
+         }},
+        {106 | (10 << 9),
+         {
+                 255,
+                 255,
+                 255,
+                 255,
+                 87,
+                 85,
+                 255,
+                 127,
+                 85,
+                 85,
+                 127,
+                 85,
+                 84,
+                 85,
+                 85,
+                 85,
+                 85,
+                 255,
+         }},
+        {107 | (10 << 9),
+         {
+                 255,
+                 255,
+                 255,
+                 255,
+                 87,
+                 85,
+                 255,
+                 127,
+                 85,
+                 85,
+                 127,
+                 84,
+                 85,
+                 85,
+                 85,
+                 85,
+                 85,
+                 255,
+         }},
+        {108 | (10 << 9),
+         {
+                 255,
+                 255,
+                 255,
+                 255,
+                 87,
+                 85,
+                 255,
+                 127,
+                 85,
+                 85,
+                 127,
+                 85,
+                 85,
+                 81,
+                 85,
+                 85,
+                 85,
+                 255,
+         }},
+        {110 | (10 << 9),
+         {
+                 255,
+                 255,
+                 255,
+                 255,
+                 87,
+                 85,
+                 255,
+                 127,
+                 85,
+                 85,
+                 127,
+                 85,
+                 81,
+                 85,
+                 85,
+                 85,
+                 85,
+                 255,
+         }},
+        {111 | (10 << 9),
+         {
+                 255,
+                 255,
+                 255,
+                 255,
+                 87,
+                 85,
+                 255,
+                 127,
+                 85,
+                 85,
+                 127,
+                 85,
+                 81,
+                 85,
+                 85,
+                 85,
+                 85,
+                 255,
+         }},
         {112 | (10 << 9),
          {
                  255,
@@ -1428,35 +1449,14 @@
                  85,
                  127,
                  85,
-                 85,
-                 85,
-                 85,
                  84,
                  85,
+                 85,
+                 85,
+                 85,
                  255,
          }},
-        {113 | (92 << 9) | (10 << 18),
-         {
-                 255,
-                 255,
-                 255,
-                 255,
-                 171,
-                 170,
-                 255,
-                 191,
-                 170,
-                 170,
-                 191,
-                 170,
-                 168,
-                 170,
-                 170,
-                 166,
-                 170,
-                 255,
-         }},
-        {115 | (10 << 9),
+        {113 | (10 << 9),
          {
                  255,
                  255,
@@ -1469,10 +1469,10 @@
                  85,
                  85,
                  127,
-                 84,
                  85,
                  85,
                  85,
+                 21,
                  85,
                  85,
                  255,
@@ -1498,7 +1498,49 @@
                  85,
                  255,
          }},
-        {92 | (10 << 9),
+        {117 | (96 << 9) | (10 << 18),
+         {
+                 255,
+                 255,
+                 255,
+                 255,
+                 171,
+                 170,
+                 255,
+                 191,
+                 170,
+                 170,
+                 191,
+                 170,
+                 168,
+                 170,
+                 170,
+                 166,
+                 170,
+                 255,
+         }},
+        {119 | (10 << 9),
+         {
+                 255,
+                 255,
+                 255,
+                 255,
+                 87,
+                 85,
+                 255,
+                 127,
+                 85,
+                 85,
+                 127,
+                 84,
+                 85,
+                 85,
+                 85,
+                 85,
+                 85,
+                 255,
+         }},
+        {120 | (10 << 9),
          {
                  255,
                  255,
@@ -1519,7 +1561,28 @@
                  85,
                  255,
          }},
-        {118 | (10 << 9),
+        {96 | (10 << 9),
+         {
+                 255,
+                 255,
+                 255,
+                 255,
+                 87,
+                 85,
+                 255,
+                 127,
+                 85,
+                 85,
+                 127,
+                 85,
+                 85,
+                 85,
+                 85,
+                 84,
+                 85,
+                 255,
+         }},
+        {122 | (10 << 9),
          {
                  255,
                  255,
@@ -1540,7 +1603,7 @@
                  85,
                  255,
          }},
-        {121 | (119 << 9) | (10 << 18),
+        {125 | (123 << 9) | (10 << 18),
          {
                  255,
                  255,
@@ -1561,7 +1624,7 @@
                  170,
                  255,
          }},
-        {120 | (10 << 9),
+        {124 | (10 << 9),
          {
                  255,
                  255,
@@ -1582,7 +1645,7 @@
                  85,
                  255,
          }},
-        {122 | (10 << 9),
+        {126 | (10 << 9),
          {
                  255,
                  255,
@@ -1603,7 +1666,7 @@
                  85,
                  255,
          }},
-        {123 | (10 << 9),
+        {127 | (10 << 9),
          {
                  255,
                  255,
@@ -1624,48 +1687,6 @@
                  85,
                  255,
          }},
-        {124 | (10 << 9),
-         {
-                 255,
-                 255,
-                 255,
-                 255,
-                 87,
-                 85,
-                 255,
-                 127,
-                 85,
-                 85,
-                 127,
-                 85,
-                 85,
-                 85,
-                 85,
-                 69,
-                 85,
-                 255,
-         }},
-        {125 | (10 << 9),
-         {
-                 255,
-                 255,
-                 255,
-                 255,
-                 87,
-                 85,
-                 255,
-                 127,
-                 85,
-                 85,
-                 127,
-                 85,
-                 84,
-                 85,
-                 85,
-                 85,
-                 85,
-                 255,
-         }},
         {128 | (10 << 9),
          {
                  255,
@@ -1680,10 +1701,10 @@
                  85,
                  127,
                  85,
-                 81,
                  85,
                  85,
                  85,
+                 69,
                  85,
                  255,
          }},
@@ -1700,54 +1721,12 @@
                  85,
                  85,
                  127,
+                 85,
                  84,
                  85,
                  85,
                  85,
                  85,
-                 85,
-                 255,
-         }},
-        {130 | (10 << 9),
-         {
-                 255,
-                 255,
-                 255,
-                 255,
-                 87,
-                 85,
-                 255,
-                 127,
-                 85,
-                 85,
-                 127,
-                 85,
-                 85,
-                 85,
-                 85,
-                 69,
-                 85,
-                 255,
-         }},
-        {131 | (10 << 9),
-         {
-                 255,
-                 255,
-                 255,
-                 255,
-                 87,
-                 85,
-                 255,
-                 127,
-                 85,
-                 85,
-                 127,
-                 85,
-                 85,
-                 69,
-                 85,
-                 85,
-                 85,
                  255,
          }},
         {132 | (10 << 9),
@@ -1764,11 +1743,32 @@
                  85,
                  127,
                  85,
-                 85,
-                 85,
-                 85,
                  81,
                  85,
+                 85,
+                 85,
+                 85,
+                 255,
+         }},
+        {133 | (10 << 9),
+         {
+                 255,
+                 255,
+                 255,
+                 255,
+                 87,
+                 85,
+                 255,
+                 127,
+                 85,
+                 85,
+                 127,
+                 84,
+                 85,
+                 85,
+                 85,
+                 85,
+                 85,
                  255,
          }},
         {134 | (10 << 9),
@@ -1788,7 +1788,7 @@
                  85,
                  85,
                  85,
-                 84,
+                 69,
                  85,
                  255,
          }},
@@ -1805,12 +1805,12 @@
                  85,
                  85,
                  127,
+                 85,
+                 85,
                  69,
                  85,
                  85,
                  85,
-                 85,
-                 85,
                  255,
          }},
         {136 | (10 << 9),
@@ -1826,32 +1826,11 @@
                  85,
                  85,
                  127,
-                 84,
                  85,
                  85,
                  85,
                  85,
-                 85,
-                 255,
-         }},
-        {137 | (10 << 9),
-         {
-                 255,
-                 255,
-                 255,
-                 255,
-                 87,
-                 85,
-                 255,
-                 127,
-                 85,
-                 85,
-                 127,
-                 85,
-                 85,
-                 85,
-                 21,
-                 85,
+                 81,
                  85,
                  255,
          }},
@@ -1868,7 +1847,28 @@
                  85,
                  85,
                  127,
-                 21,
+                 85,
+                 85,
+                 85,
+                 85,
+                 84,
+                 85,
+                 255,
+         }},
+        {139 | (10 << 9),
+         {
+                 255,
+                 255,
+                 255,
+                 255,
+                 87,
+                 85,
+                 255,
+                 127,
+                 85,
+                 85,
+                 127,
+                 69,
                  85,
                  85,
                  85,
@@ -1889,6 +1889,69 @@
                  85,
                  85,
                  127,
+                 84,
+                 85,
+                 85,
+                 85,
+                 85,
+                 85,
+                 255,
+         }},
+        {141 | (10 << 9),
+         {
+                 255,
+                 255,
+                 255,
+                 255,
+                 87,
+                 85,
+                 255,
+                 127,
+                 85,
+                 85,
+                 127,
+                 85,
+                 85,
+                 85,
+                 21,
+                 85,
+                 85,
+                 255,
+         }},
+        {142 | (10 << 9),
+         {
+                 255,
+                 255,
+                 255,
+                 255,
+                 87,
+                 85,
+                 255,
+                 127,
+                 85,
+                 85,
+                 127,
+                 21,
+                 85,
+                 85,
+                 85,
+                 85,
+                 85,
+                 255,
+         }},
+        {144 | (10 << 9),
+         {
+                 255,
+                 255,
+                 255,
+                 255,
+                 87,
+                 85,
+                 255,
+                 127,
+                 85,
+                 85,
+                 127,
                  85,
                  85,
                  85,
@@ -1897,7 +1960,7 @@
                  85,
                  255,
          }},
-        {141 | (10 << 9),
+        {145 | (10 << 9),
          {
                  255,
                  255,
@@ -1918,7 +1981,7 @@
                  85,
                  255,
          }},
-        {142 | (10 << 9),
+        {146 | (10 << 9),
          {
                  255,
                  255,
@@ -1939,7 +2002,7 @@
                  85,
                  255,
          }},
-        {144 | (10 << 9),
+        {148 | (10 << 9),
          {
                  255,
                  255,
@@ -1960,7 +2023,7 @@
                  85,
                  255,
          }},
-        {145 | (10 << 9),
+        {149 | (10 << 9),
          {
                  255,
                  255,
@@ -1981,7 +2044,7 @@
                  85,
                  255,
          }},
-        {92 | (10 << 9),
+        {96 | (10 << 9),
          {
                  255,
                  255,
@@ -2002,7 +2065,7 @@
                  85,
                  255,
          }},
-        {148 | (10 << 9),
+        {152 | (10 << 9),
          {
                  255,
                  255,
@@ -2023,48 +2086,6 @@
                  85,
                  255,
          }},
-        {149 | (10 << 9),
-         {
-                 255,
-                 255,
-                 255,
-                 255,
-                 87,
-                 85,
-                 255,
-                 127,
-                 85,
-                 85,
-                 127,
-                 85,
-                 84,
-                 85,
-                 85,
-                 85,
-                 85,
-                 255,
-         }},
-        {151 | (10 << 9),
-         {
-                 255,
-                 255,
-                 255,
-                 255,
-                 87,
-                 85,
-                 255,
-                 127,
-                 85,
-                 85,
-                 127,
-                 85,
-                 85,
-                 85,
-                 85,
-                 69,
-                 85,
-                 255,
-         }},
         {153 | (10 << 9),
          {
                  255,
@@ -2079,27 +2100,6 @@
                  85,
                  127,
                  85,
-                 85,
-                 85,
-                 85,
-                 81,
-                 85,
-                 255,
-         }},
-        {154 | (10 << 9),
-         {
-                 255,
-                 255,
-                 255,
-                 255,
-                 87,
-                 85,
-                 255,
-                 127,
-                 85,
-                 85,
-                 127,
-                 85,
                  84,
                  85,
                  85,
@@ -2123,29 +2123,8 @@
                  85,
                  85,
                  85,
-                 21,
                  85,
-                 85,
-                 255,
-         }},
-        {156 | (10 << 9),
-         {
-                 255,
-                 255,
-                 255,
-                 255,
-                 87,
-                 85,
-                 255,
-                 127,
-                 85,
-                 85,
-                 127,
-                 85,
-                 85,
-                 85,
-                 84,
-                 85,
+                 69,
                  85,
                  255,
          }},
@@ -2162,15 +2141,36 @@
                  85,
                  85,
                  127,
-                 84,
                  85,
                  85,
                  85,
                  85,
+                 81,
+                 85,
+                 255,
+         }},
+        {158 | (10 << 9),
+         {
+                 255,
+                 255,
+                 255,
+                 255,
+                 87,
+                 85,
+                 255,
+                 127,
+                 85,
+                 85,
+                 127,
+                 85,
+                 84,
+                 85,
+                 85,
+                 85,
                  85,
                  255,
          }},
-        {92 | (10 << 9),
+        {159 | (10 << 9),
          {
                  255,
                  255,
@@ -2185,8 +2185,8 @@
                  127,
                  85,
                  85,
-                 69,
                  85,
+                 21,
                  85,
                  85,
                  255,
@@ -2206,8 +2206,8 @@
                  127,
                  85,
                  85,
-                 69,
                  85,
+                 84,
                  85,
                  85,
                  255,
@@ -2225,15 +2225,15 @@
                  85,
                  85,
                  127,
-                 85,
-                 85,
-                 85,
-                 85,
                  84,
                  85,
+                 85,
+                 85,
+                 85,
+                 85,
                  255,
          }},
-        {162 | (10 << 9),
+        {96 | (10 << 9),
          {
                  255,
                  255,
@@ -2247,8 +2247,8 @@
                  85,
                  127,
                  85,
-                 84,
                  85,
+                 69,
                  85,
                  85,
                  85,
@@ -2269,10 +2269,10 @@
                  127,
                  85,
                  85,
+                 69,
                  85,
                  85,
                  85,
-                 81,
                  255,
          }},
         {165 | (10 << 9),
@@ -2289,14 +2289,14 @@
                  85,
                  127,
                  85,
+                 85,
+                 85,
+                 85,
                  84,
                  85,
-                 85,
-                 85,
-                 85,
                  255,
          }},
-        {92 | (10 << 9),
+        {166 | (10 << 9),
          {
                  255,
                  255,
@@ -2309,33 +2309,12 @@
                  85,
                  85,
                  127,
-                 21,
                  85,
-                 85,
-                 85,
-                 85,
-                 85,
-                 255,
-         }},
-        {167 | (10 << 9),
-         {
-                 255,
-                 255,
-                 255,
-                 255,
-                 87,
-                 85,
-                 255,
-                 127,
-                 85,
-                 85,
-                 127,
                  84,
                  85,
                  85,
                  85,
                  85,
-                 85,
                  255,
          }},
         {168 | (10 << 9),
@@ -2355,32 +2334,11 @@
                  85,
                  85,
                  85,
+                 85,
                  81,
-                 85,
                  255,
          }},
-        {170 | (10 << 9),
-         {
-                 255,
-                 255,
-                 255,
-                 255,
-                 87,
-                 85,
-                 255,
-                 127,
-                 85,
-                 85,
-                 127,
-                 85,
-                 85,
-                 85,
-                 21,
-                 85,
-                 85,
-                 255,
-         }},
-        {172 | (10 << 9),
+        {169 | (10 << 9),
          {
                  255,
                  255,
@@ -2401,7 +2359,112 @@
                  85,
                  255,
          }},
-        {173 | (10 << 9),
+        {96 | (10 << 9),
+         {
+                 255,
+                 255,
+                 255,
+                 255,
+                 87,
+                 85,
+                 255,
+                 127,
+                 85,
+                 85,
+                 127,
+                 21,
+                 85,
+                 85,
+                 85,
+                 85,
+                 85,
+                 255,
+         }},
+        {171 | (10 << 9),
+         {
+                 255,
+                 255,
+                 255,
+                 255,
+                 87,
+                 85,
+                 255,
+                 127,
+                 85,
+                 85,
+                 127,
+                 84,
+                 85,
+                 85,
+                 85,
+                 85,
+                 85,
+                 255,
+         }},
+        {172 | (10 << 9),
+         {
+                 255,
+                 255,
+                 255,
+                 255,
+                 87,
+                 85,
+                 255,
+                 127,
+                 85,
+                 85,
+                 127,
+                 85,
+                 85,
+                 85,
+                 85,
+                 81,
+                 85,
+                 255,
+         }},
+        {174 | (10 << 9),
+         {
+                 255,
+                 255,
+                 255,
+                 255,
+                 87,
+                 85,
+                 255,
+                 127,
+                 85,
+                 85,
+                 127,
+                 85,
+                 85,
+                 85,
+                 21,
+                 85,
+                 85,
+                 255,
+         }},
+        {176 | (10 << 9),
+         {
+                 255,
+                 255,
+                 255,
+                 255,
+                 87,
+                 85,
+                 255,
+                 127,
+                 85,
+                 85,
+                 127,
+                 85,
+                 84,
+                 85,
+                 85,
+                 85,
+                 85,
+                 255,
+         }},
+        {177 | (10 << 9),
          {
                  255,
                  255,
@@ -2422,7 +2485,7 @@
                  85,
                  255,
          }},
-        {177 | (175 << 9) | (10 << 18),
+        {181 | (179 << 9) | (10 << 18),
          {
                  255,
                  255,
@@ -2443,7 +2506,7 @@
                  170,
                  255,
          }},
-        {176 | (10 << 9),
+        {180 | (10 << 9),
          {
                  255,
                  255,
@@ -2464,7 +2527,7 @@
                  85,
                  255,
          }},
-        {176,
+        {180,
          {
                  255,
                  255,
@@ -2485,7 +2548,7 @@
                  0,
                  255,
          }},
-        {178 | (10 << 9),
+        {182 | (10 << 9),
          {
                  255,
                  255,
@@ -2506,7 +2569,7 @@
                  85,
                  255,
          }},
-        {92 | (10 << 9),
+        {96 | (10 << 9),
          {
                  255,
                  255,
@@ -2527,7 +2590,7 @@
                  85,
                  255,
          }},
-        {184 | (180 << 9) | (10 << 18),
+        {188 | (184 << 9) | (10 << 18),
          {
                  255,
                  255,
@@ -2548,7 +2611,7 @@
                  170,
                  255,
          }},
-        {181 | (10 << 9),
+        {185 | (10 << 9),
          {
                  255,
                  255,
@@ -2569,7 +2632,7 @@
                  85,
                  255,
          }},
-        {182 | (10 << 9),
+        {186 | (10 << 9),
          {
                  255,
                  255,
@@ -2590,7 +2653,7 @@
                  85,
                  255,
          }},
-        {183 | (10 << 9),
+        {187 | (10 << 9),
          {
                  255,
                  255,
@@ -2611,7 +2674,7 @@
                  85,
                  255,
          }},
-        {185 | (10 << 9),
+        {189 | (10 << 9),
          {
                  255,
                  255,
@@ -2632,7 +2695,7 @@
                  85,
                  255,
          }},
-        {186 | (10 << 9),
+        {190 | (10 << 9),
          {
                  255,
                  255,
@@ -2653,7 +2716,7 @@
                  85,
                  255,
          }},
-        {189 | (188 << 9) | (10 << 18),
+        {193 | (192 << 9) | (10 << 18),
          {
                  255,
                  255,
@@ -2674,69 +2737,6 @@
                  170,
                  255,
          }},
-        {191 | (10 << 9),
-         {
-                 255,
-                 255,
-                 255,
-                 255,
-                 87,
-                 85,
-                 255,
-                 127,
-                 85,
-                 85,
-                 127,
-                 85,
-                 85,
-                 84,
-                 85,
-                 85,
-                 85,
-                 255,
-         }},
-        {192 | (10 << 9),
-         {
-                 255,
-                 255,
-                 255,
-                 255,
-                 87,
-                 85,
-                 255,
-                 127,
-                 85,
-                 85,
-                 127,
-                 85,
-                 85,
-                 85,
-                 84,
-                 85,
-                 85,
-                 255,
-         }},
-        {193 | (10 << 9),
-         {
-                 255,
-                 255,
-                 255,
-                 255,
-                 87,
-                 85,
-                 255,
-                 127,
-                 85,
-                 85,
-                 127,
-                 85,
-                 84,
-                 85,
-                 85,
-                 85,
-                 85,
-                 255,
-         }},
         {195 | (10 << 9),
          {
                  255,
@@ -2752,9 +2752,9 @@
                  127,
                  85,
                  85,
+                 84,
                  85,
                  85,
-                 69,
                  85,
                  255,
          }},
@@ -2774,54 +2774,12 @@
                  85,
                  85,
                  85,
+                 84,
                  85,
-                 81,
                  85,
                  255,
          }},
-        {198 | (10 << 9),
-         {
-                 255,
-                 255,
-                 255,
-                 255,
-                 87,
-                 85,
-                 255,
-                 127,
-                 85,
-                 85,
-                 127,
-                 85,
-                 85,
-                 85,
-                 85,
-                 69,
-                 85,
-                 255,
-         }},
-        {92 | (10 << 9),
-         {
-                 255,
-                 255,
-                 255,
-                 255,
-                 87,
-                 85,
-                 255,
-                 127,
-                 85,
-                 85,
-                 127,
-                 85,
-                 85,
-                 85,
-                 85,
-                 81,
-                 85,
-                 255,
-         }},
-        {200 | (10 << 9),
+        {197 | (10 << 9),
          {
                  255,
                  255,
@@ -2842,7 +2800,112 @@
                  85,
                  255,
          }},
-        {201 | (10 << 9),
+        {199 | (10 << 9),
+         {
+                 255,
+                 255,
+                 255,
+                 255,
+                 87,
+                 85,
+                 255,
+                 127,
+                 85,
+                 85,
+                 127,
+                 85,
+                 85,
+                 85,
+                 85,
+                 69,
+                 85,
+                 255,
+         }},
+        {200 | (10 << 9),
+         {
+                 255,
+                 255,
+                 255,
+                 255,
+                 87,
+                 85,
+                 255,
+                 127,
+                 85,
+                 85,
+                 127,
+                 85,
+                 85,
+                 85,
+                 85,
+                 81,
+                 85,
+                 255,
+         }},
+        {202 | (10 << 9),
+         {
+                 255,
+                 255,
+                 255,
+                 255,
+                 87,
+                 85,
+                 255,
+                 127,
+                 85,
+                 85,
+                 127,
+                 85,
+                 85,
+                 85,
+                 85,
+                 69,
+                 85,
+                 255,
+         }},
+        {96 | (10 << 9),
+         {
+                 255,
+                 255,
+                 255,
+                 255,
+                 87,
+                 85,
+                 255,
+                 127,
+                 85,
+                 85,
+                 127,
+                 85,
+                 85,
+                 85,
+                 85,
+                 81,
+                 85,
+                 255,
+         }},
+        {204 | (10 << 9),
+         {
+                 255,
+                 255,
+                 255,
+                 255,
+                 87,
+                 85,
+                 255,
+                 127,
+                 85,
+                 85,
+                 127,
+                 85,
+                 84,
+                 85,
+                 85,
+                 85,
+                 85,
+                 255,
+         }},
+        {205 | (10 << 9),
          {
                  255,
                  255,
@@ -2863,7 +2926,7 @@
                  85,
                  255,
          }},
-        {202 | (10 << 9),
+        {206 | (10 << 9),
          {
                  255,
                  255,
@@ -2884,69 +2947,6 @@
                  85,
                  255,
          }},
-        {203 | (10 << 9),
-         {
-                 255,
-                 255,
-                 255,
-                 255,
-                 87,
-                 85,
-                 255,
-                 127,
-                 85,
-                 85,
-                 127,
-                 84,
-                 85,
-                 85,
-                 85,
-                 85,
-                 85,
-                 255,
-         }},
-        {204 | (10 << 9),
-         {
-                 255,
-                 255,
-                 255,
-                 255,
-                 87,
-                 85,
-                 255,
-                 127,
-                 85,
-                 85,
-                 127,
-                 69,
-                 85,
-                 85,
-                 85,
-                 85,
-                 85,
-                 255,
-         }},
-        {206 | (10 << 9),
-         {
-                 255,
-                 255,
-                 255,
-                 255,
-                 87,
-                 85,
-                 255,
-                 127,
-                 85,
-                 85,
-                 127,
-                 84,
-                 85,
-                 85,
-                 85,
-                 85,
-                 85,
-                 255,
-         }},
         {207 | (10 << 9),
          {
                  255,
@@ -2960,10 +2960,10 @@
                  85,
                  85,
                  127,
+                 84,
                  85,
                  85,
                  85,
-                 21,
                  85,
                  85,
                  255,
@@ -2981,28 +2981,7 @@
                  85,
                  85,
                  127,
-                 85,
-                 85,
-                 84,
-                 85,
-                 85,
-                 85,
-                 255,
-         }},
-        {209 | (10 << 9),
-         {
-                 255,
-                 255,
-                 255,
-                 255,
-                 87,
-                 85,
-                 255,
-                 127,
-                 85,
-                 85,
-                 127,
-                 84,
+                 69,
                  85,
                  85,
                  85,
@@ -3023,6 +3002,90 @@
                  85,
                  85,
                  127,
+                 84,
+                 85,
+                 85,
+                 85,
+                 85,
+                 85,
+                 255,
+         }},
+        {211 | (10 << 9),
+         {
+                 255,
+                 255,
+                 255,
+                 255,
+                 87,
+                 85,
+                 255,
+                 127,
+                 85,
+                 85,
+                 127,
+                 85,
+                 85,
+                 85,
+                 21,
+                 85,
+                 85,
+                 255,
+         }},
+        {212 | (10 << 9),
+         {
+                 255,
+                 255,
+                 255,
+                 255,
+                 87,
+                 85,
+                 255,
+                 127,
+                 85,
+                 85,
+                 127,
+                 85,
+                 85,
+                 84,
+                 85,
+                 85,
+                 85,
+                 255,
+         }},
+        {213 | (10 << 9),
+         {
+                 255,
+                 255,
+                 255,
+                 255,
+                 87,
+                 85,
+                 255,
+                 127,
+                 85,
+                 85,
+                 127,
+                 84,
+                 85,
+                 85,
+                 85,
+                 85,
+                 85,
+                 255,
+         }},
+        {214 | (10 << 9),
+         {
+                 255,
+                 255,
+                 255,
+                 255,
+                 87,
+                 85,
+                 255,
+                 127,
+                 85,
+                 85,
+                 127,
                  85,
                  85,
                  85,
@@ -3031,7 +3094,7 @@
                  85,
                  255,
          }},
-        {217 | (212 << 9) | (10 << 18),
+        {221 | (216 << 9) | (10 << 18),
          {
                  255,
                  255,
@@ -3052,7 +3115,7 @@
                  170,
                  255,
          }},
-        {213 | (10 << 9),
+        {217 | (10 << 9),
          {
                  255,
                  255,
@@ -3073,7 +3136,7 @@
                  69,
                  255,
          }},
-        {214 | (10 << 9),
+        {218 | (10 << 9),
          {
                  255,
                  255,
@@ -3094,7 +3157,7 @@
                  85,
                  255,
          }},
-        {215 | (10 << 9),
+        {219 | (10 << 9),
          {
                  255,
                  255,
@@ -3115,7 +3178,7 @@
                  85,
                  255,
          }},
-        {216 | (10 << 9),
+        {220 | (10 << 9),
          {
                  255,
                  255,
@@ -3136,7 +3199,7 @@
                  85,
                  255,
          }},
-        {219 | (218 << 9) | (10 << 18),
+        {223 | (222 << 9) | (10 << 18),
          {
                  255,
                  255,
@@ -3157,7 +3220,7 @@
                  168,
                  255,
          }},
-        {92 | (10 << 9),
+        {96 | (10 << 9),
          {
                  255,
                  255,
@@ -3178,69 +3241,6 @@
                  85,
                  255,
          }},
-        {220 | (10 << 9),
-         {
-                 255,
-                 255,
-                 255,
-                 255,
-                 87,
-                 85,
-                 255,
-                 127,
-                 85,
-                 85,
-                 127,
-                 85,
-                 85,
-                 85,
-                 69,
-                 85,
-                 85,
-                 255,
-         }},
-        {222 | (10 << 9),
-         {
-                 255,
-                 255,
-                 255,
-                 255,
-                 87,
-                 85,
-                 255,
-                 127,
-                 85,
-                 85,
-                 127,
-                 85,
-                 84,
-                 85,
-                 85,
-                 85,
-                 85,
-                 255,
-         }},
-        {223 | (10 << 9),
-         {
-                 255,
-                 255,
-                 255,
-                 255,
-                 87,
-                 85,
-                 255,
-                 127,
-                 85,
-                 85,
-                 127,
-                 21,
-                 85,
-                 85,
-                 85,
-                 85,
-                 85,
-                 255,
-         }},
         {224 | (10 << 9),
          {
                  255,
@@ -3256,31 +3256,10 @@
                  127,
                  85,
                  85,
-                 84,
-                 85,
-                 85,
-                 85,
-                 255,
-         }},
-        {225 | (10 << 9),
-         {
-                 255,
-                 255,
-                 255,
-                 255,
-                 87,
-                 85,
-                 255,
-                 127,
-                 85,
-                 85,
-                 127,
-                 85,
-                 85,
-                 85,
                  85,
                  69,
                  85,
+                 85,
                  255,
          }},
         {226 | (10 << 9),
@@ -3297,8 +3276,8 @@
                  85,
                  127,
                  85,
+                 84,
                  85,
-                 21,
                  85,
                  85,
                  85,
@@ -3317,33 +3296,54 @@
                  85,
                  85,
                  127,
+                 21,
                  85,
                  85,
                  85,
-                 69,
                  85,
                  85,
                  255,
          }},
-        {236 | (229 << 9) | (10 << 18),
+        {228 | (10 << 9),
          {
                  255,
                  255,
                  255,
                  255,
-                 171,
-                 170,
+                 87,
+                 85,
                  255,
-                 191,
-                 170,
-                 170,
-                 191,
-                 169,
-                 170,
-                 170,
-                 162,
-                 170,
-                 170,
+                 127,
+                 85,
+                 85,
+                 127,
+                 85,
+                 85,
+                 84,
+                 85,
+                 85,
+                 85,
+                 255,
+         }},
+        {229 | (10 << 9),
+         {
+                 255,
+                 255,
+                 255,
+                 255,
+                 87,
+                 85,
+                 255,
+                 127,
+                 85,
+                 85,
+                 127,
+                 85,
+                 85,
+                 85,
+                 85,
+                 69,
+                 85,
                  255,
          }},
         {230 | (10 << 9),
@@ -3381,48 +3381,6 @@
                  85,
                  127,
                  85,
-                 84,
-                 85,
-                 85,
-                 85,
-                 85,
-                 255,
-         }},
-        {232 | (10 << 9),
-         {
-                 255,
-                 255,
-                 255,
-                 255,
-                 87,
-                 85,
-                 255,
-                 127,
-                 85,
-                 85,
-                 127,
-                 85,
-                 85,
-                 85,
-                 85,
-                 84,
-                 85,
-                 255,
-         }},
-        {233 | (10 << 9),
-         {
-                 255,
-                 255,
-                 255,
-                 255,
-                 87,
-                 85,
-                 255,
-                 127,
-                 85,
-                 85,
-                 127,
-                 85,
                  85,
                  85,
                  69,
@@ -3430,6 +3388,27 @@
                  85,
                  255,
          }},
+        {240 | (233 << 9) | (10 << 18),
+         {
+                 255,
+                 255,
+                 255,
+                 255,
+                 171,
+                 170,
+                 255,
+                 191,
+                 170,
+                 170,
+                 191,
+                 169,
+                 170,
+                 170,
+                 162,
+                 170,
+                 170,
+                 255,
+         }},
         {234 | (10 << 9),
          {
                  255,
@@ -3443,9 +3422,9 @@
                  85,
                  85,
                  127,
-                 84,
                  85,
                  85,
+                 21,
                  85,
                  85,
                  85,
@@ -3464,6 +3443,90 @@
                  85,
                  85,
                  127,
+                 85,
+                 84,
+                 85,
+                 85,
+                 85,
+                 85,
+                 255,
+         }},
+        {236 | (10 << 9),
+         {
+                 255,
+                 255,
+                 255,
+                 255,
+                 87,
+                 85,
+                 255,
+                 127,
+                 85,
+                 85,
+                 127,
+                 85,
+                 85,
+                 85,
+                 85,
+                 84,
+                 85,
+                 255,
+         }},
+        {237 | (10 << 9),
+         {
+                 255,
+                 255,
+                 255,
+                 255,
+                 87,
+                 85,
+                 255,
+                 127,
+                 85,
+                 85,
+                 127,
+                 85,
+                 85,
+                 85,
+                 69,
+                 85,
+                 85,
+                 255,
+         }},
+        {238 | (10 << 9),
+         {
+                 255,
+                 255,
+                 255,
+                 255,
+                 87,
+                 85,
+                 255,
+                 127,
+                 85,
+                 85,
+                 127,
+                 84,
+                 85,
+                 85,
+                 85,
+                 85,
+                 85,
+                 255,
+         }},
+        {239 | (10 << 9),
+         {
+                 255,
+                 255,
+                 255,
+                 255,
+                 87,
+                 85,
+                 255,
+                 127,
+                 85,
+                 85,
+                 127,
                  69,
                  85,
                  85,
@@ -3472,7 +3535,7 @@
                  85,
                  255,
          }},
-        {243 | (237 << 9) | (10 << 18),
+        {247 | (241 << 9) | (10 << 18),
          {
                  255,
                  255,
@@ -3493,7 +3556,7 @@
                  170,
                  255,
          }},
-        {238 | (10 << 9),
+        {242 | (10 << 9),
          {
                  255,
                  255,
@@ -3514,7 +3577,7 @@
                  85,
                  255,
          }},
-        {239 | (10 << 9),
+        {243 | (10 << 9),
          {
                  255,
                  255,
@@ -3535,69 +3598,6 @@
                  85,
                  255,
          }},
-        {240 | (10 << 9),
-         {
-                 255,
-                 255,
-                 255,
-                 255,
-                 87,
-                 85,
-                 255,
-                 127,
-                 85,
-                 85,
-                 127,
-                 85,
-                 85,
-                 84,
-                 85,
-                 85,
-                 85,
-                 255,
-         }},
-        {241 | (10 << 9),
-         {
-                 255,
-                 255,
-                 255,
-                 255,
-                 87,
-                 85,
-                 255,
-                 127,
-                 85,
-                 85,
-                 127,
-                 85,
-                 85,
-                 85,
-                 84,
-                 85,
-                 85,
-                 255,
-         }},
-        {242 | (10 << 9),
-         {
-                 255,
-                 255,
-                 255,
-                 255,
-                 87,
-                 85,
-                 255,
-                 127,
-                 85,
-                 85,
-                 127,
-                 85,
-                 84,
-                 85,
-                 85,
-                 85,
-                 85,
-                 255,
-         }},
         {244 | (10 << 9),
          {
                  255,
@@ -3612,8 +3612,8 @@
                  85,
                  127,
                  85,
-                 84,
                  85,
+                 84,
                  85,
                  85,
                  85,
@@ -3635,7 +3635,7 @@
                  85,
                  85,
                  85,
-                 21,
+                 84,
                  85,
                  85,
                  255,
@@ -3654,30 +3654,9 @@
                  85,
                  127,
                  85,
-                 85,
-                 85,
-                 85,
                  84,
                  85,
-                 255,
-         }},
-        {247 | (10 << 9),
-         {
-                 255,
-                 255,
-                 255,
-                 255,
-                 87,
                  85,
-                 255,
-                 127,
-                 85,
-                 85,
-                 127,
-                 85,
-                 85,
-                 85,
-                 69,
                  85,
                  85,
                  255,
@@ -3716,10 +3695,10 @@
                  85,
                  85,
                  127,
-                 69,
                  85,
                  85,
                  85,
+                 21,
                  85,
                  85,
                  255,
@@ -3741,7 +3720,7 @@
                  85,
                  85,
                  85,
-                 81,
+                 84,
                  85,
                  255,
          }},
@@ -3760,8 +3739,8 @@
                  127,
                  85,
                  85,
-                 84,
                  85,
+                 69,
                  85,
                  85,
                  255,
@@ -3780,10 +3759,10 @@
                  85,
                  127,
                  85,
+                 84,
                  85,
                  85,
                  85,
-                 21,
                  85,
                  255,
          }},
@@ -3800,12 +3779,33 @@
                  85,
                  85,
                  127,
-                 85,
-                 84,
+                 69,
                  85,
                  85,
                  85,
                  85,
+                 85,
+                 255,
+         }},
+        {254 | (10 << 9),
+         {
+                 255,
+                 255,
+                 255,
+                 255,
+                 87,
+                 85,
+                 255,
+                 127,
+                 85,
+                 85,
+                 127,
+                 85,
+                 85,
+                 85,
+                 85,
+                 81,
+                 85,
                  255,
          }},
         {255 | (10 << 9),
@@ -3823,9 +3823,9 @@
                  127,
                  85,
                  85,
+                 84,
                  85,
                  85,
-                 69,
                  85,
                  255,
          }},
@@ -3846,7 +3846,7 @@
                  85,
                  85,
                  85,
-                 81,
+                 21,
                  85,
                  255,
          }},
@@ -3864,14 +3864,14 @@
                  85,
                  127,
                  85,
+                 84,
                  85,
                  85,
-                 69,
                  85,
                  85,
                  255,
          }},
-        {258 | (10 << 9),
+        {259 | (10 << 9),
          {
                  255,
                  255,
@@ -3892,6 +3892,27 @@
                  85,
                  255,
          }},
+        {260 | (10 << 9),
+         {
+                 255,
+                 255,
+                 255,
+                 255,
+                 87,
+                 85,
+                 255,
+                 127,
+                 85,
+                 85,
+                 127,
+                 85,
+                 85,
+                 85,
+                 85,
+                 81,
+                 85,
+                 255,
+         }},
         {261 | (10 << 9),
          {
                  255,
@@ -3905,12 +3926,12 @@
                  85,
                  85,
                  127,
+                 85,
+                 85,
+                 85,
                  69,
                  85,
                  85,
-                 85,
-                 85,
-                 85,
                  255,
          }},
         {262 | (10 << 9),
@@ -3928,30 +3949,9 @@
                  127,
                  85,
                  85,
-                 81,
                  85,
                  85,
-                 85,
-                 255,
-         }},
-        {263 | (10 << 9),
-         {
-                 255,
-                 255,
-                 255,
-                 255,
-                 87,
-                 85,
-                 255,
-                 127,
-                 85,
-                 85,
-                 127,
-                 85,
-                 84,
-                 85,
-                 85,
-                 85,
+                 69,
                  85,
                  255,
          }},
@@ -3968,8 +3968,8 @@
                  85,
                  85,
                  127,
+                 69,
                  85,
-                 84,
                  85,
                  85,
                  85,
@@ -3989,9 +3989,9 @@
                  85,
                  85,
                  127,
-                 69,
                  85,
                  85,
+                 81,
                  85,
                  85,
                  85,
@@ -4011,31 +4011,10 @@
                  85,
                  127,
                  85,
-                 85,
                  84,
                  85,
                  85,
                  85,
-                 255,
-         }},
-        {268 | (10 << 9),
-         {
-                 255,
-                 255,
-                 255,
-                 255,
-                 87,
-                 85,
-                 255,
-                 127,
-                 85,
-                 85,
-                 127,
-                 85,
-                 85,
-                 85,
-                 85,
-                 84,
                  85,
                  255,
          }},
@@ -4053,11 +4032,11 @@
                  85,
                  127,
                  85,
-                 85,
                  84,
                  85,
                  85,
                  85,
+                 85,
                  255,
          }},
         {270 | (10 << 9),
@@ -4073,15 +4052,15 @@
                  85,
                  85,
                  127,
+                 69,
                  85,
                  85,
                  85,
-                 81,
                  85,
                  85,
                  255,
          }},
-        {92 | (10 << 9),
+        {271 | (10 << 9),
          {
                  255,
                  255,
@@ -4096,10 +4075,10 @@
                  127,
                  85,
                  85,
-                 85,
                  84,
                  85,
                  85,
+                 85,
                  255,
          }},
         {272 | (10 << 9),
@@ -4115,11 +4094,11 @@
                  85,
                  85,
                  127,
-                 81,
                  85,
                  85,
                  85,
                  85,
+                 84,
                  85,
                  255,
          }},
@@ -4138,7 +4117,7 @@
                  127,
                  85,
                  85,
-                 69,
+                 84,
                  85,
                  85,
                  85,
@@ -4159,13 +4138,97 @@
                  127,
                  85,
                  85,
+                 85,
+                 81,
+                 85,
+                 85,
+                 255,
+         }},
+        {96 | (10 << 9),
+         {
+                 255,
+                 255,
+                 255,
+                 255,
+                 87,
+                 85,
+                 255,
+                 127,
+                 85,
+                 85,
+                 127,
+                 85,
+                 85,
+                 85,
+                 84,
+                 85,
+                 85,
+                 255,
+         }},
+        {276 | (10 << 9),
+         {
+                 255,
+                 255,
+                 255,
+                 255,
+                 87,
+                 85,
+                 255,
+                 127,
+                 85,
+                 85,
+                 127,
+                 81,
+                 85,
+                 85,
+                 85,
+                 85,
+                 85,
+                 255,
+         }},
+        {277 | (10 << 9),
+         {
+                 255,
+                 255,
+                 255,
+                 255,
+                 87,
+                 85,
+                 255,
+                 127,
+                 85,
+                 85,
+                 127,
+                 85,
+                 85,
+                 69,
+                 85,
+                 85,
+                 85,
+                 255,
+         }},
+        {278 | (10 << 9),
+         {
+                 255,
+                 255,
+                 255,
+                 255,
+                 87,
+                 85,
+                 255,
+                 127,
+                 85,
+                 85,
+                 127,
+                 85,
+                 85,
                  84,
                  85,
                  85,
                  85,
                  255,
          }},
-        {92 | (10 << 9),
+        {96 | (10 << 9),
          {
                  255,
                  255,
@@ -4186,7 +4249,7 @@
                  85,
                  255,
          }},
-        {276 | (10 << 9),
+        {280 | (10 << 9),
          {
                  255,
                  255,
@@ -4207,7 +4270,7 @@
                  85,
                  255,
          }},
-        {283 | (277 << 9) | (10 << 18),
+        {287 | (281 << 9) | (10 << 18),
          {
                  255,
                  255,
@@ -4228,7 +4291,7 @@
                  170,
                  255,
          }},
-        {278 | (10 << 9),
+        {282 | (10 << 9),
          {
                  255,
                  255,
@@ -4249,7 +4312,7 @@
                  85,
                  255,
          }},
-        {279 | (10 << 9),
+        {283 | (10 << 9),
          {
                  255,
                  255,
@@ -4270,7 +4333,7 @@
                  85,
                  255,
          }},
-        {280 | (10 << 9),
+        {284 | (10 << 9),
          {
                  255,
                  255,
@@ -4291,69 +4354,6 @@
                  85,
                  255,
          }},
-        {281 | (10 << 9),
-         {
-                 255,
-                 255,
-                 255,
-                 255,
-                 87,
-                 85,
-                 255,
-                 127,
-                 85,
-                 85,
-                 127,
-                 85,
-                 85,
-                 69,
-                 85,
-                 85,
-                 85,
-                 255,
-         }},
-        {282 | (10 << 9),
-         {
-                 255,
-                 255,
-                 255,
-                 255,
-                 87,
-                 85,
-                 255,
-                 127,
-                 85,
-                 85,
-                 127,
-                 85,
-                 85,
-                 85,
-                 85,
-                 85,
-                 69,
-                 255,
-         }},
-        {284 | (10 << 9),
-         {
-                 255,
-                 255,
-                 255,
-                 255,
-                 87,
-                 85,
-                 255,
-                 127,
-                 85,
-                 85,
-                 127,
-                 85,
-                 85,
-                 85,
-                 85,
-                 69,
-                 85,
-                 255,
-         }},
         {285 | (10 << 9),
          {
                  255,
@@ -4369,8 +4369,8 @@
                  127,
                  85,
                  85,
+                 69,
                  85,
-                 21,
                  85,
                  85,
                  255,
@@ -4391,9 +4391,30 @@
                  85,
                  85,
                  85,
-                 84,
                  85,
                  85,
+                 69,
+                 255,
+         }},
+        {288 | (10 << 9),
+         {
+                 255,
+                 255,
+                 255,
+                 255,
+                 87,
+                 85,
+                 255,
+                 127,
+                 85,
+                 85,
+                 127,
+                 85,
+                 85,
+                 85,
+                 85,
+                 69,
+                 85,
                  255,
          }},
         {289 | (10 << 9),
@@ -4411,8 +4432,8 @@
                  127,
                  85,
                  85,
-                 21,
                  85,
+                 21,
                  85,
                  85,
                  255,
@@ -4433,51 +4454,9 @@
                  85,
                  85,
                  85,
-                 69,
-                 85,
-                 85,
-                 255,
-         }},
-        {291 | (10 << 9),
-         {
-                 255,
-                 255,
-                 255,
-                 255,
-                 87,
-                 85,
-                 255,
-                 127,
-                 85,
-                 85,
-                 127,
-                 85,
-                 85,
-                 69,
-                 85,
-                 85,
-                 85,
-                 255,
-         }},
-        {292 | (10 << 9),
-         {
-                 255,
-                 255,
-                 255,
-                 255,
-                 87,
-                 85,
-                 255,
-                 127,
-                 85,
-                 85,
-                 127,
-                 85,
                  84,
                  85,
                  85,
-                 85,
-                 85,
                  255,
          }},
         {293 | (10 << 9),
@@ -4495,10 +4474,31 @@
                  127,
                  85,
                  85,
-                 85,
                  21,
                  85,
                  85,
+                 85,
+                 255,
+         }},
+        {294 | (10 << 9),
+         {
+                 255,
+                 255,
+                 255,
+                 255,
+                 87,
+                 85,
+                 255,
+                 127,
+                 85,
+                 85,
+                 127,
+                 85,
+                 85,
+                 85,
+                 69,
+                 85,
+                 85,
                  255,
          }},
         {295 | (10 << 9),
@@ -4511,12 +4511,12 @@
                  85,
                  255,
                  127,
-                 81,
+                 85,
                  85,
                  127,
                  85,
                  85,
-                 85,
+                 69,
                  85,
                  85,
                  85,
@@ -4533,10 +4533,10 @@
                  255,
                  127,
                  85,
-                 81,
+                 85,
                  127,
                  85,
-                 85,
+                 84,
                  85,
                  85,
                  85,
@@ -4557,32 +4557,11 @@
                  85,
                  127,
                  85,
+                 85,
+                 85,
                  21,
                  85,
                  85,
-                 85,
-                 85,
-                 255,
-         }},
-        {298 | (10 << 9),
-         {
-                 255,
-                 255,
-                 255,
-                 255,
-                 87,
-                 85,
-                 255,
-                 127,
-                 85,
-                 85,
-                 127,
-                 84,
-                 85,
-                 85,
-                 85,
-                 85,
-                 85,
                  255,
          }},
         {299 | (10 << 9),
@@ -4595,10 +4574,10 @@
                  85,
                  255,
                  127,
-                 85,
+                 81,
                  85,
                  127,
-                 21,
+                 85,
                  85,
                  85,
                  85,
@@ -4617,6 +4596,90 @@
                  255,
                  127,
                  85,
+                 81,
+                 127,
+                 85,
+                 85,
+                 85,
+                 85,
+                 85,
+                 85,
+                 255,
+         }},
+        {301 | (10 << 9),
+         {
+                 255,
+                 255,
+                 255,
+                 255,
+                 87,
+                 85,
+                 255,
+                 127,
+                 85,
+                 85,
+                 127,
+                 85,
+                 21,
+                 85,
+                 85,
+                 85,
+                 85,
+                 255,
+         }},
+        {302 | (10 << 9),
+         {
+                 255,
+                 255,
+                 255,
+                 255,
+                 87,
+                 85,
+                 255,
+                 127,
+                 85,
+                 85,
+                 127,
+                 84,
+                 85,
+                 85,
+                 85,
+                 85,
+                 85,
+                 255,
+         }},
+        {303 | (10 << 9),
+         {
+                 255,
+                 255,
+                 255,
+                 255,
+                 87,
+                 85,
+                 255,
+                 127,
+                 85,
+                 85,
+                 127,
+                 21,
+                 85,
+                 85,
+                 85,
+                 85,
+                 85,
+                 255,
+         }},
+        {304 | (10 << 9),
+         {
+                 255,
+                 255,
+                 255,
+                 255,
+                 87,
+                 85,
+                 255,
+                 127,
+                 85,
                  85,
                  127,
                  85,
@@ -4627,7 +4690,7 @@
                  85,
                  255,
          }},
-        {92 | (10 << 9),
+        {96 | (10 << 9),
          {
                  255,
                  255,
@@ -4648,7 +4711,7 @@
                  84,
                  255,
          }},
-        {302 | (10 << 9),
+        {306 | (10 << 9),
          {
                  255,
                  255,
@@ -4669,7 +4732,7 @@
                  85,
                  255,
          }},
-        {303 | (296 << 9) | (10 << 18),
+        {307 | (300 << 9) | (10 << 18),
          {
                  255,
                  255,
@@ -4690,7 +4753,7 @@
                  170,
                  255,
          }},
-        {304 | (10 << 9),
+        {308 | (10 << 9),
          {
                  255,
                  255,
@@ -4711,7 +4774,7 @@
                  85,
                  255,
          }},
-        {305 | (10 << 9),
+        {309 | (10 << 9),
          {
                  255,
                  255,
@@ -4732,90 +4795,6 @@
                  85,
                  255,
          }},
-        {306 | (10 << 9),
-         {
-                 255,
-                 255,
-                 255,
-                 255,
-                 87,
-                 85,
-                 255,
-                 127,
-                 85,
-                 85,
-                 127,
-                 85,
-                 85,
-                 85,
-                 85,
-                 81,
-                 85,
-                 255,
-         }},
-        {307 | (10 << 9),
-         {
-                 255,
-                 255,
-                 255,
-                 255,
-                 87,
-                 85,
-                 255,
-                 127,
-                 85,
-                 81,
-                 127,
-                 85,
-                 85,
-                 85,
-                 85,
-                 85,
-                 85,
-                 255,
-         }},
-        {308 | (10 << 9),
-         {
-                 255,
-                 255,
-                 255,
-                 255,
-                 87,
-                 85,
-                 255,
-                 127,
-                 85,
-                 85,
-                 127,
-                 85,
-                 21,
-                 85,
-                 85,
-                 85,
-                 85,
-                 255,
-         }},
-        {309 | (10 << 9),
-         {
-                 255,
-                 255,
-                 255,
-                 255,
-                 87,
-                 85,
-                 255,
-                 127,
-                 85,
-                 85,
-                 127,
-                 84,
-                 85,
-                 85,
-                 85,
-                 85,
-                 85,
-                 255,
-         }},
         {310 | (10 << 9),
          {
                  255,
@@ -4829,11 +4808,11 @@
                  85,
                  85,
                  127,
-                 21,
                  85,
                  85,
                  85,
                  85,
+                 81,
                  85,
                  255,
          }},
@@ -4848,12 +4827,33 @@
                  255,
                  127,
                  85,
-                 85,
+                 81,
                  127,
                  85,
                  85,
                  85,
-                 81,
+                 85,
+                 85,
+                 85,
+                 255,
+         }},
+        {312 | (10 << 9),
+         {
+                 255,
+                 255,
+                 255,
+                 255,
+                 87,
+                 85,
+                 255,
+                 127,
+                 85,
+                 85,
+                 127,
+                 85,
+                 21,
+                 85,
+                 85,
                  85,
                  85,
                  255,
@@ -4868,10 +4868,10 @@
                  85,
                  255,
                  127,
-                 81,
+                 85,
                  85,
                  127,
-                 85,
+                 84,
                  85,
                  85,
                  85,
@@ -4890,9 +4890,9 @@
                  255,
                  127,
                  85,
-                 84,
-                 127,
                  85,
+                 127,
+                 21,
                  85,
                  85,
                  85,
@@ -4914,14 +4914,14 @@
                  85,
                  127,
                  85,
-                 84,
                  85,
                  85,
+                 81,
                  85,
                  85,
                  255,
          }},
-        {316 | (10 << 9),
+        {317 | (10 << 9),
          {
                  255,
                  255,
@@ -4931,10 +4931,10 @@
                  85,
                  255,
                  127,
-                 85,
+                 81,
                  85,
                  127,
-                 69,
+                 85,
                  85,
                  85,
                  85,
@@ -4953,59 +4953,17 @@
                  255,
                  127,
                  85,
-                 85,
+                 84,
                  127,
                  85,
                  85,
                  85,
                  85,
-                 69,
-                 85,
-                 255,
-         }},
-        {319 | (10 << 9),
-         {
-                 255,
-                 255,
-                 255,
-                 255,
-                 87,
-                 85,
-                 255,
-                 127,
-                 85,
-                 85,
-                 127,
-                 81,
-                 85,
-                 85,
-                 85,
                  85,
                  85,
                  255,
          }},
-        {321 | (10 << 9),
-         {
-                 255,
-                 255,
-                 255,
-                 255,
-                 87,
-                 85,
-                 255,
-                 127,
-                 85,
-                 85,
-                 127,
-                 85,
-                 85,
-                 85,
-                 85,
-                 85,
-                 21,
-                 255,
-         }},
-        {322 | (10 << 9),
+        {319 | (10 << 9),
          {
                  255,
                  255,
@@ -5026,6 +4984,48 @@
                  85,
                  255,
          }},
+        {320 | (10 << 9),
+         {
+                 255,
+                 255,
+                 255,
+                 255,
+                 87,
+                 85,
+                 255,
+                 127,
+                 85,
+                 85,
+                 127,
+                 69,
+                 85,
+                 85,
+                 85,
+                 85,
+                 85,
+                 255,
+         }},
+        {322 | (10 << 9),
+         {
+                 255,
+                 255,
+                 255,
+                 255,
+                 87,
+                 85,
+                 255,
+                 127,
+                 85,
+                 85,
+                 127,
+                 85,
+                 85,
+                 85,
+                 85,
+                 69,
+                 85,
+                 255,
+         }},
         {323 | (10 << 9),
          {
                  255,
@@ -5039,30 +5039,9 @@
                  85,
                  85,
                  127,
-                 85,
-                 85,
-                 85,
                  81,
                  85,
                  85,
-                 255,
-         }},
-        {92 | (10 << 9),
-         {
-                 255,
-                 255,
-                 255,
-                 255,
-                 87,
-                 85,
-                 255,
-                 127,
-                 85,
-                 85,
-                 127,
-                 85,
-                 81,
-                 85,
                  85,
                  85,
                  85,
@@ -5080,13 +5059,13 @@
                  127,
                  85,
                  85,
-                 63,
+                 127,
                  85,
                  85,
                  85,
                  85,
                  85,
-                 85,
+                 21,
                  255,
          }},
         {326 | (10 << 9),
@@ -5103,7 +5082,7 @@
                  85,
                  127,
                  85,
-                 21,
+                 84,
                  85,
                  85,
                  85,
@@ -5123,15 +5102,15 @@
                  85,
                  85,
                  127,
-                 84,
                  85,
                  85,
                  85,
+                 81,
                  85,
                  85,
                  255,
          }},
-        {328 | (10 << 9),
+        {96 | (10 << 9),
          {
                  255,
                  255,
@@ -5145,32 +5124,32 @@
                  85,
                  127,
                  85,
+                 81,
                  85,
                  85,
                  85,
-                 84,
                  85,
                  255,
          }},
-        {329 | (10 << 9),
+        {332 | (329 << 9) | (10 << 18),
          {
                  255,
                  255,
                  255,
                  255,
-                 87,
-                 85,
+                 171,
+                 170,
                  255,
-                 127,
-                 85,
-                 85,
-                 63,
-                 85,
-                 85,
-                 85,
-                 85,
-                 85,
-                 85,
+                 191,
+                 170,
+                 170,
+                 191,
+                 169,
+                 170,
+                 170,
+                 42,
+                 170,
+                 170,
                  255,
          }},
         {330 | (10 << 9),
@@ -5190,7 +5169,7 @@
                  85,
                  85,
                  85,
-                 84,
+                 81,
                  85,
                  255,
          }},
@@ -5215,27 +5194,6 @@
                  85,
                  255,
          }},
-        {332 | (10 << 9),
-         {
-                 255,
-                 255,
-                 255,
-                 255,
-                 87,
-                 85,
-                 255,
-                 127,
-                 85,
-                 85,
-                 127,
-                 21,
-                 85,
-                 85,
-                 85,
-                 85,
-                 85,
-                 255,
-         }},
         {333 | (10 << 9),
          {
                  255,
@@ -5250,10 +5208,10 @@
                  85,
                  127,
                  85,
-                 84,
                  85,
                  85,
                  85,
+                 69,
                  85,
                  255,
          }},
@@ -5269,8 +5227,8 @@
                  127,
                  85,
                  85,
-                 63,
-                 85,
+                 127,
+                 69,
                  85,
                  85,
                  85,
@@ -5292,32 +5250,11 @@
                  85,
                  127,
                  85,
-                 84,
                  85,
                  85,
                  85,
-                 85,
-                 255,
-         }},
-        {336 | (10 << 9),
-         {
-                 255,
-                 255,
-                 255,
-                 255,
-                 87,
-                 85,
-                 255,
-                 127,
-                 85,
-                 85,
-                 127,
-                 85,
                  81,
                  85,
-                 85,
-                 85,
-                 85,
                  255,
          }},
         {337 | (10 << 9),
@@ -5334,9 +5271,9 @@
                  85,
                  127,
                  85,
-                 81,
                  85,
                  85,
+                 69,
                  85,
                  85,
                  255,
@@ -5375,15 +5312,15 @@
                  85,
                  85,
                  127,
-                 69,
                  85,
                  85,
                  85,
+                 21,
                  85,
                  85,
                  255,
          }},
-        {340 | (10 << 9),
+        {96 | (10 << 9),
          {
                  255,
                  255,
@@ -5399,8 +5336,8 @@
                  85,
                  85,
                  85,
+                 69,
                  85,
-                 81,
                  85,
                  255,
          }},
@@ -5419,34 +5356,13 @@
                  127,
                  85,
                  85,
-                 85,
-                 85,
                  84,
                  85,
+                 85,
+                 85,
                  255,
          }},
-        {346 | (343 << 9) | (10 << 18),
-         {
-                 255,
-                 255,
-                 255,
-                 255,
-                 171,
-                 170,
-                 255,
-                 191,
-                 170,
-                 170,
-                 191,
-                 169,
-                 170,
-                 170,
-                 42,
-                 170,
-                 170,
-                 255,
-         }},
-        {344 | (10 << 9),
+        {342 | (10 << 9),
          {
                  255,
                  255,
@@ -5467,7 +5383,28 @@
                  85,
                  255,
          }},
-        {345 | (10 << 9),
+        {343 | (10 << 9),
+         {
+                 255,
+                 255,
+                 255,
+                 255,
+                 87,
+                 85,
+                 255,
+                 127,
+                 85,
+                 85,
+                 127,
+                 69,
+                 85,
+                 85,
+                 85,
+                 85,
+                 85,
+                 255,
+         }},
+        {344 | (10 << 9),
          {
                  255,
                  255,
@@ -5481,8 +5418,8 @@
                  85,
                  127,
                  85,
+                 21,
                  85,
-                 84,
                  85,
                  85,
                  85,
@@ -5503,9 +5440,9 @@
                  127,
                  85,
                  85,
+                 21,
                  85,
                  85,
-                 69,
                  85,
                  255,
          }},
@@ -5522,12 +5459,12 @@
                  85,
                  85,
                  127,
+                 85,
+                 85,
+                 85,
                  69,
                  85,
                  85,
-                 85,
-                 85,
-                 85,
                  255,
          }},
         {349 | (10 << 9),
@@ -5545,9 +5482,30 @@
                  127,
                  85,
                  85,
+                 69,
                  85,
                  85,
-                 81,
+                 85,
+                 255,
+         }},
+        {350 | (10 << 9),
+         {
+                 255,
+                 255,
+                 255,
+                 255,
+                 87,
+                 85,
+                 255,
+                 127,
+                 85,
+                 85,
+                 127,
+                 84,
+                 85,
+                 85,
+                 85,
+                 85,
                  85,
                  255,
          }},
@@ -5567,72 +5525,30 @@
                  85,
                  85,
                  85,
-                 69,
                  85,
+                 81,
                  85,
                  255,
          }},
-        {352 | (10 << 9),
+        {354 | (353 << 9) | (10 << 18),
          {
                  255,
                  255,
                  255,
                  255,
-                 87,
-                 85,
+                 171,
+                 170,
                  255,
-                 127,
-                 85,
-                 85,
-                 127,
-                 85,
-                 84,
-                 85,
-                 85,
-                 85,
-                 85,
-                 255,
-         }},
-        {353 | (10 << 9),
-         {
-                 255,
-                 255,
-                 255,
-                 255,
-                 87,
-                 85,
-                 255,
-                 127,
-                 85,
-                 85,
-                 127,
-                 85,
-                 85,
-                 85,
-                 21,
-                 85,
-                 85,
-                 255,
-         }},
-        {92 | (10 << 9),
-         {
-                 255,
-                 255,
-                 255,
-                 255,
-                 87,
-                 85,
-                 255,
-                 127,
-                 85,
-                 85,
-                 127,
-                 85,
-                 85,
-                 85,
-                 69,
-                 85,
-                 85,
+                 191,
+                 170,
+                 170,
+                 191,
+                 170,
+                 170,
+                 169,
+                 42,
+                 170,
+                 170,
                  255,
          }},
         {355 | (10 << 9),
@@ -5649,11 +5565,11 @@
                  85,
                  127,
                  85,
-                 85,
                  84,
                  85,
                  85,
                  85,
+                 85,
                  255,
          }},
         {356 | (10 << 9),
@@ -5669,11 +5585,11 @@
                  85,
                  85,
                  127,
+                 84,
                  85,
                  85,
                  85,
                  85,
-                 81,
                  85,
                  255,
          }},
@@ -5690,7 +5606,7 @@
                  85,
                  85,
                  127,
-                 69,
+                 21,
                  85,
                  85,
                  85,
@@ -5712,9 +5628,51 @@
                  85,
                  127,
                  85,
+                 69,
+                 85,
+                 85,
+                 85,
+                 85,
+                 255,
+         }},
+        {359 | (10 << 9),
+         {
+                 255,
+                 255,
+                 255,
+                 255,
+                 87,
+                 85,
+                 255,
+                 127,
+                 85,
+                 85,
+                 127,
+                 85,
+                 85,
+                 85,
                  21,
                  85,
                  85,
+                 255,
+         }},
+        {360 | (10 << 9),
+         {
+                 255,
+                 255,
+                 255,
+                 255,
+                 87,
+                 85,
+                 255,
+                 127,
+                 85,
+                 85,
+                 127,
+                 85,
+                 85,
+                 85,
+                 81,
                  85,
                  85,
                  255,
@@ -5734,9 +5692,9 @@
                  127,
                  85,
                  85,
-                 21,
                  85,
                  85,
+                 69,
                  85,
                  255,
          }},
@@ -5761,27 +5719,6 @@
                  85,
                  255,
          }},
-        {363 | (10 << 9),
-         {
-                 255,
-                 255,
-                 255,
-                 255,
-                 87,
-                 85,
-                 255,
-                 127,
-                 85,
-                 85,
-                 127,
-                 85,
-                 85,
-                 69,
-                 85,
-                 85,
-                 85,
-                 255,
-         }},
         {364 | (10 << 9),
          {
                  255,
@@ -5795,11 +5732,11 @@
                  85,
                  85,
                  127,
-                 84,
                  85,
                  85,
                  85,
                  85,
+                 69,
                  85,
                  255,
          }},
@@ -5817,32 +5754,53 @@
                  85,
                  127,
                  85,
+                 84,
                  85,
                  85,
                  85,
-                 81,
                  85,
                  255,
          }},
-        {368 | (367 << 9) | (10 << 18),
+        {367 | (10 << 9),
          {
                  255,
                  255,
                  255,
                  255,
-                 171,
-                 170,
+                 87,
+                 85,
                  255,
-                 191,
-                 170,
-                 170,
-                 191,
-                 170,
-                 170,
-                 169,
-                 42,
-                 170,
-                 170,
+                 127,
+                 85,
+                 85,
+                 127,
+                 85,
+                 85,
+                 85,
+                 69,
+                 85,
+                 85,
+                 255,
+         }},
+        {368 | (10 << 9),
+         {
+                 255,
+                 255,
+                 255,
+                 255,
+                 87,
+                 85,
+                 255,
+                 127,
+                 85,
+                 85,
+                 127,
+                 85,
+                 84,
+                 85,
+                 85,
+                 85,
+                 85,
                  255,
          }},
         {369 | (10 << 9),
@@ -5858,8 +5816,8 @@
                  85,
                  85,
                  127,
+                 21,
                  85,
-                 84,
                  85,
                  85,
                  85,
@@ -5879,78 +5837,78 @@
                  85,
                  85,
                  127,
+                 85,
                  84,
                  85,
                  85,
                  85,
                  85,
-                 85,
                  255,
          }},
-        {371 | (10 << 9),
+        {384 | (372 << 9) | (10 << 18),
          {
                  255,
                  255,
                  255,
                  255,
-                 87,
-                 85,
+                 171,
+                 170,
                  255,
-                 127,
-                 85,
-                 85,
-                 127,
-                 21,
-                 85,
-                 85,
-                 85,
-                 85,
-                 85,
+                 191,
+                 170,
+                 170,
+                 191,
+                 170,
+                 170,
+                 170,
+                 169,
+                 168,
+                 170,
                  255,
          }},
-        {372 | (10 << 9),
+        {379 | (373 << 9) | (10 << 18),
          {
                  255,
                  255,
                  255,
                  255,
-                 87,
-                 85,
+                 171,
+                 170,
                  255,
-                 127,
-                 85,
-                 85,
-                 127,
-                 85,
-                 69,
-                 85,
-                 85,
-                 85,
-                 85,
+                 191,
+                 170,
+                 170,
+                 191,
+                 170,
+                 170,
+                 169,
+                 170,
+                 168,
+                 170,
                  255,
          }},
-        {373 | (10 << 9),
+        {378 | (374 << 9) | (10 << 18),
          {
                  255,
                  255,
                  255,
                  255,
-                 87,
-                 85,
+                 171,
+                 170,
                  255,
-                 127,
-                 85,
-                 85,
-                 127,
-                 85,
-                 85,
-                 85,
-                 21,
-                 85,
-                 85,
+                 191,
+                 170,
+                 170,
+                 191,
+                 170,
+                 166,
+                 170,
+                 162,
+                 170,
+                 170,
                  255,
          }},
-        {374 | (10 << 9),
+        {375 | (10 << 9),
          {
                  255,
                  255,
@@ -5971,27 +5929,6 @@
                  85,
                  255,
          }},
-        {375 | (10 << 9),
-         {
-                 255,
-                 255,
-                 255,
-                 255,
-                 87,
-                 85,
-                 255,
-                 127,
-                 85,
-                 85,
-                 127,
-                 85,
-                 85,
-                 85,
-                 85,
-                 69,
-                 85,
-                 255,
-         }},
         {376 | (10 << 9),
          {
                  255,
@@ -6008,12 +5945,12 @@
                  85,
                  85,
                  85,
-                 69,
+                 21,
                  85,
                  85,
                  255,
          }},
-        {378 | (10 << 9),
+        {377 | (10 << 9),
          {
                  255,
                  255,
@@ -6028,13 +5965,13 @@
                  127,
                  85,
                  85,
+                 21,
                  85,
                  85,
-                 69,
                  85,
                  255,
          }},
-        {379 | (10 << 9),
+        {380 | (10 << 9),
          {
                  255,
                  255,
@@ -6048,11 +5985,11 @@
                  85,
                  127,
                  85,
+                 85,
                  84,
                  85,
                  85,
                  85,
-                 85,
                  255,
          }},
         {381 | (10 << 9),
@@ -6069,11 +6006,11 @@
                  85,
                  127,
                  85,
-                 85,
-                 85,
                  69,
                  85,
                  85,
+                 85,
+                 85,
                  255,
          }},
         {382 | (10 << 9),
@@ -6090,11 +6027,11 @@
                  85,
                  127,
                  85,
+                 85,
+                 85,
                  84,
                  85,
                  85,
-                 85,
-                 85,
                  255,
          }},
         {383 | (10 << 9),
@@ -6110,15 +6047,15 @@
                  85,
                  85,
                  127,
-                 21,
                  85,
+                 84,
                  85,
                  85,
                  85,
                  85,
                  255,
          }},
-        {384 | (10 << 9),
+        {385 | (10 << 9),
          {
                  255,
                  255,
@@ -6132,14 +6069,35 @@
                  85,
                  127,
                  85,
+                 85,
                  84,
                  85,
                  85,
                  85,
+                 255,
+         }},
+        {386 | (10 << 9),
+         {
+                 255,
+                 255,
+                 255,
+                 255,
+                 87,
+                 85,
+                 255,
+                 127,
+                 85,
+                 85,
+                 127,
+                 85,
+                 85,
+                 85,
+                 84,
+                 85,
                  85,
                  255,
          }},
-        {398 | (386 << 9) | (10 << 18),
+        {393 | (388 << 9) | (10 << 18),
          {
                  255,
                  255,
@@ -6152,50 +6110,8 @@
                  170,
                  170,
                  191,
-                 170,
-                 170,
-                 170,
-                 169,
-                 168,
-                 170,
-                 255,
-         }},
-        {393 | (387 << 9) | (10 << 18),
-         {
-                 255,
-                 255,
-                 255,
-                 255,
-                 171,
-                 170,
-                 255,
-                 191,
-                 170,
-                 170,
-                 191,
-                 170,
-                 170,
                  169,
                  170,
-                 168,
-                 170,
-                 255,
-         }},
-        {392 | (388 << 9) | (10 << 18),
-         {
-                 255,
-                 255,
-                 255,
-                 255,
-                 171,
-                 170,
-                 255,
-                 191,
-                 170,
-                 170,
-                 191,
-                 170,
-                 166,
                  170,
                  162,
                  170,
@@ -6218,7 +6134,7 @@
                  85,
                  85,
                  85,
-                 81,
+                 21,
                  85,
                  85,
                  255,
@@ -6239,9 +6155,9 @@
                  85,
                  85,
                  85,
-                 21,
                  85,
                  85,
+                 69,
                  255,
          }},
         {391 | (10 << 9),
@@ -6259,34 +6175,13 @@
                  127,
                  85,
                  85,
-                 21,
-                 85,
-                 85,
-                 85,
-                 255,
-         }},
-        {394 | (10 << 9),
-         {
-                 255,
-                 255,
-                 255,
-                 255,
-                 87,
-                 85,
-                 255,
-                 127,
-                 85,
-                 85,
-                 127,
-                 85,
-                 85,
                  84,
                  85,
                  85,
                  85,
                  255,
          }},
-        {395 | (10 << 9),
+        {392 | (10 << 9),
          {
                  255,
                  255,
@@ -6300,10 +6195,52 @@
                  85,
                  127,
                  85,
+                 85,
+                 85,
+                 84,
+                 85,
+                 85,
+                 255,
+         }},
+        {394 | (10 << 9),
+         {
+                 255,
+                 255,
+                 255,
+                 255,
+                 87,
+                 85,
+                 255,
+                 127,
+                 85,
+                 85,
+                 127,
+                 85,
+                 85,
                  69,
                  85,
                  85,
                  85,
+                 255,
+         }},
+        {395 | (10 << 9),
+         {
+                 255,
+                 255,
+                 255,
+                 255,
+                 87,
+                 85,
+                 255,
+                 127,
+                 85,
+                 85,
+                 127,
+                 84,
+                 85,
+                 85,
+                 85,
+                 85,
                  85,
                  255,
          }},
@@ -6323,8 +6260,8 @@
                  85,
                  85,
                  85,
-                 84,
                  85,
+                 81,
                  85,
                  255,
          }},
@@ -6342,14 +6279,14 @@
                  85,
                  127,
                  85,
-                 84,
                  85,
+                 84,
                  85,
                  85,
                  85,
                  255,
          }},
-        {399 | (10 << 9),
+        {398 | (10 << 9),
          {
                  255,
                  255,
@@ -6364,34 +6301,13 @@
                  127,
                  85,
                  85,
-                 84,
+                 69,
                  85,
                  85,
                  85,
                  255,
          }},
-        {400 | (10 << 9),
-         {
-                 255,
-                 255,
-                 255,
-                 255,
-                 87,
-                 85,
-                 255,
-                 127,
-                 85,
-                 85,
-                 127,
-                 85,
-                 85,
-                 85,
-                 84,
-                 85,
-                 85,
-                 255,
-         }},
-        {407 | (402 << 9) | (10 << 18),
+        {404 | (400 << 9) | (10 << 18),
          {
                  255,
                  255,
@@ -6404,12 +6320,54 @@
                  170,
                  170,
                  191,
-                 169,
+                 170,
+                 106,
+                 170,
+                 42,
                  170,
                  170,
-                 162,
-                 170,
-                 170,
+                 255,
+         }},
+        {401 | (10 << 9),
+         {
+                 255,
+                 255,
+                 255,
+                 255,
+                 87,
+                 85,
+                 255,
+                 127,
+                 85,
+                 85,
+                 127,
+                 85,
+                 85,
+                 84,
+                 85,
+                 85,
+                 85,
+                 255,
+         }},
+        {402 | (10 << 9),
+         {
+                 255,
+                 255,
+                 255,
+                 255,
+                 87,
+                 85,
+                 255,
+                 127,
+                 85,
+                 85,
+                 127,
+                 85,
+                 85,
+                 69,
+                 85,
+                 85,
+                 85,
                  255,
          }},
         {403 | (10 << 9),
@@ -6426,32 +6384,11 @@
                  85,
                  127,
                  85,
-                 85,
-                 85,
-                 21,
-                 85,
-                 85,
-                 255,
-         }},
-        {404 | (10 << 9),
-         {
-                 255,
-                 255,
-                 255,
-                 255,
-                 87,
-                 85,
-                 255,
-                 127,
-                 85,
-                 85,
-                 127,
+                 84,
                  85,
                  85,
                  85,
                  85,
-                 85,
-                 69,
                  255,
          }},
         {405 | (10 << 9),
@@ -6491,9 +6428,30 @@
                  85,
                  85,
                  85,
+                 85,
+                 81,
+                 85,
+                 255,
+         }},
+        {407 | (10 << 9),
+         {
+                 255,
+                 255,
+                 255,
+                 255,
+                 87,
+                 85,
+                 255,
+                 127,
+                 85,
+                 85,
+                 127,
+                 85,
                  84,
                  85,
                  85,
+                 85,
+                 85,
                  255,
          }},
         {408 | (10 << 9),
@@ -6511,8 +6469,8 @@
                  127,
                  85,
                  85,
-                 69,
                  85,
+                 81,
                  85,
                  85,
                  255,
@@ -6530,12 +6488,12 @@
                  85,
                  85,
                  127,
+                 85,
+                 85,
+                 85,
                  84,
                  85,
                  85,
-                 85,
-                 85,
-                 85,
                  255,
          }},
         {410 | (10 << 9),
@@ -6553,9 +6511,9 @@
                  127,
                  85,
                  85,
+                 69,
                  85,
                  85,
-                 81,
                  85,
                  255,
          }},
@@ -6574,265 +6532,13 @@
                  127,
                  85,
                  85,
-                 84,
-                 85,
-                 85,
-                 85,
-                 255,
-         }},
-        {412 | (10 << 9),
-         {
-                 255,
-                 255,
-                 255,
-                 255,
-                 87,
-                 85,
-                 255,
-                 127,
-                 85,
-                 85,
-                 127,
-                 85,
-                 85,
-                 69,
-                 85,
-                 85,
-                 85,
-                 255,
-         }},
-        {418 | (414 << 9) | (10 << 18),
-         {
-                 255,
-                 255,
-                 255,
-                 255,
-                 171,
-                 170,
-                 255,
-                 191,
-                 170,
-                 170,
-                 191,
-                 170,
-                 106,
-                 170,
-                 42,
-                 170,
-                 170,
-                 255,
-         }},
-        {415 | (10 << 9),
-         {
-                 255,
-                 255,
-                 255,
-                 255,
-                 87,
-                 85,
-                 255,
-                 127,
-                 85,
-                 85,
-                 127,
-                 85,
-                 85,
-                 84,
-                 85,
-                 85,
-                 85,
-                 255,
-         }},
-        {416 | (10 << 9),
-         {
-                 255,
-                 255,
-                 255,
-                 255,
-                 87,
-                 85,
-                 255,
-                 127,
-                 85,
-                 85,
-                 127,
-                 85,
-                 85,
-                 69,
-                 85,
-                 85,
-                 85,
-                 255,
-         }},
-        {417 | (10 << 9),
-         {
-                 255,
-                 255,
-                 255,
-                 255,
-                 87,
-                 85,
-                 255,
-                 127,
-                 85,
-                 85,
-                 127,
-                 85,
-                 84,
-                 85,
-                 85,
-                 85,
-                 85,
-                 255,
-         }},
-        {419 | (10 << 9),
-         {
-                 255,
-                 255,
-                 255,
-                 255,
-                 87,
-                 85,
-                 255,
-                 127,
-                 85,
-                 85,
-                 127,
-                 85,
-                 85,
-                 84,
-                 85,
-                 85,
-                 85,
-                 255,
-         }},
-        {420 | (10 << 9),
-         {
-                 255,
-                 255,
-                 255,
-                 255,
-                 87,
-                 85,
-                 255,
-                 127,
-                 85,
-                 85,
-                 127,
-                 85,
-                 85,
-                 85,
-                 85,
-                 81,
-                 85,
-                 255,
-         }},
-        {421 | (10 << 9),
-         {
-                 255,
-                 255,
-                 255,
-                 255,
-                 87,
-                 85,
-                 255,
-                 127,
-                 85,
-                 85,
-                 127,
-                 85,
-                 84,
-                 85,
-                 85,
-                 85,
-                 85,
-                 255,
-         }},
-        {422 | (10 << 9),
-         {
-                 255,
-                 255,
-                 255,
-                 255,
-                 87,
-                 85,
-                 255,
-                 127,
-                 85,
-                 85,
-                 127,
-                 85,
-                 85,
-                 85,
-                 81,
-                 85,
-                 85,
-                 255,
-         }},
-        {423 | (10 << 9),
-         {
-                 255,
-                 255,
-                 255,
-                 255,
-                 87,
-                 85,
-                 255,
-                 127,
-                 85,
-                 85,
-                 127,
-                 85,
-                 85,
-                 85,
-                 84,
-                 85,
-                 85,
-                 255,
-         }},
-        {424 | (10 << 9),
-         {
-                 255,
-                 255,
-                 255,
-                 255,
-                 87,
-                 85,
-                 255,
-                 127,
-                 85,
-                 85,
-                 127,
-                 85,
-                 85,
-                 69,
-                 85,
-                 85,
-                 85,
-                 255,
-         }},
-        {425 | (10 << 9),
-         {
-                 255,
-                 255,
-                 255,
-                 255,
-                 87,
-                 85,
-                 255,
-                 127,
-                 85,
-                 85,
-                 127,
-                 85,
-                 85,
                  85,
                  85,
                  85,
                  69,
                  255,
          }},
-        {429 | (428 << 9),
+        {415 | (414 << 9),
          {
                  255,
                  255,
@@ -6855,30 +6561,30 @@
          }},
 };
 static constexpr IndexEntry kIndices[] = {
-        0,   -1,  1,   1,   0,   2,   0,   3,   4,   5,   6,   7,   8,   6,   9,   0,   10,  0,
-        0,   0,   0,   11,  0,   12,  0,   0,   0,   13,  0,   0,   14,  15,  16,  17,  17,  18,
-        19,  20,  0,   21,  0,   -2,  22,  23,  24,  25,  25,  26,  27,  27,  -3,  -4,  28,  29,
-        29,  0,   0,   0,   30,  31,  -5,  -5,  0,   0,   32,  33,  0,   0,   34,  0,   35,  0,
-        36,  0,   0,   37,  38,  0,   39,  40,  41,  42,  43,  0,   6,   0,   0,   44,  0,   0,
-        45,  46,  6,   47,  48,  49,  50,  51,  52,  53,  54,  55,  56,  57,  6,   58,  59,  60,
-        61,  6,   -6,  62,  63,  6,   64,  65,  66,  67,  68,  69,  6,   70,  71,  72,  73,  6,
-        -7,  74,  75,  76,  77,  78,  6,   79,  80,  81,  82,  83,  6,   84,  85,  86,  53,  87,
-        88,  89,  -8,  90,  91,  6,   92,  46,  93,  94,  95,  96,  97,  98,  -9,  99,  100, 101,
-        6,   102, 103, 104, 105, 106, 6,   107, 6,   108, 109, 89,  110, 111, 112, 113, 114, 115,
-        116, 117, 118, 6,   119, 120, 89,  121, 6,   -10, 122, 123, 124, 6,   125, 126, 6,   127,
-        128, 129, 130, 131, 132, 133, 53,  134, 135, 136, 137, 138, 128, 139, 140, 141, 142, 143,
-        6,   144, 145, 146, 6,   147, 148, 149, 150, 151, 152, 6,   153, 154, 155, 156, 157, 158,
-        159, 53,  160, 161, 162, 163, 164, 165, 6,   166, 167, 168, 169, 170, 171, 172, 173, 174,
-        175, 6,   176, 177, 178, 179, 128, -11, 180, 181, 182, 104, 183, 184, 185, 186, 187, 188,
-        189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 6,   201, 202, 203, 6,   -12,
-        204, 205, 206, 207, 208, -13, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220,
-        221, 222, 223, 224, 225, 215, 226, 227, 228, 229, 128, 230, 231, 53,  232, 233, 234, 235,
-        236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 6,
-        253, 254, 255, 193, 256, 257, 258, 6,   259, 260, 261, 262, 263, 264, 265, 266, 6,   -14,
-        267, 268, 269, 270, 271, 53,  272, 66,  273, 274, 275, 276, 277, 278, 279, 280, 6,   281,
-        282, 6,   283, 284, 285, 286, 235, 287, 288, 289, 290, 291, 292, 6,   189, 293, 294, 295,
-        296, 104, 297, 298, 145, 299, 300, 301, 302, 303, 145, 304, 305, 306, 307, 308, 53,  309,
-        310, 311, 312, 6,   313, 314, 315, 316, 317, 318, 319, 6,   0,   320, 0,   0,   0,   0,
+        0,   -1,  1,   1,   0,   2,   0,   3,   4,   5,   6,   7,   8,   6,   9,   10,  11,  6,
+        12,  0,   13,  0,   0,   0,   0,   14,  0,   15,  0,   0,   0,   16,  0,   0,   17,  18,
+        19,  20,  20,  21,  22,  23,  0,   24,  0,   -2,  25,  26,  27,  28,  28,  29,  30,  30,
+        -3,  -4,  31,  32,  32,  0,   0,   0,   33,  34,  -5,  -5,  0,   0,   35,  36,  0,   0,
+        37,  0,   38,  0,   39,  0,   0,   40,  41,  0,   42,  43,  44,  45,  46,  0,   6,   0,
+        0,   47,  0,   0,   48,  49,  6,   50,  51,  52,  53,  54,  55,  56,  57,  58,  59,  60,
+        6,   61,  62,  63,  64,  6,   -6,  65,  66,  6,   67,  68,  69,  70,  71,  72,  6,   73,
+        74,  75,  76,  6,   -7,  77,  78,  79,  80,  81,  6,   82,  83,  84,  85,  86,  6,   87,
+        88,  89,  56,  90,  91,  92,  -8,  93,  94,  6,   95,  49,  96,  97,  98,  99,  100, 101,
+        -9,  102, 103, 104, 6,   105, 106, 107, 108, 109, 6,   110, 6,   111, 112, 92,  113, 114,
+        115, 116, 117, 118, 119, 120, 121, 6,   122, 123, 92,  124, 6,   -10, 125, 126, 127, 6,
+        128, 129, 6,   130, 131, 132, 133, 134, 135, 136, 56,  137, 138, 139, 140, 141, 131, 142,
+        143, 144, 145, 146, 6,   147, 148, 149, 6,   150, 151, 152, 153, 154, 155, 6,   156, 157,
+        158, 159, 160, 161, 162, 56,  163, 164, 165, 166, 167, 168, 6,   169, 170, 171, 172, 173,
+        174, 175, 176, 177, 178, 6,   179, 180, 181, 182, 131, -11, 183, 184, 185, 107, 186, 187,
+        188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 6,   204,
+        205, 206, 6,   -12, 207, 208, 209, 210, 211, -13, 212, 213, 214, 215, 216, 217, 218, 219,
+        220, 221, 222, 223, 224, 225, 226, 227, 228, 218, 229, 230, 231, 232, 131, 233, 234, 56,
+        235, 236, 237, 238, 239, 240, 241, 196, 242, 243, 244, 6,   245, 246, 247, 248, 249, 250,
+        251, 252, 6,   -14, 253, 254, 255, 256, 257, 56,  258, 69,  259, 260, 261, 262, 263, 264,
+        265, 266, 6,   267, 268, 6,   269, 270, 271, 272, 238, 273, 274, 275, 276, 277, 278, 6,
+        192, 279, 280, 281, 282, 107, 283, 284, 148, 285, 286, 287, 288, 289, 148, 290, 291, 292,
+        293, 294, 56,  295, 296, 297, 298, 6,   299, 300, 301, 302, 303, 304, 305, 6,   0,   306,
+        0,   0,   0,   0,
 };
 State get_transition(int transition, int state) {
     IndexEntry index = kIndices[state];
@@ -6892,26 +6598,26 @@
     v *= 9;
     return (entry.values >> v) & 511;
 }
-static const int8_t kAccepts[432] = {
-        -1, -1, 88, 88, 91, 67, 72, 91, 42, 41, 41, 41, 41, 38, 57, 81, 62, 66, 86, 43, 44, 55, 79,
-        53, 51, 77, 50, 54, 52, 78, 49, 1,  -1, -1, 1,  56, -1, -1, 90, 89, 80, 2,  1,  1,  -1, -1,
-        1,  -1, -1, 1,  2,  3,  -1, -1, 1,  3,  2,  2,  -1, 2,  2,  2,  69, 87, 74, 58, 82, 76, 70,
-        71, 73, 75, 59, 83, 68, 91, -1, 7,  -1, -1, -1, -1, -1, 13, 41, 47, 48, 61, 85, 65, 41, 41,
-        40, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 16, 41, 41, 41, 41, 32, 41, 41, 41, 14, 41,
-        41, 41, 41, 41, 41, 24, 41, 41, 41, 41, 17, 41, 41, 41, 41, 41, 41, 15, 41, 41, 41, 41, 41,
-        18, 11, 41, 41, 41, 41, 41, 41, 41, 41, 41, 8,  41, 41, 41, 41, 41, 41, 40, 41, 41, 41, 41,
-        41, 5,  41, 41, 41, 41, 41, 25, 41, 9,  41, 41, 41, 41, 41, 40, 41, 41, 41, 41, 41, 41, 35,
-        41, 41, 41, 41, 6,  20, 41, 41, 41, 27, 41, 41, 22, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41,
-        41, 41, 41, 41, 41, 41, 41, 41, 41, 34, 41, 41, 41, 37, 41, 41, 41, 41, 41, 41, 36, 41, 41,
-        41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 28, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41,
-        26, 41, 41, 21, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41,
-        41, 41, 41, 41, 41, 41, 30, 41, 41, 41, 19, 41, 41, 41, 41, 41, 41, 41, 41, 40, 41, 41, 41,
-        41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 40, 41, 41, 41, 41, 41, 41, 41, 41,
-        41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 29, 41, 41, 41,
-        41, 41, 41, 41, 33, 41, 41, 41, 41, 41, 41, 41, 41, 12, 41, 41, 41, 41, 41, 41, 41, 41, 41,
-        41, 41, 41, 41, 41, 41, 41, 41, 39, 41, 41, 4,  41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41,
-        23, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41,
-        41, 41, 41, 10, 41, 41, 41, 41, 41, 41, 41, 31, 45, 60, 84, 64, 46, 63,
+static const int8_t kAccepts[418] = {
+        -1, -1, 88, 88, 91, 67, 72, 91, 42, 41, 41, 41, 41, 38, 41, 41, 41, 29, 57, 81, 62, 66,
+        86, 43, 44, 55, 79, 53, 51, 77, 50, 54, 52, 78, 49, 1,  -1, -1, 1,  56, -1, -1, 90, 89,
+        80, 2,  1,  1,  -1, -1, 1,  -1, -1, 1,  2,  3,  -1, -1, 1,  3,  2,  2,  -1, 2,  2,  2,
+        69, 87, 74, 58, 82, 76, 70, 71, 73, 75, 59, 83, 68, 91, -1, 7,  -1, -1, -1, -1, -1, 13,
+        41, 47, 48, 61, 85, 65, 41, 41, 40, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 16, 41,
+        41, 41, 41, 32, 41, 41, 41, 14, 41, 41, 41, 41, 41, 41, 24, 41, 41, 41, 41, 17, 41, 41,
+        41, 41, 41, 41, 15, 41, 41, 41, 41, 41, 18, 11, 41, 41, 41, 41, 41, 41, 41, 41, 41, 8,
+        41, 41, 41, 41, 41, 41, 40, 41, 41, 41, 41, 41, 5,  41, 41, 41, 41, 41, 25, 41, 9,  41,
+        41, 41, 41, 41, 40, 41, 41, 41, 41, 41, 41, 35, 41, 41, 41, 41, 6,  20, 41, 41, 41, 27,
+        41, 41, 22, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41,
+        34, 41, 41, 41, 37, 41, 41, 41, 41, 41, 41, 36, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41,
+        41, 41, 41, 41, 28, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 26, 41, 41, 21, 41, 41, 41,
+        41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41,
+        30, 41, 41, 41, 19, 41, 41, 41, 41, 41, 41, 41, 41, 40, 41, 41, 41, 41, 41, 41, 41, 41,
+        41, 41, 41, 41, 41, 41, 41, 41, 41, 40, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41,
+        41, 41, 41, 41, 41, 33, 41, 41, 41, 41, 41, 41, 41, 41, 12, 41, 41, 41, 41, 41, 41, 41,
+        41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 39, 41, 41, 4,  41, 41, 41, 41, 41, 41, 41, 41,
+        41, 41, 41, 23, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41,
+        41, 41, 41, 41, 41, 41, 41, 10, 41, 41, 41, 41, 41, 41, 41, 31, 45, 60, 84, 64, 46, 63,
 };
 
 Token Lexer::next() {
diff --git a/src/sksl/SkSLLexer.h b/src/sksl/SkSLLexer.h
index 7d959d2..710df3a 100644
--- a/src/sksl/SkSLLexer.h
+++ b/src/sksl/SkSLLexer.h
@@ -44,7 +44,7 @@
         TK_NOPERSPECTIVE,
         TK_INLINE,
         TK_NOINLINE,
-        TK_HASSIDEEFFECTS,
+        TK_PURE,
         TK_READONLY,
         TK_WRITEONLY,
         TK_BUFFER,
@@ -112,9 +112,7 @@
 
     Token() {}
     Token(Kind kind, int32_t offset, int32_t length)
-            : fKind(kind)
-            , fOffset(offset)
-            , fLength(length) {}
+            : fKind(kind), fOffset(offset), fLength(length) {}
 
     Kind fKind = Kind::TK_NONE;
     int32_t fOffset = -1;
diff --git a/src/sksl/SkSLParser.cpp b/src/sksl/SkSLParser.cpp
index 44272f0..beae5ad 100644
--- a/src/sksl/SkSLParser.cpp
+++ b/src/sksl/SkSLParser.cpp
@@ -51,7 +51,7 @@
         case Token::Kind::TK_INOUT:          return Modifiers::kIn_Flag | Modifiers::kOut_Flag;
         case Token::Kind::TK_FLAT:           return Modifiers::kFlat_Flag;
         case Token::Kind::TK_NOPERSPECTIVE:  return Modifiers::kNoPerspective_Flag;
-        case Token::Kind::TK_HASSIDEEFFECTS: return Modifiers::kHasSideEffects_Flag;
+        case Token::Kind::TK_PURE:           return Modifiers::kPure_Flag;
         case Token::Kind::TK_INLINE:         return Modifiers::kInline_Flag;
         case Token::Kind::TK_NOINLINE:       return Modifiers::kNoInline_Flag;
         case Token::Kind::TK_HIGHP:          return Modifiers::kHighp_Flag;
@@ -951,11 +951,6 @@
             break;
         }
         Token modifier = this->nextToken();
-        // We have to check for this (internal) modifier here. It's automatically added to user
-        // functions before the IR is built, so testing for it in Convert gives false positives.
-        if (tokenFlag == Modifiers::kHasSideEffects_Flag && !ThreadContext::IsModule()) {
-            this->error(modifier, "'sk_has_side_effects' is not permitted here");
-        }
         if (int duplicateFlags = (tokenFlag & flags)) {
             this->error(modifier, "'" + Modifiers::DescribeFlags(duplicateFlags) +
                                   "' appears more than once");
diff --git a/src/sksl/analysis/SkSLHasSideEffects.cpp b/src/sksl/analysis/SkSLHasSideEffects.cpp
index 6e7e343..0c63fa9 100644
--- a/src/sksl/analysis/SkSLHasSideEffects.cpp
+++ b/src/sksl/analysis/SkSLHasSideEffects.cpp
@@ -25,7 +25,7 @@
             switch (expr.kind()) {
                 case Expression::Kind::kFunctionCall: {
                     const FunctionCall& call = expr.as<FunctionCall>();
-                    if (call.function().modifiers().fFlags & Modifiers::kHasSideEffects_Flag) {
+                    if (!(call.function().modifiers().fFlags & Modifiers::kPure_Flag)) {
                         return true;
                     }
                     break;
diff --git a/src/sksl/codegen/SkSLSPIRVCodeGenerator.cpp b/src/sksl/codegen/SkSLSPIRVCodeGenerator.cpp
index fc94046..6167baa 100644
--- a/src/sksl/codegen/SkSLSPIRVCodeGenerator.cpp
+++ b/src/sksl/codegen/SkSLSPIRVCodeGenerator.cpp
@@ -3786,7 +3786,7 @@
     // Declare an entrypoint function.
     EntrypointAdapter adapter;
     adapter.fLayout = {};
-    adapter.fModifiers = Modifiers{adapter.fLayout, Modifiers::kHasSideEffects_Flag};
+    adapter.fModifiers = Modifiers{adapter.fLayout, Modifiers::kNo_Flag};
     adapter.entrypointDecl =
             std::make_unique<FunctionDeclaration>(Position(),
                                                   &adapter.fModifiers,
diff --git a/src/sksl/dsl/DSLFunction.cpp b/src/sksl/dsl/DSLFunction.cpp
index 7636490..d3ed918 100644
--- a/src/sksl/dsl/DSLFunction.cpp
+++ b/src/sksl/dsl/DSLFunction.cpp
@@ -45,13 +45,7 @@
                        SkTArray<DSLParameter*> params, Position pos) {
     fPosition = pos;
 
-    // Conservatively assume that all functions will have side effects, except functions in modules
-    // with intrinsic names.
     const Context& context = ThreadContext::Context();
-    if (!is_intrinsic_in_module(context, name)) {
-        modifiers.fModifiers.fFlags |= Modifiers::kHasSideEffects_Flag;
-    }
-
     if (context.fConfig->fSettings.fForceNoInline) {
         // Apply the `noinline` modifier to every function. This allows us to test Runtime
         // Effects without any inlining, even when the code is later added to a paint.
diff --git a/src/sksl/generated/sksl_compute.dehydrated.sksl b/src/sksl/generated/sksl_compute.dehydrated.sksl
index d243644..eaa04bb 100644
--- a/src/sksl/generated/sksl_compute.dehydrated.sksl
+++ b/src/sksl/generated/sksl_compute.dehydrated.sksl
@@ -43,8 +43,7 @@
 17,87,0,
 51,255,255,62,0,3,
 28,8,0,
-39,
-16,0,64,0,0,93,0,3,
+17,93,0,3,
 51,5,0,
 51,6,0,
 51,7,0,
@@ -53,19 +52,20 @@
 17,26,0,
 51,255,255,104,0,3,
 28,10,0,
-17,118,0,1,
+39,
+16,0,64,0,0,118,0,1,
 51,9,0,
 51,255,255,124,0,
 54,11,0,
 17,26,0,
 51,255,255,104,0,3,
 28,12,0,
-17,129,0,1,
+39,
+16,0,64,0,0,129,0,1,
 51,11,0,
 51,255,255,124,0,
 28,13,0,
-39,
-16,0,64,0,0,136,0,0,
+17,136,0,0,
 51,255,255,99,0,6,0,
 11,0,
 3,0,
diff --git a/src/sksl/generated/sksl_gpu.dehydrated.sksl b/src/sksl/generated/sksl_gpu.dehydrated.sksl
index edf672c..0a61ead 100644
--- a/src/sksl/generated/sksl_gpu.dehydrated.sksl
+++ b/src/sksl/generated/sksl_gpu.dehydrated.sksl
@@ -156,7 +156,8 @@
 17,16,0,
 51,255,255,18,0,3,
 28,4,0,
-17,28,0,3,
+39,
+16,0,64,0,0,28,0,3,
 51,1,0,
 51,2,0,
 51,3,0,
@@ -171,7 +172,8 @@
 17,16,0,
 51,255,255,18,0,3,
 28,8,0,
-17,28,0,3,
+39,
+16,0,64,0,0,28,0,3,
 51,5,0,
 51,6,0,
 51,7,0,
@@ -186,7 +188,8 @@
 17,43,0,
 51,255,255,32,0,3,
 28,12,0,
-17,45,0,3,
+39,
+16,0,64,0,0,45,0,3,
 51,9,0,
 51,10,0,
 51,11,0,
@@ -201,7 +204,8 @@
 17,43,0,
 51,255,255,49,0,3,
 28,16,0,
-17,45,0,3,
+39,
+16,0,64,0,0,45,0,3,
 51,13,0,
 51,14,0,
 51,15,0,
@@ -214,8 +218,7 @@
 16,32,59,0,
 51,255,255,4,0,3,
 28,19,0,
-39,
-16,0,64,0,0,63,0,2,
+17,63,0,2,
 51,17,0,
 51,18,0,
 51,255,255,32,0,
@@ -227,8 +230,7 @@
 16,32,59,0,
 51,255,255,4,0,3,
 28,22,0,
-39,
-16,0,64,0,0,63,0,2,
+17,63,0,2,
 51,20,0,
 51,21,0,
 51,255,255,49,0,
@@ -239,7 +241,8 @@
 17,59,0,
 51,255,255,4,0,3,
 28,25,0,
-17,69,0,2,
+39,
+16,0,64,0,0,69,0,2,
 51,23,0,
 51,24,0,
 51,255,255,32,0,
@@ -250,7 +253,8 @@
 17,59,0,
 51,255,255,4,0,3,
 28,28,0,
-17,69,0,2,
+39,
+16,0,64,0,0,69,0,2,
 51,26,0,
 51,27,0,
 51,255,255,49,0,
@@ -258,56 +262,64 @@
 17,75,0,
 51,255,255,77,0,3,
 28,30,0,
-17,84,0,1,
+39,
+16,0,64,0,0,84,0,1,
 51,29,0,
 51,255,255,98,0,
 54,31,0,
 17,75,0,
 51,255,255,103,0,3,
 28,32,0,
-17,110,0,1,
+39,
+16,0,64,0,0,110,0,1,
 51,31,0,
 51,255,255,98,0,
 54,33,0,
 17,75,0,
 51,255,255,103,0,3,
 28,34,0,
-17,123,0,1,
+39,
+16,0,64,0,0,123,0,1,
 51,33,0,
 51,255,255,98,0,
 54,35,0,
 17,136,0,
 51,255,255,98,0,3,
 28,36,0,
-17,138,0,1,
+39,
+16,0,64,0,0,138,0,1,
 51,35,0,
 51,255,255,77,0,
 54,37,0,
 17,136,0,
 51,255,255,98,0,3,
 28,38,0,
-17,154,0,1,
+39,
+16,0,64,0,0,154,0,1,
 51,37,0,
 51,255,255,103,0,
 54,39,0,
 17,136,0,
 51,255,255,98,0,3,
 28,40,0,
-17,169,0,1,
+39,
+16,0,64,0,0,169,0,1,
 51,39,0,
 51,255,255,103,0,
 54,41,0,
 17,75,0,
 51,255,255,77,0,3,
 28,42,0,
-17,184,0,1,
+39,
+16,0,64,0,0,184,0,1,
 51,41,0,
 51,255,255,98,0,
 54,43,0,
 17,75,0,
 51,255,255,98,0,3,
 28,44,0,
-17,197,0,1,
+39,
+16,0,64,0,0,197,0,1,
 51,43,0,
 51,255,255,77,0,
 54,45,0,
@@ -317,7 +329,8 @@
 17,14,0,
 51,255,255,212,0,3,
 28,47,0,
-17,218,0,2,
+39,
+16,0,64,0,0,218,0,2,
 51,45,0,
 51,46,0,
 51,255,255,227,0,
@@ -328,7 +341,8 @@
 17,14,0,
 51,255,255,233,0,3,
 28,50,0,
-17,218,0,2,
+39,
+16,0,64,0,0,218,0,2,
 51,48,0,
 51,49,0,
 51,255,255,227,0,
@@ -339,7 +353,8 @@
 17,14,0,
 51,255,255,240,0,3,
 28,53,0,
-17,218,0,2,
+39,
+16,0,64,0,0,218,0,2,
 51,51,0,
 51,52,0,
 51,255,255,227,0,
@@ -350,7 +365,8 @@
 17,14,0,
 51,255,255,240,0,3,
 28,56,0,
-17,246,0,2,
+39,
+16,0,64,0,0,246,0,2,
 51,54,0,
 51,55,0,
 51,255,255,227,0,
@@ -361,7 +377,8 @@
 17,14,0,
 51,255,255,212,0,3,
 28,59,0,
-17,246,0,2,
+39,
+16,0,64,0,0,246,0,2,
 51,57,0,
 51,58,0,
 51,255,255,227,0,
@@ -372,7 +389,8 @@
 17,14,0,
 51,255,255,233,0,3,
 28,62,0,
-17,246,0,2,
+39,
+16,0,64,0,0,246,0,2,
 51,60,0,
 51,61,0,
 51,255,255,227,0,
@@ -383,7 +401,8 @@
 17,14,0,
 51,255,255,240,0,3,
 28,65,0,
-17,4,1,2,
+39,
+16,0,64,0,0,4,1,2,
 51,63,0,
 51,64,0,
 51,255,255,227,0,
@@ -394,7 +413,8 @@
 17,14,0,
 51,255,255,212,0,3,
 28,68,0,
-17,4,1,2,
+39,
+16,0,64,0,0,4,1,2,
 51,66,0,
 51,67,0,
 51,255,255,227,0,
@@ -405,7 +425,8 @@
 17,14,0,
 51,255,255,233,0,3,
 28,71,0,
-17,4,1,2,
+39,
+16,0,64,0,0,4,1,2,
 51,69,0,
 51,70,0,
 51,255,255,227,0,
@@ -416,7 +437,8 @@
 17,14,0,
 51,255,255,240,0,3,
 28,74,0,
-17,16,1,2,
+39,
+16,0,64,0,0,16,1,2,
 51,72,0,
 51,73,0,
 51,255,255,227,0,
@@ -427,7 +449,8 @@
 17,14,0,
 51,255,255,212,0,3,
 28,77,0,
-17,16,1,2,
+39,
+16,0,64,0,0,16,1,2,
 51,75,0,
 51,76,0,
 51,255,255,227,0,
@@ -438,7 +461,8 @@
 17,14,0,
 51,255,255,233,0,3,
 28,80,0,
-17,16,1,2,
+39,
+16,0,64,0,0,16,1,2,
 51,78,0,
 51,79,0,
 51,255,255,227,0,
@@ -449,7 +473,8 @@
 17,14,0,
 51,255,255,240,0,3,
 28,83,0,
-17,33,1,2,
+39,
+16,0,64,0,0,33,1,2,
 51,81,0,
 51,82,0,
 51,255,255,227,0,
@@ -460,7 +485,8 @@
 17,14,0,
 51,255,255,212,0,3,
 28,86,0,
-17,33,1,2,
+39,
+16,0,64,0,0,33,1,2,
 51,84,0,
 51,85,0,
 51,255,255,227,0,
@@ -471,7 +497,8 @@
 17,14,0,
 51,255,255,233,0,3,
 28,89,0,
-17,33,1,2,
+39,
+16,0,64,0,0,33,1,2,
 51,87,0,
 51,88,0,
 51,255,255,227,0,
@@ -482,7 +509,8 @@
 17,14,0,
 51,255,255,240,0,3,
 28,92,0,
-17,39,1,2,
+39,
+16,0,64,0,0,39,1,2,
 51,90,0,
 51,91,0,
 51,255,255,227,0,
@@ -493,7 +521,8 @@
 17,14,0,
 51,255,255,212,0,3,
 28,95,0,
-17,39,1,2,
+39,
+16,0,64,0,0,39,1,2,
 51,93,0,
 51,94,0,
 51,255,255,227,0,
@@ -504,7 +533,8 @@
 17,14,0,
 51,255,255,233,0,3,
 28,98,0,
-17,39,1,2,
+39,
+16,0,64,0,0,39,1,2,
 51,96,0,
 51,97,0,
 51,255,255,227,0,
@@ -512,42 +542,48 @@
 17,48,1,
 51,255,255,4,0,3,
 28,100,0,
-17,54,1,1,
+39,
+16,0,64,0,0,54,1,1,
 51,99,0,
 51,255,255,4,0,
 54,101,0,
 17,48,1,
 51,255,255,63,1,3,
 28,102,0,
-17,54,1,1,
+39,
+16,0,64,0,0,54,1,1,
 51,101,0,
 51,255,255,4,0,
 54,103,0,
 17,48,1,
 51,255,255,4,0,3,
 28,104,0,
-17,73,1,1,
+39,
+16,0,64,0,0,73,1,1,
 51,103,0,
 51,255,255,4,0,
 54,105,0,
 17,48,1,
 51,255,255,63,1,3,
 28,106,0,
-17,73,1,1,
+39,
+16,0,64,0,0,73,1,1,
 51,105,0,
 51,255,255,4,0,
 54,107,0,
 17,48,1,
 51,255,255,4,0,3,
 28,108,0,
-17,81,1,1,
+39,
+16,0,64,0,0,81,1,1,
 51,107,0,
 51,255,255,4,0,
 54,109,0,
 17,48,1,
 51,255,255,63,1,3,
 28,110,0,
-17,81,1,1,
+39,
+16,0,64,0,0,81,1,1,
 51,109,0,
 51,255,255,4,0,
 54,111,0,
@@ -557,7 +593,8 @@
 17,107,1,
 51,255,255,109,1,3,
 28,113,0,
-17,117,1,2,
+39,
+16,0,64,0,0,117,1,2,
 51,111,0,
 51,112,0,
 51,255,255,131,1,
@@ -568,7 +605,8 @@
 17,141,1,
 51,255,255,77,0,3,
 28,116,0,
-17,143,1,2,
+39,
+16,0,64,0,0,143,1,2,
 51,114,0,
 51,115,0,
 51,255,255,150,1,
@@ -582,7 +620,8 @@
 17,175,1,
 51,255,255,180,1,3,
 28,120,0,
-17,143,1,3,
+39,
+16,0,64,0,0,143,1,3,
 51,117,0,
 51,118,0,
 51,119,0,
@@ -594,7 +633,8 @@
 17,141,1,
 51,255,255,77,0,3,
 28,123,0,
-17,143,1,2,
+39,
+16,0,64,0,0,143,1,2,
 51,121,0,
 51,122,0,
 51,255,255,150,1,
@@ -605,7 +645,8 @@
 17,141,1,
 51,255,255,77,0,3,
 28,126,0,
-17,143,1,2,
+39,
+16,0,64,0,0,143,1,2,
 51,124,0,
 51,125,0,
 51,255,255,150,1,
@@ -616,7 +657,8 @@
 17,141,1,
 51,255,255,200,1,3,
 28,129,0,
-17,143,1,2,
+39,
+16,0,64,0,0,143,1,2,
 51,127,0,
 51,128,0,
 51,255,255,150,1,
@@ -624,7 +666,8 @@
 17,207,1,
 51,255,255,215,1,3,
 28,131,0,
-17,228,1,1,
+39,
+16,0,64,0,0,228,1,1,
 51,130,0,
 51,255,255,150,1,
 54,132,0,
@@ -634,7 +677,8 @@
 17,143,1,
 51,255,255,255,1,3,
 28,134,0,
-17,228,1,2,
+39,
+16,0,64,0,0,228,1,2,
 51,132,0,
 51,133,0,
 51,255,255,150,1,
@@ -645,7 +689,8 @@
 17,141,1,
 51,255,255,200,1,3,
 28,137,0,
-17,143,1,2,
+39,
+16,0,64,0,0,143,1,2,
 51,135,0,
 51,136,0,
 51,255,255,150,1,
@@ -659,7 +704,8 @@
 17,175,1,
 51,255,255,180,1,3,
 28,141,0,
-17,143,1,3,
+39,
+16,0,64,0,0,143,1,3,
 51,138,0,
 51,139,0,
 51,140,0,
diff --git a/src/sksl/generated/sksl_public.dehydrated.sksl b/src/sksl/generated/sksl_public.dehydrated.sksl
index 285dd89..4217ec1 100644
--- a/src/sksl/generated/sksl_public.dehydrated.sksl
+++ b/src/sksl/generated/sksl_public.dehydrated.sksl
@@ -20,14 +20,16 @@
 17,2,0,
 51,255,255,8,0,3,
 28,2,0,
-17,14,0,1,
+39,
+16,0,64,0,0,14,0,1,
 51,1,0,
 51,255,255,8,0,
 54,3,0,
 17,2,0,
 51,255,255,8,0,3,
 28,4,0,
-17,27,0,1,
+39,
+16,0,64,0,0,27,0,1,
 51,3,0,
 51,255,255,8,0,
 54,5,0,
diff --git a/src/sksl/generated/sksl_shared.dehydrated.sksl b/src/sksl/generated/sksl_shared.dehydrated.sksl
index ec5a73e..2c3b6df 100644
--- a/src/sksl/generated/sksl_shared.dehydrated.sksl
+++ b/src/sksl/generated/sksl_shared.dehydrated.sksl
@@ -148,98 +148,112 @@
 17,2,0,
 51,255,255,10,0,3,
 28,2,0,
-17,19,0,1,
+39,
+16,0,64,0,0,19,0,1,
 51,1,0,
 51,255,255,10,0,
 54,3,0,
 17,2,0,
 51,255,255,27,0,3,
 28,4,0,
-17,19,0,1,
+39,
+16,0,64,0,0,19,0,1,
 51,3,0,
 51,255,255,27,0,
 54,5,0,
 17,19,0,
 51,255,255,10,0,3,
 28,6,0,
-17,2,0,1,
+39,
+16,0,64,0,0,2,0,1,
 51,5,0,
 51,255,255,10,0,
 54,7,0,
 17,19,0,
 51,255,255,27,0,3,
 28,8,0,
-17,2,0,1,
+39,
+16,0,64,0,0,2,0,1,
 51,7,0,
 51,255,255,27,0,
 54,9,0,
 17,37,0,
 51,255,255,10,0,3,
 28,10,0,
-17,43,0,1,
+39,
+16,0,64,0,0,43,0,1,
 51,9,0,
 51,255,255,10,0,
 54,11,0,
 17,37,0,
 51,255,255,27,0,3,
 28,12,0,
-17,43,0,1,
+39,
+16,0,64,0,0,43,0,1,
 51,11,0,
 51,255,255,27,0,
 54,13,0,
 17,37,0,
 51,255,255,10,0,3,
 28,14,0,
-17,47,0,1,
+39,
+16,0,64,0,0,47,0,1,
 51,13,0,
 51,255,255,10,0,
 54,15,0,
 17,37,0,
 51,255,255,27,0,3,
 28,16,0,
-17,47,0,1,
+39,
+16,0,64,0,0,47,0,1,
 51,15,0,
 51,255,255,27,0,
 54,17,0,
 17,37,0,
 51,255,255,10,0,3,
 28,18,0,
-17,51,0,1,
+39,
+16,0,64,0,0,51,0,1,
 51,17,0,
 51,255,255,10,0,
 54,19,0,
 17,37,0,
 51,255,255,27,0,3,
 28,20,0,
-17,51,0,1,
+39,
+16,0,64,0,0,51,0,1,
 51,19,0,
 51,255,255,27,0,
 54,21,0,
 17,55,0,
 51,255,255,10,0,3,
 28,22,0,
-17,57,0,1,
+39,
+16,0,64,0,0,57,0,1,
 51,21,0,
 51,255,255,10,0,
 54,23,0,
 17,55,0,
 51,255,255,27,0,3,
 28,24,0,
-17,57,0,1,
+39,
+16,0,64,0,0,57,0,1,
 51,23,0,
 51,255,255,27,0,
 54,25,0,
 17,55,0,
 51,255,255,10,0,3,
 28,26,0,
-17,62,0,1,
+39,
+16,0,64,0,0,62,0,1,
 51,25,0,
 51,255,255,10,0,
 54,27,0,
 17,55,0,
 51,255,255,27,0,3,
 28,28,0,
-17,62,0,1,
+39,
+16,0,64,0,0,62,0,1,
 51,27,0,
 51,255,255,27,0,
 54,29,0,
@@ -249,7 +263,8 @@
 17,55,0,
 51,255,255,10,0,3,
 28,31,0,
-17,69,0,2,
+39,
+16,0,64,0,0,69,0,2,
 51,29,0,
 51,30,0,
 51,255,255,10,0,
@@ -260,7 +275,8 @@
 17,55,0,
 51,255,255,27,0,3,
 28,34,0,
-17,69,0,2,
+39,
+16,0,64,0,0,69,0,2,
 51,32,0,
 51,33,0,
 51,255,255,27,0,
@@ -268,14 +284,16 @@
 17,74,0,
 51,255,255,10,0,3,
 28,36,0,
-17,69,0,1,
+39,
+16,0,64,0,0,69,0,1,
 51,35,0,
 51,255,255,10,0,
 54,37,0,
 17,74,0,
 51,255,255,27,0,3,
 28,38,0,
-17,69,0,1,
+39,
+16,0,64,0,0,69,0,1,
 51,37,0,
 51,255,255,27,0,
 54,39,0,
@@ -283,7 +301,7 @@
 51,255,255,10,0,3,
 28,40,0,
 39,
-16,0,32,0,0,83,0,1,
+16,0,96,0,0,83,0,1,
 51,39,0,
 51,255,255,10,0,
 54,41,0,
@@ -291,7 +309,7 @@
 51,255,255,27,0,3,
 28,42,0,
 39,
-16,0,32,0,0,83,0,1,
+16,0,96,0,0,83,0,1,
 51,41,0,
 51,255,255,27,0,
 54,43,0,
@@ -299,7 +317,7 @@
 51,255,255,10,0,3,
 28,44,0,
 39,
-16,0,32,0,0,88,0,1,
+16,0,96,0,0,88,0,1,
 51,43,0,
 51,255,255,10,0,
 54,45,0,
@@ -307,7 +325,7 @@
 51,255,255,27,0,3,
 28,46,0,
 39,
-16,0,32,0,0,88,0,1,
+16,0,96,0,0,88,0,1,
 51,45,0,
 51,255,255,27,0,
 54,47,0,
@@ -315,7 +333,7 @@
 51,255,255,10,0,3,
 28,48,0,
 39,
-16,0,32,0,0,93,0,1,
+16,0,96,0,0,93,0,1,
 51,47,0,
 51,255,255,10,0,
 54,49,0,
@@ -323,7 +341,7 @@
 51,255,255,27,0,3,
 28,50,0,
 39,
-16,0,32,0,0,93,0,1,
+16,0,96,0,0,93,0,1,
 51,49,0,
 51,255,255,27,0,
 54,51,0,
@@ -331,7 +349,7 @@
 51,255,255,10,0,3,
 28,52,0,
 39,
-16,0,32,0,0,98,0,1,
+16,0,96,0,0,98,0,1,
 51,51,0,
 51,255,255,10,0,
 54,53,0,
@@ -339,7 +357,7 @@
 51,255,255,27,0,3,
 28,54,0,
 39,
-16,0,32,0,0,98,0,1,
+16,0,96,0,0,98,0,1,
 51,53,0,
 51,255,255,27,0,
 54,55,0,
@@ -347,7 +365,7 @@
 51,255,255,10,0,3,
 28,56,0,
 39,
-16,0,32,0,0,104,0,1,
+16,0,96,0,0,104,0,1,
 51,55,0,
 51,255,255,10,0,
 54,57,0,
@@ -355,7 +373,7 @@
 51,255,255,27,0,3,
 28,58,0,
 39,
-16,0,32,0,0,104,0,1,
+16,0,96,0,0,104,0,1,
 51,57,0,
 51,255,255,27,0,
 54,59,0,
@@ -363,7 +381,7 @@
 51,255,255,10,0,3,
 28,60,0,
 39,
-16,0,32,0,0,110,0,1,
+16,0,96,0,0,110,0,1,
 51,59,0,
 51,255,255,10,0,
 54,61,0,
@@ -371,7 +389,7 @@
 51,255,255,27,0,3,
 28,62,0,
 39,
-16,0,32,0,0,110,0,1,
+16,0,96,0,0,110,0,1,
 51,61,0,
 51,255,255,27,0,
 54,63,0,
@@ -381,7 +399,8 @@
 17,67,0,
 51,255,255,10,0,3,
 28,65,0,
-17,116,0,2,
+39,
+16,0,64,0,0,116,0,2,
 51,63,0,
 51,64,0,
 51,255,255,10,0,
@@ -392,7 +411,8 @@
 17,67,0,
 51,255,255,27,0,3,
 28,68,0,
-17,116,0,2,
+39,
+16,0,64,0,0,116,0,2,
 51,66,0,
 51,67,0,
 51,255,255,27,0,
@@ -400,154 +420,176 @@
 17,55,0,
 51,255,255,10,0,3,
 28,70,0,
-17,120,0,1,
+39,
+16,0,64,0,0,120,0,1,
 51,69,0,
 51,255,255,10,0,
 54,71,0,
 17,55,0,
 51,255,255,27,0,3,
 28,72,0,
-17,120,0,1,
+39,
+16,0,64,0,0,120,0,1,
 51,71,0,
 51,255,255,27,0,
 54,73,0,
 17,55,0,
 51,255,255,10,0,3,
 28,74,0,
-17,124,0,1,
+39,
+16,0,64,0,0,124,0,1,
 51,73,0,
 51,255,255,10,0,
 54,75,0,
 17,55,0,
 51,255,255,27,0,3,
 28,76,0,
-17,124,0,1,
+39,
+16,0,64,0,0,124,0,1,
 51,75,0,
 51,255,255,27,0,
 54,77,0,
 17,55,0,
 51,255,255,10,0,3,
 28,78,0,
-17,128,0,1,
+39,
+16,0,64,0,0,128,0,1,
 51,77,0,
 51,255,255,10,0,
 54,79,0,
 17,55,0,
 51,255,255,27,0,3,
 28,80,0,
-17,128,0,1,
+39,
+16,0,64,0,0,128,0,1,
 51,79,0,
 51,255,255,27,0,
 54,81,0,
 17,55,0,
 51,255,255,10,0,3,
 28,82,0,
-17,133,0,1,
+39,
+16,0,64,0,0,133,0,1,
 51,81,0,
 51,255,255,10,0,
 54,83,0,
 17,55,0,
 51,255,255,27,0,3,
 28,84,0,
-17,133,0,1,
+39,
+16,0,64,0,0,133,0,1,
 51,83,0,
 51,255,255,27,0,
 54,85,0,
 17,55,0,
 51,255,255,10,0,3,
 28,86,0,
-17,138,0,1,
+39,
+16,0,64,0,0,138,0,1,
 51,85,0,
 51,255,255,10,0,
 54,87,0,
 17,55,0,
 51,255,255,27,0,3,
 28,88,0,
-17,138,0,1,
+39,
+16,0,64,0,0,138,0,1,
 51,87,0,
 51,255,255,27,0,
 54,89,0,
 17,55,0,
 51,255,255,10,0,3,
 28,90,0,
-17,143,0,1,
+39,
+16,0,64,0,0,143,0,1,
 51,89,0,
 51,255,255,10,0,
 54,91,0,
 17,55,0,
 51,255,255,27,0,3,
 28,92,0,
-17,143,0,1,
+39,
+16,0,64,0,0,143,0,1,
 51,91,0,
 51,255,255,27,0,
 54,93,0,
 17,55,0,
 51,255,255,10,0,3,
 28,94,0,
-17,155,0,1,
+39,
+16,0,64,0,0,155,0,1,
 51,93,0,
 51,255,255,10,0,
 54,95,0,
 17,55,0,
 51,255,255,27,0,3,
 28,96,0,
-17,155,0,1,
+39,
+16,0,64,0,0,155,0,1,
 51,95,0,
 51,255,255,27,0,
 54,97,0,
 17,55,0,
 51,255,255,10,0,3,
 28,98,0,
-17,159,0,1,
+39,
+16,0,64,0,0,159,0,1,
 51,97,0,
 51,255,255,10,0,
 54,99,0,
 17,55,0,
 51,255,255,27,0,3,
 28,100,0,
-17,159,0,1,
+39,
+16,0,64,0,0,159,0,1,
 51,99,0,
 51,255,255,27,0,
 54,101,0,
 17,55,0,
 51,255,255,10,0,3,
 28,102,0,
-17,164,0,1,
+39,
+16,0,64,0,0,164,0,1,
 51,101,0,
 51,255,255,10,0,
 54,103,0,
 17,55,0,
 51,255,255,27,0,3,
 28,104,0,
-17,164,0,1,
+39,
+16,0,64,0,0,164,0,1,
 51,103,0,
 51,255,255,27,0,
 54,105,0,
 17,55,0,
 51,255,255,10,0,3,
 28,106,0,
-17,170,0,1,
+39,
+16,0,64,0,0,170,0,1,
 51,105,0,
 51,255,255,10,0,
 54,107,0,
 17,55,0,
 51,255,255,27,0,3,
 28,108,0,
-17,170,0,1,
+39,
+16,0,64,0,0,170,0,1,
 51,107,0,
 51,255,255,27,0,
 54,109,0,
 17,55,0,
 51,255,255,10,0,3,
 28,110,0,
-17,175,0,1,
+39,
+16,0,64,0,0,175,0,1,
 51,109,0,
 51,255,255,10,0,
 54,111,0,
 17,55,0,
 51,255,255,27,0,3,
 28,112,0,
-17,175,0,1,
+39,
+16,0,64,0,0,175,0,1,
 51,111,0,
 51,255,255,27,0,
 54,113,0,
@@ -557,7 +599,8 @@
 17,67,0,
 51,255,255,181,0,3,
 28,115,0,
-17,187,0,2,
+39,
+16,0,64,0,0,187,0,2,
 51,113,0,
 51,114,0,
 51,255,255,10,0,
@@ -568,7 +611,8 @@
 17,67,0,
 51,255,255,10,0,3,
 28,118,0,
-17,187,0,2,
+39,
+16,0,64,0,0,187,0,2,
 51,116,0,
 51,117,0,
 51,255,255,10,0,
@@ -579,7 +623,8 @@
 17,67,0,
 51,255,255,191,0,3,
 28,121,0,
-17,187,0,2,
+39,
+16,0,64,0,0,187,0,2,
 51,119,0,
 51,120,0,
 51,255,255,27,0,
@@ -590,7 +635,8 @@
 17,67,0,
 51,255,255,27,0,3,
 28,124,0,
-17,187,0,2,
+39,
+16,0,64,0,0,187,0,2,
 51,122,0,
 51,123,0,
 51,255,255,27,0,
@@ -601,7 +647,8 @@
 17,67,0,
 51,255,255,10,0,3,
 28,127,0,
-17,196,0,2,
+39,
+16,0,64,0,0,196,0,2,
 51,125,0,
 51,126,0,
 51,255,255,10,0,
@@ -612,7 +659,8 @@
 17,67,0,
 51,255,255,181,0,3,
 28,130,0,
-17,196,0,2,
+39,
+16,0,64,0,0,196,0,2,
 51,128,0,
 51,129,0,
 51,255,255,10,0,
@@ -623,7 +671,8 @@
 17,67,0,
 51,255,255,27,0,3,
 28,133,0,
-17,196,0,2,
+39,
+16,0,64,0,0,196,0,2,
 51,131,0,
 51,132,0,
 51,255,255,27,0,
@@ -634,7 +683,8 @@
 17,67,0,
 51,255,255,191,0,3,
 28,136,0,
-17,196,0,2,
+39,
+16,0,64,0,0,196,0,2,
 51,134,0,
 51,135,0,
 51,255,255,27,0,
@@ -645,7 +695,8 @@
 17,67,0,
 51,255,255,10,0,3,
 28,139,0,
-17,200,0,2,
+39,
+16,0,64,0,0,200,0,2,
 51,137,0,
 51,138,0,
 51,255,255,10,0,
@@ -656,7 +707,8 @@
 17,67,0,
 51,255,255,181,0,3,
 28,142,0,
-17,200,0,2,
+39,
+16,0,64,0,0,200,0,2,
 51,140,0,
 51,141,0,
 51,255,255,10,0,
@@ -667,7 +719,8 @@
 17,67,0,
 51,255,255,27,0,3,
 28,145,0,
-17,200,0,2,
+39,
+16,0,64,0,0,200,0,2,
 51,143,0,
 51,144,0,
 51,255,255,27,0,
@@ -678,7 +731,8 @@
 17,67,0,
 51,255,255,191,0,3,
 28,148,0,
-17,200,0,2,
+39,
+16,0,64,0,0,200,0,2,
 51,146,0,
 51,147,0,
 51,255,255,27,0,
@@ -692,7 +746,8 @@
 17,211,0,
 51,255,255,10,0,3,
 28,152,0,
-17,218,0,3,
+39,
+16,0,64,0,0,218,0,3,
 51,149,0,
 51,150,0,
 51,151,0,
@@ -707,7 +762,8 @@
 17,211,0,
 51,255,255,181,0,3,
 28,156,0,
-17,218,0,3,
+39,
+16,0,64,0,0,218,0,3,
 51,153,0,
 51,154,0,
 51,155,0,
@@ -722,7 +778,8 @@
 17,211,0,
 51,255,255,27,0,3,
 28,160,0,
-17,218,0,3,
+39,
+16,0,64,0,0,218,0,3,
 51,157,0,
 51,158,0,
 51,159,0,
@@ -737,7 +794,8 @@
 17,211,0,
 51,255,255,191,0,3,
 28,164,0,
-17,218,0,3,
+39,
+16,0,64,0,0,218,0,3,
 51,161,0,
 51,162,0,
 51,163,0,
@@ -746,14 +804,16 @@
 17,55,0,
 51,255,255,10,0,3,
 28,166,0,
-17,224,0,1,
+39,
+16,0,64,0,0,224,0,1,
 51,165,0,
 51,255,255,10,0,
 54,167,0,
 17,55,0,
 51,255,255,27,0,3,
 28,168,0,
-17,224,0,1,
+39,
+16,0,64,0,0,224,0,1,
 51,167,0,
 51,255,255,27,0,
 54,169,0,
@@ -766,7 +826,8 @@
 17,233,0,
 51,255,255,10,0,3,
 28,172,0,
-17,235,0,3,
+39,
+16,0,64,0,0,235,0,3,
 51,169,0,
 51,170,0,
 51,171,0,
@@ -781,7 +842,8 @@
 17,233,0,
 51,255,255,181,0,3,
 28,176,0,
-17,235,0,3,
+39,
+16,0,64,0,0,235,0,3,
 51,173,0,
 51,174,0,
 51,175,0,
@@ -796,7 +858,8 @@
 17,233,0,
 51,255,255,27,0,3,
 28,180,0,
-17,235,0,3,
+39,
+16,0,64,0,0,235,0,3,
 51,177,0,
 51,178,0,
 51,179,0,
@@ -811,7 +874,8 @@
 17,233,0,
 51,255,255,191,0,3,
 28,184,0,
-17,235,0,3,
+39,
+16,0,64,0,0,235,0,3,
 51,181,0,
 51,182,0,
 51,183,0,
@@ -823,7 +887,8 @@
 17,55,0,
 51,255,255,10,0,3,
 28,187,0,
-17,244,0,2,
+39,
+16,0,64,0,0,244,0,2,
 51,185,0,
 51,186,0,
 51,255,255,10,0,
@@ -834,7 +899,8 @@
 17,55,0,
 51,255,255,10,0,3,
 28,190,0,
-17,244,0,2,
+39,
+16,0,64,0,0,244,0,2,
 51,188,0,
 51,189,0,
 51,255,255,10,0,
@@ -845,7 +911,8 @@
 17,55,0,
 51,255,255,27,0,3,
 28,193,0,
-17,244,0,2,
+39,
+16,0,64,0,0,244,0,2,
 51,191,0,
 51,192,0,
 51,255,255,27,0,
@@ -856,7 +923,8 @@
 17,55,0,
 51,255,255,27,0,3,
 28,196,0,
-17,244,0,2,
+39,
+16,0,64,0,0,244,0,2,
 51,194,0,
 51,195,0,
 51,255,255,27,0,
@@ -870,7 +938,8 @@
 17,55,0,
 51,255,255,10,0,3,
 28,200,0,
-17,5,1,3,
+39,
+16,0,64,0,0,5,1,3,
 51,197,0,
 51,198,0,
 51,199,0,
@@ -885,7 +954,8 @@
 17,55,0,
 51,255,255,10,0,3,
 28,204,0,
-17,5,1,3,
+39,
+16,0,64,0,0,5,1,3,
 51,201,0,
 51,202,0,
 51,203,0,
@@ -900,7 +970,8 @@
 17,55,0,
 51,255,255,27,0,3,
 28,208,0,
-17,5,1,3,
+39,
+16,0,64,0,0,5,1,3,
 51,205,0,
 51,206,0,
 51,207,0,
@@ -915,7 +986,8 @@
 17,55,0,
 51,255,255,27,0,3,
 28,212,0,
-17,5,1,3,
+39,
+16,0,64,0,0,5,1,3,
 51,209,0,
 51,210,0,
 51,211,0,
@@ -925,7 +997,7 @@
 51,255,255,16,1,3,
 28,214,0,
 39,
-16,0,32,0,0,155,0,1,
+16,0,96,0,0,155,0,1,
 51,213,0,
 51,255,255,16,1,
 54,215,0,
@@ -933,7 +1005,7 @@
 51,255,255,16,1,3,
 28,216,0,
 39,
-16,0,32,0,0,159,0,1,
+16,0,96,0,0,159,0,1,
 51,215,0,
 51,255,255,16,1,
 54,217,0,
@@ -941,7 +1013,7 @@
 51,255,255,10,0,3,
 28,218,0,
 39,
-16,0,32,0,0,32,1,1,
+16,0,96,0,0,32,1,1,
 51,217,0,
 51,255,255,16,1,
 54,219,0,
@@ -949,7 +1021,7 @@
 51,255,255,10,0,3,
 28,220,0,
 39,
-16,0,32,0,0,47,1,1,
+16,0,96,0,0,47,1,1,
 51,219,0,
 51,255,255,63,1,
 54,221,0,
@@ -957,7 +1029,7 @@
 51,255,255,16,1,3,
 28,222,0,
 39,
-16,0,32,0,0,73,1,1,
+16,0,96,0,0,73,1,1,
 51,221,0,
 51,255,255,10,0,
 54,223,0,
@@ -965,7 +1037,7 @@
 51,255,255,63,1,3,
 28,224,0,
 39,
-16,0,32,0,0,88,1,1,
+16,0,96,0,0,88,1,1,
 51,223,0,
 51,255,255,10,0,
 54,225,0,
@@ -973,7 +1045,7 @@
 51,255,255,10,0,3,
 28,226,0,
 39,
-16,0,32,0,0,104,1,1,
+16,0,96,0,0,104,1,1,
 51,225,0,
 51,255,255,10,0,
 54,227,0,
@@ -981,7 +1053,7 @@
 51,255,255,27,0,3,
 28,228,0,
 39,
-16,0,32,0,0,104,1,1,
+16,0,96,0,0,104,1,1,
 51,227,0,
 51,255,255,27,0,
 54,229,0,
@@ -989,7 +1061,7 @@
 51,255,255,10,0,3,
 28,230,0,
 39,
-16,0,32,0,0,110,1,1,
+16,0,96,0,0,110,1,1,
 51,229,0,
 51,255,255,10,0,
 54,231,0,
@@ -997,7 +1069,7 @@
 51,255,255,27,0,3,
 28,232,0,
 39,
-16,0,32,0,0,110,1,1,
+16,0,96,0,0,110,1,1,
 51,231,0,
 51,255,255,27,0,
 54,233,0,
@@ -1005,7 +1077,7 @@
 51,255,255,10,0,3,
 28,234,0,
 39,
-16,0,32,0,0,116,1,1,
+16,0,96,0,0,116,1,1,
 51,233,0,
 51,255,255,10,0,
 54,235,0,
@@ -1013,7 +1085,7 @@
 51,255,255,27,0,3,
 28,236,0,
 39,
-16,0,32,0,0,116,1,1,
+16,0,96,0,0,116,1,1,
 51,235,0,
 51,255,255,27,0,
 54,237,0,
@@ -1024,7 +1096,7 @@
 51,255,255,16,1,3,
 28,239,0,
 39,
-16,0,32,0,0,196,0,2,
+16,0,96,0,0,196,0,2,
 51,237,0,
 51,238,0,
 51,255,255,16,1,
@@ -1036,7 +1108,7 @@
 51,255,255,126,1,3,
 28,242,0,
 39,
-16,0,32,0,0,196,0,2,
+16,0,96,0,0,196,0,2,
 51,240,0,
 51,241,0,
 51,255,255,16,1,
@@ -1048,7 +1120,7 @@
 51,255,255,16,1,3,
 28,245,0,
 39,
-16,0,32,0,0,200,0,2,
+16,0,96,0,0,200,0,2,
 51,243,0,
 51,244,0,
 51,255,255,16,1,
@@ -1060,7 +1132,7 @@
 51,255,255,126,1,3,
 28,248,0,
 39,
-16,0,32,0,0,200,0,2,
+16,0,96,0,0,200,0,2,
 51,246,0,
 51,247,0,
 51,255,255,16,1,
@@ -1075,7 +1147,7 @@
 51,255,255,16,1,3,
 28,252,0,
 39,
-16,0,32,0,0,218,0,3,
+16,0,96,0,0,218,0,3,
 51,249,0,
 51,250,0,
 51,251,0,
@@ -1091,7 +1163,7 @@
 51,255,255,126,1,3,
 28,0,1,
 39,
-16,0,32,0,0,218,0,3,
+16,0,96,0,0,218,0,3,
 51,253,0,
 51,254,0,
 51,255,0,
@@ -1107,7 +1179,7 @@
 51,255,255,63,1,3,
 28,4,1,
 39,
-16,0,32,0,0,218,0,3,
+16,0,96,0,0,218,0,3,
 51,1,1,
 51,2,1,
 51,3,1,
@@ -1123,7 +1195,7 @@
 51,255,255,130,1,3,
 28,8,1,
 39,
-16,0,32,0,0,218,0,3,
+16,0,96,0,0,218,0,3,
 51,5,1,
 51,6,1,
 51,7,1,
@@ -1139,7 +1211,7 @@
 51,255,255,135,1,3,
 28,12,1,
 39,
-16,0,32,0,0,235,0,3,
+16,0,96,0,0,235,0,3,
 51,9,1,
 51,10,1,
 51,11,1,
@@ -1155,7 +1227,7 @@
 51,255,255,135,1,3,
 28,16,1,
 39,
-16,0,32,0,0,235,0,3,
+16,0,96,0,0,235,0,3,
 51,13,1,
 51,14,1,
 51,15,1,
@@ -1165,7 +1237,7 @@
 51,255,255,10,0,3,
 28,18,1,
 39,
-16,0,32,0,0,145,1,1,
+16,0,96,0,0,145,1,1,
 51,17,1,
 51,255,255,135,1,
 54,19,1,
@@ -1173,7 +1245,7 @@
 51,255,255,27,0,3,
 28,20,1,
 39,
-16,0,32,0,0,145,1,1,
+16,0,96,0,0,145,1,1,
 51,19,1,
 51,255,255,135,1,
 54,21,1,
@@ -1181,7 +1253,7 @@
 51,255,255,10,0,3,
 28,22,1,
 39,
-16,0,32,0,0,151,1,1,
+16,0,96,0,0,151,1,1,
 51,21,1,
 51,255,255,135,1,
 54,23,1,
@@ -1189,7 +1261,7 @@
 51,255,255,27,0,3,
 28,24,1,
 39,
-16,0,32,0,0,151,1,1,
+16,0,96,0,0,151,1,1,
 51,23,1,
 51,255,255,135,1,
 54,25,1,
@@ -1201,7 +1273,7 @@
 51,255,255,10,0,3,
 28,27,1,
 39,
-16,0,32,0,0,159,1,2,
+16,0,96,0,0,159,1,2,
 51,25,1,
 51,26,1,
 51,255,255,10,0,
@@ -1214,7 +1286,7 @@
 51,255,255,27,0,3,
 28,30,1,
 39,
-16,0,32,0,0,159,1,2,
+16,0,96,0,0,159,1,2,
 51,28,1,
 51,29,1,
 51,255,255,27,0,
@@ -1223,7 +1295,7 @@
 51,255,255,166,1,3,
 28,32,1,
 39,
-16,0,32,0,0,173,1,1,
+16,0,96,0,0,173,1,1,
 51,31,1,
 51,255,255,130,1,
 54,33,1,
@@ -1231,21 +1303,23 @@
 51,255,255,130,1,3,
 28,34,1,
 39,
-16,0,32,0,0,189,1,1,
+16,0,96,0,0,189,1,1,
 51,33,1,
 51,255,255,166,1,
 54,35,1,
 17,55,0,
 51,255,255,10,0,3,
 28,36,1,
-17,205,1,1,
+39,
+16,0,64,0,0,205,1,1,
 51,35,1,
 51,255,255,181,0,
 54,37,1,
 17,55,0,
 51,255,255,27,0,3,
 28,38,1,
-17,205,1,1,
+39,
+16,0,64,0,0,205,1,1,
 51,37,1,
 51,255,255,191,0,
 54,39,1,
@@ -1255,7 +1329,8 @@
 17,215,1,
 51,255,255,10,0,3,
 28,41,1,
-17,218,1,2,
+39,
+16,0,64,0,0,218,1,2,
 51,39,1,
 51,40,1,
 51,255,255,181,0,
@@ -1266,7 +1341,8 @@
 17,215,1,
 51,255,255,27,0,3,
 28,44,1,
-17,218,1,2,
+39,
+16,0,64,0,0,218,1,2,
 51,42,1,
 51,43,1,
 51,255,255,191,0,
@@ -1277,7 +1353,8 @@
 17,67,0,
 51,255,255,10,0,3,
 28,47,1,
-17,227,1,2,
+39,
+16,0,64,0,0,227,1,2,
 51,45,1,
 51,46,1,
 51,255,255,181,0,
@@ -1288,7 +1365,8 @@
 17,67,0,
 51,255,255,27,0,3,
 28,50,1,
-17,227,1,2,
+39,
+16,0,64,0,0,227,1,2,
 51,48,1,
 51,49,1,
 51,255,255,191,0,
@@ -1299,7 +1377,8 @@
 17,67,0,
 51,255,255,231,1,3,
 28,53,1,
-17,238,1,2,
+39,
+16,0,64,0,0,238,1,2,
 51,51,1,
 51,52,1,
 51,255,255,231,1,
@@ -1310,7 +1389,8 @@
 17,67,0,
 51,255,255,244,1,3,
 28,56,1,
-17,238,1,2,
+39,
+16,0,64,0,0,238,1,2,
 51,54,1,
 51,55,1,
 51,255,255,244,1,
@@ -1318,14 +1398,16 @@
 17,55,0,
 51,255,255,10,0,3,
 28,58,1,
-17,250,1,1,
+39,
+16,0,64,0,0,250,1,1,
 51,57,1,
 51,255,255,10,0,
 54,59,1,
 17,55,0,
 51,255,255,27,0,3,
 28,60,1,
-17,250,1,1,
+39,
+16,0,64,0,0,250,1,1,
 51,59,1,
 51,255,255,27,0,
 54,61,1,
@@ -1338,7 +1420,8 @@
 17,8,2,
 51,255,255,10,0,3,
 28,64,1,
-17,13,2,3,
+39,
+16,0,64,0,0,13,2,3,
 51,61,1,
 51,62,1,
 51,63,1,
@@ -1353,7 +1436,8 @@
 17,8,2,
 51,255,255,27,0,3,
 28,68,1,
-17,13,2,3,
+39,
+16,0,64,0,0,13,2,3,
 51,65,1,
 51,66,1,
 51,67,1,
@@ -1365,7 +1449,8 @@
 17,4,2,
 51,255,255,10,0,3,
 28,71,1,
-17,25,2,2,
+39,
+16,0,64,0,0,25,2,2,
 51,69,1,
 51,70,1,
 51,255,255,10,0,
@@ -1376,7 +1461,8 @@
 17,4,2,
 51,255,255,27,0,3,
 28,74,1,
-17,25,2,2,
+39,
+16,0,64,0,0,25,2,2,
 51,72,1,
 51,73,1,
 51,255,255,27,0,
@@ -1390,7 +1476,8 @@
 17,33,2,
 51,255,255,181,0,3,
 28,78,1,
-17,37,2,3,
+39,
+16,0,64,0,0,37,2,3,
 51,75,1,
 51,76,1,
 51,77,1,
@@ -1405,7 +1492,8 @@
 17,33,2,
 51,255,255,191,0,3,
 28,82,1,
-17,37,2,3,
+39,
+16,0,64,0,0,37,2,3,
 51,79,1,
 51,80,1,
 51,81,1,
@@ -1417,7 +1505,8 @@
 17,67,0,
 51,255,255,45,2,3,
 28,85,1,
-17,56,2,2,
+39,
+16,0,64,0,0,56,2,2,
 51,83,1,
 51,84,1,
 51,255,255,45,2,
@@ -1428,7 +1517,8 @@
 17,67,0,
 51,255,255,71,2,3,
 28,88,1,
-17,56,2,2,
+39,
+16,0,64,0,0,56,2,2,
 51,86,1,
 51,87,1,
 51,255,255,71,2,
@@ -1440,7 +1530,7 @@
 51,255,255,83,2,3,
 28,91,1,
 39,
-16,0,32,0,0,56,2,2,
+16,0,96,0,0,56,2,2,
 51,89,1,
 51,90,1,
 51,255,255,83,2,
@@ -1452,7 +1542,7 @@
 51,255,255,88,2,3,
 28,94,1,
 39,
-16,0,32,0,0,56,2,2,
+16,0,96,0,0,56,2,2,
 51,92,1,
 51,93,1,
 51,255,255,88,2,
@@ -1460,14 +1550,16 @@
 17,94,2,
 51,255,255,45,2,3,
 28,96,1,
-17,96,2,1,
+39,
+16,0,64,0,0,96,2,1,
 51,95,1,
 51,255,255,45,2,
 54,97,1,
 17,94,2,
 51,255,255,71,2,3,
 28,98,1,
-17,96,2,1,
+39,
+16,0,64,0,0,96,2,1,
 51,97,1,
 51,255,255,71,2,
 54,99,1,
@@ -1475,7 +1567,7 @@
 51,255,255,45,2,3,
 28,100,1,
 39,
-16,0,32,0,0,104,2,1,
+16,0,96,0,0,104,2,1,
 51,99,1,
 51,255,255,181,0,
 54,101,1,
@@ -1483,7 +1575,7 @@
 51,255,255,71,2,3,
 28,102,1,
 39,
-16,0,32,0,0,104,2,1,
+16,0,96,0,0,104,2,1,
 51,101,1,
 51,255,255,191,0,
 54,103,1,
@@ -1491,7 +1583,7 @@
 51,255,255,45,2,3,
 28,104,1,
 39,
-16,0,32,0,0,116,2,1,
+16,0,96,0,0,116,2,1,
 51,103,1,
 51,255,255,45,2,
 54,105,1,
@@ -1499,7 +1591,7 @@
 51,255,255,71,2,3,
 28,106,1,
 39,
-16,0,32,0,0,116,2,1,
+16,0,96,0,0,116,2,1,
 51,105,1,
 51,255,255,71,2,
 54,107,1,
@@ -1507,7 +1599,7 @@
 51,255,255,126,2,3,
 28,108,1,
 39,
-16,0,32,0,0,116,2,1,
+16,0,96,0,0,116,2,1,
 51,107,1,
 51,255,255,135,2,
 54,109,1,
@@ -1515,7 +1607,7 @@
 51,255,255,144,2,3,
 28,110,1,
 39,
-16,0,32,0,0,116,2,1,
+16,0,96,0,0,116,2,1,
 51,109,1,
 51,255,255,152,2,
 54,111,1,
@@ -1523,7 +1615,7 @@
 51,255,255,160,2,3,
 28,112,1,
 39,
-16,0,32,0,0,116,2,1,
+16,0,96,0,0,116,2,1,
 51,111,1,
 51,255,255,169,2,
 54,113,1,
@@ -1531,7 +1623,7 @@
 51,255,255,178,2,3,
 28,114,1,
 39,
-16,0,32,0,0,116,2,1,
+16,0,96,0,0,116,2,1,
 51,113,1,
 51,255,255,186,2,
 54,115,1,
@@ -1539,7 +1631,7 @@
 51,255,255,135,2,3,
 28,116,1,
 39,
-16,0,32,0,0,116,2,1,
+16,0,96,0,0,116,2,1,
 51,115,1,
 51,255,255,126,2,
 54,117,1,
@@ -1547,7 +1639,7 @@
 51,255,255,152,2,3,
 28,118,1,
 39,
-16,0,32,0,0,116,2,1,
+16,0,96,0,0,116,2,1,
 51,117,1,
 51,255,255,144,2,
 54,119,1,
@@ -1555,7 +1647,7 @@
 51,255,255,194,2,3,
 28,120,1,
 39,
-16,0,32,0,0,116,2,1,
+16,0,96,0,0,116,2,1,
 51,119,1,
 51,255,255,203,2,
 54,121,1,
@@ -1563,7 +1655,7 @@
 51,255,255,212,2,3,
 28,122,1,
 39,
-16,0,32,0,0,116,2,1,
+16,0,96,0,0,116,2,1,
 51,121,1,
 51,255,255,220,2,
 54,123,1,
@@ -1571,7 +1663,7 @@
 51,255,255,169,2,3,
 28,124,1,
 39,
-16,0,32,0,0,116,2,1,
+16,0,96,0,0,116,2,1,
 51,123,1,
 51,255,255,160,2,
 54,125,1,
@@ -1579,7 +1671,7 @@
 51,255,255,186,2,3,
 28,126,1,
 39,
-16,0,32,0,0,116,2,1,
+16,0,96,0,0,116,2,1,
 51,125,1,
 51,255,255,178,2,
 54,127,1,
@@ -1587,7 +1679,7 @@
 51,255,255,203,2,3,
 28,128,1,
 39,
-16,0,32,0,0,116,2,1,
+16,0,96,0,0,116,2,1,
 51,127,1,
 51,255,255,194,2,
 54,129,1,
@@ -1595,7 +1687,7 @@
 51,255,255,220,2,3,
 28,130,1,
 39,
-16,0,32,0,0,116,2,1,
+16,0,96,0,0,116,2,1,
 51,129,1,
 51,255,255,212,2,
 54,131,1,
@@ -1606,7 +1698,7 @@
 51,255,255,230,2,3,
 28,133,1,
 39,
-16,0,32,0,0,237,2,2,
+16,0,96,0,0,237,2,2,
 51,131,1,
 51,132,1,
 51,255,255,45,2,
@@ -1618,7 +1710,7 @@
 51,255,255,250,2,3,
 28,136,1,
 39,
-16,0,32,0,0,237,2,2,
+16,0,96,0,0,237,2,2,
 51,134,1,
 51,135,1,
 51,255,255,71,2,
@@ -1630,7 +1722,7 @@
 51,255,255,166,1,3,
 28,139,1,
 39,
-16,0,32,0,0,237,2,2,
+16,0,96,0,0,237,2,2,
 51,137,1,
 51,138,1,
 51,255,255,135,2,
@@ -1642,7 +1734,7 @@
 51,255,255,0,3,3,
 28,142,1,
 39,
-16,0,32,0,0,237,2,2,
+16,0,96,0,0,237,2,2,
 51,140,1,
 51,141,1,
 51,255,255,152,2,
@@ -1654,7 +1746,7 @@
 51,255,255,231,1,3,
 28,145,1,
 39,
-16,0,32,0,0,237,2,2,
+16,0,96,0,0,237,2,2,
 51,143,1,
 51,144,1,
 51,255,255,126,2,
@@ -1666,7 +1758,7 @@
 51,255,255,244,1,3,
 28,148,1,
 39,
-16,0,32,0,0,237,2,2,
+16,0,96,0,0,237,2,2,
 51,146,1,
 51,147,1,
 51,255,255,144,2,
@@ -1678,7 +1770,7 @@
 51,255,255,166,1,3,
 28,151,1,
 39,
-16,0,32,0,0,237,2,2,
+16,0,96,0,0,237,2,2,
 51,149,1,
 51,150,1,
 51,255,255,169,2,
@@ -1690,7 +1782,7 @@
 51,255,255,0,3,3,
 28,154,1,
 39,
-16,0,32,0,0,237,2,2,
+16,0,96,0,0,237,2,2,
 51,152,1,
 51,153,1,
 51,255,255,186,2,
@@ -1702,7 +1794,7 @@
 51,255,255,6,3,3,
 28,157,1,
 39,
-16,0,32,0,0,237,2,2,
+16,0,96,0,0,237,2,2,
 51,155,1,
 51,156,1,
 51,255,255,160,2,
@@ -1714,7 +1806,7 @@
 51,255,255,13,3,3,
 28,160,1,
 39,
-16,0,32,0,0,237,2,2,
+16,0,96,0,0,237,2,2,
 51,158,1,
 51,159,1,
 51,255,255,178,2,
@@ -1726,7 +1818,7 @@
 51,255,255,231,1,3,
 28,163,1,
 39,
-16,0,32,0,0,237,2,2,
+16,0,96,0,0,237,2,2,
 51,161,1,
 51,162,1,
 51,255,255,203,2,
@@ -1738,7 +1830,7 @@
 51,255,255,244,1,3,
 28,166,1,
 39,
-16,0,32,0,0,237,2,2,
+16,0,96,0,0,237,2,2,
 51,164,1,
 51,165,1,
 51,255,255,220,2,
@@ -1750,7 +1842,7 @@
 51,255,255,6,3,3,
 28,169,1,
 39,
-16,0,32,0,0,237,2,2,
+16,0,96,0,0,237,2,2,
 51,167,1,
 51,168,1,
 51,255,255,194,2,
@@ -1762,7 +1854,7 @@
 51,255,255,13,3,3,
 28,172,1,
 39,
-16,0,32,0,0,237,2,2,
+16,0,96,0,0,237,2,2,
 51,170,1,
 51,171,1,
 51,255,255,212,2,
@@ -1773,7 +1865,8 @@
 17,67,0,
 51,255,255,230,2,3,
 28,175,1,
-17,19,3,2,
+39,
+16,0,64,0,0,19,3,2,
 51,173,1,
 51,174,1,
 51,255,255,28,3,
@@ -1784,7 +1877,8 @@
 17,67,0,
 51,255,255,250,2,3,
 28,178,1,
-17,19,3,2,
+39,
+16,0,64,0,0,19,3,2,
 51,176,1,
 51,177,1,
 51,255,255,28,3,
@@ -1795,7 +1889,8 @@
 17,67,0,
 51,255,255,34,3,3,
 28,181,1,
-17,19,3,2,
+39,
+16,0,64,0,0,19,3,2,
 51,179,1,
 51,180,1,
 51,255,255,28,3,
@@ -1806,7 +1901,8 @@
 17,67,0,
 51,255,255,230,2,3,
 28,184,1,
-17,40,3,2,
+39,
+16,0,64,0,0,40,3,2,
 51,182,1,
 51,183,1,
 51,255,255,28,3,
@@ -1817,7 +1913,8 @@
 17,67,0,
 51,255,255,250,2,3,
 28,187,1,
-17,40,3,2,
+39,
+16,0,64,0,0,40,3,2,
 51,185,1,
 51,186,1,
 51,255,255,28,3,
@@ -1828,7 +1925,8 @@
 17,67,0,
 51,255,255,34,3,3,
 28,190,1,
-17,40,3,2,
+39,
+16,0,64,0,0,40,3,2,
 51,188,1,
 51,189,1,
 51,255,255,28,3,
@@ -1839,7 +1937,8 @@
 17,67,0,
 51,255,255,230,2,3,
 28,193,1,
-17,54,3,2,
+39,
+16,0,64,0,0,54,3,2,
 51,191,1,
 51,192,1,
 51,255,255,28,3,
@@ -1850,7 +1949,8 @@
 17,67,0,
 51,255,255,250,2,3,
 28,196,1,
-17,54,3,2,
+39,
+16,0,64,0,0,54,3,2,
 51,194,1,
 51,195,1,
 51,255,255,28,3,
@@ -1861,7 +1961,8 @@
 17,67,0,
 51,255,255,34,3,3,
 28,199,1,
-17,54,3,2,
+39,
+16,0,64,0,0,54,3,2,
 51,197,1,
 51,198,1,
 51,255,255,28,3,
@@ -1872,7 +1973,8 @@
 17,67,0,
 51,255,255,230,2,3,
 28,202,1,
-17,66,3,2,
+39,
+16,0,64,0,0,66,3,2,
 51,200,1,
 51,201,1,
 51,255,255,28,3,
@@ -1883,7 +1985,8 @@
 17,67,0,
 51,255,255,250,2,3,
 28,205,1,
-17,66,3,2,
+39,
+16,0,64,0,0,66,3,2,
 51,203,1,
 51,204,1,
 51,255,255,28,3,
@@ -1894,7 +1997,8 @@
 17,67,0,
 51,255,255,34,3,3,
 28,208,1,
-17,66,3,2,
+39,
+16,0,64,0,0,66,3,2,
 51,206,1,
 51,207,1,
 51,255,255,28,3,
@@ -1905,7 +2009,8 @@
 17,67,0,
 51,255,255,230,2,3,
 28,211,1,
-17,83,3,2,
+39,
+16,0,64,0,0,83,3,2,
 51,209,1,
 51,210,1,
 51,255,255,28,3,
@@ -1916,7 +2021,8 @@
 17,67,0,
 51,255,255,250,2,3,
 28,214,1,
-17,83,3,2,
+39,
+16,0,64,0,0,83,3,2,
 51,212,1,
 51,213,1,
 51,255,255,28,3,
@@ -1927,7 +2033,8 @@
 17,67,0,
 51,255,255,34,3,3,
 28,217,1,
-17,83,3,2,
+39,
+16,0,64,0,0,83,3,2,
 51,215,1,
 51,216,1,
 51,255,255,28,3,
@@ -1938,7 +2045,8 @@
 17,67,0,
 51,255,255,28,3,3,
 28,220,1,
-17,83,3,2,
+39,
+16,0,64,0,0,83,3,2,
 51,218,1,
 51,219,1,
 51,255,255,28,3,
@@ -1949,7 +2057,8 @@
 17,67,0,
 51,255,255,230,2,3,
 28,223,1,
-17,89,3,2,
+39,
+16,0,64,0,0,89,3,2,
 51,221,1,
 51,222,1,
 51,255,255,28,3,
@@ -1960,7 +2069,8 @@
 17,67,0,
 51,255,255,250,2,3,
 28,226,1,
-17,89,3,2,
+39,
+16,0,64,0,0,89,3,2,
 51,224,1,
 51,225,1,
 51,255,255,28,3,
@@ -1971,7 +2081,8 @@
 17,67,0,
 51,255,255,34,3,3,
 28,229,1,
-17,89,3,2,
+39,
+16,0,64,0,0,89,3,2,
 51,227,1,
 51,228,1,
 51,255,255,28,3,
@@ -1982,7 +2093,8 @@
 17,67,0,
 51,255,255,28,3,3,
 28,232,1,
-17,89,3,2,
+39,
+16,0,64,0,0,89,3,2,
 51,230,1,
 51,231,1,
 51,255,255,28,3,
@@ -1990,21 +2102,24 @@
 17,55,0,
 51,255,255,28,3,3,
 28,234,1,
-17,98,3,1,
+39,
+16,0,64,0,0,98,3,1,
 51,233,1,
 51,255,255,102,3,
 54,235,1,
 17,55,0,
 51,255,255,28,3,3,
 28,236,1,
-17,107,3,1,
+39,
+16,0,64,0,0,107,3,1,
 51,235,1,
 51,255,255,102,3,
 54,237,1,
 17,55,0,
 51,255,255,28,3,3,
 28,238,1,
-17,111,3,1,
+39,
+16,0,64,0,0,111,3,1,
 51,237,1,
 51,255,255,28,3,
 54,239,1,
@@ -2012,7 +2127,7 @@
 51,255,255,10,0,3,
 28,240,1,
 39,
-16,0,32,0,0,115,3,1,
+16,0,96,0,0,115,3,1,
 51,239,1,
 51,255,255,10,0,
 54,241,1,
@@ -2020,7 +2135,7 @@
 51,255,255,10,0,3,
 28,242,1,
 39,
-16,0,32,0,0,120,3,1,
+16,0,96,0,0,120,3,1,
 51,241,1,
 51,255,255,10,0,
 54,243,1,
@@ -2028,7 +2143,7 @@
 51,255,255,27,0,3,
 28,244,1,
 39,
-16,0,32,0,0,115,3,1,
+16,0,96,0,0,115,3,1,
 51,243,1,
 51,255,255,27,0,
 54,245,1,
@@ -2036,7 +2151,7 @@
 51,255,255,27,0,3,
 28,246,1,
 39,
-16,0,32,0,0,120,3,1,
+16,0,96,0,0,120,3,1,
 51,245,1,
 51,255,255,27,0,
 54,247,1,
@@ -2044,7 +2159,7 @@
 51,255,255,10,0,3,
 28,248,1,
 39,
-16,0,32,0,0,125,3,1,
+16,0,96,0,0,125,3,1,
 51,247,1,
 51,255,255,10,0,
 54,249,1,
@@ -2052,7 +2167,7 @@
 51,255,255,27,0,3,
 28,250,1,
 39,
-16,0,32,0,0,125,3,1,
+16,0,96,0,0,125,3,1,
 51,249,1,
 51,255,255,27,0,
 54,251,1,
diff --git a/src/sksl/ir/SkSLFunctionDeclaration.cpp b/src/sksl/ir/SkSLFunctionDeclaration.cpp
index eb5dd4b..55c4e75 100644
--- a/src/sksl/ir/SkSLFunctionDeclaration.cpp
+++ b/src/sksl/ir/SkSLFunctionDeclaration.cpp
@@ -35,10 +35,10 @@
 static bool check_modifiers(const Context& context,
                             Position pos,
                             const Modifiers& modifiers) {
-    const int permitted = Modifiers::kHasSideEffects_Flag |
-                          Modifiers::kInline_Flag |
+    const int permitted = Modifiers::kInline_Flag |
                           Modifiers::kNoInline_Flag |
-                          (context.fConfig->fIsBuiltinCode ? Modifiers::kES3_Flag : 0);
+                          (context.fConfig->fIsBuiltinCode ? (Modifiers::kES3_Flag |
+                                                              Modifiers::kPure_Flag) : 0);
     modifiers.checkPermitted(context, pos, permitted, /*permittedLayoutFlags=*/0);
     if ((modifiers.fFlags & Modifiers::kInline_Flag) &&
         (modifiers.fFlags & Modifiers::kNoInline_Flag)) {
@@ -511,9 +511,9 @@
 }
 
 std::string FunctionDeclaration::description() const {
-    // We don't want to add `sk_has_side_effects` to every function description, even if it's true.
+    // We don't want to show `$pure` and `$es3` on function descriptions, even if it's true.
     int modifierFlags = this->modifiers().fFlags;
-    modifierFlags &= ~Modifiers::kHasSideEffects_Flag;
+    modifierFlags &= ~(Modifiers::kPure_Flag | Modifiers::kES3_Flag);
 
     std::string result =
             (modifierFlags ? Modifiers::DescribeFlags(modifierFlags) + " " : std::string()) +
diff --git a/src/sksl/ir/SkSLModifiers.cpp b/src/sksl/ir/SkSLModifiers.cpp
index 6d209c2..320df40 100644
--- a/src/sksl/ir/SkSLModifiers.cpp
+++ b/src/sksl/ir/SkSLModifiers.cpp
@@ -25,7 +25,7 @@
         { Modifiers::kUniform_Flag,        "uniform" },
         { Modifiers::kFlat_Flag,           "flat" },
         { Modifiers::kNoPerspective_Flag,  "noperspective" },
-        { Modifiers::kHasSideEffects_Flag, "sk_has_side_effects" },
+        { Modifiers::kPure_Flag,           "$pure" },
         { Modifiers::kInline_Flag,         "inline" },
         { Modifiers::kNoInline_Flag,       "noinline" },
         { Modifiers::kHighp_Flag,          "highp" },
diff --git a/src/sksl/ir/SkSLVarDeclarations.cpp b/src/sksl/ir/SkSLVarDeclarations.cpp
index 8a06653..e135fd7 100644
--- a/src/sksl/ir/SkSLVarDeclarations.cpp
+++ b/src/sksl/ir/SkSLVarDeclarations.cpp
@@ -258,10 +258,6 @@
             }
         }
     }
-    // This modifier isn't actually allowed on variables, at all. However, it's restricted to only
-    // appear in module code by the parser. We "allow" it here, to avoid double-reporting errors.
-    // This means that module code could put it on a variable (to no effect). We'll live with that.
-    permitted |= Modifiers::kHasSideEffects_Flag;
 
     // TODO(skbug.com/11301): Migrate above checks into building a mask of permitted layout flags
 
diff --git a/src/sksl/lex/sksl.lex b/src/sksl/lex/sksl.lex
index b766884..fc276c9 100644
--- a/src/sksl/lex/sksl.lex
+++ b/src/sksl/lex/sksl.lex
@@ -37,7 +37,7 @@
 NOPERSPECTIVE  = "noperspective"
 INLINE         = "inline"
 NOINLINE       = "noinline"
-HASSIDEEFFECTS = "sk_has_side_effects"
+PURE           = "$pure"
 READONLY       = "readonly"
 WRITEONLY      = "writeonly"
 BUFFER         = "buffer"
diff --git a/src/sksl/sksl_compute.sksl b/src/sksl/sksl_compute.sksl
index db0198c..5288f4f 100644
--- a/src/sksl/sksl_compute.sksl
+++ b/src/sksl/sksl_compute.sksl
@@ -2,10 +2,10 @@
 
 layout(builtin=28) in uint3 sk_ThreadPosition;
 
-sk_has_side_effects half4 read($readableTexture2D t, uint2 pos);
-sk_has_side_effects void write($writableTexture2D t, uint2 pos, half4 color);
+$pure half4 read($readableTexture2D t, uint2 pos);
+void write($writableTexture2D t, uint2 pos, half4 color);
 
-uint width($genTexture2D t);
-uint height($genTexture2D t);
+$pure uint width($genTexture2D t);
+$pure uint height($genTexture2D t);
 
-sk_has_side_effects void threadgroupBarrier();
+void threadgroupBarrier();
diff --git a/src/sksl/sksl_gpu.sksl b/src/sksl/sksl_gpu.sksl
index ad3ea8b..e166cdb 100644
--- a/src/sksl/sksl_gpu.sksl
+++ b/src/sksl/sksl_gpu.sksl
@@ -1,93 +1,93 @@
 // Not exposed in shared module
 
-$genIType mix($genIType x, $genIType y, $genBType a);
-$genBType mix($genBType x, $genBType y, $genBType a);
-$genType fma($genType a, $genType b, $genType c);
-$genHType fma($genHType a, $genHType b, $genHType c);
-sk_has_side_effects $genType frexp($genType x, out $genIType exp);
-sk_has_side_effects $genHType frexp($genHType x, out $genIType exp);
-$genType ldexp($genType x, in $genIType exp);
-$genHType ldexp($genHType x, in $genIType exp);
+$pure $genIType mix($genIType x, $genIType y, $genBType a);
+$pure $genBType mix($genBType x, $genBType y, $genBType a);
+$pure $genType fma($genType a, $genType b, $genType c);
+$pure $genHType fma($genHType a, $genHType b, $genHType c);
+      $genType frexp($genType x, out $genIType exp);
+      $genHType frexp($genHType x, out $genIType exp);
+$pure $genType ldexp($genType x, in $genIType exp);
+$pure $genHType ldexp($genHType x, in $genIType exp);
 
-uint packSnorm2x16(float2 v);
-uint packUnorm4x8(float4 v);
-uint packSnorm4x8(float4 v);
-float2 unpackSnorm2x16(uint p);
-float4 unpackUnorm4x8(uint p);
-float4 unpackSnorm4x8(uint p);
-uint packHalf2x16(float2 v);
-float2 unpackHalf2x16(uint v);
+$pure uint packSnorm2x16(float2 v);
+$pure uint packUnorm4x8(float4 v);
+$pure uint packSnorm4x8(float4 v);
+$pure float2 unpackSnorm2x16(uint p);
+$pure float4 unpackUnorm4x8(uint p);
+$pure float4 unpackSnorm4x8(uint p);
+$pure uint packHalf2x16(float2 v);
+$pure float2 unpackHalf2x16(uint v);
 
-$bvec lessThan($svec x, $svec y);
-$bvec lessThan($usvec x, $usvec y);
-$bvec lessThan($uvec x, $uvec y);
-$bvec lessThanEqual($uvec x, $uvec y);
-$bvec lessThanEqual($svec x, $svec y);
-$bvec lessThanEqual($usvec x, $usvec y);
-$bvec greaterThan($uvec x, $uvec y);
-$bvec greaterThan($svec x, $svec y);
-$bvec greaterThan($usvec x, $usvec y);
-$bvec greaterThanEqual($uvec x, $uvec y);
-$bvec greaterThanEqual($svec x, $svec y);
-$bvec greaterThanEqual($usvec x, $usvec y);
-$bvec equal($uvec x, $uvec y);
-$bvec equal($svec x, $svec y);
-$bvec equal($usvec x, $usvec y);
-$bvec notEqual($uvec x, $uvec y);
-$bvec notEqual($svec x, $svec y);
-$bvec notEqual($usvec x, $usvec y);
+$pure $bvec lessThan($svec x, $svec y);
+$pure $bvec lessThan($usvec x, $usvec y);
+$pure $bvec lessThan($uvec x, $uvec y);
+$pure $bvec lessThanEqual($uvec x, $uvec y);
+$pure $bvec lessThanEqual($svec x, $svec y);
+$pure $bvec lessThanEqual($usvec x, $usvec y);
+$pure $bvec greaterThan($uvec x, $uvec y);
+$pure $bvec greaterThan($svec x, $svec y);
+$pure $bvec greaterThan($usvec x, $usvec y);
+$pure $bvec greaterThanEqual($uvec x, $uvec y);
+$pure $bvec greaterThanEqual($svec x, $svec y);
+$pure $bvec greaterThanEqual($usvec x, $usvec y);
+$pure $bvec equal($uvec x, $uvec y);
+$pure $bvec equal($svec x, $svec y);
+$pure $bvec equal($usvec x, $usvec y);
+$pure $bvec notEqual($uvec x, $uvec y);
+$pure $bvec notEqual($svec x, $svec y);
+$pure $bvec notEqual($usvec x, $usvec y);
 
-$genIType bitCount($genIType value);
-$genIType bitCount($genUType value);
-$genIType findLSB($genIType value);
-$genIType findLSB($genUType value);
-$genIType findMSB($genIType value);
-$genIType findMSB($genUType value);
+$pure $genIType bitCount($genIType value);
+$pure $genIType bitCount($genUType value);
+$pure $genIType findLSB($genIType value);
+$pure $genIType findLSB($genUType value);
+$pure $genIType findMSB($genIType value);
+$pure $genIType findMSB($genUType value);
 
-sampler2D makeSampler2D(texture2D texture, sampler s);
+$pure sampler2D makeSampler2D(texture2D texture, sampler s);
 
-half4 sample(sampler2D s, float2 P);
-half4 sample(samplerExternalOES s, float2 P, float bias);
-half4 sample(samplerExternalOES s, float2 P);
+$pure half4 sample(sampler2D s, float2 P);
+$pure half4 sample(samplerExternalOES s, float2 P, float bias);
+$pure half4 sample(samplerExternalOES s, float2 P);
 
-half4 sample(sampler2DRect s, float2 P);
-half4 sample(sampler2DRect s, float3 P);
+$pure half4 sample(sampler2DRect s, float2 P);
+$pure half4 sample(sampler2DRect s, float3 P);
 
 // Currently we do not support the generic types of loading subpassInput so we have some explicit
 // versions that we currently use
-half4 subpassLoad(subpassInput subpass);
-half4 subpassLoad(subpassInputMS subpass, int sample);
+$pure half4 subpassLoad(subpassInput subpass);
+$pure half4 subpassLoad(subpassInputMS subpass, int sample);
 
-half4 sample(sampler2D s, float3 P);
-half4 sample(sampler2D s, float3 P, float bias);
+$pure half4 sample(sampler2D s, float3 P);
+$pure half4 sample(sampler2D s, float3 P, float bias);
 
 // Definitions of functions implementing all of the SkBlendMode blends.
 
-half4 blend_clear(half4 src, half4 dst) { return half4(0); }
+$pure half4 blend_clear(half4 src, half4 dst) { return half4(0); }
 
-half4 blend_src(half4 src, half4 dst) { return src; }
+$pure half4 blend_src(half4 src, half4 dst) { return src; }
 
-half4 blend_dst(half4 src, half4 dst) { return dst; }
+$pure half4 blend_dst(half4 src, half4 dst) { return dst; }
 
-half4 blend_src_over(half4 src, half4 dst) { return src + (1 - src.a)*dst; }
+$pure half4 blend_src_over(half4 src, half4 dst) { return src + (1 - src.a)*dst; }
 
-half4 blend_dst_over(half4 src, half4 dst) { return (1 - dst.a)*src + dst; }
+$pure half4 blend_dst_over(half4 src, half4 dst) { return (1 - dst.a)*src + dst; }
 
-half4 blend_src_in(half4 src, half4 dst) { return src*dst.a; }
+$pure half4 blend_src_in(half4 src, half4 dst) { return src*dst.a; }
 
-half4 blend_dst_in(half4 src, half4 dst) { return dst*src.a; }
+$pure half4 blend_dst_in(half4 src, half4 dst) { return dst*src.a; }
 
-half4 blend_src_out(half4 src, half4 dst) { return (1 - dst.a)*src; }
+$pure half4 blend_src_out(half4 src, half4 dst) { return (1 - dst.a)*src; }
 
-half4 blend_dst_out(half4 src, half4 dst) { return (1 - src.a)*dst; }
+$pure half4 blend_dst_out(half4 src, half4 dst) { return (1 - src.a)*dst; }
 
-half4 blend_src_atop(half4 src, half4 dst) { return dst.a*src + (1 - src.a)*dst; }
+$pure half4 blend_src_atop(half4 src, half4 dst) { return dst.a*src + (1 - src.a)*dst; }
 
-half4 blend_dst_atop(half4 src, half4 dst)  { return  (1 - dst.a) * src + src.a*dst; }
+$pure half4 blend_dst_atop(half4 src, half4 dst)  { return  (1 - dst.a) * src + src.a*dst; }
 
-half4 blend_xor(half4 src, half4 dst) { return (1 - dst.a)*src + (1 - src.a)*dst; }
+$pure half4 blend_xor(half4 src, half4 dst) { return (1 - dst.a)*src + (1 - src.a)*dst; }
 
-half4 blend_plus(half4 src, half4 dst) { return min(src + dst, 1); }
+$pure half4 blend_plus(half4 src, half4 dst) { return min(src + dst, 1); }
 
 // This multi-purpose Porter-Duff blend function can perform any of the thirteen blends above,
 // when passed one of the following values for BlendOp:
@@ -104,21 +104,21 @@
 // - DstATop: half4(0, 0, -1,  1)
 // - Xor:     half4(0, 0, -1, -1)
 // - Plus:    half4(1, 1,  0,  0)
-half4 blend_porter_duff(half4 blendOp, half4 src, half4 dst) {
+$pure half4 blend_porter_duff(half4 blendOp, half4 src, half4 dst) {
     half2 coeff = blendOp.xy + (blendOp.zw * (half2(dst.a, src.a) + min(blendOp.zw, 0)));
     return min(half4(1), src * coeff.x + dst * coeff.y);
 }
 
-half4 blend_modulate(half4 src, half4 dst) { return src*dst; }
+$pure half4 blend_modulate(half4 src, half4 dst) { return src*dst; }
 
-half4 blend_screen(half4 src, half4 dst) { return src + (1 - src)*dst; }
+$pure half4 blend_screen(half4 src, half4 dst) { return src + (1 - src)*dst; }
 
-half $blend_overlay_component(half2 s, half2 d) {
+$pure half $blend_overlay_component(half2 s, half2 d) {
     return (2*d.x <= d.y) ? 2*s.x*d.x
                           : s.y*d.y - 2*(d.y - d.x)*(s.y - s.x);
 }
 
-half4 blend_overlay(half4 src, half4 dst) {
+$pure half4 blend_overlay(half4 src, half4 dst) {
     half4 result = half4($blend_overlay_component(src.ra, dst.ra),
                          $blend_overlay_component(src.ga, dst.ga),
                          $blend_overlay_component(src.ba, dst.ba),
@@ -127,24 +127,24 @@
     return result;
 }
 
-half4 blend_overlay(half flip, half4 a, half4 b) {
+$pure half4 blend_overlay(half flip, half4 a, half4 b) {
     return blend_overlay(bool(flip) ? b : a, bool(flip) ? a : b);
 }
 
-half4 blend_lighten(half4 src, half4 dst) {
+$pure half4 blend_lighten(half4 src, half4 dst) {
     half4 result = blend_src_over(src, dst);
     result.rgb = max(result.rgb, (1 - dst.a)*src.rgb + dst.rgb);
     return result;
 }
 
-half4 blend_darken(half mode /* darken: 1, lighten: -1 */, half4 src, half4 dst) {
+$pure half4 blend_darken(half mode /* darken: 1, lighten: -1 */, half4 src, half4 dst) {
     half4 a = blend_src_over(src, dst);
     half3 b = (1 - dst.a) * src.rgb + dst.rgb;  // DstOver.rgb
     a.rgb = mode * min(a.rgb * mode, b.rgb * mode);
     return a;
 }
 
-half4 blend_darken(half4 src, half4 dst) {
+$pure half4 blend_darken(half4 src, half4 dst) {
    return blend_darken(1, src, dst);
 }
 
@@ -152,15 +152,15 @@
                                         ? 0.00000001
                                         : 0.0;
 
-inline half $guarded_divide(half n, half d) {
+$pure inline half $guarded_divide(half n, half d) {
     return n / (d + $kGuardedDivideEpsilon);
 }
 
-inline half3 $guarded_divide(half3 n, half d) {
+$pure inline half3 $guarded_divide(half3 n, half d) {
     return n / (d + $kGuardedDivideEpsilon);
 }
 
-half $color_dodge_component(half2 s, half2 d) {
+$pure half $color_dodge_component(half2 s, half2 d) {
     if (d.x == 0) {
         return s.x*(1 - d.y);
     } else {
@@ -174,14 +174,14 @@
     }
 }
 
-half4 blend_color_dodge(half4 src, half4 dst) {
+$pure half4 blend_color_dodge(half4 src, half4 dst) {
     return half4($color_dodge_component(src.ra, dst.ra),
                  $color_dodge_component(src.ga, dst.ga),
                  $color_dodge_component(src.ba, dst.ba),
                  src.a + (1 - src.a)*dst.a);
 }
 
-half $color_burn_component(half2 s, half2 d) {
+$pure half $color_burn_component(half2 s, half2 d) {
     if (d.y == d.x) {
         return s.y*d.y + s.x*(1 - d.y) + d.x*(1 - s.y);
     } else if (s.x == 0) {
@@ -192,18 +192,18 @@
     }
 }
 
-half4 blend_color_burn(half4 src, half4 dst) {
+$pure half4 blend_color_burn(half4 src, half4 dst) {
     return half4($color_burn_component(src.ra, dst.ra),
                  $color_burn_component(src.ga, dst.ga),
                  $color_burn_component(src.ba, dst.ba),
                  src.a + (1 - src.a)*dst.a);
 }
 
-half4 blend_hard_light(half4 src, half4 dst) {
+$pure half4 blend_hard_light(half4 src, half4 dst) {
     return blend_overlay(dst, src);
 }
 
-half $soft_light_component(half2 s, half2 d) {
+$pure half $soft_light_component(half2 s, half2 d) {
     if (2*s.x <= s.y) {
         return $guarded_divide(d.x*d.x*(s.y - 2*s.x), d.y) + (1 - d.y)*s.x + d.x*(-s.y + 2*s.x + 1);
     } else if (4.0 * d.x <= d.y) {
@@ -218,30 +218,30 @@
     }
 }
 
-half4 blend_soft_light(half4 src, half4 dst) {
+$pure half4 blend_soft_light(half4 src, half4 dst) {
     return (dst.a == 0) ? src : half4($soft_light_component(src.ra, dst.ra),
                                       $soft_light_component(src.ga, dst.ga),
                                       $soft_light_component(src.ba, dst.ba),
                                       src.a + (1 - src.a)*dst.a);
 }
 
-half4 blend_difference(half4 src, half4 dst) {
+$pure half4 blend_difference(half4 src, half4 dst) {
     return half4(src.rgb + dst.rgb - 2*min(src.rgb*dst.a, dst.rgb*src.a),
                  src.a + (1 - src.a)*dst.a);
 }
 
-half4 blend_exclusion(half4 src, half4 dst) {
+$pure half4 blend_exclusion(half4 src, half4 dst) {
     return half4(dst.rgb + src.rgb - 2*dst.rgb*src.rgb, src.a + (1 - src.a)*dst.a);
 }
 
-half4 blend_multiply(half4 src, half4 dst) {
+$pure half4 blend_multiply(half4 src, half4 dst) {
     return half4((1 - src.a)*dst.rgb + (1 - dst.a)*src.rgb + src.rgb*dst.rgb,
                  src.a + (1 - src.a)*dst.a);
 }
 
-half $blend_color_luminance(half3 color) { return dot(half3(0.3, 0.59, 0.11), color); }
+$pure half $blend_color_luminance(half3 color) { return dot(half3(0.3, 0.59, 0.11), color); }
 
-half3 $blend_set_color_luminance(half3 hueSatColor, half alpha, half3 lumColor) {
+$pure half3 $blend_set_color_luminance(half3 hueSatColor, half alpha, half3 lumColor) {
     half lum = $blend_color_luminance(lumColor);
     half3 result = lum - $blend_color_luminance(hueSatColor) + hueSatColor;
     half minComp = min(min(result.r, result.g), result.b);
@@ -255,11 +255,11 @@
     return result;
 }
 
-half $blend_color_saturation(half3 color) {
+$pure half $blend_color_saturation(half3 color) {
     return max(max(color.r, color.g), color.b) - min(min(color.r, color.g), color.b);
 }
 
-half3 $blend_set_color_saturation(half3 color, half3 satColor) {
+$pure half3 $blend_set_color_saturation(half3 color, half3 satColor) {
     half mn = min(min(color.r, color.g), color.b);
     half mx = max(max(color.r, color.g), color.b);
 
@@ -267,7 +267,7 @@
                      : half3(0);
 }
 
-half4 blend_hslc(half2 flipSat, half4 src, half4 dst) {
+$pure half4 blend_hslc(half2 flipSat, half4 src, half4 dst) {
     half alpha = dst.a * src.a;
     half3 sda = src.rgb * dst.a;
     half3 dsa = dst.rgb * src.a;
@@ -281,30 +281,30 @@
                  src.a + dst.a - alpha);
 }
 
-half4 blend_hue(half4 src, half4 dst) {
+$pure half4 blend_hue(half4 src, half4 dst) {
     return blend_hslc(half2(0, 1), src, dst);
 }
 
-half4 blend_saturation(half4 src, half4 dst) {
+$pure half4 blend_saturation(half4 src, half4 dst) {
     return blend_hslc(half2(1), src, dst);
 }
 
-half4 blend_color(half4 src, half4 dst)  {
+$pure half4 blend_color(half4 src, half4 dst)  {
     return blend_hslc(half2(0), src, dst);
 }
 
-half4 blend_luminosity(half4 src, half4 dst) {
+$pure half4 blend_luminosity(half4 src, half4 dst) {
     return blend_hslc(half2(1, 0), src, dst);
 }
 
-float2 proj(float3 p) { return p.xy / p.z; }
+$pure float2 proj(float3 p) { return p.xy / p.z; }
 
 // Implement cross() as a determinant to communicate our intent more clearly to the compiler.
 // NOTE: Due to precision issues, it might be the case that cross(a, a) != 0.
-float cross_length_2d(float2 a, float2 b) {
+$pure float cross_length_2d(float2 a, float2 b) {
     return determinant(float2x2(a, b));
 }
 
-half cross_length_2d(half2 a, half2 b) {
+$pure half cross_length_2d(half2 a, half2 b) {
     return determinant(half2x2(a, b));
 }
diff --git a/src/sksl/sksl_graphite_frag.sksl b/src/sksl/sksl_graphite_frag.sksl
index aba7678..4a89ebe 100644
--- a/src/sksl/sksl_graphite_frag.sksl
+++ b/src/sksl/sksl_graphite_frag.sksl
@@ -8,26 +8,26 @@
 const int $kFilterModeNearest = 0;
 const int $kFilterModeLinear  = 1;
 
-half4 sk_error() {
+$pure half4 sk_error() {
     return half4(1.0, 0.0, 1.0, 1.0);
 }
 
-half4 sk_passthrough(half4 color) {
+$pure half4 sk_passthrough(half4 color) {
     return color;
 }
 
-half4 sk_solid_shader(float4 colorParam) {
+$pure half4 sk_solid_shader(float4 colorParam) {
     return half4(colorParam);
 }
 
 // The localMatrix is passed to the child by the glue code. This snippet just needs to bubble the
 // child's output back up. Local coordinates are passed in from the default glue code and can
 // just be ignored here.
-half4 sk_local_matrix_shader(float4, float4x4, half4 childResult) {
+$pure half4 sk_local_matrix_shader(float4, float4x4, half4 childResult) {
     return childResult;
 }
 
-float $tile(int tileMode, float f, float low, float high) {
+$pure float $tile(int tileMode, float f, float low, float high) {
     switch (tileMode) {
         case $kTileModeClamp:
             return clamp(f, low, high);
@@ -48,15 +48,15 @@
     }
 }
 
-half4 sk_image_shader(float4 coords,
-                      float4x4 preLocal,
-                      float4 subset,
-                      int tileModeX,
-                      int tileModeY,
-                      int filterMode,
-                      int imgWidth,
-                      int imgHeight,
-                      sampler2D s) {
+$pure half4 sk_image_shader(float4 coords,
+                            float4x4 preLocal,
+                            float4 subset,
+                            int tileModeX,
+                            int tileModeY,
+                            int filterMode,
+                            int imgWidth,
+                            int imgHeight,
+                            sampler2D s) {
     float2 pos = (preLocal * coords).xy;
 
     // Do hard-edge shader transitions to the border color for nearest-neighbor decal tiling at the
@@ -105,7 +105,7 @@
     return color;
 }
 
-float2 $tile_grad(int tileMode, float2 t) {
+$pure float2 $tile_grad(int tileMode, float2 t) {
     switch (tileMode) {
         case $kTileModeClamp:
             t.x = clamp(t.x, 0, 1);
@@ -138,7 +138,7 @@
     return t;
 }
 
-half4 $colorize_grad_4(float4 colorsParam[4], float offsetsParam[4], float2 t) {
+$pure half4 $colorize_grad_4(float4 colorsParam[4], float offsetsParam[4], float2 t) {
     if (t.y < 0) {
         return half4(0);
 
@@ -158,7 +158,7 @@
     }
 }
 
-half4 $colorize_grad_8(float4 colorsParam[8], float offsetsParam[8], float2 t) {
+$pure half4 $colorize_grad_8(float4 colorsParam[8], float offsetsParam[8], float2 t) {
     if (t.y < 0) {
         return half4(0);
 
@@ -211,19 +211,19 @@
     }
 }
 
-float2 $linear_grad_layout(float2 point0Param, float2 point1Param, float2 pos) {
+$pure float2 $linear_grad_layout(float2 point0Param, float2 point1Param, float2 pos) {
     pos -= point0Param;
     float2 delta = point1Param - point0Param;
     float t = dot(pos, delta) / dot(delta, delta);
     return float2(t, 1);
 }
 
-float2 $radial_grad_layout(float2 centerParam, float radiusParam, float2 pos) {
+$pure float2 $radial_grad_layout(float2 centerParam, float radiusParam, float2 pos) {
     float t = distance(pos, centerParam) / radiusParam;
     return float2(t, 1);
 }
 
-float2 $sweep_grad_layout(float2 centerParam, float biasParam, float scaleParam, float2 pos) {
+$pure float2 $sweep_grad_layout(float2 centerParam, float biasParam, float scaleParam, float2 pos) {
     pos -= centerParam;
 
     // Some devices incorrectly implement atan2(y,x) as atan(y/x). In actuality it is
@@ -239,7 +239,7 @@
     return float2(t, 1);
 }
 
-float3x3 $map_to_unit_x(float2 p0, float2 p1) {
+$pure float3x3 $map_to_unit_x(float2 p0, float2 p1) {
     // Returns a matrix that maps [p0, p1] to [(0, 0), (1, 0)]. Results are undefined if p0 = p1.
     // From skia/src/core/SkMatrix.cpp, SkMatrix::setPolyToPoly.
     return float3x3(
@@ -253,11 +253,11 @@
     ));
 }
 
-float2 $conical_grad_layout(float2 point0Param,
-                            float2 point1Param,
-                            float radius0Param,
-                            float radius1Param,
-                            float2 pos) {
+$pure float2 $conical_grad_layout(float2 point0Param,
+                                  float2 point1Param,
+                                  float radius0Param,
+                                  float radius1Param,
+                                  float2 pos) {
     const float SK_ScalarNearlyZero = 1.0 / (1 << 12);
     float dCenter = distance(point0Param, point1Param);
     float dRadius = radius1Param - radius0Param;
@@ -366,120 +366,117 @@
     }
 }
 
-half4 sk_linear_grad_4_shader(float4 coords,
-                              float4x4 preLocal,
-                              float4 colorsParam[4],
-                              float offsetsParam[4],
-                              float2 point0Param,
-                              float2 point1Param,
-                              int tileMode) {
+$pure half4 sk_linear_grad_4_shader(float4 coords,
+                                    float4x4 preLocal,
+                                    float4 colorsParam[4],
+                                    float offsetsParam[4],
+                                    float2 point0Param,
+                                    float2 point1Param,
+                                    int tileMode) {
     float2 pos = (preLocal * coords).xy;
     float2 t = $linear_grad_layout(point0Param, point1Param, pos);
     t = $tile_grad(tileMode, t);
     return $colorize_grad_4(colorsParam, offsetsParam, t);
 }
 
-half4 sk_linear_grad_8_shader(float4 coords,
-                              float4x4 preLocal,
-                              float4 colorsParam[8],
-                              float offsetsParam[8],
-                              float2 point0Param,
-                              float2 point1Param,
-                              int tileMode) {
+$pure half4 sk_linear_grad_8_shader(float4 coords,
+                                    float4x4 preLocal,
+                                    float4 colorsParam[8],
+                                    float offsetsParam[8],
+                                    float2 point0Param,
+                                    float2 point1Param,
+                                    int tileMode) {
     float2 pos = (preLocal * coords).xy;
     float2 t = $linear_grad_layout(point0Param, point1Param, pos);
     t = $tile_grad(tileMode, t);
     return $colorize_grad_8(colorsParam, offsetsParam, t);
 }
 
-half4 sk_radial_grad_4_shader(float4 coords,
-                              float4x4 preLocal,
-                              float4 colorsParam[4],
-                              float offsetsParam[4],
-                              float2 centerParam,
-                              float radiusParam,
-                              int tileMode) {
+$pure half4 sk_radial_grad_4_shader(float4 coords,
+                                    float4x4 preLocal,
+                                    float4 colorsParam[4],
+                                    float offsetsParam[4],
+                                    float2 centerParam,
+                                    float radiusParam,
+                                    int tileMode) {
     float2 pos = (preLocal * coords).xy;
     float2 t = $radial_grad_layout(centerParam, radiusParam, pos);
     t = $tile_grad(tileMode, t);
     return $colorize_grad_4(colorsParam, offsetsParam, t);
 }
 
-half4 sk_radial_grad_8_shader(float4 coords,
-                              float4x4 preLocal,
-                              float4 colorsParam[8],
-                              float offsetsParam[8],
-                              float2 centerParam,
-                              float radiusParam,
-                              int tileMode) {
+$pure half4 sk_radial_grad_8_shader(float4 coords,
+                                    float4x4 preLocal,
+                                    float4 colorsParam[8],
+                                    float offsetsParam[8],
+                                    float2 centerParam,
+                                    float radiusParam,
+                                    int tileMode) {
     float2 pos = (preLocal * coords).xy;
     float2 t = $radial_grad_layout(centerParam, radiusParam, pos);
     t = $tile_grad(tileMode, t);
     return $colorize_grad_8(colorsParam, offsetsParam, t);
 }
 
-half4 sk_sweep_grad_4_shader(float4 coords,
-                             float4x4 preLocal,
-                             float4 colorsParam[4],
-                             float offsetsParam[4],
-                             float2 centerParam,
-                             float biasParam,
-                             float scaleParam,
-                             int tileMode) {
+$pure half4 sk_sweep_grad_4_shader(float4 coords,
+                                   float4x4 preLocal,
+                                   float4 colorsParam[4],
+                                   float offsetsParam[4],
+                                   float2 centerParam,
+                                   float biasParam,
+                                   float scaleParam,
+                                   int tileMode) {
     float2 pos = (preLocal * coords).xy;
     float2 t = $sweep_grad_layout(centerParam, biasParam, scaleParam, pos);
     t = $tile_grad(tileMode, t);
     return $colorize_grad_4(colorsParam, offsetsParam, t);
 }
 
-half4 sk_sweep_grad_8_shader(float4 coords,
-                             float4x4 preLocal,
-                             float4 colorsParam[8],
-                             float offsetsParam[8],
-                             float2 centerParam,
-                             float biasParam,
-                             float scaleParam,
-                             int tileMode) {
+$pure half4 sk_sweep_grad_8_shader(float4 coords,
+                                   float4x4 preLocal,
+                                   float4 colorsParam[8],
+                                   float offsetsParam[8],
+                                   float2 centerParam,
+                                   float biasParam,
+                                   float scaleParam,
+                                   int tileMode) {
     float2 pos = (preLocal * coords).xy;
     float2 t = $sweep_grad_layout(centerParam, biasParam, scaleParam, pos);
     t = $tile_grad(tileMode, t);
     return $colorize_grad_8(colorsParam, offsetsParam, t);
 }
 
-half4 sk_conical_grad_4_shader(float4 coords,
-                               float4x4 preLocal,
-                               float4 colorsParam[4],
-                               float offsetsParam[4],
-                               float2 point0Param,
-                               float2 point1Param,
-                               float radius0Param,
-                               float radius1Param,
-                               int tileMode) {
+$pure half4 sk_conical_grad_4_shader(float4 coords,
+                                     float4x4 preLocal,
+                                     float4 colorsParam[4],
+                                     float offsetsParam[4],
+                                     float2 point0Param,
+                                     float2 point1Param,
+                                     float radius0Param,
+                                     float radius1Param,
+                                     int tileMode) {
     float2 pos = (preLocal * coords).xy;
     float2 t = $conical_grad_layout(point0Param, point1Param, radius0Param, radius1Param, pos);
     t = $tile_grad(tileMode, t);
     return $colorize_grad_4(colorsParam, offsetsParam, t);
 }
 
-half4 sk_conical_grad_8_shader(float4 coords,
-                               float4x4 preLocal,
-                               float4 colorsParam[8],
-                               float offsetsParam[8],
-                               float2 point0Param,
-                               float2 point1Param,
-                               float radius0Param,
-                               float radius1Param,
-                               int tileMode) {
+$pure half4 sk_conical_grad_8_shader(float4 coords,
+                                     float4x4 preLocal,
+                                     float4 colorsParam[8],
+                                     float offsetsParam[8],
+                                     float2 point0Param,
+                                     float2 point1Param,
+                                     float radius0Param,
+                                     float radius1Param,
+                                     int tileMode) {
     float2 pos = (preLocal * coords).xy;
     float2 t = $conical_grad_layout(point0Param, point1Param, radius0Param, radius1Param, pos);
     t = $tile_grad(tileMode, t);
     return $colorize_grad_8(colorsParam, offsetsParam, t);
 }
 
-half4 sk_matrix_colorfilter(half4 colorIn,
-                            float4x4 m,
-                            float4 v,
-                            int inHSLA) {
+$pure half4 sk_matrix_colorfilter(half4 colorIn, float4x4 m, float4 v, int inHSLA) {
     if (bool(inHSLA)) {
         colorIn = $rgb_to_hsl(colorIn.rgb, colorIn.a); // includes unpremul
     } else {
@@ -498,7 +495,7 @@
     return colorOut;
 }
 
-half4 sk_blend(int blendMode, half4 src, half4 dst) {
+$pure half4 sk_blend(int blendMode, half4 src, half4 dst) {
     const int kClear      = 0;
     const int kSrc        = 1;
     const int kDst        = 2;
@@ -563,15 +560,15 @@
     }
 }
 
-half4 sk_blend_shader(int blendMode, half4 src, half4 dst) {
+$pure half4 sk_blend_shader(int blendMode, half4 src, half4 dst) {
     return sk_blend(blendMode, src, dst);
 }
 
-half4 sk_blend_colorfilter(half4 dstColor, int blendMode, float4 srcColor) {
+$pure half4 sk_blend_colorfilter(half4 dstColor, int blendMode, float4 srcColor) {
     return sk_blend(blendMode, half4(srcColor), dstColor);
 }
 
-half4 sk_table_colorfilter(half4 inColor, sampler2D s) {
+$pure half4 sk_table_colorfilter(half4 inColor, sampler2D s) {
     half4 coords = unpremul(inColor) * 255.0/256.0 + 0.5/256.0;
     half4 color = half4(sample(s, half2(coords.r, 3.0/8.0)).r,
                         sample(s, half2(coords.g, 5.0/8.0)).r,
@@ -580,7 +577,7 @@
     return color * sample(s, half2(coords.a, 1.0/8.0)).r;
 }
 
-half4 sk_gaussian_colorfilter(half4 inColor) {
+$pure half4 sk_gaussian_colorfilter(half4 inColor) {
     half factor = 1 - inColor.a;
     factor = exp(-factor * factor * 4) - 0.018;
     return half4(factor);
diff --git a/src/sksl/sksl_graphite_vert.sksl b/src/sksl/sksl_graphite_vert.sksl
index d8470cc..14d76c3 100644
--- a/src/sksl/sksl_graphite_vert.sksl
+++ b/src/sksl/sksl_graphite_vert.sksl
@@ -20,26 +20,26 @@
                                ($kPrecision * $kPrecision);
 
 // Returns the length squared of the largest forward difference from Wang's cubic formula.
-float wangs_formula_max_fdiff_p2(float2 p0, float2 p1, float2 p2, float2 p3,
-                                 float2x2 matrix) {
+$pure float wangs_formula_max_fdiff_p2(float2 p0, float2 p1, float2 p2, float2 p3,
+                                       float2x2 matrix) {
     float2 d0 = matrix * (fma(float2(-2), p1, p2) + p0);
     float2 d1 = matrix * (fma(float2(-2), p2, p3) + p1);
     return max(dot(d0,d0), dot(d1,d1));
 }
 
-float wangs_formula_cubic(float2 p0, float2 p1, float2 p2, float2 p3,
-                          float2x2 matrix) {
+$pure float wangs_formula_cubic(float2 p0, float2 p1, float2 p2, float2 p3,
+                                float2x2 matrix) {
     float m = wangs_formula_max_fdiff_p2(p0, p1, p2, p3, matrix);
     return max(ceil(sqrt($kLengthTerm * sqrt(m))), 1.0);
 }
 
-float wangs_formula_cubic_log2(float2 p0, float2 p1, float2 p2, float2 p3,
-                               float2x2 matrix) {
+$pure float wangs_formula_cubic_log2(float2 p0, float2 p1, float2 p2, float2 p3,
+                                     float2x2 matrix) {
     float m = wangs_formula_max_fdiff_p2(p0, p1, p2, p3, matrix);
     return ceil(log2(max($kLengthTermPow2 * m, 1.0)) * .25);
 }
 
-float wangs_formula_conic_p2(float2 p0, float2 p1, float2 p2, float w) {
+$pure float wangs_formula_conic_p2(float2 p0, float2 p1, float2 p2, float w) {
     // Translate the bounding box center to the origin.
     float2 C = (min(min(p0, p1), p2) + max(max(p0, p1), p2)) * 0.5;
     p0 -= C;
@@ -62,19 +62,19 @@
     return numer/denom;
 }
 
-float wangs_formula_conic(float2 p0, float2 p1, float2 p2, float w) {
+$pure float wangs_formula_conic(float2 p0, float2 p1, float2 p2, float w) {
     float n2 = wangs_formula_conic_p2(p0, p1, p2, w);
     return max(ceil(sqrt(n2)), 1.0);
 }
 
-float wangs_formula_conic_log2(float2 p0, float2 p1, float2 p2, float w) {
+$pure float wangs_formula_conic_log2(float2 p0, float2 p1, float2 p2, float w) {
     float n2 = wangs_formula_conic_p2(p0, p1, p2, w);
     return ceil(log2(max(n2, 1.0)) * .5);
 }
 
 // Returns the normalized difference between a and b, i.e. normalize(a - b), with care taken for
 // if 'a' and/or 'b' have large coordinates.
-float2 robust_normalize_diff(float2 a, float2 b) {
+$pure float2 robust_normalize_diff(float2 a, float2 b) {
     float2 diff = a - b;
     if (diff == float2(0.0)) {
         return float2(0.0);
@@ -86,7 +86,7 @@
 
 // Returns the cosine of the angle between a and b, assuming a and b are unit vectors already.
 // Guaranteed to be between [-1, 1].
-float cosine_between_unit_vectors(float2 a, float2 b) {
+$pure float cosine_between_unit_vectors(float2 a, float2 b) {
     // Since a and b are assumed to be normalized, the cosine is equal to the dot product, although
     // we clamp that to ensure it falls within the expected range of [-1, 1].
     return clamp(dot(a, b), -1.0, 1.0);
@@ -94,35 +94,35 @@
 
 // Extends the middle radius to either the miter point, or the bevel edge if we surpassed the
 // miter limit and need to revert to a bevel join.
-float miter_extent(float cosTheta, float miterLimit) {
+$pure float miter_extent(float cosTheta, float miterLimit) {
     float x = fma(cosTheta, .5, .5);
     return (x * miterLimit * miterLimit >= 1.0) ? inversesqrt(x) : sqrt(x);
 }
 
 // Returns the number of radial segments required for each radian of rotation, in order for the
 // curve to appear "smooth" as defined by the approximate device-space stroke radius.
-float num_radial_segments_per_radian(float approxDevStrokeRadius) {
+$pure float num_radial_segments_per_radian(float approxDevStrokeRadius) {
     return .5 / acos(max(1.0 - (1.0 / $kPrecision) / approxDevStrokeRadius, -1.0));
 }
 
 // Unlike mix(), this does not return b when t==1. But it otherwise seems to get better
 // precision than "a*(1 - t) + b*t" for things like chopping cubics on exact cusp points.
 // We override this result anyway when t==1 so it shouldn't be a problem.
-float unchecked_mix(float a, float b, float T) {
+$pure float unchecked_mix(float a, float b, float T) {
     return fma(b - a, T, a);
 }
-float2 unchecked_mix(float2 a, float2 b, float T) {
+$pure float2 unchecked_mix(float2 a, float2 b, float T) {
     return fma(b - a, float2(T), a);
 }
-float4 unchecked_mix(float4 a, float4 b, float4 T) {
+$pure float4 unchecked_mix(float4 a, float4 b, float4 T) {
     return fma(b - a, T, a);
 }
 
 // Compute a vertex position for the curve described by p01 and p23 packed control points,
 // tessellated to the given resolve level, and assuming it will be drawn as a filled curve.
-float2 tessellate_filled_curve(float2x2 vectorXform,
-                               float resolveLevel, float idxInResolveLevel,
-                               float4 p01, float4 p23) {
+$pure float2 tessellate_filled_curve(float2x2 vectorXform,
+                                     float resolveLevel, float idxInResolveLevel,
+                                     float4 p01, float4 p23) {
     float2 localcoord;
     if (isinf(p23.z)) {
         // This patch is an exact triangle.
@@ -182,13 +182,13 @@
 }
 
 // Device coords are in xy, local coords are in zw, since for now perspective isn't supported.
-float4 tessellate_stroked_curve(float edgeID, float maxEdges,
-                                float2x2 affineMatrix,
-                                float2 translate,
-                                float maxScale /* derived from affineMatrix */,
-                                float4 p01, float4 p23,
-                                float2 lastControlPoint,
-                                float2 strokeParams) {
+$pure float4 tessellate_stroked_curve(float edgeID, float maxEdges,
+                                      float2x2 affineMatrix,
+                                      float2 translate,
+                                      float maxScale /* derived from affineMatrix */,
+                                      float4 p01, float4 p23,
+                                      float2 lastControlPoint,
+                                      float2 strokeParams) {
     float2 p0=p01.xy, p1=p01.zw, p2=p23.xy, p3=p23.zw;
     float w = -1;  // w<0 means the curve is an integral cubic.
     if (isinf(p23.w)) {
diff --git a/src/sksl/sksl_public.sksl b/src/sksl/sksl_public.sksl
index 9225815..1168612 100644
--- a/src/sksl/sksl_public.sksl
+++ b/src/sksl/sksl_public.sksl
@@ -1,10 +1,10 @@
 // SkSL intrinsics that are not part of GLSL
 
 // Color space transformation, between the working (destination) space and fixed (known) spaces:
-half3 toLinearSrgb(half3 color);
-half3 fromLinearSrgb(half3 color);
+$pure half3 toLinearSrgb(half3 color);
+$pure half3 fromLinearSrgb(half3 color);
 
 // SkSL intrinsics that reflect Skia's C++ object model:
-half4 $eval(float2 coords, shader s);
-half4 $eval(half4 color, colorFilter f);
-half4 $eval(half4 src, half4 dst, blender b);
+      half4 $eval(float2 coords, shader s);
+      half4 $eval(half4 color, colorFilter f);
+      half4 $eval(half4 src, half4 dst, blender b);
diff --git a/src/sksl/sksl_shared.sksl b/src/sksl/sksl_shared.sksl
index d0b62c0..08f1af6 100644
--- a/src/sksl/sksl_shared.sksl
+++ b/src/sksl/sksl_shared.sksl
@@ -3,237 +3,237 @@
 // See "The OpenGL ES Shading Language, Section 8"
 
 // 8.1 : Angle and Trigonometry Functions
-$genType  radians($genType  degrees);
-$genHType radians($genHType degrees);
-$genType  degrees($genType  radians);
-$genHType degrees($genHType radians);
+$pure $genType  radians($genType  degrees);
+$pure $genHType radians($genHType degrees);
+$pure $genType  degrees($genType  radians);
+$pure $genHType degrees($genHType radians);
 
-$genType  sin($genType  angle);
-$genHType sin($genHType angle);
-$genType  cos($genType  angle);
-$genHType cos($genHType angle);
-$genType  tan($genType  angle);
-$genHType tan($genHType angle);
+$pure $genType  sin($genType  angle);
+$pure $genHType sin($genHType angle);
+$pure $genType  cos($genType  angle);
+$pure $genHType cos($genHType angle);
+$pure $genType  tan($genType  angle);
+$pure $genHType tan($genHType angle);
 
-$genType  asin($genType  x);
-$genHType asin($genHType x);
-$genType  acos($genType  x);
-$genHType acos($genHType x);
-$genType  atan($genType  y, $genType  x);
-$genHType atan($genHType y, $genHType x);
-$genType  atan($genType  y_over_x);
-$genHType atan($genHType y_over_x);
+$pure $genType  asin($genType  x);
+$pure $genHType asin($genHType x);
+$pure $genType  acos($genType  x);
+$pure $genHType acos($genHType x);
+$pure $genType  atan($genType  y, $genType  x);
+$pure $genHType atan($genHType y, $genHType x);
+$pure $genType  atan($genType  y_over_x);
+$pure $genHType atan($genHType y_over_x);
 
 // 8.1 : Angle and Trigonometry Functions (GLSL ES 3.0)
-$es3 $genType  sinh($genType x);
-$es3 $genHType sinh($genHType x);
-$es3 $genType  cosh($genType x);
-$es3 $genHType cosh($genHType x);
-$es3 $genType  tanh($genType x);
-$es3 $genHType tanh($genHType x);
-$es3 $genType  asinh($genType x);
-$es3 $genHType asinh($genHType x);
-$es3 $genType  acosh($genType x);
-$es3 $genHType acosh($genHType x);
-$es3 $genType  atanh($genType x);
-$es3 $genHType atanh($genHType x);
+$pure $es3 $genType  sinh($genType x);
+$pure $es3 $genHType sinh($genHType x);
+$pure $es3 $genType  cosh($genType x);
+$pure $es3 $genHType cosh($genHType x);
+$pure $es3 $genType  tanh($genType x);
+$pure $es3 $genHType tanh($genHType x);
+$pure $es3 $genType  asinh($genType x);
+$pure $es3 $genHType asinh($genHType x);
+$pure $es3 $genType  acosh($genType x);
+$pure $es3 $genHType acosh($genHType x);
+$pure $es3 $genType  atanh($genType x);
+$pure $es3 $genHType atanh($genHType x);
 
 // 8.2 : Exponential Functions
-$genType  pow($genType  x, $genType  y);
-$genHType pow($genHType x, $genHType y);
-$genType  exp($genType  x);
-$genHType exp($genHType x);
-$genType  log($genType  x);
-$genHType log($genHType x);
-$genType  exp2($genType  x);
-$genHType exp2($genHType x);
-$genType  log2($genType  x);
-$genHType log2($genHType x);
+$pure $genType  pow($genType  x, $genType  y);
+$pure $genHType pow($genHType x, $genHType y);
+$pure $genType  exp($genType  x);
+$pure $genHType exp($genHType x);
+$pure $genType  log($genType  x);
+$pure $genHType log($genHType x);
+$pure $genType  exp2($genType  x);
+$pure $genHType exp2($genHType x);
+$pure $genType  log2($genType  x);
+$pure $genHType log2($genHType x);
 
-$genType  sqrt($genType  x);
-$genHType sqrt($genHType x);
-$genType  inversesqrt($genType  x);
-$genHType inversesqrt($genHType x);
+$pure $genType  sqrt($genType  x);
+$pure $genHType sqrt($genHType x);
+$pure $genType  inversesqrt($genType  x);
+$pure $genHType inversesqrt($genHType x);
 
 // 8.3 : Common Functions
-$genType  abs($genType  x);
-$genHType abs($genHType x);
-$genType  sign($genType  x);
-$genHType sign($genHType x);
-$genType  floor($genType  x);
-$genHType floor($genHType x);
-$genType  ceil($genType  x);
-$genHType ceil($genHType x);
-$genType  fract($genType  x);
-$genHType fract($genHType x);
-$genType  mod($genType  x, float     y);
-$genType  mod($genType  x, $genType  y);
-$genHType mod($genHType x, half      y);
-$genHType mod($genHType x, $genHType y);
+$pure $genType  abs($genType  x);
+$pure $genHType abs($genHType x);
+$pure $genType  sign($genType  x);
+$pure $genHType sign($genHType x);
+$pure $genType  floor($genType  x);
+$pure $genHType floor($genHType x);
+$pure $genType  ceil($genType  x);
+$pure $genHType ceil($genHType x);
+$pure $genType  fract($genType  x);
+$pure $genHType fract($genHType x);
+$pure $genType  mod($genType  x, float     y);
+$pure $genType  mod($genType  x, $genType  y);
+$pure $genHType mod($genHType x, half      y);
+$pure $genHType mod($genHType x, $genHType y);
 
-$genType  min($genType  x, $genType  y);
-$genType  min($genType  x, float     y);
-$genHType min($genHType x, $genHType y);
-$genHType min($genHType x, half      y);
-$genType  max($genType  x, $genType  y);
-$genType  max($genType  x, float     y);
-$genHType max($genHType x, $genHType y);
-$genHType max($genHType x, half      y);
-$genType  clamp($genType  x, $genType  minVal, $genType  maxVal);
-$genType  clamp($genType  x, float     minVal, float     maxVal);
-$genHType clamp($genHType x, $genHType minVal, $genHType maxVal);
-$genHType clamp($genHType x, half      minVal, half      maxVal);
-$genType  saturate($genType  x);  // SkSL extension
-$genHType saturate($genHType x);  // SkSL extension
-$genType  mix($genType  x, $genType  y, $genType a);
-$genType  mix($genType  x, $genType  y, float a);
-$genHType mix($genHType x, $genHType y, $genHType a);
-$genHType mix($genHType x, $genHType y, half a);
-$genType  step($genType  edge, $genType x);
-$genType  step(float     edge, $genType x);
-$genHType step($genHType edge, $genHType x);
-$genHType step(half      edge, $genHType x);
-$genType  smoothstep($genType  edge0, $genType  edge1, $genType  x);
-$genType  smoothstep(float     edge0, float     edge1, $genType  x);
-$genHType smoothstep($genHType edge0, $genHType edge1, $genHType x);
-$genHType smoothstep(half      edge0, half      edge1, $genHType x);
+$pure $genType  min($genType  x, $genType  y);
+$pure $genType  min($genType  x, float     y);
+$pure $genHType min($genHType x, $genHType y);
+$pure $genHType min($genHType x, half      y);
+$pure $genType  max($genType  x, $genType  y);
+$pure $genType  max($genType  x, float     y);
+$pure $genHType max($genHType x, $genHType y);
+$pure $genHType max($genHType x, half      y);
+$pure $genType  clamp($genType  x, $genType  minVal, $genType  maxVal);
+$pure $genType  clamp($genType  x, float     minVal, float     maxVal);
+$pure $genHType clamp($genHType x, $genHType minVal, $genHType maxVal);
+$pure $genHType clamp($genHType x, half      minVal, half      maxVal);
+$pure $genType  saturate($genType  x);  // SkSL extension
+$pure $genHType saturate($genHType x);  // SkSL extension
+$pure $genType  mix($genType  x, $genType  y, $genType a);
+$pure $genType  mix($genType  x, $genType  y, float a);
+$pure $genHType mix($genHType x, $genHType y, $genHType a);
+$pure $genHType mix($genHType x, $genHType y, half a);
+$pure $genType  step($genType  edge, $genType x);
+$pure $genType  step(float     edge, $genType x);
+$pure $genHType step($genHType edge, $genHType x);
+$pure $genHType step(half      edge, $genHType x);
+$pure $genType  smoothstep($genType  edge0, $genType  edge1, $genType  x);
+$pure $genType  smoothstep(float     edge0, float     edge1, $genType  x);
+$pure $genHType smoothstep($genHType edge0, $genHType edge1, $genHType x);
+$pure $genHType smoothstep(half      edge0, half      edge1, $genHType x);
 
 // 8.3 : Common Functions (GLSL ES 3.0)
-$es3 $genIType abs($genIType x);
-$es3 $genIType sign($genIType x);
-$es3 $genIType floatBitsToInt ($genType  value);
-$es3 $genUType floatBitsToUint($genType  value);
-$es3 $genType  intBitsToFloat ($genIType value);
-$es3 $genType  uintBitsToFloat($genUType value);
-$es3 $genType  trunc($genType  x);
-$es3 $genHType trunc($genHType x);
-$es3 $genType  round($genType  x);
-$es3 $genHType round($genHType x);
-$es3 $genType  roundEven($genType  x);
-$es3 $genHType roundEven($genHType x);
-$es3 $genIType min($genIType x, $genIType y);
-$es3 $genIType min($genIType x, int y);
-$es3 $genIType max($genIType x, $genIType y);
-$es3 $genIType max($genIType x, int y);
-$es3 $genIType clamp($genIType x, $genIType minVal, $genIType maxVal);
-$es3 $genIType clamp($genIType x, int minVal, int maxVal);
-$es3 $genUType clamp($genUType x, $genUType minVal, $genUType maxVal);
-$es3 $genUType clamp($genUType x, uint minVal, uint maxVal);
-$es3 $genType  mix($genType  x, $genType  y, $genBType a);
-$es3 $genHType mix($genHType x, $genHType y, $genBType a);
+$pure $es3 $genIType abs($genIType x);
+$pure $es3 $genIType sign($genIType x);
+$pure $es3 $genIType floatBitsToInt ($genType  value);
+$pure $es3 $genUType floatBitsToUint($genType  value);
+$pure $es3 $genType  intBitsToFloat ($genIType value);
+$pure $es3 $genType  uintBitsToFloat($genUType value);
+$pure $es3 $genType  trunc($genType  x);
+$pure $es3 $genHType trunc($genHType x);
+$pure $es3 $genType  round($genType  x);
+$pure $es3 $genHType round($genHType x);
+$pure $es3 $genType  roundEven($genType  x);
+$pure $es3 $genHType roundEven($genHType x);
+$pure $es3 $genIType min($genIType x, $genIType y);
+$pure $es3 $genIType min($genIType x, int y);
+$pure $es3 $genIType max($genIType x, $genIType y);
+$pure $es3 $genIType max($genIType x, int y);
+$pure $es3 $genIType clamp($genIType x, $genIType minVal, $genIType maxVal);
+$pure $es3 $genIType clamp($genIType x, int minVal, int maxVal);
+$pure $es3 $genUType clamp($genUType x, $genUType minVal, $genUType maxVal);
+$pure $es3 $genUType clamp($genUType x, uint minVal, uint maxVal);
+$pure $es3 $genType  mix($genType  x, $genType  y, $genBType a);
+$pure $es3 $genHType mix($genHType x, $genHType y, $genBType a);
 
 // 8.3 : Common Functions (GLSL ES 3.0) -- cannot be used in constant-expressions
-$es3 $genBType isnan($genType  x);
-$es3 $genBType isnan($genHType x);
-$es3 $genBType isinf($genType  x);
-$es3 $genBType isinf($genHType x);
-$es3 $genType  modf($genType  x, out $genType  i);
-$es3 $genHType modf($genHType x, out $genHType i);
+$pure $es3 $genBType isnan($genType  x);
+$pure $es3 $genBType isnan($genHType x);
+$pure $es3 $genBType isinf($genType  x);
+$pure $es3 $genBType isinf($genHType x);
+$pure $es3 $genType  modf($genType  x, out $genType  i);
+$pure $es3 $genHType modf($genHType x, out $genHType i);
 
 // 8.4 : Floating-Point Pack and Unpack Functions (GLSL ES 3.0)
-$es3 uint packUnorm2x16(float2 v);
-$es3 float2 unpackUnorm2x16(uint p);
+$pure $es3 uint packUnorm2x16(float2 v);
+$pure $es3 float2 unpackUnorm2x16(uint p);
 
 // 8.5 : Geometric Functions
-float length($genType  x);
-half  length($genHType x);
-float distance($genType  p0, $genType  p1);
-half  distance($genHType p0, $genHType p1);
-float dot($genType  x, $genType  y);
-half  dot($genHType x, $genHType y);
-float3 cross(float3 x, float3 y);
-half3  cross(half3  x, half3  y);
-$genType  normalize($genType  x);
-$genHType normalize($genHType x);
-$genType  faceforward($genType  N, $genType  I, $genType  Nref);
-$genHType faceforward($genHType N, $genHType I, $genHType Nref);
-$genType  reflect($genType  I, $genType  N);
-$genHType reflect($genHType I, $genHType N);
-$genType  refract($genType  I, $genType  N, float eta);
-$genHType refract($genHType I, $genHType N, half eta);
+$pure float length($genType  x);
+$pure half  length($genHType x);
+$pure float distance($genType  p0, $genType  p1);
+$pure half  distance($genHType p0, $genHType p1);
+$pure float dot($genType  x, $genType  y);
+$pure half  dot($genHType x, $genHType y);
+$pure float3 cross(float3 x, float3 y);
+$pure half3  cross(half3  x, half3  y);
+$pure $genType  normalize($genType  x);
+$pure $genHType normalize($genHType x);
+$pure $genType  faceforward($genType  N, $genType  I, $genType  Nref);
+$pure $genHType faceforward($genHType N, $genHType I, $genHType Nref);
+$pure $genType  reflect($genType  I, $genType  N);
+$pure $genHType reflect($genHType I, $genHType N);
+$pure $genType  refract($genType  I, $genType  N, float eta);
+$pure $genHType refract($genHType I, $genHType N, half eta);
 
 // 8.6 : Matrix Functions
-$squareMat  matrixCompMult($squareMat  x, $squareMat  y);
-$squareHMat matrixCompMult($squareHMat x, $squareHMat y);
-$es3 $mat   matrixCompMult($mat x, $mat y);
-$es3 $hmat  matrixCompMult($hmat x, $hmat y);
+$pure $squareMat  matrixCompMult($squareMat  x, $squareMat  y);
+$pure $squareHMat matrixCompMult($squareHMat x, $squareHMat y);
+$pure $es3 $mat   matrixCompMult($mat x, $mat y);
+$pure $es3 $hmat  matrixCompMult($hmat x, $hmat y);
 
 // 8.6 : Matrix Functions (GLSL 1.4, poly-filled by SkSL as needed)
-$squareMat  inverse($squareMat  m);
-$squareHMat inverse($squareHMat m);
+$pure $squareMat  inverse($squareMat  m);
+$pure $squareHMat inverse($squareHMat m);
 
 // 8.6 : Matrix Functions (GLSL ES 3.0)
-$es3 float       determinant($squareMat m);
-$es3 half        determinant($squareHMat m);
-$es3 $squareMat  transpose($squareMat  m);
-$es3 $squareHMat transpose($squareHMat m);
-$es3 float2x3    transpose(float3x2 m);
-$es3 half2x3     transpose(half3x2  m);
-$es3 float2x4    transpose(float4x2 m);
-$es3 half2x4     transpose(half4x2  m);
-$es3 float3x2    transpose(float2x3 m);
-$es3 half3x2     transpose(half2x3  m);
-$es3 float3x4    transpose(float4x3 m);
-$es3 half3x4     transpose(half4x3  m);
-$es3 float4x2    transpose(float2x4 m);
-$es3 half4x2     transpose(half2x4  m);
-$es3 float4x3    transpose(float3x4 m);
-$es3 half4x3     transpose(half3x4  m);
-$es3 $squareMat  outerProduct($vec   c, $vec   r);
-$es3 $squareHMat outerProduct($hvec  c, $hvec  r);
-$es3 float2x3    outerProduct(float3 c, float2 r);
-$es3 half2x3     outerProduct(half3  c, half2  r);
-$es3 float3x2    outerProduct(float2 c, float3 r);
-$es3 half3x2     outerProduct(half2  c, half3  r);
-$es3 float2x4    outerProduct(float4 c, float2 r);
-$es3 half2x4     outerProduct(half4  c, half2  r);
-$es3 float4x2    outerProduct(float2 c, float4 r);
-$es3 half4x2     outerProduct(half2  c, half4  r);
-$es3 float3x4    outerProduct(float4 c, float3 r);
-$es3 half3x4     outerProduct(half4  c, half3  r);
-$es3 float4x3    outerProduct(float3 c, float4 r);
-$es3 half4x3     outerProduct(half3  c, half4  r);
+$pure $es3 float       determinant($squareMat m);
+$pure $es3 half        determinant($squareHMat m);
+$pure $es3 $squareMat  transpose($squareMat  m);
+$pure $es3 $squareHMat transpose($squareHMat m);
+$pure $es3 float2x3    transpose(float3x2 m);
+$pure $es3 half2x3     transpose(half3x2  m);
+$pure $es3 float2x4    transpose(float4x2 m);
+$pure $es3 half2x4     transpose(half4x2  m);
+$pure $es3 float3x2    transpose(float2x3 m);
+$pure $es3 half3x2     transpose(half2x3  m);
+$pure $es3 float3x4    transpose(float4x3 m);
+$pure $es3 half3x4     transpose(half4x3  m);
+$pure $es3 float4x2    transpose(float2x4 m);
+$pure $es3 half4x2     transpose(half2x4  m);
+$pure $es3 float4x3    transpose(float3x4 m);
+$pure $es3 half4x3     transpose(half3x4  m);
+$pure $es3 $squareMat  outerProduct($vec   c, $vec   r);
+$pure $es3 $squareHMat outerProduct($hvec  c, $hvec  r);
+$pure $es3 float2x3    outerProduct(float3 c, float2 r);
+$pure $es3 half2x3     outerProduct(half3  c, half2  r);
+$pure $es3 float3x2    outerProduct(float2 c, float3 r);
+$pure $es3 half3x2     outerProduct(half2  c, half3  r);
+$pure $es3 float2x4    outerProduct(float4 c, float2 r);
+$pure $es3 half2x4     outerProduct(half4  c, half2  r);
+$pure $es3 float4x2    outerProduct(float2 c, float4 r);
+$pure $es3 half4x2     outerProduct(half2  c, half4  r);
+$pure $es3 float3x4    outerProduct(float4 c, float3 r);
+$pure $es3 half3x4     outerProduct(half4  c, half3  r);
+$pure $es3 float4x3    outerProduct(float3 c, float4 r);
+$pure $es3 half4x3     outerProduct(half3  c, half4  r);
 
 // 8.7 : Vector Relational Functions
-$bvec lessThan($vec  x, $vec  y);
-$bvec lessThan($hvec x, $hvec y);
-$bvec lessThan($ivec x, $ivec y);
-$bvec lessThanEqual($vec  x, $vec  y);
-$bvec lessThanEqual($hvec x, $hvec y);
-$bvec lessThanEqual($ivec x, $ivec y);
-$bvec greaterThan($vec  x, $vec  y);
-$bvec greaterThan($hvec x, $hvec y);
-$bvec greaterThan($ivec x, $ivec y);
-$bvec greaterThanEqual($vec  x, $vec  y);
-$bvec greaterThanEqual($hvec x, $hvec y);
-$bvec greaterThanEqual($ivec x, $ivec y);
-$bvec equal($vec  x, $vec  y);
-$bvec equal($hvec x, $hvec y);
-$bvec equal($ivec x, $ivec y);
-$bvec equal($bvec x, $bvec y);
-$bvec notEqual($vec  x, $vec  y);
-$bvec notEqual($hvec x, $hvec y);
-$bvec notEqual($ivec x, $ivec y);
-$bvec notEqual($bvec x, $bvec y);
+$pure $bvec lessThan($vec  x, $vec  y);
+$pure $bvec lessThan($hvec x, $hvec y);
+$pure $bvec lessThan($ivec x, $ivec y);
+$pure $bvec lessThanEqual($vec  x, $vec  y);
+$pure $bvec lessThanEqual($hvec x, $hvec y);
+$pure $bvec lessThanEqual($ivec x, $ivec y);
+$pure $bvec greaterThan($vec  x, $vec  y);
+$pure $bvec greaterThan($hvec x, $hvec y);
+$pure $bvec greaterThan($ivec x, $ivec y);
+$pure $bvec greaterThanEqual($vec  x, $vec  y);
+$pure $bvec greaterThanEqual($hvec x, $hvec y);
+$pure $bvec greaterThanEqual($ivec x, $ivec y);
+$pure $bvec equal($vec  x, $vec  y);
+$pure $bvec equal($hvec x, $hvec y);
+$pure $bvec equal($ivec x, $ivec y);
+$pure $bvec equal($bvec x, $bvec y);
+$pure $bvec notEqual($vec  x, $vec  y);
+$pure $bvec notEqual($hvec x, $hvec y);
+$pure $bvec notEqual($ivec x, $ivec y);
+$pure $bvec notEqual($bvec x, $bvec y);
 
-bool  any($bvec x);
-bool  all($bvec x);
-$bvec not($bvec x);
+$pure bool  any($bvec x);
+$pure bool  all($bvec x);
+$pure $bvec not($bvec x);
 
 // 8.9 : Fragment Processing Functions (GLSL ES 3.0)
-$es3 $genType  dFdx($genType p);
-$es3 $genType  dFdy($genType p);
-$es3 $genHType dFdx($genHType p);
-$es3 $genHType dFdy($genHType p);
-$es3 $genType  fwidth($genType p);
-$es3 $genHType fwidth($genHType p);
+$pure $es3 $genType  dFdx($genType p);
+$pure $es3 $genType  dFdy($genType p);
+$pure $es3 $genHType dFdx($genHType p);
+$pure $es3 $genHType dFdy($genHType p);
+$pure $es3 $genType  fwidth($genType p);
+$pure $es3 $genHType fwidth($genHType p);
 
 
 // SkSL utility functions
 
 // The max() guards against division by zero when the incoming color is transparent black
-half4  unpremul(half4  color) { return half4 (color.rgb / max(color.a, 0.0001), color.a); }
-float4 unpremul(float4 color) { return float4(color.rgb / max(color.a, 0.0001), color.a); }
+$pure half4  unpremul(half4  color) { return half4 (color.rgb / max(color.a, 0.0001), color.a); }
+$pure float4 unpremul(float4 color) { return float4(color.rgb / max(color.a, 0.0001), color.a); }
 
 // Convert RGBA -> HSLA (including unpremul).
 //
@@ -255,7 +255,7 @@
 // [2] http://lolengine.net/blog/2013/07/27/rgb-to-hsv-in-glsl
 // [3] http://www.chilliant.com/rgb2hsv.html
 
-half4 $rgb_to_hsl(half3 c, half a) {
+$pure half4 $rgb_to_hsl(half3 c, half a) {
     half4 p = (c.g < c.b) ? half4(c.bg, -1,  2/3.0)
                           : half4(c.gb,  0, -1/3.0);
     half4 q = (c.r < p.x) ? half4(p.x, c.r, p.yw)
@@ -284,7 +284,7 @@
 // [2] http://lolengine.net/blog/2013/07/27/rgb-to-hsv-in-glsl
 // [3] http://www.chilliant.com/rgb2hsv.html
 
-half3 $hsl_to_rgb(half3 hsl) {
+$pure half3 $hsl_to_rgb(half3 hsl) {
     half      C = (1 - abs(2 * hsl.z - 1)) * hsl.y;
     half3     p = hsl.xxx + half3(0, 2/3.0, 1/3.0);
     half3     q = saturate(abs(fract(p) * 6 - 3) - 1);
@@ -292,6 +292,6 @@
     return (q - 0.5) * C + hsl.z;
 }
 
-half4 $hsl_to_rgb(half3 hsl, half a) {
+$pure half4 $hsl_to_rgb(half3 hsl, half a) {
     return saturate(half4($hsl_to_rgb(hsl) * a, a));
 }
diff --git a/tests/sksl/errors/BadModifiers.glsl b/tests/sksl/errors/BadModifiers.glsl
index 4f228c6..ea00692 100644
--- a/tests/sksl/errors/BadModifiers.glsl
+++ b/tests/sksl/errors/BadModifiers.glsl
@@ -1,89 +1,83 @@
 ### Compilation failed:
 
-error: 1: 'sk_has_side_effects' is not permitted here
-const in out uniform flat noperspective sk_has_side_effects inline noinline readonly writeonly
-                                        ^^^^^^^^^^^^^^^^^^^
 error: 1: type 'void' does not support qualifier 'readonly writeonly'
-const in out uniform flat noperspective sk_has_side_effects inline noinline readonly writeonly
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
+const in out uniform flat noperspective $pure inline noinline readonly writeonly
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
 error: 1: 'const' is not permitted here
-const in out uniform flat noperspective sk_has_side_effects inline noinline readonly writeonly
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
+const in out uniform flat noperspective $pure inline noinline readonly writeonly
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
 error: 1: 'in' is not permitted here
-const in out uniform flat noperspective sk_has_side_effects inline noinline readonly writeonly
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
+const in out uniform flat noperspective $pure inline noinline readonly writeonly
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
 error: 1: 'out' is not permitted here
-const in out uniform flat noperspective sk_has_side_effects inline noinline readonly writeonly
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
+const in out uniform flat noperspective $pure inline noinline readonly writeonly
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
 error: 1: 'uniform' is not permitted here
-const in out uniform flat noperspective sk_has_side_effects inline noinline readonly writeonly
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
+const in out uniform flat noperspective $pure inline noinline readonly writeonly
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
 error: 1: 'flat' is not permitted here
-const in out uniform flat noperspective sk_has_side_effects inline noinline readonly writeonly
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
+const in out uniform flat noperspective $pure inline noinline readonly writeonly
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
 error: 1: 'noperspective' is not permitted here
-const in out uniform flat noperspective sk_has_side_effects inline noinline readonly writeonly
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
+const in out uniform flat noperspective $pure inline noinline readonly writeonly
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
+error: 1: '$pure' is not permitted here
+const in out uniform flat noperspective $pure inline noinline readonly writeonly
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
 error: 1: 'buffer' is not permitted here
-const in out uniform flat noperspective sk_has_side_effects inline noinline readonly writeonly
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
+const in out uniform flat noperspective $pure inline noinline readonly writeonly
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
 error: 1: functions cannot be both 'inline' and 'noinline'
-const in out uniform flat noperspective sk_has_side_effects inline noinline readonly writeonly
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
-error: 4: 'sk_has_side_effects' is not permitted here
-void func2(const in out uniform flat noperspective sk_has_side_effects
-                                                   ^^^^^^^^^^^^^^^^^^^
+const in out uniform flat noperspective $pure inline noinline readonly writeonly
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
 error: 4: type 'float' does not support qualifier 'readonly writeonly'
-void func2(const in out uniform flat noperspective sk_has_side_effects
-           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
+void func2(const in out uniform flat noperspective $pure
+           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
 error: 4: 'uniform' is not permitted here
-void func2(const in out uniform flat noperspective sk_has_side_effects
-           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
+void func2(const in out uniform flat noperspective $pure
+           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
 error: 4: 'flat' is not permitted here
-void func2(const in out uniform flat noperspective sk_has_side_effects
-           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
+void func2(const in out uniform flat noperspective $pure
+           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
 error: 4: 'noperspective' is not permitted here
-void func2(const in out uniform flat noperspective sk_has_side_effects
-           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
-error: 4: 'sk_has_side_effects' is not permitted here
-void func2(const in out uniform flat noperspective sk_has_side_effects
-           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
+void func2(const in out uniform flat noperspective $pure
+           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
+error: 4: '$pure' is not permitted here
+void func2(const in out uniform flat noperspective $pure
+           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
 error: 4: 'inline' is not permitted here
-void func2(const in out uniform flat noperspective sk_has_side_effects
-           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
+void func2(const in out uniform flat noperspective $pure
+           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
 error: 4: 'noinline' is not permitted here
-void func2(const in out uniform flat noperspective sk_has_side_effects
-           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
+void func2(const in out uniform flat noperspective $pure
+           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
 error: 4: 'buffer' is not permitted here
-void func2(const in out uniform flat noperspective sk_has_side_effects
-           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
-error: 7: 'sk_has_side_effects' is not permitted here
-const in out uniform flat noperspective sk_has_side_effects inline noinline readonly writeonly
-                                        ^^^^^^^^^^^^^^^^^^^
+void func2(const in out uniform flat noperspective $pure
+           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
 error: 7: type 'float' does not support qualifier 'readonly writeonly'
-const in out uniform flat noperspective sk_has_side_effects inline noinline readonly writeonly
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
+const in out uniform flat noperspective $pure inline noinline readonly writeonly
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
 error: 7: 'in uniform' variables not permitted
-const in out uniform flat noperspective sk_has_side_effects inline noinline readonly writeonly
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
+const in out uniform flat noperspective $pure inline noinline readonly writeonly
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
 error: 7: 'uniform buffer' variables not permitted
-const in out uniform flat noperspective sk_has_side_effects inline noinline readonly writeonly
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
+const in out uniform flat noperspective $pure inline noinline readonly writeonly
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
+error: 7: '$pure' is not permitted here
+const in out uniform flat noperspective $pure inline noinline readonly writeonly
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
 error: 7: 'inline' is not permitted here
-const in out uniform flat noperspective sk_has_side_effects inline noinline readonly writeonly
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
+const in out uniform flat noperspective $pure inline noinline readonly writeonly
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
 error: 7: 'noinline' is not permitted here
-const in out uniform flat noperspective sk_has_side_effects inline noinline readonly writeonly
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
+const in out uniform flat noperspective $pure inline noinline readonly writeonly
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
 error: 7: 'buffer' is not permitted here
-const in out uniform flat noperspective sk_has_side_effects inline noinline readonly writeonly
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
+const in out uniform flat noperspective $pure inline noinline readonly writeonly
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
 error: 7: 'const' variables must be initialized
-const in out uniform flat noperspective sk_has_side_effects inline noinline readonly writeonly
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
-error: 10: 'sk_has_side_effects' is not permitted here
-const in out uniform flat noperspective sk_has_side_effects inline noinline readonly writeonly
-                                        ^^^^^^^^^^^^^^^^^^^
+const in out uniform flat noperspective $pure inline noinline readonly writeonly
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
 error: 11: 'in uniform' variables not permitted
 buffer MyInterfaceBlock { float var; };
        ^^^^^^^^^^^^^^^^
@@ -93,13 +87,16 @@
 error: 11: 'uniform buffer' variables not permitted
 buffer MyInterfaceBlock { float var; };
        ^^^^^^^^^^^^^^^^
+error: 10: '$pure' is not permitted here
+const in out uniform flat noperspective $pure inline noinline readonly writeonly
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
 error: 10: 'inline' is not permitted here
-const in out uniform flat noperspective sk_has_side_effects inline noinline readonly writeonly
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
+const in out uniform flat noperspective $pure inline noinline readonly writeonly
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
 error: 10: 'noinline' is not permitted here
-const in out uniform flat noperspective sk_has_side_effects inline noinline readonly writeonly
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
+const in out uniform flat noperspective $pure inline noinline readonly writeonly
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
 error: 11: 'const' variables must be initialized
 buffer MyInterfaceBlock { float var; };
        ^^^^^^^^^^^^^^^^
-34 errors
+33 errors
diff --git a/tests/sksl/runtime_errors/IllegalModifiers.skvm b/tests/sksl/runtime_errors/IllegalModifiers.skvm
index c263181..b86e7b3 100644
--- a/tests/sksl/runtime_errors/IllegalModifiers.skvm
+++ b/tests/sksl/runtime_errors/IllegalModifiers.skvm
@@ -18,9 +18,9 @@
 error: 6: '$es3' is not permitted here
 $es3                float _es3;
 ^^^^
-error: 7: 'sk_has_side_effects' is not permitted here
-sk_has_side_effects float _sk_has_side_effects;
-^^^^^^^^^^^^^^^^^^^
+error: 7: '$pure' is not permitted here
+$pure               float _pure;
+^^^^^
 error: 8: 'inline' is not permitted here
 inline              float _inline;
 ^^^^^^
@@ -51,9 +51,9 @@
 error: 18: '$es3' is not permitted here
 $es3                void es3_fn() {}
 ^^^^
-error: 19: 'sk_has_side_effects' is not permitted here
-sk_has_side_effects void sk_has_side_effect_fn() {}
-^^^^^^^^^^^^^^^^^^^
+error: 19: '$pure' is not permitted here
+$pure               void sk_pure_fn() {}
+^^^^^
 error: 20: type 'void' does not support qualifier 'readonly'
 readonly            void readonly_fn() {}
 ^^^^^^^^