@luma.gl/shadertools 9.1.9 → 9.2.0-alpha.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/dist.dev.js +1614 -3716
- package/dist/dist.min.js +278 -484
- package/dist/index.cjs +366 -804
- package/dist/index.cjs.map +4 -4
- package/dist/index.d.ts +0 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -10
- package/dist/index.js.map +1 -1
- package/dist/lib/shader-assembly/assemble-shaders.d.ts +6 -4
- package/dist/lib/shader-assembly/assemble-shaders.d.ts.map +1 -1
- package/dist/lib/shader-assembly/assemble-shaders.js +14 -9
- package/dist/lib/shader-assembly/assemble-shaders.js.map +1 -1
- package/dist/lib/shader-assembly/platform-info.d.ts +1 -1
- package/dist/lib/shader-assembly/platform-info.d.ts.map +1 -1
- package/dist/lib/shader-module/shader-module.d.ts +1 -1
- package/dist/lib/shader-module/shader-module.d.ts.map +1 -1
- package/dist/lib/wgsl/get-shader-layout-wgsl.d.ts.map +1 -1
- package/dist/lib/wgsl/get-shader-layout-wgsl.js +3 -1
- package/dist/lib/wgsl/get-shader-layout-wgsl.js.map +1 -1
- package/dist/modules/engine/project/project.d.ts.map +1 -1
- package/dist/modules/engine/project/project.js +4 -2
- package/dist/modules/engine/project/project.js.map +1 -1
- package/dist/modules/lighting/gouraud-material/gouraud-material.js +1 -1
- package/dist/modules/lighting/gouraud-material/gouraud-material.js.map +1 -1
- package/dist/modules/lighting/lights/{lighting-uniforms-glsl.d.ts → lighting-glsl.d.ts} +1 -1
- package/dist/modules/lighting/lights/lighting-glsl.d.ts.map +1 -0
- package/dist/modules/lighting/lights/{lighting-uniforms-glsl.js → lighting-glsl.js} +1 -1
- package/dist/modules/lighting/lights/lighting-glsl.js.map +1 -0
- package/dist/modules/lighting/lights/{lighting-uniforms-wgsl.d.ts → lighting-wgsl.d.ts} +1 -1
- package/dist/modules/lighting/lights/lighting-wgsl.d.ts.map +1 -0
- package/dist/modules/lighting/lights/{lighting-uniforms-wgsl.js → lighting-wgsl.js} +1 -1
- package/dist/modules/lighting/lights/lighting-wgsl.js.map +1 -0
- package/dist/modules/lighting/lights/lighting.d.ts +1 -3
- package/dist/modules/lighting/lights/lighting.d.ts.map +1 -1
- package/dist/modules/lighting/lights/lighting.js +4 -4
- package/dist/modules/lighting/lights/lighting.js.map +1 -1
- package/dist/modules/lighting/no-material/dirlight.d.ts.map +1 -1
- package/dist/modules/lighting/no-material/dirlight.js +1 -2
- package/dist/modules/lighting/no-material/dirlight.js.map +1 -1
- package/dist/modules/lighting/pbr-material/{pbr-fragment-glsl.d.ts → pbr-material-glsl.d.ts} +2 -1
- package/dist/modules/lighting/pbr-material/pbr-material-glsl.d.ts.map +1 -0
- package/dist/modules/lighting/pbr-material/{pbr-fragment-glsl.js → pbr-material-glsl.js} +36 -1
- package/dist/modules/lighting/pbr-material/pbr-material-glsl.js.map +1 -0
- package/dist/modules/lighting/pbr-material/pbr-material-wgsl.d.ts +3 -0
- package/dist/modules/lighting/pbr-material/pbr-material-wgsl.d.ts.map +1 -0
- package/dist/modules/lighting/pbr-material/pbr-material-wgsl.js +487 -0
- package/dist/modules/lighting/pbr-material/pbr-material-wgsl.js.map +1 -0
- package/dist/modules/lighting/pbr-material/pbr-material.d.ts +11 -4
- package/dist/modules/lighting/pbr-material/pbr-material.d.ts.map +1 -1
- package/dist/modules/lighting/pbr-material/pbr-material.js +12 -12
- package/dist/modules/lighting/pbr-material/pbr-material.js.map +1 -1
- package/dist/modules/lighting/pbr-material/pbr-projection.d.ts.map +1 -1
- package/dist/modules/lighting/pbr-material/pbr-projection.js.map +1 -1
- package/dist/modules/lighting/phong-material/phong-material.js +1 -1
- package/dist/modules/lighting/phong-material/phong-material.js.map +1 -1
- package/dist/modules/lighting/phong-material/phong-shaders-glsl.d.ts +1 -1
- package/dist/modules/lighting/phong-material/phong-shaders-glsl.d.ts.map +1 -1
- package/dist/modules/lighting/phong-material/phong-shaders-glsl.js +2 -0
- package/dist/modules/lighting/phong-material/phong-shaders-glsl.js.map +1 -1
- package/dist/modules/math/random/random.d.ts +1 -0
- package/dist/modules/math/random/random.d.ts.map +1 -1
- package/dist/modules/math/random/random.js +7 -0
- package/dist/modules/math/random/random.js.map +1 -1
- package/package.json +3 -3
- package/src/index.ts +0 -17
- package/src/lib/shader-assembly/assemble-shaders.ts +12 -11
- package/src/lib/shader-assembly/platform-info.ts +1 -1
- package/src/lib/shader-module/shader-module.ts +1 -1
- package/src/lib/wgsl/get-shader-layout-wgsl.ts +7 -5
- package/src/modules/engine/project/project.ts +8 -5
- package/src/modules/lighting/gouraud-material/gouraud-material.ts +1 -1
- package/src/modules/lighting/lights/lighting.ts +4 -4
- package/src/modules/lighting/no-material/dirlight.ts +2 -3
- package/src/modules/lighting/pbr-material/{pbr-fragment-glsl.ts → pbr-material-glsl.ts} +36 -1
- package/src/modules/lighting/pbr-material/pbr-material-wgsl.ts +490 -0
- package/src/modules/lighting/pbr-material/pbr-material.ts +12 -12
- package/src/modules/lighting/pbr-material/pbr-projection.ts +0 -2
- package/src/modules/lighting/phong-material/phong-material.ts +1 -1
- package/src/modules/lighting/phong-material/phong-shaders-glsl.ts +2 -0
- package/src/modules/math/random/random.ts +8 -0
- package/dist/modules/lighting/lights/lighting-uniforms-glsl.d.ts.map +0 -1
- package/dist/modules/lighting/lights/lighting-uniforms-glsl.js.map +0 -1
- package/dist/modules/lighting/lights/lighting-uniforms-wgsl.d.ts.map +0 -1
- package/dist/modules/lighting/lights/lighting-uniforms-wgsl.js.map +0 -1
- package/dist/modules/lighting/pbr-material/pbr-fragment-glsl.d.ts.map +0 -1
- package/dist/modules/lighting/pbr-material/pbr-fragment-glsl.js.map +0 -1
- package/dist/modules/lighting/pbr-material/pbr-uniforms-glsl.d.ts +0 -2
- package/dist/modules/lighting/pbr-material/pbr-uniforms-glsl.d.ts.map +0 -1
- package/dist/modules/lighting/pbr-material/pbr-uniforms-glsl.js +0 -67
- package/dist/modules/lighting/pbr-material/pbr-uniforms-glsl.js.map +0 -1
- package/dist/modules/lighting/pbr-material/pbr-vertex-glsl.d.ts +0 -2
- package/dist/modules/lighting/pbr-material/pbr-vertex-glsl.d.ts.map +0 -1
- package/dist/modules/lighting/pbr-material/pbr-vertex-glsl.js +0 -39
- package/dist/modules/lighting/pbr-material/pbr-vertex-glsl.js.map +0 -1
- package/dist/modules/module-injectors.d.ts +0 -3
- package/dist/modules/module-injectors.d.ts.map +0 -1
- package/dist/modules/module-injectors.js +0 -31
- package/dist/modules/module-injectors.js.map +0 -1
- package/dist/modules-webgl1/geometry/geometry.d.ts +0 -9
- package/dist/modules-webgl1/geometry/geometry.d.ts.map +0 -1
- package/dist/modules-webgl1/geometry/geometry.js +0 -39
- package/dist/modules-webgl1/geometry/geometry.js.map +0 -1
- package/dist/modules-webgl1/lighting/dirlight/dirlight.d.ts +0 -10
- package/dist/modules-webgl1/lighting/dirlight/dirlight.d.ts.map +0 -1
- package/dist/modules-webgl1/lighting/dirlight/dirlight.js +0 -38
- package/dist/modules-webgl1/lighting/dirlight/dirlight.js.map +0 -1
- package/dist/modules-webgl1/lighting/lights/lights-glsl.d.ts +0 -2
- package/dist/modules-webgl1/lighting/lights/lights-glsl.d.ts.map +0 -1
- package/dist/modules-webgl1/lighting/lights/lights-glsl.js +0 -40
- package/dist/modules-webgl1/lighting/lights/lights-glsl.js.map +0 -1
- package/dist/modules-webgl1/lighting/lights/lights.d.ts +0 -38
- package/dist/modules-webgl1/lighting/lights/lights.d.ts.map +0 -1
- package/dist/modules-webgl1/lighting/lights/lights.js +0 -93
- package/dist/modules-webgl1/lighting/lights/lights.js.map +0 -1
- package/dist/modules-webgl1/lighting/pbr/pbr-fragment-glsl.d.ts +0 -2
- package/dist/modules-webgl1/lighting/pbr/pbr-fragment-glsl.d.ts.map +0 -1
- package/dist/modules-webgl1/lighting/pbr/pbr-fragment-glsl.js +0 -393
- package/dist/modules-webgl1/lighting/pbr/pbr-fragment-glsl.js.map +0 -1
- package/dist/modules-webgl1/lighting/pbr/pbr-vertex-glsl.d.ts +0 -2
- package/dist/modules-webgl1/lighting/pbr/pbr-vertex-glsl.d.ts.map +0 -1
- package/dist/modules-webgl1/lighting/pbr/pbr-vertex-glsl.js +0 -43
- package/dist/modules-webgl1/lighting/pbr/pbr-vertex-glsl.js.map +0 -1
- package/dist/modules-webgl1/lighting/pbr/pbr.d.ts +0 -23
- package/dist/modules-webgl1/lighting/pbr/pbr.d.ts.map +0 -1
- package/dist/modules-webgl1/lighting/pbr/pbr.js +0 -21
- package/dist/modules-webgl1/lighting/pbr/pbr.js.map +0 -1
- package/dist/modules-webgl1/lighting/phong-lighting/phong-lighting-glsl.d.ts +0 -2
- package/dist/modules-webgl1/lighting/phong-lighting/phong-lighting-glsl.d.ts.map +0 -1
- package/dist/modules-webgl1/lighting/phong-lighting/phong-lighting-glsl.js +0 -79
- package/dist/modules-webgl1/lighting/phong-lighting/phong-lighting-glsl.js.map +0 -1
- package/dist/modules-webgl1/lighting/phong-lighting/phong-lighting.d.ts +0 -45
- package/dist/modules-webgl1/lighting/phong-lighting/phong-lighting.d.ts.map +0 -1
- package/dist/modules-webgl1/lighting/phong-lighting/phong-lighting.js +0 -44
- package/dist/modules-webgl1/lighting/phong-lighting/phong-lighting.js.map +0 -1
- package/dist/modules-webgl1/math/fp64/fp64-arithmetic-glsl.d.ts +0 -2
- package/dist/modules-webgl1/math/fp64/fp64-arithmetic-glsl.d.ts.map +0 -1
- package/dist/modules-webgl1/math/fp64/fp64-arithmetic-glsl.js +0 -171
- package/dist/modules-webgl1/math/fp64/fp64-arithmetic-glsl.js.map +0 -1
- package/dist/modules-webgl1/math/fp64/fp64-functions-glsl.d.ts +0 -2
- package/dist/modules-webgl1/math/fp64/fp64-functions-glsl.d.ts.map +0 -1
- package/dist/modules-webgl1/math/fp64/fp64-functions-glsl.js +0 -675
- package/dist/modules-webgl1/math/fp64/fp64-functions-glsl.js.map +0 -1
- package/dist/modules-webgl1/math/fp64/fp64.d.ts +0 -35
- package/dist/modules-webgl1/math/fp64/fp64.d.ts.map +0 -1
- package/dist/modules-webgl1/math/fp64/fp64.js +0 -38
- package/dist/modules-webgl1/math/fp64/fp64.js.map +0 -1
- package/dist/modules-webgl1/project/project.d.ts +0 -20
- package/dist/modules-webgl1/project/project.d.ts.map +0 -1
- package/dist/modules-webgl1/project/project.js +0 -114
- package/dist/modules-webgl1/project/project.js.map +0 -1
- package/src/modules/lighting/pbr-material/pbr-uniforms-glsl.ts +0 -67
- package/src/modules/lighting/pbr-material/pbr-vertex-glsl.ts +0 -39
- package/src/modules/module-injectors.ts +0 -32
- package/src/modules-webgl1/geometry/geometry.ts +0 -41
- package/src/modules-webgl1/lighting/dirlight/dirlight.ts +0 -50
- package/src/modules-webgl1/lighting/lights/lights-glsl.ts +0 -40
- package/src/modules-webgl1/lighting/lights/lights.ts +0 -143
- package/src/modules-webgl1/lighting/pbr/README.md +0 -12
- package/src/modules-webgl1/lighting/pbr/pbr-fragment-glsl.ts +0 -396
- package/src/modules-webgl1/lighting/pbr/pbr-vertex-glsl.ts +0 -43
- package/src/modules-webgl1/lighting/pbr/pbr.ts +0 -23
- package/src/modules-webgl1/lighting/phong-lighting/phong-lighting-glsl.ts +0 -79
- package/src/modules-webgl1/lighting/phong-lighting/phong-lighting.ts +0 -64
- package/src/modules-webgl1/math/fp64/fp64-arithmetic-glsl.ts +0 -171
- package/src/modules-webgl1/math/fp64/fp64-functions-glsl.ts +0 -675
- package/src/modules-webgl1/math/fp64/fp64.ts +0 -44
- package/src/modules-webgl1/project/README.md +0 -52
- package/src/modules-webgl1/project/project.ts +0 -135
- /package/src/modules/lighting/lights/{lighting-uniforms-glsl.ts → lighting-glsl.ts} +0 -0
- /package/src/modules/lighting/lights/{lighting-uniforms-wgsl.ts → lighting-wgsl.ts} +0 -0
|
@@ -1,171 +0,0 @@
|
|
|
1
|
-
// luma.gl
|
|
2
|
-
// SPDX-License-Identifier: MIT
|
|
3
|
-
// Copyright (c) vis.gl contributors
|
|
4
|
-
|
|
5
|
-
export const fp64arithmeticShader = /* glsl */ `\
|
|
6
|
-
uniform float ONE;
|
|
7
|
-
|
|
8
|
-
/*
|
|
9
|
-
About LUMA_FP64_CODE_ELIMINATION_WORKAROUND
|
|
10
|
-
|
|
11
|
-
The purpose of this workaround is to prevent shader compilers from
|
|
12
|
-
optimizing away necessary arithmetic operations by swapping their sequences
|
|
13
|
-
or transform the equation to some 'equivalent' form.
|
|
14
|
-
|
|
15
|
-
The method is to multiply an artifical variable, ONE, which will be known to
|
|
16
|
-
the compiler to be 1 only at runtime. The whole expression is then represented
|
|
17
|
-
as a polynomial with respective to ONE. In the coefficients of all terms, only one a
|
|
18
|
-
and one b should appear
|
|
19
|
-
|
|
20
|
-
err = (a + b) * ONE^6 - a * ONE^5 - (a + b) * ONE^4 + a * ONE^3 - b - (a + b) * ONE^2 + a * ONE
|
|
21
|
-
*/
|
|
22
|
-
|
|
23
|
-
// Divide float number to high and low floats to extend fraction bits
|
|
24
|
-
vec2 split(float a) {
|
|
25
|
-
const float SPLIT = 4097.0;
|
|
26
|
-
float t = a * SPLIT;
|
|
27
|
-
#if defined(LUMA_FP64_CODE_ELIMINATION_WORKAROUND)
|
|
28
|
-
float a_hi = t * ONE - (t - a);
|
|
29
|
-
float a_lo = a * ONE - a_hi;
|
|
30
|
-
#else
|
|
31
|
-
float a_hi = t - (t - a);
|
|
32
|
-
float a_lo = a - a_hi;
|
|
33
|
-
#endif
|
|
34
|
-
return vec2(a_hi, a_lo);
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
// Divide float number again when high float uses too many fraction bits
|
|
38
|
-
vec2 split2(vec2 a) {
|
|
39
|
-
vec2 b = split(a.x);
|
|
40
|
-
b.y += a.y;
|
|
41
|
-
return b;
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
// Special sum operation when a > b
|
|
45
|
-
vec2 quickTwoSum(float a, float b) {
|
|
46
|
-
#if defined(LUMA_FP64_CODE_ELIMINATION_WORKAROUND)
|
|
47
|
-
float sum = (a + b) * ONE;
|
|
48
|
-
float err = b - (sum - a) * ONE;
|
|
49
|
-
#else
|
|
50
|
-
float sum = a + b;
|
|
51
|
-
float err = b - (sum - a);
|
|
52
|
-
#endif
|
|
53
|
-
return vec2(sum, err);
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
// General sum operation
|
|
57
|
-
vec2 twoSum(float a, float b) {
|
|
58
|
-
float s = (a + b);
|
|
59
|
-
#if defined(LUMA_FP64_CODE_ELIMINATION_WORKAROUND)
|
|
60
|
-
float v = (s * ONE - a) * ONE;
|
|
61
|
-
float err = (a - (s - v) * ONE) * ONE * ONE * ONE + (b - v);
|
|
62
|
-
#else
|
|
63
|
-
float v = s - a;
|
|
64
|
-
float err = (a - (s - v)) + (b - v);
|
|
65
|
-
#endif
|
|
66
|
-
return vec2(s, err);
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
vec2 twoSub(float a, float b) {
|
|
70
|
-
float s = (a - b);
|
|
71
|
-
#if defined(LUMA_FP64_CODE_ELIMINATION_WORKAROUND)
|
|
72
|
-
float v = (s * ONE - a) * ONE;
|
|
73
|
-
float err = (a - (s - v) * ONE) * ONE * ONE * ONE - (b + v);
|
|
74
|
-
#else
|
|
75
|
-
float v = s - a;
|
|
76
|
-
float err = (a - (s - v)) - (b + v);
|
|
77
|
-
#endif
|
|
78
|
-
return vec2(s, err);
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
vec2 twoSqr(float a) {
|
|
82
|
-
float prod = a * a;
|
|
83
|
-
vec2 a_fp64 = split(a);
|
|
84
|
-
#if defined(LUMA_FP64_CODE_ELIMINATION_WORKAROUND)
|
|
85
|
-
float err = ((a_fp64.x * a_fp64.x - prod) * ONE + 2.0 * a_fp64.x *
|
|
86
|
-
a_fp64.y * ONE * ONE) + a_fp64.y * a_fp64.y * ONE * ONE * ONE;
|
|
87
|
-
#else
|
|
88
|
-
float err = ((a_fp64.x * a_fp64.x - prod) + 2.0 * a_fp64.x * a_fp64.y) + a_fp64.y * a_fp64.y;
|
|
89
|
-
#endif
|
|
90
|
-
return vec2(prod, err);
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
vec2 twoProd(float a, float b) {
|
|
94
|
-
float prod = a * b;
|
|
95
|
-
vec2 a_fp64 = split(a);
|
|
96
|
-
vec2 b_fp64 = split(b);
|
|
97
|
-
float err = ((a_fp64.x * b_fp64.x - prod) + a_fp64.x * b_fp64.y +
|
|
98
|
-
a_fp64.y * b_fp64.x) + a_fp64.y * b_fp64.y;
|
|
99
|
-
return vec2(prod, err);
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
vec2 sum_fp64(vec2 a, vec2 b) {
|
|
103
|
-
vec2 s, t;
|
|
104
|
-
s = twoSum(a.x, b.x);
|
|
105
|
-
t = twoSum(a.y, b.y);
|
|
106
|
-
s.y += t.x;
|
|
107
|
-
s = quickTwoSum(s.x, s.y);
|
|
108
|
-
s.y += t.y;
|
|
109
|
-
s = quickTwoSum(s.x, s.y);
|
|
110
|
-
return s;
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
vec2 sub_fp64(vec2 a, vec2 b) {
|
|
114
|
-
vec2 s, t;
|
|
115
|
-
s = twoSub(a.x, b.x);
|
|
116
|
-
t = twoSub(a.y, b.y);
|
|
117
|
-
s.y += t.x;
|
|
118
|
-
s = quickTwoSum(s.x, s.y);
|
|
119
|
-
s.y += t.y;
|
|
120
|
-
s = quickTwoSum(s.x, s.y);
|
|
121
|
-
return s;
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
vec2 mul_fp64(vec2 a, vec2 b) {
|
|
125
|
-
vec2 prod = twoProd(a.x, b.x);
|
|
126
|
-
// y component is for the error
|
|
127
|
-
prod.y += a.x * b.y;
|
|
128
|
-
#if defined(LUMA_FP64_HIGH_BITS_OVERFLOW_WORKAROUND)
|
|
129
|
-
prod = split2(prod);
|
|
130
|
-
#endif
|
|
131
|
-
prod = quickTwoSum(prod.x, prod.y);
|
|
132
|
-
prod.y += a.y * b.x;
|
|
133
|
-
#if defined(LUMA_FP64_HIGH_BITS_OVERFLOW_WORKAROUND)
|
|
134
|
-
prod = split2(prod);
|
|
135
|
-
#endif
|
|
136
|
-
prod = quickTwoSum(prod.x, prod.y);
|
|
137
|
-
return prod;
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
vec2 div_fp64(vec2 a, vec2 b) {
|
|
141
|
-
float xn = 1.0 / b.x;
|
|
142
|
-
#if defined(LUMA_FP64_HIGH_BITS_OVERFLOW_WORKAROUND)
|
|
143
|
-
vec2 yn = mul_fp64(a, vec2(xn, 0));
|
|
144
|
-
#else
|
|
145
|
-
vec2 yn = a * xn;
|
|
146
|
-
#endif
|
|
147
|
-
float diff = (sub_fp64(a, mul_fp64(b, yn))).x;
|
|
148
|
-
vec2 prod = twoProd(xn, diff);
|
|
149
|
-
return sum_fp64(yn, prod);
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
vec2 sqrt_fp64(vec2 a) {
|
|
153
|
-
if (a.x == 0.0 && a.y == 0.0) return vec2(0.0, 0.0);
|
|
154
|
-
if (a.x < 0.0) return vec2(0.0 / 0.0, 0.0 / 0.0);
|
|
155
|
-
|
|
156
|
-
float x = 1.0 / sqrt(a.x);
|
|
157
|
-
float yn = a.x * x;
|
|
158
|
-
#if defined(LUMA_FP64_CODE_ELIMINATION_WORKAROUND)
|
|
159
|
-
vec2 yn_sqr = twoSqr(yn) * ONE;
|
|
160
|
-
#else
|
|
161
|
-
vec2 yn_sqr = twoSqr(yn);
|
|
162
|
-
#endif
|
|
163
|
-
float diff = sub_fp64(a, yn_sqr).x;
|
|
164
|
-
vec2 prod = twoProd(x * 0.5, diff);
|
|
165
|
-
#if defined(LUMA_FP64_HIGH_BITS_OVERFLOW_WORKAROUND)
|
|
166
|
-
return sum_fp64(split(yn), prod);
|
|
167
|
-
#else
|
|
168
|
-
return sum_fp64(vec2(yn, 0.0), prod);
|
|
169
|
-
#endif
|
|
170
|
-
}
|
|
171
|
-
`;
|