From 31d75582a364b1373ee2afdca1cd34b34f84a6da Mon Sep 17 00:00:00 2001 From: David Rose Date: Tue, 23 Dec 2008 20:41:31 +0000 Subject: [PATCH] egg-optchar -defpose --- panda/src/chan/config_chan.cxx | 8 +- panda/src/chan/movingPart.I | 18 +- panda/src/chan/movingPart.h | 10 +- panda/src/chan/movingPartBase.cxx | 2 +- panda/src/chan/movingPartBase.h | 2 +- panda/src/chan/movingPartMatrix.I | 4 +- panda/src/chan/movingPartMatrix.cxx | 16 +- panda/src/chan/movingPartMatrix.h | 5 +- panda/src/chan/movingPartScalar.I | 4 +- panda/src/chan/movingPartScalar.cxx | 4 +- panda/src/chan/movingPartScalar.h | 2 +- panda/src/chan/partBundle.cxx | 6 +- panda/src/char/characterJoint.cxx | 4 +- panda/src/char/characterJoint.h | 2 +- panda/src/char/jointVertexTransform.cxx | 2 + panda/src/doc/eggSyntax.txt | 25 +- panda/src/egg/eggGroup.I | 55 + panda/src/egg/eggGroup.cxx | 14 +- panda/src/egg/eggGroup.h | 11 + panda/src/egg/eggTexture.cxx | 2 +- panda/src/egg/eggTransform.cxx | 4 +- panda/src/egg/eggTransform.h | 4 +- panda/src/egg/lexer.cxx.prebuilt | 850 ++++--- panda/src/egg/lexer.lxx | 12 +- panda/src/egg/parser.cxx.prebuilt | 2081 +++++++++-------- panda/src/egg/parser.h.prebuilt | 124 +- panda/src/egg/parser.yxx | 56 +- panda/src/egg2pg/characterMaker.cxx | 21 +- panda/src/gobj/transformBlend.cxx | 1 + pandatool/src/egg-optchar/eggOptchar.cxx | 94 + pandatool/src/egg-optchar/eggOptchar.h | 3 + pandatool/src/eggcharbase/eggJointData.cxx | 31 + pandatool/src/eggcharbase/eggJointData.h | 1 + .../src/eggcharbase/eggJointNodePointer.cxx | 21 + .../src/eggcharbase/eggJointNodePointer.h | 1 + pandatool/src/eggcharbase/eggJointPointer.cxx | 11 + pandatool/src/eggcharbase/eggJointPointer.h | 1 + 37 files changed, 1913 insertions(+), 1599 deletions(-) diff --git a/panda/src/chan/config_chan.cxx b/panda/src/chan/config_chan.cxx index dc458eed4f..8c698b0d5e 100644 --- a/panda/src/chan/config_chan.cxx +++ b/panda/src/chan/config_chan.cxx @@ -90,10 +90,10 @@ PRC_DESC("Set this true to interpolate character animations between frames, " ConfigVariableBool restore_initial_pose ("restore-initial-pose", true, -PRC_DESC("When this is true, stopping all animations on an Actor causes it " - "to return to its initial, unanimated pose. When false, it retains " - "whatever its last-computed pose was (which may or may not be " - "the unanimated pose).")); +PRC_DESC("When this is true, setting all control effects on an Actor to 0 " + "causes it to return to its default, unanimated pose. When " + "false, it retains whatever its last-computed pose was " + "(which may or may not be the default pose).")); ConfigureFn(config_chan) { diff --git a/panda/src/chan/movingPart.I b/panda/src/chan/movingPart.I index 10bbfa4329..631b5ce27e 100644 --- a/panda/src/chan/movingPart.I +++ b/panda/src/chan/movingPart.I @@ -38,7 +38,7 @@ INLINE MovingPart:: MovingPart(const MovingPart ©) : MovingPartBase(copy), _value(copy._value), - _initial_value(copy._initial_value) + _default_value(copy._default_value) { } @@ -50,10 +50,10 @@ MovingPart(const MovingPart ©) : template INLINE MovingPart:: MovingPart(PartGroup *parent, const string &name, - const ValueType &initial_value) : + const ValueType &default_value) : MovingPartBase(parent, name), - _value(initial_value), - _initial_value(initial_value) + _value(default_value), + _default_value(default_value) { } @@ -84,7 +84,7 @@ get_value_type() const { //////////////////////////////////////////////////////////////////// -// Function: MovingPart::make_initial_channel +// Function: MovingPart::make_default_channel // Access: Public, Virtual // Description: Creates and returns a new AnimChannel that is not // part of any hierarchy, but that returns the default @@ -92,8 +92,8 @@ get_value_type() const { //////////////////////////////////////////////////////////////////// template AnimChannelBase *MovingPart:: -make_initial_channel() const { - return new AnimChannelFixed(get_name(), _initial_value); +make_default_channel() const { + return new AnimChannelFixed(get_name(), _default_value); } //////////////////////////////////////////////////////////////////// @@ -119,7 +119,7 @@ void MovingPart:: write_datagram(BamWriter *manager, Datagram &me) { MovingPartBase::write_datagram(manager, me); SwitchType::write_datagram(me, _value); - SwitchType::write_datagram(me, _initial_value); + SwitchType::write_datagram(me, _default_value); } //////////////////////////////////////////////////////////////////// @@ -135,7 +135,7 @@ void MovingPart:: fillin(DatagramIterator &scan, BamReader *manager) { MovingPartBase::fillin(scan, manager); SwitchType::read_datagram(scan, _value); - SwitchType::read_datagram(scan, _initial_value); + SwitchType::read_datagram(scan, _default_value); } diff --git a/panda/src/chan/movingPart.h b/panda/src/chan/movingPart.h index 071b723a93..4900c3496c 100644 --- a/panda/src/chan/movingPart.h +++ b/panda/src/chan/movingPart.h @@ -37,14 +37,14 @@ protected: public: INLINE MovingPart(PartGroup *parent, const string &name, - const ValueType &_initial_value); + const ValueType &default_value); virtual TypeHandle get_value_type() const; - virtual AnimChannelBase *make_initial_channel() const; + virtual AnimChannelBase *make_default_channel() const; virtual void output_value(ostream &out) const; ValueType _value; - ValueType _initial_value; + ValueType _default_value; public: INLINE virtual void write_datagram(BamWriter* manager, Datagram &me); @@ -65,8 +65,8 @@ PUBLISHED: INLINE ValueType get_value() const { return _value; } - INLINE ValueType get_initial_value() const { - return _initial_value; + INLINE ValueType get_default_value() const { + return _default_value; } public: static void init_type() { diff --git a/panda/src/chan/movingPartBase.cxx b/panda/src/chan/movingPartBase.cxx index fd6e43778e..4f07a7cc57 100644 --- a/panda/src/chan/movingPartBase.cxx +++ b/panda/src/chan/movingPartBase.cxx @@ -282,7 +282,7 @@ bind_hierarchy(AnimGroup *anim, int channel_index, int &joint_index, // If we're binding to the NULL anim, it means actually to create // a default AnimChannel that just returns the part's initial // value. - _channels[channel_index] = make_initial_channel(); + _channels[channel_index] = make_default_channel(); } else { _channels[channel_index] = DCAST(AnimChannelBase, anim); } diff --git a/panda/src/chan/movingPartBase.h b/panda/src/chan/movingPartBase.h index 7de798bad1..42ce917fd7 100644 --- a/panda/src/chan/movingPartBase.h +++ b/panda/src/chan/movingPartBase.h @@ -44,7 +44,7 @@ PUBLISHED: public: virtual TypeHandle get_value_type() const=0; - virtual AnimChannelBase *make_initial_channel() const=0; + virtual AnimChannelBase *make_default_channel() const=0; PUBLISHED: virtual bool clear_forced_channel(); diff --git a/panda/src/chan/movingPartMatrix.I b/panda/src/chan/movingPartMatrix.I index 51ab21b5a4..90e4598e33 100644 --- a/panda/src/chan/movingPartMatrix.I +++ b/panda/src/chan/movingPartMatrix.I @@ -32,8 +32,8 @@ MovingPartMatrix(const MovingPartMatrix ©) : //////////////////////////////////////////////////////////////////// INLINE MovingPartMatrix:: MovingPartMatrix(PartGroup *parent, const string &name, - const LMatrix4f &initial_value) - : MovingPart(parent, name, initial_value) { + const LMatrix4f &default_value) + : MovingPart(parent, name, default_value) { } //////////////////////////////////////////////////////////////////// diff --git a/panda/src/chan/movingPartMatrix.cxx b/panda/src/chan/movingPartMatrix.cxx index 238b4b9904..760077964d 100644 --- a/panda/src/chan/movingPartMatrix.cxx +++ b/panda/src/chan/movingPartMatrix.cxx @@ -40,16 +40,16 @@ MovingPartMatrix:: //////////////////////////////////////////////////////////////////// -// Function: MovingPartMatrix::make_initial_channel +// Function: MovingPartMatrix::make_default_channel // Access: Public, Virtual // Description: Creates and returns a new AnimChannel that is not // part of any hierarchy, but that returns the default // value associated with this part. //////////////////////////////////////////////////////////////////// AnimChannelBase *MovingPartMatrix:: -make_initial_channel() const { +make_default_channel() const { LVecBase3f pos, hpr, scale, shear; - decompose_matrix(_initial_value, pos, hpr, scale, shear); + decompose_matrix(_default_value, pos, hpr, scale, shear); return new AnimChannelMatrixFixed(get_name(), pos, hpr, scale); } @@ -76,7 +76,7 @@ get_blend_value(const PartBundle *root) { if (cdata->_blend.empty()) { // No channel is bound; supply the default value. if (restore_initial_pose) { - _value = _initial_value; + _value = _default_value; } } else if (_effective_control != (AnimControl *)NULL && @@ -126,7 +126,7 @@ get_blend_value(const PartBundle *root) { if (net_effect == 0.0f) { if (restore_initial_pose) { - _value = _initial_value; + _value = _default_value; } } else { _value = net_value / net_effect; @@ -194,7 +194,7 @@ get_blend_value(const PartBundle *root) { if (net_effect == 0.0f) { if (restore_initial_pose) { - _value = _initial_value; + _value = _default_value; } } else { @@ -273,7 +273,7 @@ get_blend_value(const PartBundle *root) { if (net_effect == 0.0f) { if (restore_initial_pose) { - _value = _initial_value; + _value = _default_value; } } else { @@ -352,7 +352,7 @@ get_blend_value(const PartBundle *root) { if (net_effect == 0.0f) { if (restore_initial_pose) { - _value = _initial_value; + _value = _default_value; } } else { diff --git a/panda/src/chan/movingPartMatrix.h b/panda/src/chan/movingPartMatrix.h index 3f2971a70b..909b83b9c1 100644 --- a/panda/src/chan/movingPartMatrix.h +++ b/panda/src/chan/movingPartMatrix.h @@ -35,11 +35,10 @@ protected: public: INLINE MovingPartMatrix(PartGroup *parent, const string &name, - const LMatrix4f &initial_value = - LMatrix4f::ident_mat()); + const LMatrix4f &default_value); virtual ~MovingPartMatrix(); - virtual AnimChannelBase *make_initial_channel() const; + virtual AnimChannelBase *make_default_channel() const; virtual void get_blend_value(const PartBundle *root); virtual bool apply_freeze_matrix(const LVecBase3f &pos, const LVecBase3f &hpr, const LVecBase3f &scale); diff --git a/panda/src/chan/movingPartScalar.I b/panda/src/chan/movingPartScalar.I index 046143ed5b..c42eb7526f 100644 --- a/panda/src/chan/movingPartScalar.I +++ b/panda/src/chan/movingPartScalar.I @@ -32,8 +32,8 @@ MovingPartScalar(const MovingPartScalar ©) : //////////////////////////////////////////////////////////////////// INLINE MovingPartScalar:: MovingPartScalar(PartGroup *parent, const string &name, - const float &initial_value) - : MovingPart(parent, name, initial_value) { + const float &default_value) + : MovingPart(parent, name, default_value) { } //////////////////////////////////////////////////////////////////// diff --git a/panda/src/chan/movingPartScalar.cxx b/panda/src/chan/movingPartScalar.cxx index f5f7785620..b2291f8a4a 100644 --- a/panda/src/chan/movingPartScalar.cxx +++ b/panda/src/chan/movingPartScalar.cxx @@ -59,7 +59,7 @@ get_blend_value(const PartBundle *root) { if (cdata->_blend.empty()) { // No channel is bound; supply the default value. if (restore_initial_pose) { - _value = _initial_value; + _value = _default_value; } } else if (_effective_control != (AnimControl *)NULL && @@ -105,7 +105,7 @@ get_blend_value(const PartBundle *root) { if (net == 0.0f) { if (restore_initial_pose) { - _value = _initial_value; + _value = _default_value; } } else { diff --git a/panda/src/chan/movingPartScalar.h b/panda/src/chan/movingPartScalar.h index 19673ae16c..5f27941f7b 100644 --- a/panda/src/chan/movingPartScalar.h +++ b/panda/src/chan/movingPartScalar.h @@ -34,7 +34,7 @@ protected: public: INLINE MovingPartScalar(PartGroup *parent, const string &name, - const float &initial_value = 0); + const float &default_value = 0); virtual ~MovingPartScalar(); virtual void get_blend_value(const PartBundle *root); diff --git a/panda/src/chan/partBundle.cxx b/panda/src/chan/partBundle.cxx index b6f9cb6135..b6cf7f9de2 100644 --- a/panda/src/chan/partBundle.cxx +++ b/panda/src/chan/partBundle.cxx @@ -198,8 +198,8 @@ apply_transform(const TransformState *transform) { // Description: Sets the control effect of all AnimControls to zero // (but does not "stop" the AnimControls). The // character will no longer be affected by any -// animation, and will return to its original Jesus -// pose. +// animation, and will return to its default +// pose (unless restore-initial-pose is false). // // The AnimControls which are no longer associated will // not be using any CPU cycles, but they may still be in @@ -217,6 +217,7 @@ clear_control_effects() { cdataw->_blend.clear(); cdataw->_net_blend = 0.0f; cdataw->_anim_changed = true; + determine_effective_channels(cdata); } } @@ -806,6 +807,7 @@ clear_and_stop_intersecting(AnimControl *control, CData *cdata) { cdata->_net_blend = new_net_blend; cdata->_blend.swap(new_blend); cdata->_anim_changed = true; + determine_effective_channels(cdata); } } diff --git a/panda/src/char/characterJoint.cxx b/panda/src/char/characterJoint.cxx index ef3f11508a..c08290586d 100644 --- a/panda/src/char/characterJoint.cxx +++ b/panda/src/char/characterJoint.cxx @@ -57,8 +57,8 @@ CharacterJoint(const CharacterJoint ©) : CharacterJoint:: CharacterJoint(Character *character, PartBundle *root, PartGroup *parent, const string &name, - const LMatrix4f &initial_value) : - MovingPartMatrix(parent, name, initial_value), + const LMatrix4f &default_value) : + MovingPartMatrix(parent, name, default_value), _character(character) { Thread *current_thread = Thread::get_current_thread(); diff --git a/panda/src/char/characterJoint.h b/panda/src/char/characterJoint.h index 30e7489387..e0eb5a8df7 100644 --- a/panda/src/char/characterJoint.h +++ b/panda/src/char/characterJoint.h @@ -38,7 +38,7 @@ protected: PUBLISHED: CharacterJoint(Character *character, PartBundle *root, PartGroup *parent, const string &name, - const LMatrix4f &initial_value); + const LMatrix4f &default_value); virtual ~CharacterJoint(); public: diff --git a/panda/src/char/jointVertexTransform.cxx b/panda/src/char/jointVertexTransform.cxx index f494e5d93c..db203c8d17 100644 --- a/panda/src/char/jointVertexTransform.cxx +++ b/panda/src/char/jointVertexTransform.cxx @@ -47,6 +47,7 @@ JointVertexTransform(CharacterJoint *joint) : { // Tell the joint that we need to be informed when it moves. _joint->_vertex_transforms.insert(this); + mark_modified(Thread::get_current_thread()); } //////////////////////////////////////////////////////////////////// @@ -219,4 +220,5 @@ fillin(DatagramIterator &scan, BamReader *manager) { manager->read_pointer(scan); _matrix_stale = true; + mark_modified(Thread::get_current_thread()); } diff --git a/panda/src/doc/eggSyntax.txt b/panda/src/doc/eggSyntax.txt index 10bb7808ac..f61eb2e2f6 100644 --- a/panda/src/doc/eggSyntax.txt +++ b/panda/src/doc/eggSyntax.txt @@ -1508,6 +1508,26 @@ GROUPING ENTRIES may define either a 2-d or a 3-d transform when it appears within the body of a . See , above. + { transform-definition } + + This defines an optional default pose transform, which might be a + different transform from that defined by the entry, + above. This makes sense only for a . See the + description, below. + + The default pose transform defines the transform the joint will + maintain in the absence of any animation being applied. This is + different from the entry, which defines the coordinate + space the joint must have in order to keep its vertices in their + (global space) position as given in the egg file. If this is + different from the entry, the joint's vertices will + *not* be in their egg file position at initial load. If there is + no entry for a particular joint, the implicit + default-pose transform is the same as the entry. + + Normally, the entry, if any, is created by the + egg-optchar -defpose option. Most other software has little + reason to specify an explicit . { indices { pool-name } } @@ -1768,8 +1788,9 @@ ANIMATION STRUCTURE It is not necessary for every joint to have vertices at all. Every joint should include a transform entry, however, which defines the - initial, resting transform of the joint. If a transform is omitted, - the identity transform is assumed. + initial, resting transform of the joint (but see also , + above). If a transform is omitted, the identity transform is + assumed. Some of the vertex definitions may include morph entries, as described in MORPH DESCRIPTION ENTRIES, above. These are meaningful diff --git a/panda/src/egg/eggGroup.I b/panda/src/egg/eggGroup.I index 5ec751c33a..f9f44fe61e 100644 --- a/panda/src/egg/eggGroup.I +++ b/panda/src/egg/eggGroup.I @@ -904,6 +904,61 @@ clear_tag(const string &key) { _tag_data.erase(key); } +//////////////////////////////////////////////////////////////////// +// Function: EggGroup::get_default_pose +// Access: Published +// Description: Returns a read-only accessor to the initial pose +// transform. This is the entry for a +// Joint, and defines only the initial transform pose +// for the unanimated joint; it has nothing to do with +// the group's entry, which defines the +// (eventual) space of the group's vertices. +//////////////////////////////////////////////////////////////////// +INLINE const EggTransform &EggGroup:: +get_default_pose() const { + return _default_pose; +} + +//////////////////////////////////////////////////////////////////// +// Function: EggGroup::modify_default_pose +// Access: Published +// Description: Returns a writable accessor to the initial pose +// transform. This is the entry for a +// Joint, and defines only the initial transform pose +// for the unanimated joint; it has nothing to do with +// the group's entry, which defines the +// (eventual) space of the group's vertices. +//////////////////////////////////////////////////////////////////// +INLINE EggTransform &EggGroup:: +modify_default_pose() { + return _default_pose; +} + +//////////////////////////////////////////////////////////////////// +// Function: EggGroup::set_default_pose +// Access: Published +// Description: Replaces the initial pose transform. This is the +// entry for a Joint, and defines only the +// initial transform pose for the unanimated joint; it +// has nothing to do with the group's entry, +// which defines the (eventual) space of the group's +// vertices. +//////////////////////////////////////////////////////////////////// +INLINE void EggGroup:: +set_default_pose(const EggTransform &transform) { + _default_pose = transform; +} + +//////////////////////////////////////////////////////////////////// +// Function: EggGroup::clear_default_pose +// Access: Published +// Description: Removes the initial pose transform. See +// set_default_pose(). +//////////////////////////////////////////////////////////////////// +INLINE void EggGroup:: +clear_default_pose() { + _default_pose.clear_transform(); +} //////////////////////////////////////////////////////////////////// // Function: EggGroup::tag_begin diff --git a/panda/src/egg/eggGroup.cxx b/panda/src/egg/eggGroup.cxx index c2eb764cca..f9261dc84b 100644 --- a/panda/src/egg/eggGroup.cxx +++ b/panda/src/egg/eggGroup.cxx @@ -74,8 +74,8 @@ operator = (const EggGroup ©) { _blend_operand_a = copy._blend_operand_a; _blend_operand_b = copy._blend_operand_b; _blend_color = copy._blend_color; - _tag_data = copy._tag_data; + _default_pose = copy._default_pose; unref_all_vertices(); _vref = copy._vref; @@ -219,7 +219,11 @@ write(ostream &out, int indent_level) const { write_switch_flags(out, indent_level + 2); if (has_transform()) { - EggTransform::write(out, indent_level + 2); + EggTransform::write(out, indent_level + 2, ""); + } + + if (get_group_type() == GT_joint && _default_pose.has_transform()) { + _default_pose.write(out, indent_level + 2, ""); } write_object_types(out, indent_level + 2); @@ -1251,6 +1255,12 @@ r_transform(const LMatrix4d &mat, const LMatrix4d &inv, internal_set_transform(inv1 * get_transform3d() * mat); + if (_default_pose.has_transform()) { + LMatrix4d t = _default_pose.get_transform3d(); + _default_pose.clear_transform(); + _default_pose.add_matrix4(inv1 * t * mat); + } + EggGroupNode::r_transform(mat1, inv1, to_cs); } else { EggGroupNode::r_transform(mat, inv, to_cs); diff --git a/panda/src/egg/eggGroup.h b/panda/src/egg/eggGroup.h index 0c8803a666..e33a6d777f 100644 --- a/panda/src/egg/eggGroup.h +++ b/panda/src/egg/eggGroup.h @@ -262,6 +262,11 @@ PUBLISHED: INLINE bool has_tag(const string &key) const; INLINE void clear_tag(const string &key); + INLINE const EggTransform &get_default_pose() const; + INLINE EggTransform &modify_default_pose(); + INLINE void set_default_pose(const EggTransform &transform); + INLINE void clear_default_pose(); + public: INLINE TagData::const_iterator tag_begin() const; INLINE TagData::const_iterator tag_end() const; @@ -360,6 +365,12 @@ private: double _fps; PT(EggSwitchCondition) _lod; TagData _tag_data; + + // This is the entry for a . It is not the + // entry (that is stored via inheritance, in the + // EggTransform class we inherit from). + EggTransform _default_pose; + VertexRef _vref; typedef pvector< PT(EggGroup) > GroupRefs; diff --git a/panda/src/egg/eggTexture.cxx b/panda/src/egg/eggTexture.cxx index 73fbbd7e14..f88eb4474e 100644 --- a/panda/src/egg/eggTexture.cxx +++ b/panda/src/egg/eggTexture.cxx @@ -290,7 +290,7 @@ write(ostream &out, int indent_level) const { EggRenderMode::write(out, indent_level + 2); if (has_transform()) { - EggTransform::write(out, indent_level + 2); + EggTransform::write(out, indent_level + 2, ""); } indent(out, indent_level) << "}\n"; diff --git a/panda/src/egg/eggTransform.cxx b/panda/src/egg/eggTransform.cxx index de25fbdbcc..a373aad599 100644 --- a/panda/src/egg/eggTransform.cxx +++ b/panda/src/egg/eggTransform.cxx @@ -230,8 +230,8 @@ add_uniform_scale(double scale) { // format. //////////////////////////////////////////////////////////////////// void EggTransform:: -write(ostream &out, int indent_level) const { - indent(out, indent_level) << " {\n"; +write(ostream &out, int indent_level, const string &label) const { + indent(out, indent_level) << label << " {\n"; int num_components = get_num_components(); for (int i = 0; i < num_components; i++) { diff --git a/panda/src/egg/eggTransform.h b/panda/src/egg/eggTransform.h index e1efad5f81..b055ab92ca 100644 --- a/panda/src/egg/eggTransform.h +++ b/panda/src/egg/eggTransform.h @@ -17,6 +17,7 @@ #include "pandabase.h" #include "luse.h" +#include "eggObject.h" //////////////////////////////////////////////////////////////////// // Class : EggTransform @@ -85,7 +86,8 @@ PUBLISHED: INLINE const LMatrix3d &get_component_mat3(int n) const; INLINE const LMatrix4d &get_component_mat4(int n) const; - void write(ostream &out, int indent_level) const; + void write(ostream &out, int indent_level, + const string &label) const; protected: void internal_clear_transform(); diff --git a/panda/src/egg/lexer.cxx.prebuilt b/panda/src/egg/lexer.cxx.prebuilt index fbb6f9948d..b68c01122f 100644 --- a/panda/src/egg/lexer.cxx.prebuilt +++ b/panda/src/egg/lexer.cxx.prebuilt @@ -300,73 +300,73 @@ static void yy_fatal_error YY_PROTO(( yyconst char msg[] )); *yy_cp = '\0'; \ yy_c_buf_p = yy_cp; -#define YY_NUM_RULES 101 -#define YY_END_OF_BUFFER 102 -static yyconst short int yy_accept[581] = +#define YY_NUM_RULES 99 +#define YY_END_OF_BUFFER 100 +static yyconst short int yy_accept[577] = { 0, - 0, 0, 102, 100, 2, 1, 99, 100, 100, 100, - 100, 91, 91, 91, 100, 100, 100, 5, 100, 1, - 100, 91, 91, 100, 91, 4, 3, 91, 93, 100, - 92, 91, 100, 100, 100, 100, 100, 100, 100, 100, - 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, - 100, 100, 100, 100, 100, 91, 100, 3, 3, 93, - 100, 91, 92, 100, 100, 100, 100, 100, 100, 100, - 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, - 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, - 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 0, 0, 100, 98, 2, 1, 97, 98, 98, 98, + 98, 89, 89, 89, 98, 98, 98, 5, 98, 1, + 98, 89, 89, 98, 89, 4, 3, 89, 91, 98, + 90, 89, 98, 98, 98, 98, 98, 98, 98, 98, + 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, + 98, 98, 98, 98, 89, 98, 3, 3, 91, 98, + 89, 90, 98, 98, 98, 98, 98, 98, 98, 98, + 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, + 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, + 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, - 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, - 100, 100, 100, 100, 100, 100, 100, 67, 100, 100, - 100, 95, 100, 100, 96, 100, 100, 100, 100, 100, - 100, 100, 100, 100, 100, 100, 100, 19, 100, 100, - 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, - 100, 33, 100, 100, 100, 100, 100, 100, 100, 100, - 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, - 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, - 100, 100, 100, 100, 100, 100, 100, 82, 100, 100, - 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, + 98, 98, 98, 98, 98, 65, 98, 98, 98, 93, + 98, 98, 94, 98, 98, 98, 98, 98, 98, 98, + 98, 98, 98, 98, 98, 19, 98, 98, 98, 98, + 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, + 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, + 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, + 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, + 98, 98, 98, 80, 98, 98, 98, 98, 98, 98, + 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, - 100, 100, 100, 100, 100, 100, 100, 100, 25, 100, - 100, 100, 100, 23, 100, 100, 100, 100, 100, 32, - 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, - 100, 100, 100, 100, 100, 100, 100, 53, 100, 100, - 100, 100, 100, 100, 100, 100, 100, 100, 100, 68, - 100, 100, 100, 100, 100, 100, 100, 100, 79, 100, - 100, 100, 100, 100, 100, 94, 100, 97, 100, 100, - 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, - 20, 100, 100, 100, 100, 24, 100, 29, 100, 100, - 100, 100, 100, 100, 38, 39, 100, 100, 100, 44, + 98, 98, 98, 98, 25, 98, 98, 98, 98, 98, + 23, 98, 98, 98, 98, 98, 98, 98, 98, 98, + 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, + 98, 98, 51, 98, 98, 98, 98, 98, 98, 98, + 98, 98, 98, 98, 66, 98, 98, 98, 98, 98, + 98, 98, 98, 77, 98, 98, 98, 98, 98, 98, + 92, 98, 95, 98, 98, 98, 98, 98, 98, 98, + 98, 98, 98, 98, 98, 20, 98, 98, 98, 98, + 98, 24, 98, 29, 98, 98, 98, 98, 98, 36, + 37, 98, 98, 98, 42, 98, 98, 98, 98, 98, - 100, 100, 100, 100, 100, 100, 100, 54, 100, 56, - 57, 58, 100, 100, 100, 100, 100, 100, 100, 100, - 100, 100, 100, 100, 75, 100, 78, 100, 100, 100, - 100, 100, 100, 94, 98, 100, 100, 8, 100, 100, - 100, 13, 100, 100, 100, 100, 100, 100, 100, 22, - 27, 100, 100, 31, 100, 100, 34, 35, 100, 100, - 43, 100, 100, 100, 100, 49, 100, 100, 100, 100, - 100, 100, 61, 100, 100, 100, 66, 100, 100, 100, - 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, - 100, 100, 100, 100, 12, 14, 100, 100, 100, 100, + 98, 98, 52, 98, 54, 55, 56, 98, 98, 98, + 98, 98, 98, 98, 98, 98, 98, 98, 98, 73, + 98, 76, 98, 98, 98, 98, 98, 98, 92, 96, + 98, 98, 8, 98, 98, 98, 13, 98, 98, 98, + 98, 98, 98, 98, 98, 22, 27, 98, 30, 98, + 98, 32, 33, 98, 98, 41, 98, 98, 98, 98, + 47, 98, 98, 98, 98, 98, 98, 59, 98, 98, + 98, 64, 98, 98, 98, 98, 98, 98, 98, 98, + 98, 98, 98, 98, 98, 98, 98, 98, 98, 12, + 14, 98, 98, 98, 98, 98, 98, 98, 98, 98, - 100, 100, 100, 100, 100, 100, 100, 100, 100, 45, - 100, 100, 100, 100, 100, 100, 55, 59, 60, 100, - 100, 64, 100, 100, 100, 100, 100, 100, 100, 100, - 100, 100, 100, 100, 85, 100, 100, 100, 100, 100, - 100, 100, 100, 15, 16, 100, 100, 100, 21, 100, - 100, 36, 100, 100, 41, 42, 100, 100, 100, 100, - 100, 52, 100, 63, 100, 69, 70, 71, 100, 100, - 100, 100, 80, 81, 83, 84, 100, 100, 100, 100, - 100, 100, 100, 11, 100, 100, 26, 100, 100, 37, - 40, 100, 100, 100, 100, 100, 62, 100, 72, 100, + 98, 98, 98, 98, 43, 98, 98, 98, 98, 98, + 98, 53, 57, 58, 98, 98, 62, 98, 98, 98, + 98, 98, 98, 98, 98, 98, 98, 98, 98, 83, + 98, 98, 98, 98, 98, 98, 98, 98, 15, 16, + 98, 98, 98, 98, 21, 98, 34, 98, 98, 39, + 40, 98, 98, 98, 98, 98, 50, 98, 61, 98, + 67, 68, 69, 98, 98, 98, 98, 78, 79, 81, + 82, 98, 98, 98, 98, 98, 98, 98, 11, 98, + 98, 98, 26, 98, 35, 38, 98, 98, 98, 98, + 98, 60, 98, 70, 98, 98, 98, 98, 98, 98, - 100, 100, 100, 100, 100, 100, 89, 100, 100, 100, - 9, 100, 17, 100, 100, 100, 100, 100, 100, 100, - 100, 100, 73, 74, 100, 100, 100, 100, 88, 100, - 100, 100, 100, 100, 100, 30, 46, 100, 48, 50, - 51, 100, 100, 100, 86, 87, 100, 6, 7, 100, - 100, 100, 100, 100, 76, 100, 90, 100, 100, 100, - 47, 100, 100, 100, 100, 100, 100, 77, 100, 100, - 100, 100, 10, 100, 100, 65, 18, 100, 28, 0 + 98, 87, 98, 98, 98, 9, 98, 17, 98, 98, + 98, 98, 98, 98, 98, 98, 98, 71, 72, 98, + 98, 98, 98, 86, 98, 98, 98, 98, 98, 98, + 98, 44, 98, 46, 48, 49, 98, 98, 98, 84, + 85, 98, 6, 7, 98, 98, 31, 98, 98, 98, + 74, 98, 88, 98, 98, 98, 45, 98, 98, 98, + 98, 98, 98, 75, 98, 98, 98, 98, 10, 98, + 98, 63, 18, 98, 28, 0 } ; static yyconst int yy_ec[256] = @@ -410,312 +410,312 @@ static yyconst int yy_meta[47] = 1, 1, 1, 1, 1, 2 } ; -static yyconst short int yy_base[586] = +static yyconst short int yy_base[582] = { 0, - 0, 45, 702, 0, 703, 0, 703, 8, 82, 22, - 18, 101, 9, 20, 125, 668, 680, 703, 0, 0, - 52, 29, 59, 666, 69, 0, 40, 114, 14, 161, - 166, 187, 665, 79, 108, 192, 12, 660, 668, 662, - 660, 660, 11, 86, 36, 50, 658, 75, 191, 185, - 99, 221, 666, 665, 656, 241, 663, 75, 0, 19, - 235, 246, 0, 659, 658, 640, 664, 100, 650, 662, - 647, 162, 662, 642, 640, 639, 642, 649, 637, 632, - 628, 638, 639, 630, 634, 632, 186, 638, 631, 631, - 629, 623, 638, 636, 622, 621, 628, 633, 616, 106, + 0, 45, 698, 0, 699, 0, 699, 8, 82, 22, + 18, 101, 9, 20, 125, 664, 676, 699, 0, 0, + 52, 29, 59, 662, 69, 0, 40, 114, 14, 161, + 166, 187, 661, 79, 108, 192, 665, 655, 658, 656, + 656, 11, 86, 36, 50, 654, 75, 191, 197, 99, + 186, 662, 661, 652, 236, 659, 75, 0, 19, 230, + 241, 0, 655, 654, 636, 660, 100, 646, 658, 643, + 162, 658, 638, 636, 648, 634, 637, 644, 632, 627, + 623, 633, 634, 630, 67, 635, 628, 628, 626, 620, + 635, 633, 619, 618, 625, 630, 613, 12, 626, 629, - 629, 632, 613, 631, 630, 613, 628, 619, 79, 603, - 621, 199, 605, 613, 612, 623, 610, 0, 609, 601, - 605, 0, 624, 607, 0, 601, 601, 604, 609, 599, - 595, 605, 590, 588, 594, 163, 587, 0, 584, 604, - 582, 583, 598, 594, 599, 571, 595, 590, 594, 572, - 593, 0, 579, 570, 575, 568, 582, 570, 51, 580, - 578, 570, 580, 576, 575, 559, 564, 552, 577, 574, - 223, 560, 561, 551, 567, 550, 557, 569, 560, 93, - 552, 551, 558, 151, 564, 548, 547, 0, 546, 545, - 538, 570, 532, 541, 548, 537, 547, 546, 548, 531, + 610, 628, 627, 610, 625, 616, 237, 600, 618, 199, + 602, 610, 609, 620, 607, 0, 606, 598, 602, 0, + 621, 604, 0, 598, 598, 601, 606, 596, 592, 602, + 587, 585, 591, 102, 584, 0, 581, 601, 598, 578, + 579, 594, 590, 595, 567, 591, 586, 569, 577, 568, + 573, 566, 580, 568, 51, 578, 576, 568, 578, 574, + 573, 557, 562, 550, 575, 572, 163, 558, 559, 549, + 565, 548, 555, 567, 558, 93, 550, 549, 556, 80, + 562, 546, 545, 0, 544, 543, 536, 568, 530, 539, + 546, 535, 545, 544, 546, 529, 534, 557, 539, 534, - 536, 559, 541, 536, 539, 528, 538, 542, 0, 539, - 526, 537, 531, 0, 537, 522, 535, 525, 516, 0, - 510, 529, 509, 509, 528, 527, 507, 515, 511, 523, - 520, 501, 516, 500, 516, 496, 508, 0, 515, 493, - 513, 512, 511, 500, 186, 503, 498, 503, 500, 0, - 499, 494, 481, 494, 481, 500, 484, 498, 0, 481, - 480, 479, 478, 487, 490, 257, 484, 0, 471, 470, - 488, 471, 472, 479, 484, 478, 477, 466, 465, 469, - 0, 463, 475, 476, 475, 0, 464, 0, 467, 472, - 466, 455, 469, 468, 0, 0, 457, 441, 465, 0, + 537, 526, 536, 540, 0, 517, 536, 523, 534, 528, + 0, 534, 519, 532, 514, 508, 527, 507, 507, 526, + 525, 505, 513, 509, 521, 518, 499, 514, 498, 514, + 494, 506, 0, 513, 491, 511, 510, 509, 498, 147, + 501, 496, 501, 498, 0, 497, 492, 479, 492, 479, + 498, 482, 496, 0, 479, 478, 477, 476, 485, 488, + 259, 482, 0, 469, 468, 486, 469, 470, 477, 482, + 476, 475, 464, 463, 467, 0, 463, 460, 472, 473, + 472, 0, 461, 0, 470, 464, 453, 467, 466, 0, + 0, 455, 439, 463, 0, 449, 114, 440, 460, 444, - 451, 199, 442, 462, 446, 447, 443, 0, 452, 0, - 0, 0, 443, 437, 455, 439, 438, 443, 451, 435, - 429, 429, 426, 136, 0, 438, 0, 424, 423, 422, - 421, 416, 425, 0, 0, 433, 434, 0, 435, 434, - 435, 0, 434, 427, 411, 425, 415, 425, 415, 0, - 0, 423, 424, 0, 419, 420, 0, 0, 421, 169, - 0, 422, 399, 398, 398, 0, 410, 407, 401, 415, - 414, 413, 0, 408, 403, 216, 0, 389, 388, 402, - 398, 390, 403, 391, 383, 382, 381, 380, 256, 389, - 385, 375, 377, 382, 0, 0, 394, 393, 377, 389, + 445, 441, 0, 450, 0, 0, 0, 441, 435, 453, + 437, 436, 441, 449, 433, 427, 427, 424, 199, 0, + 436, 0, 422, 421, 420, 419, 414, 423, 0, 0, + 431, 432, 0, 433, 432, 433, 0, 432, 425, 409, + 423, 413, 406, 422, 412, 0, 0, 420, 0, 417, + 418, 0, 0, 419, 169, 0, 420, 397, 396, 396, + 0, 408, 405, 399, 413, 412, 411, 0, 406, 401, + 204, 0, 387, 386, 400, 396, 388, 401, 389, 381, + 380, 379, 378, 241, 387, 383, 373, 375, 380, 0, + 0, 392, 391, 375, 387, 371, 381, 386, 362, 384, - 384, 389, 365, 382, 386, 379, 371, 383, 382, 0, - 362, 361, 353, 372, 369, 376, 0, 0, 0, 369, - 374, 0, 357, 372, 371, 370, 349, 349, 346, 360, - 365, 364, 363, 362, 0, 346, 344, 353, 344, 341, - 337, 350, 354, 0, 0, 332, 331, 351, 0, 344, - 343, 0, 348, 347, 0, 0, 323, 338, 327, 328, - 333, 0, 341, 0, 325, 0, 0, 0, 339, 324, - 331, 250, 0, 0, 0, 0, 326, 319, 327, 223, - 331, 309, 265, 0, 331, 324, 0, 310, 309, 0, - 0, 321, 324, 319, 303, 302, 0, 317, 0, 321, + 377, 369, 381, 380, 0, 360, 359, 351, 370, 367, + 374, 0, 0, 0, 367, 372, 0, 355, 370, 369, + 368, 347, 347, 344, 358, 363, 362, 361, 360, 0, + 344, 342, 351, 342, 339, 335, 348, 352, 0, 0, + 330, 329, 333, 348, 0, 341, 0, 346, 345, 0, + 0, 321, 336, 325, 326, 331, 0, 339, 0, 323, + 0, 0, 0, 337, 322, 329, 239, 0, 0, 0, + 0, 324, 317, 325, 219, 329, 307, 244, 0, 329, + 322, 307, 0, 307, 0, 0, 319, 322, 317, 301, + 300, 0, 315, 0, 319, 318, 315, 295, 301, 301, - 320, 317, 297, 303, 303, 315, 0, 294, 308, 306, - 0, 305, 0, 290, 288, 308, 307, 302, 305, 304, - 303, 292, 0, 0, 286, 281, 299, 298, 0, 309, - 296, 295, 279, 267, 286, 0, 0, 285, 0, 0, - 0, 269, 289, 278, 0, 0, 287, 0, 0, 265, - 265, 249, 272, 261, 0, 251, 0, 261, 245, 229, - 0, 229, 234, 207, 202, 183, 174, 0, 154, 111, - 107, 118, 0, 71, 43, 0, 0, 33, 0, 703, - 293, 0, 296, 298, 300 + 313, 0, 292, 306, 304, 0, 303, 0, 288, 301, + 285, 305, 300, 303, 302, 301, 290, 0, 0, 284, + 279, 297, 296, 0, 307, 294, 293, 277, 265, 290, + 283, 0, 282, 0, 0, 0, 266, 286, 275, 0, + 0, 284, 0, 0, 262, 262, 0, 256, 280, 269, + 0, 261, 0, 271, 255, 234, 0, 234, 249, 228, + 223, 205, 176, 0, 180, 140, 127, 125, 0, 123, + 43, 0, 0, 33, 0, 699, 284, 0, 287, 289, + 291 } ; -static yyconst short int yy_def[586] = +static yyconst short int yy_def[582] = { 0, - 581, 581, 580, 582, 580, 583, 580, 582, 582, 582, - 582, 582, 12, 12, 582, 582, 582, 580, 582, 583, - 582, 12, 12, 582, 582, 582, 584, 582, 582, 582, - 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, - 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, - 582, 582, 582, 582, 582, 582, 582, 584, 585, 582, - 582, 582, 31, 582, 582, 582, 582, 582, 582, 582, - 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, - 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, - 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, + 577, 577, 576, 578, 576, 579, 576, 578, 578, 578, + 578, 578, 12, 12, 578, 578, 578, 576, 578, 579, + 578, 12, 12, 578, 578, 578, 580, 578, 578, 578, + 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, + 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, + 578, 578, 578, 578, 578, 578, 580, 581, 578, 578, + 578, 31, 578, 578, 578, 578, 578, 578, 578, 578, + 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, + 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, + 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, - 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, - 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, - 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, - 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, - 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, - 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, - 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, - 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, - 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, - 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, + 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, + 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, + 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, + 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, + 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, + 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, + 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, + 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, + 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, + 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, - 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, - 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, - 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, - 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, - 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, - 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, - 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, - 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, - 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, - 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, + 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, + 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, + 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, + 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, + 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, + 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, + 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, + 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, + 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, + 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, - 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, - 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, - 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, - 582, 582, 582, 266, 582, 582, 582, 582, 582, 582, - 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, - 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, - 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, - 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, - 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, - 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, + 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, + 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, + 578, 578, 578, 578, 578, 578, 578, 578, 261, 578, + 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, + 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, + 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, + 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, + 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, + 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, + 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, - 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, - 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, - 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, - 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, - 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, - 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, - 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, - 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, - 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, - 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, + 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, + 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, + 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, + 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, + 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, + 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, + 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, + 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, + 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, + 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, - 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, - 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, - 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, - 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, - 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, - 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, - 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, - 582, 582, 582, 582, 582, 582, 582, 582, 582, 0, - 580, 580, 580, 580, 580 + 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, + 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, + 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, + 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, + 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, + 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, + 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, + 578, 578, 578, 578, 578, 0, 576, 576, 576, 576, + 576 } ; -static yyconst short int yy_nxt[750] = +static yyconst short int yy_nxt[746] = { 0, - 19, 5, 6, 7, 580, 580, 580, 8, 9, 10, + 19, 5, 6, 7, 576, 576, 576, 8, 9, 10, 11, 12, 13, 14, 14, 14, 15, 21, 32, 22, - 22, 22, 22, 22, 26, 60, 60, 16, 27, 19, - 60, 60, 17, 25, 25, 25, 25, 25, 90, 83, - 19, 59, 84, 59, 91, 18, 5, 6, 7, 19, - 579, 19, 8, 9, 10, 11, 12, 13, 14, 14, - 14, 15, 19, 25, 25, 25, 25, 25, 56, 95, - 97, 19, 16, 578, 227, 96, 59, 17, 59, 19, - 25, 25, 25, 25, 25, 59, 98, 228, 577, 99, - 18, 21, 30, 22, 23, 22, 22, 22, 101, 177, + 22, 22, 22, 22, 26, 59, 59, 16, 27, 19, + 59, 59, 17, 25, 25, 25, 25, 25, 88, 163, + 19, 58, 164, 58, 89, 18, 5, 6, 7, 19, + 575, 19, 8, 9, 10, 11, 12, 13, 14, 14, + 14, 15, 19, 25, 25, 25, 25, 25, 55, 93, + 95, 19, 16, 574, 222, 94, 58, 17, 58, 19, + 25, 25, 25, 25, 25, 58, 96, 223, 149, 97, + 18, 21, 30, 22, 23, 22, 22, 22, 99, 252, - 102, 19, 66, 67, 178, 92, 68, 114, 103, 24, - 28, 179, 22, 22, 22, 22, 22, 115, 69, 93, - 59, 29, 94, 252, 30, 25, 25, 25, 25, 25, - 130, 253, 131, 167, 70, 576, 168, 30, 71, 116, - 575, 72, 574, 31, 33, 34, 35, 36, 73, 37, - 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 382, 48, 49, 50, 51, 52, 383, 53, 61, 61, - 257, 573, 62, 62, 62, 62, 62, 63, 63, 63, - 63, 63, 258, 408, 409, 63, 63, 63, 63, 63, - 63, 64, 135, 136, 205, 137, 104, 206, 25, 25, + 100, 19, 65, 66, 150, 90, 67, 112, 101, 24, + 28, 253, 22, 22, 22, 22, 22, 113, 68, 91, + 58, 29, 92, 247, 30, 25, 25, 25, 25, 25, + 128, 248, 129, 201, 69, 358, 202, 30, 70, 114, + 573, 71, 572, 31, 33, 34, 35, 36, 72, 37, + 38, 359, 39, 40, 41, 42, 43, 44, 45, 46, + 571, 47, 48, 49, 50, 51, 309, 52, 60, 60, + 310, 570, 61, 61, 61, 61, 61, 62, 62, 62, + 62, 62, 235, 403, 404, 62, 62, 62, 62, 62, + 62, 63, 133, 134, 115, 135, 102, 569, 25, 25, - 25, 25, 25, 152, 109, 314, 572, 153, 110, 315, - 30, 74, 105, 75, 106, 111, 571, 107, 182, 76, - 363, 112, 183, 154, 77, 570, 184, 113, 78, 117, - 79, 80, 108, 422, 81, 82, 364, 423, 118, 119, - 507, 508, 240, 569, 120, 124, 62, 62, 62, 62, - 62, 568, 25, 25, 25, 25, 25, 62, 62, 62, - 62, 62, 567, 566, 30, 241, 242, 243, 334, 334, - 334, 334, 334, 435, 502, 436, 334, 334, 334, 334, - 334, 334, 511, 565, 564, 563, 512, 503, 562, 561, - 437, 560, 438, 4, 4, 4, 20, 20, 58, 58, + 25, 25, 25, 116, 117, 236, 237, 238, 568, 118, + 30, 73, 103, 74, 104, 75, 107, 105, 178, 76, + 108, 417, 179, 377, 77, 418, 180, 109, 78, 378, + 79, 80, 106, 110, 81, 82, 502, 503, 567, 111, + 122, 61, 61, 61, 61, 61, 566, 25, 25, 25, + 25, 25, 61, 61, 61, 61, 61, 173, 430, 30, + 431, 506, 174, 497, 565, 507, 564, 563, 562, 175, + 329, 329, 329, 329, 329, 432, 498, 433, 329, 329, + 329, 329, 329, 329, 4, 4, 4, 20, 20, 57, + 57, 58, 58, 561, 560, 559, 558, 557, 556, 555, - 59, 59, 559, 558, 557, 556, 555, 554, 553, 552, - 551, 550, 549, 548, 547, 546, 545, 544, 543, 542, - 541, 540, 539, 538, 537, 536, 535, 534, 533, 532, - 531, 530, 529, 528, 527, 526, 525, 524, 523, 522, - 521, 520, 519, 518, 517, 516, 515, 514, 513, 510, - 509, 506, 505, 504, 501, 500, 499, 498, 497, 496, - 495, 494, 493, 492, 491, 490, 489, 488, 487, 486, - 485, 484, 483, 482, 481, 480, 479, 478, 477, 476, - 475, 474, 473, 472, 471, 470, 469, 468, 467, 466, - 465, 464, 463, 462, 461, 460, 459, 458, 457, 456, + 554, 553, 552, 551, 550, 549, 548, 547, 546, 545, + 544, 543, 542, 541, 540, 539, 538, 537, 536, 535, + 534, 533, 532, 531, 530, 529, 528, 527, 526, 525, + 524, 523, 522, 521, 520, 519, 518, 517, 516, 515, + 514, 513, 512, 511, 510, 509, 508, 505, 504, 501, + 500, 499, 496, 495, 494, 493, 492, 491, 490, 489, + 488, 487, 486, 485, 484, 483, 482, 481, 480, 479, + 478, 477, 476, 475, 474, 473, 472, 471, 470, 469, + 468, 467, 466, 465, 464, 463, 462, 461, 460, 459, + 458, 457, 456, 455, 454, 453, 452, 451, 450, 449, - 455, 454, 453, 452, 451, 450, 449, 448, 447, 446, - 445, 444, 443, 442, 441, 440, 439, 434, 433, 432, - 431, 430, 429, 428, 427, 426, 425, 424, 421, 420, - 419, 418, 417, 416, 415, 414, 413, 412, 411, 410, - 407, 406, 405, 404, 403, 402, 401, 400, 399, 398, - 397, 396, 395, 394, 393, 392, 391, 390, 389, 388, - 387, 386, 385, 384, 381, 380, 379, 378, 377, 376, - 375, 374, 373, 372, 371, 370, 369, 368, 367, 366, - 365, 362, 361, 360, 359, 358, 357, 356, 355, 354, - 353, 352, 351, 350, 349, 348, 347, 346, 345, 344, + 448, 447, 446, 445, 444, 443, 442, 441, 440, 439, + 438, 437, 436, 435, 434, 429, 428, 427, 426, 425, + 424, 423, 422, 421, 420, 419, 416, 415, 414, 413, + 412, 411, 410, 409, 408, 407, 406, 405, 402, 401, + 400, 399, 398, 397, 396, 395, 394, 393, 392, 391, + 390, 389, 388, 387, 386, 385, 384, 383, 382, 381, + 380, 379, 376, 375, 374, 373, 372, 371, 370, 369, + 368, 367, 366, 365, 364, 363, 362, 361, 360, 357, + 356, 355, 354, 353, 352, 351, 350, 349, 348, 347, + 346, 345, 344, 343, 342, 341, 340, 339, 338, 337, - 343, 342, 341, 340, 339, 338, 337, 336, 335, 333, - 332, 331, 330, 329, 328, 327, 326, 325, 324, 323, - 322, 321, 320, 319, 318, 317, 316, 313, 312, 311, - 310, 309, 308, 307, 306, 305, 304, 303, 302, 301, - 300, 299, 298, 297, 296, 295, 294, 293, 292, 291, - 290, 289, 288, 287, 286, 285, 284, 283, 282, 281, - 280, 279, 278, 277, 276, 275, 274, 273, 272, 271, - 270, 269, 268, 267, 266, 265, 264, 263, 262, 261, - 260, 259, 256, 255, 254, 251, 250, 249, 248, 247, - 246, 245, 244, 239, 238, 237, 236, 235, 234, 233, + 336, 335, 334, 333, 332, 331, 330, 328, 327, 326, + 325, 324, 323, 322, 321, 320, 319, 318, 317, 316, + 315, 314, 313, 312, 311, 308, 307, 306, 305, 304, + 303, 302, 301, 300, 299, 298, 297, 296, 295, 294, + 293, 292, 291, 290, 289, 288, 287, 286, 285, 284, + 283, 282, 281, 280, 279, 278, 277, 276, 275, 274, + 273, 272, 271, 270, 269, 268, 267, 266, 265, 264, + 263, 262, 261, 260, 259, 258, 257, 256, 255, 254, + 251, 250, 249, 246, 245, 244, 243, 242, 241, 240, + 239, 234, 233, 232, 231, 230, 229, 228, 227, 226, - 232, 231, 230, 229, 226, 225, 224, 223, 222, 221, - 220, 219, 218, 217, 216, 215, 214, 213, 212, 211, - 210, 209, 208, 207, 204, 203, 202, 201, 200, 199, - 198, 197, 196, 195, 194, 193, 192, 191, 190, 189, - 188, 187, 186, 185, 181, 180, 176, 175, 174, 173, - 172, 171, 170, 169, 166, 165, 164, 163, 162, 161, - 160, 159, 158, 157, 156, 155, 151, 150, 149, 148, - 147, 146, 145, 144, 143, 142, 141, 140, 139, 138, - 134, 133, 132, 129, 128, 127, 126, 125, 123, 122, - 121, 100, 89, 88, 87, 86, 85, 65, 57, 55, + 225, 224, 221, 220, 219, 218, 217, 216, 215, 214, + 213, 212, 211, 210, 209, 208, 207, 206, 205, 204, + 203, 200, 199, 198, 197, 196, 195, 194, 193, 192, + 191, 190, 189, 188, 187, 186, 185, 184, 183, 182, + 181, 177, 176, 172, 171, 170, 169, 168, 167, 166, + 165, 162, 161, 160, 159, 158, 157, 156, 155, 154, + 153, 152, 151, 148, 147, 146, 145, 144, 143, 142, + 141, 140, 139, 138, 137, 136, 132, 131, 130, 127, + 126, 125, 124, 123, 121, 120, 119, 98, 87, 86, + 85, 84, 83, 64, 56, 54, 53, 576, 3, 576, - 54, 580, 3, 580, 580, 580, 580, 580, 580, 580, - 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, - 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, - 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, - 580, 580, 580, 580, 580, 580, 580, 580, 580 + 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, + 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, + 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, + 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, + 576, 576, 576, 576, 576 } ; -static yyconst short int yy_chk[750] = +static yyconst short int yy_chk[746] = { 0, - 582, 1, 1, 1, 0, 0, 0, 1, 1, 1, + 578, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 8, 13, 8, 8, 8, 8, 8, 11, 29, 29, 1, 11, 13, - 60, 60, 1, 10, 10, 10, 10, 10, 43, 37, - 14, 27, 37, 27, 43, 1, 2, 2, 2, 22, - 578, 13, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 14, 21, 21, 21, 21, 21, 23, 45, - 46, 22, 2, 575, 159, 45, 58, 2, 58, 23, - 25, 25, 25, 25, 25, 27, 46, 159, 574, 46, - 2, 9, 25, 9, 9, 9, 9, 9, 48, 109, + 59, 59, 1, 10, 10, 10, 10, 10, 42, 98, + 14, 27, 98, 27, 42, 1, 2, 2, 2, 22, + 574, 13, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 14, 21, 21, 21, 21, 21, 23, 44, + 45, 22, 2, 571, 155, 44, 57, 2, 57, 23, + 25, 25, 25, 25, 25, 27, 45, 155, 85, 45, + 2, 9, 25, 9, 9, 9, 9, 9, 47, 180, - 48, 23, 34, 34, 109, 44, 34, 51, 48, 9, - 12, 109, 12, 12, 12, 12, 12, 51, 34, 44, - 58, 12, 44, 180, 12, 28, 28, 28, 28, 28, - 68, 180, 68, 100, 35, 572, 100, 28, 35, 51, - 571, 35, 570, 12, 15, 15, 15, 15, 35, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 324, 15, 15, 15, 15, 15, 324, 15, 30, 30, - 184, 569, 30, 30, 30, 30, 30, 31, 31, 31, - 31, 31, 184, 360, 360, 31, 31, 31, 31, 31, - 31, 32, 72, 72, 136, 72, 49, 136, 32, 32, + 47, 23, 34, 34, 85, 43, 34, 50, 47, 9, + 12, 180, 12, 12, 12, 12, 12, 50, 34, 43, + 57, 12, 43, 176, 12, 28, 28, 28, 28, 28, + 67, 176, 67, 134, 35, 297, 134, 28, 35, 50, + 570, 35, 568, 12, 15, 15, 15, 15, 35, 15, + 15, 297, 15, 15, 15, 15, 15, 15, 15, 15, + 567, 15, 15, 15, 15, 15, 240, 15, 30, 30, + 240, 566, 30, 30, 30, 30, 30, 31, 31, 31, + 31, 31, 167, 355, 355, 31, 31, 31, 31, 31, + 31, 32, 71, 71, 51, 71, 48, 565, 32, 32, - 32, 32, 32, 87, 50, 245, 567, 87, 50, 245, - 32, 36, 49, 36, 49, 50, 566, 49, 112, 36, - 302, 50, 112, 87, 36, 565, 112, 50, 36, 52, - 36, 36, 49, 376, 36, 36, 302, 376, 52, 52, - 480, 480, 171, 564, 52, 56, 61, 61, 61, 61, - 61, 563, 56, 56, 56, 56, 56, 62, 62, 62, - 62, 62, 562, 560, 56, 171, 171, 171, 266, 266, - 266, 266, 266, 389, 472, 389, 266, 266, 266, 266, - 266, 266, 483, 559, 558, 556, 483, 472, 554, 553, - 389, 552, 389, 581, 581, 581, 583, 583, 584, 584, + 32, 32, 32, 51, 51, 167, 167, 167, 563, 51, + 32, 36, 48, 36, 48, 36, 49, 48, 110, 36, + 49, 371, 110, 319, 36, 371, 110, 49, 36, 319, + 36, 36, 48, 49, 36, 36, 475, 475, 562, 49, + 55, 60, 60, 60, 60, 60, 561, 55, 55, 55, + 55, 55, 61, 61, 61, 61, 61, 107, 384, 55, + 384, 478, 107, 467, 560, 478, 559, 558, 556, 107, + 261, 261, 261, 261, 261, 384, 467, 384, 261, 261, + 261, 261, 261, 261, 577, 577, 577, 579, 579, 580, + 580, 581, 581, 555, 554, 552, 550, 549, 548, 546, - 585, 585, 551, 550, 547, 544, 543, 542, 538, 535, - 534, 533, 532, 531, 530, 528, 527, 526, 525, 522, - 521, 520, 519, 518, 517, 516, 515, 514, 512, 510, - 509, 508, 506, 505, 504, 503, 502, 501, 500, 498, - 496, 495, 494, 493, 492, 489, 488, 486, 485, 482, - 481, 479, 478, 477, 471, 470, 469, 465, 463, 461, - 460, 459, 458, 457, 454, 453, 451, 450, 448, 447, - 446, 443, 442, 441, 440, 439, 438, 437, 436, 434, - 433, 432, 431, 430, 429, 428, 427, 426, 425, 424, - 423, 421, 420, 416, 415, 414, 413, 412, 411, 409, + 545, 542, 539, 538, 537, 533, 531, 530, 529, 528, + 527, 526, 525, 523, 522, 521, 520, 517, 516, 515, + 514, 513, 512, 511, 510, 509, 507, 505, 504, 503, + 501, 500, 499, 498, 497, 496, 495, 493, 491, 490, + 489, 488, 487, 484, 482, 481, 480, 477, 476, 474, + 473, 472, 466, 465, 464, 460, 458, 456, 455, 454, + 453, 452, 449, 448, 446, 444, 443, 442, 441, 438, + 437, 436, 435, 434, 433, 432, 431, 429, 428, 427, + 426, 425, 424, 423, 422, 421, 420, 419, 418, 416, + 415, 411, 410, 409, 408, 407, 406, 404, 403, 402, - 408, 407, 406, 405, 404, 403, 402, 401, 400, 399, - 398, 397, 394, 393, 392, 391, 390, 388, 387, 386, - 385, 384, 383, 382, 381, 380, 379, 378, 375, 374, - 372, 371, 370, 369, 368, 367, 365, 364, 363, 362, - 359, 356, 355, 353, 352, 349, 348, 347, 346, 345, - 344, 343, 341, 340, 339, 337, 336, 333, 332, 331, - 330, 329, 328, 326, 323, 322, 321, 320, 319, 318, - 317, 316, 315, 314, 313, 309, 307, 306, 305, 304, - 303, 301, 299, 298, 297, 294, 293, 292, 291, 290, - 289, 287, 285, 284, 283, 282, 280, 279, 278, 277, + 401, 400, 399, 398, 397, 396, 395, 394, 393, 392, + 389, 388, 387, 386, 385, 383, 382, 381, 380, 379, + 378, 377, 376, 375, 374, 373, 370, 369, 367, 366, + 365, 364, 363, 362, 360, 359, 358, 357, 354, 351, + 350, 348, 345, 344, 343, 342, 341, 340, 339, 338, + 336, 335, 334, 332, 331, 328, 327, 326, 325, 324, + 323, 321, 318, 317, 316, 315, 314, 313, 312, 311, + 310, 309, 308, 304, 302, 301, 300, 299, 298, 296, + 294, 293, 292, 289, 288, 287, 286, 285, 283, 281, + 280, 279, 278, 277, 275, 274, 273, 272, 271, 270, - 276, 275, 274, 273, 272, 271, 270, 269, 267, 265, - 264, 263, 262, 261, 260, 258, 257, 256, 255, 254, - 253, 252, 251, 249, 248, 247, 246, 244, 243, 242, - 241, 240, 239, 237, 236, 235, 234, 233, 232, 231, - 230, 229, 228, 227, 226, 225, 224, 223, 222, 221, - 219, 218, 217, 216, 215, 213, 212, 211, 210, 208, - 207, 206, 205, 204, 203, 202, 201, 200, 199, 198, - 197, 196, 195, 194, 193, 192, 191, 190, 189, 187, - 186, 185, 183, 182, 181, 179, 178, 177, 176, 175, - 174, 173, 172, 170, 169, 168, 167, 166, 165, 164, + 269, 268, 267, 266, 265, 264, 262, 260, 259, 258, + 257, 256, 255, 253, 252, 251, 250, 249, 248, 247, + 246, 244, 243, 242, 241, 239, 238, 237, 236, 235, + 234, 232, 231, 230, 229, 228, 227, 226, 225, 224, + 223, 222, 221, 220, 219, 218, 217, 216, 215, 214, + 213, 212, 210, 209, 208, 207, 206, 204, 203, 202, + 201, 200, 199, 198, 197, 196, 195, 194, 193, 192, + 191, 190, 189, 188, 187, 186, 185, 183, 182, 181, + 179, 178, 177, 175, 174, 173, 172, 171, 170, 169, + 168, 166, 165, 164, 163, 162, 161, 160, 159, 158, - 163, 162, 161, 160, 158, 157, 156, 155, 154, 153, - 151, 150, 149, 148, 147, 146, 145, 144, 143, 142, - 141, 140, 139, 137, 135, 134, 133, 132, 131, 130, - 129, 128, 127, 126, 124, 123, 121, 120, 119, 117, - 116, 115, 114, 113, 111, 110, 108, 107, 106, 105, - 104, 103, 102, 101, 99, 98, 97, 96, 95, 94, - 93, 92, 91, 90, 89, 88, 86, 85, 84, 83, - 82, 81, 80, 79, 78, 77, 76, 75, 74, 73, - 71, 70, 69, 67, 66, 65, 64, 57, 55, 54, - 53, 47, 42, 41, 40, 39, 38, 33, 24, 17, + 157, 156, 154, 153, 152, 151, 150, 149, 148, 147, + 146, 145, 144, 143, 142, 141, 140, 139, 138, 137, + 135, 133, 132, 131, 130, 129, 128, 127, 126, 125, + 124, 122, 121, 119, 118, 117, 115, 114, 113, 112, + 111, 109, 108, 106, 105, 104, 103, 102, 101, 100, + 99, 97, 96, 95, 94, 93, 92, 91, 90, 89, + 88, 87, 86, 84, 83, 82, 81, 80, 79, 78, + 77, 76, 75, 74, 73, 72, 70, 69, 68, 66, + 65, 64, 63, 56, 54, 53, 52, 46, 41, 40, + 39, 38, 37, 33, 24, 17, 16, 3, 576, 576, - 16, 3, 580, 580, 580, 580, 580, 580, 580, 580, - 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, - 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, - 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, - 580, 580, 580, 580, 580, 580, 580, 580, 580 + 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, + 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, + 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, + 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, + 576, 576, 576, 576, 576 } ; static yy_state_type yy_last_accepting_state; @@ -1230,13 +1230,13 @@ yy_match: while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 581 ) + if ( yy_current_state >= 577 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; ++yy_cp; } - while ( yy_base[yy_current_state] != 703 ); + while ( yy_base[yy_current_state] != 699 ); yy_find_action: yy_act = yy_accept[yy_current_state]; @@ -1510,7 +1510,7 @@ YY_RULE_SETUP #line 438 "lexer.lxx" { accept(); - return FLIGHT; + return GROUP; } YY_BREAK case 31: @@ -1518,7 +1518,7 @@ YY_RULE_SETUP #line 442 "lexer.lxx" { accept(); - return GROUP; + return DEFAULTPOSE; } YY_BREAK case 32: @@ -1526,7 +1526,7 @@ YY_RULE_SETUP #line 446 "lexer.lxx" { accept(); - return HIP; + return JOINT; } YY_BREAK case 33: @@ -1534,7 +1534,7 @@ YY_RULE_SETUP #line 450 "lexer.lxx" { accept(); - return INTANGENT; + return KNOTS; } YY_BREAK case 34: @@ -1542,7 +1542,7 @@ YY_RULE_SETUP #line 454 "lexer.lxx" { accept(); - return JOINT; + return INCLUDE; } YY_BREAK case 35: @@ -1550,7 +1550,7 @@ YY_RULE_SETUP #line 458 "lexer.lxx" { accept(); - return KNOTS; + return INSTANCE; } YY_BREAK case 36: @@ -1558,7 +1558,7 @@ YY_RULE_SETUP #line 462 "lexer.lxx" { accept(); - return INCLUDE; + return LINE; } YY_BREAK case 37: @@ -1566,7 +1566,7 @@ YY_RULE_SETUP #line 466 "lexer.lxx" { accept(); - return INSTANCE; + return LOOP; } YY_BREAK case 38: @@ -1574,7 +1574,7 @@ YY_RULE_SETUP #line 470 "lexer.lxx" { accept(); - return LINE; + return MATERIAL; } YY_BREAK case 39: @@ -1582,7 +1582,7 @@ YY_RULE_SETUP #line 474 "lexer.lxx" { accept(); - return LOOP; + return MATRIX3; } YY_BREAK case 40: @@ -1590,7 +1590,7 @@ YY_RULE_SETUP #line 478 "lexer.lxx" { accept(); - return MATERIAL; + return MATRIX4; } YY_BREAK case 41: @@ -1598,7 +1598,7 @@ YY_RULE_SETUP #line 482 "lexer.lxx" { accept(); - return MATRIX3; + return MODEL; } YY_BREAK case 42: @@ -1606,7 +1606,7 @@ YY_RULE_SETUP #line 486 "lexer.lxx" { accept(); - return MATRIX4; + return MREF; } YY_BREAK case 43: @@ -1614,7 +1614,7 @@ YY_RULE_SETUP #line 490 "lexer.lxx" { accept(); - return MODEL; + return NORMAL; } YY_BREAK case 44: @@ -1622,7 +1622,7 @@ YY_RULE_SETUP #line 494 "lexer.lxx" { accept(); - return MREF; + return NURBSCURVE; } YY_BREAK case 45: @@ -1630,7 +1630,7 @@ YY_RULE_SETUP #line 498 "lexer.lxx" { accept(); - return NORMAL; + return NURBSSURFACE; } YY_BREAK case 46: @@ -1638,7 +1638,7 @@ YY_RULE_SETUP #line 502 "lexer.lxx" { accept(); - return NURBSCURVE; + return OBJECTTYPE; } YY_BREAK case 47: @@ -1646,7 +1646,7 @@ YY_RULE_SETUP #line 506 "lexer.lxx" { accept(); - return NURBSSURFACE; + return ORDER; } YY_BREAK case 48: @@ -1654,7 +1654,7 @@ YY_RULE_SETUP #line 510 "lexer.lxx" { accept(); - return OBJECTTYPE; + return OUTTANGENT; } YY_BREAK case 49: @@ -1662,7 +1662,7 @@ YY_RULE_SETUP #line 514 "lexer.lxx" { accept(); - return ORDER; + return POINTLIGHT; } YY_BREAK case 50: @@ -1670,7 +1670,7 @@ YY_RULE_SETUP #line 518 "lexer.lxx" { accept(); - return OUTTANGENT; + return POLYGON; } YY_BREAK case 51: @@ -1678,7 +1678,7 @@ YY_RULE_SETUP #line 522 "lexer.lxx" { accept(); - return POINTLIGHT; + return REF; } YY_BREAK case 52: @@ -1686,7 +1686,7 @@ YY_RULE_SETUP #line 526 "lexer.lxx" { accept(); - return POLYGON; + return RGBA; } YY_BREAK case 53: @@ -1694,7 +1694,7 @@ YY_RULE_SETUP #line 530 "lexer.lxx" { accept(); - return REF; + return ROTATE; } YY_BREAK case 54: @@ -1702,7 +1702,7 @@ YY_RULE_SETUP #line 534 "lexer.lxx" { accept(); - return RGBA; + return ROTX; } YY_BREAK case 55: @@ -1710,7 +1710,7 @@ YY_RULE_SETUP #line 538 "lexer.lxx" { accept(); - return ROTATE; + return ROTY; } YY_BREAK case 56: @@ -1718,7 +1718,7 @@ YY_RULE_SETUP #line 542 "lexer.lxx" { accept(); - return ROTX; + return ROTZ; } YY_BREAK case 57: @@ -1726,7 +1726,7 @@ YY_RULE_SETUP #line 546 "lexer.lxx" { accept(); - return ROTY; + return SANIM; } YY_BREAK case 58: @@ -1734,7 +1734,7 @@ YY_RULE_SETUP #line 550 "lexer.lxx" { accept(); - return ROTZ; + return SCALAR; } YY_BREAK case 59: @@ -1742,7 +1742,7 @@ YY_RULE_SETUP #line 554 "lexer.lxx" { accept(); - return SANIM; + return SCALE; } YY_BREAK case 60: @@ -1750,7 +1750,7 @@ YY_RULE_SETUP #line 558 "lexer.lxx" { accept(); - return SCALAR; + return SEQUENCE; } YY_BREAK case 61: @@ -1758,7 +1758,7 @@ YY_RULE_SETUP #line 562 "lexer.lxx" { accept(); - return SCALE; + return SHADING; } YY_BREAK case 62: @@ -1766,7 +1766,7 @@ YY_RULE_SETUP #line 566 "lexer.lxx" { accept(); - return SEQUENCE; + return SWITCH; } YY_BREAK case 63: @@ -1774,7 +1774,7 @@ YY_RULE_SETUP #line 570 "lexer.lxx" { accept(); - return SHADING; + return SWITCHCONDITION; } YY_BREAK case 64: @@ -1782,7 +1782,7 @@ YY_RULE_SETUP #line 574 "lexer.lxx" { accept(); - return SWITCH; + return TABLE; } YY_BREAK case 65: @@ -1790,7 +1790,7 @@ YY_RULE_SETUP #line 578 "lexer.lxx" { accept(); - return SWITCHCONDITION; + return TABLE_V; } YY_BREAK case 66: @@ -1798,7 +1798,7 @@ YY_RULE_SETUP #line 582 "lexer.lxx" { accept(); - return TABLE; + return TAG; } YY_BREAK case 67: @@ -1806,7 +1806,7 @@ YY_RULE_SETUP #line 586 "lexer.lxx" { accept(); - return TABLE_V; + return TANGENT; } YY_BREAK case 68: @@ -1814,7 +1814,7 @@ YY_RULE_SETUP #line 590 "lexer.lxx" { accept(); - return TAG; + return TEXLIST; } YY_BREAK case 69: @@ -1822,7 +1822,7 @@ YY_RULE_SETUP #line 594 "lexer.lxx" { accept(); - return TANGENT; + return TEXTURE; } YY_BREAK case 70: @@ -1830,7 +1830,7 @@ YY_RULE_SETUP #line 598 "lexer.lxx" { accept(); - return TEXLIST; + return TLENGTHS; } YY_BREAK case 71: @@ -1838,7 +1838,7 @@ YY_RULE_SETUP #line 602 "lexer.lxx" { accept(); - return TEXTURE; + return TRANSFORM; } YY_BREAK case 72: @@ -1846,7 +1846,7 @@ YY_RULE_SETUP #line 606 "lexer.lxx" { accept(); - return TLENGTHS; + return TRANSLATE; } YY_BREAK case 73: @@ -1854,7 +1854,7 @@ YY_RULE_SETUP #line 610 "lexer.lxx" { accept(); - return TRANSFORM; + return TREF; } YY_BREAK case 74: @@ -1862,7 +1862,7 @@ YY_RULE_SETUP #line 614 "lexer.lxx" { accept(); - return TRANSLATE; + return TRIANGLEFAN; } YY_BREAK case 75: @@ -1870,7 +1870,7 @@ YY_RULE_SETUP #line 618 "lexer.lxx" { accept(); - return TREF; + return TRIANGLESTRIP; } YY_BREAK case 76: @@ -1878,7 +1878,7 @@ YY_RULE_SETUP #line 622 "lexer.lxx" { accept(); - return TRIANGLEFAN; + return TRIM; } YY_BREAK case 77: @@ -1886,7 +1886,7 @@ YY_RULE_SETUP #line 626 "lexer.lxx" { accept(); - return TRIANGLESTRIP; + return TXT; } YY_BREAK case 78: @@ -1894,7 +1894,7 @@ YY_RULE_SETUP #line 630 "lexer.lxx" { accept(); - return TRIM; + return UKNOTS; } YY_BREAK case 79: @@ -1902,7 +1902,7 @@ YY_RULE_SETUP #line 634 "lexer.lxx" { accept(); - return TXT; + return UKNOTS; } YY_BREAK case 80: @@ -1910,7 +1910,7 @@ YY_RULE_SETUP #line 638 "lexer.lxx" { accept(); - return UKNOTS; + return UV; } YY_BREAK case 81: @@ -1918,7 +1918,7 @@ YY_RULE_SETUP #line 642 "lexer.lxx" { accept(); - return UKNOTS; + return VKNOTS; } YY_BREAK case 82: @@ -1926,7 +1926,7 @@ YY_RULE_SETUP #line 646 "lexer.lxx" { accept(); - return UV; + return VKNOTS; } YY_BREAK case 83: @@ -1934,7 +1934,7 @@ YY_RULE_SETUP #line 650 "lexer.lxx" { accept(); - return VKNOTS; + return VERTEX; } YY_BREAK case 84: @@ -1942,7 +1942,7 @@ YY_RULE_SETUP #line 654 "lexer.lxx" { accept(); - return VKNOTS; + return VERTEXANIM; } YY_BREAK case 85: @@ -1950,7 +1950,7 @@ YY_RULE_SETUP #line 658 "lexer.lxx" { accept(); - return VERTEX; + return VERTEXPOOL; } YY_BREAK case 86: @@ -1958,7 +1958,7 @@ YY_RULE_SETUP #line 662 "lexer.lxx" { accept(); - return VERTEXANIM; + return VERTEXREF; } YY_BREAK case 87: @@ -1966,7 +1966,7 @@ YY_RULE_SETUP #line 666 "lexer.lxx" { accept(); - return VERTEXPOOL; + return XFMANIM; } YY_BREAK case 88: @@ -1974,28 +1974,12 @@ YY_RULE_SETUP #line 670 "lexer.lxx" { accept(); - return VERTEXREF; + return XFMSANIM; } YY_BREAK case 89: YY_RULE_SETUP -#line 674 "lexer.lxx" -{ - accept(); - return XFMANIM; -} - YY_BREAK -case 90: -YY_RULE_SETUP -#line 678 "lexer.lxx" -{ - accept(); - return XFMSANIM; -} - YY_BREAK -case 91: -YY_RULE_SETUP -#line 685 "lexer.lxx" +#line 677 "lexer.lxx" { // An integer or floating-point number. accept(); @@ -2004,9 +1988,9 @@ YY_RULE_SETUP return EGG_NUMBER; } YY_BREAK -case 92: +case 90: YY_RULE_SETUP -#line 693 "lexer.lxx" +#line 685 "lexer.lxx" { // A hexadecimal integer number. accept(); @@ -2015,9 +1999,9 @@ YY_RULE_SETUP return EGG_ULONG; } YY_BREAK -case 93: +case 91: YY_RULE_SETUP -#line 701 "lexer.lxx" +#line 693 "lexer.lxx" { // A binary integer number. accept(); @@ -2026,9 +2010,9 @@ YY_RULE_SETUP return EGG_ULONG; } YY_BREAK -case 94: +case 92: YY_RULE_SETUP -#line 709 "lexer.lxx" +#line 701 "lexer.lxx" { // not-a-number. These sometimes show up in egg files accidentally. accept(); @@ -2038,9 +2022,9 @@ YY_RULE_SETUP return EGG_NUMBER; } YY_BREAK -case 95: +case 93: YY_RULE_SETUP -#line 718 "lexer.lxx" +#line 710 "lexer.lxx" { // infinity. As above. accept(); @@ -2049,9 +2033,9 @@ YY_RULE_SETUP return EGG_NUMBER; } YY_BREAK -case 96: +case 94: YY_RULE_SETUP -#line 726 "lexer.lxx" +#line 718 "lexer.lxx" { // minus infinity. As above. accept(); @@ -2060,9 +2044,9 @@ YY_RULE_SETUP return EGG_NUMBER; } YY_BREAK -case 97: +case 95: YY_RULE_SETUP -#line 734 "lexer.lxx" +#line 726 "lexer.lxx" { // infinity, on Win32. As above. accept(); @@ -2071,9 +2055,9 @@ YY_RULE_SETUP return EGG_NUMBER; } YY_BREAK -case 98: +case 96: YY_RULE_SETUP -#line 742 "lexer.lxx" +#line 734 "lexer.lxx" { // minus infinity, on Win32. As above. accept(); @@ -2082,9 +2066,9 @@ YY_RULE_SETUP return EGG_NUMBER; } YY_BREAK -case 99: +case 97: YY_RULE_SETUP -#line 751 "lexer.lxx" +#line 743 "lexer.lxx" { // Quoted string. accept(); @@ -2092,9 +2076,9 @@ YY_RULE_SETUP return EGG_STRING; } YY_BREAK -case 100: +case 98: YY_RULE_SETUP -#line 758 "lexer.lxx" +#line 750 "lexer.lxx" { // Unquoted string. accept(); @@ -2102,12 +2086,12 @@ YY_RULE_SETUP return EGG_STRING; } YY_BREAK -case 101: +case 99: YY_RULE_SETUP -#line 764 "lexer.lxx" +#line 756 "lexer.lxx" ECHO; YY_BREAK -#line 2112 "lex.yy.c" +#line 2096 "lex.yy.c" case YY_STATE_EOF(INITIAL): yyterminate(); @@ -2399,7 +2383,7 @@ static yy_state_type yy_get_previous_state() while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 581 ) + if ( yy_current_state >= 577 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; @@ -2434,11 +2418,11 @@ yy_state_type yy_current_state; while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 581 ) + if ( yy_current_state >= 577 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; - yy_is_jam = (yy_current_state == 580); + yy_is_jam = (yy_current_state == 576); return yy_is_jam ? 0 : yy_current_state; } @@ -2993,4 +2977,4 @@ int main() return 0; } #endif -#line 764 "lexer.lxx" +#line 756 "lexer.lxx" diff --git a/panda/src/egg/lexer.lxx b/panda/src/egg/lexer.lxx index 85ab939a94..92fa7b2f21 100644 --- a/panda/src/egg/lexer.lxx +++ b/panda/src/egg/lexer.lxx @@ -435,21 +435,13 @@ NUMERIC ([+-]?(([0-9]+[.]?)|([0-9]*[.][0-9]+))([eE][+-]?[0-9]+)?) accept(); return EXTERNAL_FILE; } -"" { - accept(); - return FLIGHT; -} "" { accept(); return GROUP; } -"" { +"" { accept(); - return HIP; -} -"" { - accept(); - return INTANGENT; + return DEFAULTPOSE; } "" { accept(); diff --git a/panda/src/egg/parser.cxx.prebuilt b/panda/src/egg/parser.cxx.prebuilt index 147bc74e93..014b67c952 100644 --- a/panda/src/egg/parser.cxx.prebuilt +++ b/panda/src/egg/parser.cxx.prebuilt @@ -37,69 +37,67 @@ #define DTREF 280 #define DYNAMICVERTEXPOOL 281 #define EXTERNAL_FILE 282 -#define FLIGHT 283 -#define GROUP 284 -#define HIP 285 -#define INTANGENT 286 -#define JOINT 287 -#define KNOTS 288 -#define INCLUDE 289 -#define INSTANCE 290 -#define LINE 291 -#define LOOP 292 -#define MATERIAL 293 -#define MATRIX3 294 -#define MATRIX4 295 -#define MODEL 296 -#define MREF 297 -#define NORMAL 298 -#define NURBSCURVE 299 -#define NURBSSURFACE 300 -#define OBJECTTYPE 301 -#define ORDER 302 -#define OUTTANGENT 303 -#define POINTLIGHT 304 -#define POLYGON 305 -#define REF 306 -#define RGBA 307 -#define ROTATE 308 -#define ROTX 309 -#define ROTY 310 -#define ROTZ 311 -#define SANIM 312 -#define SCALAR 313 -#define SCALE 314 -#define SEQUENCE 315 -#define SHADING 316 -#define SWITCH 317 -#define SWITCHCONDITION 318 -#define TABLE 319 -#define TABLE_V 320 -#define TAG 321 -#define TANGENT 322 -#define TEXLIST 323 -#define TEXTURE 324 -#define TLENGTHS 325 -#define TRANSFORM 326 -#define TRANSLATE 327 -#define TREF 328 -#define TRIANGLEFAN 329 -#define TRIANGLESTRIP 330 -#define TRIM 331 -#define TXT 332 -#define UKNOTS 333 -#define UV 334 -#define VKNOTS 335 -#define VERTEX 336 -#define VERTEXANIM 337 -#define VERTEXPOOL 338 -#define VERTEXREF 339 -#define XFMANIM 340 -#define XFMSANIM 341 -#define START_EGG 342 -#define START_GROUP_BODY 343 -#define START_TEXTURE_BODY 344 -#define START_PRIMITIVE_BODY 345 +#define GROUP 283 +#define DEFAULTPOSE 284 +#define JOINT 285 +#define KNOTS 286 +#define INCLUDE 287 +#define INSTANCE 288 +#define LINE 289 +#define LOOP 290 +#define MATERIAL 291 +#define MATRIX3 292 +#define MATRIX4 293 +#define MODEL 294 +#define MREF 295 +#define NORMAL 296 +#define NURBSCURVE 297 +#define NURBSSURFACE 298 +#define OBJECTTYPE 299 +#define ORDER 300 +#define OUTTANGENT 301 +#define POINTLIGHT 302 +#define POLYGON 303 +#define REF 304 +#define RGBA 305 +#define ROTATE 306 +#define ROTX 307 +#define ROTY 308 +#define ROTZ 309 +#define SANIM 310 +#define SCALAR 311 +#define SCALE 312 +#define SEQUENCE 313 +#define SHADING 314 +#define SWITCH 315 +#define SWITCHCONDITION 316 +#define TABLE 317 +#define TABLE_V 318 +#define TAG 319 +#define TANGENT 320 +#define TEXLIST 321 +#define TEXTURE 322 +#define TLENGTHS 323 +#define TRANSFORM 324 +#define TRANSLATE 325 +#define TREF 326 +#define TRIANGLEFAN 327 +#define TRIANGLESTRIP 328 +#define TRIM 329 +#define TXT 330 +#define UKNOTS 331 +#define UV 332 +#define VKNOTS 333 +#define VERTEX 334 +#define VERTEXANIM 335 +#define VERTEXPOOL 336 +#define VERTEXREF 337 +#define XFMANIM 338 +#define XFMSANIM 339 +#define START_EGG 340 +#define START_GROUP_BODY 341 +#define START_TEXTURE_BODY 342 +#define START_PRIMITIVE_BODY 343 #line 6 "parser.yxx" @@ -132,6 +130,7 @@ #include "eggExternalReference.h" #include "eggData.h" #include "eggAnimPreload.h" +#include "eggTransform.h" #include "pt_EggTexture.h" #include "pt_EggMaterial.h" @@ -160,6 +159,9 @@ typedef pvector< PT(EggObject) > EggStack; static EggStack egg_stack; +// This is used just when parsing a or entry. +static EggTransform *egg_top_transform; + // There's one "top-level" egg node, which is where we should parent // things (e.g. implicit textures) encountered in the egg file that // don't have an explicit place in the tree. If this is NULL, such @@ -257,11 +259,11 @@ egg_cleanup_parser() { -#define YYFINAL 740 +#define YYFINAL 746 #define YYFLAG -32768 -#define YYNTBASE 94 +#define YYNTBASE 92 -#define YYTRANSLATE(x) ((unsigned)(x) <= 345 ? yytranslate[x] : 214) +#define YYTRANSLATE(x) ((unsigned)(x) <= 343 ? yytranslate[x] : 214) static const char yytranslate[] = { 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -276,7 +278,7 @@ static const char yytranslate[] = { 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 92, 2, 93, 2, 2, 2, 2, 2, + 2, 2, 90, 2, 91, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -298,7 +300,7 @@ static const char yytranslate[] = { 0, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, - 87, 88, 89, 90, 91 + 87, 88, 89 }; #if YYDEBUG != 0 @@ -312,137 +314,138 @@ static const short yyprhs[] = { 0, 227, 236, 244, 253, 257, 266, 275, 280, 290, 300, 301, 308, 309, 316, 317, 324, 326, 333, 339, 347, 355, 361, 367, 373, 379, 385, 391, 397, 404, 410, - 413, 416, 419, 425, 428, 430, 432, 435, 436, 442, - 444, 447, 450, 453, 456, 459, 462, 465, 468, 471, - 474, 477, 480, 486, 493, 498, 503, 508, 513, 521, - 527, 534, 539, 544, 546, 556, 561, 563, 580, 590, - 592, 599, 604, 616, 629, 630, 637, 638, 645, 646, - 653, 654, 661, 662, 669, 670, 677, 678, 685, 687, - 693, 699, 701, 702, 710, 716, 722, 728, 731, 737, - 743, 749, 756, 758, 764, 770, 776, 779, 785, 791, - 797, 803, 809, 815, 818, 824, 831, 833, 839, 845, - 851, 854, 860, 866, 872, 878, 884, 891, 893, 895, - 897, 901, 910, 919, 924, 934, 944, 946, 955, 958, - 960, 962, 964, 970, 972, 975, 977, 979, 980, 987, - 988, 995, 997, 1000, 1003, 1006, 1009, 1012, 1013, 1020, - 1022, 1029, 1035, 1036, 1043, 1045, 1052, 1058, 1059, 1066, - 1068, 1075, 1078, 1079, 1086, 1088, 1095, 1097, 1100, 1102, - 1105, 1107, 1109, 1111, 1113, 1115, 1117, 1119, 1121, 1123, - 1125, 1127, 1129, 1131, 1133, 1135, 1137, 1139, 1142, 1144, - 1146, 1148, 1150, 1152, 1154, 1156 + 413, 416, 419, 422, 428, 431, 433, 435, 438, 439, + 445, 446, 452, 454, 457, 460, 463, 466, 469, 472, + 475, 478, 481, 484, 487, 490, 496, 503, 508, 513, + 518, 523, 531, 537, 544, 549, 554, 556, 566, 571, + 573, 590, 600, 602, 609, 614, 626, 639, 640, 647, + 648, 655, 656, 663, 664, 671, 672, 679, 680, 687, + 688, 695, 697, 703, 709, 711, 712, 720, 726, 732, + 738, 741, 747, 753, 759, 766, 768, 774, 780, 786, + 789, 795, 801, 807, 813, 819, 825, 828, 834, 841, + 843, 849, 855, 861, 864, 870, 876, 882, 888, 894, + 901, 903, 905, 907, 911, 920, 929, 934, 944, 954, + 956, 965, 968, 970, 972, 974, 980, 982, 985, 987, + 989, 990, 997, 998, 1005, 1007, 1010, 1013, 1016, 1019, + 1022, 1023, 1030, 1032, 1039, 1045, 1046, 1053, 1055, 1062, + 1068, 1069, 1076, 1078, 1085, 1088, 1089, 1096, 1098, 1105, + 1107, 1110, 1112, 1115, 1117, 1119, 1121, 1123, 1125, 1127, + 1129, 1131, 1133, 1135, 1137, 1139, 1141, 1143, 1145, 1147, + 1149, 1152, 1154, 1156, 1158, 1160, 1162, 1164, 1166 }; -static const short yyrhs[] = { 88, - 95, 0, 89, 123, 0, 90, 101, 0, 91, 162, - 0, 213, 0, 95, 96, 0, 97, 0, 98, 0, - 99, 0, 102, 0, 105, 0, 106, 0, 117, 0, - 119, 0, 121, 0, 147, 0, 149, 0, 151, 0, +static const short yyrhs[] = { 86, + 93, 0, 87, 121, 0, 88, 99, 0, 89, 162, + 0, 213, 0, 93, 94, 0, 95, 0, 96, 0, + 97, 0, 100, 0, 103, 0, 104, 0, 115, 0, + 117, 0, 119, 0, 147, 0, 149, 0, 151, 0, 153, 0, 155, 0, 157, 0, 159, 0, 180, 0, - 194, 0, 17, 92, 205, 93, 0, 15, 204, 92, - 208, 93, 0, 0, 70, 203, 92, 205, 100, 101, - 93, 0, 213, 0, 101, 59, 203, 92, 211, 93, - 0, 101, 126, 0, 0, 39, 203, 92, 103, 104, - 93, 0, 213, 0, 104, 59, 203, 92, 211, 93, - 0, 28, 204, 92, 205, 93, 0, 207, 28, 204, - 92, 205, 93, 0, 0, 84, 203, 107, 92, 108, - 93, 0, 213, 0, 108, 109, 0, 0, 82, 110, - 92, 112, 93, 0, 0, 82, 212, 111, 92, 112, - 93, 0, 210, 0, 210, 210, 0, 210, 210, 210, - 0, 210, 210, 210, 210, 0, 0, 112, 80, 204, - 92, 113, 114, 93, 0, 112, 44, 92, 115, 93, - 0, 112, 53, 92, 116, 93, 0, 112, 23, 207, - 92, 210, 210, 210, 93, 0, 112, 23, 92, 207, - 210, 210, 210, 93, 0, 210, 210, 0, 210, 210, - 210, 0, 114, 68, 92, 210, 210, 210, 93, 0, - 114, 11, 92, 210, 210, 210, 93, 0, 114, 22, - 207, 92, 210, 210, 93, 0, 114, 22, 207, 92, - 210, 210, 210, 93, 0, 114, 22, 92, 207, 210, - 210, 93, 0, 114, 22, 92, 207, 210, 210, 210, - 93, 0, 210, 210, 210, 0, 115, 20, 207, 92, - 210, 210, 210, 93, 0, 115, 20, 92, 207, 210, - 210, 210, 93, 0, 210, 210, 210, 210, 0, 116, - 21, 207, 92, 210, 210, 210, 210, 93, 0, 116, - 21, 92, 207, 210, 210, 210, 210, 93, 0, 0, - 30, 204, 118, 92, 123, 93, 0, 0, 33, 204, - 120, 92, 123, 93, 0, 0, 36, 204, 122, 92, - 123, 93, 0, 213, 0, 123, 59, 203, 92, 211, - 93, 0, 123, 9, 92, 207, 93, 0, 123, 10, - 92, 210, 210, 210, 93, 0, 123, 14, 204, 92, - 124, 125, 93, 0, 123, 24, 92, 212, 93, 0, - 123, 24, 92, 5, 93, 0, 123, 19, 92, 212, - 93, 0, 123, 19, 92, 5, 93, 0, 123, 63, - 92, 212, 93, 0, 123, 47, 92, 205, 93, 0, - 123, 42, 92, 212, 93, 0, 123, 67, 204, 92, - 208, 93, 0, 123, 69, 92, 212, 93, 0, 123, - 126, 0, 123, 143, 0, 123, 145, 0, 123, 52, - 92, 202, 93, 0, 123, 96, 0, 207, 0, 213, - 0, 125, 207, 0, 0, 72, 127, 92, 128, 93, + 194, 0, 17, 90, 205, 91, 0, 15, 204, 90, + 208, 91, 0, 0, 68, 203, 90, 205, 98, 99, + 91, 0, 213, 0, 99, 57, 203, 90, 211, 91, + 0, 99, 124, 0, 0, 37, 203, 90, 101, 102, + 91, 0, 213, 0, 102, 57, 203, 90, 211, 91, + 0, 28, 204, 90, 205, 91, 0, 207, 28, 204, + 90, 205, 91, 0, 0, 82, 203, 105, 90, 106, + 91, 0, 213, 0, 106, 107, 0, 0, 80, 108, + 90, 110, 91, 0, 0, 80, 212, 109, 90, 110, + 91, 0, 210, 0, 210, 210, 0, 210, 210, 210, + 0, 210, 210, 210, 210, 0, 0, 110, 78, 204, + 90, 111, 112, 91, 0, 110, 42, 90, 113, 91, + 0, 110, 51, 90, 114, 91, 0, 110, 23, 207, + 90, 210, 210, 210, 91, 0, 110, 23, 90, 207, + 210, 210, 210, 91, 0, 210, 210, 0, 210, 210, + 210, 0, 112, 66, 90, 210, 210, 210, 91, 0, + 112, 11, 90, 210, 210, 210, 91, 0, 112, 22, + 207, 90, 210, 210, 91, 0, 112, 22, 207, 90, + 210, 210, 210, 91, 0, 112, 22, 90, 207, 210, + 210, 91, 0, 112, 22, 90, 207, 210, 210, 210, + 91, 0, 210, 210, 210, 0, 113, 20, 207, 90, + 210, 210, 210, 91, 0, 113, 20, 90, 207, 210, + 210, 210, 91, 0, 210, 210, 210, 210, 0, 114, + 21, 207, 90, 210, 210, 210, 210, 91, 0, 114, + 21, 90, 207, 210, 210, 210, 210, 91, 0, 0, + 29, 204, 116, 90, 121, 91, 0, 0, 31, 204, + 118, 90, 121, 91, 0, 0, 34, 204, 120, 90, + 121, 91, 0, 213, 0, 121, 57, 203, 90, 211, + 91, 0, 121, 9, 90, 207, 91, 0, 121, 10, + 90, 210, 210, 210, 91, 0, 121, 14, 204, 90, + 122, 123, 91, 0, 121, 24, 90, 212, 91, 0, + 121, 24, 90, 5, 91, 0, 121, 19, 90, 212, + 91, 0, 121, 19, 90, 5, 91, 0, 121, 61, + 90, 212, 91, 0, 121, 45, 90, 205, 91, 0, + 121, 40, 90, 212, 91, 0, 121, 65, 204, 90, + 208, 91, 0, 121, 67, 90, 212, 91, 0, 121, + 124, 0, 121, 126, 0, 121, 143, 0, 121, 145, + 0, 121, 50, 90, 202, 91, 0, 121, 94, 0, + 207, 0, 213, 0, 123, 207, 0, 0, 70, 125, + 90, 128, 91, 0, 0, 30, 127, 90, 128, 91, 0, 213, 0, 128, 129, 0, 128, 130, 0, 128, 131, 0, 128, 132, 0, 128, 133, 0, 128, 134, 0, 128, 135, 0, 128, 136, 0, 128, 137, 0, - 128, 138, 0, 128, 139, 0, 128, 141, 0, 73, - 92, 210, 210, 93, 0, 73, 92, 210, 210, 210, - 93, 0, 54, 92, 210, 93, 0, 55, 92, 210, - 93, 0, 56, 92, 210, 93, 0, 57, 92, 210, - 93, 0, 54, 92, 210, 210, 210, 210, 93, 0, - 60, 92, 210, 210, 93, 0, 60, 92, 210, 210, - 210, 93, 0, 60, 92, 210, 93, 0, 40, 92, - 140, 93, 0, 213, 0, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 0, 41, 92, 142, 93, 0, + 128, 138, 0, 128, 139, 0, 128, 141, 0, 71, + 90, 210, 210, 91, 0, 71, 90, 210, 210, 210, + 91, 0, 52, 90, 210, 91, 0, 53, 90, 210, + 91, 0, 54, 90, 210, 91, 0, 55, 90, 210, + 91, 0, 52, 90, 210, 210, 210, 210, 91, 0, + 58, 90, 210, 210, 91, 0, 58, 90, 210, 210, + 210, 91, 0, 58, 90, 210, 91, 0, 38, 90, + 140, 91, 0, 213, 0, 210, 210, 210, 210, 210, + 210, 210, 210, 210, 0, 39, 90, 142, 91, 0, 213, 0, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 0, 85, - 92, 197, 144, 52, 92, 201, 93, 93, 0, 213, - 0, 144, 59, 203, 92, 211, 93, 0, 64, 92, - 146, 93, 0, 25, 92, 210, 210, 82, 92, 210, - 210, 210, 93, 93, 0, 25, 92, 210, 210, 210, - 82, 92, 210, 210, 210, 93, 93, 0, 0, 51, - 204, 148, 92, 162, 93, 0, 0, 75, 204, 150, - 92, 162, 93, 0, 0, 76, 204, 152, 92, 162, - 93, 0, 0, 50, 204, 154, 92, 162, 93, 0, - 0, 37, 204, 156, 92, 162, 93, 0, 0, 46, - 204, 158, 92, 164, 93, 0, 0, 45, 204, 160, - 92, 165, 93, 0, 213, 0, 161, 44, 92, 169, - 93, 0, 161, 53, 92, 170, 93, 0, 213, 0, - 0, 162, 16, 212, 92, 163, 161, 93, 0, 162, - 74, 92, 166, 93, 0, 162, 70, 92, 167, 93, - 0, 162, 43, 92, 168, 93, 0, 162, 172, 0, - 162, 44, 92, 169, 93, 0, 162, 53, 92, 170, - 93, 0, 162, 8, 92, 171, 93, 0, 162, 59, - 203, 92, 211, 93, 0, 213, 0, 164, 74, 92, - 166, 93, 0, 164, 70, 92, 167, 93, 0, 164, - 43, 92, 168, 93, 0, 164, 172, 0, 164, 44, - 92, 169, 93, 0, 164, 53, 92, 170, 93, 0, - 164, 8, 92, 171, 93, 0, 164, 48, 92, 173, - 93, 0, 164, 79, 92, 174, 93, 0, 164, 81, - 92, 175, 93, 0, 164, 159, 0, 164, 77, 92, - 176, 93, 0, 164, 59, 203, 92, 211, 93, 0, - 213, 0, 165, 74, 92, 166, 93, 0, 165, 70, - 92, 167, 93, 0, 165, 43, 92, 168, 93, 0, - 165, 172, 0, 165, 44, 92, 169, 93, 0, 165, - 53, 92, 170, 93, 0, 165, 8, 92, 171, 93, - 0, 165, 48, 92, 178, 93, 0, 165, 34, 92, - 179, 93, 0, 165, 59, 203, 92, 211, 93, 0, + 210, 210, 210, 210, 210, 210, 210, 210, 0, 83, + 90, 197, 144, 50, 90, 201, 91, 91, 0, 213, + 0, 144, 57, 203, 90, 211, 91, 0, 62, 90, + 146, 91, 0, 25, 90, 210, 210, 80, 90, 210, + 210, 210, 91, 91, 0, 25, 90, 210, 210, 210, + 80, 90, 210, 210, 210, 91, 91, 0, 0, 49, + 204, 148, 90, 162, 91, 0, 0, 73, 204, 150, + 90, 162, 91, 0, 0, 74, 204, 152, 90, 162, + 91, 0, 0, 48, 204, 154, 90, 162, 91, 0, + 0, 35, 204, 156, 90, 162, 91, 0, 0, 44, + 204, 158, 90, 164, 91, 0, 0, 43, 204, 160, + 90, 165, 91, 0, 213, 0, 161, 42, 90, 169, + 91, 0, 161, 51, 90, 170, 91, 0, 213, 0, + 0, 162, 16, 212, 90, 163, 161, 91, 0, 162, + 72, 90, 166, 91, 0, 162, 68, 90, 167, 91, + 0, 162, 41, 90, 168, 91, 0, 162, 172, 0, + 162, 42, 90, 169, 91, 0, 162, 51, 90, 170, + 91, 0, 162, 8, 90, 171, 91, 0, 162, 57, + 203, 90, 211, 91, 0, 213, 0, 164, 72, 90, + 166, 91, 0, 164, 68, 90, 167, 91, 0, 164, + 41, 90, 168, 91, 0, 164, 172, 0, 164, 42, + 90, 169, 91, 0, 164, 51, 90, 170, 91, 0, + 164, 8, 90, 171, 91, 0, 164, 46, 90, 173, + 91, 0, 164, 77, 90, 174, 91, 0, 164, 79, + 90, 175, 91, 0, 164, 159, 0, 164, 75, 90, + 176, 91, 0, 164, 57, 203, 90, 211, 91, 0, + 213, 0, 165, 72, 90, 166, 91, 0, 165, 68, + 90, 167, 91, 0, 165, 41, 90, 168, 91, 0, + 165, 172, 0, 165, 42, 90, 169, 91, 0, 165, + 51, 90, 170, 91, 0, 165, 8, 90, 171, 91, + 0, 165, 46, 90, 178, 91, 0, 165, 32, 90, + 179, 91, 0, 165, 57, 203, 90, 211, 91, 0, 199, 0, 203, 0, 200, 0, 210, 210, 210, 0, - 169, 20, 207, 92, 210, 210, 210, 93, 0, 169, - 20, 92, 207, 210, 210, 210, 93, 0, 210, 210, - 210, 210, 0, 170, 21, 207, 92, 210, 210, 210, - 210, 93, 0, 170, 21, 92, 207, 210, 210, 210, - 210, 93, 0, 212, 0, 85, 92, 197, 52, 92, - 201, 93, 93, 0, 212, 212, 0, 198, 0, 198, - 0, 213, 0, 176, 38, 92, 177, 93, 0, 213, - 0, 177, 159, 0, 212, 0, 198, 0, 0, 65, - 204, 181, 92, 184, 93, 0, 0, 12, 204, 183, - 92, 184, 93, 0, 213, 0, 184, 180, 0, 184, + 169, 20, 207, 90, 210, 210, 210, 91, 0, 169, + 20, 90, 207, 210, 210, 210, 91, 0, 210, 210, + 210, 210, 0, 170, 21, 207, 90, 210, 210, 210, + 210, 91, 0, 170, 21, 90, 207, 210, 210, 210, + 210, 91, 0, 212, 0, 83, 90, 197, 50, 90, + 201, 91, 91, 0, 212, 212, 0, 198, 0, 198, + 0, 213, 0, 176, 36, 90, 177, 91, 0, 213, + 0, 177, 159, 0, 212, 0, 198, 0, 0, 63, + 204, 181, 90, 184, 91, 0, 0, 12, 204, 183, + 90, 184, 91, 0, 213, 0, 184, 180, 0, 184, 182, 0, 184, 185, 0, 184, 188, 0, 184, 191, - 0, 0, 58, 204, 186, 92, 187, 93, 0, 213, - 0, 187, 59, 203, 92, 211, 93, 0, 187, 66, - 92, 198, 93, 0, 0, 86, 204, 189, 92, 190, - 93, 0, 213, 0, 190, 59, 203, 92, 211, 93, - 0, 190, 66, 92, 198, 93, 0, 0, 87, 204, - 192, 92, 193, 93, 0, 213, 0, 193, 59, 203, - 92, 211, 93, 0, 193, 185, 0, 0, 6, 204, - 195, 92, 196, 93, 0, 213, 0, 196, 59, 203, - 92, 211, 93, 0, 213, 0, 197, 212, 0, 213, + 0, 0, 56, 204, 186, 90, 187, 91, 0, 213, + 0, 187, 57, 203, 90, 211, 91, 0, 187, 64, + 90, 198, 91, 0, 0, 84, 204, 189, 90, 190, + 91, 0, 213, 0, 190, 57, 203, 90, 211, 91, + 0, 190, 64, 90, 198, 91, 0, 0, 85, 204, + 192, 90, 193, 91, 0, 213, 0, 193, 57, 203, + 90, 211, 91, 0, 193, 185, 0, 0, 6, 204, + 195, 90, 196, 91, 0, 213, 0, 196, 57, 203, + 90, 211, 91, 0, 213, 0, 197, 212, 0, 213, 0, 198, 210, 0, 203, 0, 203, 0, 203, 0, 203, 0, 213, 0, 207, 0, 206, 0, 213, 0, 207, 0, 213, 0, 207, 0, 3, 0, 4, 0, @@ -455,33 +458,33 @@ static const short yyrhs[] = { 88, #if YYDEBUG != 0 static const short yyrline[] = { 0, - 226, 228, 229, 230, 240, 242, 257, 259, 260, 261, - 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, - 272, 273, 274, 275, 285, 308, 322, 336, 350, 352, - 684, 694, 707, 721, 723, 817, 825, 844, 869, 884, - 886, 896, 901, 908, 933, 953, 958, 962, 966, 970, - 981, 985, 986, 987, 995, 1013, 1018, 1022, 1030, 1038, - 1046, 1054, 1062, 1079, 1084, 1092, 1109, 1114, 1122, 1139, - 1145, 1164, 1171, 1185, 1192, 1210, 1212, 1342, 1354, 1359, - 1366, 1372, 1385, 1392, 1405, 1411, 1417, 1423, 1428, 1434, - 1435, 1436, 1437, 1446, 1459, 1489, 1491, 1512, 1517, 1528, - 1530, 1531, 1532, 1533, 1534, 1535, 1536, 1537, 1538, 1539, - 1540, 1541, 1544, 1551, 1558, 1565, 1572, 1579, 1586, 1593, - 1600, 1607, 1614, 1618, 1620, 1631, 1635, 1637, 1658, 1691, - 1696, 1720, 1732, 1738, 1754, 1759, 1773, 1778, 1792, 1797, - 1811, 1816, 1830, 1835, 1849, 1854, 1868, 1873, 1888, 1890, - 1891, 1901, 1903, 1917, 1924, 1925, 1926, 1927, 1928, 1929, - 1930, 1931, 2003, 2005, 2006, 2007, 2008, 2009, 2010, 2011, - 2012, 2013, 2014, 2015, 2021, 2022, 2085, 2087, 2088, 2089, - 2090, 2091, 2092, 2093, 2094, 2095, 2096, 2164, 2181, 2221, - 2238, 2243, 2251, 2268, 2273, 2281, 2298, 2314, 2345, 2363, - 2383, 2403, 2409, 2419, 2426, 2444, 2460, 2481, 2488, 2504, - 2511, 2525, 2527, 2531, 2535, 2539, 2543, 2557, 2563, 2578, - 2580, 2592, 2605, 2611, 2626, 2628, 2645, 2658, 2664, 2679, - 2681, 2696, 2710, 2716, 2731, 2733, 2756, 2761, 2774, 2779, - 2792, 2813, 2834, 2859, 2880, 2886, 2897, 2909, 2915, 2925, - 2930, 2943, 2948, 2952, 2964, 2969, 2984, 2989, 3002, 3004, - 3018, 3025, 3031, 3047, 3056, 3062 + 230, 232, 233, 234, 244, 246, 261, 263, 264, 265, + 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, + 276, 277, 278, 279, 289, 312, 326, 340, 354, 356, + 688, 698, 711, 725, 727, 821, 829, 848, 873, 888, + 890, 900, 905, 912, 937, 957, 962, 966, 970, 974, + 985, 989, 990, 991, 999, 1017, 1022, 1026, 1034, 1042, + 1050, 1058, 1066, 1083, 1088, 1096, 1113, 1118, 1126, 1143, + 1149, 1168, 1175, 1189, 1196, 1214, 1216, 1346, 1358, 1363, + 1370, 1376, 1389, 1396, 1409, 1415, 1421, 1427, 1432, 1438, + 1439, 1440, 1441, 1442, 1451, 1464, 1494, 1496, 1517, 1523, + 1533, 1543, 1554, 1556, 1557, 1558, 1559, 1560, 1561, 1562, + 1563, 1564, 1565, 1566, 1567, 1570, 1577, 1584, 1591, 1598, + 1605, 1612, 1619, 1626, 1633, 1640, 1644, 1646, 1657, 1661, + 1663, 1684, 1717, 1722, 1746, 1758, 1764, 1780, 1785, 1799, + 1804, 1818, 1823, 1837, 1842, 1856, 1861, 1875, 1880, 1894, + 1899, 1914, 1916, 1917, 1927, 1929, 1943, 1950, 1951, 1952, + 1953, 1954, 1955, 1956, 1957, 2029, 2031, 2032, 2033, 2034, + 2035, 2036, 2037, 2038, 2039, 2040, 2041, 2047, 2048, 2111, + 2113, 2114, 2115, 2116, 2117, 2118, 2119, 2120, 2121, 2122, + 2190, 2207, 2247, 2264, 2269, 2277, 2294, 2299, 2307, 2324, + 2340, 2371, 2389, 2409, 2429, 2435, 2445, 2452, 2470, 2486, + 2507, 2514, 2530, 2537, 2551, 2553, 2557, 2561, 2565, 2569, + 2583, 2589, 2604, 2606, 2618, 2631, 2637, 2652, 2654, 2671, + 2684, 2690, 2705, 2707, 2722, 2736, 2742, 2757, 2759, 2782, + 2787, 2800, 2805, 2818, 2839, 2860, 2885, 2906, 2912, 2923, + 2935, 2941, 2951, 2956, 2969, 2974, 2978, 2990, 2995, 3010, + 3015, 3028, 3030, 3044, 3051, 3057, 3073, 3082, 3088 }; #endif @@ -492,65 +495,65 @@ static const char * const yytname[] = { "$","error","$undefined.","EGG_NUMBER" "EGG_ULONG","EGG_STRING","ANIMPRELOAD","BEZIERCURVE","BFACE","BILLBOARD","BILLBOARDCENTER", "BINORMAL","BUNDLE","CLOSED","COLLIDE","COMMENT","COMPONENT","COORDSYSTEM","CV", "DART","DNORMAL","DRGBA","DUV","DXYZ","DCS","DISTANCE","DTREF","DYNAMICVERTEXPOOL", -"EXTERNAL_FILE","FLIGHT","GROUP","HIP","INTANGENT","JOINT","KNOTS","INCLUDE", -"INSTANCE","LINE","LOOP","MATERIAL","MATRIX3","MATRIX4","MODEL","MREF","NORMAL", -"NURBSCURVE","NURBSSURFACE","OBJECTTYPE","ORDER","OUTTANGENT","POINTLIGHT","POLYGON", -"REF","RGBA","ROTATE","ROTX","ROTY","ROTZ","SANIM","SCALAR","SCALE","SEQUENCE", -"SHADING","SWITCH","SWITCHCONDITION","TABLE","TABLE_V","TAG","TANGENT","TEXLIST", -"TEXTURE","TLENGTHS","TRANSFORM","TRANSLATE","TREF","TRIANGLEFAN","TRIANGLESTRIP", -"TRIM","TXT","UKNOTS","UV","VKNOTS","VERTEX","VERTEXANIM","VERTEXPOOL","VERTEXREF", -"XFMANIM","XFMSANIM","START_EGG","START_GROUP_BODY","START_TEXTURE_BODY","START_PRIMITIVE_BODY", -"'{'","'}'","grammar","egg","node","coordsystem","comment","texture","@1","texture_body", +"EXTERNAL_FILE","GROUP","DEFAULTPOSE","JOINT","KNOTS","INCLUDE","INSTANCE","LINE", +"LOOP","MATERIAL","MATRIX3","MATRIX4","MODEL","MREF","NORMAL","NURBSCURVE","NURBSSURFACE", +"OBJECTTYPE","ORDER","OUTTANGENT","POINTLIGHT","POLYGON","REF","RGBA","ROTATE", +"ROTX","ROTY","ROTZ","SANIM","SCALAR","SCALE","SEQUENCE","SHADING","SWITCH", +"SWITCHCONDITION","TABLE","TABLE_V","TAG","TANGENT","TEXLIST","TEXTURE","TLENGTHS", +"TRANSFORM","TRANSLATE","TREF","TRIANGLEFAN","TRIANGLESTRIP","TRIM","TXT","UKNOTS", +"UV","VKNOTS","VERTEX","VERTEXANIM","VERTEXPOOL","VERTEXREF","XFMANIM","XFMSANIM", +"START_EGG","START_GROUP_BODY","START_TEXTURE_BODY","START_PRIMITIVE_BODY","'{'", +"'}'","grammar","egg","node","coordsystem","comment","texture","@1","texture_body", "material","@2","material_body","external_reference","vertex_pool","@3","vertex_pool_body", "vertex","@4","@5","vertex_body","@6","vertex_uv_body","vertex_normal_body", "vertex_color_body","group","@7","joint","@8","instance","@9","group_body","cs_type", -"collide_flags","transform","@10","transform_body","translate2d","translate3d", -"rotate2d","rotx","roty","rotz","rotate3d","scale2d","scale3d","uniform_scale", -"matrix3","matrix3_body","matrix4","matrix4_body","group_vertex_ref","group_vertex_membership", -"switchcondition","switchcondition_body","polygon","@11","trianglefan","@12", -"trianglestrip","@13","point_light","@14","line","@15","nurbs_surface","@16", -"nurbs_curve","@17","primitive_component_body","primitive_body","@18","nurbs_surface_body", -"nurbs_curve_body","primitive_tref_body","primitive_texture_body","primitive_material_body", -"primitive_normal_body","primitive_color_body","primitive_bface_body","primitive_vertex_ref", -"nurbs_surface_order_body","nurbs_surface_uknots_body","nurbs_surface_vknots_body", -"nurbs_surface_trim_body","nurbs_surface_trim_loop_body","nurbs_curve_order_body", -"nurbs_curve_knots_body","table","@19","bundle","@20","table_body","sanim","@21", -"sanim_body","xfmanim","@22","xfmanim_body","xfm_s_anim","@23","xfm_s_anim_body", -"anim_preload","@24","anim_preload_body","integer_list","real_list","texture_name", -"material_name","vertex_pool_name","group_name","required_name","optional_name", -"required_string","optional_string","string","repeated_string","repeated_string_body", -"real","real_or_string","integer","empty", NULL +"collide_flags","transform","@10","default_pose","@11","transform_body","translate2d", +"translate3d","rotate2d","rotx","roty","rotz","rotate3d","scale2d","scale3d", +"uniform_scale","matrix3","matrix3_body","matrix4","matrix4_body","group_vertex_ref", +"group_vertex_membership","switchcondition","switchcondition_body","polygon", +"@12","trianglefan","@13","trianglestrip","@14","point_light","@15","line","@16", +"nurbs_surface","@17","nurbs_curve","@18","primitive_component_body","primitive_body", +"@19","nurbs_surface_body","nurbs_curve_body","primitive_tref_body","primitive_texture_body", +"primitive_material_body","primitive_normal_body","primitive_color_body","primitive_bface_body", +"primitive_vertex_ref","nurbs_surface_order_body","nurbs_surface_uknots_body", +"nurbs_surface_vknots_body","nurbs_surface_trim_body","nurbs_surface_trim_loop_body", +"nurbs_curve_order_body","nurbs_curve_knots_body","table","@20","bundle","@21", +"table_body","sanim","@22","sanim_body","xfmanim","@23","xfmanim_body","xfm_s_anim", +"@24","xfm_s_anim_body","anim_preload","@25","anim_preload_body","integer_list", +"real_list","texture_name","material_name","vertex_pool_name","group_name","required_name", +"optional_name","required_string","optional_string","string","repeated_string", +"repeated_string_body","real","real_or_string","integer","empty", NULL }; #endif static const short yyr1[] = { 0, - 94, 94, 94, 94, 95, 95, 96, 96, 96, 96, - 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, - 96, 96, 96, 96, 97, 98, 100, 99, 101, 101, - 101, 103, 102, 104, 104, 105, 105, 107, 106, 108, - 108, 110, 109, 111, 109, 112, 112, 112, 112, 113, - 112, 112, 112, 112, 112, 114, 114, 114, 114, 114, - 114, 114, 114, 115, 115, 115, 116, 116, 116, 118, - 117, 120, 119, 122, 121, 123, 123, 123, 123, 123, - 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, - 123, 123, 123, 123, 124, 125, 125, 127, 126, 128, - 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 129, 130, 131, 132, 133, 134, 135, 136, - 137, 138, 139, 140, 140, 141, 142, 142, 143, 144, - 144, 145, 146, 146, 148, 147, 150, 149, 152, 151, - 154, 153, 156, 155, 158, 157, 160, 159, 161, 161, - 161, 162, 163, 162, 162, 162, 162, 162, 162, 162, - 162, 162, 164, 164, 164, 164, 164, 164, 164, 164, - 164, 164, 164, 164, 164, 164, 165, 165, 165, 165, - 165, 165, 165, 165, 165, 165, 165, 166, 167, 168, - 169, 169, 169, 170, 170, 170, 171, 172, 173, 174, - 175, 176, 176, 177, 177, 178, 179, 181, 180, 183, - 182, 184, 184, 184, 184, 184, 184, 186, 185, 187, - 187, 187, 189, 188, 190, 190, 190, 192, 191, 193, - 193, 193, 195, 194, 196, 196, 197, 197, 198, 198, - 199, 200, 201, 202, 203, 203, 204, 205, 205, 206, - 206, 207, 207, 207, 208, 208, 209, 209, 210, 210, - 211, 211, 211, 212, 212, 213 + 92, 92, 92, 92, 93, 93, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 95, 96, 98, 97, 99, 99, + 99, 101, 100, 102, 102, 103, 103, 105, 104, 106, + 106, 108, 107, 109, 107, 110, 110, 110, 110, 111, + 110, 110, 110, 110, 110, 112, 112, 112, 112, 112, + 112, 112, 112, 113, 113, 113, 114, 114, 114, 116, + 115, 118, 117, 120, 119, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 122, 123, 123, 125, 124, + 127, 126, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 129, 130, 131, 132, 133, + 134, 135, 136, 137, 138, 139, 140, 140, 141, 142, + 142, 143, 144, 144, 145, 146, 146, 148, 147, 150, + 149, 152, 151, 154, 153, 156, 155, 158, 157, 160, + 159, 161, 161, 161, 162, 163, 162, 162, 162, 162, + 162, 162, 162, 162, 162, 164, 164, 164, 164, 164, + 164, 164, 164, 164, 164, 164, 164, 164, 164, 165, + 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, + 166, 167, 168, 169, 169, 169, 170, 170, 170, 171, + 172, 173, 174, 175, 176, 176, 177, 177, 178, 179, + 181, 180, 183, 182, 184, 184, 184, 184, 184, 184, + 186, 185, 187, 187, 187, 189, 188, 190, 190, 190, + 192, 191, 193, 193, 193, 195, 194, 196, 196, 197, + 197, 198, 198, 199, 200, 201, 202, 203, 203, 204, + 205, 205, 206, 206, 207, 207, 207, 208, 208, 209, + 209, 210, 210, 211, 211, 211, 212, 212, 213 }; static const short yyr2[] = { 0, @@ -563,496 +566,512 @@ static const short yyr2[] = { 0, 8, 7, 8, 3, 8, 8, 4, 9, 9, 0, 6, 0, 6, 0, 6, 1, 6, 5, 7, 7, 5, 5, 5, 5, 5, 5, 5, 6, 5, 2, - 2, 2, 5, 2, 1, 1, 2, 0, 5, 1, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 5, 6, 4, 4, 4, 4, 7, 5, - 6, 4, 4, 1, 9, 4, 1, 16, 9, 1, - 6, 4, 11, 12, 0, 6, 0, 6, 0, 6, - 0, 6, 0, 6, 0, 6, 0, 6, 1, 5, - 5, 1, 0, 7, 5, 5, 5, 2, 5, 5, - 5, 6, 1, 5, 5, 5, 2, 5, 5, 5, - 5, 5, 5, 2, 5, 6, 1, 5, 5, 5, - 2, 5, 5, 5, 5, 5, 6, 1, 1, 1, - 3, 8, 8, 4, 9, 9, 1, 8, 2, 1, - 1, 1, 5, 1, 2, 1, 1, 0, 6, 0, - 6, 1, 2, 2, 2, 2, 2, 0, 6, 1, - 6, 5, 0, 6, 1, 6, 5, 0, 6, 1, - 6, 2, 0, 6, 1, 6, 1, 2, 1, 2, + 2, 2, 2, 5, 2, 1, 1, 2, 0, 5, + 0, 5, 1, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 5, 6, 4, 4, 4, + 4, 7, 5, 6, 4, 4, 1, 9, 4, 1, + 16, 9, 1, 6, 4, 11, 12, 0, 6, 0, + 6, 0, 6, 0, 6, 0, 6, 0, 6, 0, + 6, 1, 5, 5, 1, 0, 7, 5, 5, 5, + 2, 5, 5, 5, 6, 1, 5, 5, 5, 2, + 5, 5, 5, 5, 5, 5, 2, 5, 6, 1, + 5, 5, 5, 2, 5, 5, 5, 5, 5, 6, + 1, 1, 1, 3, 8, 8, 4, 9, 9, 1, + 8, 2, 1, 1, 1, 5, 1, 2, 1, 1, + 0, 6, 0, 6, 1, 2, 2, 2, 2, 2, + 0, 6, 1, 6, 5, 0, 6, 1, 6, 5, + 0, 6, 1, 6, 2, 0, 6, 1, 6, 1, + 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, - 1, 1, 1, 1, 1, 0 + 2, 1, 1, 1, 1, 1, 1, 1, 0 }; static const short yydefact[] = { 0, - 266, 266, 266, 266, 1, 5, 2, 76, 3, 29, - 4, 152, 252, 253, 254, 266, 266, 0, 266, 266, - 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, - 266, 266, 266, 6, 7, 8, 9, 10, 11, 12, + 269, 269, 269, 269, 1, 5, 2, 76, 3, 29, + 4, 155, 255, 256, 257, 269, 269, 0, 269, 269, + 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, + 269, 269, 269, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, - 23, 24, 0, 0, 0, 266, 0, 0, 0, 0, - 0, 266, 0, 0, 266, 0, 98, 0, 94, 90, - 91, 92, 266, 31, 0, 0, 0, 0, 0, 266, - 0, 0, 0, 158, 233, 247, 251, 250, 0, 266, - 0, 70, 72, 74, 143, 0, 246, 245, 147, 145, - 141, 135, 208, 0, 137, 139, 38, 266, 0, 0, - 0, 0, 0, 0, 266, 266, 0, 0, 0, 0, - 0, 0, 266, 0, 0, 264, 265, 0, 266, 0, - 0, 0, 266, 266, 266, 0, 266, 0, 249, 248, - 266, 0, 0, 0, 0, 32, 0, 0, 0, 0, - 0, 266, 0, 0, 0, 0, 0, 259, 260, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 244, 0, - 0, 0, 0, 266, 0, 266, 266, 237, 0, 0, - 197, 153, 0, 190, 242, 0, 0, 0, 0, 0, - 0, 189, 0, 188, 241, 0, 266, 257, 0, 256, - 255, 25, 0, 266, 266, 266, 266, 266, 266, 266, - 266, 266, 266, 27, 266, 266, 266, 266, 78, 0, - 266, 95, 84, 83, 82, 81, 87, 86, 93, 261, - 262, 263, 0, 85, 0, 132, 0, 89, 0, 100, - 0, 238, 130, 0, 161, 266, 157, 0, 159, 0, - 0, 160, 0, 0, 156, 155, 0, 0, 235, 26, - 258, 36, 0, 0, 0, 0, 0, 34, 0, 177, - 0, 163, 0, 0, 0, 212, 266, 0, 0, 0, - 40, 0, 0, 0, 96, 77, 0, 88, 0, 0, - 0, 0, 0, 0, 0, 0, 99, 101, 102, 103, - 104, 105, 106, 107, 108, 109, 110, 111, 112, 0, - 266, 30, 0, 149, 0, 0, 191, 0, 0, 0, - 162, 266, 266, 234, 71, 73, 75, 144, 266, 33, - 0, 0, 0, 0, 0, 0, 266, 0, 0, 148, - 181, 0, 0, 0, 0, 0, 266, 0, 0, 0, - 0, 0, 146, 174, 167, 142, 136, 266, 266, 266, - 266, 209, 213, 214, 215, 216, 217, 0, 138, 140, - 42, 39, 41, 37, 79, 80, 97, 0, 266, 266, - 0, 0, 0, 0, 0, 0, 266, 0, 0, 0, - 154, 0, 0, 0, 0, 194, 0, 243, 0, 0, - 0, 266, 266, 0, 0, 0, 0, 266, 266, 0, - 266, 0, 0, 0, 0, 266, 266, 266, 266, 266, - 210, 218, 223, 228, 28, 0, 44, 0, 0, 0, - 0, 124, 0, 0, 127, 0, 0, 0, 0, 0, + 23, 24, 0, 0, 0, 269, 0, 0, 101, 0, + 0, 0, 269, 0, 0, 269, 0, 99, 0, 95, + 90, 91, 92, 93, 269, 31, 0, 0, 0, 0, + 0, 269, 0, 0, 0, 161, 236, 250, 254, 253, + 0, 269, 0, 70, 72, 74, 146, 0, 249, 248, + 150, 148, 144, 138, 211, 0, 140, 142, 38, 269, + 0, 0, 0, 0, 0, 0, 0, 269, 269, 0, + 0, 0, 0, 0, 0, 269, 0, 0, 267, 268, + 0, 269, 0, 0, 0, 269, 269, 269, 0, 269, + 0, 252, 251, 269, 0, 0, 0, 0, 32, 0, + 0, 0, 0, 0, 269, 0, 0, 0, 0, 0, + 262, 263, 0, 0, 0, 0, 0, 0, 269, 0, + 0, 0, 247, 0, 0, 0, 0, 269, 0, 269, + 269, 240, 0, 0, 200, 156, 0, 193, 245, 0, + 0, 0, 0, 0, 0, 192, 0, 191, 244, 0, + 269, 260, 0, 259, 258, 25, 0, 269, 269, 269, + 269, 269, 269, 269, 269, 269, 269, 27, 269, 269, + 269, 269, 78, 0, 269, 96, 84, 83, 82, 81, + 0, 103, 87, 86, 94, 264, 265, 266, 0, 85, + 0, 135, 0, 89, 0, 0, 241, 133, 0, 164, + 269, 160, 0, 162, 0, 0, 163, 0, 0, 159, + 158, 0, 0, 238, 26, 261, 36, 0, 0, 0, + 0, 0, 34, 0, 180, 0, 166, 0, 0, 0, + 215, 269, 0, 0, 0, 40, 0, 0, 0, 97, + 0, 0, 0, 0, 0, 0, 0, 0, 102, 104, + 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, + 115, 77, 0, 88, 100, 0, 269, 30, 0, 152, + 0, 0, 194, 0, 0, 0, 165, 269, 269, 237, + 71, 73, 75, 147, 269, 33, 0, 0, 0, 0, + 0, 0, 269, 0, 0, 151, 184, 0, 0, 0, + 0, 0, 269, 0, 0, 0, 0, 0, 149, 177, + 170, 145, 139, 269, 269, 269, 269, 212, 216, 217, + 218, 219, 220, 0, 141, 143, 42, 39, 41, 37, + 79, 80, 98, 269, 269, 0, 0, 0, 0, 0, + 0, 0, 269, 0, 0, 0, 157, 0, 0, 0, + 0, 197, 0, 246, 0, 0, 0, 269, 269, 0, + 0, 0, 0, 269, 269, 0, 269, 0, 0, 0, + 0, 269, 269, 269, 269, 269, 213, 221, 226, 231, + 28, 0, 44, 0, 0, 127, 0, 0, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 207, 239, 0, 0, 0, 206, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 202, 0, 200, 0, 201, 0, - 0, 0, 0, 0, 0, 0, 0, 123, 0, 126, - 0, 115, 0, 116, 117, 118, 122, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 198, 0, 0, - 184, 186, 240, 180, 182, 185, 183, 0, 179, 178, - 170, 166, 168, 171, 199, 169, 0, 165, 164, 0, - 175, 172, 173, 266, 266, 266, 266, 0, 46, 0, - 0, 0, 0, 0, 0, 120, 0, 113, 0, 129, - 131, 150, 151, 0, 0, 0, 0, 236, 35, 187, - 176, 266, 0, 0, 220, 0, 225, 0, 230, 0, - 0, 0, 266, 43, 47, 0, 0, 0, 0, 0, - 0, 121, 114, 193, 192, 0, 0, 0, 204, 211, - 266, 0, 219, 266, 0, 224, 266, 229, 232, 0, - 0, 0, 0, 0, 48, 45, 0, 0, 0, 0, - 119, 196, 195, 203, 205, 0, 266, 0, 266, 0, - 0, 0, 0, 0, 0, 0, 50, 49, 0, 0, + 210, 242, 0, 0, 0, 209, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 52, 0, 0, 53, 0, 0, 133, 0, 0, 0, - 0, 222, 0, 227, 0, 0, 0, 0, 0, 64, - 0, 0, 0, 0, 0, 134, 0, 0, 221, 226, - 231, 0, 0, 0, 0, 0, 0, 67, 0, 0, - 0, 51, 56, 125, 0, 55, 54, 0, 0, 0, - 0, 0, 0, 0, 0, 57, 0, 0, 0, 0, + 205, 0, 203, 0, 204, 0, 0, 0, 0, 0, + 0, 126, 0, 129, 0, 118, 0, 119, 120, 121, + 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 201, 0, 0, 187, 189, 243, 183, + 185, 188, 186, 0, 182, 181, 173, 169, 171, 174, + 202, 172, 0, 168, 167, 0, 178, 175, 176, 269, + 269, 269, 269, 0, 46, 0, 0, 0, 0, 123, + 0, 116, 0, 0, 0, 132, 134, 153, 154, 0, + 0, 0, 0, 239, 35, 190, 179, 269, 0, 0, + 223, 0, 228, 0, 233, 0, 0, 0, 269, 43, + 47, 0, 0, 0, 0, 124, 117, 0, 0, 196, + 195, 0, 0, 0, 207, 214, 269, 0, 222, 269, + 0, 227, 269, 232, 235, 0, 0, 0, 0, 0, + 48, 45, 0, 0, 122, 0, 0, 199, 198, 206, + 208, 0, 269, 0, 269, 0, 0, 0, 0, 0, + 0, 0, 50, 49, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 52, 0, 0, 53, + 0, 0, 0, 0, 136, 0, 0, 225, 0, 230, + 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, + 0, 0, 0, 137, 224, 229, 234, 0, 0, 0, + 0, 0, 0, 67, 0, 0, 0, 51, 56, 128, + 0, 55, 54, 0, 0, 0, 0, 0, 0, 0, + 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 66, 65, 0, 0, 0, - 0, 0, 0, 0, 69, 68, 59, 62, 0, 60, - 0, 58, 0, 63, 61, 0, 128, 0, 0, 0 + 0, 66, 65, 0, 0, 0, 0, 0, 0, 0, + 69, 68, 59, 62, 0, 60, 0, 58, 0, 63, + 61, 0, 131, 0, 0, 0 }; -static const short yydefgoto[] = { 738, - 5, 69, 35, 36, 37, 277, 9, 38, 208, 267, - 39, 40, 155, 280, 373, 426, 485, 538, 646, 664, - 623, 625, 41, 142, 42, 143, 43, 144, 7, 221, - 284, 70, 122, 239, 298, 299, 300, 301, 302, 303, - 304, 305, 306, 307, 308, 430, 309, 433, 71, 241, - 72, 173, 44, 150, 45, 153, 46, 154, 47, 149, - 48, 145, 49, 148, 50, 147, 313, 11, 246, 271, - 269, 193, 191, 183, 186, 188, 180, 84, 468, 476, - 478, 474, 588, 459, 454, 51, 151, 364, 480, 275, - 365, 481, 564, 366, 482, 566, 367, 483, 568, 52, - 136, 258, 177, 455, 194, 184, 397, 168, 185, 85, - 138, 86, 97, 199, 200, 513, 233, 181, 98 +static const short yydefgoto[] = { 744, + 5, 70, 35, 36, 37, 282, 9, 38, 212, 272, + 39, 40, 158, 285, 379, 432, 491, 544, 652, 670, + 629, 631, 41, 145, 42, 146, 43, 147, 7, 225, + 289, 71, 125, 72, 116, 231, 300, 301, 302, 303, + 304, 305, 306, 307, 308, 309, 310, 434, 311, 437, + 73, 246, 74, 177, 44, 153, 45, 156, 46, 157, + 47, 152, 48, 148, 49, 151, 50, 150, 319, 11, + 251, 276, 274, 197, 195, 187, 190, 192, 184, 86, + 474, 482, 484, 480, 594, 465, 460, 51, 154, 370, + 486, 280, 371, 487, 570, 372, 488, 572, 373, 489, + 574, 52, 139, 263, 181, 461, 198, 188, 403, 172, + 189, 87, 141, 88, 99, 203, 204, 519, 239, 185, + 100 }; -static const short yypact[] = { 199, --32768,-32768,-32768,-32768, 1246,-32768, 1172,-32768, 162,-32768, - 556,-32768,-32768,-32768,-32768, 311, 311, -89, 311, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 311, 311, 311,-32768,-32768,-32768,-32768,-32768,-32768,-32768, +static const short yypact[] = { 166, +-32768,-32768,-32768,-32768, 1039,-32768, 1363,-32768, 73,-32768, + 284,-32768,-32768,-32768,-32768, 253, 253, -65, 253, 253, + 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, + 253, 253, 253,-32768,-32768,-32768,-32768,-32768,-32768,-32768, -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, --32768,-32768, -20, -38, -37, 311, -28, 2, 8, 20, - 58, 311, 82, 87, 311, 96,-32768, 101,-32768,-32768, --32768,-32768, 311,-32768, 115, 131, 135, 148, 174, 311, - 180, 191, 192,-32768,-32768,-32768,-32768,-32768, 200, 311, - 207,-32768,-32768,-32768,-32768, 208,-32768,-32768,-32768,-32768, --32768,-32768,-32768, 213,-32768,-32768,-32768, 311, 311, 250, - 217, 320, 360, 131, 311, 311, 225, 131, 104, 234, - 131, 235,-32768, 242, 131,-32768,-32768, 243, 311, 250, - 250, 245, 311, 311,-32768, 255, 311, 64,-32768,-32768, - 311, 257, 258, 267, 274,-32768, 275, 277, 287, 289, - 297, 311, 303, 304, 305, 307, 69,-32768,-32768, 250, - 311, 204, 215, 308, 309, 310, 312, 313,-32768, 381, - 316, 318, 319, 311, 321,-32768, 131,-32768, 381, 323, --32768,-32768, 325,-32768,-32768, -7, 250, 4, 250, 381, - 335,-32768, 337,-32768,-32768, 145,-32768,-32768, 338, 311, --32768,-32768, 339,-32768,-32768,-32768,-32768,-32768,-32768,-32768, --32768,-32768,-32768,-32768,-32768,-32768,-32768, 311,-32768, 250, +-32768,-32768, 1, -55, 37, 253, 39, 104,-32768, 118, + 123, 136, 253, 148, 154, 253, 191,-32768, 195,-32768, +-32768,-32768,-32768,-32768, 253,-32768, 197, 243, 206, 208, + 209, 253, 213, 214, 216,-32768,-32768,-32768,-32768,-32768, + 217, 253, 241,-32768,-32768,-32768,-32768, 242,-32768,-32768, +-32768,-32768,-32768,-32768,-32768, 244,-32768,-32768,-32768, 253, + 253, 287, 246, 306, 310, 248, 243, 253, 253, 249, + 243, 120, 250, 243, 254,-32768, 256, 243,-32768,-32768, + 257, 253, 287, 287, 258, 253, 253,-32768, 259, 253, + 19,-32768,-32768, 253, 261, 263, 264, 265,-32768, 267, + 268, 273, 274, 275, 253, 278, 279, 282, 283, 45, +-32768,-32768, 287, 253, 63, 74, 140, 144,-32768, 149, + 252, 288,-32768, 319, 290, 292, 293, 253, 294,-32768, + 243,-32768, 319, 296,-32768,-32768, 307,-32768,-32768, 27, + 287, -11, 287, 319, 308,-32768, 309,-32768,-32768, 111, +-32768,-32768, 316, 253,-32768,-32768, 317,-32768,-32768,-32768, -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, --32768,-32768, 346,-32768, 250,-32768, 347,-32768, 496,-32768, - 216,-32768,-32768, 348,-32768,-32768,-32768, 102,-32768, 250, - 111,-32768, 250, 355,-32768,-32768, 357, 29,-32768,-32768, --32768,-32768, 172, 799, 984, 399, 157,-32768, 298,-32768, - 259,-32768, 421, 851, 187,-32768,-32768, 1002, 1057, 156, --32768, 358, 363, 28,-32768,-32768, 250,-32768, 369, 370, - 371, 374, 378, 379, 384, 386,-32768,-32768,-32768,-32768, --32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 387, - 311,-32768, 117,-32768, 311, 391,-32768, 311, 401, 250, --32768, 311, 311,-32768,-32768,-32768,-32768,-32768, 311,-32768, - 402, 404, 405, 406, 407, 410, 311, 412, 416,-32768, --32768, 417, 418, 419, 420, 423, 311, 424, 425, 426, - 427, 428,-32768,-32768,-32768,-32768,-32768, 311, 311, 311, - 311,-32768,-32768,-32768,-32768,-32768,-32768, 0,-32768,-32768, - 131,-32768,-32768,-32768,-32768,-32768,-32768, 98, 250, 250, - 250, 250, 250, 250, 250, 250, 311, 429, 430, 431, --32768, 250, 250, 250, 250,-32768, 433,-32768, 432, 439, - 131,-32768, 311, 250, 131, 250, 441, 311, 311, 131, - 311, 250, 131, 250, 446, 311, 311,-32768,-32768,-32768, --32768,-32768,-32768,-32768,-32768, 449,-32768, 450, 288, 451, - 250,-32768, 456, 250,-32768, 6, 461, 462, 464, 25, - 250, 465, 381, 250, 250, 250, 250, 250, 250, 466, - 381, 381, 467, 468, 250,-32768, 469, -1, 470,-32768, - 53, 381, 473, 474, 477, 478, 30, 480, 131, 66, - 381, 481, 482, 3,-32768, 483, 250, 484, 250, 486, - 487, 495, 499, 250, 500, 250, 501,-32768, 250,-32768, - 250,-32768, 250,-32768,-32768,-32768,-32768, 59, 62, 503, - 508, 37, 90, 250, 250, 250, 250,-32768, 509, 510, --32768,-32768,-32768,-32768,-32768,-32768,-32768, 511,-32768,-32768, --32768,-32768,-32768,-32768,-32768,-32768, 512,-32768,-32768, 502, --32768,-32768,-32768,-32768,-32768,-32768,-32768, 278, 250, 250, - 250, 250, 250, 250, 250,-32768, 513,-32768, 514,-32768, --32768,-32768,-32768, 515, 517, 250, 250,-32768,-32768,-32768, --32768,-32768, 442, 203,-32768, 205,-32768, 105,-32768, 123, - 519, 520, 311,-32768, 250, 364, 250, 250, 250, 250, - 521,-32768,-32768,-32768,-32768, 524, 529, -10,-32768,-32768, - 311, 531,-32768, 311, 532,-32768, 311,-32768,-32768, 311, - 533, 250, 250, 535, 250,-32768, 536, 250, 250, 250, --32768,-32768,-32768,-32768,-32768, 539,-32768, 540,-32768, 541, - 250, 250, 60, 250, 99, 250,-32768,-32768, 543, 544, - 250, 250, 381, 65, 381, 67, 381, 250, 250, 134, --32768, 250, 137,-32768, 250, 250,-32768, 546, 250, 250, - 547,-32768, 554,-32768, 559, 250, 250, 311, 542,-32768, - 311, 562, 250, 97, 250,-32768, 250, 250,-32768,-32768, --32768, 564, 565, 250, 250, 250, 250,-32768, 563, 140, - 567,-32768, 250,-32768, 250,-32768,-32768, 250, 250, 250, - 250, 250, 311, 568, 250,-32768, 250, 250, 250, 250, - 250, 250, 250, 250, 250, 250, 571, 573, 250, 250, - 250, 250, 250, 250, 250,-32768,-32768, 575, 576, 577, - 73, 75, 578, 250,-32768,-32768,-32768,-32768, 581,-32768, - 583,-32768, 250,-32768,-32768, 250,-32768, 400, 411,-32768 +-32768, 253,-32768, 287,-32768,-32768,-32768,-32768,-32768,-32768, + 556,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 318,-32768, + 287,-32768, 320,-32768, 757, 162,-32768,-32768, 322,-32768, +-32768,-32768, 79,-32768, 287, 85,-32768, 287, 324,-32768, +-32768, 327, 92,-32768,-32768,-32768,-32768, 958, 1147, 1280, + 329, 143,-32768, 229,-32768, 150,-32768, 419, 421, 158, +-32768,-32768, 731, 736, 43,-32768, 328, 330, 53,-32768, + 333, 335, 336, 338, 340, 341, 342, 343,-32768,-32768, +-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, +-32768,-32768, 287,-32768,-32768, 344, 253,-32768, 77,-32768, + 253, 346,-32768, 253, 348, 287,-32768, 253, 253,-32768, +-32768,-32768,-32768,-32768, 253,-32768, 350, 351, 353, 355, + 356, 357, 253, 360, 361,-32768,-32768, 362, 363, 375, + 377, 379, 253, 381, 383, 384, 385, 387,-32768,-32768, +-32768,-32768,-32768, 253, 253, 253, 253,-32768,-32768,-32768, +-32768,-32768,-32768, 133,-32768,-32768, 243,-32768,-32768,-32768, +-32768,-32768,-32768, 287, 287, 287, 287, 287, 287, 287, + 287, 46, 253, 389, 390, 391,-32768, 287, 287, 287, + 287,-32768, 392,-32768, 394, 395, 243,-32768, 253, 287, + 243, 287, 396, 253, 253, 243, 253, 287, 243, 287, + 398, 253, 253,-32768,-32768,-32768,-32768,-32768,-32768,-32768, +-32768, 400,-32768, 401, 287,-32768, 404, 287,-32768, 50, + 405, 407, 409, 56, 287, 413, 96, 414, 319, 287, + 287, 287, 287, 287, 287, 418, 319, 319, 420, 422, + 287,-32768, 427, 42, 428,-32768, 20, 319, 429, 430, + 431, 432, 51, 433, 243, 55, 319, 434, 435, 72, +-32768, 436, 287, 437, 287, 439, 440, 441, 442, 287, + 443,-32768, 287,-32768, 287,-32768, 287,-32768,-32768,-32768, +-32768, 60, 62, 287, 444, 445, 446, 66, 64, 287, + 287, 287, 287,-32768, 448, 449,-32768,-32768,-32768,-32768, +-32768,-32768,-32768, 450,-32768,-32768,-32768,-32768,-32768,-32768, +-32768,-32768, 451,-32768,-32768, 453,-32768,-32768,-32768,-32768, +-32768,-32768,-32768, 188, 287, 287, 287, 287, 287,-32768, + 454,-32768, 455, 287, 287,-32768,-32768,-32768,-32768, 457, + 463, 287, 287,-32768,-32768,-32768,-32768,-32768, 204, 141, +-32768, 145,-32768, 129,-32768, 88, 465, 466, 253,-32768, + 287, 227, 287, 287, 469,-32768,-32768, 287, 287,-32768, +-32768, 470, 471, 61,-32768,-32768, 253, 467,-32768, 253, + 473,-32768, 253,-32768,-32768, 253, 474, 287, 287, 475, + 287,-32768, 287, 287,-32768, 477, 287,-32768,-32768,-32768, +-32768, 479,-32768, 480,-32768, 482, 287, 287, 83, 287, + 86, 287,-32768,-32768, 287, 287, 484, 485, 319, 65, + 319, 69, 319, 287, 287, 91,-32768, 287, 94,-32768, + 287, 287, 287, 287,-32768, 487, 488,-32768, 489,-32768, + 490, 287, 287, 253, 483,-32768, 253, 492, 287, 98, + 287, 287, 287,-32768,-32768,-32768,-32768, 493, 495, 287, + 287, 287, 287,-32768, 501, 97, 507,-32768, 287,-32768, + 287,-32768,-32768, 287, 287, 287, 287, 287, 253, 508, + 287,-32768, 287, 287, 287, 287, 287, 287, 287, 287, + 287, 287, 509, 511, 287, 287, 287, 287, 287, 287, + 287,-32768,-32768, 512, 513, 515, 71, 75, 516, 287, +-32768,-32768,-32768,-32768, 525,-32768, 528,-32768, 287,-32768, +-32768, 287,-32768, 182, 374,-32768 }; static const short yypgoto[] = {-32768, --32768, 408,-32768,-32768,-32768,-32768, 127,-32768,-32768,-32768, --32768,-32768,-32768,-32768,-32768,-32768,-32768, -90,-32768,-32768, --32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 188,-32768, --32768, -8,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, +-32768, 378,-32768,-32768,-32768,-32768, 128,-32768,-32768,-32768, +-32768,-32768,-32768,-32768,-32768,-32768,-32768, -213,-32768,-32768, +-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 119,-32768, +-32768, -8,-32768,-32768,-32768, 238,-32768,-32768,-32768,-32768, -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, --32768,-32768,-32768,-32768, -267,-32768,-32768, 70,-32768,-32768, --32768, -300, -183, -133, -149, -194, -349, 74,-32768,-32768, --32768,-32768,-32768,-32768,-32768, -270,-32768,-32768,-32768, -21, - -25,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, --32768,-32768, 453, -413,-32768,-32768, 226,-32768, 51, 17, - -85,-32768, -5, 454,-32768, 41, -132, -23, 765 +-32768,-32768,-32768,-32768,-32768,-32768, -273,-32768,-32768, 57, +-32768,-32768,-32768, -298, -234, -194, -278, -241, -403, -152, +-32768,-32768,-32768,-32768,-32768,-32768,-32768, -275,-32768,-32768, +-32768, -58, -39,-32768,-32768,-32768,-32768,-32768,-32768,-32768, +-32768,-32768,-32768,-32768, 461, -419,-32768,-32768, 190,-32768, + 514, 11, -74,-32768, -5, 447,-32768, 4, -175, -69, + 734 }; -#define YYLAST 1384 +#define YYLAST 1446 static const short yytable[] = { 53, - 74, 53, 90, 354, 363, 477, 479, 108, 158, 159, - 87, 87, 248, 87, 87, 87, 87, 87, 248, 87, - 87, 87, 87, 87, 251, 87, 87, 158, 159, 167, - 13, 14, 15, 89, 25, 91, 92, 93, 94, 95, - 530, 99, 100, 101, 102, 103, 244, 105, 106, 248, - 87, 453, 128, 109, 110, 203, 248, 254, 73, 87, - 465, 158, 159, 112, 158, 159, 214, 158, 159, 158, - 159, 67, 111, 251, 96, 158, 159, 158, 159, 640, - 104, 120, 614, 107, 139, 249, 251, 323, 163, 165, - 166, 515, 425, 113, 171, 531, 252, 175, 492, 114, - 158, 159, 87, 157, 13, 14, 15, 679, 464, 139, - 251, 115, 117, 13, 14, 15, 473, 497, 680, 643, - 376, 324, 523, 124, 156, 13, 14, 15, 172, 552, - 132, 198, 282, 126, 127, 139, 13, 14, 15, 13, - 14, 15, 13, 14, 15, 517, 139, 126, 127, 116, - 160, 546, 641, 242, 548, 222, 202, 652, 526, 654, - 389, 219, 359, 597, 681, 728, 169, 730, 198, 390, - 187, 189, 242, 118, 13, 14, 15, 16, 119, 428, - 54, 55, 553, 192, 195, 56, 17, 121, 18, 682, - 57, 644, 123, 315, 261, 58, 257, 598, 358, 19, - 220, 20, 318, 634, 21, 636, 125, 22, 23, 391, - 24, 461, 139, 59, 600, 329, 25, 26, 60, 470, - 73, 27, 28, 61, 463, 658, 129, 250, 661, 253, - 62, 693, 472, 67, 63, 64, 29, 371, 65, 130, - 66, 30, 316, 67, 359, 319, 31, 32, 372, 330, - 503, 29, 158, 159, 458, 33, 68, 53, 53, 53, - 283, 591, 467, 594, 325, 131, 342, 310, 592, 457, - 595, 133, 360, 361, 311, 287, 266, 466, 377, 362, - 273, 274, 134, 135, 278, 279, 1, 2, 3, 4, - 317, 137, 363, 320, 502, 593, 223, 596, 141, 146, - 570, 343, 344, 25, 152, 331, 345, 224, 161, 392, - 501, 346, 394, 13, 14, 15, 170, 347, 509, 510, - 615, 571, 126, 127, 162, 174, 176, 378, 348, 518, - 572, 332, 349, 179, 182, 350, 190, 351, 527, 352, - 333, 334, 341, 83, 355, 335, 197, 427, 204, 205, - 336, 353, 87, 87, 87, 87, 337, 573, 206, 74, - 396, 388, 126, 127, 164, 207, 209, 338, 210, 487, - 574, 339, 398, 399, 421, 422, 423, 424, 211, 400, - 212, 460, 83, 230, 231, 232, 570, 407, 213, 469, - 340, 263, 264, 265, 215, 216, 217, 415, 218, 739, - 225, 226, 227, 368, 228, 229, 75, 571, 234, 235, - 740, 236, 34, 238, 76, 245, 572, 247, 429, 431, - 434, 436, 437, 438, 439, 440, 441, 255, 75, 256, - 260, 262, 446, 447, 448, 449, 76, 398, 286, 288, - 312, 77, 78, 573, 187, 525, 189, 321, 322, 576, - 374, 79, 187, 358, 189, 375, 606, 80, 192, 195, - 379, 380, 381, 77, 78, 382, 192, 195, 81, 383, - 384, 489, 82, 79, 491, 385, 493, 386, 387, 80, - 498, 499, 393, 83, 187, 189, 504, 505, 506, 507, - 81, 328, 395, 401, 82, 402, 403, 404, 405, 359, - 651, 406, 653, 408, 655, 83, 29, 409, 410, 411, - 412, 413, 563, 356, 414, 416, 417, 418, 419, 420, - 443, 444, 445, 451, 539, 450, 541, 360, 361, 543, - 452, 544, 462, 545, 590, 289, 290, 471, 547, 549, - 484, 486, 599, 488, 554, 555, 556, 557, 490, 291, - 292, 293, 294, 494, 495, 295, 496, 500, 508, 511, - 512, 514, 516, 75, 601, 519, 520, 87, 296, 521, - 522, 76, 524, 528, 529, 532, 533, 534, 535, 575, - 539, 577, 578, 579, 580, 581, 536, 196, 297, 604, - 537, 540, 542, 562, 621, 550, 586, 587, 77, 78, - 551, 558, 559, 560, 561, 582, 583, 584, 79, 585, - 602, 603, 442, 611, 80, 605, 612, 607, 608, 609, - 610, 613, 617, 619, 622, 81, 627, 237, 629, 82, - 633, 635, 637, 675, 659, 647, 648, 662, 666, 669, - 83, 616, 624, 626, 618, 628, 670, 620, 630, 631, - 632, 671, 674, 677, 692, 676, 686, 687, 695, 704, - 0, 638, 639, 716, 642, 717, 645, 725, 726, 727, - 732, 649, 650, 734, 694, 735, 0, 0, 656, 657, - 0, 0, 660, 0, 0, 663, 665, 703, 0, 667, - 668, 0, 0, 0, 0, 0, 672, 673, 0, 0, - 0, 0, 0, 678, 0, 683, 0, 684, 685, 0, - 0, 0, 0, 0, 688, 689, 690, 691, 0, 0, - 0, 0, 0, 696, 0, 697, 0, 0, 698, 699, - 700, 701, 702, 0, 0, 705, 0, 706, 707, 708, - 709, 710, 711, 712, 713, 714, 715, 0, 0, 718, - 719, 720, 721, 722, 723, 724, 0, 0, 0, 0, - 0, 729, 731, 0, 733, 6, 8, 10, 12, 0, - 0, 0, 0, 736, 0, 0, 737, 0, 0, 0, - 88, 88, 0, 88, 88, 88, 88, 88, 0, 88, - 88, 88, 88, 88, 0, 88, 88, 0, 0, 0, - 0, 13, 14, 15, 16, 0, 0, 54, 55, 0, - 0, 0, 56, 17, 0, 18, 0, 57, 0, 0, - 88, 0, 58, 0, 0, 0, 19, 0, 20, 88, - 0, 21, 0, 0, 22, 23, 0, 24, 0, 0, - 59, 0, 0, 25, 26, 60, 0, 0, 27, 28, - 61, 0, 0, 0, 140, 0, 0, 62, 75, 0, - 0, 63, 64, 29, 0, 65, 76, 66, 30, 0, - 67, 0, 88, 31, 32, 0, 0, 0, 0, 140, - 0, 0, 33, 68, 0, 0, 0, 178, 0, 0, - 0, 326, 0, 77, 78, 0, 0, 0, 0, 178, - 0, 201, 0, 79, 0, 140, 0, 0, 0, 80, - 0, 0, 0, 0, 0, 0, 140, 0, 0, 0, - 81, 0, 0, 0, 82, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 83, 0, 0, 201, 0, - 240, 243, 0, 357, 0, 0, 0, 0, 0, 0, + 76, 53, 360, 459, 369, 483, 485, 249, 131, 256, + 89, 89, 471, 89, 89, 89, 89, 89, 259, 89, + 89, 89, 89, 89, 92, 89, 89, 91, 110, 93, + 94, 95, 96, 97, 111, 101, 102, 103, 104, 105, + 256, 107, 108, 171, 166, 168, 253, 170, 161, 162, + 89, 175, 161, 162, 179, 13, 14, 15, 161, 162, + 89, 253, 161, 162, 161, 162, 113, 161, 162, 207, + 253, 161, 162, 161, 162, 256, 123, 161, 162, 257, + 218, 13, 14, 15, 256, 253, 142, 13, 14, 15, + 13, 14, 15, 13, 14, 15, 13, 14, 15, 13, + 14, 15, 646, 25, 89, 160, 649, 536, 685, 206, + 523, 247, 142, 129, 130, 163, 470, 254, 395, 686, + 159, 347, 377, 361, 479, 446, 112, 396, 114, 75, + 247, 464, 521, 378, 202, 223, 191, 193, 142, 473, + 496, 529, 68, 382, 176, 532, 501, 287, 329, 142, + 550, 620, 552, 227, 559, 658, 558, 348, 226, 660, + 262, 734, 537, 687, 228, 736, 224, 397, 321, 364, + 467, 508, 202, 647, 324, 505, 650, 606, 476, 469, + 664, 745, 330, 667, 365, 603, 699, 478, 688, 75, + 349, 350, 25, 115, 255, 351, 258, 597, 266, 335, + 352, 600, 68, 640, 598, 642, 353, 117, 601, 509, + 576, 316, 118, 365, 463, 364, 142, 354, 317, 604, + 29, 355, 472, 431, 356, 119, 357, 288, 358, 577, + 229, 599, 85, 336, 230, 602, 337, 121, 578, 233, + 359, 366, 367, 122, 313, 129, 130, 322, 368, 576, + 325, 1, 2, 3, 4, 13, 14, 15, 323, 365, + 338, 326, 53, 53, 53, 579, 29, 271, 577, 339, + 340, 278, 279, 507, 341, 283, 284, 578, 580, 342, + 124, 515, 516, 383, 126, 343, 128, 366, 367, 161, + 162, 77, 524, 369, 596, 132, 344, 133, 134, 78, + 345, 533, 136, 137, 579, 138, 140, 433, 129, 130, + 165, 85, 129, 130, 167, 398, 392, 612, 400, 346, + 621, 236, 237, 238, 79, 80, 268, 269, 270, 402, + 144, 149, 582, 155, 81, 164, 77, 169, 174, 178, + 82, 466, 234, 180, 78, 183, 186, 194, 201, 475, + 208, 83, 209, 210, 211, 84, 213, 214, 89, 89, + 89, 89, 215, 216, 217, 76, 85, 219, 220, 79, + 80, 221, 222, 746, 427, 428, 429, 430, 235, 81, + 240, 241, 34, 242, 244, 82, 250, 435, 438, 440, + 441, 442, 443, 444, 445, 447, 83, 252, 260, 261, + 84, 452, 453, 454, 455, 531, 265, 267, 312, 374, + 314, 85, 318, 191, 327, 193, 328, 245, 380, 334, + 381, 191, 384, 193, 385, 386, 77, 387, 77, 388, + 389, 390, 391, 393, 78, 399, 78, 401, 493, 407, + 408, 495, 409, 497, 410, 411, 412, 502, 503, 414, + 415, 416, 417, 191, 193, 510, 511, 512, 513, 79, + 80, 79, 80, 657, 418, 659, 419, 661, 420, 81, + 422, 81, 423, 424, 425, 82, 426, 82, 449, 450, + 451, 569, 456, 457, 458, 468, 83, 477, 83, 490, + 84, 492, 84, 545, 494, 498, 547, 499, 548, 500, + 549, 85, 504, 85, 506, 551, 553, 554, 514, 362, + 517, 363, 518, 560, 561, 562, 563, 520, 522, 525, + 526, 527, 528, 530, 534, 535, 538, 539, 540, 541, + 542, 543, 546, 555, 605, 556, 557, 98, 564, 565, + 566, 567, 568, 106, 586, 587, 109, 590, 581, 545, + 583, 584, 585, 591, 608, 609, 623, 588, 589, 615, + 618, 619, 625, 628, 633, 592, 593, 637, 639, 641, + 607, 643, 681, 89, 655, 656, 120, 674, 675, 676, + 677, 683, 448, 692, 611, 693, 613, 614, 127, 610, + 698, 616, 617, 291, 292, 135, 701, 710, 200, 722, + 627, 723, 731, 732, 0, 733, 738, 293, 294, 295, + 296, 630, 632, 297, 634, 740, 635, 636, 741, 0, + 638, 0, 0, 0, 243, 0, 298, 0, 0, 0, + 644, 645, 173, 648, 0, 651, 0, 0, 653, 654, + 665, 0, 0, 668, 0, 0, 299, 662, 663, 196, + 199, 666, 0, 0, 669, 671, 672, 673, 680, 0, + 0, 682, 0, 0, 0, 678, 679, 0, 0, 0, + 0, 0, 684, 0, 689, 690, 691, 0, 0, 0, + 700, 0, 0, 694, 695, 696, 697, 0, 0, 0, + 0, 0, 702, 709, 703, 0, 0, 704, 705, 706, + 707, 708, 0, 0, 711, 0, 712, 713, 714, 715, + 716, 717, 718, 719, 720, 721, 0, 0, 724, 725, + 726, 727, 728, 729, 730, 0, 0, 0, 0, 0, + 735, 737, 0, 739, 6, 8, 10, 12, 77, 0, + 0, 0, 742, 77, 0, 743, 78, 0, 0, 90, + 90, 78, 90, 90, 90, 90, 90, 0, 90, 90, + 90, 90, 90, 0, 90, 90, 0, 0, 0, 0, + 0, 79, 80, 0, 0, 0, 79, 80, 0, 0, + 0, 81, 0, 0, 0, 0, 81, 82, 0, 90, + 0, 0, 82, 0, 291, 292, 0, 0, 83, 90, + 0, 0, 84, 83, 0, 0, 0, 84, 293, 294, + 295, 296, 0, 85, 297, 0, 0, 0, 85, 0, + 0, 375, 0, 0, 0, 143, 376, 298, 0, 0, + 394, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 404, 405, 90, 0, 0, 0, 315, 406, 0, + 0, 143, 0, 0, 0, 0, 413, 0, 0, 182, + 0, 0, 0, 0, 0, 0, 421, 0, 0, 0, + 0, 182, 0, 205, 0, 0, 0, 143, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 143, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 259, 0, 0, 0, 0, 0, 0, 8, 8, - 8, 12, 268, 270, 272, 12, 12, 276, 0, 12, - 12, 281, 140, 0, 0, 285, 13, 14, 15, 16, - 0, 0, 54, 55, 0, 0, 0, 56, 17, 0, - 18, 0, 57, 0, 0, 0, 0, 58, 0, 75, - 314, 19, 0, 20, 0, 0, 21, 76, 0, 22, - 23, 0, 24, 0, 0, 59, 0, 0, 25, 26, - 60, 0, 0, 27, 28, 61, 0, 0, 0, 0, - 0, 10, 62, 0, 77, 78, 63, 64, 29, 0, - 65, 0, 66, 30, 79, 67, 0, 0, 31, 32, - 80, 0, 0, 0, 75, 0, 0, 33, 68, 0, - 0, 81, 76, 0, 0, 82, 327, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 83, 0, 0, 0, - 0, 0, 0, 0, 369, 0, 0, 0, 0, 77, - 78, 0, 0, 0, 0, 0, 0, 0, 0, 79, - 0, 0, 0, 0, 0, 80, 0, 0, 0, 0, - 0, 0, 88, 88, 88, 88, 81, 0, 0, 0, - 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 83, 0, 432, 435, 0, 0, 0, 0, 370, + 0, 0, 232, 0, 0, 0, 404, 0, 0, 0, + 0, 205, 0, 232, 248, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 196, 199, 0, + 0, 0, 0, 0, 264, 196, 199, 0, 0, 0, + 0, 8, 8, 8, 12, 273, 275, 277, 12, 12, + 281, 0, 12, 12, 286, 143, 0, 0, 290, 0, + 13, 14, 15, 16, 0, 0, 54, 55, 0, 0, + 0, 56, 17, 0, 18, 0, 57, 0, 0, 0, + 0, 58, 0, 0, 320, 19, 20, 59, 21, 0, + 0, 22, 23, 0, 24, 0, 0, 60, 0, 0, + 25, 26, 61, 0, 0, 27, 28, 62, 0, 0, + 0, 0, 0, 0, 63, 10, 0, 0, 64, 65, + 29, 0, 66, 0, 67, 30, 0, 68, 0, 0, + 31, 32, 0, 0, 0, 0, 0, 0, 0, 33, + 69, 13, 14, 15, 16, 0, 0, 0, 331, 0, + 0, 0, 0, 17, 0, 18, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 19, 20, 0, 21, + 0, 0, 22, 23, 0, 24, 0, 0, 0, 0, + 0, 25, 26, 0, 0, 0, 27, 28, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 90, 90, 90, + 90, 29, 0, 0, 0, 0, 30, 0, 0, 0, + 622, 31, 32, 624, 0, 0, 626, 436, 439, 0, + 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 456, 0, 0, 0, - 0, 0, 0, 0, 13, 14, 15, 16, 0, 0, - 54, 55, 475, 456, 456, 56, 17, 0, 18, 0, - 57, 0, 0, 0, 0, 58, 0, 0, 0, 19, - 0, 20, 0, 0, 21, 0, 0, 22, 23, 0, - 24, 0, 0, 59, 0, 0, 25, 26, 60, 0, - 0, 27, 28, 61, 0, 0, 0, 0, 0, 0, - 62, 0, 0, 0, 63, 64, 29, 0, 65, 0, - 66, 30, 0, 67, 0, 0, 31, 32, 13, 14, - 15, 16, 0, 0, 0, 33, 68, 0, 0, 0, - 17, 0, 18, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 19, 0, 20, 0, 0, 21, 0, - 0, 22, 23, 0, 24, 0, 0, 0, 0, 0, - 25, 26, 0, 0, 0, 27, 28, 0, 276, 565, - 567, 569, 0, 0, 0, 0, 0, 0, 0, 0, - 29, 0, 0, 0, 0, 30, 0, 0, 0, 0, - 31, 32, 0, 0, 0, 0, 589, 0, 0, 33, - 0, 0, 0, 0, 0, 0, 0, 88, 0, 0, + 0, 462, 0, 0, 0, 0, 0, 0, 0, 13, + 14, 15, 16, 0, 0, 54, 55, 481, 462, 462, + 56, 17, 0, 18, 0, 57, 0, 0, 0, 0, + 58, 0, 0, 0, 19, 20, 59, 21, 0, 0, + 22, 23, 0, 24, 0, 0, 60, 0, 0, 25, + 26, 61, 0, 0, 27, 28, 62, 0, 0, 0, + 0, 0, 0, 63, 0, 0, 0, 64, 65, 29, + 0, 66, 0, 67, 30, 0, 68, 0, 0, 31, + 32, 0, 0, 0, 0, 0, 0, 0, 33, 69, + 0, 0, 0, 0, 0, 0, 0, 332, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 456, 0, 456 + 0, 0, 0, 281, 571, 573, 575, 0, 0, 0, + 0, 0, 13, 14, 15, 16, 0, 0, 54, 55, + 0, 0, 0, 56, 17, 0, 18, 0, 57, 0, + 0, 595, 0, 58, 0, 0, 0, 19, 20, 59, + 21, 0, 90, 22, 23, 0, 24, 0, 0, 60, + 0, 0, 25, 26, 61, 0, 0, 27, 28, 62, + 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, + 64, 65, 29, 0, 66, 0, 67, 30, 0, 68, + 0, 0, 31, 32, 0, 0, 462, 0, 462, 0, + 0, 33, 69, 0, 0, 13, 14, 15, 16, 0, + 333, 54, 55, 0, 0, 0, 56, 17, 0, 18, + 0, 57, 0, 0, 0, 0, 58, 0, 0, 0, + 19, 20, 59, 21, 0, 0, 22, 23, 0, 24, + 0, 0, 60, 0, 0, 25, 26, 61, 0, 0, + 27, 28, 62, 0, 0, 0, 0, 0, 0, 63, + 0, 0, 0, 64, 65, 29, 0, 66, 0, 67, + 30, 0, 68, 0, 0, 31, 32, 0, 0, 0, + 0, 0, 0, 0, 33, 69 }; static const short yycheck[] = { 5, - 9, 7, 92, 271, 275, 419, 420, 28, 3, 4, - 16, 17, 20, 19, 20, 21, 22, 23, 20, 25, - 26, 27, 28, 29, 21, 31, 32, 3, 4, 115, - 3, 4, 5, 17, 45, 19, 20, 21, 22, 23, - 38, 25, 26, 27, 28, 29, 179, 31, 32, 20, - 56, 401, 76, 92, 92, 141, 20, 190, 59, 65, - 410, 3, 4, 92, 3, 4, 152, 3, 4, 3, - 4, 72, 56, 21, 24, 3, 4, 3, 4, 20, - 30, 65, 93, 33, 90, 93, 21, 59, 112, 113, - 114, 93, 93, 92, 118, 93, 93, 121, 93, 92, - 3, 4, 108, 109, 3, 4, 5, 11, 409, 115, - 21, 92, 62, 3, 4, 5, 417, 93, 22, 21, - 93, 93, 93, 73, 108, 3, 4, 5, 25, 93, - 80, 137, 218, 3, 4, 141, 3, 4, 5, 3, - 4, 5, 3, 4, 5, 93, 152, 3, 4, 92, - 110, 93, 93, 177, 93, 161, 93, 93, 93, 93, - 44, 93, 58, 59, 68, 93, 116, 93, 174, 53, - 130, 131, 196, 92, 3, 4, 5, 6, 92, 82, - 9, 10, 93, 133, 134, 14, 15, 92, 17, 93, - 19, 93, 92, 92, 200, 24, 52, 93, 12, 28, - 160, 30, 92, 617, 33, 619, 92, 36, 37, 93, - 39, 406, 218, 42, 92, 59, 45, 46, 47, 414, - 59, 50, 51, 52, 408, 92, 92, 187, 92, 189, - 59, 92, 416, 72, 63, 64, 65, 82, 67, 92, - 69, 70, 248, 72, 58, 251, 75, 76, 93, 93, - 445, 65, 3, 4, 404, 84, 85, 263, 264, 265, - 220, 59, 412, 59, 93, 92, 8, 52, 66, 403, - 66, 92, 86, 87, 59, 235, 207, 411, 284, 93, - 211, 212, 92, 92, 215, 216, 88, 89, 90, 91, - 250, 92, 563, 253, 444, 93, 93, 93, 92, 92, - 23, 43, 44, 45, 92, 8, 48, 93, 92, 315, - 443, 53, 318, 3, 4, 5, 92, 59, 451, 452, - 588, 44, 3, 4, 5, 92, 92, 287, 70, 462, - 53, 34, 74, 92, 92, 77, 92, 79, 471, 81, - 43, 44, 269, 85, 271, 48, 92, 371, 92, 92, - 53, 93, 358, 359, 360, 361, 59, 80, 92, 368, - 320, 311, 3, 4, 5, 92, 92, 70, 92, 82, - 93, 74, 322, 323, 358, 359, 360, 361, 92, 329, - 92, 405, 85, 3, 4, 5, 23, 337, 92, 413, - 93, 204, 205, 206, 92, 92, 92, 347, 92, 0, - 93, 93, 93, 277, 93, 93, 8, 44, 93, 92, - 0, 93, 5, 93, 16, 93, 53, 93, 378, 379, - 380, 381, 382, 383, 384, 385, 386, 93, 8, 93, - 93, 93, 392, 393, 394, 395, 16, 387, 93, 93, - 93, 43, 44, 80, 404, 469, 406, 93, 92, 540, - 93, 53, 412, 12, 414, 93, 93, 59, 408, 409, - 92, 92, 92, 43, 44, 92, 416, 417, 70, 92, - 92, 431, 74, 53, 434, 92, 436, 92, 92, 59, - 440, 441, 92, 85, 444, 445, 446, 447, 448, 449, - 70, 93, 92, 92, 74, 92, 92, 92, 92, 58, - 633, 92, 635, 92, 637, 85, 65, 92, 92, 92, - 92, 92, 534, 93, 92, 92, 92, 92, 92, 92, - 92, 92, 92, 92, 484, 93, 486, 86, 87, 489, - 92, 491, 92, 493, 93, 40, 41, 92, 498, 499, - 92, 92, 568, 93, 504, 505, 506, 507, 93, 54, - 55, 56, 57, 93, 93, 60, 93, 93, 93, 93, - 93, 93, 93, 8, 570, 93, 93, 573, 73, 93, - 93, 16, 93, 93, 93, 93, 93, 92, 92, 539, - 540, 541, 542, 543, 544, 545, 92, 135, 93, 573, - 92, 92, 92, 92, 600, 93, 556, 557, 43, 44, - 93, 93, 93, 93, 93, 93, 93, 93, 53, 93, - 92, 92, 387, 93, 59, 575, 93, 577, 578, 579, - 580, 93, 92, 92, 92, 70, 92, 174, 93, 74, - 92, 92, 92, 92, 640, 93, 93, 643, 93, 93, - 85, 591, 602, 603, 594, 605, 93, 597, 608, 609, - 610, 93, 658, 92, 92, 661, 93, 93, 92, 92, - -1, 621, 622, 93, 624, 93, 626, 93, 93, 93, - 93, 631, 632, 93, 680, 93, -1, -1, 638, 639, - -1, -1, 642, -1, -1, 645, 646, 693, -1, 649, - 650, -1, -1, -1, -1, -1, 656, 657, -1, -1, - -1, -1, -1, 663, -1, 665, -1, 667, 668, -1, - -1, -1, -1, -1, 674, 675, 676, 677, -1, -1, - -1, -1, -1, 683, -1, 685, -1, -1, 688, 689, - 690, 691, 692, -1, -1, 695, -1, 697, 698, 699, - 700, 701, 702, 703, 704, 705, 706, -1, -1, 709, - 710, 711, 712, 713, 714, 715, -1, -1, -1, -1, - -1, 721, 722, -1, 724, 1, 2, 3, 4, -1, - -1, -1, -1, 733, -1, -1, 736, -1, -1, -1, - 16, 17, -1, 19, 20, 21, 22, 23, -1, 25, - 26, 27, 28, 29, -1, 31, 32, -1, -1, -1, - -1, 3, 4, 5, 6, -1, -1, 9, 10, -1, - -1, -1, 14, 15, -1, 17, -1, 19, -1, -1, - 56, -1, 24, -1, -1, -1, 28, -1, 30, 65, - -1, 33, -1, -1, 36, 37, -1, 39, -1, -1, - 42, -1, -1, 45, 46, 47, -1, -1, 50, 51, - 52, -1, -1, -1, 90, -1, -1, 59, 8, -1, - -1, 63, 64, 65, -1, 67, 16, 69, 70, -1, - 72, -1, 108, 75, 76, -1, -1, -1, -1, 115, - -1, -1, 84, 85, -1, -1, -1, 123, -1, -1, - -1, 93, -1, 43, 44, -1, -1, -1, -1, 135, - -1, 137, -1, 53, -1, 141, -1, -1, -1, 59, - -1, -1, -1, -1, -1, -1, 152, -1, -1, -1, - 70, -1, -1, -1, 74, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 85, -1, -1, 174, -1, - 176, 177, -1, 93, -1, -1, -1, -1, -1, -1, + 9, 7, 276, 407, 280, 425, 426, 183, 78, 21, + 16, 17, 416, 19, 20, 21, 22, 23, 194, 25, + 26, 27, 28, 29, 90, 31, 32, 17, 28, 19, + 20, 21, 22, 23, 90, 25, 26, 27, 28, 29, + 21, 31, 32, 118, 114, 115, 20, 117, 3, 4, + 56, 121, 3, 4, 124, 3, 4, 5, 3, 4, + 66, 20, 3, 4, 3, 4, 56, 3, 4, 144, + 20, 3, 4, 3, 4, 21, 66, 3, 4, 91, + 155, 3, 4, 5, 21, 20, 92, 3, 4, 5, + 3, 4, 5, 3, 4, 5, 3, 4, 5, 3, + 4, 5, 20, 43, 110, 111, 21, 36, 11, 91, + 91, 181, 118, 3, 4, 112, 415, 91, 42, 22, + 110, 274, 80, 276, 423, 80, 90, 51, 90, 57, + 200, 410, 91, 91, 140, 91, 133, 134, 144, 418, + 91, 91, 70, 91, 25, 91, 91, 222, 57, 155, + 91, 91, 91, 91, 91, 91, 91, 8, 164, 91, + 50, 91, 91, 66, 91, 91, 163, 91, 90, 12, + 412, 450, 178, 91, 90, 80, 91, 90, 420, 414, + 90, 0, 91, 90, 56, 57, 90, 422, 91, 57, + 41, 42, 43, 90, 191, 46, 193, 57, 204, 57, + 51, 57, 70, 623, 64, 625, 57, 90, 64, 451, + 23, 50, 90, 56, 409, 12, 222, 68, 57, 91, + 63, 72, 417, 91, 75, 90, 77, 224, 79, 42, + 91, 91, 83, 91, 91, 91, 8, 90, 51, 91, + 91, 84, 85, 90, 241, 3, 4, 253, 91, 23, + 256, 86, 87, 88, 89, 3, 4, 5, 255, 56, + 32, 258, 268, 269, 270, 78, 63, 211, 42, 41, + 42, 215, 216, 449, 46, 219, 220, 51, 91, 51, + 90, 457, 458, 289, 90, 57, 90, 84, 85, 3, + 4, 8, 468, 569, 91, 90, 68, 90, 90, 16, + 72, 477, 90, 90, 78, 90, 90, 377, 3, 4, + 5, 83, 3, 4, 5, 321, 313, 91, 324, 91, + 594, 3, 4, 5, 41, 42, 208, 209, 210, 326, + 90, 90, 546, 90, 51, 90, 8, 90, 90, 90, + 57, 411, 91, 90, 16, 90, 90, 90, 90, 419, + 90, 68, 90, 90, 90, 72, 90, 90, 364, 365, + 366, 367, 90, 90, 90, 374, 83, 90, 90, 41, + 42, 90, 90, 0, 364, 365, 366, 367, 91, 51, + 91, 90, 5, 91, 91, 57, 91, 384, 385, 386, + 387, 388, 389, 390, 391, 392, 68, 91, 91, 91, + 72, 398, 399, 400, 401, 475, 91, 91, 91, 282, + 91, 83, 91, 410, 91, 412, 90, 180, 91, 91, + 91, 418, 90, 420, 90, 90, 8, 90, 8, 90, + 90, 90, 90, 90, 16, 90, 16, 90, 435, 90, + 90, 438, 90, 440, 90, 90, 90, 444, 445, 90, + 90, 90, 90, 450, 451, 452, 453, 454, 455, 41, + 42, 41, 42, 639, 90, 641, 90, 643, 90, 51, + 90, 51, 90, 90, 90, 57, 90, 57, 90, 90, + 90, 540, 91, 90, 90, 90, 68, 90, 68, 90, + 72, 91, 72, 490, 91, 91, 493, 91, 495, 91, + 497, 83, 90, 83, 91, 502, 503, 504, 91, 91, + 91, 91, 91, 510, 511, 512, 513, 91, 91, 91, + 91, 91, 91, 91, 91, 91, 91, 91, 90, 90, + 90, 90, 90, 90, 574, 91, 91, 24, 91, 91, + 91, 91, 90, 30, 91, 91, 33, 91, 545, 546, + 547, 548, 549, 91, 90, 90, 90, 554, 555, 91, + 91, 91, 90, 90, 90, 562, 563, 91, 90, 90, + 576, 90, 90, 579, 91, 91, 63, 91, 91, 91, + 91, 90, 393, 91, 581, 91, 583, 584, 75, 579, + 90, 588, 589, 38, 39, 82, 90, 90, 138, 91, + 606, 91, 91, 91, -1, 91, 91, 52, 53, 54, + 55, 608, 609, 58, 611, 91, 613, 614, 91, -1, + 617, -1, -1, -1, 178, -1, 71, -1, -1, -1, + 627, 628, 119, 630, -1, 632, -1, -1, 635, 636, + 646, -1, -1, 649, -1, -1, 91, 644, 645, 136, + 137, 648, -1, -1, 651, 652, 653, 654, 664, -1, + -1, 667, -1, -1, -1, 662, 663, -1, -1, -1, + -1, -1, 669, -1, 671, 672, 673, -1, -1, -1, + 686, -1, -1, 680, 681, 682, 683, -1, -1, -1, + -1, -1, 689, 699, 691, -1, -1, 694, 695, 696, + 697, 698, -1, -1, 701, -1, 703, 704, 705, 706, + 707, 708, 709, 710, 711, 712, -1, -1, 715, 716, + 717, 718, 719, 720, 721, -1, -1, -1, -1, -1, + 727, 728, -1, 730, 1, 2, 3, 4, 8, -1, + -1, -1, 739, 8, -1, 742, 16, -1, -1, 16, + 17, 16, 19, 20, 21, 22, 23, -1, 25, 26, + 27, 28, 29, -1, 31, 32, -1, -1, -1, -1, + -1, 41, 42, -1, -1, -1, 41, 42, -1, -1, + -1, 51, -1, -1, -1, -1, 51, 57, -1, 56, + -1, -1, 57, -1, 38, 39, -1, -1, 68, 66, + -1, -1, 72, 68, -1, -1, -1, 72, 52, 53, + 54, 55, -1, 83, 58, -1, -1, -1, 83, -1, + -1, 91, -1, -1, -1, 92, 91, 71, -1, -1, + 317, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 328, 329, 110, -1, -1, -1, 91, 335, -1, + -1, 118, -1, -1, -1, -1, 343, -1, -1, 126, + -1, -1, -1, -1, -1, -1, 353, -1, -1, -1, + -1, 138, -1, 140, -1, -1, -1, 144, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 155, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 197, -1, -1, -1, -1, -1, -1, 204, 205, - 206, 207, 208, 209, 210, 211, 212, 213, -1, 215, - 216, 217, 218, -1, -1, 221, 3, 4, 5, 6, - -1, -1, 9, 10, -1, -1, -1, 14, 15, -1, - 17, -1, 19, -1, -1, -1, -1, 24, -1, 8, - 246, 28, -1, 30, -1, -1, 33, 16, -1, 36, - 37, -1, 39, -1, -1, 42, -1, -1, 45, 46, - 47, -1, -1, 50, 51, 52, -1, -1, -1, -1, - -1, 277, 59, -1, 43, 44, 63, 64, 65, -1, - 67, -1, 69, 70, 53, 72, -1, -1, 75, 76, - 59, -1, -1, -1, 8, -1, -1, 84, 85, -1, - -1, 70, 16, -1, -1, 74, 93, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 85, -1, -1, -1, - -1, -1, -1, -1, 93, -1, -1, -1, -1, 43, - 44, -1, -1, -1, -1, -1, -1, -1, -1, 53, - -1, -1, -1, -1, -1, 59, -1, -1, -1, -1, - -1, -1, 358, 359, 360, 361, 70, -1, -1, -1, - 74, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 85, -1, 379, 380, -1, -1, -1, -1, 93, + -1, -1, 169, -1, -1, -1, 393, -1, -1, -1, + -1, 178, -1, 180, 181, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 414, 415, -1, + -1, -1, -1, -1, 201, 422, 423, -1, -1, -1, + -1, 208, 209, 210, 211, 212, 213, 214, 215, 216, + 217, -1, 219, 220, 221, 222, -1, -1, 225, -1, + 3, 4, 5, 6, -1, -1, 9, 10, -1, -1, + -1, 14, 15, -1, 17, -1, 19, -1, -1, -1, + -1, 24, -1, -1, 251, 28, 29, 30, 31, -1, + -1, 34, 35, -1, 37, -1, -1, 40, -1, -1, + 43, 44, 45, -1, -1, 48, 49, 50, -1, -1, + -1, -1, -1, -1, 57, 282, -1, -1, 61, 62, + 63, -1, 65, -1, 67, 68, -1, 70, -1, -1, + 73, 74, -1, -1, -1, -1, -1, -1, -1, 82, + 83, 3, 4, 5, 6, -1, -1, -1, 91, -1, + -1, -1, -1, 15, -1, 17, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 28, 29, -1, 31, + -1, -1, 34, 35, -1, 37, -1, -1, -1, -1, + -1, 43, 44, -1, -1, -1, 48, 49, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 364, 365, 366, + 367, 63, -1, -1, -1, -1, 68, -1, -1, -1, + 597, 73, 74, 600, -1, -1, 603, 384, 385, -1, + 82, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 402, -1, -1, -1, - -1, -1, -1, -1, 3, 4, 5, 6, -1, -1, - 9, 10, 418, 419, 420, 14, 15, -1, 17, -1, - 19, -1, -1, -1, -1, 24, -1, -1, -1, 28, - -1, 30, -1, -1, 33, -1, -1, 36, 37, -1, - 39, -1, -1, 42, -1, -1, 45, 46, 47, -1, - -1, 50, 51, 52, -1, -1, -1, -1, -1, -1, - 59, -1, -1, -1, 63, 64, 65, -1, 67, -1, - 69, 70, -1, 72, -1, -1, 75, 76, 3, 4, - 5, 6, -1, -1, -1, 84, 85, -1, -1, -1, - 15, -1, 17, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 28, -1, 30, -1, -1, 33, -1, - -1, 36, 37, -1, 39, -1, -1, -1, -1, -1, - 45, 46, -1, -1, -1, 50, 51, -1, 534, 535, - 536, 537, -1, -1, -1, -1, -1, -1, -1, -1, - 65, -1, -1, -1, -1, 70, -1, -1, -1, -1, - 75, 76, -1, -1, -1, -1, 562, -1, -1, 84, - -1, -1, -1, -1, -1, -1, -1, 573, -1, -1, + -1, 408, -1, -1, -1, -1, -1, -1, -1, 3, + 4, 5, 6, -1, -1, 9, 10, 424, 425, 426, + 14, 15, -1, 17, -1, 19, -1, -1, -1, -1, + 24, -1, -1, -1, 28, 29, 30, 31, -1, -1, + 34, 35, -1, 37, -1, -1, 40, -1, -1, 43, + 44, 45, -1, -1, 48, 49, 50, -1, -1, -1, + -1, -1, -1, 57, -1, -1, -1, 61, 62, 63, + -1, 65, -1, 67, 68, -1, 70, -1, -1, 73, + 74, -1, -1, -1, -1, -1, -1, -1, 82, 83, + -1, -1, -1, -1, -1, -1, -1, 91, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 617, -1, 619 + -1, -1, -1, 540, 541, 542, 543, -1, -1, -1, + -1, -1, 3, 4, 5, 6, -1, -1, 9, 10, + -1, -1, -1, 14, 15, -1, 17, -1, 19, -1, + -1, 568, -1, 24, -1, -1, -1, 28, 29, 30, + 31, -1, 579, 34, 35, -1, 37, -1, -1, 40, + -1, -1, 43, 44, 45, -1, -1, 48, 49, 50, + -1, -1, -1, -1, -1, -1, 57, -1, -1, -1, + 61, 62, 63, -1, 65, -1, 67, 68, -1, 70, + -1, -1, 73, 74, -1, -1, 623, -1, 625, -1, + -1, 82, 83, -1, -1, 3, 4, 5, 6, -1, + 91, 9, 10, -1, -1, -1, 14, 15, -1, 17, + -1, 19, -1, -1, -1, -1, 24, -1, -1, -1, + 28, 29, 30, 31, -1, -1, 34, 35, -1, 37, + -1, -1, 40, -1, -1, 43, 44, 45, -1, -1, + 48, 49, 50, -1, -1, -1, -1, -1, -1, 57, + -1, -1, -1, 61, 62, 63, -1, 65, -1, 67, + 68, -1, 70, -1, -1, 73, 74, -1, -1, -1, + -1, -1, -1, -1, 82, 83 }; /* -*-C-*- Note some compilers choke on comments on `#line' lines. */ #line 3 "/usr/share/bison.simple" @@ -1598,14 +1617,14 @@ yyreduce: switch (yyn) { case 6: -#line 243 "parser.yxx" +#line 247 "parser.yxx" { assert(!egg_stack.empty()); DCAST(EggData, egg_stack.back())->add_child(DCAST(EggNode, yyvsp[0]._egg)); ; break;} case 25: -#line 287 "parser.yxx" +#line 291 "parser.yxx" { string strval = yyvsp[-1]._string; EggCoordinateSystem *cs = new EggCoordinateSystem; @@ -1620,13 +1639,13 @@ case 25: ; break;} case 26: -#line 310 "parser.yxx" +#line 314 "parser.yxx" { yyval._egg = new EggComment(yyvsp[-3]._string, yyvsp[-1]._string); ; break;} case 27: -#line 324 "parser.yxx" +#line 328 "parser.yxx" { string tref_name = yyvsp[-2]._string; Filename filename = yyvsp[0]._string; @@ -1641,14 +1660,14 @@ case 27: ; break;} case 28: -#line 337 "parser.yxx" +#line 341 "parser.yxx" { yyval._egg = egg_stack.back(); egg_stack.pop_back(); ; break;} case 30: -#line 353 "parser.yxx" +#line 357 "parser.yxx" { EggTexture *texture = DCAST(EggTexture, egg_stack.back()); string name = yyvsp[-3]._string; @@ -1982,7 +2001,7 @@ case 30: ; break;} case 32: -#line 696 "parser.yxx" +#line 700 "parser.yxx" { string mref_name = yyvsp[-1]._string; EggMaterial *material = new EggMaterial(mref_name); @@ -1996,14 +2015,14 @@ case 32: ; break;} case 33: -#line 708 "parser.yxx" +#line 712 "parser.yxx" { yyval._egg = egg_stack.back(); egg_stack.pop_back(); ; break;} case 35: -#line 724 "parser.yxx" +#line 728 "parser.yxx" { EggMaterial *material = DCAST(EggMaterial, egg_stack.back()); string name = yyvsp[-3]._string; @@ -2089,7 +2108,7 @@ case 35: ; break;} case 36: -#line 819 "parser.yxx" +#line 823 "parser.yxx" { string node_name = yyvsp[-3]._string; Filename filename = yyvsp[-1]._string; @@ -2098,7 +2117,7 @@ case 36: ; break;} case 37: -#line 826 "parser.yxx" +#line 830 "parser.yxx" { if (cmp_nocase_uh(yyvsp[-5]._string, "group") != 0) { eggyyerror("keyword 'group' expected"); @@ -2110,7 +2129,7 @@ case 37: ; break;} case 38: -#line 846 "parser.yxx" +#line 850 "parser.yxx" { string name = yyvsp[0]._string; EggVertexPool *pool = NULL; @@ -2136,20 +2155,20 @@ case 38: ; break;} case 39: -#line 870 "parser.yxx" +#line 874 "parser.yxx" { yyval._egg = egg_stack.back(); egg_stack.pop_back(); ; break;} case 42: -#line 898 "parser.yxx" +#line 902 "parser.yxx" { egg_stack.push_back(new EggVertex); ; break;} case 43: -#line 902 "parser.yxx" +#line 906 "parser.yxx" { PT(EggVertex) vtx = DCAST(EggVertex, egg_stack.back()); egg_stack.pop_back(); @@ -2158,7 +2177,7 @@ case 43: ; break;} case 44: -#line 909 "parser.yxx" +#line 913 "parser.yxx" { vertex_index = (int)yyvsp[0]._number; EggVertexPool *pool = DCAST(EggVertexPool, egg_stack.back()); @@ -2185,7 +2204,7 @@ case 44: ; break;} case 45: -#line 934 "parser.yxx" +#line 938 "parser.yxx" { PT(EggVertex) vtx = DCAST(EggVertex, egg_stack.back()); egg_stack.pop_back(); @@ -2197,31 +2216,31 @@ case 45: ; break;} case 46: -#line 955 "parser.yxx" +#line 959 "parser.yxx" { DCAST(EggVertex, egg_stack.back())->set_pos(yyvsp[0]._number); ; break;} case 47: -#line 959 "parser.yxx" +#line 963 "parser.yxx" { DCAST(EggVertex, egg_stack.back())->set_pos(LPoint2d(yyvsp[-1]._number, yyvsp[0]._number)); ; break;} case 48: -#line 963 "parser.yxx" +#line 967 "parser.yxx" { DCAST(EggVertex, egg_stack.back())->set_pos(LPoint3d(yyvsp[-2]._number, yyvsp[-1]._number, yyvsp[0]._number)); ; break;} case 49: -#line 967 "parser.yxx" +#line 971 "parser.yxx" { DCAST(EggVertex, egg_stack.back())->set_pos(LPoint4d(yyvsp[-3]._number, yyvsp[-2]._number, yyvsp[-1]._number, yyvsp[0]._number)); ; break;} case 50: -#line 971 "parser.yxx" +#line 975 "parser.yxx" { EggVertex *vertex = DCAST(EggVertex, egg_stack.back()); EggVertexUV *uv = new EggVertexUV(yyvsp[-1]._string, TexCoordd::zero()); @@ -2234,13 +2253,13 @@ case 50: ; break;} case 51: -#line 982 "parser.yxx" +#line 986 "parser.yxx" { egg_stack.pop_back(); ; break;} case 54: -#line 988 "parser.yxx" +#line 992 "parser.yxx" { bool inserted = DCAST(EggVertex, egg_stack.back())->_dxyzs. insert(EggMorphVertex(yyvsp[-5]._string, LVector3d(yyvsp[-3]._number, yyvsp[-2]._number, yyvsp[-1]._number))).second; @@ -2250,7 +2269,7 @@ case 54: ; break;} case 55: -#line 996 "parser.yxx" +#line 1000 "parser.yxx" { bool inserted = DCAST(EggVertex, egg_stack.back())->_dxyzs. insert(EggMorphVertex(yyvsp[-4]._string, LVector3d(yyvsp[-3]._number, yyvsp[-2]._number, yyvsp[-1]._number))).second; @@ -2260,19 +2279,19 @@ case 55: ; break;} case 56: -#line 1015 "parser.yxx" +#line 1019 "parser.yxx" { DCAST(EggVertexUV, egg_stack.back())->set_uv(TexCoordd(yyvsp[-1]._number, yyvsp[0]._number)); ; break;} case 57: -#line 1019 "parser.yxx" +#line 1023 "parser.yxx" { DCAST(EggVertexUV, egg_stack.back())->set_uvw(LVecBase3d(yyvsp[-2]._number, yyvsp[-1]._number, yyvsp[0]._number)); ; break;} case 58: -#line 1023 "parser.yxx" +#line 1027 "parser.yxx" { if (DCAST(EggVertexUV, egg_stack.back())->has_tangent()) { eggyywarning("Ignoring repeated tangent"); @@ -2282,7 +2301,7 @@ case 58: ; break;} case 59: -#line 1031 "parser.yxx" +#line 1035 "parser.yxx" { if (DCAST(EggVertexUV, egg_stack.back())->has_binormal()) { eggyywarning("Ignoring repeated binormal"); @@ -2292,7 +2311,7 @@ case 59: ; break;} case 60: -#line 1039 "parser.yxx" +#line 1043 "parser.yxx" { bool inserted = DCAST(EggVertexUV, egg_stack.back())->_duvs. insert(EggMorphTexCoord(yyvsp[-4]._string, LVector3d(yyvsp[-2]._number, yyvsp[-1]._number, 0.0))).second; @@ -2302,7 +2321,7 @@ case 60: ; break;} case 61: -#line 1047 "parser.yxx" +#line 1051 "parser.yxx" { bool inserted = DCAST(EggVertexUV, egg_stack.back())->_duvs. insert(EggMorphTexCoord(yyvsp[-5]._string, LVector3d(yyvsp[-3]._number, yyvsp[-2]._number, yyvsp[-1]._number))).second; @@ -2312,7 +2331,7 @@ case 61: ; break;} case 62: -#line 1055 "parser.yxx" +#line 1059 "parser.yxx" { bool inserted = DCAST(EggVertexUV, egg_stack.back())->_duvs. insert(EggMorphTexCoord(yyvsp[-3]._string, LVector3d(yyvsp[-2]._number, yyvsp[-1]._number, 0.0))).second; @@ -2322,7 +2341,7 @@ case 62: ; break;} case 63: -#line 1063 "parser.yxx" +#line 1067 "parser.yxx" { bool inserted = DCAST(EggVertexUV, egg_stack.back())->_duvs. insert(EggMorphTexCoord(yyvsp[-4]._string, LVector3d(yyvsp[-3]._number, yyvsp[-2]._number, yyvsp[-1]._number))).second; @@ -2332,13 +2351,13 @@ case 63: ; break;} case 64: -#line 1081 "parser.yxx" +#line 1085 "parser.yxx" { DCAST(EggVertex, egg_stack.back())->set_normal(Normald(yyvsp[-2]._number, yyvsp[-1]._number, yyvsp[0]._number)); ; break;} case 65: -#line 1085 "parser.yxx" +#line 1089 "parser.yxx" { bool inserted = DCAST(EggVertex, egg_stack.back())->_dnormals. insert(EggMorphNormal(yyvsp[-5]._string, LVector3d(yyvsp[-3]._number, yyvsp[-2]._number, yyvsp[-1]._number))).second; @@ -2348,7 +2367,7 @@ case 65: ; break;} case 66: -#line 1093 "parser.yxx" +#line 1097 "parser.yxx" { bool inserted = DCAST(EggVertex, egg_stack.back())->_dnormals. insert(EggMorphNormal(yyvsp[-4]._string, LVector3d(yyvsp[-3]._number, yyvsp[-2]._number, yyvsp[-1]._number))).second; @@ -2358,13 +2377,13 @@ case 66: ; break;} case 67: -#line 1111 "parser.yxx" +#line 1115 "parser.yxx" { DCAST(EggVertex, egg_stack.back())->set_color(Colorf(yyvsp[-3]._number, yyvsp[-2]._number, yyvsp[-1]._number, yyvsp[0]._number)); ; break;} case 68: -#line 1115 "parser.yxx" +#line 1119 "parser.yxx" { bool inserted = DCAST(EggVertex, egg_stack.back())->_drgbas. insert(EggMorphColor(yyvsp[-6]._string, LVector4f(yyvsp[-4]._number, yyvsp[-3]._number, yyvsp[-2]._number, yyvsp[-1]._number))).second; @@ -2374,7 +2393,7 @@ case 68: ; break;} case 69: -#line 1123 "parser.yxx" +#line 1127 "parser.yxx" { bool inserted = DCAST(EggVertex, egg_stack.back())->_drgbas. insert(EggMorphColor(yyvsp[-5]._string, LVector4f(yyvsp[-4]._number, yyvsp[-3]._number, yyvsp[-2]._number, yyvsp[-1]._number))).second; @@ -2384,14 +2403,14 @@ case 69: ; break;} case 70: -#line 1141 "parser.yxx" +#line 1145 "parser.yxx" { EggGroup *group = new EggGroup(yyvsp[0]._string); egg_stack.push_back(group); ; break;} case 71: -#line 1146 "parser.yxx" +#line 1150 "parser.yxx" { EggGroup *group = DCAST(EggGroup, egg_stack.back()); yyval._egg = group; @@ -2403,7 +2422,7 @@ case 71: ; break;} case 72: -#line 1166 "parser.yxx" +#line 1170 "parser.yxx" { EggGroup *group = new EggGroup(yyvsp[0]._string); group->set_group_type(EggGroup::GT_joint); @@ -2411,14 +2430,14 @@ case 72: ; break;} case 73: -#line 1172 "parser.yxx" +#line 1176 "parser.yxx" { yyval._egg = egg_stack.back(); egg_stack.pop_back(); ; break;} case 74: -#line 1187 "parser.yxx" +#line 1191 "parser.yxx" { EggGroup *group = new EggGroup(yyvsp[0]._string); group->set_group_type(EggGroup::GT_instance); @@ -2426,7 +2445,7 @@ case 74: ; break;} case 75: -#line 1193 "parser.yxx" +#line 1197 "parser.yxx" { EggGroup *group = DCAST(EggGroup, egg_stack.back()); yyval._egg = group; @@ -2437,7 +2456,7 @@ case 75: ; break;} case 77: -#line 1213 "parser.yxx" +#line 1217 "parser.yxx" { EggGroup *group = DCAST(EggGroup, egg_stack.back()); string name = yyvsp[-3]._string; @@ -2569,7 +2588,7 @@ case 77: ; break;} case 78: -#line 1343 "parser.yxx" +#line 1347 "parser.yxx" { EggGroup *group = DCAST(EggGroup, egg_stack.back()); string strval = yyvsp[-1]._string; @@ -2583,14 +2602,14 @@ case 78: ; break;} case 79: -#line 1355 "parser.yxx" +#line 1359 "parser.yxx" { EggGroup *group = DCAST(EggGroup, egg_stack.back()); group->set_billboard_center(LPoint3d(yyvsp[-3]._number, yyvsp[-2]._number, yyvsp[-1]._number)); ; break;} case 80: -#line 1360 "parser.yxx" +#line 1364 "parser.yxx" { EggGroup *group = DCAST(EggGroup, egg_stack.back()); string name = yyvsp[-4]._string; @@ -2599,7 +2618,7 @@ case 80: ; break;} case 81: -#line 1367 "parser.yxx" +#line 1371 "parser.yxx" { EggGroup *group = DCAST(EggGroup, egg_stack.back()); int value = (int)yyvsp[-1]._number; @@ -2607,7 +2626,7 @@ case 81: ; break;} case 82: -#line 1373 "parser.yxx" +#line 1377 "parser.yxx" { // The special flavor of DCS, with { sync } or { nosync }. EggGroup *group = DCAST(EggGroup, egg_stack.back()); @@ -2622,7 +2641,7 @@ case 82: ; break;} case 83: -#line 1386 "parser.yxx" +#line 1390 "parser.yxx" { // The traditional flavor of DART, with { 0 } or { 1 }. EggGroup *group = DCAST(EggGroup, egg_stack.back()); @@ -2631,7 +2650,7 @@ case 83: ; break;} case 84: -#line 1393 "parser.yxx" +#line 1397 "parser.yxx" { // The special flavor of DART, with { sync } or { nosync }. EggGroup *group = DCAST(EggGroup, egg_stack.back()); @@ -2646,7 +2665,7 @@ case 84: ; break;} case 85: -#line 1406 "parser.yxx" +#line 1410 "parser.yxx" { EggGroup *group = DCAST(EggGroup, egg_stack.back()); int value = (int)yyvsp[-1]._number; @@ -2654,7 +2673,7 @@ case 85: ; break;} case 86: -#line 1412 "parser.yxx" +#line 1416 "parser.yxx" { EggGroup *group = DCAST(EggGroup, egg_stack.back()); string type = yyvsp[-1]._string; @@ -2662,7 +2681,7 @@ case 86: ; break;} case 87: -#line 1418 "parser.yxx" +#line 1422 "parser.yxx" { EggGroup *group = DCAST(EggGroup, egg_stack.back()); int value = (int)yyvsp[-1]._number; @@ -2670,22 +2689,22 @@ case 87: ; break;} case 88: -#line 1424 "parser.yxx" +#line 1428 "parser.yxx" { EggGroup *group = DCAST(EggGroup, egg_stack.back()); group->set_tag(yyvsp[-3]._string, yyvsp[-1]._string); ; break;} case 89: -#line 1429 "parser.yxx" +#line 1433 "parser.yxx" { EggGroup *group = DCAST(EggGroup, egg_stack.back()); int value = (int)yyvsp[-1]._number; group->set_texlist_flag(value!=0); ; break;} -case 93: -#line 1438 "parser.yxx" +case 94: +#line 1443 "parser.yxx" { EggGroup *group = DCAST(EggGroup, egg_stack.back()); if (group->get_group_type() != EggGroup::GT_instance) { @@ -2695,14 +2714,14 @@ case 93: } ; break;} -case 94: -#line 1447 "parser.yxx" +case 95: +#line 1452 "parser.yxx" { DCAST(EggGroup, egg_stack.back())->add_child(DCAST(EggNode, yyvsp[0]._egg)); ; break;} -case 95: -#line 1461 "parser.yxx" +case 96: +#line 1466 "parser.yxx" { EggGroup *group = DCAST(EggGroup, egg_stack.back()); string strval = yyvsp[0]._string; @@ -2723,8 +2742,8 @@ case 95: } ; break;} -case 97: -#line 1492 "parser.yxx" +case 98: +#line 1497 "parser.yxx" { EggGroup *group = DCAST(EggGroup, egg_stack.back()); string strval = yyvsp[0]._string; @@ -2737,93 +2756,105 @@ case 97: } ; break;} -case 98: -#line 1514 "parser.yxx" +case 99: +#line 1519 "parser.yxx" { - egg_stack.back()->as_transform()->clear_transform(); + egg_top_transform = egg_stack.back()->as_transform(); + egg_top_transform->clear_transform(); ; break;} -case 113: -#line 1546 "parser.yxx" +case 101: +#line 1535 "parser.yxx" { - egg_stack.back()->as_transform()->add_translate2d(LVector2d(yyvsp[-2]._number, yyvsp[-1]._number)); -; - break;} -case 114: -#line 1553 "parser.yxx" -{ - egg_stack.back()->as_transform()->add_translate3d(LVector3d(yyvsp[-3]._number, yyvsp[-2]._number, yyvsp[-1]._number)); -; - break;} -case 115: -#line 1560 "parser.yxx" -{ - egg_stack.back()->as_transform()->add_rotate2d(yyvsp[-1]._number); + EggGroup *group = DCAST(EggGroup, egg_stack.back()); + if (group->get_group_type() != EggGroup::GT_joint) { + eggyywarning("Unexpected outside of "); + } + egg_top_transform = &group->modify_default_pose(); + egg_top_transform->clear_transform(); ; break;} case 116: -#line 1567 "parser.yxx" +#line 1572 "parser.yxx" { - egg_stack.back()->as_transform()->add_rotx(yyvsp[-1]._number); + egg_top_transform->add_translate2d(LVector2d(yyvsp[-2]._number, yyvsp[-1]._number)); ; break;} case 117: -#line 1574 "parser.yxx" +#line 1579 "parser.yxx" { - egg_stack.back()->as_transform()->add_roty(yyvsp[-1]._number); + egg_top_transform->add_translate3d(LVector3d(yyvsp[-3]._number, yyvsp[-2]._number, yyvsp[-1]._number)); ; break;} case 118: -#line 1581 "parser.yxx" +#line 1586 "parser.yxx" { - egg_stack.back()->as_transform()->add_rotz(yyvsp[-1]._number); + egg_top_transform->add_rotate2d(yyvsp[-1]._number); ; break;} case 119: -#line 1588 "parser.yxx" +#line 1593 "parser.yxx" { - egg_stack.back()->as_transform()->add_rotate3d(yyvsp[-4]._number, LVector3d(yyvsp[-3]._number, yyvsp[-2]._number, yyvsp[-1]._number)); + egg_top_transform->add_rotx(yyvsp[-1]._number); ; break;} case 120: -#line 1595 "parser.yxx" +#line 1600 "parser.yxx" { - egg_stack.back()->as_transform()->add_scale2d(LVecBase2d(yyvsp[-2]._number, yyvsp[-1]._number)); + egg_top_transform->add_roty(yyvsp[-1]._number); ; break;} case 121: -#line 1602 "parser.yxx" +#line 1607 "parser.yxx" { - egg_stack.back()->as_transform()->add_scale3d(LVecBase3d(yyvsp[-3]._number, yyvsp[-2]._number, yyvsp[-1]._number)); + egg_top_transform->add_rotz(yyvsp[-1]._number); ; break;} case 122: -#line 1609 "parser.yxx" +#line 1614 "parser.yxx" { - egg_stack.back()->as_transform()->add_uniform_scale(yyvsp[-1]._number); + egg_top_transform->add_rotate3d(yyvsp[-4]._number, LVector3d(yyvsp[-3]._number, yyvsp[-2]._number, yyvsp[-1]._number)); +; + break;} +case 123: +#line 1621 "parser.yxx" +{ + egg_top_transform->add_scale2d(LVecBase2d(yyvsp[-2]._number, yyvsp[-1]._number)); +; + break;} +case 124: +#line 1628 "parser.yxx" +{ + egg_top_transform->add_scale3d(LVecBase3d(yyvsp[-3]._number, yyvsp[-2]._number, yyvsp[-1]._number)); ; break;} case 125: -#line 1623 "parser.yxx" +#line 1635 "parser.yxx" { - egg_stack.back()->as_transform()->add_matrix3 + egg_top_transform->add_uniform_scale(yyvsp[-1]._number); +; + break;} +case 128: +#line 1649 "parser.yxx" +{ + egg_top_transform->add_matrix3 (LMatrix3d(yyvsp[-8]._number, yyvsp[-7]._number, yyvsp[-6]._number, yyvsp[-5]._number, yyvsp[-4]._number, yyvsp[-3]._number, yyvsp[-2]._number, yyvsp[-1]._number, yyvsp[0]._number)); ; break;} -case 128: -#line 1641 "parser.yxx" +case 131: +#line 1667 "parser.yxx" { - egg_stack.back()->as_transform()->add_matrix4 + egg_top_transform->add_matrix4 (LMatrix4d(yyvsp[-15]._number, yyvsp[-14]._number, yyvsp[-13]._number, yyvsp[-12]._number, yyvsp[-11]._number, yyvsp[-10]._number, yyvsp[-9]._number, yyvsp[-8]._number, yyvsp[-7]._number, yyvsp[-6]._number, yyvsp[-5]._number, yyvsp[-4]._number, yyvsp[-3]._number, yyvsp[-2]._number, yyvsp[-1]._number, yyvsp[0]._number)); ; break;} -case 129: -#line 1660 "parser.yxx" +case 132: +#line 1686 "parser.yxx" { if (yyvsp[-2]._egg != (EggVertexPool *)NULL) { EggVertexPool *pool = DCAST(EggVertexPool, yyvsp[-2]._egg); @@ -2846,14 +2877,14 @@ case 129: } ; break;} -case 130: -#line 1693 "parser.yxx" +case 133: +#line 1719 "parser.yxx" { yyval._number = 1.0; ; break;} -case 131: -#line 1697 "parser.yxx" +case 134: +#line 1723 "parser.yxx" { string name = yyvsp[-3]._string; double value = yyvsp[-1]._number; @@ -2868,113 +2899,113 @@ case 131: yyval._number = result; ; break;} -case 133: -#line 1734 "parser.yxx" +case 136: +#line 1760 "parser.yxx" { EggGroup *group = DCAST(EggGroup, egg_stack.back()); group->set_lod(EggSwitchConditionDistance(yyvsp[-8]._number, yyvsp[-7]._number, LPoint3d(yyvsp[-4]._number, yyvsp[-3]._number, yyvsp[-2]._number))); ; break;} -case 134: -#line 1739 "parser.yxx" +case 137: +#line 1765 "parser.yxx" { EggGroup *group = DCAST(EggGroup, egg_stack.back()); group->set_lod(EggSwitchConditionDistance(yyvsp[-9]._number, yyvsp[-8]._number, LPoint3d(yyvsp[-4]._number, yyvsp[-3]._number, yyvsp[-2]._number), yyvsp[-7]._number)); ; break;} -case 135: -#line 1756 "parser.yxx" +case 138: +#line 1782 "parser.yxx" { egg_stack.push_back(new EggPolygon(yyvsp[0]._string)); ; break;} -case 136: -#line 1760 "parser.yxx" +case 139: +#line 1786 "parser.yxx" { yyval._egg = egg_stack.back(); egg_stack.pop_back(); ; break;} -case 137: -#line 1775 "parser.yxx" +case 140: +#line 1801 "parser.yxx" { egg_stack.push_back(new EggTriangleFan(yyvsp[0]._string)); ; break;} -case 138: -#line 1779 "parser.yxx" +case 141: +#line 1805 "parser.yxx" { yyval._egg = egg_stack.back(); egg_stack.pop_back(); ; break;} -case 139: -#line 1794 "parser.yxx" +case 142: +#line 1820 "parser.yxx" { egg_stack.push_back(new EggTriangleStrip(yyvsp[0]._string)); ; break;} -case 140: -#line 1798 "parser.yxx" +case 143: +#line 1824 "parser.yxx" { yyval._egg = egg_stack.back(); egg_stack.pop_back(); ; break;} -case 141: -#line 1813 "parser.yxx" +case 144: +#line 1839 "parser.yxx" { egg_stack.push_back(new EggPoint(yyvsp[0]._string)); ; break;} -case 142: -#line 1817 "parser.yxx" +case 145: +#line 1843 "parser.yxx" { yyval._egg = egg_stack.back(); egg_stack.pop_back(); ; break;} -case 143: -#line 1832 "parser.yxx" +case 146: +#line 1858 "parser.yxx" { egg_stack.push_back(new EggLine(yyvsp[0]._string)); ; break;} -case 144: -#line 1836 "parser.yxx" +case 147: +#line 1862 "parser.yxx" { yyval._egg = egg_stack.back(); egg_stack.pop_back(); ; break;} -case 145: -#line 1851 "parser.yxx" +case 148: +#line 1877 "parser.yxx" { egg_stack.push_back(new EggNurbsSurface(yyvsp[0]._string)); ; break;} -case 146: -#line 1855 "parser.yxx" +case 149: +#line 1881 "parser.yxx" { yyval._egg = egg_stack.back(); egg_stack.pop_back(); ; break;} -case 147: -#line 1870 "parser.yxx" +case 150: +#line 1896 "parser.yxx" { egg_stack.push_back(new EggNurbsCurve(yyvsp[0]._string)); ; break;} -case 148: -#line 1874 "parser.yxx" +case 151: +#line 1900 "parser.yxx" { yyval._egg = egg_stack.back(); egg_stack.pop_back(); ; break;} -case 153: -#line 1904 "parser.yxx" +case 156: +#line 1930 "parser.yxx" { if (!egg_stack.back()->is_of_type(EggCompositePrimitive::get_class_type())) { eggyyerror("Not a composite primitive; components are not allowed here."); @@ -2989,8 +3020,8 @@ case 153: egg_stack.push_back(new EggPolygon); ; break;} -case 154: -#line 1918 "parser.yxx" +case 157: +#line 1944 "parser.yxx" { PT(EggPrimitive) prim = DCAST(EggPrimitive, egg_stack.back()); egg_stack.pop_back(); @@ -2998,8 +3029,8 @@ case 154: comp->set_component((int)yyvsp[-4]._number, prim); ; break;} -case 162: -#line 1932 "parser.yxx" +case 165: +#line 1958 "parser.yxx" { EggPrimitive *primitive = DCAST(EggPrimitive, egg_stack.back()); string name = yyvsp[-3]._string; @@ -3063,16 +3094,16 @@ case 162: } ; break;} -case 174: -#line 2016 "parser.yxx" +case 177: +#line 2042 "parser.yxx" { EggNurbsCurve *curve = DCAST(EggNurbsCurve, yyvsp[0]._egg); EggNurbsSurface *nurbs = DCAST(EggNurbsSurface, egg_stack.back()); nurbs->_curves_on_surface.push_back(curve); ; break;} -case 176: -#line 2023 "parser.yxx" +case 179: +#line 2049 "parser.yxx" { EggNurbsSurface *primitive = DCAST(EggNurbsSurface, egg_stack.back()); string name = yyvsp[-3]._string; @@ -3126,8 +3157,8 @@ case 176: } ; break;} -case 187: -#line 2097 "parser.yxx" +case 190: +#line 2123 "parser.yxx" { EggNurbsCurve *primitive = DCAST(EggNurbsCurve, egg_stack.back()); string name = yyvsp[-3]._string; @@ -3187,8 +3218,8 @@ case 187: } ; break;} -case 188: -#line 2166 "parser.yxx" +case 191: +#line 2192 "parser.yxx" { if (yyvsp[0]._egg != (EggTexture *)NULL) { EggTexture *texture = DCAST(EggTexture, yyvsp[0]._egg); @@ -3196,8 +3227,8 @@ case 188: } ; break;} -case 189: -#line 2183 "parser.yxx" +case 192: +#line 2209 "parser.yxx" { EggTexture *texture = NULL; @@ -3228,8 +3259,8 @@ case 189: DCAST(EggPrimitive, egg_stack.back())->add_texture(texture); ; break;} -case 190: -#line 2223 "parser.yxx" +case 193: +#line 2249 "parser.yxx" { if (yyvsp[0]._egg != (EggMaterial *)NULL) { EggMaterial *material = DCAST(EggMaterial, yyvsp[0]._egg); @@ -3237,14 +3268,14 @@ case 190: } ; break;} -case 191: -#line 2240 "parser.yxx" +case 194: +#line 2266 "parser.yxx" { DCAST(EggPrimitive, egg_stack.back())->set_normal(Normald(yyvsp[-2]._number, yyvsp[-1]._number, yyvsp[0]._number)); ; break;} -case 192: -#line 2244 "parser.yxx" +case 195: +#line 2270 "parser.yxx" { bool inserted = DCAST(EggPrimitive, egg_stack.back())->_dnormals. insert(EggMorphNormal(yyvsp[-5]._string, LVector3d(yyvsp[-3]._number, yyvsp[-2]._number, yyvsp[-1]._number))).second; @@ -3253,8 +3284,8 @@ case 192: } ; break;} -case 193: -#line 2252 "parser.yxx" +case 196: +#line 2278 "parser.yxx" { bool inserted = DCAST(EggPrimitive, egg_stack.back())->_dnormals. insert(EggMorphNormal(yyvsp[-4]._string, LVector3d(yyvsp[-3]._number, yyvsp[-2]._number, yyvsp[-1]._number))).second; @@ -3263,14 +3294,14 @@ case 193: } ; break;} -case 194: -#line 2270 "parser.yxx" +case 197: +#line 2296 "parser.yxx" { DCAST(EggPrimitive, egg_stack.back())->set_color(Colorf(yyvsp[-3]._number, yyvsp[-2]._number, yyvsp[-1]._number, yyvsp[0]._number)); ; break;} -case 195: -#line 2274 "parser.yxx" +case 198: +#line 2300 "parser.yxx" { bool inserted = DCAST(EggPrimitive, egg_stack.back())->_drgbas. insert(EggMorphColor(yyvsp[-6]._string, LVector4f(yyvsp[-4]._number, yyvsp[-3]._number, yyvsp[-2]._number, yyvsp[-1]._number))).second; @@ -3279,8 +3310,8 @@ case 195: } ; break;} -case 196: -#line 2282 "parser.yxx" +case 199: +#line 2308 "parser.yxx" { bool inserted = DCAST(EggPrimitive, egg_stack.back())->_drgbas. insert(EggMorphColor(yyvsp[-5]._string, LVector4f(yyvsp[-4]._number, yyvsp[-3]._number, yyvsp[-2]._number, yyvsp[-1]._number))).second; @@ -3289,16 +3320,16 @@ case 196: } ; break;} -case 197: -#line 2300 "parser.yxx" +case 200: +#line 2326 "parser.yxx" { EggPrimitive *primitive = DCAST(EggPrimitive, egg_stack.back()); int value = (int)yyvsp[0]._number; primitive->set_bface_flag(value!=0); ; break;} -case 198: -#line 2316 "parser.yxx" +case 201: +#line 2342 "parser.yxx" { if (yyvsp[-2]._egg != (EggVertexPool *)NULL) { EggVertexPool *pool = DCAST(EggVertexPool, yyvsp[-2]._egg); @@ -3320,8 +3351,8 @@ case 198: } ; break;} -case 199: -#line 2347 "parser.yxx" +case 202: +#line 2373 "parser.yxx" { EggNurbsSurface *nurbs = DCAST(EggNurbsSurface, egg_stack.back()); int u_order = (int)yyvsp[-1]._number; @@ -3330,8 +3361,8 @@ case 199: nurbs->set_v_order(v_order); ; break;} -case 200: -#line 2365 "parser.yxx" +case 203: +#line 2391 "parser.yxx" { EggNurbsSurface *nurbs = DCAST(EggNurbsSurface, egg_stack.back()); PTA_double nums = yyvsp[0]._number_list; @@ -3342,8 +3373,8 @@ case 200: } ; break;} -case 201: -#line 2385 "parser.yxx" +case 204: +#line 2411 "parser.yxx" { EggNurbsSurface *nurbs = DCAST(EggNurbsSurface, egg_stack.back()); PTA_double nums = yyvsp[0]._number_list; @@ -3354,23 +3385,23 @@ case 201: } ; break;} -case 202: -#line 2405 "parser.yxx" +case 205: +#line 2431 "parser.yxx" { EggNurbsSurface *nurbs = DCAST(EggNurbsSurface, egg_stack.back()); nurbs->_trims.push_back(EggNurbsSurface::Trim()); ; break;} -case 204: -#line 2421 "parser.yxx" +case 207: +#line 2447 "parser.yxx" { EggNurbsSurface *nurbs = DCAST(EggNurbsSurface, egg_stack.back()); nassertr(!nurbs->_trims.empty(), 0); nurbs->_trims.back().push_back(EggNurbsSurface::Loop()); ; break;} -case 205: -#line 2427 "parser.yxx" +case 208: +#line 2453 "parser.yxx" { EggNurbsSurface *nurbs = DCAST(EggNurbsSurface, egg_stack.back()); nassertr(!nurbs->_trims.empty(), 0); @@ -3379,16 +3410,16 @@ case 205: nurbs->_trims.back().back().push_back(curve); ; break;} -case 206: -#line 2446 "parser.yxx" +case 209: +#line 2472 "parser.yxx" { EggNurbsCurve *nurbs = DCAST(EggNurbsCurve, egg_stack.back()); int order = (int)yyvsp[0]._number; nurbs->set_order(order); ; break;} -case 207: -#line 2462 "parser.yxx" +case 210: +#line 2488 "parser.yxx" { EggNurbsCurve *nurbs = DCAST(EggNurbsCurve, egg_stack.back()); PTA_double nums = yyvsp[0]._number_list; @@ -3399,83 +3430,83 @@ case 207: } ; break;} -case 208: -#line 2483 "parser.yxx" +case 211: +#line 2509 "parser.yxx" { EggTable *table = new EggTable(yyvsp[0]._string); table->set_table_type(EggTable::TT_table); egg_stack.push_back(table); ; break;} -case 209: -#line 2489 "parser.yxx" +case 212: +#line 2515 "parser.yxx" { yyval._egg = egg_stack.back(); egg_stack.pop_back(); Thread::consider_yield(); ; break;} -case 210: -#line 2506 "parser.yxx" +case 213: +#line 2532 "parser.yxx" { EggTable *table = new EggTable(yyvsp[0]._string); table->set_table_type(EggTable::TT_bundle); egg_stack.push_back(table); ; break;} -case 211: -#line 2512 "parser.yxx" +case 214: +#line 2538 "parser.yxx" { yyval._egg = egg_stack.back(); egg_stack.pop_back(); ; break;} -case 213: -#line 2528 "parser.yxx" -{ - DCAST(EggTable, egg_stack.back())->add_child(DCAST(EggNode, yyvsp[0]._egg)); -; - break;} -case 214: -#line 2532 "parser.yxx" -{ - DCAST(EggTable, egg_stack.back())->add_child(DCAST(EggNode, yyvsp[0]._egg)); -; - break;} -case 215: -#line 2536 "parser.yxx" -{ - DCAST(EggTable, egg_stack.back())->add_child(DCAST(EggNode, yyvsp[0]._egg)); -; - break;} case 216: -#line 2540 "parser.yxx" +#line 2554 "parser.yxx" { DCAST(EggTable, egg_stack.back())->add_child(DCAST(EggNode, yyvsp[0]._egg)); ; break;} case 217: -#line 2544 "parser.yxx" +#line 2558 "parser.yxx" { DCAST(EggTable, egg_stack.back())->add_child(DCAST(EggNode, yyvsp[0]._egg)); ; break;} case 218: -#line 2559 "parser.yxx" +#line 2562 "parser.yxx" +{ + DCAST(EggTable, egg_stack.back())->add_child(DCAST(EggNode, yyvsp[0]._egg)); +; + break;} +case 219: +#line 2566 "parser.yxx" +{ + DCAST(EggTable, egg_stack.back())->add_child(DCAST(EggNode, yyvsp[0]._egg)); +; + break;} +case 220: +#line 2570 "parser.yxx" +{ + DCAST(EggTable, egg_stack.back())->add_child(DCAST(EggNode, yyvsp[0]._egg)); +; + break;} +case 221: +#line 2585 "parser.yxx" { EggSAnimData *anim_data = new EggSAnimData(yyvsp[0]._string); egg_stack.push_back(anim_data); ; break;} -case 219: -#line 2564 "parser.yxx" +case 222: +#line 2590 "parser.yxx" { yyval._egg = egg_stack.back(); egg_stack.pop_back(); ; break;} -case 221: -#line 2581 "parser.yxx" +case 224: +#line 2607 "parser.yxx" { EggSAnimData *anim_data = DCAST(EggSAnimData, egg_stack.back()); string name = yyvsp[-3]._string; @@ -3488,28 +3519,28 @@ case 221: } ; break;} -case 222: -#line 2593 "parser.yxx" +case 225: +#line 2619 "parser.yxx" { DCAST(EggSAnimData, egg_stack.back())->set_data(yyvsp[-1]._number_list); ; break;} -case 223: -#line 2607 "parser.yxx" +case 226: +#line 2633 "parser.yxx" { EggXfmAnimData *anim_data = new EggXfmAnimData(yyvsp[0]._string); egg_stack.push_back(anim_data); ; break;} -case 224: -#line 2612 "parser.yxx" +case 227: +#line 2638 "parser.yxx" { yyval._egg = egg_stack.back(); egg_stack.pop_back(); ; break;} -case 226: -#line 2629 "parser.yxx" +case 229: +#line 2655 "parser.yxx" { EggXfmAnimData *anim_data = DCAST(EggXfmAnimData, egg_stack.back()); string name = yyvsp[-3]._string; @@ -3527,28 +3558,28 @@ case 226: } ; break;} -case 227: -#line 2646 "parser.yxx" +case 230: +#line 2672 "parser.yxx" { DCAST(EggXfmAnimData, egg_stack.back())->set_data(yyvsp[-1]._number_list); ; break;} -case 228: -#line 2660 "parser.yxx" +case 231: +#line 2686 "parser.yxx" { EggXfmSAnim *anim_group = new EggXfmSAnim(yyvsp[0]._string); egg_stack.push_back(anim_group); ; break;} -case 229: -#line 2665 "parser.yxx" +case 232: +#line 2691 "parser.yxx" { yyval._egg = egg_stack.back(); egg_stack.pop_back(); ; break;} -case 231: -#line 2682 "parser.yxx" +case 234: +#line 2708 "parser.yxx" { EggXfmSAnim *anim_group = DCAST(EggXfmSAnim, egg_stack.back()); string name = yyvsp[-3]._string; @@ -3564,28 +3595,28 @@ case 231: } ; break;} -case 232: -#line 2697 "parser.yxx" +case 235: +#line 2723 "parser.yxx" { DCAST(EggXfmSAnim, egg_stack.back())->add_child(DCAST(EggNode, yyvsp[0]._egg)); ; break;} -case 233: -#line 2712 "parser.yxx" +case 236: +#line 2738 "parser.yxx" { EggAnimPreload *anim_preload = new EggAnimPreload(yyvsp[0]._string); egg_stack.push_back(anim_preload); ; break;} -case 234: -#line 2717 "parser.yxx" +case 237: +#line 2743 "parser.yxx" { yyval._egg = egg_stack.back(); egg_stack.pop_back(); ; break;} -case 236: -#line 2734 "parser.yxx" +case 239: +#line 2760 "parser.yxx" { EggAnimPreload *anim_preload = DCAST(EggAnimPreload, egg_stack.back()); string name = yyvsp[-3]._string; @@ -3600,32 +3631,32 @@ case 236: } ; break;} -case 237: -#line 2758 "parser.yxx" +case 240: +#line 2784 "parser.yxx" { yyval._number_list = PTA_double::empty_array(0); ; break;} -case 238: -#line 2762 "parser.yxx" +case 241: +#line 2788 "parser.yxx" { yyval._number_list.push_back((double)yyvsp[0]._number); ; break;} -case 239: -#line 2776 "parser.yxx" +case 242: +#line 2802 "parser.yxx" { yyval._number_list = PTA_double::empty_array(0); ; break;} -case 240: -#line 2780 "parser.yxx" +case 243: +#line 2806 "parser.yxx" { yyval._number_list.push_back(yyvsp[0]._number); ; break;} -case 241: -#line 2794 "parser.yxx" +case 244: +#line 2820 "parser.yxx" { string name = yyvsp[0]._string; Textures::iterator vpi = textures.find(name); @@ -3637,8 +3668,8 @@ case 241: } ; break;} -case 242: -#line 2815 "parser.yxx" +case 245: +#line 2841 "parser.yxx" { string name = yyvsp[0]._string; Materials::iterator vpi = materials.find(name); @@ -3650,8 +3681,8 @@ case 242: } ; break;} -case 243: -#line 2836 "parser.yxx" +case 246: +#line 2862 "parser.yxx" { string name = yyvsp[0]._string; VertexPools::iterator vpi = vertex_pools.find(name); @@ -3667,8 +3698,8 @@ case 243: } ; break;} -case 244: -#line 2861 "parser.yxx" +case 247: +#line 2887 "parser.yxx" { string name = yyvsp[0]._string; Groups::iterator vpi = groups.find(name); @@ -3680,94 +3711,94 @@ case 244: } ; break;} -case 245: -#line 2882 "parser.yxx" +case 248: +#line 2908 "parser.yxx" { eggyyerror("Name required."); yyval._string = ""; ; break;} -case 248: -#line 2911 "parser.yxx" +case 251: +#line 2937 "parser.yxx" { eggyyerror("String required."); yyval._string = ""; ; break;} -case 250: -#line 2927 "parser.yxx" +case 253: +#line 2953 "parser.yxx" { yyval._string = ""; ; break;} -case 252: -#line 2945 "parser.yxx" -{ - yyval._string = yyvsp[0]._string; -; - break;} -case 253: -#line 2949 "parser.yxx" -{ - yyval._string = yyvsp[0]._string; -; - break;} case 255: -#line 2966 "parser.yxx" -{ - yyval._string = ""; -; - break;} -case 256: -#line 2970 "parser.yxx" +#line 2971 "parser.yxx" { yyval._string = yyvsp[0]._string; ; break;} -case 257: -#line 2986 "parser.yxx" +case 256: +#line 2975 "parser.yxx" { yyval._string = yyvsp[0]._string; ; break;} case 258: -#line 2990 "parser.yxx" +#line 2992 "parser.yxx" +{ + yyval._string = ""; +; + break;} +case 259: +#line 2996 "parser.yxx" +{ + yyval._string = yyvsp[0]._string; +; + break;} +case 260: +#line 3012 "parser.yxx" +{ + yyval._string = yyvsp[0]._string; +; + break;} +case 261: +#line 3016 "parser.yxx" { yyval._string = yyvsp[-1]._string + "\n" + yyvsp[0]._string; ; break;} -case 260: -#line 3005 "parser.yxx" +case 263: +#line 3031 "parser.yxx" { yyval._number = yyvsp[0]._ulong; ; break;} -case 261: -#line 3020 "parser.yxx" +case 264: +#line 3046 "parser.yxx" { yyval._number = yyvsp[0]._number; yyval._ulong = (unsigned long)yyvsp[0]._number; yyval._string = yyvsp[0]._string; ; break;} -case 262: -#line 3026 "parser.yxx" +case 265: +#line 3052 "parser.yxx" { yyval._number = yyvsp[0]._ulong; yyval._ulong = yyvsp[0]._ulong; yyval._string = yyvsp[0]._string; ; break;} -case 263: -#line 3032 "parser.yxx" +case 266: +#line 3058 "parser.yxx" { yyval._number = 0.0; yyval._ulong = 0; yyval._string = yyvsp[0]._string; ; break;} -case 264: -#line 3049 "parser.yxx" +case 267: +#line 3075 "parser.yxx" { int i = (int)yyvsp[0]._number; if ((double)i != yyvsp[0]._number) { @@ -3776,8 +3807,8 @@ case 264: } ; break;} -case 265: -#line 3057 "parser.yxx" +case 268: +#line 3083 "parser.yxx" { yyval._number = yyvsp[0]._ulong; ; @@ -4004,4 +4035,4 @@ yyerrhandle: } return 1; } -#line 3064 "parser.yxx" +#line 3090 "parser.yxx" diff --git a/panda/src/egg/parser.h.prebuilt b/panda/src/egg/parser.h.prebuilt index 86f1627b11..b191f2ee40 100644 --- a/panda/src/egg/parser.h.prebuilt +++ b/panda/src/egg/parser.h.prebuilt @@ -24,69 +24,67 @@ #define DTREF 280 #define DYNAMICVERTEXPOOL 281 #define EXTERNAL_FILE 282 -#define FLIGHT 283 -#define GROUP 284 -#define HIP 285 -#define INTANGENT 286 -#define JOINT 287 -#define KNOTS 288 -#define INCLUDE 289 -#define INSTANCE 290 -#define LINE 291 -#define LOOP 292 -#define MATERIAL 293 -#define MATRIX3 294 -#define MATRIX4 295 -#define MODEL 296 -#define MREF 297 -#define NORMAL 298 -#define NURBSCURVE 299 -#define NURBSSURFACE 300 -#define OBJECTTYPE 301 -#define ORDER 302 -#define OUTTANGENT 303 -#define POINTLIGHT 304 -#define POLYGON 305 -#define REF 306 -#define RGBA 307 -#define ROTATE 308 -#define ROTX 309 -#define ROTY 310 -#define ROTZ 311 -#define SANIM 312 -#define SCALAR 313 -#define SCALE 314 -#define SEQUENCE 315 -#define SHADING 316 -#define SWITCH 317 -#define SWITCHCONDITION 318 -#define TABLE 319 -#define TABLE_V 320 -#define TAG 321 -#define TANGENT 322 -#define TEXLIST 323 -#define TEXTURE 324 -#define TLENGTHS 325 -#define TRANSFORM 326 -#define TRANSLATE 327 -#define TREF 328 -#define TRIANGLEFAN 329 -#define TRIANGLESTRIP 330 -#define TRIM 331 -#define TXT 332 -#define UKNOTS 333 -#define UV 334 -#define VKNOTS 335 -#define VERTEX 336 -#define VERTEXANIM 337 -#define VERTEXPOOL 338 -#define VERTEXREF 339 -#define XFMANIM 340 -#define XFMSANIM 341 -#define START_EGG 342 -#define START_GROUP_BODY 343 -#define START_TEXTURE_BODY 344 -#define START_PRIMITIVE_BODY 345 +#define GROUP 283 +#define DEFAULTPOSE 284 +#define JOINT 285 +#define KNOTS 286 +#define INCLUDE 287 +#define INSTANCE 288 +#define LINE 289 +#define LOOP 290 +#define MATERIAL 291 +#define MATRIX3 292 +#define MATRIX4 293 +#define MODEL 294 +#define MREF 295 +#define NORMAL 296 +#define NURBSCURVE 297 +#define NURBSSURFACE 298 +#define OBJECTTYPE 299 +#define ORDER 300 +#define OUTTANGENT 301 +#define POINTLIGHT 302 +#define POLYGON 303 +#define REF 304 +#define RGBA 305 +#define ROTATE 306 +#define ROTX 307 +#define ROTY 308 +#define ROTZ 309 +#define SANIM 310 +#define SCALAR 311 +#define SCALE 312 +#define SEQUENCE 313 +#define SHADING 314 +#define SWITCH 315 +#define SWITCHCONDITION 316 +#define TABLE 317 +#define TABLE_V 318 +#define TAG 319 +#define TANGENT 320 +#define TEXLIST 321 +#define TEXTURE 322 +#define TLENGTHS 323 +#define TRANSFORM 324 +#define TRANSLATE 325 +#define TREF 326 +#define TRIANGLEFAN 327 +#define TRIANGLESTRIP 328 +#define TRIM 329 +#define TXT 330 +#define UKNOTS 331 +#define UV 332 +#define VKNOTS 333 +#define VERTEX 334 +#define VERTEXANIM 335 +#define VERTEXPOOL 336 +#define VERTEXREF 337 +#define XFMANIM 338 +#define XFMSANIM 339 +#define START_EGG 340 +#define START_GROUP_BODY 341 +#define START_TEXTURE_BODY 342 +#define START_PRIMITIVE_BODY 343 extern YYSTYPE eggyylval; diff --git a/panda/src/egg/parser.yxx b/panda/src/egg/parser.yxx index ef8fee5999..ae5e42b819 100644 --- a/panda/src/egg/parser.yxx +++ b/panda/src/egg/parser.yxx @@ -33,6 +33,7 @@ #include "eggExternalReference.h" #include "eggData.h" #include "eggAnimPreload.h" +#include "eggTransform.h" #include "pt_EggTexture.h" #include "pt_EggMaterial.h" @@ -61,6 +62,9 @@ typedef pvector< PT(EggObject) > EggStack; static EggStack egg_stack; +// This is used just when parsing a or entry. +static EggTransform *egg_top_transform; + // There's one "top-level" egg node, which is where we should parent // things (e.g. implicit textures) encountered in the egg file that // don't have an explicit place in the tree. If this is NULL, such @@ -160,7 +164,7 @@ egg_cleanup_parser() { %token COORDSYSTEM CV DART %token DNORMAL DRGBA DUV DXYZ DCS DISTANCE DTREF %token DYNAMICVERTEXPOOL EXTERNAL_FILE -%token FLIGHT GROUP HIP INTANGENT +%token GROUP DEFAULTPOSE %token JOINT KNOTS INCLUDE %token INSTANCE LINE LOOP MATERIAL MATRIX3 MATRIX4 MODEL MREF NORMAL %token NURBSCURVE NURBSSURFACE OBJECTTYPE ORDER @@ -1432,6 +1436,7 @@ group_body: group->set_texlist_flag(value!=0); } | group_body transform + | group_body default_pose | group_body group_vertex_ref | group_body switchcondition | group_body REF '{' group_name '}' @@ -1512,7 +1517,28 @@ collide_flags: transform: TRANSFORM { - egg_stack.back()->as_transform()->clear_transform(); + egg_top_transform = egg_stack.back()->as_transform(); + egg_top_transform->clear_transform(); +} + '{' transform_body '}' + ; + +/* + * default_pose + * + * enter: TOS is an EggGroup + * exit: default_pose matrix has been set. + * + */ +default_pose: + DEFAULTPOSE +{ + EggGroup *group = DCAST(EggGroup, egg_stack.back()); + if (group->get_group_type() != EggGroup::GT_joint) { + eggyywarning("Unexpected outside of "); + } + egg_top_transform = &group->modify_default_pose(); + egg_top_transform->clear_transform(); } '{' transform_body '}' ; @@ -1521,7 +1547,7 @@ transform: /* * transform_body * - * enter: TOS is some kind of EggTransform. + * enter: egg_top_transform has been assigned. * exit: transform has been filled in. * */ @@ -1544,70 +1570,70 @@ transform_body: translate2d: TRANSLATE '{' real real '}' { - egg_stack.back()->as_transform()->add_translate2d(LVector2d($3, $4)); + egg_top_transform->add_translate2d(LVector2d($3, $4)); } ; translate3d: TRANSLATE '{' real real real '}' { - egg_stack.back()->as_transform()->add_translate3d(LVector3d($3, $4, $5)); + egg_top_transform->add_translate3d(LVector3d($3, $4, $5)); } ; rotate2d: ROTATE '{' real '}' { - egg_stack.back()->as_transform()->add_rotate2d($3); + egg_top_transform->add_rotate2d($3); } ; rotx: ROTX '{' real '}' { - egg_stack.back()->as_transform()->add_rotx($3); + egg_top_transform->add_rotx($3); } ; roty: ROTY '{' real '}' { - egg_stack.back()->as_transform()->add_roty($3); + egg_top_transform->add_roty($3); } ; rotz: ROTZ '{' real '}' { - egg_stack.back()->as_transform()->add_rotz($3); + egg_top_transform->add_rotz($3); } ; rotate3d: ROTATE '{' real real real real '}' { - egg_stack.back()->as_transform()->add_rotate3d($3, LVector3d($4, $5, $6)); + egg_top_transform->add_rotate3d($3, LVector3d($4, $5, $6)); } ; scale2d: SCALE '{' real real '}' { - egg_stack.back()->as_transform()->add_scale2d(LVecBase2d($3, $4)); + egg_top_transform->add_scale2d(LVecBase2d($3, $4)); } ; scale3d: SCALE '{' real real real '}' { - egg_stack.back()->as_transform()->add_scale3d(LVecBase3d($3, $4, $5)); + egg_top_transform->add_scale3d(LVecBase3d($3, $4, $5)); } ; uniform_scale: SCALE '{' real '}' { - egg_stack.back()->as_transform()->add_uniform_scale($3); + egg_top_transform->add_uniform_scale($3); } ; @@ -1621,7 +1647,7 @@ matrix3_body: real real real real real real { - egg_stack.back()->as_transform()->add_matrix3 + egg_top_transform->add_matrix3 (LMatrix3d($1, $2, $3, $4, $5, $6, $7, $8, $9)); @@ -1639,7 +1665,7 @@ matrix4_body: real real real real real real real real { - egg_stack.back()->as_transform()->add_matrix4 + egg_top_transform->add_matrix4 (LMatrix4d($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, diff --git a/panda/src/egg2pg/characterMaker.cxx b/panda/src/egg2pg/characterMaker.cxx index e572efada7..5d59715bce 100644 --- a/panda/src/egg2pg/characterMaker.cxx +++ b/panda/src/egg2pg/characterMaker.cxx @@ -224,17 +224,21 @@ egg_to_slider(const string &name) { CharacterJointBundle *CharacterMaker:: make_bundle() { build_joint_hierarchy(_egg_root, _skeleton_root, -1); - make_geometry(_egg_root); _bundle->sort_descendants(); parent_joint_nodes(_skeleton_root); + // Now call update() one more time, to ensure that all of the joints + // have their correct transform (since we might have modified the + // default transform after construction). + _bundle->force_update(); + return _bundle; } //////////////////////////////////////////////////////////////////// -// Function: CharacterMaker::build_hierarchy +// Function: CharacterMaker::build_joint_hierarchy // Access: Private // Description: //////////////////////////////////////////////////////////////////// @@ -271,6 +275,9 @@ build_joint_hierarchy(EggNode *egg_node, PartGroup *part, int index) { // We need to get the transform of the joint, and then convert // it to single-precision. LMatrix4d matd; + + // First, we get the original, initial transform from the + // entry. if (egg_group->has_transform()) { matd = egg_group->get_transform3d(); } else { @@ -285,6 +292,16 @@ build_joint_hierarchy(EggNode *egg_node, PartGroup *part, int index) { index = _parts.size(); _parts.push_back(joint); + // Now that we have computed _net_transform (which we need to + // convert the vertices), update the default transform from the + // entry. + if (egg_group->get_default_pose().has_transform()) { + matd = egg_group->get_default_pose().get_transform3d(); + matf = LCAST(float, matd); + joint->_default_value = matf; + joint->_value = matf; + } + if (egg_group->has_dcs_type()) { // If the joint requested an explicit DCS, create a node for // it. diff --git a/panda/src/gobj/transformBlend.cxx b/panda/src/gobj/transformBlend.cxx index 3bd990b194..08a46d5efd 100644 --- a/panda/src/gobj/transformBlend.cxx +++ b/panda/src/gobj/transformBlend.cxx @@ -189,6 +189,7 @@ write(ostream &out, int indent_level) const { mat.write(out, indent_level + 4); } LMatrix4f blend; + update_blend(current_thread); get_blend(blend, current_thread); indent(out, indent_level) << "Blended result =\n"; diff --git a/pandatool/src/egg-optchar/eggOptchar.cxx b/pandatool/src/egg-optchar/eggOptchar.cxx index ebd6f28225..aeb0ff92c0 100644 --- a/pandatool/src/egg-optchar/eggOptchar.cxx +++ b/pandatool/src/egg-optchar/eggOptchar.cxx @@ -112,6 +112,16 @@ EggOptchar() { "objects parented to this node will not inherit its animation.", &EggOptchar::dispatch_flag_groups, NULL, &_flag_groups); + add_option + ("defpose", "anim.egg,frame", 0, + "Specify the model's default pose. The pose is taken " + "from the indicated frame of the named animation file (which must " + "also be named separately on the command line). The " + "pose will be held by the model in " + "the absence of any animation, and need not be the same " + "pose in which the model was originally skinned.", + &EggOptchar::dispatch_string, NULL, &_defpose); + add_option ("preload", "", 0, "Add an entry for each animation to the model file(s). " @@ -273,6 +283,13 @@ run() { do_preload(); } + // Finally, set the default poses. It's important not to do this + // until after we have adjusted all of the transforms for the + // various joints. + if (!_defpose.empty()) { + do_defpose(); + } + write_eggs(); } } @@ -1421,6 +1438,83 @@ do_preload() { } } +//////////////////////////////////////////////////////////////////// +// Function: EggOptchar::do_defpose +// Access: Private +// Description: Sets the initial pose for the character(s). +//////////////////////////////////////////////////////////////////// +void EggOptchar:: +do_defpose() { + // Split out the defpose parameter. + Filename egg_filename; + size_t comma = _defpose.find(','); + egg_filename = _defpose.substr(0, comma); + + string frame_str; + if (comma != string::npos) { + frame_str = _defpose.substr(comma + 1); + } + frame_str = trim(frame_str); + int frame = 0; + if (!frame_str.empty()) { + if (!string_to_int(frame_str, frame)) { + nout << "Invalid integer in -defpose: " << frame_str << "\n"; + return; + } + } + + // Now find the named animation file in our egg list. + int egg_index = -1; + int num_eggs = _collection->get_num_eggs(); + int i; + + // First, look for an exact match. + for (i = 0; i < num_eggs && egg_index == -1; ++i) { + if (_collection->get_egg(i)->get_egg_filename() == egg_filename) { + egg_index = i; + } + } + + // Then, look for an inexact match. + string egg_basename = egg_filename.get_basename_wo_extension(); + for (i = 0; i < num_eggs && egg_index == -1; ++i) { + if (_collection->get_egg(i)->get_egg_filename().get_basename_wo_extension() == egg_basename) { + egg_index = i; + } + } + + if (egg_index == -1) { + // No joy. + nout << "Egg file " << egg_filename << " named in -defpose, but does not appear on command line.\n"; + return; + } + + EggData *egg_data = _collection->get_egg(egg_index); + + if (_collection->get_num_models(egg_index) == 0) { + nout << "Egg file " << egg_filename << " does not include any model or animation.\n"; + return; + } + + // Now get the first model (or animation) named by this egg file. + int mi = _collection->get_first_model_index(egg_index); + EggCharacterData *ch = _collection->get_character_by_model_index(mi); + EggJointData *root_joint = ch->get_root_joint(); + + int anim_index = -1; + for (i = 0; i < ch->get_num_models() && anim_index == -1; ++i) { + if (ch->get_egg_data(i) == egg_data) { + anim_index = i; + } + } + + // This couldn't possibly fail, since we already checked this above. + nassertv(anim_index != -1); + + // Now we can recursively apply the default pose to the hierarchy. + ch->get_root_joint()->apply_default_pose(anim_index, frame); +} + int main(int argc, char *argv[]) { // A call to pystub() to force libpystub.so to be linked in. pystub(); diff --git a/pandatool/src/egg-optchar/eggOptchar.h b/pandatool/src/egg-optchar/eggOptchar.h index c9eb23721d..16834b532d 100644 --- a/pandatool/src/egg-optchar/eggOptchar.h +++ b/pandatool/src/egg-optchar/eggOptchar.h @@ -78,6 +78,7 @@ private: void do_flag_groups(EggGroupNode *egg_group); void rename_primitives(EggGroupNode *egg_group, const string &name); void do_preload(); + void do_defpose(); bool _list_hierarchy; bool _list_hierarchy_v; @@ -118,6 +119,8 @@ private: typedef pvector FlagGroups; FlagGroups _flag_groups; + string _defpose; + bool _optimal_hierarchy; double _vref_quantum; }; diff --git a/pandatool/src/eggcharbase/eggJointData.cxx b/pandatool/src/eggcharbase/eggJointData.cxx index aabee9631a..2962c61566 100644 --- a/pandatool/src/eggcharbase/eggJointData.cxx +++ b/pandatool/src/eggcharbase/eggJointData.cxx @@ -411,6 +411,37 @@ quantize_channels(const string &components, double quantum) { } } +//////////////////////////////////////////////////////////////////// +// Function: EggJointData::apply_default_pose +// Access: Public +// Description: Applies the pose from the indicated frame of the +// indicated source model_index as the initial pose for +// this joint, and does this recursively on all joints +// below. +//////////////////////////////////////////////////////////////////// +void EggJointData:: +apply_default_pose(int source_model, int frame) { + if (has_model(source_model)) { + EggJointPointer *source_joint; + DCAST_INTO_V(source_joint, _back_pointers[source_model]); + BackPointers::iterator bpi; + for (bpi = _back_pointers.begin(); bpi != _back_pointers.end(); ++bpi) { + EggBackPointer *back = (*bpi); + if (back != (EggBackPointer *)NULL) { + EggJointPointer *joint; + DCAST_INTO_V(joint, back); + joint->apply_default_pose(source_joint, frame); + } + } + } + + Children::iterator ci; + for (ci = _children.begin(); ci != _children.end(); ++ci) { + EggJointData *child = (*ci); + child->apply_default_pose(source_model, frame); + } +} + //////////////////////////////////////////////////////////////////// // Function: EggJointData::add_back_pointer // Access: Public, Virtual diff --git a/pandatool/src/eggcharbase/eggJointData.h b/pandatool/src/eggcharbase/eggJointData.h index 8727bbc1b7..c5d9e6cc5e 100644 --- a/pandatool/src/eggcharbase/eggJointData.h +++ b/pandatool/src/eggcharbase/eggJointData.h @@ -59,6 +59,7 @@ public: void expose(EggGroup::DCSType dcs_type = EggGroup::DC_default); void zero_channels(const string &components); void quantize_channels(const string &components, double quantum); + void apply_default_pose(int source_model, int frame); virtual void add_back_pointer(int model_index, EggObject *egg_object); virtual void write(ostream &out, int indent_level = 0) const; diff --git a/pandatool/src/eggcharbase/eggJointNodePointer.cxx b/pandatool/src/eggcharbase/eggJointNodePointer.cxx index 99b109818d..c74122f88a 100644 --- a/pandatool/src/eggcharbase/eggJointNodePointer.cxx +++ b/pandatool/src/eggcharbase/eggJointNodePointer.cxx @@ -178,6 +178,27 @@ expose(EggGroup::DCSType dcs_type) { } } +//////////////////////////////////////////////////////////////////// +// Function: EggJointNodePointer::apply_default_pose +// Access: Public, Virtual +// Description: Applies the pose from the indicated frame of the +// indicated source joint as the initial pose for +// this joint. +//////////////////////////////////////////////////////////////////// +void EggJointNodePointer:: +apply_default_pose(EggJointPointer *source_joint, int frame) { + if (_joint != (EggGroup *)NULL) { + LMatrix4d pose; + if (frame >= 0 && frame < source_joint->get_num_frames()) { + pose = source_joint->get_frame(frame); + } else { + pose = get_frame(0); + } + _joint->clear_default_pose(); + _joint->modify_default_pose().add_matrix4(pose); + } +} + //////////////////////////////////////////////////////////////////// // Function: EggJointNodePointer::has_vertices // Access: Public, Virtual diff --git a/pandatool/src/eggcharbase/eggJointNodePointer.h b/pandatool/src/eggcharbase/eggJointNodePointer.h index 1f24ff0149..6d6d67dc7d 100644 --- a/pandatool/src/eggcharbase/eggJointNodePointer.h +++ b/pandatool/src/eggcharbase/eggJointNodePointer.h @@ -39,6 +39,7 @@ public: virtual bool do_rebuild(EggCharacterDb &db); virtual void expose(EggGroup::DCSType dcs_type); + virtual void apply_default_pose(EggJointPointer *source_joint, int frame); virtual bool has_vertices() const; diff --git a/pandatool/src/eggcharbase/eggJointPointer.cxx b/pandatool/src/eggcharbase/eggJointPointer.cxx index 5414e0bcb2..2dee1f0719 100644 --- a/pandatool/src/eggcharbase/eggJointPointer.cxx +++ b/pandatool/src/eggcharbase/eggJointPointer.cxx @@ -98,3 +98,14 @@ zero_channels(const string &) { void EggJointPointer:: quantize_channels(const string &, double) { } + +//////////////////////////////////////////////////////////////////// +// Function: EggJointPointer::apply_default_pose +// Access: Public, Virtual +// Description: Applies the pose from the indicated frame of the +// indicated source joint as the initial pose for +// this joint. +//////////////////////////////////////////////////////////////////// +void EggJointPointer:: +apply_default_pose(EggJointPointer *source_joint, int frame) { +} diff --git a/pandatool/src/eggcharbase/eggJointPointer.h b/pandatool/src/eggcharbase/eggJointPointer.h index 0bd854c3c0..a1e566165d 100644 --- a/pandatool/src/eggcharbase/eggJointPointer.h +++ b/pandatool/src/eggcharbase/eggJointPointer.h @@ -47,6 +47,7 @@ public: virtual void expose(EggGroup::DCSType dcs_type); virtual void zero_channels(const string &components); virtual void quantize_channels(const string &components, double quantum); + virtual void apply_default_pose(EggJointPointer *source_joint, int frame); virtual EggJointPointer *make_new_joint(const string &name)=0;