Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/source
diff options
context:
space:
mode:
authorDaniel Genrich <daniel.genrich@gmx.net>2008-05-12 16:24:52 +0400
committerDaniel Genrich <daniel.genrich@gmx.net>2008-05-12 16:24:52 +0400
commitdb3712a2d82d5fe67daf3fbc79dde957282ffd6f (patch)
tree176fcf8247b385791fa26e09e3b52407a1d5c4bf /source
parenta68c03e409e01285bee622b12313117012e486a8 (diff)
parent2c9e8e75939553f03b01f34c185f5875473bad40 (diff)
svn merge -r 14721:14810 https://svn.blender.org/svnroot/bf-blender/trunk/blender
Diffstat (limited to 'source')
-rw-r--r--source/Makefile10
-rw-r--r--source/blender/blenkernel/BKE_idprop.h5
-rw-r--r--source/blender/blenkernel/BKE_writeffmpeg.h2
-rw-r--r--source/blender/blenkernel/intern/anim.c80
-rw-r--r--source/blender/blenkernel/intern/collision.c335
-rw-r--r--source/blender/blenkernel/intern/depsgraph.c43
-rw-r--r--source/blender/blenkernel/intern/ipo.c4
-rw-r--r--source/blender/blenkernel/intern/mball.c5
-rw-r--r--source/blender/blenkernel/intern/modifier.c142
-rw-r--r--source/blender/blenkernel/intern/object.c6
-rw-r--r--source/blender/blenkernel/intern/particle.c85
-rw-r--r--source/blender/blenkernel/intern/particle_system.c46
-rw-r--r--source/blender/blenkernel/intern/scene.c6
-rw-r--r--source/blender/blenkernel/intern/writeffmpeg.c91
-rw-r--r--source/blender/blenlib/BLI_arithb.h2
-rw-r--r--source/blender/blenlib/BLI_edgehash.h3
-rw-r--r--source/blender/blenlib/BLI_kdopbvh.h2
-rw-r--r--source/blender/blenlib/intern/BLI_kdopbvh.c22
-rw-r--r--source/blender/blenlib/intern/arithb.c5
-rw-r--r--source/blender/blenlib/intern/edgehash.c5
-rw-r--r--source/blender/blenloader/intern/readfile.c13
-rw-r--r--source/blender/blenloader/intern/writefile.c3
-rw-r--r--source/blender/include/BDR_editface.h5
-rw-r--r--source/blender/include/BIF_drawseq.h2
-rw-r--r--source/blender/include/BIF_editmesh.h1
-rw-r--r--source/blender/include/BIF_interface.h1
-rw-r--r--source/blender/makesdna/DNA_particle_types.h24
-rw-r--r--source/blender/makesdna/DNA_scene_types.h12
-rw-r--r--source/blender/nodes/intern/CMP_nodes/CMP_displace.c58
-rw-r--r--source/blender/nodes/intern/CMP_nodes/CMP_hueSatVal.c2
-rw-r--r--source/blender/nodes/intern/SHD_nodes/SHD_hueSatVal.c2
-rw-r--r--source/blender/python/BPY_interface.c65
-rw-r--r--source/blender/python/api2_2x/Blender.c2
-rw-r--r--source/blender/python/api2_2x/Object.c85
-rw-r--r--source/blender/python/api2_2x/Particle.c2245
-rw-r--r--source/blender/python/api2_2x/Particle.h43
-rw-r--r--source/blender/python/api2_2x/doc/API_intro.py3
-rw-r--r--source/blender/python/api2_2x/doc/Object.py11
-rw-r--r--source/blender/python/api2_2x/doc/Particle.py367
-rw-r--r--source/blender/python/api2_2x/doc/epy_docgen-3.sh12
-rw-r--r--source/blender/python/api2_2x/doc/epy_docgen.sh5
-rw-r--r--source/blender/render/intern/source/imagetexture.c1
-rw-r--r--source/blender/render/intern/source/shadeoutput.c8
-rw-r--r--source/blender/src/buttons_editing.c21
-rw-r--r--source/blender/src/buttons_object.c14
-rw-r--r--source/blender/src/buttons_scene.c446
-rw-r--r--source/blender/src/buttons_shading.c10
-rw-r--r--source/blender/src/drawimage.c21
-rw-r--r--source/blender/src/drawimasel.c26
-rw-r--r--source/blender/src/drawnla.c6
-rw-r--r--source/blender/src/drawobject.c23
-rw-r--r--source/blender/src/drawseq.c73
-rw-r--r--source/blender/src/drawview.c20
-rw-r--r--source/blender/src/edit.c32
-rw-r--r--source/blender/src/editarmature.c257
-rw-r--r--source/blender/src/editdeform.c68
-rw-r--r--source/blender/src/editface.c231
-rw-r--r--source/blender/src/editmesh_lib.c31
-rw-r--r--source/blender/src/editmesh_mods.c124
-rw-r--r--source/blender/src/editobject.c27
-rw-r--r--source/blender/src/editseq.c15
-rw-r--r--source/blender/src/editsima.c10
-rw-r--r--source/blender/src/header_image.c2
-rw-r--r--source/blender/src/header_seq.c36
-rw-r--r--source/blender/src/header_view3d.c2
-rw-r--r--source/blender/src/interface.c35
-rw-r--r--source/blender/src/interface_draw.c8
-rw-r--r--source/blender/src/parametrizer.c51
-rw-r--r--source/blender/src/parametrizer.h2
-rw-r--r--source/blender/src/parametrizer_intern.h2
-rw-r--r--source/blender/src/sequence.c13
-rw-r--r--source/blender/src/space.c56
-rw-r--r--source/blender/src/splash.jpg.c3930
-rw-r--r--source/blender/src/toets.c3
-rw-r--r--source/blender/src/transform_conversions.c6
-rw-r--r--source/blender/src/transform_generics.c50
-rw-r--r--source/blender/src/transform_manipulator.c11
-rw-r--r--source/blender/src/transform_orientations.c10
-rw-r--r--source/blender/src/unwrapper.c28
-rw-r--r--source/gameengine/GamePlayer/Makefile2
-rw-r--r--source/gameengine/GamePlayer/ghost/GPG_ghost.cpp25
-rw-r--r--source/gameengine/Ketsji/KX_CameraActuator.cpp15
-rw-r--r--source/gameengine/Ketsji/KX_PythonInit.cpp31
-rw-r--r--source/gameengine/PyDoc/GameLogic.py15
-rw-r--r--source/nan_definitions.mk6
85 files changed, 5997 insertions, 3666 deletions
diff --git a/source/Makefile b/source/Makefile
index 9d3a7da89be..cd8bf0e7cb4 100644
--- a/source/Makefile
+++ b/source/Makefile
@@ -317,12 +317,10 @@ ifeq ($(WITH_BF_BLENDERPLAYER), true)
endif
ifeq ($(WITH_BF_WEBPLUGIN), true)
- ifneq ($(NAN_NO_PLUGIN), true)
- BINTARGETS += plugin
- ifeq ($(OS),linux)
- ifeq ($(CPU),i386)
- BINTARGETS += xplink
- endif
+ BINTARGETS += plugin
+ ifeq ($(OS),linux)
+ ifeq ($(CPU),i386)
+ BINTARGETS += xplink
endif
endif
endif
diff --git a/source/blender/blenkernel/BKE_idprop.h b/source/blender/blenkernel/BKE_idprop.h
index 46252b310ae..2d7d0e9286f 100644
--- a/source/blender/blenkernel/BKE_idprop.h
+++ b/source/blender/blenkernel/BKE_idprop.h
@@ -171,4 +171,9 @@ void IDP_FreeProperty(struct IDProperty *prop);
/*Unlinks any struct IDProperty<->ID linkage that might be going on.*/
void IDP_UnlinkProperty(struct IDProperty *prop);
+#define IDP_Int(prop) (prop->data.val)
+#define IDP_Float(prop) (*(float*)&prop->data.val)
+#define IDP_String(prop) ((char*)prop->data.pointer)
+#define IDP_Array(prop) (prop->data.pointer)
+
#endif /* _BKE_IDPROP_H */
diff --git a/source/blender/blenkernel/BKE_writeffmpeg.h b/source/blender/blenkernel/BKE_writeffmpeg.h
index 844f25d51dc..7819919fba8 100644
--- a/source/blender/blenkernel/BKE_writeffmpeg.h
+++ b/source/blender/blenkernel/BKE_writeffmpeg.h
@@ -43,6 +43,7 @@ extern "C" {
#define FFMPEG_H264 6
#define FFMPEG_XVID 7
#define FFMPEG_FLV 8
+#define FFMPEG_MKV 9
#define FFMPEG_CODEC_MPEG1 0
#define FFMPEG_CODEC_MPEG2 1
@@ -58,6 +59,7 @@ extern "C" {
#define FFMPEG_PRESET_SVCD 2
#define FFMPEG_PRESET_VCD 3
#define FFMPEG_PRESET_DV 4
+#define FFMPEG_PRESET_H264 5
struct RenderData;
diff --git a/source/blender/blenkernel/intern/anim.c b/source/blender/blenkernel/intern/anim.c
index 8533175ad37..97475496865 100644
--- a/source/blender/blenkernel/intern/anim.c
+++ b/source/blender/blenkernel/intern/anim.c
@@ -337,6 +337,7 @@ static void frames_duplilist(ListBase *lb, Object *ob, int level, int animated)
{
extern int enable_cu_speed; /* object.c */
Object copyob;
+ DupliObject *dob;
int cfrao, ok;
/* simple preventing of too deep nested groups */
@@ -360,7 +361,8 @@ static void frames_duplilist(ListBase *lb, Object *ob, int level, int animated)
if(ok) {
do_ob_ipo(ob);
where_is_object_time(ob, (float)G.scene->r.cfra);
- new_dupli_object(lb, ob, ob->obmat, ob->lay, G.scene->r.cfra, OB_DUPLIFRAMES, animated);
+ dob= new_dupli_object(lb, ob, ob->obmat, ob->lay, G.scene->r.cfra, OB_DUPLIFRAMES, animated);
+ Mat4CpyMat4(dob->omat, copyob.obmat);
}
}
@@ -723,7 +725,7 @@ static void face_duplilist(ListBase *lb, ID *id, Object *par, float par_space_ma
static void new_particle_duplilist(ListBase *lb, ID *id, Object *par, float par_space_mat[][4], ParticleSystem *psys, int level, int animated)
{
GroupObject *go;
- Object *ob=0, **oblist=0;
+ Object *ob=0, **oblist=0, obcopy, *obcopylist=0;
DupliObject *dob;
ParticleSettings *part;
ParticleData *pa;
@@ -733,7 +735,7 @@ static void new_particle_duplilist(ListBase *lb, ID *id, Object *par, float par_
ParticleSystemModifierData *psmd;
float ctime, pa_time, scale = 1.0f;
float tmat[4][4], mat[4][4], obrotmat[4][4], pamat[4][4], size=0.0;
- float (*obmat)[4];
+ float (*obmat)[4], (*oldobmat)[4];
float xvec[3] = {-1.0, 0.0, 0.0}, q[4];
int lay, a, b, k, step_nbr = 0, counter, hair = 0;
int totpart, totchild, totgroup=0, pa_num;
@@ -758,7 +760,7 @@ static void new_particle_duplilist(ListBase *lb, ID *id, Object *par, float par_
totchild = psys->totchild;
BLI_srandom(31415926 + psys->seed);
-
+
lay= G.scene->lay;
if((part->draw_as == PART_DRAW_OB && part->dup_ob) ||
(part->draw_as == PART_DRAW_GR && part->dup_group && part->dup_group->gobject.first)) {
@@ -778,49 +780,55 @@ static void new_particle_duplilist(ListBase *lb, ID *id, Object *par, float par_
psys->lattice = psys_get_lattice(par, psys);
+ /* gather list of objects or single object */
if(part->draw_as==PART_DRAW_GR) {
group_handle_recalc_and_update(par, part->dup_group);
- go= part->dup_group->gobject.first;
- while(go) {
- go=go->next;
+ for(go=part->dup_group->gobject.first; go; go=go->next)
totgroup++;
- }
- oblist= MEM_callocN(totgroup*sizeof(Object *), "dupgroup object list");
- go= part->dup_group->gobject.first;
- for(a=0; a<totgroup; a++, go=go->next)
- oblist[a]=go->ob;
+ /* we also copy the actual objects to restore afterwards, since
+ * where_is_object_time will change the object which breaks transform */
+ oblist = MEM_callocN(totgroup*sizeof(Object *), "dupgroup object list");
+ obcopylist = MEM_callocN(totgroup*sizeof(Object), "dupgroup copy list");
+
+ go = part->dup_group->gobject.first;
+ for(a=0; a<totgroup; a++, go=go->next) {
+ oblist[a] = go->ob;
+ obcopylist[a] = *go->ob;
+ }
}
- else
+ else {
ob = part->dup_ob;
+ obcopy = *ob;
+ }
if(totchild==0 || part->draw & PART_DRAW_PARENT)
- a=0;
+ a = 0;
else
- a=totpart;
+ a = totpart;
for(pa=psys->particles,counter=0; a<totpart+totchild; a++,pa++,counter++) {
if(a<totpart) {
+ /* handle parent particle */
if(pa->flag & (PARS_UNEXIST+PARS_NO_DISP))
continue;
- pa_num=pa->num;
-
- pa_time=pa->time;
-
- size=pa->size;
+ pa_num = pa->num;
+ pa_time = pa->time;
+ size = pa->size;
}
else {
- /* TODO: figure these two out */
- cpa= &psys->child[a - totpart];
+ /* handle child particle */
+ cpa = &psys->child[a - totpart];
+
pa_num = a;
pa_time = psys->particles[cpa->parent].time;
-
- size=psys_get_child_size(psys, cpa, ctime, 0);
+ size = psys_get_child_size(psys, cpa, ctime, 0);
}
if(part->draw_as==PART_DRAW_GR) {
+ /* for groups, pick the object based on settings */
if(part->draw&PART_DRAW_RAND_GR)
b= BLI_rand() % totgroup;
else if(part->from==PART_FROM_PARTICLE)
@@ -829,13 +837,17 @@ static void new_particle_duplilist(ListBase *lb, ID *id, Object *par, float par_
b= a % totgroup;
ob = oblist[b];
- obmat= oblist[b]->obmat;
+ obmat = oblist[b]->obmat;
+ oldobmat = obcopylist[b].obmat;
}
- else
+ else {
obmat= ob->obmat;
+ oldobmat= obcopy.obmat;
+ }
for(k=0; k<=step_nbr; k++, counter++) {
if(hair) {
+ /* hair we handle separate and compute transform based on hair keys */
if(a < totpart) {
cache = psys->pathcache[a];
psys_get_dupli_path_transform(par, psys, psmd, pa, 0, cache, pamat, &scale);
@@ -848,6 +860,7 @@ static void new_particle_duplilist(ListBase *lb, ID *id, Object *par, float par_
VECCOPY(pamat[3], cache->co);
}
else if(step_nbr) {
+ /* other keys */
state.time = (float)k / (float)step_nbr;
psys_get_particle_on_path(par, psys, a, &state, 0);
@@ -856,6 +869,7 @@ static void new_particle_duplilist(ListBase *lb, ID *id, Object *par, float par_
pamat[3][3]= 1.0f;
}
else {
+ /* first key */
state.time = -1.0;
if(psys_get_particle_state(par, psys, a, &state, 0) == 0)
continue;
@@ -876,6 +890,7 @@ static void new_particle_duplilist(ListBase *lb, ID *id, Object *par, float par_
Mat4CpyMat4(mat, tmat);
dob= new_dupli_object(lb, go->ob, mat, par->lay, counter, OB_DUPLIPARTS, animated);
+ Mat4CpyMat4(dob->omat, oldobmat);
if(G.rendering)
psys_get_dupli_texture(par, part, psmd, pa, cpa, dob->uv, dob->orco);
}
@@ -901,14 +916,27 @@ static void new_particle_duplilist(ListBase *lb, ID *id, Object *par, float par_
Mat4CpyMat4(mat, tmat);
dob= new_dupli_object(lb, ob, mat, par->lay, counter, OB_DUPLIPARTS, animated);
+ Mat4CpyMat4(dob->omat, oldobmat);
if(G.rendering)
psys_get_dupli_texture(par, part, psmd, pa, cpa, dob->uv, dob->orco);
}
}
}
+
+ /* restore objects since they were changed in where_is_object_time */
+ if(part->draw_as==PART_DRAW_GR) {
+ for(a=0; a<totgroup; a++)
+ *(oblist[a])= obcopylist[a];
+ }
+ else
+ *ob= obcopy;
}
+
+ /* clean up */
if(oblist)
MEM_freeN(oblist);
+ if(obcopylist)
+ MEM_freeN(obcopylist);
if(psys->lattice) {
end_latt_deform();
diff --git a/source/blender/blenkernel/intern/collision.c b/source/blender/blenkernel/intern/collision.c
index f3637b4dda2..9ba47874d3c 100644
--- a/source/blender/blenkernel/intern/collision.c
+++ b/source/blender/blenkernel/intern/collision.c
@@ -183,42 +183,43 @@ Collision modifier code end
* copied from SOLVE_CUBIC.C --> GSL
*/
-/* DG: debug hint! don't forget that all functions were "fabs", "sinf", etc before */
-#define mySWAP(a,b) { float tmp = b ; b = a ; a = tmp ; }
+#define mySWAP(a,b) do { double tmp = b ; b = a ; a = tmp ; } while(0)
-int gsl_poly_solve_cubic ( float a, float b, float c, float *x0, float *x1, float *x2 )
+int
+ gsl_poly_solve_cubic (double a, double b, double c,
+ double *x0, double *x1, double *x2)
{
- float q = ( a * a - 3 * b );
- float r = ( 2 * a * a * a - 9 * a * b + 27 * c );
+ double q = (a * a - 3 * b);
+ double r = (2 * a * a * a - 9 * a * b + 27 * c);
- float Q = q / 9;
- float R = r / 54;
+ double Q = q / 9;
+ double R = r / 54;
- float Q3 = Q * Q * Q;
- float R2 = R * R;
+ double Q3 = Q * Q * Q;
+ double R2 = R * R;
- float CR2 = 729 * r * r;
- float CQ3 = 2916 * q * q * q;
+ double CR2 = 729 * r * r;
+ double CQ3 = 2916 * q * q * q;
- if ( R == 0 && Q == 0 )
+ if (R == 0 && Q == 0)
{
*x0 = - a / 3 ;
*x1 = - a / 3 ;
*x2 = - a / 3 ;
return 3 ;
}
- else if ( CR2 == CQ3 )
+ else if (CR2 == CQ3)
{
- /* this test is actually R2 == Q3, written in a form suitable
+ /* this test is actually R2 == Q3, written in a form suitable
for exact computation with integers */
- /* Due to finite precision some float roots may be missed, and
+ /* Due to finite precision some double roots may be missed, and
considered to be a pair of complex roots z = x +/- epsilon i
close to the real axis. */
- float sqrtQ = sqrt ( Q );
+ double sqrtQ = sqrt (Q);
- if ( R > 0 )
+ if (R > 0)
{
*x0 = -2 * sqrtQ - a / 3;
*x1 = sqrtQ - a / 3;
@@ -232,72 +233,88 @@ int gsl_poly_solve_cubic ( float a, float b, float c, float *x0, float *x1, floa
}
return 3 ;
}
- else if ( CR2 < CQ3 ) /* equivalent to R2 < Q3 */
+ else if (CR2 < CQ3) /* equivalent to R2 < Q3 */
{
- float sqrtQ = sqrt ( Q );
- float sqrtQ3 = sqrtQ * sqrtQ * sqrtQ;
- float theta = acos ( R / sqrtQ3 );
- float norm = -2 * sqrtQ;
- *x0 = norm * cos ( theta / 3 ) - a / 3;
- *x1 = norm * cos ( ( theta + 2.0 * M_PI ) / 3 ) - a / 3;
- *x2 = norm * cos ( ( theta - 2.0 * M_PI ) / 3 ) - a / 3;
-
+ double sqrtQ = sqrt (Q);
+ double sqrtQ3 = sqrtQ * sqrtQ * sqrtQ;
+ double theta = acos (R / sqrtQ3);
+ double norm = -2 * sqrtQ;
+ *x0 = norm * cos (theta / 3) - a / 3;
+ *x1 = norm * cos ((theta + 2.0 * M_PI) / 3) - a / 3;
+ *x2 = norm * cos ((theta - 2.0 * M_PI) / 3) - a / 3;
+
/* Sort *x0, *x1, *x2 into increasing order */
- if ( *x0 > *x1 )
- mySWAP ( *x0, *x1 ) ;
-
- if ( *x1 > *x2 )
+ if (*x0 > *x1)
+ mySWAP(*x0, *x1) ;
+
+ if (*x1 > *x2)
{
- mySWAP ( *x1, *x2 ) ;
-
- if ( *x0 > *x1 )
- mySWAP ( *x0, *x1 ) ;
+ mySWAP(*x1, *x2) ;
+
+ if (*x0 > *x1)
+ mySWAP(*x0, *x1) ;
}
-
+
return 3;
}
else
{
- float sgnR = ( R >= 0 ? 1 : -1 );
- float A = -sgnR * pow ( ABS ( R ) + sqrt ( R2 - Q3 ), 1.0/3.0 );
- float B = Q / A ;
+ double sgnR = (R >= 0 ? 1 : -1);
+ double A = -sgnR * pow (fabs (R) + sqrt (R2 - Q3), 1.0/3.0);
+ double B = Q / A ;
*x0 = A + B - a / 3;
return 1;
}
}
+
/**
* gsl_poly_solve_quadratic
*
* copied from GSL
*/
-int gsl_poly_solve_quadratic ( float a, float b, float c, float *x0, float *x1 )
+int
+ gsl_poly_solve_quadratic (double a, double b, double c,
+ double *x0, double *x1)
{
- float disc = b * b - 4 * a * c;
+ double disc = b * b - 4 * a * c;
+
+ if (a == 0) /* Handle linear case */
+ {
+ if (b == 0)
+ {
+ return 0;
+ }
+ else
+ {
+ *x0 = -c / b;
+ return 1;
+ };
+ }
- if ( disc > 0 )
+ if (disc > 0)
{
- if ( b == 0 )
+ if (b == 0)
{
- float r = ABS ( 0.5 * sqrt ( disc ) / a );
+ double r = fabs (0.5 * sqrt (disc) / a);
*x0 = -r;
*x1 = r;
}
else
{
- float sgnb = ( b > 0 ? 1 : -1 );
- float temp = -0.5 * ( b + sgnb * sqrt ( disc ) );
- float r1 = temp / a ;
- float r2 = c / temp ;
+ double sgnb = (b > 0 ? 1 : -1);
+ double temp = -0.5 * (b + sgnb * sqrt (disc));
+ double r1 = temp / a ;
+ double r2 = c / temp ;
- if ( r1 < r2 )
+ if (r1 < r2)
{
*x0 = r1 ;
*x1 = r2 ;
- }
- else
+ }
+ else
{
*x0 = r2 ;
*x1 = r1 ;
@@ -305,7 +322,7 @@ int gsl_poly_solve_quadratic ( float a, float b, float c, float *x0, float *x1
}
return 2;
}
- else if ( disc == 0 )
+ else if (disc == 0)
{
*x0 = -0.5 * b / a ;
*x1 = -0.5 * b / a ;
@@ -319,79 +336,88 @@ int gsl_poly_solve_quadratic ( float a, float b, float c, float *x0, float *x1
+
/*
* See Bridson et al. "Robust Treatment of Collision, Contact and Friction for Cloth Animation"
* page 4, left column
*/
-
-int cloth_get_collision_time ( float a[3], float b[3], float c[3], float d[3], float e[3], float f[3], float solution[3] )
+int cloth_get_collision_time ( double a[3], double b[3], double c[3], double d[3], double e[3], double f[3], double solution[3] )
{
int num_sols = 0;
- float g = -a[2] * c[1] * e[0] + a[1] * c[2] * e[0] +
- a[2] * c[0] * e[1] - a[0] * c[2] * e[1] -
- a[1] * c[0] * e[2] + a[0] * c[1] * e[2];
-
- float h = -b[2] * c[1] * e[0] + b[1] * c[2] * e[0] - a[2] * d[1] * e[0] +
- a[1] * d[2] * e[0] + b[2] * c[0] * e[1] - b[0] * c[2] * e[1] +
- a[2] * d[0] * e[1] - a[0] * d[2] * e[1] - b[1] * c[0] * e[2] +
- b[0] * c[1] * e[2] - a[1] * d[0] * e[2] + a[0] * d[1] * e[2] -
- a[2] * c[1] * f[0] + a[1] * c[2] * f[0] + a[2] * c[0] * f[1] -
- a[0] * c[2] * f[1] - a[1] * c[0] * f[2] + a[0] * c[1] * f[2];
-
- float i = -b[2] * d[1] * e[0] + b[1] * d[2] * e[0] +
- b[2] * d[0] * e[1] - b[0] * d[2] * e[1] -
- b[1] * d[0] * e[2] + b[0] * d[1] * e[2] -
- b[2] * c[1] * f[0] + b[1] * c[2] * f[0] -
- a[2] * d[1] * f[0] + a[1] * d[2] * f[0] +
- b[2] * c[0] * f[1] - b[0] * c[2] * f[1] +
- a[2] * d[0] * f[1] - a[0] * d[2] * f[1] -
- b[1] * c[0] * f[2] + b[0] * c[1] * f[2] -
- a[1] * d[0] * f[2] + a[0] * d[1] * f[2];
-
- float j = -b[2] * d[1] * f[0] + b[1] * d[2] * f[0] +
- b[2] * d[0] * f[1] - b[0] * d[2] * f[1] -
- b[1] * d[0] * f[2] + b[0] * d[1] * f[2];
+ // x^0 - checked
+ double g = a[0] * c[1] * e[2] - a[0] * c[2] * e[1] +
+ a[1] * c[2] * e[0] - a[1] * c[0] * e[2] +
+ a[2] * c[0] * e[1] - a[2] * c[1] * e[0];
+
+ // x^1
+ double h = -b[2] * c[1] * e[0] + b[1] * c[2] * e[0] - a[2] * d[1] * e[0] +
+ a[1] * d[2] * e[0] + b[2] * c[0] * e[1] - b[0] * c[2] * e[1] +
+ a[2] * d[0] * e[1] - a[0] * d[2] * e[1] - b[1] * c[0] * e[2] +
+ b[0] * c[1] * e[2] - a[1] * d[0] * e[2] + a[0] * d[1] * e[2] -
+ a[2] * c[1] * f[0] + a[1] * c[2] * f[0] + a[2] * c[0] * f[1] -
+ a[0] * c[2] * f[1] - a[1] * c[0] * f[2] + a[0] * c[1] * f[2];
+
+ // x^2
+ double i = -b[2] * d[1] * e[0] + b[1] * d[2] * e[0] +
+ b[2] * d[0] * e[1] - b[0] * d[2] * e[1] -
+ b[1] * d[0] * e[2] + b[0] * d[1] * e[2] -
+ b[2] * c[1] * f[0] + b[1] * c[2] * f[0] -
+ a[2] * d[1] * f[0] + a[1] * d[2] * f[0] +
+ b[2] * c[0] * f[1] - b[0] * c[2] * f[1] +
+ a[2] * d[0] * f[1] - a[0] * d[2] * f[1] -
+ b[1] * c[0] * f[2] + b[0] * c[1] * f[2] -
+ a[1] * d[0] * f[2] + a[0] * d[1] * f[2];
+
+ // x^3 - checked
+ double j = -b[2] * d[1] * f[0] + b[1] * d[2] * f[0] +
+ b[2] * d[0] * f[1] - b[0] * d[2] * f[1] -
+ b[1] * d[0] * f[2] + b[0] * d[1] * f[2];
+
+ /*
+ printf("r1: %lf\n", a[0] * c[1] * e[2] - a[0] * c[2] * e[1]);
+ printf("r2: %lf\n", a[1] * c[2] * e[0] - a[1] * c[0] * e[2]);
+ printf("r3: %lf\n", a[2] * c[0] * e[1] - a[2] * c[1] * e[0]);
+
+ printf("x1 x: %f, y: %f, z: %f\n", a[0], a[1], a[2]);
+ printf("x2 x: %f, y: %f, z: %f\n", c[0], c[1], c[2]);
+ printf("x3 x: %f, y: %f, z: %f\n", e[0], e[1], e[2]);
+
+ printf("v1 x: %f, y: %f, z: %f\n", b[0], b[1], b[2]);
+ printf("v2 x: %f, y: %f, z: %f\n", d[0], d[1], d[2]);
+ printf("v3 x: %f, y: %f, z: %f\n", f[0], f[1], f[2]);
+
+ printf("t^3: %lf, t^2: %lf, t^1: %lf, t^0: %lf\n", j, i, h, g);
+ */
// Solve cubic equation to determine times t1, t2, t3, when the collision will occur.
- if ( ABS ( j ) > ALMOST_ZERO )
+ if ( ABS ( j ) > DBL_EPSILON )
{
i /= j;
h /= j;
g /= j;
-
num_sols = gsl_poly_solve_cubic ( i, h, g, &solution[0], &solution[1], &solution[2] );
}
- else if ( ABS ( i ) > ALMOST_ZERO )
+ else
{
num_sols = gsl_poly_solve_quadratic ( i, h, g, &solution[0], &solution[1] );
solution[2] = -1.0;
}
- else if ( ABS ( h ) > ALMOST_ZERO )
- {
- solution[0] = -g / h;
- solution[1] = solution[2] = -1.0;
- num_sols = 1;
- }
- else if ( ABS ( g ) > ALMOST_ZERO )
- {
- solution[0] = 0;
- solution[1] = solution[2] = -1.0;
- num_sols = 1;
- }
+
+ // printf("num_sols: %d, sol1: %lf, sol2: %lf, sol3: %lf\n", num_sols, solution[0], solution[1], solution[2]);
// Discard negative solutions
- if ( ( num_sols >= 1 ) && ( solution[0] < 0 ) )
+ if ( ( num_sols >= 1 ) && ( solution[0] < DBL_EPSILON ) )
{
--num_sols;
solution[0] = solution[num_sols];
}
- if ( ( num_sols >= 2 ) && ( solution[1] < 0 ) )
+ if ( ( num_sols >= 2 ) && ( solution[1] < DBL_EPSILON ) )
{
--num_sols;
solution[1] = solution[num_sols];
}
- if ( ( num_sols == 3 ) && ( solution[2] < 0 ) )
+ if ( ( num_sols == 3 ) && ( solution[2] < DBL_EPSILON ) )
{
--num_sols;
}
@@ -736,21 +762,72 @@ int cloth_are_edges_adjacent ( ClothModifierData *clmd, CollisionModifierData *c
return 0;
}
-void cloth_collision_moving_edges ( ClothModifierData *clmd, CollisionModifierData *collmd, CollPair *collpair )
+int cloth_collision_moving_edges ( ClothModifierData *clmd, CollisionModifierData *collmd, CollPair *collpair )
{
EdgeCollPair edgecollpair;
Cloth *cloth1=NULL;
ClothVertex *verts1=NULL;
unsigned int i = 0, j = 0, k = 0;
int numsolutions = 0;
- float a[3], b[3], c[3], d[3], e[3], f[3], solution[3];
+ double x1[3], v1[3], x2[3], v2[3], x3[3], v3[3];
+ double solution[3];
MVert *verts2 = collmd->current_x; // old x
MVert *velocity2 = collmd->current_v; // velocity
- float mintime = 0;
+ float mintime = FLT_MAX;
+ float distance;
+ float triA[3][3], triB[3][3];
+ int result = 0;
cloth1 = clmd->clothObject;
verts1 = cloth1->verts;
+
+ /*
+ double p[4][3] = {{0,0,0},{0,2,0},{1,1,-1},{1,1,1}};
+ double v[4][3] = {{0,0,0},{1,0,0},{-2,0,0},{-2,0,0}};
+
+ double pp[2][3] = {{-1,-1,-1}, {2,2,2}};
+
+
+ VECSUB ( x1, p[1], p[0] );
+ VECSUB ( v1, v[1], v[0] );
+
+ VECSUB ( x2, p[2], p[0] );
+ VECSUB ( v2, v[2], v[0] );
+
+ VECSUB ( x3, p[3], p[0] );
+ VECSUB ( v3, v[3], v[0] );
+ printf("x1 x: %f, y: %f, z: %f\n", x1[0], x1[1], x1[2]);
+ printf("x2 x: %f, y: %f, z: %f\n", x2[0], x2[1], x2[2]);
+ printf("x3 x: %f, y: %f, z: %f\n", x3[0], x3[1], x3[2]);
+
+ printf("v1 x: %f, y: %f, z: %f\n", v1[0], v1[1], v1[2]);
+ printf("v2 x: %f, y: %f, z: %f\n", v2[0], v2[1], v2[2]);
+ printf("v3 x: %f, y: %f, z: %f\n", v3[0], v3[1], v3[2]);
+
+ numsolutions = cloth_get_collision_time ( x1, v1, x2, v2, x3, v3, solution );
+
+ for ( k = 0; k < numsolutions; k++ )
+ printf("mintime: %f\n", solution[k]);
+
+ mintime = solution[0];
+
+ // move triangles to collision point in time
+ VECADDS(triA[0], pp[0], v[0], solution[0]);
+ VECADDS(triA[1], p[0], v[0], solution[0]);
+ VECADDS(triA[2], p[1], v[1], solution[0]);
+
+ VECADDS(triB[0], pp[1], v[0], solution[0]);
+ VECADDS(triB[1], p[2], v[2], solution[0]);
+ VECADDS(triB[2], p[3], v[3], solution[0]);
+
+ // check distance there
+ distance = plNearestPoints (triA[0], triA[1], triA[2], triB[0], triB[1], triB[2], collpair->pa,collpair->pb,collpair->vector );
+
+ printf("mintime: %f, dist: %f\n", mintime, distance);
+
+ exit(0);
+ */
for(i = 0; i < 9; i++)
{
// 9 edge - edge possibilities
@@ -831,18 +908,28 @@ void cloth_collision_moving_edges ( ClothModifierData *clmd, CollisionModifierDa
if ( !cloth_are_edges_adjacent ( clmd, collmd, &edgecollpair ) )
{
// always put coll points in p21/p22
- VECSUB ( a, verts1[edgecollpair.p12].txold, verts1[edgecollpair.p11].txold );
- VECSUB ( b, verts1[edgecollpair.p12].tv, verts1[edgecollpair.p11].tv );
- VECSUB ( c, verts2[edgecollpair.p21].co, verts1[edgecollpair.p11].txold );
- VECSUB ( d, velocity2[edgecollpair.p21].co, verts1[edgecollpair.p11].tv );
- VECSUB ( e, verts2[edgecollpair.p22].co, verts1[edgecollpair.p11].txold );
- VECSUB ( f, velocity2[edgecollpair.p22].co, verts1[edgecollpair.p11].v );
-
- numsolutions = cloth_get_collision_time ( a, b, c, d, e, f, solution );
+ VECSUB ( x1, verts1[edgecollpair.p12].txold, verts1[edgecollpair.p11].txold );
+ VECSUB ( v1, verts1[edgecollpair.p12].tv, verts1[edgecollpair.p11].tv );
+
+ VECSUB ( x2, verts2[edgecollpair.p21].co, verts1[edgecollpair.p11].txold );
+ VECSUB ( v2, velocity2[edgecollpair.p21].co, verts1[edgecollpair.p11].tv );
+
+ VECSUB ( x3, verts2[edgecollpair.p22].co, verts1[edgecollpair.p11].txold );
+ VECSUB ( v3, velocity2[edgecollpair.p22].co, verts1[edgecollpair.p11].tv );
+ /*
+ printf("A x: %f, y: %f, z: %f\n", a[0], a[1], a[2]);
+ printf("B x: %f, y: %f, z: %f\n", b[0], b[1], b[2]);
+ printf("C x: %f, y: %f, z: %f\n", c[0], c[1], c[2]);
+ printf("D x: %f, y: %f, z: %f\n", d[0], d[1], d[2]);
+ printf("E x: %f, y: %f, z: %f\n", e[0], e[1], e[2]);
+ printf("F x: %f, y: %f, z: %f\n", f[0], f[1], f[2]);
+ exit(0);
+ */
+ numsolutions = cloth_get_collision_time ( x1, v1, x2, v2, x3, v3, solution );
for ( k = 0; k < numsolutions; k++ )
{
- if ( ( solution[k] >= 0.0 ) && ( solution[k] <= 1.0 ) )
+ if ( ( solution[k] >= DBL_EPSILON ) && ( solution[k] <= 1.0 ) )
{
//float out_collisionTime = solution[k];
@@ -850,14 +937,35 @@ void cloth_collision_moving_edges ( ClothModifierData *clmd, CollisionModifierDa
// TODO: put into (edge) collision list
- mintime = MIN2(mintime, solution[k]);
-
- printf("Moving edge found!, mintime: %f\n", mintime);
+ mintime = MIN2(mintime, (float)solution[k]);
+
+// printf("mt: %f, %lf, %f\n", mintime, solution[k], (float)solution[k]);
+
+ result = 1;
break;
}
}
}
}
+
+ if(result)
+ {
+ // move triangles to collision point in time
+ VECADDS(triA[0], verts1[collpair->ap1].txold, verts1[collpair->ap1].tv, mintime);
+ VECADDS(triA[1], verts1[collpair->ap2].txold, verts1[collpair->ap2].tv, mintime);
+ VECADDS(triA[2], verts1[collpair->ap3].txold, verts1[collpair->ap3].tv, mintime);
+
+ VECADDS(triB[0], collmd->current_x[collpair->bp1].co, collmd->current_v[collpair->bp1].co, mintime);
+ VECADDS(triB[1], collmd->current_x[collpair->bp2].co, collmd->current_v[collpair->bp2].co, mintime);
+ VECADDS(triB[2], collmd->current_x[collpair->bp3].co, collmd->current_v[collpair->bp3].co, mintime);
+
+ // check distance there
+ distance = plNearestPoints (triA[0], triA[1], triA[2], triB[0], triB[1], triB[2], collpair->pa,collpair->pb,collpair->vector );
+
+ printf("mintime: %f, dist: %f\n", mintime, distance);
+ }
+
+ return result;
}
void cloth_collision_moving_tris ( ClothModifierData *clmd, ClothModifierData *coll_clmd, CollisionTree *tree1, CollisionTree *tree2 )
@@ -868,7 +976,8 @@ void cloth_collision_moving_tris ( ClothModifierData *clmd, ClothModifierData *c
ClothVertex *verts1=NULL, *verts2=NULL;
unsigned int i = 0, j = 0, k = 0;
int numsolutions = 0;
- float a[3], b[3], c[3], d[3], e[3], f[3], solution[3];
+ float a[3], b[3], c[3], d[3], e[3], f[3];
+ double solution[3];
for ( i = 0; i < 2; i++ )
{
@@ -932,7 +1041,7 @@ void cloth_collision_moving_tris ( ClothModifierData *clmd, ClothModifierData *c
for ( k = 0; k < numsolutions; k++ )
{
- if ( ( solution[k] >= 0.0 ) && ( solution[k] <= 1.0 ) )
+ if ( ( solution[k] >= ALMOST_ZERO ) && ( solution[k] <= 1.0 ) )
{
//float out_collisionTime = solution[k];
@@ -982,6 +1091,8 @@ int cloth_collision_moving ( ClothModifierData *clmd, CollisionModifierData *col
cloth_collision_moving_edges ( clmd, collmd, collpair);
}
+
+ return 1;
}
int cloth_bvh_objcollisions_do ( ClothModifierData * clmd, CollisionModifierData *collmd, float step, float dt )
diff --git a/source/blender/blenkernel/intern/depsgraph.c b/source/blender/blenkernel/intern/depsgraph.c
index 1331c9a7d12..80f450000bb 100644
--- a/source/blender/blenkernel/intern/depsgraph.c
+++ b/source/blender/blenkernel/intern/depsgraph.c
@@ -346,6 +346,24 @@ static void dag_add_driver_relation(Ipo *ipo, DagForest *dag, DagNode *node, int
}
}
+static void dag_add_collision_field_relation(DagForest *dag, Object *ob, DagNode *node)
+{
+ Base *base;
+ DagNode *node2;
+
+ // would be nice to have a list of colliders here
+ // so for now walk all objects in scene check 'same layer rule'
+ for(base = G.scene->base.first; base; base= base->next) {
+ if((base->lay & ob->lay) && base->object->pd) {
+ Object *ob1= base->object;
+ if((ob1->pd->deflect || ob1->pd->forcefield) && (ob1 != ob)) {
+ node2 = dag_get_node(dag, ob1);
+ dag_add_relation(dag, node2, node, DAG_RL_DATA_DATA|DAG_RL_OB_DATA, "Field Collision");
+ }
+ }
+ }
+}
+
static void build_dag_object(DagForest *dag, DagNode *scenenode, Object *ob, int mask)
{
bConstraint *con;
@@ -523,22 +541,9 @@ static void build_dag_object(DagForest *dag, DagNode *scenenode, Object *ob, int
}
/* softbody collision */
- if((ob->type==OB_MESH) || (ob->type==OB_CURVE) || (ob->type==OB_LATTICE)) {
- Base *base;
- if(modifiers_isSoftbodyEnabled(ob)){
- // would be nice to have a list of colliders here
- // so for now walk all objects in scene check 'same layer rule'
- for(base = G.scene->base.first; base; base= base->next) {
- if( (base->lay & ob->lay) && base->object->pd) {
- Object *ob1= base->object;
- if((ob1->pd->deflect) && (ob1 != ob)) {
- node2 = dag_get_node(dag, ob1);
- dag_add_relation(dag, node2, node, DAG_RL_DATA_DATA|DAG_RL_OB_DATA, "Softbody Collision");
- }
- }
- }
- }
- }
+ if((ob->type==OB_MESH) || (ob->type==OB_CURVE) || (ob->type==OB_LATTICE))
+ if(modifiers_isSoftbodyEnabled(ob) || modifiers_isClothEnabled(ob))
+ dag_add_collision_field_relation(dag, ob, node);
if (ob->type==OB_MBALL) {
Object *mom= find_basis_mball(ob);
@@ -1691,7 +1696,7 @@ static void flush_update_node(DagNode *node, unsigned int layer, int curtime)
for(itA = node->child; itA; itA= itA->next) {
all_layer |= itA->lay;
/* the relationship is visible */
- if(itA->lay & layer) {
+ if((itA->lay & layer) || (itA->node->ob == G.obedit)) {
if(itA->node->type==ID_OB) {
obc= itA->node->ob;
oldflag= obc->recalc;
@@ -1722,7 +1727,7 @@ static void flush_update_node(DagNode *node, unsigned int layer, int curtime)
}
}
/* even nicer, we can clear recalc flags... */
- if((all_layer & layer)==0) {
+ if((all_layer & layer)==0 && (ob != G.obedit)) {
/* but existing displaylists or derivedmesh should be freed */
if(ob->recalc & OB_RECALC_DATA)
object_free_display(ob);
@@ -1736,7 +1741,7 @@ static void flush_update_node(DagNode *node, unsigned int layer, int curtime)
/* could merge this in with loop above...? (ton) */
for(itA = node->child; itA; itA= itA->next) {
/* the relationship is visible */
- if(itA->lay & layer) {
+ if((itA->lay & layer) || (itA->node->ob == G.obedit)) {
if(itA->node->type==ID_OB) {
obc= itA->node->ob;
/* child moves */
diff --git a/source/blender/blenkernel/intern/ipo.c b/source/blender/blenkernel/intern/ipo.c
index 0b9f7615bfa..321d4f1d37e 100644
--- a/source/blender/blenkernel/intern/ipo.c
+++ b/source/blender/blenkernel/intern/ipo.c
@@ -1917,6 +1917,9 @@ void set_icu_vars(IpoCurve *icu)
icu->ymin= 0.0;
break;
case PART_CLUMP:
+ icu->ymin= -1.0;
+ icu->ymax= 1.0;
+ break;
case PART_DRAG:
case PART_DAMP:
case PART_LENGTH:
@@ -1926,6 +1929,7 @@ void set_icu_vars(IpoCurve *icu)
case PART_KINK_SHAPE:
icu->ymin= -0.999;
icu->ymax= 0.999;
+ break;
}
}
else if(icu->blocktype==ID_CO) {
diff --git a/source/blender/blenkernel/intern/mball.c b/source/blender/blenkernel/intern/mball.c
index 16916381c95..0cd7736f6c3 100644
--- a/source/blender/blenkernel/intern/mball.c
+++ b/source/blender/blenkernel/intern/mball.c
@@ -1363,8 +1363,9 @@ void find_first_points(PROCESS *mbproc, MetaBall *mb, int a)
out_v = mbproc->function(out.x, out.y, out.z);
/* find "first points" on Implicit Surface of MetaElemnt ml */
- //converge(&in, &out, in_v, out_v, mbproc->function, &mbproc->start, mb, 0);
- workp = in;
+ workp.x = in.x;
+ workp.y = in.y;
+ workp.z = in.z;
workp_v = in_v;
max_len = sqrt((out.x-in.x)*(out.x-in.x) + (out.y-in.y)*(out.y-in.y) + (out.z-in.z)*(out.z-in.z));
diff --git a/source/blender/blenkernel/intern/modifier.c b/source/blender/blenkernel/intern/modifier.c
index 472fd951168..a29c10a95ac 100644
--- a/source/blender/blenkernel/intern/modifier.c
+++ b/source/blender/blenkernel/intern/modifier.c
@@ -5958,6 +5958,8 @@ static void explodeModifier_copyData(ModifierData *md, ModifierData *target)
temd->facepa = 0;
temd->flag = emd->flag;
+ temd->protect = emd->protect;
+ temd->vgroup = emd->vgroup;
}
static int explodeModifier_dependsOnTime(ModifierData *md)
{
@@ -6078,20 +6080,29 @@ static void explodeModifier_createFacepa(ExplodeModifierData *emd,
if(vertpa) MEM_freeN(vertpa);
BLI_kdtree_free(tree);
}
+
+static int edgesplit_get(EdgeHash *edgehash, int v1, int v2)
+{
+ return GET_INT_FROM_POINTER(BLI_edgehash_lookup(edgehash, v1, v2));
+}
+
static DerivedMesh * explodeModifier_splitEdges(ExplodeModifierData *emd, DerivedMesh *dm){
DerivedMesh *splitdm;
MFace *mf=0,*df1=0,*df2=0,*df3=0;
MFace *mface=CDDM_get_faces(dm);
MVert *dupve, *mv;
+ EdgeHash *edgehash;
+ EdgeHashIterator *ehi;
int totvert=dm->getNumVerts(dm);
int totface=dm->getNumFaces(dm);
- int *edgesplit = MEM_callocN(sizeof(int)*totvert*totvert,"explode_edgesplit");
- int *facesplit = MEM_callocN(sizeof(int)*totface,"explode_edgesplit");
+ int *facesplit = MEM_callocN(sizeof(int)*totface,"explode_facesplit");
int *vertpa = MEM_callocN(sizeof(int)*totvert,"explode_vertpa2");
int *facepa = emd->facepa;
int *fs, totesplit=0,totfsplit=0,totin=0,curdupvert=0,curdupface=0,curdupin=0;
- int i,j,v1,v2,v3,v4;
+ int i,j,v1,v2,v3,v4,esplit;
+
+ edgehash= BLI_edgehash_new();
/* recreate vertpa from facepa calculation */
for (i=0,mf=mface; i<totface; i++,mf++) {
@@ -6111,22 +6122,22 @@ static DerivedMesh * explodeModifier_splitEdges(ExplodeModifierData *emd, Derive
v4=vertpa[mf->v4];
if(v1!=v2){
- edgesplit[mf->v1*totvert+mf->v2]=edgesplit[mf->v2*totvert+mf->v1]=1;
+ BLI_edgehash_insert(edgehash, mf->v1, mf->v2, NULL);
(*fs)++;
}
if(v2!=v3){
- edgesplit[mf->v2*totvert+mf->v3]=edgesplit[mf->v3*totvert+mf->v2]=1;
+ BLI_edgehash_insert(edgehash, mf->v2, mf->v3, NULL);
(*fs)++;
}
if(v3!=v4){
- edgesplit[mf->v3*totvert+mf->v4]=edgesplit[mf->v4*totvert+mf->v3]=1;
+ BLI_edgehash_insert(edgehash, mf->v3, mf->v4, NULL);
(*fs)++;
}
if(v1!=v4){
- edgesplit[mf->v1*totvert+mf->v4]=edgesplit[mf->v4*totvert+mf->v1]=1;
+ BLI_edgehash_insert(edgehash, mf->v1, mf->v4, NULL);
(*fs)++;
}
@@ -6135,28 +6146,29 @@ static DerivedMesh * explodeModifier_splitEdges(ExplodeModifierData *emd, Derive
*fs=1;
else if(v1!=v2){
if(v1!=v4)
- edgesplit[mf->v2*totvert+mf->v3]=edgesplit[mf->v3*totvert+mf->v2]=1;
+ BLI_edgehash_insert(edgehash, mf->v2, mf->v3, NULL);
else
- edgesplit[mf->v3*totvert+mf->v4]=edgesplit[mf->v4*totvert+mf->v3]=1;
+ BLI_edgehash_insert(edgehash, mf->v3, mf->v4, NULL);
}
else{
if(v1!=v4)
- edgesplit[mf->v1*totvert+mf->v2]=edgesplit[mf->v2*totvert+mf->v1]=1;
+ BLI_edgehash_insert(edgehash, mf->v1, mf->v2, NULL);
else
- edgesplit[mf->v1*totvert+mf->v4]=edgesplit[mf->v4*totvert+mf->v1]=1;
+ BLI_edgehash_insert(edgehash, mf->v1, mf->v4, NULL);
}
}
}
}
/* count splits & reindex */
+ ehi= BLI_edgehashIterator_new(edgehash);
totesplit=totvert;
- for(j=0; j<totvert; j++){
- for(i=j+1; i<totvert; i++){
- if(edgesplit[j*totvert+i])
- edgesplit[j*totvert+i]=edgesplit[i*totvert+j]=totesplit++;
- }
+ for(; !BLI_edgehashIterator_isDone(ehi); BLI_edgehashIterator_step(ehi)) {
+ BLI_edgehashIterator_setValue(ehi, SET_INT_IN_POINTER(totesplit));
+ totesplit++;
}
+ BLI_edgehashIterator_free(ehi);
+
/* count new faces due to splitting */
for(i=0,fs=facesplit; i<totface; i++,fs++){
if(*fs==1)
@@ -6204,23 +6216,23 @@ static DerivedMesh * explodeModifier_splitEdges(ExplodeModifierData *emd, Derive
/* create new verts */
curdupvert=totvert;
- for(j=0; j<totvert; j++){
- for(i=j+1; i<totvert; i++){
- if(edgesplit[j*totvert+i]){
- mv=CDDM_get_vert(splitdm,j);
- dupve=CDDM_get_vert(splitdm,edgesplit[j*totvert+i]);
+ ehi= BLI_edgehashIterator_new(edgehash);
+ for(; !BLI_edgehashIterator_isDone(ehi); BLI_edgehashIterator_step(ehi)) {
+ BLI_edgehashIterator_getKey(ehi, &i, &j);
+ esplit= GET_INT_FROM_POINTER(BLI_edgehashIterator_getValue(ehi));
+ mv=CDDM_get_vert(splitdm,j);
+ dupve=CDDM_get_vert(splitdm,esplit);
- DM_copy_vert_data(splitdm,splitdm,j,edgesplit[j*totvert+i],1);
+ DM_copy_vert_data(splitdm,splitdm,j,esplit,1);
- *dupve=*mv;
+ *dupve=*mv;
- mv=CDDM_get_vert(splitdm,i);
+ mv=CDDM_get_vert(splitdm,i);
- VECADD(dupve->co,dupve->co,mv->co);
- VecMulf(dupve->co,0.5);
- }
- }
+ VECADD(dupve->co,dupve->co,mv->co);
+ VecMulf(dupve->co,0.5);
}
+ BLI_edgehashIterator_free(ehi);
/* create new faces */
curdupface=totface;
@@ -6241,14 +6253,14 @@ static DerivedMesh * explodeModifier_splitEdges(ExplodeModifierData *emd, Derive
curdupface++;
if(v1==v2){
- df1->v1=edgesplit[mf->v1*totvert+mf->v4];
- df1->v2=edgesplit[mf->v2*totvert+mf->v3];
+ df1->v1=edgesplit_get(edgehash, mf->v1, mf->v4);
+ df1->v2=edgesplit_get(edgehash, mf->v2, mf->v3);
mf->v3=df1->v2;
mf->v4=df1->v1;
}
else{
- df1->v1=edgesplit[mf->v1*totvert+mf->v2];
- df1->v4=edgesplit[mf->v3*totvert+mf->v4];
+ df1->v1=edgesplit_get(edgehash, mf->v1, mf->v2);
+ df1->v4=edgesplit_get(edgehash, mf->v3, mf->v4);
mf->v2=df1->v1;
mf->v3=df1->v4;
}
@@ -6271,8 +6283,8 @@ static DerivedMesh * explodeModifier_splitEdges(ExplodeModifierData *emd, Derive
if(v1!=v2){
if(v1!=v4){
- df1->v1=edgesplit[mf->v1*totvert+mf->v4];
- df1->v2=edgesplit[mf->v1*totvert+mf->v2];
+ df1->v1=edgesplit_get(edgehash, mf->v1, mf->v4);
+ df1->v2=edgesplit_get(edgehash, mf->v1, mf->v2);
df2->v1=df1->v3=mf->v2;
df2->v3=df1->v4=mf->v4;
df2->v2=mf->v3;
@@ -6285,8 +6297,8 @@ static DerivedMesh * explodeModifier_splitEdges(ExplodeModifierData *emd, Derive
facepa[i]=v1;
}
else{
- df1->v2=edgesplit[mf->v1*totvert+mf->v2];
- df1->v3=edgesplit[mf->v2*totvert+mf->v3];
+ df1->v2=edgesplit_get(edgehash, mf->v1, mf->v2);
+ df1->v3=edgesplit_get(edgehash, mf->v2, mf->v3);
df1->v4=mf->v3;
df2->v2=mf->v3;
df2->v3=mf->v4;
@@ -6302,8 +6314,8 @@ static DerivedMesh * explodeModifier_splitEdges(ExplodeModifierData *emd, Derive
}
else{
if(v1!=v4){
- df1->v3=edgesplit[mf->v3*totvert+mf->v4];
- df1->v4=edgesplit[mf->v1*totvert+mf->v4];
+ df1->v3=edgesplit_get(edgehash, mf->v3, mf->v4);
+ df1->v4=edgesplit_get(edgehash, mf->v1, mf->v4);
df1->v2=mf->v3;
mf->v1=df1->v4;
@@ -6315,8 +6327,8 @@ static DerivedMesh * explodeModifier_splitEdges(ExplodeModifierData *emd, Derive
facepa[i]=v4;
}
else{
- df1->v3=edgesplit[mf->v2*totvert+mf->v3];
- df1->v4=edgesplit[mf->v3*totvert+mf->v4];
+ df1->v3=edgesplit_get(edgehash, mf->v2, mf->v3);
+ df1->v4=edgesplit_get(edgehash, mf->v3, mf->v4);
df1->v1=mf->v4;
df1->v2=mf->v2;
df2->v3=mf->v4;
@@ -6352,9 +6364,9 @@ static DerivedMesh * explodeModifier_splitEdges(ExplodeModifierData *emd, Derive
curdupface++;
if(v1==v2){
- df2->v1=df1->v1=edgesplit[mf->v1*totvert+mf->v4];
- df3->v1=df1->v2=edgesplit[mf->v2*totvert+mf->v3];
- df3->v3=df2->v2=df1->v3=edgesplit[mf->v3*totvert+mf->v4];
+ df2->v1=df1->v1=edgesplit_get(edgehash, mf->v1, mf->v4);
+ df3->v1=df1->v2=edgesplit_get(edgehash, mf->v2, mf->v3);
+ df3->v3=df2->v2=df1->v3=edgesplit_get(edgehash, mf->v3, mf->v4);
df3->v2=mf->v3;
df2->v3=mf->v4;
df1->v4=df2->v4=df3->v4=0;
@@ -6367,9 +6379,9 @@ static DerivedMesh * explodeModifier_splitEdges(ExplodeModifierData *emd, Derive
facepa[curdupface-2]=v4;
}
else if(v2==v3){
- df3->v1=df2->v3=df1->v1=edgesplit[mf->v1*totvert+mf->v4];
- df2->v2=df1->v2=edgesplit[mf->v1*totvert+mf->v2];
- df3->v2=df1->v3=edgesplit[mf->v3*totvert+mf->v4];
+ df3->v1=df2->v3=df1->v1=edgesplit_get(edgehash, mf->v1, mf->v4);
+ df2->v2=df1->v2=edgesplit_get(edgehash, mf->v1, mf->v2);
+ df3->v2=df1->v3=edgesplit_get(edgehash, mf->v3, mf->v4);
df3->v3=mf->v4;
df2->v1=mf->v1;
@@ -6383,9 +6395,9 @@ static DerivedMesh * explodeModifier_splitEdges(ExplodeModifierData *emd, Derive
facepa[curdupface-2]=v1;
}
else if(v3==v4){
- df3->v2=df2->v1=df1->v1=edgesplit[mf->v1*totvert+mf->v2];
- df2->v3=df1->v2=edgesplit[mf->v2*totvert+mf->v3];
- df3->v3=df1->v3=edgesplit[mf->v1*totvert+mf->v4];
+ df3->v2=df2->v1=df1->v1=edgesplit_get(edgehash, mf->v1, mf->v2);
+ df2->v3=df1->v2=edgesplit_get(edgehash, mf->v2, mf->v3);
+ df3->v3=df1->v3=edgesplit_get(edgehash, mf->v1, mf->v4);
df3->v1=mf->v1;
df2->v2=mf->v2;
@@ -6399,9 +6411,9 @@ static DerivedMesh * explodeModifier_splitEdges(ExplodeModifierData *emd, Derive
facepa[curdupface-2]=v2;
}
else{
- df3->v1=df1->v1=edgesplit[mf->v1*totvert+mf->v2];
- df3->v3=df2->v1=df1->v2=edgesplit[mf->v2*totvert+mf->v3];
- df2->v3=df1->v3=edgesplit[mf->v3*totvert+mf->v4];
+ df3->v1=df1->v1=edgesplit_get(edgehash, mf->v1, mf->v2);
+ df3->v3=df2->v1=df1->v2=edgesplit_get(edgehash, mf->v2, mf->v3);
+ df2->v3=df1->v3=edgesplit_get(edgehash, mf->v3, mf->v4);
df3->v2=mf->v2;
df2->v2=mf->v3;
@@ -6452,11 +6464,11 @@ static DerivedMesh * explodeModifier_splitEdges(ExplodeModifierData *emd, Derive
*df3=*mf;
curdupface++;
- df1->v1=edgesplit[mf->v1*totvert+mf->v2];
- df3->v2=df1->v3=edgesplit[mf->v2*totvert+mf->v3];
+ df1->v1=edgesplit_get(edgehash, mf->v1, mf->v2);
+ df3->v2=df1->v3=edgesplit_get(edgehash, mf->v2, mf->v3);
- df2->v1=edgesplit[mf->v1*totvert+mf->v4];
- df3->v4=df2->v3=edgesplit[mf->v3*totvert+mf->v4];
+ df2->v1=edgesplit_get(edgehash, mf->v1, mf->v4);
+ df3->v4=df2->v3=edgesplit_get(edgehash, mf->v3, mf->v4);
df3->v1=df2->v2=df1->v4=curdupin;
@@ -6493,11 +6505,11 @@ static DerivedMesh * explodeModifier_splitEdges(ExplodeModifierData *emd, Derive
curdupface++;
if(v2==v3){
- df1->v1=edgesplit[mf->v1*totvert+mf->v2];
- df3->v1=df1->v2=df1->v3=edgesplit[mf->v2*totvert+mf->v3];
- df2->v1=df1->v4=edgesplit[mf->v1*totvert+mf->v4];
+ df1->v1=edgesplit_get(edgehash, mf->v1, mf->v2);
+ df3->v1=df1->v2=df1->v3=edgesplit_get(edgehash, mf->v2, mf->v3);
+ df2->v1=df1->v4=edgesplit_get(edgehash, mf->v1, mf->v4);
- df3->v3=df2->v3=edgesplit[mf->v3*totvert+mf->v4];
+ df3->v3=df2->v3=edgesplit_get(edgehash, mf->v3, mf->v4);
df3->v2=mf->v3;
df3->v4=0;
@@ -6511,11 +6523,11 @@ static DerivedMesh * explodeModifier_splitEdges(ExplodeModifierData *emd, Derive
facepa[curdupface-1]=v3;
}
else{
- df3->v1=df2->v1=df1->v2=edgesplit[mf->v1*totvert+mf->v2];
- df2->v4=df1->v3=edgesplit[mf->v3*totvert+mf->v4];
- df1->v4=edgesplit[mf->v1*totvert+mf->v4];
+ df3->v1=df2->v1=df1->v2=edgesplit_get(edgehash, mf->v1, mf->v2);
+ df2->v4=df1->v3=edgesplit_get(edgehash, mf->v3, mf->v4);
+ df1->v4=edgesplit_get(edgehash, mf->v1, mf->v4);
- df3->v3=df2->v2=edgesplit[mf->v2*totvert+mf->v3];
+ df3->v3=df2->v2=edgesplit_get(edgehash, mf->v2, mf->v3);
df3->v4=0;
@@ -6539,7 +6551,7 @@ static DerivedMesh * explodeModifier_splitEdges(ExplodeModifierData *emd, Derive
}
}
- MEM_freeN(edgesplit);
+ BLI_edgehash_free(edgehash, NULL);
MEM_freeN(facesplit);
MEM_freeN(vertpa);
diff --git a/source/blender/blenkernel/intern/object.c b/source/blender/blenkernel/intern/object.c
index 5594a1dfaf7..a2a7894e3ce 100644
--- a/source/blender/blenkernel/intern/object.c
+++ b/source/blender/blenkernel/intern/object.c
@@ -1054,7 +1054,11 @@ ParticleSystem *copy_particlesystem(ParticleSystem *psys)
psysn->childcache= NULL;
psysn->edit= NULL;
psysn->effectors.first= psysn->effectors.last= 0;
-
+
+ psysn->pathcachebufs.first = psysn->pathcachebufs.last = NULL;
+ psysn->reactevents.first = psysn->reactevents.last = NULL;
+ psysn->renderdata = NULL;
+
psysn->pointcache= BKE_ptcache_copy(psys->pointcache);
id_us_plus((ID *)psysn->part);
diff --git a/source/blender/blenkernel/intern/particle.c b/source/blender/blenkernel/intern/particle.c
index 2aa0d0ad0b8..fec3da752ff 100644
--- a/source/blender/blenkernel/intern/particle.c
+++ b/source/blender/blenkernel/intern/particle.c
@@ -152,6 +152,49 @@ char *psys_menu_string(Object *ob, int for_sb)
return str;
}
+
+/* we allocate path cache memory in chunks instead of a big continguous
+ * chunk, windows' memory allocater fails to find big blocks of memory often */
+
+#define PATH_CACHE_BUF_SIZE 1024
+
+static ParticleCacheKey **psys_alloc_path_cache_buffers(ListBase *bufs, int tot, int steps)
+{
+ LinkData *buf;
+ ParticleCacheKey **cache;
+ int i, totkey, totbufkey;
+
+ tot= MAX2(tot, 1);
+ totkey = 0;
+ cache = MEM_callocN(tot*sizeof(void*), "PathCacheArray");
+
+ while(totkey < tot) {
+ totbufkey= MIN2(tot-totkey, PATH_CACHE_BUF_SIZE);
+ buf= MEM_callocN(sizeof(LinkData), "PathCacheLinkData");
+ buf->data= MEM_callocN(sizeof(ParticleCacheKey)*totbufkey*steps, "ParticleCacheKey");
+
+ for(i=0; i<totbufkey; i++)
+ cache[totkey+i] = ((ParticleCacheKey*)buf->data) + i*steps;
+
+ totkey += totbufkey;
+ BLI_addtail(bufs, buf);
+ }
+
+ return cache;
+}
+
+static void psys_free_path_cache_buffers(ParticleCacheKey **cache, ListBase *bufs)
+{
+ LinkData *buf;
+
+ if(cache)
+ MEM_freeN(cache);
+
+ for(buf= bufs->first; buf; buf=buf->next)
+ MEM_freeN(buf->data);
+ BLI_freelistN(bufs);
+}
+
/************************************************/
/* Getting stuff */
/************************************************/
@@ -306,27 +349,16 @@ void free_keyed_keys(ParticleSystem *psys)
}
void free_child_path_cache(ParticleSystem *psys)
{
- if(psys->childcache){
- if(psys->childcache[0])
- MEM_freeN(psys->childcache[0]);
-
- MEM_freeN(psys->childcache);
-
- psys->childcache = NULL;
- psys->totchildcache = 0;
- }
+ psys_free_path_cache_buffers(psys->childcache, &psys->childcachebufs);
+ psys->childcache = NULL;
+ psys->totchildcache = 0;
}
void psys_free_path_cache(ParticleSystem *psys)
{
- if(psys->pathcache){
- if(psys->pathcache[0])
- MEM_freeN(psys->pathcache[0]);
-
- MEM_freeN(psys->pathcache);
+ psys_free_path_cache_buffers(psys->pathcache, &psys->pathcachebufs);
+ psys->pathcache= NULL;
+ psys->totcached= 0;
- psys->pathcache = NULL;
- psys->totcached = 0;
- }
free_child_path_cache(psys);
}
void psys_free_children(ParticleSystem *psys)
@@ -2257,10 +2289,9 @@ void psys_cache_child_paths(Object *ob, ParticleSystem *psys, float cfra, int ed
ParticleSettings *part = psys->part;
ParticleThread *pthreads;
ParticleThreadContext *ctx;
- ParticleCacheKey **cache, *tcache;
+ ParticleCacheKey **cache;
ListBase threads;
int i, totchild, totparent, totthread;
- unsigned long totchildstep;
pthreads= psys_threads_create(ob, psys);
@@ -2279,13 +2310,7 @@ void psys_cache_child_paths(Object *ob, ParticleSystem *psys, float cfra, int ed
else {
/* clear out old and create new empty path cache */
free_child_path_cache(psys);
-
- cache = psys->childcache = MEM_callocN(totchild*sizeof(void *), "Child path cache array");
- totchildstep= totchild*(ctx->steps + 1);
- tcache = MEM_callocN(totchildstep*sizeof(ParticleCacheKey), "Child path cache");
- for(i=0; i<totchild; i++)
- cache[i] = tcache + i * (ctx->steps + 1);
-
+ psys->childcache= psys_alloc_path_cache_buffers(&psys->childcachebufs, totchild, ctx->steps+1);
psys->totchildcache = totchild;
}
@@ -2372,12 +2397,8 @@ void psys_cache_paths(Object *ob, ParticleSystem *psys, float cfra, int editupda
else {
/* clear out old and create new empty path cache */
psys_free_path_cache(psys);
-
- /* allocate cache array for fast access and set pointers to contiguous mem block */
- cache = psys->pathcache = MEM_callocN(MAX2(1, totpart) * sizeof(void *), "Path cache array");
- cache[0] = MEM_callocN(totpart * (steps + 1) * sizeof(ParticleCacheKey), "Path cache");
- for(i=1; i<totpart; i++)
- cache[i] = cache[0] + i * (steps + 1);
+ cache= psys_alloc_path_cache_buffers(&psys->pathcachebufs, totpart, steps+1);
+ psys->pathcache= cache;
}
if(edit==NULL && psys->soft && psys->softflag & OB_SB_ENABLE)
diff --git a/source/blender/blenkernel/intern/particle_system.c b/source/blender/blenkernel/intern/particle_system.c
index 596c381b896..8dd3b1d0324 100644
--- a/source/blender/blenkernel/intern/particle_system.c
+++ b/source/blender/blenkernel/intern/particle_system.c
@@ -46,6 +46,7 @@
#include "DNA_curve_types.h"
#include "DNA_group_types.h"
#include "DNA_scene_types.h"
+#include "DNA_sph_types.h"
#include "DNA_texture_types.h"
#include "BLI_rand.h"
@@ -74,6 +75,7 @@
#include "BKE_mesh.h"
#include "BKE_modifier.h"
#include "BKE_scene.h"
+#include "BKE_sph.h"
#include "BSE_headerbuttons.h"
@@ -4634,6 +4636,50 @@ static void particles_fluid_step(Object *ob, ParticleSystem *psys, int cfra)
snprintf(debugStrBuffer,256,"readFsPartData::done - particles:%d, active:%d, file:%d, mask:%d \n", psys->totpart,activeParts,fileParts,readMask);
elbeemDebugOut(debugStrBuffer);
} // fluid sim particles done
+ else
+ {
+ // check for sph modifier
+ SphModifierData *sphmd = (SphModifierData *)modifiers_findByType(ob, eModifierType_Sph);
+
+ // check for an sph object
+ if(sphmd)
+ {
+ // check for existing coordinates
+ if(sphmd->sim_parms->co)
+ {
+ int i = 0;
+ ParticleSettings *part = psys->part;
+ ParticleData *pa=0;
+ float null[3] = {0,0,0};
+
+ if(ob==G.obedit) // off...
+ return;
+
+ part->totpart= sphmd->sim_parms->numpart;
+ part->sta=part->end = 1.0f;
+ part->lifetime = G.scene->r.efra + 1;
+
+ /* initialize particles */
+ realloc_particles(ob, psys, part->totpart);
+ initialize_all_particles(ob, psys, 0);
+
+ printf("sphmd->sim_parms->numpart: %ld\n", sphmd->sim_parms->numpart);
+
+ for(i = 0, pa=psys->particles; i < sphmd->sim_parms->numpart; i++, pa++)
+ {
+ pa->size = 0.01f;
+ VECCOPY(pa->state.co, sphmd->sim_parms->co + i*3);
+ VECCOPY(pa->state.vel, null);
+
+ pa->state.ave[0] = pa->state.ave[1] = pa->state.ave[2] = 0.0f;
+ pa->state.rot[0] = 1.0;
+ pa->state.rot[1] = pa->state.rot[2] = pa->state.rot[3] = 0.0;
+
+ pa->alive = PARS_ALIVE;
+ }
+ }
+ }
+ }
#endif // DISABLE_ELBEEM
}
diff --git a/source/blender/blenkernel/intern/scene.c b/source/blender/blenkernel/intern/scene.c
index 6798c3c47b7..2898dca767c 100644
--- a/source/blender/blenkernel/intern/scene.c
+++ b/source/blender/blenkernel/intern/scene.c
@@ -67,6 +67,7 @@
#include "BKE_global.h"
#include "BKE_group.h"
#include "BKE_ipo.h"
+#include "BKE_idprop.h"
#include "BKE_image.h"
#include "BKE_key.h"
#include "BKE_library.h"
@@ -149,6 +150,11 @@ void free_scene(Scene *sce)
MEM_freeN(sce->r.qtcodecdata);
sce->r.qtcodecdata = NULL;
}
+ if (sce->r.ffcodecdata.properties) {
+ IDP_FreeProperty(sce->r.ffcodecdata.properties);
+ MEM_freeN(sce->r.ffcodecdata.properties);
+ sce->r.ffcodecdata.properties = NULL;
+ }
BLI_freelistN(&sce->markers);
BLI_freelistN(&sce->transform_spaces);
diff --git a/source/blender/blenkernel/intern/writeffmpeg.c b/source/blender/blenkernel/intern/writeffmpeg.c
index e79e36a1498..c95e3d20442 100644
--- a/source/blender/blenkernel/intern/writeffmpeg.c
+++ b/source/blender/blenkernel/intern/writeffmpeg.c
@@ -33,6 +33,7 @@
#include <ffmpeg/avcodec.h>
#include <ffmpeg/rational.h>
#include <ffmpeg/swscale.h>
+#include <ffmpeg/opt.h>
#if LIBAVFORMAT_VERSION_INT < (49 << 16)
#define FFMPEG_OLD_FRAME_RATE 1
@@ -58,6 +59,7 @@
#include "BKE_bad_level_calls.h"
#include "BKE_global.h"
+#include "BKE_idprop.h"
#include "IMB_imbuf_types.h"
#include "IMB_imbuf.h"
@@ -224,6 +226,10 @@ static const char** get_file_extensions(int format)
static const char * rv[] = { ".flv", NULL };
return rv;
}
+ case FFMPEG_MKV: {
+ static const char * rv[] = { ".mkv", NULL };
+ return rv;
+ }
default:
return NULL;
}
@@ -337,6 +343,75 @@ static AVFrame* generate_video_frame(uint8_t* pixels)
return current_frame;
}
+static void set_ffmpeg_property_option(AVCodecContext* c, IDProperty * prop)
+{
+ char name[128];
+ char * param;
+ const AVOption * rv = NULL;
+
+ fprintf(stderr, "FFMPEG expert option: %s: ", prop->name);
+
+ strncpy(name, prop->name, 128);
+
+ param = strchr(name, ':');
+
+ if (param) {
+ *param++ = 0;
+ }
+
+ switch(prop->type) {
+ case IDP_STRING:
+ fprintf(stderr, "%s.\n", IDP_String(prop));
+ rv = av_set_string(c, prop->name, IDP_String(prop));
+ break;
+ case IDP_FLOAT:
+ fprintf(stderr, "%g.\n", IDP_Float(prop));
+ rv = av_set_double(c, prop->name, IDP_Float(prop));
+ break;
+ case IDP_INT:
+ fprintf(stderr, "%d.\n", IDP_Int(prop));
+
+ if (param) {
+ if (IDP_Int(prop)) {
+ rv = av_set_string(c, name, param);
+ } else {
+ return;
+ }
+ } else {
+ rv = av_set_int(c, prop->name, IDP_Int(prop));
+ }
+ break;
+ }
+
+ if (!rv) {
+ fprintf(stderr, "ffmpeg-option not supported: %s! Skipping.\n",
+ prop->name);
+ }
+}
+
+static void set_ffmpeg_properties(AVCodecContext* c, const char * prop_name)
+{
+ IDProperty * prop;
+ void * iter;
+ IDProperty * curr;
+
+ if (!G.scene->r.ffcodecdata.properties) {
+ return;
+ }
+
+ prop = IDP_GetPropertyFromGroup(
+ G.scene->r.ffcodecdata.properties, (char*) prop_name);
+ if (!prop) {
+ return;
+ }
+
+ iter = IDP_GetGroupIterator(prop);
+
+ while ((curr = IDP_GroupIterNext(iter)) != NULL) {
+ set_ffmpeg_property_option(c, curr);
+ }
+}
+
/* prepare a video stream for the output file */
static AVStream* alloc_video_stream(int codec_id, AVFormatContext* of,
@@ -423,13 +498,18 @@ static AVStream* alloc_video_stream(int codec_id, AVFormatContext* of,
}
/* Determine whether we are encoding interlaced material or not */
- if (G.scene->r.mode & (1 << 6)) {
+ if (G.scene->r.mode & R_FIELDS) {
fprintf(stderr, "Encoding interlaced video\n");
c->flags |= CODEC_FLAG_INTERLACED_DCT;
c->flags |= CODEC_FLAG_INTERLACED_ME;
- }
- c->sample_aspect_ratio.num = G.scene->r.xasp;
- c->sample_aspect_ratio.den = G.scene->r.yasp;
+ }
+
+ /* xasp & yasp got float lately... */
+
+ c->sample_aspect_ratio = av_d2q(
+ ((double) G.scene->r.xasp / (double) G.scene->r.yasp), 255);
+
+ set_ffmpeg_properties(c, "video");
if (avcodec_open(c, codec) < 0) {
error("Couldn't initialize codec");
@@ -474,6 +554,9 @@ static AVStream* alloc_audio_stream(int codec_id, AVFormatContext* of)
error("Couldn't find a valid audio codec");
return NULL;
}
+
+ set_ffmpeg_properties(c, "audio");
+
if (avcodec_open(c, codec) < 0) {
error("Couldn't initialize audio codec");
return NULL;
diff --git a/source/blender/blenlib/BLI_arithb.h b/source/blender/blenlib/BLI_arithb.h
index 5b4e380f88e..9ed23bc32b6 100644
--- a/source/blender/blenlib/BLI_arithb.h
+++ b/source/blender/blenlib/BLI_arithb.h
@@ -96,7 +96,7 @@ float CalcNormFloat4(float *v1, float *v2, float *v3, float *v4, float *n);
void CalcNormLong(int *v1, int *v2, int *v3, float *n);
/* CalcNormShort: is ook uitprodukt - (translates as 'is also out/cross product') */
void CalcNormShort(short *v1, short *v2, short *v3, float *n);
-
+float power_of_2(float val);
/**
* @section Euler conversion routines
diff --git a/source/blender/blenlib/BLI_edgehash.h b/source/blender/blenlib/BLI_edgehash.h
index f3aa69d77ff..abbd17c3635 100644
--- a/source/blender/blenlib/BLI_edgehash.h
+++ b/source/blender/blenlib/BLI_edgehash.h
@@ -86,6 +86,9 @@ void BLI_edgehashIterator_getKey (EdgeHashIterator *ehi, int *v0_r, int *v1
/* Retrieve the value from an iterator. */
void* BLI_edgehashIterator_getValue (EdgeHashIterator *ehi);
+ /* Set the value for an iterator. */
+void BLI_edgehashIterator_setValue (EdgeHashIterator *ehi, void *val);
+
/* Steps the iterator to the next index. */
void BLI_edgehashIterator_step (EdgeHashIterator *ehi);
diff --git a/source/blender/blenlib/BLI_kdopbvh.h b/source/blender/blenlib/BLI_kdopbvh.h
index 51f87b26aaf..3261984da76 100644
--- a/source/blender/blenlib/BLI_kdopbvh.h
+++ b/source/blender/blenlib/BLI_kdopbvh.h
@@ -21,7 +21,7 @@
*
* The Original Code is: all of this file.
*
- * Contributor(s): Daniel (Genscher)
+ * Contributor(s): Daniel Genrich, Jose Pinto
*
* ***** END GPL LICENSE BLOCK *****
*/
diff --git a/source/blender/blenlib/intern/BLI_kdopbvh.c b/source/blender/blenlib/intern/BLI_kdopbvh.c
index 8be52854a7b..6a1abb5d8ad 100644
--- a/source/blender/blenlib/intern/BLI_kdopbvh.c
+++ b/source/blender/blenlib/intern/BLI_kdopbvh.c
@@ -25,7 +25,7 @@
*
* The Original Code is: all of this file.
*
-* Contributor(s): Daniel Genrich
+* Contributor(s): Daniel Genrich, Jose Pinto
*
* ***** END GPL/BL DUAL LICENSE BLOCK *****
*/
@@ -60,7 +60,6 @@ struct BVHTree
{
BVHNode **nodes;
BVHNode *nodearray; /* pre-alloc branch nodes */
- int *orig_index; /* mapping for orig_index to node_index */
float epsilon; /* epslion is used for inflation of the k-dop */
int totleaf; // leafs
int totbranch;
@@ -253,7 +252,6 @@ void BLI_bvhtree_free(BVHTree *tree)
{
MEM_freeN(tree->nodes);
MEM_freeN(tree->nodearray);
- MEM_freeN(tree->orig_index);
MEM_freeN(tree);
}
}
@@ -292,16 +290,6 @@ BVHTree *BLI_bvhtree_new(int maxsize, float epsilon, char tree_type, char axis)
return NULL;
}
- tree->orig_index = (int *)MEM_callocN(sizeof(int)*(numbranches+maxsize + tree_type), "BVHIndexArray");
-
- if(!tree->orig_index)
- {
- MEM_freeN(tree);
- MEM_freeN(tree->nodes);
- MEM_freeN(tree->nodearray);
- return NULL;
- }
-
tree->epsilon = epsilon;
tree->tree_type = tree_type;
tree->axis = axis;
@@ -559,12 +547,6 @@ void BLI_bvhtree_balance(BVHTree *tree)
// create + balance tree
bvh_div_nodes(tree, tree->nodes[tree->totleaf], 0, tree->totleaf, 0);
- // put indices into array for O(1) access
- for(i = 0; i < tree->totleaf; i++)
- {
- tree->orig_index[tree->nodes[i]->index] = i;
- }
-
verify_tree(tree);
}
@@ -741,7 +723,7 @@ int BLI_bvhtree_update_node(BVHTree *tree, int index, float *co, float *co_movin
if(index > tree->totleaf)
return 0;
- node = tree->nodes[tree->orig_index[index]];
+ node = tree->nodearray + index;
create_kdop_hull(tree, node, co, numpoints, 0);
diff --git a/source/blender/blenlib/intern/arithb.c b/source/blender/blenlib/intern/arithb.c
index 19a8d4f5152..48a149f4b3a 100644
--- a/source/blender/blenlib/intern/arithb.c
+++ b/source/blender/blenlib/intern/arithb.c
@@ -4345,3 +4345,8 @@ void tangent_from_uv(float *uv1, float *uv2, float *uv3, float *co1, float *co2,
if ((ct[0]*n[0] + ct[1]*n[1] + ct[2]*n[2]) < 0.0f)
VecMulf(tang, -1.0f);
}
+
+/* used for zoom values*/
+float power_of_2(float val) {
+ return pow(2, ceil(log(val) / log(2)));
+}
diff --git a/source/blender/blenlib/intern/edgehash.c b/source/blender/blenlib/intern/edgehash.c
index 6aa0ded63b9..3e1c8afb7a8 100644
--- a/source/blender/blenlib/intern/edgehash.c
+++ b/source/blender/blenlib/intern/edgehash.c
@@ -200,6 +200,11 @@ void *BLI_edgehashIterator_getValue(EdgeHashIterator *ehi) {
return ehi->curEntry?ehi->curEntry->val:NULL;
}
+void BLI_edgehashIterator_setValue(EdgeHashIterator *ehi, void *val) {
+ if(ehi->curEntry)
+ ehi->curEntry->val= val;
+}
+
void BLI_edgehashIterator_step(EdgeHashIterator *ehi) {
if (ehi->curEntry) {
ehi->curEntry= ehi->curEntry->next;
diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c
index e3649a0cc43..2f98a305f1c 100644
--- a/source/blender/blenloader/intern/readfile.c
+++ b/source/blender/blenloader/intern/readfile.c
@@ -2615,6 +2615,8 @@ static void direct_link_particlesystems(FileData *fd, ListBase *particles)
psys->edit = 0;
psys->pathcache = 0;
psys->childcache = 0;
+ psys->pathcachebufs.first = psys->pathcachebufs.last = 0;
+ psys->childcachebufs.first = psys->childcachebufs.last = 0;
psys->reactevents.first = psys->reactevents.last = 0;
psys->pointcache= newdataadr(fd, psys->pointcache);
@@ -3593,7 +3595,16 @@ static void direct_link_scene(FileData *fd, Scene *sce)
if (sce->r.qtcodecdata) {
sce->r.qtcodecdata->cdParms = newdataadr(fd, sce->r.qtcodecdata->cdParms);
}
-
+ if (sce->r.ffcodecdata.properties) {
+ sce->r.ffcodecdata.properties = newdataadr(
+ fd, sce->r.ffcodecdata.properties);
+ if (sce->r.ffcodecdata.properties) {
+ IDP_DirectLinkProperty(
+ sce->r.ffcodecdata.properties,
+ (fd->flags & FD_FLAGS_SWITCH_ENDIAN), fd);
+ }
+ }
+
link_list(fd, &(sce->markers));
link_list(fd, &(sce->transform_spaces));
link_list(fd, &(sce->r.layers));
diff --git a/source/blender/blenloader/intern/writefile.c b/source/blender/blenloader/intern/writefile.c
index 47ccd333dd9..b4a9f225470 100644
--- a/source/blender/blenloader/intern/writefile.c
+++ b/source/blender/blenloader/intern/writefile.c
@@ -1532,6 +1532,9 @@ static void write_scenes(WriteData *wd, ListBase *scebase)
writestruct(wd, DATA, "QuicktimeCodecData", 1, sce->r.qtcodecdata);
if (sce->r.qtcodecdata->cdParms) writedata(wd, DATA, sce->r.qtcodecdata->cdSize, sce->r.qtcodecdata->cdParms);
}
+ if (sce->r.ffcodecdata.properties) {
+ IDP_WriteProperty(sce->r.ffcodecdata.properties, wd);
+ }
/* writing dynamic list of TimeMarkers to the blend file */
for(marker= sce->markers.first; marker; marker= marker->next)
diff --git a/source/blender/include/BDR_editface.h b/source/blender/include/BDR_editface.h
index fb6b65c3972..58b344981ca 100644
--- a/source/blender/include/BDR_editface.h
+++ b/source/blender/include/BDR_editface.h
@@ -32,6 +32,7 @@
struct MTFace;
struct EditFace;
+struct EditEdge;
struct Mesh;
struct MCol;
@@ -53,6 +54,8 @@ void uv_autocalc_tface(void);
void set_texturepaint(void);
void get_same_uv(void);
void seam_mark_clear_tface(short mode);
-
+int edgetag_shortest_path(struct EditEdge *source, struct EditEdge *target);
+void edgetag_context_set(struct EditEdge *eed, int val);
+int edgetag_context_check(struct EditEdge *eed);
#endif /* BDR_EDITFACE_H */
diff --git a/source/blender/include/BIF_drawseq.h b/source/blender/include/BIF_drawseq.h
index 17311ab1489..462075cdf3d 100644
--- a/source/blender/include/BIF_drawseq.h
+++ b/source/blender/include/BIF_drawseq.h
@@ -39,5 +39,7 @@ void set_special_seq_update(int val);
void seq_viewmove(SpaceSeq *sseq);
void seq_reset_imageofs(SpaceSeq *sseq);
+void seq_viewzoom(unsigned short event, int invert);
+void seq_home(void);
#endif
diff --git a/source/blender/include/BIF_editmesh.h b/source/blender/include/BIF_editmesh.h
index 86f84c1e028..ca9f3d6a378 100644
--- a/source/blender/include/BIF_editmesh.h
+++ b/source/blender/include/BIF_editmesh.h
@@ -260,5 +260,6 @@ int EM_vertColorCheck(void); /* can we edit colors for this mesh?*/
void EM_set_actFace(struct EditFace *efa);
struct EditFace * EM_get_actFace(int sloppy);
+int EM_get_actSelection(struct EditSelection *ese);
#endif
diff --git a/source/blender/include/BIF_interface.h b/source/blender/include/BIF_interface.h
index 24747b9f220..fbd4e4ecd91 100644
--- a/source/blender/include/BIF_interface.h
+++ b/source/blender/include/BIF_interface.h
@@ -164,6 +164,7 @@ struct AutoComplete;
#define BUT_TOGDUAL (33<<9)
#define ICONTOGN (34<<9)
#define FTPREVIEW (35<<9)
+#define NUMABS (36<<9)
#define BUTTYPE (63<<9)
diff --git a/source/blender/makesdna/DNA_particle_types.h b/source/blender/makesdna/DNA_particle_types.h
index 8122cdd9cc7..4f62cd084cc 100644
--- a/source/blender/makesdna/DNA_particle_types.h
+++ b/source/blender/makesdna/DNA_particle_types.h
@@ -168,27 +168,27 @@ typedef struct ParticleSettings {
struct PartDeflect *pd;
} ParticleSettings;
-typedef struct ParticleSystem{
+typedef struct ParticleSystem{ /* note, make sure all (runtime) are NULL's in copy_particlesystem */
struct ParticleSystem *next, *prev;
- ParticleSettings *part;
+ ParticleSettings *part; /* particle settings */
- ParticleData *particles;
+ ParticleData *particles; /* (parent) particles */
+ ChildParticle *child; /* child particles */
- ChildParticle *child;
+ struct ParticleEdit *edit; /* particle editmode (runtime) */
- struct ParticleEdit *edit;
+ struct ParticleCacheKey **pathcache; /* path cache (runtime) */
+ struct ParticleCacheKey **childcache; /* child cache (runtime) */
+ ListBase pathcachebufs, childcachebufs; /* buffers for the above */
- struct ParticleCacheKey **pathcache;
- struct ParticleCacheKey **childcache;
-
- struct SoftBody *soft;
+ struct SoftBody *soft; /* hair softbody */
struct Object *target_ob;
struct Object *keyed_ob;
struct Object *lattice;
- struct ListBase effectors, reactevents;
+ struct ListBase effectors, reactevents; /* runtime */
float imat[4][4]; /* used for duplicators */
float cfra;
@@ -196,10 +196,10 @@ typedef struct ParticleSystem{
int flag, totpart, totchild, totcached, totchildcache, rt;
short recalc, target_psys, keyed_psys, totkeyed, softflag, bakespace;
- char bb_uvname[3][32];
+ char bb_uvname[3][32]; /* billboard uv name */
/* if you change these remember to update array lengths to PSYS_TOT_VG! */
- short vgroup[11], vg_neg, rt3[2];
+ short vgroup[12], vg_neg, rt3; /* vertex groups */
/* temporary storage during render */
void *renderdata;
diff --git a/source/blender/makesdna/DNA_scene_types.h b/source/blender/makesdna/DNA_scene_types.h
index e0e8c351d2c..7b1b979b777 100644
--- a/source/blender/makesdna/DNA_scene_types.h
+++ b/source/blender/makesdna/DNA_scene_types.h
@@ -98,6 +98,7 @@ typedef struct FFMpegCodecData {
int rc_buffer_size;
int mux_packet_size;
int mux_rate;
+ IDProperty *properties;
} FFMpegCodecData;
@@ -437,7 +438,9 @@ typedef struct ToolSettings {
char skgen_postpro_passes;
char skgen_subdivisions[3];
- char pad3[5];
+ /* Alt+RMB option */
+ char edge_mode;
+ char pad3[4];
} ToolSettings;
/* Used by all brushes to store their properties, which can be directly set
@@ -783,6 +786,13 @@ typedef struct Scene {
#define UVCALC_FILLHOLES 1
#define UVCALC_NO_ASPECT_CORRECT 2 /* would call this UVCALC_ASPECT_CORRECT, except it should be default with old file */
+/* toolsettings->edge_mode */
+#define EDGE_MODE_SELECT 0
+#define EDGE_MODE_TAG_SEAM 1
+#define EDGE_MODE_TAG_SHARP 2
+#define EDGE_MODE_TAG_CREASE 3
+#define EDGE_MODE_TAG_BEVEL 4
+
/* toolsettings->particle flag */
#define PE_KEEP_LENGTHS 1
#define PE_LOCK_FIRST 2
diff --git a/source/blender/nodes/intern/CMP_nodes/CMP_displace.c b/source/blender/nodes/intern/CMP_nodes/CMP_displace.c
index 67b04750056..f5b6edcea80 100644
--- a/source/blender/nodes/intern/CMP_nodes/CMP_displace.c
+++ b/source/blender/nodes/intern/CMP_nodes/CMP_displace.c
@@ -44,18 +44,22 @@ static bNodeSocketType cmp_node_displace_out[]= {
{ -1, 0, "" }
};
+static float *vecbuf_get_pixel(CompBuf *vecbuf, float *veccol, int x, int y)
+{
+ /* the x-xrad stuff is a bit weird, but i seem to need it otherwise
+ * my returned pixels are offset weirdly */
+ return compbuf_get_pixel(vecbuf, veccol, x-vecbuf->xrad, y-vecbuf->yrad, vecbuf->xrad, vecbuf->yrad);
+}
+
static void do_displace(CompBuf *stackbuf, CompBuf *cbuf, CompBuf *vecbuf, float *veccol, float *xscale, float *yscale)
{
ImBuf *ibuf;
- int x, y, vx, vy, sx, sy;
float dx=0.0, dy=0.0;
float dspx, dspy;
- float uv[2];
-
- float *out= stackbuf->rect, *vec=vecbuf->rect, *in= cbuf->rect;
+ float uv[2], col[4], colnext[4], colprev[4];
float *vp, *vpnext, *vpprev;
-
- int row = 3*vecbuf->x;
+ float *out= stackbuf->rect, *vec=vecbuf->rect, *in= cbuf->rect;
+ int x, y, vx, vy, sx, sy;
/* ibuf needed for sampling */
ibuf= IMB_allocImBuf(cbuf->x, cbuf->y, 32, 0, 0);
@@ -65,13 +69,15 @@ static void do_displace(CompBuf *stackbuf, CompBuf *cbuf, CompBuf *vecbuf, float
sx= stackbuf->x;
sy= stackbuf->y;
+
+ QUATCOPY(col, veccol);
+ QUATCOPY(colnext, veccol);
+ QUATCOPY(colprev, veccol);
for(y=0; y<sy; y++) {
for(x= 0; x< sx; x++, out+=4, in+=4, vec+=3) {
- /* the x-xrad stuff is a bit weird, but i seem to need it otherwise
- * my returned pixels are offset weirdly */
- vp = compbuf_get_pixel(vecbuf, veccol, x-vecbuf->xrad, y-vecbuf->yrad, vecbuf->xrad, vecbuf->yrad);
+ vp = vecbuf_get_pixel(vecbuf, col, x, y);
/* this happens in compbuf_get_pixel, need to make sure the following
* check takes them into account */
@@ -87,20 +93,26 @@ static void do_displace(CompBuf *stackbuf, CompBuf *cbuf, CompBuf *vecbuf, float
uv[1] = dspy / (float)sy;
if(vx>0 && vx< vecbuf->x-1 && vy>0 && vy< vecbuf->y-1) {
- vpnext = vp+row;
- vpprev = vp-row;
-
- /* adaptive sampling, X channel */
- dx= 0.5f*(fabs(vp[0]-vp[-3]) + fabs(vp[0]-vp[3]));
-
- dx+= 0.25f*(fabs(vp[0]-vpprev[-3]) + fabs(vp[0]-vpnext[-3]));
- dx+= 0.25f*(fabs(vp[0]-vpprev[+3]) + fabs(vp[0]-vpnext[+3]));
-
- /* adaptive sampling, Y channel */
- dy= 0.5f*(fabs(vp[1]-vp[-row+1]) + fabs(vp[1]-vp[row+1]));
-
- dy+= 0.25f*(fabs(vp[1]-vpprev[+1-3]) + fabs(vp[1]-vpnext[+1-3]));
- dy+= 0.25f*(fabs(vp[1]-vpprev[+1+3]) + fabs(vp[1]-vpnext[+1+3]));
+ /* adaptive sampling, X and Y channel.
+ * we call vecbuf_get_pixel for every pixel since the input
+ * might be a procedural, and then we can't use offsets */
+ vpprev = vecbuf_get_pixel(vecbuf, colprev, x-1, y);
+ vpnext = vecbuf_get_pixel(vecbuf, colnext, x+1, y);
+ dx= 0.5f*(fabs(vp[0]-vpprev[0]) + fabs(vp[0]-vpnext[0]));
+
+ vpprev = vecbuf_get_pixel(vecbuf, colprev, x, y-1);
+ vpnext = vecbuf_get_pixel(vecbuf, colnext, x, y+1);
+ dy= 0.5f*(fabs(vp[1]-vpnext[1]) + fabs(vp[1]-vpprev[1]));
+
+ vpprev = vecbuf_get_pixel(vecbuf, colprev, x-1, y-1);
+ vpnext = vecbuf_get_pixel(vecbuf, colnext, x-1, y+1);
+ dx+= 0.25f*(fabs(vp[0]-vpprev[0]) + fabs(vp[0]-vpnext[0]));
+ dy+= 0.25f*(fabs(vp[1]-vpprev[1]) + fabs(vp[1]-vpnext[1]));
+
+ vpprev = vecbuf_get_pixel(vecbuf, colprev, x+1, y-1);
+ vpnext = vecbuf_get_pixel(vecbuf, colnext, x+1, y+1);
+ dx+= 0.25f*(fabs(vp[0]-vpprev[0]) + fabs(vp[0]-vpnext[0]));
+ dy+= 0.25f*(fabs(vp[1]-vpprev[1]) + fabs(vp[1]-vpnext[1]));
/* scaled down to prevent blurriness */
/* 8: magic number, provides a good level of sharpness without getting too aliased */
diff --git a/source/blender/nodes/intern/CMP_nodes/CMP_hueSatVal.c b/source/blender/nodes/intern/CMP_nodes/CMP_hueSatVal.c
index eeddb4ce756..92614d1cc6a 100644
--- a/source/blender/nodes/intern/CMP_nodes/CMP_hueSatVal.c
+++ b/source/blender/nodes/intern/CMP_nodes/CMP_hueSatVal.c
@@ -52,9 +52,7 @@ static void do_hue_sat_fac(bNode *node, float *out, float *in, float *fac)
hsv[0]+= (nhs->hue - 0.5f);
if(hsv[0]>1.0) hsv[0]-=1.0; else if(hsv[0]<0.0) hsv[0]+= 1.0;
hsv[1]*= nhs->sat;
- if(hsv[1]>1.0) hsv[1]= 1.0; else if(hsv[1]<0.0) hsv[1]= 0.0;
hsv[2]*= nhs->val;
- if(hsv[2]>1.0) hsv[2]= 1.0; else if(hsv[2]<0.0) hsv[2]= 0.0;
hsv_to_rgb(hsv[0], hsv[1], hsv[2], col, col+1, col+2);
out[0]= mfac*in[0] + *fac*col[0];
diff --git a/source/blender/nodes/intern/SHD_nodes/SHD_hueSatVal.c b/source/blender/nodes/intern/SHD_nodes/SHD_hueSatVal.c
index 8c07a2d1dc8..67dfc619080 100644
--- a/source/blender/nodes/intern/SHD_nodes/SHD_hueSatVal.c
+++ b/source/blender/nodes/intern/SHD_nodes/SHD_hueSatVal.c
@@ -54,9 +54,7 @@ static void do_hue_sat_fac(bNode *node, float *out, float *hue, float *sat, floa
hsv[0]+= (*hue - 0.5f);
if(hsv[0]>1.0) hsv[0]-=1.0; else if(hsv[0]<0.0) hsv[0]+= 1.0;
hsv[1]*= *sat;
- if(hsv[1]>1.0) hsv[1]= 1.0; else if(hsv[1]<0.0) hsv[1]= 0.0;
hsv[2]*= *val;
- if(hsv[2]>1.0) hsv[2]= 1.0; else if(hsv[2]<0.0) hsv[2]= 0.0;
hsv_to_rgb(hsv[0], hsv[1], hsv[2], col, col+1, col+2);
out[0]= mfac*in[0] + *fac*col[0];
diff --git a/source/blender/python/BPY_interface.c b/source/blender/python/BPY_interface.c
index ffdb593767a..257203908b1 100644
--- a/source/blender/python/BPY_interface.c
+++ b/source/blender/python/BPY_interface.c
@@ -435,19 +435,24 @@ void BPY_rebuild_syspath( void )
if(U.pythondir[0] != '\0' ) {
char modpath[FILE_MAX];
int upyslen = strlen(U.pythondir);
-
+ BLI_strncpy(dirpath, U.pythondir, FILE_MAX);
+
/* check if user pydir ends with a slash and, if so, remove the slash
* (for eventual implementations of c library's stat function that might
* not like it) */
- if (upyslen > 2) { /* avoids doing anything if dir == '//' */
- BLI_add_slash(U.pythondir);
+#ifdef WIN32
+ if (upyslen > 3) {
+#else
+ if (upyslen > 1) {
+#endif
+ if (dirpath[upyslen-1] == '\\' || dirpath[upyslen-1] == '/') {
+ dirpath[upyslen-1] = '\0';
+ }
}
- BLI_strncpy(dirpath, U.pythondir, FILE_MAX);
BLI_convertstringcode(dirpath, G.sce);
syspath_append(dirpath); /* append to module search path */
-
- BLI_make_file_string("/", modpath, dirpath, "bpymodules");
+ BLI_join_dirfile( modpath, dirpath, "bpymodules" );
if (BLI_exists(modpath)) syspath_append(modpath);
}
@@ -783,7 +788,6 @@ int BPY_run_script(Script *script)
Text *text = NULL;
BPy_constant *info;
int len;
- char *buffer=NULL, *s;
FILE *fp = NULL;
@@ -864,7 +868,6 @@ int BPY_run_script(Script *script)
printf("Oops - weakref dict\n");
free_libblock( &G.main->script, script );
ReleaseGlobalDictionary( py_dict );
- MEM_freeN( buffer );
PyGILState_Release(gilstate);
return 0;
}
@@ -886,41 +889,41 @@ int BPY_run_script(Script *script)
* 'FILE structs for different C libraries can be different and
* incompatible'.
* So now we load the script file data to a buffer */
-
+ char *buffer=NULL, *buffer_ofs=NULL, *b_to, *b_from;
+
fseek( fp, 0L, SEEK_END );
len = ftell( fp );
fseek( fp, 0L, SEEK_SET );
- buffer = MEM_mallocN( len + 2, "pyfilebuf" ); /* len+2 to add '\n\0' */
+ buffer = buffer_ofs = MEM_mallocN( len + 2, "pyfilebuf" ); /* len+2 to add '\n\0' */
len = fread( buffer, 1, len, fp );
buffer[len] = '\n'; /* fix syntax error in files w/o eol */
buffer[len + 1] = '\0';
-
- /* fast clean-up of dos cr/lf line endings: change '\r' to space */
-
- /* we also have to check for line splitters: '\\' */
- /* to avoid possible syntax errors on dos files on win */
- /**/
- /* but first make sure we won't disturb memory below &buffer[0]: */
- if( *buffer == '\r' )
- *buffer = ' ';
-
- /* now handle the whole buffer */
- for( s = buffer + 1; *s != '\0'; s++ ) {
- if( *s == '\r' ) {
- if( *( s - 1 ) == '\\' ) { /* special case: long lines split with '\': */
- *( s - 1 ) = ' '; /* we write ' \', because '\ ' is a syntax error */
- *s = '\\';
- } else
- *s = ' '; /* not a split line, just replace '\r' with ' ' */
+
+
+ /* fast clean-up of dos cr/lf line endings, remove convert '\r\n's to '\n' */
+ if (*buffer_ofs == '\r' && *(buffer_ofs+1) == '\n') {
+ buffer_ofs++;
+ }
+ b_from = b_to = buffer_ofs;
+
+ while(*b_from != '\0') {
+ if (*b_from == '\r' && *( b_from+1 ) == '\n') {
+ b_from++;
}
+ if (b_from != b_to) {
+ *b_to = *b_from;
+ }
+ b_to++;
+ b_from++;
}
-
- fclose( fp );
+ *b_to = '\0';
+ /* done cleaning the string */
+ fclose( fp );
- py_res = PyRun_String( buffer, Py_file_input, py_dict, py_dict );
+ py_res = PyRun_String( buffer_ofs, Py_file_input, py_dict, py_dict );
MEM_freeN( buffer );
}
diff --git a/source/blender/python/api2_2x/Blender.c b/source/blender/python/api2_2x/Blender.c
index 4fc68d138e0..6fce0864189 100644
--- a/source/blender/python/api2_2x/Blender.c
+++ b/source/blender/python/api2_2x/Blender.c
@@ -96,6 +96,7 @@ struct ID; /*keep me up here */
#include "Window.h"
#include "World.h"
#include "Types.h"
+#include "Particle.h"
/**********************************************************/
/* Python API function prototypes for the Blender module. */
@@ -1074,6 +1075,7 @@ void M_Blender_Init(void)
PyDict_SetItemString(dict, "Node", Node_Init());
PyDict_SetItemString(dict, "Noise", Noise_Init());
PyDict_SetItemString(dict, "Object", Object_Init());
+ PyDict_SetItemString(dict, "Particle", ParticleSys_Init());
PyDict_SetItemString(dict, "Group", Group_Init());
PyDict_SetItemString(dict, "Registry", Registry_Init());
PyDict_SetItemString(dict, "Scene", Scene_Init());
diff --git a/source/blender/python/api2_2x/Object.c b/source/blender/python/api2_2x/Object.c
index 4d8caf5a55e..82f99adcdb1 100644
--- a/source/blender/python/api2_2x/Object.c
+++ b/source/blender/python/api2_2x/Object.c
@@ -27,7 +27,7 @@
*
* Contributor(s): Michel Selten, Willian Germano, Jacques Guignot,
* Joseph Gilbert, Stephen Swaney, Bala Gi, Campbell Barton, Johnny Matthews,
- * Ken Hughes, Alex Mole, Jean-Michel Soler
+ * Ken Hughes, Alex Mole, Jean-Michel Soler, Cedric Paille
*
* ***** END GPL LICENSE BLOCK *****
*/
@@ -68,6 +68,8 @@ struct rctf;
#include "BKE_object.h"
#include "BKE_key.h" /* for setting the activeShape */
#include "BKE_displist.h"
+#include "BKE_pointcache.h"
+#include "BKE_particle.h"
#include "BSE_editipo.h"
#include "BSE_edit.h"
@@ -117,6 +119,7 @@ struct rctf;
#include "EXPP_interface.h"
#include "BIF_editkey.h"
#include "IDProp.h"
+#include "Particle.h"
/* Defines for insertIpoKey */
@@ -336,6 +339,9 @@ struct PyMethodDef M_Object_methods[] = {
static int setupSB(Object* ob); /*Make sure Softbody Pointer is initialized */
static int setupPI(Object* ob);
+static PyObject *Object_getParticleSys( BPy_Object * self );
+/* fixme Object_newParticleSys( self, default-partsys-name ) */
+static PyObject *Object_newParticleSys( BPy_Object * self );
static PyObject *Object_buildParts( BPy_Object * self );
static PyObject *Object_clearIpo( BPy_Object * self );
static PyObject *Object_clrParent( BPy_Object * self, PyObject * args );
@@ -465,6 +471,10 @@ static PyObject *Object_upAxis(BPy_Object * self);
/*****************************************************************************/
static PyMethodDef BPy_Object_methods[] = {
/* name, method, flags, doc */
+ {"getParticleSystems", ( PyCFunction ) Object_getParticleSys, METH_NOARGS,
+ "Return a list of particle systems"},
+ {"newParticleSystem", ( PyCFunction ) Object_newParticleSys, METH_NOARGS,
+ "Create and link a new particle system"},
{"buildParts", ( PyCFunction ) Object_buildParts, METH_NOARGS,
"Recalcs particle system (if any), (depricated, will always return an empty list in version 2.46)"},
{"getIpo", ( PyCFunction ) Object_getIpo, METH_NOARGS,
@@ -1026,6 +1036,79 @@ static PyObject *M_Object_Duplicate( PyObject * self_unused,
/* Python BPy_Object methods: */
/*****************************************************************************/
+PyObject *Object_getParticleSys( BPy_Object * self ){
+ ParticleSystem *blparticlesys = 0;
+ Object *ob = self->object;
+ PyObject *partsyslist,*current;
+
+ blparticlesys = ob->particlesystem.first;
+
+ partsyslist = PyList_New( 0 );
+
+ if (!blparticlesys)
+ return partsyslist;
+
+/* fixme: for(;;) */
+ current = ParticleSys_CreatePyObject( blparticlesys, ob );
+ PyList_Append(partsyslist,current);
+
+ while((blparticlesys = blparticlesys->next)){
+ current = ParticleSys_CreatePyObject( blparticlesys, ob );
+ PyList_Append(partsyslist,current);
+ }
+
+ return partsyslist;
+}
+
+PyObject *Object_newParticleSys( BPy_Object * self ){
+ ParticleSystem *psys = 0;
+ ParticleSystem *rpsys = 0;
+ ModifierData *md;
+ ParticleSystemModifierData *psmd;
+ Object *ob = self->object;
+/* char *name = NULL; optional name param */
+ ID *id;
+ int nr;
+
+ id = (ID *)psys_new_settings("PSys", G.main);
+
+ psys = MEM_callocN(sizeof(ParticleSystem), "particle_system");
+ psys->pointcache = BKE_ptcache_add();
+ psys->flag |= PSYS_ENABLED;
+ BLI_addtail(&ob->particlesystem,psys);
+
+ md = modifier_new(eModifierType_ParticleSystem);
+ sprintf(md->name, "ParticleSystem %i", BLI_countlist(&ob->particlesystem));
+ psmd = (ParticleSystemModifierData*) md;
+ psmd->psys=psys;
+ BLI_addtail(&ob->modifiers, md);
+
+ psys->part=(ParticleSettings*)id;
+ psys->totpart=0;
+ psys->flag=PSYS_ENABLED|PSYS_CURRENT;
+ psys->cfra=bsystem_time(ob,(float)G.scene->r.cfra+1,0.0);
+ rpsys = psys;
+
+ /* check need for dupliobjects */
+
+ nr=0;
+ for(psys=ob->particlesystem.first; psys; psys=psys->next){
+ if(ELEM(psys->part->draw_as,PART_DRAW_OB,PART_DRAW_GR))
+ nr++;
+ }
+ if(nr)
+ ob->transflag |= OB_DUPLIPARTS;
+ else
+ ob->transflag &= ~OB_DUPLIPARTS;
+
+ BIF_undo_push("Browse Particle System");
+
+ DAG_scene_sort(G.scene);
+ DAG_object_flush_update(G.scene, ob, OB_RECALC_DATA);
+
+ return ParticleSys_CreatePyObject(rpsys,ob);
+}
+
static PyObject *Object_buildParts( BPy_Object * self )
{
/* This is now handles by modifiers */
diff --git a/source/blender/python/api2_2x/Particle.c b/source/blender/python/api2_2x/Particle.c
index 1de0360cd77..15307cc2be5 100644
--- a/source/blender/python/api2_2x/Particle.c
+++ b/source/blender/python/api2_2x/Particle.c
@@ -22,941 +22,1812 @@
*
* This is a new part of Blender.
*
- * Contributor(s): Jacques Guignot, Jean-Michel Soler
+ * Contributor(s):
+ * Original version: Jacques Guignot, Jean-Michel Soler
+ * Rewrite : Cedric Paille, Stephen Swaney, Joilnen Leite
*
* ***** END GPL LICENSE BLOCK *****
*/
-#include "Particle.h" /*This must come first */
-
-#include "DNA_object_types.h"
-#include "BKE_effect.h"
-#include "BKE_global.h"
-#include "BKE_main.h"
+#include "Particle.h"
+#include "gen_utils.h"
#include "BKE_object.h"
+#include "BKE_main.h"
+#include "BKE_particle.h"
+#include "BKE_global.h"
+#include "BKE_depsgraph.h"
+#include "BKE_modifier.h"
+#include "BKE_material.h"
+#include "BKE_utildefines.h"
+#include "BKE_pointcache.h"
+#include "BIF_editparticle.h"
+#include "BIF_space.h"
+#include "blendef.h"
+#include "DNA_modifier_types.h"
+#include "DNA_scene_types.h"
+#include "DNA_material_types.h"
#include "BLI_blenlib.h"
-#include "gen_utils.h"
+#include "mydevice.h"
+#include "Object.h"
+#include "Material.h"
+
+#include "MEM_guardedalloc.h"
+
+
+
+/* Type Methods */
+static PyObject *M_ParticleSys_New( PyObject * self, PyObject * args );
+static PyObject *M_ParticleSys_Get( PyObject * self, PyObject * args );
+
+/* Particle Methods */
+static PyObject *Part_freeEdit( BPy_PartSys * self, PyObject * args );
+static PyObject *Part_GetLoc( BPy_PartSys * self, PyObject * args );
+static PyObject *Part_GetRot( BPy_PartSys * self, PyObject * args );
+static PyObject *Part_GetMat( BPy_PartSys * self, PyObject * args );
+static PyObject *Part_GetSize( BPy_PartSys * self, PyObject * args );
+static int Part_setSeed( BPy_PartSys * self, PyObject * args );
+static PyObject *Part_getSeed( BPy_PartSys * self );
+static int Part_setType( BPy_PartSys * self, PyObject * args );
+static PyObject *Part_getType( BPy_PartSys * self );
+static int Part_setResol( BPy_PartSys * self, PyObject * args );
+static PyObject *Part_getResol( BPy_PartSys * self );
+static int Part_setStart( BPy_PartSys * self, PyObject * args );
+static PyObject *Part_getStart( BPy_PartSys * self );
+static int Part_setEnd( BPy_PartSys * self, PyObject * args );
+static PyObject *Part_getEnd( BPy_PartSys * self );
+static int Part_setEditable( BPy_PartSys * self, PyObject * args );
+static PyObject *Part_getEditable( BPy_PartSys * self );
+static int Part_setAmount( BPy_PartSys * self, PyObject * args );
+static PyObject *Part_getAmount( BPy_PartSys * self );
+static int Part_setMultiReact( BPy_PartSys * self, PyObject * args );
+static PyObject *Part_getMultiReact( BPy_PartSys * self );
+static int Part_setReactShape( BPy_PartSys * self, PyObject * args );
+static PyObject *Part_getReactShape( BPy_PartSys * self );
+static int Part_setSegments( BPy_PartSys * self, PyObject * args );
+static PyObject *Part_getSegments( BPy_PartSys * self );
+static int Part_setLife( BPy_PartSys * self, PyObject * args );
+static PyObject *Part_getLife( BPy_PartSys * self );
+static int Part_setRandLife( BPy_PartSys * self, PyObject * args );
+static PyObject *Part_getRandLife( BPy_PartSys * self );
+static int Part_set2d( BPy_PartSys * self, PyObject * args );
+static PyObject *Part_get2d( BPy_PartSys * self );
+static int Part_setMaxVel( BPy_PartSys * self, PyObject * args );
+static PyObject *Part_getMaxVel( BPy_PartSys * self );
+static int Part_setAvVel( BPy_PartSys * self, PyObject * args );
+static PyObject *Part_getAvVel( BPy_PartSys * self );
+static int Part_setLatAcc( BPy_PartSys * self, PyObject * args );
+static PyObject *Part_getLatAcc( BPy_PartSys * self );
+static int Part_setMaxTan( BPy_PartSys * self, PyObject * args );
+static PyObject *Part_getMaxTan( BPy_PartSys * self );
+static int Part_setGroundZ( BPy_PartSys * self, PyObject * args );
+static PyObject *Part_getGroundZ( BPy_PartSys * self );
+static int Part_setOb( BPy_PartSys * self, PyObject * args );
+static PyObject *Part_getOb( BPy_PartSys * self );
+static PyObject *Part_getRandEmission( BPy_PartSys * self );
+static int Part_setRandEmission( BPy_PartSys * self, PyObject * args );
+static PyObject *Part_getRandEmission( BPy_PartSys * self );
+static int Part_setParticleDist( BPy_PartSys * self, PyObject * args );
+static PyObject *Part_getParticleDist( BPy_PartSys * self );
+static int Part_setEvenDist( BPy_PartSys * self, PyObject * args );
+static PyObject *Part_getEvenDist( BPy_PartSys * self );
+static int Part_setDist( BPy_PartSys * self, PyObject * args );
+static PyObject *Part_getDist( BPy_PartSys * self );
+static int Part_setParticleDisp( BPy_PartSys * self, PyObject * args );
+static PyObject *Part_getParticleDisp( BPy_PartSys * self );
+static int Part_setJitterAmount( BPy_PartSys * self, PyObject * args );
+static PyObject *Part_getJitterAmount( BPy_PartSys * self );
+static int Part_setPF( BPy_PartSys * self, PyObject * args );
+static PyObject *Part_getPF( BPy_PartSys * self );
+static int Part_setInvert( BPy_PartSys * self, PyObject * args );
+static PyObject *Part_getInvert( BPy_PartSys * self );
+static int Part_setTargetOb( BPy_PartSys * self, PyObject * args );
+static PyObject *Part_getTargetOb( BPy_PartSys * self );
+static int Part_setTargetPsys( BPy_PartSys * self, PyObject * args );
+static PyObject *Part_getTargetPsys( BPy_PartSys * self );
+static int Part_setRenderObject( BPy_PartSys * self, PyObject * args );
+static PyObject *Part_getRenderObject( BPy_PartSys * self );
+static int Part_setStep( BPy_PartSys * self, PyObject * args );
+static PyObject *Part_getStep( BPy_PartSys * self );
+static int Part_setRenderStep( BPy_PartSys * self, PyObject * args );
+static PyObject *Part_getRenderStep( BPy_PartSys * self );
+static PyObject *Part_getDupOb( BPy_PartSys * self );
+static PyObject *Part_getDrawAs( BPy_PartSys * self );
+static PyObject *Part_GetAge( BPy_PartSys * self, PyObject * args );
/*****************************************************************************/
-/* Python API function prototypes for the Particle module. */
+/* Python Effect_Type callback function prototypes: */
/*****************************************************************************/
-PyObject *M_Particle_New( PyObject * self, PyObject * args );
-PyObject *M_Particle_Get( PyObject * self, PyObject * args );
+static PyObject *ParticleSys_repr( void );
/*****************************************************************************/
-/* Python BPy_Particle methods declarations: */
+/* The following string definitions are used for documentation strings. */
+/* In Python these will be written to the console when doing a */
+/* Blender.Particle.__doc__ */
/*****************************************************************************/
-PyObject *Effect_getType( BPy_Effect * self );
-PyObject *Effect_setType( BPy_Effect * self, PyObject * args );
-PyObject *Effect_getFlag( BPy_Effect * self );
-PyObject *Effect_setFlag( BPy_Effect * self, PyObject * args );
-PyObject *Particle_getSta( BPy_Particle * self );
-PyObject *Particle_setSta( BPy_Particle * self, PyObject * a );
-PyObject *Particle_getEnd( BPy_Particle * self );
-PyObject *Particle_setEnd( BPy_Particle * self, PyObject * a );
-PyObject *Particle_getLifetime( BPy_Particle * self );
-PyObject *Particle_setLifetime( BPy_Particle * self, PyObject * a );
-PyObject *Particle_getNormfac( BPy_Particle * self );
-PyObject *Particle_setNormfac( BPy_Particle * self, PyObject * a );
-PyObject *Particle_getObfac( BPy_Particle * self );
-PyObject *Particle_setObfac( BPy_Particle * self, PyObject * a );
-PyObject *Particle_getRandfac( BPy_Particle * self );
-PyObject *Particle_setRandfac( BPy_Particle * self, PyObject * a );
-PyObject *Particle_getTexfac( BPy_Particle * self );
-PyObject *Particle_setTexfac( BPy_Particle * self, PyObject * a );
-PyObject *Particle_getRandlife( BPy_Particle * self );
-PyObject *Particle_setRandlife( BPy_Particle * self, PyObject * a );
-PyObject *Particle_getNabla( BPy_Particle * self );
-PyObject *Particle_setNabla( BPy_Particle * self, PyObject * a );
-PyObject *Particle_getVectsize( BPy_Particle * self );
-PyObject *Particle_setVectsize( BPy_Particle * self, PyObject * a );
-PyObject *Particle_getTotpart( BPy_Particle * self );
-PyObject *Particle_setTotpart( BPy_Particle * self, PyObject * a );
-PyObject *Particle_getTotkey( BPy_Particle * self );
-PyObject *Particle_setTotkey( BPy_Particle * self, PyObject * a );
-PyObject *Particle_getSeed( BPy_Particle * self );
-PyObject *Particle_setSeed( BPy_Particle * self, PyObject * a );
-PyObject *Particle_getForce( BPy_Particle * self );
-PyObject *Particle_setForce( BPy_Particle * self, PyObject * a );
-PyObject *Particle_getMult( BPy_Particle * self );
-PyObject *Particle_setMult( BPy_Particle * self, PyObject * a );
-PyObject *Particle_getLife( BPy_Particle * self );
-PyObject *Particle_setLife( BPy_Particle * self, PyObject * a );
-PyObject *Particle_getMat( BPy_Particle * self );
-PyObject *Particle_setMat( BPy_Particle * self, PyObject * a );
-PyObject *Particle_getChild( BPy_Particle * self );
-PyObject *Particle_setChild( BPy_Particle * self, PyObject * a );
-PyObject *Particle_getDefvec( BPy_Particle * self );
-PyObject *Particle_setDefvec( BPy_Particle * self, PyObject * a );
+static char M_ParticleSys_doc[] = "The Blender Effect module\n\n\
+This module provides access to **Object Data** in Blender.\n\
+Functions :\n\
+ Get(name) : retreives particle system (as list) with the given name\n";
+static char M_ParticleSys_Get_doc[] = "xxx";
+static char M_ParticleSys_New_doc[] = "xxx";
/*****************************************************************************/
-/* Python Particle_Type callback function prototypes: */
-/*****************************************************************************/
-void ParticleDeAlloc( BPy_Particle * msh );
-//int ParticlePrint (BPy_Particle *msh, FILE *fp, int flags);
-int ParticleSetAttr( BPy_Particle * msh, char *name, PyObject * v );
-PyObject *ParticleGetAttr( BPy_Particle * msh, char *name );
-PyObject *ParticleRepr( void );
-PyObject *ParticleCreatePyObject( struct Effect *particle );
-int ParticleCheckPyObject( PyObject * py_obj );
-struct Particle *ParticleFromPyObject( PyObject * py_obj );
-
-
+/* Python BPy_ParticleSys methods table: */
/*****************************************************************************/
-/* Python BPy_Particle methods table: */
-/*****************************************************************************/
-static PyMethodDef BPy_Particle_methods[] = {
- {"getType", ( PyCFunction ) Effect_getType,
- METH_NOARGS, "() - Return Effect type"},
- {"setType", ( PyCFunction ) Effect_setType,
- METH_VARARGS, "() - Set Effect type"},
- {"getFlag", ( PyCFunction ) Effect_getFlag,
- METH_NOARGS, "() - Return Effect flag"},
- {"setFlag", ( PyCFunction ) Effect_setFlag,
- METH_VARARGS, "() - Set Effect flag"},
- {"getStartTime", ( PyCFunction ) Particle_getSta,
- METH_NOARGS, "()-Return particle start time"},
- {"setStartTime", ( PyCFunction ) Particle_setSta, METH_VARARGS,
- "()- Sets particle start time"},
- {"getEndTime", ( PyCFunction ) Particle_getEnd,
- METH_NOARGS, "()-Return particle end time"},
- {"setEndTime", ( PyCFunction ) Particle_setEnd, METH_VARARGS,
- "()- Sets particle end time"},
- {"getLifetime", ( PyCFunction ) Particle_getLifetime,
- METH_NOARGS, "()-Return particle life time"},
- {"setLifetime", ( PyCFunction ) Particle_setLifetime, METH_VARARGS,
- "()- Sets particle life time "},
- {"getNormfac", ( PyCFunction ) Particle_getNormfac,
- METH_NOARGS, "()-Return particle life time"},
- {"setNormfac", ( PyCFunction ) Particle_setNormfac, METH_VARARGS,
- "()- Sets particle life time "},
- {"getObfac", ( PyCFunction ) Particle_getObfac,
- METH_NOARGS, "()-Return particle life time"},
- {"setObfac", ( PyCFunction ) Particle_setObfac, METH_VARARGS,
- "()- Sets particle life time "},
- {"getRandfac", ( PyCFunction ) Particle_getRandfac,
- METH_NOARGS, "()-Return particle life time"},
- {"setRandfac", ( PyCFunction ) Particle_setRandfac, METH_VARARGS,
- "()- Sets particle life time "},
- {"getTexfac", ( PyCFunction ) Particle_getTexfac,
- METH_NOARGS, "()-Return particle life time"},
- {"setTexfac", ( PyCFunction ) Particle_setTexfac, METH_VARARGS,
- "()- Sets particle life time "},
- {"getRandlife", ( PyCFunction ) Particle_getRandlife,
- METH_NOARGS, "()-Return particle life time"},
- {"setRandlife", ( PyCFunction ) Particle_setRandlife, METH_VARARGS,
- "()- Sets particle life time "},
- {"getNabla", ( PyCFunction ) Particle_getNabla,
- METH_NOARGS, "()-Return particle life time"},
- {"setNabla", ( PyCFunction ) Particle_setNabla, METH_VARARGS,
- "()- Sets particle life time "},
- {"getVectsize", ( PyCFunction ) Particle_getVectsize,
- METH_NOARGS, "()-Return particle life time"},
- {"setVectsize", ( PyCFunction ) Particle_setVectsize, METH_VARARGS,
- "()- Sets particle life time "},
- {"getTotpart", ( PyCFunction ) Particle_getTotpart,
- METH_NOARGS, "()-Return particle life time"},
- {"setTotpart", ( PyCFunction ) Particle_setTotpart, METH_VARARGS,
- "()- Sets particle life time "},
- {"getTotkey", ( PyCFunction ) Particle_getTotkey,
- METH_NOARGS, "()-Return particle life time"},
- {"setTotkey", ( PyCFunction ) Particle_setTotkey, METH_VARARGS,
- "()- Sets particle life time "},
- {"getSeed", ( PyCFunction ) Particle_getSeed,
- METH_NOARGS, "()-Return particle life time"},
- {"setSeed", ( PyCFunction ) Particle_setSeed, METH_VARARGS,
- "()- Sets particle life time "},
- {"getForce", ( PyCFunction ) Particle_getForce,
- METH_NOARGS, "()-Return particle life time"},
- {"setForce", ( PyCFunction ) Particle_setForce, METH_VARARGS,
- "()- Sets particle life time "},
- {"getMult", ( PyCFunction ) Particle_getMult,
- METH_NOARGS, "()-Return particle life time"},
- {"setMult", ( PyCFunction ) Particle_setMult, METH_VARARGS,
- "()- Sets particle life time "},
- {"getLife", ( PyCFunction ) Particle_getLife,
- METH_NOARGS, "()-Return particle life time"},
- {"setLife", ( PyCFunction ) Particle_setLife, METH_VARARGS,
- "()- Sets particle life time "},
- {"getMat", ( PyCFunction ) Particle_getMat,
- METH_NOARGS, "()-Return particle life time"},
- {"setMat", ( PyCFunction ) Particle_setMat, METH_VARARGS,
- "()- Sets particle life time "},
- {"getChild", ( PyCFunction ) Particle_getChild,
- METH_NOARGS, "()-Return particle life time"},
- {"setChild", ( PyCFunction ) Particle_setChild, METH_VARARGS,
- "()- Sets particle life time "},
- {"getDefvec", ( PyCFunction ) Particle_getDefvec,
- METH_NOARGS, "()-Return particle life time"},
- {"setDefvec", ( PyCFunction ) Particle_setDefvec, METH_VARARGS,
- "()- Sets particle life time "},
-
-
+
+static PyMethodDef BPy_ParticleSys_methods[] = {
+ {"freeEdit", ( PyCFunction ) Part_freeEdit,
+ METH_NOARGS, "() - Free from edit mode"},
+ {"getLoc", ( PyCFunction ) Part_GetLoc,
+ METH_VARARGS, "() - Get particles location"},
+ {"getRot", ( PyCFunction ) Part_GetRot,
+ METH_VARARGS, "() - Get particles rotations (list of 4 floats quaternion)"},
+ {"getMat", ( PyCFunction ) Part_GetMat,
+ METH_NOARGS, "() - Get particles material"},
+ {"getSize", ( PyCFunction ) Part_GetSize,
+ METH_VARARGS, "() - Get particles size in a list"},
+ {"getAge", ( PyCFunction ) Part_GetAge,
+ METH_VARARGS, "() - Get particles life in a list"},
{NULL, NULL, 0, NULL}
};
-/**************** prototypes ********************/
-PyObject *Particle_Init( void );
-
-
/*****************************************************************************/
-/* Python Particle_Type structure definition: */
+/* Python BPy_ParticleSys attributes get/set structure: */
/*****************************************************************************/
-
-PyTypeObject Particle_Type = {
- PyObject_HEAD_INIT( NULL )
- 0,
- "Particle",
- sizeof( BPy_Particle ),
- 0,
-
- ( destructor ) ParticleDeAlloc,
- 0,
- ( getattrfunc ) ParticleGetAttr,
- ( setattrfunc ) ParticleSetAttr,
- 0,
- ( reprfunc ) ParticleRepr,
- 0,
- 0,
- 0,
- 0,
- 0, 0, 0, 0, 0, 0,
- 0,
- 0, 0, 0, 0, 0, 0,
- BPy_Particle_methods,
- 0,
+static PyGetSetDef BPy_ParticleSys_getseters[] = {
+/* Extras */
+ {"seed",
+ (getter)Part_getSeed, (setter)Part_setSeed,
+ "Set an offset in the random table",
+ NULL},
+ /* basics */
+ {"type",
+ (getter)Part_getType, (setter)Part_setType,
+ "Type of particle system ( Particle.TYPE[ 'HAIR' | 'REACTOR' | 'EMITTER' ] )",
+ NULL},
+ {"resolutionGrid",
+ (getter)Part_getResol, (setter)Part_setResol,
+ "The resolution of the particle grid",
+ NULL},
+ {"startFrame",
+ (getter)Part_getStart, (setter)Part_setStart,
+ "Frame # to start emitting particles",
+ NULL},
+ {"endFrame",
+ (getter)Part_getEnd, (setter)Part_setEnd,
+ "Frame # to stop emitting particles",
+ NULL},
+ {"editable",
+ (getter)Part_getEditable, (setter)Part_setEditable,
+ "Finalize hair to enable editing in particle mode",
+ NULL},
+ {"amount",
+ (getter)Part_getAmount, (setter)Part_setAmount,
+ "The total number of particles",
+ NULL},
+ {"multireact",
+ (getter)Part_getMultiReact, (setter)Part_setMultiReact,
+ "React multiple times ( Paricle.REACTON[ 'NEAR' | 'COLLISION' | 'DEATH' ] )",
+ NULL},
+ {"reactshape",
+ (getter)Part_getReactShape, (setter)Part_setReactShape,
+ "Power of reaction strength dependence on distance to target",
+ NULL},
+ {"hairSegments",
+ (getter)Part_getSegments, (setter)Part_setSegments,
+ "Amount of hair segments",
+ NULL},
+ {"lifetime",
+ (getter)Part_getLife, (setter)Part_setLife,
+ "Specify the life span of the particles",
+ NULL},
+ {"randlife",
+ (getter)Part_getRandLife, (setter)Part_setRandLife,
+ "Give the particle life a random variation",
+ NULL},
+ {"randemission",
+ (getter)Part_getRandEmission, (setter)Part_setRandEmission,
+ "Give the particle life a random variation",
+ NULL},
+ {"particleDistribution",
+ (getter)Part_getParticleDist, (setter)Part_setParticleDist,
+ "Where to emit particles from Paricle.EMITFROM[ 'PARTICLE' | 'VOLUME' | 'FACES' | 'VERTS' ] )",
+ NULL},
+ {"evenDistribution",
+ (getter)Part_getEvenDist, (setter)Part_setEvenDist,
+ "Use even distribution from faces based on face areas or edge lengths",
+ NULL},
+ {"distribution",
+ (getter)Part_getDist, (setter)Part_setDist,
+ "How to distribute particles on selected element Paricle.DISTRIBUTION[ 'GRID' | 'RANDOM' | 'JITTERED' ] )",
+ NULL},
+ {"jitterAmount",
+ (getter)Part_getJitterAmount, (setter)Part_setJitterAmount,
+ "Amount of jitter applied to the sampling",
+ NULL},
+ {"pf",
+ (getter)Part_getPF, (setter)Part_setPF,
+ "Emission locations / face (0 = automatic)",
+ NULL},
+ {"invert",
+ (getter)Part_getInvert, (setter)Part_setInvert,
+ "Invert what is considered object and what is not.",
+ NULL},
+ {"targetObject",
+ (getter)Part_getTargetOb, (setter)Part_setTargetOb,
+ "The object that has the target particle system (empty if same object)",
+ NULL},
+ {"targetpsys",
+ (getter)Part_getTargetPsys, (setter)Part_setTargetPsys,
+ "The target particle system number in the object",
+ NULL},
+/* Physics */
+ {"2d",
+ (getter)Part_get2d, (setter)Part_set2d,
+ "Constrain boids to a surface",
+ NULL},
+ {"maxvel",
+ (getter)Part_getMaxVel, (setter)Part_setMaxVel,
+ "Maximum velocity",
+ NULL},
+ {"avvel",
+ (getter)Part_getAvVel, (setter)Part_setAvVel,
+ "The usual speed % of max velocity",
+ NULL},
+ {"latacc",
+ (getter)Part_getLatAcc, (setter)Part_setLatAcc,
+ "Lateral acceleration % of max velocity",
+ NULL},
+ {"tanacc",
+ (getter)Part_getMaxTan, (setter)Part_setMaxTan,
+ "Tangential acceleration % of max velocity",
+ NULL},
+ {"groundz",
+ (getter)Part_getGroundZ, (setter)Part_setGroundZ,
+ "Default Z value",
+ NULL},
+ {"object",
+ (getter)Part_getOb, (setter)Part_setOb,
+ "Constrain boids to object's surface",
+ NULL},
+/* Visualisation */
+ {"renderEmitter",
+ (getter)Part_getRenderObject, (setter)Part_setRenderObject,
+ "Render emitter object",
+ NULL},
+ {"displayPercentage",
+ (getter)Part_getParticleDisp, (setter)Part_setParticleDisp,
+ "Particle display percentage",
+ NULL},
+ {"hairDisplayStep",
+ (getter)Part_getStep, (setter)Part_setStep,
+ "How many steps paths are drawn with (power of 2)",
+ NULL},
+ {"hairRenderStep",
+ (getter)Part_getRenderStep, (setter)Part_setRenderStep,
+ "How many steps paths are rendered with (power of 2)",
+ NULL},
+ {"duplicateObject",
+ (getter)Part_getDupOb, NULL,
+ "Get the duplicate ob",
+ NULL},
+ {"drawAs",
+ (getter)Part_getDrawAs, NULL,
+ "Get draw type Particle.DRAWAS([ 'NONE' | 'OBJECT' | 'POINT' | ... ] )",
+ NULL},
+ {NULL,NULL,NULL,NULL,NULL} /* Sentinel */
};
-/*****************************************************************************/
-/* The following string definitions are used for documentation strings. */
-/* In Python these will be written to the console when doing a */
-/* Blender.Particle.__doc__ */
-/*****************************************************************************/
-char M_Particle_doc[] = "The Blender Particle module\n\n\
-This module provides access to **Object Data** in Blender.\n\
-Functions :\n\
- New(object mesh's name) : creates a new part object and adds it to the given mesh object \n\
- Get(name) : retreives a particle with the given name (mandatory)\n\
- get(name) : same as Get. Kept for compatibility reasons.\n";
-char M_Particle_New_doc[] = "New(name) : creates a new part object and adds it to the given mesh object\n";
-char M_Particle_Get_doc[] = "xxx";
-
/*****************************************************************************/
/* Python method structure definition for Blender.Particle module: */
/*****************************************************************************/
-struct PyMethodDef M_Particle_methods[] = {
- {"New", ( PyCFunction ) M_Particle_New, METH_VARARGS, M_Particle_New_doc},
- {"Get", M_Particle_Get, METH_VARARGS, M_Particle_Get_doc},
- {"get", M_Particle_Get, METH_VARARGS, M_Particle_Get_doc},
+static struct PyMethodDef M_ParticleSys_methods[] = {
+ {"New", ( PyCFunction ) M_ParticleSys_New, METH_VARARGS, M_ParticleSys_New_doc},
+ {"Get", M_ParticleSys_Get, METH_VARARGS, M_ParticleSys_Get_doc},
{NULL, NULL, 0, NULL}
};
+/*****************************************************************************/
+/* Python ParticleSys_Type structure definition: */
+/*****************************************************************************/
+PyTypeObject ParticleSys_Type = {
+ PyObject_HEAD_INIT( NULL ) /* required py macro */
+ 0, /* ob_size */
+ /* For printing, in format "<module>.<name>" */
+ "Blender ParticleSys", /* char *tp_name; */
+ sizeof( BPy_PartSys ), /* int tp_basicsize; */
+ 0, /* tp_itemsize; For allocation */
+
+ /* Methods to implement standard operations */
+
+ NULL, /* destructor tp_dealloc; */
+ NULL, /* printfunc tp_print; */
+ NULL, /* getattrfunc tp_getattr; */
+ NULL, /* setattrfunc tp_setattr; */
+ NULL, /* cmpfunc tp_compare; */
+ ( reprfunc ) ParticleSys_repr,/* reprfunc tp_repr; */
+
+ /* Method suites for standard classes */
+
+ NULL, /* PyNumberMethods *tp_as_number; */
+ NULL, /* PySequenceMethods *tp_as_sequence; */
+ NULL, /* PyMappingMethods *tp_as_mapping; */
+
+ /* More standard operations (here for binary compatibility) */
+
+ NULL, /* hashfunc tp_hash; */
+ NULL, /* ternaryfunc tp_call; */
+ NULL, /* reprfunc tp_str; */
+ NULL, /* getattrofunc tp_getattro; */
+ NULL, /* setattrofunc tp_setattro; */
+
+ /* Functions to access object as input/output buffer */
+ NULL, /* PyBufferProcs *tp_as_buffer; */
+
+ /*** Flags to define presence of optional/expanded features ***/
+ Py_TPFLAGS_DEFAULT, /* long tp_flags; */
+
+ NULL, /* char *tp_doc; Documentation string */
+ /*** Assigned meaning in release 2.0 ***/
+ /* call function for all accessible objects */
+ NULL, /* traverseproc tp_traverse; */
+
+ /* delete references to contained objects */
+ NULL, /* inquiry tp_clear; */
+
+ /*** Assigned meaning in release 2.1 ***/
+ /*** rich comparisons ***/
+ NULL, /* richcmpfunc tp_richcompare; */
+
+ /*** weak reference enabler ***/
+ 0, /* long tp_weaklistoffset; */
+
+ /*** Added in release 2.2 ***/
+ /* Iterators */
+ NULL, /* getiterfunc tp_iter; */
+ NULL, /* iternextfunc tp_iternext; */
+
+ /*** Attribute descriptor and subclassing stuff ***/
+ BPy_ParticleSys_methods, /* struct PyMethodDef *tp_methods; */
+ NULL, /* struct PyMemberDef *tp_members; */
+ BPy_ParticleSys_getseters, /* struct PyGetSetDef *tp_getset; */
+ NULL, /* struct _typeobject *tp_base; */
+ NULL, /* PyObject *tp_dict; */
+ NULL, /* descrgetfunc tp_descr_get; */
+ NULL, /* descrsetfunc tp_descr_set; */
+ 0, /* long tp_dictoffset; */
+ NULL, /* initproc tp_init; */
+ NULL, /* allocfunc tp_alloc; */
+ NULL, /* newfunc tp_new; */
+ /* Low-level free-memory routine */
+ NULL, /* freefunc tp_free; */
+ /* For PyObject_IS_GC */
+ NULL, /* inquiry tp_is_gc; */
+ NULL, /* PyObject *tp_bases; */
+ /* method resolution order */
+ NULL, /* PyObject *tp_mro; */
+ NULL, /* PyObject *tp_cache; */
+ NULL, /* PyObject *tp_subclasses; */
+ NULL, /* PyObject *tp_weaklist; */
+ NULL
+};
/*****************************************************************************/
-/* Function: M_Particle_New */
-/* Python equivalent: Blender.Effect.Particle.New */
-/* Description : Create a particle effect and add a link */
-/* to the given mesh-type Object */
-/* Data : String mesh object name */
-/* Return : pyobject particle */
+/* Function: PARTICLESYS_repr */
+/* Description: This is a callback function for the BPy_Effect type. It */
+/* builds a meaninful string to represent effcte objects. */
/*****************************************************************************/
-PyObject *M_Particle_New( PyObject * self, PyObject * args )
+
+static PyObject *ParticleSys_repr( void )
{
- printf("warning, static particles api removed\n");
- Py_INCREF( Py_None );
- return Py_None;
+ return PyString_FromString( "ParticleSys" );
}
/*****************************************************************************/
-/* Function: M_Particle_Get */
-/* Python equivalent: Blender.Effect.Particle.Get */
+/* Function : P_sys_FromPyObject */
/*****************************************************************************/
-PyObject *M_Particle_Get( PyObject * self, PyObject * args )
+
+struct ParticleSystem *P_sys_FromPyObject( BPy_PartSys * py_obj )
{
- printf("warning, static particles api removed\n");
- Py_INCREF( Py_None );
- return Py_None;
+ BPy_PartSys *blen_obj;
+
+ blen_obj = ( BPy_PartSys * ) py_obj;
+ return ( blen_obj->psys );
}
/*****************************************************************************/
-/* Function: Particle_Init */
+/* Function : ParticleSysCreatePyObject */
/*****************************************************************************/
-PyObject *Particle_Init( void )
+PyObject *ParticleSys_CreatePyObject( ParticleSystem * psystem, Object *ob )
{
- PyObject *submodule;
+ BPy_PartSys *blen_object;
+
+ blen_object =
+ ( BPy_PartSys * ) PyObject_NEW( BPy_PartSys, &ParticleSys_Type );
+
+ if( blen_object )
+ blen_object->psys = (ParticleSystem *)psystem;
+
+ blen_object->object = ob;
+
+ return ( PyObject * ) blen_object;
+}
+
+
+PyObject *M_ParticleSys_New( PyObject * self, PyObject * args ){
+ ParticleSystem *psys = 0;
+ ParticleSystem *rpsys = 0;
+ ModifierData *md;
+ ParticleSystemModifierData *psmd;
+ Object *ob = NULL;
+ char *name = NULL;
+ ID *id;
+ int nr;
+
+ if( !PyArg_ParseTuple( args, "s", &name ) )
+ return EXPP_ReturnPyObjError( PyExc_TypeError,
+ "expected string argument" );
+
+ for( ob = G.main->object.first; ob; ob = ob->id.next )
+ if( !strcmp( name, ob->id.name + 2 ) )
+ break;
+
+ if( !ob )
+ return EXPP_ReturnPyObjError( PyExc_AttributeError,
+ "object does not exist" );
+
+ id = (ID *)psys_new_settings("PSys", G.main);
+
+ psys = MEM_callocN(sizeof(ParticleSystem), "particle_system");
+ psys->pointcache = BKE_ptcache_add();
+ psys->flag |= PSYS_ENABLED;
+ BLI_addtail(&ob->particlesystem,psys);
+
+ md = modifier_new(eModifierType_ParticleSystem);
+ sprintf(md->name, "ParticleSystem %i", BLI_countlist(&ob->particlesystem));
+ psmd = (ParticleSystemModifierData*) md;
+ psmd->psys=psys;
+ BLI_addtail(&ob->modifiers, md);
+
+ psys->part=(ParticleSettings*)id;
+ psys->totpart=0;
+ psys->flag=PSYS_ENABLED|PSYS_CURRENT;
+ psys->cfra=bsystem_time(ob,(float)G.scene->r.cfra+1,0.0);
+ rpsys = psys;
+
+ /* check need for dupliobjects */
+
+ nr=0;
+ for(psys=ob->particlesystem.first; psys; psys=psys->next){
+ if(ELEM(psys->part->draw_as,PART_DRAW_OB,PART_DRAW_GR))
+ nr++;
+ }
+ if(nr)
+ ob->transflag |= OB_DUPLIPARTS;
+ else
+ ob->transflag &= ~OB_DUPLIPARTS;
+
+ BIF_undo_push("Browse Particle System");
+
+ DAG_scene_sort(G.scene);
+ DAG_object_flush_update(G.scene, ob, OB_RECALC_DATA);
+
+ return ParticleSys_CreatePyObject(rpsys,ob);
+}
+
+
+/*
+
+Get( name ) returns named particle sys or list of all
+throws NameError if name not found
+
+*/
+
+PyObject *M_ParticleSys_Get( PyObject * self, PyObject * args )
+{
+ ParticleSettings *psys_iter;
+ char *name = NULL;
+#if 0
+
+ ParticleSystem *blparticlesys = 0;
+ Object *ob;
+
+ PyObject *partsyslist,*current;
+#endif
+ if( !PyArg_ParseTuple( args, "|s", &name ) )
+ return EXPP_ReturnPyObjError( PyExc_TypeError,
+ "expected string argument" );
+
+ psys_iter = G.main->particle.first; /* initialize our iterator */
+
+ if( name ) { /* find psys by name */
+
+ PyObject *wanted_obj = NULL;
- if( PyType_Ready( &Particle_Type) < 0)
- return NULL;
+ while( psys_iter && ! wanted_obj ){
+ if( !strcmp( name, psys_iter->id.name + 2)){
+ printf("** found %s\n", psys_iter->id.name+2);
+ //wanted_obj = ParticleSys_CreatePyObject( psys_iter );
+ break;
+ }
+ psys_iter = psys_iter->id.next;
+ }
+
+ if( !wanted_obj){ /* requested object not found */
+ char error_msg[64];
+ PyOS_snprintf( error_msg, sizeof( error_msg ),
+ "Particle System '%s' not found", name);
+ return EXPP_ReturnPyObjError( PyExc_NameError, error_msg );
+ }
+
+ return wanted_obj;
+
+ }else { /* no arg - return a list of bpy objs all P. systems */
+
+ PyObject *pylist;
+ int index = 0;
+
+ pylist = PyList_New( BLI_countlist( &G.main->particle ));
+ printf("** list is %d long\n", PyList_Size( pylist));
+ if( ! pylist ){
+ return EXPP_ReturnPyObjError(
+ PyExc_MemoryError,
+ "could not create ParticleSystem list");
+ }
+
+ while( psys_iter ){
+#if 0
+ pyobj = ParticleSystem_CreatePyObject( psys_iter);
+ if( !pyobj){
+ Py_DECREF( pylist );
+ return EXPP_ReturnPyObjError(
+ PyExc_MemoryError,
+ "could not create ParticleSystem PyObject");
+ }
+ PyList_SET_ITEM( pylist, index, pyobj);
+#endif
+ printf("name is %s\n", psys_iter->id.name+2);
+ psys_iter = psys_iter->id.next;
+ index++;
+ }
+
+ return pylist;
+
+ }
+
+
+
+#if 0
+
+ for( ob = G.main->particlesystem.first; ob; ob = ob->id.next )
+ if( !strcmp( name, ob->id.name + 2 ) )
+ break;
+
+ if( !ob )
+ return EXPP_ReturnPyObjError( PyExc_AttributeError,
+ "object does not exist" );
+
+ blparticlesys = ob->particlesystem.first;
- submodule =
- Py_InitModule3( "Blender.Particle", M_Particle_methods, M_Particle_doc );
- return ( submodule );
+
+ partsyslist = PyList_New( 0 );
+
+ if (!blparticlesys)
+ return partsyslist;
+
+ current = ParticleSys_CreatePyObject( blparticlesys, ob );
+ PyList_Append(partsyslist,current);
+
+
+ while((blparticlesys = blparticlesys->next)){
+ current = ParticleSys_CreatePyObject( blparticlesys, ob );
+ PyList_Append(partsyslist,current);
+ }
+
+ return partsyslist;
+
+#endif
}
+
/*****************************************************************************/
-/* Python BPy_Particle methods: */
+/* Function: ParticleSys_Init */
/*****************************************************************************/
-PyObject *Particle_getSta( BPy_Particle * self )
+/* create the Blender.Particle.Type constant dict */
+
+static PyObject *Particle_TypeDict( void )
{
+ PyObject *Types = PyConstant_New( );
- PartEff *ptr = ( PartEff * ) self->particle;
- return PyFloat_FromDouble( ptr->sta );
-}
+ if( Types ) {
+ BPy_constant *c = ( BPy_constant * ) Types;
+ PyConstant_Insert( c, "HAIR",
+ PyInt_FromLong( 2 ) );
+ PyConstant_Insert( c, "REACTOR",
+ PyInt_FromLong( 1 ) );
+ PyConstant_Insert( c, "EMITTER",
+ PyInt_FromLong( 0 ) );
+ }
+ return Types;
+}
+/* create the Blender.Particle.Distribution constant dict */
-PyObject *Particle_setSta( BPy_Particle * self, PyObject * args )
+static PyObject *Particle_DistrDict( void )
{
- PartEff *ptr = ( PartEff * ) self->particle;
- float val = 0;
- if( !PyArg_ParseTuple( args, "f", &val ) )
- return ( EXPP_ReturnPyObjError( PyExc_AttributeError,
- "expected float argument" ) );
- ptr->sta = val;
- Py_INCREF( Py_None );
- return Py_None;
-}
+ PyObject *Distr = PyConstant_New( );
-PyObject *Particle_getEnd( BPy_Particle * self )
-{
+ if( Distr ) {
+ BPy_constant *c = ( BPy_constant * ) Distr;
- PartEff *ptr = ( PartEff * ) self->particle;
- return PyFloat_FromDouble( ptr->end );
+ PyConstant_Insert( c, "GRID",
+ PyInt_FromLong( 2 ) );
+ PyConstant_Insert( c, "RANDOM",
+ PyInt_FromLong( 1 ) );
+ PyConstant_Insert( c, "JITTERED",
+ PyInt_FromLong( 0 ) );
+ }
+ return Distr;
}
+/* create the Blender.Particle.EmitFrom constant dict */
+
+static PyObject *Particle_EmitFrom( void )
+{
+ PyObject *EmitFrom = PyConstant_New( );
+
+ if( EmitFrom ) {
+ BPy_constant *c = ( BPy_constant * ) EmitFrom;
+
+ PyConstant_Insert( c, "VERTS",
+ PyInt_FromLong( 0 ) );
+ PyConstant_Insert( c, "FACES",
+ PyInt_FromLong( 1 ) );
+ PyConstant_Insert( c, "VOLUME",
+ PyInt_FromLong( 2 ) );
+ PyConstant_Insert( c, "PARTICLE",
+ PyInt_FromLong( 3 ) );
+ }
+ return EmitFrom;
+}
+/* create the Blender.Particle.Collision constant dict */
-PyObject *Particle_setEnd( BPy_Particle * self, PyObject * args )
+static PyObject *Particle_ReactOnDict( void )
{
- float val = 0;
- PartEff *ptr = ( PartEff * ) self->particle;
- if( !PyArg_ParseTuple( args, "f", &val ) )
- return ( EXPP_ReturnPyObjError( PyExc_AttributeError,
- "expected float argument" ) );
- ptr->end = val;
- Py_INCREF( Py_None );
- return Py_None;
+ PyObject *ReactOn = PyConstant_New( );
+
+ if( ReactOn ) {
+ BPy_constant *c = ( BPy_constant * ) ReactOn;
+
+ PyConstant_Insert( c, "NEAR",
+ PyInt_FromLong( 2 ) );
+ PyConstant_Insert( c, "COLLISION",
+ PyInt_FromLong( 1 ) );
+ PyConstant_Insert( c, "DEATH",
+ PyInt_FromLong( 0 ) );
+ }
+ return ReactOn;
}
-PyObject *Particle_getLifetime( BPy_Particle * self )
+static PyObject *Particle_DrawAs( void )
{
+ PyObject *DrawAs = PyConstant_New( );
+
+ if( DrawAs ) {
+ BPy_constant *c = ( BPy_constant * ) DrawAs;
+
+ PyConstant_Insert( c, "NONE",
+ PyInt_FromLong( 0 ) );
+ PyConstant_Insert( c, "POINT",
+ PyInt_FromLong( 1 ) );
+ PyConstant_Insert( c, "CIRCLE",
+ PyInt_FromLong( 2 ) );
+ PyConstant_Insert( c, "CROSS",
+ PyInt_FromLong( 3 ) );
+ PyConstant_Insert( c, "AXIS",
+ PyInt_FromLong( 4 ) );
+ PyConstant_Insert( c, "LINE",
+ PyInt_FromLong( 5 ) );
+ PyConstant_Insert( c, "PATH",
+ PyInt_FromLong( 6 ) );
+ PyConstant_Insert( c, "OBJECT",
+ PyInt_FromLong( 7 ) );
+ PyConstant_Insert( c, "GROUP",
+ PyInt_FromLong( 8 ) );
+ PyConstant_Insert( c, "BILLBOARD",
+ PyInt_FromLong( 9 ) );
+ }
+ return DrawAs;
+}
+
+void Particle_Recalc(BPy_PartSys* self,int child){
+ psys_flush_settings(self->psys->part,0,child );
+}
- PartEff *ptr = ( PartEff * ) self->particle;
- return PyFloat_FromDouble( ptr->lifetime );
+void Particle_RecalcPsys_distr(BPy_PartSys* self,int child){
+ psys_flush_settings(self->psys->part,PSYS_DISTR,child);
}
+PyObject *ParticleSys_Init( void ){
+ PyObject *submodule;
+ PyObject *Types;
+ PyObject *React;
+ PyObject *EmitFrom;
+ PyObject *Dist;
+ PyObject *DrawAs;
+ if( PyType_Ready( &ParticleSys_Type ) < 0)
+ return NULL;
-PyObject *Particle_setLifetime( BPy_Particle * self, PyObject * args )
-{
- PartEff *ptr = ( PartEff * ) self->particle;
- float val = 0;
- if( !PyArg_ParseTuple( args, "f", &val ) )
- return ( EXPP_ReturnPyObjError( PyExc_AttributeError,
- "expected float argument" ) );
- ptr->lifetime = val;
- Py_INCREF( Py_None );
- return Py_None;
+ Types = Particle_TypeDict ();
+ React = Particle_ReactOnDict();
+ EmitFrom = Particle_EmitFrom();
+ DrawAs = Particle_DrawAs();
+ Dist = Particle_DistrDict();
+
+ submodule = Py_InitModule3( "Blender.Particle",
+ M_ParticleSys_methods, M_ParticleSys_doc );
+
+ if( Types )
+ PyModule_AddObject( submodule, "TYPE", Types );
+ if( React )
+ PyModule_AddObject( submodule, "REACTON", React );
+ if( EmitFrom )
+ PyModule_AddObject( submodule, "EMITFROM", EmitFrom );
+ if( Dist )
+ PyModule_AddObject( submodule, "DISTRIBUTION", Dist );
+ if( DrawAs )
+ PyModule_AddObject( submodule, "DRAWAS", DrawAs );
+
+ return ( submodule );
}
+static PyObject *Part_freeEdit( BPy_PartSys * self, PyObject * args ){
-PyObject *Particle_getNormfac( BPy_Particle * self )
-{
+ if(self->psys->flag & PSYS_EDITED){
+ if(self->psys->edit)
+ PE_free_particle_edit(self->psys);
+
+ self->psys->flag &= ~PSYS_EDITED;
+ self->psys->recalc |= PSYS_RECALC_HAIR;
- PartEff *ptr = ( PartEff * ) self->particle;
- return PyFloat_FromDouble( ptr->normfac );
+ DAG_object_flush_update(G.scene, self->object, OB_RECALC_DATA);
+ }
+ Py_RETURN_NONE;
}
+static PyObject *Part_GetLoc( BPy_PartSys * self, PyObject * args ){
+ ParticleSystem *psys = 0L;
+ Object *ob = 0L;
+ PyObject *partlist,*seglist;
+ PyObject* loc = 0L;
+ ParticleCacheKey **cache,*path;
+ ParticleKey state;
+ float cfra=bsystem_time(ob,(float)CFRA,0.0);
+ int i,j,k;
+ int childexists = 0;
+ int all = 0;
+ int id = 0;
+
+ if( !PyArg_ParseTuple( args, "|ii", &all,&id ) )
+ return EXPP_ReturnPyObjError( PyExc_TypeError,
+ "expected one optional integer as argument" );
+
+ psys = self->psys;
+ ob = self->object;
+
+ if (!ob || !psys)
+ Py_RETURN_NONE;
+
+ if (psys->part->type == 2){
+ cache=psys->pathcache;
+
+ /* little hack to calculate hair steps in render mode */
+ psys->renderdata = (void*)(int)1;
+
+ psys_cache_paths(ob, psys, cfra, 0);
+
+ psys->renderdata = NULL;
+
+ partlist = PyList_New( 0 );
+ if( !partlist )
+ return EXPP_ReturnPyObjError( PyExc_MemoryError, "PyList() failed" );
+
+ for(i = 0; i < psys->totpart; i++){
+ path=cache[i];
+ seglist = PyList_New( 0 );
+ k = path->steps+1;
+ for( j = 0; j < k ; j++){
+ loc = PyTuple_New(3);
+
+ PyTuple_SetItem(loc,0,PyFloat_FromDouble((double)path->co[0]));
+ PyTuple_SetItem(loc,1,PyFloat_FromDouble((double)path->co[1]));
+ PyTuple_SetItem(loc,2,PyFloat_FromDouble((double)path->co[2]));
+
+ if ( (PyList_Append(seglist,loc) < 0) ){
+ Py_DECREF(seglist);
+ Py_DECREF(partlist);
+ Py_XDECREF(loc);
+ return EXPP_ReturnPyObjError( PyExc_RuntimeError,
+ "Couldn't append item to PyList" );
+ }
+
+ path++;
+ }
+
+ if ( PyList_Append(partlist,seglist) < 0 ){
+ Py_DECREF(seglist);
+ Py_DECREF(partlist);
+ return EXPP_ReturnPyObjError( PyExc_RuntimeError,
+ "Couldn't append item to PyList" );
+ }
+ }
+
+ cache=psys->childcache;
+
+ for(i = 0; i < psys->totchild; i++){
+ path=cache[i];
+ seglist = PyList_New( 0 );
+ k = path->steps+1;
+ for( j = 0; j < k ; j++){
+ loc = PyTuple_New(3);
+
+ PyTuple_SetItem(loc,0,PyFloat_FromDouble((double)path->co[0]));
+ PyTuple_SetItem(loc,1,PyFloat_FromDouble((double)path->co[1]));
+ PyTuple_SetItem(loc,2,PyFloat_FromDouble((double)path->co[2]));
+
+ if ( PyList_Append(seglist,loc) < 0){
+ Py_DECREF(partlist);
+ Py_XDECREF(loc);
+ return EXPP_ReturnPyObjError( PyExc_RuntimeError,
+ "Couldn't append item to PyList" );
+ }
+
+ path++;
+ }
+
+ if ( PyList_Append(partlist,seglist) < 0){
+ Py_DECREF(partlist);
+ Py_XDECREF(loc);
+ return EXPP_ReturnPyObjError( PyExc_RuntimeError,
+ "Couldn't append item to PyList" );
+ }
+ }
+
+ } else {
+ int init;
+ partlist = PyList_New( 0 );
+ if( !partlist )
+ return EXPP_ReturnPyObjError( PyExc_MemoryError, "PyList() failed" );
+
+ if (psys->totchild > 0 && !(psys->part->draw & PART_DRAW_PARENT))
+ childexists = 1;
+
+ for (i = 0; i < psys->totpart + psys->totchild; i++){
+ if (childexists && (i < psys->totpart))
+ continue;
+
+ state.time = cfra;
+ if(psys_get_particle_state(ob,psys,i,&state,0)==0)
+ init = 0;
+ else
+ init = 1;
+
+ if (init){
+ if (!id)
+ loc = PyTuple_New(3);
+ else
+ loc = PyTuple_New(4);
+ PyTuple_SetItem(loc,0,PyFloat_FromDouble((double)state.co[0]));
+ PyTuple_SetItem(loc,1,PyFloat_FromDouble((double)state.co[1]));
+ PyTuple_SetItem(loc,2,PyFloat_FromDouble((double)state.co[2]));
+ if (id)
+ PyTuple_SetItem(loc,3,PyInt_FromLong(i));
+
+ if ( PyList_Append(partlist,loc) < 0 ){
+ Py_DECREF(partlist);
+ Py_XDECREF(loc);
+ return EXPP_ReturnPyObjError( PyExc_RuntimeError,
+ "Couldn't append item to PyList" );
+ }
+ }
+ else {
+ if ( all ){
+ if ( PyList_Append(partlist,Py_None) < 0 ){
+ Py_DECREF(partlist);
+ return EXPP_ReturnPyObjError( PyExc_RuntimeError,
+ "Couldn't append item to PyList" );
+ }
+ }
+ }
+ }
+ }
+ return partlist;
+}
+static PyObject *Part_GetRot( BPy_PartSys * self, PyObject * args ){
+ ParticleSystem *psys = 0L;
+ Object *ob = 0L;
+ PyObject *partlist = 0L;
+ PyObject* loc = 0L;
+ ParticleKey state;
+ int i;
+ int childexists = 0;
+ int all = 0;
+ int id = 0;
+
+ float cfra=bsystem_time(ob,(float)CFRA,0.0);
+
+ if( !PyArg_ParseTuple( args, "|ii", &all, &id ) )
+ return EXPP_ReturnPyObjError( PyExc_TypeError,
+ "expected one optional integer as argument" );
+
+ psys = self->psys;
+ ob = self->object;
+
+ if (!ob || !psys)
+ Py_RETURN_NONE;
+
+ if (psys->part->type != 2){
+ partlist = PyList_New( 0 );
+
+ if (psys->totchild > 0 && !(psys->part->draw & PART_DRAW_PARENT))
+ childexists = 1;
+
+ for (i = 0; i < psys->totpart + psys->totchild; i++){
+ if (childexists && (i < psys->totpart))
+ continue;
+
+ state.time = cfra;
+ if(psys_get_particle_state(ob,psys,i,&state,0)==0){
+ if ( all ){
+ PyList_Append(partlist,Py_None);
+ continue;
+ } else {
+ continue;
+ }
+ }
+ if (!id)
+ loc = PyTuple_New(4);
+ else
+ loc = PyTuple_New(5);
+ PyTuple_SetItem(loc,0,PyFloat_FromDouble((double)state.rot[0]));
+ PyTuple_SetItem(loc,1,PyFloat_FromDouble((double)state.rot[1]));
+ PyTuple_SetItem(loc,2,PyFloat_FromDouble((double)state.rot[2]));
+ PyTuple_SetItem(loc,3,PyFloat_FromDouble((double)state.rot[3]));
+ if (id)
+ PyTuple_SetItem(loc,4,PyInt_FromLong(i));
+ PyList_Append(partlist,loc);
+ }
+ }
+ return partlist;
+}
-PyObject *Particle_setNormfac( BPy_Particle * self, PyObject * args )
-{
- PartEff *ptr = ( PartEff * ) self->particle;
- float val = 0;
- if( !PyArg_ParseTuple( args, "f", &val ) )
- return ( EXPP_ReturnPyObjError( PyExc_AttributeError,
- "expected float argument" ) );
- ptr->normfac = val;
- Py_INCREF( Py_None );
- return Py_None;
+static PyObject *Part_GetSize( BPy_PartSys * self, PyObject * args ){
+ ParticleKey state;
+ ParticleSystem *psys = 0L;
+ ParticleData *data;
+ Object *ob = 0L;
+ PyObject *partlist,*tuple;
+ PyObject* siz = 0L;
+ float size;
+ int i;
+ int childexists = 0;
+ int all = 0;
+ int id = 0;
+
+ float cfra=bsystem_time(ob,(float)CFRA,0.0);
+
+ if( !PyArg_ParseTuple( args, "|ii", &all, &id ) )
+ return EXPP_ReturnPyObjError( PyExc_TypeError,
+ "expected one optional integer as argument" );
+
+ data = self->psys->particles;
+
+ psys = self->psys;
+ ob = self->object;
+
+ if (!ob || !psys)
+ Py_RETURN_NONE;
+
+ partlist = PyList_New( 0 );
+
+ if (psys->totchild > 0 && !(psys->part->draw & PART_DRAW_PARENT))
+ childexists = 1;
+
+ for (i = 0; i < psys->totpart + psys->totchild; i++, data++){
+ if (psys->part->type != 2){
+ if (childexists && (i < psys->totpart))
+ continue;
+
+ if ( !all ){
+ state.time = cfra;
+ if(psys_get_particle_state(ob,psys,i,&state,0)==0)
+ continue;
+ }
+
+ if (i < psys->totpart){
+ size = data->size;
+ } else {
+ ChildParticle *cpa= &psys->child[i-psys->totpart];
+ size = psys_get_child_size(psys,cpa,cfra,0);
+ }
+ if (id){
+ tuple = PyTuple_New(2);
+ PyTuple_SetItem(tuple,0,PyFloat_FromDouble((double)size));
+ PyTuple_SetItem(tuple,1,PyInt_FromLong(i));
+ PyList_Append(partlist,tuple);
+ } else {
+ siz = PyFloat_FromDouble((double)size);
+ PyList_Append(partlist,siz);
+ }
+ }
+ }
+ return partlist;
}
+static PyObject *Part_GetAge( BPy_PartSys * self, PyObject * args ){
+ ParticleKey state;
+ ParticleSystem *psys = 0L;
+ ParticleData *data;
+ Object *ob = 0L;
+ PyObject *partlist,*tuple;
+ PyObject* lif = 0L;
+ float life;
+ int i;
+ int childexists = 0;
+ int all = 0;
+ int id = 0;
-PyObject *Particle_getObfac( BPy_Particle * self )
-{
+ float cfra=bsystem_time(ob,(float)CFRA,0.0);
+
+ if( !PyArg_ParseTuple( args, "|ii", &all, &id ) )
+ return EXPP_ReturnPyObjError( PyExc_TypeError,
+ "expected one optional integer as argument" );
+
+ data = self->psys->particles;
- PartEff *ptr = ( PartEff * ) self->particle;
- return PyFloat_FromDouble( ptr->obfac );
+ psys = self->psys;
+ ob = self->object;
+
+ if (!ob || !psys)
+ Py_RETURN_NONE;
+
+ partlist = PyList_New( 0 );
+
+ if (psys->totchild > 0 && !(psys->part->draw & PART_DRAW_PARENT))
+ childexists = 1;
+
+ for (i = 0; i < psys->totpart + psys->totchild; i++, data++){
+ if (psys->part->type != 2){
+
+ if (childexists && (i < psys->totpart))
+ continue;
+
+ if ( !all ){
+ state.time = cfra;
+ if(psys_get_particle_state(ob,psys,i,&state,0)==0)
+ continue;
+ }
+
+ if (i < psys->totpart){
+ life = (cfra-data->time)/data->lifetime;
+ } else {
+ ChildParticle *cpa= &psys->child[i-psys->totpart];
+ life = psys_get_child_time(psys,cpa,cfra);
+ }
+ if (id){
+ tuple = PyTuple_New(2);
+ PyTuple_SetItem(tuple,0,PyFloat_FromDouble((double)life));
+ PyTuple_SetItem(tuple,1,PyInt_FromLong(i));
+ PyList_Append(partlist,tuple);
+ } else {
+ lif = PyFloat_FromDouble((double)life);
+ PyList_Append(partlist,lif);
+ }
+ }
+ }
+ return partlist;
}
+static PyObject *Part_GetMat( BPy_PartSys * self, PyObject * args ){
+ Material *ma;
+ PyObject* mat = 0L;
+ ma = give_current_material(self->object,self->psys->part->omat);
+ if(!ma)
+ Py_RETURN_NONE;
-PyObject *Particle_setObfac( BPy_Particle * self, PyObject * args )
-{
- float val = 0;
- PartEff *ptr = ( PartEff * ) self->particle;
- if( !PyArg_ParseTuple( args, "f", &val ) )
- return ( EXPP_ReturnPyObjError( PyExc_AttributeError,
- "expected float argument" ) );
- ptr->obfac = val;
- Py_INCREF( Py_None );
- return Py_None;
+ mat = Material_CreatePyObject(ma);
+ return mat;
}
+/*****************************************************************************/
+/* Function: Set/Get Seed */
+/*****************************************************************************/
-PyObject *Particle_getRandfac( BPy_Particle * self )
+static int Part_setSeed( BPy_PartSys * self, PyObject * args )
{
+ return EXPP_setIValueRange( args, &self->psys->seed,
+ 0, 255, 'i' );
+}
- PartEff *ptr = ( PartEff * ) self->particle;
- return PyFloat_FromDouble( ptr->randfac );
+static PyObject *Part_getSeed( BPy_PartSys * self )
+{
+ return PyInt_FromLong( (long)( self->psys->seed ) );
}
+static int Part_setType( BPy_PartSys * self, PyObject * args )
+{
+ int res = EXPP_setIValueRange( args, &self->psys->part->type,
+ 0, 2, 'h' );
+ psys_flush_settings( self->psys->part, PSYS_TYPE, 1 );
+
+ return res;
+}
-PyObject *Particle_setRandfac( BPy_Particle * self, PyObject * args )
+static PyObject *Part_getType( BPy_PartSys * self )
{
- float val = 0;
- PartEff *ptr = ( PartEff * ) self->particle;
- if( !PyArg_ParseTuple( args, "f", &val ) )
- return ( EXPP_ReturnPyObjError( PyExc_AttributeError,
- "expected float argument" ) );
- ptr->randfac = val;
- Py_INCREF( Py_None );
- return Py_None;
+ return PyInt_FromLong( (short)( self->psys->part->type ) );
}
+static int Part_setResol( BPy_PartSys * self, PyObject * args )
+{
+ int res = EXPP_setIValueRange( args, &self->psys->part->grid_res,
+ 0, 100, 'i' );
+ psys_flush_settings( self->psys->part, PSYS_ALLOC, 1 );
-PyObject *Particle_getTexfac( BPy_Particle * self )
-{
+ return res;
+}
- PartEff *ptr = ( PartEff * ) self->particle;
- return PyFloat_FromDouble( ptr->texfac );
+static PyObject *Part_getResol( BPy_PartSys * self )
+{
+ return PyInt_FromLong( ((int)( self->psys->part->grid_res )) );
}
+static int Part_setStart( BPy_PartSys * self, PyObject * args )
+{
+ int res = EXPP_setFloatRange( args, &self->psys->part->sta,
+ 0.0f, 100000.0f );
+
+ psys_flush_settings(self->psys->part,PSYS_INIT,1);
+ return res;
+}
-PyObject *Particle_setTexfac( BPy_Particle * self, PyObject * args )
+static PyObject *Part_getStart( BPy_PartSys * self )
{
- PartEff *ptr = ( PartEff * ) self->particle;
- float val = 0;
- if( !PyArg_ParseTuple( args, "f", &val ) )
- return ( EXPP_ReturnPyObjError( PyExc_AttributeError,
- "expected float argument" ) );
- ptr->texfac = val;
- Py_INCREF( Py_None );
- return Py_None;
+ return PyFloat_FromDouble( (float)( self->psys->part->sta ) );
}
+static int Part_setEnd( BPy_PartSys * self, PyObject * args )
+{
+ int res = EXPP_setFloatRange( args, &self->psys->part->end,
+ 0.0f, 100000.0f );
+ psys_flush_settings(self->psys->part,PSYS_INIT,1);
-PyObject *Particle_getRandlife( BPy_Particle * self )
-{
+ return res;
+}
- PartEff *ptr = ( PartEff * ) self->particle;
- return PyFloat_FromDouble( ptr->randlife );
+static PyObject *Part_getEnd( BPy_PartSys * self )
+{
+ return PyFloat_FromDouble( (long)( self->psys->part->end ) );
}
+static int Part_setEditable( BPy_PartSys * self, PyObject * args )
+{
+ int number;
+
+ if( !PyInt_Check( args ) ) {
+ char errstr[128];
+ sprintf ( errstr, "expected int argument" );
+ return EXPP_ReturnIntError( PyExc_TypeError, errstr );
+ }
+
+ number = PyInt_AS_LONG( args );
+ if(!number){
+ if(self->psys->edit)
+ PE_free_particle_edit(self->psys);
-PyObject *Particle_setRandlife( BPy_Particle * self, PyObject * args )
+ self->psys->flag &= ~PSYS_EDITED;
+ self->psys->recalc |= PSYS_RECALC_HAIR;
+
+ DAG_object_flush_update(G.scene, self->object, OB_RECALC_DATA);
+ }
+ else
+ {
+ self->psys->flag |= PSYS_EDITED;
+ if(G.f & G_PARTICLEEDIT)
+ PE_create_particle_edit(self->object, self->psys);
+ }
+
+ return 0;
+}
+
+static PyObject *Part_getEditable( BPy_PartSys * self )
{
- PartEff *ptr = ( PartEff * ) self->particle;
- float val = 0;
- if( !PyArg_ParseTuple( args, "f", &val ) )
- return ( EXPP_ReturnPyObjError( PyExc_AttributeError,
- "expected float argument" ) );
- ptr->randlife = val;
- Py_INCREF( Py_None );
- return Py_None;
+ return PyInt_FromLong( ((long)( self->psys->flag & PSYS_EDITED )) > 0 );
}
+static int Part_setAmount( BPy_PartSys * self, PyObject * args )
+{
+ int res = EXPP_setIValueRange( args, &self->psys->part->totpart,
+ 0, 100000, 'i' );
+ psys_flush_settings( self->psys->part, PSYS_ALLOC, 1 );
-PyObject *Particle_getNabla( BPy_Particle * self )
-{
+ return res;
+}
- PartEff *ptr = ( PartEff * ) self->particle;
- return PyFloat_FromDouble( ptr->nabla );
+static PyObject *Part_getAmount( BPy_PartSys * self )
+{
+ return PyInt_FromLong( ((int)( self->psys->part->totpart )) );
}
+static int Part_setMultiReact( BPy_PartSys * self, PyObject * args )
+{
+ int number;
+
+ if( !PyInt_Check( args ) ) {
+ char errstr[128];
+ sprintf ( errstr, "expected int argument" );
+ return EXPP_ReturnIntError( PyExc_TypeError, errstr );
+ }
+
+ number = PyInt_AS_LONG( args );
+
+
+ if (number){
+ self->psys->part->flag |= PART_REACT_MULTIPLE;
+ }else{
+ self->psys->part->flag &= ~PART_REACT_MULTIPLE;
+ }
+
+ Particle_Recalc(self,1);
+ return 0;
+}
-PyObject *Particle_setNabla( BPy_Particle * self, PyObject * args )
+static PyObject *Part_getMultiReact( BPy_PartSys * self )
{
- PartEff *ptr = ( PartEff * ) self->particle;
- float val = 0;
- if( !PyArg_ParseTuple( args, "f", &val ) )
- return ( EXPP_ReturnPyObjError( PyExc_AttributeError,
- "expected float argument" ) );
- ptr->nabla = val;
- Py_INCREF( Py_None );
- return Py_None;
+ return PyInt_FromLong( ((long)( self->psys->part->flag & PART_REACT_MULTIPLE )) > 0 );
}
+static int Part_setReactShape( BPy_PartSys * self, PyObject * args )
+{
+ int res = EXPP_setFloatRange( args, &self->psys->part->reactshape,
+ 0.0f, 10.0f );
+ Particle_Recalc(self,1);
-PyObject *Particle_getVectsize( BPy_Particle * self )
-{
+ return res;
+}
- PartEff *ptr = ( PartEff * ) self->particle;
- return PyFloat_FromDouble( ptr->vectsize );
+static PyObject *Part_getReactShape( BPy_PartSys * self )
+{
+ return PyFloat_FromDouble( ((double)( self->psys->part->reactshape )) );
}
+static int Part_setSegments( BPy_PartSys * self, PyObject * args )
+{
+ int res = EXPP_setIValueRange( args, &self->psys->part->hair_step,
+ 2, 50, 'h' );
+ Particle_Recalc(self,1);
-PyObject *Particle_setVectsize( BPy_Particle * self, PyObject * args )
-{
- PartEff *ptr = ( PartEff * ) self->particle;
- float val = 0;
- if( !PyArg_ParseTuple( args, "f", &val ) )
- return ( EXPP_ReturnPyObjError( PyExc_AttributeError,
- "expected float argument" ) );
- ptr->vectsize = val;
- Py_INCREF( Py_None );
- return Py_None;
+ return res;
}
+static PyObject *Part_getSegments( BPy_PartSys * self )
+{
+ return PyInt_FromLong( ((long)( self->psys->part->hair_step )) );
+}
-PyObject *Particle_getTotpart( BPy_Particle * self )
+static int Part_setLife( BPy_PartSys * self, PyObject * args )
{
+ int res = EXPP_setFloatRange( args, &self->psys->part->lifetime,
+ 1.0f, MAXFRAMEF );
- PartEff *ptr = ( PartEff * ) self->particle;
- return PyInt_FromLong( ptr->totpart );
-}
+ Particle_Recalc(self,1);
+ return res;
+}
+static PyObject *Part_getLife( BPy_PartSys * self )
+{
+ return PyFloat_FromDouble( ((double)( self->psys->part->lifetime )) );
+}
-PyObject *Particle_setTotpart( BPy_Particle * self, PyObject * args )
+static int Part_setRandLife( BPy_PartSys * self, PyObject * args )
{
- int val = 0;
- PartEff *ptr = ( PartEff * ) self->particle;
- if( !PyArg_ParseTuple( args, "i", &val ) )
- return ( EXPP_ReturnPyObjError( PyExc_AttributeError,
- "expected int argument" ) );
- ptr->totpart = val;
- Py_INCREF( Py_None );
- return Py_None;
+ int res = EXPP_setFloatRange( args, &self->psys->part->randlife,
+ 0.0f, 2.0f );
+
+ Particle_Recalc(self,1);
+
+ return res;
}
+static PyObject *Part_getRandLife( BPy_PartSys * self )
+{
+ return PyFloat_FromDouble( ((double)( self->psys->part->randlife )) );
+}
-PyObject *Particle_getTotkey( BPy_Particle * self )
+static int Part_set2d( BPy_PartSys * self, PyObject * args )
{
+ int number;
+
+ if( !PyInt_Check( args ) ) {
+ char errstr[128];
+ sprintf ( errstr, "expected int argument" );
+ return EXPP_ReturnIntError( PyExc_TypeError, errstr );
+ }
- PartEff *ptr = ( PartEff * ) self->particle;
- return PyInt_FromLong( ptr->totkey );
+ number = PyInt_AS_LONG( args );
+
+ if (number){
+ self->psys->part->flag |= PART_BOIDS_2D;
+ }else{
+ self->psys->part->flag &= ~PART_BOIDS_2D;
+ }
+
+ Particle_Recalc(self,1);
+
+ return 0;
}
+static PyObject *Part_get2d( BPy_PartSys * self )
+{
+ return PyInt_FromLong( ((long)( self->psys->part->flag & PART_BOIDS_2D )) > 0 );
+}
+
+static int Part_setMaxVel( BPy_PartSys * self, PyObject * args )
+{
+ int res = EXPP_setFloatRange( args, &self->psys->part->max_vel,
+ 0.0f, 200.0f );
+
+ Particle_Recalc(self,1);
+ return res;
+}
-PyObject *Particle_setTotkey( BPy_Particle * self, PyObject * args )
+static PyObject *Part_getMaxVel( BPy_PartSys * self )
{
- PartEff *ptr = ( PartEff * ) self->particle;
- int val = 0;
- if( !PyArg_ParseTuple( args, "i", &val ) )
- return ( EXPP_ReturnPyObjError( PyExc_AttributeError,
- "expected int argument" ) );
- ptr->totkey = val;
- Py_INCREF( Py_None );
- return Py_None;
+ return PyFloat_FromDouble( ((double)( self->psys->part->max_vel )) );
}
+static int Part_setAvVel( BPy_PartSys * self, PyObject * args )
+{
+ int res = EXPP_setFloatRange( args, &self->psys->part->average_vel,
+ 0.0f, 1.0f );
+
+ Particle_Recalc(self,1);
+
+ return res;
+}
+static PyObject *Part_getAvVel( BPy_PartSys * self )
+{
+ return PyFloat_FromDouble( ((double)( self->psys->part->average_vel )) );
+}
-PyObject *Particle_getSeed( BPy_Particle * self )
+static int Part_setLatAcc( BPy_PartSys * self, PyObject * args )
{
+ int res = EXPP_setFloatRange( args, &self->psys->part->max_lat_acc,
+ 0.0f, 1.0f );
+
+ Particle_Recalc(self,1);
- PartEff *ptr = ( PartEff * ) self->particle;
- return PyInt_FromLong( ptr->seed );
+ return res;
}
+static PyObject *Part_getLatAcc( BPy_PartSys * self )
+{
+ return PyFloat_FromDouble( ((double)( self->psys->part->max_lat_acc )) );
+}
+static int Part_setMaxTan( BPy_PartSys * self, PyObject * args )
+{
+ int res = EXPP_setFloatRange( args, &self->psys->part->max_tan_acc,
+ 0.0f, 1.0f );
+
+ Particle_Recalc(self,1);
-PyObject *Particle_setSeed( BPy_Particle * self, PyObject * args )
+ return res;
+}
+
+static PyObject *Part_getMaxTan( BPy_PartSys * self )
{
- PartEff *ptr = ( PartEff * ) self->particle;
- int val = 0;
- if( !PyArg_ParseTuple( args, "i", &val ) )
- return ( EXPP_ReturnPyObjError( PyExc_AttributeError,
- "expected int argument" ) );
- ptr->seed = val;
- Py_INCREF( Py_None );
- return Py_None;
+ return PyFloat_FromDouble( ((double)( self->psys->part->max_tan_acc )) );
}
-PyObject *Particle_getForce( BPy_Particle * self )
+static int Part_setGroundZ( BPy_PartSys * self, PyObject * args )
{
+ int res = EXPP_setFloatRange( args, &self->psys->part->groundz,
+ -100.0f, 100.0f );
+
+ Particle_Recalc(self,1);
- PartEff *ptr = ( PartEff * ) self->particle;
- return Py_BuildValue( "(f,f,f)", ptr->force[0], ptr->force[1],
- ptr->force[2] );
+ return res;
}
+static PyObject *Part_getGroundZ( BPy_PartSys * self )
+{
+ return PyFloat_FromDouble( ((double)( self->psys->part->groundz )) );
+}
-PyObject *Particle_setForce( BPy_Particle * self, PyObject * args )
+static int Part_setOb( BPy_PartSys * self, PyObject * args )
{
- PartEff *ptr = ( PartEff * ) self->particle;
- float val[3];
- if( PyTuple_Size( args ) == 1 )
- args = PyTuple_GetItem( args, 0 );
- val[0] = (float)PyFloat_AsDouble( PyTuple_GetItem( args, 0 ) );
- val[1] = (float)PyFloat_AsDouble( PyTuple_GetItem( args, 1 ) );
- val[2] = (float)PyFloat_AsDouble( PyTuple_GetItem( args, 2 ) );
- /*
- if (!PyArg_ParseTuple(args, "fff", val,val+1,val+2 ))
- return(EXPP_ReturnPyObjError(PyExc_AttributeError,\
- "expected three float arguments"));
- */
- ptr->force[0] = val[0];
- ptr->force[1] = val[1];
- ptr->force[2] = val[2];
- Py_INCREF( Py_None );
- return Py_None;
+ Object *obj;
+ if( !BPy_Object_Check( args ) ) {
+ char errstr[128];
+ sprintf ( errstr, "expected object argument" );
+ return EXPP_ReturnIntError( PyExc_TypeError, errstr );
+ }
+
+ obj = Object_FromPyObject(args);
+
+ self->psys->keyed_ob = obj;
+
+ return 0;
}
-PyObject *Particle_getMult( BPy_Particle * self )
+static PyObject *Part_getOb( BPy_PartSys * self )
{
+ Object * obj;
+ obj = self->psys->keyed_ob;
+ if (!obj)
+ Py_RETURN_NONE;
- PartEff *ptr = ( PartEff * ) self->particle;
- return Py_BuildValue( "(f,f,f,f)",
- ptr->mult[0], ptr->mult[1], ptr->mult[2],
- ptr->mult[3] );
+ return Object_CreatePyObject( obj );
}
+static int Part_setRandEmission( BPy_PartSys * self, PyObject * args )
+{
+ int number;
+
+ if( !PyInt_Check( args ) ) {
+ char errstr[128];
+ sprintf ( errstr, "expected int argument" );
+ return EXPP_ReturnIntError( PyExc_TypeError, errstr );
+ }
+
+ number = PyInt_AS_LONG( args );
+
+ if (number){
+ self->psys->part->flag |= PART_TRAND;
+ }else{
+ self->psys->part->flag &= ~PART_TRAND;
+ }
-PyObject *Particle_setMult( BPy_Particle * self, PyObject * args )
+ Particle_RecalcPsys_distr(self,1);
+
+ return 0;
+}
+
+static PyObject *Part_getRandEmission( BPy_PartSys * self )
{
- PartEff *ptr = ( PartEff * ) self->particle;
- float val[4];
- if( PyTuple_Size( args ) == 1 )
- args = PyTuple_GetItem( args, 0 );
- val[0] = (float)PyFloat_AsDouble( PyTuple_GetItem( args, 0 ) );
- val[1] = (float)PyFloat_AsDouble( PyTuple_GetItem( args, 1 ) );
- val[2] = (float)PyFloat_AsDouble( PyTuple_GetItem( args, 2 ) );
- val[3] = (float)PyFloat_AsDouble( PyTuple_GetItem( args, 3 ) );
- ptr->mult[0] = val[0];
- ptr->mult[1] = val[1];
- ptr->mult[2] = val[2];
- ptr->mult[3] = val[3];
- Py_INCREF( Py_None );
- return Py_None;
+ return PyInt_FromLong( ((long)( self->psys->part->flag & PART_BOIDS_2D )) > 0 );
}
+static int Part_setParticleDist( BPy_PartSys * self, PyObject * args )
+{
+ int number;
+ char errstr[128];
+ if( !PyInt_Check( args ) ) {
+ sprintf ( errstr, "expected int argument" );
+ return EXPP_ReturnIntError( PyExc_TypeError, errstr );
+ }
+ number = PyInt_AS_LONG( args );
-PyObject *Particle_getLife( BPy_Particle * self )
-{
+ if (number < 0 || number > 3){
+ sprintf ( errstr, "expected int argument between 0 - 3" );
+ return EXPP_ReturnIntError( PyExc_TypeError, errstr );
+ }
- PartEff *ptr = ( PartEff * ) self->particle;
- return Py_BuildValue( "(f,f,f,f)",
- ptr->life[0], ptr->life[1], ptr->life[2],
- ptr->life[3] );
-}
+ self->psys->part->from = number;
+
+ Particle_RecalcPsys_distr(self,1);
+ return 0;
+}
-PyObject *Particle_setLife( BPy_Particle * self, PyObject * args )
+static PyObject *Part_getParticleDist( BPy_PartSys * self )
{
- PartEff *ptr = ( PartEff * ) self->particle;
- float val[4];
- if( PyTuple_Size( args ) == 1 )
- args = PyTuple_GetItem( args, 0 );
- val[0] = (float)PyFloat_AsDouble( PyTuple_GetItem( args, 0 ) );
- val[1] = (float)PyFloat_AsDouble( PyTuple_GetItem( args, 1 ) );
- val[2] = (float)PyFloat_AsDouble( PyTuple_GetItem( args, 2 ) );
- val[3] = (float)PyFloat_AsDouble( PyTuple_GetItem( args, 3 ) );
- ptr->life[0] = val[0];
- ptr->life[1] = val[1];
- ptr->life[2] = val[2];
- ptr->life[3] = val[3];
- Py_INCREF( Py_None );
- return Py_None;
+ return PyInt_FromLong( (long)( self->psys->part->from ) );
}
+static int Part_setEvenDist( BPy_PartSys * self, PyObject * args )
+{
+ int number;
+
+ if( !PyInt_Check( args ) ) {
+ char errstr[128];
+ sprintf ( errstr, "expected int argument" );
+ return EXPP_ReturnIntError( PyExc_TypeError, errstr );
+ }
+
+ number = PyInt_AS_LONG( args );
+
+ if (number){
+ self->psys->part->flag |= PART_EDISTR;
+ }else{
+ self->psys->part->flag &= ~PART_EDISTR;
+ }
+
+ Particle_RecalcPsys_distr(self,1);
+
+ return 0;
+}
+static PyObject *Part_getEvenDist( BPy_PartSys * self )
+{
+ return PyInt_FromLong( ((long)( self->psys->part->flag & PART_EDISTR )) > 0 );
+}
-PyObject *Particle_getChild( BPy_Particle * self )
+static int Part_setDist( BPy_PartSys * self, PyObject * args )
{
+ int number;
+ char errstr[128];
+
+ if( !PyInt_Check( args ) ) {
+ sprintf ( errstr, "expected int argument" );
+ return EXPP_ReturnIntError( PyExc_TypeError, errstr );
+ }
+
+ number = PyInt_AS_LONG( args );
+
+ if (number < 0 || number > 2){
+ sprintf ( errstr, "expected int argument between 0 - 2" );
+ return EXPP_ReturnIntError( PyExc_TypeError, errstr );
+ }
+
+ self->psys->part->distr = number;
+
+ Particle_RecalcPsys_distr(self,1);
- PartEff *ptr = ( PartEff * ) self->particle;
- return Py_BuildValue( "(f,f,f,f)",
- ptr->child[0], ptr->child[1], ptr->child[2],
- ptr->child[3] );
+ return 0;
}
+static PyObject *Part_getDist( BPy_PartSys * self )
+{
+ return PyInt_FromLong( (long)( self->psys->part->distr ) );
+}
+
+static int Part_setJitterAmount( BPy_PartSys * self, PyObject * args )
+{
+ int res = EXPP_setFloatRange( args, &self->psys->part->jitfac,
+ 0.0f, 2.0f );
+
+ Particle_RecalcPsys_distr(self,1);
+
+ return res;
+}
-PyObject *Particle_setChild( BPy_Particle * self, PyObject * args )
+static PyObject *Part_getJitterAmount( BPy_PartSys * self )
{
- PartEff *ptr = ( PartEff * ) self->particle;
- float val[4];
- if( PyTuple_Size( args ) == 1 )
- args = PyTuple_GetItem( args, 0 );
- val[0] = (float)PyFloat_AsDouble( PyTuple_GetItem( args, 0 ) );
- val[1] = (float)PyFloat_AsDouble( PyTuple_GetItem( args, 1 ) );
- val[2] = (float)PyFloat_AsDouble( PyTuple_GetItem( args, 2 ) );
- val[3] = (float)PyFloat_AsDouble( PyTuple_GetItem( args, 3 ) );
- ptr->child[0] = (short)val[0];
- ptr->child[1] = (short)val[1];
- ptr->child[2] = (short)val[2];
- ptr->child[3] = (short)val[3];
- Py_INCREF( Py_None );
- return Py_None;
+ return PyFloat_FromDouble( ((double)( self->psys->part->jitfac )) );
}
-PyObject *Particle_getMat( BPy_Particle * self )
+static int Part_setPF( BPy_PartSys * self, PyObject * args )
{
+ int res = EXPP_setIValueRange( args, &self->psys->part->userjit,
+ 0, 1000, 'i' );
- PartEff *ptr = ( PartEff * ) self->particle;
- return Py_BuildValue( "(f,f,f,f)",
- ptr->mat[0], ptr->mat[1], ptr->mat[2],
- ptr->mat[3] );
+ Particle_RecalcPsys_distr(self,1);
+
+ return res;
}
+static PyObject *Part_getPF( BPy_PartSys * self )
+{
+ return PyInt_FromLong( ((short)( self->psys->part->userjit )) );
+}
-PyObject *Particle_setMat( BPy_Particle * self, PyObject * args )
+static int Part_setInvert( BPy_PartSys * self, PyObject * args )
{
- PartEff *ptr = ( PartEff * ) self->particle;
- float val[4];
- if( PyTuple_Size( args ) == 1 )
- args = PyTuple_GetItem( args, 0 );
- val[0] = (float)PyFloat_AsDouble( PyTuple_GetItem( args, 0 ) );
- val[1] = (float)PyFloat_AsDouble( PyTuple_GetItem( args, 1 ) );
- val[2] = (float)PyFloat_AsDouble( PyTuple_GetItem( args, 2 ) );
- val[3] = (float)PyFloat_AsDouble( PyTuple_GetItem( args, 3 ) );
- ptr->mat[0] = (short)val[0];
- ptr->mat[1] = (short)val[1];
- ptr->mat[2] = (short)val[2];
- ptr->mat[3] = (short)val[3];
- Py_INCREF( Py_None );
- return Py_None;
+ int number;
+
+ if( !PyInt_Check( args ) ) {
+ char errstr[128];
+ sprintf ( errstr, "expected int argument" );
+ return EXPP_ReturnIntError( PyExc_TypeError, errstr );
+ }
+
+ number = PyInt_AS_LONG( args );
+
+ if (number){
+ self->psys->part->flag |= PART_GRID_INVERT;
+ }else{
+ self->psys->part->flag &= ~PART_GRID_INVERT;
+ }
+
+ Particle_RecalcPsys_distr(self,1);
+
+ return 0;
}
+static PyObject *Part_getInvert( BPy_PartSys * self )
+{
+ return PyInt_FromLong( ((long)( self->psys->part->flag & PART_GRID_INVERT )) > 0 );
+}
-PyObject *Particle_getDefvec( BPy_Particle * self )
+static int Part_setTargetOb( BPy_PartSys * self, PyObject * args )
{
+ Object *obj;
+ if( !BPy_Object_Check( args ) ) {
+ char errstr[128];
+ sprintf ( errstr, "expected object argument" );
+ return EXPP_ReturnIntError( PyExc_TypeError, errstr );
+ }
- PartEff *ptr = ( PartEff * ) self->particle;
- return Py_BuildValue( "(f,f,f)",
- ptr->defvec[0], ptr->defvec[1], ptr->defvec[2] );
-}
+ obj = Object_FromPyObject(args);
+ self->psys->target_ob = obj;
+
+ return 0;
+}
-PyObject *Particle_setDefvec( BPy_Particle * self, PyObject * args )
+static PyObject *Part_getTargetOb( BPy_PartSys * self )
{
- PartEff *ptr = ( PartEff * ) self->particle;
- float val[3];
- if( PyTuple_Size( args ) == 1 )
- args = PyTuple_GetItem( args, 0 );
- val[0] = (float)PyFloat_AsDouble( PyTuple_GetItem( args, 0 ) );
- val[1] = (float)PyFloat_AsDouble( PyTuple_GetItem( args, 1 ) );
- val[2] = (float)PyFloat_AsDouble( PyTuple_GetItem( args, 2 ) );
- ptr->defvec[0] = val[0];
- ptr->defvec[1] = val[1];
- ptr->defvec[2] = val[2];
- Py_INCREF( Py_None );
- return Py_None;
+ Object * obj;
+ obj = self->psys->target_ob;
+ if (!obj)
+ Py_RETURN_NONE;
+
+ return Object_CreatePyObject( obj );
}
-/*****************************************************************************/
-/* Function: ParticleDeAlloc */
-/* Description: This is a callback function for the BPy_Particle type. It is */
-/* the destructor function. */
-/*****************************************************************************/
-void ParticleDeAlloc( BPy_Particle * self )
+
+PyObject *Part_getDupOb( BPy_PartSys * self )
{
- PartEff *ptr = ( PartEff * ) self;
- PyObject_DEL( ptr );
+ Object * obj;
+ obj = self->psys->part->dup_ob;
+ if (!obj)
+ Py_RETURN_NONE;
+
+ return Object_CreatePyObject( obj );
}
-/*****************************************************************************/
-/* Function: ParticleGetAttr */
-/* Description: This is a callback function for the BPy_Particle type. It is */
-/* the function that accesses BPy_Particle "member variables" */
-/* and methods. */
-/*****************************************************************************/
+static int Part_setTargetPsys( BPy_PartSys * self, PyObject * args ){
+ int tottpsys;
+ int res;
+ Object *tob=0;
+ ParticleSystem *psys = self->psys;
+ Object *ob;
+
+ ob = self->object;
+
+ if(psys->target_ob)
+ tob=psys->target_ob;
+ else
+ tob=ob;
+
+ tottpsys = BLI_countlist(&tob->particlesystem);
+
+ res = EXPP_setIValueRange( args, &self->psys->target_psys, 0, tottpsys, 'h' );
+
+ if((psys=psys_get_current(ob))){
+ if(psys->keyed_ob==ob || psys->target_ob==ob){
+ if(psys->keyed_ob==ob)
+ psys->keyed_ob=NULL;
+ else
+ psys->target_ob=NULL;
+ }
+ else{
+ DAG_scene_sort(G.scene);
+ DAG_object_flush_update(G.scene, ob, OB_RECALC_DATA);
+ }
+ }
+ return res;
+}
-PyObject *ParticleGetAttr( BPy_Particle * self, char *name )
-{
-
- if( strcmp( name, "seed" ) == 0 )
- return Particle_getSeed( self );
- else if( strcmp( name, "nabla" ) == 0 )
- return Particle_getNabla( self );
- else if( strcmp( name, "sta" ) == 0 )
- return Particle_getSta( self );
- else if( strcmp( name, "end" ) == 0 )
- return Particle_getEnd( self );
- else if( strcmp( name, "lifetime" ) == 0 )
- return Particle_getLifetime( self );
- else if( strcmp( name, "normfac" ) == 0 )
- return Particle_getNormfac( self );
- else if( strcmp( name, "obfac" ) == 0 )
- return Particle_getObfac( self );
- else if( strcmp( name, "randfac" ) == 0 )
- return Particle_getRandfac( self );
- else if( strcmp( name, "texfac" ) == 0 )
- return Particle_getTexfac( self );
- else if( strcmp( name, "randlife" ) == 0 )
- return Particle_getRandlife( self );
- else if( strcmp( name, "vectsize" ) == 0 )
- return Particle_getVectsize( self );
- else if( strcmp( name, "totpart" ) == 0 )
- return Particle_getTotpart( self );
- else if( strcmp( name, "force" ) == 0 )
- return Particle_getForce( self );
- else if( strcmp( name, "mult" ) == 0 )
- return Particle_getMult( self );
- else if( strcmp( name, "life" ) == 0 )
- return Particle_getLife( self );
- else if( strcmp( name, "child" ) == 0 )
- return Particle_getChild( self );
- else if( strcmp( name, "mat" ) == 0 )
- return Particle_getMat( self );
- else if( strcmp( name, "defvec" ) == 0 )
- return Particle_getDefvec( self );
-
-
- return Py_FindMethod( BPy_Particle_methods, ( PyObject * ) self,
- name );
+static PyObject *Part_getTargetPsys( BPy_PartSys * self ){
+ return PyInt_FromLong( (short)( self->psys->target_psys ) );
}
-/*****************************************************************************/
-/* Function: ParticleSetAttr */
-/* Description: This is a callback function for the BPy_Particle type. */
-/* It is the function that sets Particle Data attributes */
-/* (member vars) */
-/*****************************************************************************/
-int ParticleSetAttr( BPy_Particle * self, char *name, PyObject * value )
-{
-
- PyObject *valtuple;
- PyObject *error = NULL;
-
- valtuple = Py_BuildValue( "(N)", value );
-
- if( !valtuple )
- return EXPP_ReturnIntError( PyExc_MemoryError,
- "ParticleSetAttr: couldn't create PyTuple" );
-
- if( strcmp( name, "seed" ) == 0 )
- error = Particle_setSeed( self, valtuple );
- else if( strcmp( name, "nabla" ) == 0 )
- error = Particle_setNabla( self, valtuple );
- else if( strcmp( name, "sta" ) == 0 )
- error = Particle_setSta( self, valtuple );
- else if( strcmp( name, "end" ) == 0 )
- error = Particle_setEnd( self, valtuple );
- else if( strcmp( name, "lifetime" ) == 0 )
- error = Particle_setLifetime( self, valtuple );
- else if( strcmp( name, "normfac" ) == 0 )
- error = Particle_setNormfac( self, valtuple );
- else if( strcmp( name, "obfac" ) == 0 )
- error = Particle_setObfac( self, valtuple );
- else if( strcmp( name, "randfac" ) == 0 )
- error = Particle_setRandfac( self, valtuple );
- else if( strcmp( name, "texfac" ) == 0 )
- error = Particle_setTexfac( self, valtuple );
- else if( strcmp( name, "randlife" ) == 0 )
- error = Particle_setRandlife( self, valtuple );
- else if( strcmp( name, "nabla" ) == 0 )
- error = Particle_setNabla( self, valtuple );
- else if( strcmp( name, "vectsize" ) == 0 )
- error = Particle_setVectsize( self, valtuple );
- else if( strcmp( name, "totpart" ) == 0 )
- error = Particle_setTotpart( self, valtuple );
- else if( strcmp( name, "seed" ) == 0 )
- error = Particle_setSeed( self, valtuple );
- else if( strcmp( name, "force" ) == 0 )
- error = Particle_setForce( self, valtuple );
- else if( strcmp( name, "mult" ) == 0 )
- error = Particle_setMult( self, valtuple );
- else if( strcmp( name, "life" ) == 0 )
- error = Particle_setLife( self, valtuple );
- else if( strcmp( name, "child" ) == 0 )
- error = Particle_setChild( self, valtuple );
- else if( strcmp( name, "mat" ) == 0 )
- error = Particle_setMat( self, valtuple );
- else if( strcmp( name, "defvec" ) == 0 )
- error = Particle_setDefvec( self, valtuple );
-
- else {
- Py_DECREF( valtuple );
-
- if( ( strcmp( name, "Types" ) == 0 ) ||
- ( strcmp( name, "Modes" ) == 0 ) )
- return ( EXPP_ReturnIntError( PyExc_AttributeError,
- "constant dictionary -- cannot be changed" ) );
-
- else
- return ( EXPP_ReturnIntError( PyExc_KeyError,
- "attribute not found" ) );
- }
-
- Py_DECREF(valtuple);
- if( error != Py_None )
- return -1;
-
- Py_DECREF( Py_None );
+static int Part_setRenderObject( BPy_PartSys * self, PyObject * args )
+{
+ int number,nr;
+ ParticleSystem *psys = 0L;
+
+ if( !PyInt_Check( args ) ) {
+ char errstr[128];
+ sprintf ( errstr, "expected int argument" );
+ return EXPP_ReturnIntError( PyExc_TypeError, errstr );
+ }
+
+ number = PyInt_AS_LONG( args );
+
+ if (number){
+ self->psys->part->draw |= PART_DRAW_EMITTER;
+ }else{
+ self->psys->part->draw &= ~PART_DRAW_EMITTER;
+ }
+
+ /* check need for dupliobjects */
+ nr=0;
+ for(psys=self->object->particlesystem.first; psys; psys=psys->next){
+ if(ELEM(psys->part->draw_as,PART_DRAW_OB,PART_DRAW_GR))
+ nr++;
+ }
+ if(nr)
+ self->object->transflag |= OB_DUPLIPARTS;
+ else
+ self->object->transflag &= ~OB_DUPLIPARTS;
+
return 0;
}
-/*****************************************************************************/
-/* Function: ParticlePrint */
-/* Description: This is a callback function for the BPy_Particle type. It */
-/* particles a meaninful string to 'print' particle objects. */
-/*****************************************************************************/
-/*
-int ParticlePrint(BPy_Particle *self, FILE *fp, int flags)
-{
- printf("Hi, I'm a particle!");
- return 0;
-}
-*/
-/*****************************************************************************/
-/* Function: ParticleRepr */
-/* Description: This is a callback function for the BPy_Particle type. It */
-/* particles a meaninful string to represent particle objects. */
-/*****************************************************************************/
-PyObject *ParticleRepr( void )
+static PyObject *Part_getRenderObject( BPy_PartSys * self )
{
- return PyString_FromString( "Particle" );
+ return PyInt_FromLong( ((long)( self->psys->part->draw & PART_DRAW_EMITTER )) > 0 );
}
-PyObject *ParticleCreatePyObject( struct Effect * particle )
+static int Part_setParticleDisp( BPy_PartSys * self, PyObject * args )
{
- BPy_Particle *blen_object;
+ int res = EXPP_setIValueRange( args, &self->psys->part->disp,
+ 0, 100, 'i' );
+ Particle_Recalc(self,0);
- blen_object =
- ( BPy_Particle * ) PyObject_NEW( BPy_Particle,
- &Particle_Type );
- if( blen_object == NULL ) {
- return ( NULL );
- }
- blen_object->particle = particle;
- return ( ( PyObject * ) blen_object );
+ return res;
+}
+static PyObject *Part_getParticleDisp( BPy_PartSys * self )
+{
+ return PyInt_FromLong( ((short)( self->psys->part->disp )) );
}
-int ParticleCheckPyObject( PyObject * py_obj )
+static int Part_setStep( BPy_PartSys * self, PyObject * args )
{
- return ( py_obj->ob_type == &Particle_Type );
+ int res = EXPP_setIValueRange( args, &self->psys->part->draw_step,
+ 0, 7, 'i' );
+
+ Particle_Recalc(self,1);
+
+
+ return res;
}
+static PyObject *Part_getStep( BPy_PartSys * self )
+{
+ return PyInt_FromLong( ((short)( self->psys->part->draw_step )) );
+}
-struct Particle *ParticleFromPyObject( PyObject * py_obj )
+static int Part_setRenderStep( BPy_PartSys * self, PyObject * args )
{
- BPy_Particle *blen_obj;
+ int res = EXPP_setIValueRange( args, &self->psys->part->ren_step,
+ 0, 7, 'i' );
+
+ /*Particle_Recalc(self,1);*/
- blen_obj = ( BPy_Particle * ) py_obj;
- return ( ( struct Particle * ) blen_obj->particle );
+ return res;
+}
+
+static PyObject *Part_getRenderStep( BPy_PartSys * self )
+{
+ return PyInt_FromLong( ((short)( self->psys->part->ren_step )) );
+}
+
+static PyObject *Part_getDrawAs( BPy_PartSys * self )
+{
+ return PyInt_FromLong( (long)( self->psys->part->draw_as ) );
}
diff --git a/source/blender/python/api2_2x/Particle.h b/source/blender/python/api2_2x/Particle.h
index 13e6fadaaa0..416e3a99bea 100644
--- a/source/blender/python/api2_2x/Particle.h
+++ b/source/blender/python/api2_2x/Particle.h
@@ -22,43 +22,32 @@
*
* This is a new part of Blender.
*
- * Contributor(s): Jacques Guignot
+ * Contributor(s): Jacques Guignot, Cedric Paille
*
* ***** END GPL LICENSE BLOCK *****
- */
+*/
-#ifndef EXPP_PARTICLE_H
-#define EXPP_PARTICLE_H
+#ifndef EXPP_PARTICLESYS_H
+#define EXPP_PARTICLESYS_H
#include <Python.h>
-#include "DNA_effect_types.h"
+#include "DNA_particle_types.h"
+#include "DNA_object_types.h"
-extern PyTypeObject Particle_Type;
+extern PyTypeObject ParticleSys_Type;
-#define BPy_Particle_Check(v) ((v)->ob_type==&Particle_Type)
+#define BPy_ParticleSys_Check(v) \
+ ((v)->ob_type == &ParticleSys_Type) /* for type checking */
-/* Python BPy_Particle structure definition */
+/* Python BPy_Effect structure definition */
typedef struct {
PyObject_HEAD /* required py macro */
- Effect * particle;
-} BPy_Particle;
+ ParticleSystem *psys;
+ Object *object; /* fixeme: if this points back to the parent object,it is wrong */
+} BPy_PartSys;
-#include "Effect.h"
+PyObject *ParticleSys_Init( void );
+PyObject *ParticleSys_CreatePyObject( ParticleSystem * psystem, Object *ob );
-/*****************************************************************************/
-/* Python Particle_Type callback function prototypes: */
-/*****************************************************************************/
-#if 0
-void ParticleDeAlloc( BPy_Particle * msh );
-//int ParticlePrint (BPy_Particle *msh, FILE *fp, int flags);
-int ParticleSetAttr( BPy_Particle * msh, char *name, PyObject * v );
-PyObject *ParticleGetAttr( BPy_Particle * msh, char *name );
-PyObject *ParticleRepr( void );
-PyObject *ParticleCreatePyObject( struct Effect *particle );
-int ParticleCheckPyObject( PyObject * py_obj );
-struct Particle *ParticleFromPyObject( PyObject * py_obj );
-#endif
-
-
-#endif /* EXPP_PARTICLE_H */
+#endif /* EXPP_EFFECT_H */
diff --git a/source/blender/python/api2_2x/doc/API_intro.py b/source/blender/python/api2_2x/doc/API_intro.py
index a630c47229e..ec1d42bce43 100644
--- a/source/blender/python/api2_2x/doc/API_intro.py
+++ b/source/blender/python/api2_2x/doc/API_intro.py
@@ -29,7 +29,7 @@ The Blender Python API Reference
- L{Group} (*)
- L{Image} (*)
- L{Ipo} (*)
- - L{IpoCurve} (*)
+ - L{IpoCurve} (*)
- L{Key} (*)
- L{Lamp}
- L{Lattice} (*)
@@ -46,6 +46,7 @@ The Blender Python API Reference
- L{Pose} (*)
- L{Constraint} (*)
- L{ActionStrips<NLA>} (*)
+ - L{Particle}
- L{Registry}
- L{Scene} (*)
- L{Radio}
diff --git a/source/blender/python/api2_2x/doc/Object.py b/source/blender/python/api2_2x/doc/Object.py
index a3238f2615e..521be3b0cea 100644
--- a/source/blender/python/api2_2x/doc/Object.py
+++ b/source/blender/python/api2_2x/doc/Object.py
@@ -641,7 +641,16 @@ class Object:
@ivar upAxis: Up axis. Return string 'Y' | 'Y' | 'Z' (readonly)
@type upAxis: string
"""
-
+ def getParticleSystems():
+ """
+ Return a list of particle systems linked to this object (see Blender.Particle).
+ """
+
+ def newParticleSystem():
+ """
+ Link a new particle system (see Blender.Particle).
+ """
+
def buildParts():
"""
Recomputes the particle system. This method only applies to an Object of
diff --git a/source/blender/python/api2_2x/doc/Particle.py b/source/blender/python/api2_2x/doc/Particle.py
new file mode 100644
index 00000000000..192ecd5355b
--- /dev/null
+++ b/source/blender/python/api2_2x/doc/Particle.py
@@ -0,0 +1,367 @@
+# Blender.Object module and the Object PyType object
+
+"""
+The Blender.Particle submodule
+
+
+Particle
+========
+
+This module provides access to the B{Particle} in Blender.
+
+@type TYPE: readonly dictionary
+@var TYPE: Constant dict used for with L{Particle.TYPE}
+ - HAIR: set particle system to hair mode.
+ - REACTOR: set particle system to reactor mode.
+ - EMITTER: set particle system to emitter mode.
+@type DISTRIBUTION: readonly dictionary
+@var DISTRIBUTION: Constant dict used for with L{Particle.DISTRIBUTION}
+ - GRID: set grid distribution.
+ - RANDOM: set random distribution.
+ - JITTERED: set jittered distribution.
+@type EMITFROM: readonly dictionary
+@var EMITFROM: Constant dict used for with L{Particle.EMITFROM}
+ - VERTS: set particles emit from vertices
+ - FACES: set particles emit from faces
+ - VOLUME: set particles emit from volume
+ - PARTICLE: set particles emit from particles
+@type REACTON: readonly dictionary
+@var REACTON: Constant dict used for with L{Particle.REACTON}
+ - NEAR: react on near
+ - COLLISION: react on collision
+ - DEATH: react on death
+@type DRAWAS: readonly dictionary
+@var DRAWAS: Constant dict used for with L{Particle.DRAWAS}
+ - NONE: Don't draw
+ - POINT: Draw as point
+ - CIRCLE: Draw as circles
+ - CROSS: Draw as crosses
+ - AXIS: Draw as axis
+ - LINE: Draw as lines
+ - PATH: Draw pathes
+ - OBJECT: Draw object
+ - GROUP: Draw goup
+ - BILLBOARD: Draw as billboard
+"""
+
+class Particle:
+ """
+ The Particle object
+ ===================
+ This object gives access to paticles data.
+
+ @ivar seed: Set an offset in the random table.
+ @type seed: int
+ @ivar type: Type of particle system ( Particle.TYPE[ 'HAIR' | 'REACTOR' | 'EMITTER' ] ).
+ @type type: int
+ @ivar resolutionGrid: The resolution of the particle grid.
+ @type resolutionGrid: int
+ @ivar startFrame: Frame # to start emitting particles.
+ @type startFrame: float
+ @ivar endFrame: Frame # to stop emitting particles.
+ @type endFrame: float
+ @ivar editable: Finalize hair to enable editing in particle mode.
+ @type editable: int
+ @ivar amount: The total number of particles.
+ @type amount: int
+ @ivar multireact: React multiple times ( Paricle.REACTON[ 'NEAR' | 'COLLISION' | 'DEATH' ] ).
+ @type multireact: int
+ @ivar reactshape: Power of reaction strength dependence on distance to target.
+ @type reactshape: float
+ @ivar hairSegments: Amount of hair segments.
+ @type hairSegments: int
+ @ivar lifetime: Specify the life span of the particles.
+ @type lifetime: float
+ @ivar randlife: Give the particle life a random variation.
+ @type randlife: float
+ @ivar randemission: Give the particle life a random variation
+ @type randemission: int
+ @ivar particleDistribution: Where to emit particles from Paricle.EMITFROM[ 'PARTICLE' | 'VOLUME' | 'FACES' | 'VERTS' ] )
+ @type particleDistribution: int
+ @ivar evenDistribution: Use even distribution from faces based on face areas or edge lengths.
+ @type evenDistribution: int
+ @ivar distribution: How to distribute particles on selected element Paricle.DISTRIBUTION[ 'GRID' | 'RANDOM' | 'JITTERED' ] ).
+ @type distribution: int
+ @ivar jitterAmount: Amount of jitter applied to the sampling.
+ @type jitterAmount: float
+ @ivar pf: Emission locations / face (0 = automatic).
+ @type pf:int
+ @ivar invert: Invert what is considered object and what is not.
+ @type invert: int
+ @ivar targetObject: The object that has the target particle system (empty if same object).
+ @type targetObject: Blender object
+ @ivar targetpsys: The target particle system number in the object.
+ @type targetpsys: int
+ @ivar 2d: Constrain boids to a surface.
+ @type 2d: float
+ @ivar maxvel: Maximum velocity.
+ @type maxvel: float
+ @ivar avvel: The usual speed % of max velocity.
+ @type avvel: float
+ @ivar latacc: Lateral acceleration % of max velocity
+ @type latacc: float
+ @ivar tanacc: Tangential acceleration % of max velocity
+ @type tanacc: float
+ @ivar groundz: Default Z value.
+ @type groundz: float
+ @ivar object: Constrain boids to object's surface.
+ @type object: Blender Object
+ @ivar renderEmitter: Render emitter object.
+ @type renderEmitter: int
+ @ivar displayPercentage: Particle display percentage.
+ @type displayPercentage: int
+ @ivar hairDisplayStep: How many steps paths are drawn with (power of 2) in visu mode.
+ @type hairDisplayStep: int
+ @ivar hairRenderStep: How many steps paths are rendered with (power of 2) in render mode."
+ @type hairRenderStep: int
+ @ivar duplicateObject: Get the duplicate object.
+ @type duplicateObject: Blender Object
+ @ivar drawAs: Get draw type Particle.DRAWAS([ 'NONE' | 'OBJECT' | 'POINT' | ... ]).
+ @type drawAs: int
+ """
+
+ def freeEdit():
+ """
+ Free edit mode.
+ @return: None
+ """
+
+ def getLoc(all=0,id=0):
+ """
+ Get the particles locations.
+ A list of tuple is returned in particle mode.
+ A list of list of tuple is returned in hair mode.
+ The tuple is a vector list of 3 or 4 floats in world space (x,y,z, optionnaly the particle's id).
+ @type all: int
+ @param all: if not 0 export all particles (uninitialized (unborn or died)particles exported as None).
+ @type id: int
+ @param id: add the particle id in the end of the vector tuple
+ @rtype: list of vectors (tuple of 3 floats and optionnaly the id) or list of list of vectors
+ @return: list of vectors or list of list of vectors (hair mode)
+ """
+ def getRot(all=0,id=0):
+ """
+ Get the particles rotations as quaternion.
+ A list of tuple is returned in particle mode.
+ The tuple is a vector list of 4 or 5 floats (x,y,z,w, optionnaly the id of the particle).
+
+ @type all: int
+ @param all: if not 0 export all particles (uninitialized (unborn or died) particles exported as None).
+ @type id: int
+ @param id: add the particle id in the return tuple
+ @rtype: list of tuple of 4 or 5 elements (if id is not zero)
+ @return: list of 4-tuples
+ """
+
+ def getMat():
+ """
+ Get the particles material.
+ @rtype: Blender Material
+ @return: The marterial assigned to particles
+ """
+
+ def getSize(all=0,id=0):
+ """
+ Get the particles size.
+ A list of float or list of tuple (particle's size,particle's id).
+ @type all: int
+ @param all: if not 0 export all particles (uninitialized (unborn or died) particles exported as None).
+ @type id: int
+ @param id: add the particle id in the return tuple
+ @rtype: list of floats
+ @return: list of floats or list of tuples if id is not zero (size,id).
+ """
+
+ def getAge(all=0,id=0):
+ """
+ Get the particles age.
+ A list of float or list of tuple (particle's age,particle's id).
+ @type all: int
+ @param all: if not 0 export all particles (uninitialized (unborn or died) particles exported as None).
+ @type id: int
+ @param id: add the particle id in the return tuple
+ @rtype: list of floats
+ @return: list of floats or list of tuples if id is not zero (size,id).
+ """
+# Blender.Object module and the Object PyType object
+
+"""
+The Blender.Particle submodule
+
+
+Particle
+========
+
+This module provides access to the B{Particle} in Blender.
+
+@type TYPE: readonly dictionary
+@var TYPE: Constant dict used for with L{Particle.TYPE}
+ - HAIR: set particle system to hair mode.
+ - REACTOR: set particle system to reactor mode.
+ - EMITTER: set particle system to emitter mode.
+@type DISTRIBUTION: readonly dictionary
+@var DISTRIBUTION: Constant dict used for with L{Particle.DISTRIBUTION}
+ - GRID: set grid distribution.
+ - RANDOM: set random distribution.
+ - JITTERED: set jittered distribution.
+@type EMITFROM: readonly dictionary
+@var EMITFROM: Constant dict used for with L{Particle.EMITFROM}
+ - VERTS: set particles emit from vertices
+ - FACES: set particles emit from faces
+ - VOLUME: set particles emit from volume
+ - PARTICLE: set particles emit from particles
+@type REACTON: readonly dictionary
+@var REACTON: Constant dict used for with L{Particle.REACTON}
+ - NEAR: react on near
+ - COLLISION: react on collision
+ - DEATH: react on death
+@type DRAWAS: readonly dictionary
+@var DRAWAS: Constant dict used for with L{Particle.DRAWAS}
+ - NONE: Don't draw
+ - POINT: Draw as point
+ - CIRCLE: Draw as circles
+ - CROSS: Draw as crosses
+ - AXIS: Draw as axis
+ - LINE: Draw as lines
+ - PATH: Draw pathes
+ - OBJECT: Draw object
+ - GROUP: Draw goup
+ - BILLBOARD: Draw as billboard
+"""
+
+def Get(name):
+ """
+ Get the particle system of the object "name".
+ @type name: string
+ @return: The particle system of the object.
+ """
+def New(name):
+ """
+ Assign a new particle system to the object "name".
+ @type name: string
+ @return: The newly created particle system.
+ """
+
+class Particle:
+ """
+ The Particle object
+ ===================
+ This object gives access to paticles data.
+
+ @ivar seed: Set an offset in the random table.
+ @type seed: int
+ @ivar type: Type of particle system ( Particle.TYPE[ 'HAIR' | 'REACTOR' | 'EMITTER' ] ).
+ @type type: int
+ @ivar resolutionGrid: The resolution of the particle grid.
+ @type resolutionGrid: int
+ @ivar startFrame: Frame # to start emitting particles.
+ @type startFrame: float
+ @ivar endFrame: Frame # to stop emitting particles.
+ @type endFrame: float
+ @ivar editable: Finalize hair to enable editing in particle mode.
+ @type editable: int
+ @ivar amount: The total number of particles.
+ @type amount: int
+ @ivar multireact: React multiple times ( Paricle.REACTON[ 'NEAR' | 'COLLISION' | 'DEATH' ] ).
+ @type multireact: int
+ @ivar reactshape: Power of reaction strength dependence on distance to target.
+ @type reactshape: float
+ @ivar hairSegments: Amount of hair segments.
+ @type hairSegments: int
+ @ivar lifetime: Specify the life span of the particles.
+ @type lifetime: float
+ @ivar randlife: Give the particle life a random variation.
+ @type randlife: float
+ @ivar randemission: Give the particle life a random variation
+ @type randemission: int
+ @ivar particleDistribution: Where to emit particles from Paricle.EMITFROM[ 'PARTICLE' | 'VOLUME' | 'FACES' | 'VERTS' ] )
+ @type particleDistribution: int
+ @ivar evenDistribution: Use even distribution from faces based on face areas or edge lengths.
+ @type evenDistribution: int
+ @ivar distribution: How to distribute particles on selected element Paricle.DISTRIBUTION[ 'GRID' | 'RANDOM' | 'JITTERED' ] ).
+ @type distribution: int
+ @ivar jitterAmount: Amount of jitter applied to the sampling.
+ @type jitterAmount: float
+ @ivar pf: Emission locations / face (0 = automatic).
+ @type pf:int
+ @ivar invert: Invert what is considered object and what is not.
+ @type invert: int
+ @ivar targetObject: The object that has the target particle system (empty if same object).
+ @type targetObject: Blender object
+ @ivar targetpsys: The target particle system number in the object.
+ @type targetpsys: int
+ @ivar 2d: Constrain boids to a surface.
+ @type 2d: float
+ @ivar maxvel: Maximum velocity.
+ @type maxvel: float
+ @ivar avvel: The usual speed % of max velocity.
+ @type avvel: float
+ @ivar latacc: Lateral acceleration % of max velocity
+ @type latacc: float
+ @ivar tanacc: Tangential acceleration % of max velocity
+ @type tanacc: float
+ @ivar groundz: Default Z value.
+ @type groundz: float
+ @ivar object: Constrain boids to object's surface.
+ @type object: Blender Object
+ @ivar renderEmitter: Render emitter object.
+ @type renderEmitter: int
+ @ivar displayPercentage: Particle display percentage.
+ @type displayPercentage: int
+ @ivar hairDisplayStep: How many steps paths are drawn with (power of 2) in visu mode.
+ @type hairDisplayStep: int
+ @ivar hairRenderStep: How many steps paths are rendered with (power of 2) in render mode."
+ @type hairRenderStep: int
+ @ivar duplicateObject: Get the duplicate object.
+ @type duplicateObject: Blender Object
+ @ivar drawAs: Get draw type Particle.DRAWAS([ 'NONE' | 'OBJECT' | 'POINT' | ... ]).
+ @type drawAs: int
+ """
+ def freeEdit():
+ """
+ Free edit mode.
+ @return: None
+ """
+
+ def getLoc(all=0,id=0):
+ """
+ Get the particles locations.
+ A list of tuple is returned in particle mode.
+ A list of list of tuple is returned in hair mode.
+ The tuple is a vector list of 3 floats in world space.
+ @type all: int
+ @param all: if not 0 export all particles (uninitialized (unborn or died)particles exported as None).
+ @type id: int
+ @param id: add the particle id in the end of the vector tuple
+ @rtype: list of vectors (tuple of 3 floats and optionnaly the id) or list of list of vectors
+ @return: list of vectors or list of list of vectors (hair mode)
+ """
+ def getRot(all=0,id=0):
+ """
+ Get the particles rotations as quaternion.
+ A list of tuple is returned in particle mode.
+ The tuple is a vector list of 4 floats (quaternion).
+ @type all: int
+ @param all: if not 0 export all particles (uninitialized (unborn or died) particles exported as None).
+ @type id: int
+ @param id: add the particle id in the return tuple
+ @rtype: list of tuple of 4 or 5 elements (if id is not zero)
+ @return: list of 4-tuples
+ """
+ def getMat():
+ """
+ Get the particles material.
+ @rtype: Blender Material
+ @return: The marterial assigned to particles
+ """
+ def getSize(all=0,id=0):
+ """
+ Get the particles size.
+ A list of float.
+ @type all: int
+ @param all: if not 0 export all particles (uninitialized (unborn or died) particles exported as None).
+ @type id: int
+ @param id: add the particle id in the return tuple
+ @rtype: list of floats
+ @return: list of floats or list of tuples if id is not zero (size,id).
+ """
diff --git a/source/blender/python/api2_2x/doc/epy_docgen-3.sh b/source/blender/python/api2_2x/doc/epy_docgen-3.sh
deleted file mode 100644
index ce2bdfef0f8..00000000000
--- a/source/blender/python/api2_2x/doc/epy_docgen-3.sh
+++ /dev/null
@@ -1,12 +0,0 @@
-# epy_docgen.sh
-# generates blender python doc using epydoc
-# requires epydoc in your PATH.
-# run from the doc directory containing the .py files
-# usage: sh epy_docgen.sh
-
-# set posix locale so regex works properly for [A-Z]*.py
-LC_ALL=POSIX
-
-epydoc -v -o BPY_API --url "http://www.blender.org" --top API_intro \
- --name "Blender" --no-private --no-frames \
-$( ls [A-Z]*.py )
diff --git a/source/blender/python/api2_2x/doc/epy_docgen.sh b/source/blender/python/api2_2x/doc/epy_docgen.sh
index d709ee73190..8cbebf82f8d 100644
--- a/source/blender/python/api2_2x/doc/epy_docgen.sh
+++ b/source/blender/python/api2_2x/doc/epy_docgen.sh
@@ -7,6 +7,5 @@
# set posix locale so regex works properly for [A-Z]*.py
LC_ALL=POSIX
-epydoc -o BPY_API --url "http://www.blender.org" -t API_intro.py \
- -n "Blender" --no-private --no-frames \
-$( ls [A-Z]*.py )
+epydoc -v -o BPY_API --url "http://www.blender.org" --top API_intro \
+ --name "Blender" --no-private --no-frames [A-Z]*.py
diff --git a/source/blender/render/intern/source/imagetexture.c b/source/blender/render/intern/source/imagetexture.c
index 696f6b72849..c2d27f8f3a7 100644
--- a/source/blender/render/intern/source/imagetexture.c
+++ b/source/blender/render/intern/source/imagetexture.c
@@ -616,6 +616,7 @@ void ibuf_sample(ImBuf *ibuf, float fx, float fy, float dx, float dy, float *res
return;
}
+ memset(&texres, 0, sizeof(texres));
boxsample(ibuf, fx, fy, fx+dx, fy+dy, &texres, 0, 1);
result[0]= texres.tr;
result[1]= texres.tg;
diff --git a/source/blender/render/intern/source/shadeoutput.c b/source/blender/render/intern/source/shadeoutput.c
index 9f14db2f425..0928042729a 100644
--- a/source/blender/render/intern/source/shadeoutput.c
+++ b/source/blender/render/intern/source/shadeoutput.c
@@ -477,8 +477,12 @@ static float area_lamp_energy_multisample(LampRen *lar, float *co, float *vn)
float *jitlamp= lar->jitter, vec[3];
float area[4][3], intens= 0.0f;
int a= lar->ray_totsamp;
-
-
+
+ /* test if co is behind lamp */
+ VECSUB(vec, co, lar->co);
+ if(INPR(vec, lar->vec) < 0.0f)
+ return 0.0f;
+
while(a--) {
vec[0]= jitlamp[0];
vec[1]= jitlamp[1];
diff --git a/source/blender/src/buttons_editing.c b/source/blender/src/buttons_editing.c
index 815a9c3869e..4b3f032d30f 100644
--- a/source/blender/src/buttons_editing.c
+++ b/source/blender/src/buttons_editing.c
@@ -1651,6 +1651,12 @@ void modifiers_explodeFacepa(void *arg1, void *arg2)
emd->flag |= eExplodeFlag_CalcFaces;
}
+void modifiers_explodeDelVg(void *arg1, void *arg2)
+{
+ ExplodeModifierData *emd=arg1;
+ emd->vgroup = 0;
+}
+
static int modifier_is_fluid_particles(ModifierData *md) {
if(md->type == eModifierType_ParticleSystem) {
if(((ParticleSystemModifierData *)md)->psys->part->type == PART_FLUID)
@@ -2421,12 +2427,16 @@ static void draw_modifier(uiBlock *block, Object *ob, ModifierData *md, int *xco
char *menustr= get_vertexgroup_menustr(ob);
int defCount=BLI_countlist(&ob->defbase);
if(defCount==0) emd->vgroup=0;
-
- but=uiDefButS(block, MENU, B_MODIFIER_RECALC, menustr, lx, (cy-=19), buttonWidth/2,19, &emd->vgroup, 0, defCount, 0, 0, "Protect this vertex group");
+ uiBlockBeginAlign(block);
+ but=uiDefButS(block, MENU, B_MODIFIER_RECALC, menustr, lx, (cy-=19), buttonWidth-20,19, &emd->vgroup, 0, defCount, 0, 0, "Protect this vertex group");
uiButSetFunc(but,modifiers_explodeFacepa,emd,0);
MEM_freeN(menustr);
+
+ but=uiDefIconBut(block, BUT, B_MODIFIER_RECALC, ICON_X, (lx+buttonWidth)-20, cy, 20,19, 0, 0, 0, 0, 0, "Disable use of vertex group");
+ uiButSetFunc(but, modifiers_explodeDelVg, (void *)emd, (void *)NULL);
+
- but=uiDefButF(block, NUMSLI, B_MODIFIER_RECALC, "", lx+buttonWidth/2, cy, buttonWidth/2,19, &emd->protect, 0.0f, 1.0f, 0, 0, "Clean vertex group edges");
+ but=uiDefButF(block, NUMSLI, B_MODIFIER_RECALC, "", lx, (cy-=19), buttonWidth,19, &emd->protect, 0.0f, 1.0f, 0, 0, "Clean vertex group edges");
uiButSetFunc(but,modifiers_explodeFacepa,emd,0);
but=uiDefBut(block, BUT, B_MODIFIER_RECALC, "Refresh", lx, (cy-=19), buttonWidth/2,19, 0, 0, 0, 0, 0, "Recalculate faces assigned to particles");
@@ -2436,6 +2446,7 @@ static void draw_modifier(uiBlock *block, Object *ob, ModifierData *md, int *xco
uiDefButBitS(block, TOG, eExplodeFlag_Unborn, B_MODIFIER_RECALC, "Unborn", lx, (cy-=19), buttonWidth/3,19, &emd->flag, 0, 0, 0, 0, "Show mesh when particles are unborn");
uiDefButBitS(block, TOG, eExplodeFlag_Alive, B_MODIFIER_RECALC, "Alive", lx+buttonWidth/3, cy, buttonWidth/3,19, &emd->flag, 0, 0, 0, 0, "Show mesh when particles are alive");
uiDefButBitS(block, TOG, eExplodeFlag_Dead, B_MODIFIER_RECALC, "Dead", lx+buttonWidth*2/3, cy, buttonWidth/3,19, &emd->flag, 0, 0, 0, 0, "Show mesh when particles are dead");
+ uiBlockEndAlign(block);
}
uiBlockEndAlign(block);
@@ -5074,6 +5085,10 @@ static void editing_panel_mesh_tools1(Object *ob, Mesh *me)
uiBlockEndAlign(block);
+ uiDefButBitS(block, TOG, B_MESH_X_MIRROR, B_DIFF, "X-axis mirror",1125,0,150,19, &G.scene->toolsettings->editbutflag, 0, 0, 0, 0, "While using transforms, mirrors the transformation");
+
+ uiDefButC(block, MENU, REDRAWBUTSEDIT, "Edge Alt-Select Mode%t|Loop Select%x0|Tag Edges (Seam)%x1|Tag Edges (Sharp)%x2|Tag Edges (Crease)%x3|Tag Edges (Bevel)%x4",1125,88,150,19, &G.scene->toolsettings->edge_mode, 0, 0, 0, 0, "Operation to use when Alt+RMB on edges, Use Alt+Shift+RMB to tag the shortest path from the active edge");
+
uiBlockBeginAlign(block);
uiDefButBitI(block, TOG, G_ALLEDGES, 0, "All Edges", 1125, 22,150,19, &G.f, 0, 0, 0, 0, "Displays all edges in object mode without optimization");
uiDefButBitS(block, TOG, B_MESH_X_MIRROR, B_DIFF, "X-axis mirror",1125,0,150,19, &G.scene->toolsettings->editbutflag, 0, 0, 0, 0, "While using transforms, mirrors the transformation");
diff --git a/source/blender/src/buttons_object.c b/source/blender/src/buttons_object.c
index 4dcc51e03e3..3fd30847768 100644
--- a/source/blender/src/buttons_object.c
+++ b/source/blender/src/buttons_object.c
@@ -2755,7 +2755,7 @@ static void object_panel_draw(Object *ob)
uiSetButLock(object_is_libdata(ob), ERROR_LIBDATA_MESSAGE);
/* LAYERS */
- xco= 80;
+ xco= 65;
dx= 35;
dy= 30;
@@ -2777,7 +2777,10 @@ static void object_panel_draw(Object *ob)
uiBlockEndAlign(block);
/* Object Color */
- uiDefButF(block, COL, REDRAWVIEW3D, "", 270, 165,30, 30, ob->col, 0, 0, 0, 0, "Object color, used when faces have the ObCol mode enabled");
+ uiBlockBeginAlign(block);
+ uiDefButF(block, COL, REDRAWVIEW3D, "", 250, 180, 50, 15, ob->col, 0, 0, 0, 0, "Object color, used when faces have the ObCol mode enabled");
+ uiDefButF(block, NUM, REDRAWVIEW3D, "A:", 250, 165, 50, 15, &ob->col[3], 0.0f, 1.0f, 10, 2, "Object alpha, used when faces have the ObCol mode enabled");
+ uiBlockEndAlign(block);
uiDefBut(block, LABEL, 0, "Drawtype", 10,120,100,20, NULL, 0, 0, 0, 0, "");
@@ -3233,6 +3236,7 @@ static void object_collision__enabletoggle ( void *ob_v, void *arg2 )
{
md = modifier_new ( eModifierType_Collision );
BLI_addtail ( &ob->modifiers, md );
+ DAG_scene_sort(G.scene);
DAG_object_flush_update(G.scene, ob, OB_RECALC_DATA);
allqueue(REDRAWBUTSEDIT, 0);
allqueue(REDRAWVIEW3D, 0);
@@ -3240,8 +3244,10 @@ static void object_collision__enabletoggle ( void *ob_v, void *arg2 )
}
else
{
+ DAG_object_flush_update(G.scene, ob, OB_RECALC_DATA);
BLI_remlink ( &ob->modifiers, md );
modifier_free ( md );
+ DAG_scene_sort(G.scene);
allqueue(REDRAWBUTSEDIT, 0);
}
}
@@ -3447,9 +3453,9 @@ static void object_panel_fields(Object *ob)
uiBlockEndAlign(block);
}
else{
- uiDefButS(block, MENU, B_FIELD_DEP, "Fall-off%t|Cone%x2|Tube%x1|Sphere%x0", 160,180,140,20, &pd->falloff, 0.0, 0.0, 0, 0, tipstr);
+ uiDefButS(block, MENU, B_FIELD_DEP, "Fall-off%t|Cone%x2|Tube%x1|Sphere%x0", 160,180,140,20, &pd->falloff, 0.0, 0.0, 0, 0, "Fall-off shape");
if(pd->falloff==PFIELD_FALL_TUBE)
- uiDefBut(block, LABEL, 0, "Lognitudinal", 160,160,70,20, NULL, 0.0, 0, 0, 0, "");
+ uiDefBut(block, LABEL, 0, "Longitudinal", 160,160,140,20, NULL, 0.0, 0, 0, 0, "");
uiBlockBeginAlign(block);
uiDefButBitS(block, TOG, PFIELD_POSZ, B_FIELD_CHANGE, "Pos", 160,140,40,20, &pd->flag, 0.0, 0, 0, 0, "Effect only in direction of positive Z axis");
uiDefButF(block, NUM, B_FIELD_CHANGE, "Fall-off: ", 200,140,100,20, &pd->f_power, 0, 10, 10, 0, "Falloff power (real gravitational falloff = 2)");
diff --git a/source/blender/src/buttons_scene.c b/source/blender/src/buttons_scene.c
index b295cdd8481..239710ed785 100644
--- a/source/blender/src/buttons_scene.c
+++ b/source/blender/src/buttons_scene.c
@@ -50,6 +50,7 @@
#include "BKE_sound.h"
#include "BKE_packedFile.h"
#include "BKE_utildefines.h"
+#include "BKE_idprop.h"
#include "BLI_blenlib.h"
@@ -109,6 +110,7 @@
#include <ffmpeg/avcodec.h> /* for PIX_FMT_* and CODEC_ID_* */
#include <ffmpeg/avformat.h>
+#include <ffmpeg/opt.h>
static int ffmpeg_preset_sel = 0;
@@ -1833,13 +1835,14 @@ static char* ffmpeg_preset_pup(void)
static char string[2048];
char formatstring[2048];
- strcpy(formatstring, "FFMpeg preset: %%t|%s %%x%d|%s %%x%d|%s %%x%d|%s %%x%d|%s %%x%d");
+ strcpy(formatstring, "FFMpeg preset: %%t|%s %%x%d|%s %%x%d|%s %%x%d|%s %%x%d|%s %%x%d|%s %%x%d");
sprintf(string, formatstring,
"", FFMPEG_PRESET_NONE,
"DVD", FFMPEG_PRESET_DVD,
"SVCD", FFMPEG_PRESET_SVCD,
"VCD", FFMPEG_PRESET_VCD,
- "DV", FFMPEG_PRESET_DV);
+ "DV", FFMPEG_PRESET_DV,
+ "H264", FFMPEG_PRESET_H264);
return string;
}
@@ -2274,6 +2277,406 @@ static void render_panel_anim(void)
}
#ifdef WITH_FFMPEG
+
+static void ffmpeg_property_del(void *type, void *prop_)
+{
+ struct IDProperty *prop = (struct IDProperty *) prop_;
+ IDProperty * group;
+
+ if (!G.scene->r.ffcodecdata.properties) {
+ return;
+ }
+
+ group = IDP_GetPropertyFromGroup(
+ G.scene->r.ffcodecdata.properties, (char*) type);
+ if (group && prop) {
+ IDP_RemFromGroup(group, prop);
+ IDP_FreeProperty(prop);
+ MEM_freeN(prop);
+ }
+ allqueue(REDRAWBUTSSCENE, 0);
+}
+
+static IDProperty * ffmpeg_property_add(
+ char * type, int opt_index, int parent_index)
+{
+ AVCodecContext c;
+ const AVOption * o;
+ const AVOption * parent;
+ IDProperty * group;
+ IDProperty * prop;
+ IDPropertyTemplate val;
+ int idp_type;
+ char name[256];
+
+ avcodec_get_context_defaults(&c);
+
+ o = c.av_class->option + opt_index;
+ parent = c.av_class->option + parent_index;
+
+ if (!G.scene->r.ffcodecdata.properties) {
+ IDPropertyTemplate val;
+
+ G.scene->r.ffcodecdata.properties
+ = IDP_New(IDP_GROUP, val, "ffmpeg");
+ }
+
+ group = IDP_GetPropertyFromGroup(
+ G.scene->r.ffcodecdata.properties, (char*) type);
+
+ if (!group) {
+ IDPropertyTemplate val;
+
+ group = IDP_New(IDP_GROUP, val, (char*) type);
+ IDP_AddToGroup(G.scene->r.ffcodecdata.properties, group);
+ }
+
+ if (parent_index) {
+ sprintf(name, "%s:%s", parent->name, o->name);
+ } else {
+ strcpy(name, o->name);
+ }
+
+ fprintf(stderr, "ffmpeg_property_add: %s %d %d %s\n",
+ type, parent_index, opt_index, name);
+
+ prop = IDP_GetPropertyFromGroup(group, name);
+ if (prop) {
+ return prop;
+ }
+
+ switch (o->type) {
+ case FF_OPT_TYPE_INT:
+ case FF_OPT_TYPE_INT64:
+ val.i = o->default_val;
+ idp_type = IDP_INT;
+ break;
+ case FF_OPT_TYPE_DOUBLE:
+ case FF_OPT_TYPE_FLOAT:
+ val.f = o->default_val;
+ idp_type = IDP_FLOAT;
+ break;
+ case FF_OPT_TYPE_STRING:
+ val.str = " ";
+ idp_type = IDP_STRING;
+ break;
+ case FF_OPT_TYPE_CONST:
+ val.i = 1;
+ idp_type = IDP_INT;
+ break;
+ default:
+ return NULL;
+ }
+ prop = IDP_New(idp_type, val, name);
+ IDP_AddToGroup(group, prop);
+ return prop;
+}
+
+static int ffmpeg_property_add_string(const char * type, const char * str)
+{
+ AVCodecContext c;
+ const AVOption * o = 0;
+ const AVOption * p = 0;
+ char name[128];
+ char * param;
+ IDProperty * prop;
+
+ avcodec_get_context_defaults(&c);
+
+ strncpy(name, str, 128);
+
+ param = strchr(name, ':');
+
+ if (!param) {
+ param = strchr(name, ' ');
+ }
+ if (param) {
+ *param++ = 0;
+ while (*param == ' ') param++;
+ }
+
+ o = av_find_opt(&c, name, NULL, 0, 0);
+ if (!o) {
+ return FALSE;
+ }
+ if (param && o->type == FF_OPT_TYPE_CONST) {
+ return FALSE;
+ }
+ if (param && o->type != FF_OPT_TYPE_CONST && o->unit) {
+ p = av_find_opt(&c, param, o->unit, 0, 0);
+ prop = ffmpeg_property_add(
+ (char*) type, p - c.av_class->option,
+ o - c.av_class->option);
+ } else {
+ prop = ffmpeg_property_add(
+ (char*) type, o - c.av_class->option, 0);
+ }
+
+
+ if (!prop) {
+ return FALSE;
+ }
+
+ if (param && !p) {
+ switch (prop->type) {
+ case IDP_INT:
+ IDP_Int(prop) = atoi(param);
+ break;
+ case IDP_FLOAT:
+ IDP_Float(prop) = atof(param);
+ break;
+ case IDP_STRING:
+ strncpy(IDP_String(prop), param, prop->len);
+ break;
+ }
+ }
+ return TRUE;
+}
+
+static void ffmpeg_property_add_using_menu(void * type, int opt_indices)
+{
+ int opt_index = opt_indices & 65535;
+ int parent_index = opt_indices >> 16;
+
+ ffmpeg_property_add((char*) type, opt_index, parent_index);
+
+ allqueue(REDRAWBUTSSCENE, 0);
+}
+
+static uiBlock *ffmpeg_property_add_submenu(AVOption * parent, char * type)
+{
+ AVCodecContext c;
+ const AVOption * o;
+ uiBlock *block;
+ int yco = 0;
+ int flags = 0;
+ int parent_index = 0;
+
+ if (strcmp(type, "audio") == 0) {
+ flags = AV_OPT_FLAG_ENCODING_PARAM | AV_OPT_FLAG_AUDIO_PARAM;
+ } else if (strcmp(type, "video") == 0) {
+ flags = AV_OPT_FLAG_ENCODING_PARAM | AV_OPT_FLAG_VIDEO_PARAM;
+ } else {
+ return NULL;
+ }
+
+ block= uiNewBlock(&curarea->uiblocks, "ffmpeg_property_add_submenu",
+ UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
+ uiBlockSetButmFunc(block, ffmpeg_property_add_using_menu, type);
+
+ avcodec_get_context_defaults(&c);
+
+ if (parent) {
+ parent_index = (parent - c.av_class->option);
+ }
+
+ for(o = c.av_class->option; o && o->name; o++){
+ if (o->help &&
+ (strstr(o->help, "experimental")
+ || strstr(o->help, "obsolete")
+ || strstr(o->help, "useless")
+ || strstr(o->help, "deprecated"))) {
+ continue;
+ }
+ if((o->flags & flags) == flags) {
+ if((!parent && !o->unit)
+ || (o->unit && parent
+ && strcmp(o->unit, parent->unit) == 0
+ && o->type == FF_OPT_TYPE_CONST)) {
+ uiDefBut(block, BUTM, B_REDR,
+ (char*) (o->help && o->help[0] ?
+ o->help : o->name),
+ 0, yco, 160, 15,
+ NULL, 0, 0, 1,
+ (o - c.av_class->option) |
+ (parent_index << 16),
+ "");
+ yco -= 16;
+ }
+ }
+ }
+
+ uiTextBoundsBlock(block, 50);
+ uiBlockSetDirection(block, UI_RIGHT);
+
+ return block;
+}
+
+static uiBlock *ffmpeg_property_add_submenu_audio(void* opt)
+{
+ return ffmpeg_property_add_submenu((AVOption*) opt, "audio");
+}
+
+static uiBlock *ffmpeg_property_add_submenu_video(void* opt)
+{
+ return ffmpeg_property_add_submenu((AVOption*) opt, "video");
+}
+
+static uiBlock *ffmpeg_property_add_menu(void* type_)
+{
+ char * type = (char*) type_;
+ AVCodecContext c;
+ const AVOption * o;
+ uiBlock *block;
+ int yco = 0;
+ int flags = 0;
+ uiBlockFuncFP add_submenu = NULL;
+
+ if (strcmp(type, "audio") == 0) {
+ flags = AV_OPT_FLAG_ENCODING_PARAM | AV_OPT_FLAG_AUDIO_PARAM;
+ add_submenu = ffmpeg_property_add_submenu_audio;
+ } else if (strcmp(type, "video") == 0) {
+ flags = AV_OPT_FLAG_ENCODING_PARAM | AV_OPT_FLAG_VIDEO_PARAM;
+ add_submenu = ffmpeg_property_add_submenu_video;
+ } else {
+ return NULL;
+ }
+
+ block= uiNewBlock(&curarea->uiblocks, "ffmpeg_property_add_menu",
+ UI_EMBOSSP, UI_HELV, curarea->win);
+
+ avcodec_get_context_defaults(&c);
+
+ for(o = c.av_class->option; o && o->name; o++){
+ if((o->flags & flags) == flags) {
+ if (o->type == FF_OPT_TYPE_CONST) {
+ continue;
+ }
+ if (o->help &&
+ (strstr(o->help, "experimental")
+ || strstr(o->help, "obsolete")
+ || strstr(o->help, "useless")
+ || strstr(o->help, "deprecated"))) {
+ continue;
+ }
+
+ if (o->unit) {
+
+ uiDefIconTextBlockBut(
+ block,
+ add_submenu,
+ (void*) o,
+ ICON_RIGHTARROW_THIN,
+ (char*) (o->help ?
+ o->help : o->name),
+ 0, yco, 160, 15, "");
+ yco -= 16;
+ }
+ }
+ }
+
+ uiDefIconTextBlockBut(
+ block,
+ add_submenu,
+ NULL,
+ ICON_RIGHTARROW_THIN,
+ "Value / string options",
+ 0, yco, 160, 15, "");
+
+ uiTextBoundsBlock(block, 50);
+ uiBlockSetDirection(block, UI_DOWN);
+
+ return block;
+}
+
+static int render_panel_ffmpeg_property_option(
+ uiBlock *block, int xofs, int yofs, IDProperty * curr,
+ const char * type)
+{
+ AVCodecContext c;
+ const AVOption * o;
+ uiBut *but;
+ char name[128];
+ char * param;
+
+ strcpy(name, curr->name);
+ param = strchr(name, ':');
+
+ if (param) {
+ *param++ = 0;
+ }
+
+ avcodec_get_context_defaults(&c);
+
+ o = av_find_opt(&c, param ? param : name, NULL, 0, 0);
+ if (!o) {
+ return yofs;
+ }
+
+ switch (curr->type) {
+ case IDP_STRING:
+ uiDefBut(block, TEX,
+ B_REDR, curr->name,
+ xofs,yofs, 200,19,
+ IDP_String(curr),
+ 0.0, curr->len - 1, 100, 0,
+ (char*) o->help);
+ break;
+ case IDP_FLOAT:
+ uiDefButF(block, NUM, B_REDR, curr->name,
+ xofs, yofs, 200, 19,
+ &IDP_Float(curr),
+ o->min, o->max, 0, 0, (char*) o->help);
+ break;
+ case IDP_INT:
+ if (o->type == FF_OPT_TYPE_CONST) {
+ uiDefButBitI(block, TOG, 1, B_REDR,
+ curr->name,
+ xofs, yofs, 200, 19,
+ &IDP_Int(curr),
+ 0, 1, 0,0, (char*) o->help);
+ } else {
+ uiDefButI(block, NUM, B_REDR, curr->name,
+ xofs, yofs, 200, 19,
+ &IDP_Int(curr),
+ o->min, o->max, 0, 0, (char*) o->help);
+ }
+ break;
+ }
+
+ but = uiDefIconBut(block, BUT, B_REDR, VICON_X,
+ xofs + 220, yofs, 16, 16, NULL,
+ 0.0, 0.0, 0.0, 0.0, "Delete property");
+
+ uiButSetFunc(but, ffmpeg_property_del, (void*) type, curr);
+
+ yofs -= 25;
+
+ return yofs;
+}
+
+static int render_panel_ffmpeg_properties(uiBlock *block, const char * type,
+ int xofs, int yofs)
+{
+ yofs -= 5;
+
+ uiDefBlockBut(block, ffmpeg_property_add_menu, (void*) type,
+ "Add FFMPEG Expert Option", xofs, yofs, 240, 20,
+ "");
+ yofs -= 20;
+
+ if (G.scene->r.ffcodecdata.properties) {
+ IDProperty * prop;
+ void * iter;
+ IDProperty * curr;
+
+ prop = IDP_GetPropertyFromGroup(
+ G.scene->r.ffcodecdata.properties, (char*) type);
+ if (prop) {
+ iter = IDP_GetGroupIterator(prop);
+
+ while ((curr = IDP_GroupIterNext(iter)) != NULL) {
+ yofs = render_panel_ffmpeg_property_option(
+ block, xofs, yofs, curr, type);
+ }
+ }
+ }
+
+ uiNewPanelHeight(block, 204-yofs);
+
+ return yofs;
+}
+
static void set_ffmpeg_preset(int preset)
{
int isntsc = (G.scene->r.frs_sec != 25);
@@ -2321,6 +2724,32 @@ static void set_ffmpeg_preset(int preset)
G.scene->r.xsch = 720;
G.scene->r.ysch = isntsc ? 480 : 576;
break;
+ case FFMPEG_PRESET_H264:
+ G.scene->r.ffcodecdata.type = FFMPEG_AVI;
+ G.scene->r.ffcodecdata.codec = CODEC_ID_H264;
+ G.scene->r.ffcodecdata.video_bitrate = 6000;
+ G.scene->r.ffcodecdata.gop_size = isntsc ? 18 : 15;
+ G.scene->r.ffcodecdata.rc_max_rate = 9000;
+ G.scene->r.ffcodecdata.rc_min_rate = 0;
+ G.scene->r.ffcodecdata.rc_buffer_size = 224*8;
+ G.scene->r.ffcodecdata.mux_packet_size = 2048;
+ G.scene->r.ffcodecdata.mux_rate = 10080000;
+
+ ffmpeg_property_add_string("video", "coder:vlc");
+ ffmpeg_property_add_string("video", "flags:loop");
+ ffmpeg_property_add_string("video", "cmp:chroma");
+ ffmpeg_property_add_string("video", "partitions:parti4x4");
+ ffmpeg_property_add_string("video", "partitions:partp8x8");
+ ffmpeg_property_add_string("video", "partitions:partb8x8");
+ ffmpeg_property_add_string("video", "me:hex");
+ ffmpeg_property_add_string("video", "subq:5");
+ ffmpeg_property_add_string("video", "me_range:16");
+ ffmpeg_property_add_string("video", "keyint_min:25");
+ ffmpeg_property_add_string("video", "sc_threshold:40");
+ ffmpeg_property_add_string("video", "i_qfactor:0.71");
+ ffmpeg_property_add_string("video", "b_strategy:1");
+
+ break;
}
}
@@ -2360,8 +2789,10 @@ static void render_panel_ffmpeg_video(void)
&G.scene->r.ffcodecdata.video_bitrate,
1, 14000, 0, 0, "Video bitrate(kb/s)");
uiDefButI(block, NUM, B_DIFF, "Min Rate",
- xcol1, yofs+22, 110, 20, &G.scene->r.ffcodecdata.rc_min_rate,
- 0, 14000, 0, 0, "Rate control: min rate(kb/s)");
+ xcol1, yofs+22, 110, 20,
+ &G.scene->r.ffcodecdata.rc_min_rate,
+ 0, G.scene->r.ffcodecdata.rc_max_rate,
+ 0, 0, "Rate control: min rate(kb/s)");
uiDefButI(block, NUM, B_DIFF, "Max Rate",
xcol1, yofs, 110, 20, &G.scene->r.ffcodecdata.rc_max_rate,
1, 14000, 0, 0, "Rate control: max rate(kb/s)");
@@ -2394,7 +2825,8 @@ static void render_panel_ffmpeg_video(void)
0, 1, 0,0, "Autosplit output at 2GB boundary.");
- if (ELEM(G.scene->r.ffcodecdata.type, FFMPEG_AVI, FFMPEG_MOV)) {
+ if (ELEM3(G.scene->r.ffcodecdata.type, FFMPEG_AVI,
+ FFMPEG_MOV, FFMPEG_MKV)) {
uiDefBut(block, LABEL, 0, "Codec",
xcol1, yofs-44, 110, 20, 0, 0, 0, 0, 0, "");
uiDefButI(block, MENU,B_REDR, ffmpeg_codec_pup(),
@@ -2402,6 +2834,8 @@ static void render_panel_ffmpeg_video(void)
&G.scene->r.ffcodecdata.codec,
0,0,0,0, "FFMpeg codec to use");
}
+
+ render_panel_ffmpeg_properties(block, "video", xcol1, yofs-86);
}
static void render_panel_ffmpeg_audio(void)
@@ -2431,6 +2865,8 @@ static void render_panel_ffmpeg_audio(void)
xcol, yofs-66, 110, 20,
&G.scene->r.ffcodecdata.audio_bitrate,
32, 384, 0, 0, "Audio bitrate(kb/s)");
+
+ render_panel_ffmpeg_properties(block, "audio", xcol, yofs-86);
}
#endif
diff --git a/source/blender/src/buttons_shading.c b/source/blender/src/buttons_shading.c
index b46679898b4..69b1121da84 100644
--- a/source/blender/src/buttons_shading.c
+++ b/source/blender/src/buttons_shading.c
@@ -2652,7 +2652,7 @@ static void lamp_panel_spot(Object *ob, Lamp *la)
uiDefButF(block, NUM,B_LAMPREDRAW,"Soft:", 200,40,100,19, &la->soft,1.0,100.0, 100, 0, "Sets the size of the shadow sample area");
}
else { /* LA_SHADBUF_IRREGULAR */
- uiDefButF(block, NUM,B_LAMPREDRAW,"Bias:", 100,40,100,19, &la->bias, 0.01, 5.0, 1, 0, "Sets the shadow map sampling bias");
+ uiDefButF(block, NUM,B_LAMPREDRAW,"Bias:", 100,40,100,19, &la->bias, 0.001, 5.0, 1, 0, "Sets the shadow map sampling bias");
}
uiBlockBeginAlign(block);
@@ -3311,7 +3311,7 @@ static void material_panel_map_to(Object *ob, Material *ma, int from_nodes)
uiDefButBitS(block, TOG3, MAP_RAYMIRR, B_MATPRV, "RayMir", 50,160,40,19, &(mtex->mapto), 0, 0, 0, 0, "Causes the texture to affect the ray-mirror value");
uiDefButBitS(block, TOG3, MAP_ALPHA, B_MATPRV, "Alpha", 90,160,40,19, &(mtex->mapto), 0, 0, 0, 0, "Causes the texture to affect the alpha value");
uiDefButBitS(block, TOG3, MAP_EMIT, B_MATPRV, "Emit", 130,160,50,19, &(mtex->mapto), 0, 0, 0, 0, "Causes the texture to affect the emit value");
- uiDefButBitS(block, TOG3, MAP_TRANSLU, B_MATPRV, "TransLu", 180,160,40,19, &(mtex->mapto), 0, 0, 0, 0, "Causes the texture to affect the layer blending value");
+ uiDefButBitS(block, TOG3, MAP_TRANSLU, B_MATPRV, "TransLu", 180,160,40,19, &(mtex->mapto), 0, 0, 0, 0, "Causes the texture to affect the translucency value");
if(from_nodes==0)
uiDefButBitS(block, TOG3, MAP_DISPLACE, B_MATPRV, "Disp", 220,160,50,19, &(mtex->mapto), 0, 0, 0, 0, "Let the texture displace the surface");
uiBlockSetCol(block, TH_BUT_SETTING1);
@@ -3323,7 +3323,7 @@ static void material_panel_map_to(Object *ob, Material *ma, int from_nodes)
uiDefButBitS(block, TOG3, MAP_RAYMIRR, B_MATPRV, "RayMir", 60,160,50,19, &(mtex->mapto), 0, 0, 0, 0, "Causes the texture to affect the ray-mirror value");
uiDefButBitS(block, TOG3, MAP_ALPHA, B_MATPRV, "Alpha", 110,160,50,19, &(mtex->mapto), 0, 0, 0, 0, "Causes the texture to affect the alpha value");
uiDefButBitS(block, TOG3, MAP_EMIT, B_MATPRV, "Emit", 160,160,45,19, &(mtex->mapto), 0, 0, 0, 0, "Causes the texture to affect the emit value");
- uiDefButBitS(block, TOG3, MAP_TRANSLU, B_MATPRV, "TransLu", 205,160,60,19, &(mtex->mapto), 0, 0, 0, 0, "Causes the texture to affect the layer blending value");
+ uiDefButBitS(block, TOG3, MAP_TRANSLU, B_MATPRV, "TransLu", 205,160,60,19, &(mtex->mapto), 0, 0, 0, 0, "Causes the texture to affect the translucency value");
if(from_nodes==0)
uiDefButBitS(block, TOG3, MAP_DISPLACE, B_MATPRV, "Disp", 265,160,45,19, &(mtex->mapto), 0, 0, 0, 0, "Let the texture displace the surface");
}
@@ -3633,7 +3633,7 @@ static void material_panel_tramir(Material *ma)
uiDefButF(block, NUMSLI, B_MATPRV, "IOR: ",
X2CLM2, yco-=BUTH, BUTW2, BUTH, &(ma->ang), 1.0, 3.0, 100, 2, "Sets angular index of refraction for raytraced refraction");
uiDefButF(block, NUMSLI, B_MATPRV, "Fresnel: ",
- X2CLM2, yco-=BUTH, BUTW2, BUTH, &(ma->fresnel_tra), 0.0, 5.0, 10, 2, "Power of Fresnel for mirror reflection");
+ X2CLM2, yco-=BUTH, BUTW2, BUTH, &(ma->fresnel_tra), 0.0, 5.0, 10, 2, "Power of Fresnel for transparency (Ray or ZTransp)");
uiDefButF(block, NUMSLI, B_MATPRV, "Fac: ",
X2CLM2, yco-=BUTH, BUTW2, BUTH, &(ma->fresnel_tra_i), 1.0, 5.0, 10, 2, "Blending factor for Fresnel");
uiBlockEndAlign(block);
@@ -4164,7 +4164,7 @@ static void material_panel_links(Object *ob, Material *ma)
if(ma) uiSetButLock(ma->id.lib!=NULL, ERROR_LIBDATA_MESSAGE);
if(ma)
- uiDefButC(block, TOG, B_MAT_USENODES, "Nodes", xco+5,160,300-xco-5,20, &ma->use_nodes, 0.0f, 0.0f, 0, 0, "");
+ uiDefButC(block, TOG, B_MAT_USENODES, "Nodes", xco+5,160,300-xco-5,20, &ma->use_nodes, 0.0f, 0.0f, 0, 0, "Enables as a Nodes Material");
if(ob->actcol==0) ob->actcol= 1; /* because of TOG|BIT button */
diff --git a/source/blender/src/drawimage.c b/source/blender/src/drawimage.c
index 6d1cd244b84..09ba518565f 100644
--- a/source/blender/src/drawimage.c
+++ b/source/blender/src/drawimage.c
@@ -2349,17 +2349,6 @@ void drawimagespace(ScrArea *sa, void *spacedata)
sa->win_swap= WIN_BACK_OK;
}
-static void image_zoom_power_of_two(void)
-{
- /* Make zoom a power of 2 */
-
- G.sima->zoom = 1 / G.sima->zoom;
- G.sima->zoom = log(G.sima->zoom) / log(2);
- G.sima->zoom = ceil(G.sima->zoom);
- G.sima->zoom = pow(2, G.sima->zoom);
- G.sima->zoom = 1 / G.sima->zoom;
-}
-
static void image_zoom_set_factor(float zoomfac)
{
SpaceImage *sima= curarea->spacedata.first;
@@ -2503,8 +2492,10 @@ void image_home(void)
imgheight = 256;
}
else {
- imgwidth = ibuf->x;
- imgheight = ibuf->y;
+ float xuser_asp, yuser_asp;
+ image_pixel_aspect(G.sima->image, &xuser_asp, &yuser_asp);
+ imgwidth = ibuf->x * xuser_asp;
+ imgheight = ibuf->y * yuser_asp;
}
/* Check if the image will fit in the image with zoom==1 */
@@ -2515,9 +2506,7 @@ void image_home(void)
/* Find the zoom value that will fit the image in the image space */
zoomX = ((float)width) / ((float)imgwidth);
zoomY = ((float)height) / ((float)imgheight);
- G.sima->zoom= MIN2(zoomX, zoomY);
-
- image_zoom_power_of_two();
+ G.sima->zoom = 1.0f / power_of_2(1/ MIN2(zoomX, zoomY) );
}
else {
G.sima->zoom= 1.0f;
diff --git a/source/blender/src/drawimasel.c b/source/blender/src/drawimasel.c
index 891bf488d17..e93f7391e32 100644
--- a/source/blender/src/drawimasel.c
+++ b/source/blender/src/drawimasel.c
@@ -308,11 +308,33 @@ static void draw_imasel_bookmarks(ScrArea *sa, SpaceImaSel *simasel)
BIF_ThemeColor(TH_TEXT);
}
ui_rasterpos_safe(sx, sy, simasel->aspect);
+
+ /* handling of international fonts.
+ TODO: proper support for utf8 in languages different from ja_JP abd zh_CH
+ needs update of iconv in lib/windows to support getting the system language string
+ */
+#ifdef WITH_ICONV
+ {
+ struct LANGMenuEntry *lme;
+ lme = find_language(U.language);
+
+ if ((lme !=NULL) && (!strcmp(lme->code, "ja_JP") ||
+ !strcmp(lme->code, "zh_CN")))
+ {
+ BIF_RasterPos(sx, sy);
#ifdef WIN32
- BIF_DrawString(simasel->curfont, sname, ((U.transopts & USER_TR_MENUS) | CONVERT_TO_UTF8));
+ BIF_DrawString(simasel->curfont, sname, ((U.transopts & USER_TR_MENUS) | CONVERT_TO_UTF8));
#else
- BIF_DrawString(simasel->curfont, sname, (U.transopts & USER_TR_MENUS));
+ BIF_DrawString(simasel->curfont, sname, (U.transopts & USER_TR_MENUS));
#endif
+ } else {
+ BMF_DrawString(simasel->curfont, sname);
+ }
+ }
+#else
+ BMF_DrawString(simasel->curfont, sname);
+#endif /* WITH_ICONV */
+
sy -= linestep;
} else {
cpack(0xB0B0B0);
diff --git a/source/blender/src/drawnla.c b/source/blender/src/drawnla.c
index c0cd11d27a1..083d10fd484 100644
--- a/source/blender/src/drawnla.c
+++ b/source/blender/src/drawnla.c
@@ -638,14 +638,14 @@ static void nla_panel_properties(short cntrl) // NLA_HANDLER_PROPERTIES
uiBlockBeginAlign(block);
// FIXME: repeat and scale are too cramped!
- uiDefButF(block, NUM, B_NLA_SCALE, "Repeat:", 160,100,75,19, &strip->repeat, 0.001, 1000.0f, 100, 0, "Number of times the action should repeat");
+ uiDefButF(block, NUMABS, B_NLA_SCALE, "Repeat:", 160,100,75,19, &strip->repeat, 0.001, 1000.0f, 100, 0, "Number of times the action should repeat");
if ((strip->actend - strip->actstart) < 1.0f) {
uiBlockSetCol(block, TH_REDALERT);
- uiDefButF(block, NUM, B_NLA_SCALE, "Scale:", 235,100,75,19, &strip->scale, 0.001, 1000.0f, 100, 0, "Please run Alt-S to fix up this error");
+ uiDefButF(block, NUMABS, B_NLA_SCALE, "Scale:", 235,100,75,19, &strip->scale, 0.001, 1000.0f, 100, 0, "Please run Alt-S to fix up this error");
uiBlockSetCol(block, TH_AUTO);
}
else
- uiDefButF(block, NUM, B_NLA_SCALE, "Scale:", 235,100,75,19, &strip->scale, 0.001, 1000.0f, 100, 0, "Amount the action should be scaled by");
+ uiDefButF(block, NUMABS, B_NLA_SCALE, "Scale:", 235,100,75,19, &strip->scale, 0.001, 1000.0f, 100, 0, "Amount the action should be scaled by");
but= uiDefButC(block, TEX, B_NLA_PANEL, "OffsBone:", 160,80,150,19, strip->offs_bone, 0, 31.0f, 0, 0, "Name of Bone that defines offset for repeat");
uiButSetCompleteFunc(but, autocomplete_bone, (void *)ob);
uiDefButBitS(block, TOG, ACTSTRIP_HOLDLASTFRAME, B_NLA_PANEL, "Hold", 160,60,75,19, &strip->flag, 0, 0, 0, 0, "Toggles whether to continue displaying the last frame past the end of the strip");
diff --git a/source/blender/src/drawobject.c b/source/blender/src/drawobject.c
index 84289be0928..17b51249ac2 100644
--- a/source/blender/src/drawobject.c
+++ b/source/blender/src/drawobject.c
@@ -2265,14 +2265,18 @@ static void draw_mesh_fancy(Base *base, int dt, int flag)
Mesh *me = ob->data;
Material *ma= give_current_material(ob, 1);
int hasHaloMat = (ma && (ma->mode&MA_HALO));
- int draw_wire = ob->dtx&OB_DRAWWIRE;
+ int draw_wire = 0;
int totvert, totedge, totface;
DispList *dl;
DerivedMesh *dm= mesh_get_derived_final(ob, get_viewedit_datamask());
if(!dm)
return;
-
+
+ if (ob->dtx&OB_DRAWWIRE) {
+ draw_wire = 2; /* draw wire after solid using zoffset and depth buffer adjusment */
+ }
+
#ifdef WITH_VERSE
if(me->vnode) {
struct VNode *vnode = (VNode*)me->vnode;
@@ -2312,7 +2316,7 @@ static void draw_mesh_fancy(Base *base, int dt, int flag)
glPointSize(1.0);
}
else if(dt==OB_WIRE || totface==0) {
- draw_wire = 1;
+ draw_wire = 1; /* draw wire only, no depth buffer stuff */
}
else if( (ob==OBACT && (G.f & G_TEXTUREPAINT || FACESEL_PAINT_TEST)) ||
CHECK_OB_DRAWTEXTURE(G.vd, dt))
@@ -2448,20 +2452,21 @@ static void draw_mesh_fancy(Base *base, int dt, int flag)
*
* UPDATE bug #10290 - With this wire-only objects can draw
* behind other objects depending on their order in the scene. 2x if 0's below. undo'ing zr's commit: r4059
+ *
+ * if draw wire is 1 then just drawing wire, no need for depth buffer stuff,
+ * otherwise this wire is to overlay solid mode faces so do some depth buffer tricks.
*/
-#if 0
- if (dt!=OB_WIRE) {
+ if (dt!=OB_WIRE && draw_wire==2) {
bglPolygonOffset(1.0);
glDepthMask(0); // disable write in zbuffer, selected edge wires show better
}
-#endif
+
dm->drawEdges(dm, (dt==OB_WIRE || totface==0));
-#if 0
- if (dt!=OB_WIRE) {
+
+ if (dt!=OB_WIRE && draw_wire==2) {
glDepthMask(1);
bglPolygonOffset(0.0);
}
-#endif
}
dm->release(dm);
diff --git a/source/blender/src/drawseq.c b/source/blender/src/drawseq.c
index fb97a369dd8..e979f6e16fc 100644
--- a/source/blender/src/drawseq.c
+++ b/source/blender/src/drawseq.c
@@ -857,15 +857,18 @@ static void draw_image_seq(ScrArea *sa)
zoom = -1.0/sseq->zoom;
}
- /* calc location */
- x1= (sa->winx-zoom*ibuf->x)/2 + sseq->xof;
- y1= (sa->winy-zoom*ibuf->y)/2 + sseq->yof;
-
/* needed for gla draw */
glaDefine2DArea(&curarea->winrct);
+ if (sseq->mainb == SEQ_DRAW_IMG_IMBUF) {
+ zoomx = zoom * ((float)G.scene->r.xasp / (float)G.scene->r.yasp);
+ zoomy = zoom;
+ } else {
+ zoomx = zoomy = zoom;
+ }
- zoomx = zoom * ((float)G.scene->r.xasp / (float)G.scene->r.yasp);
- zoomy = zoom;
+ /* calc location */
+ x1= (sa->winx-zoomx*ibuf->x)/2 + sseq->xof;
+ y1= (sa->winy-zoomy*ibuf->y)/2 + sseq->yof;
glPixelZoom(zoomx, zoomy);
@@ -913,6 +916,64 @@ void seq_reset_imageofs(SpaceSeq *sseq)
sseq->xof = sseq->yof = sseq->zoom = 0;
}
+void seq_home(void)
+{
+ SpaceSeq *sseq= curarea->spacedata.first;
+
+ if (!sseq->mainb) {
+ G.v2d->cur= G.v2d->tot;
+ test_view2d(G.v2d, curarea->winx, curarea->winy);
+ view2d_do_locks(curarea, V2D_LOCK_COPY);
+ } else {
+ float zoomX, zoomY;
+ int width, height, imgwidth, imgheight;
+
+ width = curarea->winx;
+ height = curarea->winy;
+
+ seq_reset_imageofs(sseq);
+
+ imgwidth= (G.scene->r.size*G.scene->r.xsch)/100;
+ imgheight= (G.scene->r.size*G.scene->r.ysch)/100;
+
+ /* Apply aspect, dosnt need to be that accurate */
+ imgwidth= (int)(imgwidth * ((float)G.scene->r.xasp / (float)G.scene->r.yasp));
+
+ if (((imgwidth >= width) || (imgheight >= height)) &&
+ ((width > 0) && (height > 0))) {
+
+ /* Find the zoom value that will fit the image in the image space */
+ zoomX = ((float)width) / ((float)imgwidth);
+ zoomY = ((float)height) / ((float)imgheight);
+ sseq->zoom= (zoomX < zoomY) ? zoomX : zoomY;
+
+ sseq->zoom = 1.0f / power_of_2(1/ MIN2(zoomX, zoomY) );
+ }
+ else {
+ sseq->zoom= 1.0f;
+ }
+ }
+ scrarea_queue_winredraw(curarea);
+}
+
+void seq_viewzoom(unsigned short event, int invert)
+{
+ SpaceSeq *sseq= curarea->spacedata.first;
+
+ if(event==PAD1)
+ sseq->zoom= 1.0;
+ else if(event==PAD2)
+ sseq->zoom= (invert)? 2.0: 0.5;
+ else if(event==PAD4)
+ sseq->zoom= (invert)? 4.0: 0.25;
+ else if(event==PAD8)
+ sseq->zoom= (invert)? 8.0: 0.125;
+
+ /* ensure pixel exact locations for draw */
+ sseq->xof= (int)sseq->xof;
+ sseq->yof= (int)sseq->yof;
+}
+
void seq_viewmove(SpaceSeq *sseq)
{
ScrArea *sa;
diff --git a/source/blender/src/drawview.c b/source/blender/src/drawview.c
index 1acb7c4373f..15b7f3dbe67 100644
--- a/source/blender/src/drawview.c
+++ b/source/blender/src/drawview.c
@@ -3421,7 +3421,7 @@ static void draw_viewport_fps(ScrArea *sa)
char printable[16];
int i, tot;
- if (lredrawtime == redrawtime)
+ if (!lredrawtime || !redrawtime)
return;
printable[0] = '\0';
@@ -3569,7 +3569,7 @@ void inner_play_anim_loop(int init, int mode)
last_cfra = -1;
cached = cached_dynamics(PSFRA,PEFRA);
- redrawtime = 1.0/FPS;
+ redrawtime = 0.0;
redrawtime_index = REDRAW_FRAME_AVERAGE;
while(redrawtime_index--) {
@@ -3731,8 +3731,20 @@ int play_anim(int mode)
else if(G.qual & LR_CTRLKEY) viewmove(2);
else viewmove(0);
}
- }
- else if(event==MKEY) {
+ } else if (event==WHEELDOWNMOUSE || (val && event==PADMINUS)) { /* copied from persptoetsen */
+ /* this min and max is also in viewmove() */
+ if(G.vd->persp==V3D_CAMOB) {
+ G.vd->camzoom-= 10;
+ if(G.vd->camzoom<-30) G.vd->camzoom= -30;
+ }
+ else if(G.vd->dist<10.0*G.vd->far) G.vd->dist*=1.2f;
+ } else if (event==WHEELUPMOUSE || (val && event==PADPLUSKEY)) { /* copied from persptoetsen */
+ if(G.vd->persp==V3D_CAMOB) {
+ G.vd->camzoom+= 10;
+ if(G.vd->camzoom>300) G.vd->camzoom= 300;
+ }
+ else if(G.vd->dist> 0.001*G.vd->grid) G.vd->dist*=.83333f;
+ } else if(event==MKEY) {
if(val) add_marker(CFRA-1);
}
}
diff --git a/source/blender/src/edit.c b/source/blender/src/edit.c
index 656ecda8eac..a44bbc3af0f 100644
--- a/source/blender/src/edit.c
+++ b/source/blender/src/edit.c
@@ -1530,35 +1530,11 @@ void snap_curs_to_active()
if (G.obedit->type == OB_MESH)
{
/* check active */
- if (G.editMesh->selected.last) {
- EditSelection *ese = G.editMesh->selected.last;
- if ( ese->type == EDITVERT ) {
- EditVert *eve = (EditVert *)ese->data;
- VECCOPY(curs, eve->co);
- }
- else if ( ese->type == EDITEDGE ) {
- EditEdge *eed = (EditEdge *)ese->data;
- VecAddf(curs, eed->v1->co, eed->v2->co);
- VecMulf(curs, 0.5f);
- }
- else if ( ese->type == EDITFACE ) {
- EditFace *efa = (EditFace *)ese->data;
-
- if (efa->v4)
- {
- VecAddf(curs, efa->v1->co, efa->v2->co);
- VecAddf(curs, curs, efa->v3->co);
- VecAddf(curs, curs, efa->v4->co);
- VecMulf(curs, 0.25f);
- }
- else
- {
- VecAddf(curs, efa->v1->co, efa->v2->co);
- VecAddf(curs, curs, efa->v3->co);
- VecMulf(curs, 1/3.0f);
- }
- }
+ EditSelection ese;
+ if (EM_get_actSelection(&ese)) {
+ EM_editselection_center(curs, &ese);
}
+
Mat4MulVecfl(G.obedit->obmat, curs);
}
}
diff --git a/source/blender/src/editarmature.c b/source/blender/src/editarmature.c
index 99c87097bd3..d0be862c052 100644
--- a/source/blender/src/editarmature.c
+++ b/source/blender/src/editarmature.c
@@ -180,7 +180,7 @@ void make_boneList(ListBase *list, ListBase *bones, EditBone *parent)
/* Add children if necessary */
if (curBone->childbase.first)
- make_boneList (list, &curBone->childbase, eBone);
+ make_boneList(list, &curBone->childbase, eBone);
}
}
@@ -549,7 +549,7 @@ int join_armature(void)
bPoseChannel *pchan, *pchann;
ListBase ebbase, eblist;
EditBone *curbone;
- float mat[4][4], imat[4][4];
+ float mat[4][4], oimat[4][4];
/* Ensure we're not in editmode and that the active object is an armature*/
/* if(G.obedit) return; */ /* Alredy checked in join_menu() */
@@ -565,7 +565,11 @@ int join_armature(void)
/* Get editbones of active armature to add editbones to */
ebbase.first=ebbase.last= NULL;
make_boneList(&ebbase, &arm->bonebase, NULL);
+
+ /* get pose of active object and move it out of posemode */
pose= ob->pose;
+ ob->flag &= ~OB_POSEMODE;
+ BASACT->flag &= ~OB_POSEMODE;
for (base=FIRSTBASE; base; base=nextbase) {
nextbase = base->next;
@@ -577,10 +581,12 @@ int join_armature(void)
/* Get Pose of current armature */
opose= base->object->pose;
+ base->object->flag &= ~OB_POSEMODE;
+ BASACT->flag &= ~OB_POSEMODE;
/* Find the difference matrix */
- Mat4Invert(imat, ob->obmat);
- Mat4MulMat4(mat, base->object->obmat, imat);
+ Mat4Invert(oimat, ob->obmat);
+ Mat4MulMat4(mat, base->object->obmat, oimat);
/* Copy bones and posechannels from the object to the edit armature */
for (pchan=opose->chanbase.first; pchan; pchan=pchann) {
@@ -600,25 +606,24 @@ int join_armature(void)
float delta[3];
/* Get the premat */
- VecSubf (delta, curbone->tail, curbone->head);
+ VecSubf(delta, curbone->tail, curbone->head);
vec_roll_to_mat3(delta, curbone->roll, temp);
- Mat4MulMat34 (premat, temp, mat);
+ Mat4MulMat34(premat, temp, mat);
Mat4MulVecfl(mat, curbone->head);
Mat4MulVecfl(mat, curbone->tail);
/* Get the postmat */
- VecSubf (delta, curbone->tail, curbone->head);
+ VecSubf(delta, curbone->tail, curbone->head);
vec_roll_to_mat3(delta, curbone->roll, temp);
Mat4CpyMat3(postmat, temp);
/* Find the roll */
- Mat4Invert (imat, premat);
- Mat4MulMat4 (difmat, postmat, imat);
+ Mat4Invert(imat, premat);
+ Mat4MulMat4(difmat, postmat, imat);
curbone->roll -= atan2(difmat[2][0], difmat[2][2]);
-
}
/* Fix Constraints and Other Links to this Bone and Armature */
@@ -651,12 +656,16 @@ int join_armature(void)
}
/* Helper function for armature separating - link fixing */
-static void separated_armature_fix_links(Object *origArm, Object *newArm, ListBase *edbo)
+static void separated_armature_fix_links(Object *origArm, Object *newArm)
{
Object *ob;
- bPoseChannel *pchan;
+ bPoseChannel *pchan, *pcha, *pchb;
bConstraint *con;
- EditBone *ebo, *ebn;
+ ListBase *opchans, *npchans;
+
+ /* get reference to list of bones in original and new armatures */
+ opchans= &origArm->pose->chanbase;
+ npchans= &newArm->pose->chanbase;
/* let's go through all objects in database */
for (ob= G.main->object.first; ob; ob= ob->id.next) {
@@ -674,28 +683,36 @@ static void separated_armature_fix_links(Object *origArm, Object *newArm, ListBa
for (ct= targets.first; ct; ct= ct->next) {
/* any targets which point to original armature are redirected to the new one only if:
- * - the target isn't the original armature itself
- * - the target is one of the bones which were moved into newArm
+ * - the target isn't origArm/newArm itself
+ * - the target is one that can be found in newArm/origArm
*/
if ((ct->tar == origArm) && (ct->subtarget[0] != 0)) {
- for (ebo=edbo->first, ebn=edbo->last; ebo && ebn; ebo=ebo->next, ebn=ebn->prev) {
+ for (pcha=npchans->first, pchb=npchans->last; pcha && pchb; pcha=pcha->next, pchb=pchb->prev) {
/* check if either one matches */
- if ( (strcmp(ebo->name, ct->subtarget)==0) ||
- (strcmp(ebn->name, ct->subtarget)==0) )
+ if ( (strcmp(pcha->name, ct->subtarget)==0) ||
+ (strcmp(pchb->name, ct->subtarget)==0) )
{
ct->tar= newArm;
- printf("arm = '%s' pchan = '%s', ebo = '%s', YES \n", ob->id.name+2, pchan->name, ebo->name);
- printf("arm = '%s' pchan = '%s', ebn = '%s', YES \n", ob->id.name+2, pchan->name, ebn->name);
break;
}
- else {
- printf("arm = '%s' pchan = '%s', ebo = '%s', NOT\n", ob->id.name+2, pchan->name, ebo->name);
- printf("arm = '%s' pchan = '%s', ebn = '%s', NOT \n", ob->id.name+2, pchan->name, ebn->name);
+
+ /* check if both ends have met (to stop checking) */
+ if (pcha == pchb) break;
+ }
+ }
+ else if ((ct->tar == newArm) && (ct->subtarget[0] != 0)) {
+ for (pcha=opchans->first, pchb=opchans->last; pcha && pchb; pcha=pcha->next, pchb=pchb->prev) {
+ /* check if either one matches */
+ if ( (strcmp(pcha->name, ct->subtarget)==0) ||
+ (strcmp(pchb->name, ct->subtarget)==0) )
+ {
+ ct->tar= origArm;
+ break;
}
/* check if both ends have met (to stop checking) */
- if (ebo == ebn) break;
- }
+ if (pcha == pchb) break;
+ }
}
}
@@ -719,22 +736,36 @@ static void separated_armature_fix_links(Object *origArm, Object *newArm, ListBa
for (ct= targets.first; ct; ct= ct->next) {
/* any targets which point to original armature are redirected to the new one only if:
- * - the target isn't the original armature itself
- * - the target is one of the bones which were moved into newArm
+ * - the target isn't origArm/newArm itself
+ * - the target is one that can be found in newArm/origArm
*/
if ((ct->tar == origArm) && (ct->subtarget[0] != 0)) {
- for (ebo=edbo->first, ebn=edbo->last; ebo && ebn; ebo=ebo->next, ebn=ebn->prev) {
+ for (pcha=npchans->first, pchb=npchans->last; pcha && pchb; pcha=pcha->next, pchb=pchb->prev) {
/* check if either one matches */
- if ( (strcmp(ebo->name, ct->subtarget)==0) ||
- (strcmp(ebn->name, ct->subtarget)==0) )
+ if ( (strcmp(pcha->name, ct->subtarget)==0) ||
+ (strcmp(pchb->name, ct->subtarget)==0) )
{
ct->tar= newArm;
break;
}
/* check if both ends have met (to stop checking) */
- if (ebo == ebn) break;
- }
+ if (pcha == pchb) break;
+ }
+ }
+ else if ((ct->tar == newArm) && (ct->subtarget[0] != 0)) {
+ for (pcha=opchans->first, pchb=opchans->last; pcha && pchb; pcha=pcha->next, pchb=pchb->prev) {
+ /* check if either one matches */
+ if ( (strcmp(pcha->name, ct->subtarget)==0) ||
+ (strcmp(pchb->name, ct->subtarget)==0) )
+ {
+ ct->tar= origArm;
+ break;
+ }
+
+ /* check if both ends have met (to stop checking) */
+ if (pcha == pchb) break;
+ }
}
}
@@ -749,37 +780,83 @@ static void separated_armature_fix_links(Object *origArm, Object *newArm, ListBa
/* Is object parented to a bone of this src armature? */
if (ob->partype==PARBONE) {
/* bone name in object */
- for (ebo=edbo->first, ebn=edbo->last; ebo && ebn; ebo=ebo->next, ebn=ebn->prev) {
+ for (pcha=npchans->first, pchb=npchans->last; pcha && pchb; pcha=pcha->next, pchb=pchb->prev) {
/* check if either one matches */
- if ( (strcmp(ebo->name, ob->parsubstr)==0) ||
- (strcmp(ebn->name, ob->parsubstr)==0) )
+ if ( (strcmp(pcha->name, ob->parsubstr)==0) ||
+ (strcmp(pchb->name, ob->parsubstr)==0) )
{
ob->parent= newArm;
break;
}
/* check if both ends have met (to stop checking) */
- if (ebo == ebn) break;
+ if (pcha == pchb) break;
}
}
}
}
}
-void separate_armature (void)
+/* Helper function for armature separating - remove certain bones from the given armature
+ * sel: remove selected bones from the armature, otherwise the unselected bones are removed
+ */
+static void separate_armature_bones (Object *ob, short sel)
{
- EditBone *ebo, *ebn;
- Object *oldob;
- Base *base, *oldbase;
- bArmature *arm;
ListBase edbo = {NULL, NULL};
+ bArmature *arm= (bArmature *)ob->data;
+ bPoseChannel *pchan, *pchann;
+ EditBone *curbone;
- // 31Mar08 - Aligorith:
- // this tool is currently not ready for production use, as it will still
- // crash in some cases, and also constraint relinking isn't working yet
- // remove the following two lines to test this tool... you have been warned!
- okee("Not implemented (WIP)");
- return;
+ /* make local set of editbones to manipulate here */
+ make_boneList(&edbo, &arm->bonebase, NULL);
+
+ /* go through pose-channels, checking if a bone should be removed */
+ for (pchan=ob->pose->chanbase.first; pchan; pchan=pchann) {
+ pchann= pchan->next;
+ curbone= editbone_name_exists(&edbo, pchan->name);
+
+ /* check if bone needs to be removed */
+ if ( (sel && (curbone->flag & BONE_SELECTED)) ||
+ (!sel && !(curbone->flag & BONE_SELECTED)) )
+ {
+ EditBone *ebo;
+ bPoseChannel *pchn;
+
+ /* clear the bone->parent var of any bone that had this as its parent */
+ for (ebo= edbo.first; ebo; ebo= ebo->next) {
+ if (ebo->parent == curbone) {
+ ebo->parent= NULL;
+ ebo->temp= NULL; /* this is needed to prevent random crashes with in editbones_to_armature */
+ ebo->flag &= ~BONE_CONNECTED;
+ }
+ }
+
+ /* clear the pchan->parent var of any pchan that had this as its parent */
+ for (pchn= ob->pose->chanbase.first; pchn; pchn=pchn->next) {
+ if (pchn->parent == pchan)
+ pchn->parent= NULL;
+ }
+
+ /* free any of the extra-data this pchan might have */
+ if (pchan->path) MEM_freeN(pchan->path);
+ free_constraints(&pchan->constraints);
+
+ /* get rid of unneeded bone */
+ BLI_freelinkN(&edbo, curbone);
+ BLI_freelinkN(&ob->pose->chanbase, pchan);
+ }
+ }
+
+ /* exit editmode (recalculates pchans too) */
+ editbones_to_armature(&edbo, ob);
+ BLI_freelistN(&edbo);
+}
+
+void separate_armature (void)
+{
+ Object *oldob, *newob;
+ Base *base, *oldbase, *newbase;
+ bArmature *arm;
if ( G.vd==0 || (G.vd->lay & G.obedit->lay)==0 ) return;
if ( okee("Separate")==0 ) return;
@@ -788,83 +865,68 @@ void separate_armature (void)
arm= G.obedit->data;
- /* we are going to trick everything as follows:
- * 1. duplicate base: this is the new one, remember old pointer
- * 2. set aside all NOT selected bones
- * 3. load_editArmature(): this will be the new base
- * 4. freelist and restore old armature
+ /* we are going to do this as follows (unlike every other instance of separate):
+ * 1. exit editmode +posemode for active armature/base. Take note of what this is.
+ * 2. duplicate base - BASACT is the new one now
+ * 3. for each of the two armatures, enter editmode -> remove appropriate bones -> exit editmode + recalc
+ * 4. fix constraint links
+ * 5. make original armature active and enter editmode
*/
- /* only edit-base selected */
+ /* 1) only edit-base selected */
base= FIRSTBASE;
- while(base) {
- if(base->lay & G.vd->lay) {
- if(base->object==G.obedit) base->flag |= 1;
+ for (base= FIRSTBASE; base; base= base->next) {
+ if (base->lay & G.vd->lay) {
+ if (base->object==G.obedit) base->flag |= 1;
else base->flag &= ~1;
}
- base= base->next;
- }
-
- /* set aside: everything that is not selected */
- for (ebo= G.edbo.first; ebo; ebo= ebn) {
- ebn= ebo->next;
-
- /* remove from original, and move to duplicate if not-selected */
- if ((ebo->flag & BONE_SELECTED)==0) {
- EditBone *curbone;
-
- /* need to make sure children don't still refer to this only if they are selected
- * - potentially slow O(n*n) situation here...
- */
- for (curbone= G.edbo.first; curbone; curbone=curbone->next) {
- if ((curbone->parent == ebo) && (curbone->flag & BONE_SELECTED)) {
- curbone->parent= ebo->parent;
- curbone->flag &= ~BONE_CONNECTED;
- }
- }
-
- BLI_remlink(&G.edbo, ebo);
- BLI_addtail(&edbo, ebo);
- }
}
-
+
+ /* 1) store starting settings and exit editmode */
oldob= G.obedit;
oldbase= BASACT;
-
- adduplicate(1, 0); /* no transform and zero so do get a linked dupli */
+ oldob->flag &= ~OB_POSEMODE;
+ oldbase->flag &= ~OB_POSEMODE;
- G.obedit= BASACT->object; /* basact is set in adduplicate() */
+ load_editArmature();
+ free_editArmature();
- G.obedit->data= copy_armature(arm);
- /* because new armature is a copy: reduce user count */
- arm->id.us--;
+ /* 2) duplicate base */
+ adduplicate(1, USER_DUP_ARM); /* no transform and zero so do get a linked dupli */
- load_editArmature();
+ newbase= BASACT; /* basact is set in adduplicate() */
+ newob= newbase->object;
+ newbase->flag &= ~SELECT;
- BASACT->flag &= ~SELECT;
- /* fix links before depsgraph flushes */ // err... or after?
- printf("oldob = %p, obact = %p \n", oldob, G.obedit);
- separated_armature_fix_links(oldob, G.obedit, &G.edbo);
+ /* 3) remove bones that shouldn't still be around on both armatures */
+ separate_armature_bones(oldob, 1);
+ separate_armature_bones(newob, 0);
- if (G.edbo.first) free_editArmature();
- G.edbo = edbo;
+ /* 4) fix links before depsgraph flushes */ // err... or after?
+ separated_armature_fix_links(oldob, newob);
- G.obedit= 0; /* displists behave different in edit mode */ // needed?
- DAG_object_flush_update(G.scene, OBACT, OB_RECALC_DATA); /* this is the separated one */
DAG_object_flush_update(G.scene, oldob, OB_RECALC_DATA); /* this is the original one */
+ DAG_object_flush_update(G.scene, newob, OB_RECALC_DATA); /* this is the separated one */
+
+ /* 5) restore original conditions */
G.obedit= oldob;
BASACT= oldbase;
BASACT->flag |= SELECT;
+ make_editArmature();
+
+ /* recalc/redraw + cleanup */
waitcursor(0);
countall();
allqueue(REDRAWVIEW3D, 0);
allqueue(REDRAWBUTSEDIT, 0);
allqueue(REDRAWOOPS, 0);
+
+ BIF_undo_push("Separate Armature");
}
/* **************** END tools on Editmode Armature **************** */
@@ -1442,9 +1504,10 @@ void delete_armature(void)
for (curBone=G.edbo.first;curBone;curBone=next) {
next=curBone->next;
- if (arm->layer & curBone->layer)
+ if (arm->layer & curBone->layer) {
if (curBone->flag & BONE_SELECTED)
delete_bone(curBone);
+ }
}
diff --git a/source/blender/src/editdeform.c b/source/blender/src/editdeform.c
index a072898327f..5de4c6ed23c 100644
--- a/source/blender/src/editdeform.c
+++ b/source/blender/src/editdeform.c
@@ -33,11 +33,15 @@
#include "MEM_guardedalloc.h"
+#include "DNA_cloth_types.h"
#include "DNA_curve_types.h"
#include "DNA_lattice_types.h"
#include "DNA_mesh_types.h"
#include "DNA_meshdata_types.h"
+#include "DNA_modifier_types.h"
#include "DNA_object_types.h"
+#include "DNA_object_force.h"
+#include "DNA_particle_types.h"
#include "BLI_blenlib.h"
#include "BLI_editVert.h"
@@ -256,6 +260,66 @@ void duplicate_defgroup ( Object *ob )
}
}
+static void del_defgroup_update_users(Object *ob, int id)
+{
+ ExplodeModifierData *emd;
+ ModifierData *md;
+ ParticleSystem *psys;
+ ClothModifierData *clmd;
+ ClothSimSettings *clsim;
+ int a;
+
+ /* these cases don't use names to refer to vertex groups, so when
+ * they get deleted the numbers get out of synce, this corrects that */
+
+ if(ob->soft) {
+ if(ob->soft->vertgroup == id)
+ ob->soft->vertgroup= 0;
+ else if(ob->soft->vertgroup > id)
+ ob->soft->vertgroup--;
+ }
+
+ for(md=ob->modifiers.first; md; md=md->next) {
+ if(md->type == eModifierType_Explode) {
+ emd= (ExplodeModifierData*)md;
+
+ if(emd->vgroup == id)
+ emd->vgroup= 0;
+ else if(emd->vgroup > id)
+ emd->vgroup--;
+ }
+ else if(md->type == eModifierType_Cloth) {
+ clmd= (ClothModifierData*)md;
+ clsim= clmd->sim_parms;
+
+ if(clsim) {
+ if(clsim->vgroup_mass == id)
+ clsim->vgroup_mass= 0;
+ else if(clsim->vgroup_mass > id)
+ clsim->vgroup_mass--;
+
+ if(clsim->vgroup_bend == id)
+ clsim->vgroup_bend= 0;
+ else if(clsim->vgroup_bend > id)
+ clsim->vgroup_bend--;
+
+ if(clsim->vgroup_struct == id)
+ clsim->vgroup_struct= 0;
+ else if(clsim->vgroup_struct > id)
+ clsim->vgroup_struct--;
+ }
+ }
+ }
+
+ for(psys=ob->particlesystem.first; psys; psys=psys->next) {
+ for(a=0; a<PSYS_TOT_VG; a++)
+ if(psys->vgroup[a] == id)
+ psys->vgroup[a]= 0;
+ else if(psys->vgroup[a] > id)
+ psys->vgroup[a]--;
+ }
+}
+
void del_defgroup_in_object_mode ( Object *ob )
{
bDeformGroup *dg;
@@ -291,6 +355,8 @@ void del_defgroup_in_object_mode ( Object *ob )
}
}
+ del_defgroup_update_users(ob, ob->actdef);
+
/* Update the active deform index if necessary */
if (ob->actdef == BLI_countlist(&ob->defbase))
ob->actdef--;
@@ -348,6 +414,8 @@ void del_defgroup (Object *ob)
}
}
+ del_defgroup_update_users(ob, ob->actdef);
+
/* Update the active deform index if necessary */
if (ob->actdef==BLI_countlist(&ob->defbase))
ob->actdef--;
diff --git a/source/blender/src/editface.c b/source/blender/src/editface.c
index c1665332be8..781210cd373 100644
--- a/source/blender/src/editface.c
+++ b/source/blender/src/editface.c
@@ -151,31 +151,6 @@ int facesel_face_pick(Mesh *me, short *mval, unsigned int *index, short rect)
return 1;
}
-/* returns 0 if not found, otherwise 1 */
-static int facesel_edge_pick(Mesh *me, short *mval, unsigned int *index)
-{
- int dist;
- unsigned int min = me->totface + 1;
- unsigned int max = me->totface + me->totedge + 1;
-
- if (me->totedge == 0)
- return 0;
-
- if (G.vd->flag & V3D_NEEDBACKBUFDRAW) {
- check_backbuf();
- persp(PERSP_VIEW);
- }
-
- *index = sample_backbuf_rect(mval, 50, min, max, &dist,0,NULL);
-
- if (*index == 0)
- return 0;
-
- (*index)--;
-
- return 1;
-}
-
/* only operates on the edit object - this is all thats needed at the moment */
static void uv_calc_center_vector(float *result, Object *ob, EditMesh *em)
{
@@ -870,14 +845,14 @@ int minmax_tface(float *min, float *max)
return ok;
}
-#define ME_SEAM_DONE ME_SEAM_LAST /* reuse this flag */
+#define ME_SEAM_DONE 2 /* reuse this flag */
-static float seam_cut_cost(Mesh *me, int e1, int e2, int vert)
+static float edgetag_cut_cost(EditMesh *em, int e1, int e2, int vert)
{
- MVert *v = me->mvert + vert;
- MEdge *med1 = me->medge + e1, *med2 = me->medge + e2;
- MVert *v1 = me->mvert + ((med1->v1 == vert)? med1->v2: med1->v1);
- MVert *v2 = me->mvert + ((med2->v1 == vert)? med2->v2: med2->v1);
+ EditVert *v = EM_get_vert_for_index(vert);
+ EditEdge *eed1 = EM_get_edge_for_index(e1), *eed2 = EM_get_edge_for_index(e2);
+ EditVert *v1 = EM_get_vert_for_index( (eed1->v1->tmp.l == vert)? eed1->v2->tmp.l: eed1->v1->tmp.l );
+ EditVert *v2 = EM_get_vert_for_index( (eed2->v1->tmp.l == vert)? eed2->v2->tmp.l: eed2->v1->tmp.l );
float cost, d1[3], d2[3];
cost = VecLenf(v1->co, v->co);
@@ -891,19 +866,19 @@ static float seam_cut_cost(Mesh *me, int e1, int e2, int vert)
return cost;
}
-static void seam_add_adjacent(Mesh *me, Heap *heap, int mednum, int vertnum, int *nedges, int *edges, int *prevedge, float *cost)
+static void edgetag_add_adjacent(EditMesh *em, Heap *heap, int mednum, int vertnum, int *nedges, int *edges, int *prevedge, float *cost)
{
int startadj, endadj = nedges[vertnum+1];
for (startadj = nedges[vertnum]; startadj < endadj; startadj++) {
int adjnum = edges[startadj];
- MEdge *medadj = me->medge + adjnum;
+ EditEdge *eedadj = EM_get_edge_for_index(adjnum);
float newcost;
- if (medadj->flag & ME_SEAM_DONE)
+ if (eedadj->f2 & ME_SEAM_DONE)
continue;
- newcost = cost[mednum] + seam_cut_cost(me, mednum, adjnum, vertnum);
+ newcost = cost[mednum] + edgetag_cut_cost(em, mednum, adjnum, vertnum);
if (cost[adjnum] > newcost) {
cost[adjnum] = newcost;
@@ -913,59 +888,92 @@ static void seam_add_adjacent(Mesh *me, Heap *heap, int mednum, int vertnum, int
}
}
-static int seam_shortest_path(Mesh *me, int source, int target)
+void edgetag_context_set(EditEdge *eed, int val)
{
+ switch (G.scene->toolsettings->edge_mode) {
+ case EDGE_MODE_TAG_SEAM:
+ if (val) {eed->seam = 255;}
+ else {eed->seam = 0;}
+ break;
+ case EDGE_MODE_TAG_SHARP:
+ if (val) {eed->sharp = 1;}
+ else {eed->sharp = 0;}
+ break;
+ case EDGE_MODE_TAG_CREASE:
+ if (val) {eed->crease = 1.0f;}
+ else {eed->crease = 0.0f;}
+ break;
+ case EDGE_MODE_TAG_BEVEL:
+ if (val) {eed->bweight = 1.0f;}
+ else {eed->bweight = 0.0f;}
+ break;
+ }
+}
+
+int edgetag_context_check(EditEdge *eed)
+{
+ switch (G.scene->toolsettings->edge_mode) {
+ case EDGE_MODE_TAG_SEAM:
+ return eed->seam ? 1 : 0;
+ case EDGE_MODE_TAG_SHARP:
+ return eed->sharp ? 1 : 0;
+ case EDGE_MODE_TAG_CREASE:
+ return eed->crease ? 1 : 0;
+ case EDGE_MODE_TAG_BEVEL:
+ return eed->bweight ? 1 : 0;
+ }
+ return 0;
+}
+
+
+int edgetag_shortest_path(EditEdge *source, EditEdge *target)
+{
+ EditMesh *em = G.editMesh;
+ EditEdge *eed;
+ EditVert *ev;
+
Heap *heap;
- EdgeHash *ehash;
float *cost;
- MEdge *med;
- int a, *nedges, *edges, *prevedge, mednum = -1, nedgeswap = 0;
- MFace *mf;
+ int a, totvert=0, totedge=0, *nedges, *edges, *prevedge, mednum = -1, nedgeswap = 0;
- /* mark hidden edges as done, so we don't use them */
- ehash = BLI_edgehash_new();
- for (a=0, mf=me->mface; a<me->totface; a++, mf++) {
- if (!(mf->flag & ME_HIDE)) {
- BLI_edgehash_insert(ehash, mf->v1, mf->v2, NULL);
- BLI_edgehash_insert(ehash, mf->v2, mf->v3, NULL);
- if (mf->v4) {
- BLI_edgehash_insert(ehash, mf->v3, mf->v4, NULL);
- BLI_edgehash_insert(ehash, mf->v4, mf->v1, NULL);
- }
- else
- BLI_edgehash_insert(ehash, mf->v3, mf->v1, NULL);
- }
+ /* we need the vert */
+ for (ev= em->verts.first, totvert=0; ev; ev= ev->next) {
+ ev->tmp.l = totvert;
+ totvert++;
}
- for (a=0, med=me->medge; a<me->totedge; a++, med++)
- if (!BLI_edgehash_haskey(ehash, med->v1, med->v2))
- med->flag |= ME_SEAM_DONE;
-
- BLI_edgehash_free(ehash, NULL);
+ for (eed= em->edges.first; eed; eed = eed->next) {
+ eed->f2 = 0;
+ if (eed->h) {
+ eed->f2 |= ME_SEAM_DONE;
+ }
+ eed->tmp.l = totedge;
+ totedge++;
+ }
/* alloc */
- nedges = MEM_callocN(sizeof(*nedges)*me->totvert+1, "SeamPathNEdges");
- edges = MEM_mallocN(sizeof(*edges)*me->totedge*2, "SeamPathEdges");
- prevedge = MEM_mallocN(sizeof(*prevedge)*me->totedge, "SeamPathPrevious");
- cost = MEM_mallocN(sizeof(*cost)*me->totedge, "SeamPathCost");
+ nedges = MEM_callocN(sizeof(*nedges)*totvert+1, "SeamPathNEdges");
+ edges = MEM_mallocN(sizeof(*edges)*totedge*2, "SeamPathEdges");
+ prevedge = MEM_mallocN(sizeof(*prevedge)*totedge, "SeamPathPrevious");
+ cost = MEM_mallocN(sizeof(*cost)*totedge, "SeamPathCost");
/* count edges, compute adjacent edges offsets and fill adjacent edges */
- for (a=0, med=me->medge; a<me->totedge; a++, med++) {
- nedges[med->v1+1]++;
- nedges[med->v2+1]++;
+ for (eed= em->edges.first; eed; eed = eed->next) {
+ nedges[eed->v1->tmp.l+1]++;
+ nedges[eed->v2->tmp.l+1]++;
}
- for (a=1; a<me->totvert; a++) {
+ for (a=1; a<totvert; a++) {
int newswap = nedges[a+1];
nedges[a+1] = nedgeswap + nedges[a];
nedgeswap = newswap;
}
nedges[0] = nedges[1] = 0;
- for (a=0, med=me->medge; a<me->totedge; a++, med++) {
- edges[nedges[med->v1+1]++] = a;
- edges[nedges[med->v2+1]++] = a;
+ for (a=0, eed= em->edges.first; eed; a++, eed = eed->next) {
+ edges[nedges[eed->v1->tmp.l+1]++] = a;
+ edges[nedges[eed->v2->tmp.l+1]++] = a;
cost[a] = 1e20f;
prevedge[a] = -1;
@@ -973,100 +981,74 @@ static int seam_shortest_path(Mesh *me, int source, int target)
/* regular dijkstra shortest path, but over edges instead of vertices */
heap = BLI_heap_new();
- BLI_heap_insert(heap, 0.0f, SET_INT_IN_POINTER(source));
- cost[source] = 0.0f;
+ BLI_heap_insert(heap, 0.0f, SET_INT_IN_POINTER(source->tmp.l));
+ cost[source->tmp.l] = 0.0f;
+
+ EM_init_index_arrays(1, 1, 0);
+
while (!BLI_heap_empty(heap)) {
mednum = GET_INT_FROM_POINTER(BLI_heap_popmin(heap));
- med = me->medge + mednum;
+ eed = EM_get_edge_for_index( mednum );
- if (mednum == target)
+ if (mednum == target->tmp.l)
break;
- if (med->flag & ME_SEAM_DONE)
+ if (eed->f2 & ME_SEAM_DONE)
continue;
- med->flag |= ME_SEAM_DONE;
+ eed->f2 |= ME_SEAM_DONE;
- seam_add_adjacent(me, heap, mednum, med->v1, nedges, edges, prevedge, cost);
- seam_add_adjacent(me, heap, mednum, med->v2, nedges, edges, prevedge, cost);
+ edgetag_add_adjacent(em, heap, mednum, eed->v1->tmp.l, nedges, edges, prevedge, cost);
+ edgetag_add_adjacent(em, heap, mednum, eed->v2->tmp.l, nedges, edges, prevedge, cost);
}
+
MEM_freeN(nedges);
MEM_freeN(edges);
MEM_freeN(cost);
BLI_heap_free(heap, NULL);
- for (a=0, med=me->medge; a<me->totedge; a++, med++)
- med->flag &= ~ME_SEAM_DONE;
+ for (eed= em->edges.first; eed; eed = eed->next) {
+ eed->f2 &= ~ME_SEAM_DONE;
+ }
- if (mednum != target) {
+ if (mednum != target->tmp.l) {
MEM_freeN(prevedge);
+ EM_free_index_arrays();
return 0;
}
/* follow path back to source and mark as seam */
- if (mednum == target) {
+ if (mednum == target->tmp.l) {
short allseams = 1;
- mednum = target;
+ mednum = target->tmp.l;
do {
- med = me->medge + mednum;
- if (!(med->flag & ME_SEAM)) {
+ eed = EM_get_edge_for_index( mednum );
+ if (!edgetag_context_check(eed)) {
allseams = 0;
break;
}
mednum = prevedge[mednum];
- } while (mednum != source);
+ } while (mednum != source->tmp.l);
- mednum = target;
+ mednum = target->tmp.l;
do {
- med = me->medge + mednum;
+ eed = EM_get_edge_for_index( mednum );
if (allseams)
- med->flag &= ~ME_SEAM;
+ edgetag_context_set(eed, 0);
else
- med->flag |= ME_SEAM;
+ edgetag_context_set(eed, 1);
mednum = prevedge[mednum];
} while (mednum != -1);
}
MEM_freeN(prevedge);
+ EM_free_index_arrays();
return 1;
}
-static void seam_select(Mesh *me, short *mval, short path)
-{
- unsigned int index = 0;
- MEdge *medge, *med;
- int a, lastindex = -1;
-
- if (!facesel_edge_pick(me, mval, &index))
- return;
-
- for (a=0, med=me->medge; a<me->totedge; a++, med++) {
- if (med->flag & ME_SEAM_LAST) {
- lastindex = a;
- med->flag &= ~ME_SEAM_LAST;
- break;
- }
- }
-
- medge = me->medge + index;
- if (!path || (lastindex == -1) || (index == lastindex) ||
- !seam_shortest_path(me, lastindex, index))
- medge->flag ^= ME_SEAM;
- medge->flag |= ME_SEAM_LAST;
-
- G.f |= G_DRAWSEAMS;
-
- if (G.rt == 8)
- unwrap_lscm(1);
-
- BIF_undo_push("Mark Seam");
-
- object_tface_flags_changed(OBACT, 1);
-}
-
void seam_edgehash_insert_face(EdgeHash *ehash, MFace *mf)
{
BLI_edgehash_insert(ehash, mf->v1, mf->v2, NULL);
@@ -1154,11 +1136,6 @@ void face_select()
me = get_mesh(ob);
getmouseco_areawin(mval);
- if (G.qual & LR_ALTKEY) {
- seam_select(me, mval, (G.qual & LR_SHIFTKEY) != 0);
- return;
- }
-
if (!facesel_face_pick(me, mval, &index, 1)) return;
msel= (((MFace*)me->mface)+index);
diff --git a/source/blender/src/editmesh_lib.c b/source/blender/src/editmesh_lib.c
index eb8d3a12322..6251ba1a650 100644
--- a/source/blender/src/editmesh_lib.c
+++ b/source/blender/src/editmesh_lib.c
@@ -103,6 +103,35 @@ EditFace * EM_get_actFace(int sloppy)
return NULL;
}
+int EM_get_actSelection(EditSelection *ese)
+{
+ EditSelection *ese_last = G.editMesh->selected.last;
+ EditFace *efa = EM_get_actFace(0);
+
+ ese->next = ese->prev = NULL;
+
+ if (ese_last) {
+ if (ese_last->type == EDITFACE) { /* if there is an active face, use it over the last selected face */
+ if (efa) {
+ ese->data = (void *)efa;
+ } else {
+ ese->data = ese_last->data;
+ }
+ ese->type = EDITFACE;
+ } else {
+ ese->data = ese_last->data;
+ ese->type = ese_last->type;
+ }
+ } else if (efa) { /* no */
+ ese->data = (void *)efa;
+ ese->type = EDITFACE;
+ } else {
+ ese->data = NULL;
+ return 0;
+ }
+ return 1;
+}
+
/* ********* Selection History ************ */
static int EM_check_selection(void *data)
{
@@ -851,7 +880,7 @@ void EM_free_data_layer(CustomData *data, int type)
static void add_normal_aligned(float *nor, float *add)
{
- if( INPR(nor, add) < 0.0 )
+ if( INPR(nor, add) < -0.9999f)
VecSubf(nor, nor, add);
else
VecAddf(nor, nor, add);
diff --git a/source/blender/src/editmesh_mods.c b/source/blender/src/editmesh_mods.c
index d1873d1fe56..81d79de08c5 100644
--- a/source/blender/src/editmesh_mods.c
+++ b/source/blender/src/editmesh_mods.c
@@ -92,6 +92,7 @@ editmesh_mods.c, UI level access, no geometry changes
#include "BDR_drawobject.h"
#include "BDR_editobject.h"
+#include "BDR_editface.h"
#include "BSE_drawview.h"
#include "BSE_edit.h"
@@ -2062,6 +2063,7 @@ void loop_multiselect(int looptype)
/* ***************** MAIN MOUSE SELECTION ************** */
/* just to have the functions nice together */
+
static void mouse_mesh_loop(void)
{
EditEdge *eed;
@@ -2070,36 +2072,100 @@ static void mouse_mesh_loop(void)
eed= findnearestedge(&dist);
if(eed) {
+ if (G.scene->toolsettings->edge_mode == EDGE_MODE_SELECT) {
+ if((G.qual & LR_SHIFTKEY)==0) EM_clear_flag_all(SELECT);
- if((G.qual & LR_SHIFTKEY)==0) EM_clear_flag_all(SELECT);
-
- if((eed->f & SELECT)==0) select=1;
- else if(G.qual & LR_SHIFTKEY) select=0;
+ if((eed->f & SELECT)==0) select=1;
+ else if(G.qual & LR_SHIFTKEY) select=0;
- if(G.scene->selectmode & SCE_SELECT_FACE) {
- faceloop_select(eed, select);
- }
- else if(G.scene->selectmode & SCE_SELECT_EDGE) {
- if(G.qual == (LR_CTRLKEY | LR_ALTKEY) || G.qual == (LR_CTRLKEY | LR_ALTKEY |LR_SHIFTKEY))
- edgering_select(eed, select);
- else if(G.qual & LR_ALTKEY)
- edgeloop_select(eed, select);
- }
- else if(G.scene->selectmode & SCE_SELECT_VERTEX) {
- if(G.qual == (LR_CTRLKEY | LR_ALTKEY) || G.qual == (LR_CTRLKEY | LR_ALTKEY |LR_SHIFTKEY))
- edgering_select(eed, select);
- else if(G.qual & LR_ALTKEY)
- edgeloop_select(eed, select);
- }
+ if(G.scene->selectmode & SCE_SELECT_FACE) {
+ faceloop_select(eed, select);
+ }
+ else if(G.scene->selectmode & SCE_SELECT_EDGE) {
+ if(G.qual == (LR_CTRLKEY | LR_ALTKEY) || G.qual == (LR_CTRLKEY | LR_ALTKEY |LR_SHIFTKEY))
+ edgering_select(eed, select);
+ else if(G.qual & LR_ALTKEY)
+ edgeloop_select(eed, select);
+ }
+ else if(G.scene->selectmode & SCE_SELECT_VERTEX) {
+ if(G.qual == (LR_CTRLKEY | LR_ALTKEY) || G.qual == (LR_CTRLKEY | LR_ALTKEY |LR_SHIFTKEY))
+ edgering_select(eed, select);
+ else if(G.qual & LR_ALTKEY)
+ edgeloop_select(eed, select);
+ }
- /* frontbuffer draw of last selected only */
- unified_select_draw(NULL, eed, NULL);
+ /* frontbuffer draw of last selected only */
+ unified_select_draw(NULL, eed, NULL);
- EM_selectmode_flush();
- countall();
- allqueue(REDRAWVIEW3D, 0);
- if (EM_texFaceCheck())
- allqueue(REDRAWIMAGE, 0);
+ EM_selectmode_flush();
+ countall();
+ allqueue(REDRAWVIEW3D, 0);
+ if (EM_texFaceCheck())
+ allqueue(REDRAWIMAGE, 0);
+ } else { /*(G.scene->toolsettings->edge_mode == EDGE_MODE_TAG_*)*/
+ int act = (edgetag_context_check(eed)==0);
+ int path = 0;
+
+ if (G.qual == (LR_SHIFTKEY | LR_ALTKEY) && G.editMesh->selected.last) {
+ EditSelection *ese = G.editMesh->selected.last;
+
+ if(ese && ese->type == EDITEDGE) {
+ EditEdge *eed_act;
+ eed_act = (EditEdge*)ese->data;
+ if (eed_act != eed) {
+ /* If shift is pressed we need to use the last active edge, (if it exists) */
+ if (edgetag_shortest_path(eed_act, eed)) {
+ EM_remove_selection(eed_act, EDITEDGE);
+ EM_select_edge(eed_act, 0);
+ path = 1;
+ }
+ }
+ }
+ }
+ if (path==0) {
+ edgetag_context_set(eed, act); /* switch the edge option */
+ }
+
+ if (act) {
+ if ((eed->f & SELECT)==0) {
+ EM_select_edge(eed, 1);
+ EM_selectmode_flush();
+ countall();
+ }
+ /* even if this is selected it may not be in the selection list */
+ EM_store_selection(eed, EDITEDGE);
+ } else {
+ if (eed->f & SELECT) {
+ EM_select_edge(eed, 0);
+ /* logic is differnt from above here since if this was selected we dont know if its in the selection list or not */
+ EM_remove_selection(eed, EDITEDGE);
+
+ EM_selectmode_flush();
+ countall();
+ }
+ }
+
+ switch (G.scene->toolsettings->edge_mode) {
+ case EDGE_MODE_TAG_SEAM:
+ G.f |= G_DRAWSEAMS;
+ break;
+ case EDGE_MODE_TAG_SHARP:
+ G.f |= G_DRAWSHARP;
+ break;
+ case EDGE_MODE_TAG_CREASE:
+ G.f |= G_DRAWCREASES;
+ break;
+ case EDGE_MODE_TAG_BEVEL:
+ G.f |= G_DRAWBWEIGHTS;
+ break;
+ }
+
+ unified_select_draw(NULL, eed, NULL);
+
+ DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA);
+ allqueue(REDRAWVIEW3D, 0);
+ }
+
}
}
@@ -2482,6 +2548,10 @@ void hide_mesh(int swap)
efa->e2->f1 |= a;
efa->e3->f1 |= a;
if(efa->e4) efa->e4->f1 |= a;
+ /* When edges are not delt with in their own loop, we need to explicitly re-selct select edges that are joined to unselected faces */
+ if (swap && (G.scene->selectmode == SCE_SELECT_FACE) && (efa->f & SELECT)) {
+ EM_select_face(efa, 1);
+ }
}
}
@@ -2685,7 +2755,7 @@ void reveal_tface_uv(void)
for (efa= em->faces.first; efa; efa= efa->next) {
if (!(efa->h) && !(efa->f & SELECT)) {
tface= CustomData_em_get(&em->fdata, efa->data, CD_MTFACE);
- efa->f |= SELECT;
+ EM_select_face(efa, 1);
tface->flag |= TF_SEL1|TF_SEL2|TF_SEL3|TF_SEL4;
}
}
diff --git a/source/blender/src/editobject.c b/source/blender/src/editobject.c
index cdc38ab1d2c..4029e031b63 100644
--- a/source/blender/src/editobject.c
+++ b/source/blender/src/editobject.c
@@ -1887,6 +1887,7 @@ void docenter(int centermode)
recalc_editnormals();
tot_change++;
+ DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA);
}
}
@@ -3133,9 +3134,15 @@ void flip_subdivison(int level)
mode= eModifierMode_Render|eModifierMode_Realtime;
if(level == -1) {
- for(base= G.scene->base.first; base; base= base->next)
- if(((level==-1) && (TESTBASE(base))) || (TESTBASELIB(base)))
- object_has_subdivision_particles(base->object, &havesubdiv, &havepart, 0);
+ if (G.obedit) {
+ object_has_subdivision_particles(G.obedit, &havesubdiv, &havepart, 0);
+ } else {
+ for(base= G.scene->base.first; base; base= base->next) {
+ if(((level==-1) && (TESTBASE(base))) || (TESTBASELIB(base))) {
+ object_has_subdivision_particles(base->object, &havesubdiv, &havepart, 0);
+ }
+ }
+ }
}
else
havesubdiv= 1;
@@ -3149,10 +3156,16 @@ void flip_subdivison(int level)
}
else if(havepart)
particles= 1;
-
- for(base= G.scene->base.first; base; base= base->next)
- if(((level==-1) && (TESTBASE(base))) || (TESTBASELIB(base)))
- object_flip_subdivison_particles(base->object, &set, level, mode, particles, 0);
+
+ if (G.obedit) {
+ object_flip_subdivison_particles(G.obedit, &set, level, mode, particles, 0);
+ } else {
+ for(base= G.scene->base.first; base; base= base->next) {
+ if(((level==-1) && (TESTBASE(base))) || (TESTBASELIB(base))) {
+ object_flip_subdivison_particles(base->object, &set, level, mode, particles, 0);
+ }
+ }
+ }
countall();
allqueue(REDRAWVIEW3D, 0);
diff --git a/source/blender/src/editseq.c b/source/blender/src/editseq.c
index bd1c265f2a1..50bd4d7c7f3 100644
--- a/source/blender/src/editseq.c
+++ b/source/blender/src/editseq.c
@@ -792,14 +792,13 @@ void mouse_select_seq(void)
/* select timeline marker */
if (G.qual & LR_SHIFTKEY) {
oldflag= marker->flag;
- deselect_markers(0, 0);
-
if (oldflag & SELECT)
marker->flag &= ~SELECT;
else
marker->flag |= SELECT;
}
else {
+ deselect_markers(0, 0);
marker->flag |= SELECT;
}
allqueue(REDRAWMARKER, 0);
@@ -3809,9 +3808,15 @@ void seq_mute_sel(int mute) {
if(!ed) return;
for(seq= ed->seqbasep->first; seq; seq= seq->next) {
- if ((seq->flag & SELECT) && (seq->flag & SEQ_LOCK)==0) {
- if (mute) seq->flag |= SEQ_MUTE;
- else seq->flag &= ~SEQ_MUTE;
+ if ((seq->flag & SEQ_LOCK)==0) {
+ if (mute==-1) { /* hide unselected */
+ if ((seq->flag & SELECT)==0) {
+ seq->flag |= SEQ_MUTE;
+ }
+ } else if (seq->flag & SELECT) {
+ if (mute) seq->flag |= SEQ_MUTE;
+ else seq->flag &= ~SEQ_MUTE;
+ }
}
}
BIF_undo_push(mute?"Mute Strips, Sequencer":"UnMute Strips, Sequencer");
diff --git a/source/blender/src/editsima.c b/source/blender/src/editsima.c
index f5cf29528f3..5f8485267bc 100644
--- a/source/blender/src/editsima.c
+++ b/source/blender/src/editsima.c
@@ -1217,7 +1217,7 @@ void snap_menu_sima(void)
short event;
if( is_uv_tface_editing_allowed()==0 || !G.v2d) return; /* !G.v2d should never happen */
- event = pupmenu("Snap %t|Selection -> Pixels%x1|Selection -> Cursor%x2|Selection -> Adjacent Unselected%x3|Cursor -> Pixel%x4|Cursor -> Selection%x5");
+ event = pupmenu("Snap %t|Selection -> Pixels%x1|Selection -> Cursor%x2|Selection -> Adjacent Unselected%x3|Cursor -> Selection%x4|Cursor -> Pixel%x5");
switch (event) {
case 1:
if (snap_uv_sel_to_pixels()) {
@@ -1238,13 +1238,13 @@ void snap_menu_sima(void)
}
break;
case 4:
- snap_uv_curs_to_pixels();
- scrarea_queue_winredraw(curarea);
- break;
- case 5:
if (snap_uv_curs_to_sel())
allqueue(REDRAWIMAGE, 0);
break;
+ case 5:
+ snap_uv_curs_to_pixels();
+ scrarea_queue_winredraw(curarea);
+ break;
}
}
diff --git a/source/blender/src/header_image.c b/source/blender/src/header_image.c
index bd170d646eb..a93e79fa773 100644
--- a/source/blender/src/header_image.c
+++ b/source/blender/src/header_image.c
@@ -1208,7 +1208,7 @@ void image_buttons(void)
} else {
uiBlockBeginAlign(block);
- uiDefIconButBitI(block, TOGN, SI_SELACTFACE, B_REDR, ICON_VERTEXSEL, xco,0,XIC,YIC, &G.sima->flag, 1.0, 0.0, 0, 0, "UV Vertex select mode)");
+ uiDefIconButBitI(block, TOGN, SI_SELACTFACE, B_REDR, ICON_VERTEXSEL, xco,0,XIC,YIC, &G.sima->flag, 1.0, 0.0, 0, 0, "UV Vertex select mode");
xco+= XIC;
uiDefIconButBitI(block, TOG, SI_SELACTFACE, B_REDR, ICON_FACESEL, xco,0,XIC,YIC, &G.sima->flag, 0, 0, 0, 0, "UV Face select mode");
xco+= XIC+8;
diff --git a/source/blender/src/header_seq.c b/source/blender/src/header_seq.c
index 6648520cfff..393830a61cf 100644
--- a/source/blender/src/header_seq.c
+++ b/source/blender/src/header_seq.c
@@ -75,13 +75,13 @@ static void do_seq_viewmenu(void *arg, int event)
switch(event)
{
case 1: /* Play Back Animation */
- play_anim(0);
- break;
+ play_anim(0);
+ break;
case 2: /* Play Back Animation in All */
- play_anim(1);
- break;
+ play_anim(1);
+ break;
case 3:
- do_seq_buttons(B_SEQHOME);
+ seq_home();
break;
case 4:
if(last_seq) {
@@ -194,6 +194,10 @@ static void do_seq_selectmenu(void *arg, int event)
case 7:
select_linked_seq(2);
break;
+ case 8:
+ deselect_markers(1, 0);
+ allqueue(REDRAWMARKER, 0);
+ break;
}
}
@@ -215,7 +219,9 @@ static uiBlock *seq_selectmenu(void *arg_unused)
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Border Select|B", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 0, "");
uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Linked|Ctrl L", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 7, "");
- uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select/Deselect All|A", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 1, "");
+ uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select/Deselect All Strips|A", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 1, "");
+ uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select/Deselect All Markers|Ctrl A", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 8, "");
+
if(curarea->headertype==HEADERTOP) {
uiBlockSetDirection(block, UI_DOWN);
@@ -444,6 +450,9 @@ static void do_seq_editmenu(void *arg, int event)
seq_mute_sel(0);
break;
case 22:
+ seq_mute_sel(0);
+ break;
+ case 23:
seq_cut(CFRA, 0);
break;
}
@@ -468,7 +477,7 @@ static uiBlock *seq_editmenu(void *arg_unused)
uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Cut (hard) at Current Frame|K", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 13, "");
- uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Cut (soft) at Current Frame|Shift-K", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 22, "");
+ uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Cut (soft) at Current Frame|Shift-K", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 23, "");
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Separate Images to Strips|Y", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 16, "");
uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
@@ -519,6 +528,7 @@ static uiBlock *seq_editmenu(void *arg_unused)
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Unlock Strips...|Alt-Shift L", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 19, "");
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Mute Strips...|H", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 20, "");
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Unmute Strips...|Alt H", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 21, "");
+ uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Mute Deselected Strips...|Shift H", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 22, "");
if(curarea->headertype==HEADERTOP) {
@@ -610,21 +620,13 @@ static uiBlock *seq_markermenu(void *arg_unused)
void do_seq_buttons(short event)
{
Editing *ed;
- SpaceSeq *sseq= curarea->spacedata.first;
ed= G.scene->ed;
if(ed==0) return;
switch(event) {
- case B_SEQHOME:
- if(sseq->mainb)
- seq_reset_imageofs(sseq);
- else {
- G.v2d->cur= G.v2d->tot;
- test_view2d(G.v2d, curarea->winx, curarea->winy);
- view2d_do_locks(curarea, V2D_LOCK_COPY);
- }
- scrarea_queue_winredraw(curarea);
+ case B_HOME:
+ seq_home();
break;
case B_SEQCLEAR:
free_imbuf_seq();
diff --git a/source/blender/src/header_view3d.c b/source/blender/src/header_view3d.c
index 45440965859..cb3cfce62c3 100644
--- a/source/blender/src/header_view3d.c
+++ b/source/blender/src/header_view3d.c
@@ -3964,7 +3964,7 @@ static uiBlock *view3d_edit_armaturemenu(void *arg_unused)
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Fill Between Joints|F", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 18, "");
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Delete|X", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
- uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Separate|Ctrl Shift P", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 22, "");
+ uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Separate|Ctrl Alt P", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 22, "");
uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
diff --git a/source/blender/src/interface.c b/source/blender/src/interface.c
index f324bf3b053..7af6b67bfa3 100644
--- a/source/blender/src/interface.c
+++ b/source/blender/src/interface.c
@@ -472,7 +472,7 @@ static int ui_but_copy_paste(uiBut *but, char mode)
if(mode=='v' && but->lock) return 0;
poin= but->poin;
- if ELEM3(but->type, NUM, NUMSLI, HSVSLI) {
+ if ELEM4(but->type, NUM, NUMABS, NUMSLI, HSVSLI) {
if(poin==NULL);
else if(mode=='c') {
@@ -2100,7 +2100,8 @@ static int ui_act_as_text_but(uiBut *but)
}
if(but->pointype!=FLO) value= (int)value;
-
+
+ if(but->type==NUMABS) value= fabs(value);
if(value<min) value= min;
if(value>max) value= max;
@@ -3934,6 +3935,7 @@ static int ui_do_button(uiBlock *block, uiBut *but, uiEvent *uevent)
break;
case NUM:
+ case NUMABS:
if(uevent->val) retval= ui_do_but_NUM(but);
break;
@@ -4253,13 +4255,13 @@ static void ui_but_next_edittext(uiBlock *block)
but->flag &= ~(UI_ACTIVE|UI_SELECT);
for(but= actbut->next; but; but= but->next) {
- if(ELEM4(but->type, TEX, NUM, NUMSLI, HSVSLI)) {
+ if(ELEM5(but->type, TEX, NUM, NUMABS, NUMSLI, HSVSLI)) {
but->flag |= UI_ACTIVE;
return;
}
}
for(but= block->buttons.first; but!=actbut; but= but->next) {
- if(ELEM4(but->type, TEX, NUM, NUMSLI, HSVSLI)) {
+ if(ELEM5(but->type, TEX, NUM, NUMABS, NUMSLI, HSVSLI)) {
but->flag |= UI_ACTIVE;
return;
}
@@ -4282,13 +4284,13 @@ static void ui_but_prev_edittext(uiBlock *block)
but->flag &= ~(UI_ACTIVE|UI_SELECT);
for(but= actbut->prev; but; but= but->prev) {
- if(ELEM4(but->type, TEX, NUM, NUMSLI, HSVSLI)) {
+ if(ELEM5(but->type, TEX, NUM, NUMABS, NUMSLI, HSVSLI)) {
but->flag |= UI_ACTIVE;
return;
}
}
for(but= block->buttons.last; but!=actbut; but= but->prev) {
- if(ELEM4(but->type, TEX, NUM, NUMSLI, HSVSLI)) {
+ if(ELEM5(but->type, TEX, NUM, NUMABS, NUMSLI, HSVSLI)) {
but->flag |= UI_ACTIVE;
return;
}
@@ -4643,7 +4645,7 @@ static int ui_do_block(uiBlock *block, uiEvent *uevent, int movemouse_quit)
//Really nasty... to update the num button from the same butblock
for(bt= block->buttons.first; bt; bt= bt->next)
{
- if(bt->type == NUM) {
+ if(ELEM(bt->type, NUM, NUMABS)) {
ui_check_but(bt);
ui_draw_but(bt);
}
@@ -4669,7 +4671,7 @@ static int ui_do_block(uiBlock *block, uiEvent *uevent, int movemouse_quit)
for(bt= block->buttons.first; bt; bt= bt->next)
{
- if(bt->type == NUM) {
+ if(ELEM(bt->type, NUM, NUMABS)) {
ui_check_but(bt);
ui_draw_but(bt);
}
@@ -5442,8 +5444,15 @@ void ui_check_but(uiBut *but)
case HSVSLI:
value= ui_get_but_val(but);
if(value < but->min) value= but->min;
- if(value > but->max) value= but->max;
- ui_set_but_val(but, value);
+ if(value > but->max) value= but->max;
+ ui_set_but_val(but, value);
+ break;
+
+ case NUMABS:
+ value= fabs( ui_get_but_val(but) );
+ if(value < but->min) value= but->min;
+ if(value > but->max) value= but->max;
+ ui_set_but_val(but, value);
break;
case ICONTOG:
@@ -5485,6 +5494,7 @@ void ui_check_but(uiBut *but)
case NUM:
case NUMSLI:
case HSVSLI:
+ case NUMABS:
value= ui_get_but_val(but);
@@ -5574,7 +5584,7 @@ void ui_check_but(uiBut *but)
but->ofs= 0;
while(but->strwidth > (int)okwidth ) {
- if ELEM(but->type, NUM, TEX) { // only these cut off left
+ if ELEM3(but->type, NUM, NUMABS, TEX) { // only these cut off left
but->ofs++;
but->strwidth= but->aspect*BIF_GetStringWidth(but->font, but->drawstr+but->ofs, transopts);
@@ -5618,6 +5628,7 @@ static int ui_auto_themecol(uiBut *but)
case SLI:
case NUM:
case NUMSLI:
+ case NUMABS:
case HSVSLI:
return TH_BUT_NUM;
case TEX:
@@ -5894,7 +5905,7 @@ static uiBut *ui_def_but(uiBlock *block, int type, int retval, char *str, short
but->pos= -1; /* cursor invisible */
- if(but->type==NUM) { /* add a space to name */
+ if(ELEM(but->type, NUM, NUMABS)) { /* add a space to name */
slen= strlen(but->str);
if(slen>0 && slen<UI_MAX_NAME_STR-2) {
if(but->str[slen-1]!=' ') {
diff --git a/source/blender/src/interface_draw.c b/source/blender/src/interface_draw.c
index 83a3c12bae7..83f1221b1fb 100644
--- a/source/blender/src/interface_draw.c
+++ b/source/blender/src/interface_draw.c
@@ -846,6 +846,7 @@ static void ui_default_flat(int type, int colorid, float asp, float x1, float y1
/* *** EXTRA DRAWING FOR SPECIFIC CONTROL TYPES *** */
switch(type) {
case NUM:
+ case NUMABS:
/* SIDE ARROWS */
/* left */
if(flag & UI_SELECT) {
@@ -872,11 +873,12 @@ static void ui_default_slider(int colorid, float fac, float aspect, float x1, fl
if(flag & UI_SELECT)
BIF_ThemeColorShade(TH_BUT_NUM, -5);
- else
+ else {
if(flag & UI_ACTIVE)
BIF_ThemeColorShade(TH_BUT_NUM, +35);
else
BIF_ThemeColorShade(TH_BUT_NUM, +25);
+ }
glRectf(x1, ymid-yc, x2, ymid+yc);
@@ -943,6 +945,7 @@ static void ui_draw_default(int type, int colorid, float aspect, float x1, float
case TEX:
case IDPOIN:
case NUM:
+ case NUMABS:
ui_default_flat(type, colorid, aspect, x1, y1, x2, y2, flag);
break;
case ICONROW:
@@ -1026,6 +1029,7 @@ static void ui_draw_oldskool(int type, int colorid, float asp, float x1, float y
/* special type decorations */
switch(type) {
case NUM:
+ case NUMABS:
if(flag & UI_SELECT) BIF_ThemeColorShade(colorid, -60);
else BIF_ThemeColorShade(colorid, -30);
ui_default_num_arrows(x1, y1, x2, y2);
@@ -1176,6 +1180,7 @@ static void ui_draw_round(int type, int colorid, float asp, float x1, float y1,
/* special type decorations */
switch(type) {
case NUM:
+ case NUMABS:
BIF_ThemeColorShade(colorid, curshade-60);
ui_default_num_arrows(x1, y1, x2, y2);
break;
@@ -1285,6 +1290,7 @@ static void ui_draw_minimal(int type, int colorid, float asp, float x1, float y1
/* special type decorations */
switch(type) {
case NUM:
+ case NUMABS:
if(flag & UI_SELECT) BIF_ThemeColorShade(colorid, -60);
else BIF_ThemeColorShade(colorid, -30);
ui_default_num_arrows(x1, y1, x2, y2);
diff --git a/source/blender/src/parametrizer.c b/source/blender/src/parametrizer.c
index a643f37ec2a..096629b01ec 100644
--- a/source/blender/src/parametrizer.c
+++ b/source/blender/src/parametrizer.c
@@ -389,7 +389,7 @@ static void p_chart_topological_sanity_check(PChart *chart)
/* Loading / Flushing */
-static void p_vert_load_pin_select_uvs(PVert *v)
+static void p_vert_load_pin_select_uvs(PHandle *handle, PVert *v)
{
PEdge *e;
int nedges = 0, npins = 0;
@@ -404,13 +404,13 @@ static void p_vert_load_pin_select_uvs(PVert *v)
v->flag |= PVERT_SELECT;
if (e->flag & PEDGE_PIN) {
- pinuv[0] += e->orig_uv[0];
- pinuv[1] += e->orig_uv[1];
+ pinuv[0] += e->orig_uv[0]*handle->aspx;
+ pinuv[1] += e->orig_uv[1]*handle->aspy;
npins++;
}
else {
- v->uv[0] += e->orig_uv[0];
- v->uv[1] += e->orig_uv[1];
+ v->uv[0] += e->orig_uv[0]*handle->aspx;
+ v->uv[1] += e->orig_uv[1]*handle->aspy;
}
nedges++;
@@ -430,27 +430,27 @@ static void p_vert_load_pin_select_uvs(PVert *v)
}
}
-static void p_flush_uvs(PChart *chart)
+static void p_flush_uvs(PHandle *handle, PChart *chart)
{
PEdge *e;
for (e=chart->edges; e; e=e->nextlink) {
if (e->orig_uv) {
- e->orig_uv[0] = e->vert->uv[0];
- e->orig_uv[1] = e->vert->uv[1];
+ e->orig_uv[0] = e->vert->uv[0]/handle->aspx;
+ e->orig_uv[1] = e->vert->uv[1]/handle->aspy;
}
}
}
-static void p_flush_uvs_blend(PChart *chart, float blend)
+static void p_flush_uvs_blend(PHandle *handle, PChart *chart, float blend)
{
PEdge *e;
float invblend = 1.0f - blend;
for (e=chart->edges; e; e=e->nextlink) {
if (e->orig_uv) {
- e->orig_uv[0] = blend*e->old_uv[0] + invblend*e->vert->uv[0];
- e->orig_uv[1] = blend*e->old_uv[1] + invblend*e->vert->uv[1];
+ e->orig_uv[0] = blend*e->old_uv[0] + invblend*e->vert->uv[0]/handle->aspx;
+ e->orig_uv[1] = blend*e->old_uv[1] + invblend*e->vert->uv[1]/handle->aspy;
}
}
}
@@ -2813,7 +2813,7 @@ static void p_chart_lscm_begin(PChart *chart, PBool live, PBool abf)
}
}
-static PBool p_chart_lscm_solve(PChart *chart)
+static PBool p_chart_lscm_solve(PHandle *handle, PChart *chart)
{
PVert *v, *pin1 = chart->u.lscm.pin1, *pin2 = chart->u.lscm.pin2;
PFace *f;
@@ -2830,7 +2830,7 @@ static PBool p_chart_lscm_solve(PChart *chart)
for (v=chart->verts; v; v=v->nextlink)
if (v->flag & PVERT_PIN)
- p_vert_load_pin_select_uvs(v); /* reload for live */
+ p_vert_load_pin_select_uvs(handle, v); /* reload for live */
if (chart->u.lscm.pin1) {
nlLockVariable(2*pin1->u.id);
@@ -3860,6 +3860,8 @@ ParamHandle *param_construct_begin()
handle->construction_chart = p_chart_new(handle);
handle->state = PHANDLE_STATE_ALLOCATED;
handle->arena = BLI_memarena_new((1<<16));
+ handle->aspx = 1.0f;
+ handle->aspy = 1.0f;
handle->hash_verts = phash_new((PHashLink**)&handle->construction_chart->verts, 1);
handle->hash_edges = phash_new((PHashLink**)&handle->construction_chart->edges, 1);
@@ -3868,6 +3870,14 @@ ParamHandle *param_construct_begin()
return (ParamHandle*)handle;
}
+void param_aspect_ratio(ParamHandle *handle, float aspx, float aspy)
+{
+ PHandle *phandle = (PHandle*)handle;
+
+ phandle->aspx = aspx;
+ phandle->aspy = aspy;
+}
+
void param_delete(ParamHandle *handle)
{
PHandle *phandle = (PHandle*)handle;
@@ -3968,7 +3978,7 @@ void param_construct_end(ParamHandle *handle, ParamBool fill, ParamBool impl)
p_chart_fill_boundaries(chart, outer);
for (v=chart->verts; v; v=v->nextlink)
- p_vert_load_pin_select_uvs(v);
+ p_vert_load_pin_select_uvs(handle, v);
}
phandle->ncharts = j;
@@ -4005,7 +4015,7 @@ void param_lscm_solve(ParamHandle *handle)
chart = phandle->charts[i];
if (chart->u.lscm.context) {
- result = p_chart_lscm_solve(chart);
+ result = p_chart_lscm_solve(phandle, chart);
if (result && !(chart->flag & PCHART_NOPACK))
p_chart_rotate_minimum_area(chart);
@@ -4128,6 +4138,9 @@ void param_pack(ParamHandle *handle)
if (phandle->ncharts == 0)
return;
+ if(phandle->aspx != phandle->aspy)
+ param_scale(handle, 1.0f/phandle->aspx, 1.0f/phandle->aspy);
+
/* we may not use all these boxes */
boxarray = MEM_mallocN( phandle->ncharts*sizeof(boxPack), "boxPack box");
@@ -4170,8 +4183,10 @@ void param_pack(ParamHandle *handle)
p_chart_uv_scale(chart, scale);
}
MEM_freeN(boxarray);
-}
+ if(phandle->aspx != phandle->aspy)
+ param_scale(handle, phandle->aspx, phandle->aspy);
+}
void param_average(ParamHandle *handle)
{
@@ -4255,9 +4270,9 @@ void param_flush(ParamHandle *handle)
continue;
if (phandle->blend == 0.0f)
- p_flush_uvs(chart);
+ p_flush_uvs(phandle, chart);
else
- p_flush_uvs_blend(chart, phandle->blend);
+ p_flush_uvs_blend(phandle, chart, phandle->blend);
}
}
diff --git a/source/blender/src/parametrizer.h b/source/blender/src/parametrizer.h
index 766d461416d..80fab110d5f 100644
--- a/source/blender/src/parametrizer.h
+++ b/source/blender/src/parametrizer.h
@@ -26,6 +26,8 @@ typedef enum ParamBool {
ParamHandle *param_construct_begin();
+void param_aspect_ratio(ParamHandle *handle, float aspx, float aspy);
+
void param_face_add(ParamHandle *handle,
ParamKey key,
int nverts,
diff --git a/source/blender/src/parametrizer_intern.h b/source/blender/src/parametrizer_intern.h
index 6114ecc8696..f7a32816b33 100644
--- a/source/blender/src/parametrizer_intern.h
+++ b/source/blender/src/parametrizer_intern.h
@@ -184,6 +184,8 @@ typedef struct PHandle {
PChart **charts;
int ncharts;
+ float aspx, aspy;
+
RNG *rng;
float blend;
} PHandle;
diff --git a/source/blender/src/sequence.c b/source/blender/src/sequence.c
index b4d3a6c3ce2..efb52e696ab 100644
--- a/source/blender/src/sequence.c
+++ b/source/blender/src/sequence.c
@@ -426,11 +426,9 @@ void reload_sequence_new_file(Sequence * seq)
if (seq->type != SEQ_SCENE && seq->type != SEQ_META &&
seq->type != SEQ_IMAGE) {
- strncpy(str, seq->strip->dir, FILE_MAXDIR-1);
- strncat(str, seq->strip->stripdata->name, FILE_MAXFILE-1);
-
+ BLI_join_dirfile(str, seq->strip->dir, seq->strip->stripdata->name);
BLI_convertstringcode(str, G.sce);
- BLI_convertstringframe(str, G.scene->r.cfra); /* TODO - is this needed? */
+ BLI_convertstringframe(str, G.scene->r.cfra);
}
@@ -1707,9 +1705,7 @@ static void do_build_seq_ibuf(Sequence * seq, TStripElem *se, int cfra,
} else if(seq->type == SEQ_IMAGE) {
if(se->ok == STRIPELEM_OK && se->ibuf == 0) {
StripElem * s_elem = give_stripelem(seq, cfra);
-
- strncpy(name, seq->strip->dir, FILE_MAXDIR-1);
- strncat(name, s_elem->name, FILE_MAXFILE-1);
+ BLI_join_dirfile(name, seq->strip->dir, s_elem->name);
BLI_convertstringcode(name, G.sce);
BLI_convertstringframe(name, G.scene->r.cfra);
if (!build_proxy_run) {
@@ -1738,8 +1734,7 @@ static void do_build_seq_ibuf(Sequence * seq, TStripElem *se, int cfra,
if (se->ibuf == 0) {
if(seq->anim==0) {
- strncpy(name, seq->strip->dir, FILE_MAXDIR-1);
- strncat(name, seq->strip->stripdata->name, FILE_MAXFILE-1);
+ BLI_join_dirfile(name, seq->strip->dir, seq->strip->stripdata->name);
BLI_convertstringcode(name, G.sce);
BLI_convertstringframe(name, G.scene->r.cfra);
diff --git a/source/blender/src/space.c b/source/blender/src/space.c
index e396e078739..cc7f4322ed9 100644
--- a/source/blender/src/space.c
+++ b/source/blender/src/space.c
@@ -1194,7 +1194,14 @@ static void winqreadview3dspace(ScrArea *sa, void *spacedata, BWinEvent *evt)
if(event==UI_BUT_EVENT) do_butspace(val); /* temporal, view3d deserves own queue? */
/* we consider manipulator a button, defaulting to leftmouse */
- if(event==LEFTMOUSE) if(BIF_do_manipulator(sa)) return;
+ if(event==LEFTMOUSE) {
+ /* run any view3d event handler script links */
+ if (event && sa->scriptlink.totscript)
+ if (BPY_do_spacehandlers(sa, event, SPACEHANDLER_VIEW3D_EVENT))
+ return; /* return if event was processed (swallowed) by handler(s) */
+
+ if(BIF_do_manipulator(sa)) return;
+ }
/* swap mouse buttons based on user preference */
if (U.flag & USER_LMOUSESELECT) {
@@ -1745,25 +1752,42 @@ static void winqreadview3dspace(ScrArea *sa, void *spacedata, BWinEvent *evt)
if ( (G.obedit) && (G.obedit->type==OB_MESH) )
select_faces_by_numverts(5);
}
+
+ else if(G.qual==LR_CTRLKEY) {}
else do_layer_buttons(4);
break;
case SIXKEY:
- do_layer_buttons(5); break;
+ if(G.qual==LR_CTRLKEY) {}
+ else do_layer_buttons(5);
+ break;
case SEVENKEY:
- do_layer_buttons(6); break;
+ if(G.qual==LR_CTRLKEY) {}
+ else do_layer_buttons(6);
+ break;
case EIGHTKEY:
- do_layer_buttons(7); break;
+ if(G.qual==LR_CTRLKEY) {}
+ else do_layer_buttons(7);
+ break;
case NINEKEY:
- do_layer_buttons(8); break;
+ if(G.qual==LR_CTRLKEY) {}
+ else do_layer_buttons(8);
+ break;
case ZEROKEY:
- do_layer_buttons(9); break;
+ if(G.qual==LR_CTRLKEY) {}
+ else do_layer_buttons(9);
+ break;
case MINUSKEY:
- do_layer_buttons(10); break;
+ if(G.qual==LR_CTRLKEY) {}
+ else do_layer_buttons(10);
+ break;
case EQUALKEY:
- do_layer_buttons(11); break;
+ if(G.qual==LR_CTRLKEY) {}
+ else do_layer_buttons(11);
+ break;
case ACCENTGRAVEKEY:
- do_layer_buttons(-1); break;
+ do_layer_buttons(-1);
+ break;
case SPACEKEY:
if(G.qual == LR_CTRLKEY) {
@@ -2387,7 +2411,7 @@ static void winqreadview3dspace(ScrArea *sa, void *spacedata, BWinEvent *evt)
clear_bone_parent();
else if((G.qual==0) && (G.obedit->type==OB_ARMATURE))
select_bone_parent();
- else if((G.qual==(LR_CTRLKEY|LR_SHIFTKEY)) && (G.obedit->type==OB_ARMATURE))
+ else if((G.qual==(LR_CTRLKEY|LR_ALTKEY)) && (G.obedit->type==OB_ARMATURE))
separate_armature();
else if((G.qual==0) && G.obedit->type==OB_MESH)
separatemenu();
@@ -4892,7 +4916,7 @@ static void winqreadseqspace(ScrArea *sa, void *spacedata, BWinEvent *evt)
break;
case HOMEKEY:
if((G.qual==0))
- do_seq_buttons(B_SEQHOME);
+ seq_home();
break;
case PADPERIOD:
if(last_seq) {
@@ -5042,8 +5066,10 @@ static void winqreadseqspace(ScrArea *sa, void *spacedata, BWinEvent *evt)
case HKEY: /* hide==mute? - not that nice but MKey us used for meta :/ */
if((G.qual==0)) {
seq_mute_sel(1);
- } else if((G.qual==LR_ALTKEY)) {
+ } else if(G.qual==LR_ALTKEY) {
seq_mute_sel(0);
+ } else if(G.qual==LR_SHIFTKEY) {
+ seq_mute_sel(-1);
}
break;
case XKEY:
@@ -5054,7 +5080,11 @@ static void winqreadseqspace(ScrArea *sa, void *spacedata, BWinEvent *evt)
del_seq();
}
break;
- }
+ case PAD1: case PAD2: case PAD4: case PAD8:
+ seq_viewzoom(event, (G.qual & LR_SHIFTKEY)==0);
+ doredraw= 1;
+ break;
+ }
}
if(doredraw) scrarea_queue_winredraw(curarea);
diff --git a/source/blender/src/splash.jpg.c b/source/blender/src/splash.jpg.c
index ecaeed2fd51..b10640026b8 100644
--- a/source/blender/src/splash.jpg.c
+++ b/source/blender/src/splash.jpg.c
@@ -1,2109 +1,1831 @@
/* DataToC output of file <splash_jpg> */
-int datatoc_splash_jpg_size= 67325;
+int datatoc_splash_jpg_size= 58412;
char datatoc_splash_jpg[]= {
-255,216,255,224, 0, 16, 74, 70, 73, 70, 0, 1, 2, 0, 0,100, 0,100, 0, 0,255,236, 0, 17, 68,117, 99,107,121,
- 0, 1, 0, 4, 0, 0, 0, 85, 0, 0,255,238, 0, 14, 65,100,111, 98,101, 0,100,192, 0, 0, 0, 1,255,219, 0,132, 0, 2,
- 1, 1, 1, 1, 1, 2, 1, 1, 2, 3, 2, 1, 2, 3, 3, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 4, 4, 4,
- 4, 3, 5, 5, 5, 6, 6, 6, 5, 5, 7, 7, 8, 8, 7, 7, 10, 10, 10, 10, 10, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 1,
- 2, 2, 2, 4, 3, 4, 7, 5, 5, 7, 10, 8, 7, 8, 10, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+255,216,255,224, 0, 16, 74, 70, 73, 70, 0, 1,
+ 2, 0, 0,100, 0,100, 0, 0,255,236, 0, 17, 68,117, 99,107,121, 0, 1, 0, 4, 0, 0, 0, 85, 0, 0,255,238, 0, 14, 65,
+100,111, 98,101, 0,100,192, 0, 0, 0, 1,255,219, 0,132, 0, 2, 1, 1, 1, 1, 1, 2, 1, 1, 2, 3, 2, 1, 2, 3, 3,
+ 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 4, 4, 4, 4, 3, 5, 5, 5, 6, 6, 6, 5, 5, 7, 7, 8, 8, 7,
+ 7, 10, 10, 10, 10, 10, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 1, 2, 2, 2, 4, 3, 4, 7, 5, 5, 7, 10, 8, 7, 8, 10,
12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
-255,192, 0, 17, 8, 1, 26, 1,245, 3, 1, 17, 0, 2, 17, 1, 3, 17, 1,255,196, 0,214, 0, 0, 2, 2, 3, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 6, 7, 5, 8, 0, 3, 4, 2, 1, 9, 1, 0, 1, 5, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 4, 0, 2, 3, 5, 6, 1, 7, 8, 9, 16, 0, 1, 3, 3, 3, 2, 3, 6, 2, 6, 6, 5, 8, 4, 8, 15, 1, 2,
- 3, 4, 17, 5, 6, 0, 33, 7, 49, 18, 65, 19, 8, 81, 97,113, 34, 50, 20,129, 9,145,161, 66, 35, 51, 21,177,193,209, 82, 52,
- 22, 98,114, 36, 53, 10,240,225,241,130,146, 67, 54, 23,162, 99, 68, 37,178,194,115, 69,213, 55, 24, 56,210, 83,131,147,163,179,
- 84,116,132,164,180,196,212,149, 25, 17, 0, 1, 4, 1, 3, 2, 3, 4, 8, 4, 4, 4, 5, 5, 1, 0, 1, 0, 17, 2, 3, 4,
- 33, 18, 5, 49, 65, 81, 19, 6, 97,113,161, 34,129,145,177,193,209, 50, 20, 7,240,210, 35, 21, 66, 82,114, 51,225, 98,178, 22,
-241,130,146, 36, 52,162, 67, 84, 23, 8, 53,255,218, 0, 12, 3, 1, 0, 2, 17, 3, 17, 0, 63, 0,253,250,210, 73,102,146, 75,
-158,236,171,146,109,114, 85,102, 8, 85,220, 52,225,138,151,201, 13,151,187, 15, 96, 89, 78,253,189,212,173, 53, 21,251,246, 75,
- 99,110, 98,207,209,251, 63,177, 75, 70,205,241,222,251, 92, 59,117,110,237,237, 85, 63, 1,245,199,202, 92, 93,200,179, 48, 31,
- 84,240,138, 88,243, 84, 4,200,241,144,211,145, 1, 63, 41, 74, 25, 1, 46,179, 78,138, 21, 87,188,235,197,120,207,220, 76,222,
- 55, 46, 88,220,180, 91, 95,204, 3, 55,208, 63, 52,125,163, 95,122,246,238, 79,246,227, 11,147,196,142, 79, 17, 39,211,242,146,
-239,244,159,203, 47, 97,211,220,173, 94, 61,145, 88,178,203, 59, 25, 6, 53, 45,169,214, 89, 41, 14, 49, 38, 50,210,182,214,147,
-236, 41,215,180, 99,100,215,145, 1,101,114, 18,140,181, 4,106, 10,241, 60,156, 91, 49,236, 53,217, 19, 25, 71, 66, 8, 98, 23,
-110,167, 80, 44,210, 73,102,146, 75, 52,146, 89,164,146,205, 36,150,105, 36,179, 73, 37,154, 73, 44,210, 73,102,146, 75, 52,146,
- 89,164,146,205, 36,150,105, 36,179, 73, 37,154, 73, 44,210, 73,102,146, 75, 52,146, 89,164,146,205, 36,150,105, 36,179, 73, 37,
-154, 73, 44,210, 73,102,146, 75, 52,146, 89,164,146,205, 36,150,105, 36,179, 73, 37,154, 73, 44,210, 73,102,146, 75, 52,146, 89,
-164,146,205, 36,150,105, 36,179, 73, 37,154, 73, 44,210, 73,102,146, 75, 52,146, 89,164,146,205, 36,150,105, 36,179, 73, 37,154,
- 73, 44,210, 73,102,146, 75, 52,146, 89,164,146,205, 36,150,105, 36,179, 73, 37,154, 73, 44,210, 73,102,146, 74,183,122,156,129,
-235,110, 79, 36, 56,190, 33,150, 89,227,223, 41,161, 9, 54,247, 35,182,160,174,193,230,121,222,112,238, 42,239,173, 41,181, 41,
-239,215,150,122,179, 15,212,150,229,147,133, 48, 41, 96,204, 98, 15,181,223, 87,127,161,151,171,122, 75, 51,211, 84,226, 1,155,
- 2,110,114,238, 36, 71,177,155, 70,111,165,210, 3, 63,231,191, 87,124,103,120,255, 0, 47,101,217,100,134,111,137, 21,118, 43,
- 82, 34,188,227, 85, 21, 30, 96,104, 30,210, 65,232,119,215,150,243, 62,162,231,184,187, 60,171,178, 78,254,224, 74, 36,143,123,
-116, 94,169,195,122,115,128,229, 43,243,104,198,249, 59, 19, 25, 68, 31,115,245, 92,143, 98,158,170,253, 75,192,141,114,187, 49,
- 42,243, 1,170,174, 36,169,169, 97,163, 69, 10, 30,197,168, 37, 68, 31,209,174,142, 27,212, 30,162,170, 51,156,101, 56, 13, 98,
-101,182, 63, 81, 44, 91,224,151,247,159, 79,122,114,217, 66, 18,140, 38,116,144,142,233,125, 96, 56,127,138,144,227,174, 68,245,
- 9,232,179, 34,105,156,138,220,251,120,140,199, 43, 34,215, 48,214, 44,138,125, 74,101,196,247, 37, 46, 1,226, 63, 16,117, 39,
- 25,201,114,254,143,180, 11,171, 62, 84,142,177, 63,148,255, 0,164,135, 0,255, 0, 4, 40,185, 78, 55,136,245,141, 68,211, 96,
-243, 98, 52,144,210, 67,253, 64,177, 35,248, 5, 93, 44, 63,212, 22, 7,155,240,236,206,103,176,169,199,172, 54,232,146,103,207,
-136,128,159,185,101, 80,216, 47,186,201, 74,136, 79,120, 3,109,232,118,222,154,250, 55,211,220,181, 60,205, 48,182,131,164,139,
-107,216,247, 7,220,190,109,245, 31, 17,119, 11,116,234,188,107, 0,250,119, 29,136,247,255, 0,192,161,191, 70,222,182,248, 47,
-215, 87, 26, 59,202, 92, 21, 34, 91,150, 88,178, 13,186,124,107,172, 85, 68,147, 26, 82, 90, 67,170,109,105, 37, 73, 85, 18,177,
-243, 33, 74, 79,191, 90,126, 91,135,187,142,183,203,181,157,156, 49,125, 22, 87,134,230,232,229, 42,243,105, 37,129, 98,225,136,
- 40,207,155, 57,167,142,125, 60,113,133,219,152,249,106,121,182,113,237,145,180, 63,114,156, 25,121,242,210, 22,234, 89, 73,242,
-227,165,107, 53, 82,128,216,104, 76, 60, 59, 50,172, 21,214, 30, 82,232, 17,153,217,181,226, 85, 43,109, 45, 24,245, 43, 95, 5,
-115,175, 24,122,147,226,251,103, 50,112,229,199,249,175, 30,221,195,170,129, 56,178,244,114,224,101,245,198, 93, 91,144,148, 56,
-154, 45,181, 13,192,175, 94,154,238,110, 29,152,150,154,172, 13, 40,245, 31, 20,176,115,170,204,170, 54,212, 94, 18,232,126,150,
-238,139,180, 42, 45,102,146, 75, 52,146, 89,164,146, 73,240, 95,175,207, 79,222,163, 57,255, 0, 54,244,229,197,207, 78,149,155,
- 96, 11, 92,108,130, 76,152,138,143, 13, 50, 90,150,184, 78,176,202,221, 80, 90,212,135, 27, 53, 33, 29,164,116, 39, 86,249,220,
- 37,248,148, 87,117,140, 35,103, 77,117,102,119, 84,188,127, 63,143,153,145,101, 21,185,149,127,155, 70, 14,236,201,217,170,133,
-116,179, 73, 37, 19,159,103, 88,175, 24, 96,247,142, 72,206,166, 38,223,133,216, 33, 73,188, 93,167, 56, 20,164,177, 18, 27, 42,
-144,243,133, 40, 5, 71,181, 9, 38,128, 18,124, 5,117, 45, 20,202,233,198, 16, 15, 41, 16, 0,246,149, 14, 69,240,162,185, 89,
- 50,209,136, 36,159, 96,234,191, 58,151,249,245,115,127, 41,220,103, 95,189, 39,122,110,200,179, 94, 32,183, 60,182, 85,125,113,
-233,105,122, 71,101, 10,146, 26,183, 66,148,211,107,237,223,180, 58,225, 21, 21, 3,161,222, 31, 69, 81, 64, 17,201,202,132, 38,
-123,105,247,145,246, 5,231, 99,215,153, 25, 4,203, 23, 18,118, 86, 59,235,175,213, 18, 62, 37, 88,255, 0,203,207,243, 70,225,
-207,204, 6, 5,210,203, 99,182,202,197,121,134,193, 67,124,196,174,234, 75,142,180,217, 95,151,231, 48,242, 82,128,235, 97,207,
-145, 85, 66, 20,149,108,164,128, 82, 77, 7, 61,233,203,184,179, 19, 34, 37, 9,116,144,251,252, 15,215,239, 90, 79, 78,250,162,
-158, 88, 72, 68, 24, 89, 30,177, 63,104, 61,199,110,199,217,209, 89,205,103, 86,153,102,146, 73, 7,235, 47,243, 9,225,255, 0,
- 70,185, 54, 15,199,121, 51,107,188,114,150,123,119,129,101,180,216, 97, 60,134,221,102, 36,185,136,136,237,198, 66,148, 21,216,
-203,101, 84, 78,213,113, 95, 42,118, 10, 82,110,248,158, 10,220,248, 89, 56,233, 10,226, 73, 62,208, 29,135,183,236,250,149, 7,
- 51,234, 26,120,249,215, 92,190,105,217, 32, 0, 30, 4,179,159, 96,248,159,165,131,255, 0, 50, 15,205, 2,221,249,123,191,128,
- 66, 86, 17, 47, 53,184,231,202,186,181, 10, 61,190,114, 98, 56,203,150,213, 66, 64, 64, 65, 97,245, 56,167, 76,192, 18, 0, 6,
-163,198,186, 43,211,222,156, 60,160,176,249,130, 2,182,119, 15,213,253,161,153,144,158,166,245, 56,226, 13, 67,203, 54, 27, 29,
-152,183, 70,246, 23,119, 72,193,249,244,115, 33, 21, 30,150, 51, 74,127,175, 59,255, 0,162,245,115,255, 0,101,209,255, 0,230,
- 87,240,254,101, 71,255, 0,125,228,127,248, 86,252,127,149, 95,238, 39,206,159,228,206, 53,177,103,242,237,207, 90, 38, 94,109,
-240,238,111, 90,165,215,207,134,228,168,232,125, 81,220,238, 74, 15,115,101, 93,166,169, 27,142,131, 88,124,138,133, 86, 74, 0,
-187, 18, 31,197,143, 85,191,198,184,219, 92,102, 67, 25, 0, 88,246,112,237,244, 34, 29, 66,167, 89,164,146,205, 36,150,105, 36,
-179, 73, 37,154, 73, 44,210, 73,102,146, 75, 52,146, 89,164,146,205, 36,150,105, 36,179, 73, 37,154, 73, 44,210, 73,102,146, 75,
- 52,146, 89,164,146,205, 36,150,105, 36,185, 46,121, 5,134,200,164, 38,243, 54, 60, 69, 57, 82,216,148,243,109, 21, 1,214,157,
-228, 86,149,211,163, 3, 46,129,215, 9,101,170, 46, 91,138,206,200, 31,196,161, 92,226, 61,149, 69,105,185,114,173,141, 72,101,
-114,217, 97,223,225,186,227, 41, 81, 90, 80,175, 5, 17, 67,174,154,228, 35,184,130,222, 61,146,112,236,164, 52,197,213,193,145,
-229,120,190, 31, 5, 23, 76,182,229, 22,215,109,113,214,226,183, 34,227, 33,152,205, 41,231, 79,107,109,133,188,164,164,169, 71,
- 96, 43, 83,225,167,194,185, 76,180, 65, 39,216,184, 72, 29, 87,126,152,186,184,166,228,120,245,182, 90,109,247, 25,241,163,207,
- 93, 10, 24,125,246,144,226,130,141, 5, 18,162, 9,169,233,167,136, 72,135, 0,174, 56, 93,186, 98,234,205, 36,151, 50,239, 86,
-118,239, 13,227,174, 75,101, 57, 3,204,185, 53,168, 37,212, 9, 11,142,202,208,211,142,165,162,123,202, 18,183, 16,149, 40, 10,
- 2,160, 15, 81,167,108, 44,237,162,227,173,210,100,198,133, 29,114,230, 56,150,162,182, 10,220,117,213, 4,161, 41, 27,146, 84,
-173,128,215, 0,117,213,239, 92, 73,102,146, 75, 52,146, 66,124,131,203,216,174, 3,104,147,117,184,200, 67,112, 98, 40,183, 54,
-225, 35,189, 16, 33,118,167,189,106,147, 32, 2,148,132,164, 18, 71, 95, 3, 74,235,160, 58, 74,157,243, 55,230,167,108, 85,234,
- 70, 17,192, 86, 27,190,105,148,133,125,179, 55,217, 50,101,217,173, 94,105, 87, 98,157,102, 52, 66,219,238, 50,131, 82, 59,136,
- 36, 15,171,161, 55,116,240,167,110,235, 11,125, 31,199,222,130,158, 96,118,136,117,216,239,230, 64,205,182,201, 18,213,252,158,
- 77,250,242,196,118, 68,203,187, 57, 20,198, 98,190,248,104,121,139,103,236,219, 64, 83,125,213,161,241,235,191, 93, 17, 95, 1,
-187, 83, 45, 61,223,241, 81,203, 61,187, 39,231,163, 79, 84,214,223, 83, 86, 11,220,136,145,228, 71,151,101,144,204,119, 83, 33,
- 72,125, 0, 62,207,125, 17, 37,176,144,231,106,210,180,252,201, 10, 20,222,189,117, 85,159,128,113,136,213,193, 69, 81,127,152,
- 58, 39, 70,128, 83,175, 47,190,196, 86, 23, 38, 74,210,220,102,210, 86,227,142, 16,148,165, 41, 21, 36,147,176, 0,105,178,144,
-136, 36,150, 1, 58, 49, 50, 32, 0,228,170,159,234,135,215,215,148,235,252,115,192, 78,121,215, 5, 21, 69,149,144, 54, 59,192,
- 81,249, 10, 33,141,251,143,254,179,254,207,183, 94, 37,235, 47,220,226,231, 27,143, 47, 35,161,152,215,232,135,143,191,234,241,
- 94,227,232,207,218,253, 6, 87, 34, 26, 35, 81, 3,167,181,231,225,238,250,252, 21,105,226,140,124,103, 28,207,104,176,101,170,
- 91,170,157, 60, 34,127,220,149, 23, 22,190,226,165,133,149,111, 85, 17, 67, 93,121, 95,166,112, 70,111, 43, 85, 89, 14,119, 79,
-230,126,165,156,144,125,228, 49, 94,175,234,140,227,133,196,221,110, 59, 13,176,249, 91,160,118, 0,143,112, 46, 21, 62,252,231,
-125, 93,250,139,119,214, 94, 77,192,182,235,197,199, 23,226,140, 37,198, 45, 54, 75, 13,170, 67,240, 89,121,191,181,109,239,189,
-116, 50, 81,230, 41,226,174,228,147, 80, 19, 64, 53,250,103,232,174, 19, 22,172, 24, 76, 70, 38, 82, 26,150, 26,118, 97,224,203,
-242,219,215,156,246, 93,188,133,149,153,202, 49,137,208, 57, 15,221,207,137, 41,235,249, 38,122,135,230, 31, 83,188, 97,201,254,
-154,121,222,227, 47, 37,227,203, 13,165, 57, 6, 63,121,188, 56,185, 47,218,102, 39,188, 6, 83, 33,234,175,177, 93,189,233, 73,
- 86,221,170,166,196,235,206,255, 0,122,189, 49,133,118, 4,137,136,137,148,101,211, 77, 98, 28, 75,222, 15,218,189, 39,246, 47,
-213, 89,212,242, 17, 27,140,132,101, 22,125,116,145, 99, 31,113, 29, 7,102, 86, 7,210,174,117,114,179, 88, 57, 15, 10,243, 20,
-108,215, 60, 98,241, 33, 77, 84,246,135,152,132,226, 66,169,208, 18,149, 16, 79,184,107,229, 95,216,254, 70,112,228,101,142,255,
- 0, 44,154, 95, 72,144, 31, 16,126, 1,125,111,251,235,199, 66,124,104,200,111,154, 47, 31,162, 81, 39,224, 71,196,170,105,249,
- 61,122, 39,245, 33,234,255, 0,135, 50, 38,112,126, 95,188,113,199, 21,218,174,107, 75,112, 49,133,173,183,101, 92,220,138,210,
-156,126, 66,153,117,146, 80,148, 4, 4,164,147, 93,233,219,227,247, 39,171,185,170, 48, 47,139,209, 27, 38, 99,214, 93,131,157,
- 6,135,218,190, 10,244, 95, 5,147,200,227,207,110, 68,170,172, 75,164,123,150, 26,157, 71,179,254, 11,159, 62,245,101,234,175,
-143, 56,235,212, 95,229,165,234, 95, 41,119, 58,137,143,219, 95, 85,162,255, 0, 49,106,126, 75, 47, 91, 46,145, 20, 71,156,229,
- 93, 45, 60,202,251,187, 92, 81, 40, 80,160, 59,157, 75, 79, 25,141,109,152,185,212, 67,102,227,168,237,168, 63, 16,124, 58,168,
-175,229,178,234,171, 47,143,200,159,153,182, 58, 75,190,132,124, 8,241,232,128, 17,235,155,155, 49,207, 79, 92, 37,232,227, 7,
-191,222,113, 94, 38, 92, 7, 47, 25, 68,204, 45, 46, 27,229,192,205,191, 78, 5,166,124,165, 33, 74, 75,108,182, 10, 80, 20, 2,
-148, 79,117,104, 40, 96,225,105,149,249, 25, 82,140,101, 55,104,137,126, 80,209,143, 95,165, 2,121,235,227,143,139,137, 9, 74,
- 21,237,121, 24,254, 98,242,151, 79,112,237,226,141,173,158,171, 57, 91,210,207, 51,226, 60,141,232,186,251,202,151,236, 77, 47,
- 6,243, 60,115,147, 45,242,228, 67,148,193,113, 1, 65,176,149, 56,131,222,130,189,251, 66,144, 64, 32,232, 35,199, 87,153, 76,
-225,148, 41,140,191,194, 96, 64, 35,248,248,163,135, 41,110, 13,245,217,134,111,148, 95,230,141,128,144, 71,241,245, 39,151, 21,
-242,167,230, 11,249,136,122,217,230,127, 75, 22,142, 99,185, 98, 28, 19, 96,188,221,137, 54,168,209, 26,184,177, 1,139,187,177,
-162, 67,140,251, 40,105,228, 14,205,150,162,186,209, 32, 26,234,151, 46,156, 30, 43, 11, 31, 35,200, 19,178,113, 29, 73,103, 96,
- 73, 61, 66,189,195,191,144,230, 51,242,113,191, 80, 97, 84, 36,122, 0,237,184,128, 1,208,251,245, 66,248, 7,169, 79, 85, 63,
-149, 95,173,174, 83,244,245,147,231, 87, 30, 74,192, 44, 88,180,252,142, 11, 25, 44,137, 47,165, 82,145,107, 69,202, 19,157,174,
-184,226,155, 80, 90,252,183, 59, 20, 2,147, 83,182,212, 47, 35,143,198,230,112,169,184, 86, 43,148,166, 34,118,248, 59, 31,196,
- 32,241,185, 44,174, 15, 58,250, 37, 97,182, 17,172,200,110,126,172,227,221,224, 89, 78,122, 25,244,227,235,251,243, 54,192,238,
- 94,174, 51, 15, 80,217, 14, 45,120,151, 58, 83, 86, 40, 22, 87,223, 76, 54, 92,138,186, 85, 81,216,125,150,155,108, 47,229, 13,
-165, 31, 72,169, 59,232,126,111,147,194,226, 45, 24,208,198,140,128, 1,201,235,175,181,143,214,137,224, 56,172,254,106,163,151,
-102, 84,224, 73, 59, 64,233,167,177,192, 3,216,171,119, 8,250,159,245, 3,232,166,231,234,111,145, 21,113,109,255, 0, 82,206,
- 92,217,196,166,223,217, 67, 46,182,221,226, 93,230, 88,155, 61,180,246, 6,201,171, 46,148,124,180,238, 32,211,195, 90, 44,238,
- 54,142, 68,226, 65,191,165,180,201,189,128, 6, 31, 16,179, 60,127, 43,145,198, 12,217,187,219,184, 68,159,105,145,115,240, 44,
-188,227, 60,175,123,191,240,106,185, 46, 87, 33,115, 67,254,175, 31,105,203,148, 11,133,185,169,207, 88, 23, 39,204, 43,105,159,
- 48, 63,230, 22,212,144, 1, 90,122, 19, 80,146, 5, 15, 45,199, 17,200,217,229,227,138, 1, 98, 11,110,111,171,175,179,226,187,
- 86, 73,158, 55,153,230,100,156,130, 28, 16, 14,215,236, 58,244,246,252, 19, 55,148,255, 0, 54, 47,204,134,253,199, 28, 35, 96,
-198, 50, 57,184,151, 45,221,220,184,226,247,213, 73,183, 70,107,249,172,182,110, 17, 88,135, 49,212, 77,142,162, 59,155,124, 5,
-148, 0, 10,129, 58, 3, 23,211, 92,116,108,200,148,162, 39, 8,180,131, 30,129,137, 35, 67,236, 86, 57,126,171,228,231, 94, 52,
- 99, 35, 11, 36,241, 46, 6,165,192, 7, 81,237, 95,169,223,151,223,165,142, 76,244,213,195, 87, 92, 75,153,179,153,220,139,147,
-100,151, 23,178, 43,133,210,249,222,181,161,217,112,163,198,118, 58, 3,206, 58,124,160, 88, 42, 0,159,218, 59, 13,121,151, 53,
-201,195, 54,225, 58,235, 21,198, 33,128, 30,194, 75,246,215, 85,234,252, 15, 19, 60, 10, 76, 44,176,219, 41, 75,113, 39,218, 0,
-110,250,105,241, 77,204, 31,138,248,207,137,177, 86,113,124, 34,211, 14,203,134,219,219, 82, 99, 65,132,203, 81,162,198,104, 18,
-226,130, 16,128, 18,148,212,146,127, 78,171, 45,186,119, 76,202,100,202, 71,185,212,149,109, 77, 53,209, 1, 8, 1, 24,142,128,
-104, 2,252,177,252,168,163,183,207, 95,155,175, 56,122,166,227, 6,252,174, 24, 75,215,136, 81,101,198, 5, 44,204, 85,210,236,
-219,145,214, 58, 3,230,183, 21,111,168,120, 18,154,245, 26,244,159, 85, 31,210,241, 88,248,211,255, 0,115, 67,238, 96, 95,234,
-118, 94, 91,232,241,250,190, 99, 43, 42,191,246,245, 15,226,242, 13,245,128, 74,253,115,215,152,175, 88, 73,191, 93, 30,181,184,
-183,208,143, 3,207,230, 94, 71,112, 63,113, 53,131,142,216,154, 88, 76,139,181,205,109,149, 53, 29,179, 67,218,145, 66,167, 22,
- 69, 16,144, 78,230,128,219,112,188, 61,188,149,226,168,123,201,240, 30, 63,128,238,169,185,238,110,174, 47, 28,219,103, 94,128,
-119, 39,195,241, 61,130,252, 89,230,222, 59,245, 55,115,245, 41,193,190,177,189, 88,203, 88,228,238, 98,203, 90,184,198,177,173,
-181, 54, 45, 86,171,101,202,215,246, 76,165, 10, 82,139,105, 45,203,162, 90, 63, 50, 18,145,222, 74,212,170,122,214, 30, 94, 55,
-233,178,113,177,199,201, 76, 25,252, 73, 18,127,127, 78,189,251,104,203,198, 51,112,242,191, 85,139,151,148,126,123,236,125,191,
-229,136, 49,111,119, 94,157,135, 93, 93, 91,111,248,131, 50,171,110, 11,202,158,149,179,123,210, 28,114,207,102,187, 95, 46,178,
-219,140,144,183,148,204, 73,214, 25, 14, 6,210, 72, 5, 69, 41, 52, 21, 21, 58,203,250, 14,147,109, 25,112, 29,101, 24,143,172,
- 76, 45,119,238, 37,194,156,140, 41,158,145,148,137,250, 12, 10, 53,194, 63,226, 10,244,177, 27, 54,133,132,115, 15, 30,101, 24,
- 85,146, 90,144,136,247,187,188, 88,235, 75,109,173,125,161,249, 17,208,176,242, 91, 30, 37,160,225,247, 29, 5,103,160,114, 60,
-179, 42,172,132,200,236, 15,192, 30,159, 91, 35,234,253,198,198,243, 4, 45,174,202,193,238, 71,196,142,173,238,117,250, 33,140,
- 94,241,236,151, 31,135,145, 98,146, 89,153,141,207,101,185,144,102, 67, 90, 93, 97,246, 30, 64,113,183, 27, 90, 9, 74,146,164,
-144, 65, 6,132,107, 13, 56, 24, 19, 18, 24,142,171,208, 97, 49, 56,137, 68,184, 58,130,187,244,212,229,154, 73, 44,210, 73,102,
-146, 75, 52,146, 89,164,146,205, 36,150,105, 36,179, 73, 37,154, 73, 44,210, 73,102,146, 75, 52,146, 89,164,146,205, 36,150,105,
- 36,179, 73, 37,154, 73, 44,210, 73,102,146, 75,243,203,243,157,226,187,255, 0, 35,115,159, 22, 58,221,178,116,140, 57,155, 54,
- 97, 22,227,115,131,140,205,202, 26,134,244,152, 9,110, 40, 92, 72,125,191,188, 91,221,161,181,149, 15, 45, 84,114,135,178,154,
-218,122, 95, 32, 87, 77,186,135,120,176,220, 34,250,235,169,248,248,244,238,171,179, 96,242,143,211,217,210, 51, 14,177,250,247,
-227,124, 44, 95, 56,235, 17,201, 49,188,177, 56,166, 15, 97,201, 85, 2, 20,229,221, 89,177, 67,184, 79,110, 66,226,169, 76,184,
-234,100, 41,180,199,113,104,109, 5,198, 80,178, 40, 2,117,109,108,240,237,147, 78,113,144,221, 50, 53, 12,228, 6,125,122,117,
-246, 20, 60, 69,145, 26, 2, 52, 8,223,141,238,127,152, 39, 39, 92,110,248,101,239, 60,207,161,225, 86,140, 95, 42,191, 88,175,
- 80, 45,151, 59,100,137,210,237,229,183,237,209, 30,145,120,128,211,242, 20, 92,113,109,149, 37, 8, 91,129, 61,169,165, 52, 45,
-241,194,168, 9, 8, 86, 73,148, 65, 14, 11, 3,212,176, 44, 62,229, 36, 77,146,209,207, 66,160, 51,124,139,213,207, 52, 91,108,
-176,185,233,172,254,102,106,220,222, 51,159, 98,177,199,178, 78,111, 27,118, 10, 34,198,122,237, 62,119,145, 27,179,238, 83, 51,
-191,188,173, 73, 41, 81, 32, 10,108,153,170,134, 53, 4,154,188,176, 26,199, 46, 55, 62,172, 6,189, 25, 54, 70,114,252,207,219,
-220,185,178, 14, 95,252,213,172,205,100,119, 59,173,215, 51,137,202,228, 94, 26,189,227,209,236,119,153, 80, 89,236,127,205,133,
- 34,214,227, 80,126,193,134,135,106, 16,149, 54,242,203,129, 84,167,205,191, 97,141,199, 75,104, 2, 6, 58, 49,112, 15,180, 29,
- 92,159,163, 69,195, 59,117,234,234,200,227,222,150,121,197,222, 98,207, 50, 87,110,141,101,249,188, 12, 71, 20,185, 91, 47, 28,
-145,139,219,238,210, 39,220,214,237,238, 88,133, 10, 73, 49, 24,138, 89, 95,150,133,118, 54,170, 5, 32,168,108, 43, 73, 62, 66,
-175, 42, 1,182,196,206, 64,136,200,134, 31, 40,114, 53, 37,255, 0, 20, 80,170, 91,143,114,195,168,247,173, 28,121,204, 28,227,
-131,114,246, 11,146, 9,188,131,118,244,240,211,118,246,249, 37,204,150,195,124,149, 37,140,138, 77,130,246,137, 17,218,141,246,
- 66, 81,104, 76, 16,251,195, 13,169,134,220,236, 9, 35,184,131,219,241,170,178,169,134,172, 89,174,214, 35,242,188,117,119,103,
-103,235,169, 14,185, 25,200, 17,213,187,251,216,173, 56,126, 65,234,219, 41,193,167,103,183,171,190, 95, 19, 39,199,172,252,121,
-116,179, 64, 13,202,142,220,185,215, 44,166,224,197,221, 50,226,173,154,200, 34, 27, 77, 7, 27, 88, 33, 9, 32,144, 13, 8,237,
-176,198,132,196, 64,131, 72,204, 31, 96, 17, 12,199,182,174,197, 40,153,144,250,232,223,106, 13, 86, 81,206,169,202,172,217,245,
-218, 46,109, 63,151,228, 98, 55, 59, 31, 32, 79,147, 27, 38,131, 19, 30,185, 75,205,236, 95,112, 45,235,133, 13,103,237,218,101,
-151, 20, 81, 0, 41, 75,100, 5,119, 10,247,232,175, 46,157,166, 32,192, 67,120, 49,252,164,200, 8, 73,157,207, 87,255, 0, 55,
- 67,245, 38, 60,157,245,118,215,174,154,143,227, 69, 15,147, 91,185,219, 38,196,178,108,167, 59, 57,101,238,246,172, 47, 61,197,
-241, 69,200,177, 94,212,197,205, 81,111, 41,153, 2, 52,216,147,227, 58,249, 11,140,225, 90, 19, 52,213,192,218, 66,138,138, 72,
- 50, 87, 42, 99, 40,198, 59, 0,223, 2,117, 26,104,196,130, 11,117,240,232,233,164, 72,130, 75,244, 41,129,158,102, 30,174, 28,
-109,230, 49, 91,158,112,199, 44,189,114,188,196,228, 40,166, 4,212,218,109, 86,229,100,205, 49,104,114,204,235,177,140, 78,227,
- 21, 73,242,213, 25,110, 21,181,230, 41,218,144, 72, 14,154,177,191,196, 33,181,134,221, 67,147,183, 93,218,191, 95, 22,213,153,
- 73, 41, 79,179,191,127,175, 70, 86,123,210,164,124,238,204,247, 35, 97,185,140,203,173,194,201, 98,203,164, 91,177,121,153, 35,
-143,200,148,237,165,203, 21,178,112,237,147, 32,119,188,216,148,251,233, 74,170,105, 66,154,252,180, 20, 28,137,132,188,185, 68,
- 0, 76, 28,183,139,145,211,182,128, 34,170,112,224,248,163,126, 81,201,102, 98,248,139,211, 45,172, 72,149,115,117, 72,101,168,
-246,230,195,178,150,146,170,188, 89, 65, 82, 65, 90, 90, 11, 80,169,165, 70,171,148,200, 11,142,177,183, 57,119, 37,155,146,102,
- 16,147, 27, 8,176,200,147,101,177,227, 47,165, 43, 67, 95,186,242,223,147, 37, 36,169, 14, 60,242, 28, 80,174,224, 54,170, 2,
- 74,215, 89,223,103, 78,169,172,232,197,188, 75,141,120,139, 27, 85,191, 10,176, 64,128,153, 3,237, 99, 64,183,197,142,199,220,
-184,177,218,148, 43,180, 10,131,227, 95, 13, 54,203,167, 97,121, 18,125,233, 70, 2, 61, 3, 42, 5,234, 15,132,189, 50,218,185,
- 86,226,221,166,213, 38,225,114, 66,210,110, 45, 71,154,150,109, 13, 92, 1, 42,125, 49, 35,165,165,124,129, 70,155, 20,238, 14,
-181, 88, 6,211, 88,220, 71,211,215,237, 85,151,136,238, 44,157,127,151, 79, 35,225,184,182, 85, 59,130,241,155, 75, 22,152, 23,
- 6,157,190, 52,204, 69, 60,164,135,217, 8,105, 85,243, 84,178, 11,136, 4,128, 40, 62, 66, 64,173,107, 93,204, 99,203, 73,187,
-253,202,124, 73,142,140,174, 6,168, 81,201, 23,235,191, 10,230,156,243,143, 45,246, 62, 40,239,122,210,183,220, 23,216, 81,220,
- 13,186,251,101, 41, 44,212,146, 1,109, 42, 10,238, 77,119, 52,246,107,206,191,113,248,174, 71,144,197,133,120,122,130, 78,240,
- 11, 18, 52,110,173,160,213,199,185,122, 63,237,183, 43,198,241,249, 83,183, 51, 73, 0, 54, 18, 28, 3,171,244,125, 78,140,125,
-232,115,210,183,162, 27,118, 10, 25,205, 57, 25, 9,149,149,108,182,153, 34,173,199,168,232,144,122,159,106,191, 70,162,244, 87,
-237,237, 60, 64, 23, 92,211,191,225, 31,119,183,219,245, 41,189,111,251,137,119, 46, 77, 52, 60, 40,248,203,223,236,246,125,105,
- 7,234,207,138,114, 62, 0,231,119,178, 43, 24, 91, 22, 73,242, 85,122,177,205, 66,126, 84, 56, 92,243, 86,208, 59,142,230,214,
-122,123, 41,237,215,144,250,227,134,191,131,229, 13,245,184,140,165,190, 18,240, 46,228,123,193,248, 50,246, 15, 66,243, 52,115,
-188, 80,162,198, 50,132,118, 78, 62, 33,152, 31,113, 31, 23, 81,220,219,101,252,191, 61,117,166, 6, 73,235, 3, 18,151, 11,151,
- 45,241,219,130,172,143, 30, 91,205, 46, 75, 45,110,148,172,199, 90, 84, 64, 36,208, 45, 42,237,174,199, 94,201,233, 47,255, 0,
-160, 63, 71, 78,203,119, 87, 46,236, 55, 68,159, 17,220,127, 26,175, 21,245,135,255, 0,206,227, 58,237,245,136,216, 59, 18, 76,
-100, 7,129,236, 91,248, 11,134, 6, 69,233,195,211,191, 20, 92, 56, 47,209,150, 50,229,135, 23,188, 26, 95, 47,115,137, 84,233,
-200,237,236, 41, 42, 90,220,112,247, 39,229, 37,106,216, 84, 0, 43,172,111,238, 39,239, 37,220,245,114,166,173,205, 32,198, 69,
-134,157,196, 64,232, 15,115,213,109,127,109,255, 0,101,169,244,252,227,117,130, 47, 18,226, 49,115,243,118, 50,145,234, 71, 97,
-209, 53,125, 17,122,119,188,230,152,174, 79,145,206, 63,103, 26,245,108,155, 97,183, 72,113, 5, 93,162, 83, 10,105, 79,118,212,
- 85, 61,196, 82,135,122, 29, 88,126,205,112,115,197,124,251, 7,230, 97, 17,220,128, 65, 39,220, 72, 0,123,138, 3,247,167,157,
-134, 88, 28,125,103,242,185,145,236, 9, 4, 1,239, 0,146,125,225, 36, 56, 47,242, 89,252,193, 61, 29,217,238, 41,244,167,207,
- 76,217,110, 55,117,210,235, 17,203, 97, 16,159, 66, 19,218,211,169, 67,166, 64, 75,169,170,135,112, 77,105, 77,245,245,102,119,
-172, 48,179,228, 14, 70, 54,224, 58,107,175,221,162,249, 31, 3,209, 25,252,116, 72,198,202,218,101,212,109,211,239,213, 78,113,
-231,228, 35,145, 49,197, 60,157, 35,148,243,211,126,245, 49,201, 81,149, 18, 94, 93, 58, 59,143, 34, 55,157, 57,185,242, 85,216,
-183,124,199, 22,243,141,252,203, 82,129,233, 64, 55,172, 23,250,223,117,213,108,175,109, 85, 23, 17, 7,174,140, 59,104,222, 8,
-140,127, 64,237,162,239, 50,221,215, 90, 24,200,142,154,130,123,185,114, 53, 43,213,247,242, 12,188,127,228,183, 27,175,143,179,
-180,227,222,170,120,209, 47, 70,131,150,197,136,191,181,159, 28,220,159,185, 71, 75,172, 23, 10,144,166, 86,250,130, 84, 9,168,
- 36, 16, 69, 41,202,253,109,253,107,188,202,247, 83,111, 88,191, 77, 0, 58,183,118, 74,223, 64,255, 0, 70,159, 46,221,183, 85,
-160,144, 26, 29, 73, 26, 63,103, 76, 30, 3,244, 23,249,142, 49,207,150, 46, 92,245, 51,206, 74,185,227,214, 20, 42, 56,199,113,
-168, 76,195,131,112,101, 68, 41, 72,150,217,105, 13, 40, 41, 73, 29,199,202, 43,160,249, 84,158,186,174,206,230,112, 13, 18,170,
-140, 97, 19, 47,241, 72,185, 30,238,255, 0, 22,246, 43, 62, 63,130,228, 70, 68,109,200,202, 50, 17,255, 0, 12, 67, 3,239,237,
-240,127,104, 70, 94,141,255, 0, 45,156,155,210,207,172,254, 88,245, 55, 59, 36, 98,237,100,228,137,211,174,113,237,140,196, 92,
-117,193, 19, 46,110,220, 3,106, 90,156, 88, 95,104,115,182,160, 10,210,186, 31,151,231,198,110, 45, 52, 8, 55,148, 0,119,234,
-192, 4, 79, 11,233,179,129,153,126, 65,158,239, 52,146,204,204,228,159, 29, 84, 23, 47,254, 82,163,152,191, 48,187,215,171,172,
-194,251, 30,103, 23,228,118, 87,113,123,174, 38, 99, 56,135,213, 29,251, 56,180,184, 68,144,229, 1,165, 84, 40,141,181, 61, 30,
-168, 52,224, 71, 26, 17,105, 70, 66, 66, 79,224, 95,162,131, 35,210, 66,254, 70, 89, 83,144, 48,148, 76, 76, 91,177,139,117,116,
-159,227,175,201,247,243, 10,244,163, 46,239,128,122, 60,231,211, 97,224,187,196,149,201, 92, 73,112, 67,147, 24, 14,124,133,104,
- 5, 43,108, 59,216, 0, 43,108,183, 82, 1,160,219, 86,217, 62,172,193,204,105,228,227,110,176, 14,160,232,127,225,245,170,108,
- 95, 70,242, 24, 47, 12, 92,173,181, 19,208,141, 71,252,125,161,151, 71,167,255, 0,248,126, 34, 97, 88,239, 39,113,255, 0, 51,
-230,138,200,241, 78, 64,136,195, 81,167, 49, 20,179,113,129, 58, 36,181, 76, 98,105, 91,174, 58,149,184, 22,175,155,111,154,164,
-116, 58,102,119,174,165,108,233,157,117,237, 53,147,221,193, 4, 49, 29,180, 82,113,255, 0,183,176,166, 23, 87,109,155,227,104,
- 26,179, 16, 65,112,122,157, 87, 5,155,242,173,252,202,184,127,140,145,193, 24,175,168,152,182, 95, 78,144, 20, 11, 51,154,131,
-246,183, 56,145,131,222,104,109,185, 68,135, 27, 79,119, 64, 36, 1,225,211,109, 58,207, 82,241,247,219,231, 75, 23,117,167,218,
-224,159,119,252, 19, 43,244,175, 39,143, 87,147, 28,205,180,143, 99, 16, 61,253,190,180,207,245, 97,249, 71,114, 55,169, 12,195,
-133,179,151,243,240,245,239,139,144,194, 46,114,238,240, 82,236,203,211,141, 79,102,106,158,113,200,203,105,180, 41, 94, 81, 31,
- 65,235,227,170,238, 47,213, 16,196,174,248, 10,191,221,118, 98,194, 58, 17,221,252, 85,167, 47,233, 41,230,219,143, 97,183, 90,
- 89,201, 14,100,196, 30,205,224,175, 85,189,133,198,130,204,117,253,104, 66, 82,105,237, 2,154,199,173,178,252,255, 0,252,240,
-125,109,229, 24,190, 55,108,244, 1,233,196,174,127,168,190, 80, 13,219,174,109, 64, 85, 95,131,102,152,191,183,242,106, 40, 16,
-228,195, 84, 84,159,149,160,181, 26, 85, 42,214,235,209,220, 60, 37, 35,153,126,149, 85,168,126,228,126, 31,107, 47, 61,245,199,
- 55, 56,198, 56, 56,250,219,110,133,187, 68,233,255, 0,213,240, 15,236, 86, 11,242,222,244, 91,139,250, 41,244,229,104,227, 59,
- 80, 75,217, 34,147,247,247,251,144, 79,106,166,220,223, 66,124,247,183,220, 36, 80, 33, 3,193, 9, 21,169,169, 57,222,119,151,
-159, 35,147, 43,101,211,160, 30, 3,176,251,207,181,105,253, 63,194,195,139,197,141, 49,212,245,145,241,145,234,126,225,236, 86,
- 17, 71,180, 21, 30,131,125, 83,171,181,248,121,201,188,217,234,223,159,253,114,181,234,155,212,239,167, 46, 64,201,120,251, 24,
- 82,145,128,113,243,118, 91,212, 88, 86,196,161,208,182,157,146, 93,130,232,117,218,164, 56,229, 18, 2,220, 9,175,200,132,163,
- 94,193, 86, 38, 38, 54, 23,233,232,202,170, 18,151,231,158,232,146,125,131, 80,222, 3,192,123, 75,175, 17,187, 51, 55, 43, 60,
-100,228, 97,219, 56, 67,242, 67,108,128, 30, 4,252,165,207,115,226,125,129,148,111,230, 87,235,155,148,189, 65,114,231, 3,228,
- 89, 79, 7,100,220,123, 59, 8,188, 76,159,106,180,228, 13, 76, 68,140,133,215,167, 90,222, 49,225, 7,225, 48, 74,210, 99, 37,
- 7,181, 43, 53,113, 59,116,172,190,156,225, 41,197,163, 34, 48,200,133,130,113, 0,144,205, 29, 37,169,212,248,251, 58, 21, 23,
-170, 57,235,242,242, 49,165, 60,105,214, 97, 34, 64,144, 47, 45, 99,160,120,143, 15,111, 80,191, 89,248, 37,188, 55,214, 7, 19,
-224,188,239,204,124,113,254, 94,228,171, 98,101,203,181, 90,178,168,105,114,239, 97,121,199,149, 21,207, 45,114,153,105,214,148,
-234, 25, 66,205, 18,154,142,222,180, 7, 94, 91,152, 37,135,101,148,215,110,232, 22, 4,196,233, 46,253,137, 5,157,122,238, 17,
-142,117,117,223,109, 59,102, 28,129, 33,243, 71,183,112, 8,118,251, 18,103,243,212,225,142, 51,201,127, 46, 12,207, 44,190,194,
- 97, 57, 14, 44,187, 93,210,197,112,113, 40, 14,198,146,237,218, 52, 21, 37,181,171,113,230,182,242,155, 34,187,212,120,129,171,
-175, 68,228, 78,190, 70,184,196,233, 39, 4,120,134, 39,224,206,168,189,123,139, 93,188,101,146,144, 15, 6, 32,248, 23, 3,226,
- 11, 40, 63,202, 79,213,118, 15,199,126,129,120, 63, 10,229,203,177, 79, 32,101,178, 38,227, 24,205,177, 32,187, 41,230,152,188,
-204,143, 29,194,138,213, 12, 55, 29,164, 2,225,162, 70,201, 27,144, 12,190,167,227,103,110,126, 68,171, 31, 44, 26, 68,246,214,
- 32,159,164,147,209, 69,233, 62, 86, 21,113,216,176,182, 95, 60,222, 49, 29,244,148,128,250, 0, 29, 85,136,155,235, 82,193,102,
-230,204,127,130,178, 76, 35, 40,182,100,121, 76,171,132, 27, 29,194, 92,123, 66,160,201,110,216,209,126, 76,174,232,243,220,121,
- 44, 37,190,211,222,166,135,212,148,211,185, 64,106,136,113, 70, 84,202,216,217, 2, 34, 1, 35, 87, 15,208,126, 86,127,167,177,
- 90, 3,204, 8,223, 26,101, 92,193,153, 32, 22,139, 22,212,157, 36,237,244,119, 29,202, 98,114, 23, 42, 98,156,100,108, 8,201,
-126,229, 79,228,215,120,120,181,165,152, 17, 31,150,227,147,166,165,199, 17,222,152,233, 81, 67, 72,109,165,184,227,138,162, 80,
-132,149, 40,128, 9,208, 88,248,210,187,118,214,249, 98,100, 92,182,131,239,236, 7,114,143,201,203,133, 27,119, 63,205, 33, 16,
-193,245, 63,118,142, 79, 96,149,248,215,230, 3,197, 25,227,241,227,241,182, 55,150,100,139,126,209,107,202,212, 45, 56,252,142,
-230,109,183,167,101, 53, 1,215, 81, 41, 77, 45, 62,127,217,186,164,109,243, 36, 5, 13,136, 58,178,179,130,182,167,223, 40, 71,
-230, 49,214, 93,195, 63, 71,232,225, 85, 85,234, 26,109,111, 46, 19,151,202, 37,164, 79, 73, 59,117,110,172, 89, 57, 26,202,241,
-183, 25, 67,174, 78, 97,165,173, 41,112,182,235,205, 37,105, 10,115,201,162,129, 86,196, 56, 10, 15,250, 66,157,117, 82,106,151,
-130,186, 22,199,196, 46,151, 46,150,198,101, 34, 19,210, 26, 68,199, 21,229,182,202,156, 64, 90,149,219,223,218, 18, 77, 73,237,
-222,158,205, 55,105,103,100,227, 48, 11, 58, 95,219,125, 83,113,117,207,211,236,239, 82,140,253,224,227,248, 17,111, 87, 55,163,
-253,183,153,113, 91, 22, 9, 15,199,152, 90,140,202,150,165,144,168,235, 32, 36,238, 40, 77, 52,116,184,203, 69,226,141, 55, 18,
- 7,179,230,102,215,233, 85,241,229,106,150, 57,200,215,104, 18, 61, 53,249, 73, 7, 79,161, 76,113, 71, 55,224,252,204,254, 65,
- 27, 13, 19, 18,254, 53, 57,155, 61,205, 23, 40, 50,160,168, 63, 34,217, 22,240,209,108, 73, 66, 10,146,168,211, 26, 88, 62,253,
-199, 77, 69,149,135, 60,125,187,155,230, 14, 24,131,220,142,222,208, 84,216,153,213,228,238,216,255, 0, 41, 98,224,142,160, 75,
-191,176,132, 95,161, 17,139, 52,146, 89,164,146,205, 36,150,105, 36,179, 73, 37,154, 73, 44,210, 73,102,146, 75, 52,146, 89,164,
-146,205, 36,150,105, 36,179, 73, 37,154, 73, 37,231,168, 95, 81,248,159,166,235, 93,170,251,155, 66,151, 34,197,116,114,227, 21,
- 50,160,165,181,134,164, 64,178, 75,189,161,165, 37, 74, 74,138,159, 68, 53,180,208, 72, 53,112,164,120,232,220, 44, 25,100,146,
- 34, 67,134,248,144, 62, 14,231,216,163,178,209, 14,169, 81, 63,243, 77,224,203,125,146, 78, 74,229,158,242,229,133,152, 98,116,
-119,153,140,211,142, 74,125, 49,172, 82,159,134,211, 40, 89,116,190,194,111,237,121,136, 41, 29,165,167,127,185,189,136,244,253,
-196,128,225,223,249,181,247, 29,165,189,225, 67,250,184,255, 0, 31, 71,226,187,164,254,101,220, 49,111,190, 34,217,115,181,221,
- 26,180,204,186, 53,102,179,221, 80,136,239, 69,184, 50,114, 11,141,130, 76,230, 75, 78, 21,125,188,115,108,118, 67,138,165,124,
-146, 20, 7, 80, 24, 56, 43, 72,112, 67,128,228,120,124,160,129,239, 46, 7,189,119,245, 81,254, 61,236,187,178,111, 87, 57,141,
-226,205,195, 57,183, 15, 99,142, 92,236,252,153,113,158,199,242, 89,142, 69,143, 49,232, 13, 99,183, 11,172,103, 90,144,235,161,
-134,194,140,102,222, 36,149, 85,186,128, 10,136, 26,101,124,108, 98,110,141,146, 99, 88, 26,246,125,192, 29, 58,247,111,122,233,
-184,252,164, 14,191,130, 85,216, 63, 55, 59, 15,243, 76,137,119,204,118, 74,219, 76,213,162,199,104,113,216, 86,247,226,198,182,
- 99,118,185,215, 86, 36,202,148,247,146,244,148,220, 39, 22,154, 67, 95, 88,161,216, 10,155, 25,250,108,180, 90, 67,166,167, 83,
-214, 82, 1,135, 80, 24, 57,117, 16,204, 26,233,252, 48, 70, 77,254,103,248, 90,241,246,179,167, 48,155,227,124,117,113,149,126,
-178,227,247, 21,187,108, 18, 46, 87, 75, 19,255, 0,111,246,201,137,231,249,141, 7,215, 84,182,167,123,104,160, 66,130, 69, 20,
- 69,254,193, 61,219,119,199,112, 0,145,174,128,247,118,213,189,137,255, 0,170, 29, 88,178,128,190,126,103, 87,174, 41,228, 92,
-215, 7,230, 92, 61,200,215,235, 44,213, 57,111,178, 67,184, 91, 3,204, 91, 34, 99,182,155,156,132,170, 83,175,165,169, 82,157,
-122,226, 11, 45, 52, 5, 83,177, 32,166,166,104,112, 34,232, 66, 85,207, 66, 53, 44,122,153, 72,116,109, 0,109, 73, 77, 57, 91,
- 73, 4,127, 12, 19, 26,217,235,186,203,125,227,203,207, 39, 88,240,203,203,216,164, 59,239,249, 30,192,243,174,218,154, 85,250,
-246,230, 64, 49,198, 88,140,217,146, 93,105, 11,144,164,146,185, 8, 71,106,107,177,160,168, 82,226, 12,102, 32,102, 28,199,113,
-235,160,219,187, 93, 60, 60, 29, 72, 50, 28, 59,119,111,139, 33,233,127,153, 85,150, 5,219, 40,198,101,113,237,249, 89, 78, 18,
-195, 78,229,113,152,145,101, 83, 80,164, 73,186, 72,180, 69,140,135, 28,150,130,242,164, 60,202, 11,101, 9, 41,237,112, 21,148,
- 80,141, 76, 56, 34, 68, 79,153, 22,159, 78,186,232, 9, 61, 52, 97,215,220,155,250,174,186, 29, 19,111,132, 57,190,111, 45, 92,
-242,188, 98,255, 0,143, 72,198,179, 76, 58,225, 26,205,120,183,202,147, 22, 98, 60,217,118,184,247,134, 86,211,241, 20,164,169,
- 37,137, 77,215,161, 6,163,195, 85,185,120,130,145, 25, 9,110, 18, 14, 14,163,161, 35,191,180, 41,171,179,115,232,204,184,253,
- 73,102, 14,225, 86,120, 87, 52,149,198, 97,244,200,130,187,144, 43, 13,198, 46,169,149, 81, 74, 78,201, 43, 8, 41, 10, 52,166,
-224, 26,157, 51, 18, 34, 83,213,118,194,193, 38,184,167,154,209,139, 89, 39,101, 57, 20,203,139, 88,253,250, 65,149, 98,129,106,
-251,116, 56,252,102,219, 12, 25,111,174, 82, 74,210, 30, 82,106,142,202,109,214,166,180, 58,204, 51,124,158, 58, 40, 69,187, 6,
-171, 78,123,234, 8,223,108,242, 25,192,140,187, 62, 83,228,173, 17, 46,215, 91,131,147, 8,113, 73,236,237,237,116, 40, 32,173,
- 36,162,169, 35,234,175,212, 18, 71, 71, 29,229, 52,143,204,221,151, 13,251,180, 26, 42,241,109,227,174, 99,200, 50,103,176,251,
- 46, 41, 56,228,145, 86, 89,156,195,201,238, 44, 56, 54, 80, 63,111,230, 86,135,197, 69, 32,245,174,175,206, 76, 4, 68,137, 0,
- 20, 15,150, 93,149,188,244, 63,233,110,247,195, 48,110, 25,223, 35, 32, 14, 69,186,146,202, 89,253,217,251,104,192,131, 65,229,
-149, 0, 85, 64, 41, 83, 64, 55,220,157,103,185, 44,209,107, 70, 39, 79,189, 29,143, 78,221, 79, 85, 96,117, 82,138, 89, 74,236,
-122,105, 36,179, 73, 37, 3,200,220,103,133,242,182, 54,238, 41,156,193,110,109,165,221,192, 88,162,219, 85, 40, 22,218,197, 20,
-149, 15,104, 53,213,127, 39,197, 99,242, 21, 26,175,128,156, 79,143,218, 15, 80,125,161, 88,113,124,174, 71, 29,112,186,137,152,
- 76,119, 31, 97, 29, 8,246, 21, 90,114,223,202,254,216,252,229, 61,134,100,110, 70,128,162, 74, 89,152,194, 95, 82, 71,176, 45,
- 43,111,245,141,121, 78,111,236,214, 52,228,244,223, 40, 15, 3, 17, 47,139,197,122,214, 23,239, 70, 77,113,107,168,140,207,136,
-145,143,193,164,165,120,223,242,217,196, 49,251,139, 87, 28,222,224,187,177,105, 65, 97,142,208,211, 42, 32,215,230, 64, 36,159,
-129, 52,213,151, 13,251, 77,129,137, 49, 59,164,110, 35,177,210, 63, 72, 14,255, 0, 73,101, 87,205,126,238,103,229,192,194,152,
-138, 65,238, 53,151,208, 75, 55,208, 29, 89, 43, 6, 61,105,198,109,141,218, 44,204,165,136, 45, 36, 33, 8, 64, 0, 80, 10, 13,
-134,189, 74, 16, 16, 0, 0,192, 47, 43,156,204,201, 36,185, 43,183, 78, 77, 89,164,146,205, 36,150,105, 36,179, 73, 37,154, 73,
- 36, 23,171,110, 51,245, 67,149,114, 70, 33, 63,129, 50, 25, 86,206, 63,187, 41, 56,239, 32,178,204,211, 29,112, 45,172,206,102,
-240,155,141,188, 84, 20,202,113,184,239,219,212,164, 85, 84,146,149,244,106,162,235,141,201,198,174,185,249,177, 6, 67, 88,105,
-212,177, 12,125,154,137,127,229, 35,186,162,229,113,114,172,182,191, 38,100, 64,233, 61, 89,131,137,110, 30,210,198, 58,127,152,
- 30,202,185, 79,225,239,205, 70,235,117,204,152,185,228,183,246,101,204,185,194,109,179,108,153,109,141, 2, 93,185,220,230, 4,
-181, 72,180, 75,254,112,167,162, 24,182, 54,223,109,109,152, 17,252,192,162,147,230,185, 69, 42,240,102,241,177, 16,104, 71, 64,
-122,130, 72, 62, 92,131, 72,108, 98,243, 98, 14,233, 55,176, 44,249,192,229,100,108,121,203, 89, 14,132, 0, 71,153, 18,241, 59,
-220, 52, 28, 17,178, 47,237, 61,103,185,211,132, 61,105, 92,242, 14, 71,227,252, 9,156,154,247,198,151, 27, 12, 24,248,205,199,
- 32,200,161,165,182,167,192,122,216,235,113,225, 33, 87, 39, 84,250, 93,242, 31, 83,206,205,140,195,181,239, 73,117,228, 56, 2,
- 96,194,206,196,140,106,156,246, 70, 98, 71,112, 17, 61, 14,237, 79,203,163, 56, 97, 18, 71, 77, 34, 70,179,231,241,249,178,149,
-208,172, 78, 80, 49, 27, 73,144,234, 54,232, 62, 98,238,197,204,132, 79, 93,100, 14,155, 57,131, 6,252,201,102,230,217,250,248,
-234, 69,237, 50,230,194,205, 19,101,184,181,123,181,179, 99,122, 4,172, 93,216,216,204, 27, 92, 53, 72, 67,241,110, 76, 93, 11,
- 46, 59, 33,214,155, 79,202,179,231, 41, 42, 9, 79, 49, 50, 56,241, 10,247,136,232, 96,227,105,220,226, 67,121,145,102, 49, 49,
-112, 0, 39,182,137,217,184,220,148,172,183,203, 50,212, 88,199,112,218,198, 4, 64, 68, 59,137, 9, 49, 36,128, 58,252,197,211,
- 95,211,213,183,213,119, 12, 98,156,160,206, 87, 14,237,154,253,139,177,238,124,111,111,189,222, 32,200,157,114, 43,198, 33, 59,
- 42, 39,223, 73,120,121, 72, 55,127,184, 66, 76,133, 0,129,186,106,142,218,214,230,217,141,145, 58,182,145, 7, 4, 76,128, 88,
-124,197,139, 1,175,202,221, 58,251,213,166, 5,121, 88,208,187,112,148,216,131, 0,100, 9, 63, 36, 92, 57, 58,124,238, 53,233,
-219, 70, 95,153,152,119,165,223,206,187, 9,245, 97,123,245,149, 47,139, 32, 95,121,206,242,228,167, 87, 47, 32,185,227,210,216,
-134,100,209, 4, 69,109,187,171, 97, 1, 12,128,202, 55, 61,173,252,163, 94,137,145,202,240,182,226,199, 23,206, 49,174, 45,160,
- 18, 14,222, 63, 47,142,167,218,188,207, 23,136,231,169,204,150, 95,145, 25, 89, 39,214, 82,129,103,240,249,195,105,160,246,104,
-172,206, 5,207, 95,241, 10, 95,114,152, 56,246, 95,199, 88,197,143, 22,150,179, 22, 85,221, 6,208,231,216,161,196, 20, 9, 29,
-140,221,164, 45, 65,181, 16,162, 18,210,201,167,210,122,107, 59,126, 55, 1, 8, 19, 11,103, 34, 58, 15,155, 95,103,229, 31,104,
- 90,108,124,191, 82, 78, 98, 51,170, 17,137,234, 94, 58,123,127, 57,233,238, 40,203,242,120,193,191, 51,204, 27, 43,206,145,235,
-174,233,115,155,138, 75,117,147,102,143,146,221, 26,187, 73, 19, 82,226,204,135, 98, 56,219,175,121, 81,138, 10, 64, 64, 80, 77,
-105,218,145,189, 68,245,102, 79, 27,104,175,244,128, 2, 58,176, 96,221,159,163,159,224,148,103,163,113,121, 74, 77,191,173,145,
- 32,157, 28,238, 47,220,141, 75, 15,103,212, 21,242, 93,178,222,226,138,220,101, 37, 71,169, 35, 88,197,186, 84, 83,243,124,244,
-121,207,126,162,121,211,211,182,105,193,184,215,243,140, 95, 8,190,206,184,229,114, 91,153,110,137,246, 81,222,184, 89,223,109,
-101, 19, 95,105,110, 85, 17, 93, 52,105, 42, 35,183,165, 72,174,203,210,252,182, 62, 38, 62, 84, 45,147, 27, 34, 4,116, 37,203,
- 75,192, 22,234, 58,172, 55,171,184,124,156,220,156, 73,211, 29,209,174,100,203, 80, 24, 60, 15,114, 31,161,232,233,129,249,130,
-198,252,201,113,152,152, 54,117,249,126, 38,215, 49,155, 33,156,114,188, 94,232,166, 18,187,191,220, 37,164,199, 73, 18,212,203,
- 69,182,194, 86, 79,107,237,185, 82, 40, 72,168,208, 28, 1,227,136,156, 51, 55, 13,205,182, 67,183, 87,232,231, 95,113, 10,199,
-212, 99,147, 6,185,224,237, 59, 95,116, 75,124,206,205,213,131, 13,123,130,170, 47, 63, 96,223,157, 15,230,131,109,181,112, 71,
- 55, 97,214,126, 45,224,182,230,177, 58,247, 34, 35,141,147, 41,198, 13, 82,167, 27, 19, 37,200,119,203, 4,169,182,210, 16,130,
-186, 21, 42,160, 20,234,176,178,248,126, 24,155,105,156,173,177,152,123, 62, 0, 15,105,212,183, 64,178, 25,248, 92,231, 56, 35,
- 77,208,141, 53, 59,146,253,126, 36,159, 96,208, 63, 83,225,114,178, 63, 70,242,184,227,136,120, 71,138,184,114,217,247, 86, 76,
- 7, 41,176,205,184,186,167, 99,180,235,118,187,117,186,107, 14,201,116,186,164, 23, 20, 93,124, 41, 73, 69, 84, 84,178, 66,105,
- 93,100, 42,229, 60,219, 50, 44,180,235,100, 36,222,242, 70,159, 80,248, 45,173,220, 71,149, 86, 53, 84,135,141, 83,139,244,232,
- 1, 15,237,212,252, 81,143, 31,241, 30,109,145,122,180,203,185,231,146,173,255, 0,105,108,183, 66,133,131,224, 13, 45,214, 93,
- 34,206,132, 55,115,185, 78,237, 97,107, 8, 84,201,203, 75,100, 46,139,236,140,130, 64,174,226,223,147, 8,226,194,152, 23,114,
-101, 63,127, 64, 62,129,175,131,200,162,241,241,103, 44,187, 47,176, 51, 1, 8,127,167,172,143,254,105,105,226,209, 9,209,113,
-178,218, 46,234,140,171,164,102,228, 42, 19,201,153, 16,188,132,168,178,250, 18,164, 37,196, 87,233, 80, 74,136,168,240, 39, 85,
-177,153,139,177,234,173,101, 1, 38,112,237,170, 66, 88, 61, 34,198,127,214, 46, 87,202, 23,104,151, 91, 55, 25,198,199,112, 75,
- 78, 28,113,156,150,241, 98,132,244,139, 36,171,203,178,227, 73,129, 96,157, 25, 47,180,202, 31,140, 18,153,109, 41,186, 45, 73,
- 69, 65,112,106,242,124,169, 24,144,172, 16,100,101, 51, 39,136,145,249,132, 88,131, 32, 88,150, 63,148,191,143,101,159,175,135,
- 7, 54,118, 17, 40,192, 66,177, 29,178, 49, 31, 41,155,130, 35, 32,224, 56,252,192,141,116,238,144,185,119,160, 62, 68, 87, 10,
-218,113,216,188, 99,107,149,152, 95, 50,174, 67,184,230,247, 72, 86,236, 22,231,146,166, 29,222,255, 0,115,126,196,243, 82,114,
-191, 58, 18, 99, 57, 21,230,190,224,163,190, 67,109,144,150,208, 23,221,219,119, 87, 57, 95,156,101,230,145, 24,194,177, 16,243,
- 17,113, 24,238,210, 44, 93,193,110,128,158,165,153, 80, 93,233,251, 60,136,196, 82, 12,165, 59, 12,136, 21,153, 52,165, 45,186,
-205,195, 49, 15,214, 64,116, 14,235,229,139,208,175, 60, 94,248,166,229,124,207,240,166,164,250,133,133,143,112,213,191, 27,188,
-220,101,217,100,221, 35,221,241, 71, 24,254,126,236, 73,226, 67,138,100,213,158,245, 44, 56,159, 56, 80,124,199, 97,217,243, 84,
- 70,208, 33, 54,172,202,226, 64, 18, 1,164,251, 92, 54,189,124, 52, 74,190, 7, 34, 85, 25, 78,183,180, 66,129, 18, 76, 73, 6,
- 13,189,139,233,211,199, 84,192,244, 83,233, 23,151,248, 99, 33,109,222,110,179, 35, 37,198,114,155,125,242,211, 54, 45,213,203,
- 76,148,226, 13,183,146,205,186,198,139, 29,164,184,164, 59, 14,230,204,132, 56,255, 0,103,123,129,246,209,230, 14,206,208,200,
- 28,199, 43, 86, 68,127,165, 45,166, 38, 39, 71, 27,254, 80, 9, 62, 6, 36, 48,232, 24,150,215,173,135, 9,195,221,141, 47,235,
- 71,112,152,144, 46,199,103,204, 72, 3,196, 72, 23, 61, 75,128,250,116,182,214,203, 45,158,202, 31, 22,120,140,196, 18,158,114,
-108,175,182,105, 13,121,210, 29, 53,113,215, 59, 0,238, 90,169,186,142,231,199, 89,105, 76,203,169,118, 90,248,194, 49,118, 12,
-250,253, 43,167, 77, 78, 89,164,146,205, 36,150,105, 36,179, 73, 37,154, 73, 44,210, 73,102,146, 75, 52,146, 89,164,146,205, 36,
-150,105, 36,179, 73, 37,154, 73, 44,210, 73, 12,242,159, 15,241,247, 52, 89,173,248,255, 0, 35,192, 23, 11, 69,178,231,110,200,
-226, 50,165, 45, 33, 51,173,114, 83, 42, 58,207, 97, 29,201, 11, 77, 20,147,178,129, 32,138, 29, 79,143,147, 58, 9, 48, 44, 72,
- 35,232, 61, 83,103, 1, 46,168, 86,223,232,215,211,165,182, 93,174, 92,124,121,181, 27, 53,238,247,152, 64,105,215, 29,113,164,
- 92,178, 6,157, 98,114,203,107, 81, 74,144,164, 60, 66, 80, 71,106, 40,158,208, 59, 70,137,151, 41,121, 7,230,235, 17, 31,162,
- 61, 19, 5, 49,240,238,255, 0, 90,228,111,208,223,166,134,241,171, 30, 39,254, 95,238,179, 99,184,253,223, 5,181,165,201, 18,
- 22,180, 90, 47,136, 74, 38,182,165,169, 69, 74, 90,194,118, 90,143,114, 74,149, 66, 42,116,239,238,215,238,148,183,107, 41, 9,
- 31,120,232,185,228, 69,128,110,129,150,235,247,163, 94, 24,190,196,180, 67, 74,175, 22,228, 99,235,136,229,133,118,107,237,218,
-222,229,180,194,179, 42,192,216,136,184,143, 33, 77, 36,195, 90,144,176,130, 2,234, 74,170, 73,215, 33,201,219, 18,122, 29,206,
-238, 1,119, 59,181,113,226,145,162, 39,232,255, 0,193, 69,218,255, 0, 47,255, 0, 76,216,227,137,151,133,219,110, 24,253,229,
- 10, 74,154,186, 99,215,203,197,182,123,104,254, 89, 22,208,227, 98, 92, 73, 8,120,161,214, 33,178, 92, 10, 81,239,113, 33,195,
-251,207,155, 79,151, 51,124,191, 49, 18, 30, 4, 2, 58,147,208,142,196,150,246,105,209,112, 99,196,116,209,118,202,244, 55,233,
-182,118, 19, 23,142,231, 89, 94,127, 17,135, 42,249,115,143, 25,235,132,247, 22,153, 57, 17,116,206,115,207, 91,165,226,162,167,
- 84,164, 40,175,185, 10,161, 73, 4, 3,166,142, 90,241, 51, 48,117, 32, 14,131,252, 61, 23,124,136,179,127, 26,174,104,254,131,
-248, 26, 29,206, 78, 71, 9,220,137,140,210,107,175, 72,155,144,177,149,228,109, 93,228, 9, 48,226,193,125,167,103, 55, 44, 62,
-166,214,220, 38, 62, 66,170, 36,161, 37, 61,164, 13, 56,242,247, 16, 7,202,195,182,216,183, 82,122, 51,119, 63, 90,231,233,227,
-237,250,202,239, 71,162,222, 2, 70, 45, 55, 9, 16,103,127,149,167, 57, 50, 91,144,255, 0,155,221, 0,110, 92,219,210,114, 21,
- 75,105, 65,224,180, 72,110,106, 67,141,186,149,119,162,148, 6,149, 26,103,247, 75,183, 9, 56,112,221,135, 64, 54,183, 78,141,
-212, 46,249, 17,102,254, 60, 84, 93,203,208,191, 10, 65,194,179, 11, 38, 29,110, 7, 39,204, 45, 95,201,174,147,242, 41,151,107,
-152,152,227,115,228,221, 90,145, 49,127,116,212,165,186, 37,202, 90,203,136,121, 43, 31, 40, 74,128, 74, 64,146, 60,181,166,112,
- 50, 58, 68,184, 96, 3,104, 3, 13, 27,160,232,204,184,104,139, 22,238,164,253, 41,122,111,187,250,123,181,100,210,178,187,251,
-153, 22,109,150,221, 83,125,185,205,113,119, 7, 16,217,102,223, 30,216,203, 72,114,235, 42,100,165,246,181, 29, 36,169,199,142,
-230,137, 9, 72, 74, 68,124,142,112,200, 49,219, 29,177,136, 97,211,196,158,192, 14,254, 11,180,213,177,220,187,166,133,202,215,
-110,188, 68, 84, 11,171, 8,145, 9,127, 83,111, 36, 41, 39,223, 67,227,160, 35, 35, 18,225, 74, 67,170,219,206,222,145,249, 5,
-236,176,223, 56,120,179, 35, 27,146,145, 91, 84,174,192, 96,173, 63, 80,101,110, 60,208,242,148,126, 96,147, 82, 9, 52,218,148,
-184,196,228, 35, 24,180,139, 33,173,164,147,162,137,226,255, 0, 69, 60,137,121,203, 24,157,204,126, 84,124, 98, 34,131,233,139,
- 20,181, 87, 20, 58, 15,221,186,241,238,255, 0, 72,168, 80,116, 21,220, 73,127, 37, 17, 31,148,185, 77,133, 5,245, 86,170, 28,
- 40,118,248,232,137, 5,180,181, 25, 9, 74, 16,132, 0, 0, 74, 82, 18,145,248, 1, 77, 81, 18, 79, 84, 99, 45,186,226, 75, 52,
-146, 95,153,142,254,115, 94,169, 80,104,155, 14, 45, 79,255, 0,114,187,127,244,142,152,100,159,181,123,135,249,203,250,160,126,
-161,203, 14, 44, 15,186, 21,219,175,227,112,215, 55,165,181,117,198,252,224,125, 83, 76,108,249, 54, 28, 95,207, 31,178, 97, 93,
- 77,126, 31,251,195, 66, 95,149, 40,116,100, 93, 24,162,197, 15,148,126,116, 94,172, 44,145, 62,234, 54, 63,138, 30,213, 20,184,
-151, 96, 94, 42, 41,215,165,200,104,115,159, 54,232, 63,143,165, 16, 48, 32,236, 93,116,219, 63, 58, 63, 82,247, 11, 51, 23, 97,
- 99,197,187, 22, 74, 93, 41,133,118,237, 74,188, 63,249,194,163,241,211,198,108,217,216, 46, 28, 40, 14,231,248,250, 23,127,255,
- 0,246, 99,212, 12,203, 52,137, 86,187, 30, 56,110,140,161, 71,203, 92, 59,162,145,220,159,122,103,138,143,199, 72,230,204,118,
- 9,208,192,129,238,126, 11,167, 30,252,226, 61, 65, 94,237,241,101, 38,199,142, 23, 94, 3,206, 74, 98, 93, 0, 66,188, 64,172,
-227,166,126,190,126, 1, 72,120,218,199,115,240,252, 20,213,143,243, 93,245, 3, 54,240,253,158,229,103,199, 91,125, 42,109,108,
-118, 67,185,142,230,212, 74, 85, 90,205, 59,131, 79,236,211,227,155, 51,216, 40,101,131, 1,220,174,216,191,154, 47,168,101,100,
- 77,217,101,217,241,212, 50,183, 11, 94, 96,137,114,232,161, 86,212, 63,219, 72,167,183, 82,140,169,123, 18,253, 12, 60, 74,114,
-250, 91,245,131,201,156,207,146, 93, 49,220,226, 13,178, 44,152,113,147, 41,145,109,102, 83,100,148,189,228, 58, 21,231, 62,232,
- 52, 36, 82,148,211,134, 76,143,130,229,184, 80,136,112, 74,120, 53,149, 92,220,220,182,223,111,193, 95,254, 22,157,250,130,134,
-253, 60, 86,244,228, 51, 73,167, 98, 41,240, 87,246,235,159,168,146, 95,167, 11,106,111,114,148,126,148, 83,224,127,183, 92, 57,
- 50,246, 46,121, 33,123, 77,201,229,124,197, 8,175,192,255, 0,110,152,114,228, 60, 19, 37, 88, 11,239,243, 23, 73,169, 66, 43,
-240, 63,219,174,126,174, 94,196,221,129,125, 55, 23, 78,229, 8,175,192,255, 0,110,151,234,229,236, 75, 96, 89,252,197,239,238,
-167,244, 31,237,210,253, 92,189,137,108, 11,201,158,161,185,109, 31,246,127,231,210,253, 92,189,137,108, 11,207,243, 39, 1,217,
-180,127,217, 63,219,165,250,185,123, 19,197, 64,175,162,232,242, 77, 82,132, 3,238, 7,251,116,191, 87, 47, 98,239,146, 23,223,
-230,242,127,186,159,208,127,183, 92,253, 92,253,137,121, 33,124, 85,214, 66,190,164,160,252, 65,254,221,116,101,207,216,151,146,
- 23,164,220,223, 80, 1, 73, 79,111,178,135,251,116,239,213, 75,216,153,229,133,130,104, 65,170, 16,128,175,245, 78,145,202,151,
-177, 55, 96, 94,141,205,243,251, 41,253, 7,251,116,223,214, 75,216,150,197,228,221, 30, 78,253,169,253, 7,251,116,223,214,203,
-192, 46,249,106, 55, 37,203,231,217, 97,166, 68,102,219, 91,132,171,229, 88, 81,168, 66, 10,205, 40,161,189, 6,153, 60,249, 14,
-193, 17, 78, 52,103,213,213,122,205,253,119,231,150, 12, 87, 48,155,102,133,107,123, 40,198, 27, 23, 6,227, 58,212,162,135,225,
- 84, 5,175,181, 50, 18,162, 83,215, 99,208,104, 12,190,102,202,128, 96, 53,247,254, 40,241,198, 64,247, 63,199,208,169,159, 47,
-255, 0,196, 19,234,111, 8, 34, 38, 45, 96,196, 95,158, 59,138,140,184, 55,149,160,167,101, 32,128,213,201, 7,116,157,247,212,
- 88,188,198, 77,132,188, 98,222,227,248,174,199,139,129,238,127,143,161, 43, 46, 31,241, 51,122,229,142, 2,163,226, 88, 33, 31,
-181,223,108,200, 15,244, 94, 6,143,254,229,103,128,248,254, 41,231,137,175,196,252, 63, 5, 27, 51,254, 39,191, 94,113,130, 84,
-156, 75, 0,237, 53,175,117,175, 34,240,223,194,243,174,255, 0,114,177,186, 15,227,233, 77,254,215, 91,245, 63, 15,193, 15,206,
-255, 0,138,163,215,252,119,130, 25,195,184,245, 72,219,184,155, 86, 71,226, 60, 63,247,222,153,253,206,207, 1,241,252, 87,127,
-181, 87,226,126, 31,130,238,199, 63,226,142,252,193, 47, 44,173,247,240,254, 61, 74, 66,130, 19,219,107,200,197,122, 87,173,232,
-251,116,201,114,214, 14,195,227,248,167,127,104,175,196,252, 63, 4, 93, 23,254, 37, 95, 92,142, 48, 95,145,138,224,137, 77, 9,
-255, 0,118,100, 9,167,104,220,154,222, 58,105,191,221,236,240, 31, 31,197, 60,112,245, 30,231,225,248, 40,185, 63,241, 54,250,
-245,109, 75, 45, 97,248, 24,100, 16,148, 21,218,178, 42,147, 90,116, 23,129,236,219, 75,251,189,158, 3,227,248,174,142, 26,175,
- 19,240,252, 22, 39,254, 38,191, 94,203, 80,109, 24,150, 3,220,216,238,144,231,242,172,139,181, 59,244, 31,251,231,115,174,142,
- 90,207, 1,241,252, 82, 60, 61, 67,185,248,126, 10, 62, 79,252, 80,222,189,227,119,188,254, 35,199,237, 70, 7,229, 11,181,228,
- 93,196,127,254,228, 13, 70,121,139, 95,164,126, 63,138,108,184,138,135,115,240,252, 23, 37,159,254, 42,111, 91,211,111,205, 91,
- 39, 98,152, 3, 49, 28, 80, 73,115,249, 86, 71, 90, 19, 74,237,120, 87,244,106, 27,121,187,227, 18, 99, 24,191,184,254, 40,123,
-120,200, 8,184, 39,248,250, 21,179,227,159,206,159,212,238,123,142, 70,186,181,143,226,134,107,169, 10, 88,141, 30,234,227,100,
-158,180, 31,125, 81,250, 78,178,115,245,214,100, 36, 68,161, 0, 61,210,254,101,139,228,179,237,199, 44, 0,250, 95,241, 76, 24,
-127,153, 71,172, 25, 16, 19, 61,120,230, 52, 27, 32, 43,104, 87, 93,235,255, 0,241,250,229, 95,184,118,216,118,129, 7,247, 31,
-230, 85, 7,158,200,255, 0, 44,126,163,248,173,182,191,204,199,213, 28,167,139,115,108, 88,235, 96, 26, 26, 66,186, 19,255, 0,
-245,199, 83,207,215, 25, 35,164, 97,245, 31,230, 77,151,168,175,143, 88,199,234, 63,138, 35,185,126, 97, 30,160, 96,192,251,132,
- 90,108, 74,144, 69, 66,126,210,225, 79,213, 51, 85,135,247, 15, 52, 22,217, 95,213, 47,230, 83,142,118,211,218, 63, 31,197, 13,
-200,252,204,189, 80,178,217,127,249, 30, 56,150,135,247,161,220,255, 0,255, 0, 63, 79,255, 0,246, 22, 95,249,107,250,165,252,
-201,255, 0,222,237,240,143,199,241, 80,143,254,109, 94,163,226,184, 91,118,201,141,154,120,166, 29,208,127,253,246,136,175,215,
-121,178,233, 10,254,169,127, 50,101,156,237,177, 14,209,248,254, 43, 83,159,155,167,168,215,135,109,186,193,143, 56,245,104, 65,
-135,116,160,255, 0,249,225,162, 63,239, 92,176, 30, 81,175,234,151,243, 33, 15,169,111, 61, 35, 31,168,254, 41,147,196,159,152,
- 79, 58,102,204,249,217, 37,162,200,207,137, 76, 88,243,144,122,127,235, 37,175, 84,249,191,185, 89,117,233, 8, 86, 79,186, 95,
-204,156, 61, 69,127,120,199,234, 63,138,107, 67,245,109,114,118, 25,145, 49,136,109,184,145,243, 14,199,186,254, 46,106,158, 63,
-186, 92,169, 63,237,213,255, 0,166, 95,206,162,159,170,173,143,248, 99,241,252, 82,187,148, 63, 50,108,207, 24,184,127, 47,196,
-160,218, 94,120, 16,159,246,182,102, 46,191,254,110, 66, 53,117,141,235,254, 78, 97,229, 93, 95, 84,191,157, 62,159, 83, 93, 97,
-109,177,250,143,226,160,174, 31,153, 23,168,198, 96,137,208,172,248,242,146, 69,104,184,151, 31,234,154, 52, 76,127,112,114,221,
-140, 43,127,116,191,153, 88,127,120,187,194, 63, 31,197, 76,224,191,154, 5,238,225,104, 90,243,123,100, 8,247,166,234, 20,152,
-141,201, 67,100,143, 96,113,229,159,215,160,242,189,127,202,194, 95, 37,117, 17,238,151,243,174,255, 0,123,176,117, 3,248,250,
- 80, 38, 85,249,183,243,108, 43,203,172, 99,182, 91, 9,180, 36,209, 11,149, 26,226,183, 8,255, 0,169, 49, 3,245,106,203, 31,
-214,249,210,143,205, 10,223,216, 37,252,200, 9,250,150,208, 91,108,126, 63,138, 56,226, 31,204,143,147, 57, 12,118,220,224, 89,
- 89,114,180, 62, 67, 19, 83,250,151, 41, 90,170,228,127,113,185, 28,112,241,174,179,244, 75,249,208,242,245, 62, 72,233, 24,253,
- 71,241, 68,185,111,174,158, 72,199,220, 82, 34,194,181, 59, 74, 17,220,196,179,253, 18, 70,171,169,253,210,228,167,255, 0,219,
-171,234,151,243,166,127,221, 57, 63,229,135,212,127, 20,166,228, 31,205,119,212, 14, 44,231,101,166,199, 96, 88,173, 43, 34, 37,
-200,255, 0,240,102,167, 90,108, 31, 92,230, 92, 53,141,127, 84,191,153, 58, 30,168,201, 61, 99, 31,168,254, 40, 69,127,156,159,
-170, 22,213, 69, 88,113,126,223, 3,246, 87,111,254,144,213,135,253,229,120,235, 24,125, 71,241, 70, 71,212, 55, 17,210, 63, 31,
-197, 99,127,156,167,169,247,150, 27,110,195,139,149, 19, 64, 62,202,237,253,119, 13, 50,126,181,188, 7,219, 15,168,255, 0, 50,
-146, 60,253,199,180,126, 63,138,112,240,239,173, 31, 91, 28,179, 8,220, 33, 89, 49, 84, 48, 7,113, 74, 33,221, 73, 31,166,126,
-177,156,167,239, 36,240,165,182, 81,135,213, 47,230, 86, 56,185,121,119,254, 88,199,234, 63,138, 57,199,121,171,215, 45,198,228,
-168,247,155, 54, 49, 26, 16,221, 46, 8,119, 58,254, 53,158,117, 75,111,239,220,155,228,132, 9,247, 75,249,145,240,175, 52,150,
-219, 31,168,254, 40,107,155,125, 92,122,201,226,104,230, 84,107, 78, 51, 49,160, 10,169,246, 55, 78,148,175, 81, 60, 13, 88,113,
- 31,188,249, 25,133,140, 43, 31, 68,191,153, 5,153,151,147,142, 88,136,191,211,248,165,158, 25,249,169,122,159,190,228,113,236,
-183,139, 6, 56,195, 46,173, 40, 90,145, 14,230,149,110,105,183,116,242, 63, 86,180,182,254,225,230, 8, 25, 70, 21,187,120, 75,
-249,149, 84,121,251,157,136,143,212,127, 21,107, 95,245, 7,123,129,135,183,145,206,141, 24,201, 83,105, 90,144,218, 92, 9,238,
- 35,160, 5,100,245,247,235, 33, 95,238,247, 43, 57,237,242,233,255, 0,211, 63,231, 87, 7,149, 2,177, 34, 53, 72,172,255, 0,
-243, 18,231,108,121,243, 34,195, 96,180, 46,206, 20, 65, 92,166, 39, 41,116,173, 63, 98, 82,127,163, 90,220, 47,220, 12,251, 99,
-243, 70,167,246, 9,127, 58,167,200,245, 5,208, 58, 70, 63, 31,197, 6,171,243,104,230,212,221,147,109,254, 67,100,249,144,165,
-212, 70,159,177, 73, 72,161, 63,121,227,221,182,218,178, 30,179,206, 53,153,109,175, 66, 7, 73,119,127,249,189,136, 97,234,107,
-246,190,216,253, 71,219,237, 84,105,198,187,137, 69, 54, 27, 15,134,189, 54, 69,111, 23,182, 17,229,184, 41,215,166,152, 87, 31,
- 85, 53, 97, 67,238,220, 91, 97,179, 66,186,110, 6,227,223,160,242,163,186, 14,143,195,176,137, 5, 33,204,156, 89,119,107, 25,
- 69,241, 44, 21, 70, 81, 62, 99,137, 31, 41, 61, 55,246, 29, 84, 87,112, 58, 43,153,214, 92, 16,149,252,124,183,109, 55,213, 98,
-247, 77,237, 87, 29,144,146,127,134,225, 27, 40, 29, 25, 9,130, 25, 9,104,100, 89,143,187,109,198,174,207,219, 38, 54, 72, 53,
- 10,173, 62, 82, 77, 13, 71,178,135, 78,144, 92,174,106, 91,141,162,194, 98,124,235, 90,190,136,207,119,164,255, 0,234,221,169,
- 77, 63, 17, 77, 66,138,156,145, 67,201, 77,191,146, 32, 56,138, 24,242,171, 20,145, 94,171, 1, 73,253,105, 26,124, 75, 33,137,
-117, 49,144, 66,184, 91,213,247, 32,247,186,201,239, 65,241,249,106,104, 63, 3, 81,240,212,209,145, 93, 9,255, 0,232, 99, 44,
-137,113,230,152,147,225,187,220,205,222, 20,136,238, 36,109,218,226, 90,251,149,143,251, 77, 29, 62, 50,213, 43,181,138,186,172,
-108, 59, 71, 77, 63,114, 15,106,234,111,174,152, 44, 41,139,123, 67,166,184,100,152, 86,208,162,157,134,153, 41, 38,144,235,239,
-152,173, 55,114,230,192,179,204, 86,150,228,182, 5,158, 98,180,183, 37,176, 47, 33,210,189,136,210,220,150,192,178,186, 91,147,
-128,101,131, 93, 5, 37,247, 93, 73,102,156, 18, 94,144, 79,110,156,218, 40,202,251, 93,235,227,174,145,162,227, 44, 81,237, 26,
-137, 59, 98,240,165, 18, 55,211, 72,100,182,178, 24,228,105,238, 68,179, 9,140, 14,233, 49, 23,247, 5,191, 21,161, 0,133,143,
-251, 36,232,123, 11,148,126, 36, 23,230,103,174,172,170,245,197, 25,211,249,206, 50,240,255, 0, 42, 93,219,153,105,113, 72,169,
- 73,105,212,169, 94, 83,131,251,170, 67,166,149,233,248,106, 9,211, 27, 3, 21,121, 16, 25,126,102,114, 77,229,199,111,170,112,
- 40,152,133,101, 45,212,214,128, 29,135,232,212,181,192, 68,104,158, 32, 16, 53,221,198,194, 84, 64,216,208,254,141,181,211, 6,
- 11,146,100, 35,126,185, 20, 52,226, 65,216,131,248,116,233,250, 52,206,138, 34,193, 9,185, 57, 75,146,148,174,158, 88, 53, 3,
-125,206,192, 87, 76,146,107, 57, 69, 24,122, 28, 43,109,134, 65, 46, 19, 84, 15,105,166,230,154, 26, 82, 68,198, 46,156, 22,203,
-107, 76,194,105, 15, 32, 59, 45,104, 73,109,177,186, 80, 18, 55, 82,190, 3,245,233, 4,157, 67,222,225,191, 38, 71,100,116, 37,
- 15,110,181, 26,208, 54,145,226,125,149, 26,226,238,224,202, 13,247,149, 10, 51,144, 98, 45, 45, 60,186,254,241,208,123,148, 7,
-237, 83,223,225,168,173,155, 39, 66,177, 52, 7,148,182,136,235, 81,154,234,228,201, 39,229, 9,112,165, 63,128,212,112,145, 37,
-118,216, 5, 19, 98, 76, 51,120,105, 79, 37,106,139,220, 10,209, 80, 15, 81,176,166,159, 61, 2, 2, 93, 25,126,143,250, 11,199,
-110,173,189,109,184, 90, 37,137,248,217, 41,237, 41,116, 47,178,130,165,167, 82,104,180,168,110, 55,252, 54,214, 43,155,227,165,
- 56, 72,199,170,197,114,252,127,154, 73,238,191, 76,113,153, 56,109,222,201, 26,221,228, 4,188,234, 64, 45,132,238, 8,235,172,
- 63, 1,199, 88, 45, 38,125,150,110,172, 64, 75, 20, 31,200,150,152,118,185,255, 0,111,101, 66, 2, 21, 74,147,245, 87,199, 90,
-147,135, 41, 29, 21,102, 86, 43,201,130,232,177, 76,179,218,160,125,182, 70, 18, 22,122, 45, 96, 29, 86,101, 97,205,220, 33,100,
- 12, 11, 40,140,233,172,122,229,110, 89,179,178, 2, 64,175,122,124, 77,116, 20, 42,144, 58,169, 68,146, 55, 36,130,212, 71,156,
- 82,119, 81, 38,159, 31,195, 71,214,241, 80,221,170,118,250,118,244,235, 39, 40,176,162,237, 50, 58, 90,140,224,168, 91,128, 84,
-248,235, 61,202,115, 91, 37,180, 39,209, 84, 89, 77,229, 56,218, 56,214,224, 91,108,132,142,148, 27, 3,250, 41,168,240,193,201,
- 58,161,239, 15,209, 6,103,188,190,152, 16, 67, 76,175,180,254,213, 14,174, 35,131,181, 10,104,116,136,191,230,114,103, 95, 68,
-229, 57,220, 59,198,199,227,171,234,219, 99, 41,104,172, 68,232,156,152,205,238, 21,207, 11, 10,121, 96, 58, 5,119,248,104, 88,
-224,188,183, 43,200, 17,183, 84,177,189,230, 17,173,211, 30,102,181, 33, 68,130, 62, 52,213,128,197,220,170, 47,202, 17,112,134,
-174,183,246,174, 14, 21,182,122,232,202,176,182,170,137,228,110,146, 35,226, 27,165,254, 21,195,178,208, 73, 36,133, 40,111,227,
-240,208, 92,150, 12,102, 24,162,105, 59,244, 79,159, 58, 66, 45,191,113,118,108,185, 40,164, 47,161, 61,117,135,204,163,201,150,
-138, 67, 65, 9, 61,202,243,145, 41,226, 60,149, 0,126,158,228,211, 87,220, 77,186, 0,250,168,246,144,150,183,101,182,220,127,
- 54,158,209, 78,135,225,171, 73,198, 82,146,158, 14,185,241,196, 63,115,185, 54,195, 9,253,226,213,242,143,129,166,159, 56,124,
-172,136,136,101,250,101,232,106,204,229,187,139,255, 0,218,217, 13,202, 37, 53, 80,220,168, 83, 94, 17,234,154,183,101, 21,233,
- 94,151, 99, 18, 79, 86, 77,235,229,234,217,143,197, 84,201,206, 33,182,198,223, 57, 2,164,235, 43, 10, 68,172,219, 1,169, 90,
- 44,188,184,227,192,202, 73, 41,159,102, 12,231,119,231, 45,178, 88, 74,172,201, 65,108, 40,110, 77,124,119,214,243,138,225,141,
-117,137,247, 94, 85,204,242,166,235,123, 36,166, 91,197, 10,255, 0, 53,162,235,143, 48, 82,132,168, 81, 64, 83,198,186,220, 96,
- 89,182, 13, 37, 71,109,165,220, 35,124,151, 43,191, 90,241, 4,196,184, 56, 66, 81,218, 8, 81, 59, 1, 77, 9, 94, 21,115,177,
-226, 20,241,202, 38, 44, 82,207, 36,229, 12,110,227,107, 92, 9,159, 58,208,162, 58,138,126,173,104, 49,240, 37, 13, 66, 22,203,
- 92,178, 26, 54,172, 75,200, 23,186, 55,226,107,183,112,232,105, 90,106,120,206,123,101, 31,249,135,217, 36,128, 27, 15,188,125,
-233, 4,145,184, 10,240,216, 29,125, 16, 75,175, 89, 91, 18,201,238,168,235,174, 36,202, 70,212,248, 98, 75, 79, 17,243, 36,212,
-111, 79,215,168,102, 4,162, 66,150, 18,219, 32,172,175, 30,222,177, 76,203,143,165, 98,249, 34, 3,171, 83, 61,201, 36, 10,116,
-237,253, 35, 99,172,197,212, 26,228,235, 73, 69,134,113, 84,255, 0,154,177,111,252,191,228,168,174, 91,201,254, 94,137, 45,173,
- 29,213, 52, 65, 88, 20,209,120,210,220, 20, 89, 53, 30,171,126,122,183,100,229, 14, 73,130, 72, 43, 80, 65, 41,235,186,107,182,
-141,153, 65, 87,161, 93,216,165,202,109,162,234,197,202,238, 74, 33, 60, 62,209,199,192, 52, 81, 27,164,171,217,184,166,160, 70,
- 75, 80,138,174, 47,202,183,194,139,125,125, 97,111, 55, 58, 26,218, 85,127,103,206,161, 31,162,154,124, 80,196,178, 39, 98,239,
- 54,247, 57, 83,214, 9,143, 74, 37, 62, 30,193,167,130,187, 3,170, 43,244,239,156, 59,197, 28,205,109,152,231,238,237,201,148,
-220,128,170,125, 40, 87,238,222, 72,255, 0, 89,165, 40,124,116,225, 38, 78,152,112,191, 76, 96,249, 79, 71, 68,134, 22, 22,195,
-128, 45, 11, 73,168, 80, 34,160,130, 60, 14,157,230, 33,100, 25,118,161, 61,137,166,162,243, 84,123, 86,214,156,220, 10,123,180,
-237,233,166, 11,217,112,123, 52,221,206,152,203,225, 88, 86,218,225,146, 76,188,133,166,180,240,246,235,155,215,118,175,139,113,
- 40, 52,235,165,185, 45,171,231,156, 61,154, 91,151,118,175,161,212,248,233,110, 75,106,250,149,130, 54,211,227, 37,205,171,223,
-154, 61,154,115,165,181,125, 11, 10, 30,253,116, 73,113,150,196, 40, 82,135,109, 56,149,198, 89,222,157,115,114,227, 47, 42, 89,
- 63, 13, 52,149,213,169,215, 14,224,124, 52,211,170,120, 8, 23,149,111, 42,182,193,110, 75,116, 11,169,111,230, 35,180,169, 64,
-165, 32,251,148, 77, 63, 29, 11, 48, 85,158, 60,116, 95,152,158,181,175, 49,166,181,144, 98, 73, 30,109,161,197, 11,132, 86, 86,
-106,182,149,243, 36,210,189, 70,221,170,167, 78,186,116, 21,160,142,139,243, 87, 54,113,182,231,201,137,245, 0,178,164,119,117,
- 3,254,109, 79, 16,186, 74, 13,186,203, 10,136,240,173, 74, 7,112, 63, 3, 93, 54,197, 25, 64,153, 37,199,181,106, 0,212,171,
-111,211,161,200, 76, 80,113,194,139,237,172,238, 10,186,124, 53, 20,250,174,130,155,188, 47, 97,110, 83,110, 94, 39,144,220,113,
-218,208,113, 71,233, 73, 34,161, 35, 67,109,213, 74, 52, 71, 83, 47,134, 75,171,129,103, 71,150,149,209, 1, 85, 0,161,128,127,
-105, 94,213,117, 58,121, 9,178, 41,131,195, 60, 99, 19, 39,185, 51, 29,230,211, 37,247,150,148,161,170,119,126,214,212, 65,235,
-248,237,160,178,173,218, 60, 21,118,117,198, 17,234,202,203,100,126,142, 56,143,144,176,101,225,211, 34,176,140,184,132, 46, 36,
-232,237, 33, 14,180,226,118, 41, 14, 38,132,212, 87, 99,182,179, 22,229,218, 37,184, 21,148,135, 61,109, 55, 59,184, 85,123,148,
-191, 44,142, 85,183, 9,143,227,209,149, 45,248,107,117,185,112, 66,104,226,146,143,152, 60,200, 59,168, 41, 52, 52, 27,252,119,
-161,152, 60,148,172, 58,245, 91, 60,126, 90, 55,141,122,164,187,126,149,179,136, 50, 68,134, 35, 45, 74, 69, 20,164,246,144, 64,
-173, 8, 53,232, 65,246,234,244, 89,187,170,146,200,247, 10,238,250, 15,143, 7, 16, 75, 78, 73,101, 81,111, 13, 20,198,185,196,
- 32,163,204, 73,161, 11, 64, 59,119, 39,173, 60, 70,161,186,113, 3, 85, 81,155,125,113,234, 23,232,141,158,197,112,147,140, 35,
- 36,198,210,165,186,148, 15,149, 40,218,132,117,247, 84,107, 45,202, 87, 26,198,232,104, 86, 83,147,198,104,238,130, 16,110, 93,
-238, 93,241, 75,187, 67, 88, 80, 81, 4,184, 8,223, 85,216, 57,103, 87, 43, 55, 92,229,184,238, 92,121,247, 31,103,217,138,210,
-238, 51, 1,199, 34,160,208,145, 90,126, 26, 35, 39,145,162, 26, 72,135, 77,203,197,149,133,226,135, 37, 51,118,198,109, 74,182,
- 95, 89, 91, 50,209, 81,218,178,122,252, 53, 94, 39, 9,235, 29, 80, 59, 12,122,165,196,104,151, 75,197,249,110, 54,130,235, 45,
-175,184,138,108,119,233,169,255, 0, 73,184,104, 23,124,153, 73, 52,225,122,222, 60, 97, 97,255, 0, 44, 49, 17, 75,185,161, 33,
- 0, 80,128,157,169, 93,102,172,244,191,153,102,233,120,168,165, 51, 29, 16,123,220,223,149,115, 29,220, 33,127, 40,173,119,216,
-138,154,234,230,174, 58,188, 64,225, 15,172,181, 92,121,247, 27,228,102, 7,222, 73,169,100,110,104,118, 58,117,121, 49,153,100,
-227, 9, 4,163,184,199, 84,121,166, 49,254, 40, 58, 34, 80, 36, 56, 74,179,170,155,139,146, 95, 45,182,225, 21,151,127,113, 78,
-208, 41,225,171, 12, 96, 64,213, 43,111,144,208, 40,153, 8,122,226,249, 83,198,174, 30,180,212,251,181, 85,230, 38, 93, 87,116,
-108, 77,197, 54, 31, 72,219,216,117,101, 89,220, 19, 35, 64, 5,209, 71, 24,229, 16,176,171,224, 51,192,242,149, 65, 82, 42, 54,
-208, 92,133,127, 33, 40,204,121, 8, 23, 87, 87,132, 94,227,222, 79,180,249,136, 67, 75, 8, 74, 65,173, 59,137,167, 77,120,143,
-169,243,109,174,237,160,171,236, 58,161,127, 84, 95,127,244,187,197,153, 92,164,165,232,141, 26, 80,118,208, 80,255, 0, 70,179,
-149,115, 25, 53, 51, 72,173, 12,120, 42,108,147, 2, 18,159,212,255, 0,161, 60, 10, 6, 20,254, 65,138, 48,152,211, 88, 79,114,
-131, 98,128,252,117,169,225, 61, 69,146,109, 17,176,184, 40, 62, 95,130, 24,177,220, 58, 42,215,128,241, 34,113,187,140, 91,157,
-211,120,200, 87,123,134,130,129, 53,233,173,205,185,198, 65,162,179, 84,180, 74,182,184,255, 0,168,204, 91,139, 49, 22,220,182,
-128,182,138, 5, 91, 42,166,224,107, 13,153,192,203, 42,194,253, 85,254, 55, 44,113, 7,201,221, 43, 57, 11,213,172,158, 80,201,
- 25,109,197,150, 45,141, 31,145,134,212,105, 95,105,167, 93, 27,129,233,106,241, 6,230,115,226,128,228, 57,155,114,143,204,116,
- 76,236, 6, 56,202,227, 52, 33,213, 46,169, 32,149,143,135,183, 68,121,162,157, 21, 37,131,113, 77, 8,184, 20, 43, 13,172,204,
-184,128,174,196,149, 21,172,116,208,103, 36,202, 77,209, 31, 62, 50,112,175,116,149, 90,245, 73,202, 22,119,124,203, 93,169,208,
- 8,216,246,251,142,181,156,102, 51, 52,136, 85, 38, 4,170,185,113,191,204,113,226,159, 52,138,147,226,125,186,214, 85, 8,182,
-171,166,163,226,187,147,124,186,127, 32, 91, 61,230,129,104, 31, 81,241, 10,212, 81, 17,215, 78,227,236, 41,192, 29,135,222, 62,
-245, 20,243, 98,187,116,215,181, 47, 92, 91, 34,252,201,238, 62, 27,105, 36,187,131,105, 82, 2,144, 40,160,117, 20,244, 83, 71,
- 84,123,132, 92,110,214,140,113,219,219, 61,234,102, 61, 18,160,209, 61,202, 65, 20, 34,189, 40, 43,248,106,135, 51, 89, 50,190,
-198, 63, 42, 94,250,156,191, 89, 51, 54, 25,159,107,108,183,112, 75, 73, 82,168, 9,162,146, 1,254,173, 50,136,237, 68,207,231,
- 26, 40, 59, 10,211,144, 67,102,252,238,200, 79,148,233, 39,106,252,164, 31,215,171, 9,133, 80, 14,168,138,242, 97, 43, 15,149,
- 1,186, 45,167,199,154,130, 5, 77, 10,119,161, 29, 13, 70,161, 40,186,201,147, 21,171,143,103, 35, 53,195,164, 98,146, 93,165,
-225,157,217, 82,250,149, 32,213, 10, 4,248,131, 74,233,241, 41,151, 84, 65,118, 70, 88,101,225,225,111,136,153, 45,246,133, 14,
-215, 15,136, 82, 84, 65, 7,224,106, 52,229, 28, 6,171,170,109,213,182,174, 48,167,131, 87,155, 88, 89, 3,168, 9,119,251, 52,
-148,171,244,163,211, 38, 88,188,187,133,172,243,100, 30,233, 81, 16,171,107,134,164,147,246,199,203,109, 71,222,166,194, 85,248,
-233,166, 65, 13,104, 71,235,146,219, 13, 45,231, 84, 18,218, 82, 84, 74,205, 0, 3,122,239,168,165, 32, 58,166, 70, 36,150, 9,
- 63,154,122,224,225,252, 55, 42,147,138,151,149, 54,229, 26,173,168, 67, 79,152, 11,128, 84,164, 17,183, 83, 77, 11,102,104,137,
-246, 43, 74, 56,137,216, 28,232,160,100,122,210,187, 78,187, 58,213,174,196,235, 86,166, 20, 26,121,217, 42, 74, 77, 73, 36, 0,
- 18, 79,236,211, 66, 89,201,199,160, 86, 84,112, 31,230, 95, 47, 30,174,242,120,150, 3,121,110, 12,100, 75, 91,198, 59, 49,139,
-228,169, 41,166,202, 95,104,234,118,160,212, 95,220, 37,224,164,151, 7, 80,238,150,252,193,249,147,231,184, 13,166, 74,237,246,
-120, 10,158,128, 74, 20,183,214,190,208,119, 21, 72, 3,122,105,126,186,101, 79, 14, 6,158,242, 74,155, 7,231,137,127, 98,251,
-217,150, 98,237, 57,104, 79,150, 63,216,159, 81,115,233,249,171,222, 40, 73, 86,158, 50,167,224,149,158,159,168,244,146,102,113,
-247,231, 89,192,121, 13,201, 22,236,190,217, 54,206,211,128, 1, 34,137,125, 1, 68,210,164, 35,122, 83, 83, 71, 48,247, 8, 59,
-125, 56,127,193, 32, 85,147,226,239, 84, 92, 19,203,209, 90,119, 7,201, 97, 75,146,232, 4, 69, 83,201, 68,128, 79, 64, 91, 93,
- 21, 95,117, 52, 84, 50,163, 46,234,170,254, 30,250,186,199,234,213, 31,183, 33,151,192, 83, 74, 10, 73, 21, 5, 36, 17,250,181,
- 60,100, 15, 69, 93, 56, 17,212, 47,104, 85, 43,219,169, 31,106,110,194,182,164,248,142,154,120,144, 41,133,108,239, 79, 90,233,
- 58, 99, 44,239, 79,183, 73,210, 94, 84,178,118, 29, 52,215,213, 32, 22,165,172,116, 61, 53,217,150, 10,120,141, 18,199,212, 84,
- 57, 75,196,164, 72,140,133, 56,210, 82, 75,168,107,117,148, 83,170, 64,234, 83,215,240,208,238,234,203, 20, 56, 95,143,222,179,
- 51,249,176,115, 41,182,185, 15,247,186,218,151, 34, 20,196, 26, 41, 77,187,243, 26,215,223,212,111, 93, 75, 24, 43, 70, 96,169,
- 86, 97,113, 93,202,224,236,191,251,202,146,161, 74,111,214,187,233,228,109, 76,153, 64,183, 25,109,247,184,138,212, 16,160,116,
-210, 93, 67,212,160, 12,133,218,200, 43, 74,183,216, 31,192, 83, 81, 16,152, 67, 21,203, 13,226,169, 40, 27,144,145, 79,196,234,
- 25,141, 82, 18, 77, 12,102,253, 37,168,172, 89,218, 95,151, 9,191,223, 57, 77,254,106, 80,124,122,234, 38,101, 40,146, 47,194,
-225,207,191, 95,227, 64,105,162,245,214, 82,208,132, 70,108, 84, 32, 19,218,157,135,141, 58,234, 41,216, 32, 28,168,229, 38,213,
- 93,207, 76,220,115, 11, 19, 97, 87,153, 65,180,205,104, 8,233, 9,162,201,117,202, 2, 1,233,181,127, 13, 98, 57,220,227, 41,
-180, 86,127,146,158,243,162,176, 92, 51,197, 23,172,167,144,216,125,138,170,214,210,254, 95, 18,175,105, 62,234,244,208,248, 19,
- 55, 0, 10,203,215,138,103, 98,189,182,111, 79, 24,180,220,125,137, 51, 24, 71,243,160,132,247, 23, 16, 20,151, 82, 55, 9,112,
-117,168,240, 87, 81,173,110, 47, 21, 24,151, 90,236,122, 35, 86,169, 17,234, 3,208,231, 30, 21, 72,201, 32,219, 90, 97,110, 21,
-188, 16,144,144,182, 30, 85, 66,208, 84, 62,166, 93, 31,138, 21,238,209,247, 52, 6,170,194,204,152,198, 14,170,150, 59,194, 82,
- 21,202,241,173, 22, 68,159, 49,151, 2, 2,128, 29,221,189,223,195, 93, 54, 52,222,135, 89, 94, 71, 59, 96, 37, 97,242,243,133,
-179,219, 30,142,191, 80,184, 87, 2,182, 98, 88, 4, 59, 83,173, 7, 37, 45,164,151,148,234, 65, 38,160, 26, 29,121,141,252,205,
-151,204,141, 89,104, 49,234, 18,175, 85,195,200, 92, 91,140, 93,238,145,203,236, 33,180, 44,208,134,208,148,149,117, 62,205, 83,
- 89,155,117, 18, 39, 85, 75,200,225, 70, 54,134,238,139,236,248,245,150,205,110, 68, 56,108,161, 17,219, 29,191, 42, 82, 52, 60,
- 15,152, 55, 72,185, 87,245,227, 66,184,179,104,171,191,170,254, 45,177,220,148,229,238, 35,105,109,212,119, 45,194, 40, 1, 63,
- 13, 94,240,153,164, 79,106,195,114,116,196, 88, 91,197, 46,125, 45,113, 53,178,237,116,125,139,146, 18,168,206,169, 71,204, 88,
- 73,166,254,253,122,247, 23,141,190, 14,172, 56,156,104,204,106,128,125, 92,240,117,163, 28,190, 61,112,182,161, 38,132,130,180,
-132,238, 43,238,211,115, 43,105, 50,170,230,120,253,146, 36, 36,150, 21,114,147,140, 93,188,200,195,186,138,233,244,159,215, 77,
- 85, 95,136,101, 18,235, 56,251, 83,119, 34,229,129, 59, 16, 45,190,129, 94,222,210,159,120, 26,205,254,136,139, 10,121,179, 68,
-145,183,218, 21,144, 93, 92,146,242,138, 19, 82,104, 55,219, 87, 81,179,203, 1, 54, 48, 18, 90,239, 49,101, 66,115,237, 27,171,
-136, 21,246,215, 86, 21, 89, 18, 29, 54,218,153, 73, 96, 56,240,187, 73,236,147,178,255, 0,210, 21,218,154, 22,251, 0, 58, 40,
- 4, 8, 69,119,203, 49,180,198, 40, 71, 79, 10,106,199, 22,110,201,179, 12,130, 37,176,244,137,169, 97,177,220,234,141, 0, 39,
-196,233,220,141,145,140, 9, 77, 16, 37, 57,184,139,255, 0, 48, 48, 11, 88,157,104, 89, 91,107, 32,132,160,168, 80,251,169,175,
- 43,229, 5, 87, 89,168, 71,227,238,128,209, 48,112,111, 84,188,137,132,229, 31,204,114,229, 23,173,235, 63, 51,107, 81, 52,248,
- 87, 67,228,240,116, 93, 91, 65,157, 29,139,201, 78,153,137, 35,142, 96,245,141, 99,204,112,103,109,150,170, 54,227,169,163,128,
-154,159,134,218, 23,142,244,245,149,218,231,162, 55,148,245, 23,234, 35,180,170,209,152,242,140, 87, 44, 46, 91,216, 33, 43, 41,
-165, 78,196,126,141,108,177,248,217, 9, 58,206, 11,144, 66,243,105, 51,162, 38, 44,199,148, 82,145, 64,146, 84, 70,172,134, 43,
-201,114, 87, 5,195,106,188, 49, 10,248,220,178,186, 71, 74,129, 52, 36,120,232,203, 48,201,129, 81, 9,185, 86,219,132,253, 64,
-226, 86, 11, 59, 37,215, 82,183, 82, 2, 85,237,165, 53,141,228, 56,169,153,116, 82,137,183, 68,115,202, 30,168,172,183,140, 54,
- 69,186,196,233, 18,156, 65, 71,121, 52,160,166,253, 53, 91,141,199, 74, 51, 6, 67,162, 55, 43,145,157,176,218, 85, 27,228,123,
-132,169,151,167,164, 56,249, 93, 73, 59,168,159, 29,111,232,252,189, 21, 87,154,197, 7,152,178, 36,184, 74, 1, 52,247,232,175,
- 48, 0,164,140,140,250, 46,164, 38,119,242,247, 35,247, 30,238,246,207, 95,244, 87,174,130, 54, 19,237, 31,122, 36, 86,118, 31,
-120,251,215, 98,145,215, 99, 79,102,189,161,122,154,251, 24,209, 84,240, 58, 73, 21, 32,214,200, 32,105,179, 79,130, 45,227, 27,
-205,221,217, 79,227,201,108, 46,222,234, 74,213,220, 5, 54, 77,105,170, 14, 65,163,170,209,241,145,243, 11, 41,236,251,128,109,
- 89, 46, 47, 22,235, 9,165, 70,239, 73, 0,145, 83, 85, 2, 74, 72, 26,175, 25, 76,172,255, 0, 78,196,132,147,185,227,147,112,
-188, 65,246,228,170,140, 54, 21, 29,207, 44, 18, 80,227,107, 38,135,217, 80, 65,213,145,181,202,173,150, 59, 18,165,112,108,134,
-208,230, 42,132, 75, 79,154, 60,190,208,105, 90, 26, 83, 82, 58,134, 37,138, 24, 19,242, 12, 94,240,171,189,173,138, 69, 36,172,
- 45, 3,100,239,227,238,166,152, 92, 23, 71, 6,152,100,113,142,229,115,218,134,187,180,182,130,160, 62, 59,158, 83,117,253,218,
-143,253,229, 55,219,251,212,248,251,117, 52, 36,225, 5, 58,246,149,185,203,231,223,184,235,141,118,151, 89,237, 80, 3,112,164,
- 40,210,163,221,189,116,230, 81,146,202,243,126, 95, 28,211, 98, 78, 7,123,176,100, 18,155,134,196, 3, 26,228,218,228, 43,176,
-121,110, 52, 35, 58, 79,113,165, 18,164, 32, 31,142,160,154, 97, 27,149,103,245,199,249,185, 63, 62,247,116,227,110, 42,148,150,
- 49,214,202,161, 61,113, 96,254,241,218, 80, 40, 33, 64,237,243, 5, 36,159, 17,160,236,155,173, 6, 31, 30, 35, 17, 35,213, 36,
-120,135,157,227,221,239, 15, 78,148,231,123,193,144,241,121,100, 21, 21,146, 42,107,170,156,201, 22, 96,175, 49,106, 0,162, 78,
- 76,245,145,122, 45,166,209,107,144, 91, 29,253,238, 20, 26, 21,174,181, 36,238, 60, 54,213,118, 62, 59,151, 37, 88, 92, 64, 26,
- 40,120,222,163,174,242, 96, 45,149, 75, 90,157, 89,239, 72, 81,253,162,160, 63,163, 86,112,136,101, 85, 96, 46,132,114,188,199,
- 36,206,110, 14, 91, 3,202,236,144, 79,154,233,220, 4,131,237,248,107,165,130,146, 40, 89, 60,101, 37,169,193,153, 46, 83,204,
-109,199, 84,170, 87,181, 35,160, 20,174,230,186,236, 74,116,164,202,114,205,198,214,213, 8,246,225,188,247, 8,238,113, 95, 74,
- 17,212,147,241,166,158, 74,131,204, 42,125,206, 39,186, 91, 38,153,248,211,206,182, 91, 10,113,183, 91, 82,146, 65, 79, 74, 41,
- 59,141, 11, 57,106,142,171, 40, 51, 16,155, 92, 35,234,251,213,231, 10, 38, 45,189,139,170,174,216,156,101,144,109,243,146,151,
- 9, 72,234,144,225, 29,244, 31, 29, 58,188,163, 5, 13,216,148,100,245, 12, 85,225,244,215,249,130,241,255, 0, 53,200, 93,151,
- 33, 97, 88,245,253,166,195,133, 55, 39, 26,109,183,183, 8, 62, 82,137,223,115,211,174,172, 40,207,222, 88,172,246,119,167,229,
- 88, 50,137,112,172, 44,121,204,201,105, 47,176,160,166, 86, 59,146,164,154,130, 14,226,154,177,133,174,179, 51,129, 5,136, 91,
-210,234,123,106,117, 33,155,168,136, 95, 11,195,168, 27,123,244,146,101,229, 79,170,187,116,210,117,208, 23, 36,233,169,100, 81,
- 70,135,192,123, 78,185, 41, 58, 46,154,220, 32,190, 73,186, 71,155,142, 62,162,164,150, 2,127,122,130, 20,126, 90,208,145,218,
- 65,219,174,198,163, 67,163,170,142,213,249, 57,249,158,241, 43,104,155, 39, 38, 17,138,100, 32,135,205,198, 17, 75,140,173,183,
- 85, 64,181, 37, 20, 52, 39,169,237, 4, 30,181,212,240,154, 60, 73,194,252,237,190,190, 24, 91,169, 82,251,150,131, 66, 71,179,
-161,175, 67,169,157,212,114, 40, 2,225, 61, 40, 90,234,118,173, 71,192,157, 68,116, 80,146,200, 74,232,176,234,200, 78,230,191,
-215,166,148,194, 93,105,143,251,167, 64, 27, 44,144, 63, 13, 69, 34,146, 53,193,140,201,146,212, 83, 64,202, 62,119, 9,254,234,
-124, 55,212, 50, 42, 68,240,224,164, 58,171,209,188,133, 40, 46,161,132, 22,199,206,170,253, 69, 63,135,142,131,200,175,124, 83,
-103, 29,193, 92,143, 79,182,153,249, 59,145,213, 35,247, 22,214,212,165,182,194,122,213, 4,165,180,248,212,147, 82,117,139,229,
-105, 16,146,160,203,136,138,180,120, 37,230,243,196, 83, 80,250,155, 42, 83,128, 20, 43,168, 3,217,168,177,227,229, 0, 86, 62,
-252,163, 68,157, 88,222, 23,231,204,131, 35,127,190,122, 74, 97, 39, 98, 86, 15,179, 90, 60, 94, 76,247, 87,120, 60,148,172,212,
-141, 20,207, 45,114, 29,187, 36,136,187, 59, 75, 31,114, 5, 16, 69, 43, 82, 55,247, 83, 84,156,215,168, 54,104, 18,228,121, 13,
- 24, 37,231, 18,112, 84, 8, 89,203, 89,105, 90, 1, 91,161,213,133,210,160,232,110, 54, 81,205, 13, 46,232, 28, 12, 77,229,213,
-178,129, 22, 25,142,133, 54,176,164,129, 66,161, 74,116,247,105,151,122, 78, 53,204, 16,180,223,144, 50, 90,115,127, 40, 89,113,
- 41, 13, 32,173, 61,204,154,213, 95,222,223, 65,114,222,156,175,106,165,229, 44,102,241, 64, 19,189, 93,219,227, 91, 22,132,182,
- 12,138, 81, 61,170,218,186,195, 71,211,242,126,186, 42, 89,115,246, 8,109, 72,254, 75,245, 5, 43, 42,185,253,172,135, 10, 90,
-119,171,117,168,214,135,139,226,133, 50, 4,170, 99,144,103, 39, 42, 75, 9,203,229, 99, 54,147, 58,211,221,247, 46,154,132, 36,
-116,214,218, 60,168,164, 0, 21,246, 62, 95,147, 29, 23,108, 60, 58,227,203,173,201,149,124, 73,243, 59, 84, 66, 86, 54, 85, 55,
-213,166, 60,198, 64,116, 86,207,212, 68,200,248, 42,213,202, 56, 91,184,110, 94,228, 22,155,162, 65, 42,219,221,166,100,196, 64,
- 21,137,228,106,242,228,135, 46,215,139,139,145,254,204, 34,137, 87, 93,191,163, 85, 2,160,238,171,124,213, 43,139, 97,146,150,
-208,144,195,148, 90,246, 62,205, 83,102,101,136,163,233, 70, 86,158, 28, 15,195, 84,233,167,185, 69, 53,174,222,207,134,179,214,
-115,210,140,182,128,142,242, 68,130, 14,186,201,107, 12,186, 43,237,250, 36,246,239,241,247,107, 71,129, 35,124, 92,160,237,131,
- 21,197,116,228, 5, 94,217, 80, 64, 53, 3, 91, 94, 55, 7,116, 29,114, 20,239, 65,175, 95, 46, 12, 94, 83, 33, 8,254, 25,238,
- 7, 85,124,157, 69,246,248,168,167, 29,137,243,194,124,237,109,112,181,102,188, 33, 40,100, 10,171,184, 14,180,247,235,207,249,
-126, 22,127,154, 37, 77, 93,161, 50,228, 70,227, 28,241,245,182,181, 32, 56,118,237, 4, 13,103,232, 55,208,124, 84,243,136, 61,
- 16, 78, 91,196,184,213,158,232,180,218,230, 5, 69, 32,158,218,215,125,106,112,243, 39, 56,234, 21, 77,212, 13,201, 49,202,118,
- 72,246,151, 10,152,112, 44, 26,146, 7,184,211, 90,140, 8,111, 14, 83, 12,118,160,118, 46, 11, 74,182, 53,174,218, 34,202,246,
-201, 50, 75,171,239, 22,164,129,227,162,233,213, 49,151, 68, 59,156,248,167,190, 59,170, 65, 59, 81, 36,211, 66,230,214, 37,217,
-113,138,147,111, 54,190, 20, 22, 87, 37,106,108,142,132,255, 0,102,171,161,133, 19,170,151,114,138,159, 38, 68,151, 10,150,162,
-165, 43,165,117, 97, 77, 26, 39, 66,189,197, 77, 99,118, 25, 82,218,243, 6,195,174,222,221, 13,124, 54,150, 71,211, 75, 47,169,
-183,171,238,215, 14,159, 55,122, 63,161, 67, 72,127,180,125,227,236, 42, 96, 52, 62,241,247,173, 81,207,205,228,186, 1,254,233,
- 58,246,213,233, 43, 84,134,212,194,250,109,225,248,233, 46,174,168, 47, 5, 14,207, 29, 50,125, 19,225,213, 29,113, 12,104,211,
-175,137,142,160, 59,220, 33, 2,170,237, 21, 61, 42, 79, 67,239,233,170, 30, 88, 29,154, 45, 23, 21, 99, 75, 85, 99,173,120,100,
-104, 56,155,150, 91,180,132,161,106,254, 26, 92, 86,200, 81, 21,235,224, 14,179,112,145, 29, 85,237,242, 19,150,129, 37,114,142,
- 46,143, 27, 35,159,142, 93,130, 23,105,186, 32, 4, 45, 71,228, 18, 19, 94,197, 87,195,184, 18, 63, 70,173,170,179,229,209, 69,
-117, 27,181, 72,140,243, 8,204, 56,154,248,237,182,116, 71, 90,177, 19,220,212,132,164,169, 37, 39,122,138,104,234,175, 4,106,
-171, 45,199,213,192, 93,216,211,150,188,146,221,218,133,135, 9, 33, 11,109, 6,149,174,198,161, 93, 14,250, 32,157,193, 15,172,
- 74,140,251,185,152, 37,225,203, 66, 92, 42,182, 58,106,132,184, 73,237,223,166,161,221,181, 25, 40, 9,133,217, 54, 28,188,104,
-162,245,143,247, 47, 31,119,230,121,129, 69, 6,194,136, 39,183,216, 61,221, 52,109,115, 18, 26,170,219,162, 99,209, 35,189, 87,
-122,224,123, 15,197,229,113,190, 19, 44,180,244,198, 81, 18,230,243, 43, 41, 42,109, 14, 7, 2, 42,154, 29,251, 69, 71,187, 85,
-249, 71,113, 96,175,120,236, 96, 35,184,245, 85, 16,115,108,185,243, 74,228,190, 84,149, 40,147,220, 73, 53, 38,181, 58,140, 84,
- 89, 26,114, 71, 68,246,224, 94, 92,110,107, 33,160,231,206,160, 18, 84, 58,246,142,154,175,190, 26,234,172, 40,158,142,137,242,
- 92,141, 74,187,249,225,117, 42, 81, 35,115,210,154, 14,113,218, 81, 98, 66, 65,117, 89,178,213, 59, 33,184,238,175,112,118, 77,
-104, 77,125,181,247,111,166, 9,144,163,148, 89, 50, 44, 87, 7,173,125,239,146, 20,165,164, 37, 4, 10,128,145,161,229,114,238,
-213,213, 51, 36,117,228,188,251,191, 52,133,118,180,214,251, 0, 15,245,157,112,100, 50,132,192,149, 41,139,223,191,218,217, 11,
- 30, 99,180, 5,197, 15,118,155,102, 96,100,225,142, 83, 58,199,144,174,123,104,243, 16, 19, 21,177, 68,162,189,119,220,232,127,
-213, 58,233,163, 69, 60,197,153,139,187,109, 6,214, 27,243, 20,126,157,251, 83, 94,229, 19,253, 90,120,185,212,100, 24,169, 23,
- 49, 72, 6, 18,215, 44, 4,172,145,228,148,252,171, 66, 82,126, 90, 17,184, 53,223, 82, 70,207,106, 80,186, 64,166, 87, 25,122,
-217,230, 14, 15, 68, 59,117,213,229,228,152,135,152, 60,246, 36,213, 82,152, 98,157,191,187,117, 70,134,157,119, 21,213,133, 25,
-166, 44, 9, 66,101,241,181, 94, 29,152,171,177,195,252,229,199,220,213, 96,102,245,134,207,105,231,212,128,183,226, 5,167,206,
- 96,159,217,113, 29, 82,126, 58,185,174,193, 32,235, 29,151,133, 42,101,211, 68,100, 84, 84, 41,162,119, 33, 54,175, 5,105, 73,
-220,252,222,193,174, 25, 39, 70, 42, 39, 41,148,210, 45,234,121,117,242,208, 15,127,111,212, 7, 94,228,255, 0,164, 58,141, 48,
-205, 27, 68, 88, 42,243,203,188,202,190, 56,154,251,119,102,209, 42,202,232, 11,117, 14,108,219,173,184, 40,151, 18,175, 0,174,
-157,195,162,169, 93, 52,163,162, 21, 13,245,165,201,248,102, 75, 98,159,109,182,206,123,249, 88, 10,122, 43, 46,209,107,140, 30,
- 73, 53, 69,126,110,197,238,149,128,104, 8,174,166,128,100, 68, 87,230,127, 33,201,105,155,164,133,198,115,204, 67,149,170,186,
- 86,162,162,180,241,212,225,114, 73,105,119,158,165, 5, 32,236,177,183,232, 58,108,148, 83, 81, 36,151, 14,219,215,251,117, 9,
- 58,168, 22,196, 50, 80,190,255, 0,219,240,212, 37,147,130, 44,194, 16,234,209,228, 21,118,176,170,119, 15,239,111,176, 63, 29,
- 67, 32,158,159,188, 43, 6, 66, 86,202, 34, 46,142,175,247, 72, 32, 29,235,245, 16, 61,195, 97,161,239,158,216,186,236,180, 10,
-252,122,117,192,111, 22, 8, 16,167, 70,109, 93,241,210,149, 60,234,193,171,142,172,212,161, 62, 62,237,121,223, 45,159,253, 79,
- 98,200,242, 86, 29,202,210, 96, 24,210,179,233,236,196,187, 81,215,193, 1, 99,180,209, 36,211,109, 42, 51,227,105, 1, 82,138,
-197,242,213, 88, 70,120, 90, 62, 61,135,149, 91, 90, 9,157,217, 79,149, 61, 43,173,109, 88,145,149, 90,117, 87,208,195,140,107,
- 97,213, 38,164, 97,153, 28, 28,153,201,146,194,187, 80, 73, 74,136, 59,111,239,214, 39,148,193,144,145,112,178,217,116, 76, 75,
- 80,164,238,249, 37,234,210,216, 84, 52, 18,145,185, 34,190, 31, 13, 13,129,153, 42, 59,166,215,149, 56,116, 5, 74, 39,212,213,
-207, 28,198,148,153, 45, 44, 14,222,210,174,213,108,126, 58,212,195,212, 47, 6,112,174, 97,201,200, 67, 85, 95, 57, 75,153,110,
- 28,129, 49,197, 21,159, 36,171,161, 39,174,168,114,115,229,116,181,232,179, 60,134, 89,186, 72, 70,193, 22,237,126,186,253,167,
-114,187,118, 29, 79,142,162,149,226, 1, 84,198, 11,182,255, 0,133,162,205, 57,181,202, 52,115, 98, 43,190,131,150, 76,172, 26,
- 41, 4, 88,169,203,110, 94,155, 92, 49, 16, 18, 69, 42, 54, 63,242,240,208,240,141,164,169,133,178, 1,116,167,158,111, 54, 6,
- 12, 91,106, 20,167, 21,242, 0,154,131,190,218,211,241,217, 70,184,234,140,167,146,148, 3, 46,139, 23, 16, 94,249, 85,183,111,
-179, 99,170,171, 5,101, 68, 19,239,166,133,228,185,173,165,157, 69,117, 94,104,116, 39,144,240,187, 54,187,208,133, 40,118, 4,
-154,124,218,171,159, 44,100, 52, 43, 55,149, 13,146, 91,174,248,131, 86,139,122,126,201,193,220,146, 54, 4,104,127, 56,221,212,
- 34,113,228,163,229,102, 55, 59, 77,188,196, 89,240,166,218,142, 28,116,103, 55, 71, 74,215,209, 46,114, 22,101,100, 51,150,226,
-193, 21,218,191, 3,173, 70, 45, 98,144,193, 9, 48,229, 13, 94,216, 78, 48,179,220, 7,151,238,213,214, 31, 43, 42,244, 78,172,
-236,117,198,197,250,221, 56, 21,185, 78,254,162,186, 14,251,247,201,208,182, 13,197,106, 77,222, 59, 50,195,145,141, 8,241, 73,
-166,156,219,130,107,237, 82, 18, 50, 27,250, 86,153, 86,201,174,181, 33, 61, 11,106, 35,244,234,191,244,176,239, 21,200,222, 87,
-116, 78, 71,205, 28,104,183, 42, 98,150,174,149, 93,106,117,109,129,197, 87,111, 72,169,224, 12,202, 29,201, 46,151,107,139,138,
- 84,231, 10,129,255, 0,167, 69,217, 88,198, 44,204,161,186, 36, 21, 17,105, 72, 92,146,149,123,116, 61,151,110, 80, 73, 76,170,
- 39,154,106,157,219, 29,117, 17,155, 38,199,170,158,197, 44,182,251,147,158, 84,133, 80,131, 79,213,170,124,187,167, 18,225, 72,
-165,114, 44, 10, 61,182, 57,147, 23,180,129,190,218,131, 19, 54, 68,164,134, 27,128, 92,118,143, 14,135, 90, 40,218,225, 19, 76,
-148,178,111,114,109, 16,200,132, 62, 99,182,162,182, 40,205,236, 16,210, 50,187,167,223, 59, 43,127, 48, 56,210,105,227,186, 87,
-174,136,127, 72,251,199,222,184, 44,249, 79,188,125,234,116, 55,231, 53,216, 54,113, 62, 58,246, 18, 25,122, 90,242,165, 37,214,
-123, 92,254, 34,118,235,215, 92, 93, 89,111, 29,178, 74, 70,245,233,166,200,104,159, 18,200,139, 16, 83,142, 93,210,211, 85,243,
- 15,202, 82,159, 29, 87,103,128, 96,172,248,233,124,225, 59,173,151, 73, 48,177,244, 63,112,113,215, 22,144, 16, 2,201, 81, 2,
-155, 81, 74,169,253, 58,200,204,252,204,182, 53, 87,163,168,236,138, 84,107,250, 76,136,238,247,169, 32, 21,164, 41, 38,132,109,
-210,189,107,162,104, 44,117, 93,153, 59, 74, 96,241,244, 44, 71,146,113, 22,237,217, 98, 17, 33,180,127,178,203,109,225,220, 88,
-115, 96,149, 39, 98,123, 87,177, 7, 67,228,110,132,157, 13, 32,150, 60,169,233, 14, 30, 11, 45,252,155, 10,108,255, 0, 45, 87,
-114,221,142,131, 80, 65,241, 20,233,182,142,196,204,236, 80, 55,215,184, 58,174,220,213,101,188,201,121,183,237,192, 42, 83,100,
- 33,105, 87,202,160,124, 14,254,221, 91, 8, 9, 13, 16,245,204,132, 62,198,105,146,219,240,171,189,182,123,107, 51, 26,138,242,
-154, 66, 8,239, 79,107, 68,168, 80,251, 41, 81,167,108,216,186, 90,114, 12,191, 40,243,206, 67,190,223,114, 89,242, 46, 15, 45,
-213, 42, 67,170, 37,218, 5,143,156,141,233,162,107,164, 55, 69, 53,151,152,232,135, 76,236,153,194, 95,182,199,113,230, 71,213,
-229,213, 95,209,169,229, 16, 80, 91,166,250, 4,220,244,177,201, 19, 29,200,215,104,151,220,220,134,232, 74, 28,234, 9,219,161,
-213, 62,109, 44, 29, 92,224,228,147,161, 86,177,150, 83,117,105, 51, 92,250,144,146, 72, 30,225,190,168,239, 14,174,227, 54, 11,
- 94, 36,199,222,222,190,220, 14,247,212,174,229,174,164,128, 5, 70,162,144, 17, 9,111,114,141,110, 89, 20,214, 16,139,125,168,
-119,186,128, 18, 65, 59,147,208,215, 85, 54, 16, 17,117,135, 10, 99, 29,182, 92,100, 50,210,101,108,251,138,238,112,255, 0,116,
- 86,148, 4,251,181, 93,109,204,137,132, 17,206, 63, 13, 16,154, 75,201, 73,165, 74, 73, 2,187,109,215, 66, 74,229, 35, 34,187,
- 45,200,173,102, 59,100,246,215,219, 77,189,154,108, 45, 77,148, 29, 24, 97,247,182, 25,152,165, 74, 93, 66,104,144,145,212,129,
-162,171,180,161,172,130, 44,122,253, 8,163,113,222,165, 26,129, 90,154,211,109, 17, 25,186,135,107, 45, 73,106, 35,198,174,239,
- 40,128, 82,130,161,242,252,117, 44,102,201,166, 37, 68, 53,154,114, 71, 6,222,215,201,124, 69, 36,177,145,179,188,168,164,213,
-153, 77, 15,152,161, 99,126,180,234, 55,223, 86,184,217, 77,221, 54,117, 70,192,196, 43, 39,233, 79,243,131,225,158, 86, 65,197,
-121,138, 99, 24,223, 32, 71, 33,185, 9,124,249, 81,148,190,157,173,169,227, 85,111,239, 58,208, 85,123,133,154,204,225,204, 79,
-202,173,198, 63,151,227,185, 93,169,155,213,134, 99,114,109,207,164, 41,167, 90, 88, 32,133,108, 54, 21,212,211,146,168, 52,202,
- 39, 80,180,100, 42, 71, 97,108, 60, 90,124,130, 18,224, 32,167,125,135,114, 20,104, 70,161,145, 82,192, 42, 69,235,184, 95,109,
- 88,204,133,194,115,181,198, 75,175, 70,108, 30,246,141,106, 92,242,193,223,181, 95,180,141,232,119, 26,154,166,116,116, 23,228,
-231, 56,114, 85,210,108,247, 4, 69,169,183, 16, 84, 11,101, 68,165, 5, 71,230, 74, 73,223,180,251, 14,142,101, 43,178, 64, 95,
-159, 91,133, 96, 82,149, 52, 31, 19,211,244,233,146, 45,221, 70, 92,158,136,126,243,138,221,150,201,154,227, 74, 75,125, 20, 74,
- 72,161, 27,154,215,217, 93, 13, 43, 67,165, 42, 11, 58,129, 69, 3,189,160,108, 54,166,187,213, 68, 34,203,170, 52, 85,200, 42,
- 80,173, 7, 65,166, 78, 43,157,209,118, 11,107, 75,147, 83,230,171,177,180,210,180,234,118,165, 7,133,117, 1, 58, 39, 5,108,
-253, 50,217,225,139,164, 89,197,128, 67, 93,169,100, 43,112, 21,181, 54,241,161,222,158,221, 87,230,192,217, 22, 81, 77,126,149,
-250, 99,196,165,174,194,213,198,246, 2,238, 82, 63,195,176,145,180,118,146,123,123,169,237, 81,253,163,185,215,154,243,188,125,
-166,127, 40, 89,220,252,114,250, 43,105,195,252, 69,110,179, 71, 69,237,196,124,203, 87,152, 0, 31,174,186,200,217,231,226,157,
- 65, 12,131,194,193, 34, 78, 83,102, 59,236,188,215,219,172, 14,194, 41,173,167, 5,234, 16,224, 19,170,182,148, 12, 75,132, 49,
-151, 88,176,200, 78,247, 93,187, 18,227,159, 50, 71,202, 43,173, 55, 43,155, 92,235,220, 60, 16,217, 38, 50, 26,245, 94, 34,225,
-120,116,184,137, 91,113,155,118, 58,190, 96, 72, 4,107,198,243,178,140,230, 88,148,236,108, 74,217,217, 0,115,238, 51,131,218,
-176,247,217,142,203,109, 92, 23, 64,134,146,145, 85, 19,182,162,227,183,202,192, 92,178,139, 54,136,109, 32, 5, 93, 48, 31, 77,
-210,242,219,235,179, 94, 69, 33, 84,171,183,160, 0,251,186,107, 73,149,200,198,184, 1,221,102,255, 0,182, 60,157,130,238,190,
-241,251,120, 46, 64,152, 49, 88, 10, 89,253,164, 0,119,248,141, 69,138, 39,150, 52, 84,247,226,152, 75, 69,170, 7, 21,100, 57,
-190, 78,134,229, 48, 68,125,169, 90,252,117,170,226,120,153, 68,128, 66, 35, 19,142,149,146,212,104,155,207,250, 74,180,177, 99,
-251,165,182,146,255, 0,150, 58,210,160,235, 86,120,125,177,118, 11, 73, 46, 16, 8,116, 10,181,114,197,130, 62, 11,148,253,187,
-141, 15, 37, 10, 27,129,236,248,107, 47,147, 68,161, 34,177,121,177, 20,207, 81,221, 26,113,247,170,251, 22, 47,105,254, 70,186,
- 37,197, 10, 80, 39,122, 83, 84, 57, 92, 84,175, 46, 19,163,200,195,107, 32, 30, 93,229, 23,110,211, 21,118,136, 10, 59,207,202,
-165, 84, 30,164,237,227,162, 49,120,146, 3, 16,169,114, 96,108,147,165,245,147, 34,203,114,155,153,135, 30,170,108, 26,154, 40,
-208,211,195, 87,113,226,223,160, 83,227,208,253, 17, 76,110, 49,206, 47,175,134, 92,138,160,202,183, 42, 38,190,255, 0,233,212,
- 67, 2,113,179,162, 32, 96,219, 41,104, 23,188,187,136,239,152,117,168,207,154,201, 7,182,160,210,154, 44, 83, 40,157, 66, 38,
-204, 89, 86, 53, 9, 13,154,189, 38,233, 48,178, 1,237, 73, 35,174,167,142, 59,170,137,204,146,160,223,176,203,143, 24,190,158,
-239, 14,134,158, 58, 83,199, 48,234,164,149,122, 46, 88, 31, 36,146,133,159,136, 53,254,189, 75, 84, 80,211,129, 82,238, 75, 84,
-102,234,147, 84,244,173,116, 78,192, 80,128, 16,188,195,156,244,135,210, 71,208, 9,168,252, 53,162,224,106, 17,145, 86,248, 5,
-151,155,252,165, 33, 52, 34,187,239,227,160,189, 67, 49,191, 68,220,178, 12,151, 12, 64, 83, 71, 16, 40,125,189, 53,155,140,100,
- 80, 38, 14,139,112,139, 36,252,150, 82, 45,172, 10, 41,195,177, 58,138,235,118, 68,186,236,106, 46,156,216,223,163,188,201, 49,
- 17,124,105, 75, 44,172,119, 84,116,246,248,107, 57,149,204, 64, 22, 71, 12, 82, 71, 69,195,200,248,234,113,123,106,160, 76, 32,
- 73, 72,237, 53,220,147,162,184,200, 25,144, 64,209, 86,200, 17,162, 4,111, 27, 84,168,133, 76,127, 16,138,212,126,157, 95,206,
- 76, 84,208,137, 80,183, 22, 28,182,198, 41,148,126,125,233, 93, 77, 25, 9, 41, 38, 72, 66,237,148,247, 58,255, 0,236,121,141,
-111,255, 0, 81,205, 18, 0,242,207,188,125,234, 33,111,202,125,227,239, 69, 44,186, 74,252,207,218,223,187,227,237,215,172, 2,
- 8, 94,184,188, 75, 80, 14,247, 17, 65,166,174,133,145, 28, 65,124, 45, 7,230,215, 19,130,158,198,230, 49, 2,252,196,183,151,
-216,217, 90, 82,181,215,232, 62, 4,251,180, 6, 76, 94, 37, 88,227, 22, 33,147,204,173,153,177,217,124,185,230, 50,235, 93,142,
- 80,236, 84,122, 29,182,252,117,148,182,162, 38,181,148,228,252,172,146,188,169, 26,241,140, 95, 36,206,179, 73, 92,105, 41, 30,
-106,104, 77, 20,159, 16,107,177,209,245,211, 18, 29, 14,115,165,168, 95, 56, 35,212, 61,222, 14, 64,239,220,188, 27,156, 66, 3,
-128,159,145,192, 77, 8, 59,248, 29,198,219,111,169,114,241,134,215, 78,199,191,204,153,137, 86,138, 62,118,171,229,133, 98, 73,
-170,138, 65,236,216,247, 36,138,213, 39, 84,194, 59, 78,137,211,142,217, 50,174,156,172,254, 41,115,191, 61,110,112,121, 83, 99,
- 56,166,156, 14, 39,234, 73,170,129, 58,184,196,180,157, 10, 18,250, 54,106, 18,195,146,176, 86,238,182, 57, 49, 96, 30,201, 15,
- 48,236,100,173, 7,117, 5,182,164, 36,143,121,168,209,150,191,100,220,114, 29,126, 89,221, 56, 78,235,254,102,118,214,212, 7,
-174, 55,215, 36, 58,210, 32,193,109, 79, 72,117,104,112,164,132, 33, 0,215,113,185, 59, 15, 19,169,241,231, 41, 48, 8,187,177,
-227, 1,190, 69,130,156,176,240,255, 0,170, 53,182,109,184,100,107, 54, 60,218, 72, 64,133, 46, 92, 7,230, 26,238, 3,129, 37,
-207,152,251, 54,213,224,226, 47,219,187,100,136,234,168,229,206,215, 25,109,137, 1,111,177,241,183, 49, 96, 60,135, 8,114,236,
- 56, 76, 79,146, 20,150, 36, 64,111,201,113,194,130, 10,130,210, 18, 1,247, 29, 80,242,144,219, 29, 21,183, 27,119,157, 50,234,
-194,217,159,117,219, 82,163,165, 39,206, 88, 9, 77, 8,233, 90,239,172,231,189,104, 76, 81,167, 22, 98,137,129, 29,217, 43, 1,
- 83, 94, 7,176, 31, 13,233,227,170,219,236,213, 58, 33, 21, 88,248,182,115,147, 4,151,197, 18,162, 15,112, 61, 77, 53, 91, 48,
-234,127, 49,145,181,179, 10, 90, 90,175,253,208, 27,171,165,117, 95,100, 2, 34, 23,174,139,148,219,101,142, 40,134,151, 1,115,
-173, 60, 79,225,161,101, 91,169,227, 39, 80, 47,114, 93,170,200, 79,107,137,243, 72,218,164, 82,186,154,186, 19,140,157,120,131,
-204,237, 64, 97,233, 46, 62,159, 56,238,131, 80, 8,174,136,133, 76,153, 32,234,123,143,249,169,137, 82,138,166,201, 30, 96,168,
-105, 42, 80,170,207,137,167,128, 26,147,242,132,211, 94,186, 35, 59,127, 41, 67,154,234, 83,213,197,170,181, 27,145,239, 62,207,
-117,117, 25,181, 35, 95,138, 32, 93,228,201,105, 77, 41, 36,182,232,237,170,183,234, 53,209,121, 10, 35, 72,117, 81, 61, 69,241,
-178,161,114, 48,154,194, 65,110, 90,138,130,209, 84, 4,159, 96,237,233,171,250, 50,246,197,212,181, 99, 11, 11, 20,215,244,235,
-200,254,172,184, 45, 49,230,113,133,202,103,242, 68,148,148,193,144, 92,114, 42,135, 85, 14,215,106, 69,127,209,166,164, 28,179,
-245, 67,100,241, 85, 30,234,214, 88,127, 52,126, 73,114,222,229,167,153, 44, 10, 98, 82,146,148, 34, 68, 36,254,232, 30,133,100,
- 46,132, 31,129,252, 52,101, 89,177,146,171,159, 16, 63,194, 82,215,212,103,170,107,143, 32,218, 30,182, 88,165, 65,187,193,151,
-242,189, 17,239, 49,183, 82,170, 80,173, 62,106,104, 79,180,130, 14,141, 25, 48, 1,212, 17,226,230,236, 21, 33,202,125, 53,242,
-222,123,148, 58, 44, 54,213,185, 13,197,158,210,130, 84, 0, 86,213,238,115,112, 10,182, 21, 62, 21,211, 44,231,106,172, 35, 7,
- 5,100,244,116,201,192,127, 46,203, 46, 19, 4,228,220,145, 61, 14,223, 18, 59,218,138,142,210,203, 74, 59,247, 43,187,234, 41,
-234, 43,183,183,223,159,200,231,103,113,249, 67, 5,111, 95, 9, 86, 56,249,139,148,176,245,167,136,241,239, 20,113,180, 91, 45,
-145, 9, 55, 91,130,202, 16,165, 16, 86, 91, 71,204, 84, 43,189, 9, 53, 36,245, 59,232,158, 62,217,219,102,189, 21, 95, 37, 8,
- 66, 26, 42,125,110,105, 79, 73,249,135,204,119, 20,223, 90, 57, 13,171, 48, 36, 79, 85, 49, 2, 34,144,179, 74, 6,197, 10,180,
-217, 73,112,245, 71,252, 81,140,189,121,186, 54,226,144,175,178, 10, 74, 80,132,117, 85, 77,119, 62,254,186,130, 69, 73, 16,174,
-215, 0, 99, 9,181,121, 83, 22,194, 27,242, 2, 80,203,117, 0, 36,158,164, 19,237,241, 39, 65,206, 94, 42, 11,100,193, 94,127,
- 79,252,129,139,227, 22,134, 97, 78,150,153, 19, 10, 67,142,128,104, 10,169, 68,130,163,184, 72, 29, 7, 93, 50, 24,144,180,185,
- 85,146,152,145,213, 89, 92, 15,212,173,131,200, 77,185,245,167,237,154, 79,105,113,123,110, 61,130,187,124, 53, 81,206,122,106,
-188,138,201,143, 84, 13,217,209,129,209,120,201,189, 92,227,150,105, 1,155,127,107,142,171, 96, 65,168, 30, 30, 26,242, 72,240,
- 23,209,110,167,162,163,200,245, 4,129, 32, 50, 91,114,151, 41,228,185,219,102,231, 29,245, 55,216, 62, 82,147, 64, 19,240,214,
-187, 28,157,162, 5, 83,217,203, 78,101,215,188, 35,213,155,216,165,180, 88,231,188, 28,113,180,209, 11, 89,174,169,115,125, 56,
- 12,183, 3,213, 31,139,205, 16, 24,162, 43, 71, 38, 99,220,148,241,126,226,226, 28,118,128,213, 93, 1,248,104, 11, 48,141, 26,
- 69, 88,195, 52, 93,212,169,252,114,227, 17,139,177,183,219, 72, 74, 8,161,242,246,208,151,210,118,185, 66,100,230,136,104,137,
- 90,227,235, 4,233,198,231,112, 29,235, 27,210,128,143,214, 53, 47, 23,201, 10, 8, 65,197,207,204,151,188,149,202,150,156, 11,
- 38,110,221, 5, 40, 75,157, 42,157,169, 67, 77,245,234, 60, 55, 39, 12,128, 52,213, 11,253,255, 0,202,147, 0, 17,118, 31,205,
-175, 95,172,180,146, 18,166,200,165, 83, 95, 13,122,143, 29,198,126,162, 0,171,234, 57,239, 50, 61, 18,179,157,240,139,126, 85,
- 25,235,136,104,119, 83,187, 96, 43,170,142,119,210,160, 64,152,158,139, 51,203, 53,206, 85, 94,149, 96,110,217,146,169, 18, 83,
-242,182, 77, 9,235,214,154,243,236, 44, 61,150,252,197, 99,224, 90, 74, 39,145,178, 4,201,148,139,115,116,238,160,165, 7, 65,
-190,174, 45,133, 64,104,143,149,142, 25,109,193, 63,156,217, 36,166, 68, 6,187,215, 90,130,159, 26,234, 28, 76,234,235,147, 73,
- 27, 76,140,122, 43, 13,139,102,151,155, 5,135,249,229,202, 25, 10, 66,123,170,177,181, 41,173, 36, 50,240,229,175,117,111, 12,
-227, 88,118, 74, 62,104,245, 68, 50,198, 94,179,161, 41, 29,164,160, 4,248, 13, 83,242, 54,213, 35,242,170,188,206, 88,207, 70,
- 73,235, 93,173,203,196,192,164, 10,173,195, 93,199,183, 84, 80,153,132,156,244, 84,162,194, 74,145,203,177,135, 44,150,174,233,
- 40,249, 8,173,117,113, 57, 66,248,232,173,161,243, 69, 44,238,235, 72,116,173,157,190, 26, 4, 68,196,178,128,128,235,116, 21,
-187, 49, 29,171,215,100,225, 13, 58,194,237,178, 91, 39,202,154,152,176, 81,230, 58, 78,195,227,171,190, 55, 35,203,129, 62, 8,
-156, 72,158,201,147, 97,225, 9,243,152, 76,187,232, 13,165, 91,212,210,148,252,117,141,230, 57, 73, 78,226, 2,229,184,211,220,
-235, 68,174, 50,130,151,143,218, 36, 18, 15, 84,244,210,194,204,110,171,181,211, 37,217,140,196, 78, 47,144,197,146,200, 9, 8,
- 88, 11,246, 82,187,234,124,170,197,144, 44,137,242, 4, 85,255, 0,224,108,146,205,153,241,203, 13,124,161, 73, 79,103,104, 0,
-120,117,215,151,114,213, 26,237, 46,173,113,132, 72,213, 84, 63, 87,246,214,173,185,108,131, 25,100,160,149, 84, 3,183, 94,186,
-244, 30, 6,209,229,135, 89,188,170,128, 46,147, 22, 30, 70, 69,161, 74,139, 32, 84,138,164, 19,236,213,221,216,187,181, 9, 86,
-134,243, 92,172,221, 38,159, 32, 15, 44,251, 61,250, 85, 82, 97,162,146,232, 6, 80,205,190,191,229,238,175,199,204,107,255, 0,
-130,230,140, 16,249, 15,188,125,232, 1, 15,148,251,199,222,139,208,174,197,150,213,227,181, 79,179, 94,164,189,137, 99,164, 58,
-201, 66,207,204,157,193,210, 73,107,136,242,188,192,170, 83,125,112,174,130,165,148,143, 57,214,219,119,229, 97,194, 2,149,236,
-208,185, 3,228, 40,204,105, 19, 32, 21,131,194, 44,118,148,225, 12, 73, 46,121,178, 82,146, 18,154,253,116, 21, 4, 87,219,172,
-165,243, 34, 75, 81, 76, 65, 96,130,253, 64,113,155,185,158, 40,110, 86, 16, 91,156,194,124,195,216, 9,238, 71,136, 52,247,233,
-226,195, 24,167,199, 28, 9, 50,168,247, 70,175,120, 21,251,178,114, 20,153, 37, 37, 73,115,112, 20,107, 93,136,247,234,218,131,
-230, 65,138, 30,241,229, 77,198,133, 90, 63, 78,158,162, 45,121,150, 59, 14,195,119, 61,151,168,201, 12,247,117, 42, 72,232, 77,
-117, 87,145, 70,194,139,172,249,161,251,174,158,102,193, 27,200, 50, 71,110,145,133, 37, 58,145, 82,142,134,148, 32,237,241,211,
- 41,158,210,187, 45, 98,197, 39, 57, 31, 40,133,199, 86, 36,195,191, 73, 12,170, 95,123, 49,251,148,144,190,244,110,162,158,226,
- 41, 65,185, 36,143,142,227, 90,206, 59,141,179,144,178, 53, 86, 53, 63, 1,220,172,245,217,113,197, 6,114,232, 21,103,153,203,
-220,127,196, 92,113,118,228,216, 17,221,129,133, 88,229,176,139,132,231,144,153, 14,201, 91,207, 56, 82,210,212, 1, 66,214,181,
- 5,148, 41,103,203,170,127,118, 43, 90,250,118, 46, 30, 15, 13, 1, 26,192,149,189,228,117,250, 0,233,162,197,114,124,150, 95,
- 39, 54,220, 69,125,128,209, 44,184,223,243, 13,225,158, 70,184, 61,199,216, 99, 23, 38,178,219,156, 67, 13,135,174, 33,133, 48,
-235,168, 66, 86,178, 82, 0, 9, 73, 75, 62,206,135, 86, 20,250,182,203, 44,219,184,183,135,101, 91,127, 18, 43,139,255, 0, 1,
- 76,242, 61,222, 69,225, 24, 44,105,236,252,150,200, 23, 7, 90,121,106, 82,157,114, 59,183, 55,152,138, 23, 93,192, 13,180, 59,
- 43,251, 52,215,150,122,230, 85,254,178, 66, 0, 1,224, 23,166,250, 70,153, 70,128,100,166,240,181,190,244,198,141, 40, 20,118,
- 29,106, 6,218,243,251,165,181,109, 96, 29, 59, 49, 38, 75, 49, 88,116,163,229, 2,170, 32,106,142,203, 28,169, 99, 4,115,104,
-186, 46, 81,109, 5, 95,184, 77,118, 62, 21, 27,157, 11, 57,165,229,186,143,206, 57, 46, 38, 63,111, 68, 8,170, 6,107,198,155,
-238, 16, 55,220,234, 30,170, 88, 84,146,124,141,206, 80,172,237, 18,252,132, 42, 65,168, 81, 10, 5, 85,235,183,179, 68, 85,141,
-185, 60, 36,166, 87,207,114, 38,204, 47, 51,222, 27,161,236, 2,180, 2,157,116,125, 56,158,196,201,218,202, 17, 92,255, 0, 38,
- 58,126,210, 67,138, 91, 61,221,245,173, 77, 79, 90,157, 79,250, 39,236,152, 50, 89, 17,225, 94,160, 96, 66,187, 50,227, 15, 57,
- 90,128,226,143,196,109,190,160,183, 8,178, 38,188,161, 46,234,196,241, 23, 45,155,228,214, 95, 18, 66, 26, 43, 74, 66, 91, 0,
-159,153, 84,234,179,170, 91,107, 48, 70, 31,153, 89, 11, 61,225,167, 16,210,157, 88, 90,182,239, 42, 52,212, 48,154,134,200, 40,
-158, 95,194, 45,185,133,145, 23, 22,203, 98, 76,113,230, 35,181, 37, 69, 68,110,118, 79, 93, 25,188,168,169,179,108,144,174, 97,
-207, 25, 22, 33,199, 80,152,199,160, 85,109,130,194,214,176,129, 78,209, 77,146,142,154, 35, 22,129, 51,170,237,224, 78, 78,149,
-241,253, 78,228,247,153, 69, 23,187,122, 93,111,113, 74,245, 31,163, 86, 51,227, 95,242,150, 93,172, 0,164,155,228,203, 93,198,
- 67,106,157,108, 74, 36, 40,213, 52, 7,122,251, 64,212,115,194,156, 7,230, 70, 65,164,136,109,124,158,252,102,195,112,230, 59,
- 5,186,138,166, 40,167,142,219, 87, 66, 75, 28, 1,168, 93, 34,206,197,151,140,211,150, 49, 60, 98,214,188,155, 46,158,191, 37,
-160, 86, 11,202, 83,174,173, 64, 86,136, 64,220,147,237,167,227,166,192, 72,157,177, 8, 43,154, 58,200,186,161, 62,163,249,194,
-239,204,124,140,187,244,228, 45,187, 51,100,181, 13,133, 26,169, 45,131,209, 94, 21, 61,118,214,203, 3, 12, 85, 15,106,200,102,
-229, 27, 38,124, 16,174, 57, 4, 57, 61, 73, 65,250, 87,219,226,118, 82,182, 63,175, 82,206, 72, 80, 53, 68, 80,236,143, 73,117,
- 17,163, 36,169,247, 87,218, 0,246,247,118,129,168,165, 37,221,174,172,103, 25, 91, 44,184,205,169,150,229, 3, 38,228,210,118,
- 75, 71,181,148, 17,214,165, 59,171,126,180, 58,128,151, 82,116, 9,185,199, 89, 61,198,235, 49,184, 83,156, 76,107, 99, 64, 56,
-180,160, 4, 33, 9, 59,146,161,212,147,224, 43,165,180, 30,168, 91, 3,132,248,227, 43,212,187,157,225,168,246,128,175,176, 70,
-233, 42,173, 84,175, 5, 44,143,232, 26,130,216,202, 35,229, 84,185,176, 41,235,140,217,175, 18, 26,106, 41, 81, 33, 68, 2,143,
-218,238, 87,137, 30,223,118,151, 21, 77,183, 79,230, 58, 44,158, 77,114,145, 41,169,198, 62,154, 81,145, 94, 66,231,184,123,199,
-204,176, 77,105, 93,245, 55, 63,195,138,106, 51, 3, 82,169,142, 27,203, 84, 95,201,252, 59,100,197,236,138, 66, 30, 9, 72, 77,
- 0,173, 60, 53,228, 31,171,152,180,132,219,177,197,106,172,101,248,172,185, 87,181,196,182,252,223, 53, 42,147,215,127,118,180,
-181, 85, 59,128, 96,171, 79,177, 17, 97,216,174, 81,134,198, 93,213,194,176,138, 84,166,167,183,227,173, 4,125, 60, 13,102, 82,
-138, 42,171, 39, 14,235,118, 45,205,247,248, 57,187,106, 74,136,140,146, 82,176, 43,189, 14,179,182,112, 48,186, 70, 44,153, 59,
-101, 97, 79,203, 87, 60,220,127,149,247,184,129,184, 36, 56,186,138,138,106,163, 55,208,210,140,222, 32,178,236,114, 44, 1,159,
- 69, 89, 57,143,144,175,153, 23, 36, 61,112,105, 96, 49,221,178, 71,188,239,173,167, 11,196,195, 14, 1,198,170,178,216, 19, 36,
-252,224, 39,196,220,124,119,253, 69, 32,211,240, 26,245,206, 14,232,152, 0, 21,230, 30,145, 69,217, 35, 9,254, 76,250,157, 21,
- 72, 73, 58,181,207,136,149, 82,127, 4, 78, 69,123,162, 85, 68,229,169,113,218,202, 94,105,141,148,163,185, 3,226,117,224,188,
-167,244,236, 44,176,119,141,146, 66,246,172,109,171,237,221, 5,207,154,166,159, 49, 26,173, 57, 18, 29, 84,216,145,148,213,142,
-192,248,223, 24,180,217, 26,151, 53,176,181,166,138, 82, 69, 54,166,177, 57,217,182, 25,104, 86,130, 52, 24,174,254, 71,204,241,
- 70, 48,247,173,172, 40, 33,101, 61,169, 74,186,116,212,216, 51,186, 82, 15, 34,155,100,136, 84,151, 61, 92,117,228,239, 46, 53,
- 10, 1,169, 35,196,212,235,113, 75,136,234,169,239,131,201,119,227, 23,214,172,202, 76,149, 0,105,237,248,235,147, 6, 73,149,
- 87,170,146,203,115,184,217,132, 83, 0,117,218,132,123, 6,174, 56,138, 27, 66,175,113,225,217, 45,111,216,236,216,175,151, 91,
-108,169,130, 42, 53, 54,109, 30, 92,157, 15,147, 81,137, 81,209,100, 57, 17,207,156,208,120,141, 67, 40,124,168, 98, 29, 20,113,
-246, 68,205,182,242,212,183,211,221, 28, 40, 3, 78,187,237,163, 56,202, 77,209, 32, 43, 12, 8,177, 86,199, 28,197,215,201, 88,
- 32,114,210, 60,181, 17,218, 8, 59,208, 10,235,207,121,185,254,143, 40,137, 35,167, 96,125, 86,220, 59,131,149, 14, 19,194,226,
-160,167, 16, 72,249,136,173,127, 29, 3, 44,253,243,249, 81,148,227,130, 29, 43,121,167, 19,123, 25, 83,139,142,159,164,254,207,
-199,218, 53,168,195,145,152, 66,101,212,202, 51,137, 61, 74,101,124,117, 13,118,244,186,224,108, 85, 40,161, 87, 66, 61,218, 27,
- 55,133,133,197,200, 85,210,188,193, 66,230, 28,157, 55, 60,185, 57,112,187,174,189,196,157,206,231, 68, 28, 49, 64,104,170,188,
-153,153, 32,139,157,137, 18, 86,169, 40,217, 39,113, 95,142,164,167, 38, 67, 66,131,134, 65,137, 67,119, 56,234,109, 69,170,234,
-219, 28,111, 14, 81,145,183,114,218,220, 7, 63,146,186,170,255, 0,222, 53,183,253, 71, 52,104,128,218, 71,180,125,235,162, 58,
- 19,237, 31,122, 40,144,154,132,186, 63, 3,175, 69, 94,180, 74,192,133, 31,155, 73, 52,151, 95, 35,164,135,133, 5, 0, 52, 63,
- 29, 54, 71, 68,240, 20,164,181, 41, 81,130, 82,123, 72, 63, 81,218,154,130,198, 33, 17, 73,105,132,119,194, 60,141,118,158,212,
-140, 2,234,144,227, 76,126,250, 43,138, 31, 63,105, 86,225, 39,174,196,235, 53,149, 0, 9, 90,218,203,128, 83,143, 30, 42,110,
-220,245,182, 92, 98,178,225, 41, 74,129,220, 32,248,147,208,232, 9, 79,178, 47,104, 35,115,177, 85,243,212,167, 23,218, 30,120,
-178, 26,237,146,146, 75,106, 0,154, 19, 94,148,233,211, 71, 98, 95,179, 66,163,182,179,104,117, 90,227,100, 55,238, 41,201, 63,
-153, 65, 90,146,182, 28,249,209,237, 0,239, 93, 23,116,196,181, 80, 87, 29,186, 43,127,195,220,187,135,242,141,146, 40,155, 35,
-201,184,246,213, 42, 36,110,149, 39,180,143,195,174,171,140, 8, 46, 3,169,124,192,218,164, 55,173,108, 58, 46, 63,114,134, 47,
-175, 60,171,236,244,125,194,156,100,159, 42, 60, 71, 37,125,178, 91, 73,109, 73,237,237, 66, 74,157, 35,169, 88, 78,225, 35, 94,
-217,232, 28, 51,250, 91,236,135,230,104,143,107, 19,170,243,111, 83,219,190,216, 67,160,114, 87,228,175,171,238,120,245, 25,151,
-229,121, 7,167, 88, 19,238,172,112,170,174,172,204,111, 14,132, 95, 69,178, 84,216, 77, 24,209,229,174, 59,127, 43,139, 13,168,
-246,149, 3, 64,118,166,171,185, 42, 44,149,172, 34, 87,113, 68, 43,131, 58,176,223,149, 39,229, 65,158,103,175,191,234,143,158,
-144,230, 55,193,150, 24,239, 78,145, 61,195,229,200, 91,108,130, 29, 76, 84,148,144,167,138, 66,147,182,200, 21, 82,183,162, 76,
-113,182, 28,115,217, 97, 6, 96,105, 31, 3,226,123, 4,133, 50,202,150,200,244, 40,155, 42,189, 88,179, 92,250,249,155,216,218,
- 17, 49,153,146, 9,180,199, 74, 60,164,181,109, 96,121, 49, 27, 13,248, 16,210, 83,181, 58,245,223, 94, 89,200,103, 27,102,100,
-117, 37,122,223, 29,133,228,214, 34,200,139, 2,144, 11,237,168,236,210, 54, 79,134,223, 29,188, 53,158,201,180,149,108, 32, 19,
-211, 28, 88,126, 11, 73,111,234, 52,216,123, 53, 80,103,169, 93,242,221,124,205,115, 6, 48,139, 59,146,157, 80, 10, 41, 90, 64,
-173, 41,220, 40, 15,187, 92, 63, 50,229,117,248,170,217,152,115,117,202,235, 61,228, 91,215,230, 44,124,169,238,240,169,160, 26,
- 46,186, 10,144,128,151,151,105,159,204,229,153,247,231,195, 76,238,158,213, 16,138,147,185,235,225,191,179,109, 93,227, 97, 78,
- 99, 64,162,218, 6,164,168,233, 89,127, 26, 55, 60,199,147,121,182,182,181, 0,149, 33,231,219, 41, 0, 10, 83,230, 63,175, 86,
-149,241, 54, 50, 30, 87,213,222, 97, 74, 53,198,246,251,243, 8,189, 88,204,123,133,164, 84, 7, 32,169,167, 82,148, 10,109,251,
-189,137,248,235,191,163,156, 20,213, 99,198,208,241,144, 42, 21, 28,102,253,160, 58,227, 93,234,113, 36,174,135, 98,170,157,135,
-176, 83, 81,206,153, 1,170,225,196, 48,213, 75,225,124,139,119,196, 47, 9,140, 29, 89, 44,145,220, 42,104,146, 21, 90,108, 70,
-170,242, 49,132,130,125, 86,152,157, 85,173,224,223, 81,136,184,178,196, 43,187,253,202, 87,204, 2,235, 65,224, 18,154, 18, 78,
-179, 89, 56,198, 5, 89,195,230, 10,201,216, 47,209,238,246,112,219,255, 0, 36, 71, 64,221,123, 10, 31,134,250,138, 22, 23, 64,
- 78, 12, 82,243,149, 98, 99,152,164, 89, 22,233, 13, 37,113, 37,158,246,128, 79,104, 74,136,165, 72,240,175,191, 87, 24,150,128,
-162, 0,238, 74,111,242,156, 20,191,247, 9, 66, 67, 71,116,246,239,177,223,195, 87, 80,147,132,229, 52,196, 11,100, 56,254, 96,
-237, 75,192,108,162, 58,109,174,203, 84, 94, 60,139,234,134, 46,242,101, 49, 57,217, 54,245,164, 37,180,213, 78, 56, 59, 16,128,
- 62,165, 18,104, 54, 26,174,201, 32,252,189, 74, 47, 38,241, 8,186, 68,115,135, 38,181,152,190,108,246,149,184, 98, 48, 60,181,
-200, 43, 52,112,131,189, 6,219, 19,171,158, 39,143, 48, 15, 37,139,228,249, 15, 48,176, 73,235,221,173,109, 54,175, 53, 36,128,
-106,147, 79, 10,234,237, 81,110,117,219,137,176,234, 38,189,218, 13, 59, 19, 67,214,138, 26, 14,213, 60, 81,174, 50,194, 34, 92,
- 26,145, 54,191,110,216,238, 41, 79,212,181,120, 1,236,175,183, 67, 75, 85, 32, 78, 44,110,227, 39,249, 66, 18,242,219,107,205,
- 34,141, 34,133,195, 78,137, 0,116,211, 18,146,112,113,133,174,100,191, 42, 44, 72,254, 98,148, 66,150,162, 9, 5,103,114, 9,
- 62,193,167,196,186,130, 90, 43, 81,196,118,182,241,219, 99, 78, 65, 66,100, 94, 28,221,110,154,121,104,219,219,211,111,102,185,
- 97, 96,171,242, 98,233,211,197,239, 60,244,223,185, 3,205,184, 29,130,201,160, 73, 61,123,107,253, 58,147, 3,146,171, 28,252,
-218, 42, 28,168, 8,186,124,113, 86, 55,159, 89, 46, 75,188,202, 81, 76, 53,166,168,235, 67,177, 59,107, 31,234,191, 88, 66,195,
-229,192,190,171, 49,121,144,145,209, 41,253, 90,229,124,150,253,200,179,106, 89,251, 32, 15,122,106, 72,253, 90,175,226,248,137,
- 93, 3,102,222,170,175, 42, 82, 40, 71,211,189,150,117,218,227,247, 25, 3, 5, 79, 5, 85, 93,224,159,233,215,160,112, 88,241,
-168, 60,195, 50, 26,173, 14,169,199,155, 90,108,239, 88,151, 1,164,118, 46,149,221, 52, 58,111, 45,234, 90, 71,244,194, 38,203,
- 34,201, 87,137,240,255, 0,221, 95,204,224,145,216, 9, 41,216,111,250, 52, 63, 9,138,114,102,102, 58, 40, 42,129,145,209, 78,
-114,173,202, 22, 39,107, 22,192, 66, 93, 9,166,195,122,254, 26,187,231,115, 97,139, 22,109, 66,158,208, 6,137, 30,243, 50,174,
- 87, 95,189, 90, 59,138,142,196,138,254,173, 99,227,200,199, 36,176, 85,179,137,220,172, 87,166,214, 46, 41,142,134,228, 37, 64,
- 82,148,240, 61, 53,232,158,158, 6, 48, 86,248,122,132,215,186, 64,139, 58, 59,150,213,173, 33,229,164,128,144,107,189, 53,160,
-204,182, 17,172,238, 45,162, 62,198, 33,149, 92,245, 5,194,119,123, 93,248, 92, 82,146, 82,234,169,220,154,210,132,251,181,226,
- 28,174, 77, 82,179,229, 43, 53,149,137,243, 4,101,193, 92, 3,140,189,107, 69,214,234, 83,247, 3,230, 62, 97, 27,159,199, 88,
- 62, 71,146,150,230, 10,215, 15, 22, 2, 43, 57,118,245,110,196,217, 84, 91, 99,189,173,160,246,148,165, 66,148,252, 52, 46, 21,
- 30,108,131,132,220,146, 2,175,185,150, 83,152,100, 65,113,109,129, 75,140, 73,249,141,125,190, 26,221, 96,241, 7,168, 10,158,
- 82, 50,232,149,183,187,109,206, 28,229, 34,224,133, 7,212,106,106, 63,179, 70, 89, 65,137,102, 66, 78, 36, 29, 87, 18,221,125,
- 45,249, 75,238, 74,135,134,250,138, 53, 23, 76, 19, 0,174,123,124,167,227,221, 27, 74,137, 13, 19,243, 29,245, 99,134, 76, 38,
-139,163, 33,164, 19, 42,109,190,222,254, 56,151,156, 72, 43,167, 80, 6,138,205,166, 86,177, 1, 91,218, 12,226, 8, 74, 44,189,
-148, 33,213, 57, 30,160,123,182,254,141, 87, 18, 64, 99,213, 4,193,107,195,229, 41, 74, 41,114,189,124, 78,250,208,122,108,131,
- 34,232,236, 56,252,201,251,194, 92,175,151,225, 12, 37, 4, 41, 86,146, 54, 61,213, 0,124, 53,144,245,198, 29, 83,187,218,161,
-203, 7,118,137,143, 47,158,197,210, 34, 87, 21,192, 28, 53, 10, 0,144, 73,214, 99, 3,143, 4,244, 78,199,206, 49,209, 11,229,
- 57,107,121, 12, 50,213,196, 2,181,124, 9,165,117,168,162,143, 37,138,158,236,160,122,165,237,235, 17, 98, 82,148,184,105, 41,
-241,160, 26,154,220,128, 21,109,178, 7,162, 28,118,213,217, 56, 70,119,101, 15,110,130,150, 70,228, 19, 2,165,223,179, 32,219,
- 8, 65, 5, 64, 15,103,183, 76,140, 92,186, 24,227,252,201,127,125,134,182, 37, 40, 40, 84,111,185,223, 86,180, 88, 34, 20,176,
-134,208,188, 34,112,254, 78,234, 63,107,204,107,111,250,171,209, 98,209,180,159,104,251,212,194, 39,105,247,143,189, 17,168, 22,
-207,146,175,167, 94,148,189, 90, 93, 23, 75, 49,212,227, 68, 1,190,146,104, 90,118,109,234, 15,109, 52,217, 5, 35,178,144,117,
-174,230, 69, 70,198,128,239,224, 77, 53, 5,145,209, 75, 84,190, 96,185, 49, 91,243,184,190,116,203,175, 18, 24,113, 69, 21,222,
-189,189,118, 35, 89,140,208, 93,109,248,240, 39, 0,157, 54, 46, 75,148,203, 98,123,106, 91,237, 54,124,183, 90, 80, 85, 82,130,
-107,223,240,208, 18,172,187,162,254, 82, 24,169,108,141,188, 59, 50,103,239, 25, 95,116,229, 39,185,166,201,220, 41, 41,238, 82,
- 77,125,218,112,147,148,171, 6, 29, 85,117,245, 27,194,246,139,148, 87, 50, 12,100, 16,186,126,253,177,212, 26,111,183,199, 70,
- 85, 99,104,122, 40,173,128,150,161, 43,253, 59,191,127,199,121, 54, 36, 20,169,127,201, 88, 95,156,250,183,237,104, 36,212, 2,
-125,133, 84, 31,142,159, 92,152,128,123,150, 8, 59, 42,145,132,165,216, 5,100, 50, 86,248,155,156, 45,191,202, 57, 20,188,151,
-162,184,191,177,184, 91,222, 75, 50,227,135, 59, 67,137, 74,156, 75,136, 33,125,131,184, 45, 4,109,181, 14,250,244, 46, 11,153,
-187,138, 59,170, 98,227, 80,122, 50,198,114, 88, 81,201,252,200,114,219,233, 87,208, 87, 28, 45, 89, 29,214,208,238, 67,116, 65,
- 14,164,228,211, 82,243, 53, 31, 53, 20,204,100, 71,105,196,159, 20,184,149, 15,118,143,206,245,134, 78, 71, 65, 8,251,135,226,
- 85,125, 92, 76, 33,220,164,207,173,191, 88,163,144,177,244,250,126,226,247,155,143,143, 56, 16,221,209,171,122, 18,204,120,240,
- 24, 53, 76,118,146,213, 16,158,245, 4,138, 1,244,215,219,172, 23, 37,148,102,238, 92,149,178,225,184,230,144,145, 12, 2,167,
-119, 44,170, 58,238, 31,200,109,170,253,195,116, 10, 41,235,242,158,154,204,218, 28, 45,173,118, 62,137,131,199,115, 86,243,141,
- 50,170,169, 21, 10, 61,212,220,244,240,213, 54, 73,213, 29, 16,225, 89, 12,117,129, 2,206,220,198,155,170,130, 42, 43,240,213,
- 13,182,237, 40,168, 65, 32,125, 86,102,243, 27,146,155, 74,158, 13,165,205,214, 1,174,213,218,158, 58,176,193,142,242,229,114,
-216, 8,132,149,153,119,183, 99, 22,143, 58,158,125,237,241,251,176,230,221,137, 21,220,211,227,173,102, 14, 15,153,169,232,131,
-148,132,117, 92,246, 28, 22, 21,245,230,231,231, 77,200,151,116,125,232,174, 66,142,151, 25, 76,127, 33,107, 61,221,205,188, 15,
-127, 64, 41,211,125,245,235,124, 31, 9,139, 24, 9, 94, 9, 62, 3,239, 94, 95,206,122,162,217,204,215, 67, 48,238,172,151, 16,
-225, 60,113, 19,142, 26,189,231,184,205,189,219, 58, 94, 91, 18, 26,106,221, 22, 28,254,198,226, 50,251,174, 49,246,161, 44, 59,
-216,165,171,229, 41, 5, 91, 14,234,235, 77,127,164,241,114,234, 39, 26,114,140,226, 29,139, 16, 86, 62, 62,161,190,185, 1,104,
- 6, 39,186, 37,229,143,203, 59, 25,185, 88,216,229, 31, 78,119, 69, 88,174,115, 35,183,112,182,220,172,224, 34, 60,166, 94,108,
- 58,217,117,154,121,110, 36,131,184, 82,107,240,215,152,229, 85, 42,228, 99, 49,168,208,173,134, 15, 43,101, 77, 40, 29, 10, 79,
-227,109,101, 43,190, 47,137,121,226,218,139, 47, 36,199, 5, 80,174, 44, 38,144,174,168, 78,222, 99, 69, 93, 15,181, 39,113,240,
-213, 53,213,176,113,209,122, 71, 15,204, 71, 58, 34, 50, 13, 36, 37,200,220,115, 59, 19,149, 33, 50, 35,210, 83,174, 2,219,200,
- 35,231, 20,249,141, 78,192, 15,134,170,111,139, 35,114, 49,140,117, 95,120,130,246,187, 14, 70,218,165, 21,252,138, 11, 65, 73,
-238,241,240,168,213, 62,101, 34, 65,211,104,145, 26, 43,171,197, 92,171,100,188, 91,217, 10,115,184,165, 41, 65, 46, 41, 68,236,
- 40, 69,104,154,126, 26,205,217, 19, 18,136,148, 93,116,115, 44, 24,185, 20, 6, 67, 41, 38, 59,139, 69, 84, 40,118,168,173, 52,
-250,236, 46,155, 8,141, 80, 6, 75, 46, 61,157,229, 91, 45,233,171, 76,209, 61, 41,208,107, 81,141,104, 16,114,185, 10,129, 67,
- 55,108,137, 49, 27, 18,111,210, 19, 6, 1, 52, 10,119, 99,191,176, 13, 67, 44,233, 72,181, 99, 84,233, 91, 10,198,169, 29,204,
-124,183,121,201,164,171, 31,177, 43,237,241,230,143,104, 90, 9, 38, 72,175, 85,247, 10, 83, 87, 92,103, 20, 33,243,207, 89, 44,
-167, 37,201,155, 11, 4, 3, 17,135, 82, 75, 78,138, 37, 85,173,125,189,106, 53,116, 36, 6,138,154, 65,194,218,252,102,159,108,
-179, 44, 2,161, 84,212,120,130, 52,217,149, 24, 11,174,199,106,141, 17, 74, 93, 55, 82,146, 43,227, 78,221, 7,105,117, 60, 14,
-138, 77, 82, 91,106, 95,109, 9,237, 87,104, 9,234,105,209, 35,222, 78,160, 1,148,225, 53,184,107, 25,190,221,230,162,236,152,
-229,245,168,246, 3, 66,164, 36,158,137, 72,233, 95,142,163,153, 72,197, 90, 94, 58,182,170, 26, 25,133, 49, 33,217, 32,132,150,
-145, 68,176, 8,234, 92, 88,221, 70,190, 26,100,100,135,152, 78, 92,106,230,101, 56,152, 86,227,230, 58, 64, 10, 83, 99,181,180,
-164,117, 9,173, 0, 72,241, 58,109,211,208,161,172,173,211,227,129,216,135, 35, 40,130,212,195,217,109, 66,146, 29, 88,250, 77,
- 55,234,117,139,231,124,200, 66, 70, 43, 61,153, 94,165, 92, 39,178,236, 50, 37,185, 45,174, 75, 41,109,164,132,164, 5, 39,106,
- 14,148,174,188,167,141,190,121, 57, 64, 76,116, 40, 92,188,154, 35, 78,222,233, 47,159,222,120,254,233, 49,228, 79,121,181,133,
-146,106,146, 42, 1, 62,253,125, 85,193,126,158, 24,177, 5,101, 12,163, 37,211,129,196,227, 91, 4,103, 39, 48,250, 11,170, 73,
-237,173, 41,172,111,170, 57,248,227,131, 10,250,161,174, 0, 13, 16,206, 75,148,216,239,215,179, 6, 28,132,148,110, 15,103, 83,
- 67,170, 15, 79,241, 18,207,150,233,148, 21, 71,121,101,196,156,157,236,109,242,168,145, 22,182,211,251,105, 73,233,248,107,209,
-240,114, 42,227, 70,210, 67,163,163, 31, 44, 36,199, 50,230, 95,207,174,221,233,168,114,181, 41, 87,184,235, 55,234, 59,252,242,
-117, 85,121, 25,159, 50,134,198,239,113,153,150,223,221,127, 14,162,191,142,218,199,227,100,126,150, 78, 84,213,218, 11, 21, 97,
-120,175, 59,181, 53, 17, 12,197,217,202, 80, 17,237,214,243,133,245, 91,252,160, 35, 41,184, 14,139,174,217,144,221,157,228,216,
-173, 21,119, 69, 82,194, 72,222,157,126, 58,170,245,111,170,109,141,114,100,207, 60,153,234,155,124,199,137,216,239, 88, 35,207,
-205, 74, 66,144,217, 88, 80, 2,160,129,183,191, 94, 39, 95, 55,109,150,135,238,175,121, 62, 62, 16,166, 51, 7, 85, 72,114,110,
-111,187,216,164, 63,143,219,150,176,203, 11, 82, 18, 82,162, 54, 6,158, 26,217, 87,141, 25,196, 74, 93,214, 90, 89,166,189, 2,
- 1,151,200,151,107,221,245, 44,220, 86,167, 18,225,232,162, 79, 83,239, 58,191,225,176, 33, 43, 98, 19, 33,144,109, 78,236, 46,
-219,141, 67,198, 69,206,107, 41, 47,144, 54, 35,110,154,246,172, 94, 34,170,170,220, 81,112,132, 64, 75,188,197,188, 58,249,115,
-125,229,182,150,212, 13, 18, 71,134,250,207,100,215, 76,230, 66, 30,192, 9,116,163,206, 98,193,141,119,236,133,187, 84,240,213,
- 22, 70, 44, 96,116, 84,215,144, 10,133,122, 9,121, 4,176, 62,113,184, 63, 13,245, 12, 33,180,186,128, 75,193, 27, 88,160,221,
-223,198, 59,158,109, 64, 4,212, 84,236,118,213,166, 22,108, 9, 98, 22,175,139,183,116, 88,165,134, 74,234, 81, 33, 77, 56, 54,
- 4,143,215,160,249,124, 47, 44,184, 76,190,173,165,117,225,120,193,155, 17,114,154,168, 80, 53, 27,255, 0,205,162,125, 59, 39,
-146,155, 11,170, 46,137,157, 59,110,182,174,201,229, 21, 62,129, 64,117, 79,234,238, 52,206,221,207,217, 71,149, 54, 37, 8,219,
-239, 89, 29,178,234,165,249,164,182,165,119, 4,146,104, 6,171,248,136, 64, 76, 2,171,171,155,201, 53, 56,227, 38,182,220,212,
- 35,222, 10, 84,250,136,238, 42, 59, 13,104,249,140, 0,107,223, 14,200,235,107,112,153,242,113,108, 74, 29,137,119, 70, 93, 30,
-109, 59,187, 73, 26,243,124,140,155, 35, 51, 18,134,242, 82, 31, 44,159, 22, 69,213,114, 34,170,128, 18, 5, 61,198,154, 39,205,
-146,138, 53,168,127,243, 84,180, 86, 55,113, 41,233, 81, 93, 92,226, 81,190, 32,174,152,173, 76,196,122,244,249, 74, 18, 74,206,
-159, 58,204, 83, 37, 22, 83, 9,227, 37, 11,122,199,110,229,104, 87,232, 74,135,179,223,168, 69,167,105, 30,209,247,168,196,244,
- 62,241,247,173, 62, 90,100, 81, 73,175,152, 58,235,216, 87,171, 18,187,226, 48, 2, 65, 29, 78,199, 92,116,208,117, 90,102,197,
- 8,114,163,112,173,142,153,185, 60, 21,188, 2, 34,128,224,220,123,125,157,116,201,157, 20,212,245, 11,204,181, 90, 25,242,167,
- 57, 64,224, 80,219,111, 13,103,114, 36,101, 38, 90,236, 72,237,139,132, 97, 31, 49,131, 6,218,210, 97,238, 20,124,174,234, 84,
-210,149,161, 35,195, 66,138,193, 93,186,210, 15, 84, 61,154,101,255, 0,203,129,185, 65, 37, 30, 74,208,174,230,201, 21, 36, 86,
-187,120,106, 40, 85,170, 43,205,120,160,219,143, 53, 57,125,142,219,168, 29,239, 45, 74,139, 33,176, 62,165,214,137, 63,142,218,
-176, 20,196,193,208,113,200,148, 39,180, 37,159,170, 76,202,237,233,196, 90, 29,177, 45,208,237,249, 74,184, 93, 89,109, 20,164,
- 6, 83,251,180, 46,164,239,231,158,237,169,244,234,167,135,176,101, 91, 57, 30,145, 44, 61,235,117,201,113,126, 78, 4,162, 7,
-205, 32, 9,250,193, 72, 89,158,179,115, 27,188,183, 90,194,227, 72,125,210, 77, 20, 63,118,138,215,125,213,173, 84,243, 35, 88,
-103,213,121,205, 28, 85,182,117, 10, 30,245,200,252,221,148, 31, 51, 50,188,139,117,181, 98,190, 75,110, 23,157, 41, 30, 5, 74,
- 33, 41, 58,174,187, 61,250, 43, 42, 56, 88,130, 12,144, 15, 33,242, 36, 28,119, 18, 46, 99, 14,169, 69,215,168,228,174,238,229,
-184,162,154,168,149,143,142,160,140, 12,203,148,116,172,141, 99, 68, 29,132,229, 46,202,150,102,184,170,190,160, 64, 87,190,158,
-234,104, 92,154,244, 70, 97,204, 21, 97,248, 54, 84, 91,173,238, 20, 65,242, 5, 81, 68,158,211, 82, 13, 15,233, 58,204,229, 64,
-130,173,225, 48, 2,184,112,172,208,222,176,161, 49,147,220,132,132,208,130, 41,218,106, 62,111,102,168,229, 83,201, 56, 92,202,
-153,250,157,134,235,252,206,197,133, 63,225,202, 73, 80, 89,222,129, 85, 63,209,173, 31, 19, 79, 85, 12,231,186, 64, 30,137, 78,
-245,247, 23,196,242, 53,114,151, 35,218,151,123,227,107, 28,184,206, 73,177, 54,235,209, 5,198, 59, 47, 2,227, 6, 91, 73, 81,
-104, 56, 16,164,133, 13,193,223,192,107,214,248,142, 40,215, 92,103, 49,215,162,243,255, 0, 84,243,146,243,124,138,139, 14,255,
- 0,130,171,252,229,234, 43, 40,229,222, 89,189,114, 21,145,181, 99,184,236,219,132,201,214, 76,122, 3,239, 56,197,158, 19,242,
-150,251, 16,153,117,210, 92, 82, 89, 66,130, 2,148,106,105, 83,190,140,134, 76,251, 21,145, 21, 6,232,174, 7,229, 41,201,185,
-247, 54,220,114, 78, 49,228, 11,187,231, 16,199,224,155,252, 87,139, 42,121,228, 60,100, 2, 80,130,154, 18, 86,105,212,129,183,
-199, 91,111, 73,228,206, 86, 63, 86,101,158,231,160, 33, 0,221, 93,126,159,250, 29, 43,189,122, 80,128,235,237, 41,187, 91,119,
- 76,129,155, 83,111,110,177, 17, 23,169, 9,108, 18,105, 90, 26,129, 65, 79,102,177,222,184,148,127,184, 89,183,216,254,246, 10,
-239,137, 50,253, 60, 93, 10,122,146,224, 76, 79,146,172,203,143, 61,175, 42,239, 25, 95,117,111,154,216, 1,216,207,164, 30,215,
- 16,127, 26, 17,208,138,141, 97,166, 85,247, 31,159,102, 45,145,156, 79, 66,171, 30, 83,134, 76,204,113,217,184, 78, 78,132,183,
-154, 90,126, 87, 84,145,178,133, 42,135,145,221, 82, 91,114,158, 61, 14,221,116, 37,213, 56,209,123, 22, 38,108, 51,106,220, 15,
-189, 39,216,181,127, 32, 72, 97,105, 74,174, 17,157, 35,228, 10, 42, 72,167,202,149,157,183,216,237,172,253,165,139, 20, 57,172,
-196,166,207, 10,228,215, 22,238,140,193,156, 1,113,100, 0, 66,130, 82,144,122,119, 84,237,248,234,135, 38, 0,148, 79,248, 85,
-143,187, 6, 63,203,173,188,242,146,146,144, 20, 21,220, 8, 6,160,147, 81,160,161, 38, 42, 24,247, 75,124,142,208,171,179,114,
-101,217,123,164,206, 39,180,190,132, 18,218, 85, 74,168, 14,237,148, 64,252, 53,167,227, 56, 92,140,230, 44,118, 42,220,254,102,
-172,113,181,198,228,128,230,198,102, 73, 95,156,174,231, 10, 0, 65, 95,119,204,123,124, 22,133, 40,208,235,120, 56,234,241,226,
- 35, 17,209, 99,101,159,101,211,121, 20,165,153, 45, 77, 40,247,117,246, 31,249, 29, 53,151,100, 93,104, 68,198,202,170,176,162,
-159, 96,223,245,233,146, 9, 62,139,162, 75,138, 88, 66,163,252,205, 26,111,191, 74,244, 58,142, 73, 68,234,166,173,236,169, 81,
-218,114,191, 45, 84,133, 31, 97, 27,104, 43,131, 34, 96, 29,119,218, 44,134,101,249,150, 28,254, 10,221,170,143,196,255, 0,205,
-161,247,169,118,171, 61,195,203,139,143,217, 27,147, 44,169,113,212,170, 51, 21,154, 37, 74, 64,219,110,209,213, 71,106,248, 13,
- 69, 34,233, 72,166,198, 53,115,185, 74,148,135, 86,202, 60,229, 83,181,141,208,204,116,120, 13,255, 0,175,115,174,161,228, 28,
-166, 94, 41, 62, 37,185,212,185, 42, 87,154,229, 65, 87,109, 0, 89, 29, 18,132,251, 7,180,233,178,232,134,152, 41,169,133,228,
-147,175, 64,193,181, 62, 91,120,108, 94, 7,100,237,208,123,245,156,229,153,139,244, 84,185,144,208,174, 92,197,140,210,197,112,
- 67,143,220,164,148, 43,122, 41,100, 87,240, 26,201,215,101,117,130, 96, 0, 43,207,243,129,115,239, 80,153, 38, 67,147,155,119,
-154,203,170,243, 61,164,147,253, 58, 34,142,103, 35,160, 58, 42,155,102, 71,116, 58,142, 91,206,161,198, 92, 37,201, 88,101, 91,
- 81, 36,252, 52,211, 8,219, 45,211,212,160,167, 50, 83,183,210, 53,183,252,209,116,251,171,219,164,169,123,149, 47,220, 61,250,
- 89, 60,206, 86, 12, 94, 0,178,180,227,234,117,112,219,193,240,181,217, 12,117, 50,223,114,147, 66,178, 1, 61, 58,235,205,185,
- 63, 83,101, 95,105,148,164, 86,218,172, 44,115, 75,147,170,175,121, 31,163,229,229,217,196,155,139, 75,165,180, 46,137, 11,173,
- 8,252, 41,171, 81,235, 73,194,176, 9, 89, 63,236,222,108,250, 33,174, 70,244,131, 47, 29, 90, 85, 99, 89, 38,191, 74,126, 96,
-127, 78,141,195,245, 7,234,116,146, 19, 39,143,242,100,134,241,108,119, 50,194,110,230, 60,182,156,242,210,175, 16,105,175, 68,
-244,230, 78, 53, 63, 49, 33, 5, 89, 34, 73,141,111,184,204,143, 61, 23,151,135,111, 97, 10, 6,158, 35, 66,122,163, 58,156,141,
-194, 45,170, 44,201,108,229,255, 0, 81, 55, 41, 88,131,246, 88, 2,171, 82, 59, 22, 69, 65,215,159, 97,241,128, 76, 18,159,145,
-151, 41,195,106,167,243,238,229,171,131,242, 38, 38,174,184,181, 18, 72, 62,221,106,227, 29, 0, 10,138,100,186,129,114,226,219,
- 87,145, 41,207,148, 5, 84,117,214,139,142,151,151, 33, 36, 93, 41,173,140,114,236, 3, 8, 90, 31, 88, 45,246,128, 2,182, 21,
-166,182, 25,158,167,145,163, 96, 40,217, 75, 68, 15,201,183,168,204,203, 50,109, 46, 4,169,209,243, 37, 39,106,147,172, 77, 89,
- 54,153, 25, 33, 36, 92,160, 23, 39, 61, 41,223, 50, 74,170,163,227,173, 21, 25, 27,250,148, 13,213,106,187,109,210, 91,101,105,
-168,238, 62,205, 17,117,129,148, 34,146,140,218,228, 24,209,173, 31, 99,216,124,222,222,208, 0,219, 89,136, 90, 97,115,186, 51,
- 26,102,180,183,201,109,159,204, 95, 83,164, 17, 82, 85, 77,122,109,141,145,140,227,193,104, 37,243,197,209,119, 21, 90,146,109,
- 46,165, 63, 80,246,252, 53, 79,193,214, 99, 54, 83,241,189, 74,142,185,197,102, 45,217,213,186, 71,212,118,174,163,245, 56,145,
-111,114,175,228,162,243, 81, 82,165, 67,123,230, 77, 5, 53,141,170,169,130, 10, 12,193,124,133, 63,168,101, 84, 88, 59, 16,119,
-219,125,122, 39, 7,110,241,182, 93, 17,216,172,116, 93, 87,110, 74,202, 81, 3,249, 97,144,163, 20, 10, 82,190, 26,172,231, 56,
- 10,204,247,136,245, 81,228,214, 65,209, 15,194,157, 38,227, 35,201, 42,160,233,172,213,184,123, 53, 67, 51, 41,118,108,190, 79,
-239, 20, 79,198,190,237, 54,156,141,165, 65, 41,234,136,248,246,235,108,183,221, 82,196,208, 5,118, 4,235,153,146, 50,139,168,
- 45, 46,154, 94, 77,171,201,254, 97,220, 62,206,157, 42, 41,170, 88,204,236, 62,241,247,161, 71, 67,239, 31,122, 83,198,100,135,
-200, 58,247,149,236, 82, 10, 78, 59, 20,110,163,245,106, 34, 29, 40,173, 82, 88, 79,154, 8,250, 15,135,191, 92, 72, 45, 87,121,
- 2, 60, 2,232,217, 72,247, 1, 80,118,253, 90,134,210,225,145,120,255, 0,153, 46, 50,204,188, 55, 88,189,213,236,170,199,111,
-137,213, 13,245,151, 43, 87,139,107,196, 4, 67,132,103,205, 79,181,185, 21,229,130,240, 66, 85,218,105,212,107,149, 65, 71,150,
- 88,186,230,204,114,150,167,219, 29, 76,116, 2, 80,148,165,214,198,223, 42,188,104, 61,154,113,129, 9,149, 90, 10, 81,221,249,
- 12,224,210,208,205,185, 81,147, 53, 42, 50, 26, 92,221,210,130,157,129, 34,148, 42,168,241,246,106,155,150,190, 68,121,113, 44,
-235, 95,233,172, 40,110, 55,204, 59,104,150,124,139,200, 57, 7, 54,202,146, 51, 9,110,205, 75, 84, 46, 56,178, 83,244,253, 40,
- 20,219,180,120,104, 76, 44, 79, 36, 13,170,227,146,228,205,175,170, 7,188,152,184, 93,149,214, 32,176, 99,220,156, 79,106, 80,
- 54,236, 65, 77, 59,169,182,228,251,117, 96, 35, 34,169,197,129,146, 79, 46,200,239,247,203,235,182,217, 82, 84,168, 9, 72,232,
-123,193, 85, 41, 69,117, 21,169,240,209,245, 67,104, 85,214,218,100, 88, 35,108, 95,136, 46, 89,175, 31, 57,104,154,201, 75,193,
-207, 49,133, 83, 96, 10,105,184,223,244,105,211,179,106, 81,199, 36, 40,184,190,149,185, 47,206, 49, 44,137, 85, 83, 84,144, 54,
- 31,175, 64,203, 54, 61, 10, 38, 52,152,167,159,167,111, 76, 25,215, 27,221, 25,203,249, 62,226,136,214, 36,208,161,165, 56, 43,
-220, 42, 65,165,104,116, 6, 76,227, 62,138,120, 25, 4,244,199,125, 70,225,172, 56,238, 48,203,193,113,211,218,132,184, 86, 55,
- 81, 39,114, 60,104, 71,183,199, 84, 22, 99, 76, 23, 69, 0,225, 35,125, 87, 66, 85,167,147, 97,103,107, 10, 84, 57, 81,204,112,
-237, 13, 18,186,169,105, 42,246, 86,186,189,224,219,123, 20,191, 44,181,246,174, 14, 81,244,230,114, 62, 15, 98, 59,210, 21,254,
- 79,190,219, 34, 33,171,171, 77,149,167,204, 91,105,117, 9, 89,238,236, 67,173,168,148,246,212, 21, 1, 81,215, 95, 75,113,208,
-198,229, 48,235,140, 36, 35,100, 3, 24,157, 62,144,188, 43,148,170,204,108,187, 12,193, 32,201,193, 85, 38, 63,229,213,200, 38,
- 91,242, 46, 23,219,100, 28,113,147, 68,203,154,227,140,173, 85, 32, 39,247,110, 36, 17, 93,252,124, 53, 87, 47, 73,100, 66, 79,
- 38, 17,247,143,197, 65, 46, 90, 7,160, 47,238, 95,162,190,129,125, 34,221, 48,174, 50,255, 0,203, 31, 79,168,114, 62, 49,146,
- 37,137, 25,215, 39,220, 26, 91, 94, 99,105, 9, 82, 99,218, 2,194, 75,138, 21, 80, 73, 77, 82,149,110,163,176, 6,198,206, 83,
- 31,133,164,198, 4, 78,201, 13, 27,183,181,213,127,233, 44,207,180, 78, 67,108, 99,241, 87,210, 13,182,195,131,225,246,236, 23,
- 23,104, 71,199, 45, 17, 90,183, 66,108, 26,144,203, 8, 13,164,168,248,168,210,170, 39,114,106,124,117,228,217,183,202,235, 37,
- 57,117,145,117,169,140, 68, 98, 0,232, 18,255, 0, 59,154,217, 75,132, 29,232,127,163, 85, 86, 23, 78,142,170,175,122,150,125,
-220, 53,168,156,177,107,108,169,235, 83,137,143,115,109, 27,249,182,249, 14, 6,220,238,167, 95, 45, 68, 44,123, 55,211,105,249,
-142,213,183,244,206, 73,162,198, 39, 66,151, 60,134,211,108, 75, 93,206,204,211, 11,135,115,101, 50, 27,144,164, 2,173,199,120,
- 53, 36, 15,164,235, 55,202,212,107,177,214,246,216,124,207,217, 68,113,108,197, 67,200,131,114,212, 82,165, 42,169, 82, 83,212,
-247,116, 21,213, 29,178, 12,152, 34, 72, 86, 34,108,239,230,150, 91,117,129,228,149, 25,207,181, 21, 41,221, 36,165, 74, 21, 52,
-175,179, 67,241,116,139,114,163, 14,196,168,115, 9,166,169, 76,117,100,127,234, 38,193, 7, 13,196, 35, 38,220, 62,210, 60, 54,
-208,134,203,105, 0, 36, 4,128, 14,222,253,125, 20, 40,141, 20, 68, 65,152, 5,225,191,168,149,247, 72,203,171,170, 97,203,119,
-200,146,229,125,199,123,136,184, 44,119, 60,146,170,161,194, 9, 29,201, 63, 13, 80,223, 39,117,125, 68, 72, 12,149, 87,100,193,
- 83,138, 45,167,101,117,241, 58,174, 44,138, 1, 68, 62,151, 69, 11, 36, 20, 3,236,212,114, 83,193,118, 90, 67,107,249, 92, 31,
-232,169, 62,195,237,212, 4,167,176, 83,214,144,215,144,150, 85,210,165, 70,167,109,133,116, 29,174, 84,209, 42,114,207, 33, 12,
-186,101,165, 21,146,144, 3,105, 63,222, 95,143,232,208,147,138, 38, 50, 10,196,112,237,233,247, 44,132,195,104,174,107, 40,242,
-215, 47,181, 29,137, 39,193, 5, 93, 41,211, 97, 93, 55, 85, 28,186,162, 88,185, 93,225,244,170, 21,158,141,130,123, 84,250,143,
-115,170, 62, 52, 43,216,126, 27,233, 22, 77, 68,248,171,183,151,101, 38, 42, 92, 41,111,163,175,188,170, 31,111,137,175,244,106,
- 41,149, 5,129, 90, 31, 78, 24,180,167,188,185, 49,156, 43, 98,159, 42,210,154,209, 93,118, 61, 7,225,190,176,252,246,116,117,
-137, 89, 94, 78,243, 16, 87,174,118,201, 83,110,200, 83,106,117, 85,144,209, 1,117,168,168,247,106,155,140,168, 90, 15,130,243,
-204,171,197,147,101, 22,221,234,197, 62,207,228,186,177,223, 74,245,233,182,175,233,197,170, 3,174,170, 27,168, 96,161,225, 91,
- 49,185, 51,187, 37,118,245,247,106, 76, 26, 43, 51,121,120,160,104,175,116,153, 52,176,155,180, 92, 34, 0,147,104, 81,237,216,
-209, 34,131,223,211, 90,108,156,188, 3, 81,129, 33,207,177, 94,198,159, 44, 58,155,145,234,111, 46,102, 64, 68, 39, 23,246,157,
- 10, 84, 73,167,233, 58,242,126,111,133,199,156,201,139,106,171,110,204,148, 75, 57, 76, 12,123,213, 11,141, 91,146,153, 67,186,
- 89, 33, 35,195,175,188,107, 19,111,167,222, 90,116, 71,213,202,152,247, 41,157,130,229,118,187,253,171,249,197,209,212, 41,213,
- 85,107, 14, 16, 66,124,124,116,250,240,229, 84,153,148,176,202,132,139,216,126,181,205,123,184,241,206, 66,183, 16,135, 89, 92,
-145, 84,130,142,210,127, 72,213,132,252,216, 14,132, 32,167,229, 88,119, 69, 43,243,251,205,151, 30, 66,152, 73, 72, 98,180,173,
- 69, 52,118, 20,103, 98,102,232,197, 42,243,124,174,203, 38,220,168,241, 2, 87, 37, 68, 32, 4,128, 73, 36,211,217,171,186,170,
-148,117, 42, 59, 45,137,142,138, 35, 25,244,221,115,206, 88, 76,215, 98,246,199, 88, 39,184,117,246,255, 0, 94,160,201,230,235,
-163, 71,213, 65, 94, 57,150,170, 35,147, 61, 47,200,197, 99,137, 46,163,116,142,224, 79,179, 70,113,252,240,185,128, 40,129, 72,
- 29,146,150,253, 1, 80,255, 0,118,143,149,104, 52, 36,109,211,110,186,209, 85,102,228,203, 32, 80,253,193,197,186,126,115, 90,
-123,125,186, 46, 82, 81, 70,162,162,231, 40,199,222,148, 35, 79,199, 36, 20,243, 0,181, 90,167, 72,147, 56, 4, 86,131,160,209,
-246,207,229, 76, 48, 1, 21,166,219, 49,246,146,181, 52,175, 46,155, 26,107, 55,147, 19,189,221, 11,221,110,159, 97,140,184,138,
-236, 87,116,128, 43,210,154,221,122, 95,145, 22, 68, 86, 85,190, 44,143, 69, 57,197, 22, 11,136,180,200, 88, 73, 85, 10,169,183,
-187, 90,131, 72,170,221, 52, 87,184, 84, 51,150, 64,153, 37,178,244,237,250, 82, 21,220,150, 66,200, 3, 85, 30,162,186, 32, 15,
-114,170,228, 43,249,202, 31,144,226,163, 40,180,165, 18,161,215,174,179,117, 76, 79,162,172,158,129,108,180, 77, 8,122,170, 59,
- 31,235,214,163,131, 34, 19,213, 63, 22,224, 36,183,220,217,109, 74,239, 81,249, 78,182, 57, 52, 11, 96, 25, 91, 78, 59,134,139,
- 66, 88, 67, 42, 15,199, 87, 79,102,218,243,174, 74,175, 44, 16, 66,169,188, 50,239, 99, 36,104, 44, 71,116,252,231,195,199, 89,
-153, 84,229,208, 37,117,169,198,200, 18, 26,249, 92,165,123,191,232,211,102, 11, 50,138,197, 50,158, 71,184, 27, 34,224,119,124,
-233, 82, 17, 74,120, 41, 42, 53,253, 90, 26, 56,231, 97,247,143,176,168,192, 27, 79,188,125,235,189,168,197, 46,212,254,215, 93,
-123,114,245,242, 2,147,109,162,134,141, 60, 40,104,117, 25, 77, 33,114,185, 28,169,202,158,149,168, 58,225, 92, 10, 3,144, 38,
-187, 6, 41, 67, 35,247,196, 14,223,137,248,104,123, 78,136,170,142,169, 17,124,191,182,199,221, 76, 14, 23, 36, 37,101, 69, 61,
-123, 69,118, 3,225,211, 85, 23, 23, 44,180, 88,231,108, 93, 11, 99,188,159, 50,221,119,113,182, 20, 74,138,187, 66,125,169, 32,
-147,174,213, 0, 59,166,228,204,144,201,129,100,187, 95,229,184,171,186,216, 82,160,184, 2, 23,221,208,248,245,211,174, 35,178,
-135, 24, 24,151, 41, 47,204, 25, 20,169,220,146,253,139,116,197, 52, 67,173,178,144, 87, 69,111, 68,130, 8,223,225,172,214, 68,
- 9,179,114,244, 44, 43, 68, 40, 2, 61,245, 83, 50,237,144,113,171, 81,158,193,242,230,168, 37,166,162, 41,109,163,179,161, 5,
-206,202,138,215,221,167,254,165,131, 33,103, 89, 37, 39,179,169,151, 31,230, 15,187, 36,151, 94,112, 45,107,169, 63, 50,128,246,
-158,223,232,212,213, 90,234, 57,215,162, 87, 93, 35,166, 35,234,186, 5,119, 41, 11,238, 95,154,119,168, 85,124,124, 52,110,228,
- 40,139, 20,215,224, 94, 86,179, 99,215, 37,221,238,138, 84,188,122, 82,195, 50,152,102,171, 49,164,169, 53, 10, 9,220,246,172,
-120, 14,132,106, 70, 19, 26,171, 44,121, 2, 89, 51,110, 30,166,240,136, 18,147,110,181,218, 39, 58, 84,105,230, 41, 44,199, 73,
- 77,127,245,235, 74,255, 0,244,117, 83,126, 24,255, 0, 50, 34,102, 3, 70, 65, 28,175,201,151, 44,238,230, 34, 69, 83,194,196,
-130, 16,203, 11,115,229, 71,112, 34,132,164,208,145, 83,160,182, 8,158,174,153,181,250, 32, 75,114, 38,218,239,232,243,219,127,
-205, 90,208,164, 36, 10,119, 86,164, 40,120, 26,142,157, 52, 68,154, 65, 58, 49, 32,171, 43,135, 95,176,158,110,197,156,192, 50,
-119,252,219,135,150, 27, 75,143,162,142, 46,169,160,237, 7,122,142,190,237, 84, 70,201, 83, 61,209, 68,217, 88,144, 92, 56, 7,
- 33,114, 15,164,155,154,112,203,210,220,151,198,233, 81,110, 52,217, 3,204, 66, 27, 42,170, 90,117, 42, 20, 41, 3, 96,105,241,
-214,227,136,231,204,195, 18,210, 29,214, 47,152,225,159,231,234,172,111, 28,114,199, 13,101,193, 23,225, 96,177, 46,228,237, 22,
-169, 73,181,219,252,210,170,117, 43,242,187,191, 94,180, 86,114,151,204,107, 50, 71,189, 99,229,143, 0, 91,104, 77,232, 92,176,
-205,194, 58, 91,105,192, 26, 3,181, 33, 52, 1, 32, 14,130,157, 6,171,165,113, 76,144, 29, 22,171,134,100,218,208, 72, 94,230,
-190,207,237,208,150,218,229, 48,132, 17,148,228,136,145, 80, 13,124, 60, 52, 36,164,234,122,107,114,149,252,153,106,141,151,226,
-215, 76,114, 89,255, 0,101,159, 25,248,142, 0, 63,101,214,202, 15, 95, 29,245, 37,127, 41,117,127,138, 54,144, 85, 99,225,236,
-210,229,117,226, 43,124,107,154, 4,139,189,166, 84,171, 19,225, 98,168, 37,149,118,252,213, 27, 81, 64,245,213,103,169, 64,137,
-139,119, 94,141,133,145,230,209, 25,119,213, 79, 98,215, 40,171,202,147,230, 44, 52,146,160, 10, 18,148,157,207,177, 42, 7, 88,
-235, 53, 8,211, 20,121,202, 57,236,203, 29,202,217,111,178,184,177, 42, 8, 76,143, 49, 63, 40,238,216,138, 1,168,248,240, 97,
- 61,227,170,131, 38, 59,160, 98,122, 20,105, 59,212, 43,252,145,128,185,109,201, 19,222,242, 26,242,159, 95, 83,211,235,223,173,
- 60,117,190,195,245, 61,167,228,159, 69,230,124,175, 0, 40,158,248, 13, 15, 85, 84,115,201, 47,166, 99,176, 86,190,246, 91, 89,
-242,149,226, 5,117,123, 27,188,198, 42, 58,226,250,160,219,131,139, 65,238,240,223,125,117,129, 42, 85,198,220,230,130,251, 28,
-218,187, 31, 16, 70,162,152, 79, 11,190, 42,146,159,154,149,165, 55, 30,194,105,161,137, 79, 17, 93,246,223, 49, 78,165, 62, 4,
- 19,183, 74, 3,161,102, 84,131,170, 48,194,225, 42,224,224,113, 95, 55,152,237, 2, 71,234,253, 90, 30, 82, 83,198, 42,194,219,
-216,119, 9,194,219, 50,232,150,214,154,148, 15,145,182,208, 70,234, 81, 31, 49,174,162, 43,157, 75, 33,219,127, 41,203,109,222,
-248,203, 17,226, 17,216,217, 9,249,202, 72,166,213,233,168,100, 84,166,176, 2, 51,193, 51, 41,119, 9, 77,173, 5, 69,148,144,
-123,221,175, 96,247,148,166,165, 71,227,168,172,232,131,184, 43,175,233,191,144,173,241,108,104,109, 10,126, 85,199,182,157,235,
- 9,105,164,109,251, 34,160, 15,209,175, 53,231,241,167, 57,147,217, 97,249,137,179,186,133,230, 11, 45,195, 35,201,156,186,186,
-178, 84,175,152,215,194,131,219,182,185,199,221,229, 86,203,207, 46,252,238,147,249, 14, 67,112,177,220, 76, 4, 59,212,210,149,
-215, 6, 65,148,244, 42, 73,222, 76, 87,102, 47,116,153, 62,251, 29,167, 92, 33, 46, 56,148,168,215,106, 87, 79,202,190, 80,172,
-144,117,100, 13, 86,109,155,171,137,108, 60,103,143,241,231,153,115, 82, 12,224,132,246,149, 29,201, 35, 88, 58, 57, 11,172,181,
-137, 87,211,180, 78, 9, 83, 46,235,107,184, 79,117, 86,154, 42, 56, 61, 71, 65,227,173, 60,174,249, 67,170,107,227,170, 23,207,
-115,151,113,102,150, 26, 81, 11, 0, 29,180,194, 90, 42, 24,106, 80,227, 62,167,115, 39,173,170,181, 34, 83,140,219,215,242,149,
- 54,165, 2, 71,227,169,120,235, 97, 57,180,128, 69, 94, 78,205, 2, 47,225,254, 72,201, 92, 90,164,199,146,165, 0,105, 69, 40,
-146, 65,248,234,231,149,162, 2, 0,129,217, 85,198,249, 71, 69, 37,152,228, 89,102, 85,116, 48, 34,146, 65, 59,214,191,219,170,
- 44,123,225, 84, 93, 73,250,131, 46,170, 37,153,171,196,238,172,206,200,182,101, 10, 1, 85,240,223, 68,158, 70, 22, 68,196,117,
- 40,138,225,185, 90, 46, 61,245, 37,197,209,112,166,140,119, 80, 30,105,176, 20,144, 82, 42,105,172, 46,111, 19,117,215, 56, 58,
- 43,106,108,140, 3, 20,170,229,143, 82,150, 28,168, 59, 1,181, 2,157,194,124, 72,253, 26,209,113,156, 84,168,101, 24,180, 20,
-130,201, 39, 71,184,173,195, 16, 2, 20, 73, 4,252,107,173,173, 19, 49, 1, 50, 71, 84, 18,234,203,115, 75,111,120,154,208,123,
- 52,116,103,187, 84,211, 38, 92,185, 17,107,203,239,232,122,232,154,236, 46,135,243, 88,175, 92,101, 26, 60,204,146, 59, 82,118,
-142,181,165, 42, 39,227,174,102, 92, 99, 2,164, 37,194,189,184,103, 17,241,125,195,141, 62,242,107,109,125,218, 91, 5, 36,132,
-212,237,175, 55,205,228,174, 22,144, 58, 32,197,110, 85, 65,229, 66,198, 51,200, 47, 90,237,206, 86,216, 87, 74, 14,157,105,182,
-189, 71,211, 54,237, 98,122,163,232, 44, 66,125,112,190, 17, 13,236, 25,119, 46,209,222, 83,221,183,188,107,209,101,147,184,130,
-183, 56, 21, 60, 29, 36, 57, 49,230,224,223,229, 33,164, 81, 65,103,167,196,141, 81,250,138,159, 50, 0,172,199, 42,118,216, 66,
- 86,220,224,203,121,197,190,195,101, 67,244,235, 29, 85,254, 82,170, 63, 56,213,111,178, 98,119, 25, 20,150,237, 80,154, 84, 15,
- 30,149,213,214, 39, 39,178, 64,132, 62,193, 2,225,101,238, 43,157,225,148, 31,155,161,174,189, 35,139,207, 23,215,170,186,196,
-191,120,213,105,254, 89, 45,150,128, 65,168, 59,124,223,243,106,167,157,193, 4, 25, 33, 51,106,110,139, 75, 22,167,211, 48, 58,
-229, 41, 93,250,235, 10, 96,170,153, 48, 88,196,237, 99, 30,251,149, 44,151,123,123,142,226,131,110,157, 53, 91, 59, 36,102,201,
-121,123,131,160,214,210, 59, 29, 21,219,204,107,250, 28, 26,180, 20,255, 0, 72,159,104,251,212, 96, 13,167,222, 62,244,196,101,
-178,165, 84,159,152,107,212, 87,173, 21, 32, 26, 37,162,146, 55, 35,250,180,194,117, 73,151, 59, 8, 61,255, 0, 55, 80,122,254,
- 26,226,104, 67, 89,236, 68,206,146,212, 82,104,186,130, 84,147,189, 42, 53, 93,155,105,132, 10,184,227, 49,133,147,213, 2, 93,
-184,143, 24, 90, 31,186,165,206,234, 37, 69,198,212, 55,238,173, 71, 93, 82,121,164,151, 90,111,211,198, 58, 58, 12,198,241, 76,
- 82,219,149, 40, 92, 82,218,210, 79,106, 9,160, 33, 68,237,215,221,174,249,165,119,203,137, 41,174,188,131, 20, 77,157, 86,133,
- 6,208,166,190, 66, 83, 65, 74,120,234, 49, 97,116,219,107,137, 85,143,212,253,158,217,107,204,237,153,117,181, 37, 9,145,230,
- 71,144,177,184,239, 65, 5, 63,168,157, 71,116, 62, 82, 85,134, 21,196,233,216, 47, 12, 77,135, 54,192,219,236,246,184,162,147,
-220, 92,170,157, 53,223,234, 61, 63, 13, 81, 72,151,101,108, 66, 73,243, 67,242, 33, 74, 92,219, 66,131,138, 66,126,106, 18, 64,
- 4, 81, 91,237,224, 78,172,177, 67,148, 61,178,249, 82,249,249, 73,186, 71,105,201, 14, 2,146,165, 5,118,143,152, 39,194,149,
-240,213,132,180, 85,227, 85,215,133, 70,149,105, 76,139,187, 69, 77,146,238,193, 21, 21, 74, 82, 80, 22, 64,233,243, 43, 93, 0,
-144, 72, 70,227,134, 14, 17,174, 55, 40, 77,132,155,147,236,175,203, 73,109,167, 18,106, 94, 66, 74,135,122,147,223,185,165,123,
-183,213, 53,228,247, 70,193,211, 2,221,137, 88,167,194, 68,232,138,148,192,170, 86, 11,137,100,247,165, 84, 85,123,146,224,237,
-222,191,178,126, 58,175,157,160, 34,226, 37, 32,164,174,188, 95, 2, 92,213,221,177,168, 82, 85,107,109,191, 37,217, 50, 20, 23,
-229,168, 80,149,160,180,141,183,218,180,212, 7, 47,193, 62, 53, 55, 85,205,104,154,140, 74,248,213,245,212, 31,184, 66,193, 38,
-181, 61,201,168, 0,144, 1,161, 38,158, 26,143,118,238,171,164,178,102,179,155, 89,243, 11, 9,180,101, 48, 74,218,144,146, 74,
-202,123,128, 77, 73, 10, 29,219,237,166,198,195, 2,224,168,140, 1,232, 18,167, 36,199, 47,252, 45, 63,252,215,199, 82, 87, 54,
-202,181, 85,203,111,202,146, 5,122,164,154, 1,173, 70, 7, 46, 72, 17,145, 89,190, 83,132,141,145, 50,136,213, 51,120,127,213,
-197,151, 40,130,134,156,123,200,186, 35,229,118, 43,202, 1,212, 17,177,168,235,171,209,102,224,225, 97,175,198,149, 82, 98, 19,
- 62, 55, 48,181,112,108, 20, 56, 59, 79,136, 35,250,181, 4,132,138,237,120,219,151,153, 89,138, 36,142,228,175,127,110,157, 26,
-244,213, 88, 81,142, 0, 80,215,204,182,215,109,128,237,198,228,250, 26,134,210, 20,227,171,113, 64, 37, 41, 74,106, 73,175,179,
- 79, 17,125, 21,148, 43,216, 29, 86,254, 50,185, 65,131,131, 38, 69,149,244,153, 87,139,141,198,250, 19,218, 84,219,141, 72,146,
-178,144,124, 42, 83,210,186,163,245, 11,200,143, 96, 91, 78, 58, 45, 68, 64,246,162, 62, 35,176, 47, 48,203,158,152,150,138,254,
-222,142, 41, 9,160, 41, 35,167, 90,211, 89, 60,195,178, 42,222,178, 74, 42,206,109,147,190,241,229,203, 73, 46, 42,128,119, 43,
-184,128, 5, 60, 62, 26,131, 18,198, 10, 59, 98,234, 15, 12,154,236, 11,231,216, 75, 32, 68,118,160,141,250,106,195,204,125, 66,
- 10,218, 99, 45, 37,168, 65, 92,211,139, 38,199,127, 84,136,194,182,247,190,100, 40, 2, 7,188, 84,235,101,195,230,249,145, 17,
-125, 86, 59, 51, 3,201,153, 35,162, 1,126, 51,139, 65,249, 79,102,224,119, 13,141,125,250,186,220,200, 17, 23, 81,236,227,183,
- 7,158, 33,150,207,101,119, 7,227,237,212, 18,189,148,194,130, 87,116,107, 67,176,168,252,167, 40,200,216, 32,124,198,135,218,
- 70,161,149,137, 70,162, 20,147, 47,121,133, 73,136,133, 20,163,185, 3,226,104,116, 52,165,226,167,140, 19,123,211,198, 18,236,
-201,236,205,150,158,230, 91, 33, 72, 65, 4,247, 43,173,116, 52,167,170,156,134, 9,177,202,130, 44,136, 13, 69,185,189,216, 0,
-238, 68, 32,154, 5, 83, 96, 86, 58,159,134,162,156,194,142, 49,125, 80, 53,138,221,110, 51,190,233,216,226, 67,132,252,170,112,
-214,158, 2,137,233,248,106, 48,158, 93,147, 43, 18,102,116,165,165,176,217,109,160, 69, 18, 18,150,208, 7,192,110,117, 6, 65,
- 97,213, 1,151, 96,136, 86, 27,137,173,249, 53,150, 42, 95,134, 59, 90, 0, 21,149,145, 80, 15,177, 39,127,213,172,134,124,171,
- 46,250,149,231,188,153,140,137, 37, 78,242, 62, 95, 58,218,201,101,197,158,231, 19, 82, 78,196,154,123,245,156,189,246,232,177,
-150,204,110, 41, 57,117,180, 93, 47,119, 19,112,112, 41, 66,181,173, 13, 41,250,116,204, 93, 6,168, 91,173,101,213, 2, 96,183,
- 73, 14,119, 20,186,154, 17,225,190,140,190, 64,134, 85,178, 36,157, 17,196, 73,247,204,174,222, 4,185,106, 44, 38,132, 36, 40,
-234,156,113,241, 5,192,213, 90, 81, 35, 24,234,140,248,209,150,162, 64,117,167, 73, 82,190,110,186, 26,232,145, 37,217, 16, 82,
-211,154,242, 48, 46, 15, 71,123, 96,147, 65,163,173,139, 65, 69,143, 13,197, 6,219, 39,196, 49, 82,209, 0,149,157,181, 79,141,
- 41, 70,215, 8,249,144, 34,201,147,198,150,235,172, 54,132,150, 59,131,107, 32,138,124, 53,172,178,195,101,122,170, 11,224,210,
-209, 60,248,198,203,219, 21,219,164,182,188,199,209,243, 2,122,235, 21,155,184, 22,236,235,149, 71, 93, 82, 7,212,215, 39,161,
- 55,183,237,145,143,148,174,226, 74, 78,198,181, 58, 35, 26,150,213, 89,215, 9, 2,150,120,174,113,124, 73, 75, 69,247, 16,197,
-126, 97,220, 64, 35, 90,140, 0, 36, 53, 26,169,229, 89,234,232,209,119,150, 28, 40, 65,123,247,170, 35,114,124, 52,116,226, 98,
-155, 2, 10, 35,109,136,104,180,135,155, 80, 46,154, 1, 67, 93, 50,130, 73,101, 33,209, 7,223, 63,119, 39,207,112,124,160,234,
-234,138,180, 80,206, 78,162, 46,238, 11,138, 3,108,154,159,110,141,174,163, 30,169,176,175, 93, 84,150, 29, 18,108, 7,211, 34,
- 50, 74,148,147, 83, 65,238,208, 25,118, 6,100, 68,128,219,162,107,219, 57, 19, 40,102,214, 32,135, 29, 64,166,201,170,191, 78,
-168, 77, 21, 74, 78, 89, 0,242, 7,162, 92,229,214,215,111, 87,127,184, 81, 38, 98,149,221, 85, 31, 30,186,212, 96,221,180, 6,
- 68,110,105, 5,107, 61, 62, 63,246, 60, 86,182,159, 80, 80, 13,148,145,239,166,181,152, 57,126,108,128, 91,158, 38,253,245,178,
- 71,229, 18,172, 51, 51, 25,109,220,104, 27, 11, 35,125,188,117, 47,168,229, 40,214, 27,193,103,121,112, 77,133, 68,222,111, 56,
- 69,166, 63,148,143, 45, 18, 65,217, 41,161, 10, 26,243, 99, 41,204,170,184,116, 64,183,140,197, 10,113,214,224, 0,148,172,237,
-219,181, 5,116,125, 0,141, 87, 39, 7, 80,191,126, 73, 46,189,186,235,173,159, 7,200,152,104, 74,118, 52,140, 10,144,183, 77,
-110, 99,159,209, 93,122, 21,160, 95, 89, 87, 54,192, 78, 46,164, 38,165,128,129,237,215,156,114,152,198,153, 44,237,245,152, 23,
- 94, 29,157, 61, 16, 76,112,225, 12, 17, 74,106,166,186,183, 23,101, 0,176,183, 69, 6, 18,176, 84,216, 63, 41, 41, 36,123,192,
- 52,254,157, 22, 36,118, 16,221,199,222,156, 33,242,147,237, 31,122,104,199,103,114,117,233, 36,175, 85, 37,118,168, 31, 33, 46,
-116, 10, 29,191,142,154, 23, 29,106, 66,124,182,202,207,141, 70,185, 37,200,160,140,146,250,204, 27,138, 46, 18,136, 45,161,192,
-218,130,142,221,170, 52,213, 86,108,158, 36, 45, 23, 28,209, 41,119,202,252,155, 30,205, 49,200,209,212, 18,151, 73, 66,202,119,
- 27,252,160,237,160, 43,172,178, 62,236,141, 82, 87,249,166, 89,124,184,189,115, 98,173,182,201, 74,171,191,205, 85,120, 31,134,
-167, 44,161,170, 82,100,109, 97,147, 61,201,106,114,230,178, 80,176, 18,163,220,122,244,253,122, 22, 68, 4,100, 98, 74,251,201,
-252, 67,122,229, 12,109, 81,236,164, 27,132, 69,151,130, 22,104,146, 10,119, 63, 29, 69, 47,152, 34,241,236, 21,157, 82,134,199,
-111,202, 44, 55, 7,173,217, 19,106,132,134, 1, 71,115,169, 33, 52, 27,109, 94,186,172,179, 16,187,171,145,147, 2, 52, 40, 23,
-149, 80,143,222,165,148,165,105,113, 52, 11,237, 35,234, 20,169,223, 83, 84,241, 42, 57, 29,209, 73, 11, 21,229, 86,171,176,106,
-106, 3,145,227, 60,176, 60,202,128,180,143,217, 63, 17,171, 77,162, 64, 42,184,200,197,221,126,142,122,127,244,227,197,188,165,
-199,225, 49,163, 51, 38,193,117,104, 6, 37, 50,148, 41,109,165,198,148,123,155, 89, 21, 74,146,173,253,181, 26,154, 96, 8,232,
-169, 78, 69,181,204,151, 72,190,114,244,141,200,190,157,175,138,119, 44,255, 0,222, 24,124,231, 83, 26, 5,219,189, 63,189, 82,
- 82, 87,186, 22,174,244,174,157, 64, 73, 72,167, 93,245,159,200,168,149,172,227,185, 8,220, 27,186,231,135,200, 80,177,219,116,
-104, 19, 24, 47, 91, 16,132,131,181, 20, 10, 71,111,211,243,123, 61,186,170,179, 14, 82, 87, 98, 96, 34,124, 19,159, 49,233, 23,
-166,173, 81, 89,118, 36,151,118,101,214, 66,208,157,135,137, 78,171, 46,193,156, 79, 85, 52, 46,137, 82,151,231,241,220,142, 82,
-158,121,177,247, 65,103,190,191,182,107,185, 62,221, 50,184,200, 39,204, 5, 41, 97,254, 88,252, 17,109, 42,237, 70,225, 62,208,
- 8,161, 0,251, 52,247, 81,150, 11,198, 99,130,205,114,208,183,108,234, 81,140, 7,113, 21,174,221,124,116,248,201,147, 5,131,
-162, 70,231,188, 98,197,222, 74,159,134,227,144,175,200, 10,236,155, 28, 41,183,146,107,226,164,144, 72,175,180,234,239, 15,145,
- 53,158,170,187, 47, 6, 55, 14,136,119, 30,228,190, 77,193,102, 11, 30, 69,122,242, 80,131,216,204,217, 49,213, 33,131,253,222,
-245, 33, 73, 82, 79,198,191, 29,105,232,204,174,209,237, 85, 67,137,171,252,127, 42,106, 89,238,188,229,148,198, 73,176,223,109,
-105, 97,193, 64,250, 98,201, 89,223,253,103, 64,175,227,169,188,200, 71,178,176,167,211,181,203, 81, 96,213,115,221,125, 62,101,
- 89,228,132, 70,229,188,190, 93,198,200, 79,239,173, 54,228, 38, 43, 14,138,215,181,192,199,204,164,251,148,162, 53, 13,188,149,
-117,135, 86, 21,250,114,152, 23,148,157, 29,205,226, 76,119, 28,176,136, 24,194, 27,105,164,178,220,118, 24, 77, 79,148,218, 43,
- 68,244,253, 58,195,242, 92,176,182,199,236, 21,128,160, 3,242,134, 10, 75,133,176, 27,206, 54,236,235,140,150,145,246,238, 54,
- 18,151, 16, 8, 53,175, 67,182,250,165,203,202,141,157, 17,144,175,104, 93,185, 36, 37, 40,169,195,187,160,210,132,111,166, 83,
- 38, 80,179,161, 11,189,165, 48,165, 55, 55,184,249,227,113, 74,211,245,104,218,172,125, 20, 22,197,151,220,169,155,126, 95,140,
- 42, 12,129,223, 45, 3,185,181, 4,213, 65, 64,124, 43,171, 44, 27,205, 54, 2,171, 50,168, 22, 69,146,235, 12,192, 39,223,174,
- 74,136, 80, 83, 21,178,123,232, 15,210,131,243, 40,251, 61,218,211,207, 56, 51,186,169, 24, 44,122, 35,251,135, 21,182,243,104,
-121,216,226, 13,137,132,143,221,246,159, 49,212,129, 80, 85,181, 73, 63,243,104, 56,229,146, 92,169,188,134, 81, 55, 62, 21,184,
- 93,216, 15, 56,207,218, 66, 21, 45,182,177, 87, 3,125, 65, 41, 30, 39,254,109, 74,115, 34, 59,168, 13, 11,210,184,218, 29,154,
-210,219,210, 18, 91, 91,132, 56, 18,164,158,245, 3, 64,144, 19,215,125, 65, 44,167, 92, 21, 50,112,113,184,183,241,214, 50,187,
-164,198,210,213,205, 77, 30,192,119,251,118,192,216,208, 87,230, 62,206,181,211,132,221, 67,108, 29, 44, 51,156,222,227,125,190,
- 57, 45,199, 11, 40,169, 77, 20, 73, 52,246,171,240,215, 66,224,131, 45,216,222,104,150, 20,134, 27, 3,203, 71,237, 42,189,213,
-246,233, 74, 76, 52, 76,176, 22,209, 54, 56,171, 45,180,139,147, 82, 50, 2,226,163,119, 3,216,130,160, 15,226, 53, 77,151,124,
-223,162,200,242,182, 92,116, 1, 90,150,185,207,141,172, 88, 72,110,203, 24, 34,226,224, 0, 17, 85,168,208, 83,114,117,136,191,
- 26,115,177,228,123,175, 58,202,174,249, 29, 82,219, 43,200,178,124,226, 50,239,104,109, 65,148,212, 83,221,237,212,242,170, 44,
-193, 3, 28, 66, 11,149, 7,143,114,156, 91,100, 39, 32, 79, 69, 29, 77, 65,238,173,118,208, 68,237, 42, 12,140,109, 84, 12,140,
-138,102, 73,123,242,173,169,253,209, 80,165, 53, 9,153,145, 81,154, 35, 16,155,216, 22, 59,118,137, 1, 11,122,189,133, 34,181,
-209, 59,246,197, 11, 59, 2, 97,225,204,162, 75,202,183, 91,190,121,221, 20,145,211,127,213,170,124,155, 68, 14,169,160,147,217,
- 41,189, 87, 98, 50,177,245,185, 41, 67,181,211, 66,162, 60, 54,247,106, 90,173, 19, 12, 17,120,195, 95,122, 95,113,125,182,102,
- 64,227,108, 50,149, 58,232,250, 70,230,186,176,167, 26, 49, 46, 89, 17,108, 74,179, 56, 45,146,235,108,180,178,220,184,132, 53,
- 64, 13, 69, 15, 65,169,206, 69, 93, 29, 86, 89, 68,137,118, 71, 83,121, 19, 28,194, 49,119,209, 45, 73, 66,212,130, 19,237,253,
- 90,164,201,170, 51, 58, 46, 83, 81, 18, 84,183,155,242,200, 89,182, 98,100,219, 23,220, 82,106,162, 43, 83,185,235, 93, 69, 26,
-200, 42,202,201, 17, 22, 91,237, 22,200,230, 18, 20, 16, 3,128, 2, 72, 3,217,173, 55, 25, 22, 26,161,101, 97, 1,124,185, 67,
-187, 72,112, 42, 22,200, 7,219,255, 0, 62,172,111, 1, 62,178,138,240,201,211, 16,199,218,220, 85, 80, 5, 1, 53,167, 77,118,
-154,116,112,162,178,208,229,124,202, 92,101, 96,132, 80,251, 54,247,234,210,138,228, 59, 40,133,204,162,162, 70, 5, 97, 41, 27,
- 29,135,199, 69,204,176,213, 73,231, 2,155,220, 61,139, 90,228, 37, 10,152,144, 61,181, 3,173, 53,152,207, 36,130,202,120, 18,
- 74, 46,204, 99, 99,118,118, 10,138, 83, 81, 74, 29,181,156,148,103, 41,124,170,194, 17,139,106,145,185,117,249,159,230,228,194,
- 53,237, 85, 65, 21,214,203, 7, 30, 66, 58,170,203,200,125, 21,147,244,215,122, 69,195,141, 86,153,212,169, 10,174,254,239,126,
-180,252, 84,118,204, 50,216,240, 35,250, 78,145, 92,187, 4, 28,150, 98,162, 31,148,173, 68, 20,237,227,169, 61, 75,152,209, 3,
-216,170,185, 66, 13,133, 45, 38, 69,144,243,181, 32,169, 94,250,235, 31, 11,130,171, 1,151, 84, 28, 90,227, 57, 30, 98, 18,104,
- 55,233,167, 28,128, 18,144, 90,223,176,201, 75,222, 79,105, 42, 3,216,117, 45, 57,123,117,117, 20, 11, 29, 84,157,186,200,166,
- 7,119,109, 15,188, 83, 94,167,192,114,145,182, 32, 19,170,185,166,192,116, 89,117, 98, 72, 79,107, 96,158,148, 63,142,138,230,
-176,197,144,112,160,203,161,250, 44,106, 28,199, 25, 1,212,146,127, 29, 87,113, 24, 48,212, 20, 62, 62, 40, 43,234,108, 53,142,
-183,123, 79,152, 20,132,141,188, 8, 81,254,173, 78, 56,225,189,187, 58,152, 98,234, 71,180,125,232,250, 50, 59, 66, 86,174,167,
- 99, 79,126,174, 37,209,110, 37,209,118, 22,255, 0,217, 84,131,224,123,134,152, 10, 96, 92,183,117, 42, 61,181, 78, 39,234, 2,
-187,117,219, 92,145,209,118, 7, 84,129,228,139,237,234, 92,135,237,136, 66,149, 28,158,226,177,224, 9,233,253, 90,170,185,150,
-150,136,148, 34,222, 11,115,202,102,183, 46,127,113,130,180,165,183, 18, 77, 79, 66, 52, 49,181,186, 35,163,141,184,185, 93,247,
- 40,248,246, 7, 18, 60, 36,165, 46, 70, 93, 18,162,170, 29,199,180,234, 40,207,114,150, 80, 16, 12,185,248,246,235, 14,255, 0,
- 49,198, 25, 64, 88,109,106, 91, 52, 27, 13,142,222, 59, 83, 77,152,100,218,231,217, 24,204,204,225, 97,178, 17, 33, 99,247, 46,
-138,169, 41, 52, 27,138,106, 58,222, 69, 73, 97, 75,174, 95,207,241,251,204,147, 30,107, 9,118, 42,133, 77, 0,238,220,211, 99,
-215, 86, 80,160, 16,171, 39,151, 42,228,150, 57, 86, 15,100,202,163, 24,150,149,169,149,249,125,237, 54,233,239, 74,129,240,175,
- 81,161,173,196, 15,162,178,196,228,201,235,209, 86, 94, 72,197,229, 97, 57, 67,172, 92,163,149,193, 10, 61,233, 29, 7,129, 32,
-251,206,155, 0, 99,162, 54,194, 37,243, 14,133, 53,253, 56,242, 71, 44, 98,127,186,244,231,149, 76,181,221, 31, 73,113,235, 74,
-203,110,178,165,144, 19,222, 26,144,149, 55, 94,130,180,174,157, 40,153, 33,165, 76,101,169, 77,187,195,190,164,115,214,147,145,
-115, 76,199, 47,183, 22, 2,146,210, 38,169, 10, 74, 18, 55, 62, 82, 18, 2, 16, 9,166,200, 2,190, 58,171,186,130,123,171, 44,
- 67, 93, 39, 64,129,239,121,236, 43, 95,124, 9,150,228, 34,232,209, 43, 92,112,132,252,157,194,130,167,251,196, 26,234,182,204,
-121, 14,234,222, 57, 2, 75,222, 41,151,174,227,125,138, 17, 0, 81,210, 16,128,132,128, 80,154, 15,152, 83, 65, 93, 89, 0,185,
- 68,195, 86, 40,234,229,104,127,238, 81, 62, 47,204, 22,159,152,142,132,141,180, 28, 36,250, 41,100,116, 92,176,175, 79, 67,146,
- 40, 72,116, 31,153, 63, 3,167, 74,164,193, 36,203,192,178, 54, 39, 54, 24,146,174,228, 41, 36, 17, 80,118, 59,120,234, 63, 98,
-134,206,170, 39, 63,227,200, 14,200, 93,206, 27,100,133, 36,133, 4, 80,236,107, 82, 41,236,211, 55, 16,137,170, 59,130, 76,101,
-156,120,144,135, 3,234, 75,145,149, 95,153, 10,249,135,142,233, 80,209,212,102, 24, 46, 89,142, 14,136, 1,142, 57,159,139,202,
- 85,194,197, 49,216, 65,106,239, 74, 25, 90,144, 15,184,129,183,234,213,184,207, 50,138, 8, 97, 24, 73,193, 41,151,136,114, 5,
-241,166, 81, 6, 67,138,118, 85, 2, 42,162,106, 64, 20,173, 83,227,170,172,135,144,234,172,234, 7,185, 78,142, 50,137, 42,107,
-105,159,144, 32,133, 13,251, 9, 38,163,168,214,115, 47,229, 70,215,169, 69, 51,114, 20, 60,163, 14,216,146,136, 77,215,189, 66,
-129, 36,251, 62, 83,160,106, 8,139, 14,136,106,237, 55,238, 93, 82, 92,237,169,250, 41, 95,215, 93, 23, 16,133,232,162,174, 22,
-246,223,104, 23, 71,115,135,160, 72,174,136,174, 76, 84,115, 14,134,139, 19,109,242,252,213, 2,146,147,184,240,165,116,108,100,
- 74, 26,113, 1, 55,184, 79, 20,181,223, 32,125,213,149,150,196,247,201, 47, 56,232,249, 18, 71,182,155,154,123, 6,138,253, 65,
- 1, 64, 96, 19, 30,217,197, 22, 52, 33,119, 9,231,238,100, 52,123,130,164,208,119,185,253,242, 58, 4,143, 1, 77, 68,114, 73,
-232,162,218, 20, 62, 93,140,170, 92, 79,180,198,163, 5, 74, 89, 42, 83,157,131,203,238, 59, 21,169, 78, 17,220,125,149,216,105,
-226,246,234,155,229,186, 7,191,225, 54, 76, 73, 31,204, 47,197,115,239, 64, 5,121, 77,158,228,165, 64,124,162,190,208, 70,167,
-174,247,232,185, 42, 16,157,213,119, 41, 17,140,137, 14,181, 5,194,106,132,201,112, 4,183,254,154,142,234, 42,246, 80,109,162,
-235,200,100, 21,148,234,151, 87,107,124, 21, 73, 82, 24,144,169,178,106, 74,148,218, 22,148,117,240, 43,166,140, 22, 58,134, 80,
- 93,248,251, 14, 68,113, 37, 45, 36,123,183, 39,167,137,215,119, 33, 39, 20,113, 98,113,217, 32, 26,128,122,124,132,255, 0,102,
-128,201,129, 42,151, 50,183, 8,207, 25,110,239, 50, 75,113,139,199,203, 27,118,159,142,177, 89,110, 11,172, 54, 89,140, 31, 68,
-238,179, 49,123,182, 98, 30, 66, 90, 82,152, 80,162,149, 79,119,183, 80,209, 55, 84, 86,200, 32,219,127, 26,185,149,220, 28, 72,
- 71,204, 73,175,111, 94,186,109,245,234,169,242, 46,213, 19, 88,184,153,120,228,214,220, 67, 10, 43, 73,223,229,223, 81, 85, 90,
- 22,115, 50, 77, 27, 84,180, 70,180, 41,185, 13,209,210,158,212,164,138, 16,124, 54,208,153, 54,152, 40, 42,164,200,163,223, 78,
- 92, 85,151, 79,118, 78, 64,220, 50, 88, 82,187,130,141, 73,240,214, 83,145,204, 50,155, 21,107, 12, 64,200, 59,213,103, 23,102,
- 25,189,221,216,198, 49,105,132, 83,184,211,115, 77,188,117,127,198, 86, 54,245, 80, 70, 18,164,234, 23, 23,166, 62, 57,197,241,
-107,138, 19,125, 74, 82,226, 15, 69, 1,214,154,139,147, 54,195, 65,162,154, 87,106,196,106,157,220,145,117,199,160,218, 15,242,
-198, 7,148,144, 10, 84,157, 7,131, 69,178, 46, 74,108,173,136, 84,203,157,243,107,212,137,142, 65, 97,213,121, 11, 82,170, 43,
-211,174,218,176,178, 70, 50,100,234, 0,148,146,187, 17,176,204,153,116, 42,121, 59,171,122,158,187,235,134,215, 40,172,136, 6,
- 77,219, 38, 14,251, 54,159,184,114,180,240,233,173, 6, 21,191, 42,171,180, 5,234, 29,154,128,161, 9, 10,223,199,175,234,213,
-136,123, 0, 76,102, 11,107,216,228,214,153, 50, 16, 59, 73,220, 36,106,239, 26, 2, 32, 58, 6, 93, 84, 76,139, 84,231, 30, 8,
-120, 18, 15,244,106,203,116, 91, 69, 28,129, 43,124, 91, 68,152,238,160,148,146, 42, 41,161,108,182, 36, 49, 78,170, 37,211, 39,
- 19, 93,194, 13,188, 58,202, 8, 0, 3,182,179,249, 6, 36,163, 33, 25, 5,201,151, 92,238,183, 6, 84, 29, 73,167,252,189,186,
-134,170,162, 11,169, 62,100, 31, 31, 17,155,114,154,128,211,101, 69,195, 77, 93,254,170, 16,143, 94,138, 90,241,204,213,159,227,
- 14, 24,200,109,188, 88, 36, 52,149, 32,148,154, 20,144, 13, 14,164,226,249,200, 11, 22,195,135,199, 34, 4, 37, 13,247,140,111,
-143,207,125, 18, 16,165, 43,189, 95, 49,165,122,234, 30,119,148,133,164, 42,172,204, 98,109, 43,118, 61,233,221,249,138, 47, 56,
-209, 59,116,240,214, 27, 35,151, 17,145,100,171,227,221, 20,193,224,149, 91,227,169, 41,107,122, 0, 42, 43,225,238,208,131,154,
- 0,234,164,179,140,240, 80,242,125, 59,221, 94,148,169, 12,181, 84,159,209,163, 7, 57, 91, 33,165,197, 73,111,153,233,159, 33,
- 41, 66,144,209, 9, 86,231,109, 88,113, 30,182,142, 53,131,193, 21, 95, 27, 32, 86,150,189, 50,228, 14,186, 18,226, 62, 82, 61,
-131,217,175, 67,151,238, 37, 54, 67, 84,124,184,231, 10,118, 15,165, 27,170,226,133,249,123,210,190, 29,117,154,175,247, 10,186,
-173, 44,153, 95, 27,180,186,211,255, 0,217,110,240,151,132, 62,195, 85,130,224,219,193, 27,127,241,181,124, 63,112, 42, 49, 50,
-240, 35,226, 15,224,137,253, 8, 75,104, 96, 56,154, 43,168,219,251, 53,234, 69, 88,158,139,182,157,232,233,177, 73, 7,240,212,
-106, 53, 11,156,205, 16,108,202,120,144, 27,161, 4,159,118,250,228,138,146,168,234,234,191, 94,185, 6,200, 46,142, 91,157, 3,
-238, 84,122,211,174,245,213,102, 77, 75, 85,143,120,101,239, 27,188,201,151, 37,200,209,182,142,179,222,131,236, 58,174,150,138,
-198,187, 28, 40,155,198, 16,235,185, 17,254, 98,225, 85,170, 64,169, 73,220, 84,239, 77, 69, 43, 25,114,186, 55, 73, 76, 98,182,
-155,102, 13, 57,107,183,165, 63,108,170, 54,237, 70,224, 21, 84, 17,166,121,142,142, 56,145,136,112,180,242, 85,170, 5,226,216,
-164, 69, 95,239, 71,206,133,236,119,235,169,233, 85,121, 7,111,189, 37, 50,235, 53,217,246, 16,251, 44, 45,107, 39,203, 88, 9,
-173, 40,118, 58,186,163, 96, 89,251,196,229,170,211,106,196,121, 14, 82, 25, 83, 49, 87,229,208, 4, 40,141,233,221, 79,234,208,
-249,151, 66, 0,159, 4, 95, 31,141,101,135,103,138,219,203,220, 59,107,202, 49,214,173, 47,180,175,231, 45, 35,190, 76,149,128,
-154, 42,191, 50, 18, 58,154, 13,102,112, 57, 56,228, 89, 40,147,175,101,187,206,226, 14, 37, 80, 61,155, 84,186,227, 78, 21,190,
-241, 70,111,111,203, 45,110,121,173, 39,204, 67,168, 29, 74, 84, 74, 65,252, 41,171,221,178, 84,164,198, 65, 60,249,146,111, 37,
-220,241,216, 87,108, 45,178,164, 54,144, 94,109,158,170, 8, 5, 69, 59,123, 77, 53, 87,112, 46,167,199,148, 91, 84,131,189, 92,
-110, 83,110,106, 93,226, 58,145, 49,211,220,190,228,158,243,218,190,193,221, 64,105,184, 52,174,134,176,128, 21,157, 1,209,127,
- 30,217,140, 25, 34,124,145, 89, 78,208, 84, 13,146,158,180,213, 22, 68,156,149,103, 90, 63,131,115,110, 35,166, 44,145, 86,148,
- 42,147,183,129,208,245, 5,219,122, 40, 76,156,197,243,140,152,195,230, 61, 72,246,252, 52, 96,139,133, 4,100,186, 49, 59,233,
-138,239,112, 36, 17,161,103, 6,213, 77,213, 50,241,219,164, 75,171, 33, 18,170, 86,161,212,106, 19, 7, 92,125,165,114,229,124,
-115,109,155, 17, 82, 96, 81, 75, 78,229, 42,161,169,235,225,168,229,162,150, 19,220,148,217, 86, 29, 21, 83,130, 92, 79,148,242,
- 72, 52, 21, 79,106,171,184,246, 80,234, 90,174, 33, 76,106, 5, 12,219,177,203,234, 51,102, 98,182,202,156,136,165,238,225,161,
-249, 73,241,166,250, 42,203,162, 32, 79,117,200, 71, 85, 99,238, 19,149,100,199,227, 66,182,158,235,154,219, 75, 96, 84, 85, 59,
-110, 73, 59,237,172,220,190,121,106,142,172,237, 92, 63,117, 30,219, 17, 12, 73,126,146, 23,243, 44,239,186,149,212,212,105,162,
- 12,157, 34,235,138,229,115,104,190,150,227, 36, 56,165, 83,230,161,233,169, 98,162, 43,170, 20,100, 56,148,184,148,146,233,232,
- 8,219, 93, 29, 82, 80,121, 61,137,240,181, 72, 41,223,122,164,141,233, 93, 19, 84,181, 81,202, 46,152, 30,150, 46,247, 47,181,
-155,143,219, 25, 34, 71,154, 21,231, 4,130, 66, 84, 62,154,254,189, 18,117, 40,107,160,193, 60,154,130, 44,172,132,190,218, 83,
- 37, 91,173, 78, 20,173,211,239, 41, 94,195,244,107,172,132,101, 3,149,100,145,247,106, 34,188,197,253, 42, 82,137, 82,137,248,
- 0, 5, 63, 29, 67, 36,224,151, 89, 98,229,220, 66,218,161,110,160,213,125,221,148,248, 80, 87,245,106, 90,203, 4,138, 9,186,
- 96,208, 93,109, 65,162, 22,233,222,173,161, 84, 36,251, 84,224,169,209,212,205,148, 82,136, 66,215, 28, 81,216,244,105,197, 81,
- 9, 62, 1, 38,155,123, 6,139,140,208, 22, 45,214,172, 97,125,253,204, 21,168,117,238, 82, 66, 70,137,129,116, 37,189, 17,109,
-146,207,112,140, 18, 22,180,117,253,144, 9,208,217,100, 0,168,179, 38, 2, 34,197,172,247,196,223,217,118, 42, 20,182, 2,146,
-162, 2, 79,129,214, 35, 59, 42, 44, 93, 97,179,233,243, 36, 72, 87, 27, 1,131,106,184,113,175,147, 57,145,247,229, 52, 21, 27,
-253, 58,204, 75,151, 16, 58, 21, 83, 28,119,209, 22,250, 82,224,219, 62, 65,144, 56,187,139, 61,172,173, 68,212,164,123,125,250,
- 26,254,124, 18,206,129,191,141,220,122, 43, 79,143,250, 95,227, 52, 72,251,169,177, 82,233, 7,184,119,164,104, 57,114,198, 93,
- 36,173,176, 56, 17, 47,204,161,249,127,210, 87, 30, 95, 27, 98,225,100,140, 34,204,105,105, 42,242,168, 1, 77, 71,134,134,159,
- 45,176, 52,164,225, 27,145,194, 66, 4, 50,105, 96, 24,126, 59,135,227, 17,173, 22,230, 80, 16,218, 18, 20,104, 42, 77, 0, 39,
- 65,209,147,143, 32,101, 34, 29, 91,226,224,198,184,134, 9, 87,234,110,199,106,114, 42,154,180,199, 66,174, 15, 10, 44,164, 15,
- 17,163,176,185,136, 86, 91, 69,159,229,120,209, 41, 29,161, 85,155,159, 9,101,208,238,130,233, 21, 42, 66,123,187,187, 7,176,
-157, 73,147,206,198, 64, 7, 84,191,217,164, 59, 35,245, 97, 55, 73,184,113,128,242, 15,221,145,219, 83,214,154, 80,230,132, 97,
-161, 78, 28, 84,146, 98,247,232,187, 36,201, 47, 74,152,237, 75, 74, 61,192, 30,155,157, 87,217,205,131,213, 17, 95, 25, 33,217,
-118, 61,232,206, 94, 54,166, 84, 27,253,224,165, 69, 58,138,232, 81,203,152,244, 40,153,113,146,238,153,140,122, 84,122,233,143,
- 50,150, 82, 80,162, 5, 64,246,211, 82, 81,234,105, 66, 76,235,177,225,159,178,228,183,122, 56,117,137, 41,243, 1, 20,248,106,
-230, 62,178, 16,232, 87, 63,176,143, 4, 65, 55,210, 84, 68, 68, 66,214, 71,190,180,210,255, 0,190,166,229,138, 95,246,244, 79,
-101,172,250, 63,178,184,219,114, 21,218, 0,220,215,183, 66,207,215, 23, 74, 90, 21, 61,126,158,131,106, 23, 97,244,181,133, 48,
-132,173,222,194,176, 41,251, 58, 22,239, 87,223, 62,234,104,240, 85,199,178,155,177,240, 78, 14,196, 5,179,242, 10, 15,118,130,
- 62,165,190, 71,169, 82,142, 26,176, 80,253,255, 0,131,177, 39,138,155,107,177, 70,190, 20,209,212,122,142,224, 58,149,201,113,
- 85,174,108,123,140, 48,203, 60,214, 94,121, 40,238,109, 85,165, 7,134,185,127, 59,117,145,103, 41, 85,133, 24,166,255, 0,249,
-231, 24,143,139,255, 0, 36,136,148, 36, 4,211,106,127, 86,132,197,228, 50, 42,147,185, 86,181,129, 16,150,203,107, 23,114, 83,
-206, 58, 83,222,119, 59, 13, 79,127, 33,117,146,212,148, 37,148, 70, 69,215,155, 22, 65,139,194,113,212, 60,180, 0, 9, 3,166,
-133,148,238, 62, 43,181,194, 33,122,147,200,216,131, 73, 92,112,180, 21, 2, 54,212,126, 77,199, 93, 84,164, 68, 44,255, 0,205,
-172, 78,217, 2,164,160,170,167, 92, 56,215, 75,197, 51,116, 86,211,234, 7, 20, 54,210,147,217,183,187, 81,127,105,187,218,151,
-154, 20, 36,223, 81,184,172,100,149, 36,162,190, 27,116,209,116,224, 93,211, 85,207, 60, 46,203, 79,170,108, 94, 60, 85, 7, 59,
- 8,233, 77,171, 95, 30,186,101,220, 85,164,247,117,223, 60, 45, 42,245, 77,141, 42,226,139,133, 19,228, 33, 11,108,138,127,125,
- 73, 61,127,234,232,232,113, 55,249, 18, 26,254,104,253,146, 78,253, 94,170,179,195, 72, 6,158,218,110,124,117,246,209, 81, 59,
-169, 38,217,238, 9,237, 27,117,211, 10, 97, 64,188,237,115,106,219,139, 59,230,124,173,168,246, 84,120,119, 10, 87, 81,207,162,
-150,145,170,167,151,155,131,235,188,127, 54, 32,144,151, 42,170, 84,212,131,191, 79,110,161,145,112,173, 41, 38, 37, 49,113,251,
-208, 47, 71, 92, 4,158,213,128,163,253, 26,165,186, 58,173, 13, 18,209, 50,162,227,234,157, 1,181,169, 41,113, 20,238, 80, 87,
- 81,240,208, 83, 70,213, 6, 42, 18,255, 0,135, 74,242, 92,144,193,162,125,149,240, 7,166,161, 18,100,121,131,141, 22,139, 93,
-142,207,115,130,148, 56,241, 68,132,124,142,160,147, 90,251,244, 93,118, 48, 85, 54,210, 36, 81, 21,171, 29,197,173,113, 86,103,
-176,135,153,161,237, 89, 21, 32,233,242,184,158,236,162, 24,193,250, 40,204, 30, 84,108,143, 48, 54,216, 49,233,107,136,176, 11,
-130,137, 4, 16, 73, 71,198,154,206,122,155, 51,201,163,104, 58,200,173,127,165, 56,243,125,219,200,104,197,120,231,156,114,215,
- 22,222,221,210, 3, 10, 15,178,160,132, 52,186, 14,229,118,132,164, 30,149, 27,107, 31,195,230, 74,171, 61,235,103,204,226,239,
-130, 70, 33,198,224,221, 12, 91,129,237,170,255, 0,116, 5,105, 74,212,159,199, 94,211,138,124,218,196,188, 66,241,219,199,151,
-105, 9,199,199, 23, 20, 89,224,139,127,146,137, 17, 94,108, 60,144,175,104,169,247,251,117,203, 49, 65, 8,111, 52,186,143,191,
-112, 78, 17,158,151,174,147,210,168,202, 43,238, 91,141,130, 18, 74,122, 19, 74,215,115,176,160,213, 78, 94, 3,244, 71, 99,231,
-108, 40, 70,237,193,183,236,109,247, 17, 18, 42,213, 25, 41,243,126,100,208,249,116,234, 40, 53,154,191, 6, 65,213,253, 28,132,
- 37,221, 65,206,195, 50, 15, 40,159, 33,125,200, 71,112, 80, 30, 21,234, 52, 20,106,148,123, 35,191, 81, 3,221, 0,222,151,121,
-179, 72,112, 75, 74,140,122,238, 20, 8, 63,133,116,101, 37,250,166,204,143, 21,170, 61,240,196, 80,121, 10,253,209, 53, 30,205,
- 62,218, 87, 32, 81,166, 17,157, 52,219,200,101,107, 20,173, 64, 38,131, 65,202,150, 82, 30,137,139, 23, 34,135, 50,223,231,165,
-127, 34, 85,218,177, 93,255, 0, 26,104,107, 43, 42, 56, 72,130,135,114,104, 22,231,222,251,230, 82, 23,223, 74, 26,212,237,161,
- 76, 76, 85,132, 38,235,205,157,200, 13, 22,252,134,211,247,201, 36, 36,162,130,160,251, 70,135,176,144,167, 5, 78, 75,144,220,
- 24,230, 75,206, 3, 49, 66,170, 10,167,202, 61,131, 67, 64, 25, 39,202, 76, 16,221,218,230,219,203, 11, 97,212, 87,167,205,185,
-252, 14,140,133,106, 51, 39, 90,227,186, 90,148,218,221, 89,117,193, 94,222,195, 84,138,141, 50, 65, 56, 35,188, 69, 5,246, 2,
-212, 62,100,141,148,119,167,245,234, 34,185, 37,201,145, 90,214, 27,113,107, 61,205,174,187,245,215, 68,181, 11,161, 75,122,107,
-189,217,241,233, 55,129,112, 83,168,147,220,223,148, 25,237, 5, 67,126,165, 64,232,222,168, 92,130,123, 38, 54, 65,200, 10,155,
- 9, 80, 44,209, 66, 91, 87,212,228,169, 14, 40,159,192, 37, 63,211,167, 0, 80,168, 81, 46,101, 82,159, 40, 83,136, 75, 7,246,
- 99, 5,214,159, 26, 87, 75,106, 78,186,155,179,169,116,251,134, 22,234,129,175,105, 82,205, 79,188, 0, 53, 44, 98,162,148,151,
-217,182,121,146,146, 89, 75, 9, 73,166,200,168, 66, 64,255, 0, 75,199,244,157, 17, 92, 93, 65,100,208,245,207, 23,131, 31,247,
-175, 59, 29, 47, 29,138, 27, 74,157, 35, 69, 70, 40, 25,205,117, 98,152, 11, 55,105, 73,106,133,212, 43,197,125,173,129, 95, 96,
- 81,212, 87, 94, 97, 18, 85,110, 68,137, 78,126, 50,244,183, 2,248,240,121,108,249,205,117, 33, 43, 9, 34,180,246, 29, 98,185,
- 78,115, 99,234, 85, 30,101,102, 71,170,126,241, 63,165,110, 60,130,255, 0,251, 99, 97, 47,132,108,135, 74,129,168, 62, 61,212,
-215,155,114, 92,197,179, 5, 84, 71, 25,142,165, 52,109,188,111,199,118,135, 85, 20,148, 34, 50,104, 64,238, 6,148, 7,195, 89,
-211,117,196,119, 76, 56,145, 7,178,159,196,239,248, 46, 29,115, 10,181,184,148, 41, 61, 64,216, 29, 15, 58,238,153,232,186, 41,
-136,234,167, 25,245, 59, 9,171,154,216, 15, 39,237,210,162,154, 14,148,209, 63,161,185,148,130,209, 14,235,146,227,234,110, 3,
-238,126,249,240, 64,173, 7,135,179, 81,199,140,182,122, 21,207,212,133, 13, 55,213, 93,186, 29,192, 52, 37, 80, 19,208, 18, 7,
- 77, 19,253,138,194, 58, 46,126,160, 33,139,199,170, 91, 28,235,129, 50, 86, 22,104,119, 89,174,139,143, 9,104, 10, 41, 92, 20,
- 21,223,212,230, 62,150, 23,220, 16,170, 13,170, 43,253, 90,146,190, 14,195,212, 40, 77,160,161,249, 94,169,109,162, 26,148,130,
- 0,240, 63,134,141,143, 5, 99, 46,111, 11,237,167,213,188, 64,180,165,106, 78,221, 40, 52,211,233,217, 29, 89,119,205, 11,214,
- 73,234,174, 43,239,165,226, 82, 80, 41, 67,167, 87,233,201, 16,203,190,123,174,248,190,180, 34,196,183,165, 45, 43,113,176,166,
-162,135,165,201,150,170, 88, 94,203, 74, 61, 97, 25, 79,133, 41,202, 31,101,116,203,125, 48, 95, 68,191, 84,181,221,125, 88,204,
- 84,127,226,213,177,225, 95,209,169, 33,233,178, 7, 69, 25,202, 80,243,189, 92, 92, 18,202, 90, 75,221,124, 43,162,106,244,239,
-177,115,245, 42, 22,127,170, 11,170,143,205, 32,246,254, 58, 58, 62,159, 3,176, 92,243,201, 92,227,212,237,214, 51, 74, 89,144,
- 66, 15,188,233,227,129, 30, 1, 52,218, 87, 44, 63, 83, 19,228, 72, 95,115,199,126,134,191,243,234, 95,236, 67,192, 38,121,133,
- 69, 92,121,230,238, 37, 40,165,227, 66, 77, 62, 99,211,175,183, 83, 87,196, 15, 0,185,188,174, 84,122,138,184, 9, 34, 49,124,
-249,148,233, 83,162,191,179, 3,217, 47, 48,174, 27,135, 62,220, 24,148,224,243, 78,251,154,147,167, 71,134, 10, 57,204,149, 5,
-114,230,235,171, 93,207, 33,229, 14,227,237, 35, 69,215,196, 4,205,197, 13, 69,230,155,196,171,239,207, 33, 93,149, 59, 84,251,
- 14,172, 79, 23, 29,157, 2, 82,145,101, 35,144,114,228,210,218, 26, 75,164,171,161, 21, 58,131,251,103,177, 68,234, 54, 71, 44,
-207, 17,139, 94,105, 7,217, 83,169,198, 6,157, 18,117, 5, 59,148,102,149, 4, 45,194, 15,227,237,211, 99,132,221,146, 95, 37,
-114,108,214,210,221, 29, 59,211,196,238,117, 49,195, 29,194,116,122, 41, 36,103,210,141,181,211,231, 42,129,109, 39,234, 62, 41,
- 89,254,173,118, 56,145,217, 34,221,199,217, 36,228,215,138,154,208, 83,254,141,125, 20,138, 10, 77,132, 0,200,237, 27,138,141,
- 70, 87, 9,116,159,245, 69, 41,244,216,254,221,160, 84,154,130,161,182,233,161, 4,126,130, 53, 21,146,100,110, 44,119, 73,146,
- 31, 17,194, 69,227, 38, 92,103,246,138,241, 11,103,216,118,169,175,191, 67,202, 90, 43, 97, 83, 72, 39, 77,143,140,108,176, 45,
-201,148,225, 79,156,210,104, 19,211,166,250,169,185,221, 93, 85, 32, 2,159,198,110, 54,119,109,253,140, 1,230,182,162,210,147,
-226, 8,212, 6,167, 79,243, 20, 78, 73, 32,183, 37,214, 66, 63,217,192,239,168,246,157, 55,203, 8,138,239,144, 75, 75,244,207,
-228,247,101, 78, 69, 75, 75, 31, 58, 65,216,147,167, 8,178, 97,212,234,186,174, 57,154,238, 86,175, 38, 17, 62,106,146,149, 40,
-215,217,176,215, 20,130, 13,168, 68,188, 67,104,159,100,199,230,101,215, 7, 16,208,113,192,166,146,242,199, 98,205,119,249,104,
- 20, 84, 64,232, 14,188,223,158,201,253, 69,219, 71, 64,189, 55,129,198,253, 54, 48,126,167, 84, 37,206, 60,145, 34,122, 11,107,
- 90, 21, 77,144,166,199,203, 83, 90,245, 59,211, 80, 96, 98, 52,130,239, 37,151,162, 88,231,137,145, 10,237, 13,231,211,216,151,
- 24,109,100,157,168,162, 2,142,221, 53,235,220,100,255, 0,164, 2,242,190, 74, 35,121, 33, 28,113, 78, 64, 39,195, 85,165,197,
- 82, 93, 82,160,229,119, 74, 85,176, 31,171, 86,114,146,168,154, 39,179, 95, 95,199,110, 98, 4,183, 20,187,119,153,221,243, 26,
-213, 73, 53, 2,135,222,117, 21,145,220, 23, 98,155,248,252, 22,114, 86,126,229,202, 41,197,160, 46,139,216, 81, 71,100,144,122,
- 13,245, 89,101, 32,167, 11, 76, 78,139,237,219, 10,182,161,133,180,182, 16, 93, 72, 9,170, 82, 6,222,237, 13,250,120, 21, 44,
- 50,164,130,179, 30, 17,197,242, 11,122,162,205,134,133, 69,112,211,189, 35,112,170,117, 7,192,234, 63,209, 65, 21, 28,217, 14,
-233, 21,202,254,146, 46,246,104,206, 78,194,201,118, 58, 77, 87, 29, 71,113,237,237, 39, 92, 56,177, 40,218,121, 63, 20,164, 86,
- 45,155,227,179, 75, 19, 97, 60, 10, 65, 41, 82, 1, 63, 2, 41,239,208, 23, 98, 50,184,167, 50, 4, 34, 12,106,245,150, 53, 41,
- 49, 21, 25,245, 72,112, 2, 91, 40, 87,204,147,208,141, 1, 44, 82, 74,155,206,135,138,102, 98,252, 29,204,153,107, 75,147, 18,
-218,235, 86,180,167,204,239,120, 20,130, 41,212, 29, 69, 44, 55, 81,203,144,174, 5,112, 88,227,155, 5,237,248, 55, 99,223, 58,
- 50,148,217, 59,124,180, 30, 53,241,213, 54, 93, 70, 58, 43, 92,123,133,129,215, 54, 65,124, 92,185,105, 76, 50, 75,160,157,136,
-168,167, 74, 84,106, 26,170, 97,170,124,230,229, 67,162, 74,100, 56,176,160, 18,207, 66,133,246,133,126,170,104,128, 23, 29,117,
- 91,154, 68,101,133, 37, 68,173, 84, 8, 74,212, 77, 1, 62, 1, 38,154,138,197, 52, 74,106, 96, 17,123, 45,201,117,208,123,169,
-189,107, 67,160,137, 73,220,174,188,162,204,195,209, 22,184,253, 41, 83,191,232,211, 98,238,164,136, 75,166,111, 73,198, 46,174,
- 18,165,165,167, 72, 31,187, 35,195,221,227,171, 74, 67,135, 64,101,196,147,162, 47,178,103, 54,231,208, 9,121, 46, 1,244,132,
- 45, 45,171,244, 16, 43,169,180, 65,106,166, 97,229,253,206, 15,183, 87,106,188, 66,202,129,166,187,181,119,106,150, 99, 58,146,
-150,203,110,170, 64, 72,216, 42, 42,145, 79,255, 0, 72,148,159,215,174,196, 21, 28,152, 45, 39, 33,179,200, 37, 82,154,125,215,
- 15, 82,251,206, 33, 95,209, 79,215,162,171,139, 33, 45,146,228, 69,203, 31, 91,161, 44,246,180,175,253,119,114,255, 0,167, 69,
-198, 58, 32,103, 36, 65,106,201,157,132,199,251, 58,210,182,133, 5, 90,162, 71,244,106,179, 54, 46, 52, 85,121, 55, 48, 71,248,
- 39, 52,220,113,214, 59,218,125, 72,174,253,165, 65, 95,169, 90,200,103,113,226,222,171, 61,145,148, 65, 68,182,239, 85,247,164,
-203, 82, 85, 35,192,128,123,143,183,223,170, 27, 56, 40, 73, 86,207, 36,186,214,231,169,139,180,153, 75,238,125, 68, 43,251,170,
-219, 74, 28, 4, 34,135, 57, 18, 80,247, 15, 80,183, 86,164,168,162, 73,238,240, 5, 90,152,112,144, 76,149,164,173,118,190,110,
-184,200,148, 86,235,231,184,212,238,116,255, 0,237,177,142,137,187,202,102, 99,188, 53,234,211,144,226, 53,117,195,240,139,204,
-155, 75,163,189,153, 46,196,114, 59, 46,164,254,210, 23, 39,203, 74,135,188, 19,171,188, 63, 71,101,220, 55, 70,169, 55,139, 55,
-218,186,229, 65,242, 87, 0,250,182,193, 16,171,254, 87,131,222,152,179,178, 60,199,229, 51, 17,201, 44,180,154,110,167, 23, 23,
-204, 74, 71,188,144, 52, 85,254,147,203,162, 47, 58,164, 7,185,254,199, 73,202, 72,222,249, 98, 92, 73, 69,101,210, 21,211,114,
-116, 4,112,163,224,161, 51, 37, 71,200,229, 57, 47, 52, 86, 94, 59,138,245, 58,150, 56, 17, 11,155,138,228, 78,127, 54, 84, 21,
- 4, 58,123, 65,167, 93,245, 44,112,226,159, 18,235,229,163, 58,146,185, 65, 5,195,219,174, 79, 16, 5,210, 89, 74,228, 89,163,
-233,133, 68,184,106, 18, 55,175,191, 92,142, 56, 29,151, 4,151, 5,139, 61, 89,102,143,184, 73,235,191,232,211, 33,142, 4,157,
- 60, 73,150,217, 28,132,235, 83, 66, 80,186, 15,249,123,244,165,138, 10,238,229, 39,254,127,113,219,121, 43,112,212,235,135, 20,
- 14,203,142, 20, 43,249,251,134,114, 91,239, 61,180, 39, 93,134, 48,126,137,166, 76,186,167,102,202, 45,146,149,154,138,123, 61,
-154,150, 84,174,121,139,130,249,158, 58,213,184, 56, 28, 52,247,107,163, 28, 36,108, 80,176,185, 53,214, 22, 28, 46,117, 52, 53,
- 58,146, 56,192,174,110, 87,179,211,151,168,142, 64,226, 31, 68, 56,214, 89,198,179, 90,182,222,110,217, 29,250, 36,249, 95,103,
- 10, 67,142,183, 30, 60, 69,182,130,101, 52,230,192,172,244,215,165,250,100,156,124, 16, 97,161, 51, 61,135,177, 11,153,145, 42,
-192,218, 89,221,114, 92,253, 82,219,121, 42,231,246,126,160, 48,203, 6,101, 5,193,218,236,213, 64,106,213,119, 66, 79, 95, 34,
-225,108, 13, 45, 7,226,149, 15,118,172,111,174,172,144,215, 87, 25,123, 89,143,214, 16, 48,228,172, 7, 86, 33, 87,175, 94,120,
- 38, 41,233,255, 0,212,108,206, 59,192, 95,148,188, 80,196,182, 93,163, 55,114, 91,110,200,100, 92,160,183, 51,201, 83,141,165,
- 33, 65, 29,244, 6,149,167, 90,245,214, 15,155,226,107,196,200, 53,193,246,176, 58,251, 67,171, 89, 77, 41,114, 92,149,109, 91,
-210,180, 40,247, 80, 43, 85,130,132,223, 48,161,168, 57, 90,152,154,135,150,173,201,254,157, 73,179, 70, 92,243, 10,237,184,102,
-125,247,150,154,239, 37,178, 7,245,235,158, 90,230,229,170,241,147,184,137,222, 90, 85,242,210,186,156, 84, 54,167,110, 81,183,
- 76,141,125,161,100,251, 63,167, 81, 66,160, 74, 78,188, 72,201,214, 90,106,170,222,163,245,126, 58,147,201, 5, 45,236,165,218,
-191,200,254, 65, 34, 71,118,222,124,113,215,253, 7,117, 28, 96, 54,145,237, 31,122,239,152, 85,180,183, 35,185, 65, 71,167,252,
-218,246,224, 85,140,148,162, 19,216,197,105,255, 0, 42,106, 39,213,112,104,146, 94,163, 27, 55, 58, 68,104, 26,164,215,224, 63,
-233, 39, 67,229,207,104, 86,220,101, 59,139,160, 72,182,135, 44,112,153,184,195,162,221, 66,144,176,125,157,187,158,186,173,141,
-234,250,116, 51, 21, 50,142, 72, 76,247,213, 17,135, 63,116,237, 20, 19,208,165, 95,181, 77, 41,128,117, 92,220,221,148,149,150,
-217, 38,219, 47,184, 31,246,119,143,152, 23,237,246, 87, 67,146,137, 48, 93,153, 69,193,132, 52, 2, 84, 10,200,165, 61,244,220,
-105,132, 39, 70, 76,148, 89,251,210,144,165, 60,216,253,193,219,127, 10,157,118, 39,178,124,220,173, 60,123, 22, 29,238,241, 10,
- 5,214, 80,137, 1, 75, 8,121,194,149, 40,246,251, 40,157,247,208, 28,141,166,186,228, 98,173, 56,170, 68,236,136, 62, 41,179,
-158,205,176,217,236,102,221, 98, 79,123, 37, 75, 45,187,219,242, 37, 7,193, 3,127,199,115,175, 55, 13, 41,107,215,186,244,203,
-167,180,105,211,178, 68,231, 11,106, 98, 33, 50,137, 1, 42,220,187,182,205,130,230,195,223, 80, 42,117,121,135, 88,208,172,174,
-109,230, 69, 70,243,141,242, 28,166,225, 59, 22,158, 90, 80,154,169, 62,196,166,159,213,175, 66,227,127, 32, 88,156,242,242, 92,
-252, 63,151,180,204,149,151, 77, 22,161, 68, 36,248, 83,122,159,195, 86, 22, 21, 91, 32,143, 35, 93, 23,122,154,244,132, 43,181,
-182, 72, 73, 88,160,175,118,230,131, 78,140,180, 76, 41,249,196,146, 97,199,180,178,167, 28, 72, 73, 41, 74,187,205, 15,113, 21,
- 29, 1, 38,157,116, 28,211, 89,209,189,202, 12,119,202,159,138, 59,233, 90, 26,236, 71, 83, 79,195, 64,202, 69, 59,106,242,188,
- 97, 78,160,180,148,246,165, 64, 58, 1,216, 18, 9,166,162,222,124, 83,244, 10, 26,239,134,201,117,144,182,104,164,187,216,133,
- 10,117,222,135,109,119,122,231, 85, 7, 11,138, 45,151, 5,169,249,241,208, 28, 66,188,186,173, 34,160,171,196,126, 58,100,164,
-166, 22,144,167, 99, 96, 24,165,185, 40, 42,134,209,184, 52,190,244, 41, 40, 21, 0, 26,154, 26,123,116, 44,228,201,194, 82,145,
-234,166,238,217,165,175, 24,199, 31,156,225,110, 53,154, 59, 46, 56,229,123, 82,148,132, 32,172,149, 19,211, 97,166,143,155, 64,
-144,134,186,149,249,189,120,245, 13,111,228, 44,214,229,121,198,153, 83, 54,167,222,243, 17, 93,202,135,121,238,165, 60, 8,213,
-102, 94, 35, 0,235, 89,133,112, 17, 96,166, 88,186, 58,224, 75,204, 56,164,164,213, 93,201, 53, 29,194,133, 39,106,159, 15,102,
-128, 48, 1, 30, 38,232,134, 34,175, 19, 91, 69,197, 40, 97,200,160,246,185,230, 26,168, 30,149, 85, 0, 35,244,104, 57,150,209,
- 17, 29, 87,108, 59, 92,215, 38, 9, 16,144,148,124,213, 1, 53,167,235,223, 80,206, 72,128, 19,115, 21,111,236,237, 13, 55, 51,
-103, 8, 73,238, 72, 52,238,234, 63, 94,135,148, 84, 66, 90,174,123,164,180, 41, 78,176,181, 83,184,154,117,223, 80,157, 20,209,
- 42,191,243,158, 84,198, 43,144, 53, 18, 65, 1,197,149, 43,199,161, 53, 7,241,213,206, 5, 70,192, 80,153,179, 17,101,201,138,
-242, 28, 55, 59, 90,109, 38,163,114,133, 84,165, 94,241,184,209, 51,173,144, 98,110,143, 44,185,170, 87,209,191, 49, 7,193,205,
-169,240, 53,212, 76,201,132,169,216,217,177,105, 7,237,138,154, 80,220,164,209, 67,240,211,225, 32, 20, 83,129, 94,255, 0,243,
- 14, 83,159, 44,135, 2,193,232, 40, 41,250,247,212,254,104, 64, 92,195,170,234, 70, 83, 21,212,133, 44,128,122,143,155, 93, 55,
-184, 84,153, 25, 49,136, 58,175, 74,203,156, 69, 35, 38,158, 90,136,170,146,160, 70,231,109,180, 37,146,220, 22,119, 47, 49,131,
-187,173,159,231, 82,196,160,200, 87,128,233,236, 26, 18, 85, 58,166,178,253,234, 54, 71, 32, 60,196,229,148,168,246,212,232, 99,
-142,134,149,218,167, 31,162, 62, 34, 87,170,238, 74,186, 98, 51,114, 22,241,203, 29,150,207, 59, 41,185,220, 29,140,228,215,126,
-206,222,166,195,200, 97,134,148,130,183, 59, 92,238, 0,168, 10, 3,227, 64,109, 56,142, 24,102,218, 96, 78,214, 4,146,207,211,
-192, 38,239,234, 83,201, 56,103,160, 12, 70, 64,138,214, 53,149,102,175, 39,103, 39, 94,175,113,236,200, 82,188, 75,108, 91, 88,
-117, 73, 79,176, 41,100,251,117,171,175,211,216, 16,235, 25, 79,222, 91,236, 8, 9,114,113, 7, 72,147,240, 71, 10,203,189, 52,
-250,103,186,169,207, 72,150,198,238, 89, 61,203,186,232,230, 89,147,176, 39, 74,180, 55, 33,101,198,173,182,246,101,165, 77,182,
- 88, 69, 18,183,148, 22,165,154,239, 74,104,252,126, 55, 23, 10, 68,211, 16,100,117,115,171,123, 3,248,120,245, 92,191,145,237,
- 95,214,130,178,255, 0, 80, 92,181,154, 79, 50,114,172,150,229, 57,229, 26,132,191, 54, 66,144,157,235, 68,163,187,177, 35,220,
- 0, 26, 38, 86, 89, 61, 76,137, 85,211,186, 82,234, 73, 89,143,115,215, 47,225, 19, 91,153,136,228,215, 40, 14,141,200,141, 49,
-244,161, 91,214,139, 71,119, 98,135,185, 64,141, 40, 93, 56, 29, 36,126,180,200,221, 56,244, 36, 46,188,226, 47, 14,250,222,112,
- 97, 60,198,196, 60, 75,212, 12,194, 26,176,114, 85,173,134,226, 71,151, 53,123, 55, 30,253, 21,128,150,150,135, 85, 68,253,194,
- 18, 22,141,171, 84,214,162,230,113,116,231,143,152, 8,217,218, 67, 71,255, 0, 80,239,239,234,172,241,243,183,150,159,215,248,
-170, 91,203, 92,125,200,188, 27,200, 55,142, 34,228,216,102,221,157, 88,158, 48,167,197, 81, 10, 79,112, 1, 73,113,181,141,150,
-218,208, 66,208,161,178,146, 65,214, 7, 39, 6,116, 88, 97, 48,196, 35, 78,133,148, 13,154,244,248,138,234, 84,119,235,168, 99,
- 6,236,150,245,207,111,201,221, 98, 82,202,149, 78,223, 29, 63,202,117,195, 50, 84,140, 28,197, 87, 32,235,107, 85, 74, 65,167,
-191, 72,211,162, 66, 74, 53,140,146, 68,121,165,128,173,181, 16,199,213, 59,122,219,113,201,221,110,103, 96, 59,138,106, 95, 41,
-115,204, 93,145,114,167, 84,132,178, 86, 55,254,205, 50, 84,130,151,152,180, 63,126, 91, 87, 0,178,118, 32,141,114, 52, 50,225,
-147,174,135,114, 87, 29, 74,251, 78,219, 17, 77, 62, 85, 2,184,235, 68,187,148,169,182,146,132,110,190,234,244,211, 12, 64, 73,
-208,219,211,164,178,234, 91, 61,123,169,211, 79,136, 9,110, 87,155,137,166,186,255, 0,229,205,137,187,227, 31, 55,200, 35, 31,
-119,125,170, 3,212,253,122,222,240, 99,255, 0,100, 63,214,126,192,131,228,127, 36,125,231,238, 67,242, 93, 83,114, 82,237,104,
-117, 97,181, 84,173, 63,154, 98, 26,123,215,246, 77,103,116,209,184,118,236,106, 58, 71,176, 12,110, 26,255, 0,248,218,202,122,
-156,255, 0,239, 39,238,143,253, 33,104,172, 44, 91,216, 21,107,206,101, 33, 11, 48, 88, 53, 30, 20,213, 16, 27,147, 65,116, 53,
- 49,153,136,105,178,132,253, 42, 63,209, 77, 53,130,234,210,202,166,187,119,105,100,124,160,117,252,117,205, 18, 91,174, 83,221,
-114,230,166, 79, 84,166,190,237, 60, 40,247, 21,229,224,235,144, 20,225,240, 36, 13, 62, 17, 98,150,229, 13,121,186, 59, 29, 45,
-132,253, 53, 79,244,141, 58, 81,100,224, 81,171, 82,145,254, 72,144, 63,245,145,255, 0,253, 91,186, 26, 35,229, 62,241,247,167,
-110, 12,174,133,185,191,149, 43,241,174,195, 94,208, 85,183, 85, 38,165,165, 17,212, 78,223, 45,119,247,106, 53,205,174,147,185,
-188,232,135, 35, 40,154, 2,154, 37, 73, 6,149,241,213, 94,109,163,162,212,240,244,176,116, 23,148, 34, 67,109,145,111, 65, 84,
- 52,158,213,208,109, 66,116, 4,100, 2,183,182, 36,244, 80,118, 60, 53,212,223,152,148,208, 81,132,181, 30,238,191, 47,143,245,
-234, 73, 76, 50, 85,227,146,156, 50,248,207, 37,187, 90, 91, 85,141, 93,173,164, 14,239,104,248, 13, 87, 74,237, 85,164,104, 12,
-162,209,197,159,109, 17,106,190, 56,165, 62,147, 84,212, 43,168,247,145,174,121,134, 90,133,207,211,196,117, 41,107,200, 24,225,
- 82,220,138,210, 79,151,184, 39,111,110,157,230, 50,233,166, 50,209, 15, 97, 86, 86,155,186, 38, 93,220, 4, 67,136, 66,128,119,
-185, 40,121,192, 62, 84,119, 80,129, 94,187,234,167,151,201, 49,169,188, 85,215, 17,137, 27, 39,184,246, 82,124,149,155,207, 82,
- 18,251, 74, 66, 30,112,146,219,105,237, 66, 19,181,124, 0,168,160,219, 89, 58,107, 6, 78,175,114,236, 96,201, 41,204,121, 98,
-109, 86,214,231, 72, 82, 89, 83,238, 0,160,138,143,217,218,128,239,208,215, 90, 60, 12,105, 92, 64,136, 89,124,252,184,211, 19,
- 41, 20, 29,153,103,168,157,142,194,148, 21, 82,176, 66,127,213, 4,141,235,173,214, 61, 70,176,222, 11, 35, 44,161, 96,127, 21,
- 23,135,231, 38, 61,200, 56,133,246, 38,128, 26,159, 3,181, 52, 84,162,225, 70,224,166,166, 7,155, 23,238,148,243, 9,239,162,
-146, 43,177,246,127, 70,185,208, 38,202, 58,167, 87, 27,102,111, 25, 76,181, 49,125,191, 57, 33, 39,160, 38,167,161,208, 54, 73,
-211, 89, 88,108, 42,236,221,202, 19,108, 3, 87, 73, 77, 69,107,208, 19, 77,253,131,109, 1, 96, 41,228,163, 52,199,101,235, 65,
-148,190,163,247,105,248, 86,191,171, 80, 38,247, 95,110, 54,198, 88,158,133, 42,157,170,109, 43, 53,254,240, 4,126,186,105,187,
-147, 98, 29,112,200,140,196,123,131,135,106, 45, 8, 88, 73,232,122,106, 41, 77, 78,202, 22,114,153, 74,202,220,249, 82,138,144,
-161,237,235,168,183, 39,199, 69, 73, 63, 54, 14,125,190,224,252, 86,230, 9,143,189,228,205,191,200, 69,177,111, 48,174,210, 35,
-208,186,240,249,125,169, 72, 73,247, 43, 86, 92,117, 34, 82,220,122, 4,203, 38, 2,172,190,157, 96,174, 14, 60,219,138, 79,152,
-232, 64,165,126,170,145, 94,224,127, 78,128,229, 39,186, 90, 45, 15, 31, 6,138,117,225,150, 38, 95,105, 41,184,124,174,164, 20,
-169, 7,180,149, 5, 80,213, 53, 29, 83, 77,103,109,158,170,234, 17, 76, 43, 93,145,113,227, 6, 92, 53, 66,128, 32,138,169, 52,
- 29, 8, 87,183,218, 53, 89,145, 45, 81,208,138,153,199, 34, 61, 34,226, 24,108, 39,237,209,243, 42,160,131,215,174,160,119, 78,
- 50, 96,142, 31,113,168,141, 54,201, 31,184,216, 40,143, 1, 77,181, 38,224,202, 33,213, 65,228,139,104,160,121, 74, 5, 99,233,
- 87,180,123, 15,191, 67, 72,169,226,169,135,172,156,174, 64,229,246,161,180,225,238,141, 21, 9,113, 38,180, 61,206, 41, 84,214,
-203,130,199, 30, 81,246,172,223, 49,148, 33, 96,143,130, 22,196,115,217, 17, 66, 82,149, 31, 47,196, 10,237,248, 29, 29,102, 26,
- 14,172,224,155, 56,111, 32,174,228,216, 73, 42,165, 55, 45,131,250,193,223, 85, 87, 99,237, 37, 19, 44,232, 71,170, 62,176, 72,
-149,114,254, 26,131,172,159, 96, 33, 67,244,104, 25, 16, 59,170,236,158, 90, 0,117, 83, 83, 99,191, 29, 45,209,186,111, 79,126,
-212,211, 99,104,117,152,205,230,193, 44, 10,241,116,101,254,196,169,166,232,125,219,107,179,176, 44,230, 70,116,165,213, 69,253,
-220,198,101, 37,194, 8,105, 30,255, 0,102,152,100, 14,136, 35,113,146,216,213,241,114,111,193,176,163, 74, 86,149,233,169,160,
- 2,230,227,224,180, 73,113,231,229,186, 16,106, 83, 93,189,154,138,205, 20,101, 89,239,201,221,251,154, 61,102,216,113,231,170,
- 45, 25, 52, 27,254, 51, 40,158,157,179,108,114, 67,105, 63,254, 89, 40,213,199,166,173, 3, 50, 1,255, 0, 51,143,172, 21, 32,
-139,134,241, 8,214, 68, 89,168,144, 82,226, 8, 80,173, 65, 27,131,173, 99,133,154, 43,227,107,145, 24,133, 57, 81, 93,183,210,
- 12,144, 92,178,165, 60, 36, 36,138,234, 64, 66, 69, 78,194,182, 74,158,202, 22,216,169,166,160,148,245, 72, 68,168,187,205,142,
-112,151,216,161, 67,167,239, 11,168,155,213,183, 31,202,245, 25,233, 78,211,206,114, 18, 94,230, 30, 53,145, 23, 18,200,230,125,
- 78,207,199,110, 5, 95,203, 36, 62,162,106, 87, 30, 72, 83, 0,210,165, 43, 21, 38,131, 85,126,160,172, 89,142, 47,239, 6, 7,
-220,122, 31,160,233,244,171,156, 75, 13,144,215,168,251, 21,103,227,111, 77, 60,207,202,119,101, 99,124, 91,141,220, 47,215,163,
- 66,182, 45,113, 92,127,203, 74,182, 10,117, 72, 5, 40, 79,250, 75, 32,123,245,144,198,132,242,100,213, 68,200,251, 1, 68,108,
- 39,178, 96, 31,202, 31,215,151,148,247,157,139, 66,143,115, 95,240,237,242,178, 44,109,169,106,219, 96, 26, 92,224,160,125,202,
-161,213,236,125, 63,152,223,147,227, 31,197, 35, 22,255, 0,197, 42, 51,239, 74, 30,165,125, 57,221, 76, 62,109,195,174,152,234,
- 93, 37,184,242,103,198, 80,136,250,147,185, 12,202,111,185,135, 8, 31,221, 89,213,102,102, 53,184,218, 91, 19, 31,120,211,235,
-232,145,129, 29, 80, 35,209,164,162,239,230, 41, 36, 52, 9,169,252, 41,160, 68,129, 77, 58, 40,235,212,215,133,218,137,173, 61,
-199, 83,232,161,114,183,181, 61,241, 61,134,232, 66, 77, 2,191, 19,168,137, 9, 58,145,200, 25,144,135, 27,121,128,106, 83, 65,
- 74,248,157, 55,120, 82,196, 22, 78, 79, 77,158,137,253, 65,250,144,130,237,203,143,236,254, 94, 41, 24,132,220,114, 75,195,173,
-219,236,240,192,161, 37,233,114, 8, 65, 32, 16, 74, 81,220,170,126,206,140,194,227,174,205,255, 0,104, 56, 29, 73,208, 15,164,
-255, 0,226,158, 34,126,133, 96, 44,191,150,183, 6,227,205,155,127, 33,115,221,150, 61,240,108,227, 54, 11, 5,218,245, 20, 40,
- 10, 16,153, 77,169,148,168, 87,196, 39, 86,227,210,208,111,154,248,131,236, 4,252, 92, 40,141,213, 14,178,251, 80,214, 85,249,
- 80,100,153, 20,181, 92,253, 57,231,216,231, 34, 45,179,220,108, 81,157, 93,158,246,180,208,146,166,161, 92,251, 82,176, 0, 53,
- 1,202,251, 1,208,247,122, 90,232,135,166,113,179,217,208,253, 71,241, 79,132,163, 63,203, 32, 83, 19, 16,227, 12,191, 6,244,
- 28, 48,172,194,215, 38,211,148,218,249, 34,230,219,246,251,139, 14, 71,125,160,230, 53, 5, 95, 51,110,128,104,105, 80,122, 17,
-211, 87, 92, 0,157,120,102, 54, 3, 25, 11, 8, 99,215,242,132, 47, 34, 62, 65,239,251,146,250,233,106,156,183, 18,203,105,249,
-198,199, 86,219,195, 42,117,231,243, 82,196,175, 82, 63, 49, 60,254,235, 21, 39,237,124,188,117,182,200,246, 39, 22,183,131,250,
-245,138,245, 86, 84, 97,157, 96, 39,252,191,244,133,164,186, 36,201, 87,165,241,102, 77,118,154,169,106,104,148, 1, 94,158,253,
-102,103,200,215,226,153, 24, 21,215, 59,141,103,190,216,140,195, 39,206, 4,237, 79, 96,208,135,146,128,238,158, 98, 87, 12, 94,
- 49,188,135,147,220,193,239, 77, 65, 63,142,144,228, 96,122, 21,205,165,113, 94,248,186,244,197,213, 75,117,163,218,164,212, 80,
-120, 87, 70, 99,231,194, 93,212,123, 10,226, 78, 21,118, 84, 87,162,134,148, 85,220,160,154,141, 17, 60,216,142,233,108, 43,150,
-229,194, 25, 36,216, 44, 62, 91, 82, 84, 84, 58,237,181, 52, 57,229, 33,209,215,124,146, 81,163,124, 59,115, 24,171,214,206,211,
-230,146,202,189,251, 54,224,254,147,168, 35,202, 67, 97, 63,243, 15,176,174,249, 37,149,170,183,160, 20, 2,145,176,233,175,123,
-146,183, 11,101,213,208,204, 53,169, 70,130,135,125,186, 83, 81,153, 50,236, 3,148, 11,121,192,209,117,108, 79, 41, 36, 40,149,
- 36,255, 0,203,241,214,119, 50,207,153,110,248,202, 62, 64, 84,125,175, 14,251, 23,212, 22,216, 92, 69,213, 14, 5, 10,239,255,
- 0, 78,129, 55, 43,145,142, 17, 29,131, 5,177,158,228,249,105, 75,131,230, 0, 83,174,145,181, 75, 26,217, 79,197,200,217,199,
-163, 22,147,187, 72, 29,171, 72,166,223,209,165, 24,137, 40,173,145,143, 69, 25,116,200,177,140,129,240,237,229, 78,177,105,109,
- 42,113,247, 24, 65, 81, 61,160,144,144, 58,110,118,235,183, 93, 65,147,144, 41, 26,106, 81, 24,120, 19,200,151,177, 65, 74,229,
- 30, 33,183,135,224,216, 44,145,213, 21,224,166, 84,237,193, 9,152,227,205,174,135,180,169,117, 66, 85, 81, 74,164, 87,223,170,
- 75,178,108,176,184,209,105, 49,120,168, 71, 66, 18,131,212, 26,163,220,237,173,222,177,150,208,219, 49, 7,122,173,232, 33,176,
- 69, 73, 61,161, 1, 61,170,161,233, 77, 5, 97,156,203, 75, 85, 97, 60, 72, 85, 23,134,137, 46,254, 87, 9, 54,117,222, 46,139,
-173,169,150, 84,226, 93, 81,175, 96, 2,130,165, 85,241, 62,221, 42,177,181,218, 58,149,159,190,242,228,147,162,172,252,155,202,
- 7,144,178,183,100, 7, 74,109, 44,126,234, 43, 85, 52,237, 78,221,219,251,105, 93,122, 71, 19,199,198,138,152,245, 43,204,185,
-158, 74, 87,218,195,242,133, 27, 38,254,251,176, 89,132,149, 31, 33,180,128,145,241,169, 39,195,219,171, 95, 47, 85, 85, 86, 73,
- 1,151,200,211, 92,101,105,125, 36,134, 77, 2,169,237, 7, 78,156, 52, 71, 99,222,100, 81,239, 31,101, 38, 61,210, 51,203,115,
-181, 33, 72, 20, 39,223,161,165,209, 89,196,135, 86, 50,213,117, 68,153, 81,238,209, 20, 60,130, 42,144, 61,160,127,110,170,228,
- 83,228, 52, 86, 15,131,114, 53, 56,174,229,168,168, 55,251,177,254,147,170, 27,129,238, 26, 26,210,225, 68,156,134,226,148, 64,
-143, 9, 39,216,226,205,122, 10,212,126,157, 8, 74, 81,138,227,190,228,198, 77,208, 33,165,126,233,190,214,234, 63,213, 80, 63,
-172,234, 51, 53,216,193,148, 91,153, 11,146, 91, 91,174,158,217, 81,148, 27, 89,246,163,167,245,106, 41, 23, 82,168, 76,207, 57,
-181, 90, 45, 46,201, 31, 61, 59,104, 43,189, 43,165, 16,145, 43,242, 87,215,135, 41, 61,204,126,165,165, 89, 89,116, 47, 22,178,
- 41, 49,227,180,133,172,160,186,224, 11,117,100, 29,187,186, 39,111,102,180, 88,208, 16,169,212, 12,101, 48,140, 56,190,211,223,
- 9, 6, 34, 8,106,141,138, 35,216,158,186,203,231,207, 85,175,194,131, 4,239,192,172, 78, 93, 89, 90,220, 73, 10, 4, 41, 52,
- 78,192,144, 41,250,117,152,190,226,234,226, 17,116,110,220, 69, 89,109, 10,118, 65, 74, 35, 55,243, 58,162, 72, 32,124,116, 6,
-227, 57, 48, 69, 2, 34, 53, 93,184,132,171, 92,248,136,188, 90, 30, 46,135, 13, 21, 90, 20,246,159,134,159,100, 12,116, 41,173,
-187,162, 47,144,195,147, 32, 85, 20, 46, 1, 74,251, 69, 53, 24, 42, 62,136, 86,246, 10, 89, 91,146, 42,142,207,154,135,221,226,
- 53,205,174, 84,241,147, 42,215,204, 28,108,206, 95,157, 78,185, 62,143, 49,215, 92,238, 65,166,232, 77, 2, 64, 7,196, 26,126,
-157,107,168,200,253, 60, 4,125,139,200,189, 65,201, 75,245, 36,130,162, 97,250,114,158,202,209, 50,222,201, 82, 21,186,219, 35,
-112, 61,163,218, 53, 41,230, 3, 42,202,185,137, 38, 71, 25,250,121,184,187, 33, 15, 70, 5, 14,210,165,165,124,124, 53, 75,147,
-203, 13, 83,172,229, 12,149,132,227,110, 13,177,195,169,148,128, 39,148,212,129,181,104, 55,216,108,117,158,191,147, 36,232,170,
- 47,203,147,149,195,149, 98, 86,148, 79,117,132,128, 3,106, 35,111,249,245, 37, 89, 50, 58,160,204,221,110, 24, 53,186, 93,156,
- 75,142,144, 79,109, 77, 61,154,144,100,147, 45, 83, 73,116, 31,113,194,139,176, 93, 84,118,234,237,123, 64, 3,223,169,191, 80,
-196, 58,224,234,160, 44,252, 49,152,185,119, 55, 4,178,163, 24,138,159,118,140,171, 62, 3,170,122,159,199,184,162, 91, 23,119,
- 17,116, 65,236,112,154, 84,104, 12,158, 65,250, 40,213,143,244, 57,107,182,113,159,169,142, 58,187, 55, 68, 47,252,201,105, 97,
- 75,233, 68, 74,150,136,203, 39,254,170,206,167,224,179, 27, 54,146,255, 0,227,143,196,178,158, 7,162,113,242,110, 31, 10,209,
-201, 87,219, 10, 27,237, 48,238, 19,162,118,208,109,228,201, 91,116,253, 90,244,108,153,152,217, 33,224, 74,205,217, 29,178, 35,
-218,160, 39,241,242, 37, 37, 61,137,160,175,245,104,120,229, 16, 83, 81,166, 55,233, 14, 19,184,115, 92,131,202, 57, 21,191, 11,
-194,228,255, 0,128,149,121,243, 23, 38,104, 73,249,151, 26, 35, 0,186,226, 82,105, 85,108, 55,218,186, 34, 89, 85,209, 17,101,
-246, 70,184,158,143,212,251,135, 82,141,199,194,149,161,250, 5,223, 23,211, 53,179, 33,179, 61,117,244,253,153,219, 51,197,193,
- 74,158,149,105,183, 34, 68, 59,176,105, 63, 83,173,194,150, 3,142, 37, 59, 87,178,167,126,154,146,140,156,124,167, 56,246, 70,
-194, 58,129,161,247,177,213, 79, 60, 25, 64, 56,213, 44,111,241, 65, 80, 43, 71,107,128,208,130, 41, 77,245, 30,245, 86,143,120,
- 3, 51,227,124,118,253,124,196,185,117, 14,185,197,121, 53,142,109,170,236,196, 95,227, 45,104, 9,153, 31,202,216,128,239,156,
-200, 74, 20,118, 5, 85, 59,104,154, 5,118,137, 87,111,228,148, 72, 40,188, 43,197, 83,115,209,151,220,207,212,182, 73, 62,214,
-112, 14, 57,132,206, 25,196,172, 18,152,216,246, 61,221, 29,183, 19, 64, 59,229,188,154, 57, 33,197, 0, 59,148,225, 53, 59,211,
- 79,243, 99, 84, 60,186,128,132, 7, 97,247,248,159,122,238, 70, 92,172,246, 15, 4, 2,167, 91, 95,239, 84, 42, 72,175,134,129,
-155,160, 74, 45,227, 94,123,203,112,168, 50,113,107,160, 70, 65,197,211, 19,228, 93, 49, 59,232,251,187, 92,166, 9, 29,201,242,
- 93,238, 13,171, 96, 66,209, 66, 8, 31, 13, 17, 12,130, 35,182, 95, 52, 79, 80,117, 5, 17, 70, 84,171, 58, 29, 60, 18,127,213,
-143,161,247,162,100,216,238, 89,233,110,207, 59, 33,226,238, 67, 82,213,142, 91,225,182,185,147,173,215, 6,205,101,218,164,121,
-125,202, 37,141,212,149,171, 98,222,228,158,210,173,100,121,110, 14,202,109,137,199, 6, 80,179,242,142,164, 30,241, 62,239, 31,
- 15,114,184,113, 96, 18,143, 66,163,143,228,227,206,146, 25, 68,156,179, 46,193,177, 92,166,149,114,193,145,228,241,218,184, 33,
-116,254, 26,145, 21,183,219, 10,247, 23, 52, 84, 61, 51,150, 71,205, 40, 68,248, 25,107,240,113,241, 77, 49, 3,172,128,250, 82,
-223,150, 61, 1,122,137,224, 89,177,238,156,165,142,188,214, 30,239,111,219,228, 86,197,181,112,179,188, 10,187, 80, 83, 54, 25,
-113,144, 84,122, 37, 74, 10,247,106,143,148,192,202,194, 15,100, 8, 30, 35, 81,245,141, 23, 54, 17,175,100,230,244,143,232,127,
- 9,229,123,140,238, 77,229,135,156,141,193,152,139,108,201,188,249, 31, 43,247, 41, 43,222, 61,182, 50,246,162,221, 35,230, 80,
-250, 83,236,168, 58,111, 3,130,115,172,149,150, 22,166,177,243,120,147,218, 35,218,126, 1, 77,184, 66, 38, 71,160, 79,142, 76,
-205,110,124,133,106,141,101, 97,150,172,220,111,105, 72, 98,195,139,218,128,102,221,111, 97, 53,237, 74, 26, 64, 1, 75,161,249,
-156, 80,238, 81, 39,225,173,101,188,148,167,242, 68, 8,192,116,136,232, 63,143, 21, 75,126, 68,173, 58,244,240, 66,173, 97,208,
-158, 96, 73,241, 27, 13, 68, 50,136, 80, 50,228,111, 10,102, 28,207,188, 96,148,189, 80,164, 41, 59, 16, 70,224,131,215, 78,253,
- 89, 73, 21,102, 60,203,202, 57,134, 17, 7,139,243,137,234,186,227,246,217, 41,155, 2, 68,208, 92,150,209, 12,173,159, 47,206,
- 39,185, 72,162,246,239,169, 20, 0, 16, 54,213,167,247, 11, 44,172, 70, 69,192,250,212,147,190,115,136,137, 46, 2, 94, 73,183,
- 37,187,200, 82,198,223,219,168,191, 80, 89, 66,159,126,173,253, 28,101, 60,163,234,195, 45,228,220,182,233,110,196,184,174, 72,
-180,183, 22,243,125,123,181,115,150,197,146, 27, 46,166, 20,102,187,157,120,161, 73, 33, 70,128,108, 69,106, 14,168, 61, 73,233,
-140,156,238, 66,219, 55, 70,186,190, 86,148,187,252,177,118, 3, 83,240, 90,123, 72,137,121, 22, 10, 6, 39,162,158, 54,159, 21,
-118,190, 55,228,107, 61,227, 39, 90, 72,102, 5,198, 36,171, 71,158,161,209,182,158,149,220,130,181, 29,146, 13, 42,125,154,160,
-200,244, 28,231, 31,232,228,194,114,240, 32,197,253,128,151, 81,194,250,228, 88, 75,238, 73, 44,183,138, 50, 30, 60,202, 38, 88,
-243, 59, 83,182,251,244, 85,150,223,133, 37, 29,171, 73,234, 8,240, 41, 35,112,160, 72, 35,112,105,175, 55,202,197,200,198,188,
-211,112, 49,144,234, 15,241,241, 83, 72, 33,131, 21,128,183, 87,246,244, 66, 14,212, 30, 58,112, 18,143,116,197,230,225,103,183,
- 93,174,108,165, 45, 10,148,246,254,189, 79, 11,167, 88,234,146,159,111,138,113,184,118,191,187,144,132,135,213,185,233,226,105,
-236,212, 71,146,153, 83,215, 91,174,217,156,119,101,149,100, 66,227,165, 52,109, 53,173, 60, 70,133,253,116,221, 73, 40, 50,131,
- 77,158, 7,148,164,208,121,157,201, 31,169, 90, 50, 54, 75,203,151,250,163,246, 73,115,106, 46,130,209, 72, 9, 61, 54,253, 90,
-250,192,162, 20,126,107, 32, 71,182,158,211, 77,198,195,199,195,250, 53, 4,203, 41,241, 34, 76,151,102, 63,110,118,126, 54, 16,
-213,107,245,120, 13,101,115, 45,121, 47, 71,192,175,108, 2,251, 2, 27, 8, 46, 71,148,145,247, 11,246,244, 36,104, 2,234,202,
- 44,160, 47,146,197,161,245, 58, 79, 98, 91, 87,137,232,157, 72, 19,246,174,220,182,251,196,156, 65,105,107,144, 57,198,230,211,
- 45, 58,223,157, 27, 31,138,242, 75,238,138, 85, 42,126,191, 64, 63,221,234,124,105,167, 19, 41,105, 4, 86, 62, 32,128,123, 78,
-170,178,100,190,172, 57,183,213, 46,112,230, 13,233,162,196,150,240,230, 85,229, 56,232, 40, 98, 36, 70, 9,161,113,197,174,157,
- 6,244,234,124, 53,195,133, 26,193, 51,208,148,117, 28,132,175,150,202,181, 3,184,232, 22,236,130, 98,120,190, 91, 88,132,203,
-132,121, 89, 2,146, 62,225,246,212,104, 93, 27,171,180, 18,118, 7, 85,246, 82, 9,112, 52, 87,149,228,198, 33,157,202, 22,229,
-124,193,113,225, 8, 81,223, 47, 73,125, 61,171,166,231,185, 66,166,180,219, 74, 52, 3,170, 31, 39, 32,136,170,145,207,121,237,
-242, 4,115,199, 86,113,217, 16, 16,252,167,129,221,125,231,184, 32,123,135,142,180,124, 55, 27, 29,222,105, 94, 87,234, 60,249,
- 68,249, 65, 43,173,246, 25,178, 17,247,145,212,106, 15,204,159,233,166,181, 76,235, 22,100, 66,155,182,219, 28,144,200, 10, 63,
- 58,117,194,160, 22, 50,233,113, 46, 71, 73, 97,234,249, 42,216,251,169,174, 20, 69, 86,152,149,178,221,117,145, 17,228,178,130,
-107, 80, 82,161,241,247,104, 73, 71, 69,117, 69,162, 93, 85,156,226,124,146, 36,188, 62, 59, 47, 58, 15,150,144,128,161,213, 70,
-155,255, 0, 70,169,237, 31, 49, 86, 80,144, 41,247,193, 55,244,166, 79,106,215,218,132,245, 31,221, 73,235,248,171,166,133,152,
-209, 50, 65, 54,167,103,225, 17,252,224,106, 20, 72, 64, 31,181,218, 40,127, 1,211, 66, 72,232,157, 92, 93, 69, 92,115, 95,178,
-142,181,173,117,116, 39,178,167,170,156, 80,175,234, 36,234, 55, 79,100, 57,144,242,119,146,211, 75, 43,236,121,212,132, 44,123,
- 64,218,186,228,130,225, 9,115,204, 92,193, 10,201,133, 77,191,207,114,145,161, 50,227,142, 2, 69, 21,217, 82, 19,241, 53,219,
- 82, 81, 86,249, 0,155, 40,178,252,245,176, 89, 39,102,249,172,220,142, 82, 75,119, 11,132,151,102,188,148,118,150,200,117,194,
-160,147,226, 8, 26,186,204,180, 87, 6,246, 34, 48,168,114,229, 89,254, 45,195,147,110,130,219, 84,237, 9, 8,169, 61, 0, 39,
-219,172, 38,118, 73, 43, 93, 68, 25, 56,236,182,134,109, 48, 75,141,209, 9, 88,249,133,106, 8,240, 58,207,206,110, 85,132, 34,
-146,158,174, 51,156,206,201, 96, 76, 43, 27,158, 68, 9, 61,201,125, 73,168, 82,209, 74, 80, 19,173, 47, 5,199,198,207,158, 65,
- 84,114,121,187, 62, 80,129, 61, 50,122,132,185, 99, 47,166,199,123,121, 70,214, 8, 71,204, 78,221, 18, 58,157, 27,203,113,123,
-162,241, 76,193,228, 28,177, 42,229,226, 25, 85,155, 39,178,162, 92, 23, 2,194,134,253,187,145, 95,104,214, 50,232, 74,185, 49,
- 87, 64,130,161,242, 71,149,116,190,177, 96,134, 59,222,148, 82,218, 66,105,185, 42, 0,254,173, 58, 50,219,243,120,106,160,203,
-187,202,174, 83,240, 14,166,230,250,104,118,124,225, 53, 45,138, 54, 55, 72, 30,250,239,161, 50,185,129, 51,215, 66,188, 10,251,
-165,108,229, 35,221, 72, 67,226,129, 22,235, 30, 56,104,109,177, 20, 30, 27,106,182, 89,238, 58,168, 98,187,100, 97,146,113, 75,
-184,105, 9,163, 75, 21,175,136,248,106, 58,174,243, 34,155,181, 74, 57,126,106, 18,195,173,170,146, 43,218,175,143, 77, 48, 71,
-113, 93, 67,215, 75, 28,172,142,230,227,113,205, 30,112,149, 87,227,171, 10,238,242,195, 46, 26,221, 75, 98,120,141,206, 4, 83,
-104,120,146, 84,154, 2,175,110,187,102, 76,122,174, 26,200, 94,225,226, 55, 8, 47,174, 49,100,174,171, 42, 59,126, 58, 22,251,
-156, 36,196, 38,198, 23,137, 91,221,176, 47,238, 25, 1,234, 83,230, 72,254,237,117, 81,117,167,197, 39, 40, 10,253,140, 72, 23,
-225, 25,104,160,169,161, 21,209, 17,181,215,118,169,222, 57,181,201,178,242, 14, 63,121, 80,167,217,220,224,204, 74,191,187,228,
-202, 67,128,254,173, 31,129,126,203,161, 47, 9, 3,241, 93, 26, 43, 27,234, 66, 56,182,122,147,204, 35,173, 52, 74,238,211, 94,
-248,249,207,169,234,255, 0,233,107,218,121, 40,181,243, 30,210,168,178,180,178, 94,242,161,241,233, 48, 46,249,133,174,195, 45,
- 65, 17, 37, 73,143, 25,213,116,162, 93,117, 40, 81,253, 7, 65, 87, 78,233, 0,123,144,161,136,114, 20, 63,172, 62, 87,184, 93,
-125, 75,101,246, 25,233,255, 0,221,246, 89,143, 88,109,177, 82, 40,212,104, 86,229,152,172, 52,218, 6,201, 79,106,123,168, 60,
- 73, 62, 58,242,191, 87, 93, 60,142, 74,237,231, 72,200,196, 14,194, 49,208, 1,246,251,202,210,157, 14,137, 85,143,114, 38, 89,
-138, 94,226,101,152, 51,203,183,229, 54,201, 9,149, 10,100,114, 66,219,113, 20, 32,251,193,173, 8, 59, 17,177,219, 84,152,118,
-207, 22,209,109,114,219, 40,151, 5,119,113, 86, 87,212,190, 57,109,185,114, 90,178, 72,113, 83, 16,100, 16, 45,153, 27,177, 91,
- 4, 33,169, 23, 40, 13, 74,125, 32,120, 85,213, 40,254, 58,247,108,187,196,165, 25,244,223, 24,201,191,212, 1, 42,147, 54, 2,
- 54, 22, 75,185, 24, 15,222, 20,132,143,159,192,232, 81,147,170, 20,197,119, 97, 60, 17,115,205,111, 19, 21, 62,115, 22, 92, 26,
-206,215,243, 28,131, 34,184,146, 34,219,226,247,118,247, 42,155,173,197,159,149,182,211,186,213,176,241, 32,234, 36, 39, 25, 74,
- 82, 17,132, 67,146,122, 1,252,116, 29,211,233,198, 54,201,130, 34,183, 91,189, 10,228, 23, 22,112, 91, 14, 93,144, 64,201,100,
-145, 30, 22, 67,125,183,197,106,198,235,202, 61,173,133,165,181,125,203, 72, 82,168, 59,150, 40,145,185,213,101,126,161,227, 46,
-179,202,141,147, 4,244,145, 3,111,226, 62,144,172, 63,183, 65,180, 37,254, 8, 63, 45,227,155,199, 30,102, 51,240,156,174, 57,
-143,126,128,226,152,146,217,220, 84,110, 20,146, 58,165, 64,133, 36,142,160,131,163,111,132,234, 38, 50,234, 21,100,224, 98, 72,
- 61, 66,157,198,249,119,148,112,124, 22,225,197,184, 45,209,235,126, 55,123,121,183,231, 8,228,165,208, 82,146,218,195, 78, 15,
-153,176,226,104, 23,219, 66,160,144, 43, 74,131, 61, 25,214, 87, 3, 0, 88, 20,248, 93, 56, 68,196, 22, 5, 70,177,133,180,178,
- 82,242,106,176,154,212,248,157, 85,202,242,233,155, 20,254, 5,150,114, 55, 21, 73, 81,197,229,121,152,196,190,230,110,150, 41,
-233, 18,109,115,218, 88,237, 91,114, 98, 59, 86,214, 20,157,171, 74,129,208,141, 27, 78,124,171,211,168, 61, 65,212, 31,120, 82,
-211,100,171, 63, 41, 68,252,171,145, 96, 79, 96,182, 44, 7,134,108,202,199,240,182,215, 42,253,117,181, 37, 75, 90, 5,226,107,
-133,181,132,173,100,149, 33,182,144,148,180,124, 18,105,225,166,223, 58, 35, 84,107,162, 59, 98,230, 68,127,204,127, 1,211,216,
-166,203,191,205, 0, 13, 7,222,151,142, 53, 57,118,243, 24,130, 14,129,216, 29, 3,180,166,102, 33,192,121,101,195, 11,143,148,
-223,164, 64,199,241,201, 67,253,146,118, 73, 62, 61,185,167,246, 6,173,253,193, 10, 80,246, 16, 40,125,186,158,120,155, 98, 39,
-100,225, 92, 79, 67, 57, 8,191,185,209, 84,225,217, 96,112, 52, 81,124,133,197,153,111, 28,194,137,123,185, 52,204,172, 94, 98,
-138, 33,222,109, 82, 25,155, 1,229, 10,252,169,126, 58,148,144,173,142,198,135,221,168,237,197,156, 34, 38, 8,148, 79, 73, 68,
-130, 15,210, 23, 45,198,157,127,152, 33, 57, 13, 68,153,243,145,251,209,189, 53,200, 56, 9,140,163,127,150,198,147,112,170,211,
-176,219,245,105,230,198, 76,109, 81, 22, 95,152,101, 60,143,150,185,146,230,211,157,184, 94, 92,249,124,215,142,200, 66,122, 33,
-180, 38,137, 66, 71,128, 72, 3, 76,202,202,157,210,221, 50,229, 75, 57,153,151, 37,215, 52, 87,217,254,119,246,234,250,116, 60,
- 53, 9,174,153, 51,174,103,155,248,110,247,142,228, 3,238,243,252, 26, 33,188,216,230,184, 42,251,182,118,214, 17, 54, 43,139,
- 59,169, 45, 37, 65,196, 86,164, 80,141,134,160,245, 22, 7,247, 28, 25, 72,235,109, 3,116, 79,115, 31,241, 3,236, 3, 80,174,
- 56,236,131, 47,148,246,232,171,195,239,218,152,183,188, 28, 66, 66,142,244,215,138,152,201,213,162, 24,101,169, 82,230,135, 33,
-162,169, 31, 48,166,137, 63,149, 37, 35,119,151,113,118,222,152,106, 52,112, 82,160,252,107,168, 0, 12,146,236,199,111, 45,199,
-138, 33,206, 93, 1,216,215, 93, 73,106, 16, 45,223,205,148,106, 60,138,167,127,192,232,136,255, 0,179, 47,245, 71,236,146, 74,
- 98, 58, 67, 41, 5,127, 72, 62, 62,205,125, 96, 78,138, 84, 53,201, 18, 22,212, 18,219,102,170, 10, 20, 31,209,160,242, 11, 69,
- 89,113,149,238,154, 34,226, 91,251, 19,172,203,131,219,221, 57,144, 66,208,122,145,224, 70,178,183, 54,226,189, 18,168,109,138,
-140,203,239,209, 91,157,230, 32,249, 4, 18, 23,224, 69, 60,117,216,192, 46,206,205,163, 68, 41,148,218,174,153,229,177,246, 32,
- 60,160,149, 54, 74, 93, 65, 41, 81,216,236, 15,129,212,208,174, 42, 25,228,201,149, 64,159,232,235, 63,229,190, 74,122,197,148,
- 94,159,135,135,197, 89,145,119,187,220,228, 41,196, 48,192,240, 66, 94, 80,239, 90,186, 4,143,137,219, 86,115,202,170,145,160,
- 27,188, 16, 88,216, 57, 57,211,105,200,249, 96,234, 73, 83,252,249,234,195,132,189, 56, 96, 49,248, 19,211,108, 48,210,161,160,
- 37,247,217, 87,124,137, 79,159,149, 79,201,117, 59,173,106, 35,167,224, 0, 26, 6, 24,118,100, 75,116,180, 10,247, 51,150,199,
-192,135,149, 83,146,116, 0, 40, 62, 39,197,156,194, 48,203,143, 61,122,151, 67,191,230,235,171, 33,219, 68,105,138,237, 68, 24,
-161, 61,201, 90,144,175,165,107, 38,189, 43,211,199, 67,223, 24,202, 91, 43, 14,143,227,236, 53,210,108,188,177, 61,188, 7,226,
-151, 24,143, 57,219, 57,118,227, 58, 61,146, 51,233,110, 57, 33,183, 28, 72,236, 40, 21,221, 32,123,189,186,116,240,141, 96,110,
- 81,225,114, 17,202,121, 15,202,150,188,128,220, 28,151, 38,149, 58, 40, 10, 72, 62, 90, 20, 7,212, 16, 59, 79,233, 53,214,147,
- 10, 30, 93, 98, 43,205,121,156,129,126, 65,148,122, 13, 16,204, 88, 46,194,126,141,182, 67, 75, 52,165, 58, 29, 26, 52, 84,246,
- 65,250, 47, 78, 54,184, 47, 21,121,100, 32,238,118, 59,105,117, 67, 26,202,211, 42,100, 87,155,239,109, 66,170, 29,165, 39,106,
- 31,199, 78, 1,117,153, 65, 63,118, 54,201, 29,174,110,127,103,216, 7,134,250, 66,167, 68, 71, 39, 98, 39,195, 57,197,139, 42,
- 35,194,143, 35,247,108,147,222,133, 26, 40,168,239,208,232, 12,140, 71,212, 43,108,124,248,158,170,209,240,183, 46,179, 41,136,
-209, 18,240,243, 28, 30,115,238, 5,117, 90,211,211,217,183, 77, 80,223, 9, 67,168, 86,130, 98, 99, 68,224,137,159,219,223,104,
- 73,144,240, 17, 89,249,190,175,217, 77, 54,208,114, 26, 41,107,240, 65, 57,255, 0, 59, 91,227,205,109, 44,189,251,180,247, 45,
- 64,159, 14,160,234, 56, 86,229, 56,193,144,147,252,167, 43, 37,133, 31,237,137, 47, 36,117,175,227,169,141,105,166, 36, 37, 55,
-170,236,198,124,168, 54,220, 9,133, 45, 82,238, 10, 19, 95,108, 87,180, 4, 40, 37, 0,246,238, 73, 53, 35,225,163,240,163,180,
- 18,163,150,165,151, 79, 6,241, 36, 72,214,116,203, 91, 37,185,138, 77, 87,221, 83,220,125,132,248,106,135,149,204,212,173, 14,
- 37, 12, 2,120, 99,184,227, 48,219, 67, 13,172, 37, 0, 4,150,214, 14,196, 15,105,214, 70,235,157, 93,215, 4, 77,104,129, 58,
-249,112, 70, 55, 13,207, 41, 46,215,189, 93,201, 61,169, 29, 74,117, 62, 30, 41,182, 73,185,121, 66,152, 33,223, 86,252, 85, 97,
-186, 96,169,101, 40, 87,159, 25, 4,165, 72, 27,130, 6,228,167,199,109,108, 49, 42, 21,104,177,159,168,243,164, 74,162, 23, 70,
-167,226, 55,175, 54, 50,138,154, 74,188,106, 42, 43,226, 13, 14,173,101, 13,209, 93,166,205,146, 86, 91,211, 63, 49,200,106, 10,
- 93,184, 40,162, 35, 73,221, 96,245, 29, 40,117,142,229, 48,142,231,101,170,195,191,116,117, 86, 23,210,205,190, 95, 39,115, 12,
- 57, 36,119, 41, 6, 68,244, 32,244, 75,109,183,219,227,239, 80, 58,202,115, 18, 20,210, 71,114,171, 61, 75,144, 43,196,159,140,
-131, 43, 77,107,176,202,139, 57,200,178, 7,238,157, 81, 9, 87,186,154,197, 93, 38, 1,120,244, 67, 5,221,116,227,219,101,150,
-115, 87, 57, 20,163,128, 1,208,238,119,166,160,141,238,159, 22, 81, 89,230, 1, 18,123,204,207, 74,128, 96,164,110, 0,209, 88,
-217,162, 33,146,216,131, 31,226, 56, 50,153, 83,233,114,174, 5,212,244,246,232,218,242,194,230,213, 55,140,241,237,166,213,116,
-101,201,106, 7,111,113,219, 80,223,152,101,209, 62, 33, 17,100,248,237,142, 28,150,228, 65,165, 71, 90, 1,160,163,116,142,132,
-167, 21,197,110,143, 1, 87, 20, 57,218, 9,241,216,123, 53, 57,153, 81, 20, 78,224,139, 14, 17, 44,144, 42, 42, 41, 78,148,247,
-104,114, 28,174,176, 65, 18,212,252,139,223,156,251, 99,181, 64,209, 90, 48,134, 9,134, 43,195, 98,125,170,224,219,174, 39,185,
- 9, 80, 90, 61,212,220,105,226,205,161,252, 23, 68, 85,160,245,115, 99, 75,222,161,114,137, 40, 31, 92,150,221, 7,220,184,237,
-172, 31,215,175,124,229,166,217, 51,247,253,193, 80,230, 71,250,146,247,165,115,246, 41, 63,122,212,216,139, 45,200,108,133,165,
-105, 52, 33, 73, 53, 4,126, 58, 8, 90,135,218,200,191,156,253, 59,100, 94,163,115, 83,234, 47,133, 88, 23, 89,183,102, 24, 86,
- 99,142, 66, 41, 55, 11,125,213,166,146,195,207, 34, 49, 61,238, 48,249, 72, 90, 84,138,238, 72, 32,120,102,189, 89,233,235,179,
-102,114,177, 99,191,115,110,136,252,194, 93, 9,110,164, 30,186,123, 86,139, 26,209,104,126,253,212,127, 29,250, 41,228,107,133,
-233, 51,121, 18,216,246, 35,198,209,150, 29,187,222,239,237, 24, 41,105,145,245, 6, 91,144, 18,227,174, 40, 2, 16,148,164,212,
-235, 39,196,250, 55, 63, 42,209,231, 66, 85, 84, 15,205, 41,141,172, 61,128,234, 79,131, 4, 68,229, 24,135, 61, 17, 23, 50,242,
- 5,183,144,121, 66,231,127,178, 52, 90,176, 21, 55, 18,216,210,135,105, 76, 56,140,166, 43, 0,141,232, 75,104, 4,143,110,189,
- 63, 58,232,219,105, 49,252,189, 7,184, 6, 11, 59,125,158,100,201, 80,102,230,152,168, 65, 80,249,186,104, 17,213, 64,143,231,
- 99,124,103,155,250,112,182,226,217,118, 98,198, 57,111,155,122,145,121,190, 67,139, 29,115,174,115, 81, 17,180,199,134,202, 88,
-104,164, 4, 2, 92, 80, 46,168, 36, 42,132, 3,162,249, 14, 54, 57,184,112,168,220, 43,142,243, 41, 48,121, 22,208, 6,240,235,
-215, 78,157, 85,174, 29,181,215, 95,205,212,149, 11, 43, 27,244, 67,108, 67,113,227, 97,247,203,251, 40, 0,125,213,214,236,136,
- 43, 81, 29, 79,151, 1, 5, 32, 87,223,170,250,125, 61,196,213,166,203, 39,237, 50,111,250, 87,101,200, 64,116,138,211,207,217,
-246, 49,202,217, 21,174,249,140, 90,156,182, 55,111,183, 70,179,188,137, 18, 62,237,199,132, 74,161,183, 22,234,146,149, 41, 94,
- 93, 18, 73,220,208,106,255, 0, 47, 38, 22,237,218, 8,219, 16, 53, 47,211,218,128,201,184, 91, 39,102, 67,248,230, 28,229,230,
-241, 10, 21,189, 1,115,229, 58,219, 13, 35,218,183, 20, 16,145,250, 78,171,224,243,144,136,234, 75, 40, 4, 92,178, 63,229, 62,
- 93,224,126, 12,201,223,227,168, 88, 91,121, 76,219, 67,138,131,123,188, 92,110, 50,226,174, 68,150,143, 99,233,142,220,111,149,
-180,165, 97, 73, 4,212,251,125,166,143,150,245,110, 54, 6, 76,177,235,160, 89,176,180,164,100, 67,145,213,128,232,199, 71, 87,
-208,195,174, 33,136,114,188,228,246,156, 3, 38,227,104,188,203,196,133,211,199,147, 95, 84, 9, 80, 38,169, 43,149,106,184,161,
- 33,197, 70,113, 67,235, 74,145,243,182,191, 17,215,126,183, 85,206,172,202, 35,147, 67,236, 37,136, 61, 99, 47, 3,226, 59,130,
-171,242,241,252,173, 71, 66,130,165,202, 66,224,161,104, 61, 58,232, 89, 56, 40, 39, 69, 62,157,113,172,119, 62,229, 56, 48, 50,
- 68,121,152,236, 84, 72,186, 78, 97, 34,165,214,160,199, 84,146,213, 54,175,121, 64, 73,247, 19,171, 46, 50,168,217,104,223,172,
- 98, 9, 63, 64,118, 83,226,214, 39, 48, 15, 68,166,229, 94,108,200, 57,107, 34,184,229, 25, 75,229, 82,222, 81, 44, 71, 4,249,
- 81, 88, 10,163,108, 50,158,137, 66, 19,176, 3,226,119, 39, 94, 37,203,114,151,114, 25, 18,186,210, 92,157, 60, 0,236, 7,176,
-127, 26,173, 16, 33,111,244,219,234, 58,195,199, 55,169,248,223, 33, 7,231,240,221,233,167, 34,100, 22,168,253,171, 85, 66, 9,
- 98, 83, 9,112,165, 33,230,156, 9, 33, 85, 27, 84,123, 53,161,244,175, 60,120,235, 26,199, 52,204, 52,162, 62, 4,123, 65,248,
- 37,100, 35, 48,196, 38,172, 89,158,154, 57, 3,137, 50,220,187,136, 45,247,148, 92,241,199,236,204,170,118, 70,252,112,181,166,
-230,243,200, 33, 12,194, 62, 88,160, 96,253, 85,235,182,189, 39, 3,146,195,228, 41,182, 84, 70, 96,215,183, 89, 55,248,137,236,
- 11,118, 85,121, 56,144,170, 14, 58,160, 72,141,196, 83,129,105, 31, 29, 64, 74,171,100,195,229, 60,143,138,253, 51, 46, 22, 40,
- 49, 86, 50,206, 64,117,136,179,238,247, 27,211,207,181, 13,132, 75,101, 50, 18,196, 86, 35, 45, 36,144,133, 10,173, 70,181,240,
-240, 1,115,222,160,167,136,176, 81, 26,133,150, 0, 12,140,157,181, 14,192, 15,103,114,174,168,193,128,136, 36, 57, 92, 92,131,
-139,113,253,194,217,143,243, 23, 24, 50,236, 60, 43, 38,105,242, 45,178, 92, 46,185, 2,116, 55, 3, 82, 99,121,138,221, 72, 5,
- 73, 82, 20,119, 32,234,196, 93, 78, 77, 53,228, 82, 12, 97, 55,211,252,164,104, 71,224,128,205,198, 21,203, 78,133, 73,122,104,
-136,204,158,114,129,102,123,252, 37,218, 61,198,209, 33, 7,162,209, 46,220,243, 65, 39,221,220, 65,209,188, 92,124,203,118, 30,
-146, 18, 7,233, 5, 55, 8,181,161, 84, 44,131, 32,117,249,101,150,193,236, 27, 44,110, 40, 65, 61, 65,215,129,206,181,161, 83,
-124,121, 37,214,222, 10,144,138, 32,143,150,187,244,215,124,163,226,146,251,152, 92,208, 38,133,197, 29, 9,238, 0, 83, 81,138,
- 53, 76, 37, 8, 92,178, 57, 82,174,136,139, 25, 39,186,187,246,154,105,199, 28,174,110,101, 46,155,220,138, 46, 55,105,251,144,
- 82, 60,124, 66,180, 84,105, 30, 76,191,213, 31,178, 73,111, 71,206, 0, 16, 16,163,245, 10, 31,209,175,169,145, 8, 83, 54, 97,
-219,130,123, 26, 21, 61,162,190,208,160,116, 6,108,216, 43,238, 22,161, 34, 74,142,182,222,110, 88,101,205,169,142, 36,161,135,
- 64, 74,136, 20,216,251,117,157,178,183, 43,116, 14,138, 78,234,211, 89, 77,197, 46,165, 53,238, 32,247, 14,132, 31,109, 52,248,
-232, 20, 51, 58,169,247, 44,112,177, 91, 34, 35, 58, 59, 28, 88,168,253, 61, 53,214, 42, 43, 6,170,164,122,203,226,204,154,248,
- 85,126,182, 46, 67, 45, 62,158,197,180,203,174,182,133, 33, 42, 52,238, 74, 85,218,122,157,200,213,134, 40,140,143,204, 16,153,
-150,219, 16, 68, 36, 64, 72,175, 78,156,125,192,216, 15, 37, 78,228,143, 80,242, 16, 33,216,218, 67,214,139, 51,161, 74, 51, 38,
-184,163,218,178,128, 9, 80,107,182,180,167, 82, 43,211, 69,231,219, 35, 17, 93, 99,170,131,132,174,186,201,186,226,228,116,117,
- 5,234,199,157,114, 31, 80,119,117,181, 27,190, 39, 31, 49, 84,196,134,173,150,232, 78,193,111, 82,163,224,158,131, 82, 97,113,
-241,168, 60,186,168, 57,142, 94,121, 50, 48,142,145,251, 84, 14, 1,122,182,113,183, 18, 38,219,139,161, 46,102,183,127, 49,167,
-215, 65, 88,205,212,165,106, 63,233, 30,131,244,234, 57, 99,155, 45,121,116, 71, 79,146,134, 62, 44, 99, 95,230, 35, 85,203,134,
-225,239, 92, 47, 44, 65, 34,170, 82,146,149, 14,190, 58, 54,201,136,197,252, 22, 94,186,119,144, 21,152,181,250, 62,199,239, 22,
- 56,215, 85,180, 18,239, 98, 74,142,212, 39,175,128,213, 53,153,182, 18,180, 84,113, 21,200, 7, 68,176,125, 13,241, 69,242,222,
- 91,146,218,147, 58,148,170, 77, 55,167,191, 80,127,116,156,123, 41, 79, 5, 65, 85,155,213, 95,163,118, 56,205,213,203,178, 56,
-165,219,205,104, 9,165, 41,239, 26,181,195,228,141,186, 16,169,121, 14, 38, 53, 7, 5, 86,233,216,123,136,239, 97,197,184,142,
-223,218, 42, 42,220,120, 81, 90,184,133,186, 44,221,149,177, 80,178, 48, 38,228, 31,184,137, 33, 72,152,157,235, 82,107,240,211,
-183, 58,140, 75,106,223,142,114,103, 39,113,244,149,162, 20,146,180,166,137, 1,221,235,191,235,208,215, 97,198,205, 17,149,114,
- 18,173, 23,185,235, 43,147,149, 29, 16, 11,105, 17, 82, 83,231,132,130, 10,194,107,242,254, 58, 28,241, 48, 83,199,152,154,140,
-151,234, 35, 52,190, 62,165,201,237,142, 9, 36, 30,206,241, 67,176, 31, 55,187, 78,135, 23, 92, 66,108,249,123, 78,170, 78,209,
-206,220,169, 5, 33,155, 92,230, 81,253,197, 45,132, 31, 26,248,233,191,219,107, 26,165,253,210,217,162,126, 59,189,229, 28,147,
-155, 55,144,231, 5, 47,201,139,216,209,113, 45,132, 35,185,106,236,108, 37, 35,160, 2,167, 84,249,178,141, 64,128,181, 28,117,
-114,156, 65, 61, 85,178,194, 49,246, 45,214,166, 89, 96,159,191,124,116, 82,104,146,146,178,175,232,160,214, 7, 62,215,117,176,
-199,129, 0, 41,185,142,177,104,130,185, 47,164, 37, 9, 10, 43, 93,118, 20,234, 55,253, 90,170,166,163,108,196, 71,116,101,211,
- 21, 67,113,232, 23,204, 15, 58,196, 38,199, 51,177, 41,140, 92, 37, 10,153, 77, 33, 95,191,108,251, 10, 21, 69,167,226, 70,182,
-184,220,108,177,224, 10,198,101,242, 67, 38,198,125, 20,214, 83,125,178,229, 22, 69, 69,153,251,196,184,157,146,224, 21, 31,136,
-223, 86, 27, 71, 94,234,188, 75,100,189,138,137,122,167,182,218,236, 57, 82,161,219,118, 73, 81, 82, 83,214,159, 10,239,162,233,
-118, 83, 9, 14,171,119, 7, 94,217,126,124,124,125,249, 8,140,210,202, 73, 15, 45, 40, 46, 87,112,145,221, 74,232, 12,252, 73,
-177,155, 58,178,194,228,171, 39,203, 50,101,250, 61,232,106,217, 15, 9,180, 92, 51,137, 98,146, 93, 79,242,232, 68,164,110,128,
- 1, 90,210,125,234, 61,191,134,188,111,212, 55, 27,230, 96, 52,101, 65,234,254, 69,230, 41, 29,153,211,197,220,155,238,163,137,
-136,232,146, 21, 81, 79,110,250,160,253, 57,151,117,138,234, 25, 65,114, 23, 42, 2,196, 94,210, 72, 11, 9,233,236,252,116, 70,
- 55, 30, 11,186, 64, 16,187, 47, 25,135,221, 91, 24,138,138, 80,167,110,191,219,160, 77, 45, 37, 46,213,197, 27,207,110, 25,113,
- 43,168, 42,249,135, 93,206,166,222,156, 2,247,123,146,184,108, 53, 37,213, 81, 64, 15,110,159, 8,132,148,100, 44,145,217,143,
- 56,219,235, 38,130,163,244,107,147,136, 72,162, 12, 93,148, 74,238,125,102,138, 72, 61,191,163, 80,202, 68,232,153,177, 71, 57,
-121,185,185,123, 48,211, 85, 54,217,161,246, 29, 73, 92, 87,118,169, 27,140,136,233,156,202, 80,223,239, 13, 42, 15,133, 70,157,
-100,152, 39,108, 93, 23,182, 18, 22,133, 20, 81, 32, 10,109,227,225,166,121,154, 39, 8, 43, 59,234,125,230,220,231, 27,216, 35,
-247,190, 77,177,213, 87,218,187, 76,117,255, 0, 94,189,251,150,147,222,125,209,255, 0,164, 44,238,104,254,169,254, 59, 37,202,
-173, 23, 41,150, 87,114, 72, 81,214,187, 28, 71,155,141, 42, 74, 19, 84, 52,227,193, 69,180,172,142,157,221,138,165,122,208,232,
- 72,194, 70, 38, 77,160, 67, 8,232,235,201,185, 72,180, 62,213,194,208,226,227,204, 73, 4, 58,202,138, 22, 62, 10, 73, 4,105,
-130, 68,106, 11, 21,193,162,251,127,204,178, 11,234,146,171,204,215,230,169, 2,137, 84,167,156,116,167,224, 86, 77, 52,167,100,
-231,249,137, 62,242,235,164,147,213,115,181,106,185, 58,200,189,178,194,213,107, 66,195, 11,124, 37, 94, 88,117, 73, 43, 8, 42,
-233,220, 66, 73,167,176,105,219, 11, 59,104,147, 46, 60,138,106,163,199,243, 59,104, 43,183,233,211, 5,122,166, 20, 89,106,133,
-196,184, 79, 13, 49,206,220,187,252,198,229,106,114,230,229,134, 13,134,198,150,154, 83,210,155,142,153, 85,145, 45,229, 31, 45,
-178,133,126,202, 10,189,154,151, 51, 35, 31, 3, 28, 95,112,148,129,150,209, 24,176,213,159, 82,122, 15,138, 63, 19, 20, 88, 55,
- 72,232,235,146, 79,174, 44, 86,211, 19,202,227,222, 49,198,160,180,161,251,180,222,218,145,121,117, 35,255, 0,148,144,182,234,
-125,253,186,203, 79,215,150,127,246,177,234,136,255, 0,153,228,126,183, 31, 98,178,141, 21,142,145, 31,106,158,244,255, 0,234,
-115,145, 57,195, 62, 86, 28, 44,216,141,146,211, 26, 28,219,205,210,234,140, 97,135,209, 10, 20, 22, 11,206, 56, 90, 11, 5, 91,
-246,164, 14,225,185,213,151, 7,234, 76,254, 75, 32, 84, 5, 80, 12, 73, 62, 91,176, 3,193,254,132,233,213, 8,135,218, 62,164,
-203, 30,162, 48,168, 12,174, 44, 12,170,248, 85, 78,210,172, 75, 31,199, 44, 77,172,123, 3,143,166, 67,233, 31, 13,106,103,121,
-102, 57, 54,127,228,133,112,248,145, 35,241, 65,254,190,168,244, 31, 0, 18,135, 49,141,233, 7, 42,155, 50,126, 77, 7, 49, 77,
-210, 75,142, 63, 42,107,119, 91, 99,175,184,235,170, 43, 91,138, 15, 70,237, 42, 82,137, 39, 89,233,250, 91,139,186,102, 82,243,
-183, 18,228,238,137, 36,157, 73,214, 42, 47,238, 81,255, 0, 41, 94,241, 92,223,211,190, 13,193, 89, 71, 23,113, 60,188,142,100,
-219,212,200, 51,219, 78, 80,197,185, 41,142,184,139, 33,125,142, 65,115,126,228, 42,155,160,116,213,247, 31,198,227, 96, 99,217,
- 93, 70,103,121, 7,230,109, 27,220,162,201,205,133,144,218, 29,208,172,121,106, 48,146, 43,177,213,125,144,249,149,124,117, 93,
-220, 95,200,119,142, 38,228, 59,110,111,103, 1,199,225, 59,222,182, 87,244, 60,202,210, 91,117,165,117,217,109,168,167,221, 93,
- 17,139,121,199,152,152,237,241,241, 82,213, 51, 92,132,135,101,221,151,250, 80,182,242, 21,254,102, 99,233,234,249,109,149,136,
-220, 20,167,198, 59,119,157, 30,219,115,181,173,103,189, 81,214,137,106, 67,110, 54,130,104,133,161,102,163,175, 74,156, 87, 45,
-232,139, 45,176,207, 8,198, 80,145,125,164,136,202, 62,205, 88, 16, 59, 23, 87,245, 95, 9,234, 10,221,197,156, 27,199, 30,154,
- 36,202,205,185, 42, 69,159, 50,229,105, 13,174, 61,159, 21, 96,183,116,180,193, 46,167,177,114, 46, 46, 39,247, 78, 44, 36,144,
-150,146, 77, 43, 82,107, 66,155,126, 15,211,112,227, 65,183, 39,101,150, 51, 8,126,104,143,108,187, 19,224, 63,128,204,140,200,
-192,124,165,202, 34,201, 57, 63,141, 30,226,204,135, 17,197,240,184, 56,190, 77,127,122,218,252,201, 56,250,156,110, 19,255, 0,
-203,222, 91,141,164,197,113, 69, 45,118,135, 87, 66,131,189,104,122, 13,104,106,183, 26, 21, 89, 26,169, 21,202,123, 95,111, 66,
-206,218,118,234,122, 32, 46,204, 54, 67,105, 8, 10,219,216,202, 42,190,180,208,100, 50, 9,117,254, 96,119, 32,121,153,246, 25,
-217,207,229,150, 71, 7,193, 86,166,117,129,253,192,255, 0,253, 89,159,249, 97,255, 0, 72, 90,122,191, 40,247, 41,204, 94,119,
-111,163,188,102, 98,205, 67, 57, 29,213,145, 95, 0,184, 49, 92, 35,244,235, 89,233,130,252, 76,125,150,203,254,152,170,238, 76,
-105, 21, 53,233,170,228,151,125, 68,226,133, 2,137, 92,212,164,159,139,106, 26,209,240,231,255, 0,115, 15,127,220,128,197,255,
- 0,114, 62,245, 84, 46,102, 36,121,178,146,242,106,225, 91,135,255, 0, 76,235,231,251,165, 45,231,222,180, 90,174,155, 6, 66,
-204, 72,209,218,121, 52, 90,213, 90,254, 52,211,245,117,205,203,213,238, 84,116, 60,251,175,141,142,232,252,116,248, 46, 50, 28,
-179, 68,117,156,173,185, 47, 55,223, 21, 84, 58,146, 93, 19,227, 4, 64,155,181,175,249,210,223,236, 30, 95,114, 5, 63, 5,107,
-145,221,229, 75,253, 81,251, 36,157,176, 34,249,199,253,155,225,184, 63, 13,125, 80, 84,131, 82,185,109,118,107,132,215,151, 61,
-150,252,200,173, 16,183, 80, 58,145, 80,118,240,213,118, 84,214,151,137,175,104, 43,155,147,224,167,236, 30, 83, 41,239,101, 53,
- 81,175,133, 14,171,229, 13,202,248, 88, 96,130,112, 44,226, 92, 25,105, 90,211,254,202, 79, 97, 10,234, 1, 20,219, 76, 53, 50,
-105,189,228, 17,110,115,123,151,126,181, 53, 30, 45, 67,141, 0,164,168,110, 72, 3,166,152, 66,148,218,235, 92, 75, 61,191, 48,
-177, 38,203,144, 52, 20,240, 65,236, 85, 58,251, 14,155,185,147, 4, 93, 32, 61, 88,250, 68,133,115,179, 34,229, 97, 98,179,235,
-208, 38,132,244,222,186,177,163, 59,106, 15, 35,143,243, 6,137, 9,107,244,101,152, 92, 97, 41,114, 87,216,221,118, 74,170, 13,
- 41,162, 79, 36, 10,130,190, 44,128,185,173,222,146,242,248,146,151, 10, 18, 76,137, 13,212,164, 39,169, 29,124,116,134,104, 37,
-212,114,227, 72, 40,227,131, 61, 44,242,108,172,225,153, 55, 75, 90,154,132,202,129, 81, 95, 66, 1,247,234, 28,156,176,204, 20,
-216,252,124,163, 39, 42,224,127,144,133,162,218,219, 17,218, 45, 45, 41,221,165, 13,168, 6,170,247,234,174, 96, 2,142,106,206,
-245,166,111,220, 52,159,221,158,169, 87, 74,234, 41, 7, 82, 51, 37,215,170, 94, 26, 95, 39, 98, 79,185, 16,132,204,109, 42, 80,
-237,232,104, 43,162, 49,165,178, 72, 44,216,239,131, 47,206,172,191,143,238, 54, 44,130, 69,154,228,130, 29, 66,139, 96,255, 0,
- 94,180,148, 90,241, 88,236,138, 26, 74, 15,255, 0, 46,213, 49, 29,173,171,166,231,183, 98, 15,179, 68, 9,170,249,192,133, 5,
-115,226,152,178, 29, 82,103, 36,249,132,236,160, 79,235,166,159, 25,149, 9, 11,129,238, 40,141,109, 5,216,132,184,158,187,238,
- 69, 52,237,238,154,203,136, 98,176,219, 95,114, 71,106,250,124,186,100,100,157, 51,162,221, 2,214,219,147, 91,128, 73, 41, 87,
- 66,122,215, 75, 45,163, 14,168,174, 50, 2,118, 0,202,206,250,119,195, 19, 17,174,249, 49, 16,226,212, 11,202,104,239,230, 41,
- 31,186, 71,235, 38,154,243,254, 87, 32, 63, 85,233,156,118, 59, 69, 88, 56, 17,153, 67,137,186, 37, 52,132,132,121, 73,238,162,
- 67, 72, 66,118, 27,235, 25,105,243, 36,193, 95, 70, 59, 70,170,186,250,152,230,251,140,235,130,176,172, 69,213, 33,150, 86,164,
- 75,121, 10, 5, 14,127,162, 41,212,107,113,233,238, 24, 86, 60,201,133,137,245, 15, 49,187,250,112, 58, 37, 36, 27,157,202, 43,
-232,146,135, 22,196,196, 81, 72,117,165, 20,168, 30,181, 10, 78,250,217,110, 12,204,177,140, 93,193, 76, 76,119,154,121,114, 36,
- 5, 71, 98, 91, 87, 10,138,161,203,139, 62, 98,209, 79,244,218, 83,106, 63, 21, 18,117, 12,240,170,151, 64,202,120,230,219, 30,
-186,165,183, 35, 70,207,178,188,133,204,146,253, 1,169,117, 53, 82, 97, 84,118, 80,255, 0,113, 70,191,211,169, 41,198,174,191,
-106,142,252,219, 39,167,101,207,107,180, 70,186, 39,202,121, 5,181,244, 82, 28, 77, 41,225, 77,198,141, 18, 29, 7, 68, 1, 15,
-213, 54, 56,183,157,249,219,137, 99, 71,182, 97,183,215, 31,198,163,146, 81,102,187, 15,186,134, 1, 53, 33, 1, 84,113, 2,187,
-252,139, 26,207,242, 94,152,193,205, 36,217, 88,220,123,141, 15,193, 43,126,114,231, 82,172, 95, 21,126, 98, 17, 30, 13,218,185,
-106,196,228, 36,172,132, 59, 62,206,163, 33,132,215,246,139, 46,209,212,143,112, 42, 58,243,254, 91,246,230,218,193,150, 60,183,
- 55, 98,192,253,193, 33, 0,159,120,166, 89,197,124,189,140,125,214, 9,118,139,115, 8, 87,122,154,101,192, 31, 71,250,236,185,
-218,234,122,248,164,107,207,114,240, 50,240,102, 99,108, 12,125,189,190,190,139,190, 90,158,179, 67,115,249,163, 81,214,142,230,
- 19,242, 31,118,218,170,132,119,135, 72, 5,216,228,182,225, 92, 87, 5,209,218,149, 81,109,130, 61,250,134, 80,208,144,145, 11,
-191, 46,102, 12,171, 34, 18,145,254,210, 83, 90,105,245,106, 23, 16, 54, 53,251,187,243,145,220, 20,109, 64,138,254, 26,155,110,
-137, 41,251, 13,233,136,185, 24,179, 50,106, 66,130,148, 61,196,211, 93, 24,228,167, 0,234,118,241,252,166,207,116, 50, 89,161,
- 83,170, 69, 62, 39,109, 56, 80, 83, 12,153, 71,100,119,187,116, 60,176,182, 20, 0, 9, 66,187,107,238,212, 51,199,112,151,154,
-183,228,185,189,191,203,109,165,148,212,148,128, 65,222,157,116,193,143,242,174,139, 29, 89, 79, 86, 87, 19, 15,158, 46,171,111,
-254,242, 37,158,191, 3,101,138,117,239,124,159,251,199,221, 31,250, 66,160,206,255, 0,116,253, 31, 98,158,244,165,151, 75,198,
-241,126, 65,131,108,133, 26,235, 49,118, 53, 94,127,148,220,208, 92,143, 53, 54,183, 67,174,176, 82, 55, 42, 83, 46, 47,182,157,
- 14,251,211, 82,225,229, 78,138, 47, 48,136,148,132, 55, 49,232,118,234, 71,210, 29,189,170, 94, 60,131, 35, 19,208,132, 23,114,
-207,189, 30,102, 44, 42,238,206, 77, 51, 0,148,191,153,219, 77,234,223, 38,235, 17,181,157,202, 88,151,111,238,112,160,120,121,
-141,215,219,172,254, 47,168, 56,204,176,251,165, 73,240, 32,200,125, 6, 61,189,225, 73,102, 12, 73,249, 75, 40, 85,242, 55,162,
-140, 64,162,225,120,207, 39,102, 46,212,246, 90,113,107, 60,168, 94, 98,135, 64,185,119,127, 41, 41, 73, 61,123, 80, 77, 58,111,
-169,110,230,120,202, 3,155, 37, 97,240,140, 72,248,201,151, 35,128, 59,159,169, 27,112,143,169,235,111,170,139, 62, 93,193,182,
- 91, 12, 76,114,221,108,101,171,238, 13, 98,133, 87, 22,226,173,193,127,122,135, 95, 88, 11,126, 67,172, 56, 85, 90, 15,163,167,
- 82, 95,195,122,140,242,210,183, 31, 96,128, 97, 42,226, 63,229,125,192,158,228,131,240, 68,228, 80, 13,109, 17,211, 84, 13,122,
-128,220,248, 46, 71, 3, 98,123,145, 77, 76, 75, 42, 48, 29, 22,113,136,195, 51, 94, 55,188,112, 63, 36, 73, 77,190,203,119,121,
-139,141,162,234,242, 74,218,183,221,162,133, 33, 11,112, 13,195,110,182,178,218,212, 58, 13,253,250, 89, 24,245,242, 24,179,198,
-156,182,238, 32,198, 93,163, 33,227,236, 35, 66,142,195,184, 86, 90, 93, 10, 3,185,126, 94,190,164, 93,191, 37,203, 93,166, 60,
-188, 88,119, 4,222,162,221, 45,170,183,169,186,255, 0, 19,206, 83,194,137,241,249,128, 62,237, 97,225,232,142, 82, 39,111,150,
- 8,255, 0, 48,148,118,251,221,254,221,125,138,225,162,206, 8,100, 97, 3, 8,195,253, 57,113,101,227,142,240,219,179, 55,254,
- 84,201,188,166, 50,123,229,186,166, 12, 40, 44, 57,230,139,116, 55, 84, 1,119,189,192, 20,235,130,137, 32, 1, 67,225,182,226,
-248,218,248,170,101, 1, 33, 59,103,249,136,232, 7,249, 65,238,253,202,174,205,201, 18, 27, 99,244,161,236, 66,209, 62,235, 62,
- 29,150, 42,219, 68,201,143, 55, 21,167, 36, 44, 54,210, 84,234,195, 96,173,106,217, 41, 4,238, 79, 65,169, 68, 55,200, 68,117,
- 37, 85, 10,220,162,238, 72,187,240, 55,167,171,252,204, 34,239,138,202,207,185, 34, 17,242, 46,114,110, 82,223,180,218, 99,200,
- 27,169, 17,154,101, 62,123,192,116,238, 93, 2,186,167,109, 85,114,190,172,196,226,174,149, 2,163,109,145, 45, 34, 78,216,131,
-236, 12,231,222, 89,250,141, 21,221, 60,100, 0,249,181, 43,163, 61,182,113,149,195,211,213,135, 59,103, 6,141,134,114, 62, 67,
- 57,215,225, 70,133, 54,116,144,187, 52,118,202, 62,225,104,146,170, 39,205,120,252,159, 46,233, 77, 65,161,213,254, 63, 36, 50,
-176,161,116,170,242,229, 50, 88, 57, 47, 17,223, 95, 19,211,217,170, 23, 59, 30,186,192, 17, 26,174,191, 75,182,124, 30, 50,178,
-188,171,148, 99, 42, 94, 9,103,176, 75,147, 49,150,146,149, 56,124,215, 27, 96,121,125,196, 81, 97, 42, 81, 73,168,162,168,116,
-252, 43,234,166, 54,221,112,120, 66, 4,159, 30,221, 20, 88, 52,198, 82, 32,248, 33,254, 65,225,247,177, 86, 99,228,118, 25, 72,
-189,241,133,200, 23,108,121, 28, 47,154, 60,150,207, 68, 57, 79,225,188,157,194,219, 85, 8, 32,232,107,224, 54, 11, 43, 59,235,
-151,229,144,232,127, 3,226, 10,139, 35, 24,212,117,232,132,162, 91,204,133, 56,195, 71,247,148, 58, 9, 14, 2,230, 92, 57, 17,
-156,109,180,147, 80,122,234,109,218, 39, 50, 37,137,131,228, 51,241,131,151,174, 27,201,197, 82,250, 97, 11,130,146, 82,202,164,
- 45, 42, 88,109, 10, 63, 81, 1, 36,154, 86,158, 62, 26,124,105,158,205,237,242,187, 63,181, 63,203, 44,253,148,115,144, 22,137,
-197,165, 31,221,129,215, 81,153, 40,212,151,172,219, 75, 83,121, 86,197,122, 95,204,139,158, 45, 96,155, 83,209, 84,132, 25, 39,
-255, 0, 66,154,195,122,252,127,239,227, 47,243, 87, 3,240,111,185,105,168,214, 17,247, 5, 61, 10,214,150,189, 35,216, 33, 39,
-100, 59,145,221, 95, 3,253, 72, 49, 91,214,151,211, 26,113, 35,219,108,191,233,138, 3,147,233, 21,217,233,154,221,228,122,128,
-196,222, 39,228, 19,155,167,196,130, 53,166,225,255, 0,249, 48,247,160, 49,191,220,143,189, 86, 44,202,223, 10, 45,234,108, 53,
-154, 73,105,247,144,164,251, 59, 92, 58,240, 27, 35, 33,100,189,229,105,182,133, 23, 46,239,105,253,211,105, 21, 90, 0, 6,158,
-237, 48, 9, 58,238,200,173,183, 59,212,123,199,219, 67,237,161, 52, 21,247, 13,245,200,153, 38,176, 95, 47, 82,127,150,195, 42,
-142, 42,180,209, 41, 30, 58,236, 73,145, 73,217, 1,155,213,200,101,201,111,126,210, 20, 72,240,168, 35,251,117,109, 24,143, 38,
- 94,248,253,146, 75,114,116,222,238, 77,194,136,164,186,104,186, 80, 3,226,122,107,233,169,244, 83, 99,196,202, 65, 72,241,190,
- 68,164, 54, 98, 6,251,218,122,173, 21,244,162,200,249,125,158,205, 82,101, 88, 12,150,219, 14,141,176, 11,205,213,249, 79, 76,
-147,111,144,208, 90, 87, 90, 18, 1, 7,111, 13, 70, 11, 4,247,249,153, 5, 8,248,221,190, 98,160, 62,216, 67,202,170,104, 0,
- 77, 40, 79, 74,234, 27, 47, 1, 88, 87,134,122,169,123,124, 95,176, 13, 56,241,238,137,220, 20,149,251, 55,165, 14,185, 25,137,
- 13, 19, 45,175, 97, 70,109, 88,236,144,188,153,241,150, 60,165,252,201,160,246,239, 66, 61,250,142, 82,109, 10, 66, 14, 29, 77,
- 79,196, 96,100, 22,175, 41,246,211,220,143,157,178,161,178,171,225,166, 18,157, 81, 32,161,124,135,140,173, 1,159,182, 91, 8,
- 74,233, 82, 82,144, 9,211, 76,138, 52, 68, 16,162,162,241,238, 59,106,125, 51, 20,194, 81, 41, 52,171,148,166,187,169, 26,174,
-109, 29,145, 52, 72,113,154, 90, 95,138, 18, 30, 32, 2, 64, 2,190,211, 93, 40,174, 88, 24, 47,119,216,204, 63, 12,165,104, 37,
- 73,232,161,251, 35, 82, 50, 20, 7, 40, 50,239, 30, 44,122,167,191,113, 90, 37, 91,110, 53,197, 33, 8,117,187,170, 36, 62,168,
-146, 90,243, 35,160,148, 58,143, 13,253,160,251,180,243, 45,161, 13, 32, 74,173,126,183, 61, 59, 66,168,203, 49, 40,193, 46, 41,
- 37,215, 10, 5,125,167,195, 70,227,102, 54,138,179, 47, 0,203, 85, 80,228, 49,114,183, 76, 83,107,108,161,250,144,107,177,219,
- 87,208,144, 33,214, 86,232, 16, 88,173, 50,223, 91,136, 63,114,208,247,154,111,167,151,103, 66,206, 12,185,132, 6,221,254, 30,
-222,225,164, 10,140,197,148,117,235, 31,106, 67, 74, 92, 84, 36, 77, 70,253,162,159, 48,215, 29,113,148, 46, 11, 10, 29,211, 52,
-139, 6,107, 69,109,165,100, 72, 64, 2,169, 3,100,245,247,254,173, 86,242,215,237,130,210,240,152,160,201,213,197,225,204,125,
-184,150,246,221,158, 18,212,118,193, 81, 72,170, 84,106,174,250, 2, 69,118,215,153,230,204,217, 54, 11,209,104,106,161,170, 22,
-245, 17,207,232, 66,220,192,177,149,165, 49,150,146,135,150, 6,194,166,148,218,134,186,190,225,120, 18,226,114, 89,190, 99,157,
-216,240,137,213, 33, 81, 13, 17,221, 83,111,110,175,170,164, 86,181,241,214,240, 71,111,185, 96,205,219,250,245, 91,210, 26, 80,
-237, 82, 65, 0,109, 65,182,184, 67,174,198, 76,187,173,147, 28,181, 47,189,138,150, 15,212,154, 82,148,246,107,172, 66,236,152,
-247, 68, 12,206,182, 94, 25, 1,149, 1, 40,208, 31,110,185,185, 48, 13, 87, 89,199,152,151,251,185,205, 5, 44,125, 46,128, 2,
-135,135, 81,167,121,128, 37, 56, 2,184, 93,198,167, 68,115,180,158,230, 79,210, 82, 58,124,117, 44, 45,117, 4,162,181,191,107,
-188,194, 65,147, 25,149, 58,159, 18,208, 42, 63,138, 83,191,234,212,134, 65,112, 2, 23,155, 70, 64,252, 91,139, 87, 24,161,113,
-110,204, 17,228,201,140,181, 48,243,106, 79,136, 82, 8, 32,234, 25,192, 79, 73, 7, 9,192,148,251,225,127, 92,188,183,199, 19,
-153,111, 41,113, 25, 61,129, 39,181,108, 93,129, 76,174,194, 40,123, 37, 54, 9,175,255, 0, 40, 21,172,111, 45,232, 92, 60,183,
-148, 7,151, 35,220,116, 79,119, 86, 15, 31,245, 95,196,156,187,118,130,184, 14,155, 69,241, 84, 74,224, 92,212,132, 18,127,186,
-219,160,246, 47,221,184, 39,217,175, 45,228,253, 17,155,130,229,183,199,198, 63,135, 85, 17,138,107,207,109, 55,121, 13, 63, 23,
-229, 97, 45,246, 20,211,216,124,117,148,140, 12, 9, 7,170,111, 68, 15,147, 91,221,199,228, 53, 44,170,158,106,233, 81,215,175,
-187, 69,211, 13,227, 69, 29,146,101, 7,131,223,146,255, 0, 40,220,222,117,100,183, 22, 58, 84,107, 90,120,234,216, 99, 29,186,
- 40,124,214, 83,183,124,198, 52,169, 48,220, 42,238,253,240, 7,225, 83, 77, 60,227,232, 20, 18,179, 84, 11,154,231, 47, 78,229,
- 23,163, 71,112,150,194, 19, 80, 14,194,137,174,156,113, 52, 77,222, 87, 28,140,233,251,188,183, 27,100,149,121, 4, 84,212,154,
-111,219,170,252,154,118, 50, 34, 18, 87, 59, 42,252,195,158,148, 45,217, 21,211,141,241, 73,247,249,113, 89, 15,203,187, 70,155,
- 45,107, 76,104,232, 97, 4,130,250, 18,104,132, 1,211, 90,175,255, 0, 97, 93, 34,127,161, 81, 33,131,144, 75,176,111, 20,249,
- 85, 9, 23, 35, 85, 51,199,191,152,134, 81,218,155,190, 63,128,225, 22,235,138,144,182,124,232, 86,105, 44,175,203,117, 5, 11,
- 79,114, 37,133, 81, 73, 52, 59,238, 52,209,251,139,151, 95, 74, 40, 29,180,140,191,153, 62, 21, 65,254, 80, 1,247, 42,235,200,
- 88,105,122,217, 41,196, 30,212,169, 37, 77,160, 29,128,246, 14,226, 78,223, 29, 97,169,177,138,108, 49,216,234,133,173, 92,124,
-204,107,108, 85,188,162, 37,133, 85, 32,123,247, 27,141, 75, 43,212,254, 80, 70,188,115,126,187,113,165,226, 63, 34, 97,210,126,
-211, 49,178,202,110,124,103,147,224,227, 42,238,162,135,237, 36,141,148, 58, 16, 72, 61,117,220,108,251, 49,174,141,149,150,148,
- 72, 33, 57,149,162,180, 93,113, 79, 86,118,167,249, 43,132,219, 67, 60,136,159,223,229, 88, 51,106,255, 0,105,101,243,187,146,
-237,169, 86,239, 71,112,238, 82,154,169, 4,210,148, 35, 94,187,133,157, 87, 51, 3,101, 58, 91,254, 42,251,251,227,226, 15,214,
- 21, 70, 94, 17, 7,116, 80, 45,201, 79, 90,238,110, 66,150,133, 51, 37,165,118,184,219,137, 40, 90, 79,176,131, 66, 14,187, 93,
-100,104, 66,173, 37,118, 51, 49, 46, 81,161,243, 40,168,108, 42, 73, 39, 97,182,145, 29,151, 17,230, 45,192, 89, 52,246, 34,200,
-206,102,196,196,109,119,103, 4, 59, 35,153, 19,130, 51,215, 25,143, 10, 48,196,118, 21, 71, 21,222,162,154,170,128, 0,107,191,
- 77, 29, 14, 60,141,190,108,133, 98, 69,163,187, 66, 73,232, 0,234,139,171, 14,118,107,209, 0, 94,237, 87,124,102, 76,187, 45,
-246, 58,226, 94,173,238,173,137, 49,157, 5, 43,109,104, 52, 32,232, 75,105,148, 36, 98, 67, 16,134, 33,139, 20,103, 35,212, 54,
- 45,148,218,237,215,174, 78,195, 45,121, 62, 97,107, 67,113,162,221,231, 46, 83, 46,184,150,135,107, 98, 98, 35,173, 40,146, 18,
- 0, 31,188, 27,142,186,118, 69, 88,217, 82,141,153, 20, 70,203, 35,210, 69,195,183, 77,192, 22,151,210,140,175,144,156, 67,117,
- 67,156,145,200, 89, 15, 41,220, 30,201, 50, 23, 82,229,217,192,148, 54,219, 40, 13,178,195, 45,138, 54,211, 45,141,146,132,141,
-128, 31, 19,189, 78,159,117,178,186, 91,165,255, 0, 0, 60, 7,177, 9,101,166,101,202,241,198,156,164,140, 12,220, 45,121, 21,
-180, 93,240,187,252, 23,108,151,187,105,117, 76, 56,228, 87,136, 81, 83, 46,162,165, 14, 36,164, 20,154, 31,235, 14,170,112, 17,
-157,115,142,232, 76, 52,135, 77, 15,129,241, 79,199,188,213, 39, 26,162,102,162,127,246, 84,176, 89, 47, 60, 21,117,185,221,237,
-153,233, 91,163,141,115, 59,108,121,223,115, 17, 10,242,211, 37,196,196,119,126,247, 0, 75, 69, 45,165, 78, 10,154,208, 80,230,
-243,107,151,167, 54, 28, 59, 37, 63, 56,255, 0,181, 56,137, 56,241, 44,123,244, 12, 1, 62, 58, 43,216, 72, 91, 23,109, 15,138,
-247, 19, 33,227,230,165, 42,235,201,220, 73,144, 97,235,117, 69,147, 34,217,114, 42,128,228,128, 59,148,218, 83,112,142,162,210,
-188,124,178,178, 71,195, 69,223,234, 24, 81, 1, 44,156, 59, 43,236,226, 90, 63,134,163, 79,115,161,229,199,214, 79,112,167, 47,
-147,177,156, 6,212,140,207, 24,226, 43,141,202, 26, 25,110,115,119,108,165,233, 18,161, 52,203,128, 45, 14,185, 30, 19, 77, 54,
-166,212, 8, 53, 90,251,104,117, 30, 79,168,167, 77, 94,109, 56, 51, 49,103,221, 50, 76, 88,244, 36, 0, 3,123, 93,147,225,131,
- 92,125,170, 95, 26,228, 60,207,149,248,154, 76, 46,114,178,100, 78,218,221,184, 49,121,199,215,136, 89,226, 8, 44, 65, 98, 42,
-227, 37,166, 16,227,141,164, 35,185,106, 53,220,154,110,116, 79, 17,234, 12,156,188,114,114,234,182, 66, 82, 18,143,151, 1,180,
- 68, 6, 96,228,105,215,199,222,165,190,136,217, 16, 1, 96,128, 95,204, 61, 43,139, 11, 57,203,208,243,207,242,124,199,151, 2,
- 53,208,219,108,237,196,122, 67, 64,169,109, 33,213, 72, 32,172, 0,106, 58,233, 79,157,227,225, 88,180,215,126,194, 88, 29,176,
- 98,124, 31,114, 11,251,108,124, 74, 19,245, 83,200,216,166, 75,115,197,223,198,109,215, 75,117,186,211, 99,137,108,103,252,198,
-134, 27,147, 34, 42,220,114,108,103,128,142, 74, 74, 86,219,224,164,248,138,107, 35,234,220,250,243,174,170, 80,132,226, 35, 88,
- 31, 51, 57, 26,144,116,236, 65, 71, 87, 13,145, 0,118, 68, 22,142,106,226,252,103,133,113,140, 75,154,241,140,157,136,110, 63,
-114,187, 89,110,150,177, 18, 44, 43,130, 31, 45, 33,101,167, 38, 33, 94,103, 96, 74, 65,237, 2,149,247,234,239,139,230,105,227,
-240,107,175, 34,171, 24,153, 74, 36, 48, 5,219,163,245,109, 20, 87,227,139, 91,115,232,137,240,238, 83,224,174, 57,229,140,110,
- 35,248,110,115, 7, 56,116, 49,120,178,193,184, 24, 5, 82,218, 90,200,105,105,104, 50,135, 22,149,148,144, 59,122,208,234,242,
-191, 81, 99,226,221, 7,199,184, 76,177,136, 44,229,250, 48,234, 93, 67, 28, 40, 64,131,174,138,175,115,255, 0, 28,114,190, 59,
-200, 87, 44,162,229,142, 92,109,248,189,210,226,235, 22,247,101,199, 88,108,186,251,165, 77,199, 82,211, 84, 7,104,126,130,107,
-175, 55,207,227, 47,174,195, 57, 87, 40,198, 82, 44,227,196,232, 61,254,196,102,226,134,113,188, 63, 34,115, 39,147,138, 76,183,
- 72,255, 0, 58, 55, 51,249, 74,173, 43,101, 98, 88,153,230,249, 31,111,228,145,223,223,230,124,189,180,173,118,213,121,196,179,
-204,242,246,157,238,204,218,187,179, 55,139,174,111, 82, 49, 48, 12,238,118, 87, 6,207, 10,201, 49,119, 59,146,223,143,104, 97,
- 17,220, 43,150,244,103,140,119,155, 96, 1,243,169, 14, 2,149, 4,244, 58,236,120,203,204,163, 17, 2,242, 36, 13, 58,145,161,
-111, 22, 43,187,212,205,243,136,185, 95, 31,130,204,236,226,193, 58,211,111,121,224,195,111, 92, 35, 56,202, 84,231,105, 87,104,
- 46, 0, 43,218,146,127, 13, 75,119, 15,145,141, 29,214, 87, 40,135,238, 25,119,114, 31, 94, 47,103,254,104,218, 59, 71,220, 31,
- 48, 19, 65,212, 41, 26, 18, 34, 91, 37,254,168,253,146, 75,120, 67,156,181,200,102, 46, 96, 44,109, 57,216,202, 86, 59,136, 61,
- 59,142,223,209,175,167,173,252,170,223,143,136, 18, 14,152,120, 36,152,237, 90, 99, 16,240, 62,105, 5, 74, 73,220,109, 90,235,
- 57,144, 14,229,188,196, 0,197, 18, 88,230, 49, 51, 34, 76, 71, 0,116,171,110,227,212, 87,174,155, 18,225, 54,218,132,100, 10,
-129,228,110, 53,146,213,225, 83,217, 21, 80, 87,152,138,116,212, 54,199, 68, 93, 54,232,189, 99,242, 17,117,132, 96,201, 71,107,
-227,101,160, 30,133, 59,109,241,210,135, 69, 13,228,200,162, 27, 21,130, 92,119, 91, 7,184,196, 61, 16,174,163,225,168,109,177,
-211,171,142,216,166, 92, 91, 82,223,177,161,148,154,150,192, 33, 96,123, 5,104,116,163, 55, 77,136,213, 9,101, 18,157,105, 33,
- 82, 19, 71, 82,161,185,241, 31,244,105,192,163, 15, 64,135,100,204, 51, 16,182,100, 39,228, 79,206, 9,246, 87, 79, 43,177,103,
- 82,150,118, 83, 58,222,211,241,199,114,146, 40,163, 77,182, 52,166,187, 5, 22, 68,216, 41,215,172,106,184, 90,148,251, 9,163,
-128, 20,169, 4,117, 52,211,204,144, 96,186, 88,101,214,242,242, 21, 25,207,220,201, 65,162, 65,232, 72,235,215, 81, 72,178, 44,
- 81,184,117, 67, 54,107, 58,163,220, 59,238, 64,125,179,155, 45,105,173,118,241, 53,208,214, 76,148, 85, 84, 0, 20, 23, 58,242,
- 47, 29,227, 22, 55,173, 87,103, 16,227,170, 71,107,105, 85, 40, 77, 41,211, 68,226,215, 41, 29, 16,249, 83,132, 34, 93,126,121,
-114,213,242, 27,249, 67,243, 97,176, 17, 13,107, 42, 77, 7,133,117,174,170, 4, 69,151,157,102, 76, 78, 68,132, 61,108,141, 19,
- 39,148,168, 75,184,177, 5,123, 17,231,130, 84,173,255, 0,100, 84, 3,250,116,204,140,143, 40,116, 69,113, 92, 92,115, 36,198,
- 91, 87,172,134,215,128, 99,145,204, 17, 50, 77,206,254,160, 74, 34,196, 87,106,156, 61, 0, 9,104,252,162,190, 36,234,186, 25,
-150,216,116,208, 45, 48,225,112,233, 12, 94, 69,115, 88,184,123, 40,200,207,243,139,219,202,180,218,191,238,227,180,234,150,239,
-193, 74, 85,119,215, 37,154, 99,211, 82,136,143, 5, 85,159,154, 44,142,248,235,211,221,187, 31,190, 12,178, 42, 28,126, 71,112,
- 47, 37,229,247,247,183, 80, 73, 79,119,141, 61,154,161,228, 50,167,104, 98,172, 42,227, 43,160,124,169,151,200, 55,183,120,219,
- 1,147,154, 74, 89, 84, 39, 18,164,199,108,148,119,247, 18,104, 55,160, 10, 62,205, 9,198,113,194,210, 74,168,229, 57, 31, 43,
- 79, 98,168,202,201,110, 51, 46,146, 46, 55, 82, 92, 98, 83,138,115,185,127, 82, 74,148, 84, 5,125,218,244, 42, 40, 21,197,188,
- 23,159, 93,105,182, 68,158,165, 17, 65, 98, 61,230, 31,100,103,194,100, 1,242,247,120,111,174,203, 68,200,133,160,183, 54,219,
- 35,201,144,106, 63,210,233,248,105,174, 2,145, 79,218,153, 77,197,128, 84, 0,119,216,124,126, 26,110,231, 76, 18, 94,151,110,
- 16,220, 14, 51, 84,172,111,174,109, 78,140,148,237,147, 38,108, 16,205,195,195, 96,175,102,163,144,101, 59,130,137, 26,126, 27,
-189,180,162,217, 61, 13,116,171, 42, 51, 21, 41,103, 98, 34,157,236, 34,134,187, 30,159,172,106, 67, 36,210,166,102,227, 86, 59,
-186, 60,171,148, 54,165, 36,138, 5,168, 4,188,159,120,113, 52, 86,187, 27, 19,161, 7, 66, 55,188, 33, 54,249, 10,110,197,230,
-170, 55,255, 0,139,116,119,145,240, 82,104,127, 72,215,124,208,185,229,168,231,108,179, 96, 15, 53,230,214, 19,176, 35,126,218,
-215,216,127,176,106, 66, 24, 46, 8,166,103, 21,250,144,229, 14, 56,138,152, 22,187,161,145,143,255, 0,251, 13,192,151,218, 72,
-246, 32,168,133,160,123,146,160, 61,218,201,242,190,147,195,206, 59,165, 29,178,241,143,225,168, 72,212, 36, 83, 86,223,234,143,
- 30,205,152,139, 19, 45,109, 86,169,172,184, 20,167, 73, 91,209,212,159,111,114, 71,114,127, 17, 79,126,177, 57,190,133,183, 24,
- 19, 76,183,143, 14,234, 27,177,203, 35,142, 51,176, 64,185, 94,110,249, 21,162,115, 51,236,247, 70,139,113,164,196,117, 14,162,
-169, 73, 32, 85, 4,239,238,214, 83, 35, 38,116,252,179,137,137, 67,126,153,212,238, 59,197,115,110, 54,231, 30,147, 80,227, 42,
- 4,126, 4,232, 11,249, 45,179, 1,119,244,161,114,177,233,238, 79,249,177,251,248, 65, 88,123,229, 88,240, 27, 83,109,116,243,
- 26, 41,127, 72, 20,142, 37,192,182,248, 79, 78,109,228,145, 49,106, 9,223,192, 19, 90,106,179, 35,144, 54, 55,189, 63,200, 1,
- 17,231, 92,106,169,176,224, 53, 17,125,168, 97, 10,140, 0,246,244,212,116,220, 3,174,121, 74, 31, 18,198, 46, 80,161, 34, 35,
- 14, 31, 62, 50,131,106,223,168,246,234, 73,220, 29, 56, 84,139,230, 68,114,239,138,185, 29,237,230,138,180,147,238, 26,104,176,
- 21,221,132, 45, 17,176,137,179,153, 67, 49, 63,198,198,242, 85, 79, 2,138,208,157, 50, 83, 73, 14,231, 56,221,203, 30,200,100,
-193, 73, 34, 28,192, 60,186,120, 21,141,180, 70,232,157, 84, 91, 74,245,136, 89, 50, 94, 59,181,127,152,177,249,207,194,202,225,
- 73,106, 76,121,176,221, 83, 47,180,180, 26,133, 33,109,209, 64,252, 14,149, 57,146,174,193, 40, 19, 25, 13, 65, 26, 17,244,165,
-180,166, 92,207,204, 67,157,222,152,212, 14, 64,179, 99,185,178, 18, 16,211, 82,178,155, 58, 29,150,132,127,117, 50, 32,174, 51,
-158, 63,180, 79,191, 91,172, 63, 91,230,152,181,155, 45,110,242,142,191, 88,101, 13,148,137,117, 0,162, 25, 94,189,185, 58,201,
- 38, 83, 60,119,141, 99, 24,197,213, 9, 64,143,114,178, 89,194,166, 36,173, 27,144,237,193,201, 52,219,216, 53,219,125,115,153,
-210,184,215, 89,241,140,117,255, 0,234, 37,114, 20,198, 29, 0, 72,206, 73,229,206, 69,229,220,130,219,147,101,151, 41, 87, 75,
-249,120,253,204,217,142,173,199, 18,148, 18, 64, 73, 81,249, 82, 41,176, 20, 3,192,107, 43,151,145,118, 84,205,150,204,202, 94,
- 36,186,155,114,176,120,135,172, 44, 79,145,241,182, 45, 30,166, 44,114, 46,183, 70, 91, 17,216,203,177,247, 26, 98,244, 99,182,
- 59, 16, 37, 33,255, 0,220, 73, 32, 80, 5, 43,181, 84, 29, 73,169,214,215, 3,214, 66, 81, 16,204,129,155,105,190, 58, 75,233,
-125, 37,240, 40,107,177,225,103, 94,171,117,174,243,232,214,231, 25, 82, 97,231, 23,212, 70,175,113,130,238, 54, 62,224, 4,245,
- 79,152,153, 94, 85,125,253, 53,107, 47, 80,241, 76,254,100,253,219, 53,251, 89, 11,253,179,254,111,130,235,183,122,181,225,126,
- 45,191,139, 23, 21,224,235,188,219, 31, 97,104,188, 94,115, 57, 9, 51, 36, 68,117, 62, 91,177,227, 49, 11,247, 81,187,146, 79,
-207,220,181, 80,208,234,182,207, 93, 81, 65, 3, 30,157,209,238,102,117, 35,184, 0,105, 31,126,190,228, 77, 88, 80,128,241, 95,
- 99,243,167,164,251,125,196, 95, 49,252, 54,251,114,191, 37, 10,125,187,101,254,227, 13, 54,150,150, 55, 29,202,136,215,158,234,
- 65,253,149, 82,163, 99,169,101,235, 60, 40,141,208,166,102, 94, 18, 35,104,250,181, 33,114, 28,116, 1,125, 87, 7, 19,250,134,
-189,242, 47, 53,228,217,110, 97,116,141, 11,147, 47, 56,237,222,203,136,203,121,109,195,137, 10,232,228,112,220, 40,236, 45,100,
- 33,128, 91,239,105,178, 84, 40,165, 10,154,154,154,110, 39,150,179, 51, 54,219,109,152, 22,206,185, 70, 7,160,140,136, 96, 7,
-134,142, 7,180,248,163,136, 96,186,184, 91, 16,204, 56, 51,140,115,137, 28,205,109,147,101,177,221, 45, 8,135, 18, 13,217,181,
-199,114,117,231,239, 90,114, 35,145,218,119,181, 78,121, 32, 56,165, 56,144, 64, 73, 34,191, 54,160,196,196,183, 7, 31, 39,245,
- 49, 48,132,224,192, 72, 54,233,184, 49, 32, 30,187,117, 36,141, 0,247,166,163, 92,219,151,176,206, 62,206,172, 87,200,208,166,
- 77,206, 87,135, 90, 96,167,190, 91, 40,182, 37, 19,241,214,227,169, 78,176,150,148,227,157,168, 89,249, 74,192,238,161,240,166,
-139,206,228,169,194,178,187, 35, 25, 74,223,211,194, 61, 70,223,154,176, 53, 12,229,129,232,227, 84,148, 79, 44, 98,247, 60,187,
-140,112,201, 86, 94, 62,188,101,110, 43, 26,142,200,184,217, 95,144,219, 45, 44, 77,149, 70,148,150, 99,188, 10,147, 80,163,243,
- 3, 66, 52,251,240,141,212, 99, 24,227,206,223,232,129,186, 36,176,249,165,166,145, 58,142,189,123,166, 33, 62, 56,190,193,141,
-233,163, 4,226,172,250, 74, 99, 96,249, 91,185, 35, 18,165, 59,186,109,151, 22,230, 71, 93,190,226, 64,220, 37,149,169, 73,115,
-218,210,214, 58,211, 92,163, 46,179,131, 70, 61,165,171,180,216, 9,255, 0, 44,129,142,217,125, 7, 67,255, 0, 41, 41,193, 5,
-122,219,103, 32,198,185, 22,203,132, 94,194, 91,187, 91,113,220, 82,217, 61, 44,184,151, 80,137, 76, 88,163,180,242, 66,219, 37,
- 42,162,210, 69, 70,199, 85,254,167,199, 52,228, 66, 18,252,209,170,176,125,226, 0, 21,212,209,191, 94,184,217,220, 31,142,184,
-247,154,165, 22,241, 59,110, 45,103,202,224, 20, 33,199, 20,252,200, 87,107,131, 83, 45,163,202, 74,187, 62,250, 50,130,123,148,
- 40, 20,218, 43, 65,171,203,242,177,141, 56,245,100,150,132,106,140,199,180,137, 76, 24,233,211,120,239,226, 2,225, 68, 10,204,
-164,229,156,173,135,230,249, 4,230, 89,229, 11,255, 0, 25, 92, 26,179, 76,113,196, 48,134,175, 83,238,151, 21,165, 40,113,100,
- 37,162,164, 45,109, 54, 73, 20, 42, 2,163, 70, 93,157,231, 93, 84,229, 32, 45,179, 26, 91, 75,179, 78, 82,159,126,207,168, 30,
- 14, 19, 74, 94, 96,220, 91,154,224, 24,175, 33, 30,101,183, 73,177, 97,119,251, 33,181, 70,129,120,105,200,170,184, 94, 19, 61,
-135,225, 57, 25,151,192, 83,138, 99,181,199, 11,137, 4, 37, 53,223,230,223, 63,133,137,118, 21, 25, 31,168,137,132, 37, 6, 2,
- 65,183, 73,193,139, 3,213,181, 46, 58, 15,122,236, 98,165, 94, 97,136,144,220,245,227, 22, 75, 46, 93,219,181, 42,218,236, 78,
-244,151,142,120,203,105,181, 51, 32,183,253,213, 48,161,112, 39,251,233, 35, 86, 66,232, 24, 14, 81,195,136,179,119,243,191, 40,
- 45,238,254,167,188, 36,203, 71, 2, 90,165,198,200,125, 56,200,144,176,226,217,151,127,251,146, 85,191,239,110,238, 40, 84,251,
-245,222, 34, 96,207,143,247,207,254,162,150,212,178,201,112,171,223, 29,219,153,187, 74,227, 75,222, 23,108,243, 75, 75,184,223,
-101, 73,144,195,203, 83,107, 90, 89, 72,122, 44,112, 20, 66, 74,186,157,129,219, 84, 60,134, 33,166, 0,156,121,212, 31,172,137,
- 32,251, 53,136, 81,204, 50, 83,255, 0,154,238, 42,124,221,106,124,182,228, 4, 82,135,163,155,251,127,208,213, 92, 91,100,191,
-213, 31,178, 73,137, 83,158,229, 14,222, 50,169,115, 86,191,156, 40,246,159,245, 78,190,143,180,232,180,152,240,100,121,197,252,
-170, 92, 75, 44,169,205,194, 2, 84,146, 78,234,173, 54,166,169,114, 98,231, 85,166,198,176,176, 78, 76, 10, 69,194, 77,205,171,
-234, 1, 76, 97,213, 71,169, 7,217,240,208, 99,170,180,109,193,211, 6,237, 32,222,162, 41,182, 15,124,166,232,146,147,226, 58,
- 86,191,142,186,162,137, 65, 18, 98,202,197,231, 42,113,108,134, 22,186,172, 15, 97, 27,233,104,203,167, 82,142, 49,135, 31,187,
-169, 31,106,231,106, 86, 59,210,161, 67, 65, 79, 13, 3, 51,170, 56,129, 0,200,255, 0, 8,147,118,178,173, 81,111, 61,175, 71,
- 32,167,205, 72,216,131, 94,181,233,166, 8,179,161,172,144, 44,203,131, 50,198, 81, 61, 14,201,182, 36, 46, 42,137,253,210,168,
- 66,125,157,167,168, 58,237,114,100,232,184, 75, 73,182,203,147, 51, 12, 57, 44,169,182, 85, 84,149,208,141,189,254, 31,163, 68,
-126,101, 44, 75, 35, 76, 78,101,170, 21,181, 22,166, 17, 85,164, 87,187,218,124,107,167,145,181, 15, 32, 74, 37,182,249,115,161,
- 21, 37, 37, 47, 39,109,186, 26,123,117,213, 17,138, 5,228,204, 81, 23, 15,222,182,138, 73, 27,158,221,180,148,213,220, 67,106,
-129,164, 99, 79, 49, 17,107, 77, 84,170, 16, 18,174,163, 66,220, 2,178,170, 68,170, 41,235, 52,222, 44,249,234,226,207, 81, 49,
-235, 86,197, 77, 55, 53,213,223, 23, 7,142,139, 55,205, 77,164,171,254, 85,114, 18,155, 13, 4, 84,141,193,252, 53,126, 34,218,
-172,116,206,171,135,141,253, 61,102, 28,231,125, 92, 91, 42, 20,197,138, 57,172,217,234, 29,168, 71, 69, 80, 19,177, 52,253, 26,
-135, 35, 46, 21, 7,238,143,227,120,171, 50, 36,253, 0,238,141,239, 89, 47, 6,122, 83,185,140,119, 9, 97, 57, 14, 98,164,121,
-114, 28, 72, 15, 16,241,219,180, 29,247,169,213, 52,197,185, 37,250, 5,176, 23, 99, 96,129, 0, 1,159,179,170, 40,193, 56,247,
- 36,185, 99,137,228,254, 79,150,213,189,137, 10,243,153,183, 19, 64,148, 30,128,215,199,225,160,239,144,128,219, 29, 74,189,198,
- 18,159,205, 61, 2, 99,113,188,246,243, 73,201,135,106,142, 5,157,186,150,228,237,216,174,221,129,168, 62,221, 85, 91, 29,131,
- 94,171,185, 50,208,145,209, 36, 61,109, 51,142, 76,228,180,226,112,164, 60,181, 91, 99,180,137,109, 37,107, 44, 38, 67,169,243,
- 85,218,146,123,107, 69, 10,235, 87,193, 84,213, 59,119, 94, 89,207, 92,103,119, 94,129, 40, 89,179, 72,138,154,134,251,162, 82,
-187, 10,237,240, 26,184, 39,178,168, 43, 67,118, 59,132,153, 37,200, 32,165, 7,232, 80, 52, 58,226,106,219, 38,193,148, 58,208,
-137, 37, 65,109,143,163,187, 99, 79,101,122,233,218, 46,173, 16,221,202, 49,183,210,211, 78, 22,251, 55,242,221, 82, 92, 65,247,
-111,184,253, 58,151,202,137,236,184, 36, 66,151,123, 62,184,150,191,218, 33,159, 56, 15,153, 76,170,169, 63,129,223, 80,249, 41,
-187,150,152, 89, 12,235,187,198,136, 45,145,181, 21,215,255, 0, 71, 76,148, 17, 53,203, 68, 87,102, 93,250, 34, 2,210,162,161,
-212,164,157,181, 12,163,170,157,209,158, 43,148,164, 56,150,174, 7,177, 99,111,154,180,210,101, 28,209,132, 73, 54,231,157, 14,
- 58, 72, 74,169,218, 65,168,253, 26,140,197,151,107, 44,183, 45, 80,217, 88,112,124,237,244,238, 29,116,210, 29, 17, 18, 19, 2,
-201,132,125,206, 38, 50, 55, 27, 47, 91, 72, 41, 81,160, 37, 59,120,251,180, 32,204, 49,158,215, 70,207,142, 19,134,224, 16, 6,
- 85,198,246, 41,254, 99,150,149, 42, 27,224,147, 86,136, 83,103,110,165, 10,233,248,106,196,205,213, 79,150, 65,100, 12,237,131,
- 57,181, 62, 69,181,109,220, 35, 36,253, 45,168,182,231,253,151, 41,250,142,155,230, 69,245,209, 72,107, 32, 58,234,199,249, 31,
- 34,195,110,105,155, 25, 82,173, 23,196,110, 29,101, 78, 48,178, 7,134,212,168, 63,136,211,114, 48,105,202,142,219, 98, 44, 7,
-196, 58,132,200,199,168,100,245,226, 95,204, 19, 57,176,177,252,171, 49,138,205,254,208,239,202,235,233,236,139, 56, 10,237, 69,
- 52, 60,163, 79,122, 1,247,235, 15,204,254,220, 98,228,107, 79,244,207,210, 71,197,212, 70, 64,171, 27,195,190,170, 56,107,144,
-213,222,221,221,168, 25, 26,143,154,109,151, 98, 35, 60,119,162, 66, 20,229, 27,112,255, 0,168,163,175, 43,229, 61, 33,159,134,
- 78,234,204,162, 59,128,255, 0, 98, 33,147, 13,199,188,219,225,148, 18, 20,212,133,133, 5,163,122,165, 84, 32,237,225,172,217,
-172, 71,216,155,181,108,114,201,116,106, 90,140,205,173,197,100,208,255, 0,164,118, 58,142, 69,136, 93,218,162,160, 88, 75, 29,
-206, 37, 63, 51,207,169,181,124, 9,166,158,238,150,213,221,102,198,100,198,138, 87, 49, 20, 8, 46,180,186,143,105,249, 78,155,
- 62,161,114, 81,209,123,145, 49,204,114,248,212, 85,244,114,141,146, 62, 29,244,223, 75,114,143,106,229,207,216,133,113,126, 36,
-185, 6,157,234, 74, 43,240, 29,195, 82,238, 73,112,202, 76,107,133,178,224,134,247, 4, 5,160,123,193,161,212, 83,154, 74, 62,
-209,139,219, 37,201, 45,202, 72, 83,225,144,234, 7,137, 32,105, 27,140,122, 36,182, 94,161, 91,109,246,175,189, 88,164,192,146,
- 21, 95,208, 52,250,238,145, 46,147, 58,132,199, 44,168,182,148, 42, 75, 96,149, 3,242,251, 2,143,118,167,158, 73, 92,218,136,
-172,118,139, 91,151, 87, 94, 0, 80, 37, 33, 40, 29, 41,255, 0, 78,161, 25, 71, 69,221,171, 93,214,211, 6,223, 30, 68,102, 40,
-151,156,115,181, 61, 0,246,211, 93, 54,186, 91, 84, 43, 46, 71,122,103,114,149, 87, 41,218,179,240,232, 53,211, 54, 9, 41,153,
-234,137, 29, 17,165, 70, 3,206, 33, 41, 41,246, 5, 19, 90,234, 74,173,209, 50, 75,150,239, 2,214, 84,204,117,164, 30,226, 22,
-225,247,215, 97,169, 13,169,172,234,117,251, 91,207,219,165, 62,242,123, 75, 13, 32,148,255, 0,162, 21, 84,126,173, 1,109,207,
-162, 91, 87, 37,170,228,136,143, 34,224,226, 79,156,162,150,212, 8,233, 84, 87,125, 19, 92,158, 65,210,218,160, 46,115, 87,114,
- 99,202,100, 81, 77,189, 71, 61,132, 21,106,105, 40, 99, 90, 41,184, 90, 18,134,163,161,177,191, 98, 77, 7,247, 85,177,208,230,
- 74,109,139, 90, 49,107, 69,170, 83,241,146,200,254, 92,239, 97, 2,149,236, 36, 84,145,165,250,164,182,173,249, 54, 28,184,145,
- 20,146,127,126,202,219, 44,147,251,104, 41,168,235,165,231,178, 91, 80,205,206,201, 34,217,145,199,184,180,179,229,190,218,170,
-221,118,173, 55,219, 78,134, 75,148,182, 45,151, 31,186,117,109,200,136,104, 16, 20,133,123,129,209, 3, 37,151, 60,181,178,227,
- 96,158,230, 62,244,136,226,132,252,132,251, 65, 32,215, 92,243, 2,143,203, 90,190,217,203,100, 55, 98,206, 21, 83,166,161, 71,
-199,185, 52, 3, 76, 22, 13, 84,130,181,166,241,143,139,110, 16,136, 54,196,119,222,165, 44, 56,240, 29, 67, 99, 96, 53, 38, 53,
-186,151, 93,216,200,121, 56,211,159,114,188,127,183,253,155,202, 67,222,102,223, 87,106,142,140,141,131,203,145,255, 0,154, 63,
-100,146,218,171,165,207,252, 91,221,126,165,125,127, 87, 93,125, 47, 53,121, 90, 42,225,255, 0,225, 31,224,255, 0, 23,246,191,
-139,248,106,171, 43,170,189,195,233,217, 90, 44, 47,253,215, 31,234,232, 62,158,154, 4,117, 87,145,252,136,227, 27,250,151,248,
-125, 61,127, 29,117, 4,184,121, 35,253,214,191,225,254, 29, 58,127, 78,153,217, 77, 5,207,194,223,251, 63,241,190,179,245,116,
-252, 61,218, 24,245, 69,228,116, 77,105,255, 0,192,123,248,158, 63,195,254,175,118,148,144,117,175,184,167,208,191,226,248,245,
-250,127, 29, 12, 58,163,165,209,114,100,223,224,151,254, 27,175,253,231, 79,195,223,162,224,162,159, 68, 21,139,127,189, 27,250,
-254,163,245,125, 31,244,106, 89,117, 81, 14,157,211, 67, 28,254, 17,254, 23,212,126,141,117, 64,161,114,223,241, 42,254, 23, 67,
-211,250,180,148,144,232,129,102,255, 0, 13,127,195,232,175,167, 67, 88,172,105, 84, 11,243, 4,255, 0,198,200,254, 31, 67,215,
-234,213,231, 19,249, 86,119,155,252,193, 86, 73,255, 0,225,215,252, 63, 29, 95,172,165,159, 66, 98,241,247,255, 0,118,251,135,
-251,243,248,146, 63,240,215, 79,168,255, 0, 23,253, 31,110,170,178,122,246,250, 86,139, 15,253,147,249,190,132,133,244,233,255,
- 0,215,189,191,252, 31,241,149,254,250,233,245,120,255, 0,167,255, 0, 62,136,187,253,190,255, 0, 71, 69, 7, 9,255, 0,200,
- 61, 62,158,169,223,235,175,253,215, 3,253,225,211,255, 0,154,191,192,245, 31,242,248,106,131, 7,243,118, 91, 14, 83,183,230,
-250, 58, 38,215, 0,127,247,127,139,215,252, 35,191,238,143,241, 63,192,253,143,244,191,187,239,208, 89, 63,239, 14,157,123,165,
-153,255, 0,199, 61,126,143,185, 85, 12,227,255, 0,172, 25,223,239, 31,172,127,226, 79,241,253, 63,239,189,250,220, 98,254, 65,
-247, 47, 42,202,252,231,175,210,164,108,255, 0, 65,250, 58,126,215,211,174, 30,170, 2,163, 37,125, 79,244,241,254, 15, 78,190,
- 30,253, 58,190,169,178, 92,242,191,194, 39,252, 95, 65,215,175, 95, 13, 78, 62,132,208,160,110,191,227, 15,241,186,127,237, 63,
- 86,167,138,147,235, 95, 97,255, 0, 13, 93,124, 58,252,116, 60,254,148,197,234, 55,248,195,240,255, 0,217,254,189, 70, 20,177,
-232,137, 49,239,168,127,188,186,254,199,211,248,235,165,117, 20,200,254, 18, 58,127,214,254, 39,227,239,212, 81, 82, 67,162, 40,
-196,127,195,159,226,245,253,175,163,240,212, 82, 82, 69, 75, 63,208,125,125, 71,209,211, 76, 43,167,170,178,220, 39,255, 0,212,
-132,174,157, 15,248,207,163,233,240,247,234,130,239,247, 86,183, 23,253,148,158,187,255, 0,188,159,233,245, 43,167,211,171,154,
-250, 5,154,183,243,148, 57,118,254, 50, 63,133,215,246, 62,191,250,186,124,148,145, 91, 47,191,248,111,255, 0,100,234, 63,223,
-127,194,233,253, 58,118, 47,230,239,244, 40,242,191, 47,226,149, 45,127,188,221,233,212,255, 0,187,190,159,195,221,236,213,159,
-241,170,170,159, 94,223, 66,158, 71,251,181,127, 87, 67,254, 43,248,122,128,117, 40,144,172,183,163, 79,225,218,191,241,223,241,
- 15,248, 15,252, 57,245,127, 71,183, 94, 93,235, 30,255, 0,252,126,191,227,234,158, 21,235,202,191,192,167,233,254, 11,127,208,
- 58,251,245,226,121,159,159,252, 63,249, 58, 39,197, 12, 65,250,155,250,127,197, 30,191,235,120,105,177,232,164, 61, 17, 37,239,
-253,207, 43,232,250,147,252, 63,175,234,211, 37,213, 66,122, 32,190, 74,255, 0,124, 53,254,178, 62,159,171,233,240,247,233,177,
- 76, 10, 47, 61,255, 0, 13, 31,235,250,209,244,255, 0,170,126,159,126,165, 10, 37,203, 99,255, 0,117,187,252, 79,165, 93,127,
-214, 63, 86,153, 46,171,133,101,167,255, 0, 21, 49,245,255, 0, 5, 93, 62,158,159,209,167,203,242,246, 77,250,215, 54,123,213,
-207,171,234, 79,211,244,105, 82,158, 23,187,111,241,213,211,233, 71,215,245,125, 62, 26,109,221, 19,151,219, 7,248,135,127,139,
-245,120,127,173,168,135,101,208,188,230,127,196,143,245,253, 73,254, 31, 95,199,223,169, 97,244, 36,135, 98,255, 0,188, 95,250,
-190,161,215,253,111,233,211,165,209, 52,169,199,191,140,158,191, 91,127, 87,211,248,123,181,216,116, 76,146,241, 63,252,106,191,
-249, 84,253, 95, 17,244,233,119, 74, 41,148,175,247,117,215,232,254, 19, 95,196,235,244,142,186, 7,252,125,212,161, 11, 78,250,
-100,253, 31, 80,254, 31,211,244,248,127,203,166,137, 63,152,117, 93,250,148, 28,111,240, 42,254, 23, 81,244,125, 95, 87,237,123,
-244, 95,214,163, 31, 66, 54,143,252,100,116,254, 0,254, 39,225,168, 39,221, 34,180, 92,127,111,167, 68,245,208,125,215, 10,236,
-228, 95,170, 39,215,245, 51,211,175,211,227,253, 90, 35,183,100,130, 14,203,127,222, 80,190,175,173, 95, 79,195,195,221,166, 71,
-170,112, 95, 98,255, 0,237,223, 31,218,250, 53, 44,211,148,233,255, 0,194, 7,175,240, 85,255, 0,194, 29,125,250,120, 76, 80,
-153,143,240,209,254,171, 63, 30,158, 31,215,164,158, 23, 84,223,240,205,116,255, 0, 14,231,250,255, 0, 71,252,169,169, 66,105,
- 66,234,255, 0, 22,143,226,127,132, 95, 79,171,234, 79, 95,127,179,241,209, 81,255, 0,106, 95,234,143,217, 37,206,235,255,217,
+ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,255,192, 0, 17, 8, 1, 26, 1,245, 3, 1, 17, 0, 2, 17,
+ 1, 3, 17, 1,255,196, 0,208, 0, 0, 0, 6, 3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 5, 6, 7, 1,
+ 4, 8, 9, 10, 1, 0, 1, 5, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 16,
+ 0, 1, 3, 2, 4, 3, 5, 4, 5, 6, 10, 6, 7, 7, 4, 3, 1, 2, 3, 4, 17, 5, 0, 33, 18, 6, 49, 7, 8, 65, 81, 97,
+ 34, 19,113, 50, 20, 9,129,145,161, 35, 21,240,177,193, 66, 51,212,209,225,241, 82, 98,130, 52,148, 53, 22,114, 36,116, 85, 25,
+ 10,146, 67, 99, 37, 54, 23, 24,162,194, 83,131, 68, 69,213,178, 84,132, 70,100,180,117, 17, 0, 2, 1, 3, 2, 3, 4, 7, 6,
+ 4, 5, 4, 2, 3, 1, 0, 0, 1, 2, 17, 3, 4, 33, 18, 49, 65, 5, 81, 97, 19, 6,113,129,145,161, 34, 50, 20,240,177, 82,
+210, 22, 7,193,209, 66, 21,225, 98,114, 35, 51,130,162, 36, 8,241, 84,146,179, 37, 53,255,218, 0, 12, 3, 1, 0, 2, 17, 3,
+ 17, 0, 63, 0,247,235, 0, 3, 0, 26,247,101, 92,147,107,146,171, 48, 66,174,225,167, 12, 84,190, 72,108,189,160,232, 11, 41,
+207, 78,170, 86,152,138,254,253,146,217, 77,212,116,175, 10,242,175,113, 45,141,155,227,190,187,106,171, 78, 52,231, 78,243,147,
+246, 15, 92,124,210,229,119, 49,102,108, 30,169,225, 20,177,234,168, 9,145,227, 33,167, 34, 2,124,165, 40,100, 4,186,205, 56,
+ 40, 85, 94, 39, 30, 43,211, 63,113, 51,122,110, 92,177,186,180,105,175,204,149, 41,234, 95, 52,123,214,190,147,219,186,159,237,
+198, 23, 83,196,142, 79, 72,149,116,249, 91,173,125,111,229,151,115,211,208,117, 94,222,220, 86, 45,217,103, 99,112,109,169,109,
+ 78,178,201, 72,113,137, 49,150,149,182,180,158,226,156,123, 70, 54, 77,188,136, 43,150,228,165, 25,106,154,213, 51,196,242,113,
+110, 99,220,118,238, 69,198, 81,209,166,168,209,187,137,200, 1,128, 1,128, 1,128, 1,128, 1,128, 1,128, 1,128, 1,128, 1,
+128, 1,128, 1,128, 1,128, 1,128, 1,128, 1,128, 1,128, 1,128, 1,128, 1,128, 1,128, 1,128, 1,128, 1,128, 1,128, 1,
+128, 1,128, 1,128, 1,128, 1,128, 1,128, 1,128, 1,128, 1,128, 1,128, 1,128, 1,128, 1,128, 1,128, 1,128, 1,128, 1,
+128, 1,128, 1,128, 1,128, 1,128, 1,128, 1,128, 1,128, 1,128, 1,128, 1,128, 1,128, 1,128, 1,128, 1,128, 1,128, 1,
+128, 1,128, 14,110,234,114, 7, 91,114,121,144,226,249, 67, 44,179,203,223, 73,161, 9, 54,247, 35,182,160,173, 3,212,245,189,
+ 97,168,171, 93,105, 76,169, 79, 28,121,103,155, 48,252,201,119, 45,188, 41,165,102,138,148,113, 79,190,181,214,181,245, 80,245,
+111, 41,102,121,106,206, 34, 89,176,110,245, 93,106,164,215,117, 41,165, 41,235,169, 64,111,254,125,245,119,203, 59,199,249,123,
+119,110,201, 12,223, 18, 42,236, 86,164, 69,121,198,170, 42, 61, 64,208, 58, 73, 7,129,207, 30, 91,214,124,197,215,186, 93,207,
+ 10,246, 75,223,205, 41, 69,181,233,167, 3,213, 58, 55,151, 58, 7, 84,183,226,216,198,248, 57, 55, 25, 69, 63, 69,120,154,143,
+109, 78,170,250,151,129, 26,229,118, 98, 85,230, 3, 85, 92, 73, 83, 82,195, 70,138, 20, 58, 22,160,149, 16,126,172, 42,232,222,
+ 96,243, 21,168,206,113,148,224,181,139,150,216,251, 27,163,167,184, 63,188,249,123,203,151,101, 8, 74, 48,155,210, 74, 59,165,
+237, 74,170,190,241,195,151, 92,196,234, 19,162,205,196,211, 59,138,220,251,123, 70, 99,149,145,107,152,107, 22, 69, 61,229, 50,
+226,117, 37, 46, 1,218, 62,144,113, 39, 76,234, 93, 95,201,247, 82,189,109,248, 82,122,197,252,175,253, 45, 85, 39,246,104,139,
+170,116,222,145,231, 27, 77,217,184,188, 88,173, 36,180,146,255, 0, 82,116,109,125,147, 59, 75,103,245, 5,176,247,191, 39,102,
+115,158,194,167, 30,176,219,162, 73,159, 62, 34, 2,126, 37,149, 67, 96,190,235, 37, 42, 33, 58,192, 25,103, 67,150,116,199,209,
+190, 94,234,214,122,205,152, 93,176,244,147,166,188,159, 52,253, 7,205,190, 99,233, 23,186, 45,233,218,190,181,130,174,156,215,
+ 38,189, 63,224,200,223, 70,221,109,242, 47,174,174, 90, 59,205, 46, 69, 72,150,229,150, 44,131,110,159, 26,235, 21, 81, 36,198,
+148,150,144,234,155, 90, 73, 82, 85, 68,172,121,144,165, 39,199, 29, 63, 86,232,247,186,117,223, 14,237, 43, 74,170, 58,232,114,
+189, 27,173,216,234,150,188, 91, 45,209, 58, 58,170, 52,201,159, 59, 57,211,203,158,158, 57, 97,118,231, 31, 54,167,155,103, 47,
+108,141,161,251,148,224,203,207,150,144,183, 82,202, 79,167, 29, 43, 89,170,148, 6, 67, 21, 48,240,238,101, 92, 86,237,170,202,
+ 92, 17,115, 59, 54,222, 37,169, 93,186,233, 24,241, 98,124,138,231,175, 44, 58,147,229,125,179,156,156,156,184,254, 43,203,219,
+184,117, 80, 39, 22, 94,142, 92, 12,190,184,203,171,114, 18,135, 19, 69,182,161,152, 21,227,195, 11,155,135,115, 18,235,181,113,
+ 82, 81,226,189,225,131,157,107, 50,212,110,218,117,132,184, 63, 93, 57,146,236, 85, 45,131, 0, 3, 0, 3, 0, 20,159, 34,250,
+252,233,251,168,206,127,239,110,156,185, 92,244,233, 91,219, 96, 45,113,183, 4,153, 49, 21, 30, 26,100,181, 45,112,157, 97,149,
+186,160,181,169, 14, 54,106, 66, 52,145,192,156,107,231,116, 75,248,150, 45,222,185, 69, 27,156, 53,214,148,173, 76, 94,159,215,
+241,243, 50, 46, 88,183, 87, 43,127, 54,148, 85,173, 40, 93,152,200, 54,129,128, 6,157,253,190,182,175, 44, 54, 61,227,153, 27,
+234, 98,109,251, 46,193, 10, 77,226,237, 57,192,165, 37,136,144,217, 84,135,156, 41, 64, 42, 58, 80,146,104, 1, 39,176, 87, 18,
+216,179, 43,211,140, 32,171, 41, 52,146,239,100, 57, 23,225, 98,220,174, 77,210, 49, 77,183,220,184,158,117, 47,231,213,206,254,
+105,220,103, 95,186, 78,233,187,113,111, 94, 80, 91,158, 91, 42,190,184,244,180,189, 35, 69, 10,146, 26,183, 66,148,211,107,211,
+158,144,235,132, 84, 84, 14, 7,188,126, 74,177, 97, 40,228,229, 66, 19,124,180,254, 45,125,200,243,181,231,204,140,134,229,139,
+137, 59,150,215, 61,117,246, 69,175,123, 58, 63,229,231,243, 70,228,231,204, 6, 5,210,203, 99,182,202,218,188,225,176, 80,223,
+ 54,149,221, 73,113,214,155, 43,244,253,102, 30, 74, 80, 29,108, 57,228, 85, 80,133, 37, 89, 41, 32, 20,147,129,215,188,185,123,
+165,184,185, 53, 40, 75,132,151,241,236,126,223, 73,210,121,119,205, 22,122,178,146,138,112,185, 30, 49,127,122,124,215, 46, 79,
+187,129,211,152,231, 78,152, 24, 0,160,250,203,249,132,242,127,163, 93,205,177,249,119,185,155, 93,227,154, 91,246,239, 2,203,
+105,176,194,121, 13,186,204, 73,115, 17, 17,219,140,133, 40, 43, 67, 45,149, 81, 57, 85,197,121, 83,144, 82,147,183,210,122, 21,
+220,248, 92,156,116,133,184,182,223,122, 85,162,239,251,189,134, 7, 89,243, 13,158,159, 59,118,229,241, 78,228,146, 73,118, 55,
+ 74,190,229,239,126,186, 67,254,100, 31, 52, 11,119,203,221,253,129, 9, 91, 34, 94,245,184,239,229, 93, 90,133, 30,223, 57, 49,
+ 28,101,203,106,161, 32, 32, 32,176,250,156, 83,166, 96, 9, 0, 3, 81,219, 92, 90,242,247,151, 31, 84, 87, 31,136,160,173,210,
+181, 85,227, 94,245, 74, 80,169,230,111, 51,174,144,237, 47, 13,220,119, 43, 74, 58,112,167,115,173,106, 81,131,231,209,206, 66,
+ 42, 58, 88,222,148,255, 0, 78,119,255, 0,139,198,207,232,187, 31,253,203,126,239,204, 97,254,187,200,255, 0,233, 93,247,254,
+ 83,191,185, 79,190,159,230,103, 45,108, 91,254, 93,185,235, 68,203,205,190, 29,205,235, 84,186,250,240,220,149, 29, 15,170, 59,
+154,146,131,169,178,173, 38,169, 25,142, 3, 28, 62, 69,165,106,228,160,157,104,218,175,109, 31, 19,191,198,188,238,219,140,218,
+163,146, 78,143,149, 85,105,234, 36, 56,132,156, 24, 0, 24, 0, 24, 0, 24, 0, 24, 0, 24, 0, 24, 0, 24, 0, 24, 0, 24, 0,
+ 24, 0, 24, 0, 24, 0, 24, 0, 24, 0, 24, 0, 24, 0, 24, 0, 24, 0,212,185,238, 11, 13,145, 72, 77,230,108,120,138,114,165,
+177, 41,230,218, 42, 3,141, 53,145, 90, 87, 14,140, 28,184, 42,136,221, 4,162,238,221,171, 59,112, 63,180,161, 92,226, 61,186,
+162,180,220,185, 86,198,164, 50,185,108,176,239,236,221,113,148,168,173, 40, 87, 98,136,161,194,187,114, 81,220,211,167,111, 32,
+170,173, 7, 12, 48, 83, 67,113,238,189,175,179,224,162,233,187,110, 81,109,118,215, 29,110, 43,114, 46, 50, 25,140,210,158,116,
+233,109,176,183,148,148,149, 40,228, 5,106,123, 48,248, 91,148,221, 34,155,125,194, 54,151, 19,127, 12, 20,210,155,184,246,245,
+182, 90,109,247, 25,241,163,207, 93, 10, 24,125,246,144,226,130,141, 5, 18,162, 9,169,225,135,168, 73,170,164,196,170, 55,112,
+193, 65,128, 13,101,222,172,237,222, 27,219,174, 75,101, 59,129,230, 92,154,212, 18,234, 4,133,199,101,104,105,199, 82,209, 58,
+202, 18,183, 16,149, 40, 10, 2,160, 15, 17,135,108,116,173, 52, 18,162,210,100,198,133, 29,114,230, 56,150,162,182, 10,220,117,
+213, 4,161, 41, 25,146, 84,172,128,194, 37, 81, 67,225, 0, 24, 0, 24, 0,137,243, 7,155,219, 87, 96,218, 36,221,110, 50, 16,
+220, 24,138, 45,205,184, 72,214,136, 16,180,167, 90,213, 38, 64, 5, 41, 9, 72, 36,142, 61,134,149,194,165, 80, 56,239,156,223,
+ 53, 59, 98,175, 82, 54, 71, 32,172, 55,125,233,186, 66,190, 25,155,236,153, 50,236,214,175, 84,171, 66,157,102, 52, 66,219,238,
+ 50,131, 82, 53, 16, 72, 30,247, 2,118,236,244, 87,183,117,199, 79, 87,219,248,148,167,152,171, 72,170,155,142,252,200, 25,182,
+217, 34, 90,191, 7,147,126,188,177, 29,145, 50,238,206,226,152,204, 87,223, 13, 15, 81,108,252, 27,104, 10,111, 85,104,123,120,
+231,199, 22, 45,244, 13,218,185,105,232,255, 0, 18, 57,103,211,145,126,116,105,213, 53,183,169,171, 5,238, 68, 72,242, 35,203,
+178,200,102, 59,169,144,164, 62,128, 31,103, 93, 17, 37,176,144,230,149,165,105,243, 36, 40, 83, 58,241,198, 86,126, 3,198,107,
+ 90,166, 90,177,127,196, 92, 11,163, 20, 9,194,190,251, 17, 88, 92,153, 43, 75,113,155, 73, 91,142, 56, 66, 82,148,164, 84,146,
+ 78, 64, 1,134,202, 74, 41,182,232,144,232,197,201,164,149, 91, 57, 63,170, 30,190,189, 39, 95,229,207, 32,156,245,174, 10, 42,
+139, 43,112, 54, 53,128,163,228, 40,134, 51,212,127,237, 63,232,247,227,196,188,229,251,156,234,241,186,123,172,158,142,107, 95,
+ 84, 59,125, 62,206,211,220,124,153,251, 95,162,202,234, 42,145, 90,168, 61, 59,235, 62,207, 71,183,176,230,158, 84,109,241,190,
+ 57,207,104,176,110,213, 45,213, 78,158, 17, 63,226, 74,139,139, 94,162,165,133,149,103, 85, 17, 67, 92,121, 95,150,112, 86,111,
+ 85,181,107, 34,175,116,254, 42,241,116,171,105,250, 90,163, 61, 95,205, 25,207, 11,164,222,187,143, 69,182, 31, 13, 56, 42,209,
+ 38,189, 9,213, 28,125,243,157,234,239,168,183,122,203,220,220,133,183, 94, 46, 59, 95,149, 27, 37,198, 45, 54, 75, 13,170, 67,
+240, 89,121,191,133,109,239,141,116, 50, 81,234, 41,226,173, 73, 38,160, 38,128, 99,244,207,201, 93, 19, 22,214, 12, 38,163, 23,
+ 41, 45, 93, 22,156,168,187, 40,126, 91,121,243,175,101,221,234, 23, 45,185,202, 49,139,209, 85,170,243,171,237,108,189,126, 73,
+157, 67,243,135,169,222, 88,115, 63,166,158,123,220,101,238, 94, 94, 88,109, 41,220, 27,126,243,120,113,114, 95,180,204, 78,176,
+ 25, 76,135,170,189, 10,211,173, 41, 42,203, 74,169,145, 56,243,191,222,175, 44, 97, 94,192,147,113, 81,114,140,184,105,172, 85,
+ 84,189, 41,253,231,164,254,197,249,171, 58,207, 80,138,220,228,163, 40,210,186,233, 39, 71, 31, 67, 92, 23, 42, 29, 3,210,174,
+250,185, 89,172, 28,195,217, 94,162,141,154,231,182, 47, 18, 20,213, 78,144,243, 16,156, 72, 85, 56, 2, 82,162, 9,240, 24,249,
+ 87,246, 63,168,206, 29, 70, 88,245,248,101, 73,122,212,146,247,167,238, 71,214,255, 0,190,189, 58, 19,233,171, 34,159, 20,107,
+ 31, 84,162,223,185,175,123, 56,211,228,245,209, 63, 82, 29, 95,242,115,113, 51,177,249,191,120,229,199, 42,237, 87, 53,165,184,
+ 27, 97,107,109,217, 87, 55, 34,180,167, 31,144,166, 93,100,148, 37, 1, 1, 41, 36,215, 58,105,237,251,147,205,221,106,198, 5,
+248,214,196,110, 77,199,140,185, 42,189, 22,143,188,248, 43,201,125, 11, 39,168,227,207,110, 68,173, 91, 82,225, 30,110,139, 87,
+170,238,255, 0, 3, 95,127,117,101,213, 95, 47, 57,117,212, 95,203, 75,169,125,210,238,250,137,183,237,175,170,209,127,152,181,
+ 63, 37,151,173,151, 72,138, 35,214,114,174,150,158,101,122,180,184,162, 80,161, 64,115, 56,150,207, 76,198,187,115, 23, 58,196,
+ 54,110,122,174, 90,167,239, 79,179,137, 21,254,173,151,106,214, 95, 79,200,159,137,182, 58, 75,158,141,123,154,237,224, 64, 17,
+215, 55, 59, 54,231, 79, 92,146,232,227, 99,223,239, 59, 87,148,203,128,229,227,116, 76,217,105,112,223, 46, 6,109,250,112, 45,
+ 51,233, 41, 10, 82, 91,101,176, 82,128,160, 20,162,117, 86,130,151, 23, 69,179, 43,249, 25, 82,140,101, 58,210, 42, 95, 42,164,
+ 99,199,214, 81,125,122,252,113,241,113, 33, 41, 66,222,218,201,199,230,117,148,184,122, 23, 46,210,109,108,234,179,154,221, 44,
+243,159,104,243, 27,162,235,239, 53, 47,219, 77, 47, 6,247,158,220,230,101,190, 92,136,114,152, 46, 32, 40, 54, 18,167, 16,117,
+160,175, 61, 33, 72, 32, 16,113, 73,244,235,121,150,103, 12,165,102, 50,254,151, 6,147, 95,111,121,121,117, 75,184, 55,237,220,
+195,119,229, 26,252, 81,184,155, 77,125,189,133,229,202,190,106,124,193,126, 98, 29,108,243,159,165,139, 71, 56,238, 91, 67,145,
+ 54, 11,205,216,147,106,141, 17,171,139, 16, 24,187,187, 26, 36, 56,207,178,134,158, 64,209,146,212, 87, 90, 36, 3, 92, 98,229,
+217,193,233, 88, 88,249, 30, 2,157,201,197,113,110,149,162,109,190, 40,221,195,191,212, 58,198,126, 78, 55,212, 56, 90,132,159,
+ 4,171, 77,205, 36,158,143,211,169, 23,216, 29, 74,117, 83,242,171,235,107,154,125, 61,110,125,245,113,230, 86,192,177,109,105,
+251,142, 11, 27,150, 68,151,210,169, 72,181,162,229, 9,205, 46,184,226,155, 80, 90,253, 55, 52, 40, 5, 38,167, 44,169,111, 35,
+167,227,117,156, 43, 55,149,181,110, 82,154,139,219,217, 90, 63,230,138,120,221, 75, 43,161,231, 95,177, 43,142,236, 35,109,201,
+110,175, 26, 85,122, 59, 29, 7,206,134,122,113,235,251,230,109,176,238, 93, 92,111, 14,161,183, 14,214,188, 75,157, 41,171, 20,
+ 11, 43,239,166, 27, 46, 69, 93, 42,168,236, 62,203, 77,182, 23,229, 13,165, 30,232,169, 57,226,191, 91,234,120, 93, 34,234,198,
+134, 52,100,146, 85,111,142,189,244,126,210,207, 64,233, 89,253,106,211,203,185,149, 56, 54,222,212,184,105,221, 84,146,238, 57,
+187,146, 61, 79,245, 3,209, 77,207,169,190, 98, 42,226,219,253, 75, 57,115,103,105, 77,191,178,134, 93,109,187,196,187,204,177,
+ 54,123,105,208, 27, 38,172,186, 81,229,166,162, 13, 59, 49,209,103,116,219, 29, 69,226, 66,159,237,109,114,167,114, 74,139,222,
+142,103,167,245, 92,142,152,179,103, 90,221,220,162,223,123,147,171,247, 58, 5,219, 60,215,189,223,249, 26,174,101,202,230, 23,
+ 58, 31,234,241,246,156,185, 64,184, 91,154,156,245,129,114,125, 66,182,153,245, 3,254,161,109, 73, 0, 21,167,129, 53, 9, 32,
+ 80,165,220,117, 28,141,158, 30, 58,176,157, 26,116,221, 79,103, 30,239,120,182,178, 92,241,188, 79, 19, 37,228, 53, 84,210,123,
+107,201,113,225,223,238, 44,222,105,252,216,190,100, 55,238, 92,114, 70,193,182, 55, 28,221,165,205,187,187,151, 29,175,125, 84,
+155,116,102,191, 21,150,205,194, 43, 16,230, 58,137,177,212, 70,166,223, 1,101, 0, 2,160, 78, 40, 98,249,107,167, 70,230, 68,
+165, 21, 56, 70,146, 84,124, 21, 27,107, 71,220,104,229,249,175,169,206,222, 52, 99, 39, 11,146,172, 93, 82,213,213, 36,245, 93,
+231,169,223, 47,190,150, 57,153,211, 87, 38,174,187, 75,156,219,230,119, 49,119, 54,228,184,189,184,174, 23, 75,230,181,173, 14,
+203,133, 30, 51,177,208, 30,113,211,233, 2,193, 80, 4,254,177,200, 99,204,186,215, 83,134,109,229, 59,118,213,184,197, 81, 37,
+220,219,175, 45,117, 61, 95,160,244,153,224, 89,112,185,113,221,148,165,185,183,222,146,167, 61, 52,247,150,230,199,229, 95, 44,
+249, 77,181, 89,218,251, 34,211, 14,203,179,109,237,169, 49,160,194,101,168,209, 99, 52, 9,113, 65, 8, 64, 9, 74,106, 73, 63,
+ 94, 51, 46,222,157,233,185, 77,185, 73,243,122,182,107, 89,179,110,196, 20, 32,148, 98,184, 37,162, 71,150, 63, 42, 40,237,243,
+235,230,235,207, 14,169,185, 96,223,165,201,132,189,120,133, 22, 92, 96, 82,204,197, 93, 46,205,185, 29, 99,128, 62,171,113, 86,
+250,135, 97, 41,175, 17,143, 73,243, 83,250, 94,149,143,141, 63,249, 52,126,138, 39, 95,101,104,121,111,147,215,213,245,140,172,
+171,127,241,234,171,219, 89, 42,123, 82,108,245,207, 30, 98,122,193, 77,245,209,214,183, 43,122, 17,228, 60,254,114,243, 29,192,
+253,196,214, 14,221,177, 52,176,153, 23,107,154,219, 42,106, 59,102,135, 74, 69, 10,156, 89, 20, 66, 65, 57,154, 3,173,209,122,
+ 61,222,165,125, 90,135,165,190,197,219,252,151, 51, 27,175,117,187, 93, 47, 29,221,185,199,130, 92,219,236,254,111,146, 60, 89,
+231,111, 46,250,155,185,245, 41,200,222,177,186,177,150,177,204,238,113,110,214,174, 49,172,107,109, 77,139, 85,170,217,114,181,
+252, 19, 41, 66,148,162,218, 75,114,232,150,143,153, 9, 72,214, 74,212,170,122,214, 30, 94, 55,211,100,227, 99,175,130,204, 41,
+ 94,214,212,171,233,225,199,159, 45, 40,120,198,110, 30, 87,213, 98,229,229, 63,142,253,202,237,252, 49, 78, 52,244,113,225,201,
+113,214,167, 91,127,204, 25,186,173,187, 23,154,157, 43,111,123,210, 28,114,207,102,187, 95, 46,178,219,140,144,183,148,204, 73,
+214, 25, 14, 6,210, 72, 5, 69, 41, 52, 21, 21, 56,229,252,135,101,221,177,151, 5,198, 81,138,246,169,163,174,253,196,188,172,
+228, 97, 77,240,140,164,223,169,193,147, 93,145,255, 0, 48, 87, 75, 17,183,180, 45,145,206, 30, 94,110,141,149,100,150,164, 34,
+ 61,238,239, 22, 58,210,219,107, 94,144,252,136,232, 88,121, 45,142,210,208,112,248, 28, 82,185,228, 28,143, 13,202,213,200, 77,
+174, 73,251,147,225,237,161,126,215,238, 54, 55,136,161,118,221,203,105,243,107,222,215, 26,122, 42,122, 33,182, 47,123,123,114,
+237,248,123,139,106, 73,102,102,219,158,203,115, 32,204,134,180,186,195,236, 60,128,227,110, 54,180, 18,149, 37, 73, 32,130, 13,
+ 8,199, 13, 56, 56, 55, 22,168,215, 19,208, 97, 53, 56,169, 69,213, 61, 83, 55,240,209,192,192, 0,192, 0,192, 0,192, 0,192,
+ 0,192, 0,192, 0,192, 0,192, 0,192, 0,192, 0,192, 0,192, 0,192, 0,192, 0,192, 0,192, 0,192, 0,192, 7,158, 95, 57,
+222, 85,223,249,141,207, 62, 86, 58,221,178,116,141,156,205,155,120, 69,184,220,224,237,153,187,161,168,111, 73,128,150,226,133,
+196,135,167,239, 22,246,144,218,202,135,166,170, 57, 67,162,152,237, 60,175,144,173,217,187,170,173, 99, 69,185, 70,186,235,171,
+247,246,240,230,103,102,194,178,143,175,149, 74, 51,103, 88,250,247,229,190,203, 23,206, 93,109, 29,201,182,247, 98,118,166,199,
+176,238, 85, 64,133, 57,119, 86,108, 80,238, 19,219,144,184,170, 83, 46, 58,153, 10,109, 49,220, 90, 27, 65,113,148, 44,138, 0,
+156,107, 93,158, 29,217, 82,115,140,150,233,181,170,165, 90, 84,174,188, 56,247, 50,188, 85,200,173, 19, 90, 34,111,203,123,159,
+204, 19,153,215, 27,190,204,189,239,205,253, 15,101, 90, 54,190,234,191, 88,175, 80, 45,151, 59,100,137,210,237,229,183,237,209,
+ 30,145,120,128,211,242, 20, 92,113,109,149, 37, 8, 91,129, 58, 83, 74, 98,173,248,225, 90, 74, 74, 22,219,114,138,106,169,209,
+ 62, 46,137,209,127, 2, 72,187,146,210,175,131, 24, 55,190,226,234,231,157, 22,219, 44, 46,125, 53,191,230,111, 86,230,242,206,
+125,138,199, 30,201, 57,189,182,236, 20, 69,140,245,218,124,239, 66, 54,143,137, 76,205,122,202,212,146,149, 18, 0,166, 73,154,
+212, 49,172, 54,237,120,105, 82,229, 93, 86,234,235, 68,181,225, 65,178,115,151,205, 94, 94,131, 91,112,115,127,230,173,102,107,
+113,220,238,183, 93,231, 19,154,228, 94, 26,189,237,232,246, 59,204,168, 44,232,127,213,133, 34,214,227, 80,126, 1,134,134,148,
+ 33, 42,109,229,151, 2,169, 79, 54,107, 12,110,157, 45,169, 40, 56,233, 71, 84,159,122,122,213,191, 86,130, 57,221,215,141, 78,
+145,219,221, 44,243,197,222,113,111,205,202,237,209,173,223,189,224,109, 29,169,114,182, 94, 57,145,181,237,247,105, 19,238,107,
+118,247, 44, 66,133, 36,152,140, 69, 44,175,211, 66,180, 54,170, 5, 32,168,100, 43,137, 62,161,107,194,130,166,216,185,201, 53,
+ 25, 53, 69,240,170,181,171,117,254,101,165,106, 91,159, 55, 69,197,122, 68, 57,121,206, 14,120,236,110,111,108, 93,200, 38,243,
+ 6,237,211,195, 77,219,219,230, 75,155,150,195,124,149, 37,141,197, 38,193,123, 68,136,237, 70,248, 33, 40,180, 38, 8,122,195,
+ 13,169,134,220,208, 18, 70,162, 10,223,198,181,114,212,213, 45,171,154,237,163, 95, 45, 99,173,107, 74,210,188,117,106,162, 70,
+114, 77,113,167, 63, 77, 24,142,207,220, 29, 91,110,157,141, 59,126,222,174,251,190, 38,231,219,214,126, 94, 93, 44,208, 3,114,
+163,183, 46,117,203,116,220, 24,187,166, 92, 85,179, 89, 4, 67,105,160,227,107, 4, 33, 36, 18, 1,161, 11,118, 24,208,154,138,
+ 80,164,156,211,238, 74, 42,148,124,181,173, 24, 69,205,170,235,165, 62,242, 26,173,209,207, 84,238,171, 54,254,187, 69,222,211,
+249,191, 35,104,220,236,124,192,159, 38, 54,230,131, 19,111, 92,165,239,123, 23,196, 11,122,225, 67, 89,248,118,153,101,197, 20,
+ 64, 10, 82,217, 1, 90,133,117,226,215,135,103,107,138,112, 80,222,156,126, 86,228,148, 37, 74,213,241,175,226,224,253,131, 43,
+ 42,215, 90,211, 94, 58,106,190,218, 12,251,154,221,207,109,205,180,183, 54,233,223,103,118, 94,239,106,217,123,247,107,237, 69,
+200,177, 94,212,197,205, 81,111, 41,153, 2, 52,216,147,227, 58,249, 11,140,225, 90, 19, 52,213,192,218, 66,138,138, 72, 50, 91,
+149,152,202, 49,142,196,183,193,189, 86,154, 81,180,211,167, 30,206, 21, 26,212,154,109,215,131, 44, 13,249,188, 58,184,113,183,
+152,218,183, 61,240,199, 54, 94,185, 94, 98,115, 10, 41,129, 53, 54,155, 85,185, 91,153,166, 45, 14, 89,157,118, 49,137,168,197,
+ 82,125, 53, 70, 91,133,109,122,138,118,164, 18, 41,217,181,141,253, 74, 27,104,182,234,170,222,221,119,107, 94, 61,180,214,148,
+ 36,148,167,202,181,231,237,210,135, 79,116,169, 31,125,217,158,230, 54,205,222, 51, 46,183, 11, 37,139,119, 72,183,109,121,155,
+145,199,228, 74,118,210,229,138,217, 56,105,147, 32,107,121,177, 41,247,210,149, 84,210,133, 53,242,208, 96,117, 23, 9,120,114,
+138, 73,184, 85,211,182,173,112,229,162, 69,171, 85, 85, 79,180,155,243, 71,114,204,218,251, 69,233,150,214, 36, 74,185,186,164,
+ 50,212,123,115, 97,217, 75, 73, 85, 94, 44,160,169, 32,173, 45, 5,168, 84,210,163, 25,196,196, 11,151, 91,109,206,110,238, 89,
+187,147,120, 66, 76,109,145, 97,145, 38,203, 99,219, 47,165, 43, 67, 95,117,233,191, 38, 74, 73, 82, 28,121,228, 56,161, 92,192,
+109, 84, 4,149,174,179,215,103, 14, 35,105, 82, 98,222,210,229,175, 40,182,218,173,251, 42,193, 2, 2,100, 15,133,141, 2,223,
+ 22, 59, 31, 18,226,198,148,161, 90, 64,168, 61,181,236,195,110, 94,157,199, 89, 54,253, 33, 24, 40,240, 84, 56, 11,168, 62, 73,
+116,203,106,230,173,197,187, 77,170, 77,194,228,133,164,220, 90,143, 53, 44,218, 26,184, 2, 84,250, 98, 71, 75, 74,242, 5, 26,
+100, 83,152, 56,234,176, 29,215,109,110,107,215,199,239, 51, 47,168,238,116, 46,191,151, 79, 49,246,110,214,221, 83,185, 23,182,
+109, 44, 90, 96, 92, 26,118,248,211, 49, 20,242,146, 31,100, 33,165, 87,213, 82,200, 46, 32, 18, 0,160,242, 18, 5,107, 92,238,
+177,143, 45, 39, 90,255, 0, 2,124, 73,174, 20, 59, 3, 24, 37,226,139,235,191,101,115,167,126,114,242,223, 99,229, 70,183,173,
+ 43,125,193,125,133, 29,192,219,175,182, 82,146,205, 73, 32, 22,210,160,173, 73,174,102,157,216,243,175,220,126,149,212,122,134,
+ 44, 45,225,234,155,123,210,116,109,105, 78, 52,209,107, 85,232, 61, 31,246,219,170,244,222,159,149, 59,185,154, 73, 37,177,181,
+ 84,158,181,225, 93, 94,148,126,146, 57,210,183, 68, 54,237,138, 25,222,156,198, 66,101,110,172,150,211, 36, 85,184,245, 28, 18,
+ 15, 19,222,175,171, 17,121, 43,246,246,207, 72, 74,245,234, 78,255, 0,186, 62,142,254,255, 0, 97, 55,157,255, 0,113, 47,117,
+118,236,216,172, 44,123,229,233,238,238,246,148, 31, 86,124,169,220,124,128,231,187,219,138,198, 22,197,146,124,149, 94,172,115,
+ 80,159, 42, 28, 46,122,171,104, 28,198,166,214,120,119, 83,191, 30, 67,231,142,141,127,161,245, 71,126,221, 84,101, 45,240,151,
+ 99,173, 90,244,167,238,161,236, 30, 69,235, 54, 58,239, 74, 86, 46, 81,202, 17,217, 56,246,170, 81, 63, 67, 94,250,141,220,237,
+178,252,191, 58,235, 76, 13,201,214, 6,210,151, 11,155,150,248,237,193, 86,227,219,203,121,165,201,101,172,210,149,152,235, 74,
+136, 4,154, 5,165, 90,107,145,199,178,121, 75,255, 0, 96, 62,142,206,203,187,173,203,157, 22,232,183,218,185,175,182,167,138,
+249,195,255, 0, 93,214,117,237,246,212,110, 46, 77,183, 25, 37,216,249, 58,125,145,163, 3,113,116,225,211,191, 42, 46, 28,139,
+232,203,108,185, 97,218,247,131, 75,229,238,113, 42,157, 57, 26,116, 20,149, 45,110, 56,117, 39,202, 74,213,144,168, 0, 87, 28,
+111,238, 39,239, 37,238,189,110, 86,109,110,164,149, 28,157, 22,156,212, 82,224,159, 55,196,237,127,109,255, 0,101,172,249,126,
+113,189,113, 70,177,117, 81,141, 95,197,201,202, 79,139, 92,151, 2,213,232,139,167,123,206,244,218,187,159,113,206, 63, 7, 26,
+245,108,155, 97,183, 72,113, 5, 90, 68,166, 20,210,158,211, 81, 84,234, 34,148, 57,208,227, 67,246,107,161,207, 22,185,247, 23,
+205, 69, 21,205,164,211,111,208,218, 73,122, 25, 67,247,167,174,195, 45, 46,159,109,252,181,114,124,147,105,164,189, 41, 54,223,
+165, 20,135, 34,254, 75, 63, 48, 78,142,236,247, 20,244,167,207,166,108,183, 27,186,233,117,136,229,176,136, 79,161, 9,210,211,
+169, 67,166, 64, 75,169,170,134,160,154,210,153,227,234,204,239, 56, 97,103,201, 60,140,109,201,112,215, 95,225,161,242, 62, 7,
+146, 51,250,116, 90,198,202,218,229,197,109,211,248,234, 62,114,243,228, 35,184,152,229, 79, 51,164,115, 79,126,155,247, 83, 28,
+202,140,168,146,247,116,232,238, 60,136,222,180,230,231,201, 86,133,187,234, 56,183,156,111,204,181, 40, 30, 20, 3, 58,193,127,
+206,251,175, 90,217,111,109,171, 78,170, 41,241,210,139,150,148,236, 44, 99,249, 7,109,139,222, 37,221,215,174,170, 57, 53,195,
+ 84,223, 58,186,181,171, 13,125,249, 6, 94, 63,242, 91,150,235,229,246,251, 78,222,234,167,150,137,122, 52, 29,219, 22, 34,254,
+ 22,124,115,114,126,229, 29, 46,176, 92, 42, 66,153, 91,234, 9, 80, 38,160,144, 65, 20,162, 91,243,183,251,215,188, 75,123,172,
+221,227, 26,240,209, 39,173, 57,208, 46,249, 7,253,155, 62, 29,221,183,173,104,164,150,143, 86,214,149,229, 82,193,228, 31, 65,
+127, 49,198, 57,249, 98,230,231, 83, 60,242, 85,207,111, 88, 80,168,227,110,237,168, 76,195,131,112,101, 68, 41, 72,150,217,105,
+ 13, 40, 41, 73, 26,143,164, 87, 65,229, 82,120,227, 59, 59,172,224, 59, 18,181, 99, 25, 69,203,250,164,234,215,163,159,190,157,
+198,159, 79,232, 93, 69,100, 70,238, 70, 83,146,143,244,197, 81, 63, 79, 47,117,123,209, 50,232,223,229,179,185,186, 89,235, 63,
+155, 29, 77,206,220,140, 93,172,156,200,157, 58,231, 30,216,204, 69,199, 92, 17, 50,230,237,192, 54,165,169,197,133,233, 14,105,
+168, 2,180,174, 43,245,126,190,179,113,108,216, 80,167,132,146,173,120,209, 36, 89,232,190, 91,120, 25,151,242, 28,247,120,173,
+186, 82,148,171,111,183, 81,139,155,255, 0, 41, 81,206, 47,152, 93,235,171,173,225,125,143, 51,149,251,142,202,238,215,186,237,
+ 51, 25,196, 62,168,239,217,197,165,194, 36,135, 40, 13, 42,161, 68,101,137,236,121,161,217,192,142, 52, 35, 73, 70, 74, 74, 85,
+236,117,224, 65,145,229, 37,127,168,203, 42,114, 78, 18,139,139,141, 57, 56,211,141, 74,127,151, 95, 39,223,152, 87, 74, 50,238,
+251, 3,163,206,126,155, 15, 34,239, 18, 87, 37,113, 37,193, 14, 76, 96, 57,228, 43, 64, 41, 91, 97,221, 0, 2,182,203,117, 32,
+ 26, 12,177,173,147,230,204, 28,202, 79, 39, 27,117,196,184,167,163,255, 0, 15,105,141,139,228,222,161,131, 88, 98,229,109,180,
+223, 6,181, 95,227,222,168,108,116,255, 0,255, 0, 47,196, 77,149,183,121,157,203,254,115,239, 69,110, 61,169,204, 8,140, 53,
+ 26,115, 17, 75, 55, 24, 19,162, 75, 84,198, 38,149,186,227,169, 91,129,106,243,101,230,169, 28, 14, 25,157,231,169, 93,157,153,
+219,183,181,219,111,157, 83, 77, 81,174, 90, 18,116,255, 0,219,216, 89,133,235,119,110,111,141,212,181,165, 26,105,213, 62, 47,
+ 83, 66,205,242,173,249,149,114,127,150, 72,228, 70,213,234, 38, 45,151,167, 72, 10, 5,153,205, 65,248, 91,156, 72,193,239, 84,
+ 54,220,162, 67,141,167, 87, 0, 36, 1,217,195, 44, 58,231,153,122,125,251,190, 52,177,119, 93,125,245, 77,250, 63,192,101,191,
+ 42,245, 60,123, 94, 12,115, 54,217, 93,212,105,122,121,123, 75, 63,171, 15,148,119, 49,186,144,222, 28,150,223, 47,239,240,245,
+239,149,200, 97, 23, 57,119,120, 41,118,101,233,198,167,179, 53, 79, 56,228,101,180,218, 20,175, 72,143,112,241,237,198,119, 75,
+243, 68, 49, 45,223,130,181,255, 0, 45,105, 71, 69, 29, 26,231, 94,211, 83,171,249, 74,121,183,113,238, 59,186,217,165, 91, 85,
+114,163, 79,149, 59, 14,234,183,176,184,208, 89,142,191,125, 8, 74, 77, 59,192,166, 56,243,182, 60,255, 0,249,224,245,183,186,
+ 54,190,219,182,116, 1,211,137, 92,254,162,249,160, 27,183, 92,218,128,170,191, 6,205, 49,127, 15,232,212, 80, 33,201,134,168,
+169, 62, 86,130,212,105, 84,171, 29,215,147,186, 60, 37, 39,153,127, 75, 86,181, 85,230,215,242,251,232,121,239,158, 58,220,227,
+ 24,224,227,235,118,238,142,156,162,244,255, 0,187,220,171,220,116, 23,203,123,162,221,175,209, 79, 78, 86,142, 89,218,130, 94,
+220,138, 79,199,223,238, 65, 58, 85, 54,230,250, 19,235,189,158, 97, 34,129, 8, 29,136, 72,173, 77, 73,231,122,239, 87,159, 81,
+201,149,217,112,224,151, 98,228,191,139,239, 58,127, 47,244, 88,116,188, 88,217,142,175,140,159,108,159, 23,252, 23,113,208,138,
+ 58, 65, 81,224, 51,198, 57,182,120,121,204,222,118,117,111,207,254,185, 90,234,155,169,222,156,185,129,185,121,125,182, 20,164,
+108, 14, 95, 55,101,189, 69,133,108, 74, 29, 11,105,217, 37,216, 46,135, 93,170, 67,142, 81, 32, 45,192,154,249, 16,148, 99,216,
+ 45, 98, 98, 99, 97,125, 61,140,171, 80,148,190,121,238,139,111,185,106,169,216,187, 23,123,169,226, 55,179, 51,114,179,214, 78,
+ 70, 29,217,194, 31, 36, 54,201, 37,216,223,194,234,249,190,215,220,168, 54,252,202,250,230,230,151, 80, 92,220,228, 62,226,221,
+ 60,142,220,220,189,157,178, 47, 19, 39,218,173, 59,129,169,136,145,184, 93,122,117,173,227, 30, 16,126, 19, 4,173, 38, 50, 80,
+116,165,102,174, 39, 46, 21,151,203,157, 18,206, 45,140,136,195, 34, 23, 20,226,147,106,148,142,146,213,234,251,123,184, 50, 47,
+ 52,117,235,249,121, 24,210,158, 52,237,184, 73,180,164,157,101,172,116, 85,138,236,239,226,143, 89,249, 18,222,205,235, 3,148,
+251, 23,158,252,227,229,199,249,123,153, 86,196,203,151,106,181,110,168,105,114,239, 97,121,199,149, 21,207, 77,114,153,105,214,
+148,234, 25, 66,205, 18,154,141, 60,104, 14, 60,183, 49, 75, 14,229,203, 54,238,238,131,162,110, 47, 73,115,228,218,116,169,235,
+184, 78, 57,214,237,223,187,103,108,213, 90, 82, 95, 20,121,115, 73,170,211,238, 41,159,158,167, 38, 57,103,185,126, 92, 27,207,
+118, 95, 97, 48,157,195,181,151,107,186, 88,174, 14, 37, 1,216,210, 93,187, 70,130,164,182,181,102, 61, 86,222, 83,100, 87, 58,
+142,208, 49,181,228,156,137,219,234, 54,227, 23,164,170,154,237, 84,111,221, 74,152, 94,125,197,183,119,166, 92,148,146,172, 40,
+211,236,117, 75,222,157, 6, 63,148,159, 85,219, 31,151,125, 2,242, 63,101,115,114,236, 83,204, 13,219, 34,110,216,219, 54,196,
+130,236,167,154, 98,243, 50, 60,119, 10, 43, 84, 48,220,118,144, 11,134,137, 25, 36,102, 64, 50,249,159,166,206,238,126, 68,173,
+175,134, 20,147,124,181,138,111,214,219,224, 69,229, 62,171, 11, 93, 59, 22, 23,101,241,206,177,138,231,164,164,151,169, 37,196,
+232,137,189,106, 88, 44,220,236,219,252,138,220,155, 35,116, 91, 55, 30,233,149,112,131, 99,184, 75,143,104, 84, 25, 45,219, 26,
+ 47,201,149,170, 60,247, 30, 75, 9,111, 73,214,166,135,188,148,211, 82,128,198, 18,233, 78, 86,101,118, 55, 32,212, 82,109,107,
+ 85, 94, 11,229,165,125,124,153,208, 62,176,163,126, 54,101,110,105,205,180,157, 35, 71, 77, 91,210, 85,167,171,154,230,203, 19,
+152, 92,212,218,156,178, 54, 4,110, 95,137, 83,251,154,239, 15,107, 90, 89,129, 17,249,110, 57, 58,106, 92,113, 26,211, 29, 42,
+ 40,105, 13,180,183, 28,113, 84, 74, 16,146,165, 16, 1, 56,165,143,141, 43,219,182,211,225,139,147,171,166,139,248,242, 75,155,
+ 47,228,229,194,198,221,213,248,164,162,168,171,171,254, 26, 85,190, 72,169,237,127, 50, 30,157, 46,238,192,145, 25,155,250,118,
+204,200, 54, 11,219,247,183,172, 51,219,131,111,135,186, 39, 63,110,180, 61, 52,169, 62,171, 40,146,252,117, 4, 40,183,167, 77,
+ 22, 72, 65,213,141, 73,121,123, 34, 53,249,106,156,149, 55, 42,183, 20,156,169,219, 68,255, 0,135, 19, 34, 30,101,198,149, 62,
+106, 53, 23, 93,174,137, 77,181, 26,246, 85,174,206,254, 5,175,181,121,171,182,183, 67, 23, 73, 78, 37,235, 92,107,100,249,150,
+146,229,224, 53, 25, 50,190, 9, 72, 66,228,198, 58,212, 23, 28,169,192, 18,188,170,123, 6, 50,238,227, 74, 20,231, 84,158,154,
+210,188,159,121,175,107, 46, 51,175, 42, 54,181,210,180,230,187,187,198, 46,105,117, 51,203, 78, 81,238,150,182,118,228, 50,164,
+223, 29,177,110, 77,226, 90,181, 48, 38, 45, 16,182,179, 80,222,154,133, 54,210,189, 79, 89, 73,156,215,164,216, 73, 43,207,134,
+ 85,159, 27,167, 92,191, 29,209,162, 91,163, 29,116,214, 85,167,171, 71, 87,200,175,149,213, 45, 99,207,108,170,222,217, 75, 77,
+116,133, 43,235,213, 81,115, 55, 57, 59,212, 7, 47,185,230,245,225,141,139,241,161,118, 53, 91, 83, 51,241, 40, 18,161, 5, 38,
+237,105,143,122,138,166,190, 37, 9,214, 12,121, 40,213, 76,210,170,130, 6, 85,102, 94, 13,204,109,187,233,241, 87,131, 79,131,
+105,240,239, 67,240,186,133,188,173,219, 43,240,210,181, 77,113, 74, 75,143,115, 38,216,166, 94, 6, 0, 6, 0, 6, 0, 6, 0,
+ 6, 0, 6, 0, 6, 0, 6, 0, 6, 0, 6, 0, 6, 0, 6, 0, 6, 0, 6, 0, 6, 0, 43,206,161,122,143,218,125, 55, 90,237,
+ 87,221,237, 10, 92,139, 21,209,203,140, 84,202,130,150,214, 26,145, 2,201, 46,246,134,148,149, 41, 42, 42,125, 16,214,211, 65,
+ 32,213,194,145,219,139,184, 88, 50,201,109, 69,170,170,123,218, 94,234,213,247, 17,220,186,161,196,170, 39,252,211,121, 25,111,
+178, 73,220,174, 89,239, 46, 88, 89,134, 39, 71,121,152,205, 56,228,167,211, 26,197, 41,248,109, 50,133,151, 75,236, 38,254,215,
+168,130,145,164,180,239,243, 51,209, 94, 95,188,218, 85, 85,175,230,215,208,246,186,122, 81, 15,213,199,237,234,254,102,244,159,
+153,119, 38, 45,247,196, 91, 46,118,187,163, 86,153,151, 70,172,214,123,170, 17, 29,232,183, 6, 78,224,184,216, 36,206,100,180,
+225, 87,195,199, 54,199,100, 56,170, 87,209, 33, 64,113, 1,139,161, 93,106,169,170,165, 86,187, 62, 20,210,244,186,165,233, 23,
+234,163,246,244,208,222,220,221, 92,239, 27,197,155,147, 59,219,147,219,113,203,157,159,153,151, 25,236,126, 11, 49,200,177,230,
+ 61, 1,173,187,112,186,198,117,169, 14,186, 24,108, 40,198,109,226, 73, 85, 91,168, 0,168,129,134, 91,233,177,139,189, 27,146,
+163,182,150,188,171,185, 39,167, 30,116,244,138,239, 63,133,165,199,249, 21, 93,131,230,231, 97,252, 83,113, 46,249,183,100,173,
+180,205, 90, 44,118,135, 29,133,111,126, 44,107,102,219,181,206,186,177, 38, 84,167,189, 23,164,166,225, 56,180,210, 26,247,197,
+ 14, 64, 84,232,207,203,110,145,164,151, 13, 94,175,140,164,149, 23, 20,168,170,234, 68,179, 22,186,125,168,137,147,127, 51,253,
+150,189,190,214,250,115,100,223, 27,229,213,198, 85,250,203,183,238, 43,118,216, 36, 92,174,150, 39,254, 31,225,147, 19,215,245,
+ 26, 15,174,169,109, 78,233,162,129, 10, 9, 20, 81,171,253,130,123,182,239,142,228,147,107, 93, 19,231, 90,107, 78,225,255, 0,
+ 84,184,209,208, 96,190,124,206,175, 92,169,230, 46,245,216,252,229,217,238, 70,191, 89,102,169,203,125,146, 29,194,216, 30, 98,
+217, 19,110,218,110,114, 18,169, 78,190,150,165, 74,117,235,136, 44,180,208, 21, 78, 68,130,154,153,161,208, 85,232, 66, 86,231,
+163, 90,186, 62, 46, 82, 92, 41,162, 84,213,177,175, 43,107,105,175,181, 17, 99, 91, 58,238,178,223,121,121,121,230,117,143,102,
+ 94, 94,218,144,239,191,228,123, 3,206,187,106,105, 87,235,219,155,128,109,198, 88,140,217,146, 93,105, 11,144,164,146,185, 8,
+ 70,148,215, 35, 65, 90, 82,233, 14, 51, 80,115, 85,113,220,248,232,182,238,215, 78,206,202,146, 44,138,170,211,157, 61,244, 35,
+210,254,101, 86, 88, 23,109,209,182,101,114,246,252,173,211,178, 88,105,221,215, 25,137, 22, 85, 53, 10, 68,155,164,139, 68, 88,
+200,113,201,104, 47, 42, 67,204,160,182, 80,146,157, 46, 2,178,138, 17,137,151, 66,109, 69,248,145,164,248,113,215, 68,219,225,
+165, 23, 31, 64,223,170,227,163,208,182,249, 33,206,249,188,218,185,238,189,177,127,219,210, 54,214,244,217,215, 8,214,107,197,
+190, 84,152,179, 17,234,203,181,199,188, 50,182,159,136,165, 37, 73, 44, 74,110,188, 8, 53, 29,152,205,203,196, 86, 84,100,165,
+185, 73, 85, 61, 87, 6,215, 62,244, 77,110,230,234,233, 74, 26,125, 73,111, 7,118, 85,158, 21,205, 37,113,152,125, 50, 32,174,
+228, 10,195,113,139,170,101, 84, 82,147,146, 74,194, 10, 66,141, 41,152, 6,167, 12,196,138,148,245, 22,227,162, 41,174, 84,243,
+173, 27, 90,201, 59,116,238, 41,151, 22,182,253,250, 65,149, 98,129,106,248,116, 56,252,102,219, 12, 25,111,174, 82, 74,210, 30,
+ 82,106,141, 20,203,141, 77,105,122,230, 27,191, 42,199, 66, 21,119, 98,212, 71,126,245, 4,111,182,121, 12,236, 35, 46,207,186,
+125, 21,162, 37,218,235,112,114, 97, 14, 41, 58, 52,233,116, 40, 32,173, 36,162,169, 35,222,175,188, 18, 66,174,157,225, 82, 79,
+226,167, 33, 29,253,218, 45, 14,120,182,242,235,156,123,131,115, 61,179,236,187, 82,113,220,145, 86, 89,156,195,201,212, 88,112,
+100,160,126, 31,212,173, 15,106,138, 65,227, 92,111,188,152, 40,169, 54,146,101, 31, 13,214,135, 94,116, 63,210,221,239,147, 48,
+110, 27,239,152,200, 3,152,183, 82, 89, 75, 63,118,126, 26, 48, 32,208,122,101, 64, 21, 80, 10, 84,208, 12,243, 39, 28,247, 82,
+205, 87,105, 24,189, 63,137,123, 30,206,221, 95, 19,160,113,146, 90, 5, 43,145,225,128, 1,128, 6, 30, 99,114,207,101,243, 91,
+109,187,181, 55,204, 22,230,218, 93,204, 5,138, 45,181, 82,129,109,172, 81, 73, 80,239, 6,184,207,234,125, 43, 31,168, 90,118,
+175,193, 78, 47,183,239, 79,138,125,232,208,233,125, 87, 35,167, 94, 87,172, 77,194,107,154,251,154,224,215,115, 57,167,118,252,
+175,237,143,206, 83,219, 51,113,185, 26, 2,137, 41,102, 99, 9,125, 73, 29,193,105, 91,127,104,199,148,230,254,205, 99, 78, 85,
+179,126, 80, 93,142, 42, 94,250,196,245,172, 47,222,140,155,113,165,235, 17,155,237, 82,113,247, 82, 67,175, 45,254, 91, 59, 67,
+111,220, 90,184,239,123,130,238,197,165, 5,134, 52,134,153, 81, 6,190,100, 2, 73,246, 19, 76,105,116,111,218,108, 12, 73,169,
+222,147,188,215, 39,164,125,105, 86,190,183, 67, 47,173,126,238,103,229,193,194,204, 85,148,249,173,101,234,110,148,245, 42,157,
+ 37, 96,219,214,157,179,108,110,209,102,101, 44, 65,105, 33, 8, 66, 0, 2,128, 80,100, 49,234, 80,130,130, 73, 42, 36,121, 92,
+230,230,219,110,173,155,184,112,208, 96, 0, 96, 0, 96, 0, 96, 0, 96, 2,130,234,219,150,125, 80,238,174,100,109, 9,252,132,
+220, 50,173,156,191,187, 41, 59,119,152, 44,179, 52,199, 92, 11,107, 51,153,188, 38,227,111, 21, 5, 50,156,110, 59,246,245, 41,
+ 21, 85, 36,165,124, 26,168,218,233,185, 56,214,237,207,197,138,114, 90,195, 78, 46,141, 81,247,106,165,255, 0, 75, 92,204, 46,
+171,139,149,114,237,191, 6,109, 65,233, 61,105, 69, 85, 45,203,189,209,199, 79,196,159, 35,156,167,242,123,230,163,117,186,239,
+ 38, 46,123,150,254,204,185,151, 56, 77,182,109,147, 45,177,160, 75,183, 59,190, 96, 75, 84,139, 68,191,198, 20,244, 67, 22,198,
+219,237,173,179, 2, 63,168, 20, 82,125, 87, 40,165,110, 44,222,155, 21, 10, 66, 58, 39,197, 54,211,240,228,169, 37,178,142,179,
+163, 79,116,169,220,142,125,224,117, 89, 59,149,156,181,146,224,210, 77,120,145,117,139,223, 85, 72, 85, 53,178, 53,239,124, 95,
+185,233,201, 14,180,174,123,131,152,252,191,216, 76,238,107,223, 45, 46, 54, 24, 49,246,205,199,112,110, 40,105,109,169,240, 30,
+182, 58,220,120, 72, 85,201,213, 62,151,125, 7,212,243,179, 99, 48,237,117,164,186,242, 28, 1, 48, 97,103, 98, 70, 54,167, 61,
+145,154,147,220,148, 95, 7,187, 87,240,233, 74,170, 40,182,184,105, 22,181,159, 63,167,230,202, 87,161,109, 78, 80,113, 91, 91,
+146,226,182,232,190, 39, 90,209,213,201, 69,241,214, 73,232,167, 56, 54, 55,204,150,110,246,223,235,229,212,139,218,101,205,133,
+189, 19,101,184,181,123,181,179, 99,122, 4,173,174,236,109,179, 6,215, 13, 82, 16,252, 91,147, 23, 66,203,142,200,117,166,211,
+229, 89,245,148,149, 4,165, 49, 50, 58,122,133,189,234, 58, 56, 85,109,123,170,164,183,185, 58, 81,197,198,169, 36,223, 45, 7,
+102,227,117, 41, 92,187,225,185,106,174, 81,238, 91,104,224,212, 20, 85,106,164,165, 70,219, 73,113,248,157, 75, 95,167,171,111,
+ 85,220,152,218,156,208,103,117,195,187,111, 95,129,118, 61,207,150,246,251,221,226, 12,137,215, 34,189,177, 9,217, 81, 62, 58,
+ 75,195,210, 65,187,252, 66, 18,100, 40, 4, 12,211, 84,105,174,110,109,204,108,137,218,218,212, 42,154,155, 73,209,124, 78,142,
+137,107,240,211,135, 31, 73,169,129,111, 43, 26, 23,183, 41, 78,141, 56, 39, 36,219,248, 35, 85, 86,244,248,234,181,225,203, 74,
+ 30,102,108,238,151,126,117,219, 39,171, 11,223, 89, 82,249, 89, 2,251,207, 59,203,146,157, 92,189,193,115,219,210,216,134,100,
+209, 4, 69,109,187,171, 97, 1, 12,128,202, 51, 58, 91,242,140,122, 38, 71, 85,232,183,113, 99,139,227, 56,219,141, 52, 74, 74,
+180,237,248,123,117,125,231,153,226,244,142,189,103, 50, 89,126, 4,101,114, 85,214, 82,131,165,123, 62, 53, 77, 52, 93,218, 29,
+ 51,176,185,245,255, 0, 48,165,247,116,193,219,219,191,151, 91, 98,199,181,165,172,197,149,119, 65,180, 57,240, 40,113, 5, 2,
+ 70,134,110,210, 22,160,218,136, 81, 9,105,100,211,221, 60, 49,206,223,198,232, 16,131,112,187, 57, 53,193,124, 90,247,124,171,
+239, 71, 77,143,151,230, 73,205, 70,118,161, 24,190, 46,177,211,191,231,124, 61, 12,153,124,158, 54, 55,204,243, 99,110,189,244,
+142,186,238,151, 57,187, 82, 91,172,155, 52,125,203,116,106,237, 36, 77, 75,139, 50, 29,136,227,110,189,233, 70, 40, 41, 1, 1,
+ 65, 53,166,148,140,235, 83,205,153, 61, 54,234,183,244,137, 38,184,209, 81, 83,149,120, 85,253,155, 46,121, 55, 23,170, 89,119,
+126,182, 77,166,244,171,220,235,205,173, 93, 23,119,177, 29,228,187,101,189,197, 21,184,202, 74,143, 18, 70, 56,195,186, 56, 83,
+230,249,209,231, 62,250,137,231,167, 78,219,211,145,187,107,241,141,175,178, 47,179,174, 59,174, 75,115, 45,209, 62, 10, 59,215,
+ 11, 59,237,172,162,107,237, 45,202,162, 43,166,141, 37, 68,105,225, 82, 43,217,121, 95,171, 99,226, 99,229, 66,236,168,238, 69,
+ 40,232,221, 93, 37,216,157, 56,174, 39, 13,230,238,143,147,155,147,137, 59, 49,221, 27,115,110, 90,165, 69, 88, 62,109, 87,131,
+225, 82,192,249,130,198,249,146,237,152,155, 27,125,124,191, 19,107,152,205,144,206, 59,175,107,221, 20,194, 87,119,248,132,180,
+152,233, 34, 90,153,104,182,216, 74,201,210,251,110, 84,138, 18, 42, 49, 67,160, 62,156,212,225,153,185,110,166,217, 46, 92,107,
+194,175, 95, 67, 70,143,152,215, 83, 78,220,240,118,189,181,221, 23, 79,138,180,167, 26, 42, 45,121,166,114, 47, 63,182, 55,206,
+135,230,131,109,181,114, 35,157,219, 58,207,202,222, 69,183, 53,137,215,185, 17, 28,108,153, 78, 48,106,149, 56,216,153, 46, 67,
+190,152, 37, 77,182,144,132, 21,208,169, 85, 0,167,170,194,203,232,253, 25,187,182,103, 43,183, 41, 69,221,238, 73,119,189, 93,
+ 56, 35,144,207,194,235,157,113, 70,205,232, 70,205,170,213,186,241,247,182,251,150,138,188, 95,103,101,110, 62,141,229,114,227,
+148, 60,145,229, 87, 39, 45,159, 21,100,216, 59,166,195, 54,226,234,157,142,211,173,218,237,214,233,172, 59, 37,210,234,144, 92,
+ 81,117,240,165, 37, 21, 81, 82,201, 9,165,113,200, 90,234,158, 45,204,139,151, 94,183, 33, 42,122, 91, 90,123, 23,184,237,111,
+116,143, 10,214, 53,171, 42,177,181, 56,215,135, 4,154,175,126,175,222, 76,121,127,202, 61,237,184,186,180,221,220,249,230, 85,
+191,225, 45,150,232, 80,182, 62,192,105,110,178,233, 22,116, 33,187,157,202,118,150, 22,176,133, 76,156,180,182, 66,232,189, 17,
+144, 72, 21,206,173,252,152, 71, 22, 22, 96,235, 86,229, 63, 79, 4,189, 75, 94,202,201,150,241,241,103, 44,187,151,238, 42, 81,
+ 40, 67,253, 60,100,255, 0,234,150,157,180,138, 46,139,141,150,209,119, 84,101, 93, 35, 55, 33, 80,158, 76,200,133,228, 37, 69,
+151,208,149, 33, 46, 34,190,234,130, 84, 69, 71, 97, 56,205,140,220,107, 71,196,213,148, 20,169, 85, 90,106,113,111, 83,157, 35,
+115, 94,253,207,253,217,119,228,254,194,154,226,231,109,221,141,104,229,166,236,183,222,109, 86,253,191,182,110,219,114,225,116,
+144,185, 23, 59, 99,183, 6,157,144,220, 97, 34, 58,218, 64,129, 32, 18,146, 19,160,146,172,118, 29, 55,170,218,141,136, 43,151,
+ 22,146,155,156, 90,110, 82, 82, 81,209, 58, 81, 86,142,191, 18,245,156, 79, 84,232,247,167,145, 55,106,219,214, 22,212, 36,164,
+148, 98,226,228,235, 40,238,171, 74,169,165,182, 94,163,103,101,116, 25,184,238, 93, 65, 90,238,188,198,217, 54,215, 57, 79,110,
+188,243,138,239, 12, 92, 27,179,207,133, 17, 91,158,233,100,126,199, 36, 91,212,226,194,139,141,198,144,180,164,183,228, 41,243,
+232, 37, 53,101,238,183, 21, 97,168, 92,123,220,108,173, 42,155,218,167,185, 87,214,189, 60,170, 58,199, 64,148,178, 19,185,109,
+108, 82,188,213,118,180,183,184,109,116,245, 62, 90,115,166,130, 29, 43,244,137,190,246,207, 55, 57,113, 39,153, 60,164,141,101,
+145,183,246,118,238,218, 28,211,222, 82, 36,109,203,132,125,235,119,186,201,180,169, 19,220, 83, 18, 93,184, 74, 68,195, 26, 83,
+234,248,216,232, 82, 11,138, 73, 72, 4, 85,221, 79,170,194,118,174,236,188,222,233,194, 80,143,196,182, 36,165,167, 13,170,149,
+ 75,225,110,180,168,222,147,209,238, 66,245,175, 18,194,142,219,115,141,201, 86, 45, 77,183, 29,120,185, 58,210, 79,226, 74,149,
+161,217,246,203, 29,150,202,169, 43,179, 67, 98, 34,230, 60,102, 76, 49,154,109,162,251,234, 66, 90, 46,185,160, 13, 75, 40, 66,
+ 83,168,231, 64, 7,102, 57, 9, 77,202,149,117,161,218,198,220, 99, 90, 36,171,169,181,134,143, 6, 0, 6, 0, 6, 0, 6, 0,
+ 6, 0, 6, 0, 6, 0, 6, 0, 6, 0, 6, 0, 6, 0, 6, 0, 6, 0, 6, 0, 6, 0, 35, 60,211,228,255, 0, 47,185,209,102,
+183,237,254, 99,192, 23, 11, 69,178,231,110,220,113, 25, 82,150,144,153,214,185, 41,149, 29,103, 65, 26,146, 22,154, 41, 39, 37,
+ 2, 65, 20, 56,159, 31, 38,118, 27,112,116,109, 53,234,124, 70,206, 10, 92, 72,173,191,163, 94,157, 45,178,237,114,227,237,230,
+212,108,215,187,222,240,128,211,174, 58,227, 72,185,110, 6,157, 98,114,203,107, 81, 74,144,164, 60, 66, 80, 70,148, 81, 58, 64,
+210, 49,102, 93, 82,251, 79,226,227, 21, 31, 84,120, 12, 86, 99,217,206,190,211, 81,190,134,250,104,111,109, 88,246,159,249,127,
+ 85,155,110,237,251,190,197,181,165,201, 18, 22,180, 90, 47,136, 74, 38,182,165,169, 69, 74, 90,194,114, 90,142,164,149, 42,132,
+ 84,225,223,221,175,238,148,183,107, 41, 41, 63, 74,224, 39,129, 26, 37, 78, 10,130,215,238,141,121, 49,125,137,104,134,149, 94,
+ 45,200,219,235,136,229,133,118,107,237,218,222,229,180,194,179, 42,192,216,136,184,143, 33, 77, 36,195, 90,144,176,130, 2,234,
+ 74,170, 73,194, 67,169,221,139,124, 30,234,214,169, 58,213,238,214,171,180, 29,136,191, 87,255, 0, 3, 93,175,229,255, 0,211,
+ 54,220,113, 50,246, 93,182,225,183,239, 40, 82, 84,213,211,111, 95, 47, 22,217,237,163,240,200,182,135, 27, 18,226, 72, 67,197,
+ 14,177, 13,146,224, 82,142,183, 18, 28, 63,121,230,195,229,214,111,203,230,106, 75,177,164,215, 22,248, 53,201,183, 78,237, 56,
+ 8,177,226,184,104,110,202,232,111,166,217,219, 38, 47, 46,231, 89, 94,127,104,195,149,124,185,199,140,245,194,123,139, 76,157,
+196, 93, 51,156,245,214,233,120,168,169,213, 41, 10, 43,212,133, 80,164,130, 1,195, 87, 86,190,166,230,158,173, 37,193,127, 79,
+ 1,124, 8,210,159,109, 77,104,253, 7,242, 26, 29,206, 78,227,132,238,226, 99,122, 77,117,233, 19,119, 11, 27,175,113,181,119,
+144, 36,195,139, 5,246,157,156,220,176,250,155, 91,112,152,242, 21, 81, 37, 9, 41,210, 64,195,159, 87,188,210, 95, 13, 23, 45,
+177,167, 22,248, 82,156,223,180, 79,167,143,127,181,155,232,232,183,144, 72,218,211,118, 72,131, 59,252,173, 57,201,146,220,135,
+248,189,208, 6,229,205,189, 39,112,170, 91, 74, 15, 5,162, 67,115, 82, 28,109,212,171, 90, 41, 64,105, 81,134,127,116,189,185,
+ 74,170,170,156,151, 4,182,211,135, 10,113, 66,248, 17,165, 62,221,163, 93,203,161,126, 74, 65,217, 91,194,201,179,173,192,238,
+125,225,106,252, 26,233, 63,113, 76,187, 92,196,199, 27,159, 38,234,212,137,139,248,166,165, 45,209, 46, 82,214, 92, 67,201, 88,
+242,132,168, 4,164, 9, 35,213,174,185,193,201,233, 23, 85, 68,149, 52, 74,139, 74,112, 92, 41, 65, 29,136,209,211,152,231,210,
+151, 77,247,126,158,237, 91,154, 86,235,191,185,184,183,182,237,186,166,251,115,154,226,238, 14, 33,178,205,190, 61,177,150,144,
+229,214, 84,201, 75,210,212,116,146,167, 30, 57,154, 36, 37, 33, 41, 17,245, 28,229,144,227,182, 59, 99, 21, 69,195,181,190, 73,
+ 46,125,130,217,181,178,181,117,169,104, 92,173,118,235,196, 69, 64,186,176,137, 16,151,239, 54,242, 66,146,124,104,123,113, 66,
+ 50,113,117, 68,173, 84,230,222,123,116,143,204, 23,183, 97,190,114,120,179, 35,109,201, 72,173,170, 86,128, 96,173, 62,240,101,
+110, 60,208,244,148,124,193, 38,164, 18,105,149, 41,177,137,212, 35, 24,210, 78,133,107,182, 91,122, 13, 60,175,232,167,152,151,
+157,216,196,238,113,250, 81,246,196, 69, 7,211, 22, 41,106,174, 40,112, 31,118,235,199, 87,244,138,133, 7, 1, 92,196,151,250,
+148, 84,126, 23, 86, 54, 22, 29,117, 58,170, 28, 40,118,248,232,137, 5,180,181, 25, 9, 74, 16,132, 0, 0, 74, 82, 18,145,244,
+ 1, 76, 97, 54,223, 18,229, 5,112,128, 12, 0,112, 79, 38, 62,106, 28,246,230, 6,232, 22, 29,201,102,176, 51, 25, 71, 74, 93,
+135, 22,226,154,159,254,100,213,227,231, 78,181,251,185,212,241, 45,239,133,187, 47,211, 25,254,116,111,227,116,203, 55, 29, 27,
+151,187,249, 23, 95, 48,122,174,230,214,216,218, 75,191, 89,225,218, 87, 48, 32,173, 41,145, 30, 98,145, 80, 43,152, 68,148,159,
+183, 28,118, 15,254,192,117,123,183,182, 74,213,138,119, 70,117,255, 0,246, 22,110,244, 75, 81, 90, 57,123,191,145,194,188,224,
+249,245,117,167,203,155,172,219,117,191,109,108,183, 83, 25,101, 8, 83,246,235,225, 38,135,183, 69,213, 56,247, 30,143,231, 60,
+156,203,106, 78, 48, 85,236, 79,243, 28,245,235, 74, 7, 59,238,207,249,167,190, 99,214, 91,161,131,110,217,124,185, 91, 32,210,
+174,218, 55, 49, 60,105,250,183,193,142,215, 31,168, 74,226,171, 72,205,158, 67, 76,220,178,255, 0,205, 31,243, 21,156,200,114,
+102,205,229,218, 84,127,153,105,220,163,243,222,206, 25,115,169,202, 60,144,170,251, 28,155,255, 0,153,243,230, 6,191,123,104,
+114,248, 15,255, 0,229,110, 63,255, 0, 53,136,127,187, 79,177,125,189, 99,252, 86, 33, 59,254,104,206,191,162,127,253, 67,151,
+196,248,218,183, 31,255, 0,154,196,177,234, 51,124,151,219,214, 35,191, 66,228,233,163,254, 97,174,170, 57,198,251,113,247, 86,
+221,217,236, 58,179,164,136, 16, 47, 77,246,255, 0,219, 92,220,199, 77,209, 45, 91,204,116,155,107,209,254, 53, 43,222,203,148,
+ 86,148, 58, 98, 55,204,239,159, 15,160, 57,248, 77,131, 74,128, 80,164, 91,143,104,255, 0,108,199,161, 67,201,120,146, 73,238,
+159,181,126, 82,183,247, 25,246, 47,183,172, 83,254, 38,156,248,255, 0,116,216, 63,186,220,127,124,195,191, 68,226,126, 41,251,
+ 87,229, 15,238, 51,236, 95,111, 89,145,243, 51,231,190,157, 74,180,216, 59,255, 0,178,220, 63,124,193,250, 39, 19,241, 79,218,
+191, 40,127,113,159, 98,251,122,196,228,124,207,121,229, 21,149, 72,126,215,183,208,202, 69, 74,149, 26,224, 0, 30, 39,227, 48,
+191,162,113,127, 20,253,171,242,135,247, 25,246, 47,183,172,215,141,243, 77,231, 60,202,252, 61,191,110,184, 6, 94, 72,247, 3,
+159,247,204, 31,162,113,127, 20,253,171,242,135,247, 25,246, 47,183,172,217, 79,204,207,158,139, 32,254, 15, 96,169,255, 0,252,
+ 75,135,239,152, 23,146,113, 63, 20,253,171,242,135,247, 25,246, 47,183,172, 56,249,151,115,213, 70,191,132, 88, 63,186,220, 63,
+124,194,254,136,196,252, 83,246,175,202, 43,234, 19,236, 95,111, 89,131,243, 49,231,153, 63,225, 22, 10,255, 0,178, 92,127,124,
+193,250, 35, 19,241, 79,218,191, 40,159,220,103,216,190,222,179, 3,230, 99,207,122,127,132, 88, 43,254,203,112,253,243, 7,232,
+140, 79,197, 63,106,252,161,253,198,125,139,237,235, 2, 62,101,220,242, 80, 36,217,182,253,107,255, 0,237, 46, 31,190, 96,253,
+ 17,137,248,167,237, 95,148,119,247, 9,246, 47,183,172,201,249,150,243,200,103,248, 62,223, 31,255, 0, 18,225,251,230, 15,209,
+ 24,159,138,126,213,249, 67,251,132,251, 23,219,214, 96,124,204, 57,232,147, 84,218, 54,248, 61,226, 37,195,247,204, 57,121, 31,
+ 19,241, 79,219, 31,202, 31,220, 39,216,190,222,176,223,241, 52,231,199,251,166,193,253,214,227,251,230, 23,244, 54, 39,226,159,
+182, 63,148, 63,184, 79,177,125,189, 97, 87,243, 50,231,193, 79,248, 69,128,251, 98,220, 63,124,193,250, 27, 19,241, 79,219, 31,
+202, 31,220, 39,216,190,222,176,167,230,109,207,138, 80,218, 44, 20,255, 0,101,184,254,249,131,244, 62, 39,226,159,182, 63,148,
+ 62,190,125,136, 79,254, 38,124,246,109,117,110,203,183,190,136,151, 10,255, 0,254,230, 28,188,139,134,255, 0,170,231,182, 63,
+148, 62,190,125,136, 81, 31, 51,126,125, 42,154,237, 22, 15,238,183, 31,223, 48,191,161, 49, 63, 21,207,108,127, 40,125,124,251,
+ 23,219,214, 40,223,204,199,158,202, 21, 54,139, 0, 60, 50,139,112,253,243, 7,232, 76, 79,197,115,219, 31,202, 57,103, 79,177,
+ 7, 31, 50,254,123, 19, 67,105,176,255, 0,117,184,126,249,132,126, 68,196, 95,213, 63,108,127, 40,191, 91, 62,196,100,124,203,
+185,236, 77, 63, 9,176,255, 0,117,184,126,249,134,254,134,196,252, 83,246,199,242,142, 89,146,238, 13,255, 0, 18,190,122,127,
+186,108, 63,221,110, 31,190, 96,253, 13,137,248,167,237,143,229, 23,235, 37,220,100,124,202, 57,236,127,251, 77,134,159,236,183,
+ 15,223, 48,171,200,184,143,250,167,237,143,229, 19,235, 37,220, 27,254, 36,220,244,200,126, 21, 98,254,235,112,253,243, 10,252,
+139,137,248,167,237,143,229, 15,172,151,112,116,124,200,185,228,165, 80,218,172, 84,255, 0,101,184,126,249,134,254,134,196,252,
+ 83,246,199,242,138,178,229,220, 31,254, 35,220,239,255, 0,117, 88,255, 0,187, 79,253,239, 9,250, 31, 19,241, 79,219, 31,202,
+ 59,234,165,220, 24,124,199,121,218,120, 90,172,127,221,167,254,247,131,244, 62, 39,226,159,182, 63,148, 62,170, 93,192,255, 0,
+136,231, 59,171, 79,194,172,127,221,167,254,247,131,244, 62, 39,226,159,182, 63,148, 62,170, 93,198,127,226, 55,206,239,247, 85,
+143,251,180,255, 0,222,240,126,135,196,252, 83,246,199,242,135,213, 75,184,193,249,141,243,199,178,213, 98,250, 99, 79,253,239,
+ 7,232,124, 79,197, 63,108,127, 40,125, 84,187,140,127,196,119,158, 95,238,171, 21, 59,254, 26,127,239,120,114,242, 54, 35,254,
+169,251, 99,249, 67,234,165,220,100,124,199, 57,223,219,106,177,255, 0,118,159,251,222, 23,244, 46, 31,226,159,182, 63,148, 95,
+170,151,112, 63,226, 57,206,255, 0,247, 85,143,251,180,255, 0,222,240,126,132,196,252, 83,246,199,242,135,212,200, 9,249,142,
+115,188,138,254, 21, 99,254,237, 63,247,188, 31,161,113, 63, 20,253,177,252,162,253, 76,187,131, 35,230, 51,206,242,104,109, 86,
+ 63, 10, 70,159,251,222, 15,208,184,159,138,126,216,254, 80,250,153,119, 7, 31, 49, 94,119,126,181,174,199,253,218,127,239,120,
+ 63, 66,226,126, 41,251, 99,249, 69, 89, 18, 51,255, 0, 17, 78,118,210,191,133, 88,255, 0,187, 79,253,239, 7,232, 76, 79,197,
+ 63,108,127, 40,190, 59, 0,249,137,243,182,185,218,236,116,255, 0,102,159,251,222, 15,208,152,159,138,126,216,254, 80,241,216,
+116,252,196,121,212,120,218,236,149,255, 0,102,159,251,222, 23,244, 38, 39,226,185,237,143,229, 28,175, 54, 27,254, 33,188,235,
+ 60, 45,118, 79,238,211,191,123,193,250, 19, 19,241, 92,246,199,242,142,241, 89,159,248,134,115,163,253,217,100,254,237, 59,247,
+188, 39,232, 76, 79,197, 63,108,127, 40,120,172,202,126, 97, 92,233, 60,109,150, 74,127,179, 78,253,239, 7,232, 92, 63,197, 63,
+108,127, 40,120,172, 51,127, 48,126,116,168, 85, 86,203, 45, 63,217,167,126,245,134,254,134,196,252, 83,246,199,242,138,174, 49,
+ 65,243, 2,231, 45, 42,171,101,150,190, 17,231,126,245,132,253, 13,137,248,167,237,143,229, 23,196, 97,147,215,255, 0, 57, 15,
+ 27,109,151,251,188,239,222,176,191,161,177, 63, 20,253,177,252,161,226, 48,227,175,174,114,159,254,217,102,254,239, 59,247,172,
+ 51,244, 70, 39,226,159,181,126, 81,209,149, 67, 55,215,199, 56,148, 6,171,109,154,190, 17,230,254,245,131,244, 70, 39,226,159,
+181,126, 81,106, 40, 58,244,230,249, 63,225,182,127,238,243,127,122,194, 63, 36, 98,126, 41,251, 87,229, 10,135,255, 0,215,135,
+ 55,191,221,214,127,238,243,127,122,194,126,137,197,252, 83,246,175,202, 27,128,122,241,230,232, 21, 54,235, 63,247,121,191,189,
+ 96,253, 19,139,248,167,237, 95,148, 55, 4,255, 0,215,183, 55, 73,242,219,108,255, 0,221,230,254,243,135,126,136,197,252, 83,
+246,175,202, 21, 7,254,189,121,191,254,237,179,255, 0,119,155,251,214, 15,209, 24,159,138,126,213,249, 66,166, 15, 94,188,223,
+ 2,166,219,103,167,251, 60,223,222,176,126,136,196,252, 83,246,175,202, 21, 10,122,249,231, 13, 9, 22,219, 55,247,121,191,189,
+ 97, 87,145,241, 63, 20,253,177,252,161, 80,191,250,251,231, 23,251,182,205,253,222,119,239, 88,119,232,108, 79,197, 63,108,127,
+ 40, 84, 31,250,250,231, 31,251,182,205,253,222,119,239, 88, 63, 67, 98,126, 41,251, 99,249, 66,167, 15,244, 87,113,143,119,222,
+205, 70,152,160,164,184, 3,173, 30,218, 19, 81,143,206, 95,220, 14,155, 60, 91, 58,112, 58,251,113,217,112,239,219,190,207,143,
+123,217,166, 19,180, 41,244,200,251, 49,224, 54,114, 93,171,206, 70,150,234,232,121, 67,243, 13,229, 27,123, 23,119,201,118, 40,
+171, 82, 84,178, 64,225, 94, 56,250,143,246,251,171, 60,155, 42, 47,145,201,245, 27,123, 38,206, 22,220, 91, 65, 15,221,148,234,
+209, 83, 92,141, 49,237, 56,249, 59, 81,205,200,211,147, 1, 22,246,189, 52,166,128, 14, 32, 97,238,238,242, 45,244, 53, 92,150,
+ 16,221, 16, 56, 97,209,141, 88, 59,180, 35, 59,130,234,250, 93, 35, 58, 87,179, 23,237,193, 21,101,125,157, 3,208, 52,107,140,
+157,196,219,194,190,154,157,168,173,123,198, 58,159, 45,193,187,149, 68, 50,190,217,233, 69,169,146,220, 70, 91, 95, 16,132,215,
+232, 78, 61,207, 29,124, 10,163,107, 83,105, 73, 0, 84, 98,192, 26, 55,219,196,123, 29,169,251,164,147, 70,152, 66,156, 87,208,
+ 43,129, 42,129,207, 60,231,234, 86, 82,246,160,183, 35, 75, 82,229,168,157, 8, 57,134,193, 52,175,183, 14,185, 72, 33, 82, 42,
+ 24,157, 75, 92,246,218,210, 25,124,167, 73,214, 64,200, 19, 94,209,136, 93,232,143,218,234, 89, 60,163,235,222,223,121,220, 12,
+109,221,196,144, 25,112,134,253,108,178, 36,208, 86,184, 21,212,248, 14,118,154, 58,130,219,115,137,117,134,220,216,106, 11,142,
+234, 66,208,160,106, 8, 60, 49, 49, 9,177,128, 1,128, 0, 78, 0, 11, 76,176,253,160, 22,174,149,120, 97,200, 80,248, 0,201,
+ 25,103,195, 8, 56, 34,219, 77, 50, 24,116, 64, 38, 36, 20,202,120,140, 0, 42,223,111,118, 0, 21, 71, 28, 54,100,129,135,188,
+ 61,180,253, 56, 96,168, 81,180,234, 77, 14, 1,226,136, 0, 16,158,204, 42,116, 0,225, 21,224, 50,192,221, 64, 81,176,114, 74,
+112,130,161, 68,160,147, 66,112,131,204,164, 36, 26,215, 0, 6, 79,155,134, 0, 12,150,137, 57,112,239,192, 2,133, 0, 39,203,
+199, 0, 5,244,207,118, 0, 1,104, 1,217,133, 76, 84, 20,180,186,212,112,238,195,170, 56, 50, 88, 87, 19,133, 1, 68,182, 5,
+ 1,205, 88, 77,195,162, 40,150,171,252, 88, 55, 14, 7,166,145,146,135,210,112,110, 3, 58, 17,252,149,193,184, 12,182,142,252,
+ 27,128, 80, 84,240,225,195, 6,225,209,226, 30,137, 2,167,235,193,184,144, 3,207,144,195, 64, 89, 41, 39,134, 1, 80,179,105,
+237, 60,112,148,160,162,168,104,100,175,179, 12,110,162,139, 54,218, 72,212, 70,120,107, 99,226, 28, 33, 35, 8,216,227, 41,226,
+ 48,130, 10, 96, 0,171, 70,172,198, 0, 19, 9,167,151,183, 14,220, 45, 65,133, 0,101, 76,248, 96, 20, 72,144, 5, 70, 0, 48,
+162, 84,107,137, 4, 11,169, 53,166, 0, 56,191,163,238,103, 43,103,115,102, 20,105,110,255, 0,221,233, 89,210, 84,127, 84,231,
+ 79,163, 31, 11,126,226,249,118, 25,120,173,165,173, 25,220,220,182,183, 84,245,127,151,155,178, 22,237,218,173, 59, 5,196,172,
+ 56,142,194, 59, 70, 62, 37,234,248, 63, 71,145, 40,178,120,180,245, 56,183,230, 99,200,139,133,234, 18,247, 36,100, 26, 51,169,
+102,131,143,102, 61, 87,246,207,174, 43,115,217,218, 97,245,139, 59,150,227,205, 45,201,182, 83, 30,106,194,147,157, 78, 62,150,
+199,191,186, 40,227,110,170, 17, 91,246,219, 83,168, 82,130,114,236,197,203, 55,117, 43,201, 84,140, 74,179,252, 58,202, 22,154,
+167, 26,113,154,166,133,121,186, 13,147,118, 52,139,154,245,198,104,168,147,150,144,123,113,106, 18,155,228, 64,206,202,232, 51,
+148,171,179,165,135,228,180, 18, 50, 81,168,207, 30,147,228,252, 71, 47,137,170, 12,104,236,102, 90,244,210, 18, 56, 1, 65,245,
+ 99,215,160,168,168, 57, 1,245, 17,153,224, 56,125, 88,112,165, 97,207,253,251,110,180,237,119,109,233,125, 62,163,131,239, 2,
+ 85, 83, 65,236,195,162,185,138,142, 22,230, 94,255, 0, 93,202,240,244,149, 57,247,105, 58, 26, 73,224, 0,197, 44,155,196,240,
+133, 74,198,251,185,101, 79,116,249,179, 60, 51,198, 92,238,150,227, 0,219, 90,116,152,183, 20, 75, 74,143,168, 20, 21,168,158,
+208,120,226, 75, 87, 26, 98,220,134,135,124,244, 85,206,247, 55, 45,149, 27, 66,242,238,185,109,143,184, 90,142,116, 29,153,227,
+106, 18,220,140,249,198,135, 69,161, 90,133,112,242, 51, 60,112, 1,133,249, 79,208,112,248,160, 19,212,160,106, 14, 28, 40,100,
+172,147, 67,245,224, 0,220,114,192, 2,128, 2, 40,112, 10,132,214,154,101,223,133,139,160,161, 61, 37, 14, 7, 44, 59,114, 0,
+201, 97, 92, 78, 13,194,138, 37, 4, 10,118,224,220, 6,189,230,245,111,219,214,183,238,247,119,155,143,111,142,146,227,142,190,
+176,218, 18,145,149, 74,149,144,196, 82,148, 99, 26,201,146, 66, 13,232,138, 11,122,245,241,179,237,119,247,224,236,134,157,189,
+ 71,183,181,241,215, 58, 54,196, 86,217,143, 93, 37,212, 59, 45,198,212,226, 69, 15, 4,143,110, 48,115, 58,234,181,242,199,113,
+175,131,210,101,123,230,211,188,124,221, 61, 87,187,183, 57, 82,239, 50, 33,165,187,162,109,225, 50,229,126, 24,135, 36,199,114,
+ 51,160,150,208, 94,140, 22,150,220,169, 0,151,125, 52,234, 20, 5, 88,194,181,231, 77,183, 54,206,219,143,175,249,163,166,189,
+228,255, 0,246,119,219,155,147, 93,200,132,244,195,243, 46,219,220,219,186, 53,183,185,135, 25,171, 61,237,231, 93, 66, 18, 4,
+128,180,133, 81, 77,133, 37, 72,210, 2,120, 41, 85, 3,134, 67, 27,216,221,118, 55, 30,215,162,245, 28,197,206,159, 40,170,209,
+182,117, 70,219,189,219,183, 53,173,171,189,180,149, 64,122,186, 9,165,114, 52,204,103,141,155,119,163,113, 86, 46,168,169,114,
+212,173,189,178, 84, 99,154, 26, 9, 87,148,103,225,150, 36,220, 50,129,130, 72,236,166, 18,160,100,160,171,136,175,183, 11, 80,
+ 12,134,255, 0,147, 5, 64, 49, 74,235,151, 12, 34, 29,200, 21,195,134,131, 0, 25,244,211,219,199,219,128,116, 76,134,115,168,
+ 25,248,224, 28, 29, 40, 39, 35,153,194,212, 3, 33,154,251,112,149, 36,160,168,104, 36, 80,138, 28, 21, 0, 6,199,126,126,204,
+ 0, 2,205,123, 62,204, 40, 25, 67,102,180,236,241,192, 58, 33,210,198,172,251, 70, 1,244, 20, 12, 83,135, 28, 37, 80, 7,244,
+ 50,236,174, 19,112, 25, 74, 8, 57,240,193, 16, 22,104, 3,134,182, 60, 81, 9, 37,117,236, 31,193,132, 1,100, 36,171,217,134,
+177,241, 50, 19,158,100, 83, 8, 40,100,160, 30, 31, 94, 0, 14,148, 80,231,158, 0, 10,172,129, 29,163, 0, 4, 86, 73,195,232,
+ 40,154,149,164, 87,183, 0,162, 69,220,248,215, 10,144,128,170, 84, 59,176,228,128,198, 20, 2,209,117,213,219,128, 15, 49,182,
+165,217,232,119,181, 63, 20,172, 73, 90, 78,149,160,159, 34,148, 52,131, 81,195, 31, 47,117, 75, 74,229,189,175,130, 59,155,175,
+ 70,122, 21,242,224,231,253,206,241,107,110,195,122,144,167, 92,141, 86, 20, 86,170,147,164,210,184,248,219,247, 99,160,198,205,
+239, 18, 11,137,155,211,178,220,230,224,249, 22, 7, 95,220,196,182, 49,176,158,142,146,149, 45,228,132, 39,134,100,229,140, 79,
+219,174,139, 57,223, 83,212,185,159, 7, 40, 81, 30, 89,239, 43, 66,159,156,226,146,223,158,167, 33,226, 78, 62,158,177, 25, 66,
+136,226,178, 49,101,216,105,217,249, 93,124,220,136, 80,139, 28,148,138, 87,203, 94,202,140, 88,157,213, 6, 54,207, 79,156,249,
+ 26,110,244,221,185, 46,147, 27, 62,145, 13, 44,130,104,158,195,221,142,227,161,244, 59,153,144, 87, 19,248, 89,151,157, 97,217,
+155,131,226,139,203,148, 29, 32,193, 16,208,237,201,144, 50, 30,240, 31,167, 30,175,210,252,165, 4,147,145, 66,165,245,176,121,
+111,106,217, 49,195,112, 80, 2,169, 76,128,203, 29,190, 23, 77,133,133,160,132,165, 45, 36, 12,248, 12,105,142, 67, 54,251,185,
+ 11, 70,215,155, 62,180, 82, 26, 86,147,253, 34, 40, 63, 62, 4, 41,196, 92,233,223,215, 41, 5,232, 62,174,122, 74,114,236,237,
+195,175, 74,138,132,144, 85, 57,171,120, 93,164, 63,113, 49, 82,170,166,186,141,113,129,145, 55,192,187, 4, 52, 20, 84,215,129,
+ 56,167,196,178,144,235,103, 65, 4, 4,143,172,226,196, 7, 53, 84, 92,124,146,222,211, 54, 53,213,137,176,201, 75,136, 80, 36,
+166,180,166, 53,241,167,165, 25, 66,237,186,157,253,202,141,243, 23,127,109, 24,183,214, 84, 11,234, 26, 31, 72, 62,234,192,253,
+ 60,113,118,133, 38,168, 74, 81,239, 83,178,152, 64, 48,232, 53,240,225,135,197,128,145, 73, 73,207,134, 28, 41,148, 12,235,128,
+ 5, 16, 42,170,246, 96, 0,224, 84,211, 0,168,202,155,202,156, 70, 16, 80, 33,176, 50, 79, 14,220, 0,101, 72, 52,242,251,221,
+131, 0, 17, 78,109,115,143, 98,114, 91,106, 59,187,183,220,212, 69,130,144,160,195, 26,145,235,201,112, 38,161,182, 16,181, 39,
+ 82,143,182,128,102, 72, 0,156, 71,126,234,181, 26,178, 75,118,157,199, 68,121,247,207, 62,175,185,173,212, 38,250, 77,191, 99,
+ 41,240,212, 41, 5,232, 86, 24, 2,140, 71, 9, 82, 75, 46,201,125, 42, 91,110,184, 65,173, 64,203,128,203, 28,159, 82,234,122,
+ 57, 79, 68,141,252, 28, 23,162,142,172,111,123,160, 78,186, 15, 46, 46,220,245,183, 70, 97,155, 43, 13,191, 62,225, 29,130,226,
+ 29,114, 43,141,144,250,148, 66, 6,164,250,117, 42, 4,112,202,132, 99,131,159,157, 49,221,229,102, 60, 89,212,203,203,151,252,
+ 39,117,201,174,225,159,165,238,122,243, 62,209,186, 19,183, 88,109, 81, 36,195,144,136,239,219, 32,166, 89,109, 76,165,149, 39,
+226, 28,102,222,176,151, 93,208,170,235, 40,205, 34,153,154, 82,231, 85,132, 47,219,222,214,168, 78,143,155,118,205,221,149,116,
+101,239,202,174, 73,218,185,110,237,199,115,239, 27, 25,149,117,149, 45,139,140, 71, 47, 18, 90,108, 52,133, 46,181,105,210,218,
+ 22,132, 80,168, 80,160,148,174,137, 34,138, 10,199, 31, 60,185, 73,210, 46,135, 99,111, 6, 54,235, 57,170,240, 58,159,146, 91,
+198,209,184, 46, 46, 57, 99, 33,180,213,152,242, 82,243,200, 80,121, 9,101,197, 33,108,148, 39, 75,154, 10,104, 84, 59, 14,126,
+ 96, 66,123, 79, 33,245,137,187,174,196,157, 83,169,207,249,195, 2,212,236,120,177, 95, 20, 90, 69,174,208, 7, 37,102, 0,236,
+239,199,172, 83, 79, 89,230, 47,138,244, 10,134,187,134, 94, 7, 0, 24, 12,159,200,224, 0,193,176, 40, 14, 1,201, 6, 12,212,
+214,131,233,194,139, 67, 10, 73, 78, 71,135,217,135, 38, 53,196, 39,166, 65,225,150, 20, 40, 28, 39, 58,156, 0,144,116,164, 40,
+208,240,192, 56, 58, 69, 85, 65,151, 12, 35, 99,146, 21,109, 0, 10, 19,225,150, 26, 56, 56, 66, 72,168,192, 6,116, 38,156, 13,
+124, 14, 22,160, 96, 52, 79, 0,126,156, 21, 22,130,137,103,182,128, 28, 38,225,209, 14,148, 37, 25,246,246,224,168,166,106, 48,
+128,103, 74,142, 96,101,128, 0,150,179,207,183, 10,152,162,173,178,105,132, 30,133, 82,131, 76,176,149, 22,130,168, 69, 70,158,
+204, 35, 28,133, 40, 59,176,130,129, 75, 8,192, 1, 20,224,237, 56, 40, 6, 1, 10, 30, 24, 40, 2,110, 19,164,125,184,120,225,
+ 7,107,157, 56,215, 10,132, 11,166,153,147,135,140,114, 0, 0,240,252,248, 4,171,102, 5, 65,161,252,178,192, 42,111,152,108,
+ 3,170,143, 50,118, 59, 9, 84, 73,119,151, 69, 67, 73, 14, 84,228, 8, 74, 51,161,246,156,124,201,121,111,123,123, 79, 68,149,
+186,192,190, 58, 19,221,179,118,209,149,125,144,159, 76, 74, 89, 83,121,212,100, 6,175,183, 30, 21,251,143,209,227,126,123,105,
+169,206,218,179,178,235,161,102,117, 45,191,226,239,167,227,219, 18,225, 90, 35,169,167, 29,210,161,229,206,162,163,232, 63, 86,
+ 53, 60,129,229,184, 99,218,172,145,212,198,210,154,212,230,104, 48,227, 94, 55, 48, 67,226,136,112,144,174,218, 43, 82,200,252,
+195, 30,129,119, 14, 42, 47, 65,178,192,183, 46, 71, 80,116,247,202,189,171,114,114, 90, 82,132,168, 54,210, 28,161, 20, 37, 66,
+ 63, 15,166,184,227,122,164,156, 94,157,140,210,197,233,246,225, 23,167, 49,198, 46,206,177, 53, 18, 42,210,194,117,134, 25,236,
+238,108,119, 99,233,175,219, 27,112,159, 72,180,218,171, 77,175,123, 60,179,206,182, 84, 51,167, 78,105,125,195,164, 88,204,178,
+208,109,164,132,183,220, 49,233,113,130, 92, 14, 61, 42, 11,165, 0,230, 56,120, 97,212, 20, 57, 72, 53,192, 42,101, 97,212,166,
+238,141, 96,218, 74,128,178,125, 87,235, 68,142,224, 48,228, 56,225,206, 99,110, 88,210, 86,251,139,168,119, 48, 42,104,127, 62,
+ 43,223,153, 44, 52, 41, 41, 14, 25,183, 55, 93, 39, 58,158, 61,220, 49,133,121,213,151,173,170,128, 53,247,154,120,140, 71, 66,
+120,177,218,206,200,105, 65,225,154,129,160, 30,223, 12, 75, 23,169, 37, 9,142,222, 86,183, 80, 82,104, 6,100,247, 98,221,185,
+234, 71, 40,157, 55,210, 7, 58,209,104,220,236,236,201,206, 20,218, 39, 17, 29, 37, 68,144,151,141, 52, 28,242,207,135, 28,107,
+218,185,189, 25,183,173,211, 83,172,218,116, 0, 9,238,195,232, 87, 14, 30, 66,184,254, 95, 94, 23,107, 0,132,164,154, 39,134,
+ 36, 20, 1, 53, 52, 24, 0, 81, 34,130,135, 0, 0, 43, 51,225,128, 5, 16,107,198,160,247, 28, 0,140,212, 12, 35,116, 28, 70,
+249,165,204,253,169,202, 93,151, 55,124,239, 25, 9, 98,203, 13, 21, 41, 82,144,149,190,225,201, 12,180, 28, 82, 66,156, 89,201,
+ 34,185,225,183,102,173,170,177, 99, 23, 61, 34,121,189,204, 94,114,111,254,174,249,140, 35,151, 81, 26,255, 0, 48,168, 55, 29,
+ 46,185, 33,139, 21,168, 47, 74,150,203,129, 37,191, 81,194, 0, 86,149, 2,181,100,116,140,199, 21,213,122,139,164,155,228,116,
+ 24,184,201, 37, 21,196,236,174,130,122, 66,216,198,241, 10,205,102,128,147, 1,149, 37,215,222,113, 41, 46,190,239, 18,183, 20,
+ 0,170,137,175,128,236,199,149,121,135,169,221,113,107,119, 19,182,233,214, 35, 97, 86,135, 88,117, 81,215,119, 37, 58, 55, 11,
+229, 13,207,101, 92,247, 30,216,130,192, 99,121,222,237,134, 51,108, 90,155,122, 50, 28,208,195, 47,138,203,113, 40,117, 10,113,
+ 9, 82, 0, 7,222, 42,170,113,230,182, 99,105,223, 73,182,167,198,189,154,240, 59, 43, 29, 35, 51, 50,195,200, 77, 40, 46, 10,
+186,201,107, 87,234, 60,120,228,125,165,187,167, 58,110,247,158, 91,190, 93,183, 71,184,126, 29,110, 44,123,175,195, 5, 77,199,
+116, 21,142,214,148,221, 6, 71, 62,204,123,117,199,225, 98,252, 78,170,135,159, 98,198, 87,242,150,213, 77, 78,218,188, 91,175,
+ 60,209,189, 91,122,125, 74,132, 75, 51,108,166, 45,209,248,205, 42,100,183,253,100,181, 33,182, 26,251,198,210,186, 20,165,197,
+ 21,144,132, 13, 61,185, 99,203,242,174,206, 45,205,113,247,122,207, 79,191, 40,252,179,215, 66, 99, 59,145,252,231,233, 95,153,
+251,115,103,110, 57, 95,139,114,214, 92, 61, 86, 11,248, 97,108,202, 49, 99, 60, 20,245,190, 75, 72, 46, 54,146,210,159, 11,168,
+ 81,242,121,130,170, 20,145,209,126,223,245, 75,119,242,225, 53,164,183, 81,156,167, 94, 73,227,220,130,225,181,191,254, 75,149,
+180,233, 58,123,178,207,195, 31, 72,198, 91,181, 60,130, 43, 74,119, 10, 36,144, 64,236,194,138, 40,146, 1,161, 25,119,224, 3,
+ 6,156, 71, 12, 2,214,161,129, 0, 84,224, 28, 24, 34,162,163,221, 61,248, 5, 8, 90,160,225, 79,102, 21, 58, 8, 99, 74,206,
+ 95,159,142, 23,112, 25, 72, 32,241,243,119, 96,220, 42, 66,136, 73, 82,188,114,194, 54, 61, 42, 11,165, 52, 2,158,220, 0, 28,
+ 32, 10, 3,128, 84, 40,148,129,132, 30, 28, 54, 59,126,204, 35, 96, 13, 6,185, 28,176, 32, 12,150,146,159, 50,134,126, 24, 5,
+ 72,207,162, 73,200,103,227,252, 88, 42, 59,104,162, 25, 88, 29,148,193, 80,218, 29,184,198,185,241,252,187,240, 84,114, 66,169,
+141,245,225, 42, 59,104,116, 53,164,249,184,120,225, 42, 42, 65,253, 58, 15, 41,207,199, 0, 5,161, 25, 28, 0, 38,163, 90,225,
+ 80, 55, 65, 21,167,204, 84,161,151,126, 28, 55,113,150,178,168, 28, 56,224, 29, 23, 83, 46,138,166,152, 5, 98,106, 78,174, 52,
+166, 20, 68,234, 15, 76,140,184,140, 61, 14, 48, 82,161,195, 8,216,134, 20,154,154, 31,179, 10, 35, 85, 11, 78,206,223,104,192,
+ 38,211,204,136, 50, 28,178,217, 46, 17, 89,108,148, 8,238,209, 52,202,190,130,177,243, 34,249,143, 80,140,126, 15, 81, 63,233,
+239,114,166, 46,220,252, 62, 58, 74, 92, 70,162,217, 42, 34,132,170,180,227,195, 28,159, 91,232,235, 34,238,230,140,149,106,178,
+ 29,228, 93,174, 55,185,151, 43,214,105, 40, 75,204, 81,102,163,204,225, 9,225,145,161, 7, 26,152,152, 81,177, 5, 20,141,104,
+ 82,132, 30,209,120, 66, 57,158,108,170,112, 33, 67,211, 89, 3,133, 31, 72, 81, 3,217,168,253, 88,210,189,107,225,104, 72,222,
+212,235, 46,153,174,205,132,203,208,179,169,250,176,221,115, 57,172,145,245, 37, 52,199,155,117,139,116,175,176,232,113, 86,248,
+123, 73, 84,184,255, 0, 13,161, 35,220, 83,109,169, 62, 3,210, 72,252,224,227,233, 63,218,135, 94,147, 21,217, 41,125,231,145,
+249,238, 63,249,173,255, 0,149, 9, 35,187,242,238,199,168, 28, 40,170,105, 76,176, 8, 5,228,156,184,224, 20,231,254,177,157,
+ 50, 35,179, 29, 7, 74,208,133, 18,107,222,107,135, 46, 13,143, 90,156, 45,205, 9, 37,135,214,130,162, 77, 79,110, 51, 47,203,
+ 66,196, 72, 69,169,180, 60,234,205,120,156, 99,201,214, 69,251, 60, 13,175, 75, 75,180,196,177,212,145, 33,222,214,218, 82,117,
+ 30,220, 73, 66, 68,199,171,115,142,176,157, 45,154,107,247,189,152, 88,203,105, 43,141, 75, 75,146, 27, 90,100,251,212,123,193,
+170, 90,105,196, 22,208,156,202,138, 85,168, 82,190, 56,115,206, 86,117,108,154,199, 78,119,180,161,218,219, 11,153, 13, 93, 29,
+ 93,167,112,184,219,119, 84,144, 17, 74,132,154,143,116,147, 92,198, 52,176, 51,150, 68, 55, 25, 61, 75,166, 75, 22, 93,164,213,
+ 9, 4, 87, 79,229,219,141, 10,186,164,101,182, 29, 8, 11,200,147, 76, 57,186, 10, 24,181, 65,199, 13,220, 32, 18,128, 5, 56,
+225,226,153,160,166, 21, 32, 51, 64, 48,214,199, 34,185,234, 71,169,206, 86,244,191,178, 6,248,230,108,151, 18,211,206,124, 61,
+190,223, 9, 41,118,100,199,128, 4,165,148, 41, 73, 4, 36, 26,169, 74, 33, 41, 20,169,204, 3, 6, 70, 68,108,175,136,116, 32,
+228,121,221,206,222,186, 55,207, 58,238,207,110,219,242,219,182,181, 12, 58,118,229,133, 50, 82, 88,137, 28,182,177,235, 45, 58,
+144, 93,125, 73, 89, 10, 86, 85, 25, 13, 41, 52,199, 51,149,212,183,190, 38,222, 53,136,193, 87,153, 17,233, 99,153,246,235,106,
+238, 23,251,212,173,123,146,235, 40, 73,150,251,190,165, 91,104, 33, 40, 97,181, 41,197, 44,129, 66, 84, 1, 81,161, 85, 5,105,
+142, 91, 57, 74,235,108,187,137,118, 49,109,190, 39,173,191, 45, 62, 99,108,244, 68, 19,228, 74,104, 73, 52, 85, 74,147,194,188,
+113,230,253,114,212,229, 42,197,104,117,152,147, 91,120,234,114,191,207, 55,125,111,216,124,225,110,195,106,221,103,255, 0, 38,
+ 87,113,127,124, 90,236,240,218,137, 42, 59,247, 41,176,215, 1,231,100,190, 18,135,163,184,202,164, 56,201,109, 74, 82, 28,104,
+160,167,204, 72, 78,103, 75,233, 55, 39,121,195,106,112,156,148,155,122,109,165, 61, 53,225,220,117, 23,122,141,152, 98, 91,187,
+ 25, 82,245,165, 40, 81,112,146,150,170,186,242,175, 99, 32, 31, 47,142, 94,163,107, 91, 88,222,151, 6,150,139,128,107,227, 86,
+209, 66, 67,142, 37,180,122,173,144,107, 82, 65, 74, 80,117,126,168,242,145,150, 59, 14,191,151, 43,139,100, 41, 69,196,203,242,
+222, 27,180,221,201,173,120,151,223,200,239,113,110,158,160,250,228,230, 29,234, 75, 94,175, 43,172,176,139, 16,189, 65,234, 6,
+165,166,121,104, 41, 46, 16, 63,180, 20,186,224,254,142,145,217,142, 51,168,255, 0,197,181,115, 25,149,212, 36,238, 74,117,213,
+ 30,152,117,195,177,162, 63,202, 24, 91,201,131,165,221,179,112,106,106,130, 80,149, 23, 24,148,203,150,181,162,171,174,144, 11,
+232,112,145,252,202, 98,143,149, 37,224,117, 75, 17, 90, 85,153,243,200,221,110,226,111, 73, 69,251, 78,119,125, 9, 75,135, 79,
+ 14,202,103,150, 62,185,181,193,122, 15, 54,151, 16,152,148, 5, 18,114, 31,151,102, 0, 12, 90, 0,211,179, 0,228,232,100, 3,
+192, 96, 22,181, 20, 64, 36, 83,183, 8,216, 0,182, 65,175, 31, 12, 40, 3, 74,149,149, 48, 10, 0,223, 17, 66,127, 54, 20,114,
+ 65,210,221,114, 2,148,227, 76, 2,139, 37, 4,154,225,187,130,162,173,179, 81,230,246,103,132, 28,162, 40,150, 72,202,148, 62,
+204, 21, 28, 28, 52, 59,105,244,231,128, 0, 90, 0,130, 40, 62,204, 2,135,105,176,107,132,144,234, 27, 13,176,158,209,150, 35,
+168,162,129, 32,154, 1,128, 23, 16,218, 23, 66,112, 14,173, 65,165,125,223,110, 29, 81,200,202, 19,165, 52,237,195, 88,166, 14,
+ 74, 61,216,116, 64, 76,154,146,112,225, 2,173, 21, 4,140, 8, 24, 74, 97,219,134,237, 8,225, 41,204,123, 48, 38, 21,160,159,
+169,169, 85, 25,248,246, 97,201, 84, 70,234, 99, 58,215,183, 11,180, 19,160,109,117,246,225, 26, 29, 74,234, 10,211,142, 16, 56,
+ 24, 87,154,135, 14,108, 90,160,104, 69, 43,219,132,168,181, 60,220,219,145, 88,155, 30,115,115, 63,100,235, 78, 32, 83,197, 36,
+ 15,179, 31, 47, 59,202,169,174,211,211, 49,102,156, 93, 77,238, 88,164, 64,131, 45,198,181, 36, 52,230, 74, 3, 34,144,177,223,
+218,113,111, 33,238,163,160,216,218, 85,168,172,107,181,210,219,119, 92, 84, 13,118,119,164,151,150,131, 82, 82,149, 56,167,213,
+ 74,118,105,168,195, 43, 90, 33, 92, 40,138,210,229,112,122, 23, 52,145, 37,107, 53,116, 16,149, 19,238,145,165,180,147,236,165,
+113,164,172,169,197,250, 10, 14,110, 51, 71,101,244,157, 37,185,182,200,193, 75,255, 0, 93, 5,215,117,171, 50, 82,164, 84, 15,
+162,135,235,199,150,245,171,116,111,210,117,248, 50,209,125,185, 22,149,209,224,234, 88, 3,138, 17,160,211,193, 74,167,216,113,
+244, 31,237, 55,255, 0,229,175,245,203,239, 60,159,207,111,255, 0, 47,254,148,106,130, 65,203, 30,164,112, 98,173,229, 90,224,
+ 3, 14,172, 20, 83, 0,167, 40,245,121,186,101, 92,174,146, 34, 32,105, 12, 21, 53,166,188, 41,150, 31,194, 44,124, 78, 56,230,
+ 81,113,107, 33,195, 85,231, 92,101, 94, 85, 69,136, 17, 43, 82, 20,218,213,164,228,123,177,151, 37, 70, 95,180,244, 55, 19, 33,
+ 72,124, 5,230,159,227,196,137, 18,143,150,213, 52,229, 40,120,118, 97,227,162, 63, 67, 9, 73, 72, 57,180, 40, 15,179, 9, 36,
+ 88, 78,133,195,202,222,102, 89, 54,236, 97,233, 83,241, 55, 62,234, 34, 42, 60,157,138, 89, 30, 31,159, 28,207, 84,183, 52,235,
+200,234,122, 78, 76, 18,163,226, 91,219,121,151,238, 81, 67,146, 28,211, 39, 39, 9,173,104,174, 32,113,204,158,220, 85,196,235,
+ 50,199,146,138,225, 83, 71, 43,165, 70,245,182,229,196,232,157,149,121, 70,224,219, 81, 46,128,213, 75,109, 41,114,156, 3,168,
+ 26, 87,255, 0,180, 62,172,122,117,139,174,229,184,203,180,242,124,155, 30, 21,217, 71,216, 59,232, 52,200,138,120, 98,101,222,
+ 87, 50, 91,224, 9,203, 15, 73, 10, 99,211,207, 35,135, 48, 1, 70,145, 82,114,195, 91,162, 2,153,234,215,173,158, 82,244,153,
+183, 62, 35,116, 59,248,142,249,148,146,109,123,122, 26,135,196, 62,120, 5, 56,186, 16,211,117,226,165, 10,159,213, 10,225,138,
+ 57,121,145,199, 85,124, 89, 53,187, 46,103,147,220,241,231, 79, 50,250,153,230,148,190,107,238,212,153, 23,249,132, 34, 20, 86,
+ 84,226,163,219,226,165, 69, 77,199, 96, 56,165, 4,165, 53, 39,197, 68,158, 39, 28, 86,126,108,239, 61, 89,175,110,210,130, 68,
+191,149,219, 23,108, 78,106, 36,109,229,108, 23, 39,212,164,165,106,148,128, 90, 74,143,153, 67, 75,160, 12,128,202,134,164,247,
+ 99, 2,231,136,222,140,220,195,118,210,248,145,106,237,254, 78,114,150,220,203,247, 55,246,252, 6,173,212, 40,105, 76, 48,211,
+ 74, 73, 4, 18, 84,145, 64,170, 83, 32,174, 21,197,123,182,238,213, 37, 47, 73,177,110,213,142, 52, 68,239,151, 92,239,228,223,
+ 45, 98,200,218,147,108, 13,201,179,201,104, 33,167,129,121,215,163, 18, 22, 90, 83,107,100, 7,155, 10, 0,138,182,161,219,152,
+168,174, 23, 80,179, 73, 41, 74,238,214,185, 29, 7, 77,118, 85, 99,225, 41, 39,207,153, 2,184,220, 54,245,246,249, 38, 55, 47,
+246,186,190, 33, 23, 31,138,141,122,188,190,252,199, 16,201, 80, 89, 45,252,101,115, 36,148, 81, 72, 62, 92,235, 83,140,110,175,
+230,171, 24,182,234,254, 46,229,161,111, 19,163, 41, 73,169, 65, 80,234,110, 83,114, 59,126,142, 82,185,204,146,216,145,111,149,
+ 24,183,112, 48, 35,184,203,140, 41,194, 89, 11, 75, 49,198,146,148,122,149, 36,140,128,169,200, 99,203, 48,127,115,237,101,117,
+ 8,225, 95,182,161, 41, 73,168,201, 62, 52, 85,163,244,242, 61, 31, 43,202,150, 49,177,163, 59,119, 30,231, 29, 83,237, 58,163,
+228,143,179,246,111, 38, 54,165,202,215, 98,131,240,183, 31,196,223,122,236,165,159,191,147, 33,169, 37, 43, 83,170, 53, 36,249,
+104, 1,224, 49,232,125, 71, 33, 70,228, 52, 84, 90,158, 57,123, 25,206, 51, 77,235, 83,174,250,207,190, 34, 71, 78, 27,150, 70,
+ 97,231,149, 13, 40, 75, 52, 42, 11, 85,197,146, 52,131, 74,144,115,167,110, 49, 58, 29,231,123,171, 89,167, 41,149, 37, 99,195,
+179, 37,216,153,203,242, 80,148, 57,165, 28, 7,104, 4, 87,235,199,216, 54, 85, 18,244, 30,117, 55, 70, 16, 10,255, 0, 14, 38,
+ 17, 58,138, 54,147, 92,198, 67, 44, 2,138,165, 34,149, 87, 28, 37, 66,129,146,145,250,163, 13, 99,133, 18,154,112,205, 88, 0,
+ 30,154,201,174, 85,195,170, 45, 67, 37,149,113, 95, 31, 28, 13,139, 65, 68, 48, 1, 52,250,169,132, 28,131,250, 96,120,125, 24,
+ 42, 6, 66, 0, 20, 31, 94, 0, 22,105, 53, 21, 57, 83, 8,217, 36, 69, 91, 78,163,159, 17,132,220, 56, 83, 65,225, 90, 15, 12,
+ 35, 96, 23,210, 61,227, 9, 80, 14,218, 66, 69,112,149, 28, 42, 8, 35, 44, 0, 25, 42,160,165, 48, 11,161,149, 40, 15, 28, 42,
+ 85, 4,147,226, 0,163,244, 96,216, 72,129,234, 80,240,203, 9, 74, 11, 64,167,205, 90,228,112,232,131, 8, 69, 13, 48,225, 1,
+128, 12, 16, 41, 78,204, 0, 36,224, 6,160,112,195,144,198,196,139,103,248,240,228,196, 19, 94,175,113, 60,123,240,244,196, 50,
+ 5, 19, 66,115,192, 45, 76,133, 42,153, 97, 26, 21, 73,153, 25,229,134,180, 27, 83, 51,229,244,235,132, 22,136,224,174, 94,237,
+152,242,237,168,245,192, 81, 82, 51,175,136,237,199,192,211,243, 21,219,115, 59,155, 23,154,142,131,155,219, 38, 37,177, 46,166,
+ 47,221, 41, 68,168, 4,212,214,164, 18, 8, 57, 83, 29,223, 73,235, 31, 84,149, 89,122,205,199,204,211,182,219, 45,206,196,159,
+ 41,193,173,223, 73,213,167,180,141, 8,244,179, 29,132,231, 92,116, 50,116, 44,199, 84, 83, 28,227,178,170,223,187, 45,210,163,
+ 13, 62,187, 49, 95, 3,185, 75, 26,143,230,198,239, 78,123,226,215,113,153,150,182,201, 29, 31,209,254,226, 65,106,222,228,181,
+148,133,182,146,104,127,237, 94,103,179,192, 99,207,250,254, 50, 85,244,157, 23, 77,186,223,219,184,232, 73, 94,103,214,149,123,
+192,133, 0, 59, 18,161, 84,255, 0,236,211, 30,205,251, 69, 61,221, 49,174,201,203,222,121,191,159, 87,254, 82,127,229, 65, 52,
+208, 84,229,236,227,143, 87, 78,167, 6, 12, 2, 8,188,186,167, 3, 6,232,113,175, 87,146,205,175,118, 79,114,181, 42, 89, 42,
+ 29,153,140, 58, 79,225, 36,137,201,155,222,238, 39,186,162, 56,125, 88,204,184,244, 44,165, 66, 61,102, 65, 83,197, 85,200,215,
+ 44,100,221,110,165,155, 76,113, 92,117,135, 82, 69, 15,183, 9,190,140,155,112,243,107,138, 84,106, 71,142, 88,119,136, 58, 50,
+ 30,147, 29,104,102,185,132,129,157, 51,192,174, 50,109,250, 27, 92,182, 44,157,194,242,158, 80, 76,165, 13, 12, 41,127,245, 97,
+ 62,106,248, 10,225,183,146,148, 93, 81, 54, 45,199,185,106,116, 39, 42,119,234, 39, 90,149, 13,183,131,210,155, 33, 8,120,251,
+161, 71,248, 49,196,103,227,248, 51,222,143, 69,233,217, 75, 34,222,214,248, 22,246,194,223,206,108,203,235, 8,156,249,252, 9,
+117,110, 75,142, 43, 75, 73, 11, 57,185,159,104, 57,156,117,190, 92,235,142,251, 80,124,142, 63,204, 93, 15,100, 92,211,213,151,
+132, 41,209,167, 71, 68,152,203, 11,142,226, 66,208,180, 28,148,149, 10,130, 41,142,215,188,225, 40, 44, 86,163,192,229,137, 19,
+ 20, 1, 74,254, 92, 40, 26, 27,163,112,219,182,197,134,102,224,188, 58,150, 45,112, 25,114, 92,135,150,164,165, 40,109,180, 21,
+ 40,146,162, 0,160,239,195,101, 37, 20,219,224, 11,138, 60, 80,231,231, 49, 55, 63, 81,221, 65, 95,247,243,239, 63, 46, 28,169,
+ 75, 76, 4,202, 88, 63, 15, 17, 36,165,150,134,159, 40, 9, 79, 13, 62, 39,199, 28, 62, 92,229,126,109,183,161,167, 7, 66, 91,
+203, 13,138,184, 45, 32,220, 98, 23, 74,129, 53, 64, 10,242,143, 53, 82, 8,236, 0,231,195, 44, 83,149,180,184,151,177,254, 34,
+226,179,109,139,139,118,244, 73, 67, 9,110, 34,139, 72, 73, 32, 37, 73, 67,162,167, 33, 82,160, 19,230,242,215, 44,241, 4, 99,
+ 23, 35,126,214, 35,107,129, 6,231, 24,144,229,181,187, 77,190,117, 28,150,243, 16,217, 97,149,186,164, 31, 53, 94, 7, 64, 9,
+168, 77, 84, 61, 74,142,227,223,151,230, 12,175,165,196,157,196,181, 68,209,198, 78, 73, 19,174, 82, 89, 54,237,203,151, 48,175,
+ 86,230,128,117,102, 75,117, 80,205, 94,148,151, 25, 7,216, 66, 2,135,183, 31, 58,245,187,217, 30, 58, 87,228,219,106,190,138,
+158,147,229,216,193,199, 78, 67,254,220,130,251, 87, 52, 74,105,101,149,161,205, 72,113,191, 42,130,146,106, 8, 35,129,237,198,
+ 22, 76,225, 24,183,171,122, 29, 70,218,250,207, 79,122, 11,229,204, 59,223, 76,198, 3,173,134,236, 19, 90,147, 31,225, 92, 70,
+176,244,117, 54,184,218, 82, 73,242,130,186, 40,145,221,227, 92,124,227,231,206,161,115, 23,168,198,234,249,161, 40,201, 83,187,
+135,241, 46,117,204,181, 25, 90,138, 92,181,251,122, 14,122,228,167, 80,247, 62,150,121,207,127,219, 91,161,207, 85,168, 18,139,
+ 55, 72,239,235, 75,190,131, 64, 54,137, 13, 46,170, 25,180,128, 74, 72, 0,156,193, 25,227,236,142,147,149, 30,175,211,172,222,
+183,194,228,106,187,170,181, 94,218,156, 86,118, 52, 33,122, 73,232,180,247,157, 73,213, 7, 81,214, 45,209,182,246, 86,197,219,
+ 19, 4,166, 55, 12,184,247,151,215, 13,194,117, 67,101, 65, 13, 5,105, 34,161,110,174,167,187, 70, 52,127,109,240,101,123,171,
+ 70, 83, 95,241,202,140,231,250,238, 58,177, 98,111,182, 36, 76,172,173, 68,254,108,125,109, 15,225,252, 79, 31,150,161,219,160,
+ 0,225,193, 17,100,208, 28,240, 14, 21,108,140,233,199,187, 13,160,181, 21,109,189, 99, 81,194, 10, 42,150,199,234,138,251, 78,
+ 18,160, 24, 54, 5, 1,225,221,133, 0,193, 41, 57,118, 97, 24,244, 42,148, 13, 53,166,120, 74,177, 66,185, 68,102,126,220, 38,
+241, 70,203,158,238,219,118,119, 67, 55, 25,141, 54,249,200, 33, 75, 72, 63, 85,112,228,155, 18,162, 12,243, 23,104, 46, 88,134,
+153,205,151,213,216, 13, 71,215,135,108,108,124, 88,249,108,185, 66,185,179,235,193,113, 46,179,195, 82, 13, 69, 70, 88,141,170,
+ 15, 54,176, 1,146,154, 10,147,151,134, 16, 80, 10,112, 24, 7,105, 64, 2, 71, 12, 2, 25, 46, 30,250, 96, 3, 9, 58,141, 8,
+168,239, 24,115,211,128,161,148,189, 3, 14, 66,212,192,113,103,176, 97,104, 46,224,224,225, 40, 57,106,103, 35,150, 0, 19, 86,
+ 71,195, 0, 9,184,170,212, 87, 33,133,160,141,137,234, 3, 32, 50,195,168, 48, 10, 93, 69, 0,166, 0, 19, 88,224,112,228, 1,
+ 20,141, 70,160,225,194, 25, 72,210, 41,133, 3, 32,106, 35,195, 12,144,248, 25,167,150,189,188, 48,208,166,167, 5,108, 93,203,
+ 29,150,155,100,118, 80, 99,243,167, 58,195,173, 78,183, 26,117, 68,202, 75,205,207,100, 58,165,125,200, 74,130,194,105, 82, 52,
+208,140, 94,242,254,100,225,115,109, 77, 43,114, 35,118,162,135,125,120, 72, 77, 16, 90,125, 42, 9,226,106,133, 16, 79,180,229,
+143, 98,181,115,124, 19, 53, 45,240, 43,221,213,105,133,184, 61, 41,242,221,255, 0, 91,142,214,132, 35, 47, 40,100, 30, 63, 64,
+ 56,219,194,187,181,148,243, 97, 93, 73,191, 75, 18, 68, 56,109,203, 80, 42, 17, 93,113,157, 35,137, 74, 94, 90,233,249,241,207,
+117,203,123,174, 83,181, 23,186, 92,235,234, 58,166, 45,199,241, 6,204,193,154, 29, 37, 85,165, 0,209,247, 9,237,237, 75, 96,
+227,209,127,104, 46, 83, 30,236, 59, 36,190,227,137,243,229,191,247, 33, 46,212,254,241, 64, 51,199,177,165, 68,121,210,224, 97,
+107, 9, 30, 56, 81, 68, 92,247, 0, 25,215,248, 48, 17, 55, 83,142, 58,201,181,182,198,229,184, 25, 7, 63,218, 36,158,218,138,
+229,135,109,170, 44,192,227,173,212,127,214,156, 74,125,218,145,140,233,196,182, 50,217,150,239,199, 37,176,124,130,181,250,113,
+157,126, 52, 31, 9, 18,117, 69,214,144,237,105,195, 16,165, 82,109,195,221,145,157, 73, 21, 86,124, 48,109, 21, 50, 68,204, 32,
+243, 26,117, 80, 28,143,213,131, 97, 49, 28,189, 71,118,212,151,110, 16,148,125,114,146, 8, 28, 72, 0,212, 98, 88,219, 35,148,
+ 28, 73, 63, 33,249,135,232,178,132,184,160,153, 66,171, 87,101, 9, 35,128,250, 70, 51,243, 49,124, 88, 81,163, 87,164,102,187,
+114, 90,243, 45, 77,199,204,232,183,123, 34,169, 44,139, 76, 65, 84,184,221,116, 21,228, 13, 8,227,159, 28,115,118, 49, 39,141,
+114,177, 59, 75,153, 80,201,178,247,114, 44,222,145, 58,181,179, 92,110,104,229, 22,234,146,144,226, 84,150, 45,114,138,188,129,
+ 68,233,244, 84, 79, 97, 57, 36,246, 28,177,233, 88, 57, 94, 45,181, 83,204,186,142, 30,201, 85,112, 58,145,183, 82,164,127, 14,
+ 88,208, 92, 76,199,196, 50,141, 6, 71, 62,252, 60, 14, 76,249,181,243,222,233,203,142, 74,192,229,158,213,148, 99,238,125,230,
+251,209, 28,244,146, 84,231,225,177,144,147, 38,133, 36,105,212,167, 16,130,120,144, 72, 29,184,206,234, 87,118,194,157,164,214,
+ 99, 86,113, 31, 44, 57,120,221,170, 59, 83, 38,183,169,245,233, 90, 80,138, 1,231, 32,133, 41, 85,165, 63, 65,199, 44,227,161,
+169,110, 26,162,218,178,217, 45,246, 72,209,238,242,221,244,225,105, 9, 37,180,149, 41,148, 54, 84,217, 11, 20, 81, 26,146, 15,
+ 1,192,208,118,226,181,219,117, 70,174, 63,195, 45, 86,132,135,113,239,251, 54,215,176, 8,204,160, 45,240,183, 37,161,189,105,
+ 33, 79,150,253, 61, 47, 33,104, 62,114,156,146, 72, 29,167,128,196, 86, 44,255, 0,184,109,222,203, 81,134,133, 33, 99,230, 6,
+229,223, 41,189,223, 46,210,214,141,177,183,162, 56,150,227,161, 41, 13,183, 49,213, 22,214,239,148, 13, 69,180,121,135,134, 56,
+255, 0, 54, 93,119,114, 44,226,242,147,221, 47, 66, 35,192,185,226,167, 39,200,168, 57, 95,215,125,227,145,119,155,133,130,100,
+ 4, 94,182,132,167,214,250, 45,206, 60, 89,114, 35,133, 9,108, 22,158, 8,112, 83, 74, 64, 41, 41,236,173, 65,173,121,254,191,
+229,155, 29, 73, 41,110,217,113,118,118, 19, 97,249,130,238, 28,254, 29, 81,111,109,159,152,135, 43,111,143, 50, 94,180,220,162,
+172, 80,144,208,138,250, 53, 28,248,169,198,207,217,142, 47, 43,246,242,237, 36,227,113, 54,215, 53,196,235,177,124,239, 25,107,
+ 56, 30,236,252,190, 57,183,202,238,110,244,245,181,183, 95, 41, 36,250,251, 48,192,110, 17,105,208,148,191, 30, 68,118,194, 30,
+106, 66, 18,165,105,112, 46,164,231,157,106, 42, 8, 56,248,107,247, 31, 11, 35, 7,169, 93,183,145, 29,174,174,157,235,130,127,
+121,213,230,221,142, 69,133,114, 58,112, 56,163,230,179,106,219,219, 11,171, 40,219,146, 43, 76,191, 42,239,111,109, 83, 24,120,
+164,130, 80, 84,200, 65,175,187,169, 41,169,173, 62,220,254,163,255, 0,215,172,203,153, 93, 11,194,186,255, 0,226,156,146,125,
+207, 84, 99,245,155,170, 19,183, 46,109,123,120,125,197,121,210,237,158,239,179,121,155, 99,107,107, 75,113,254, 93,207,152,217,
+183,195,113, 73, 41,183,144,242,139,241, 80,218,198, 72,112, 58,167,147, 67, 95, 41, 3, 52, 99,233,175, 41, 70, 43, 42,221, 34,
+147,174,175,180,229,186,228, 92,113,110,107, 84,215,176,238,102,136, 81, 4,125,190,204,123,124, 86,158,223,188,242,121, 63,224,
+ 43,128,116, 67,133,229, 94,220, 3,133,107,218, 48,140, 5,154, 36,112,195, 24,228, 46,131, 74,247,246, 97,168, 80,245, 0,231,
+135,136, 97, 38,135, 87,183,243,225, 28,168, 61, 12, 59,227,154, 27,103, 97,192, 84,171,179,192,189, 79, 43, 41, 32,168,156, 10,
+ 53, 28, 80, 91,247,171, 45,213,117, 91,209,172,132, 67,128,160, 66, 52,123,244,246,225,119, 70, 35,149,182,202, 86,255, 0,190,
+111, 87, 75,129,184, 76,148,235,143,234,174,165, 44,247,248, 98,172,243, 40,232,137, 60, 17,210,195,204, 57,173, 79, 66,148,233,
+245, 0,226, 85,158, 39,179,149,168, 74,213, 14,144,233,187,153, 49,155,179,197,180,206, 82,157,155,113,117,194,217,212, 9, 1,
+ 0,126,122,226,204,227, 93, 70,162,240, 73,212, 42, 49, 89,138, 2, 72, 20,192, 6, 70, 16, 84, 25, 41, 39,217,128, 80,224, 15,
+116, 96, 0,193,176, 59, 78, 0, 8,166,205,105,196, 98, 84, 41,138, 0, 41,195, 0, 3, 94,148,215,142, 1, 83,161,146, 74,146,
+105,150, 16,114,117, 19, 89, 85, 40, 63,143, 10,129,137, 40,100,107,199, 14, 24, 18,148,227,128, 1,128, 0,120, 96, 0,152,122,
+ 16, 29,184, 86,232, 1,144, 9,160, 30,220, 71, 81,241, 20,208, 41, 76, 4,135,148,251,115,122,206, 98,238,136,169, 52,212,120,
+158,209,143,133,114, 58,103,137, 23,161,171, 98,252,162,203,243,103,151, 46, 91,121, 82, 93, 85, 20, 83,219,219,157, 77, 49,205,
+227,226,206,222, 69, 26,208,223,197,184,229,196,221,106,205, 2,211, 17,249,209,169, 87,152, 89, 9, 35,180,138,138,103, 90, 21,
+ 99,216, 58,123,126, 18,169,179,108,173,175, 16,190, 54,230,228, 25, 12, 6,228,187, 25, 75,171,117, 62,102,194,138,169,224,107,
+246, 99, 98,205,221,174,131,114, 35, 81,255, 0,147, 14,141,185, 53,216,171, 1,168,167,212,124,164,240, 21, 74, 9,175,245,214,
+113, 75,171, 67,117, 24,220, 71,178, 71, 72,109, 9,202,114, 62,151,114, 89,105,133,128, 40,106,149,151, 20, 60,106, 70,156,118,
+ 31,181, 83,219,147,145,111,182, 41,251, 25,206,249,242, 21,179,110,125,142,158,212, 61, 41,195, 78, 56,247, 5,169,229,147, 84,
+162,238, 65, 75,181, 20,166, 94,220, 57, 33,162,110,172, 83,142,125,216, 80, 57,199,173, 61,150,171,167,165,112,100,102,251,101,
+ 5,125,128,163,179,233,192, 77,110, 84, 56, 63,152, 22,223,194, 46, 78, 48, 7,241, 99, 62,242,163, 46, 66,230,132, 66, 44,135,
+145, 55,238,251, 78, 88,161,115, 86, 57, 74,172,156,219, 34,200,147, 9, 37, 70,138,160, 39, 11,181, 23, 35, 17,218,203, 29,182,
+ 86, 67,171,166, 17,197, 19, 40,161,241, 55, 59,124,102,207, 21,154, 86,131, 58,156, 37, 18, 38, 77, 13,215,137, 23,235,186, 2,
+109,112, 74, 88, 2,133, 75,202,163,194,184, 21,206, 68, 82,157,120, 34,191,190,204,187,109,221,204,187,143,160,184,182,201, 72,
+ 17,220, 74, 23, 64,149,159, 46,170,142, 25, 43, 13,148,202, 19,172, 89,107, 91, 46, 54,195,203,134,214,196,159,136, 83, 41,105,
+149, 32,208, 37,106,169, 28, 7,234,215,135,141,113, 82,229,154,234,111,225,229,127,183, 74,144, 86,175,133,183,155,149,183, 86,
+ 89,150,206,191, 69,246, 60,132, 4, 18, 42,158,210,107,245,226, 75, 18,148, 30,140, 75,201, 78,222,165,239,211,207,205, 34,243,
+179, 92,179,242,243,153,182,241, 39,106,219,210,155, 92,203,186, 30, 90,229, 40,165, 65, 33,229,122,198,149, 74, 78, 96,154, 26,
+118, 14, 26,246, 51,169,163, 48,239, 97,113,104,239,107, 6,234,178,238,155, 28,109,195,183,165, 55, 46,199, 53,180,189, 22, 83,
+ 74,214,135, 27, 87, 2, 41,246,142,206, 28,113,169, 25, 38,171,216,103, 74, 45, 58, 51,204, 46,183,185,177, 31,158,125, 93, 93,
+ 37,197, 33, 54, 29,183, 77,165, 0,212,173, 78,252, 19,238, 25, 15,119, 10,190,181,129, 65,238,129,142,127, 63, 33, 78, 85, 44,
+218,141, 26, 52, 44,140, 37, 22,214, 99,130,178,185, 40, 42, 82, 9, 74, 65,208,107, 85, 41, 70,154, 66,106, 72, 61,160, 1,140,
+123,146,169,167,109, 13, 87,157,209, 26,115,127, 7, 37, 9, 92,122,184,235,107,117,178,183, 64, 52, 90, 27, 70,117,162,150,161,
+159,121,237, 0, 12, 55,101, 81,110,220,170,200,207, 50,175, 50,237,144, 28, 53,209, 48, 20, 38,161,101,214, 3, 74,109, 53, 74,
+ 66,141,114, 11, 32, 16, 60, 5, 78,101,201, 81, 81,147,100, 58, 68, 96,188,221, 63,242,247,164,233,115,160,168,179,113,220,114,
+223, 75,110, 51,168, 5,144,226, 82, 19, 85,103,161,109, 56, 81, 78,218,140,121,147,147,202,234,151,166,255, 0,161, 36,141, 92,
+106,218,198,109,115, 57, 46,245, 99,184, 69,124,220,103, 85, 73, 89,212,162, 65,175,141,124, 49,165,114,197, 29, 76,137,193,173,
+ 89,177,181, 27,185,191,118, 68,164, 44,177, 9, 4, 84,131, 74,211,179, 11, 27,114,184,245,122, 11,106,171,129,235, 79,200,183,
+170, 78,118,242,146,249,119,218, 27,106,209,248,175, 41, 46, 76,252,109,218,101,198, 66,225,195,182, 58,199,189, 53, 11,244,220,
+ 7,201, 84,168,101,171, 44,197, 49,243,191,239,175,145,250,119, 82,177, 11,215,174, 59,119, 96,232,169,171,154,213,168,251,121,
+247,179,215, 60,161,143,122,252, 93,183,242, 45, 91,236, 20,249,134,117, 84,158,164,121,207, 22,243,106,113, 11,181, 90,219, 93,
+145, 15, 50,219,172, 34, 82,152,117, 78,151,194, 86, 84,116,213,221, 9,206,180, 77,106, 42, 0,235,127,102,188,135,123,203,189,
+ 31,109,234,214,236,156,210,110,187, 83, 84, 73,123, 42,251,217,157,230,110,163,106,230, 82,183,101,124, 49,210,188,219,230, 57,
+116,243,186,110,209,236, 82,103,161, 97,169,113,139, 50,218,109, 90, 14,165, 70, 40, 8, 90, 18, 18, 51, 41, 9, 86, 68, 84, 99,
+212, 48,239,171, 57, 16,146,226,164,138,247,211,157,137, 46,227,191,172,119, 70, 46,182,216,247, 88,167, 84,105, 45,182,251,100,
+ 86,154, 92, 72, 88, 34,160, 30, 7,187, 30,247, 13, 85,123, 85, 79, 29,156,104,220,123, 24,224,133,133,251,112, 12, 12, 14,149,
+106,236,240,192, 62, 2,136,117, 35,135, 12, 3,195,161,228,240,174, 88,107, 21, 49, 59,142,228,179, 89, 90, 14,222, 36,181, 26,
+ 57,173, 22,250,210,138,211,141, 53, 17, 92, 53,186, 14,122,140,191,249,215,203, 35, 53, 48, 17,122,142,100,168,148,121, 74,202,
+ 66,130,146,154, 21,129,164,102,161,219,134,171,139,147,212,119,134,233, 90, 17, 46,112,117, 11,111,219,137, 93,155,110, 58, 29,
+155, 67,234, 62, 8, 33, 36,138,209, 63,195,135, 81, 37, 89, 61, 66, 17,114,224,142,124,221, 27,214,229,185,146,185, 19, 29, 83,
+142, 41, 69, 85, 39,242, 56,163,149,212, 18,209, 26,118,113, 52,212,138, 92, 93, 33,173,100,211,179,141, 63,135, 24,242,205,109,
+150,221,132,145, 25,155, 57, 20, 82, 42, 50, 60, 14,120,175, 43,175,137, 20,162,134,216,247,199,145, 60, 54,128, 9, 35, 33,159,
+126, 44,227, 94,114,146, 34,105, 29, 87,209,237,165,251,165,206, 20,201, 32,250,112,218, 82,192, 87, 13, 75, 20,199, 84,157, 34,
+140,247,196,234, 36, 10,211,196, 84,226,189,106, 60, 83, 10, 6, 82,157, 88, 65, 80,167,230,192, 41,144,116,156, 0, 25, 42, 10,
+173, 59, 48, 1,135, 85, 68,211,191, 44, 44,120,138, 34,181, 20,208, 14, 31,199,137, 0,205, 78, 16,144, 58, 61,220, 0, 5, 36,
+ 30, 28,112, 0, 69, 38,162,135, 0, 9,173,172,178,207, 11, 81,187, 66, 20,131,216, 62,172, 56,104, 85, 36,143,116,125, 88, 0,
+ 33, 65, 7, 44, 57, 48, 0, 65, 39, 62, 24, 70,234, 42,141, 69, 91, 65, 62,220, 35, 99,210,160,174,143, 46,159,163, 9,184, 90,
+158, 85,109, 13,180,211,147,228,203,113, 5, 74, 98,186, 65,167, 17,221,244,227,229, 92, 76, 53, 86,159, 3,189,254,215,110, 58,
+150, 62,222,223, 87, 55, 24, 69,142, 19, 94,139, 68, 0, 86, 6,154,171, 32,107,221,245,226, 43,189, 26,214,234,208,179,107, 25,
+ 68,176,237,118,167,110,147, 19, 17, 78,167,211, 75, 0, 56, 71,235, 43, 78,127,159, 23,173,195,101,180,139,113,137, 2,220, 16,
+ 92,181, 95,157,184, 52, 64,137, 4,174, 27,198,181, 63,124, 10, 15, 15, 21, 3,137,161, 30, 99, 46,177,169, 87,180,195,190, 37,
+225, 84,162,107, 8,107, 74,143,253, 98, 30, 67,235,250,194, 20, 48,233,219,241, 34, 65, 41,237,145,208,252,166,184,185, 61,168,
+243, 22,238,180,174, 32, 66, 9, 57,233,109, 72, 66, 71,213,141,223,219,134,225,212,231, 30,219,111,239, 70, 39,157, 30,252, 20,
+255, 0,204,137,202,157, 3,137,199,190,210,154,246,158, 76,217,130,224,253, 82,105,225,128, 74,152, 81, 4,101,153,174, 1, 31,
+ 18, 1,212, 38,209,123,116,108, 25, 9,134,154,206,140,125,102,130, 70,121, 10, 28, 59,104,232, 75, 83,206,238,107,242,238,249,
+ 30,241, 38, 92,180,168, 0,162,120, 30,211,196,226,158, 69,170,234, 94,132,147, 43, 41, 22,247, 35,203,173, 51, 6,185,140, 80,
+148, 40, 72,170,153, 37,219, 82,231,203, 95,195, 32,101,192, 83,187, 17, 73,150,161, 38,201, 92, 13,155, 45, 78,135, 36, 44,132,
+ 17, 82, 7,142, 33,108,158, 47, 66, 99,183,118,157,169,134,146,167, 64, 82,136,204,171,195,135, 28, 50,164,208, 31, 37,179,103,
+102, 25, 14,168, 37, 32,121, 82,144, 42, 77, 48,168,150,154, 21,135, 51,172, 81,110,118,199, 90, 12,132, 50,160, 74,157,115, 33,
+ 78, 34,131,191, 11, 38,168, 81,187,111,180,169, 54,198,229,151, 20, 93, 54,131,242, 22,135, 26, 71,171, 25,226, 72, 5, 1, 36,
+131, 76,179,168, 32, 28, 71,109,185,232, 85, 85,131,208,209, 94,242, 49, 25, 76, 71,235,241, 90,156, 75, 72, 21, 79,166, 14, 98,
+135,176, 2,127, 62, 34,170,137,179,110,234,113,160, 81, 61,166,221,110,107,129, 25, 20,186,245, 83, 82, 84,165, 18,163, 76,184,
+ 2, 62,188, 44,101,204,108,244, 68, 87,115,245,117,212,143, 41,109,243, 57,123,202,157,241,117,178,236,121, 43, 15,174, 29,178,
+ 82,227, 0,162, 40,125, 55, 91,163,200,168,165,116, 40, 3,219,140,252,238,165,118,218,164,100,210,244,149, 21,152,203, 86,135,
+ 94, 78,221, 84,254,217,132,224,113, 74,149,164, 41,106, 10,171,133,117,175,111, 3,168,253,184,158,213,199, 43,106,188, 74,178,
+ 84,145,106,218,100,187, 54, 60,117,170,169,138,160,166, 92, 10,161,163,158, 96,186,234, 31,175, 76,188, 41,137, 45,193, 62, 37,
+168, 12,219,178, 83,182,169,241,111, 19, 79,171,105,148, 24, 82,141, 51, 65,101,205, 11, 73, 42, 6,130,170,250,200,236,196,142,
+ 74, 4,241,157, 26, 32,187,214,108,215, 45,142,220, 37, 62,151, 11,205,151, 35,250,212, 8,107, 53, 37, 72,169, 32,213, 52, 31,
+ 71,183, 21, 47,234,170, 79, 39, 94, 37,129,204,205,129, 35,116,116,133,103, 93,160, 5, 75,129, 46, 2,151, 82, 52,134,212,194,
+221, 62,101, 80, 1,169,148,166,167, 44,198, 60,147,165,102,255, 0,253, 11,209,110,137,157,150, 22, 23,139,133, 58,107, 40,109,
+107,215,186,191,192,172,230, 88, 45,187,201,133,217,185,115,181,238, 23,205,209, 49,178,141, 37,128,134, 25, 42, 26,106, 11, 69,
+208,170, 14,221, 67, 29, 5,204,165, 4,220,229, 79, 73, 36,112, 99,126, 42, 54,237, 54,253,101,159,200,223,151, 18,118,116, 40,
+220,192,234,162,230,198,223,218,227,239, 25,132,241, 58,222, 45,249,138, 26,105,186,187, 33,202,126,163, 99,253, 34,145,158, 57,
+ 94,173,231, 5, 97,171, 88,241,241,110,203, 68,163,203,211,221,234,175,121,209,116,175, 37,219,179, 31, 27, 47,225,135,103, 51,
+163, 55, 15, 50, 31,123,103,179,202,190, 75,197,255, 0, 41,242,181,181, 4,204,130,164, 54,110,151,132,165,181, 22, 94,148,166,
+252,136,100,168,146, 26, 66,136, 3,138,138,142, 51,250, 47,147,110,229,228,253, 95, 80,106,245,200,235, 8,255, 0, 69,190,221,
+ 63,170, 90,241,122,154, 29, 79,175,168, 91,240,113,163,178,223,119, 23,222,202,131,153,112,103, 76,188, 27,232, 90, 29,148,144,
+138, 38, 58,195,137,111,211, 1, 52, 4,102,159, 40, 25, 17,159, 19,199, 30,159, 57,194, 22,182,197,105,222,112, 25, 10, 82,187,
+185, 23, 39, 79,251,144,162,202,219, 14, 40,162,160,106, 77,117, 4,212,154,164,148,215, 45, 68,228,123,234, 41,142, 74,227,219,
+ 58,174, 38,237,155,219,163,181,157,247,201,123,226, 47, 60,177,178, 77, 64,255, 0,233, 26, 96,231,170,165,129,232,147, 95, 29,
+ 53,199,208, 61, 50,235,185, 98,219,147,215,106, 60,159, 50, 27,111, 78,157,164,172, 75, 28, 13, 43,194,159,149, 49,119,109,121,
+149,168,205, 11,254,241,219,251, 90,220,237,227,112,204,102, 29,181,132,169,199, 30,144,180,161, 33, 41, 21, 39,204, 71,102, 9,
+124, 42,173,161, 17, 72,110,223,152,215, 35,108,223, 19, 27,110,173,235,189,197,165, 4, 52, 25, 74,144,218,234, 9,212, 20, 65,
+200,112,198,125,238,163,106,215, 22, 90,141,137, 49,129, 29,121,238,203,196, 41, 42,181, 90, 4, 98,227,110, 55, 9,215, 89, 90,
+128,116, 56, 18, 56,170,156, 43,196, 80,227, 54,231, 95,181,181,237,226, 90,135, 79,148,152,194,173,229,204, 45,255, 0,255, 0,
+124,238,185,106, 83,233, 74,180,165,116, 5, 73, 11,208, 82, 2, 0, 2,148,224, 6, 49,175,249,134,236,149, 18, 70,149,158,148,
+164,181,226, 48, 93, 25,187,179,103,118, 36, 39, 53,206,114,114, 74,104,104,125, 36,184,164,171,232,160, 4,226, 59, 25,247, 91,
+ 77,151,173,224,197, 66,128,185, 94, 86,252,197,201,184,185, 69, 10,209, 37, 68,240, 20,227,141, 27,217,210,184, 86, 88,234,217,
+168,253,250, 51, 81,189, 54,136, 21, 7, 33,151, 31,102, 42,186,201,142,119, 40,168, 71, 46,247,246,210,214,138,212,156, 46,194,
+188,174, 17,169,215, 69,161, 92, 65,212,112,221,165, 93,204, 95, 98, 67,252, 94,254,167, 92, 63,116,218,104, 1, 63,172,123,177,
+175,210,241,213,106,200,110,220,161,218, 29, 37, 46, 75, 19, 63, 8,132, 43, 17,182,181,201,116,131,196,143, 40,252,248,232,238,
+ 42, 68,130, 14,167, 65,132,170,149, 31,164, 98,168,240,201, 81,227,217,227,133, 72, 3,164,154, 84,101,129,161, 80,162, 84, 8,
+241,194, 10,100,131, 94,255, 0,102, 0, 14,128, 64,207,142, 0, 2,146, 20, 41,219,217,128, 4,212,145,192,226, 69,192, 80,186,
+ 71,126, 20, 90,138, 83,187,236,195, 36, 60,201,200, 0,120,225, 16,161, 84, 1, 20, 38,152,120,129, 8, 35,134, 99, 0, 4, 44,
+166,181, 25, 96,168, 80, 30,149, 14,103, 5, 66,128, 44,231, 80,104, 48,181, 0,122, 96, 30,255, 0,110, 22,162, 62, 38, 82,154,
+ 28, 35, 99,131, 97, 4, 60,186,180,205,147,110,248,134, 35, 3,169,223, 34, 84,120,231,151, 28,124,208,161, 77, 81,234,142, 67,
+139, 79, 75,143, 13, 9, 89, 41,157,235, 33, 40, 90, 79,105, 66,141, 15,182,180,195,235, 94, 36, 51, 37, 59, 38,249,124,183,222,
+ 98, 48,227,138, 13, 60, 65, 82,214,175, 42, 80, 90,225, 83,226,112,217,164,209, 42,110,161,183, 99,139,187,205,186, 42,218,146,
+152,139, 83, 97, 4,254,179,205,169, 40,175,118,117,194, 70,229, 17, 29,212, 67, 57,167, 23,240,239,194,230, 66,168,105,199,146,
+238,186,145, 69, 34, 50,245,129,253,106,140, 88,192,146,110,133, 28,205, 41, 66,253,233,158, 84,137, 54, 72, 77,173, 69, 72, 13,
+190,106,106,120, 57,167,183,198,184,221,242, 69,191, 15,171,191,244, 72,196,243, 68,247, 96,127,212,139,127,210, 85, 42, 62,220,
+123,148, 95,184,242,217, 71, 86, 20,161,116,205, 61,216,117, 68,218, 1,172, 28,210,105,133,168,148, 17,146,195,110, 32,182,224,
+212,133, 2, 15,113, 7,176,225,219,132, 81,161,201, 29, 99,236,183,182,148,215,222,137, 27, 93,190, 82, 84,227, 42, 72, 21,243,
+123,195,135, 97,225,136,229, 42,196,183,103, 83,144,110, 49,220, 50, 22, 37, 35, 75,149,204, 28,100,205,179, 86, 16, 84, 20,219,
+151, 83,108,149,234,165, 53,161, 25, 98,180,180, 4,181, 44,171,124,167,167,192, 67,205,130, 10,133,126,204, 68,228, 89,140, 69,
+152,145, 38, 56, 82, 36,185, 68,246, 1,136,247, 18, 70, 52, 54,218,158,148, 43,253, 89,178,242,251,215,195, 6,230, 76,136,214,
+254, 72, 16,151, 38,228,178,252,179,147, 76,167,133,114, 62, 56,116,117, 43,228, 42,162,133,223,141, 77,179,222,219,188, 34,129,
+212,130,151,153,108, 86,141, 80,158, 62, 4,226, 29,219, 25,159, 53,160, 91,132, 24, 91,198,198,149,193, 88,110,228,149, 5,165,
+213, 87, 47,112,208,247, 87, 73,246,240,236,196,179,130,146,170, 27, 11,148, 52,237, 22, 59,233, 43,129,115, 40, 74,218, 42, 65,
+116,146,180,184,164,230,104, 19,159, 14, 25,140, 67, 27, 78,154,151, 85,218,162,181,230, 78,202, 41,113,201, 25,173,224,117, 10,
+103,229,173, 61,191,101, 49,153,149,141,185,106, 35,185, 65,203,149,123,157,118,255, 0, 74,219, 52,172,180,221, 84, 27,109, 52,
+170, 82,131, 94,224,114, 7,142, 22,196,246,170, 21,220, 42,206,136,178,190, 65, 17,150, 28, 49, 26, 40, 46, 37,165, 2, 75,131,
+ 36, 20,215, 80,160,212, 56,241,225,139,169,147,218,211, 66, 51,186,226, 79,189,137,144,208,209,117,184,225,176,128, 82,128,125,
+ 50,179, 80, 84,129,253, 42,113,238,240,194, 92,105,173, 7,206, 60,200,128,177, 29,213, 17, 22, 75,128, 6, 91,105, 83, 15, 23,
+ 5, 10,116, 43, 64,200,144,154,234,204,138,248,227, 62,246, 69, 52,102,141,136,120,138,132,227,150,220,224,231,231, 41,172, 71,
+106,217, 75,114,108,129,191,134, 45,173, 9, 90, 93, 97, 46, 5,134,164,164,165,104,112, 36,164, 83, 82,105,144, 60,115,199, 3,
+212, 60,173,143,126,243,187, 25,202, 53,236, 58, 28, 44,220,140, 55, 88, 58,122,147,236,237,175, 97, 47,219,221, 86,245, 14,219,
+ 6, 29,170,252,213,129, 11, 80, 15,181,100,131, 14, 51,192, 26,130, 3,172,165, 58, 79,101, 74,114,174, 29,111,200,216,183, 94,
+235,183, 39, 53,216,228,255, 0,153,165, 47, 56,103,210,145,155, 94,132,151,220,128,229,182,255, 0,204, 91,161,221,119, 7, 29,
+149,112,210,141, 87, 11,147,238,203,154,167,181,104, 70,167, 30, 82,212,146,123, 64, 32, 14,234, 99,164,194,233, 88,125, 62, 46,
+ 54, 45,168,198, 93,156, 95,165,241,126,182, 99,229,103,228,229, 75,117,203,146,147,239,109,146, 43, 92, 57,177, 18,237, 22,177,
+ 41, 96,250,231,204,243,172,165,181,150, 69, 72, 21, 39, 94, 94,207,230,240, 22, 90,132, 56, 42, 46,194, 91,123,159,204,219, 30,
+102,222,163, 92,212,139,116,138,124, 35, 13,132, 49,233,164,105,108, 37, 58, 8, 45,184, 66,210, 73, 28,115, 61,185, 83, 24,217,
+146,110,186,154,176,149,104,185, 19,123, 29,170,219,109,217,178,183, 12,116, 20,155,124,103,101, 58,224, 37, 41, 72,105,170,140,
+169, 65,195, 50,113,200,202,111,198, 75,181,151, 47, 90, 74, 13,174, 71, 61, 93,186,143,234, 31,118, 71,143,181,255, 0,205,151,
+104,219,106, 34,126,226,221, 10, 81,135, 29,180, 37, 26,141, 27,141,233,164,147,198,166,164,227,212,236,245, 11,219, 84,119,104,
+150,156, 15, 60,185,140,167, 57, 73,243,100,155,150, 93, 71,245, 71,183,227,141,157,178, 47,215,135,237, 55, 87, 66,167,148, 58,
+183,150,218,155,204,168, 56,176,165, 32,103,157, 8,168,196,223,221,238,193,124,223,112,251,120, 49,124,137, 49,216,220,192,221,
+155,149, 46,239,251,164,183, 89, 53,145, 41, 19, 30,121,103, 73, 30, 82, 66,149, 66, 13,123, 59, 49, 78, 61, 78,229,237, 27,116,
+ 46,255, 0,111,140, 93,104, 89, 12,242,223,111,163,110, 37,230,146,148, 92,218, 67,138, 68, 80,160,167, 84,164, 40,161, 75, 35,
+ 45, 41,173,112, 56, 54,232, 89,118, 99, 21,169, 34,102,233, 97,218,214, 70,194,205,100, 80, 58,132, 46,128,128, 22, 86, 77, 59,
+179,196,144,199,219, 85, 46,100,110,238,213,161,164, 58,131,177, 70, 19,165,182,180,149, 41,109,136,237, 35,192, 37, 78, 80,123,
+113, 98,206, 44, 92,120, 12, 89,137, 17,187, 79, 48,239,183,165,162,123,170, 40,212, 86,233,108, 87,245,212, 72, 7,216, 14, 45,
+198, 27, 81, 26,200,114,230,111,200,156,252,237, 50, 36, 47, 50, 61,208, 78, 88,145, 4,221,117,102,180,171,144, 65, 36, 44,132,
+240, 2,189,216,154, 52, 32,144,214,244,176,249,212,165, 29, 61,153,246, 97,104,136, 36,134,235,172,198, 92, 82, 82,217,243, 28,
+135,215,132,183, 29,204,141,147,238, 81,109, 25, 55, 21,182,148,164,150, 92, 82, 73, 35,143, 30, 57, 99,162,193,199,161, 86,253,
+196,119,127, 79,187, 5, 27, 39,104,161,197,138,203,148, 18,234,137,247,130,105,144, 56,183,126,116,209, 17,219, 44, 33, 85, 39,
+ 58,143, 12, 69, 29, 81, 33,144, 41,195, 14,160, 0,167,180,254,156, 0, 29, 41,210,159, 30,204, 35, 64, 40,131,168,106, 60,112,
+193,194,186,197, 43,128, 2,173, 73, 94, 73, 57,225, 82, 0,138,109,103,128,195,234,133, 51,233,229,164,143,224,195, 92,137, 40,
+ 29, 32,129,249, 83, 13,168,161,141, 64,175,110, 0, 12, 18,162,154,158, 56, 90,129,130,217,211,157, 14, 10,128, 77, 30,223,102,
+ 29,184, 64,170,108,215, 60, 34, 98,132, 80, 41, 52,236, 56,112,128,166, 0,161,148,154, 26,224, 0,248, 0,243,103, 96, 89, 17,
+115,148,183, 95, 72, 84,117,146,134,202,134, 65, 96, 87, 46,252,137, 56,249,163,119,194,122,124,213, 7,139,214,216,102, 77,194,
+ 44, 86,208, 16,242, 92,245, 20,226,129, 20, 40, 77, 41,151, 26,106,250,176,213, 33,118,212,223,185,218, 99,193,109, 46,131,165,
+166,154, 90,171,216,162,138,102, 43,236,194, 38, 58, 33,108, 79,198,136,164,198,253,162, 86,231,196, 5, 26,208,234,247,169, 94,
+234, 97,146,116, 27, 49,179,122,109, 9,123,171,110,152,173,167, 65,134,239,170,135, 7, 29, 69, 74, 10, 31, 73, 86, 36,199,187,
+178,226, 42,222,183,186, 37,131,209,163,146,167,219,101,179, 48,105, 92, 7, 3, 58,105,159,222, 54,107,246,180,163,244,227,175,
+242,199,195,213, 98,251, 97, 35,154,235,139,118, 20,215,225,105,251,232, 95, 66, 56, 2,167,243,227,216,163,114,135,158, 56,241,
+244,152, 44,247,127, 14, 30,174, 9,176, 30,138,207, 31,204,112,237,227,124, 52, 21,113,178,206,159, 81, 24, 60, 65,118,145,126,
+104,114,230,217,191, 54,227,182,249,204,165,217, 8, 5,108, 21,113,213, 78, 31, 78, 13,226,168,208,243,203,168,221,143, 2,201,
+187, 76, 91,107, 10,105,212, 85, 14,160,131,145, 7, 21,114, 35,166,133,203, 45,162,187,110,200, 27, 41, 88,203,188, 99, 50, 73,
+151, 20, 87, 18, 95,182,174, 50,210,182, 97,130, 61, 3, 68,251, 49, 93,170, 19, 65,234, 72,228, 89,208,241,245, 20, 66,149, 79,
+175, 44, 70, 88,218,107,181, 33,244,209,150, 0, 67, 99, 45, 71, 14, 72,122, 67,117,226, 10, 93,104, 55, 8, 7, 38, 56, 51,113,
+124, 5, 59, 78, 31,186,131, 46,165, 77, 10,219,119,108, 86,216, 14,250,222,242,181, 45,231, 85,157,114,207,232,197,121, 45,198,
+101,197, 66,170,101,215,246,133,201,113, 28, 74,134,219,144, 70,140,243, 64, 39,235,166, 37,181,113,193,208,129,197,146,166, 37,
+174, 90, 28,116, 35, 89,244,130,130, 2,189,234, 0, 9, 25, 30, 36, 26,143, 12, 91,184,211, 90, 14,129, 21,230, 45,153, 73,141,
+ 84,167,238,200, 82, 11,168, 21, 66,138, 50,170,123, 5, 72,238,197, 59,150,244, 37,155, 69,121,241, 75,218,151, 8,247, 77, 1,
+109,180,176,234,233, 74,132, 3,165, 85, 9,169,225, 94, 35, 25,119, 90,131,170, 35,139,169,124,236,171,235, 78, 64,113,232,175,
+253,244,150,180,173, 77,171, 77, 80, 69,105, 92,235,192,119,112,197,170,215,129, 34,150,214, 73,228,173,155,205,169,155,115,108,
+ 50,218,212,130,242,138,244, 35, 49,164, 21,154,230,124,194,185,246,253, 3, 17, 74, 84, 69,184, 92, 77, 80,140,216,237, 75,182,
+223,209, 42, 8, 73,144,218,168,172,194, 16,179, 82,189, 58,200,242,249,105, 94,210,125,184,161,153, 21, 77, 13, 14,156,232,201,
+252, 75,156, 9, 76, 27,155,225, 33,196, 54,117, 56,216, 64,120, 26,122,137, 83,136, 87, 20, 40, 19,168,131,159,127,118, 50,220,
+165,169,210,187,203,109, 25,182,137, 86,233,140, 55, 42,216,218, 21,120,116, 4, 58,218, 91, 40,105, 5, 77,150,194, 80,117, 41,
+ 70,164,147,152, 21, 57,248, 97,214,238, 74, 28,198,220,217,114, 53, 92, 65, 8, 38,222,167, 33, 48,175, 72,172, 21,182,160,218,
+200, 90,135,111,187, 92,133, 82, 40, 19, 94, 57, 12, 90,133,218,247,148,238, 71,104,155, 27,137,118,229,250, 10, 81, 67, 50, 60,
+174, 23, 20, 83,234, 41, 42,169,204,168, 40,128,172,200,169,207, 17,100, 73,180, 62,220,233,196,145,109, 21, 50, 46,205, 72,189,
+ 52,167, 99, 54, 53,250,116, 66,201, 66,147,172, 10, 43, 85, 14,116, 38,181, 3,183, 24,217, 19,165, 17,185,136,151, 62,102,223,
+ 54,247,212, 77,183,202,155,173,187, 69, 31,188, 71,118,215, 25,182,129,175,169, 37, 10,108,171, 58,228,148,168,215, 25, 24,246,
+ 60, 91,190,129,253, 66,246,216, 83,183, 66,156,139,108, 97,175, 73,134,152, 1,106, 8, 43, 42, 43, 42,168, 3, 86,148,132,165,
+ 32, 19,153, 3,179, 44,119, 24,235,117, 78, 54,228, 28, 85, 11,119,148,173,196,180, 68, 98, 61,173,228, 55,112,108,173,197,191,
+228, 74, 70,176, 52,106, 36,212, 2, 19,168,234, 57, 87,134, 34,185,105,182,106, 99, 74, 48,142,164,178,253,189, 99,237, 11, 3,
+119,200,232, 23, 43,139,175, 81,244,201,171,133,106,109,103, 36, 40,126,175,152, 87,133, 59, 49, 54, 61,165, 22,234, 25,119,227,
+225,214, 60, 72,236,158,113,207,187, 92, 30,187, 94, 26,244,167, 54,219, 81,214,251, 73,251,207, 76, 20,184,160,146,138, 12,232,
+ 9,174, 46,172,180,163,240, 42,190,255, 0,178, 50, 99,126,114,127, 17,152, 87, 87,247, 68, 87, 29,130,234,220,103,246, 10, 82,
+212, 74,139,105, 52,211, 83,222, 63, 54, 29,110,220,164,212,164,245, 5,113, 72,219,183,108,104, 8,113,185, 5, 0, 63,154,202,
+126,195,199, 26,117, 26,236, 38, 60, 70,105,184, 72, 40, 9,210,162,116,130, 62,207,205,130,149, 32,148, 92, 67,187, 57, 72,247,
+ 21,146,114, 3,188,253, 24, 54,135,143, 77, 13, 37, 73,117,226, 84,224,162, 19,237,237,194, 33,174,240,131,247, 56,126,153, 65,
+ 87,222,102, 7,233,192,170,199, 57, 39,169,183,180,182,148,139,195,194, 80, 73, 41, 42, 20,202,184,213,195,199,230, 69, 41, 35,
+170,186, 94,228,245,202,235,113,142,137,109,233,179, 54, 67,174, 44,131, 90, 3,238,229,223,141,251,114,217, 18,163,141, 89,214,
+209, 97,182,195, 73, 97,177, 70,210, 2, 64, 25, 80, 14,204, 85,222,222,163,148, 69,203, 52, 21, 60, 48,170,109, 11, 67, 30,152,
+173,107,135, 43,129, 64,222,128,238,167,141, 48, 57,133, 12,232, 53,247,178,238,194,110, 22,129,145,151,148,112,194,128,106, 43,
+183, 11,160,180, 50,150,148, 77,123, 48, 54, 20, 98,136,108,145,158, 94, 24,109, 71, 40,134,244, 77,127,148,225, 55, 15, 12, 80,
+ 64,174, 5, 32, 49, 74,225,119, 0, 8,160,174, 10,128, 48,160, 97, 65, 69, 52, 24, 74, 0,153, 7,129,246, 97, 80,180, 49,233,
+ 43,182,148,195,147, 13,160,244,187,114,250,112,181, 13,160,244,187,168, 78, 6,197,218,103,210, 20,236,213,132,168,109, 60,224,
+218,205, 78,133,102,109, 45, 13, 10, 91,165, 74, 79,102, 74,254, 12,124,199,102, 85, 85, 61, 62,113, 36,206,170,117,202,228,196,
+ 87,221, 72, 70,157, 42, 82,115, 41, 89, 34,189,253,152,123, 4, 31,117, 91, 23, 25,134,153,101, 58,160, 58, 75, 73,116,212,208,
+184, 41,249,205, 48, 65,212, 94, 35,102,215,156,141, 14,219, 95,168,148, 22,165,165,103, 58, 37, 43, 53, 72,175,183, 17,221,225,
+ 81,164,150,194,134,101,170,225,101, 90,179, 73,143, 40, 40,158,197, 37, 36,159,174,163, 21, 37, 45, 80,146,214, 52, 30,122,110,
+145, 3,110,115,122,247,179,214,238,132, 73,138,181,176,146, 1, 14,190,219,237,184, 0, 35,133, 27,245, 8, 63, 71,110, 59, 63,
+ 46, 93,174,126, 60,187,228,191,236,145,203,117,184,255, 0,227, 77,125,180,101,248,132,101, 74,233,246,227,217,148,143, 63,107,
+ 95, 78,160,244, 9,207, 87,217,133,222, 20, 7,160, 60, 62,172, 38,241, 40, 3, 25, 29,224,125, 24, 55,137,180, 34,227,234, 26,
+106, 48,237,195,168,138,147,158, 61, 57,236,253,218, 37,110,199, 99,106,185, 4,235,112, 33, 32,234,160,169, 80, 29,244,195,212,
+144,171, 67,135,183,182,204,182,219,119,148,184, 86,208,126, 5, 11, 52, 4, 82,153,240,196, 23,225, 66,205,167, 94,102,178,109,
+145,160,132,173,186, 40,241,203, 25,178, 69,135,167, 3,102,197,117,136,204,151,132,197, 40,181, 64,164,133, 26,231,219, 74,226,
+ 6, 91,181, 45, 53, 28, 46, 54,255, 0,143, 97, 41,134, 40,149,103,171,188, 98, 68, 18,153,168, 25, 69,185,149, 37,218, 13, 32,
+231, 76,242,241,196, 46, 85,100, 90,145, 77,225, 17,169,236,149,172, 85,161,255, 0, 86, 56,168,248,248, 98,104, 64,134,244, 52,
+ 42,189,237,182, 25,113,183,101, 75, 0,201,247, 91,104,112,238, 9, 24,150, 86,209, 81,212,138,237,105,206,218,100, 46,201,118,
+ 88, 37,212,148,199, 4,144, 74, 73, 32,182, 40, 71,106,205, 61,184, 32,168, 53,104, 73,175,144,226, 93, 45,238,169,230,143,195,
+172, 33,106,113,176,164, 36, 41,106, 81, 9,175,153, 62, 60, 51,174, 31, 53, 84, 44,181,101, 95,185, 54,114,212,244,134, 36,212,
+180, 53,154,147,161, 69, 0,148,133, 38,164, 18, 41,221,140,187,208, 93,132, 73,209,137,114,238,237,120,178,220, 19,103,154,234,
+141,177,191, 59, 30,165, 10,168, 5, 91, 78, 96,138, 19, 78, 32,226,141,182,225,161, 43,123,145,117,217,238,246,169,109, 27,130,
+ 16,148,203,124,172, 37,227,229, 80,242,234, 8,212, 40,144, 42, 6,156,147,157,124, 41,109, 69, 73, 14,132,146,102,245,161, 65,
+247, 83, 36,141,109,185,229, 30,169, 32,144, 83,164,121,135,104,210, 70,117,246, 30,202, 57, 80,162, 55, 48,164,149, 24,237, 26,
+210,236,186, 56,133,160, 52,225,124, 52,213, 80, 75,104, 40,168, 79, 10, 38,148,168, 5, 32, 26,247,113,202,148,232,248, 26,237,
+ 41,106,153,160,212, 25,205,171,212, 97, 90, 83,154, 84, 27,214,191, 53,104,123, 83,166,164,112, 80,200, 97,110,168,202,148, 27,
+109,114, 76,204,251, 93,198, 98, 66,165, 56,226,198, 73, 1, 41, 42, 78, 99,128, 6,131, 53, 85, 57,226,186,158,198, 89,157,183,
+ 52, 4,207,118,194, 71,196, 81, 37, 69, 77,107,121,173, 37, 68,100, 71,152, 80, 26,119, 19,135,220,146,150,136,174,160,226,245,
+ 30,182,254,241, 98,223, 36,234,170, 91, 88, 81, 65, 0, 80,138, 18,107,153,204,215,135,241,227, 59, 34,205, 81,173,143,119, 85,
+ 94, 3, 22,233,190,221, 55,190,241, 23, 0,149, 57,183, 32,167, 67, 10, 9, 73, 37, 0,128,165,208,171,129, 87, 5,118,138, 97,
+152,150, 84, 34,251, 89, 95, 38,238,249,247, 35, 75,117,110,152, 14, 73,111,240, 6,125, 87, 73, 46,132,178,173, 52, 80, 36, 80,
+ 16,158,227, 79, 26, 87, 27,152,109, 66, 26,179, 39,168,207,115, 91, 85, 12, 91,247,157,210, 19, 13,166,255, 0, 61,113, 17,233,
+253,211, 17,135,222, 43, 79,148, 5, 52, 77, 64,162,105,227,133,187,121,203,229, 85, 41, 91,114,124, 88,249, 97,142,171,211,191,
+ 12,210, 86,212, 87, 1,113,162,165, 21, 43, 89,204,146, 79,101, 56, 12, 94,199,179,163,220,234, 77,103,226,208,177,246, 85,150,
+ 44,134, 3,107,104, 5,102, 28, 70, 70,160,100, 78,120,158, 84,165, 40, 89,141,165, 93, 71, 6, 44, 35,104, 79, 84,155, 82, 10,
+237,143,168, 41,214,207,234,211,183, 13, 82,104,134,229,149, 23,160,250,191, 74, 91, 2,100, 37,105, 20,160,167, 28, 91,140,180,
+ 35,117, 70,147,215, 29, 39,209,121, 57,167,135,183, 23,173,209,162, 25, 72, 68, 48,234,188,232, 53, 79,118, 36,105, 80,130,118,
+147,212, 65,235,228, 38, 86,168,107, 20,116,101,151,127,118, 43,206, 37,119,110,128,178,109,166,174, 18,125,101,123,164,228, 49,
+ 45,171,124,203,112,130,161,116,242,150,197, 21, 15, 51, 29, 76, 23, 13, 64,105, 1, 57,169, 93,217, 28,111, 98, 21,174,192,238,
+ 30, 79,237, 89, 22, 13,157, 25,185,236,165,153,206,128,226,208, 0,170,107,192, 28, 45,235,149, 98, 70, 26, 18,246,216,160,161,
+ 29,189,184,137,177,251, 67, 22,191,162, 62,188, 21, 21, 68, 1,148,142,202,253, 56, 85, 33,118,134, 17,251,242, 78, 13,204, 54,
+134, 12, 10, 80,112,250,112,187,131,104, 4, 81,196,113,240,195,183, 11, 64,218, 13, 60,112,218,176,161,128, 42,105,219,133,220,
+ 20, 20, 25,131,130,163,148, 67, 36,154,112, 63, 86, 17,134,208,193, 38,149, 53,192,131,105,148,182, 73,203, 11, 81,118,153, 49,
+193, 57,211, 5, 67,104, 62, 13, 39,180, 97, 55,137, 64,166, 49,240, 56, 93,204, 93,160, 76, 90,103, 76,253,152, 55, 49,104, 27,
+225,235,196,125,131, 5, 66,128,248,122,127, 38, 10,136,226, 20,162,157,131, 10,152,141, 80, 47,164,154,215, 14,168,135,158, 86,
+ 59,123,239,219, 96, 50,234, 66, 84, 16, 42,105,145, 36,234, 6,185,118, 99,230, 75, 46,138,135,167,203,136,229,183,172,238, 59,
+118,115,226, 21, 80,125, 69,208,255, 0, 56, 10, 10, 12, 58, 82,208, 34, 72,236,118,213, 95,182,196,171, 91,228,122,177,170,157,
+ 73,247,130,141, 10, 85,246,225, 91,166,164,137,104, 66,183, 40,106, 46,226,134,203, 40, 45,188,181, 0, 74,105,154,156,108, 82,
+163,142,117, 7, 12,187, 45, 40, 71, 53, 66, 87,177, 97,177,118,177, 78,189,145,247,205, 60,150, 22,130, 0, 81, 67, 43,244,200,
+246, 18,113, 66,109,238, 72,106, 75,109, 72,175, 45, 55, 34, 97,243,206,205,117,104,106, 99,226, 93,128,165,171, 32,144,235,203,
+104, 18, 79, 96, 11,250,177,211,116,171,142,205,200, 75,240,201, 63,126,190,234,152, 57,201, 92,140,151,106,161,215,141, 48, 41,
+ 83,143,113,220,207, 58,165, 98,131,169,148, 4,212,143,179, 2,147, 17, 68, 40,105,190,193,246, 97,219,135,108, 48,168,245,207,
+179,195, 6,241,187, 64, 89, 73,226, 48,190, 32,109, 8,244, 84, 58,146,131,238,145, 66, 15, 2, 14, 89,225,206, 97,180,168, 57,
+135,210,214,192,158,185,219,146, 20, 50,169,174, 5, 60,166, 27, 28, 79, 19,167, 18, 70,234,174,161,180,227,173,193,182, 96,217,
+175,179,161,134,212,220,116,188,182,218, 14, 3, 81,159, 12, 65,126, 37,219, 13,112, 99, 21,235,109,169,180, 4, 69, 77, 50,214,
+181,211,129,227,140,249, 34,204,162, 35,183,183, 4,232,178, 52, 93, 2,148,202,124,141,211, 33,151,126, 33,105,140, 81, 85, 28,
+102,122, 23,215,140, 36,102,224,170,202, 19,157, 61,190, 24,125,184, 37,196,145, 42,141,119, 91, 24,180,194,118,123,233,245, 22,
+106,144, 79,102, 89, 1,137,225,168,178,134,154,149, 86,229,104, 41,245,202,156, 52,168, 26, 37, 0, 86,131,195,196,226, 94, 5,
+ 25,194,133,111,186,109, 50, 28,144,187,162, 78,153, 77, 26,182,105,195, 73,168, 72,197, 91,178,117,170, 35,104,121,229,253,253,
+233, 13,167,212,212,137,201, 89,245, 43,238,145,233,158, 1, 66,134,153,231, 94, 7,134, 89,203, 25,111, 90, 17, 37, 65,109,199,
+183, 45,210,229, 45,107,107, 83,171, 73, 89, 75,110,182,133,133, 85, 69, 68, 18,106, 73, 2,160,120,101,226,199, 10,162, 57, 70,
+165, 89,117,179,202,182,110, 54, 38,100, 90, 65, 91,100, 2, 56,211,138,128, 61,131, 25,247,173, 80, 72,181, 18,107,183,111,239,
+ 33,197,178,165, 40,176, 2, 86, 40,162,105,144, 42,204,112, 63,145,174, 35, 77,199,136, 82,186,143, 18,174,146, 35, 50,183, 97,
+121,148,176, 10, 20, 10, 74,178, 52, 21,165, 61,148, 56,142,255, 0,196,139,150,174,109, 9, 19,152, 23, 8,215, 47, 65,146, 10,
+ 40, 14,151, 10,193, 69,120,154,166,137,200,255, 0, 46, 51,174, 65, 35, 71, 31, 38, 68,162,203,204,105,179, 37,139,125,227, 73,
+135,146,189,102,188,202, 10, 4,144, 87,165, 96, 28,141, 60,198,190, 61,152,165, 40, 83, 84,107, 67, 54,174,141, 80,123,145,189,
+109,241, 53,173,181,161,197,249, 66,202, 84, 10, 73,168, 32, 40,112, 62, 21,197, 43,201,200,211,183,117, 36, 70,183, 22,237, 77,
+201, 79, 8,204,235,101, 31,235, 9, 82, 19,144, 81, 26,141, 18, 60,160,159, 1, 66,120,101, 65,132,180,156,120,144, 94,191,160,
+221,179, 17,117,220,146,220,105, 46,250, 81, 19, 81, 85,168, 0,148,154,143, 53,115,169,225, 80, 41, 76, 58,237,209,152,181,156,
+168, 75,119, 92,139,118,208,219,110, 74,188,184,148,193,108,128,134,192, 58,138,202, 42, 18,148,228, 10,178,168, 0,240, 53,239,
+197,120, 57, 74, 91, 98, 91,190,163,106, 46,165, 50,254,237,191, 93,238,174, 46,202,226,224, 91, 28,205, 1, 4,122,197, 36,212,
+106,112,103,219,192, 26, 83, 29, 37,156, 69,183, 84,114,183,242, 27, 99,238,221,143, 30, 36,214, 84,239,153, 75, 65, 10, 42,206,
+170,175, 26,251, 49,114, 22,148,120, 42, 14,199,248,184,150,150,209,187, 36,194, 75,117, 2, 67,103, 53,119, 10,229,135, 73, 22,
+148,182, 61, 9,237,155,113, 47, 90, 39,199, 52,120, 13, 43, 73,225,137, 20, 55, 45, 11,241,146,146, 38,182,219,172, 27,140,112,
+ 53, 3, 81,154,120,154,226, 38,134,233, 33,185,216,115,173, 18, 22,227, 85, 84, 69,146, 85,199, 44,241, 53,185,211, 70, 85,187,
+ 6,141,150, 34, 51,114, 64,112, 31, 57,207,236,197,164,233,192,172,208,214,237,218,116, 9,202,136,150,138,155, 21, 26,187,241,
+ 44,103, 82, 19,102,215,183, 19,117,149,241, 78, 39,239,149,157, 41, 94, 56,180,173,129, 99,114,203, 97,177, 50,238,134,166, 43,
+ 75, 25,123,217, 80,253, 56,209,199,178,169,169, 12,228,226,206,204,233,227,145, 27,126, 5,189,141,213, 46, 61, 94, 4, 42, 58,
+ 93, 79,119, 5, 16,112,251,247,182,124, 49, 28,149,120,151, 91, 49, 20, 5,123,120, 98,170,184, 59,104,160,142,107, 64,145,245,
+ 97,234, 99,148, 76,136,213,226, 63, 70, 23,120,109, 50, 88,225,252,184, 55,139,182,129,147, 22,185,254,140, 27,197,218, 24, 69,
+ 85, 43,157, 61,135, 7,136, 27, 76, 24,244,207, 63,175, 11,226, 6,211, 10, 96,146, 59, 79,136,195,148,234, 27, 0, 35, 3,153,
+ 3,219, 74,225,119, 11,181,138, 55, 20,131, 78,223,101, 48,199, 49, 84, 69, 12, 98, 56,231,236,193,226, 10,160,131, 33,133, 83,
+ 63,207,129,204, 93,130,136, 96,131,237,194,111, 23,104,175,195,130, 51, 25,251, 48,155,197,161,143,134,160,237,167,250, 39,248,
+112,120,161,180, 10,100, 17,199,243,140, 27,194,134, 62, 29, 29,180,195,183,133, 2, 41,144, 59, 50,239,194,238, 10, 5, 90, 40,
+ 51, 21, 3,183, 14, 76,107, 66, 74,111, 86, 73,167,211,135, 38, 35, 70, 61, 37, 86,148, 21,246, 97,106, 55,105,192, 48,238,150,
+120,187,106, 28, 47, 85, 46, 62,218, 18,149, 21,144, 9, 4, 1, 67,195,179,134, 62,100,183,197,190, 71,164,190, 38, 44,215, 4,
+ 63,184,204,152,170, 72, 97, 14, 22,194, 1,224,117,103, 90,215, 18, 77,232, 58, 40,149,109, 34,135, 46,211,190, 28,134,161,213,
+ 33,205, 62,233,112,164, 0, 43,217,137, 39,242,161, 19, 32,215,200,111,220,247,135,223, 16,135,163,165,167,197,125,208,164, 54,
+ 81,246, 40, 12, 86,185, 33,179,212,124,180, 76,103,111,237, 43,180, 45, 65, 0,165, 75,213,252,226, 85, 90,249,188,105,134,218,
+183,186, 73,145,221,116, 69,109,202,214,164, 93,238, 95,138, 33,117,121,137, 62,186, 20,115,243, 41,198,205, 7,213,141,107,211,
+ 80, 49, 28,170,253,103,118,165,180,164,169, 52,170, 65, 35,234, 56,247, 8,205,208,243,245, 26, 36,103, 66, 73,195,148,245, 22,
+134, 61, 58, 31,225,196,155,128, 42,153, 7,136,250, 70, 13,193, 64,191, 14,107,225,244,127, 6, 13,194, 1, 76,175,133,124,184,
+ 93,193, 64,191, 11,168, 80,159,203,233,194,238, 10, 21,119, 60,186,109,176,115, 19,110,202, 22, 40,204,198,220,206, 16,242, 29,
+ 41,160, 82,193,206,180, 25, 19,137, 33,119, 90, 48,225,169,202, 59,251,150,187,163,150,219,147,252,191,189,153,244, 67,169, 5,
+151, 66, 78,135, 19,224,120, 87, 16,222,130,228, 94,177,122,188, 72,197,234,193,103, 63,117, 28,132, 30, 58, 64,205, 88,173,225,
+186,240, 37,105,118,154, 22,123,117,198,212,234,230,176,128,148, 80,128,165, 12,232,112,199,160,248, 66,138,166,172,137,204,191,
+ 18, 71,226,203, 46,184,146, 74, 2, 19, 74,253, 28, 49, 53,180, 75,226, 70,133, 95,185,173,230,227,113,115,225,144, 16,218,105,
+146,248,128, 69,106,112,151, 37, 93, 10, 18, 85,100, 75,113,216,155, 13,250,113,198,180,164,100, 7,243,141, 71, 28, 86,185, 90,
+ 17,220,211,129, 11,121, 75,180,110, 38, 42,160,211, 11,108,133,102, 5, 2, 21,196,215, 42, 26,253,152, 49,110,210,165, 92,149,
+ 77, 73,173,182,108, 59,131,234,110,236,249, 45, 37, 69,157,104, 58,207,153,116, 42,168, 58,136,168, 53, 32,101, 79,164,217,220,
+218, 25, 7,185, 17, 59,206,220,136,235,109,169,181,122,193,197,250,207,173,223, 80,168, 84,112,160,243,209, 57, 38,162,160, 83,
+219,134,108, 82,226, 54,107, 81,162, 76, 37,197,140,183, 16,162, 86,218,220, 74, 10, 92, 39,202, 77, 82, 81, 79, 55,180, 17,245,
+ 98,173,251, 41,240, 99,117, 65,236,187,225,139,108,100,192,146,165, 37, 41,210,134,223,121, 62,242,146, 51, 32,145, 67,140,247,
+161, 36,100, 58, 13,193,102,114, 50,150,225,214,253, 2,150,156,200, 73, 32, 10,141, 71, 42,143, 12, 36,210,219, 82,197,185, 58,
+141, 76, 75,140,169,206, 57, 17,229, 37,132, 39, 82,130, 66, 82, 18, 77, 64, 53, 88, 52, 63, 86, 50,167,115,107,224,106,168,169,
+115, 54,174, 23, 40,150,200,141, 59, 6, 65,125,199,117, 59,165, 69, 94,153, 52,243,123,223,172, 83, 90,118, 87, 21,165, 45,207,
+129,102, 19,162, 30,118, 74,165,238, 89,136,132,242, 64,141,172, 6,136, 53, 38,170,160, 0, 18, 9, 39, 49,136,111,199,106, 46,
+ 97,197, 78,101,215, 7,151,140, 90,226, 23,146, 3, 19,193, 45,148, 41, 57,148,129,169, 85, 33, 68,131, 85, 80, 17,151,176,230,
+115, 92,156,180,124, 14,150,222, 52, 98,157, 56,149,223, 82,219,102,245, 26,221,104,147, 33,149,152,113, 94,146,220,145, 69, 20,
+128,250, 80,150, 85,254,143,144,138,156,170,170,118,211, 23,186, 12,214,246,165,196,198,235,246, 90,138,113,224, 84,118,194, 16,
+235,100, 1, 64, 8,227, 83,199, 29,114, 85,103, 37, 37, 66, 64,211,250, 93,101,109,154, 1, 66,105,221,135, 80,150,195,163, 37,
+251,102,232,182,149, 74,209, 4,103,219,227,133,148, 75,210, 68,206,209,116,117,162,151, 10,141, 20, 51, 29,149,195,237,104, 58,
+212,156, 89, 55,219,183, 23,219, 9,125, 6,168,226,174,204,177, 36,173,151,169, 93, 81, 53,135,119,180,222, 45, 75,109, 46,128,
+249, 20,165, 42, 74,189,152,171, 45, 25, 11,154,106,131, 52, 59, 54,224,129, 40,173,146,126, 28,156,189,132,226,107, 50,171,161,
+159,114, 52,100,199,110,109, 6,167,177,235,200,111, 83,138,205, 74,166,117,197,249, 99, 83, 81,109,201, 83, 82,121,203, 14, 88,
+ 91,238, 87, 83, 21,209,247,138,160, 66, 64,243, 86,180,160, 24,212,198,105, 71, 82,189,200,213,232,117, 71, 44, 58, 72,219,214,
+169,113,239, 87,148,106, 74,116, 60, 88, 85, 60,202,226, 2,169,135,221,201,162,208,116, 45, 84,188,160,219,163,194,101, 49,227,
+ 36, 33,148, 0,148,164, 10, 0, 7, 1,138, 30, 45,117,100,202, 6,192,103, 60,143,213,135,110,168,187, 67,165,128,120,140,252,
+115,193,188, 85, 0,201,140, 43,159, 15,171,243, 96,222,197,218, 24, 71, 71,211,225,252,120, 55,137,180,207,195,160,159,233, 96,
+222, 73,181, 25,248,112,156,135,189,244, 97, 84,152,155, 81,130,211,156, 8,169,240, 24,118,225,187, 12, 38, 50,201,204, 15,164,
+ 12, 27,152,109, 12, 35,169, 39, 44,135,134, 19,115, 13,162,137, 96, 28,232, 73,236, 39, 6,226, 72,197, 80, 80, 69, 7,219,249,
+119,225, 55, 11,180, 58, 98,119,140, 27,195,104,100,198, 72, 60, 48,110, 13,161,189, 14,202, 10,248,225,119, 11,180,194,154, 3,
+ 34,145,245, 97, 42, 59, 98, 48, 89, 87,234,225,119, 12,218, 96,180,120, 26, 97, 3,104, 66,197, 79,135,112,195,148,154, 13,130,
+106,139,158, 68,125, 35, 14,222,196,112, 8,168,233, 25,210,169,227,195, 15,132,234,198,237,160, 95, 69, 58,169, 67,236,166, 36,
+222, 20, 93,167,153,147,109,115,238, 76, 53, 57,134,202, 16,173, 34,169, 10, 52, 74, 10, 73,175,208, 8,199,204,248,151, 20,237,
+158,135,122,219,139, 38, 91,102,197, 13,137, 9,245, 17,164, 59, 85,229,145, 42, 43,226, 7, 30, 24,115,144,168,145,237, 27, 86,
+185, 50, 97,169,101, 44, 36,149,165, 36,230,170, 2,161, 95, 98,134, 39,110,176, 76, 20,117, 99, 59, 86,200,146, 55,114,193, 26,
+153, 17,234,178,123, 74, 28, 74, 15,218,126,188, 80,191, 63,133,139, 5, 86,141,109,197, 97,106,123, 83,109, 9, 36,201,148,223,
+220,212,128, 21, 64, 66,128,175,112,207,232,193, 98,243, 91, 89, 30, 66, 74,168, 98,228, 86,219, 68,107,145,177,169, 53,121, 50,
+ 25,212, 73, 20, 4,201,244,141,127,233, 98, 92,236,173,171,119,119,241, 49,163,109, 57, 47, 73,217,204, 48,151, 16,151, 83, 82,
+149,128,160,124, 14, 99, 30,249, 27,219,214,229,192,224,221,170, 83,208, 41,240,192,228, 5, 79,118, 88, 85, 48,240,204, 24,192,
+100, 81,159,176, 97,254, 32,120, 97, 67, 30, 2,159, 86, 15, 16, 60, 48,191, 15,225, 79, 97, 24,119,136,195,195, 0,102,156, 70,
+127, 78, 15, 16,111,134,103,210,174, 84,194,169,138,173,152, 84,100, 17,195, 6,240,118,198, 29,241,203, 77,167,204, 43, 81,179,
+110,168, 73,149, 18,186,144, 84,144, 20,133, 14,212, 43,136,196,138,235, 66,120,101, 63,206,158,145, 24,184, 88,224,158, 89,193,
+103,241, 24,142, 85,105,125, 90, 22,182,200,167,188,104, 13, 49, 44,114, 34,244, 99,224,154,117, 41,174,112,116,241,188,121,119,
+105,129,117,220, 79,160, 65,152,191, 69,214, 24, 73,163,100,138,138,168,101,225,133,141,184, 72,127,143, 55,167, 34, 25,115,228,
+182,234,184,237, 9,247,251, 60, 7, 26,177,192,108,188,244,183,144, 82,149, 38,191,171, 94, 56,115,133, 8,238, 74,188, 10,161,
+123, 67,214, 89,113,196, 19, 92,133,107,153,197, 75,144,109,232, 34,150,133,187,200,143,151,230,252,230,132,182, 55, 6,234,138,
+109, 59, 40,213, 72,114, 74, 52,184,226,123,208,221, 65, 53,241,194, 53,181,106, 34,139,145,200,125,101,236, 43, 31, 43,122,140,
+220, 59, 10,196,234,164, 68,177,175,240,197,188,182,195, 65, 82, 16,149, 44,232, 74, 86,225,210, 10,128,207, 50,107,225,136, 98,
+149,116, 41,228,186, 58, 17,173,151,117, 92,120,175,201, 11, 67,109,165, 7,239,157, 78,179,161, 67,213, 73, 57,129,229, 58,179,
+ 39,129,240,196,234,229, 4,130,162, 14,187,253, 28, 67,106, 74, 10,208,176,178,201, 77,104, 20, 74, 84, 91, 82,138,147,153,207,
+142,100, 96,170, 9, 70,162,145,218,122,228,219,178,219, 65, 48, 90,211,241, 15,132, 35,245,242, 74, 8,202,181,238, 28, 59,177,
+ 12,168,152,229,108,143,238, 13,156,229, 61, 88, 96,149, 55, 82, 41,168, 84,123,192,128, 73,166, 71, 16, 92,180,158,168, 54,140,
+ 45,183, 53, 45,132,160, 20,164, 40,182,181,209, 36,165, 67, 58, 84,154,125,191, 78, 42, 92, 90, 80, 88,167, 81, 40,150, 75,140,
+ 41, 46,204,101, 53,245,200, 78, 74, 5, 39, 42, 16, 85, 90,120,248, 99, 34,244,117, 53,172,199, 66, 85,183, 54, 75,226, 34,218,
+144,165, 56,203,133, 43, 96, 18, 20, 18,106, 10,146, 81, 82, 56,130, 69, 14, 35,146,162, 47, 89,183, 82,119,181, 25,183, 90, 28,
+102, 92, 66, 69,193, 9, 75,137, 42,101, 46, 33,202,100, 66,189, 66,116,229,151,110, 43,201,110, 84,102,173,141,182,221, 75, 7,
+109,239, 40,115, 82, 22,151, 92, 66, 80,116,184,148,104,214,221, 9, 21, 77, 52,113, 2,149,175,143,134, 50,175,218,124,141,155,
+ 57, 73,142,155,129,251,118,243,176,187,182,111,210, 17, 38, 27,236,136,233, 66,145,165,228,254,176,112,234,227, 69,214,134,157,
+128,226, 11, 91,173,181, 37,196,150,242,133,232, 56,179,154, 46,219, 90,102,219,190,202,177, 92, 1, 76,152,174,148, 40,168, 17,
+168,113, 10, 0,246, 40, 16, 71,129,199,125,139,121, 93,182,165,205,158,123,149, 97,218,155,139,228, 56,199,142,217,208,154,230,
+164,212, 98,201, 29,177,246,214,236,118,154, 41, 90,190,241, 35,129,227,150, 9, 92, 84,169,165, 13, 81, 50,177, 56,243,246,176,
+173, 4,190, 83,229, 41,224, 49, 89,100,166,130, 48, 36,251, 49,235,171,173,254, 30, 73, 74,136,161,212, 42,112,235, 87,156,139,
+ 16,157, 21, 9,174,219,177, 74,182, 62,151, 83, 85,106, 35, 42, 84,156, 75,110,203,148,168, 69,113,109, 85, 46, 61,179,176,175,
+247,120,109, 15,195,214, 75,160,105,242, 18, 79, 12, 94,142, 27,140,145, 7,136,164,142,137,228, 71, 77,223,141,219,155, 69,254,
+ 1,143, 17, 9, 58,156,113, 36, 41, 68,246, 12,104,187,234, 11,129, 4,109, 54, 93,188,187,233,251, 98,236, 57, 70,231, 2, 48,
+114,230,107,165,199, 70,160,128,127,154, 41,151,183, 21,174,101, 73,240,224, 79, 27, 72,158,179, 24, 36,118, 98, 5, 38,201, 84,
+ 40, 44,150,114,200, 97,119, 11,225,134, 12,172,102,120, 28, 59,112,205,166, 66, 18,156,178,174, 13,195,148, 3, 0,145,152,192,
+230, 42,141, 3, 20,142,204,206, 19,120,229, 16,201, 66,120,168,125,131, 2,155, 23, 96,100, 54, 65,225,246, 97,119,176,216, 5,
+ 54, 73,204, 19,227,195, 15,241, 6,208, 30,151,120, 35,219, 95,224,194,248,130, 80,202, 89, 30,240, 24, 60, 64,160,162, 25,239,
+206,191,102, 19,112,187, 69, 82,216, 72,242,215,219,132,220, 57, 68, 48,108, 40,102,156, 21, 13,161,189, 3,167,221,192,165, 64,
+218,101, 44, 84,208,164,253,184,119,136, 27, 64, 99,164,101,217,236, 56,117, 88, 80,194,208,148,166,189,189,152, 55, 13, 9,234,
+ 33, 32,149,140,135, 26,120,113,194,202, 84, 66,144,109,209,212,135, 35, 54,174,166,238,187,158, 2,166,160,208,197,132,250,102,
+ 62, 72, 52,167,165, 19,212, 93,125,163, 16, 59,209, 92, 73, 35,101,201, 84,173, 55, 39,204, 11,150,237, 77, 22, 61,145,107,153,
+121,220, 78,171,225,163, 70, 86,152,170,118, 65,168, 74, 18,218,131,143,170,167,176, 55, 94,207,100, 83,204,163,248, 71,172,126,
+209, 11, 79, 49, 58,221,230, 14,183, 44,251, 70, 53,134, 9, 82,154,245,174, 73, 17, 92, 66,168,105, 81, 53,215, 28, 85, 59, 72,
+141, 76, 73, 25,220,150,163, 36,163, 30, 3,191,254, 89,117,152, 90,252, 92,239,155,103,227,224,212, 90,190, 13, 63, 5, 66,106,
+ 71,196,252, 62,174,193,255, 0, 83,244,246, 98,122,202,131,106,251, 14,104,218, 86,161, 45, 15,195,148,138,219,216, 90,217, 7,
+180,133, 84,255, 0,239, 12,124,207,133,240,122,207, 68,200,117, 36,246, 75, 19, 97,175,197,130, 74,163,196, 67,137, 74, 83,157,
+116, 14,223,161, 67, 19,202,229, 93, 8, 99, 19, 65,137, 50,127,204,113,110, 76, 2, 98, 56,176, 29,211,144, 74, 86,159, 75, 82,
+171, 65,150,172, 88,187, 58, 11,110, 53, 70, 23,103, 13, 72,147,113,101, 39,225,229, 43,224, 91, 57,100, 52,250,164,140,184,106,
+ 24,161,118,231,194, 58, 16,169, 21,223, 87,100, 88,165,193, 46, 42,133,181, 58,146,170,208,234, 13,168,138,226,222, 29,186,148,
+179,154,218, 57,114, 53,166, 92, 98,227,186,214, 1, 13,205,142, 21, 79,116, 16,248,117, 99,236,166, 50,122,212,220, 98,227,218,
+154, 41,227,241, 79,177,175,188,235,180,195,110, 49, 84,118,206,164, 54, 75, 73, 63,232, 29, 36, 99,221,250, 14, 79,141,133,102,
+125,176,143,220,113,153,214, 60, 59,178,143,100,159,222,103,210,238,227,237,198,186,145, 83,104, 61, 21,126, 71, 14,220, 37, 2,
+170, 57, 86, 13,226, 80, 47,194,174,180, 20,251, 48,237,227,168, 3, 27, 44,199,218, 48,138,122,141,160, 62, 29, 64, 80, 39, 44,
+ 57,177,219, 76,124, 41,237, 24, 42, 27, 66,124, 39,135,219,133,168,109, 20,248, 84,246,224,168,109, 16,155, 96,183, 92,216, 49,
+174, 17,219,145, 24,154,232,121, 9, 90,106, 56, 26, 40, 28, 57, 92,160,109, 53,111, 91, 46,211,122,219,242, 54,228,152,232, 22,
+185, 13,169,133,182,148,128,144,149, 39, 78, 67, 2,158,181, 13,165, 35,203,190,128,182, 70,212,221, 10,191,110,105,102,237, 13,
+181,149,195,134, 90,244,144,143, 53, 83,174,132,234,196,210,191, 81,170, 5,195,189,183, 4, 30, 92,109, 55,111,171,183, 76,155,
+110,138,148,133,198,179, 71,248,135,210,221, 41,169, 45, 2,154,132,129,158,120,130, 83, 29, 67,196,174,188,119,150,223,223,125,
+ 74,239, 45,245,182, 3,136,181, 93, 46, 78, 58,200,152,222,135,146, 61, 52, 36,149,167, 48, 8, 80, 34,149,200,119,241,194, 66,
+117, 50,242,163,169, 8,176,177, 41, 16, 90, 12, 34,174,168,144,148, 45, 25, 20,210,153, 42,162,185,248,226,205, 83, 35,134,129,
+174, 22,159,245,213,184,202, 10, 22,132,143,185, 80, 94,130,165, 31,116, 17, 90,123, 42,112,217,208,145,173, 13,232, 12,185, 21,
+198,159,101, 26, 98, 56,163,173,210,130,167, 0,173,105, 85, 20,130,107,150, 67,235,196,114,224, 36, 19, 28,141,188,189,169,151,
+208,165, 54,230,104,245, 16,148, 85, 36,228,164,145,159, 14,242,105,132,124, 9, 33,196,141,220,172,109, 23, 92,142,194, 66,139,
+100,169,178,148,234, 20, 34,164, 81, 68,129,157,120, 1,138,119,146,100,202, 61,129,237, 74, 97,164, 22,155, 66, 62, 37,191,124,
+ 23, 2,150,105,144,201, 85,160,246,145,237,198, 69,216,235,169,167,141, 45, 7, 27, 43,200,117,114, 45,206, 40,167,212, 5,198,
+210, 10, 84, 60, 82,164,214,148, 36, 12,251, 56,226, 9, 70,133,251, 46,172, 93,118,153,140, 67, 67, 79, 16,151, 21,247,138, 85,
+ 41,253,106,168,214,158,218,125, 88,134, 83,161,105,219,170, 28,108,178,111,176, 89, 43, 77, 72,165, 86, 65, 90,148, 16,149, 84,
+172, 16,176, 52,249,123,233,221,138,115,138,151, 18,107, 55, 36,137, 20, 29,222,196,153, 13,139,140,161,234,157, 41,215, 80, 84,
+ 82, 65, 0, 42,169, 38,160, 30,243,158, 42,206,221, 52, 46, 70,253, 53,166,168,215,231, 78,194,153,127,178, 67,230, 69,189, 1,
+ 51, 91, 38, 29,207,210, 0, 5, 54, 87,165,151,179,167, 2,116, 30, 39,204, 59, 6, 87, 58, 38, 99,141,201, 90,124, 31, 2,191,
+ 89,193,223, 8,221, 92, 95, 18,182,143,183,174,134, 86,133,173, 84,111,135,210,113,214, 43,109,156,202,183, 70, 78,172,155, 43,
+227,155,140,225, 4,172, 36,235, 24,137, 90,117,101,157,188, 11,139,147, 92,148,221, 59,138,211, 46,109,174, 10,228, 91,152,160,
+ 43, 74,107, 67,220, 41,137,108,226,232, 74,167,169,102,114,123,167, 59,158,235,223, 45, 90, 46, 49,221,140,208,247,170,130, 9,
+ 60, 7,102, 44,226, 89, 80,147,108, 50, 25,210,214,143,151,197,225,155,147, 14,180,245, 35, 2,149,133, 41, 57, 1,151, 17,139,
+202,112,139,169, 26,148,154,161,210,220,190,228,197,163,106,216,154,183,220,144,137, 83, 16, 19,231, 90, 70, 84, 20,160,196, 55,
+ 50, 36,222,131, 85,178,103, 22,214,196,102,131, 44, 35, 75, 67, 32,148, 10, 1,245, 98, 29,213, 37, 81,161,180,220, 84,254, 67,
+ 6,225,104, 28, 69, 64,204,143,209,131,120,234, 10, 8,221,132, 87, 5,104, 20, 51,240,221,128, 97,219,197,160,100,176, 0,161,
+ 2,163,191, 9,184, 85, 16, 22,171,221,245,140, 21, 13,161,189, 5, 30, 7,243, 97, 84,135, 40,134, 75, 42, 25,112, 31, 70, 23,
+112, 53, 64,226, 57, 35,248,112,110, 26, 28, 68,175, 17,159,209,131,112, 24,248, 51,221,133,241, 7,237, 21, 68, 76,171, 76,188,
+107,131,196, 13,161,211, 17, 32, 84, 28,252, 48,120,130,237, 12, 24, 72, 20,207, 7,136, 27, 67, 6,146,159,102, 17,204, 54,153,
+ 62,152,203, 42,247, 97, 55,176,165, 13, 91,173,210,221, 99,183, 61,120,188,190,212, 59, 60,113,169,249, 82,157, 67, 76,182,158,
+245,173,194, 18,145,237,195,148,187,195,109, 57, 21,214,243,234,243,144, 59, 53,180, 33,235,251, 55, 25,207, 36,169,136,246, 96,
+103, 41,121, 84, 13,108, 85,164,214,185,106, 88,174, 33,187,150,173,247,146, 70,203,230,202, 3,155, 31, 48, 78,102, 93, 89,118,
+ 39, 40,172,173, 89,226,157, 72, 68,235,168, 18,229, 47,207, 79, 81,182,147,247,104,162,120,133,165, 99,250, 88,142, 89,143,130,
+ 27, 40,197, 17,141,187,202,110,181,122,130, 91, 87, 13,228,103,191, 98,113, 40,125,147,125,123,224, 98,250,107, 77, 82,227,113,
+146, 16, 10, 73,243, 81, 9, 57,103, 76, 86,156, 46, 93,122,189, 1, 78,156, 11, 91,100,124,183,236, 77,164, 57,205, 59,195,146,
+146,160,218,191, 11,177,160,196,142, 8, 86,165, 37,199,156, 5,199, 18,161,220,148, 30,218,226,213,172, 69, 30, 34, 74,236,155,
+ 47,157,135,202, 78, 93,114,194,220,109,123, 6,203, 22,211, 24,128, 20, 98,163,239, 86, 7,255, 0, 17,213,234,113,121,112,212,
+163,139,177,106, 60, 4,112,169, 32,248, 70,206, 64,140, 59,196, 5, 10, 25,248, 47,101, 61,135, 7,136, 59,105,195, 27, 10,212,
+203, 49,174, 16,101,143,245,181, 75,113, 37, 68,213, 32,169,178, 83,244,106, 72,199,204,190, 37, 34,143, 64,148,106,205,203, 19,
+ 79,200,180, 76,128,180,148,170, 33,117,101, 73,200,128,165,106, 41,250,241,102,228,146,146, 34,183, 10,166, 30,219, 25, 46, 88,
+ 95,163, 69,165,165,133, 42,180,166, 64,254,122,140, 58,119,119, 5,171,110, 28, 77, 75,149,214,220,254,210,135, 9,148, 6,174,
+105,147, 84, 50,146, 1,173, 52, 42,157,226,164,253, 88,171, 53, 86, 62,212,190, 38,138, 87,156,187,138, 60, 29,214, 35,203,111,
+ 90, 82,234,234,159,244,129, 21,250,142, 55,122,124, 62, 9, 51, 19,169, 74,154, 22,127, 77, 54, 55,127,201, 50,173, 46,183,247,
+151, 89, 33,218, 15,213,214,230,188,190,138, 99,151,243, 29,197,110,126,207,188, 48,227,185,122,191,137,213, 54,166, 27, 84, 6,
+136, 95,170,178,148,184,181, 84,159, 59,137, 14, 44,103, 94, 10, 81,199,173,121, 15, 47,198,233,150,255, 0,203, 85,236, 57,222,
+185,107,110, 68,141,159,134, 3, 62,204,118,138, 70, 62,208,122, 64,101, 95,207,133,222, 27, 76, 6,169,219,246, 28, 38,224,216,
+ 96,176,158,194, 43,227,133,241, 3,104, 61, 4,255, 0, 59,243,255, 0, 14, 13,194,108, 50, 88, 61,135,242,250,112,187,131,105,
+131, 29, 74,200,208,251, 63,151, 10,166, 27, 65,240,170, 25,129, 79,163, 14,241, 3,105,145, 25,106,203, 63,171, 7,136, 27, 67,
+136,117, 60, 51,241,254, 60, 38,241, 84, 76, 60,203,108, 54,167, 95, 41, 75, 73, 5, 74, 90,141, 2, 64,204,146, 78, 67, 11,188,
+117, 10, 67,153, 93,127,116,197,203,105,111,192,153,122, 85,206,231, 28,150,220,102,206,194,228, 39, 80,200,128,241,210,201,167,
+130,241, 12,242,163, 1,124, 38, 86,183, 95,155,239, 76,240,210,127,238,251,217, 87,122, 99,193,203, 62, 57,201, 56,129,245, 40,
+ 80, 29,186, 51,203,126,171, 55,237,183,154,252,246,221, 92,196,180, 33,104,182, 95, 46,243,174,176,208,246,128,242, 25,145, 33,
+ 78,180, 21,164,148,106, 9, 32, 16, 50,174, 52,113,230,164,147, 70, 46, 91,213,141,251,114,221,241, 9, 97, 13, 51, 93, 26,144,
+ 66,155, 85, 0, 42,173, 73, 81,160,197,202, 21,237,186,146, 6,236, 15,190, 94, 67,117,248,177,168, 37, 9, 73, 81, 4, 36,174,
+133, 32, 87, 33,218, 52,229,129,170,150, 19,160,139, 54,182, 88, 96,165,149, 13, 33, 73, 40, 83, 37, 68, 21, 42,137, 74,106,217,
+ 58, 73,202,188,120,230, 59,112,183, 18, 98,168,232, 46,245,173,216,169, 67,237, 10, 70,123,246,138,111, 91,101, 43, 25,209, 75,
+ 33, 65, 92, 15,126, 33,156,104,133,113,160,219, 58, 9, 91,153,234, 83, 10,168, 33, 42,109, 64, 17,217,222, 73,241,197, 59,148,
+ 44, 90,208, 69,235,124, 88,205, 58,243,229, 72,200, 29, 85, 20,166, 66,166,164,128, 61,135, 20,111,198,168,187,106, 41,115, 12,
+203, 45, 54,242, 23, 17,197,165,198,252,142,128,181, 36,103,226,160,154,131, 90,229,158, 42,109,162, 44,198, 90,232, 73, 45,232,
+ 15, 1, 81,234, 54,164,132,233, 86,106,211,157,116,131,195,218,120, 99, 62,228, 40,107, 99,203,115,245, 18,157,191, 2,216,235,
+ 2, 51,141, 52,165,169, 36,209, 20, 73, 81,226,165,170,164,212, 0, 40, 43, 76,241, 70,234,104,209,178,147, 17,190,108, 86,158,
+113, 47, 71, 1, 50, 18,191, 42, 50,108, 0, 73, 81,166,148,211,222, 60, 10,123,134, 93,144,198,227,230, 77,118,202,161, 49,217,
+240,147,112,180, 75,219, 87, 39, 18,228,121,205,174, 17, 36,130,148,135,147,233,235,242,255, 0, 54,160,143, 16, 49, 20, 94,219,
+177,146,210,140,149,255, 0,198,226,245, 47, 78, 83,252,153,249,187,124,117,139,134,242,184,194,137,108,117,176,240, 83, 15, 9,
+ 10, 85, 69, 82, 7,165, 80,107, 94, 53,199,164,198,105, 87,208,142, 49,219,122,250, 75,203,147, 95, 41, 27, 21,134,211, 63,255,
+ 0, 49,165,182,253,221,227,162, 17,137,168,250, 77,131,197, 90,133, 53, 28, 39,136,144,248,196,232,126, 65,244,151,176,185, 27,
+182, 21,183,109,197, 83,139,132,169,231,164,165, 62, 98,124, 0,196,126, 61, 7,109, 39, 22,174, 85,236,187, 76,179,113,133, 1,
+180, 78, 57,250,186, 65, 80,207,190,152, 60, 81,212,168,252,155,122, 70, 73, 24, 99,144,229, 17, 84, 67, 74,114, 61,184, 85, 49,
+219, 5, 19, 21, 3, 49,150, 7, 48,216, 25, 49,232,106, 56,119,241,194,120,131,212, 67,122, 58,178,204,143, 0,112,111, 23,104,
+ 96,210, 65,242,224,223,222, 27, 67,122, 32,241,207,194,135, 11,188, 54,134, 49,205,124,163, 47,102, 7, 62,241, 84, 76,165,145,
+ 79, 48,207, 2,152,109, 1,106,153, 1,151,183, 15,140,131,105,141, 9,237, 7,235,194,238, 97,182,160, 83,141,165, 10,114,180,
+ 64, 5, 74, 38,148, 72, 2,164,147,217, 65,132,221,223,168,218, 80,128,110, 30,170,121, 1,181,215,232,204,221, 17,100, 73,170,
+135,167,107,245,110, 4, 41, 60, 66,140, 20, 58, 18,124, 20, 71,231,195, 30, 76, 99,243, 10,161, 81,149,238,182, 57, 20, 27,117,
+ 80,159,157, 44,180, 42,160,204, 23,155, 52,165,107,254,179,233, 1,244,226, 31,173,136,229, 6,198, 9,191, 48,126, 88,193,109,
+199,211, 98,190, 41,134,255, 0,235, 12,104,168, 66,188,186,170, 15,174,123, 48,215,157, 94, 4,145,181, 30,210, 49, 59,230,143,
+177,131,202,252, 47,109,190,227, 9,207,254,240,185,195,130,181,103,252,210,151, 15,213, 92, 57,228,203,148,106, 51,108, 19,249,
+134,217,223, 51,181, 76,140,167, 54,246,220,134, 29, 62,226,165, 94, 88, 40, 25,118,132,161, 36,211,190,163,217,132,142, 68,155,
+225, 64,147,130,231, 82, 23,116,249,159,115,109, 78, 22,163, 67,180, 54, 66,189, 61, 48,227,201,124,215,141, 2,149, 32,130,105,
+220, 48,249, 74, 76,143,199,143, 36,105, 63,204,239,152, 63, 58, 36,183,254, 91,129,185, 99, 88,164, 4, 34, 59,177, 96,155, 91,
+ 11, 95, 29, 98, 66, 91, 98,169,175,244,178,239,197,119, 25, 46,214, 61,100,119, 33,198,223,208, 47, 88,124,193,154,139,151, 48,
+175,112,162,200, 58, 67,171,186,205,145, 61,244,161, 38,164, 32,179,235, 13, 95,215,166, 92,112,170, 50,124,159,175,248,137, 41,
+ 57,115, 46, 94, 94,252,187,182,101,142,210,229,183,125, 94,101, 93,150,226, 2, 74,162, 32, 68, 32,212,149,106, 86,165,149, 3,
+195,128, 62, 56, 45, 97, 78, 79,226,159,179,236,194,133,197,177,121, 11,202,142, 91,161, 39,102,216,226,195,144,144, 0,146,166,
+253,105, 21,160,175,223, 60, 84,230,102,164,128,174,223,102, 46,198,204, 80,215, 4, 74,196, 6,192,168, 57,247,226, 77,200,122,
+141, 57, 6, 17, 64, 25,112,194,239, 66,131,225,128,237, 63, 86, 5, 48, 49,240,169,241,250, 6, 23,112, 25,248,100,210,153,224,
+168, 84,225,173,178, 18, 55, 37,224, 53,253,149,106,114, 74, 43,218, 99,203,175,111, 98,130,199,213,143,154,105,240,163,208,228,
+181,208,150,108,107, 60,121,175,221,193, 21,102, 82, 53,161, 67,141, 84,210, 43,199,182,181,196, 87,110,183, 24,190,117, 27, 8,
+209,154,183,171, 35,177,173, 15,183, 18,168, 79,166,168,238,170,153,138,162,153,253, 56,124,110,235, 66, 73,170,162, 56,250,108,
+151, 45,166, 31,130,166,219,187, 66, 83, 4, 5, 31, 54,165, 39,212,237,237, 57,226, 95, 18,178, 43, 74, 20,213, 20,119, 80,155,
+ 64,166,237, 18,230,159, 52,146,242,210,231,114,193,108,144,126,177,141,252, 43,180,183, 36, 97,117, 8, 38,203,207,164, 87, 90,
+189,216, 18,181,180, 80,132,201, 74, 27, 3, 58, 39, 83, 78, 15,177, 42, 24,227, 60,226,246,178,207, 77, 75,153,211,151, 75, 35,
+ 54,153, 9,131, 28, 81, 8,105,162,161,196,106, 82, 2,178,240,208, 83,142,251,246,163, 51,126, 21,200,126, 25,253,230, 47,152,
+109,255, 0,187,187,180,213,244,137,240,167,179, 30,174,165, 83,155,104, 30,153,165,127,131, 14, 16, 30,138,184,255, 0, 6, 18,
+162,208,199,162, 56,127, 7,240, 96,220, 58,134, 67, 25,228, 15,229,244, 96,220, 20, 13,240,213, 28, 62,188, 27,132,218,101, 49,
+ 43,217,246,140, 27,133, 81, 13,240,104, 30,240,203, 6,225, 84, 12,136,200, 28, 56,119, 97, 55,142,216,131, 8,195,133, 63, 47,
+163, 11,226, 6,196, 39, 50,218,196,216,203,137, 37, 1,113,221, 74,155, 90, 21,152, 41, 80,210, 65,250, 14, 23,120,187, 14, 73,
+234, 35,229,123,203,171,229,138,231,186,185,113, 34,116,125,198,211, 47, 75,102,214,175, 73,246,228, 58,148,149, 37,148, 26, 33,
+ 72, 42, 57, 2, 74,169,221,136,110, 65, 52, 49,195, 67,203,190,108,108,125,229,179,111,242,108, 91,146, 32,129,118,104,148,174,
+ 20,130,182, 94, 71,112, 82, 29, 26,254,177,140,155,214,151, 18,156,228,209, 11,188, 91,156, 84,134,138,194, 64, 82, 82,170,158,
+ 21, 9,167,231,199, 83,131, 20,226,140,108,207,152,151,237, 75, 75,210, 45,143, 40,133, 29, 45, 0, 16, 66, 84, 50,225,151, 19,
+199,187, 26, 18, 91, 72,237, 85,146, 40,118,184,182,249, 72,105,230,242, 0, 40,165, 41, 90,138, 74,133, 42,146,162, 64, 80,204,
+128,161,136,100,235,192,190,146, 65,238, 12,219,166,167, 75, 80,253, 27,131, 43,208,227,175, 59,169, 11, 37, 32,140,148,132,143,
+120,158, 20,167,217,136,100,218, 65, 85, 83, 91,240,199, 29, 96,180,211, 69,132,168, 81,192,219,129, 73,212, 50,174,122,116, 30,
+ 60, 43,222, 49, 20,231, 81,241,110, 70,172,219, 68,135, 91,210,206,167, 14,130,132,105, 45,173, 73, 90,104, 52,170,129, 10,204,
+154,230, 43,221,136,101,241, 19,168,161,162,126,219,126, 65, 12,130, 86,242,193, 31,114,162, 64, 88, 1, 85,242,113, 20, 25,138,
+229, 94,211,150, 43,220, 68,145,133, 70,231,237,119, 59, 91,116, 90,192, 21, 40,118,165, 42, 8,161, 9,174,138,165, 85,169, 20,
+197,109,181,122,147, 69, 56,177,198,211,118,146,133, 37,130, 85,233, 55,146,171, 74,144, 70, 68,132,215, 63, 10,229,199, 21,174,
+ 69, 23,237,100,109,116, 68,175,106,222,146,228,166,208,232, 81, 42,242,128,200, 66,138,117, 26, 10, 84,159,160, 84, 14,243,140,
+235,240, 70,190, 53,205, 73, 66,228, 34, 84,114,148, 40, 37, 73, 1, 42, 70,105, 58,208, 10,105, 90, 10,158,204,133, 41,226,107,
+140,217,104,106,202,146, 68,131,149,142, 38,237,123, 74,164,232,244, 70,148,163, 66,137, 79,147,207,157, 43,250,194,135,244, 98,
+180,230,170, 73,102,146,209,158,204,114,125,165,203,229,134,220,146,240,163,206, 90,237,238, 45, 37, 58,104,165, 68,109, 68,105,
+236,166, 59,203,114,172, 23,122, 57, 91,145,214, 84,237, 37, 72,136,154,127, 22, 31,184, 79, 12, 81, 17, 64, 30, 24, 93,226,236,
+ 20, 76, 64,115,207, 79,209,132,220, 42, 84, 12,152,137,173, 0, 39,196,224,220, 20, 97,196,116,241, 0,125, 25,224,168,170, 45,
+134,244,136,224, 63, 70, 18,162,236,161, 32,181,114,159,152,151,198, 19, 42,221,102,146,184,202, 21, 75,138,109, 72, 74,135,122,
+ 75,154, 65,250, 49, 94,121,150,161,198, 72,141,222,132,121,130,235,202,126, 97,217, 24, 84,139,149,154, 82, 35, 39, 53,184,150,
+139,137, 72,239, 37,178,160, 62,156, 16,205,181, 46, 18, 65, 27,208,124, 24,200,152,199,137, 20, 62, 56,179,184,150,129,132, 99,
+ 95, 15,163, 6,224,161,149, 32, 37, 53, 81,167,142, 10,177,218, 9,149,112, 0, 84,154, 80, 14,218,240,195,212,146,226, 55, 94,
+ 72,132,243, 3,168, 46, 80,114,216,169,141,213,125,138,213,215, 32,152, 17,148,100,203, 37, 98,169,255, 0, 87,140, 22,224, 6,
+156, 72, 3,199, 12,241,171,192, 87,167, 29, 10, 51,125,124,197,161, 61, 37,235,111, 44,109, 41, 74, 81,152,185, 95, 85,228, 80,
+224, 64,143, 25, 96,215, 47,254, 47,180, 97,178,191,183, 66, 7,119, 82,154,221, 55,254,168,122,143,187, 46, 35,206,220,175, 59,
+116,169, 79, 38,219, 30, 51,145,226, 33, 41,161, 0,177, 25, 40,213, 76,168,162,133, 31, 28,100,221,207,171,107, 86,255, 0,203,
+246,100,181,151, 97,105,114,239,161, 78,101, 95, 44,190,182,225,125,157,181,114,113, 58,130,148, 12,183, 8, 80, 4,107, 67, 14,
+164,168,208,126,179,137, 32,246, 97,214, 45, 93,184,235, 47,133,119,241, 19, 82,103,180,190, 92, 54, 8,137, 80,222,219,178,225,
+113,112,234,206,213, 29,155, 96, 33, 93,139, 15,170,102,161,151, 97, 21,198,143,131,222, 69, 27, 53,226,205,246,254, 88,188,130,
+ 91,191,235,146,239, 47,182,172,139,127, 26,203,105, 41,254,111,220, 50,140,191, 62, 29, 27, 17, 90,177, 85,148,137, 77,175,229,
+197,210,148,102, 91, 14,236,241, 53,246,233,161,233,147,238,171, 85,127,209, 68,132,183,245,167, 8,238, 69,115,247,138,236, 46,
+194, 69,104,232,159,167,139, 35,133,216, 91, 42,222,165, 31,123,226,152, 50, 65,246,252, 81,114,184, 69,118, 11,255, 0,145,222,
+ 18,236, 46,109,172,163,200,174, 79, 90,173,220,166,135, 11,111, 69,126,116,228,188,205,178,223, 5,150,200, 74, 26, 41,242, 37,
+173, 35, 50,120, 12,102,223,181, 11,183,158,229, 85, 69,205,247,152, 93, 82,110,220,146,142,130, 3,155,147,238,238,105,223, 86,
+184, 55,152,234,201,110, 45,134,226,201, 3,183, 67,241, 66, 72, 62,208,112,248,216,112,249, 36,227,235,170,246, 50,141,172,251,
+144,124, 66,115, 11,107, 90,246,214,230, 84, 11, 54,191,195,150,211, 18,155, 75,234, 74,150,128,251, 73,119, 65, 32, 10,210,180,
+198,142, 22, 84,174,219,172,184,235,219,200,234, 49,174, 59,144, 82,124,198, 97, 30,135,134, 95, 70, 44,183, 94, 52,101,157,161,
+131, 32, 26,211, 6,240,218,131,104,166, 64, 84, 96,220, 41,133, 54, 14,103,237,193, 80,161,143, 65, 7,242, 56, 93,194, 81, 25,
+ 12,129,217, 95,203,217,131,112,109, 65,190, 24, 82,185,224,241, 3,106, 56, 66,195,103,125,141,202,219,121, 16,169,114,225, 60,
+146, 60,186, 74,129,225,236, 72,199,204,170,239,195, 31, 69, 79, 69,148,104,203, 6, 7,194,197,221,139, 98, 50,194, 34,232,244,
+214,128, 40, 18,180,160,231,199,187, 60, 44,149, 96,187,136,214,140,111,187,222,147,112, 69,198, 51,200, 44,161,192,166,217, 31,
+246,173,149, 35, 50, 59,244,140, 70,174,124, 73,150, 20, 43, 19, 59, 87,150, 86,104,251,101,153,206, 33,126,184, 37,107, 82,233,
+157, 60,213, 36,113, 24,179,187,227, 32,110,170,133, 53,207,237,172, 47, 55,168,200,182, 29, 45, 58,218,220, 70, 89, 2, 16,115,
+203,192, 12,107,226,222, 92, 59, 76, 44,235, 84,101,133,210, 84,101, 89,118, 84,166,100,164,126, 32,202,163, 45, 84, 31,204, 74,
+202,143,182,131, 28,247,155, 43, 63, 82,251,244, 23, 0,233,185,128, 77,180, 66,185,172,213,217, 72, 46, 87, 44,146,133,150, 83,
+246, 32, 99,160,253,162,156,146,200,143, 36,227,247, 51, 59,204, 52,170, 27,253, 19,219,143,108,132,142, 93,196, 30,131,159,203,
+252,120,151,112,155, 2,169,131,250,192,125,159,163, 6,228, 45, 3, 37,177, 92,191, 73,195,119,143,160,127, 76, 83, 58,211,234,
+193,188, 74, 6, 75, 53, 21, 35, 60, 53,200,122, 65,131, 74, 28, 5, 61,184,106,144,109, 50, 88, 81,225,249,240,170, 84, 19,104,
+111,132, 89,226,114,192,230, 59,105,159,131,203, 51, 95,203,219,134,238, 10, 6, 17,232, 40,115, 31,151,142, 31,185, 11,180,137,
+115,183,151, 59,143,153,124,185,184,236,221,171,122,123,111,222,166,163,211,110,227, 20, 29,105, 7,222, 77, 82, 66,192, 80,200,
+148,154,247, 97, 28,170,168, 47,134,121,187,213, 23, 66,209, 57, 63,114,106,219,127,191, 63,186,119,245,201, 37,248, 86, 43, 44,
+ 9,111, 72,117, 42, 37, 62,163,203,162,128, 5, 85,200, 18,163,221, 76,241, 11,183, 22,136, 46, 90, 76,227, 46, 99,109, 43,173,
+154,115,182,139,164, 87, 97, 93, 98,186,236,103,227,201,109, 77,186,210,208,225, 5, 11, 74,133, 65,246,227,119, 5, 82, 42,134,
+ 6,125,186, 6,217,215, 89,112, 28, 74, 31, 73, 82,207,148,149, 18, 69, 41, 83, 64,107,198,185,138, 99, 81, 58,241, 51,173,200,
+152,202,189, 91,230, 66, 67, 94,162,218,208,176,130,144,157, 8, 21,160, 28, 1,236, 61,181,227,195, 17, 92,162, 69,168,206,166,
+243, 80,170,216,139, 12,161,200,238, 15, 81,229, 20,164,208, 17, 82, 50, 36, 0, 65,254,111,213,136,163, 36,211, 45, 81, 85, 9,
+204,182, 7, 87,232, 37, 90,116, 20,164, 58,178,117,103, 84, 20, 28,242, 57, 26, 3,199, 44,177, 11,237, 31,109, 81,154, 82, 97,
+164, 54,150, 66,195,138,224,182,227,173, 42, 69, 1, 4, 21,146,117, 36,157, 93,212,197,118,234, 89,132,106, 50, 93, 95,144,216,
+ 82, 27, 70, 73, 25,150,147,228, 40,213,164,164,131,230,173, 15, 97, 0,118,140, 68,218, 98,214,131, 44,155,185, 92,180,161,214,
+206,132,212,234, 10, 81, 82,128, 1, 32,157, 85, 0,212, 17,159, 30,254,204, 65, 40,164,199,171,148, 55, 33,199,131, 52, 23, 2,
+ 64,165,125, 71, 86, 18,116, 26, 84, 10, 0, 60,223, 94,120,165,117,208,181,102, 41,155,246,151,164,180,235,169, 67,117,102,138,
+ 74, 92,112,149,154,171,184,106, 52, 2,180,167, 12,102,222,154,102,173,136,186,143,182,153, 50,174, 18, 99, 91, 82,130,227,107,
+ 71,222, 60, 14,157, 10, 10,208, 18, 2,148, 77, 5, 15,127, 12,101,221,104,213,133, 91,162, 47,110, 77,109,235, 67, 54,113,113,
+ 33,194,253, 61, 84,144,160, 18, 82, 25, 86,145, 67,168,228,225, 10,247,105, 65, 76,170, 49,149,114, 79,113,177,141,105, 40, 55,
+220,122,233,201,203, 67,214,142, 87,109,171, 76,146, 76,152,182,155,116, 87, 10,129, 73, 42,102, 27,109,154,131,152,204, 28,122,
+ 5,183, 72,250, 18, 56,246,234,253, 44,149,165,140,170,126,220, 58,163,182, 10, 38, 61, 69, 79, 12, 21, 13,129,253, 28,233, 92,
+ 21, 13,131,238,196,217,172,238,251,140,152,178,230, 38, 20, 8,113, 94,184,201,127,211, 83,170,244,152,161, 88, 66, 18, 65, 42,
+161,175, 30,204, 67,127, 39,194,141, 82,173, 93, 8, 50, 46,171, 49,221, 74,155,106,190,114,106,214,175, 78, 37,162,225,117, 72,
+247,158,153, 49,184,149, 63,209, 67, 8, 93, 7,181, 88,131,196,189, 46,105,122,170, 98, 75,171,202,186, 35,114,245,190,118, 86,
+200,120, 14, 81,199, 75,147,228, 15,137,114,235,112,104, 60,236, 93,103, 82, 99,176,135, 65, 72, 40, 25, 41,100, 18, 79,110, 34,
+164,238,175,247, 30,157,139,159,123, 33,201,234, 83,185,162, 34,151,109,229,187,175,207, 23,175, 55, 57, 82, 87,217,234,190,225,
+ 72,246, 38,180, 31, 70, 37,141,184,199,130, 70,116,164,223, 19, 54,125,227,187,236, 79,122,214,107,156,168,203,237,244,158,112,
+ 3,159,106,107, 67,244,140, 36,225, 25,113, 72, 85, 38,184, 18,187,102,229,177,115, 57,228,217,119,195,109, 67,221, 78,157, 17,
+ 47,241,208,150,146,183, 15,186,153,141,160, 4,144,163,150,176, 1, 29,185, 87, 16,169, 74,206,177,213,118,127, 35, 79, 15,168,
+206, 14,146,213, 21, 87, 61, 57,195,203, 30,156, 39, 72,179,115,102,238,197,187,114, 51,194,216,218,189,121,142, 3, 77, 42, 68,
+118,117, 56, 82,170,138, 42,128,103,199, 22, 86,116, 26,169,212,217,143,136,147, 92, 25,204,124,200,249,155, 78,149,234,193,228,
+198,221, 75,174,138,161, 18,239, 46,234, 85,107, 90,152,208,202,130,114,224, 22,232,246,118, 97,191, 89, 41, 45, 52, 67,167,225,
+219,127, 23, 18,189,255, 0,204, 78,173,121,243, 55,240,203,149,198, 97, 15,149, 33, 22,203, 19, 10, 66, 13, 19,173, 97, 37,170,
+249,130,120,141,117,167, 17,138,119,114,163, 23, 71, 61,126,220,184,145,253, 75,124, 18, 72,177,185,111,242,226,222,242,220, 92,
+189,239,115, 76, 6, 95, 73, 46, 52, 91, 18,101, 5, 40, 87,179, 74, 56,113,224, 65,203,199, 19,219,241,103,162, 84, 33,154,114,
+226, 94, 27, 7,162, 30, 72,108,102, 18,202, 45,102,123,233, 9,163,147,213,174,139, 6,170, 80, 9, 9,213, 83,216,189, 84, 28,
+ 49,102,222, 60, 56, 73,185,122,127,194,130,171, 72,180, 45, 91, 66,211,100,136,152, 54,136,141, 68,183, 32, 0,136,241, 90, 67,
+ 77,164, 10,228, 18,216, 0,113,197,184,109,130,248,116, 36, 55, 26,182,132,228, 1,250,176, 43,173,106,180,126,223,190,161,181,
+ 27,144,172,142, 72, 85, 18,146, 73,250,177, 20,242, 84, 86,162,168,162, 67,107,217, 77,144, 20,240,206,181,166, 49,114,122,181,
+ 43, 66, 72,192,145, 69,182, 65,138,208, 64, 64, 35,134,120,231,238,245, 9,201,232,201, 54, 11,162,223, 1,207, 40, 64,207, 35,
+138,255, 0, 95,113, 62, 36,114,129,163,204,123, 12,101,236,139, 99, 13, 10, 54,153,114,148, 61,170,109,191,224,198,190, 30,123,
+127, 19,125,199, 49,214,163,241,175, 65, 92,220,118,250,163,167, 90, 51, 29,216,218,199,205, 83,116, 49,168, 75,121,199, 21, 77,
+239,167,153, 3,238,219, 98, 27, 99,216, 34, 55,141, 14,154,255, 0,217, 94,191,188,236,112, 85, 45, 34, 45,240,221,223,103,241,
+ 28, 94,222,139,102, 67, 7,176,211,232,194,110, 3, 33,170,154,102, 79,229,221,135, 84, 12, 45,189, 34,156, 15,142, 23,136, 5,
+ 74, 85,192,125,120, 64, 23,143, 5,249, 11,163, 73, 36,123, 48,203,151, 84, 2,140,114,255, 0, 43,203,248, 47, 86,158,126,236,
+241,157,253,194, 59,169, 81,219, 25,195, 86,235,123,150,173,238,217,154,144,125, 89,133, 68,208,138, 21, 21, 39, 33,222,107,159,
+209,143,155,172, 92,170,167, 98, 61, 51, 34, 58, 84, 94, 90,231, 39,119,173,171, 90,117,124, 75,193,191, 81, 32,171, 74,137, 4,
+214,134,148, 32,227, 73,255, 0,198, 84,131, 69,133,184,118, 85,161, 54,235,151,168,154,203,125, 12, 73,109, 0, 4,213,213,160,
+ 87, 79,128, 41, 7, 25,190, 39,196,144,232,182,205, 11,167,199, 91,182,156,214,136, 3,225, 82,244,102, 66,120, 41,106, 80,109,
+ 57,120, 19,139,123,155,149, 65,197, 84,165,183, 12,102,208,244,119,167, 26,166, 55,169,234,215,176, 46, 42,148, 70, 94, 63,110,
+ 47,227, 74,141, 24,253, 71, 81,219,167,201,242, 28,106, 67,133, 31,113, 46, 65, 74, 82, 69, 8, 66, 83,233,163,237, 94, 50,186,
+197,215, 38,253, 31,196,171,135,164,142,155,135, 13,198,118,252, 6, 14,105,101, 14,199, 38,135,222,110, 66,207,254,246, 58,127,
+218,103, 69,145,233,143,220,204,238,189,171,139,237, 8, 99,130, 77, 71,214,113,236,201,156,229, 53, 49,240,233, 25, 1,246,225,
+106,199, 80, 1,142,225,249,240, 85,139, 67, 41,141,132,220, 20, 20, 76, 94,238, 62, 0, 97, 55, 15, 72, 80, 66, 81, 28,107,237,
+193,188, 86,144, 97, 19, 79, 26, 97,181, 10, 80, 48,140, 41,159, 12, 21, 21, 42,135, 75, 4, 15, 47, 15,163, 11, 82, 64,222,130,
+187,107, 79,103,241, 97,119, 8, 15, 64, 19,194,184,109, 68,161,159,133, 73,224, 48, 84, 90, 8,200,183, 54,165, 7, 20,144, 20,
+ 5, 2,233, 85, 15,167, 11,187, 65, 26, 71,138,255, 0, 49, 77,152,187, 47, 85, 28,193,136, 82, 84,235,183,137, 87, 28,134,105,
+ 68,223,245,225,216,107, 68,184, 59, 49,185,129, 47,132,195,234, 80,208,162, 45, 8, 13, 58, 74, 8, 14,130, 52,250,106, 9, 81,
+169,165, 1, 79, 16,123,187, 71,109,115, 59, 49, 85, 85, 57,197, 74,155,207,219, 17, 27, 76,244,131,161, 84, 66, 6,151, 52,186,
+ 65,173, 73, 36, 36, 26, 30,206, 35, 42,101,136,110, 70,132,201,104, 73,173,114, 20, 96, 33, 74,109, 20, 1, 33, 94,163,136,161,
+ 20,237,242,144, 51, 63,199,138,172,158,220,155, 55, 62, 21, 74,160,117, 97,110, 4,146,116, 20, 41, 13,142, 58, 1,160,252,213,
+192,153,106,211, 53, 22,228,178,205, 22,154,154, 0,160,162, 66, 80,154,142,210,154,210,149,204,226, 57,162,202,155,136,205, 46,
+ 42, 29,146,151, 20,230,134,245,209, 78, 45, 9, 58, 74, 14,160, 18,151, 40, 20, 73,236, 31,105,200, 87,218,135,165, 81,159,113,
+ 90, 35,200, 79,172,241, 83,101, 58,155, 14,149, 2,164,144,114, 37, 53, 38,128,100, 64, 85, 49, 5,197, 65, 92, 6,152,177,101,
+219, 24, 21, 87,168,148,147,161,226,151, 90, 74,137, 36,121,130,192, 69,114,226, 21,244, 99, 62,246,165,203, 75,106, 28,236, 19,
+ 46,247, 68, 42, 34,210,146,180, 29, 58,219,173, 41,198,181,212,160, 59,123, 1,198,101,248, 35, 83, 30,227,105,162,121,176, 83,
+240,234,248, 41, 9, 79,153, 85, 82,181, 16,115, 32, 85, 90, 0,160, 42,200, 87, 25, 55,154, 53,241, 83, 92, 78,130,228,142,219,
+ 77,205, 49,108,209,150,159,196, 38,201,102,223, 5,148,232, 66, 62, 38,115,129,134, 91, 58,252,225, 37,111, 80,120,120, 99, 54,
+ 41,206,252, 98,187, 77,127, 17, 70,220,187,145,236, 5,182,222,204, 54, 17, 22, 58,105, 21,180,134,218, 72,224, 16,145, 68,143,
+160, 12,119,123,244,169,202,108,225,220,110, 54,215,134, 18,163,133, 18,217, 25,254,124, 37, 64, 56, 65, 34,132, 96,168, 18,158,
+ 78,181,235,111,134,109,124, 26,184, 49, 50, 2,235,218, 30,138,176, 7,253, 42, 98,182, 91,248, 61, 20,126,242,166,124, 55, 90,
+145, 4, 41, 9, 36, 43,136,196,169,156, 99, 49, 84,131, 65,196,240, 24, 90,128,203,185, 57,141,177,182,128, 88,220, 87, 54, 35,
+ 72, 69, 53, 71, 43,214,254,124, 40,211,117, 95,217,132,168,174, 44,132, 95,122,165,219,177, 84, 81,183,224, 61, 37,188,192,126,
+ 82,147, 29, 4,255, 0, 57, 41, 26,220, 35,218, 19,136,165,113,112, 28,163, 66, 13,185, 58,138,230, 22,228,116, 91,237,146,132,
+ 70, 86, 10, 75, 54,244, 6,202,137,239, 89,214,239, 14,229, 15,102, 43, 77,190, 98,169,197, 18,126,105,244,225,191,250,202,228,
+166,223,221,172, 50, 92,231, 30,211,121, 27,122,238,227,170, 8, 55, 93,191, 41, 42,118, 19,207,188,241, 26,151, 29,196,173,173,
+ 68,230,149, 84,212,227, 35, 39, 63,233,235, 40, 42,234,110,116,155,210,185, 91,109,250, 7,174,158,190, 83,118,123,121, 19,121,
+147, 35,226,167, 56,146,127, 15,180, 32,144,208, 36, 41, 26,158,117, 33, 21, 0, 16,126,232,140,242, 57, 99, 38,246,126, 85,249,
+ 52,158,213,254, 94, 62,183,252,168,106,248, 16,183,172,217,214, 59, 95,167,253,173,176,224,166,203,182,109,209, 96,165, 33, 45,
+134,146,235, 33,210, 7, 0, 74,214, 87,236, 21,203, 15,199,177, 59, 90,198, 62,190,111,215,196,111,215,216, 90, 84, 37,215,150,
+ 79, 91,229, 86,100,117,180,218,184, 21, 39,202,125,135,134, 53, 23, 82,185, 21, 71, 85,247,125,189,100,240,156,110,124,172, 32,
+217,240, 16,146, 16,159, 55,209,132, 93, 86,124, 42, 75, 65,154,237,183, 4, 98, 84,132,229,141, 92, 92,221,224,209,161, 26,214,
+167,221, 8, 69,115,203, 23,229,121, 37, 81,155, 73, 77,158,200,212, 70,130,150, 60,253,164,227,158,204,203,109,143, 67,212, 11,
+ 36,233,236,169,248,233, 75,112,145,251, 89, 15, 40, 54,202, 60, 84,181,101,140,202, 74,231, 1, 46,100,219,180,171, 38, 36,243,
+155, 26, 58,203, 19,183, 27, 9,144,156,143,195,199,126, 66, 43,224,180, 10, 28, 53,225,183,253, 69, 39,214,224,184, 68,216,183,
+219,109,183, 82, 19,182,174,145,167,185, 92,152, 4,176,250,187,124,173,189, 66,126,140, 65,115, 10,107,131,168,248,117,123, 87,
+ 29, 30,130, 60,192,138,244, 93,155, 17,153, 40, 45,190,137,174,130,149,130, 8,171, 9, 60, 14, 45, 97, 39, 24, 52,213, 53,254,
+ 6, 47, 89,146,148,162,215, 97, 6,125,164,186,157, 39, 48,120,226,237,185,180,204, 82,192,230, 14,205,106,235,187,164,204, 88,
+201, 73, 96, 15,234,176,129,250, 49, 60, 58,155,181,240,167,192,236,112,255, 0,227, 95,110,100, 70,229,176, 93, 67,139,244, 1,
+ 32, 99, 75, 31,172,215,139, 45,208, 78,219,176,221,124,214, 79,148,225,215,186,210,143, 6, 20, 54,229,114,210,140,250,145,213,
+ 95,171, 21,237,117,234,186, 54, 53,186, 49,130,229,182, 38, 91,212,117,143, 40,237,198,205,140,229,119,131, 28,209,164,196, 37,
+186,248,106,158,220, 92,185,119,106, 17, 19, 29,189,103,142,203, 9,170,124,212,206,163,195, 28,158,118, 84,155,165, 75, 17,208,
+118,248,102,116,232,166, 88,195,241,101, 94, 33,184,224, 62,123,219,191,202,151, 40,151, 22,106,182, 17, 45, 43, 39,129,210,229,
+ 30, 25,255, 0, 68, 2,156,121, 15, 79,123,166,207, 71,111,125,191, 80, 93,153,247,183,230, 28,128,128,243,143,173, 92, 51, 33,
+ 68,106, 66,169, 92,128, 9,169,246,119, 99,111, 38, 73, 90, 51,109,198,143, 82,207,220,176,205,174,204,175, 90,134,121,101, 10,
+ 73, 25, 26,232,207,186,180, 56,197,178,233,169, 45,185,169, 74,134,134,232,143, 18,227,182, 37, 52,192,211, 46, 48, 67,238,135,
+ 7, 21, 56,160,191,103,102, 88,155,196,117, 28,211, 83,238, 40,142,101, 90,162,162, 42,212,210, 15,196,203, 67,178, 86,123, 66,
+131,136, 25,120,105, 4, 99, 67, 22,109,186,118, 25,125, 65, 27,188,137,142,195,115, 34,180,243,129, 45,176,128,253, 15,244, 74,
+200,227,253, 32,156, 80,234,145,209,211,153, 79, 29, 81,157, 43,108,109,197,109,232,218,193, 40, 90,223,112, 30, 32,107, 80, 88,
+ 4,255, 0, 91, 47, 1,142,163,246,186,226, 87, 50, 35,219,181,251, 52,101, 30,175, 22,212,123,149, 1,240,199, 87,241, 99,217,
+ 35, 51,159,219,169,145, 28,118,215,234,195,183,139,180,207,194, 2,105, 76,188,127,143, 9,226, 32,218, 25, 49, 79, 98, 78, 19,
+112,180, 20, 68, 85,123, 6, 19,112,245, 16,255, 0, 14, 59, 78,120,107,152,187, 76,252, 48,175,105,239,252,134, 19,120, 40,128,
+ 70, 79,113,193,188,114,136,116,197, 77,124,112,111, 23,106, 13,240,200, 28,120,254, 93,248, 93,194, 81, 25, 17,170,114, 6,158,
+ 52,193,184, 40,140,166, 40, 7,248,142, 13,204,118,211, 14,199, 4, 81, 66,169,240,194,238, 27, 36,121, 99,243,155,229,113,219,
+ 93, 65,199,222,240,152, 45, 70,221, 22,166, 95,122, 71,234,185, 50, 17, 84, 55, 0,246, 50,150,171,237,241,198,207, 77,157, 93,
+ 12,190,161, 15,132,225,200,192,180,233, 89, 88, 46,100, 0, 37, 57, 84,105, 5, 85, 0, 80,120,255, 0, 22, 55,212,180,161,200,
+ 79, 70, 62, 38, 58,223,105, 14, 73, 33, 97, 64, 4,143, 41, 41, 41,202,154,106, 2,107, 83,150, 88,108,164,152,250,232, 56,216,
+221,125,180,166, 43,174, 54,143, 69,194, 22,157,106, 4, 13, 93,165, 42, 39,232,168, 30, 20,197,119, 36, 79,101,164, 63,181, 11,
+ 67, 30,145,115, 74,148,186, 54,166,218, 1, 69, 39,204,114, 58,171,151,112, 31,167, 16,183,174,133,152,174,102,131,246,229,173,
+181,196, 66,104,202,212,170,121, 65, 26,134,126,101, 45, 64,168,140,141, 82, 8, 7, 13,148,152,251, 82,221,196,107,220,206,181,
+ 10, 2,144,162, 23,160, 20,209, 35,138,149,217, 81,149,115,224, 56,118,229,136,166,153,117, 73, 80,175,183, 37,242,123, 17,209,
+241,106, 77, 43,165,104, 69,106, 1, 78,160, 77, 0, 57,231,218,120, 98, 39, 26,162, 25, 77,160, 91,111, 72,150,180,249,202, 93,
+ 0, 37, 69, 72,103, 42,157, 73,243,134,128,225,223,217,138, 23,145,111, 30,227,144,229, 17,217,174, 58, 92, 67,154, 2,242, 10,
+ 75,154,213,165, 6,132,128, 0, 34,190,220,100, 94,212,215,199,110, 37,129,176,151,241,111, 71, 67, 77,213, 2,163, 89, 9, 5,
+ 36,228, 41, 83, 90,246,241,254, 60,139,209, 85, 54,237, 73, 52,118,247,203,147,147,119, 14, 99,115,126,209, 54, 64, 67,187,123,
+110, 72,111,112, 92,148,249,170,202,163, 18,184,201, 65,104,105,215,241,129,165,208,210,168, 74,187,112,222,157,101, 59,174, 93,
+132,217,114,219,107,189,158,155, 49, 30,137, 25,120,227,161,221, 94, 38, 58, 66,161, 9,252,134, 36,220, 45, 24,116,138,100,145,
+134,212, 54,135,170, 80, 43,252,184, 74,136,104,179,206,109,137,202, 94, 96,237, 55,119,141,193,184,143,221,239, 86,203, 45,189,
+138,213,231,164, 92, 38, 38, 26, 18,132, 12,200, 5, 68,168,240, 0, 19,217,138,249, 23, 22,214,171,200,109,219, 78,118,229,232,
+101, 31,207, 62,127,239,125,167,188,111, 91,118,203, 22, 61,190, 44, 59,140,219, 83,114, 31, 5,231,117,197,144,166,148, 83,168,
+132, 87, 46, 26, 77, 48,213,147, 90, 80,227, 60, 20,138,154,225,205,254, 98,238,233, 70,217, 38,229, 58,106, 86, 40, 90,139, 70,
+ 91, 81,225,238,178, 16, 8,250, 48,178,184,233,168,218, 80,177,185, 87,210, 38,236,221, 22, 6,119,215, 48, 46,176,182,118,202,
+152,170, 91,159,186,122,143, 78,184,147,219, 22, 36, 96,183, 29, 72, 36, 2,170, 10,215, 42,231,140,252,174,165,106,207,205, 46,
+ 62,255, 0, 71, 63, 97,118,198, 37,203,223, 34,169,101, 51,242,238, 98,117,157, 87,109,161,184, 89,220, 42, 74,181, 58,219,108,
+ 73,131, 41, 13,138,213, 95, 13, 41, 42, 90,134, 95,171, 79,103,110, 43,253,101,201,235, 10, 83,189,107,239, 19, 35, 2,118,254,
+101, 65,211,101,244,199,203,205,174,164,201,154,201,155,112, 73, 38,174, 85, 8, 25,100, 40, 9, 86, 94,220, 54,110, 82,249,155,
+101, 29,136,185,121, 93,119,177,237, 11,139,204, 79,111, 70,223,126, 43,177,221,105,148,208,228, 3,136, 9, 3, 45, 69, 73, 0,
+ 31, 28, 68,227, 26, 53, 74, 22, 44, 94,118,166,164,185, 11,110, 30, 98,222,239,169, 48, 98,145, 2,199,152, 68, 40,164,165, 36,
+119,184,161,154,207,121, 63, 86, 8,165, 21, 69,162, 27,126,252,238,186,201,140,163,191, 14,169, 84,121,219,187,214,249,182, 86,
+ 27,142,225,122,212,172,157,132,249, 43,101,105, 60,124,167,129,241, 25,224,110,186, 50, 75, 87,165,109,214, 44,155,252, 3, 55,
+104,209,175, 27,113, 42,114,221, 48, 18,219, 99,204,182,156, 30,251, 74,167,106,123,251,177,149,122,195,132,149, 53, 79,129,214,
+ 97,230,171,176,171,116,107,136,133,195,109, 71,113, 10,141, 62,229, 2, 44,193,146,152,145, 45,164,184, 15,113, 2,180, 56,189,
+139,110,228, 26, 98, 75,169,218, 78,149, 26, 83,178,110,182,133,124, 84,134,245, 65, 95,153,185, 12,144,227, 74, 21,236, 90, 9,
+ 24,187,127, 37,211, 82,197,171,240,187,242,177,210, 12,123,116,120, 18, 47,119,149,148, 89, 33,128,167, 2,114, 83,171, 62,227,
+ 72,241, 81,250,177, 66,220, 60, 89,119, 16,230,101,171, 17,239,100, 23,119,111, 27,190,235,144, 12,165,122, 86,182,242,139, 9,
+172,153,105, 62, 0,113, 61,228,230,113,122,137, 42, 35,151,157,201, 92,117,124, 70, 96, 62,188, 65, 81, 69, 89, 87,166,173, 99,
+ 42, 80,131,132, 68,114, 30,231,111, 75,229,222,204,205,142,232,249,126, 36,117,250,140,169,220,220, 79,148,167, 78,174, 36,103,
+219,135, 84,100,155,106,140,209, 67,192,229,128,142,133,205,186,218,143, 26,115,147,238,178,154,133,111, 80, 64, 67,143,171, 53,
+209,180,130, 16,129, 85, 42,158, 3, 20,111, 98, 74,229,198,248, 47,240, 58,107,121,176,179,109, 39,196,104, 98,110,211,185,175,
+225,173, 87,118, 28,152,114, 66, 31, 67,177,194,143,112, 83,160, 10,158,204, 15, 14, 92,154, 97,111,170, 91,147,212, 70, 68, 87,
+ 97, 72, 84,121, 73, 45,200, 7,204,133, 10, 99, 62,117,139,163, 90,154,241,106, 74,169,213, 6, 46,121, 40,147, 94, 56, 35, 42,
+140,146,212,102,188,197, 76,148, 41, 43,247,142, 54,112,178, 28, 31, 18, 84,170, 52,192,176, 54,203,197,206, 36,231,150, 53,174,
+231,238,143, 18, 69, 10,113, 29, 89, 8, 96, 80, 83,219,140,123,151, 55, 3,139, 22,245,127,135,136,196, 62, 26,168,195,132,250,
+167, 67, 51,182, 60,187,188, 26,148, 54, 98,105, 35, 61, 74, 43, 74,105,245, 99,200,250,103,252,167,164, 90,210, 58,145, 78,151,
+238,105,152,203, 51, 95,175,173, 29,226,220,158,240,148,164,185,250,221,148,174, 53,179,167, 72, 52, 86,156,106,203,142, 13,201,
+ 91,234, 91,239, 60,210,144,134, 16,144,219,103,204, 20,159, 69, 42,212, 70,124, 77,113,153,102, 95,237,161,142,218,179,161,189,
+119, 17, 96,164, 52,226, 65,101, 72, 64,117, 84, 4, 40, 36, 5,145,244, 3,134, 69,213,177, 34,155, 41,126,106,216,149,112,154,
+252,171,112, 5, 44,148,178,208, 79, 13, 10, 82,150,126,186,215, 26,120, 19,213,148,178,173,213, 84,133,237,133,155,110,224, 17,
+200, 91, 63,114,148, 45, 20, 85, 79,165,170,167,195, 81, 77,115,246, 98,198, 77,165, 40,107,218, 99, 70,123, 36,117,166,192,184,
+162,239,203,246,212,104,167, 91,117,128, 9,204,208,198,212,161, 84,229,198,152,119,144,219,181,212,238,193,115,133,127,238, 65,
+212, 85,109,167,222,110,152,136, 7, 74,191,151, 30,212,166, 97,109, 0,138,216,200, 2,125,152, 93,225,180, 50, 98, 36,138,158,
+ 62, 56, 55,176,218,100, 67,107,191, 63,102, 13,204, 90, 32,201,136,123, 50, 24,118,225, 67,136,130,149, 60,125,152, 71, 32, 0,
+138,147,219,245,140, 37, 69, 51,240,168, 25,228,126,172, 21, 0,124, 56,240, 30, 56, 84,192,200, 97, 52,226, 43,237,194,212, 84,
+ 15, 66,157,180,194,212,117, 12,250, 3,176,253,117,193, 81, 76, 42, 49, 34,184, 90,137,161,205,191, 51, 94,151,238, 61, 67,242,
+ 1,201, 91, 86, 41,149,204, 29,174,183, 46,246,182, 26, 77, 93,146,202,144, 19, 46, 50, 6,100,169, 72, 74, 86,144, 51, 82,144,
+ 0,227,139, 88,151,220, 39,220, 87,200,183,190, 52,161,226,253,234, 35,176,238,107, 64, 9, 65,204, 26,166,166,160,240,200,131,
+151, 12,117,214, 38,165, 26,156, 78, 85,157,178, 28,236,242, 92,244, 83,165, 9, 65,115,200,124,170, 7,129,227, 85, 28,251,178,
+195,220, 17, 93, 52,111,182,194, 66,192,113, 63,116,147, 82,149, 40,128, 5, 42, 74,138,120,147,138,238,136,145,112, 29, 96, 75,
+ 32,133,160,232,212, 79,170, 26, 9, 5, 40, 41,210, 5, 40, 72,227,246, 98,173,206, 37,200, 75, 65, 75,148,118,231, 49,240,236,
+ 35, 75, 20,242,173, 99, 60,133, 69, 5,127, 62, 88,146, 18,169, 60, 26, 35, 59,142,223, 37,230, 10, 27, 58,151, 64,150,201,210,
+ 66, 73,203, 72, 74,114,169, 62, 20, 30,193,134, 92,212,149, 16, 45,223, 42, 63,164,228, 57, 84, 43, 77, 74, 82,163,168, 37, 90,
+180,149, 86,153,208,246, 28,187, 77, 70, 24,150,132,115, 99, 21,182, 36,232,234, 77, 21, 86,242, 74, 92, 65, 52,203,180, 17, 74,
+ 99, 55, 37, 19,217, 84, 37, 91,114, 25, 84,191, 69,165,169, 46,172,133,172,165, 41, 35,199, 81, 72,169, 62,218,156, 97,228,186,
+ 27,248,202,165,199,203,155, 50,131,205,161,176, 22,242,142,132, 17,172,120,141, 33, 85,224, 14,120,197,188,234,110, 99,163,216,
+ 47,151, 39, 36,135, 43,186,127,135,120,158,209, 69,255, 0,114, 20,221,158,214, 19,168, 70,211,162, 42, 43,220, 81,247,131,253,
+ 50, 49,167,135, 13,144,175, 54, 85,204,158,233,211,146, 58, 33, 17,192, 3, 47,175, 63,205,139,117, 43,160,122, 40,227, 65,133,
+220, 40,133,202,124, 11, 92, 71, 38,220, 29,110, 60, 38, 16, 93,117,231,150,150,208,132, 12,202,148,165,144, 0, 3,180,240,193,
+187, 74,129,201,220,241,249,141,217,164,110, 84,242,183,167,166,222,187,223, 94,112,195,118,243, 21,130,224, 83,164,150,202, 32,
+182,234, 74, 73, 10,255, 0,173, 90, 84,129, 79, 42, 87, 80,113, 83, 47, 50, 24,240,115,151, 36, 92,199,198,114,124, 4,182, 79,
+ 32,183,237,203,152,118,125,229,184, 19,248,247, 56, 32,221, 32, 77,159,114,152,243,171,181,237,210,220,198,228,152,168, 50, 20,
+181, 61, 46,128, 5,141, 74, 45,157, 32,212,140,188,234,247,154,157,219,138,178,248, 27,162, 75,139,117,227,219, 79,228,105, 93,
+179, 24,193,174,230, 95,220,236,233,191,108, 94,121,201,185,239,119, 80,167,230, 74,187, 79,152, 80,225, 41,109, 41,122, 66,157,
+ 9, 0,102,125,236,251, 61,152,235,213,188,171,146,106, 31, 12,123,123, 79, 47,149,200,174, 34, 91, 63,144, 27, 65, 23,152,108,
+220, 84,167, 34,151, 91,109, 49,155, 74, 25,140,132, 41,206,214,219, 30, 98, 1,226,115,197,213,211, 32,151,199, 39, 39,233, 33,
+119,219,224, 95,251,186,196, 39,239,169,138,113,180,183, 22, 26,140, 8,109,161, 33, 41,106, 52,127,186,109,180, 1,193, 32, 10,
+208, 98,180,174, 66,218,172, 82,173, 56,243,251,122, 14,203, 10, 20,180,135, 11, 59, 74,180,188,220,155,121,244,164,180, 66,144,
+180,228, 65, 31,163, 25,183,111,186,215,115, 44,206, 17,106,141, 84,103,230,164, 72,241, 55,172,149, 68, 64,109,185, 40,102, 89,
+ 64,224,149,188,202, 92, 95,214,162, 78, 47, 57,213, 38,113, 23,161,182,109, 46, 76,142, 26, 83, 17, 54, 48,118,217,251, 82,126,
+235,158,166, 35,169, 44, 65,101, 33,217,114,157,253,155, 45,214,149, 61,228,240, 0,113,194,110,165, 91,116, 72,116, 45, 59,141,
+ 40,173, 73,114, 57,119,178, 36,182, 33, 64,185,200, 77,207,130, 36, 72,105, 2, 58,149,216, 10, 71,157, 32,158,210,114,197,120,
+103,218,110,149,101,235,157, 26,228, 99, 94,100, 70,231,108,155,102,184, 61,107,184,163,211,154,194,139,110, 36,247,142,208,123,
+ 65,226, 14, 45,183, 70, 99,109,163,163, 54,173,187,174,255, 0,104,180, 72,177,219,100, 41,171,124,165, 5, 58,148, 26, 43, 33,
+ 67,164,241, 26,133, 1,167, 26, 97, 84,152,229, 54,149, 16,214,227,117,207, 2,149, 4,169,189,183,183,101,251,107, 72,245, 45,
+ 79, 16,194,143,222,199,114,170,101,209,192,133,160,228,114,250,113, 46,234,161,240,156,162,234,152,229,191,247,180, 13,199, 6,
+ 13,190,208,201,139, 5,180,170, 68,150, 9,203,226, 92, 58, 77, 9,226, 2, 64,210,123,142, 8, 37, 21, 68, 79,127, 33,222,105,
+178, 40,227,137, 29,184, 28,134, 69, 27,174,109,247,160, 90, 27,220, 59,150,100, 27, 29,129,229,104, 98,109,246,108,120, 13, 58,
+163,192, 32,200, 82, 74,190,129,136,219, 75,139,161, 98,214, 60,238,124,177,111,208, 55,110,233, 80,182, 61,149,141,207,124,153,
+ 27,252,169, 45, 90, 34,221,162, 72,106, 76, 55,148, 1, 58, 80,235, 5, 73, 42,160, 57,113,192,163,187, 85,168,217,217,148, 29,
+ 36,168,200, 52,190,166, 57, 57, 12,232, 55,148, 45,209,158,150,218,144, 85,245,104, 7, 15, 86,164, 68,232,105,200,234,199,150,
+ 49, 90,245,216, 19,100, 53,252,230, 88, 69, 62,157,110, 2, 62,172, 72,172, 72,141,208,214,220,125,119,237,251,180,229,207,151,
+ 10, 92,217,138,200, 41,197,182,209,160,224,148,131, 84,129,220, 6, 23,233,228,198,205,215, 86,198,143,253,115, 89, 93, 20,137,
+183, 31, 82,199, 29,115, 91, 0, 83,191, 75, 74,252,248,145, 98,182, 69,184,151,216,186,236,221, 91,179,147, 59,210,102,222,179,
+198,145,191,182, 93,180,110, 75,108, 41,175,173, 98, 77,174, 51,201, 69,193, 10, 90, 11,100, 22, 26, 80,117, 60,114, 4,100, 6,
+ 43,101,224,238, 75,180,217,233, 57,155,103,181,240,103, 61,159,156,143, 55,157, 82, 81, 15,106, 89,157,254,113,101,201,238, 14,
+238, 33, 65, 32,215,250, 88,165, 14,157,173, 25,211,187,144, 72, 53,223,230,239,206, 88,241,253, 85, 88, 44, 77,186,161,229, 75,
+141, 92, 14,116,237, 63, 20,138, 1,236,197,175,237,202, 8,142, 57, 17,108,137, 93,190,110, 29, 64, 13,107,109,123,126, 35, 68,
+101,232,196,121,221, 53,238,245, 31, 85,126,156, 44,112,147, 39,121, 81,228, 26, 47,204,123,169,187,180, 65, 32,221,131,143, 45,
+ 62,165, 34,219,173,204,132,130, 53,123,171,108,168,143,105,197,168,224,195,176,174,243, 16,194,126, 99, 93, 80,155,216,100, 93,
+231,122, 66,173, 31,245,107, 86,146,225, 80, 0,233,244,235, 76,136,194,253, 20,119,112, 23,234,149, 11,171,154, 22,168, 23, 46,
+ 91, 92,237, 15, 59,169, 96, 70, 0, 2, 1, 20,113, 4, 31,179, 30, 25,211,147, 87,125,103,164,222,154,161, 88,116,219,112, 77,
+167,116,185, 98, 3,200,239,168, 84,170,212, 31, 34,128, 61,217,149, 28,105,245, 61, 86,131,169,193,151, 94,218,190,254, 21, 45,
+113, 25, 74, 67,242, 82, 90,110,135,202, 18,148,173, 0,251,104,145,140,228,182,197, 33, 47, 37, 37, 81,238,231, 48,206,156,155,
+ 11,137,172,161, 29, 73,168,166,106, 40, 58,178, 29,160, 17,136,223, 22, 85,139,218, 65,174,214,144,213,177,219,148,148,253,214,
+133,208,166,164, 10, 60,166,193, 62, 20, 24,155, 17,181, 34, 43,223, 20, 74, 99,153, 91,185, 91,103,118, 34,108, 84,104, 75,141,
+ 41,149, 45,117, 80,168,112,168, 38,163, 44,245, 99,166,177,143,226,170, 28,197,217, 81,150, 23, 79, 29, 86,109, 87,238,214,253,
+157,184, 29, 68, 68,221, 2, 35,199,113,229, 4, 36, 72,104, 20,105,212,165, 83, 49, 65,195,234,210,113,163,208, 48, 22, 62,119,
+137,248,149, 63,143,240, 19, 34,255, 0,137,110,157,135, 72, 54,173, 89,168, 10,227,208,227, 45, 61,102,126,221, 16,178, 81,194,
+131, 44, 58,161, 64,197,161,221,250, 48,187,130,134, 68,114, 77, 8, 63, 81,192,165, 81, 40, 27,208,160,167,103,143,241,225,213,
+ 10, 25, 17,213, 76,143,230,193, 80,161,144,202,135, 28, 21, 22,129,139, 20,225,151,211,130,161, 64,191, 14,189, 85, 3, 3,149,
+ 7,109, 51,232, 59,221,132,241, 2,128, 12, 57, 92,199,231,193,226, 5, 0, 89, 95,103,230, 56, 60, 64,161,144,194,143, 28, 30,
+ 32,148, 19,122, 25, 80,160, 30, 53, 28,112,232,220,226, 9, 30, 64,124,226, 58, 49, 28,131,230,139, 92,233,217,108, 6,249, 93,
+188, 36, 60,225,105,148,169, 40,183,221, 5, 29,121,154, 1,164, 33,218,151, 27,167,114,147, 74, 39, 29, 7, 75,204,114,141, 12,
+ 14,167,138,184,163,142,109,115,220, 73, 72,116,157, 32,234, 10, 86,146,146, 84,154, 1, 69, 0, 69, 13, 73, 60, 41,141,246,206,
+ 94, 73, 38, 57, 70,190, 41, 19, 85, 29, 21, 46, 4,131,169, 84, 2,164,154, 4,142, 28, 1,196, 82, 85, 21, 15,118,171,151,197,
+178, 92,148,189, 40, 42,170,210, 56, 43, 42, 0, 10,171,159,138,114, 24,175, 36, 88,182,197,205,213,163, 37,113, 99,213, 78, 41,
+ 1, 37,197, 40,168, 32, 39, 61, 58, 84, 64,237,236,193, 2,194,149, 13, 59,253,214,221,101,181, 46, 84,135, 53, 58, 9, 9,109,
+ 33, 41,205, 89, 81, 41, 64,203, 0,245, 58,234, 82,155,250,116,185, 13,185, 57, 62, 89, 14, 44,172, 36, 43,182,185,101,236,203,
+ 13,104,142, 83,169,165,180,247,155, 44, 54, 77,202, 41, 26, 50, 80, 9,214,210,141,120,128, 51,175,134,120,200,203,185, 77, 13,
+ 12,105,165,196,177,246, 60,139, 37,226,227,241,182,228,171, 64, 64,170, 82, 20,148,209, 35, 87,112,237,237,198, 5,250,212,232,
+177,166,155, 58,123,164, 62, 84, 77,230,143, 53,108,155, 70, 43, 68,191, 62, 83, 17,254,235,204, 90,101,213, 81, 78, 18, 59, 18,
+130, 86,174, 56,205, 86,247, 78,134,181,182,227, 22,207,111,118,213,134, 29,130,203, 14,201,110, 64,106,223, 9,150,162, 48,216,
+224,150,217,108, 54,145,151,112, 24,212, 82,162, 72,162,245,108,115,244,244,131, 78, 24, 55, 9,180,138,243, 95,154, 91, 59,148,
+ 27, 66, 78,242,222,146,209, 22,212,192, 33, 9, 81, 1,111, 59,164,148,180,216, 39, 53, 18, 50, 2,164,246,103, 76, 54, 87,148,
+ 21, 89, 45,187, 94, 36,168,121,223,207,238,127,117, 21,214,174,235, 79, 47,182,147, 46,217,121,118, 94,210,236, 56,142,175,211,
+ 75, 97, 94,252,181,160, 2,226,200, 26,131, 98,160,113,161,227,140,236,142,171,110,205,103, 39,203, 69,222,105, 67, 23,102,145,
+ 85, 92,206,136,233,107,165, 45,147,104,183, 51,177,185, 90,210,219,179,195,208, 55,167, 50,221, 0,190,236,144, 42,229,174,200,
+170,100,190, 33,110, 39,221,227, 80, 64,175,157,231,101,100,231,221, 73,167, 41,203,229,135, 36,184,111,146,236,229,174,132,178,
+148,113,214,135, 88, 91,172,182,219, 28, 24,182,139, 36,116, 69,179,195, 20,140,194, 52,144,154,230, 77,120,212,241, 38,181,175,
+ 18, 78, 59, 63, 47,244, 8, 96, 65, 73,165, 43,175,230,159, 31, 82,228,146,228,102, 93,200,149,198,111,243,149,144,158,104,222,
+ 40, 41, 87,130,255, 0,233, 54,149,126,156,116,182, 95,194,143, 59,184,190, 38, 50, 91,163, 81,192,232,168, 88, 32,130, 59,193,
+195,110,220, 26,145,112,183,163,126,176,157,201, 98,163,215, 21,161, 63,136,194,108,128,235, 79,164, 4,169, 65, 28, 74, 20,115,
+ 4, 99, 7, 42,204,171, 84,117, 29, 55,168, 69,193, 70, 78,141, 10, 70,219,115, 88,172,219,232, 54,251, 51,121,191, 34, 80, 45,
+128, 6,116, 72, 86,106, 81,236, 0, 98,148, 49,167, 55,170,162, 46,228,103,219,183, 26,213, 54, 64,247,197,253,189,201,186,101,
+222, 35, 2,152,110, 44, 33,132,145, 66, 26,109, 33,180, 84,119,233, 72,174, 52,164,114, 18,150,230,216,207, 81,223,134, 49,104,
+ 79, 54,133,207,106,218,249,126,150,110,215, 36, 68,125,249, 78, 63, 33,150,144, 93,144,226, 91, 72, 67,105,208,142, 2,186,136,
+ 42, 32, 98, 12,140,127, 22, 41, 86,138,186,154, 24, 25, 81,199,110, 77, 85,242, 50,174,102,236, 8, 75,244,224, 90,229, 74,111,
+255, 0,137, 38, 66, 25, 81,254,171, 73, 80,251,113, 2,193,178,185, 55,235, 38,185,213,238,203,130, 72,102,222,251,210, 6,238,
+186, 55,117,135, 20,196, 8, 97, 12,186,149, 57,234,149, 22,235, 69,149, 81, 63,171, 65,244, 98,237, 86,148, 49,175, 55, 57, 84,
+140, 13,247,180, 76,134, 97, 55,114,142,185,111,190,220, 38,154,101,196,186,226,158,113, 97,180,163, 67, 69, 74,169, 36,118, 97,
+202, 13,240, 33,218, 71,249,201,215,151, 71,252,129,190,204,216, 55,150, 31,191,110,155, 91,239, 91,174,146, 25,112,165,150,229,
+198, 81,109,230,214, 91,115, 91,122, 86, 10, 65,244,207, 14, 56,118,203,141,210, 49,170,237, 55,108,116,187,110, 21,147,213,145,
+125,221,213,142,208,220,252,164,182,245, 5,200, 38,191, 19,229,140,201,142,216,238,108, 78,213,241, 54,187,171, 72,245,190, 25,
+224,133, 39,202,227, 68, 56,218,192, 53, 79, 26, 30, 54,225,140,219,167, 6,101,229, 89, 86, 31,113, 80, 94, 58,195,230, 61,210,
+ 67,142,195, 91,113, 98, 26,128,206,128, 82,138,255, 0, 53, 73, 9,115,235, 86, 45,199, 5, 20,254,169, 34, 69,211, 94,233,155,
+206, 14,114,193,183,115, 2,231, 42, 86,211,130,212,187,229,202, 34,138,221,245,227,219,162,174, 98,153, 72,116,154, 5,148, 4,
+144, 8, 52, 39, 11,115, 29, 66, 53, 36,177,121,220,154, 92,142, 50,234, 35,171,125,195,207,110, 96,220,119,198,236,187,202, 19,
+103, 56, 75, 17,117, 41, 17,224,196, 10,163, 49, 88,105, 43, 40, 75,109,167, 32, 7, 30, 39, 58,226,123,120, 86,223, 21, 83,167,
+142, 76,237, 71,108,116, 68,143,163,126,176,118,199, 36, 55, 12,253,169,204,120,247, 11,223, 78,219,169,167, 33,110,155, 52, 54,
+155, 91,133, 94,153, 49,230,199, 67,171, 66, 19, 33,151, 66, 72, 94, 85, 77, 71,117, 44, 94,196,182,151,194,146,101, 27,206,229,
+245,241,106,116, 94,221,221,189, 40,243,135,167,253,249,189,186,124,177,110, 40,151,109,159, 42,193, 24,220,119,155,208,219,117,
+225,118,144,251,106, 8, 98,220,162,208, 9, 76,115, 82,178,125,225, 76, 67, 26,198, 73, 58,107, 94, 6, 62, 86, 47,135, 10,213,
+214,165, 79, 58,243,124,149,254,174, 28, 74, 99,214,165, 41, 10, 93, 61,165, 0,226,194,138,151, 35, 53,182,185,147,190,125,243,
+111,146,221, 16,206,129,202,245,108,248,219,243,155, 66, 28, 27,198,229,190,110,183,174, 44,219, 35,181,112,142,137,109,195,129,
+ 26, 2,129, 42,244,156, 77, 93, 90,170, 21,250,166,180, 16, 70,211,185,173,104,185, 26,246,113,163,183, 93, 88,135, 50,237,252,
+190,223, 27, 55,104,245, 15,200, 54,158,131,202,189,237, 30, 89, 22, 43,139,138,121,251, 77,214,218,248,143, 58, 25,117, 96,173,
+109,133, 41, 10,109, 74,205, 73, 53,203, 15,180,168,220,101,197, 20,115, 44,248,114,211,131, 29, 58, 51,110,231,118,234, 66,217,
+177,174,138,213,102,191, 67,189,109,217,173, 28,144,164, 79,179, 73, 96, 36,129,196,107, 41, 56,143, 42, 43,107, 27,135, 54,174,
+ 35,206,168,110,238,248,148, 64,156,164,198, 65, 58,155,101,194, 69,107, 66, 8, 82, 77,124, 70, 44, 82, 61,135, 72,164,233,196,
+196,139,157,230, 67,161, 51, 39,180,216,161, 74, 1,101, 13,144, 8,254,149, 78, 29, 54,154,173, 8,225, 58, 62, 34,105,126, 67,
+117,245,174, 46,105,200, 21, 48,144,149, 87,184,168,166,156,113, 30,156,208,231,114,156,201, 45,162, 22,231,118, 19, 65,106,186,
+185, 5, 9, 78,143, 69, 26, 82,114,203,207,164, 2, 41,217, 92, 76,231,106,154,180,189, 36, 10,237, 94,140,210,252, 58,227,241,
+255, 0, 19,240, 55, 95, 79,212,213,239,187,174,186,171,249,101, 76, 83,250,172,122,252,209,247, 22, 60, 71, 67,208,238, 97, 57,
+ 26, 46,220,151, 47,214,175,170,132, 29, 32,131, 68,161, 21,252,195, 30, 23,211,241,155,126,179,215,114,111,209, 20,230,201,230,
+ 92, 43, 54,248, 47,190,242, 80,217,100,143, 82,153, 37,107, 82,168, 7,133,127, 62, 53,178,240,124, 73, 45, 10,246,179, 18,139,
+ 36,236,243,150, 27,119,136,242,173,239,213,194,203,236,169, 58,170, 16,241, 81, 64, 41, 6,181,165, 73,194, 67,166, 74,142,164,
+119,179,214,133,131,203,125,249, 38,225,184, 98,221, 37,185,169,167, 80, 80,149, 21,112, 74, 40, 51,246,211, 25,115,196,217, 22,
+ 57,229,169,155, 59,235,118,181,183,118,220,134, 95,165, 20,219,113,211, 76,206,149,253,245, 79,137,169, 24, 48,177,156,166, 87,
+189,127,106,103, 57,115, 39,127,218,102,110, 73, 86,217, 64, 45,135, 20, 25,110,133, 57, 41,180, 2,181, 10,215,137,199,103,133,
+136,226,115, 23,111,110,101, 95,186,224,109, 89, 27, 58, 74,110, 42,113,150, 92, 37,246, 36,182,149,201,111,212,201, 73, 42,109,
+ 4, 20,147, 65, 69, 36,130, 59, 14,120,215,181, 98,151, 19, 68,110,237, 16,201,203, 31,155,167, 83,156,134,148,189,169,184, 95,
+129,204, 29,137, 17,230,155,143, 38,236,219,204,220, 26,138,200,244,253, 20,202, 99, 67,128,168,102, 85, 37,167, 85, 94,222, 32,
+246,203, 9, 78, 41,243, 41,253, 86,167, 74,114,191,231,159,211,118,233,125,168,124,197,176, 93,246,188,151, 51,245,218, 84,107,
+164, 38,251,245,186,133, 48,255, 0,179, 76,115, 95, 12, 65, 60, 25,162,101,144,139,227,151, 95, 49, 14,139, 57,153,234,127,151,
+185,137,105,140,243, 32,250,136,191,186,229,147,187,220, 85,225, 17,146,190, 63,168, 78, 42, 74,196,227,193, 18, 43,149,230, 90,
+ 27, 27,153, 60,190,230, 91, 74,145,203,171,237,191,112, 48,140,150,187, 36,216,211,210,142,223, 49,136,181,211, 17, 56,190,104,
+116,102,152,248,219,205,149, 20,147,195, 51,245,211,243,225,131,133,106,146,115, 32,253, 88, 5, 72, 50, 82,158,206, 30,209,250,
+ 48, 84, 93,166, 67, 57,212,228,112, 84, 18, 51,240,224,240,207, 5, 71, 3,225,191,144, 96,168, 25, 17,251,178,250,176, 84, 0,
+ 99, 26, 96,222, 32, 62, 20,246,131,244,255, 0, 38, 13,224,103,225, 85, 78, 7,234, 56, 85, 32, 40,175,152,223, 32,175, 61, 66,
+116,139,187,118, 6,216,143,241, 91,185,182,153,188, 90, 99, 4, 21,173,217, 16, 30, 76,146,211,105, 25,250,142, 50, 28,109, 20,
+166,106, 21, 52,174, 44,226,222,217,113, 50, 27,246,247, 69,158, 12,220,218,122,215, 53,203,115,205,168, 73, 11,210,164,191,229,
+208, 83, 81,164,212, 87, 34, 51, 4,215,142, 59,171, 87, 84,226,154, 56, 92,187, 91,102, 53, 78,149, 41, 46, 7,195,158,155,109,
+165, 74, 89, 73, 2,170, 80,227, 83, 65,151,136,194, 92,158,214, 65, 77, 5,152,220, 82, 22,210, 27, 37, 84,170, 10, 65,213, 83,
+219, 82, 71,103,209,136, 36,249,143,138,102,221,210,227, 57,210,150,152,144,160,163, 64,176,131,153, 72,238, 78, 67, 9, 20,229,
+196,154, 38,133,193, 79, 55, 0,174,165,210,180,211, 88, 81, 80, 21,200,249,178, 21,246, 98,101, 20,133,163, 32,183,133, 57, 33,
+ 97,128,173,106, 25,165, 66,164,131,216, 79,126,100,241,197,107,243,228, 73, 8,234,108,194,179,204,154,150,162,195, 66, 82,242,
+232, 85, 68, 84,168, 37, 85, 36,118,247,240,203,219,140, 27,206,134,189,168, 50,226,228,175, 43, 47,247, 41, 17, 97,195,138,231,
+198,184,180,167, 67, 40, 82,214,170, 44, 16,145,164,103, 90, 14,202,215,217,140,155,211,221,161,179,141, 97,238, 77,240, 61,138,
+249, 92,116, 93, 55,147,219, 87,255, 0, 54,249,137, 4,179,189,238,109,165, 54,166, 31, 73, 14,198,132,182,197, 92, 90, 79,186,
+183, 59, 1,204, 39,219,136, 33, 29,166,133,233, 46, 11,129,217, 13, 50, 17, 74,229,223,135,239, 33, 72,109,221,219,150,205,179,
+172, 19, 55, 62,224,120, 71,178,193,105, 79,201,125, 92, 16,132,208,125,100,144, 7,121,194,110,160,176, 78, 78,135, 1,115, 11,
+169, 91, 55, 86, 92,245,139,110,105, 11,153,176, 45,111, 46, 45,146,216, 61, 70,209, 50, 91,138, 45, 9, 14, 1,230,244, 90, 21,
+ 82,149,197, 73, 6,154,117, 10, 99,117,140,233, 89,183, 85,167, 63, 87, 97,185,139,105, 45, 17,209, 27, 7,166,187,103,249,166,
+ 30,222,219,113,213, 3,151,150,232, 77, 55,117,187,178, 3, 82,110, 18, 31,109, 18, 29,109,173, 90,148,133,186,151, 53, 56,177,
+147, 85,208,154, 16,154,121,230, 28,239,245, 27,181, 90,201,183,232,140,107,243, 63,185,123, 11,153, 89, 17,179,106,136,232, 11,
+ 22,223,180,237,203, 36, 61,187, 98,140,220, 59, 13,189,164,198,131, 14, 42, 3,109, 50,208,253, 80,145, 94, 60, 73, 36,146,115,
+ 36,156,241,233,125, 63,167,218,196,139, 73, 86, 79,139,237,239,251,112,224,114,243,158,231, 83,121, 44,164,240, 25, 99, 77,104,
+134,208,217,231, 74, 43,204,235,137,254,112,138,175,164,195,104,226, 75, 79,225, 71, 15,127,231, 99, 84, 24, 18,149, 1,119, 6,
+219, 81,132,210,144,219,174,129, 84,165, 75, 4,164, 19,217, 93, 38,158,204, 86,186,200,195,180,251,209,222, 15, 50,162,135, 19,
+152, 82, 9, 4,125, 35, 21,216,228, 41, 42,229, 54,106,130,231, 60,227,196,112, 46,173, 74,167,179, 81,196,109,212, 90, 8,188,
+162,220, 69,207,112, 20,193,104,233,113,229, 2, 27, 73, 32,144, 10,142, 85,160,174, 24,211, 31, 20, 69,247, 31, 56,249,113,181,
+218, 15, 93,110,209,194, 84, 9, 79,162,191, 84, 18, 59, 53, 55, 84,215,192,156, 10,212,155,224, 59, 68, 71,247,175, 87,220,138,
+229, 71, 36, 17,207,221,227, 26,237,119,176,201,188, 59,181,173,182,155, 59,113,219,117,233,172,196, 76,197, 23,223,125,192,134,
+219,244,213,250,186,148,123, 6, 31,244,237,113, 69,188, 92,117,125,210,169, 80,231,109,219,243,185,221,177,229,169, 60,178,229,
+142,218,180, 91, 18,170, 20,238, 55, 39, 93,229, 20,241,168, 86,168,201, 73,167,110,149, 12, 88,181,134,219,224,145,160,240,172,
+195,155,127,111, 88,235,211, 39,204, 43,169,254,173,121,197,254, 65,149, 11,102,216, 54,212, 91,117,203,112,221,239,163,106, 11,
+147, 86,219,117,182, 42,164, 56,234,146,227,233, 46,121,130, 80, 2, 72,205, 67, 60, 90,150, 42,130, 42,221,133,168, 38,232, 90,
+151, 14,173, 54,109,189,179, 25, 60,201,221,107, 81,242,168,236, 45,169,179,182,211,110,129,216, 30,152,220,201, 72, 73,240, 53,
+196,209,197,151, 98,245,182,100,188,251,113,127, 12, 74, 35,117,236, 47,151,246,245,187, 76,190,110,219,111, 48,222,191, 79,125,
+233,179,110,106,189,216,229, 73,121,249, 11, 46,186,226,196,136,122, 74,148,165, 18,123,251,241,102, 54,230,180, 91,125,140, 79,
+238,244,228, 74,246,237,199,166,126, 85,244,223,188,121, 67,201, 23,119, 76,169,219,150,109,166,232,211, 91,194, 61,161,166,162,
+174, 3,138, 11, 45,174,220,230,101,109,174,132,150,243,160,195,214, 60,220,147,116,162,236,169, 91, 43,169, 70,244,105,173, 74,
+141,214, 38,184,231,167, 49,224,217, 72,173, 0, 0, 10,211,186,191,155, 22, 54,208,203,223, 82, 81,201,174,106, 94,185, 41,204,
+171, 79, 50, 44, 41, 15,206,181,189,173,198, 95, 81, 75,114, 35,184,146,203,236, 46,162,154, 92,105, 74, 79, 12,171, 94, 56,130,
+237,165, 36,211, 38,181,121,193,166,134, 30,102,124,186, 98,115, 35,114, 75,230, 15, 69, 87,203, 53,195, 98,221, 29,114,106, 54,
+165,234,227, 6,207,123,178, 41,226, 86,184,171, 77,196,161,183, 89,108,157, 40,117,183, 77, 64,161,204, 84,215, 87, 54,233, 37,
+235, 71, 71,111,168,198,107,137, 42,228,175, 78,252,172,232,250, 27,252,198,231,196,157,187,191,249,246, 89,118, 21,135,100, 55,
+ 33,171,213,150,217,241, 8,244,220,149,118, 80, 62,131,206, 37, 5, 73, 67, 45,234,165,106, 77,104, 82, 92,190,167, 72,198,169,
+123,253, 69,108,172,248,199,229,213,147, 9,156,233,228,236,254, 77,238,205,137,203,254, 93, 90,246,126,245,221, 47,218,100,220,
+ 37,109, 5, 73,106,221, 36, 90,164, 56,235,105, 48,100,148,161,157, 1,231, 40, 90, 81,173,104, 70, 67, 17, 85,198, 73,186,209,
+118,148, 46,230, 74,236, 54,180, 85,209,162,110,119,152,244,224,161, 62,130, 78,130,165, 5,161,117, 57,208, 2, 77,113, 39,215,
+ 69, 46, 69, 55,106,108,113,249,146,116,185,207, 14,107,245,119, 51,115,237,203, 37,230,227,180, 94,179,109,180,178,171,108, 71,
+203, 26,155,177, 69,105,196,135,139,107, 69,117, 2, 13, 6, 88,198,189,214,254,159,224, 95,199,248, 29,142, 30, 12,238,193, 52,
+139, 55,149, 61, 32,115, 90,205,208,222,219,216, 23,216, 47, 67,190, 68,221, 87,187,139, 81,238, 18,153,245, 17, 18, 92, 24,129,
+ 53, 45,208,208,173, 7,202, 64, 61,167, 5,142,169, 43,145,115,170,236,251, 84,207,234,248, 19,132,148, 90,117,226, 79,250, 81,
+233, 95,118,108,206,126,109, 93,225,116,122, 27, 81,224, 76, 14,173,134,156,146,183, 21, 86,148,140,171, 84, 87, 62,252, 76,242,
+231, 45, 29, 76,251, 56,110, 18, 76,175, 44,159, 37,205,179,241, 78,187,122,221,140,176,183, 22,165, 41, 86,235, 66, 86,229,117,
+ 87,222,155, 33,209,255, 0,179,142,126,125, 82,252,159,205,239,127,204,236,215, 71, 75,153, 60,182,124,158, 58,120,110, 59, 45,
+220,175, 87,137, 15, 53, 90,173,150,236,113,194,234, 65,170,130, 32,147,149, 59, 8,227,136,190,174,235,226,254,222,176,254,217,
+ 4,245, 30,225,252,167, 58, 85,135, 33, 50, 39,126, 59, 63, 79, 22,165, 94,100, 33,178,125,145, 67, 68,123, 1,166, 31, 27,207,
+183,220,153, 52,112, 45,115, 67,227, 31, 45,158,140, 34, 33, 62,174,199,106, 75,232,224,252,187,141,221,213,159,110,169, 58,127,
+246,112,232,230, 73,127, 85, 61, 10,159,192,155,232,108,174, 70,247,254,129, 58, 65,244,253, 63,242, 37,187, 77, 41,193,234,211,
+187, 86,189, 95,110, 38,250,233,126, 54, 63,233,236, 83,229, 60,190,230,183, 84,179, 87, 19, 74, 31, 43, 74,208, 1, 9, 57, 31,
+ 45, 49, 22, 7, 71, 80,214,134,134, 95, 80,148,138,124,243,118,125,234,124,153,204, 56,164, 54,166,219, 32,142, 0,165,117,236,
+198,163,194, 91,209,158,178,222,214, 88,187, 71,113, 56,187,133,176,188,181, 41,249, 14, 56,227,110,164,146, 20,165, 20,148,131,
+ 65,195,207,244, 28, 50,238, 42,138,117, 69,119,144,228,147, 46,221,155,204,132, 90,238,104,105, 78, 81,166,155, 82,116, 2, 8,
+210,194, 66, 5, 65,239,115,205,236,166, 57, 75,216,142,229, 82, 92,205, 27, 57, 42, 26,141,188,203,231, 75,242,246,195, 6, 76,
+145,241, 74,112, 54,202,194,178, 40, 73, 82, 83, 81,220, 83, 83,159,110, 45, 98,116,237,143,129, 6, 78,118,228, 81, 28,192,184,
+206,125,244,220,154, 88, 92,150,205, 26, 73, 90, 82, 66,213,196,241,207,142, 58,188, 75, 26, 37, 67, 38, 83,210,164,102,197,204,
+243, 46,217, 39,110, 94, 18, 25,112,161,105,140, 10,188,229, 77,175,212, 74,188,194,132,138,112,167, 14,204,109, 67,167, 40,180,
+202,255, 0, 82,202,143,120, 89,238,239,220,223,187,220, 52,205,110,164,184,235, 64, 5,128,163,164, 40,250,126,111,172,145,223,
+141,216,194,145, 43,169,166, 70, 94,176,219, 37,255, 0,100, 88,112,131, 77, 30, 80,164,144,105,222, 79,142, 71, 18,196,118,228,
+ 17,219, 20,200, 11, 2, 43,140,213, 52,160,117, 0, 31,183, 51,135,237, 96,165, 65, 72,242,165, 91, 85,241, 1,134,164, 73, 64,
+168,226,144,138,118,133, 39, 81, 31, 70, 35,157,132,249, 11, 27,244,230, 76,182,151, 63,186,151,219, 14, 51,113,216,123,170,235,
+100, 75,103, 90, 83,104,188,220,152,168, 25,121,130, 92, 72, 35,194,148, 56,165,115, 18, 61,136,177,111, 51,119, 51,162,249,103,
+243,145,234,235,151, 22,183,109,183,232,241,119,172,167,189, 63, 69,235,237,185, 74, 84, 84,160, 80,132, 42,212,244, 2,176,174,
+223, 85, 75, 61,196, 98,180,240, 35,204,177, 28,181,218, 78,246,223,206,243,168,132, 92,154,147,188, 54, 21,153,219, 18, 86,149,
+ 72,143, 2, 45,238,222,242,154, 60, 66, 29,118, 69,192, 36,248,150,207,179, 16, 75,167,170,104, 77, 28,168,179,163,249, 91,243,
+123,233, 87,126, 91, 18,238,228,118,102,222,187, 33, 5,114, 99, 73, 67, 83, 82,146, 15,186,217,128,183, 31, 85, 63,164,194, 15,
+134, 42, 75, 14,104,150, 55,147, 46, 46, 95,117,135,211, 23, 51, 34,181, 39,104,239,155, 58,221,125,105,105,168,115,229, 34,221,
+ 53, 74, 94, 73, 2, 37,203,208,145,153, 52,247, 49, 90, 86,230,137, 83, 69,152, 14, 96, 40, 80,154,113,203, 34, 42, 56,247,140,
+ 65, 38,208,181,168,163,104,109,121,129,236,168,194,238, 16, 48,101, 0,229,199,195, 9, 80, 13,232,168,241, 7,235,193, 80, 0,
+140, 59,112,181, 1, 41, 81,130,155, 32,231,135, 38,197, 71,130,191, 58,173,161,109,228,111, 91,219,165,219, 59,111,220, 25,220,
+ 42,141,184, 75, 16,225,188, 62, 30, 85,205,189,110,176, 84, 64, 14, 45, 78, 36,187, 86,234, 40,176, 15,152, 16, 55, 49,122,229,
+155, 49,218,222,166, 38,127, 74,148,222,232,161,195,162,207,150, 14,226,235, 71, 96,109,237,237,176,121,161,180, 12,155,144, 84,
+221,197,182,225, 78,106,231,123,219,240,117, 45,132, 46,108, 40,142,235, 75,170,117, 32, 6,156, 82, 50, 82, 73, 80,174, 36,151,
+ 92, 82,117,228, 69,107,163,197,173,120,150, 62,232,249, 23,117,149,183,111,127,134,216,155,177,223,236, 42,112,134,174, 80,110,
+ 31, 12,160,142, 33,110,179, 57,182,212,147,224,146,175,105,196,208,235, 80,124, 71, 75,163,118, 11,219,254, 71,189, 96,200,158,
+184,242,237,214,166, 99,160, 87,226, 87,116,100,161,194, 50,162,125, 48,165,231,226,154,126,153,255, 0,188,219,160,145,233, 45,
+114, 46,126, 95,127,203,231,183,174,251,122, 82,121,227,189,101, 49,121,121, 9, 16,216,218, 40, 97, 45,198, 95,188, 75,142,207,
+105,101,193,157, 40,148, 34,148,174,172,103,222,235,117,122, 22,109,244,200, 83, 83,202,238,119,242, 95,114,114, 63,171,171,223,
+ 75,208, 25,122,239,126,183, 95, 31,219,177, 37, 54,203,141, 46, 97, 76,130,203, 11, 67, 74, 5, 65, 78,249, 78,146, 72, 26,134,
+100,102, 99,151, 91,134,139,153, 3,233,148,150,135,167,189, 38,124,131,156,126,223,107,221,253, 77,222, 85, 6, 98,154, 75,242,
+246,197,161,182,126, 33,149,137, 7,238,157,154, 22,235,100, 41,176, 9,208,138,249,169, 80, 64, 56,167,127, 37,201,232,205, 75,
+ 24,219,120,163,208,190, 82,116,193,200,142, 73,237,246,182,215, 45, 54,188, 11, 93,181,165, 7, 65, 67, 1,215,220, 90, 77, 66,
+220,126, 70,183, 86,160,120, 18,163, 78, 2,131, 44, 81,148,223, 50,239, 2,193,110, 42, 80,144, 1,203,179, 13,223, 81, 21, 0,
+232, 66, 6, 84,174, 89,224,221, 64,105, 28, 39,243, 52,234,173,132,222,211,201,157,152,243, 19, 91,183, 2,229,205, 74,117, 2,
+ 55,226, 14,180,116,180,181,160,231,232,161, 84, 41,174, 74, 81, 74,170, 83,139,214,236,213, 85,146,218,156, 96, 83, 95, 43, 56,
+ 44, 78,234,122, 4,235,249, 66,221, 54,249,198, 19, 0,209,151,221, 48,214,202,145, 65,150, 65, 75, 85, 5, 51, 24,224,124,237,
+ 57,203, 25, 66, 60,101, 52,141, 76, 37,240,185,212,245, 58, 12, 86,219,108,215,246,139, 37,106, 81, 60, 84, 78,162,114,203,142,
+ 55, 58,103, 78,179,131,101, 66,218,248,157, 42,249,182,102,223,185,226, 61, 77,164,180,132,231, 92,252, 41,141,106,208,134,136,
+202,130, 6, 99,222,194, 84,108,144,110,117,170,156,204,159, 78, 37, 16,248,127,176,181,139, 86,190, 84,112,185, 31, 59, 13,202,
+ 78,104,237, 29,182,206,234,129,119,151, 17,239,129,181, 63,120,155,110,113, 65,247, 75, 22,239,190,122,177,218,212,233, 33,178,
+162, 0, 73, 53,236,174, 32,200,139, 74,171,137, 54, 28, 99, 57,168,203,131, 41, 57,159, 49,127,151,213,238,239, 34, 45,191,122,
+ 72,176,186,149, 31, 73, 23, 75, 77,202, 76, 55, 77, 43, 86, 95,128,211,206,232, 29,158,163, 96,226, 56,218,148,151, 6, 94,189,
+210,229, 7,240,180,200,118,246,249,141,116,127,179, 99,153,199,126,203,221,178, 90,169, 22, 77,139, 96,149, 21,215, 79,234,165,
+217,219,136,178,218, 65, 60, 75,109, 19, 78, 25,226,104, 98, 74, 92,189,164, 43, 14, 95,213, 68, 48,114,143,174,205,203,215,252,
+ 29,253,200, 86, 44,236,109, 71, 33,194,141,185,249,109,100,128,250,164, 73,117,203, 58,157, 85,197,135,165,169, 33,199,228,191,
+ 17,210,161, 64, 63,102,104, 56,147, 34,199, 86,218,111,128,153,118, 20,109,252, 60, 81, 78, 72,184,196, 89, 42,155, 37,111, 77,
+ 39,138,130,151, 90,118, 28,104, 70,213, 14,122, 87,107,197,147,173,133, 35,102,243, 95,148,187,155,165,238, 99, 92,211,183,108,
+187,133,232,151,173,179,185,156,109,107,102,207,127,132,149, 54,219,178, 16, 10,136,102, 67, 43, 83, 46, 40,102,144,107,222, 67,
+ 46,194,141, 73,113, 69,188, 12,207, 10, 93,204,166,158,249, 77,245,186,111,138, 91, 59,114, 53,223,108, 18, 75,123,154, 61,250,
+200,245,164,182, 13, 11,226, 66,228, 36, 37, 52,207,206,144,175,232,215, 3,200,183,246, 70,231,212,167,173,116, 46, 11, 46,204,
+229,247, 72,156,153,190,242,163, 97,110, 22,183,119, 60,183,143,195,196,222,123,146,207, 87, 45,150,203,108,103, 61,113,106,183,
+200,210, 11,222,171,160, 41,231, 69, 18,160,144,154,101,146,194, 14, 77, 73,170, 37,195,249,152,217,249,234,107,106,117, 33,251,
+ 78,195, 35,112,110, 8, 27,110, 35,173, 53,113,184,200, 98, 11, 75,150,180, 50,210, 92,125,208,210, 75,142, 44,249, 82, 9,204,
+246, 12, 89,155,162,171, 50, 84,170,232,137,159, 53, 57,197,211,103, 74,251,250,231,201, 88,220,189,187,115,103,156,214, 23, 62,
+ 19,113, 92, 46,146,102, 88,118,252, 25, 72, 26,156, 76, 70,217,108,190,250, 19,195, 91,154, 82,161,230, 79,148,140, 80,150, 70,
+137,202,106, 41,250, 43,235,236, 54, 33,131, 24,175,139, 86, 77,247,146,246, 30,251,233, 91,106,115, 41,189,133, 19, 96,115, 99,
+118, 92, 94,149,107,135,106,157,115,185,165,205,189, 25,162,208,146,227,111,154, 32,191, 32,209,191, 39,153, 41,168, 85, 9,193,
+111, 45,197,241,221, 31, 97, 79, 55, 30,220, 82,218,168,223,220, 59,116, 75,201,187, 5,210,253,187,119, 71, 50,108, 83,239,123,
+ 66, 13,130,106, 28,134,211, 40, 83,239,189, 33,214,163,132,199,108, 40,159, 87, 66,148,164, 26,130, 8, 7, 44, 84,200,234, 95,
+ 14,234,240,236,215,238, 29,211,240,252, 73,237,107,145,157,239,242,249,230, 46,217,191,150,237,178,162, 47, 98, 60,178,229,178,
+244,218, 86,143, 89,149,121,146, 29, 66,181,169, 14,164,100,164,145,198,180,168,196, 43, 53,201, 85, 86, 85,239,254, 84, 22,231,
+ 78,149,185,109,102,221,163,162, 27, 78,148,255, 0,152, 46,203,121, 95,174, 27, 66,148,146,124, 1, 82, 0,255, 0,163,136,157,
+251,141,242, 94,175,230, 57, 97,174,100,146,207,209,239, 39,109, 14,161,231, 99,191, 45,196,241, 15,184,144,147,244, 54,132,145,
+244, 28, 18,185, 55,198, 79,238, 36,142, 52, 17, 49,183,116,255, 0,176, 45, 22,239,199, 97,109,198, 5,161, 46, 38, 58, 95,125,
+181, 60,215,168, 82, 84, 18, 62, 32,172, 19, 64,107,221,136, 54,115, 39, 86,226,185, 14,144,236,182,203,112, 2,223, 29,168,233,
+ 29,140,182,134,192,250, 18, 6, 35,104,149, 36,139, 51,120, 54,151,141,178,105,204,191,109,130,233, 61,255, 0,112, 19,250, 49,
+141,212,163,254,239,169, 29,199, 65,185,255, 0,142,151,123, 26,247,160,244,249,119,107, 64,224,185,210,215,245, 50,210,113,123,
+ 1,210,207,172,197,235,237,120,235,253, 35,119, 43, 78,142, 97, 90, 9,255, 0,247, 45,143,172,211, 23,109,241, 48, 89, 38, 75,
+250,100, 41, 42,236, 82,135,219,142, 98,186,157,236,161, 84,110,199,124, 82,167,135,183, 18,166, 86,112,160,178,136, 80, 4, 15,
+183, 18,197,208,140, 69, 72, 77, 72,236,195,148,201, 98,196,244, 38,181,236,227,137,170,199,159, 54,251,151,114,200,114,220,219,
+143,249,244, 44,162,149,236, 57,103,245,227,182,179,111, 70, 99, 57,234, 23,105, 76,138,189,151,112,121,211,247,206, 44, 50,211,
+148, 62, 83, 64, 79,209, 92, 49,219,248,208,155,223, 2,115,203,157,244,102, 91, 33, 69,116,171, 84, 64,181,181,160,211,239, 2,
+ 81,149, 8,173, 9, 30,220,235,138,121, 22, 28,170, 36,101, 77, 9, 71,249,233,228,221,210,134,221, 58, 28,109, 9, 46,160,211,
+ 37,105,225, 94, 25,226,157,156, 84,162,180, 36,148,205, 41,187,161,235,129,133, 2, 99,133,216,145,214, 75,174,113, 39, 72, 72,
+ 73, 80, 25,228, 18, 7,219,137,163, 97, 54,244, 43, 74,230,164, 83,119,221,165, 93,174,232, 98, 90, 86,219, 77, 40,170,137, 21,
+215,157, 5, 41,141, 60, 75, 91, 21, 69,185, 62, 65, 25,102, 4, 71, 69,236,199,170, 26, 73, 88,103, 66,138,244,154,130,115, 10,
+ 61,231,198,184,216,143,196,138, 78, 78, 36, 7,120,221, 11,147,157,159,111,119, 69,162, 66,124,141,130,162, 80, 73, 33, 65, 94,
+ 81,246, 99, 91, 30,223,195,169, 90, 82,166,164, 89,247,227, 40, 23,162,232,248,198,168, 84,173, 70,164,119,121,137,236,240,196,
+151, 33, 77, 80,144,155, 98,172,205, 23,212,165,215, 6,149,142, 33, 75, 33, 85, 30, 4, 3,136,148,201,183, 14,182,232,209,159,
+ 66, 16,209, 5, 68,249,146,208, 36,231,244,156, 62, 51, 68, 83, 31, 44,246, 6,147,116, 71,162,233, 40,160,212,132, 37, 96,132,
+215,134,126, 56, 91,201, 52, 85,140,220, 93, 11, 43,110,236,248,239,210, 57,109,198,153, 0, 20,172,165, 70,190, 36, 38,152,163,
+190,172,147,113, 50,179,217, 45, 83, 89,121, 37, 33,213, 52,144,218,245,184, 82, 72,165, 51,212, 79,219,135, 52,146,168,197,126,
+105,145, 91,191, 78,182,189,209, 37,217, 16, 33,165,199,156,169,101, 46,250,126, 82,115, 4,104, 83, 71,236, 56,138,177,151, 18,
+220, 51, 26,226, 65,119, 95, 78,220,203,218,104, 90,224, 74,117,104, 72, 42,244,154, 74,221, 72, 7,177, 69,208,186, 98, 11,182,
+160, 95,181,155, 94,102,207, 44,250,141,234, 79,144, 82, 25, 28,191,221, 87,109,190,132, 26, 46, 36,119, 21, 34, 34,252, 92,132,
+167, 11, 10, 29,190,102, 77, 56,226,172,241,161, 34,244, 50,187,206,164,228,239,205,243,169, 59, 61,190, 61,167,123,203,219,123,
+153,214,149,173,233,151,104,210,173, 51,222, 73,167,144,185, 5, 73,136, 41,216, 68,122,247,215, 21,165,211,162,248, 18, 44,190,
+212, 94,251, 83,231, 19,179,110, 89,238, 45,145, 41,150,197, 18,179, 98,187,196,186, 2, 72,253, 95,136,102, 15,212,113, 86,120,
+ 18,228, 76,175,196,159, 88,190,105,221, 50,221, 16, 62, 61,155,229,165,117,162,145,114,183, 52, 85,223, 81,240, 47,200, 4, 98,
+ 57, 96,205,114, 29,227,196,113,145,243, 62,232,242, 26, 2,228,238, 41, 41, 60, 78,155, 61,221,194, 7,136,106, 58,177, 27,196,
+154, 92, 7,120,177,124,245, 32,156,218,249,210,116, 99,177,246, 85,222,243,180,110,115,119, 14,244,130,193,114, 29,141, 54,155,
+196, 17, 33,213, 40, 33, 9, 84,153,145, 80,210, 18, 9,212, 77, 74,180,131,165, 42, 57, 98,166, 92,254,149, 39, 46, 53, 46, 97,
+227,188,153, 82, 60, 23, 19,199,254,178,186,138,231, 55, 93,187,225,206,117,115,186,107, 17,224,104,122, 6,219,180, 90,163, 38,
+ 52, 11,101,189,149, 41, 46, 40, 21, 41, 78, 56,165,184, 87, 66,250,212,190, 52, 58, 84,144, 49, 37,125, 74,237, 31, 22,253,198,
+138,192,221,110,114,175,194,159,240, 58, 7,228,111,179,246,215, 35,250,159,103,153, 27,234,225, 23,109,237, 88,182, 25, 86,233,
+ 23,107,195,236, 91, 33,188,244,245,182,240,107,215,148,166,210,162,165,164,105, 73, 53, 33, 35, 44,178, 48,242,212,178, 35,109,
+113,163,111,238, 31,123,165,248, 88,190, 35,231, 79,121,236,109,167,168, 14, 67, 93,199,253,211,189,108, 50,193,204, 24,215,123,
+123,188, 79, 97,109,211,141,230,221,117, 70, 26, 93,140,125,131,190,246, 45,192,106,131,119,130,250, 15, 2,212,168,235,250,138,
+ 84,112,199, 81, 84, 95, 49,210, 60,168, 55, 33,166,220,180,190,225,224, 25, 33,100,246,126,173,112,107, 78, 2,210,135,146, 31,
+ 53, 62, 64,242,207,155, 61, 77,243,119,119, 90,161,189, 96,191,236, 59, 69,158, 93,230, 67,136,113,198,238,183,135, 96,162, 98,
+164, 36,145,247, 90, 98, 22, 26,210, 8, 5,105, 82,179, 82,241,197,117,206,172,177,178,173,194,159, 51,163, 58,206,153,131,191,
+ 22, 87, 30,180, 90, 11,116,159,214, 55, 82, 29, 63,244,185,182,185,233, 97,188, 59,185, 57, 87, 99,184,163,102,239,141,171,125,
+109,215,145, 30, 51,175, 36,192,185, 91, 95, 90,144,180, 40,165, 97,133, 37, 43, 40, 42, 40, 37, 30,242,177, 70,215, 93,158, 62,
+116,241,223, 56,239, 94,142, 13,123,209,106,247, 75,141,203, 86,231, 77,101,167,172,245,107,151,187,239,111,243, 23,101,218,183,
+222,220,112,174,195,119,140,212,232,138, 90, 84,133,122,110,160, 40, 2, 22, 1,168,237,199, 93,210,186,173,174,161,111,125,183,
+193,237,107,178, 75,138,251,159,172,229, 51,112,103,141, 63, 14,124, 87,220, 37,189, 57,183,202,238, 93, 60, 34,115, 3,114, 90,
+172, 50, 74, 61, 84,183,122,184,195,130,178,142, 32,164, 74,113, 4,215,178,156,113,171,225,203,145, 81, 35,158,122,155,249,156,
+242, 43,151, 91, 18,116, 94, 82, 92,198,235,230, 92,150,151, 26,218,213,157, 46, 57, 30, 59,206, 37, 73, 75,238,191,160,160,132,
+ 17, 93, 8,212,163,151, 0,106, 45, 89,178,235,168,173,208,242,203,119,243, 23,114,238,155,219,174,110, 20, 72,140, 94, 42, 83,
+135, 67,190,169, 53,169, 89, 90,209,234, 18, 79, 30, 24,181, 56,186, 2,154,101,185,209, 39, 60,246,111, 45, 57,157,102,188,110,
+123,154, 35, 70,182, 73, 15, 9, 18, 84,230,173, 42, 33, 11, 66,184,154, 16, 73,247,123, 59,241,206,245,156,121,186, 56,170,165,
+ 70,105, 98, 78, 14, 50,171,244, 30,143,185,243, 44,232,205,149,173,166, 55,122,159, 91, 96,147,233, 90, 47, 97, 36, 14,229,185,
+ 17, 41, 63, 65,198,148, 45,201,170,240, 51,218, 33, 91,215,230,239,211,237,149,149,127,147,109,119, 75,219,137,204,188,224,141,
+ 2, 41, 3,185,110,173,199,129,255, 0,228,229,137,109,227, 72,142, 83, 80, 40,174, 96,252,225,249,205,185,152,151, 3,151,176,
+ 45, 86, 8,174,172, 8,210,130, 28,186, 77,142,223, 2,117,188,164,176,170,248,198,197,184, 96,215, 86, 64,242,226, 76, 47, 95,
+ 57,174, 98,238,247, 62, 58,247,203,141,169, 61,224,203, 77,200,147,121,102,235, 37, 47,169,166,210,210, 84, 90, 76,180, 55,154,
+ 83,157, 18, 49, 98,214, 13,116,220,204, 27,214, 45,167, 93,117, 25,237,191, 56, 62,101,237,121,162,225,180,185,115,202,219,101,
+217,104,118, 57, 92, 45,185,115, 15,250, 15, 54, 91,113, 26,217,184, 54, 70,164,146, 8,174, 99, 44, 79,253,173, 53,243, 50,190,
+216, 39,161,198,107, 97, 44,186, 94, 91,161, 81, 42, 82, 16, 50, 2,181, 52,170,212,162,160, 60, 73,197,137, 99,168,147,199, 33,
+183,171, 19, 19,190, 45, 42,110, 43,106,101,180,249, 2,227,233, 77,107,219, 66, 41,136,246, 80,119,136,152,251,202,206, 98,239,
+ 46, 78,111,251, 63, 53,182,149,196,218,247, 53,134, 91, 55, 56, 18,202,139,174,151, 88, 88, 88, 74,155,108,128, 80,160, 10, 84,
+147,146,146, 72, 57, 28, 54,236,106,168, 55,124,100,119,141,150,235,203,110,186,172,179, 57,207,211,108, 32,207, 56,205,101,111,
+ 94, 90, 32,250, 51, 90,144,115,122,225,105,109,210, 21, 34, 43,138, 58,148,132,213,109,168,208,130, 8,197,100,229,110,138, 79,
+ 78, 79,249,152, 89,152,116,110, 80, 85, 43,153, 76, 94,226,205,114,205, 45,165,197,184,165, 69,183, 98, 33,165,250,233, 80,226,
+149, 36,128, 65,240,166, 44,104,149,121, 25,110, 84, 54, 96,236,155,163,175,136,235,104,124, 66,168, 82,212,151, 2,156, 53,200,
+ 81,150,234,181, 28,248,105,174, 42, 92,234, 16, 90, 45, 71, 70, 13,151, 87, 42,122, 6,230, 94,254, 97,187,142,229, 81,219,182,
+185,104, 34,220,171,210, 28,134,185,175,169, 63,118,219, 49,168,100,105, 42, 41, 10,113, 72, 74, 82,147, 81,171,134, 40, 94,234,
+110, 52, 85, 74,189,188,125, 69,219, 29, 58,119, 42,210, 18,179,116, 97,204, 54,174, 42,131,185, 26,141,100, 91, 10,210,226, 81,
+165,217, 1, 73, 36, 16,165, 43, 94,117,254,136,197, 73,102, 77,214,139,218,233,247, 80, 88,226,151,196,190, 83,242,159,126, 27,
+ 61,239,158,219, 78,215,189,247,237,145,150,162,197,190, 93, 91,125,183,159,109,128, 18,216,156,219, 14, 37,153, 90, 82, 2,126,
+245, 7, 33,157,115, 56,134,221,201, 38,229, 74, 62,213,167,220,104, 66,114,138,160,249,184, 44,246,109,209,184, 87,185,239,112,
+216,126,234,164, 54,195,122,155, 10,105,150, 89, 78,134,219,101,181,213, 13,165, 35, 32, 18, 6, 21,252, 90,178, 38,170,234,248,
+143,251, 35,115, 39,103,204,113, 98, 58, 95,182, 72,105, 81, 36,198,169, 69, 90, 81, 7,200,161,238,144, 70, 70,152,115, 73,170,
+ 62, 99,237, 93,118,164,164,184,162,196,138,244, 88, 86, 88,211,108,201,117,200, 87, 74,255, 0,221, 55, 54,144,232,113,176,104,
+ 22, 82,146, 65, 4,251,166,128,158, 56,163,113, 59, 13,109,117,175, 38,116, 86,110, 44,216,183, 56,209, 46, 99,109,203,100,108,
+202,252, 85,198,211, 50, 2, 84,104, 68, 87,199,167,171,184,122,200, 81, 30,202,225,239, 53,199,230,139, 69,111,237, 48,155,248,
+102, 6,182,158,217,177,180, 46,113, 44, 47,203, 74, 64,117, 47, 92,156, 83,141, 37, 39, 48,162,134,146,132,144,124,114,194, 75,
+ 46, 73, 85, 64,117,158,147,110,180,115,215,176,222,184,198,119,122,237, 81,107,220, 44, 74,110, 24,125, 18,226, 27,108,118,253,
+ 52,182,134,148,216, 74, 82,162,145, 79, 49,194, 89,201,147, 77,201, 55, 94,196, 77,151,211,224,218,140, 37, 21, 78,214, 71, 15,
+ 47,246, 19, 81, 19,112,117,219,175,192,169, 69, 9,119,209,140,148,149, 14, 32, 40,168,138,225, 37,153,109, 42,210, 84, 34, 93,
+ 22,109,237,221, 26,250,255, 0,145,179,185, 85, 1, 77,219,237,246,246,228, 34, 52, 72,173,199, 66,166,132, 7, 22,221, 75,136,
+ 87,147, 42, 81, 89, 99, 55, 54,234,185, 36,210,107, 78,102,255, 0, 74,198,118, 45,180,218,122,242, 20,153,111,219,179,246,197,
+190,223,186,163, 79, 67,109, 45,247,227,187, 20,180,218, 29, 14,233, 7, 55, 82,170,211, 72,225,139, 54, 50, 21,171,105, 74, 44,
+165,157,129,245, 87, 92,163, 37,166,129,173, 91, 99,100,109,155,244, 43,131, 80,238,201,185,182,182,229, 70,105,213, 48,125, 74,
+ 42,169,242,250, 96,144, 72,236, 56,153,230,198, 45,124, 50,169,159, 30,141, 84,218,154,162, 17,185, 90,110,113,164, 42, 75,209,
+ 93,105,135, 93, 33, 26,210,120,169, 68,132,146, 50,175,134, 49,238, 90,146,117,163, 85,103, 69,110,244, 90,165, 83,105, 25, 97,
+153,104,147,240, 69, 10, 19,117,122, 94,145, 7, 94,186,233,211, 78, 53,174, 8,197,238,167, 48,155,139, 91,185, 27, 77,197,158,
+181,182,215,160,162,183, 74,146,208, 9, 36,168,164,233, 32,119,208,226,194,131,236,226, 87,110, 58,186,240, 20,149,109,184,195,
+ 64,122, 99, 43,105,178,116,130,180,144, 43,199,183, 15,118,229, 30, 42,130, 66,228,101,193,154,186,133, 41,244, 97,251,137, 15,
+153,157,233, 56, 65,184, 8, 62, 85, 52,181,106, 0, 83, 42,130, 65,175,208, 14, 61, 18,204,120,156,252,141, 59,117,198, 66,172,
+ 12,193,100,253,210,220, 33,208, 50,207,212, 11,173, 59,241, 4,215,196, 58, 36,171,108,137, 86,217,173,169,179, 72,228, 45, 99,
+136,224,142, 24,101,200, 49,178,146, 30,237,243, 93,114,247,160, 56,173, 2,128,162,185, 16, 8, 85, 62,177,133,179,103,225, 25,
+ 59,180, 48,254,230, 85,155,126, 46, 44, 52,151, 34,130,182,214,149,101, 77, 64, 83,233, 24,117,171, 84, 69,109,245,144,229,115,
+183, 9,178, 5,245,167,137, 97, 68, 37,246,136,168, 65,202,134,148,173, 14, 19, 94, 5,148,209, 4,222,187,155,225,175,111,220,
+173, 19, 84,219,201, 71,162,182, 72, 33,189, 8,242,132,231,192,209, 56,218,198,181,182, 53, 51,239, 78,172, 98,137,120,158,228,
+ 98,195, 33,165,122,130,137, 66,202,212,173, 58,120, 0, 70,154,145,246, 98,121, 93, 81,230, 34,212,133,238,118,231,179, 32, 54,
+166, 27, 14,173, 70,171,109, 69,178,124,124,213, 79,213,139, 54,238,169,170, 21,228,154, 98, 54,216,187,166, 51, 62,178,138,126,
+ 24,102, 3,203,109, 84, 31,233, 3, 95,179, 14,240,146, 19,121, 41,218,111,110, 39, 27, 75,241, 64, 42, 94,116,105,208,147,245,
+ 43, 6,193,170,122, 18,123, 36, 29,241,248,251, 8,244,214,183, 23,231, 45,250,136, 91,133, 21,165,104,208, 56,175,121, 73, 61,
+ 6,110, 76,232, 13,173,185, 46, 86,136, 45,197,145,110, 91, 97, 41, 1, 97, 76, 56,117, 10, 83,223, 61,184, 73, 70,132,110,175,
+129, 44,181, 93,108,215, 88,203, 46, 32, 50,250,129, 11,103, 66, 82,115,254,149,120,251,113, 94,113,209,208,108,101, 40,177,181,
+183, 45,144,229,250,108, 45, 72,148, 8,169, 10, 71,148,143, 19, 74, 98,150,198,139,158, 45,120,161,250, 51,144, 37,143, 90, 84,
+175, 78, 27,169, 9,144, 9, 88, 74,169, 81,171, 58, 2,123, 50,197,138, 85, 16,187,201, 61, 8,173,243,151, 91, 30,248,149,166,
+ 36,177,168,171,202,163, 31,212, 36,147,196, 20,165, 69, 62,220, 73, 11,113,124,137, 22,101, 8,253,239,145,113,165, 48,219,140,
+ 76, 20,169, 5,162,162, 78, 92, 8,213, 80,107,236,195,157,132, 79, 12,241,178, 55, 39,182,244,105,106, 75,145,146,251,232, 70,
+162,227,205,179,164, 87,133, 72, 72,207,218, 48,229,101, 38, 57,228,182, 7,185,115,104, 83,233,140, 24,248,112,177, 80,228, 89,
+ 15, 50, 9, 31,211,108,166,159, 70, 36,160,216, 95,149,120,145, 93,215,176,247,148, 56, 82,147,105,187, 62,194, 78,160,134, 80,
+227, 50, 19, 79,244,159, 66,156,175,211,138,210,185, 24,241,229,169,114, 18,114,211,180,139,237,206, 92,238,120,252,132,191, 92,
+ 55,124, 67,113,220, 82,238,174, 70,181, 43,203,241, 14, 41, 17,154,112,132,161, 9, 72, 9, 78,164,212,156,179,241,199,154,117,
+252,123,249, 93, 86, 22,173,215,109, 43,220,187, 91, 59,254,131,155,107, 23,166, 92,185, 58, 39, 93,189,253,196,207,125,108,125,
+183,183, 58,101,129,108,219,246, 37,221,119,141,238,217, 5, 48, 91,161, 73,104,166, 96, 68,207, 81, 36, 17,171,211,105,122,168,
+ 79,152,128,120,215, 28,167, 70,192,203,203,234,183, 45,186,165,105,186,215,208,212,127,252,159, 3,115, 63, 55, 27, 31,165, 70,
+ 90, 86,116,165, 56,241,171, 36, 59,139,117,110,155,247, 78,150,254, 87, 88,182,228,113,121,153,119,139,126,147, 33,195,165, 81,
+162,195,128,184,254,138,245, 10, 41, 78,190,241,160, 20, 41, 13,154,131,173, 39, 27,190, 91,232,183, 97,212,231,149, 58,168, 70,
+219,133, 31, 54,228,158,158,133,199,210,138,190, 99,234, 22,167,137,106,205,183,241, 52,165,167,162,159,196,130, 59, 35,112,219,
+ 92, 68,123,181,182, 56,210,115, 8,108,103,224,127,148, 99,208,103,114, 51,228,142, 38, 22,165, 29,106,104, 79,190, 64,120,173,
+ 20,114, 58,245, 80,149, 50,206,129,219, 68,146,149,118,119,215, 18,216,199,140,184,162, 11,185, 83,139,226, 64,249,148, 35, 92,
+172,210, 4, 55, 92,202,161, 36, 50,142,238, 58, 80,132,158, 56,184,176,160,227,192,167,115, 50,117,169, 51,233,231,170, 59, 86,
+194,233,107,116,114,218, 91, 17,131, 79,219,101, 90, 46,205, 76, 73,110, 76,176,242, 86,150, 62, 29,186,133,168,173, 75,211,170,
+158, 85,102,170, 36, 87, 30, 81,230, 31, 44,221,187,212,173,202,142,141,166,187, 23, 14, 39,164,116, 46,189, 97,244,187,138, 78,
+146,134,148,237,231,161,111,244,197,212, 7, 41, 97,252,180,185,139, 99,221,108, 54,251,177, 97,218, 97, 38,204, 94, 67, 51, 95,
+220, 40,148,199,193,169,144,167, 18, 84,216,117,164,188,160, 1, 42,105, 14, 31,213, 41, 28,103, 87,242,238,100, 58,245,168,109,
+122,169,107,253, 59,116,231,233,167, 51, 74,223, 90,177, 46,153, 25,169,106,164,146, 92,235,199,238, 76,154,243,135,172,113,189,
+250, 65,229, 70,199,229,142,231,153, 3,116, 69,118,246,229,225,139,108,183,224,185, 22, 16, 49, 90,143, 18, 83, 45, 40, 5,146,
+173, 69, 42, 89, 32, 4, 18,156,150,113,212,249, 15,203,249, 22, 50,115, 21,200,184,175, 17,122, 27,166,173,122, 86,218,250,142,
+119,204,221,106,213,219,150,231, 29,119, 71,238,116,251,234, 82,214,205,191,112,220, 18,137, 84,160,251,206, 15, 81,215, 11,204,
+ 58, 84,162, 42, 74,201, 10, 87, 31, 30, 56,244,159, 5,166,115,203, 50, 47, 83,121, 28,174,178, 72, 79,194,222, 23, 37, 50,180,
+213, 65,164,157, 33, 68,101, 80,150,193,167,111, 12, 43,209,106, 68,242, 91,122, 4,103,147,155, 98, 18,181,203,146,250, 80,144,
+ 9, 70,150, 66,116,131, 85, 18,151, 64, 32,253, 88,106, 98, 74,227,144,239,101,127,151,182, 11, 82,218,182,179,241,147, 1, 58,
+ 27,150,226,208,163,226, 18,197, 64, 30,220, 90,133,189, 93,116,173, 61,196, 50,189, 46, 65, 36,238, 37,177,111,113,215, 34, 42,
+ 18,221, 80, 45,186, 34, 56,176, 82, 70, 73, 14, 0, 40, 61,153,226, 87, 97, 50, 63,168,151, 49,186, 12,233,114,219, 38,231, 5,
+231,166, 57,229, 74,165,154, 4,145,149,104, 52,174,158, 53,195,161,102,131,103,145, 93, 42,108,127,151,228,176,211,109,162, 67,
+109,173,206, 5, 37,231, 28, 70,163,216,104,132,226, 85, 56,255, 0, 81, 86, 91,185, 27,206,236,235,197,169,228,202,184, 56,183,
+161,132,133,107, 90,148, 9, 5, 53,202,134,163, 13, 87, 35, 30, 0,237,202, 75, 83, 50, 36, 67,184, 41, 40,178, 50,194,101, 34,
+170, 94,176,162,161,254,145,115, 89, 63, 94, 45,219,180,229,174,165, 59,179,218,232, 29, 83,166,193,181,150,210,159, 89,199,202,
+144,133,178,146,178, 72, 21, 32, 0, 8,203,186,184, 47, 92,130, 84,170, 33,182,165, 39, 81, 75, 86,218,222,183,118,104,152, 10,
+ 67, 26,106,167, 30,244,208, 42, 50,161,161, 4,112,241, 56,197,200,206,181, 15,235, 85,236, 90,191,113,126,212,100,249, 27,118,
+110, 78,238,171,236,180, 51, 1, 2, 68,165,209, 9, 69,166, 28,153, 52, 81, 62,232,121, 73, 13,131,254,146,128,197, 28,158,187,
+ 11, 74,173, 81,118,203, 79,115,163, 36,183,135, 57, 62, 7, 66,116,247,208, 15, 83,202,189,194,222,155, 50, 20,219, 37,254, 10,
+209, 58, 13,226,100,167, 35, 62,202,134,105, 91, 6, 51,145,208, 21,220, 82,250,143,134, 57,124,175, 51,187,238,150,235, 47,244,
+170, 47,105,165,107,164, 75,153,223,220,173,229,239, 81, 87, 24,108, 39,169,203,190,221,223, 9, 66, 18,141, 87,155, 12,121, 83,
+195, 92, 67, 73,153, 16, 65, 90,116,214,149, 89,118,189,231,142, 42,255, 0,120,189,216,190,255, 0,226, 78,250, 5,169,252,252,
+ 75, 91,106, 90,118, 86,196, 87,173,176,118,189,150,199, 56,102,153, 86,219,123, 40,124, 18, 41,147,142,106, 80,194, 75,170,221,
+159, 98,251,119,212,158,223, 65,199,134,186,191,183,112,230,252,233,151, 39,149, 46,115,171,118, 82,189,231, 22, 73, 60,106, 61,
+148,236,166, 40,206,110,110,178,117,125,229,248, 91,141,181, 68,146, 70,213,201,205,189,186, 27, 74,119,116,101,174,122, 0, 66,
+110, 80,212,148, 72, 41, 72,160, 14, 5, 2,133,251, 78,126, 56,212,199,234,111,132,213,123,249,152,185, 93, 26, 55, 29, 96,232,
+253,195,112,229,206,205, 35,212, 77,233,240,223, 31, 76,194, 5,116,238,168,118,152,186,179,109,118,191, 97,150,250, 45,212,249,
+ 14,150,166, 54, 86,221, 74,154,182, 91,204,194,234, 84,211,242, 46, 42, 5,106,109,105,210,180,161, 45,249, 81, 81,219,153,196,
+115,234, 73,124,171, 78,242,221,158,136,146,248,158,166,188,125,191,203,120, 82, 4,214, 98, 75,144,240, 58,147, 26, 91,205,250,
+ 0,246, 87,211, 72, 89, 3,184,156,240,231,212,161, 77, 22,163, 35,208,245,214, 90, 15, 54, 75,211,243,239, 50, 36,204, 90, 91,
+156,236,119, 89,134,172,144,134,215,166,136, 74,107,146, 69, 42, 6, 33,181,125,206, 77,183,171, 90, 26, 87,113,213,184, 37, 21,
+162,106,190,128,176, 99,204,181, 91,174, 6,242,210,216,136,235, 62,155, 77,188, 52,151, 30,214, 10, 10, 65,227,167, 51, 81,132,
+140, 92, 35, 45,218, 38,189,227,167, 37,114, 81,218,234,211,247,115, 21,184,221, 33, 90,229, 49, 45,182,214,229,200,193,101,161,
+ 85,164, 53, 71, 34,132, 26,167, 77, 77, 1,225, 94, 56,116,238,168, 52,249,237, 95,112,203,118,101, 52,213,116,220,253, 60, 66,
+207,182,185, 42,221,111, 82, 45,207, 74, 34, 34, 19,234,178,165, 4,131,173,121, 16, 18,115, 28,120,225, 39, 13,209,143,194,222,
+131,237,220,219, 41, 86, 73,124, 92, 61,157,226, 49,101, 70, 27,118, 13,158,122,180,219,229,170, 66, 20,179,193,167, 2,211,233,
+185,244, 19, 67,224, 78, 24,164,182, 70, 47,131,175,248, 49,242,139,241, 37, 37,197, 83,214,185,175,183, 51, 75,122, 70, 92, 75,
+171, 49, 94, 3,215,106, 44, 86,214, 1, 6,138, 67, 9, 73,204,120,140, 67,149, 26, 73, 39,201, 47,184,179,131, 37, 40, 54,185,
+201,253,227,155,210,173, 78, 91,237,208, 47, 75,164, 54,226,179, 45,186, 2,117, 45, 14,184, 22,222, 85,166,180,253,160, 98,121,
+ 74, 59, 98,165,194,137,251,222,158,178,172, 97, 53, 41,202, 28, 92,154,247, 45,125, 66,242, 46, 10,153,115,137, 37,231, 2,110,
+114,109,142, 6, 28, 36, 36, 37,247, 28,114,128, 19,144, 36, 18, 7,183, 14,156,247, 73, 62,110, 46,158,157, 72,163,107,108,100,
+146,209, 77, 87,208,146, 27, 45,182,235,141,158,223,113, 55,150,150,196, 55,152,244,219,109,224, 80, 92,123,212, 73,108,165, 42,
+161, 58,104, 77, 71, 12, 84,183, 9, 91,140,183, 42, 38,185,246,242, 45, 92,185, 27,146,134,199, 86,159, 46, 75,153,190,217,109,
+ 77,167,125, 21, 15, 92, 53,233, 20, 84, 87,227,128, 13,133, 83,253, 31,188,246,226,116,244,241,123,191,238,225,254, 36, 14,191,
+240,247,255, 0,219,199,252, 3,217, 8,248,139, 5, 79,235,191, 92,255, 0,237, 78, 31,101,235,111,215,247,137,144,180,187,234,
+251,134,219,172, 37,198, 97, 46, 42, 3,209, 18, 85,167,212,121, 74, 32,154, 19, 76,210,156,241, 21,200, 81,124,173, 19, 91,185,
+185,252,201,154, 88,103, 34, 83,229,239,121, 79, 83,179,146, 10, 11,110, 52, 2,104,120,171,199,234, 56,244,119, 58, 51,159, 81,
+168,182,221, 66, 3,161,233, 38,141, 34,174, 80,248,147,221,244, 98, 69, 21, 45, 88,196,232, 75, 44,247,134, 94,151, 21,194,178,
+ 34,250,138,105,116, 57, 5, 20,144, 7,215,134,164,215, 17,151, 26, 8,141,198,253,183,116, 32,241, 62,165, 18,107, 76,179,197,
+152,219,209,144, 78, 75,109, 77,121, 55,241, 47,120, 79,154,177,174, 42, 31, 91,106,254,161, 13, 12,253,137,195,236, 89,248,106,
+ 67,188,112,155,189,100,222,160,139, 69,173,207, 77, 43, 36, 45,102,167, 33, 64, 56, 84,159, 1,136, 46,209, 49,251,136, 61,213,
+ 78,219,167, 57, 38,236,201,157, 13, 58,144,211, 43, 90, 18, 20,178, 10, 74,213,154,187,242,207, 23,237, 70, 78, 40,173, 39,168,
+251,106,230, 99, 22,173,176,236,200,173,209, 64,105, 12,162,158, 83, 74,211, 35,217, 76, 45,200,124, 67,183, 81, 21, 94,249,223,
+ 55,141,205,113, 46,185, 24,166,156, 40,224, 4, 36,113,243, 26,227, 66, 58, 69, 81, 16, 78,117, 29,118,101,238,108,240,220,100,
+ 6,131, 9, 79,148, 60,235, 96, 18, 59,205, 49, 35,154, 75, 82, 26,146, 22,175,178, 45,207,253,236,223, 77,202, 12,210, 41,165,
+ 62, 37, 77,211, 60, 37,151,185, 84, 38,232,139, 43,149, 27,249,219, 80, 91,183, 85, 53, 41,138,106,109,246,202, 20,162,158,220,
+193, 20,246, 83, 15,185, 74, 20, 30,234,150, 77,131,155, 55,137, 68,252, 56, 79,192,215, 83, 77,172, 23, 20,144, 51, 25, 52, 42,
+ 15,183, 25, 77,182,203, 78, 42,132,166, 7, 50,247, 84,249,205,250,214,248,143,182,170,208, 56,151, 27, 89, 39,180,144,156,176,
+245, 24,190, 37,105,238,134,169,155,210,164, 91,229,165,102,125,175,225,166,168,235,212,211,237,186,147, 65,194,132, 87, 13,157,
+136,241, 68,214,114,165,204,105,101,249, 45, 41,105,117,165, 42, 10,242,109,133,149, 37,116,237, 35, 69, 14, 42, 50,237,123,133,
+133,139,111, 75,142,187,140,103,126, 28, 53,229,113,181,173, 73, 34,185,215, 50, 9,167,183, 9, 89, 6,238,212,107,170, 27, 82,
+146,132, 66,158,147, 13, 36,133, 29,100, 18, 71, 96,169, 56, 60, 73,118,146, 37, 22,109,219,237, 81, 84,130,213,206, 83, 78, 52,
+ 14,144, 23, 36, 84, 84, 30, 9,108, 98,104,100,200,100,237, 91,228,194, 65,216,136,153,113,121,109, 78,101,150,209, 82,148,135,
+ 20,165,210,157,154,200, 20,196,174,255, 0, 58, 13,141,168,246,154, 23,109,164,203,239, 39,210,125,167,227, 47,202,135, 90,112,
+235,212, 59,198,186,125,120,206,200,186,223, 46,210,254, 61,184,165,199,152,223, 55,106, 61,101, 73, 48,220, 74,165,101,165, 42,
+113, 10,250, 6,145, 64,120,113,197,123,119,117,173, 53,167, 18,220,173,105,199, 77,105,233,208, 86, 6,214,186,170,220,171,148,
+164,250, 14, 26, 4, 6,220,210,161,153, 38,181, 78, 99, 50,120,226, 72, 67, 71,162, 78, 95, 51,230,251, 53, 32,149,206, 20,117,
+107,135,102,188, 77, 57,238,238,127, 75,224,102, 73,209, 5, 89, 10, 21, 41, 74, 29,196,167, 60, 87,186,184, 87, 90,105,234, 46,
+ 89,157, 21, 34,200,229,226,211, 59,226,125, 52,172,200, 72,160, 78,154, 0, 15, 26,157, 85,194,219,130,226, 76,239,206,156, 70,
+203,142,197,182, 76, 81,149, 61,107,105,163,228, 62,144, 1, 74,203, 35,165, 32,118,247,140,104,219,146, 69, 25, 78, 77,145,187,
+167, 42,236,215,117,166, 36, 52,169, 0, 13, 68,172, 81, 71,219, 66, 63, 62, 29, 44,133, 30, 3, 85,183, 33, 40,189, 54,217,229,
+168, 36,173,196,169,202,148, 21, 20, 22,200,226,172,205, 41,244,156, 71,245, 74,175,208, 61,217,106,149,224, 56,192,233,210,193,
+106,148,150, 36,200, 17,222,174, 78, 62,202,128, 61,128,107,108,168,125, 99, 25,249, 52,162,215, 95,183, 3, 67, 22,158,143,183,
+222, 77,236, 91, 58, 94,216,142, 99,219, 17,110,154,151, 60,170,245, 52, 47, 87, 0, 41,173, 0, 15,164,225,109, 45,250,215, 80,
+187, 61,173, 55,169,181,109, 76,155, 36,151, 88, 98,198,145, 57,193, 69, 3,164,182, 73,204, 16, 27, 36,123, 59, 41,129, 66,229,
+190, 99,100,237, 92,229,169,180, 57,113,185,110, 43, 55, 43,146,213, 10, 10,135,236,224, 0,226,137,225, 74, 17, 90, 97,146,187,
+218, 51,195, 92,145,149,114,210, 52, 39,131, 23, 7,223,121,181, 36, 41, 2, 82, 82, 1,166,116,247, 83, 83,133,134, 66, 92,133,
+240,153,145,108,102,206,128,211, 90,132, 53,157, 1,180, 0,210,129,236, 32,138, 87, 10,174, 54,234, 35,183, 20,169, 81, 93,203,
+106,132, 34, 49, 2,107,233, 84,115,150,181, 45, 33,198,128, 79, 5, 2, 85, 76, 75,114,227,228, 67,109, 46,108,208, 68, 93,152,
+213, 99,182,232,144,180, 83, 81, 75,221,188, 7,155,248,176,219, 94, 36,244, 29,117,194, 34,103,112,196,179,190, 97, 66,244,209,
+ 45, 89,130, 18, 94, 82,106,123, 87,195, 14,158, 59, 95, 49, 26,190,185, 33, 91,100, 27,254,245,109, 77,194, 84,137,165, 46, 4,
+ 43,211, 10, 12,182, 43,250,217, 32, 26,246, 83, 86, 34,189,149,110,196,106,218, 94,178, 7,186,228,139, 83,150,125, 43,238,219,
+211,238, 51,105,138, 39,110, 16, 40,134,210,219,146, 66,149, 74,159,187,141,164,208,120,145,244,227,147,204,243, 50,110,155,157,
+ 59,141, 11,120, 43,178,172,191,185,103,242,211,230,102,226, 68,123,158,232, 97,184,108,188,130,162,228,215, 61, 4,160, 19, 80,
+144,194, 61, 71,211,236, 33, 56,203,187,212,114, 47,107, 8,210, 63,230, 52,108,116,244,185, 23,239, 46,126, 90,124,164,219,173,
+180,238,237,144,245,201,228, 20,169,113,153, 1,152,234, 32,131, 69,122,158,162,213,195,136, 41,240,207, 60, 81,148,111, 77,252,
+119, 29, 59, 22,139,221, 71,239, 52, 99,139, 5,200,187,246,127, 38,121, 99,176,146, 6,211,177,196,132,177, 77, 47, 33,173,111,
+ 0, 59, 61, 71,117, 46,158, 21,196, 42,196, 33,242,197,125,255, 0,121, 60, 54,174, 68,161,166,245, 84,128, 7,110, 18,110,188,
+ 91, 36,114, 50, 83, 65,227,237,196,123,152,218,176,138,112,131,149, 50,239,194, 84, 5, 27,117,116,175,102, 29, 22, 35, 66,205,
+188, 59, 78, 94, 24,124,100, 35, 66,129, 97, 94, 90,253, 88,158, 44,130, 72, 81,178,126,140, 45, 70, 25, 38,131, 9, 81,201, 84,
+ 9,166,156, 61, 72,125, 0,123,198, 29,184,107,137,132,147,171, 49,150, 13,194,168,129,105, 42,169, 38,163, 9,184,112,138,147,
+157, 62,172, 35, 98,160,170, 64, 57, 86,135, 13,220, 62,166,114,165,112,169,212, 67, 62,153, 36, 40,229, 92, 34, 84, 18,162,200,
+104, 36,225,212, 26, 27, 32,112,170, 32, 38,183, 10,189,220,177, 34, 67,119, 24, 73, 86,161,159,215,135,196, 96,165, 13,107, 92,
+177, 45, 80, 31, 47, 87,207,241,103, 56,251,227,223,225,252,152,244, 31,234, 57,199,193,155, 81,191,196, 79,250, 42,247,120,113,
+252,190,220, 90,137, 10, 54,173, 63,248,112,123,223,218,147,199,223,247,255, 0,253, 88,111, 97, 13,195,110,127,248,202,184,112,
+253,127,123,221,253, 95, 30,236, 91,135, 18,188,254, 81,166, 39,246,105, 62,255, 0,237,157,247,253,239,218, 30, 62, 56,178,190,
+ 82, 53,196,219,180,127, 97,111,218,191,115,222,226, 56,248,254,140,100, 47,156,145,240, 25, 55,119,246,149,254,211,220, 79,183,
+249, 59,241,187, 14, 5,118, 52,189,254, 30,223,189,250,254,206, 29,159,167,194,152,130, 63, 58, 9,112, 24, 36,254,221, 30,231,
+ 21,126,207,219,250,216,183,123,135, 50, 52, 55, 91,191,180, 61,254, 43,238,171,252, 27,221,227,250,254, 24,196,143,207,207,214,
+ 41, 37,219, 63,177,255, 0,234,248,255, 0,247, 62, 62,247,102, 55,177,184, 21,167,234, 36,214,190, 43,253,143,184,175,127,143,
+ 15,214,240,195,238,240, 33,100,134, 15, 6,191, 97,196,251,159,163,195, 25, 75,136,249,146, 59, 47,246,241,239,113, 79,246, 63,
+218,113,253, 95, 28, 90,137, 78,124, 11, 41,159,236, 47,127,226, 95,116,251,223,179,252,187,176,235,156, 8,163,235, 17,217, 95,
+218, 63,254,205,250,223,219, 56,255, 0, 95,195,244, 99, 59,153,160,184,115, 37,209,191,182, 43,222,226, 63,105,251, 47,235,120,
+226,110, 68,208,245,134,220, 95,225,200,253,135, 15,250,254, 31,213,253, 24,136,144, 66, 7,248, 19, 95,216,255, 0,254, 39,237,
+127,173,227,135, 75,129, 21,177,227,109,127,106,115,135,236,251,125,223,123,245,188,123,176,251,124, 5,184,110,167,246,170,254,
+199,238,254,175,233,241,194,221,249,121, 17,195,143, 50, 25, 43,246,169,254,203,251, 79,254,171,246,124, 71,228, 49,155, 30, 60,
+141,167,242,115, 51,184, 61,198,191,103,239, 15,236,127,179,250, 49,101,252,165, 36, 50,220,191,110,159,218,240,253,111,119,143,
+234,226,173,194,197,143, 88,172, 15,120,126,219,135,245,187,126,204, 35,225,200,119, 63,234, 53, 19,253,165,127,181,253, 63,215,
+192, 79,103,214, 53,221,127,104, 63,180,251,255, 0,213,250, 48, 63, 80,188,249,134,135,251, 7, 63,181,240, 63,183,253,159,229,
+223,132,229,200,158, 60, 57,155,177,255, 0,179,179,253,171,136,253,167,236,184,126,175,135,118, 32,187,234, 37,183,199,152,165,
+199,251, 11,255, 0,182,226,158, 28, 56,126,191,232,195,236, 5,239, 89, 46,229, 7,237, 15,246,126, 31,173,253,167,249, 49,102,
+124, 10, 43,143, 63, 81, 38,220,191,225, 14,123,254,250,125,255, 0,115,134, 41, 92,245, 22, 45,241,254,162,189,189,255, 0,102,
+123,143, 19,199,135,237, 7, 15,253,220, 36, 61, 68,207,214, 50,171,140, 79,218,251,223,175,239,241,252,248,179, 14, 5, 75,222,
+177,171,112,127,136, 72,247,253,244,126,211,246,127,179, 30,239,233,196,246,253, 69,118,108,219,184, 61,238,254,201, 95,182,253,
+159,187,250,191,210,238,196,211,225,252,134,179,115,148,255, 0,248,133,143,236, 61,159,226, 95,178,236,247,252,123,241,139,159,
+255, 0, 27,249,201,172,250,142,179,229, 47,246,168,191,225,188, 83,253,187,220,253, 95,217,255, 0, 67, 30, 91,151,255, 0, 39,
+ 63,250,141,187, 60,121, 29,255, 0,200,223,252, 40,207,248, 31,236,219,255, 0,194,191,177,254,191,143,127,142, 54,176,248,114,
+245,113, 52,224, 88, 12,126,208,241,250,125,238, 39, 11,155,243, 34,196,125,102,194, 56,118,112,250, 49, 66, 68,130,202,253,159,
+240, 98, 25, 9, 17, 38,191, 42, 98, 41, 15, 14,175,217,226, 48, 17, 60,123, 63,173,199, 0, 10, 14, 31, 87,179, 10,128,200,224,
+112,228, 35, 22,103,136,196,203,129, 28,141,148,251,163,244,241,195, 8,253,129, 92,236,227,253, 92, 76, 17, 49,250,163,143,209,
+134, 15, 51,250,191,173,135,174, 0, 24,126, 85,227,133, 0, 30, 24, 0, 79,191,244, 96, 96, 20,241,236,250,112,209, 76, 14, 63,
+193,135, 68, 65, 70,255, 0, 42,241,195,128, 80, 97, 80, 5, 95,189,135,128,158, 30,136,131,142, 35,134, 20, 3, 96, 3,255,217,
};
diff --git a/source/blender/src/toets.c b/source/blender/src/toets.c
index a71be6bc425..5b6af61949f 100644
--- a/source/blender/src/toets.c
+++ b/source/blender/src/toets.c
@@ -106,7 +106,7 @@
#include "mydevice.h"
-#include "BIF_poseobject.h"
+#include "transform.h"
#define VIEW_ZOOM_OUT_FACTOR (1.15f)
#define VIEW_ZOOM_IN_FACTOR (1.0f/VIEW_ZOOM_OUT_FACTOR)
@@ -322,6 +322,7 @@ void persptoetsen(unsigned short event)
if(((G.qual & LR_CTRLKEY) && (G.qual & LR_ALTKEY)) || (G.qual & LR_SHIFTKEY)) {
void setcameratoview3d(void); // view.c
setcameratoview3d();
+ autokeyframe_ob_cb_func(G.scene->camera, TFM_TRANSLATION|TFM_ROTATION);
DAG_object_flush_update(G.scene, G.scene->camera, OB_RECALC_OB);
BIF_undo_push("View to Camera position");
allqueue(REDRAWVIEW3D, 0);
diff --git a/source/blender/src/transform_conversions.c b/source/blender/src/transform_conversions.c
index 8859194ff9c..9a9a454ef3d 100644
--- a/source/blender/src/transform_conversions.c
+++ b/source/blender/src/transform_conversions.c
@@ -2726,9 +2726,10 @@ static void createTransNlaData(TransInfo *t)
if (base->object->action) {
/* exclude if strip is selected too */
for (strip=base->object->nlastrips.first; strip; strip=strip->next) {
- if (strip->flag & ACTSTRIP_SELECT)
+ if (strip->flag & ACTSTRIP_SELECT) {
if (strip->act == base->object->action)
break;
+ }
}
if (strip==NULL) {
cfra = get_action_frame(base->object, CFRA);
@@ -2790,9 +2791,10 @@ static void createTransNlaData(TransInfo *t)
if (base->object->action) {
/* exclude if strip that active action belongs to is selected too */
for (strip=base->object->nlastrips.first; strip; strip=strip->next) {
- if (strip->flag & ACTSTRIP_SELECT)
+ if (strip->flag & ACTSTRIP_SELECT) {
if (strip->act == base->object->action)
break;
+ }
}
/* can include if no strip found */
diff --git a/source/blender/src/transform_generics.c b/source/blender/src/transform_generics.c
index 1a803bf00a8..8154929eb17 100644
--- a/source/blender/src/transform_generics.c
+++ b/source/blender/src/transform_generics.c
@@ -39,6 +39,7 @@
#include "DNA_lattice_types.h"
#include "DNA_mesh_types.h"
#include "DNA_modifier_types.h"
+#include "DNA_nla_types.h"
#include "DNA_object_types.h"
#include "DNA_object_force.h"
#include "DNA_particle_types.h"
@@ -303,10 +304,50 @@ void recalcData(TransInfo *t)
if (base->object->recalc)
base->object->ctime= -1234567.0f; // eveil!
+
+ /* recalculate scale of selected nla-strips */
+ if (base->object->nlastrips.first) {
+ Object *bob= base->object;
+ bActionStrip *strip;
+
+ for (strip= bob->nlastrips.first; strip; strip= strip->next) {
+ if (strip->flag & ACTSTRIP_SELECT) {
+ float actlen= strip->actend - strip->actstart;
+ float len= strip->end - strip->start;
+
+ strip->scale= len / (actlen * strip->repeat);
+ }
+ }
+ }
}
DAG_scene_flush_update(G.scene, screen_view3d_layers(), 0);
}
+ else {
+ for (base=G.scene->base.first; base; base=base->next) {
+ /* recalculate scale of selected nla-strips */
+ if (base->object->nlastrips.first) {
+ Object *bob= base->object;
+ bActionStrip *strip;
+
+ for (strip= bob->nlastrips.first; strip; strip= strip->next) {
+ if (strip->flag & ACTSTRIP_SELECT) {
+ float actlen= strip->actend - strip->actstart;
+ float len= strip->end - strip->start;
+
+ /* prevent 'negative' scaling */
+ if (len < 0) {
+ SWAP(float, strip->start, strip->end);
+ len= fabs(len);
+ }
+
+ /* calculate new scale */
+ strip->scale= len / (actlen * strip->repeat);
+ }
+ }
+ }
+ }
+ }
}
else if (t->spacetype == SPACE_IPO) {
EditIpo *ei;
@@ -931,11 +972,12 @@ void calculateCenter(TransInfo *t)
calculateCenterMedian(t);
break;
case V3D_ACTIVE:
+ {
/* set median, and if if if... do object center */
-
+ EditSelection ese;
/* EDIT MODE ACTIVE EDITMODE ELEMENT */
- if (G.obedit && G.obedit->type == OB_MESH && G.editMesh->selected.last) {
- EM_editselection_center(t->center, G.editMesh->selected.last);
+ if (G.obedit && G.obedit->type == OB_MESH && EM_get_actSelection(&ese)) {
+ EM_editselection_center(t->center, &ese);
calculateCenter2D(t);
break;
} /* END EDIT MODE ACTIVE ELEMENT */
@@ -948,6 +990,8 @@ void calculateCenter(TransInfo *t)
projectIntView(t, t->center, t->center2d);
}
}
+
+ }
}
/* setting constraint center */
diff --git a/source/blender/src/transform_manipulator.c b/source/blender/src/transform_manipulator.c
index 601d516f26f..5c06aaea890 100644
--- a/source/blender/src/transform_manipulator.c
+++ b/source/blender/src/transform_manipulator.c
@@ -230,11 +230,12 @@ int calc_manipulator_stats(ScrArea *sa)
if(G.obedit->type==OB_MESH) {
EditMesh *em = G.editMesh;
EditVert *eve;
+ EditSelection ese;
float vec[3]= {0,0,0};
/* USE LAST SELECTE WITH ACTIVE */
- if (G.vd->around==V3D_ACTIVE && em->selected.last) {
- EM_editselection_center(vec, em->selected.last);
+ if (G.vd->around==V3D_ACTIVE && EM_get_actSelection(&ese)) {
+ EM_editselection_center(vec, &ese);
calc_tw_center(vec);
totsel= 1;
} else {
@@ -435,10 +436,10 @@ int calc_manipulator_stats(ScrArea *sa)
if(G.obedit) {
float mat[3][3];
int type;
-
+
strcpy(t->spacename, "normal");
-
- type = getTransformOrientation(normal, plane, 0);
+
+ type = getTransformOrientation(normal, plane, (G.vd->around == V3D_ACTIVE));
switch (type)
{
diff --git a/source/blender/src/transform_orientations.c b/source/blender/src/transform_orientations.c
index 5c35a80c43f..301ac8aa248 100644
--- a/source/blender/src/transform_orientations.c
+++ b/source/blender/src/transform_orientations.c
@@ -379,16 +379,16 @@ int getTransformOrientation(float normal[3], float plane[3], int activeOnly)
{
EditMesh *em = G.editMesh;
EditVert *eve;
+ EditSelection ese;
float vec[3]= {0,0,0};
/* USE LAST SELECTED WITH ACTIVE */
- if (activeOnly && em->selected.last)
+ if (activeOnly && EM_get_actSelection(&ese))
{
- EditSelection *ese = em->selected.last;
- EM_editselection_normal(normal, ese);
- EM_editselection_plane(plane, ese);
+ EM_editselection_normal(normal, &ese);
+ EM_editselection_plane(plane, &ese);
- switch (ese->type)
+ switch (ese.type)
{
case EDITVERT:
result = ORIENTATION_VERT;
diff --git a/source/blender/src/unwrapper.c b/source/blender/src/unwrapper.c
index fafae7458f1..ee5ce0c914e 100644
--- a/source/blender/src/unwrapper.c
+++ b/source/blender/src/unwrapper.c
@@ -200,6 +200,19 @@ ParamHandle *construct_param_handle(EditMesh *em, short implicit, short fill, sh
ParamHandle *handle;
handle = param_construct_begin();
+
+ if ((G.scene->toolsettings->uvcalc_flag & UVCALC_NO_ASPECT_CORRECT)==0) {
+ EditMesh *em = G.editMesh;
+ EditFace *efa = EM_get_actFace(1);
+ if (efa) {
+ float aspx, aspy;
+ MTFace *tface = CustomData_em_get(&em->fdata, efa->data, CD_MTFACE);
+ image_final_aspect(tface->tpage, &aspx, &aspy);
+
+ if (aspx!=aspy)
+ param_aspect_ratio(handle, aspx, aspy);
+ }
+ }
/* we need the vert indicies */
for (ev= em->verts.first, a=0; ev; ev= ev->next, a++)
@@ -314,21 +327,6 @@ void unwrap_lscm(short seamcut)
param_lscm_begin(handle, PARAM_FALSE, abf);
param_lscm_solve(handle);
param_lscm_end(handle);
-
-
- /* scale before packing */
- if ((G.scene->toolsettings->uvcalc_flag & UVCALC_NO_ASPECT_CORRECT)==0) {
- EditFace *efa = EM_get_actFace(1);
- if (efa) {
- float aspx, aspy;
- MTFace *tface = CustomData_em_get(&em->fdata, efa->data, CD_MTFACE);
- image_final_aspect(tface->tpage, &aspx, &aspy);
-
- if (aspx!=aspy) {
- param_scale(handle, 1.0, aspx/aspy);
- }
- }
- }
param_pack(handle);
diff --git a/source/gameengine/GamePlayer/Makefile b/source/gameengine/GamePlayer/Makefile
index 747a82fc333..c4f78f23117 100644
--- a/source/gameengine/GamePlayer/Makefile
+++ b/source/gameengine/GamePlayer/Makefile
@@ -34,7 +34,7 @@ SOURCEDIR = source/gameengine/GamePlayer
DIR = $(OCGDIR)/gameengine/GamePlayer
DIRS = common ghost
-ifneq ($(NAN_NO_PLUGIN),true)
+ifeq ($(WITH_BF_WEBPLUGIN),true)
ifeq ($(OS),$(findstring $(OS), "freebsd irix windows"))
ifneq ($(FREE_WINDOWS),true)
DIRS += netscape
diff --git a/source/gameengine/GamePlayer/ghost/GPG_ghost.cpp b/source/gameengine/GamePlayer/ghost/GPG_ghost.cpp
index 8817bc98886..bc80c0a7612 100644
--- a/source/gameengine/GamePlayer/ghost/GPG_ghost.cpp
+++ b/source/gameengine/GamePlayer/ghost/GPG_ghost.cpp
@@ -562,13 +562,13 @@ int main(int argc, char** argv)
STR_String exitstring = "";
GPG_Application app(system, NULL, exitstring);
bool firstTimeRunning = true;
+ char *filename = get_filename(argc, argv);
+ char *titlename;
+ char pathname[160];
do
{
// Read the Blender file
- char *filename = get_filename(argc, argv);
- char *titlename;
- char pathname[160];
BlendFileData *bfd;
// if we got an exitcode 3 (KX_EXIT_REQUEST_START_OTHER_GAME) load a different file
@@ -582,6 +582,17 @@ int main(int argc, char** argv)
BLI_convertstringcode(basedpath, pathname);
bfd = load_game_data(basedpath);
+
+ if (!bfd)
+ {
+ // just add "//" in front of it
+ char temppath[242];
+ strcpy(temppath, "//");
+ strcat(temppath, basedpath);
+
+ BLI_convertstringcode(temppath, pathname);
+ bfd = load_game_data(temppath);
+ }
}
else
{
@@ -607,7 +618,6 @@ int main(int argc, char** argv)
#endif // WIN32
Main *maggie = bfd->main;
Scene *scene = bfd->curscene;
- strcpy (pathname, maggie->name);
char *startscenename = scene->id.name + 2;
G.fileflags = bfd->fileflags;
@@ -651,7 +661,12 @@ int main(int argc, char** argv)
if (firstTimeRunning)
{
firstTimeRunning = false;
-
+
+ // set the filename only the first time as in KetsjiEmbedded
+ strcpy (pathname, maggie->name);
+ // also copy here (used by GameLogic.getBaseDirectory)
+ strcpy (G.sce, maggie->name);
+
if (fullScreen)
{
#ifdef WIN32
diff --git a/source/gameengine/Ketsji/KX_CameraActuator.cpp b/source/gameengine/Ketsji/KX_CameraActuator.cpp
index cb3180cb05e..27f4870de10 100644
--- a/source/gameengine/Ketsji/KX_CameraActuator.cpp
+++ b/source/gameengine/Ketsji/KX_CameraActuator.cpp
@@ -155,14 +155,25 @@ static void Kx_VecUpMat3(float *vec, float mat[][3], short axis)
mat[coz][0]= vec[0];
mat[coz][1]= vec[1];
mat[coz][2]= vec[2];
- Kx_Normalize((float *)mat[coz]);
+ if (Kx_Normalize((float *)mat[coz]) == 0.f) {
+ /* this is a very abnormal situation: the camera has reach the object center exactly
+ We will choose a completely arbitrary direction */
+ mat[coz][0] = 1.0f;
+ mat[coz][1] = 0.0f;
+ mat[coz][2] = 0.0f;
+ }
inp= mat[coz][2];
mat[coy][0]= - inp*mat[coz][0];
mat[coy][1]= - inp*mat[coz][1];
mat[coy][2]= 1.0 - inp*mat[coz][2];
- Kx_Normalize((float *)mat[coy]);
+ if (Kx_Normalize((float *)mat[coy]) == 0.f) {
+ /* the camera is vertical, chose the y axis arbitrary */
+ mat[coy][0] = 0.f;
+ mat[coy][1] = 1.f;
+ mat[coy][2] = 0.f;
+ }
Kx_Crossf(mat[cox], mat[coy], mat[coz]);
diff --git a/source/gameengine/Ketsji/KX_PythonInit.cpp b/source/gameengine/Ketsji/KX_PythonInit.cpp
index a2aff54d385..a80a7f04e8f 100644
--- a/source/gameengine/Ketsji/KX_PythonInit.cpp
+++ b/source/gameengine/Ketsji/KX_PythonInit.cpp
@@ -88,6 +88,10 @@
//#include "BPY_extern.h"
#endif
+#include "BKE_utildefines.h"
+#include "BKE_global.h"
+#include "BLI_blenlib.h"
+
static void setSandbox(TPythonSecurityLevel level);
@@ -140,6 +144,32 @@ static PyObject* gPySetGravity(PyObject*,
return NULL;
}
+static char gPyExpandPath_doc[] =
+"(path) - Converts a blender internal path into a proper file system path.\n\
+path - the string path to convert.\n\n\
+Use / as directory separator in path\n\
+You can use '//' at the start of the string to define a relative path;\n\
+Blender replaces that string by the directory of the startup .blend or runtime\n\
+file to make a full path name (doesn't change during the game, even if you load\n\
+other .blend).\n\
+The function also converts the directory separator to the local file system format.";
+
+static PyObject* gPyExpandPath(PyObject*,
+ PyObject* args,
+ PyObject*)
+{
+ char expanded[FILE_MAXDIR + FILE_MAXFILE];
+ char* filename;
+
+ if (PyArg_ParseTuple(args,"s",&filename))
+ {
+ BLI_strncpy(expanded, filename, FILE_MAXDIR + FILE_MAXFILE);
+ BLI_convertstringcode(expanded, G.sce);
+ return PyString_FromString(expanded);
+ }
+ return NULL;
+}
+
static bool usedsp = false;
@@ -361,6 +391,7 @@ static PyObject *pyPrintExt(PyObject *,PyObject *,PyObject *)
static struct PyMethodDef game_methods[] = {
+ {"expandPath", (PyCFunction)gPyExpandPath, METH_VARARGS, gPyExpandPath_doc},
{"getCurrentController",
(PyCFunction) SCA_PythonController::sPyGetCurrentController,
METH_VARARGS, SCA_PythonController::sPyGetCurrentController__doc__},
diff --git a/source/gameengine/PyDoc/GameLogic.py b/source/gameengine/PyDoc/GameLogic.py
index fcfd8bfc4eb..965c0522bd7 100644
--- a/source/gameengine/PyDoc/GameLogic.py
+++ b/source/gameengine/PyDoc/GameLogic.py
@@ -221,3 +221,18 @@ def setPhysicsTicRate(ticrate):
@type ticrate: float
"""
+def expandPath(path):
+ """
+ Converts a blender internal path into a proper file system path.
+
+ Use / as directory separator in path
+ You can use '//' at the start of the string to define a relative path;
+ Blender replaces that string by the directory of the startup .blend or runtime file
+ to make a full path name (doesn't change during the game, even if you load other .blend).
+ The function also converts the directory separator to the local file system format.
+
+ @param path: The path string to be converted/expanded.
+ @type path: string
+ @return: The converted string
+ @rtype: string
+ """
diff --git a/source/nan_definitions.mk b/source/nan_definitions.mk
index 43345817f2e..e19d10dba64 100644
--- a/source/nan_definitions.mk
+++ b/source/nan_definitions.mk
@@ -64,7 +64,11 @@ all debug::
export WITH_BF_STATICOPENGL ?= false
export WITH_BF_BLENDERGAMEENGINE ?= true
export WITH_BF_BLENDERPLAYER ?= true
- export WITH_BF_WEBPLUGIN ?= false
+ ifeq ($(NAN_NO_PLUGIN), true)
+ export WITH_BF_WEBPLUGIN = false
+ else
+ export WITH_BF_WEBPLUGIN ?= false
+ endif
export NAN_MOTO ?= $(LCGDIR)/moto
ifeq ($(FREE_WINDOWS), true)