MAK RTIspy API Documentation for HLA 1516
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
momManager.h
Go to the documentation of this file.
1 /*********************************************************************
2 ** Copyright (c) 2001 MAK Technologies, Inc.
3 ** All rights reserved.
4 *********************************************************************/
5 /*********************************************************************
6 ** $RCSfile: momManager.h,v $ $Revision: 1.52 $ $State: Exp $
7 *********************************************************************/
8 #ifdef DtMOM
9 #ifndef momManager_H_
10 #define momManager_H_
11 
15 
16 #include <rtiMsConfig.h>
17 #include <internalTypes.h>
18 #include <momFactory.h>
19 #include <mInteraction.h>
20 #include <federatePub.h>
21 #include <federationPub.h>
22 #include <momInspector.h>
23 #include <momInters.h>
24 #include <momArgument.h>
25 #if defined(DtIFSPEC13)
26 #include "momObserver.h"
27 #elif defined(DtIFSPEC1516)
28 #include "momObserver1516.h"
29 #elif defined(DtIFSPEC1516E)
30 #include "momObserver1516e.h"
31 #else
32 #include "momObserver1516_2025.h"
33 #endif
34 #include <rtiApiTypes.h>
35 
36 #include <vlutil/vlList.h>
37 
39 class DtMomWrapper;
40 class DtMomObserver;
41 class DtFederateMgr;
42 class DtMomServices;
43 class DtAliveMsg;
44 class DtResignMsg;
45 class DtJoinResponseMsg;
46 class DtJoinConfirmMsg;
47 class DtRequestMsg;
48 class DtSubObjMsg;
49 class DtLocDelMsg;
50 class DtInteractionMsg;
51 class DtSaveTimeMsg;
52 class DtAssocSubRegMsg;
53 class DtUnsubObjMsg;
54 
65 class DT_DLL_LRC DtMomMgr
66 {
67 public:
69  typedef DtMomMgr* (*DtMomMgrCreator)(DtFederateMgr* fedMgrPtr);
70 
71 protected:
72 
74  DtMomMgr(DtFederateMgr* fedMgrPtr);
75 
76 public:
77 
79  virtual ~DtMomMgr();
80 
81 private:
82 
84  DtMomMgr(DtMomMgr const& );
85 
87  DtMomMgr& operator= (DtMomMgr const& );
88 
89 public:
90 
92  virtual void postJoinInit();
93 
97  virtual void postJoinConfirmInit();
98 
100  virtual bool isPostJoined() const;
101 
103  virtual void resign();
104 
106  virtual void preTick();
107 
109  virtual void postTick();
110 
112  virtual DtFederateMgr* federateMgr();
113  virtual DtFederateMgr* federateMgr() const;
114 
116  virtual DtRIDParameters* params();
117  virtual DtRIDParameters* params() const;
118 
120  virtual DtFomModuleManager* fomMgr();
121  virtual DtFomModuleManager* fomMgr() const;
122 
124  virtual DtFomClassMgr* fom();
125  virtual DtFomClassMgr* fom() const;
126 
128  virtual RTI_API::RTIambassador* rtiAmb();
129  virtual RTI_API::RTIambassador* rtiAmb() const;
130 
132  virtual DtConnectionMgr* connectMgr();
133  virtual DtConnectionMgr* connectMgr() const;
134 
136  virtual DtObjectMgr* objMgr();
137  virtual DtObjectMgr* objMgr() const;
138 
140  virtual DtInteractionMgr* interMgr();
141  virtual DtInteractionMgr* interMgr() const;
142 
144  DtRtiAmbObserverList* observers();
145 
147  virtual bool isMomPublishedInteraction(DtInteractionClassHandle classHandle);
148 
150  virtual bool interactionAllowedDuringSave(DtInteractionClassHandle handle) const;
151 
153  virtual bool interactionAllowedDuringRestore(DtInteractionClassHandle handle) const;
154 
156 #if defined(DtIFSPEC13)
157  virtual void processException(const RTI_API::Exception& exception);
158 #else
159  virtual void processException(MAKRti::DtString const & serviceName, const RTI_API::Exception& exception);
160 #endif
161 
163  virtual void prepareForSubscribe(DtInteractionClassInfo* description);
164 
166 #if defined(DtIFSPEC13)
167  virtual void observe(
168  const char* functionName,
169  RTI::Exception* except,
170  DtMomArgument const & argument1,
171  DtMomArgument const & argument2,
172  DtMomArgument const & argument3,
173  DtMomArgument const & argument4,
174  DtMomArgument const & argument5,
175  DtMomArgument const & returnArgument,
176  enum DtMomInitiatorOptions option);
177 #else
178  virtual void observe(
179  const char* functionName,
180  DtMomArgumentList const & arguments,
181  DtServiceGroup serviceGroup,
182  DtMomArgumentList const& returnArg,
183  RTI_API::Exception* except = NULL );
184 #endif
185 
188 
189  virtual bool serviceReportingSwitch() const;
190  virtual void setServiceReportingSwitch(bool value);
192 
194 
195  virtual bool sendServiceReportsToFileSwitch() const;
196  virtual void setSendServiceReportsToFileSwitch(bool value);
198 
200 
201  virtual bool exceptionReportingSwitch() const;
202  virtual void setExceptionReportingSwitch(bool value);
204 
206  virtual int verboseLevel() const;
207  virtual void setVerboseLevel(int level);
209 
212  virtual void designateFederationPublisher();
213 
215  virtual DtMomHandleList const & federateList() const;
216 
219  virtual unsigned long objectRegisterCount() const;
220 
223  virtual unsigned long objectDeleteCount() const;
224 
227  virtual unsigned long objectRemoveCount() const;
228 
231  virtual unsigned long objectDiscoverCount() const;
232 
235  virtual void resetTimeTrack(bool clearAccumulation);
236 
239  virtual void switchToGrantedTime();
240 
243  virtual void switchToAdvancingTime();
244 
247  virtual unsigned long grantedTime() const;
248 
250  virtual unsigned long deltaGrantedTime(MAKRti::DtTime currentTime) const;
251 
253  virtual void resetGrantedTime();
254 
257  virtual unsigned long advancingTime() const;
258 
260  virtual unsigned long deltaAdvancingTime(MAKRti::DtTime currentTime) const;
261 
263  virtual void resetAdvancingTime();
264 
266  virtual void updateTimeConstrained();
267 
269  virtual void updateTimeRegulating();
270 
272  virtual void updateAsynchronousDelivery();
273 
275  virtual void updateFederateState();
276 
278  virtual void updateTimeState();
279 
281  virtual void updateLastSave();
282 
284  virtual void updateNextSave();
285 
287  virtual void updateConveyRegion();
288 
290  virtual void updateConveyProducingFederate();
291 
293  virtual void updateAutoProvide();
294 
296  virtual void updateFromRID();
297 
299  virtual void sendAlive();
300 
302  virtual bool save(DtRtiSaveFile& file);
303 
307  virtual void prepareToRestore();
308 
310  virtual bool restore( DtRtiSaveFile& file );
311 
312 
313 #if defined(DtIFSPEC13)
314  virtual DtHandle federateRegion() const;
315  virtual DtHandle federateServiceRegion(DtServiceGroup serviceGroup) const;
316 #else
317  virtual RTI_API::RegionHandleSet const& federateRegion() const;
318  virtual RTI_API::RegionHandleSet const& federateServiceRegion(DtServiceGroup serviceGroup) const;
319 #endif
320 
321 public:
322 
326  static DtMomMgr* create(DtFederateMgr* fedMgrPtr);
327 
330  static void setCreatorFunction(DtMomMgrCreator fn);
331 
333  virtual void processResign(const DtResignMsg& msg);
334 
335 protected:
336 
338  virtual DtMomServices* serviceManager();
339 
341  virtual DtMomInspector * inspector();
342 
344  virtual DtMomFederatePublisher *federatePublisher();
345 
347  virtual DtMomFederationPublisher *federationPublisher();
348 
350  virtual DtMomInteractionFactory* factory();
351 
354  virtual bool addPublishedInteraction(char const* name);
355 
357 #if defined(DtIFSPEC13)
358  virtual void sendInteraction(DtMomInteraction* response, DtHandle regionHandle);
359 #else
360  virtual void sendInteraction(DtMomInteraction* response, RTI_API::RegionHandleSet const& regionSet);
361 #endif
362 
364 #if defined(DtIFSPEC13)
365  virtual void reportMomException(MAKRti::DtString const & interactionName, MAKRti::DtString const & exceptionDescription,
366  bool invalidParamCount);
367 #else
368  virtual void reportMomException(std::wstring const & interactionName, std::wstring const & exceptionDescription,
369  bool invalidParamCount);
370 #endif
371 
372 
374  virtual void testInteraction(DtMomInteraction& interaction);
375 
379 
380 
382  virtual void processAlive(const DtAliveMsg& msg);
383 
385  virtual void processJoinResp(const DtJoinResponseMsg& msg);
386 
388  virtual void processJoin(const DtJoinConfirmMsg& msg);
389 
391  virtual void processRequest(const DtRequestMsg& msg);
392 
394  virtual void processSub(const DtSubObjMsg& msg);
395 
397  virtual void processUnSub(const DtUnsubObjMsg& msg);
398 
400  virtual void processLocDelete(const DtLocDelMsg& msg);
401 
403  virtual void processInteraction(const DtInteractionMsg& msg);
404 
406  virtual void processSaveTime(const DtSaveTimeMsg& msg);
407 
408 #ifdef DDM
409  virtual void processAssocSubReg(const DtAssocSubRegMsg& msg);
411 #endif
412 
413 
415  virtual void alive (DtHandle handle);
416 
420 
421 
423  virtual void processRequestUpdatesSentInteraction(const DtRequestUpdatesSentInteraction& interaction);
425  virtual void processRequestPublicationsInteraction(const DtRequestPublicationsInteraction& interaction);
426  virtual void processRequestReflectionsReceivedInteraction(const DtRequestReflectionsReceivedInteraction& interaction);
427  virtual void processRequestObjectsOwnedInteraction(const DtRequestObjectsOwnedInteraction& interaction);
428  virtual void processRequestInteractionsSentInteraction(const DtRequestInteractionsSentInteraction& interaction);
429  virtual void processRequestObjectsUpdatedInteraction(const DtRequestObjectsUpdatedInteraction& interaction);
430  virtual void processRequestSubscriptionsInteraction(const DtRequestSubscriptionsInteraction& interaction);
431  virtual void processRequestObjectInformationInteraction(const DtRequestObjectInformationInteraction& interaction);
432  virtual void processRequestInteractionsReceivedInteraction(const DtRequestInteractionsReceivedInteraction& interaction);
433  virtual void processRequestObjectsReflectedInteraction(const DtRequestObjectsReflectedInteraction& interaction);
434 #if !defined(DtIFSPEC13)
435  virtual void processRequestSyncPointStatusInteraction(DtRequestSyncPointStatusInteraction const & interaction);
436  virtual void processRequestSyncPointsInteraction(DtRequestSyncPointsInteraction const & interaction);
437 #if !defined(DtIFSPEC1516)
438  virtual void processRequestFomModuleDataInteraction(DtRequestFomModuleDataInteraction const & interaction);
439  virtual void processRequestFederationFomModuleDataInteraction(
440  DtRequestFederationFomModuleDataInteraction const & interaction);
441  virtual void processRequestMimDataInteraction(DtRequestMimDataInteraction const & interaction);
442 #endif
443 #endif
444 
445 
447  virtual void processModifyAttributeStateInteraction(const DtModifyAttributeStateInteraction& interaction);
449  virtual void processSetTimingInteraction(const DtSetTimingInteraction& interaction);
450 #if (defined(DtIFSPEC13) || defined(DtIFSPEC1516) || defined(DtIFSPEC1516E))
451  virtual void processSetExceptionLoggingInteraction(const DtSetExceptionLoggingInteraction& interaction);
452  virtual void processSetServiceReportingInteraction(const DtSetServiceReportingInteraction& interaction);
453 #endif
454 #if !defined(DtIFSPEC13)
455  virtual void processSetFederationSwitchesInteraction(DtSetFederationSwitchesInteraction const & interaction);
456  virtual void processSetFederateSwitchesInteraction(DtSetFederateSwitchesInteraction const & interaction);
457 #endif
458 
459 
460 
461 protected:
462 
466 
467 
469  static void processRequest(const DtRequestMsg& msg, void* usr);
470 
472  static void processSub(const DtSubObjMsg& msg, void* usr);
473 
475  static void processUnSub(const DtUnsubObjMsg& msg, void* usr);
476 
478  static void processLocDelete(const DtLocDelMsg& msg, void* usr);
479 
481  static void processInteraction(const DtInteractionMsg& msg, void* usr);
482 
484  static void processSaveTime(const DtSaveTimeMsg& msg, void* usr);
485 
487  static void processJoinResp(const DtJoinResponseMsg& msg, void* usr);
488 
490  static void processJoin(const DtJoinConfirmMsg& msg, void* usr);
491 
493  static void processAlive(const DtAliveMsg& msg,void* usr);
494 
495 #ifdef DDM
496  static void processAssocSubReg(const DtAssocSubRegMsg& msg, void* usr);
498 #endif
499 
500 
504 
505 
507  static void processModifyAttributeStateInteraction(const DtModifyAttributeStateInteraction& interaction, void* usr);
509  static void processSetTimingInteraction(DtSetTimingInteraction const& interaction, void* usr);
510 #if (defined(DtIFSPEC13) || defined(DtIFSPEC1516) || defined(DtIFSPEC1516E))
511  static void processSetExceptionLoggingInteraction(DtSetExceptionLoggingInteraction const & interaction, void* usr);
512  static void processSetServiceReportingInteraction(DtSetServiceReportingInteraction const& interaction, void* usr);
513 #endif
514 #if !defined(DtIFSPEC13)
515  static void processSetFederationSwitchesInteraction(DtSetFederationSwitchesInteraction const & interaction, void* usr);
516  static void processSetFederateSwitchesInteraction(DtSetFederateSwitchesInteraction const & interaction, void* usr);
517 #endif
518 
519 
521  static void processRequestUpdatesSentInteraction(DtRequestUpdatesSentInteraction const & interaction, void* usr);
523  static void processRequestPublicationsInteraction(DtRequestPublicationsInteraction const & interaction, void* usr);
524  static void processRequestReflectionsReceivedInteraction(DtRequestReflectionsReceivedInteraction const & interaction,
525  void* usr);
526  static void processRequestObjectsOwnedInteraction(DtRequestObjectsOwnedInteraction const & interaction, void* usr);
527  static void processRequestInteractionsSentInteraction(const DtRequestInteractionsSentInteraction& interaction, void* usr);
528  static void processRequestObjectsUpdatedInteraction(DtRequestObjectsUpdatedInteraction const & interaction, void* usr);
529  static void processRequestSubscriptionsInteraction(DtRequestSubscriptionsInteraction const & interaction, void* usr);
530  static void processRequestObjectInformationInteraction(DtRequestObjectInformationInteraction const & interaction,
531  void* usr);
532  static void processRequestInteractionsReceivedInteraction(DtRequestInteractionsReceivedInteraction const & interaction,
533  void* usr);
534  static void processRequestObjectsReflectedInteraction(DtRequestObjectsReflectedInteraction const & interaction, void* usr);
535 #if !defined(DtIFSPEC13)
536  static void processRequestSyncPointStatusInteraction(DtRequestSyncPointStatusInteraction const & interaction, void* usr);
537  static void processRequestSyncPointsInteraction(DtRequestSyncPointsInteraction const & interaction, void* usr);
538 #if !defined(DtIFSPEC1516)
539  static void processRequestFomModuleDataInteraction(DtRequestFomModuleDataInteraction const & interaction, void* usr);
540  static void processRequestFederationFomModuleDataInteraction(DtRequestFederationFomModuleDataInteraction const & interaction,
541  void* usr);
542  static void processRequestMimDataInteraction(DtRequestMimDataInteraction const & interaction, void* usr);
543 #endif
544 #endif
545 
546 
548  static void processChangeAttributeOrderTypeInteraction(DtChangeAttributeOrderTypeInteraction const & interaction, void* usr);
550  static void processChangeAttributeTransportationTypeInteraction(
551  DtChangeAttributeTransportationTypeInteraction const & interaction, void* usr);
552  static void processChangeInteractionOrderTypeInteraction(DtChangeInteractionOrderTypeInteraction const & interaction,
553  void* usr);
554  static void processChangeInteractionTransportationTypeInteraction(
555  DtChangeInteractionTransportationTypeInteraction const & interaction, void* usr);
556  static void processDeleteObjectInstanceInteraction(DtDeleteObjectInstanceInteraction const & interaction, void* usr);
557  static void processDisableAsynchronousDeliveryInteraction(DtDisableAsynchronousDeliveryInteraction const & interaction,
558  void* usr);
559  static void processDisableTimeConstrainedInteraction(DtDisableTimeConstrainedInteraction const & interaction, void* usr);
560  static void processDisableTimeRegulationInteraction(DtDisableTimeRegulationInteraction const & interaction, void* usr);
561  static void processEnableAsynchronousDeliveryInteraction(DtEnableAsynchronousDeliveryInteraction const & interaction,
562  void* usr);
563  static void processEnableTimeConstrainedInteraction(DtEnableTimeConstrainedInteraction const & interaction, void* usr);
564  static void processEnableTimeRegulationInteraction(DtEnableTimeRegulationInteraction const & interaction, void* usr);
565  static void processFederateRestoreCompleteInteraction(DtFederateRestoreCompleteInteraction const & interaction, void* usr);
566  static void processFederateSaveBegunInteraction(DtFederateSaveBegunInteraction const & interaction, void* usr);
567  static void processFederateSaveCompleteInteraction(DtFederateSaveCompleteInteraction const & interaction, void* usr);
568  static void processFlushQueueRequestInteraction(DtFlushQueueRequestInteraction const & interaction, void* usr);
569  static void processLocalDeleteObjectInstanceInteraction(DtLocalDeleteObjectInstanceInteraction const & interaction,
570  void* usr);
571  static void processModifyLookaheadInteraction(DtModifyLookaheadInteraction const & interaction, void* usr);
572  static void processNextEventRequestInteraction(DtNextEventRequestInteraction const & interaction, void* usr);
573  static void processNextEventRequestAvailableInteraction(DtNextEventRequestAvailableInteraction const & interaction,
574  void* usr);
575  static void processPublishInteractionClassInteraction(DtPublishInteractionClassInteraction const & interaction, void* usr);
576  static void processPublishObjectClassInteraction(DtPublishObjectClassInteraction const & interaction, void* usr);
577  static void processResignFederationExecutionInteraction(DtResignFederationExecutionInteraction const & interaction,
578  void* usr);
579  static void processSubscribeInteractionClassInteraction(DtSubscribeInteractionClassInteraction const & interaction,
580  void* usr);
581  static void processSubscribeObjectClassAttributesInteraction(DtSubscribeObjectClassAttributesInteraction const & interaction,
582  void* usr);
583  static void processSynchronizationPointAchievedInteraction(DtSynchronizationPointAchievedInteraction const & interaction,
584  void* usr);
585  static void processTimeAdvanceRequestInteraction(DtTimeAdvanceRequestInteraction const & interaction, void* usr);
586  static void processTimeAdvanceRequestAvailableInteraction(DtTimeAdvanceRequestAvailableInteraction const & interaction,
587  void* usr);
588  static void processUnconditionalAttributeOwnershipDivestitureInteraction(
589  DtUnconditionalAttributeOwnershipDivestitureInteraction const & interaction, void* usr);
590  static void processUnpublishInteractionClassInteraction(DtUnpublishInteractionClassInteraction const & interaction,
591  void* usr);
592  static void processUnpublishObjectClassInteraction(DtUnpublishObjectClassInteraction const & interaction, void* usr);
593  static void processUnsubscribeInteractionClassInteraction(DtUnsubscribeInteractionClassInteraction const & interaction,
594  void* usr);
595  static void processUnsubscribeObjectClassInteraction(DtUnsubscribeObjectClassInteraction const & interaction, void* usr);
597 
598 
599 protected:
600 
602  DtFederateMgr* myFederateMgr;
603 
605  DtMomInspector* myInspector;
606 
608  DtMomServices* myServiceManager;
609 
611  DtMomInteractionFactory* myFactory;
612 
614  DtMomInterCbMgr* myCallbackMgr;
615 
617  DtInteractionClassHandleStdSet myPublishedInteractions;
618 
620  DtMomFederatePublisher* myFederatePublisher;
621 
623  DtMomFederationPublisher* myFederationPublisher;
624 
626  DtMomHandleList myFederateList;
627 
629  bool myServiceReporting;
630 
632  bool mySendServiceReportsToFile;
633 
635  FILE* myServiceReportFile;
636  bool myFailedToOpenServiceReportFile;
637 
639  bool myExceptionLogging;
640 
642  bool myExceptReport;
643 
645  unsigned long myAlertCount;
646 
648  unsigned long myReportServiceID;
649 
651  bool myMomInvocation;
652 
654  DtMomObserver* myMomObserver;
655 
657  DtMomWrapper* myMomWrapper;
658 
660  int myVerboseLevel;
661 
663  bool myDoResign;
664 
666  bool myIsJoined;
667 
669  DtInteractionClassHandle mySaveBegunInteractionHandle;
671  DtInteractionClassHandle mySaveCompleteInteractionHandle;
673  DtInteractionClassHandle myResignFederationInteractionHandle;
675 
677  DtInteractionClassHandle myRestoreCompleteInteractionHandle;
678 
680  DtInteractionClassHandle myRequestSyncPointHandle;
682  DtInteractionClassHandle myRequestSyncPointStatusHandle;
683  DtInteractionClassHandle myModifyAttributeStateHandle;
684  DtInteractionClassHandle myRequestObjectInformationHandle;
686 
688  RTI_API::ResignAction myResAction;
689 
691  DtRtiApiUniquePtr<DtRtiApiTime> myTime;
693  DtRtiApiUniquePtr<DtRtiApiTimeInterval> myInterval;
694  DtRtiApiUniquePtr<DtRtiApiTime> myNullTime;
695  DtRtiApiUniquePtr<DtRtiApiTimeInterval> myNullInterval;
697 #if defined(DtIFSPEC13)
698  DtHandle myFederateRegion;
700 
702  DtHandle myFederateServiceRegion[DtServiceGroupMax];
703 #else
704  RTI_API::RegionHandleSet myFederateRegion;
706 
708  RTI_API::RegionHandleSet myFederateServiceRegion[DtServiceGroupMax];
709 #endif
710 
712  MAKRti::DtTime myBeginAdvancingTime;
713 
715  MAKRti::DtTime myBeginGrantedTime;
716 
718  unsigned long myGrantedTime;
719 
721  unsigned long myAdvancingTime;
722 
724  MAKRti::DtClock myClock;
725 
726  DtFederateHandleStdSet myPendingFederateJoin;
727 
728 protected:
729 
731  static DtMomMgrCreator theCreator;
732 };
733 
734 #endif
735 #endif
Definition: aliveMsg.h:24
Definition: joinRespMsg.h:28
Definition: joinConfMsg.h:24
Definition: ambObsList.h:20
This class manages the RTI&#39;s start-up configuration using both MTL variables and functions.
Definition: RIDparams.h:87
std::set< RegionHandle > RegionHandleSet
Definition: Typedefs.h:31
Definition: saveTimeMsg.h:21
Definition: resignMsg.h:36
DtHandle DtInteractionClassHandle
Definition: internalTypes.h:52
Instances of DtFederateMgr process federation-level messages (such as create, destroy, join, resign, and sync points) and manages the objects responsible for handling general communication, objects, interactions, the FOM, MOM, and data distribution mmg.
Definition: fedMgr.h:93
Instances of DtConnectionMgr manage the communication objects that the RTI will use to either communi...
Definition: connectMgr.h:67
Instances of DtInteractionMgr manage the sending and receiving of interactions.
Definition: interMgr.h:46
Definition: fomMgr.h:49
Definition: subObjMsg.h:23
The object manager class processes the object management services.
Definition: objMgr.h:81
ResignAction
Definition: datatypes.pb.h:305
Definition: intClassInfo.h:40
unsigned long DtHandle
The internal types.
Definition: internalTypes.h:41
std::set< DtInteractionClassHandle > DtInteractionClassHandleStdSet
Definition: internalTypes.h:53
#define DT_DLL_LRC
Definition: rtiMsConfig.h:155
Definition: saveFile.h:21
The declaration of internal types.
Definition: unsubObjMsg.h:24
Definition: fomModuleManager.h:39
Definition: locDelMsg.h:28
Definition: reqObjMsg.h:31
std::set< DtFederateHandle > DtFederateHandleStdSet
Definition: internalTypes.h:47
DtInteractionMsg is a message type that represents an HLA Interaction.
Definition: interactMsg.h:26

Document ID: Generated on Sun Jul 20 16:15:30 EDT 2025 from SVN revision 277985
Copyright © 2005-2025 MAK Technologies Inc. All Rights Reserved (www.mak.com)