## Xalan-C++ API Documentation

### The Xalan C++ XSLT Processor Version 1.7

Main Page Class Hierarchy Alphabetical List Compound List File List Compound Members File Members

# XPathExecutionContextDefault Class Reference

A basic implementation of the class XPathExecutionContext. More...

`#include <XPathExecutionContextDefault.hpp>`

Inheritance diagram for XPathExecutionContextDefault

Collaboration diagram for XPathExecutionContextDefault:

List of all members.

## Public Types

- typedef std::deque<XalanNode*> CurrentNodeStackType
- typedef std::deque<const NodeRefListBase*> ContextNodeListStackType

## Public Methods

- XPathExecutionContextDefault ( XPathEnvSupport& theXPathEnvSupport, DOMSupport& theDOMSupport, XObjectFactory& theXObjectFactory, XalanNode* theCurrentNode = 0, const NodeRefListBase* theContextNodeList = 0, const PrefixResolver* thePrefixResolver = 0)
    Construct an XPathExecutionContextDefault object. More...
- XPathExecutionContextDefault ( XalanNode* theCurrentNode = 0, const NodeRefListBase* theContextNodeList = 0, const PrefixResolver* thePrefixResolver = 0)
    Construct an XPathExecutionContextDefault object. More...
- virtual ~XPathExecutionContextDefault ()
- XPathEnvSupport* getXPathEnvSupport () const
    Get the XPathEnvSupport instance. More...
- void setXPathEnvSupport (XPathEnvSupport* theSupport)
    Set the XPathEnvSupport instance. More...
- void setDOMSupport (DOMSupport* theDOMSupport)
    Set the DOMSupport instance. More...
- void setXObjectFactory (XObjectFactory* theXObjectFactory)
    Set the XObjectFactory instance. More...
- XalanQNameByValue& getScratchQName () const
    Get a reference to the scratch QNameByValue instance. More...
- virtual void reset ()
    Reset the instance. More...
- virtual XalanNode* getCurrentNode () const
    Retrieve the node currently being executed. More...
- virtual void pushCurrentNode (XalanNode* theCurrentNode)
    Change the node currently being executed. More...
- virtual void popCurrentNode ()
    Reset the node currently being executed.
- virtual bool isNodeAfter ( const XalanNode& node1, const XalanNode& node2) const
    Determine if a node is after another node, in document order. More...
- virtual void pushContextNodeList (const NodeRefListBase& theList)
    Push the node list for current context. More...
- virtual void popContextNodeList ()
    Pop the node list for current context.
- virtual const NodeRefListBase& getContextNodeList () const
    Get the node list for current context. More...
- virtual size_type getContextNodeListLength () const
- virtual size_type getContextNodeListPosition (const XalanNode& contextNode) const
- virtual bool elementAvailable (const XalanQName& theQName) const
    Determine if an external element is available. More...
- virtual bool elementAvailable ( const XalanDOMString& theName, const LocatorType* locator) const
    Determine if an external element is available by resolving a string to a QName. More...
- virtual bool functionAvailable (const XalanQName& theQName) const
    Determine if a function is available. More...
- virtual bool functionAvailable ( const XalanDOMString& theName, const LocatorType* locator) const
    Determine if a function is available. More...
- virtual const XObjectPtr extFunction ( const XalanDOMString& theNamespace, const XalanDOMString& functionName, XalanNode* context, const XObjectArgVectorType& argVec, const LocatorType* locator)
    Handle an extension function. More...
- virtual XalanDocument* parseXML ( const XalanDOMString& urlString, const XalanDOMString& base) const
    Provides support for XML parsing service. More...
- virtual MutableNodeRefList* borrowMutableNodeRefList ()
    Borrow a cached MutableNodeRefList instance. More...
- virtual bool returnMutableNodeRefList (MutableNodeRefList* theList)
    Return a previously borrowed MutableNodeRefList instance. More...
- virtual MutableNodeRefList* createMutableNodeRefList () const
    Create a MutableNodeRefList with the appropriate context. More...
- virtual XalanDOMString& getCachedString ()
    Get a cached string for temporary use. More...
- virtual bool releaseCachedString (XalanDOMString& theString)
    Return a cached string. More...
- virtual void getNodeSetByKey ( XalanDocument* doc, const XalanQName& qname, const XalanDOMString& ref, MutableNodeRefList& nodelist)
    Given a valid element key, return the corresponding node list. More...
- virtual void getNodeSetByKey ( XalanDocument* doc, const XalanDOMString& name, const XalanDOMString& ref, const LocatorType* locator, MutableNodeRefList& nodelist)
    Given a valid element key, return the corresponding node list. More...
- virtual const XObjectPtr getVariable ( const XalanQName& name, const LocatorType* locator = 0)
    Given a name, locate a variable in the current context, and return a pointer to the object. More...
- virtual const PrefixResolver* getPrefixResolver () const
    Retrieve the resolver for namespaces. More...
- virtual void setPrefixResolver (const PrefixResolver* thePrefixResolver)
    Change the resolver for namespaces. More...
- virtual const XalanDOMString* getNamespaceForPrefix (const XalanDOMString& prefix) const
    Retrieve the URI corresponding to a namespace prefix. More...
- virtual XalanDOMString findURIFromDoc (const XalanDocument* owner) const
    Given a DOM Document, tell what URI was used to parse it. More...
- virtual const XalanDOMString& getUnparsedEntityURI ( const XalanDOMString& theName, const XalanDocument& theDocument) const
    The getUnparsedEntityURI function returns the URI of the unparsed entity with the specified name in the same document as the context node (see [3.3 Unparsed Entities]). More...
- virtual bool shouldStripSourceNode (const XalanNode& node)
    Tells, through the combination of the default-space attribute on xsl:stylesheet, xsl:strip-space, xsl:preserve-space, and the xml:space attribute, whether or not extra whitespace should be stripped from the node. More...
- virtual XalanDocument* getSourceDocument (const XalanDOMString& theURI) const
    Get the document associated with the given URI. More...
- virtual void setSourceDocument ( const XalanDOMString& theURI, XalanDocument* theDocument)
    Associate a document with a given URI. More...
- virtual const XalanDecimalFormatSymbols* getDecimalFormatSymbols (const XalanQName& qname)
    Retrieve the XalanDecimalFormatSymbols instance associated with the name. More...
- virtual void error ( const XalanDOMString& msg, const XalanNode* sourceNode = 0, const LocatorType* locator = 0) const
    Report an error and throw an exception. More...
- virtual void error ( const char* msg, const XalanNode* sourceNode = 0, const LocatorType* locator = 0) const
    Report an error and throw an exception. More...
- virtual void warn ( const XalanDOMString& msg, const XalanNode* sourceNode = 0, const LocatorType* locator = 0) const
    Report a warning. More...
- virtual void warn ( const char* msg, const XalanNode* sourceNode = 0, const LocatorType* locator = 0) const
    Report a warning. More...
- virtual void message ( const XalanDOMString& msg, const XalanNode* sourceNode = 0, const LocatorType* locator = 0) const
    Output a message. More...
- virtual void message ( const char* msg, const XalanNode* sourceNode = 0, const LocatorType* locator = 0) const
    Output a message. More...

## Protected Types

- typedef XalanObjectCache<MutableNodeRefList,
  DefaultCacheCreateFunctor<
  MutableNodeRefList>, DeleteFunctor<
  MutableNodeRefList>, ClearCacheResetFunctor<
  MutableNodeRefList> > NodeListCacheType
- enum {
  eNodeListCacheListSize = 50
  }

## Protected Attributes

- XPathEnvSupport* m_xpathEnvSupport
- DOMSupport* m_domSupport
- CurrentNodeStackType m_currentNodeStack
- ContextNodeListStackType m_contextNodeListStack
- const PrefixResolver* m_prefixResolver
- XalanDOMString m_currentPattern
- NodeListCacheType m_nodeListCache
- XalanDOMStringCache m_stringCache
- ContextNodeListPositionCache m_cachedPosition
- XalanQNameByValue m_scratchQName

## Static Protected Attributes

- const NodeRefList s_dummyList

## Detailed Description

A basic implementation of the class XPathExecutionContext.

## Member Typedef Documentation

typedef std::deque<const NodeRefListBase*> XPathExecutionContextDefault::ContextNodeListStackType

typedef std::deque<XalanNode*> XPathExecutionContextDefault::CurrentNodeStackType

typedef XalanObjectCache<MutableNodeRefList, DefaultCacheCreateFunctor<MutableNodeRefList>, DeleteFunctor<MutableNodeRefList>, ClearCacheResetFunctor<MutableNodeRefList> > XPathExecutionContextDefault::NodeListCacheType`[protected]`

## Member Enumeration Documentation

anonymous enum`[protected]`

Enumeration values:

  eNodeListCacheListSize |

## Constructor & Destructor Documentation

XPathExecutionContextDefault::XPathExecutionContextDefault ( | XPathEnvSupport & theXPathEnvSupport,
| DOMSupport & theDOMSupport,
| XObjectFactory & theXObjectFactory,
| XalanNode * theCurrentNode = 0,
| const NodeRefListBase * theContextNodeList = 0,
| const PrefixResolver * thePrefixResolver = 0 )

Construct an XPathExecutionContextDefault object.

Parameters:

  theXPathEnvSupport | XPathEnvSupport class instance
  theDOMSupport | DOMSupport class instance
  theXobjectFactory | factory class instance for XObjects
  theCurrentNode | current node in the source tree
  theContextNodeList | node list for current context
  thePrefixResolver | pointer to prefix resolver to use

XPathExecutionContextDefault::XPathExecutionContextDefault ( | XalanNode * theCurrentNode = 0,
| const NodeRefListBase * theContextNodeList = 0,
| const PrefixResolver * thePrefixResolver = 0 )`[explicit]`

Construct an XPathExecutionContextDefault object.

Parameters:

  theXPathEnvSupport | XPathEnvSupport class instance
  theXObjectFactory | factory class instance for XObjects
  theCurrentNode | current node in the source tree
  theContextNodeList | node list for current context
  thePrefixResolver | pointer to prefix resolver to use

virtual XPathExecutionContextDefault::~XPathExecutionContextDefault ( | )`[virtual]`

## Member Function Documentation

virtual MutableNodeRefList* XPathExecutionContextDefault::borrowMutableNodeRefList ( | )`[virtual]`

Borrow a cached MutableNodeRefList instance.

Returns:
  A pointer to the instance.

Reimplemented from XPathExecutionContext.

virtual MutableNodeRefList* XPathExecutionContextDefault::createMutableNodeRefList ( | ) const`[virtual]`

Create a MutableNodeRefList with the appropriate context.

Returns:
  pointer to node list created

Reimplemented from XPathExecutionContext.

virtual bool XPathExecutionContextDefault::elementAvailable ( | const XalanDOMString & theName,
| const LocatorType * locator ) const`[virtual]`

Determine if an external element is available by resolving a string to a QName.

Parameters:

  theName | The name of the element
  locator | A LocatorType instance for error reporting

Returns:
  whether the given element is available or not

Reimplemented from XPathExecutionContext.

virtual bool XPathExecutionContextDefault::elementAvailable ( | const XalanQName & theQName ) const`[virtual]`

Determine if an external element is available.

Parameters:

  theQName | The QName of the element

Returns:
  whether the given element is available or not

Reimplemented from XPathExecutionContext.

virtual void XPathExecutionContextDefault::error ( | const char * msg,
| const XalanNode * sourceNode = 0,
| const LocatorType * locator = 0 ) const`[virtual]`

Report an error and throw an exception.

Parameters:

  msg | The text of the message.
  sourceNode | The source node where the error occurred. May be 0.
  locator | A Locator to determine where the error occurred. May be 0.

Reimplemented from XPathExecutionContext.

virtual void XPathExecutionContextDefault::error ( | const XalanDOMString & msg,
| const XalanNode * sourceNode = 0,
| const LocatorType * locator = 0 ) const`[virtual]`

Report an error and throw an exception.

Parameters:

  msg | The text of the message.
  sourceNode | The source node where the error occurred. May be 0.
  locator | A Locator to determine where the error occurred. May be 0.

Reimplemented from XPathExecutionContext.

virtual const XObjectPtr XPathExecutionContextDefault::extFunction ( | const XalanDOMString & theNamespace,
| const XalanDOMString & functionName,
| XalanNode * context,
| const XObjectArgVectorType & argVec,
| const LocatorType * locator )`[virtual]`

Handle an extension function.

Parameters:

  theNamespace | namespace of function
  functionName | extension function name
  context | The context node
  argVec | vector of arguments to function
  locator | A LocatorType instance for error reporting

Returns:
  pointer to XObject result

Reimplemented from XPathExecutionContext.

virtual XalanDOMString XPathExecutionContextDefault::findURIFromDoc ( | const XalanDocument * owner ) const`[virtual]`

Given a DOM Document, tell what URI was used to parse it.

Needed for relative resolution.

Parameters:

  owner | source document

Returns:
  document URI

Reimplemented from XPathExecutionContext.

virtual bool XPathExecutionContextDefault::functionAvailable ( | const XalanDOMString & theName,
| const LocatorType * locator ) const`[virtual]`

Determine if a function is available.

Parameters:

  theName | The name of the function
  locator | A LocatorType instance for error reporting

Returns:
  whether the function is available or not

Reimplemented from XPathExecutionContext.

virtual bool XPathExecutionContextDefault::functionAvailable ( | const XalanQName & theQName ) const`[virtual]`

Determine if a function is available.

Parameters:

  theQName | The QName of the function

Returns:
  whether the function is available or not

Reimplemented from XPathExecutionContext.

virtual XalanDOMString& XPathExecutionContextDefault::getCachedString ( | )`[virtual]`

Get a cached string for temporary use.

Returns:
  A reference to the string

Reimplemented from XPathExecutionContext.

virtual const NodeRefListBase& XPathExecutionContextDefault::getContextNodeList ( | ) const`[virtual]`

Get the node list for current context.

Returns:
  node list

Reimplemented from XPathExecutionContext.

virtual size_type XPathExecutionContextDefault::getContextNodeListLength ( | ) const`[virtual]`

Reimplemented from XPathExecutionContext.

virtual size_type XPathExecutionContextDefault::getContextNodeListPosition ( | const XalanNode & contextNode ) const`[virtual]`

Reimplemented from XPathExecutionContext.

virtual XalanNode* XPathExecutionContextDefault::getCurrentNode ( | ) const`[virtual]`

Retrieve the node currently being executed.

Returns:
  current node

Reimplemented from XPathExecutionContext.

virtual const XalanDecimalFormatSymbols* XPathExecutionContextDefault::getDecimalFormatSymbols ( | const XalanQName & qname )`[virtual]`

Retrieve the XalanDecimalFormatSymbols instance associated with the name.

Parameters:

  qname | the QName for the lookup

Returns:
  a pointer to the matching instance, or 0 if none was found

Reimplemented from XPathExecutionContext.

virtual const XalanDOMString* XPathExecutionContextDefault::getNamespaceForPrefix ( | const XalanDOMString & prefix ) const`[virtual]`

Retrieve the URI corresponding to a namespace prefix.

Parameters:

  prefix | prefix for a namespace

Returns:
  URI corresponding to namespace

Reimplemented from XPathExecutionContext.

virtual void XPathExecutionContextDefault::getNodeSetByKey ( | XalanDocument * doc,
| const XalanDOMString & name,
| const XalanDOMString & ref,
| const LocatorType * locator,
| MutableNodeRefList & nodelist )`[virtual]`

Given a valid element key, return the corresponding node list.

Parameters:

  doc | source document
  name | name of the key, which must match the 'name' attribute on xsl:key. Will be resolved to a qname using the provided resolver.
  ref | value that must match the value found by the 'match' attribute on xsl:key
  locator | The LocatorType to use for error reporting. Can be 0.
  nodelist | A node list to contain the nodes found

Reimplemented from XPathExecutionContext.

virtual void XPathExecutionContextDefault::getNodeSetByKey ( | XalanDocument * doc,
| const XalanQName & qname,
| const XalanDOMString & ref,
| MutableNodeRefList & nodelist )`[virtual]`

Given a valid element key, return the corresponding node list.

Parameters:

  doc | source document
  name | qname of the key, which must match the 'name' attribute on xsl:key
  ref | value that must match the value found by the 'match' attribute on xsl:key
  nodelist | A node list to contain the nodes found

Reimplemented from XPathExecutionContext.

virtual const PrefixResolver* XPathExecutionContextDefault::getPrefixResolver ( | ) const`[virtual]`

Retrieve the resolver for namespaces.

Returns:
  object for namespace resolution

Reimplemented from XPathExecutionContext.

XalanQNameByValue & XPathExecutionContextDefault::getScratchQName ( | ) const`[]`

Get a reference to the scratch QNameByValue instance.

Returns:
  A reference to a QNameByValue instance.

virtual XalanDocument* XPathExecutionContextDefault::getSourceDocument ( | const XalanDOMString & theURI ) const`[virtual]`

Get the document associated with the given URI.

Parameters:

  theURI | document URI

Returns:
  a pointer to the document instance, if any.

Reimplemented from XPathExecutionContext.

virtual const XalanDOMString& XPathExecutionContextDefault::getUnparsedEntityURI ( | const XalanDOMString & theName,
| const XalanDocument & theDocument ) const`[virtual]`

The getUnparsedEntityURI function returns the URI of the unparsed entity with the specified name in the same document as the context node (see [3.3 Unparsed Entities]).

It returns the empty string if there is no such entity.

Parameters:

  theName | name of entity
  theDocument | document containing entity

Returns:
  URI for the entity

Reimplemented from XPathExecutionContext.

virtual const XObjectPtr XPathExecutionContextDefault::getVariable ( | const XalanQName & name,
| const LocatorType * locator = 0 )`[virtual]`

Given a name, locate a variable in the current context, and return a pointer to the object.

Parameters:

  theName | name of variable

Returns:
  pointer to an XObject if the variable was found, 0 if it was not

Reimplemented from XPathExecutionContext.

XPathEnvSupport * XPathExecutionContextDefault::getXPathEnvSupport ( | ) const`[]`

Get the XPathEnvSupport instance.

Returns:
  a pointer to the instance.

virtual bool XPathExecutionContextDefault::isNodeAfter ( | const XalanNode & node1,
| const XalanNode & node2 ) const`[virtual]`

Determine if a node is after another node, in document order.

Parameters:

  node1 | The first node
  node2 | The second node

Returns:
  true if node1 one is after node2, or false if it is not.

Reimplemented from XPathExecutionContext.

virtual void XPathExecutionContextDefault::message ( | const char * msg,
| const XalanNode * sourceNode = 0,
| const LocatorType * locator = 0 ) const`[virtual]`

Output a message.

Parameters:

  msg | The text of the message.
  sourceNode | The source node where the message occurred. May be 0.
  locator | A Locator to determine where the message occurred. May be 0.

Reimplemented from XPathExecutionContext.

virtual void XPathExecutionContextDefault::message ( | const XalanDOMString & msg,
| const XalanNode * sourceNode = 0,
| const LocatorType * locator = 0 ) const`[virtual]`

Output a message.

Parameters:

  msg | The text of the message.
  sourceNode | The source node where the message occurred. May be 0.
  locator | A Locator to determine where the message occurred. May be 0.

Reimplemented from XPathExecutionContext.

virtual XalanDocument* XPathExecutionContextDefault::parseXML ( | const XalanDOMString & urlString,
| const XalanDOMString & base ) const`[virtual]`

Provides support for XML parsing service.

Parameters:

  urlString | location of the XML
  base | base location for URI

Returns:
  parsed document

Reimplemented from XPathExecutionContext.

virtual void XPathExecutionContextDefault::popContextNodeList ( | )`[virtual]`

Pop the node list for current context.

Reimplemented from XPathExecutionContext.

virtual void XPathExecutionContextDefault::popCurrentNode ( | )`[virtual]`

Reset the node currently being executed.

Reimplemented from XPathExecutionContext.

virtual void XPathExecutionContextDefault::pushContextNodeList ( | const NodeRefListBase & theList )`[virtual]`

Push the node list for current context.

Parameters:

  theList | new node list

Reimplemented from XPathExecutionContext.

virtual void XPathExecutionContextDefault::pushCurrentNode ( | XalanNode * theCurrentNode )`[virtual]`

Change the node currently being executed.

Parameters:

  theCurrentNode | new current node

Reimplemented from XPathExecutionContext.

virtual bool XPathExecutionContextDefault::releaseCachedString ( | XalanDOMString & theString )`[virtual]`

Return a cached string.

Parameters:

  theString | The string to release.

Returns:
  true if the string was released successfully.

Reimplemented from XPathExecutionContext.

virtual void XPathExecutionContextDefault::reset ( | )`[virtual]`

Reset the instance.

This must be called before another execution is attempted.

Reimplemented from XPathExecutionContext.

virtual bool XPathExecutionContextDefault::returnMutableNodeRefList ( | MutableNodeRefList * theList )`[virtual]`

Return a previously borrowed MutableNodeRefList instance.

Parameters:

  theList | A pointer the to previously borrowed instance.

Returns:
  true if the list was borrowed (at therefore, destroyed), false if not.

Reimplemented from XPathExecutionContext.

void XPathExecutionContextDefault::setDOMSupport ( | DOMSupport * theDOMSupport )`[]`

Set the DOMSupport instance.

Parameters:

  theDOMSupport | a reference to the instance to use.

virtual void XPathExecutionContextDefault::setPrefixResolver ( | const PrefixResolver * thePrefixResolver )`[virtual]`

Change the resolver for namespaces.

Parameters:

  thePrefixResolver | new object for namespace resolution

Reimplemented from XPathExecutionContext.

virtual void XPathExecutionContextDefault::setSourceDocument ( | const XalanDOMString & theURI,
| XalanDocument * theDocument )`[virtual]`

Associate a document with a given URI.

Parameters:

  theURI | document URI
  theDocument | source document

Reimplemented from XPathExecutionContext.

void XPathExecutionContextDefault::setXObjectFactory ( | XObjectFactory * theXObjectFactory )`[]`

Set the XObjectFactory instance.

Parameters:

  theFactory | a reference to the instance to use.

void XPathExecutionContextDefault::setXPathEnvSupport ( | XPathEnvSupport * theSupport )`[]`

Set the XPathEnvSupport instance.

Parameters:

  theSupport | a reference to the instance to use.

virtual bool XPathExecutionContextDefault::shouldStripSourceNode ( | const XalanNode & node )`[virtual]`

Tells, through the combination of the default-space attribute on xsl:stylesheet, xsl:strip-space, xsl:preserve-space, and the xml:space attribute, whether or not extra whitespace should be stripped from the node.

Literal elements from template elements should not be tested with this function.

Parameters:

  textNode | text node from the source tree

Returns:
  true if the text node should be stripped of extra whitespace

Reimplemented from XPathExecutionContext.

virtual void XPathExecutionContextDefault::warn ( | const char * msg,
| const XalanNode * sourceNode = 0,
| const LocatorType * locator = 0 ) const`[virtual]`

Report a warning.

Parameters:

  msg | The text of the message.
  sourceNode | The source node where the warning occurred. May be 0.
  locator | A Locator to determine where the warning occurred. May be 0.

Reimplemented from XPathExecutionContext.

virtual void XPathExecutionContextDefault::warn ( | const XalanDOMString & msg,
| const XalanNode * sourceNode = 0,
| const LocatorType * locator = 0 ) const`[virtual]`

Report a warning.

Parameters:

  msg | The text of the message.
  sourceNode | The source node where the warning occurred. May be 0.
  locator | A Locator to determine where the warning occurred. May be 0.

Reimplemented from XPathExecutionContext.

## Member Data Documentation

ContextNodeListPositionCache XPathExecutionContextDefault::m_cachedPosition`[mutable, protected]`

ContextNodeListStackType XPathExecutionContextDefault::m_contextNodeListStack`[protected]`

CurrentNodeStackType XPathExecutionContextDefault::m_currentNodeStack`[protected]`

XalanDOMString XPathExecutionContextDefault::m_currentPattern`[protected]`

DOMSupport * XPathExecutionContextDefault::m_domSupport`[protected]`

NodeListCacheType XPathExecutionContextDefault::m_nodeListCache`[protected]`

const PrefixResolver * XPathExecutionContextDefault::m_prefixResolver`[protected]`

XalanQNameByValue XPathExecutionContextDefault::m_scratchQName`[mutable, protected]`

XalanDOMStringCache XPathExecutionContextDefault::m_stringCache`[protected]`

XPathEnvSupport * XPathExecutionContextDefault::m_xpathEnvSupport`[protected]`

const NodeRefList XPathExecutionContextDefault::s_dummyList`[static, protected]`

The documentation for this class was generated from the following file:

- XPathExecutionContextDefault.hpp

Interpreting class diagrams

Doxygen and GraphViz are used to generate this API documentation from the Xalan-C header files.

Xalan-C++ XSLT Processor Version 1.7 Copyright © 1999-2004 The Apache Software Foundation. All Rights Reserved.