blob: 528a466b7c35adb9cf70586db2b281a1fb51b9dc [file] [log] [blame]
buzbee9e0f9b02011-08-24 15:32:46 -07001// Copyright 2011 Google Inc. All Rights Reserved.
2
3#include <dirent.h>
4#include <dlfcn.h>
5#include <sys/stat.h>
6#include <sys/types.h>
7
8#include "base64.h"
9#include "heap.h"
10#include "thread.h"
11#include "stringprintf.h"
12#include "class_linker.h"
13#include "dex_file.h"
14
15#include "unicode/uclean.h"
16#include "unicode/uvernum.h"
17
18#include "gtest/gtest.h"
19
20namespace art {
21
buzbee9e0f9b02011-08-24 15:32:46 -070022//class IntMath {
23//
buzbeedd3efae2011-08-28 14:39:07 -070024// private int foo_;
25//
26// public IntMath(int stuff) {
27// foo_ = stuff;
28// }
29//
30// public IntMath() {
31// foo_ = 123;
32// }
33//
buzbee9e0f9b02011-08-24 15:32:46 -070034// /*
35// * Try to cause some unary operations.
36// */
37// static int unopTest(int x) {
38// x = -x;
39// x ^= 0xffffffff;
40// return x;
41// }
42//
43// static int shiftTest1() {
44// final int[] mBytes = {
45// 0x11, 0x22, 0x33, 0x44, 0x88, 0x99, 0xaa, 0xbb
46// };
47// long l;
48// int i1, i2;
49//
buzbeee6d61962011-08-27 11:58:19 -070050// if (mBytes[0] != 0x11) return 20;
51// if (mBytes[1] != 0x22) return 21;
52// if (mBytes[2] != 0x33) return 22;
53// if (mBytes[3] != 0x44) return 23;
54// if (mBytes[4] != 0x88) return 24;
55// if (mBytes[5] != 0x99) return 25;
56// if (mBytes[6] != 0xaa) return 26;
57// if (mBytes[7] != 0xbb) return 27;
58//
buzbee9e0f9b02011-08-24 15:32:46 -070059// i1 = mBytes[0] | mBytes[1] << 8 | mBytes[2] << 16 | mBytes[3] << 24;
60// i2 = mBytes[4] | mBytes[5] << 8 | mBytes[6] << 16 | mBytes[7] << 24;
61// l = i1 | ((long)i2 << 32);
62//
buzbeee6d61962011-08-27 11:58:19 -070063// if (i1 != 0x44332211) { return 0x80000000 | i1; }
buzbee9e0f9b02011-08-24 15:32:46 -070064// if (i2 != 0xbbaa9988) { return 2; }
65// if (l != 0xbbaa998844332211L) { return 3; }
66//
67// l = (long)mBytes[0]
68// | (long)mBytes[1] << 8
69// | (long)mBytes[2] << 16
70// | (long)mBytes[3] << 24
71// | (long)mBytes[4] << 32
72// | (long)mBytes[5] << 40
73// | (long)mBytes[6] << 48
74// | (long)mBytes[7] << 56;
75//
76// if (l != 0xbbaa998844332211L) { return 4; }
77// return 0;
78// }
79//
80// static int shiftTest2() {
81//
82// long a = 0x11;
83// long b = 0x22;
84// long c = 0x33;
85// long d = 0x44;
86// long e = 0x55;
87// long f = 0x66;
88// long g = 0x77;
89// long h = 0x88;
90//
91// long result = ((a << 56) | (b << 48) | (c << 40) | (d << 32) |
92// (e << 24) | (f << 16) | (g << 8) | h);
93//
94// if (result != 0x1122334455667788L) { return 1; }
95// return 0;
96// }
97//
98// static int unsignedShiftTest() {
99// byte b = -4;
100// short s = -4;
101// char c = 0xfffc;
102// int i = -4;
103//
104// b >>>= 4;
105// s >>>= 4;
106// c >>>= 4;
107// i >>>= 4;
108//
109// if ((int) b != -1) { return 1; }
110// if ((int) s != -1) { return 2; }
111// if ((int) c != 0x0fff) { return 3; }
112// if (i != 268435455) { return 4; }
113// return 0;
114// }
115//
116// static int convTest() {
117//
118// float f;
119// double d;
120// int i;
121// long l;
122//
123// /* int --> long */
124// i = 7654;
125// l = (long) i;
126// if (l != 7654L) { return 1; }
127//
128// i = -7654;
129// l = (long) i;
130// if (l != -7654L) { return 2; }
131//
132// /* long --> int (with truncation) */
133// l = 5678956789L;
134// i = (int) l;
135// if (i != 1383989493) { return 3; }
136//
137// l = -5678956789L;
138// i = (int) l;
139// if (i != -1383989493) { return 4; }
140// return 0;
141// }
142//
143// static int charSubTest() {
144//
145// char char1 = 0x00e9;
146// char char2 = 0xffff;
147// int i;
148//
149// /* chars are unsigned-expanded to ints before subtraction */
150// i = char1 - char2;
151// if (i != 0xffff00ea) { return 1; }
152// return 0;
153// }
154//
155// /*
156// * We pass in the arguments and return the results so the compiler
157// * doesn't do the math for us. (x=70000, y=-3)
158// */
159// static int intOperTest(int x, int y) {
160// int[] results = new int[10];
161//
162// /* this seems to generate "op-int" instructions */
163// results[0] = x + y;
164// results[1] = x - y;
165// results[2] = x * y;
166// results[3] = x * x;
167// results[4] = x / y;
168// results[5] = x % -y;
169// results[6] = x & y;
170// results[7] = x | y;
171// results[8] = x ^ y;
172//
173// /* this seems to generate "op-int/2addr" instructions */
174// results[9] = x + ((((((((x + y) - y) * y) / y) % y) & y) | y) ^ y);
175//
176// /* check this edge case while we're here (div-int/2addr) */
177// int minInt = -2147483648;
178// int negOne = -results[5];
179// int plusOne = 1;
180// int result = (((minInt + plusOne) - plusOne) / negOne) / negOne;
181//
182// if (result != minInt) { return 1;};
183// if (results[0] != 69997) { return 2;};
184// if (results[1] != 70003) { return 3;};
185// if (results[2] != -210000) { return 4;};
186// if (results[3] != 605032704) { return 5;};
187// if (results[4] != -23333) { return 6;};
188// if (results[5] != 1) { return 7;};
189// if (results[6] != 70000) { return 8;};
190// if (results[7] != -3) { return 9;};
191// if (results[8] != -70003) { return 10;};
192// if (results[9] != 70000) { return 11;};
193//
194// return 0;
195// }
196//
197// /*
198// * More operations, this time with 16-bit constants. (x=77777)
199// */
200// static int lit16Test(int x) {
201//
202// int[] results = new int[8];
203//
204// /* try to generate op-int/lit16" instructions */
205// results[0] = x + 1000;
206// results[1] = 1000 - x;
207// results[2] = x * 1000;
208// results[3] = x / 1000;
209// results[4] = x % 1000;
210// results[5] = x & 1000;
211// results[6] = x | -1000;
212// results[7] = x ^ -1000;
213//
214// if (results[0] != 78777) { return 1; }
215// if (results[1] != -76777) { return 2; }
216// if (results[2] != 77777000) { return 3; }
217// if (results[3] != 77) { return 4; }
218// if (results[4] != 777) { return 5; }
219// if (results[5] != 960) { return 6; }
220// if (results[6] != -39) { return 7; }
221// if (results[7] != -76855) { return 8; }
222// return 0;
223// }
224//
225// /*
226// * More operations, this time with 8-bit constants. (x=-55555)
227// */
228// static int lit8Test(int x) {
229//
230// int[] results = new int[8];
231//
232// /* try to generate op-int/lit8" instructions */
233// results[0] = x + 10;
234// results[1] = 10 - x;
235// results[2] = x * 10;
236// results[3] = x / 10;
237// results[4] = x % 10;
238// results[5] = x & 10;
239// results[6] = x | -10;
240// results[7] = x ^ -10;
241// int minInt = -2147483648;
242// int result = minInt / -1;
243// if (result != minInt) {return 1; }
244// if (results[0] != -55545) {return 2; }
245// if (results[1] != 55565) {return 3; }
246// if (results[2] != -555550) {return 4; }
247// if (results[3] != -5555) {return 5; }
248// if (results[4] != -5) {return 6; }
249// if (results[5] != 8) {return 7; }
250// if (results[6] != -1) {return 8; }
251// if (results[7] != 55563) {return 9; }
252// return 0;
253// }
254//
255//
256// /*
257// * Shift some data. (value=0xff00aa01, dist=8)
258// */
259// static int intShiftTest(int value, int dist) {
260// int results[] = new int[4];
261// results[0] = value << dist;
262// results[1] = value >> dist;
263// results[2] = value >>> dist;
264// results[3] = (((value << dist) >> dist) >>> dist) << dist;
265// if (results[0] != 0x00aa0100) {return 1; }
266// if (results[1] != 0xffff00aa) {return 2; }
267// if (results[2] != 0x00ff00aa) {return 3; }
268// if (results[3] != 0xaa00) {return 4; }
269// return 0;
270// }
271//
272// /*
273// * We pass in the arguments and return the results so the compiler
274// * doesn't do the math for us. (x=70000000000, y=-3)
275// */
276// static int longOperTest(long x, long y) {
277// long[] results = new long[10];
278//
279// /* this seems to generate "op-long" instructions */
280// results[0] = x + y;
281// results[1] = x - y;
282// results[2] = x * y;
283// results[3] = x * x;
284// results[4] = x / y;
285// results[5] = x % -y;
286// results[6] = x & y;
287// results[7] = x | y;
288// results[8] = x ^ y;
289// /* this seems to generate "op-long/2addr" instructions */
290// results[9] = x + ((((((((x + y) - y) * y) / y) % y) & y) | y) ^ y);
291// /* check this edge case while we're here (div-long/2addr) */
292// long minLong = -9223372036854775808L;
293// long negOne = -results[5];
294// long plusOne = 1;
295// long result = (((minLong + plusOne) - plusOne) / negOne) / negOne;
296// if (result != minLong) { return 1; }
297// if (results[0] != 69999999997L) { return 2; }
298// if (results[1] != 70000000003L) { return 3; }
299// if (results[2] != -210000000000L) { return 4; }
300// if (results[3] != -6833923606740729856L) { return 5; } // overflow
301// if (results[4] != -23333333333L) { return 6; }
302// if (results[5] != 1) { return 7; }
303// if (results[6] != 70000000000L) { return 8; }
304// if (results[7] != -3) { return 9; }
305// if (results[8] != -70000000003L) { return 10; }
306// if (results[9] != 70000000000L) { return 11; }
307// if (results.length != 10) { return 12; }
308// return 0;
309// }
310//
311// /*
buzbee7b1b86d2011-08-26 18:59:10 -0700312// * Shift some data. (value=0xd5aa96deff00aa01, dist=16)
buzbee9e0f9b02011-08-24 15:32:46 -0700313// */
314// static long longShiftTest(long value, int dist) {
315// long results[] = new long[4];
316// results[0] = value << dist;
317// results[1] = value >> dist;
318// results[2] = value >>> dist;
319// results[3] = (((value << dist) >> dist) >>> dist) << dist;
buzbee7b1b86d2011-08-26 18:59:10 -0700320// if (results[0] != 0x96deff00aa010000L) { return results[0]; }
321// if (results[1] != 0xffffd5aa96deff00L) { return results[1]; }
322// if (results[2] != 0x0000d5aa96deff00L) { return results[2]; }
323// if (results[3] != 0xffff96deff000000L) { return results[3]; }
buzbee9e0f9b02011-08-24 15:32:46 -0700324// if (results.length != 4) { return 5; }
325//
326// return results[0]; // test return-long
327// }
328//
329// static int switchTest(int a) {
330// int res = 1234;
331//
332// switch (a) {
333// case -1: res = 1; return res;
334// case 0: res = 2; return res;
335// case 1: /*correct*/ break;
336// case 2: res = 3; return res;
337// case 3: res = 4; return res;
338// case 4: res = 5; return res;
339// default: res = 6; return res;
340// }
341// switch (a) {
342// case 3: res = 7; return res;
343// case 4: res = 8; return res;
344// default: /*correct*/ break;
345// }
346//
347// a = 0x12345678;
348//
349// switch (a) {
350// case 0x12345678: /*correct*/ break;
351// case 0x12345679: res = 9; return res;
352// default: res = 1; return res;
353// }
354// switch (a) {
355// case 57: res = 10; return res;
356// case -6: res = 11; return res;
357// case 0x12345678: /*correct*/ break;
358// case 22: res = 12; return res;
359// case 3: res = 13; return res;
360// default: res = 14; return res;
361// }
362// switch (a) {
363// case -6: res = 15; return res;
364// case 3: res = 16; return res;
365// default: /*correct*/ break;
366// }
367//
368// a = -5;
369// switch (a) {
370// case 12: res = 17; return res;
371// case -5: /*correct*/ break;
372// case 0: res = 18; return res;
373// default: res = 19; return res;
374// }
375//
376// switch (a) {
377// default: /*correct*/ break;
378// }
379// return res;
380// }
381// /*
382// * Test the integer comparisons in various ways.
383// */
384// static int testIntCompare(int minus, int plus, int plus2, int zero) {
385// int res = 1111;
386//
387// if (minus > plus)
388// return 1;
389// if (minus >= plus)
390// return 2;
391// if (plus < minus)
392// return 3;
393// if (plus <= minus)
394// return 4;
395// if (plus == minus)
396// return 5;
397// if (plus != plus2)
398// return 6;
399//
400// /* try a branch-taken */
401// if (plus != minus) {
402// res = res;
403// } else {
404// return 7;
405// }
406//
407// if (minus > 0)
408// return 8;
409// if (minus >= 0)
410// return 9;
411// if (plus < 0)
412// return 10;
413// if (plus <= 0)
414// return 11;
415// if (plus == 0)
416// return 12;
417// if (zero != 0)
418// return 13;
419//
420// if (zero == 0) {
421// res = res;
422// } else {
423// return 14;
424// }
425// return res;
426// }
427//
428// /*
429// * Test cmp-long.
430// *
431// * minus=-5, alsoMinus=0xFFFFFFFF00000009, plus=4, alsoPlus=8
432// */
433// static int testLongCompare(long minus, long alsoMinus, long plus,
434// long alsoPlus) {
435// int res = 2222;
436//
437// if (minus > plus)
438// return 2;
439// if (plus < minus)
440// return 3;
441// if (plus == minus)
442// return 4;
443//
444// if (plus >= plus+1)
445// return 5;
446// if (minus >= minus+1)
447// return 6;
448//
449// /* try a branch-taken */
450// if (plus != minus) {
451// res = res;
452// } else {
453// return 7;
454// }
455//
456// /* compare when high words are equal but low words differ */
457// if (plus > alsoPlus)
458// return 8;
459// if (alsoPlus < plus)
460// return 9;
461// if (alsoPlus == plus)
462// return 10;
463//
464// /* high words are equal, low words have apparently different signs */
465// if (minus < alsoMinus) // bug!
466// return 11;
467// if (alsoMinus > minus)
468// return 12;
469// if (alsoMinus == minus)
470// return 13;
471//
472// return res;
473// }
474//
475// /*
476// * Test cmpl-float and cmpg-float.
477// */
478// static int testFloatCompare(float minus, float plus, float plus2,
479// float nan) {
480//
481// int res = 3333;
buzbee9e0f9b02011-08-24 15:32:46 -0700482// if (minus > plus)
483// res = 1;
484// if (plus < minus)
485// res = 2;
486// if (plus == minus)
487// res = 3;
488// if (plus != plus2)
489// res = 4;
490//
491// if (plus <= nan)
492// res = 5;
493// if (plus >= nan)
494// res = 6;
495// if (minus <= nan)
496// res = 7;
497// if (minus >= nan)
498// res = 8;
499// if (nan >= plus)
500// res = 9;
501// if (nan <= plus)
502// res = 10;
503//
504// if (nan == nan)
buzbeee6d61962011-08-27 11:58:19 -0700505// res = 1212;
buzbee9e0f9b02011-08-24 15:32:46 -0700506//
507// return res;
508// }
509//
510// static int testDoubleCompare(double minus, double plus, double plus2,
511// double nan) {
512//
513// int res = 4444;
514//
515// if (minus > plus)
516// return 1;
517// if (plus < minus)
518// return 2;
519// if (plus == minus)
520// return 3;
521// if (plus != plus2)
522// return 4;
523//
524// if (plus <= nan)
525// return 5;
526// if (plus >= nan)
527// return 6;
528// if (minus <= nan)
529// return 7;
530// if (minus >= nan)
531// return 8;
532// if (nan >= plus)
533// return 9;
534// if (nan <= plus)
535// return 10;
536//
537// if (nan == nan)
538// return 11;
539// return res;
540// }
541//
buzbeec5ef0462011-08-25 18:44:49 -0700542// static int fibonacci(int n) {
543// if (n == 0) {
544// return 0;
545// } else if (n == 1) {
546// return 1;
547// } else {
548// return fibonacci(n - 1) + fibonacci(n - 2);
549// }
550// }
buzbee9e0f9b02011-08-24 15:32:46 -0700551//
buzbee7b1b86d2011-08-26 18:59:10 -0700552///*
553// static void throwNullPointerException() {
554// throw new NullPointerException("first throw");
555// }
556//
557// static int throwAndCatch() {
558// try {
559// throwNullPointerException();
560// return 1;
561// } catch (NullPointerException npe) {
562// return 0;
563// }
564// }
565//*/
566//
567// static int manyArgs(int a0, long a1, int a2, long a3, int a4, long a5,
568// int a6, int a7, double a8, float a9, double a10, short a11, int a12,
569// char a13, int a14, int a15, byte a16, boolean a17, int a18, int a19,
570// long a20, long a21, int a22, int a23, int a24, int a25, int a26)
571// {
572// if (a0 != 0) return 0;
573// if (a1 != 1L) return 1;
574// if (a2 != 2) return 2;
575// if (a3 != 3L) return 3;
576// if (a4 != 4) return 4;
577// if (a5 != 5L) return 5;
578// if (a6 != 6) return 6;
579// if (a7 != 7) return 7;
580// if (a8 != 8.0) return 8;
581// if (a9 != 9.0f) return 9;
582// if (a10 != 10.0) return 10;
583// if (a11 != (short)11) return 11;
584// if (a12 != 12) return 12;
585// if (a13 != (char)13) return 13;
586// if (a14 != 14) return 14;
587// if (a15 != 15) return 15;
588// if (a16 != (byte)-16) return 16;
589// if (a17 != true) return 17;
590// if (a18 != 18) return 18;
591// if (a19 != 19) return 19;
592// if (a20 != 20L) return 20;
593// if (a21 != 21L) return 21;
594// if (a22 != 22) return 22;
595// if (a23 != 23) return 23;
596// if (a24 != 24) return 24;
597// if (a25 != 25) return 25;
598// if (a26 != 26) return 26;
599// return -1;
600// }
601//
602// int virtualCall(int a)
603// {
604// return a * 2;
605// }
606//
buzbeedd3efae2011-08-28 14:39:07 -0700607// void setFoo(int a)
608// {
609// foo_ = a;
610// }
611//
612// int getFoo()
613// {
614// return foo_;
615// }
616//
buzbee7b1b86d2011-08-26 18:59:10 -0700617// static int staticCall(int a)
618// {
619// IntMath foo = new IntMath();
620// return foo.virtualCall(a);
621// }
622//
buzbeedd3efae2011-08-28 14:39:07 -0700623// static int testIGetPut(int a)
624// {
625// IntMath foo = new IntMath(99);
626// IntMath foo123 = new IntMath();
627// int z = foo.getFoo();
628// z += a;
629// z += foo123.getFoo();
630// foo.setFoo(z);
631// return foo.getFoo();
632// }
buzbee7b1b86d2011-08-26 18:59:10 -0700633//
buzbee9e0f9b02011-08-24 15:32:46 -0700634// public static void main(String[] args) {
635// int res = unopTest(38);
636// if (res == 37) {
637// System.out.printf("unopTest PASSED\n");
638// } else {
639// System.out.printf("unopTest FAILED: %d\n", res);
640// }
641// res = shiftTest1();
642// if (res == 0) {
643// System.out.printf("shiftTest1 PASSED\n");
644// } else {
645// System.out.printf("shiftTest1 FAILED: %d\n", res);
646// }
647// res = shiftTest2();
648// if (res == 0) {
649// System.out.printf("shiftTest2 PASSED\n");
650// } else {
651// System.out.printf("shiftTest2 FAILED: %d\n", res);
652// }
653// res = unsignedShiftTest();
654// if (res == 0) {
655// System.out.printf("unsignedShiftTest PASSED\n");
656// } else {
657// System.out.printf("unsignedShiftTest FAILED: %d\n", res);
658// }
659// res = convTest();
660// if (res == 0) {
661// System.out.printf("convTest PASSED\n");
662// } else {
663// System.out.printf("convTest FAILED: %d\n", res);
664// }
665// res = charSubTest();
666// if (res == 0) {
667// System.out.printf("charSubTest PASSED\n");
668// } else {
669// System.out.printf("charSubTest FAILED: %d\n", res);
670// }
671// res = intOperTest(70000, -3);
672// if (res == 0) {
673// System.out.printf("intOperTest PASSED\n");
674// } else {
675// System.out.printf("intOperTest FAILED: %d\n", res);
676// }
677// res = longOperTest(70000000000L, -3L);
678// if (res == 0) {
679// System.out.printf("longOperTest PASSED\n");
680// } else {
681// System.out.printf("longOperTest FAILED: %d\n", res);
682// }
683// long lres = longShiftTest(0xd5aa96deff00aa01L, 16);
684// if (lres == 0x96deff00aa010000L) {
685// System.out.printf("longShiftTest PASSED\n");
686// } else {
687// System.out.printf("longShiftTest FAILED: %d\n", res);
688// }
689//
690// res = switchTest(1);
691// if (res == 1234) {
692// System.out.printf("switchTest PASSED\n");
693// } else {
694// System.out.printf("switchTest FAILED: %d\n", res);
695// }
696//
697// res = testIntCompare(-5, 4, 4, 0);
698// if (res == 1111) {
699// System.out.printf("testIntCompare PASSED\n");
700// } else {
701// System.out.printf("testIntCompare FAILED: %d\n", res);
702// }
703//
704// res = testLongCompare(-5L, -4294967287L, 4L, 8L);
705// if (res == 2222) {
706// System.out.printf("testLongCompare PASSED\n");
707// } else {
708// System.out.printf("testLongCompare FAILED: %d\n", res);
709// }
710//
711// res = testFloatCompare(-5.0f, 4.0f, 4.0f, (1.0f/0.0f) / (1.0f/0.0f));
712// if (res == 3333) {
713// System.out.printf("testFloatCompare PASSED\n");
714// } else {
715// System.out.printf("testFloatCompare FAILED: %d\n", res);
716// }
717//
718// res = testDoubleCompare(-5.0, 4.0, 4.0, (1.0/0.0) / (1.0/0.0));
719// if (res == 4444) {
720// System.out.printf("testDoubleCompare PASSED\n");
721// } else {
722// System.out.printf("testDoubleCompare FAILED: %d\n", res);
723// }
buzbeec5ef0462011-08-25 18:44:49 -0700724//
725// res = fibonacci(10);
726// if (res == 55) {
727// System.out.printf("fibonacci PASSED\n");
728// } else {
729// System.out.printf("fibonacci FAILED: %d\n", res);
730// }
buzbee7b1b86d2011-08-26 18:59:10 -0700731//
732///*
733// res = throwAndCatch();
734// if (res == 0) {
735// System.out.printf("throwAndCatch PASSED\n");
736// } else {
737// System.out.printf("throwAndCatch FAILED: %d\n", res);
738// }
739//*/
740//
741// res = manyArgs(0, 1L, 2, 3L, 4, 5L, 6, 7, 8.0, 9.0f, 10.0,
742// (short)11, 12, (char)13, 14, 15, (byte)-16, true, 18,
743// 19, 20L, 21L, 22, 23, 24, 25, 26);
744// if (res == -1) {
745// System.out.printf("manyArgs PASSED\n");
746// } else {
747// System.out.printf("manyArgs FAILED: %d\n", res);
748// }
749//
750// res = staticCall(3);
751// if (res == 6) {
752// System.out.printf("virtualCall PASSED\n");
753// } else {
754// System.out.printf("virtualCall FAILED: %d\n", res);
755// }
756//
buzbeedd3efae2011-08-28 14:39:07 -0700757// res = testIGetPut(111);
758// if (res == 333) {
759// System.out.printf("testGetPut PASSED\n");
760// } else {
761// System.out.printf("testGetPut FAILED: %d\n", res);
762// }
buzbee9e0f9b02011-08-24 15:32:46 -0700763// }
764//}
765static const char kIntMathDex[] =
buzbeedd3efae2011-08-28 14:39:07 -0700766"ZGV4CjAzNQC7e4Y087eJCugxNYogYY46TkuaUfNBl5W8KgAAcAAAAHhWNBIAAAAAAAAAABwqAACp"
767"AAAAcAAAABMAAAAUAwAADwAAAGADAAACAAAAFAQAAB4AAAAkBAAAAgAAABQFAABoJQAAVAUAAKYd"
768"AACuHQAAsR0AALQdAAC3HQAAuh0AAL0dAADEHQAAyx0AAM8dAADUHQAA2x0AAPkdAAD+HQAABR4A"
769"ABMeAAAWHgAAGx4AAB8eAAAqHgAALx4AAEYeAABbHgAAbx4AAIMeAACXHgAApB4AAKceAACqHgAA"
770"rh4AALIeAAC1HgAAuR4AAL0eAADSHgAA5x4AAOoeAADuHgAA8h4AAPceAAD8HgAAAR8AAAYfAAAL"
771"HwAAEB8AABUfAAAaHwAAHx8AACQfAAAoHwAALR8AADIfAAA3HwAAPB8AAEEfAABGHwAASx8AAE8f"
772"AABTHwAAVx8AAFsfAABfHwAAYx8AAGcfAAByHwAAfB8AAIIfAACFHwAAiB8AAI8fAACWHwAAox8A"
773"ALwfAADRHwAA2x8AAPEfAAADIAAABiAAAAwgAAAPIAAAEiAAAB0gAAA0IAAARyAAAEwgAABUIAAA"
774"WiAAAF0gAABlIAAAaCAAAGsgAABvIAAAcyAAAIAgAACZIAAAriAAALwgAAC/IAAAyiAAANQgAADi"
775"IAAA/CAAABIhAAAhIQAAPCEAAFMhAABZIQAAYSEAAGchAABxIQAAhyEAAJkhAAChIQAAqiEAALEh"
776"AAC0IQAAuSEAAMEhAADGIQAAzCEAANMhAADcIQAA5CEAAOkhAADxIQAA+iEAAP0hAAAFIgAAESIA"
777"ACkiAAA9IgAASSIAAGEiAAB1IgAAgSIAAIgiAACUIgAArCIAAMAiAADTIgAA8iIAAA0jAAAfIwAA"
778"PSMAAFcjAABvIwAAgyMAAJAjAACgIwAAvCMAANQjAADlIwAAAiQAABskAAAhJAAAKyQAAEEkAABT"
779"JAAAZiQAAIUkAACgJAAApyQAALAkAAC9JAAA1iQAAOskAADuJAAA8SQAAPQkAAABAAAAAgAAAAMA"
780"AAAEAAAABQAAAA8AAAASAAAAFAAAABUAAAAWAAAAFwAAABgAAAAaAAAAGwAAAB4AAAAfAAAAIAAA"
781"ACEAAAAiAAAABQAAAAQAAAAAAAAABgAAAAQAAAAMHQAABwAAAAQAAAAYHQAACAAAAAQAAAAkHQAA"
782"CQAAAAQAAAAsHQAACgAAAAQAAAA0HQAACwAAAAQAAABAHQAADAAAAAQAAAB8HQAADQAAAAQAAACE"
783"HQAAEAAAAAUAAACQHQAAEwAAAAcAAACYHQAAEQAAAAgAAAAkHQAAGwAAAA0AAAAAAAAAHAAAAA0A"
784"AAAkHQAAHQAAAA0AAACgHQAABgAEAFUAAAALAAcAdQAAAAYADAAAAAAABgANAAAAAAAGAAAARgAA"
785"AAYAAABJAAAABgADAFAAAAAGAAAAVwAAAAYABABcAAAABgAEAF8AAAAGAAMAYQAAAAYAAwBiAAAA"
786"BgAHAGMAAAAGAAkAZgAAAAYADgBrAAAABgAGAGwAAAAGAA0AfgAAAAYAAAB/AAAABgAAAIIAAAAG"
787"AAMAhQAAAAYAAwCHAAAABgABAIoAAAAGAAIAjQAAAAYAAwCSAAAABgAFAJMAAAAGAAgAlgAAAAYA"
788"AwCaAAAABgAAAJ0AAAAGAAMAogAAAAcACgB5AAAACAALAKEAAAAJAAwAAAAAAAkAAAABAAAA////"
789"/wAAAAAZAAAAAAAAAJopAAAAAAAABgAAAAAAAAAJAAAAAAAAAA4AAAAAAAAApCkAAAAAAAABAAEA"
790"AAAAAPokAAABAAAADgAAAAIAAQABAAAA/yQAAAgAAABwEB0AAQATAHsAWRAAAA4AAgACAAEAAAAG"
791"JQAABgAAAHAQHQAAAFkBAAAOAAQAAAAAAAAADyUAABAAAAATAOkAFAH//wAAkQIAARQD6gD//zIy"
792"BAASEw8DEgMo/gUAAAAAAAAAJCUAADIAAAATAOYdgQEWA+YdMQMBAzgDBAASEw8DEwAa4oEBFgMa"
793"4jEDAQM4AwQAEiMo9RgB9QB+UgEAAACEEBQD9QB+UjIwBAASMyjoGAEL/4Gt/v///4QQFAML/4Gt"
794"MjAEABJDKNsSAyjZAwABAAEAAABCJQAAFQAAABIQOQIEABIADwAyAv//2AAC/3EQBAAAAAoA2AEC"
795"/nEQBAABAAoBsBAo8AAADgACAAAAAABNJQAAsAAAABI3EiYSCRJYEhUTCgoAI6QPAJAKDA1LCgQJ"
796"kQoMDUsKBAWSCgwNSwoEBpIKDAxLCgQHEkqTCwwNSwsECnvalAoMCksKBAgSapULDA1LCwQKEnqW"
797"CwwNSwsEChMKCACXCwwNSwsEChMKCQCQCwwNsduy27PbtNu127bbt9uwy0sLBAoVAACARAoECHuh"
798"EhIVCgCAsxqTAwoBMgMDAA8FRAoECRQLbREBADK6BAABZSj3RAoEBRQLcxEBADK6BAABdSjuRAYE"
799"BhQKsMv8/zKmBAASRSjlRAYEBxQHABEQJDJ2BAABhSjcEkZEBgQGEwfbpDJ2BAASZSjTRAYECDJW"
800"BAASdSjNEmVEBQQFFAZwEQEAMmUFABMFCAAowhJ1RAUEBRLWMmUFABMFCQAouRMFCABEBQQFFAaN"
801"7v7/MmUFABMFCgAorRMFCQBEBQQFFAZwEQEAMmUFABMFCwAooQGVKJ8KAAIAAAAAAIolAAA/AAAA"
802"EkQSMxIiEhESBSNADwCYBggJSwYABZkGCAlLBgABmgYICUsGAAKYBggJuZa6lriWSwYAA0QGAAUU"
803"BwABqgAydgMADwFEAQABFAaqAP//MmEEAAEhKPdEAQACFAKqAP8AMiEEAAExKO5EAQADFAIAqgAA"
804"MiEEAAFBKOUBUSjjAAAJAAEAAAAAAKElAAB1AAAAEkQSMxIiEhESBRMGCAAjYA8A0IboA0sGAAXR"
805"hugDSwYAAdKG6ANLBgAC04boA0sGAAPUhugDSwYABBJW1YfoA0sHAAYSZtaHGPxLBwAGEnbXhxj8"
806"SwcABkQGAAUUB7kzAQAydgMADwFEAQABFAYX1P7/MmEEAAEhKPdEAQACFAJoyKIEMiEEAAExKO5E"
807"AQADEwJNADIhBAABQSjmRAEABBMCCQMyIQQAElEo3hJRRAEAARMCwAMyIQQAEmEo1RJhRAEAARMC"
808"2f8yIQQAEnEozBJxRAEAARQCydP+/zIhBQATAQgAKMEBUSi/AAALAAEAAAAAAMElAAB8AAAAEkYS"
809"NRIkEhMSBxMICAAjgg8A2AgKCksIAgfZCAoKSwgCA9oICgpLCAIE2wgKCksIAgXcCAoKSwgCBhJY"
810"3QkKCksJAggSaN4JCvZLCQIIEnjfCQr2SwkCCBUAAIDbAQD/MgEDAA8DRAgCBxQJByf//zKYBAAB"
811"Qyj3RAMCAxQIDdkAADKDBAABUyjuRAMCBBQE4oX3/zJDBAABYyjlRAMCBRMETeoyQwQAElMo3UQD"
812"AgYStDJDBAASYyjWElNEAwIDEwQIADJDBAAScyjNEmNEAwIDEvQyQwUAEwMIACjEEnNEAwIDFAQL"
813"2QAAMkMFABMDCQAouQFzKLcRAAQAAAAAAOwlAADuAAAAEwkKACOYEAASCZsKDQ9MCggJEhmcCg0P"
814"TAoICRIpnQoND0wKCAkSOZ0KDQ1MCggJEkmeCg0PTAoICRJZffqfCg0KTAoICRJpoAoND0wKCAkS"
815"eaEKDQ9MCggJEwkIAKIKDQ9MCggJEwkJAJsKDQ+8+r36vvq/+sD6wfrC+rvaTAoICRkAAIASWUUJ"
816"CAl9khYEAQCbCQAEvEm+KZ4GCQIxCQYAOAkEABIZDwkSCUUJCAkYC/07U0wQAAAAMQkJCzgJBAAS"
817"KSjyEhlFCQgJGAsDPFNMEAAAADEJCQs4CQQAEjko5BIpRQkICRgLAEwGG8////8xCQkLOAkEABJJ"
818"KNYSOUUJCAkYCwAAEPavBimhMQkJCzgJBAASWSjIEklFCQgJGAurljmR+v///zEJCQs4CQQAEmko"
819"uhJZRQkICRYLAQAxCQkLOAkEABJ5KK8SaUUJCAkYCwA8U0wQAAAAMQkJCzgJBQATCQgAKKASeUUJ"
820"CAkWC/3/MQkJCzgJBQATCQkAKJQTCQgARQkICRgL/cOss+////8xCQkLOAkFABMJCgAohBMJCQBF"
821"CQgJGAsAPFNMEAAAADEJCQs4CQYAEwkLACkAdP8hiRMKCgAyqQYAEwkMACkAa/8SCSkAaP8NAAMA"
822"AAAAACwmAABbAAAAEkkSOBInEhYSBSOQEACjAQoMTAEABaQBCgxMAQAGpQEKDEwBAAejAQoMxMHF"
823"wcPBTAEACEUBAAUYAwAAAaoA/96WMQEBAzgBBQBFAQAFEAFFAQAGGAMA/96WqtX//zEBAQM4AQUA"
824"RQEABijyRQEABxgDAP/elqrVAAAxAQEDOAEFAEUBAAco5EUBAAgYAwAAAP/elv//MQEBAzgBBQBF"
825"AQAIKNYhATKRBQAWAQUAKNBFAQAFKM0AACcAAQAiAAAARiYAAA4DAAATASYAcRAYAAEACiUTASUA"
826"AgAlADMQrgFiAQEAGgKcABIDIzMRAG4wGwAhA3EADwAAAAolOSWxAWIBAQAaAoEAEgMjMxEAbjAb"
827"ACEDcQAQAAAACiU5JbQBYgEBABoChAASAyMzEQBuMBsAIQNxABkAAAAKJTkltwFiAQEAGgKfABID"
828"IzMRAG4wGwAhA3EAAwAAAAolOSW6AWIBAQAaAksAEgMjMxEAbjAbACEDcQACAAAACiU5Jb0BYgEB"
829"ABoCSAASAyMzEQBuMBsAIQMUAXARAQAS0nEgBgAhAAolOSW8AWIBAQAaAl4AEgMjMxEAbjAbACED"
830"GAEAPFNMEAAAABYD/f9xQAoAIUMKJTkluAFiAQEAGgJlABIDIzMRAG4wGwAhAxgBAaoA/96WqtUT"
831"AxAAcTALACEDCyMYAQAAAaoA/96WMQEjATkBrQFiAQEAGgJoABIDIzMRAG4wGwAhAxIRcRASAAEA"
832"CiUTAdIEAgAlADMQqwFiAQEAGgKJABIDIzMRAG4wGwAhAxKxEkISQxIEcUAWACFDCiUTAVcEAgAl"
833"ADMQpgFiAQEAGgKVABIDIzMRAG4wGwAhAxYB+/8YAwkAAAD/////FgUEABYHCAB3CBcAAQAKJRMB"
834"rggCACUAMxCaAWIBAQAaApgAEgMjMxEAbjAbACEDFQGgwBUCgEAVA4BAFQTAf3FAFAAhQwolEwEF"
835"DQIAJQAzEJEBYgEBABoCjwASAyMzEQBuMBsAIQMZARTAGQMQQBkFEEAZB/h/dwgTAAEACiUTAVwR"
836"AgAlADMQiAFiAQEAGgKMABIDIzMRAG4wGwAhAxMBCgBxEAQAAQAKJRMBNwACACUAMxCFAWIBAQAa"
837"AlIAEgMjMxEAbjAbACEDEgEWAgEAEiQWBQMAEkcWCAUAEmoSexkMIEAVDhBBGQ8kQBMRCwATEgwA"
838"ExMNABMUDgATFQ8AExbw/xMXAQATGBIAExkTABYaFAAWHBUAEx4WABMfFwATIBgAEyEZABMiGgB3"
839"Ig0AAQAKJRLxAgAlADMQVAFiAQEAGgJuABIDIzMRAG4wGwAhAxIxcRARAAEACiUSYQIAJQAzEFMB"
840"YgEBABoCpAASAyMzEQBuMBsAIQMTAW8AcRAVAAEACiUTAU0BAgAlADMQUAFiAQEAGgKRABIDIzMR"
841"AG4wGwAhAw4AYgEBABoCmwASEyMzEQASBHcBHAAlAAwFTQUDBG4wGwAhAykATf5iAQEAGgKAABIT"
842"IzMRABIEdwEcACUADAVNBQMEbjAbACEDKQBK/mIBAQAaAoMAEhMjMxEAEgR3ARwAJQAMBU0FAwRu"
843"MBsAIQMpAEf+YgEBABoCngASEyMzEQASBHcBHAAlAAwFTQUDBG4wGwAhAykARP5iAQEAGgJKABIT"
844"IzMRABIEdwEcACUADAVNBQMEbjAbACEDKQBB/mIBAQAaAkcAEhMjMxEAEgR3ARwAJQAMBU0FAwRu"
845"MBsAIQMpAD7+YgEBABoCXQASEyMzEQASBHcBHAAlAAwFTQUDBG4wGwAhAykAP/5iAQEAGgJkABIT"
846"IzMRABIEdwEcACUADAVNBQMEbjAbACEDKQBD/mIBAQAaAmcAEhMjMxEAEgR3ARwAJQAMBU0FAwRu"
847"MBsAIQMpAE7+YgEBABoCiAASEyMzEQASBHcBHAAlAAwFTQUDBG4wGwAhAykAUP5iAQEAGgKUABIT"
848"IzMRABIEdwEcACUADAVNBQMEbjAbACEDKQBV/mIBAQAaApcAEhMjMxEAEgR3ARwAJQAMBU0FAwRu"
849"MBsAIQMpAGH+YgEBABoCjgASEyMzEQASBHcBHAAlAAwFTQUDBG4wGwAhAykAav5iAQEAGgKLABIT"
850"IzMRABIEdwEcACUADAVNBQMEbjAbACEDKQBz/mIBAQAaAlEAEhMjMxEAEgR3ARwAJQAMBU0FAwRu"
851"MBsAIQMpAHb+YgEBABoCbQASEyMzEQASBHcBHAAlAAwFTQUDBG4wGwAhAykAp/5iAQEAGgKjABIT"
852"IzMRABIEdwEcACUADAVNBQMEbjAbACEDKQCo/mIBAQAaApAAEhMjMxEAEgR3ARwAJQAMBU0FAwRu"
853"MBsAIQMpAKv+JQAiAAAAAADMJgAA5wAAADgDBAASAQ8BFgEBADEBBAE4AQQAEhEo+BIhMhYEABIh"
854"KPMWAQMAMQEHATgBBAASMSjrEkEyGQQAEkEo5hYBBQAxAQoBOAEEABJRKN4SYTIcBAASYSjZEnEy"
855"HQQAEnEo1BkBIEAvAQ4BOAEFABMBCAAoyxUBEEEtARABOAEFABMBCQAowhkBJEAvAREBOAEFABMB"
856"CgAouRMBCwACABMAMhAFABMBCwAosBMBDAACABQAMhAFABMBDAAopxMBDQACABUAMhAFABMBDQAo"
857"nhMBDgACABYAMhAFABMBDgAolRMBDwACABcAMhAFABMBDwAojBMB8P8CABgAMhAFABMBEAAogxIR"
858"AgAZADIQBgATAREAKQB7/xMBEgACABoAMhAGABMBEgApAHH/EwETAAIAGwAyEAYAEwETACkAZ/8W"
859"ARQAMQEcATgBBgATARQAKQBd/xYBFQAxAR4BOAEGABMBFQApAFP/EwEWAAIAIAAyEAYAEwEWACkA"
860"Sf8TARcAAgAhADIQBgATARcAKQA//xMBGAACACIAMhAGABMBGAApADX/EwEZAAIAIwAyEAYAEwEZ"
861"ACkAK/8TARoAAgAkADIQBgATARoAKQAh/xLxKQAe/wAADwAAAAAAAAANJwAA+gAAABIeEkcSNhIl"
862"EggTCQgAI5QPACYE3QAAAEQJBAgTChEAMqkFABMFFAAPBUQJBA4TCiIAMqkFABMFFQAo90QJBAUT"
863"CjMAMqkFABMFFgAo7kQJBAYTCkQAMqkFABMFFwAo5UQJBAcTCogAMqkFABMFGAAo3BJZRAkECRMK"
864"mQAyqQUAEwUZACjSEmlECQQJEwqqADKpBQATBRoAKMgSeUQJBAkTCrsAMqkFABMFGwAovkQJBAhE"
865"CgQO4AoKCLapRAoEBeAKChC2qUQKBAbgCgoYlgAJCkQJBAcSWkQKBArgCgoItqkSakQKBArgCgoQ"
866"tqkSekQKBArgCgoYlgEJCoEJgRsTDSAAw9uhAgkLFAkRIjNEMpAGABUFAIC2BSiHFAmImaq7M5GD"
867"/xgJESIzRIiZqrsxCQIJOAkFAAFlKQB3/0QJBAiBmUQLBA6BuxMNCADD28G5RAUEBYFbEwUQAMNb"
868"wblEBQQGgVUTCxgAw7XBlUQJBAeBmRMLIADDucGVEllECQQJgZkTCygAw7nBlRJpRAkECYGZEwsw"
869"AMO5wZUSeUQJBAmBmRMLOADDuaECBQkYBREiM0SImaq7MQUCBTgFBQABdSkAM/8BhSkAMP8AAwQA"
870"CAAAABEAAAAiAAAAMwAAAEQAAACIAAAAmQAAAKoAAAC7AAAAFgAAAAAAAABBJwAASQAAABYAEQAW"
871"AiIAFgQzABYGRAAWCFUAFgpmABYMdwAWDogAExI4AKMSABITFDAAoxQCFKESEhQTFCgAoxQEFKES"
872"EhQTFCAAoxQGFKESEhQTFBgAoxQIFKESEhQTFBAAoxQKFKESEhQTFAgAoxQMFKESEhShEBIOGBKI"
873"d2ZVRDMiETESEBI4EgUAExIBAA8SExIAACj9AAADAAEAAgAAAHYnAAAKAAAAIgAGAHAQAAAAAG4g"
874"GgAgAAoBDwEDAAEAAAAAAIInAACwAAAAEwDSBCsCYAAAABJgAQEPARIQAQEo/RIgAQEo+hIwAQEo"
875"9xJAAQEo9BJQAQEo8SsCWwAAABQCeFY0EisCXQAAABIQAQEo5RJwAQEo4hMACAABASjeEwAJAAEB"
876"KNosAlQAAAATAA4AAQEo0xMACgABASjPEwALAAEBKMsTAAwAAQEoxxMADQABASjDLAJTAAAAErIs"
877"AlkAAAATABMAAQEouBMADwABASi0EwAQAAEBKLATABEAAQEorBMAEgABASioAQEopgABBgD/////"
878"BgAAAAkAAAAVAAAADAAAAA8AAAASAAAAAAECAAMAAAAMAAAADwAAAAABAgB4VjQSEQAAAA0AAAAA"
879"AgUA+v///wMAAAAWAAAAOQAAAHhWNBILAAAAEwAAAA8AAAAHAAAAFwAAAAACAgD6////AwAAAAsA"
880"AAAPAAAAAAIDAPv///8AAAAADAAAABcAAAATAAAADwAAAAoACAAAAAAAjygAAEgAAAATAFwRLwEC"
881"BD0BBAASEA8AMAEEAjsBBAASICj6LwEEAjkBBAASMCj0LwEEBjgBBAASQCjuMAEECDwBBAASUCjo"
882"LwEECDoBBAASYCjiMAECCDwBBAAScCjcLwECCDoBBQATAAgAKNUvAQgEOgEFABMACQAozjABCAQ8"
883"AQUAEwAKACjHLwEICDkBxP8TAAsAKMAGAAQAAAAAALwoAAA+AAAAEwAFDS0BAgM9AQMAEhAuAQMC"
884"OwEDABIgLQEDAjkBAwASMC0BAwQ4AQMAEkAuAQMFPAEDABJQLQEDBToBAwASYC4BAgU8AQMAEnAt"
885"AQIFOgEEABMACAAtAQUDOgEEABMACQAuAQUDPAEEABMACgAtAQUFOQEEABMAvAQPAAUAAQACAAAA"
886"4SgAAB4AAAAiAAYAEwNjAHAgAQAwACIBBgBwEAAAAQBuEAUAAAAKArBCbhAFAAEACgOwMm4gDgAg"
887"AG4QBQAAAAoDDwMGAAQAAAAAAPsoAABDAAAAEwBXBDcyBAASEQ8BNDIEABIhKPw1IwQAEjEo+DYj"
888"BAASQSj0MyMEABJRKPAyQwQAEmEo7DIjBwA9AgcAEwEIACjlEnEo4zoCBQATAQkAKN47AwUAEwEK"
889"ACjZPAMFABMBCwAo1DkDBQATAQwAKM84BQUAEwENACjKOQUEAAEBKMYTAQ4AKMMAAA0ACAAAAAAA"
890"LCkAAFgAAAAWAwEAEwCuCDEBBQk9AQQAEiEPATEBCQU7AQQAEjEo+jEBCQU5AQQAEkEo9JsBCQMx"
891"AQkBOgEEABJRKOybAQUDMQEFAToBBAASYSjkMQEJBTgBCQAxAQkLPQEHABMBCAAo2RJxKNcxAQsJ"
892"OwEFABMBCQAo0DEBCwk5AQUAEwEKACjJMQEFBzsBBQATAQsAKMIxAQcFPQEFABMBDAAouzEBBwU5"
893"AQUAEwENACi0AQEosgEAAQAAAAAAWikAAAQAAAB7AN8AAP8PAAcAAAAAAAAAYykAACMAAAATBv8P"
894"EvUUBP///w8SwBLDFAH8/wAAEsKNQI9DjmHiAgIEMlAEABIUDwQyUwQAEiQo/DJhBAASNCj4MkIE"
895"ABJEKPQSBCjyAAACAAEAAAAAAIUpAAADAAAAUhAAAA8AAAACAAIAAAAAAIspAAADAAAAWQEAAA4A"
896"AAADAAIAAAAAAJMpAAADAAAA2gACAg8AAAAEAAAAAgACAAIAAgAEAAAAAwADAAMAAwABAAAABAAA"
897"AAIAAAAEAAQABAAAAAQABAAEAAQAGwAAAAQABQAEAAUABAAFAAQABAACAAMAAgAMAAQAAQAEAAQA"
898"AAAOAAQABAAFAAUABAAEAAQABAAEAAAAAgAAAAUABQAEAAAABQAFAAUABQACAAAABQAEAAIAAAAK"
899"ABEAAQAAABIABjxpbml0PgABQgABQwABRAABRgABSQAFSUREREQABUlGRkZGAAJJSQADSUlJAAVJ"
900"SUlJSQAcSUlKSUpJSklJREZEU0lDSUlCWklJSkpJSUlJSQADSUpKAAVJSkpKSgAMSW50TWF0aC5q"
901"YXZhAAFKAANKSkkAAkxJAAlMSW50TWF0aDsAA0xMTAAVTGphdmEvaW8vUHJpbnRTdHJlYW07ABNM"
902"amF2YS9sYW5nL0ludGVnZXI7ABJMamF2YS9sYW5nL09iamVjdDsAEkxqYXZhL2xhbmcvU3RyaW5n"
903"OwASTGphdmEvbGFuZy9TeXN0ZW07AAtPYmplY3QuamF2YQABUwABVgACVkkAAlZMAAFaAAJbSQAC"
904"W0oAE1tMamF2YS9sYW5nL09iamVjdDsAE1tMamF2YS9sYW5nL1N0cmluZzsAAWEAAmEwAAJhMQAD"
905"YTEwAANhMTEAA2ExMgADYTEzAANhMTQAA2ExNQADYTE2AANhMTcAA2ExOAADYTE5AAJhMgADYTIw"
906"AANhMjEAA2EyMgADYTIzAANhMjQAA2EyNQADYTI2AAJhMwACYTQAAmE1AAJhNgACYTcAAmE4AAJh"
907"OQAJYWxzb01pbnVzAAhhbHNvUGx1cwAEYXJncwABYgABYwAFY2hhcjEABWNoYXIyAAtjaGFyU3Vi"
908"VGVzdAAXY2hhclN1YlRlc3QgRkFJTEVEOiAlZAoAE2NoYXJTdWJUZXN0IFBBU1NFRAoACGNvbnZU"
909"ZXN0ABRjb252VGVzdCBGQUlMRUQ6ICVkCgAQY29udlRlc3QgUEFTU0VECgABZAAEZGlzdAABZQAB"
910"ZgAJZmlib25hY2NpABVmaWJvbmFjY2kgRkFJTEVEOiAlZAoAEWZpYm9uYWNjaSBQQVNTRUQKAANm"
911"b28ABmZvbzEyMwAEZm9vXwABZwAGZ2V0Rm9vAAFoAAFpAAJpMQACaTIAC2ludE9wZXJUZXN0ABdp"
912"bnRPcGVyVGVzdCBGQUlMRUQ6ICVkCgATaW50T3BlclRlc3QgUEFTU0VECgAMaW50U2hpZnRUZXN0"
913"AAFsAAlsaXQxNlRlc3QACGxpdDhUZXN0AAxsb25nT3BlclRlc3QAGGxvbmdPcGVyVGVzdCBGQUlM"
914"RUQ6ICVkCgAUbG9uZ09wZXJUZXN0IFBBU1NFRAoADWxvbmdTaGlmdFRlc3QAGWxvbmdTaGlmdFRl"
915"c3QgRkFJTEVEOiAlZAoAFWxvbmdTaGlmdFRlc3QgUEFTU0VECgAEbHJlcwAGbUJ5dGVzAARtYWlu"
916"AAhtYW55QXJncwAUbWFueUFyZ3MgRkFJTEVEOiAlZAoAEG1hbnlBcmdzIFBBU1NFRAoABm1pbklu"
917"dAAHbWluTG9uZwAFbWludXMAAW4AA25hbgAGbmVnT25lAANvdXQABHBsdXMABXBsdXMyAAdwbHVz"
918"T25lAAZwcmludGYAA3JlcwAGcmVzdWx0AAdyZXN1bHRzAAFzAAZzZXRGb28ACnNoaWZ0VGVzdDEA"
919"FnNoaWZ0VGVzdDEgRkFJTEVEOiAlZAoAEnNoaWZ0VGVzdDEgUEFTU0VECgAKc2hpZnRUZXN0MgAW"
920"c2hpZnRUZXN0MiBGQUlMRUQ6ICVkCgASc2hpZnRUZXN0MiBQQVNTRUQKAApzdGF0aWNDYWxsAAVz"
921"dHVmZgAKc3dpdGNoVGVzdAAWc3dpdGNoVGVzdCBGQUlMRUQ6ICVkCgASc3dpdGNoVGVzdCBQQVNT"
922"RUQKABF0ZXN0RG91YmxlQ29tcGFyZQAddGVzdERvdWJsZUNvbXBhcmUgRkFJTEVEOiAlZAoAGXRl"
923"c3REb3VibGVDb21wYXJlIFBBU1NFRAoAEHRlc3RGbG9hdENvbXBhcmUAHHRlc3RGbG9hdENvbXBh"
924"cmUgRkFJTEVEOiAlZAoAGHRlc3RGbG9hdENvbXBhcmUgUEFTU0VECgAWdGVzdEdldFB1dCBGQUlM"
925"RUQ6ICVkCgASdGVzdEdldFB1dCBQQVNTRUQKAAt0ZXN0SUdldFB1dAAOdGVzdEludENvbXBhcmUA"
926"GnRlc3RJbnRDb21wYXJlIEZBSUxFRDogJWQKABZ0ZXN0SW50Q29tcGFyZSBQQVNTRUQKAA90ZXN0"
927"TG9uZ0NvbXBhcmUAG3Rlc3RMb25nQ29tcGFyZSBGQUlMRUQ6ICVkCgAXdGVzdExvbmdDb21wYXJl"
928"IFBBU1NFRAoABHRoaXMACHVub3BUZXN0ABR1bm9wVGVzdCBGQUlMRUQ6ICVkCgAQdW5vcFRlc3Qg"
929"UEFTU0VECgARdW5zaWduZWRTaGlmdFRlc3QAHXVuc2lnbmVkU2hpZnRUZXN0IEZBSUxFRDogJWQK"
930"ABl1bnNpZ25lZFNoaWZ0VGVzdCBQQVNTRUQKAAV2YWx1ZQAHdmFsdWVPZgALdmlydHVhbENhbGwA"
931"F3ZpcnR1YWxDYWxsIEZBSUxFRDogJWQKABN2aXJ0dWFsQ2FsbCBQQVNTRUQKAAF4AAF5AAF6AAR6"
932"ZXJvAAMABw4ACQAHDjxLAAUBhwEHDjwtAHwABw4tAwBFAj8DAUYCLQMCWgVpAGcABw4tAwBaBR4D"
933"AWEGAg53AnQdLR6JWh55Wh54AIoEAXMHHS0hGi8AiwECpgGnAQdZTQMEfRBLS0tLWlpaWmvjLQMA"
934"cAU8AwF1BR4DAnkFWwMDfAUCDCwCdR2WlpaWlmm0lsPTAO8BAqEBTgdZLQMAfRBLS0t4exqWlqUA"
935"tQEBpgEHWU0DAH0QS0tLS0taWlt/AnkdlpaHh5aWwwDRAQGmAQdZTQMCfRBLS0tLS1paWi0DAHAF"
936"LQMBfAU1AngdlpaWh3iWlsMAgAICpgGnAQcOTQMIfRFaWlpaWmlaWmriLQMAcQZLAwJ1Bi0DBHkG"
937"aQMGfAYCDFkCdR3h4eHh4bTww/8BEQ+WAKYCAqEBTgdZLQMAfRFLS0t41wJ7HeHh4WoA5gQBQgcO"
938"aQMlewVpqEstqEstqEstqEstqEstqIctqLQtqLQDI2oGlqlaaamHaanwaanDaanDaalpaQIOpAE1"
939"EVqpWlqpaWmoAoR/HQUjARMUARMUARMUARMUARMUARMUARMUARMUBiMBExUBExUBExUBExUBExUB"
940"ExUCEgETDgETFQETFQCnBBslJjE5Ojs8PT4/JygpKissLS4vMDIzNDU2NzgHDgIbOwJmHYdah1qH"
941"WlqWlpaWlpaWlpaWpaWlpaWlpaWlABcAB1l9AwRrEAIbhgJmHZaWlpalpaYBEg8DAFsFARUPAwFc"
942"BXkDAmEGllrEATgX0gJfLAA9AAcOLQMAJAYtAwJDBi0DBEQGLQMGTQYtAwhPBi0DClAGLQMMVwYu"
943"Aw5ZBgEqEQMQfAa0ANYEASQHDloDAFQHALUCASQHDi4DAHsFQgIoLAUAAwF7BQJSHQUBBgABAgUA"
944"BgEeBQEGAAECBQAGAR8FAQYAAQIFAAYBHgUBBgABAgUABgEeBQEGAAECBQAGASAFAQYAQT0+AQIF"
945"AAYBAnYdBQEGAAECBQAGAR4FAQYAAQMFAAYBJQUBBgABAwUABgEgBQEGAEEBAwUABgECex0FAQYA"
946"AQMFAAYBHgUBBgABAwUABgEfBQEGAAEDBQAGAR4FAQYAAQMFAAYBIAUBBgBBHj8BAwUABgECdh0F"
947"AQYAAQMFAAYBHgUBBgABAwUABgEjBQEGAAEDBQAGAR8FAQYAAQMFAAYBAQEFAQYAJAUABgECUR0B"
948"EBeOiwEWFqsA7AMEcnd4dAcOLgMAewVLAhcdBQACah0GAEstSy1LLkstSy1LLUs8SzxLPUsAzAME"
949"cnd4dAcOLQMAewVLHkseSx5LH0seSx5LHkstSy1LLksuANwEASQHDngDAFQHWgMBVQdLAwKoAQUe"
950"WjwA7AIEcnd4qQEHDi4DAHsFLQIlHQJcHS0tLS0tLS0tLS8yLTcxLTwtPC08LTwtPUAbAJ4DBHJA"
951"d0EHLC4DAHsFSwIiHQJfHUstSy5pLWkvUUsCezsySzxLPks8SzxLTAARAaYBBw4eLQBOAAdoHgMA"
952"QwEeAwN+DTwDAUQCHwMCWgUeHh4uPxpLS0sA0QQABw4AzAQBJAcOLQDHBAEkBw4AAAABAB2BgATU"
953"CgABGAMAAgCBgAToCgGBgASICwEIpAsBCNQLAQjIDAIIhA0BCPQPAQiEEQEIgBMBCIgVAQj0GAEJ"
954"vBoBCOgmAgjIKgEIzC4BCPAvAQiUMAEIhDMBCKQ0AQiwNQEI/DUBCJQ3AQjUOAEI7DgFAMQ5CQDc"
955"OQwA9DkAAA0AAAAAAAAAAQAAAAAAAAABAAAAqQAAAHAAAAACAAAAEwAAABQDAAADAAAADwAAAGAD"
956"AAAEAAAAAgAAABQEAAAFAAAAHgAAACQEAAAGAAAAAgAAABQFAAABIAAAHAAAAFQFAAABEAAACwAA"
957"AAwdAAACIAAAqQAAAKYdAAADIAAAHAAAAPokAAAAIAAAAgAAAJopAAAAEAAAAQAAABwqAAA=";
buzbee9e0f9b02011-08-24 15:32:46 -0700958} // namespace art