3 * Copyright (C) 2007 Tim Moore
5 * This program is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU General Public License as
7 * published by the Free Software Foundation; either version 2 of the
8 * License, or (at your option) any later version.
10 * This program is distributed in the hope that it will be useful, but
11 * WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * General Public License for more details.
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
21 #include "StateAttributeFactory.hxx"
23 #include <osg/AlphaFunc>
25 #include <osg/BlendFunc>
26 #include <osg/CullFace>
28 #include <osg/ShadeModel>
29 #include <osg/Texture2D>
30 #include <osg/Texture3D>
35 #include <simgear/scene/material/Noise.hxx>
41 StateAttributeFactory::StateAttributeFactory()
43 _standardAlphaFunc = new AlphaFunc;
44 _standardAlphaFunc->setFunction(osg::AlphaFunc::GREATER);
45 _standardAlphaFunc->setReferenceValue(0.01f);
46 _standardAlphaFunc->setDataVariance(Object::STATIC);
47 _smooth = new ShadeModel;
48 _smooth->setMode(ShadeModel::SMOOTH);
49 _smooth->setDataVariance(Object::STATIC);
50 _flat = new ShadeModel(ShadeModel::FLAT);
51 _flat->setDataVariance(Object::STATIC);
52 _standardBlendFunc = new BlendFunc;
53 _standardBlendFunc->setSource(BlendFunc::SRC_ALPHA);
54 _standardBlendFunc->setDestination(BlendFunc::ONE_MINUS_SRC_ALPHA);
55 _standardBlendFunc->setDataVariance(Object::STATIC);
56 _standardTexEnv = new TexEnv;
57 _standardTexEnv->setMode(TexEnv::MODULATE);
58 _standardTexEnv->setDataVariance(Object::STATIC);
59 osg::Image *dummyImage = new osg::Image;
60 dummyImage->allocateImage(1, 1, 1, GL_LUMINANCE_ALPHA,
62 unsigned char* imageBytes = dummyImage->data(0, 0);
65 _whiteTexture = new osg::Texture2D;
66 _whiteTexture->setImage(dummyImage);
67 _whiteTexture->setWrap(osg::Texture::WRAP_S, osg::Texture::REPEAT);
68 _whiteTexture->setWrap(osg::Texture::WRAP_T, osg::Texture::REPEAT);
69 _whiteTexture->setDataVariance(osg::Object::STATIC);
70 // And now the transparent texture
71 dummyImage = new osg::Image;
72 dummyImage->allocateImage(1, 1, 1, GL_LUMINANCE_ALPHA, GL_UNSIGNED_BYTE);
73 imageBytes = dummyImage->data(0, 0);
76 _transparentTexture = new osg::Texture2D;
77 _transparentTexture->setImage(dummyImage);
78 _transparentTexture->setWrap(osg::Texture::WRAP_S, osg::Texture::REPEAT);
79 _transparentTexture->setWrap(osg::Texture::WRAP_T, osg::Texture::REPEAT);
80 _transparentTexture->setDataVariance(osg::Object::STATIC);
81 _white = new Vec4Array(1);
82 (*_white)[0].set(1.0f, 1.0f, 1.0f, 1.0f);
83 _white->setDataVariance(Object::STATIC);
84 _cullFaceFront = new CullFace(CullFace::FRONT);
85 _cullFaceFront->setDataVariance(Object::STATIC);
86 _cullFaceBack = new CullFace(CullFace::BACK);
87 _cullFaceBack->setDataVariance(Object::STATIC);
88 _depthWritesDisabled = new Depth(Depth::LESS, 0.0, 1.0, false);
89 _depthWritesDisabled->setDataVariance(Object::STATIC);
92 osg::Image* make3DNoiseImage(int texSize)
94 osg::Image* image = new osg::Image;
95 image->setImage(texSize, texSize, texSize,
96 4, GL_RGBA, GL_UNSIGNED_BYTE,
97 new unsigned char[4 * texSize * texSize * texSize],
98 osg::Image::USE_NEW_DELETE);
100 const int startFrequency = 4;
101 const int numOctaves = 4;
105 double inci, incj, inck;
106 int frequency = startFrequency;
110 osg::notify(osg::WARN) << "creating 3D noise texture... ";
112 for (f = 0, inc = 0; f < numOctaves; ++f, frequency *= 2, ++inc, amp *= 0.5)
114 SetNoiseFrequency(frequency);
116 ni[0] = ni[1] = ni[2] = 0;
118 inci = 1.0 / (texSize / frequency);
119 for (i = 0; i < texSize; ++i, ni[0] += inci)
121 incj = 1.0 / (texSize / frequency);
122 for (j = 0; j < texSize; ++j, ni[1] += incj)
124 inck = 1.0 / (texSize / frequency);
125 for (k = 0; k < texSize; ++k, ni[2] += inck, ptr += 4)
127 *(ptr+inc) = (GLubyte) (((noise3(ni) + 1.0) * amp) * 128.0);
133 osg::notify(osg::WARN) << "DONE" << std::endl;
137 osg::Texture3D* StateAttributeFactory::getNoiseTexture(int size)
139 NoiseMap::iterator itr = _noises.find(size);
140 if (itr != _noises.end())
141 return itr->second.get();
142 Texture3D* noiseTexture = new osg::Texture3D;
143 noiseTexture->setFilter(osg::Texture3D::MIN_FILTER, osg::Texture3D::LINEAR);
144 noiseTexture->setFilter(osg::Texture3D::MAG_FILTER, osg::Texture3D::LINEAR);
145 noiseTexture->setWrap(osg::Texture3D::WRAP_S, osg::Texture3D::REPEAT);
146 noiseTexture->setWrap(osg::Texture3D::WRAP_T, osg::Texture3D::REPEAT);
147 noiseTexture->setWrap(osg::Texture3D::WRAP_R, osg::Texture3D::REPEAT);
148 noiseTexture->setImage( make3DNoiseImage(size) );
149 _noises.insert(std::make_pair(size, noiseTexture));
153 static osg::Image* make2DNoiseNormal();
154 osg::Texture2D* StateAttributeFactory::getNoiseNormalMap()
156 if (_noiseNormalTexture.valid())
157 return _noiseNormalTexture.get();
159 _noiseNormalTexture = new osg::Texture2D;
160 _noiseNormalTexture->setFilter(osg::Texture3D::MIN_FILTER, osg::Texture3D::LINEAR);
161 _noiseNormalTexture->setFilter(osg::Texture3D::MAG_FILTER, osg::Texture3D::LINEAR);
162 _noiseNormalTexture->setWrap(osg::Texture3D::WRAP_S, osg::Texture3D::REPEAT);
163 _noiseNormalTexture->setWrap(osg::Texture3D::WRAP_T, osg::Texture3D::REPEAT);
164 _noiseNormalTexture->setImage( make2DNoiseNormal() );
165 return _noiseNormalTexture;
168 // anchor the destructor into this file, to avoid ref_ptr warnings
169 StateAttributeFactory::~StateAttributeFactory()
174 /* GIMP header image file format (RGB): */
176 static unsigned int noiseNormalWidth = 64;
177 static unsigned int noiseNormalHeight = 64;
179 /* Call this macro repeatedly. After each use, the pixel data can be extracted */
181 #define NOISE_NORMAL_PIXEL(data,pixel) {\
182 pixel[0] = (((data[0] - 33) << 2) | ((data[1] - 33) >> 4)); \
183 pixel[1] = ((((data[1] - 33) & 0xF) << 4) | ((data[2] - 33) >> 2)); \
184 pixel[2] = ((((data[2] - 33) & 0x3) << 6) | ((data[3] - 33))); \
187 static char *noiseNormalData =
188 "@Y4`CI$`BXX`>XP`>HH_AH<`B8H`?X\\`AHT`B8\\`B8\\`@H`^>I$\\>Y(^@(T_AHD`"
189 "?)$]B),`DI0`BI0`?90`>),^@HX^C8@^AHP`A8<`B(<`BHD`AHD\\@HD]A(L_A(D`"
190 "DXD`@8L`=HX\\?9(_CI(`D8X`AY,`?9H`?9,\\@9(_A(X_A(H^@H@\\@8L\\?X`]?)$]"
191 "@I<`AY,`@I,`>9<]?Y8_CY$`D(T`@HX^@HH[B(``BY,`A90]@9<^A9P`AYT`AI<`"
192 ">XPZAHD^A8H`?(P_?(X`AXT`B(X`@)(`A9$`B),`BY,`AY4`@)<`@9@`A)4`AY$`"
193 ">H\\\\A(X_B8P_@HP]>8`\\>I(^A(``D(T`@(T`@(H]A8L]AXT_@XT^@H`_AY,`B9,`"
194 "BXH`@(H]>XT[@9(`BI(`BX\\`@X\\^?I,`@9(_A)(`A8\\`A(L_@XH^@XT^@Y$`@9(_"
195 "BI8`B)(`A9,`@I@`AY@`BY,`A8T^>8HX@(X]A9$`B),`A),^@),]@),_@8\\]?XDZ"
196 ">XDX@H@Z@XL\\?X`^@9,`B),`AY(_?Y4^AI@^B98`B90`A9$`@)(`?Y0`@90`@9(]"
197 "?9(_A(X_AXH]@(H[>8`\\?)0`AY,`D(``?Y0`@9(_AY,`B)<`@I,`@),_A)4`AI0`"
198 "@(P^?XL]@(P\\AI$`B),`A(``@HX^@X\\`AY$`AY,`AI(`A(``@HX`@X\\`A(``A8\\`"
199 "CY(`@X\\_?XT[AX\\_C)(`AI0`?I,`?9(`@Y0`AI0`B)0`AY,`@Y$_?XT\\?H@[?X0["
200 "A(`_A8`_A8`_A)4`AI<`A98`A)8^?Y4\\AYD^AY0^@XT^?X@`?8@_?HL_?H\\]@)$\\"
201 "@)(`AI(`B9$`A(``?I,`?I4`A)(`BXX`@IH`A9@`C)L`BYT`A)<`?Y(\\@)$^@HX]"
202 ">Y,`@H`_BHT`BY$`A9,`?Y$_@HX`B(L`AHP`@XT`@HX`?X\\`?X\\`@X\\`A8\\`B(X`"
203 "BXX`>HPZ>8LYB8L]CHX`@I,`?I4`A94`AY4`B),`BI(`B9,`A9(`@(T_@(L`A8P`"
204 "C9@`AY4`AI4`B98`B9@`A)<_@)8]@Y8^AY(]@XX]@8@^?X4_@84`@XH`@X\\`A)(`"
205 "?X`^A9$`B)(`A9$`?Y(^?9(^@Y$_AX\\_A9D^A9<_BY@`BYH`@Y0_@)$\\A9(^B(`^"
206 ">9@`@Y0`CH``C9$`A)(`?H`^@8T_AXH_@(4\\?8<Z?8H\\?8X\\?X`^@H`_A8\\`B8\\`"
207 "@XT`>9$]?90_D)0`DX``@HX]>XT[@XT`BI(`AXT^B(L^AHT`@8X`?(X`?8\\`@Y,`"
208 "CI8`A)4`@90^B90`B90`?Y4^?Y0`B)0`B(X`@HP_@(L`@HL`AHL`AXP`AHT`@X\\_"
209 "?H\\]A(``AI(`@Y$_@)$\\@90^A9<_B)<`BID`B),`B),`AY(`@(X\\@(X\\AY(_C),`"
210 "=),_?H``AXT_BHX_A8`_@9(`A)(`B(\\`A(X`@HX`@8\\^@9(_@I,`@Y$_A(`_A8`_"
211 "@Y0`@)<`@YH`BY@`BY(`@HT\\@(P[A8\\`BI(`AXT^AXH]@XH^?HL]>(T\\>X`_@9,`"
212 "B9$`?9(^?9(^BY,`BI(`?)$^>X`_B(\\`B(X`@HX`?)$^?Y0`AI0`AI$`A(\\^@8\\]"
213 "@Y$_A9,`AI,_A),^@Y4]AI@`B)H`B9L`B94`A8`_AHX_@HX`?(T[?H\\]AI(`BI(`"
214 "=8\\_>H\\^@8T]AXT_B(X_AY(`A9,`@Y0`B)4`AI,`A9,`AY8`AY8`A90_A),^A),^"
215 "AY4`B98`A98`?Y<]?Y(ZA(\\\\AY0`A9H`@90`@Y$_A(X_@XT`@(T_?X\\`@)$_A)(`"
216 "B(X`>X`\\?I,_C)(`BH``>8X]>8H_AXD`B(X`?X`^>)0[>YD]@YD^B)<^B98^AI@`"
217 "A90_AI4`AI4`AI4^B)<^B)H`AIH^@Y<[@HX^?XD\\@8L^@8X`?H``@)(`AI0`B90`"
218 "?9,`?Y,`@X``AX\\`BX\\`B(X_@8\\]>H\\[?H``?8\\]@8\\]A90]AY8_AY8_@Y8^A)<`"
219 "B(`^CH``B)4_?)H^>YD]AI4^AY8`?9L`=Y0]?),_@9(`A(``A(``A9$`AY(`BI$_"
220 "A(L_B8P`BHL`B(L`@XT`@9$`@)$`?X\\`AXP`A(H^AHP^A(`_@),[@9D]AIT`B)L]"
221 "@)P`?YH`?Y8`A(``C8T`DHT`BHT`?XH_?XDZ@(X]@H`_@HX^AHX_B(X`AHX_@(P\\"
222 "@(TYAI<`AYP`@Y@`@Y$`A(``@X\\_?XL[@9(_@Y$_A9$`AI(`AY,`A9,`@90`?Y(^"
223 "A9$`A(X_@XL\\A(H\\AHP^AX\\`@HX^?HP[>X<`@XD`D(P`B)(`>Y@`B9@`CY8`>9H["
224 "?H`^A(``AHX_A(L_@8L^@(T_@8X`@(T`A9$`A8`_BI(`B94`A98`A98`AY,`AX\\_"
225 "?X`]?I,_@),_@HX^B(H]AX@^?H@[=H@ZA8\\`A)(`@9(`@H`_A(X_AX\\`A(X_@8T]"
226 "@8P[@H`^@),_?H`^@(X]A8\\`A9$`@X``B)8`B)0`AY,`AY(`A9$`A9$`@I,`@Y0`"
227 "@8\\^@8T]@(H[@XL\\A8T^@XT^@8T]?HP[>(T\\@8X`C8X`A8\\`>(`\\@XT^C(P`>X`\\"
228 "?Y@`@)<`@Y0`@H`^@8T]@HX^@8\\^@8\\^A)8\\A9(\\B90`BI4`A9$`A8\\`B(H`AH0`"
229 "@(@X@HX]A)(`AH``B8\\`B(X`@9$`>I4`BI8`AY4`@9(`?X`^@X\\_A8\\`A(``@(X]"
230 "BI(`@X\\_?8X\\?8X\\@HX`A(X`@X\\`@8X`A8\\`A8\\`B(``AX\\`A8\\`AH``AY,`B94`"
231 "?H`^?X`^@HX^A8\\`AY$`AH``A(``@H`_?),\\@)4`C)(`AX\\`>(T\\@HD]CHD`@HT`"
232 "@ID`@9@`@)8_@I,^A)(`A9,`@90`?I,_A90_A(\\^AHX^A8T^?XD^?X@`AH@`AX4`"
233 "@H@Y@(P[@)$_A(``B8\\`BH``AI,`@9<`BI0`A9,`?H`^?H\\]@H`_A(``A(``?X`^"
234 "C9,`A8\\`@8X`@X``AY$`A8\\`@8T_?HX_@8DZ@XL\\AHX_AX\\`AHX_AHX_AX\\`AY$`"
235 ">X`]?H`^@9(`AI0`AY,`AI(`A9$`A)(`@),_?I4`BI(`BXX`?8\\]A(X_D(\\`B)(`"
236 "AY,`@9(_?I$]@9(_B)4`B)<`?Y8_=I8\\AHT`A(D`A(H^@8@\\?(@Z?HL]A8\\`B8\\`"
237 "B94`@Y0`?I,`@)$_AX\\`BHT`AXX`@X``B(``@8\\^?(X\\?H`^A)(`AI(`A(``@H`_"
238 "B(X`@8L^?XP^A(``AY$`A8\\`@X\\`@9$`A8T^AX\\`B(``AX\\`A8T^A(P]A(P]A8T^"
239 ">X`]>X`]?Y$_@Y0`A)(`@(X]?XT\\@(X]@8L`>8T_A8P`BXL_?X`]@Y0_C)0`AI4^"
240 "BXX`@HP]?8X\\@Y$`C)0`BI4`@)4`=I8^@XP`@XH`AXP`A8\\`@(X]@9(_AY8`B90_"
241 "C9L`@I<`?),_?Y$_B(``C(X`B8P_@XT^AHP^@8T]?H\\]@)(`AI0`AY,`A9$`@Y$`"
242 "@XT`@(P^?HL]@8T_@HP]@HP]@H`_@I0`B9,`B)(`AI(`A9$`@X\\_A(X_B(``BI(`"
243 "@Y8`@I4`@I4`A98`@Y0`@8\\]@(X\\@8\\]@XH`=XT^@(P^BXL_@)$^?Y<]AY0^@Y(Y"
244 "B(L`@8L`?(P]A(X`C(T`C(X`@X\\_?),_?Y$_@)$_AY4`B)8`@Y0_@Y0_B)4`BI$_"
245 "AX\\`?8X\\=HTY?(X\\A(X_AXT_A(P]@(P\\B8P_@XT^@)$_@Y0`AI0`AH``A(X_@X\\_"
246 "A)$`@)$_?H\\]?XT\\@HP]@XX]@Y$_@90`B)0`AI0`A9,`@I,`A)(`AY,`B90`BY8`"
247 "AY@`@Y0`@Y0`AI<`A98`@I,`A)(`AI0`A9,`=I<`@I4`CX\\`A)(`?I4`AI(`AX\\_"
248 "@H<`?(D_>XL^@(H_B84_BX,\\A88\\@(T_>YD[?I@[A)H`AID`@90^@Y$_B(``BHP^"
249 "BHP_@HP]?8\\]@9,`B)0`B9$`@X\\_?X`^BXT`AHX_@Y$`@Y0`A)(`@XT^@8L\\@8T]"
250 "@Y0`@9,`@)(`@Y$`AY(`BI4`AY4`@I4_AY4`A)4`@Y0`@I4`@Y0`A9,`A9$`A8`_"
251 "@H`^?XT[?HPZ@)$^@I,`@9(_@9(_A)4`@YL_=)\\_@IL`D9,`A9$`?I,`B8``C8P`"
252 ">Y$`@8X`AHX_BHX_B(X_@X\\^@8\\^?XT\\=X\\]@(P^BHD`B8H`@8T]?8\\]@8\\^AHP]"
253 "@)(`@HP]@HP]@9,`B)8`C)(`A9$`=Y4[AY(_B9$_AY(_A90_@)<`?)@_?98^?90]"
254 "@HX`@(X]?X`]A90_C)D`C9@`AY8`?Y(^BXT_B8\\`AI$`@H`^@)$^@9(_@Y$_@H`_"
255 "A(\\`@HT`@8X`@H\\`@8T_?XDZA8L]BH``>Y$`?)$`@)$^A9(^B),^AY0^A),\\@)$\\"
256 "@I<`@I0`@Y$_AI$^BY,`BI4`A98`@)4`=X\\]@(P^B(D_AXH_@8T]?Y$_A9$`C)(`"
257 "A98`B(``@8T]>8X[?8X[B(X_BI(`@9@`AI0`AY,`AY$`A9$`@I,`@I0`AI<`BY<`"
258 "AY,`A9,`@I,`A9,`AY(_AY(`@Y$_?I$]AHP`@XH^@8T_@X\\`A(``A(X`B(X`C8``"
259 "?HL]@(T_@HX`@HX`@8T]@XT^A8\\`AH``@9$`A)$`AI(`B90`B98`B)<`@Y8`@)4`"
260 "@Y0`?),^>I,[@90\\C98`D)D`B)D`?9D`?)0`@I(`BH``BH``A9$`@I,`AI(`BY$`"
261 "A(``BH``A9$`>I,]>X`\\AXT^BX\\`@I,`@I(`A9$`AHT`@XH^?H@[?H@[A(L_BHT`"
262 "@HX`@H\\`@Y$`@X\\^A8T]A(P\\@HX^@)$_B9(`A8X`@XX`AY$`AHT`@X8[A80[C8H`"
263 "?H\\]A)(`AI(`A8\\`A8\\`AY,`A9,`?X`]@XT`A(X`B(``B9$`AY(`A)(`@9,`?Y0`"
264 "@XT`>X`]>),]@90`C),`CY$`@X\\^=X`Z>I(^@9,`B9,`BI0`AY,`A)(`A(X_AHP^"
265 "@HH[BXX`AI0`>I4_?90_BH``BXT_@8P[?X\\`@X\\`AHT`A(L_@(H]?8D[?H@Y@8DZ"
266 "?HD^?XP^@8\\^@X\\_AHX_AHP^@HX`?X\\`@8H`@(H_@8P`@X\\`A(X_A(P]B8T^CI(`"
267 "?9(^@I,`AI(`B(``B9$`B)0`A)4`@),_@(P^@8T_@XT^A8T^@XL\\@8L^@8P`@8X`"
268 "AHL`@X``@)4`A9,`B8\\`B(H]@(<[>(@Y=XXY?8`\\A)(`AI0`A9,`A(``A(X_A8T^"
269 "B8\\`C(``@H`^=8`Z>I$\\BY$`CH``A(X_@HX^A(X_B8\\`BI(`AY4`A9@`A)<`A)4`"
270 "@9$`@9$`A)(`AH``BH``B8\\`@X\\`?8\\`?X8Z@8L\\@HX^@(X\\@8`[@Y0_AI@`A9<_"
271 "?I$]?8X[@8T\\A8`_AI$`A9$`A)(`@I4`?Y$`@)(`@H\\`@XT^@XL\\A(H^AXH`B8P`"
272 "?X@`@XT`AH``A8\\`@HP]@XH^A(L_AXT`@90`@I4`@I4`@I,`@Y$_@X\\_A(``A9$`"
273 "BY$`BX\\`@8T\\=8`Z?),^BY,`BY$`@8\\^@8T]A(P]AXH]AHX^A9,`A9@`@YD`@YD`"
274 "A)8`@I0`@)$^@X\\^B(``B(``@X``?H``B(``BI4`B98`A),^@I,^AID`A)H`@)8]"
275 "A)4`@)$^@8\\]A9$`A(``@HP]@HP]AH``?Y,`?Y0`@9$`@X\\_A8T^AHP^BHL`BXP`"
276 ">(HZ@HP]BX\\`B(``?Y(\\?9(^AY(`D9$`AY@`AID`@Y@`@Y8`@Y$_@H`_@Y$`@I,`"
277 "B9$`BHX_A(\\^?I4`@I<`B9,`A8\\`>(\\[?XP`@8L`AHD^AHD^@XL\\@8T]@HX]@X\\^"
278 "?Y8`?I,_?I$]@H\\[AX\\_B(``@Y$`?)$`A9$`AI(`AI(`A9$`B)0`BYD`BYD`B)8`"
279 "AI0`AI0`@Y0`@I,`@H\\`@HP_A8L_BHL`@8X`@8X`@8X`@X\\_A(`_A8`_AX\\`AHX_"
280 ">),]AI,_DY0`CI<`?IH]>9H]A90]DHX^A),^@I4_@98`@98`@I,`@Y$`@9(`@9,`"
281 "BI4`B8\\`A(\\^?I4`@I<`AY$`@H`_=I,]?(T`@HT`BHP`BXP`B8H`AXH_B(L`BXP`"
282 "?I4`?I4^@)8_A90_B9$_A8`_?H\\]>(X]B)D`AI0`@X\\_A8\\`AX\\`AXT`A(H^A(<\\"
283 "@(H[@Y$`@9,`?H``?HX_A(X`C(T`CXH`@HD`@HD_@HP_@X\\_A9,`@Y0`@9(_?X`]"
284 ">)4^@Y8`C)<`CI8`AY0`@)(`?H``@8\\^A8L]A(L_@(L`?HL`?XP`@8T]AX\\]BI$["
285 "AY4`A9$`A8`_AX\\`A(P]@8@\\@8L^AI(`@)<`@I4_AI4\\AI@]@IH^@)8_A8\\`C(H`"
286 "AH<`AXD`AX\\`AY8`A9@`@90`@8X`A(H`C(X`AHX_@8X`@X\\`AXH_A(4]?X8\\>X@\\"
287 "A(X`A(L`A8L_@8L^?(T[?Y0`A9@`@I,^@X`\\A)<`@IH`@)8`A)$`B),`B)4_A9<]"
288 "?Y8`AI4`BY0_AY(_?X\\`>X\\`@(``AY(`B9$`AH``@XX`@8X`@H\\`A9$`BI(`C90`"
289 "@I,`@8\\^@8T]@X\\_@X\\_?XT\\?XP^@9$`@Y8`B)<`BY@`BIP`A)H`?Y0`@X\\`B8P`"
290 "?(<\\?XDZA(\\^A90]@I4]?I0]@I,`AY,`AHX^@8\\]?Y(^@Y0`BI0`C9,`BI0`AY@`"
291 "@X\\`@(H]A(L_A8\\`@9(`@I4`A)4`A)(`BY8`A98`?90_>H\\\\?XLZAHX\\AY(]AI4^"
292 "@H\\`AI$`B8`^@HT\\>8L[=XP[@8\\^BY$`AY,`A9$`@8X`?HX`@H\\`A9$`AY(`B9$_"
293 "@I(`@8X`@8X`A)$`@Y0`@)$_?H`^?)$^@H\\[A8`]AY(`A9,`?I$]>XXZ?HHY@XLY"
294 "?)0Z@I4]B)<`AY8`@I,^?9,\\@I4_B)D`B)D`A9@`@I@`A9@`B9@`B94`AI0`@Y8`"
295 "@Y0`@8T]A(X_B94`AI0`@9(`@H`_A(X_A8T^@(P[?8XY@)$\\B90_C)0`BI4`B94`"
296 "@HD_AXT_BX\\`A(`_>H\\^>8X]@HX^C8\\_@X``@8X`?8T^?8T^@8\\^@X\\_A(\\^A8T]"
297 "@HT`@8T_@HX`A)$`A9,`@I,`@9,`@I4`BI,^B9$`A8\\`@HX`?X\\`@)$^AI4^BI<_"
298 "?IL\\@YD^B98`AY$`@8T]?(TZ@)$\\AI4^@I4`@I4`@I4`@Y0`A)(`@X\\^@H`^@H`^"
299 "@)(`@H`_AY,`B)0`@Y$`@8\\^A(``AHT`AHT`@HP_A8`_BY8`C9@`AY(`@8L^?XD^"
300 "@HD_BHT`C9$`B),`@)(`?Y$`AH``CH``@H\\`@8X`@8\\^@H`_A)(`AI(`A(``@XT^"
301 "@(<[@HD]@HP_@X\\_@X\\_@Y$_A9,`B)8`CI4`B),`@X\\_@8X`@X``B)8`C)L`BYT`"
302 "@9L^A9@`B)(`B(T`A8P`A(X`AY$`B90`?X\\`@X``A9$`@X\\`@(P^?XL]@8L\\@HP]"
303 "?(X\\A)(`BI4`A9$`?HPZ?X`^AI$`AXX`A(T`A(L`A8P`AX\\`A(X_?XL]?8@_?XH`"
304 "@HT`B(X`BX\\`AX\\`@8X`?HX`A8\\`C8\\`@HT`@HX`A(``AI(`AY,`AY,`A(``@HX`"
305 "B(X_B(``AY(`AI$`@X\\^@HX]@X\\^AY(_AY(_@Y$_?H\\]?H\\]A(``B),`B)4_@Y4["
306 "?Y0`@Y$`@XT`@XH`@8H`A(X`AXX`AXT_@HT`B(\\`BX``AXX`@HX`@(T_@XT`AHP`"
307 "@H\\`B9,`C94`A(\\\\>HLX?8\\]@9$`?HD`?8@]@HD_A8L_A8P`@(T_?8T`@(``AI,`"
308 "@9,`A8`_B(P[AHD\\?HD^?HL`@8P`AXT`@XH`A8P`A8`_AI$^A9(^A(`_@8X`?XP`"
309 "BY8`BY@`BI<`AY8`A90_@Y(]A)$]A8`]A9,`@Y8`?Y8`@I4`B),`BY,`B),`@9(]"
310 ">HP\\?8H\\?HH\\>X@Z>HH[?8H\\?XD\\@H4Z?HH\\A(L_B(L`AHX_A9,`A9<`B9<`BI4`"
311 "A8\\`B(\\`BY$`A8`]?H\\Z?I,`?Y$`>(@[@9,[B90`CI0`BY,`@I,`?),_?9(^@)$^"
312 "@ID`AY,`BHX]B(H]@XH`?XP`@8P`A8P`A(D`AHP`AX\\_AX\\]A(\\\\@8T\\?XP^?HL`"
313 "A),Z@Y4[@I4]@Y8^A)<_AI<`AY8`AY0`@I,`@)<`?Y@`@)8]AI$\\BI$_AY(`@9(`"
314 "?8\\`@9$`@Y0`@)4`@)<`@Y@`B94`BY$`A9,`B9$`BHX_AHX^@90^@)<`@),]@(TW"
315 "@H<^@80YA8DZAI$^A98`A)L`@9<`>X\\`@I<VBI@^CI4`AY(`@90`@)D`A)P`AIH^"
316 "A)<_?9@`>)0`>X``AH\\`B(\\`@90^?9X_A9@`A)4`@9(`@8\\^@HX`@XT`@XT`@HP_"
317 "C(`_B(H\\B(@\\B8P`AXX`@HX`@XT`B(``BI(`?X`^>8\\^?8T`AXH`D(T`C8``@8T]"
318 "?(``?I0`?Y8`@90`A90]BI4`B98^@Y4[@9H`@I4`@XX]AHD\\B(H]AXT`@8X`>HX`"
319 "?8X\\@XL\\BXL^C(X`A(\\^?(X\\?)$`A)8`D)0`B98`@90`?H\\]@HH[AXH]AX\\`A)(`"
320 "A9(^?9(_>(X]?8H^B8H`C(D^B(P[AI,]AI,_AY0`AY8`A9,`@9(_?Y(^@)(`@9,`"
321 "B9$`B(P]AX@^B(L`A8P`@(P^@8L^AXT_BXT`?XD\\>(T\\>H``?8T^@8@\\A(<Z@X4X"
322 "@X8YA(P]@X\\^@Y$_@Y0_AYH`@YP`?IP`A)L`A9@`AI0`AY$`B(``A(``?HX_>8T_"
323 "@9(`B(``CH``D9,`AY(`?8\\]>H\\^@)(`BY(`A9$`?X`^@(X]A8P`B8P_AHX_A(`_"
324 "A9$`?I,`>9(\\>X`\\B(``C(P_B(H\\AHP]A8PXB)$\\B90_AY8`@90^?),\\?98^?IH`"
325 "AY,`A8\\`AHP`AXT`@HP`@(H]@HD]B8P`D8X`AXH_@X``@IH`>Y<`>H\\\\A(H[D(<]"
326 "A(`_@Y0`@I4`@I,`A9$`BI(`AY(`@8\\]?9(^@),_@I4`@Y4`A)4`@I(`@(``?8\\_"
327 "A)4`B)(`CI(`CY,`AY(`?H\\]>XT]?H``AHP^@(H[?HL]@H\\`B8``BH``BH``BI(`"
328 "@)(`?94`>)@^?)T`AI``AYH`@I,`@9,`A8L\\AX\\_AY(`AI(`@Y$_?Y(^@)4`A)D`"
329 "@Y4`A9(`AH``A8\\`@HX`@8L^A(L_BHT`A8P`A8@]B8P`AI,`>90`=Y(]A)$]DHX`"
330 "AYD`A)H`@I<`@9(`AX\\`BHT`BHL`AHD\\?HHY?HPZ?H`^?Y0`?I,`?Y$`@8X`@X\\`"
331 "AI0`A9$`B(``AX\\_A(\\^@(X]?X`^@9,`A(L_?XD\\?XP^@X``AY$`AX\\`B(X_BY(`"
332 "@HP`@)$_?90]?IH]@Y\\`A)T`@)D`@9D`AY$`AY$`A8\\`A(X`@XT`A(X`AH``B)(`"
333 "?I,`@9$`A9$`A9$`@Y$`@H`_AH``C)(`>X`_@8L^B8@_AHD^?8LZ?)$]AI<`CI<`"
334 "D(X]BHX]@XT^@8T_@X\\`AI(`AI,`@I0`B8\\`A8\\`@Y$`@9,`?H`^?8X\\@8L^AHT`"
335 "AI(`A9$`A(`_A8`]A8`_A(`_@9,`@98`A8\\`@X\\`A(``A)$`@8X`?HHZ@XDZBHP\\"
336 "BXH`BHP_A8L\\@HTZ@Y([?X`[?H\\\\@9(`AY0`A8``@8P`@(H_@HD_A(H^AXH_AXH_"
337 ">H\\^?H\\]@X\\^A)(`@Y0`A)4`B)8`BY8`?9@`@I,`B(X`B8H`A(H\\AI(`C)L`B9H`"
338 "C(``A(X_?XP^?HL_@(L`AHT`AX\\`A8`_C)(`B(``A(``@9(`?X`^?HP[@8L\\AX\\`"
339 "BI(`B),`AY8`B98`BI4`B)0`@Y4`?94`A)(`AI0`B94`A)4`?H`^?H\\\\AX\\_D)$`"
340 "A8\\`B8\\`B8P_AXH]A(P]@(LZ?HHY@XX]A)$`@H\\`@(T_@8T_@HX^@XT^@XT^@HP]"
341 "?H\\]@8\\]A)$]A90]A)<_@YD`A9@`A98`A)<`?9(^?8\\]@8\\^A8L]B8P_B(``@X`\\"
342 "A)0`?I(`>8\\`?(T`@HP`B8H`C(D]C(@XA8\\`@HX^@8\\^@9(`@9(`?H\\]@8\\^A)(`"
343 "CY$`BY,`AY8`B)<`B98`B)0`?Y0`=Y0^@),[AI<`BI@`@Y8`?90_@98`BY8`E)4`"
344 "<Y,\\?),_@I(`AI$`AY0`@I,`@9(_B)<`@8\\^@H`_A)(`A)4`A98`A)<`@Y8`@Y8`"
345 "@I,`AI(`AY0`AY8_A)H_@YL`@IH`@I4_C94`>X`\\=)0]?9@`AY,`BHP_B8D\\A8DZ"
346 "B(D`@HD`?8D`?HT`A)$`B9,`B90`B)4]@9(`?X`^@)$_A)4`@Y4`?Y$_?H`^?Y0`"
347 "D(``BI(`A),^@Y(]A9(^@Y$_>Y(^<Y,\\?Y4ZB)H`BID`@90^>Y0^?Y8`B90`CH\\_"
348 "@X`\\@Y0_@I<`@I<`A9@`A)H`?YL`>9P\\>I$\\AHX^B8`^@9<`@)4`AHX^@XT^?)0`"
349 "?XT\\A8T^BXX`B8\\`A(``@X\\_AXT_C(P`?Y4^?)0Z?I@[@I\\`AI``@YD^@Y(]@XX]"
350 "AXH]@HP]@)(`@I@`AIH_B98^B),`B)(`?8X`@8@^B(<^BH``A)<`>I@^?98\\@Y<\\"
351 "BY(`B(L`AX8]BX@_BXP`AXX`@9,`?Y<`AI@^BID`AY,`@(P\\?HP[A(``B8\\`B8D\\"
352 "BY,`B9,`A9$`@HX`A(X`AY$`A)4`@9<`>Y8`AI0`AY(`?9(^?Y(^B8\\`B8\\`?H``"
353 "A9,`B9$`C(\\`B(X`@HX]@(X\\A(P\\B(P]B)(`A(``@I,`A9@`A9@`@),]?(X\\?8T^"
354 "C(``A9$`@9,`@)4`@Y0_A8`]A8T^A8P`>XT]?8D[@8@\\A(L_@8T_?XP^@8X`AY$`"
355 "A(X_A(P]AXH]B(H]AXH_@HD]?HL]?(X^?Y(\\@9(]@(X\\?(HY>XL\\@H`_A8\\`B8T^"
356 "B(L`@X@_?X8^@((\\A80_B8@`B8P`AHT`>I<`A)8`A9,`?8`\\?X`]BH``BXX`?XL]"
357 "@Y$_AI$`B8\\`B(``A9$`A)(`A9$`B9$`AH@`A8<`A(H^AHX_@X\\_?H\\]>H`_?)0`"
358 "C90`AI(`@)(`@)(`@Y$`A8T^A(P]A8P`@Y$_?X`^?H\\]@8T_A8@_A80_B(@`BX``"
359 "@(X\\@Y$_A9$`A(X_A(P]A(P]AHT`AHT`?Y$_?X`^?XP^?8T^?H``@)(`A9,`B),`"
360 "?XD^?(<\\?(8[@88]AX@`C(@`B(D_A(<\\>X`_@(``@Y$`@H`^@Y$`AH``@HX`?8H\\"
361 "@8XZ@XX[AI$^B90`B94`B)8`AY4`AI0`?H<`@8@`AHD`B(L`AHX_@8\\^?I4`?YH`"
362 "B94]@Y$_?8\\`?XX`A(\\`AXX`B(``B8``BY,`@I0`?94`@)(`B(L`BH<^BHL`B)(`"
363 "@),[A)<`@Y8`@)$^@8T]AX\\`CH\\`CXX`@I(`@HT`@XT`A(``@Y0`@9,`A9,`B90`"
364 "@9,`?I,`@)(`AI0`C)0`C8``AXT_@(H[@XH^@(P^@X\\_AY(`AI(`?Y$_>Y(^?I,`"
365 "AI,_AI,_AI(`B),`B90`AI(`@)$_?8\\]?(``@9$`AY$`BH``B(``@X\\^@90`@9@`"
366 "AI,[@8\\]?(T`?HT`@XX`AXX`AH``A9$`BXX`@9(`>Y,_?I4`AI,_BI$]AY,[@Y<\\"
367 "@I@_@YD`@)8_?8`\\?XT\\A8T^B8H`AX8]@8P`@8@^@H<^AXT`AH``@H`^A(`_BI(`"
368 "?Y8`?94`?I4`@Y8`B98`B90`A9$`@)$^BHL`@HP]@HX]BY$`AY0`>Y0^>I<`@YL`"
369 "BI8`AI0`@Y$_@HX^A8T^A8P`?XP^>(T\\>Y(^@)(`A9,`AY(`AX\\_A(\\\\@I$\\@I,^"
370 "AY0`@)$_?8\\`?X\\`A(``@X\\^@(X\\?(X\\A(H^@(P\\?)$]?I4^A9D^B9D^B)L]AILZ"
371 "@98`@)4`?Y0`@)(`A)(`AY$`AHT`@XD]?8<\\?X0[@X8[B(L^B(``A8`_A8`_BH``"
372 "?HX_>XT[?(\\[@)$^AI$^AI$`A(`_@I,`C(X`@H`^@9(_BI$_BI,^?98^>YD_A9@`"
373 "B)0`@Y$_?H\\]@8L\\AXH_B(L`@HP`>XT_@(P\\@HP]A(X_AX\\`AHX_A(X_@X\\^A(`_"
374 "@H`_?HX_?8\\_@I,`AY8_AI4^?9,\\>9$]@X\\^A8`_A9$`@Y0_@9<`A9@`BY8`D94`"
375 "?Y0`?)$^?X`^A)(`AY0`AY0`A9(`@X``?XP^@8L^AXT_B8\\`B),`AY0`AY(`B(``"
376 "@XT`@8P`@8X`AH``BH``B(X`A(X`@X``AHX_?I,_?Y4^BI$]C),_@9D_?I<]@H\\["
377 "AI(`@)$_?H\\]@XT`BXP`BXP`A8P`>XP`BXL_C(P`BXX`B(X`AXX`A8\\`A8\\`A(``"
378 "?8H^>XL^?8\\_A98`C)P`BIP`@ID`?)@`@Y8^B90`C),`A9$`?9(_?Y$_BXX`EHL`"
379 "?I,`>XT]?(D[@(P^@HX`?XP^?(X^?)$`@)4`AY4`BI4`BI4`B)4`AI4`A(`_@HP]"
380 "@(P\\@(P\\@HT\\@X\\^AI(`@Y0`@)(`?)$^A9$`?X`]?H\\\\B8\\`DH\\`C8\\`?Y0`=9T`"
381 "@YD^@)@^?Y8_@Y8`AI0`A9(^@)$\\?I0[@9(]B)4`BI4`B9$`B9$`B9,`A9$`>XPZ"
382 "?HX`@HX`AHT`AXT_AXT_A(X`@9$`?Y,`@I,^A9,`A(``A8P`AHL`AXP`A8H`@H@\\"
383 "?X@`>XT_?Y$`AY$`A9(`?)0`?I,_BH``@I4_A),^AY0^C)4`BY,`A(`_?8X\\>XT]"
384 "@)8`@Y@`AY@`B)8`AI$^A8T]A(P\\A8T^B)(`A)(`@H`_AHX_C(D^BHH^@H`_>I4`"
385 "A)<`@90`@)(`@X``AH``B(``A9$`A)4`?X`[@Y(]A(\\^A(P\\A8T]AH``@Y$`?H\\]"
386 "?X`^@X\\_B(``B8\\`B(X_A(X_@8\\^?H``@)$^@Y$`A8\\`AHT`AXT`B8\\`B9$`B(``"
387 "A(L`>XT]>XT]@HP_@HX^?)$^?Y(^BX\\`@9(_@Y$_A9$`AY(`B(``AHX_AHT`AH``"
388 "?Y$`@I(`AI0`AI(`AI$^A8`]A8`_AI(`AHX^A)(`@Y0`A9$`BXP`C8H`B8P`@HT`"
389 "@H\\`?8T`>XL`?XH`A(L`AHP`B(``B)(`@I,`A)(`A(`_A8`_AI$`AI(`A9,`@I,`"
390 "?X`]@Y(]AI$^BI$_B8`^AX\\_@X\\_@8X`@H`_A(``A8\\`A8T^A8T^AX\\_B(`^AY(]"
391 "AH``>X`]>8X[@HP]A(X_@)(`@)$_B8P_AI(`AI(`AY,`AI(`A(X_@XH^A(D`B8L`"
392 "A88^A(4[A(<ZA8T]AY8`A9L`@9H`?9@`A9(^A98`@9<`@),_A(X_C(X`BXP`B(D_"
393 "?(P`>HL`>8H_?8H^@XH^AHP`AX\\`AI$`@)$^@8\\]@X\\_A9$`A9$`@HX^?XT\\?(T["
394 "@Y0`A9,`AY(`B(``B(X_AHX_@XT`@8P`A(``@X\\`@XT^A(\\^A8`]AY(]AY,[AY,["
395 "AY,`?98`>I4_AI0`B90`@Y4`@)(`A(X_BH``BI(`B)0`A98`@)(`?8X\\?XL]@8L^"
396 "C(L`BHL`B8P_B9$`B98`AID`?I<`>90^C)L`A9L`?98\\=X`V?(\\YA8`_BX\\`B(H]"
397 "?8T`>X`_?)(`@9,`A9,`B),`AY(_A9(^@H`_@H`_A(``AY,`AI(`@X\\_@8\\^@H`_"
398 "A94`A9(`A(``@XT^A(L_@8L`@(L`@(L`@X\\`@HX^@HX]A9$`BI<`C9@`C)<`BI4`"
399 "AY4`?)D`>IH`A)<`B)0`@)4`?)0`@)(`C8`]B8`\\A9(^@Y8`@)<`?98`?90_?Y0`"
400 "@Y0`AI<`C)@`BY8`AI$`A(P\\@HP]@XT^AY8]@Y<\\?Y4\\?I8\\@9@`AY@`AY(_AHP]"
401 "@8\\^@)(`?Y8`@I@`AI<`B98`AY0`@Y(]A9$`AI(`AI(`AI(`AY,`B)0`BI8`BY<`"
402 "?HX`?HX`?XP^@(P\\@HX^@X\\`@X``A)$`AI(`@X\\^@H`^A90_BI<`BI<`B),`B(``"
403 "AY$`>I4`=I8_?Y$_A(X_?Y$_?)0`?Y8`D)4_BI$]A8`]@9(_?Y0`?Y8`?Y@`@)D`"
404 "?I,_@Y8`B9@`B),`A8T]@XD[A8L_B(X`@HT\\@HT\\@X\\^AI<`AIL`AI@`A)(`@HP]"
405 "A8T^@Y$`@90`@9(]A),^AY(`A9$`@8\\^@8L^A(X`A(X`@8L^@8L\\A(X_AH``A8\\`"
406 ">XL\\?(P]@(X]@Y$_AY8`AI<`A9@`A)<`AY8`A90_A90_A90_A),^@XT^@XH^A(D`"
407 "BHL`>H\\^=(\\\\@(P^B8P_A(``?Y0`?Y8`BY@`B90`AH``A(X`@HP`@(L`?HX_@9$`"
408 "AX\\]AX\\]AX\\]AX\\]A(\\^A(``A)$`A)0`BH\\`B(L`@X@_@HP`?HX_>HP\\>XL\\@(P^"
409 "B(L`AX\\`@X\\_@(X\\@XX]AX\\`A8\\`@HT`@XH^B(\\`B8``@XT`@8L\\A8T^A(P]@(@X"
410 "@)$_@I,`A98`B)H`BIP`AYL_@9@[?9,XAY8_A9<_A9<_A)4`@Y$_@8L^A(D`B8L`"
411 "CH8`?(D]=HH\\A8L_D8X`C9,`A)4`@I4`?Y0`@I(`A8\\`B(H`AH8`@H(^@H0^@X@`"
412 "BY@`BY(^CH``B9,`?Y8`?I8`A)(`B(H]@HD`>XP`@(L`C8@`C8@`?HX`?)(`AI(`"
413 "A),^?8`Z>X`\\@9(`B9$`B9$`B)<`AIT`AYH`A)H`@9<^@9(]AI,_B94`A98`?I4`"
414 "BI$]BY,`B90`A(``@(P^?8D[?XL]@8T_@I$\\A)8^A)<_?Y@^>I@\\?I<_A9,`B8\\`"
415 "@(X\\?9(^?98^?Y@`A9@`B)0`A8T^@(<[C(T`B8P_A8L]@XX]A9$`A)4`@Y8^@)8]"
416 "A)<_A)$]B(X_@X\\_>X`]?)$^A8\\`BHH^@XH`?(P_?HL]B(<^AX@^?8T^?9(_B)(`"
417 "BID`AYH`@ID`@)4`A(`_AI$^A),^?Y4\\@YH`@9H`?Y8_@),]AI,_BI4`BI8`A)4`"
418 "@)8_@Y8`A)<`@I,`@HX`A(L_B(L^BXT`BH``C)(`BY,`A9,`@)4`@)<`@I0`A(``"
419 "B9,`AY4`@Y8`@90`@Y0`A9,`@X``?8T^?8T^?8X\\?8\\]?I,`@9@`@IL`@)P`?YL`"
420 "?Y<]@)$\\A(`_@H`_>8X[?(X\\@XT^B8D]AXT_@H`_@)$_AX\\`A(\\^?Y(^@I,`BY,`"
421 "AY0^AYH`@YH`?I4^@)$\\A9(^AI$\\@X`Z?90_?)4_>I,]?)$]A)$]AY(_AI$^@H\\["
422 "@90`@90`@9,`@9$`@H\\`@X\\_AHX_B(X_B(<`BH8`BH<^AXH]A(``@)4`?Y0`?9(`"
423 "BY$`B)(`AY,`AI(`AY$`AY,`@)(`>9$`A(X_@HP]@(H[@(H[@8T]@X\\_A9$`A9$`"
424 "@Y0_A)(`B)0`AY4`?I,`?)$^@H`_A(P]AHX\\A9(^A98`AI<`A98`A)4`A90_B9$_"
425 "@8P[@8\\]?Y$_?)$^?X`^AH``BX\\`BHP^@(X]?H`^?9(_@90`A9,`AI,_@8`[?(TX"
426 "B8L]AXH]@XT^@H\\`?I,`?I4`?I<`?I<_@X@_AH<]B88]B(@\\A8T^@9(`?I,`?)(`"
427 "@8L`@8T_@8L^@XL\\A8L]AHT`@9$`>Y$`B9$`B(``AHX_A8L]AXH_B8H`B(D_B(D_"
428 "B9$`B(``BY,`B)4`@9,`?9,`?Y0`?I,`A(\\\\AY(_AY8`@YD`@9<`A90_AI$^AI$^"
429 "A(L`@(H_?HD^@(T_@H\\`A(L`AH<_BH4_C(T`B(\\`A9,`A98`AI<`A98`@I4`?I,_"
430 "BHP^AHP^@XT^@(``@)4`@9@`@)D`?IH`@98`AY,`CI(`CH``B(`^@H`^?Y(^?I,`"
431 "?8T`?(P]>X@Z?84V@80WA8@]A(X`@H\\`?90`?Y0`@I<`AI@`AY<`AY0`A9$`@XT`"
432 "C(``AXT_AX\\`@X\\`?HX_?Y$`@)<`?I<`A90_BY,`B90`?Y0`?I,_AX\\_BH``AI(`"
433 "A(T`@HD`@HD_A(X`A(\\`@8L`A8<`BH8`DHH`BHL`@XT^@H`_@Y$`@Y$`@I,`@Y4`"
434 "A9@`A)<`@9,`@)(`@(``@8\\^@XT^A(P\\?Y@`@Y8`B90`C),`AI$^@(X\\?H\\]?X`^"
435 "?H``@)(`@9,`A(``AXT_B8P_AHP^@8L^?X`^?X`^@8\\^@HX^@HX^@XT^A8T^AHX_"
436 "B9$`@XT^@8T_@8T_@(P^@X\\`A9,`@90`@Y8`C)(`BY$`?Y$_?H\\]B8P_BXX`@I(`"
437 ">X\\`@8X`AXX`AH``@Y$`?X\\`@X\\`B8X`CXH`B(H]@8L\\?XT\\@8T_@XH^@XH^A8P`"
438 "@YH`@9@`?Y0`?H`^?XP^@(H]@XD[AHD\\?Y(^@HX]AHX^B(``A8\\`?XP^?8H^?HL`"
439 "@HP_A9(`AI@`B)D`BI8`B90`A8`_@(P\\AXT`A8L]@XD[@8<Y@X<XA8DZB(P[BHX]"
440 "AY4`@9(`@9$`@X``A8P`B(X`B(``@XX]>Y(^B8\\`BHT`@(X]?HL]B(<^B(D_?(X`"
441 "=I$\\@Y8`C)<`AI,_?I$[?),^?Y0`A9,`CX\\`B(``A)(`A9(`AH``AXH_AX8_BH8`"
442 "A(\\ZA(\\\\@HX]@(X]?X\\`@9$`AI,`B)4`BI(`B8\\`BHT`BH``AI$`?X\\`>XH`>X<`"
443 "BXH`AX\\`@9(`?I$]?I$[@9(]@Y0`@Y0`?HX_@9(`A98`B)D`B9H`B)D`AID`A9@`"
446 static osg::Image* make2DNoiseNormal() {
447 osg::Image* image = new osg::Image;
448 image->setImage(noiseNormalWidth, noiseNormalHeight, 1,
449 GL_RGB8, GL_RGB, GL_UNSIGNED_BYTE,
450 new unsigned char[3 * noiseNormalWidth * noiseNormalHeight],
451 osg::Image::USE_NEW_DELETE);
453 char* data = noiseNormalData;
454 for (unsigned int i=0; i<noiseNormalHeight; ++i) {
455 for (unsigned int j=0; j<noiseNormalWidth; ++j) {
456 GLubyte *ptr = image->data(i,j);
457 NOISE_NORMAL_PIXEL(data,ptr);