555 lines
16 KiB
Plaintext
555 lines
16 KiB
Plaintext
|
NET-SNMP-AGENT-MIB DEFINITIONS ::= BEGIN
|
||
|
|
||
|
--
|
||
|
-- Defines control and monitoring structures for the Net-SNMP agent.
|
||
|
--
|
||
|
|
||
|
IMPORTS
|
||
|
SnmpAdminString
|
||
|
FROM SNMP-FRAMEWORK-MIB
|
||
|
|
||
|
netSnmpObjects, netSnmpModuleIDs, netSnmpNotifications, netSnmpGroups
|
||
|
FROM NET-SNMP-MIB
|
||
|
|
||
|
OBJECT-TYPE, NOTIFICATION-TYPE, MODULE-IDENTITY, Integer32, Unsigned32
|
||
|
FROM SNMPv2-SMI
|
||
|
|
||
|
OBJECT-GROUP, NOTIFICATION-GROUP
|
||
|
FROM SNMPv2-CONF
|
||
|
|
||
|
TEXTUAL-CONVENTION, DisplayString, RowStatus, TruthValue
|
||
|
FROM SNMPv2-TC;
|
||
|
|
||
|
|
||
|
netSnmpAgentMIB MODULE-IDENTITY
|
||
|
LAST-UPDATED "201003170000Z"
|
||
|
ORGANIZATION "www.net-snmp.org"
|
||
|
CONTACT-INFO
|
||
|
"postal: Wes Hardaker
|
||
|
P.O. Box 382
|
||
|
Davis CA 95617
|
||
|
|
||
|
email: net-snmp-coders@lists.sourceforge.net"
|
||
|
DESCRIPTION
|
||
|
"Defines control and monitoring structures for the Net-SNMP agent."
|
||
|
REVISION "201003170000Z"
|
||
|
DESCRIPTION
|
||
|
"Made sure that this MIB can be compiled by MIB compilers that do not
|
||
|
recognize a double dash as end-of-comments."
|
||
|
REVISION "200502070000Z"
|
||
|
DESCRIPTION
|
||
|
"Fixing syntax errors"
|
||
|
REVISION "200202090000Z"
|
||
|
DESCRIPTION
|
||
|
"First revision."
|
||
|
::= { netSnmpModuleIDs 2 }
|
||
|
|
||
|
|
||
|
nsVersion OBJECT IDENTIFIER ::= {netSnmpObjects 1}
|
||
|
nsMibRegistry OBJECT IDENTIFIER ::= {netSnmpObjects 2}
|
||
|
nsExtensions OBJECT IDENTIFIER ::= {netSnmpObjects 3}
|
||
|
nsDLMod OBJECT IDENTIFIER ::= {netSnmpObjects 4}
|
||
|
nsCache OBJECT IDENTIFIER ::= {netSnmpObjects 5}
|
||
|
nsErrorHistory OBJECT IDENTIFIER ::= {netSnmpObjects 6}
|
||
|
nsConfiguration OBJECT IDENTIFIER ::= {netSnmpObjects 7}
|
||
|
nsTransactions OBJECT IDENTIFIER ::= {netSnmpObjects 8}
|
||
|
|
||
|
--
|
||
|
-- MIB Module data caching management
|
||
|
--
|
||
|
|
||
|
NetsnmpCacheStatus ::= TEXTUAL-CONVENTION
|
||
|
STATUS current
|
||
|
DESCRIPTION "an indication of the status of data caching entries"
|
||
|
SYNTAX INTEGER {
|
||
|
enabled(1),
|
||
|
disabled(2),
|
||
|
empty (3),
|
||
|
cached (4),
|
||
|
expired(5)
|
||
|
}
|
||
|
|
||
|
nsCacheDefaultTimeout OBJECT-TYPE
|
||
|
SYNTAX INTEGER -- ???
|
||
|
MAX-ACCESS read-write
|
||
|
STATUS current
|
||
|
DESCRIPTION
|
||
|
"Default cache timeout value (unless overridden
|
||
|
for a particular cache entry)."
|
||
|
DEFVAL { 5 } --seconds--
|
||
|
::= { nsCache 1 }
|
||
|
|
||
|
nsCacheEnabled OBJECT-TYPE
|
||
|
SYNTAX TruthValue
|
||
|
MAX-ACCESS read-write
|
||
|
STATUS current
|
||
|
DESCRIPTION
|
||
|
"Whether data caching is active overall."
|
||
|
DEFVAL { true }
|
||
|
::= { nsCache 2 }
|
||
|
|
||
|
nsCacheTable OBJECT-TYPE
|
||
|
SYNTAX SEQUENCE OF NsCacheEntry
|
||
|
MAX-ACCESS not-accessible
|
||
|
STATUS current
|
||
|
DESCRIPTION
|
||
|
"A table of individual MIB module data caches."
|
||
|
::= { nsCache 3 }
|
||
|
|
||
|
nsCacheEntry OBJECT-TYPE
|
||
|
SYNTAX NsCacheEntry
|
||
|
MAX-ACCESS not-accessible
|
||
|
STATUS current
|
||
|
DESCRIPTION
|
||
|
"A conceptual row within the cache table."
|
||
|
INDEX { IMPLIED nsCachedOID }
|
||
|
::= { nsCacheTable 1 }
|
||
|
|
||
|
NsCacheEntry ::= SEQUENCE {
|
||
|
nsCachedOID OBJECT IDENTIFIER,
|
||
|
nsCacheTimeout INTEGER, -- ?? TimeTicks ??
|
||
|
nsCacheStatus NetsnmpCacheStatus -- ?? INTEGER ??
|
||
|
}
|
||
|
|
||
|
nsCachedOID OBJECT-TYPE
|
||
|
SYNTAX OBJECT IDENTIFIER
|
||
|
MAX-ACCESS not-accessible
|
||
|
STATUS current
|
||
|
DESCRIPTION
|
||
|
"The root OID of the data being cached."
|
||
|
::= { nsCacheEntry 1 }
|
||
|
|
||
|
nsCacheTimeout OBJECT-TYPE
|
||
|
SYNTAX INTEGER
|
||
|
MAX-ACCESS read-write
|
||
|
STATUS current
|
||
|
DESCRIPTION
|
||
|
"The length of time (?in seconds) for which the data in
|
||
|
this particular cache entry will remain valid."
|
||
|
::= { nsCacheEntry 2 }
|
||
|
|
||
|
nsCacheStatus OBJECT-TYPE
|
||
|
SYNTAX NetsnmpCacheStatus
|
||
|
MAX-ACCESS read-write
|
||
|
STATUS current
|
||
|
DESCRIPTION
|
||
|
"The current status of this particular cache entry.
|
||
|
Acceptable values for Set requests are 'enabled(1)',
|
||
|
'disabled(2)' or 'empty(3)' (to clear all cached data).
|
||
|
Requests to read the value of such an object will
|
||
|
return 'disabled(2)' through to 'expired(5)'."
|
||
|
::= { nsCacheEntry 3 }
|
||
|
|
||
|
--
|
||
|
-- Agent configuration
|
||
|
-- Debug and logging output
|
||
|
--
|
||
|
|
||
|
nsConfigDebug OBJECT IDENTIFIER ::= {nsConfiguration 1}
|
||
|
nsConfigLogging OBJECT IDENTIFIER ::= {nsConfiguration 2}
|
||
|
|
||
|
nsDebugEnabled OBJECT-TYPE
|
||
|
SYNTAX TruthValue
|
||
|
MAX-ACCESS read-write
|
||
|
STATUS current
|
||
|
DESCRIPTION
|
||
|
"Whether the agent is configured to generate debugging output"
|
||
|
DEFVAL { false }
|
||
|
::= { nsConfigDebug 1 }
|
||
|
|
||
|
nsDebugOutputAll OBJECT-TYPE
|
||
|
SYNTAX TruthValue
|
||
|
MAX-ACCESS read-write
|
||
|
STATUS current
|
||
|
DESCRIPTION
|
||
|
"Whether the agent is configured to display all debugging output
|
||
|
rather than filtering on individual debug tokens. Nothing will
|
||
|
be generated unless nsDebugEnabled is also true(1)"
|
||
|
DEFVAL { false }
|
||
|
::= { nsConfigDebug 2 }
|
||
|
|
||
|
nsDebugDumpPdu OBJECT-TYPE
|
||
|
SYNTAX TruthValue
|
||
|
MAX-ACCESS read-write
|
||
|
STATUS current
|
||
|
DESCRIPTION
|
||
|
"Whether the agent is configured to display raw packet dumps.
|
||
|
This is unrelated to the nsDebugEnabled setting."
|
||
|
DEFVAL { false }
|
||
|
::= { nsConfigDebug 3 }
|
||
|
|
||
|
nsDebugTokenTable OBJECT-TYPE
|
||
|
SYNTAX SEQUENCE OF NsDebugTokenEntry
|
||
|
MAX-ACCESS not-accessible
|
||
|
STATUS current
|
||
|
DESCRIPTION
|
||
|
"A table of individual debug tokens, used to control the selection
|
||
|
of what debugging output should be produced. This table is only
|
||
|
effective if nsDebugOutputAll is false(2), and nothing will
|
||
|
be generated unless nsDebugEnabled is also true(1)"
|
||
|
::= { nsConfigDebug 4 }
|
||
|
|
||
|
nsDebugTokenEntry OBJECT-TYPE
|
||
|
SYNTAX NsDebugTokenEntry
|
||
|
MAX-ACCESS not-accessible
|
||
|
STATUS current
|
||
|
DESCRIPTION
|
||
|
"A conceptual row within the debug token table."
|
||
|
INDEX { IMPLIED nsDebugTokenPrefix }
|
||
|
::= { nsDebugTokenTable 1 }
|
||
|
|
||
|
NsDebugTokenEntry ::= SEQUENCE {
|
||
|
nsDebugTokenPrefix DisplayString,
|
||
|
nsDebugTokenStatus RowStatus
|
||
|
}
|
||
|
|
||
|
nsDebugTokenPrefix OBJECT-TYPE
|
||
|
SYNTAX DisplayString
|
||
|
MAX-ACCESS not-accessible
|
||
|
STATUS current
|
||
|
DESCRIPTION
|
||
|
"A token prefix for which to generate the corresponding
|
||
|
debugging output. Note that debug output will be generated
|
||
|
for all registered debug statements sharing this prefix
|
||
|
(rather than an exact match). Nothing will be generated
|
||
|
unless both nsDebuggingEnabled is set true(1) and the
|
||
|
corresponding nsDebugTokenStatus value is active(1)."
|
||
|
::= { nsDebugTokenEntry 2 }
|
||
|
|
||
|
nsDebugTokenStatus OBJECT-TYPE
|
||
|
SYNTAX RowStatus
|
||
|
MAX-ACCESS read-create
|
||
|
STATUS current
|
||
|
DESCRIPTION
|
||
|
"Whether to generate debug output for the corresponding debug
|
||
|
token prefix. Nothing will be generated unless both
|
||
|
nsDebuggingEnabled is true(1) and this instance is active(1).
|
||
|
Note that is valid for an instance to be left with the value
|
||
|
notInService(2) indefinitely - i.e. the meaning of 'abnormally
|
||
|
long' (see RFC 2579, RowStatus) for this table is infinite."
|
||
|
::= { nsDebugTokenEntry 4 }
|
||
|
|
||
|
--
|
||
|
-- Logging configuration
|
||
|
--
|
||
|
|
||
|
nsLoggingTable OBJECT-TYPE
|
||
|
SYNTAX SEQUENCE OF NsLoggingEntry
|
||
|
MAX-ACCESS not-accessible
|
||
|
STATUS current
|
||
|
DESCRIPTION
|
||
|
"A table of individual logging output destinations, used to control
|
||
|
where various levels of output from the agent should be directed."
|
||
|
::= { nsConfigLogging 1 }
|
||
|
|
||
|
nsLoggingEntry OBJECT-TYPE
|
||
|
SYNTAX NsLoggingEntry
|
||
|
MAX-ACCESS not-accessible
|
||
|
STATUS current
|
||
|
DESCRIPTION
|
||
|
"A conceptual row within the logging table."
|
||
|
INDEX { nsLogLevel, IMPLIED nsLogToken }
|
||
|
::= { nsLoggingTable 1 }
|
||
|
|
||
|
NsLoggingEntry ::= SEQUENCE {
|
||
|
nsLogLevel INTEGER,
|
||
|
nsLogToken DisplayString,
|
||
|
nsLogType INTEGER,
|
||
|
nsLogMaxLevel INTEGER,
|
||
|
nsLogStatus RowStatus
|
||
|
}
|
||
|
|
||
|
nsLogLevel OBJECT-TYPE
|
||
|
SYNTAX INTEGER {
|
||
|
emergency(0),
|
||
|
alert (1),
|
||
|
critical (2),
|
||
|
error (3),
|
||
|
warning (4),
|
||
|
notice (5),
|
||
|
info (6),
|
||
|
debug (7)
|
||
|
}
|
||
|
MAX-ACCESS not-accessible
|
||
|
STATUS current
|
||
|
DESCRIPTION
|
||
|
"The (minimum) priority level for which this logging entry
|
||
|
should be applied."
|
||
|
::= { nsLoggingEntry 1 }
|
||
|
|
||
|
nsLogToken OBJECT-TYPE
|
||
|
SYNTAX DisplayString
|
||
|
MAX-ACCESS not-accessible
|
||
|
STATUS current
|
||
|
DESCRIPTION
|
||
|
"A token for which to generate logging entries.
|
||
|
Depending on the style of logging, this may either
|
||
|
be simply an arbitrary token, or may have some
|
||
|
particular meaning (such as the filename to log to)."
|
||
|
::= { nsLoggingEntry 2 }
|
||
|
|
||
|
nsLogType OBJECT-TYPE
|
||
|
SYNTAX INTEGER {
|
||
|
stdout (1),
|
||
|
stderr (2),
|
||
|
file (3),
|
||
|
syslog (4),
|
||
|
callback (5)
|
||
|
}
|
||
|
MAX-ACCESS read-create
|
||
|
STATUS current
|
||
|
DESCRIPTION
|
||
|
"The type of logging for this entry."
|
||
|
::= { nsLoggingEntry 3 }
|
||
|
|
||
|
nsLogMaxLevel OBJECT-TYPE
|
||
|
SYNTAX INTEGER {
|
||
|
emergency(0),
|
||
|
alert (1),
|
||
|
critical (2),
|
||
|
error (3),
|
||
|
warning (4),
|
||
|
notice (5),
|
||
|
info (6),
|
||
|
debug (7)
|
||
|
}
|
||
|
MAX-ACCESS read-create
|
||
|
STATUS current
|
||
|
DESCRIPTION
|
||
|
"The maximum priority level for which this logging entry
|
||
|
should be applied."
|
||
|
DEFVAL { emergency }
|
||
|
::= { nsLoggingEntry 4 }
|
||
|
|
||
|
nsLogStatus OBJECT-TYPE
|
||
|
SYNTAX RowStatus
|
||
|
MAX-ACCESS read-create
|
||
|
STATUS current
|
||
|
DESCRIPTION
|
||
|
"Whether to generate logging output for this entry.
|
||
|
Note that is valid for an instance to be left with the value
|
||
|
notInService(2) indefinitely - i.e. the meaning of 'abnormally
|
||
|
long' (see RFC 2579, RowStatus) for this table is infinite."
|
||
|
::= { nsLoggingEntry 5 }
|
||
|
|
||
|
--
|
||
|
-- Monitoring outstanding "transactions"
|
||
|
-- (i.e. requests sent to AgentX subagents, or proxied agents)
|
||
|
--
|
||
|
|
||
|
nsTransactionTable OBJECT-TYPE
|
||
|
SYNTAX SEQUENCE OF NsTransactionEntry
|
||
|
MAX-ACCESS not-accessible
|
||
|
STATUS current
|
||
|
DESCRIPTION
|
||
|
"Lists currently outstanding transactions in the net-snmp agent.
|
||
|
This includes requests to AgentX subagents, or proxied SNMP agents."
|
||
|
::= { nsTransactions 1 }
|
||
|
|
||
|
nsTransactionEntry OBJECT-TYPE
|
||
|
SYNTAX NsTransactionEntry
|
||
|
MAX-ACCESS not-accessible
|
||
|
STATUS current
|
||
|
DESCRIPTION
|
||
|
"A row describing a given transaction."
|
||
|
INDEX { nsTransactionID }
|
||
|
::= {nsTransactionTable 1 }
|
||
|
|
||
|
NsTransactionEntry ::= SEQUENCE {
|
||
|
nsTransactionID Unsigned32,
|
||
|
nsTransactionMode Integer32
|
||
|
}
|
||
|
|
||
|
nsTransactionID OBJECT-TYPE
|
||
|
SYNTAX Unsigned32 (0..4294967295)
|
||
|
MAX-ACCESS not-accessible
|
||
|
STATUS current
|
||
|
DESCRIPTION
|
||
|
"The internal identifier for a given transaction."
|
||
|
::= { nsTransactionEntry 1 }
|
||
|
|
||
|
nsTransactionMode OBJECT-TYPE
|
||
|
SYNTAX Integer32
|
||
|
MAX-ACCESS read-only
|
||
|
STATUS current
|
||
|
DESCRIPTION
|
||
|
"The mode number for the current operation being performed."
|
||
|
::= { nsTransactionEntry 2 }
|
||
|
|
||
|
|
||
|
--
|
||
|
-- Monitoring the MIB modules currently registered in the agent
|
||
|
-- (an updated version of UCD-SNMP-MIB::mrTable)
|
||
|
--
|
||
|
|
||
|
nsModuleTable OBJECT-TYPE
|
||
|
SYNTAX SEQUENCE OF NsModuleEntry
|
||
|
MAX-ACCESS not-accessible
|
||
|
STATUS current
|
||
|
DESCRIPTION
|
||
|
"A table displaying all the oid's registered by mib modules in
|
||
|
the agent. Since the agent is modular in nature, this lists
|
||
|
each module's OID it is responsible for and the name of the module"
|
||
|
::= { nsMibRegistry 1 }
|
||
|
|
||
|
nsModuleEntry OBJECT-TYPE
|
||
|
SYNTAX NsModuleEntry
|
||
|
MAX-ACCESS not-accessible
|
||
|
STATUS current
|
||
|
DESCRIPTION
|
||
|
"An entry containing a registered mib oid."
|
||
|
INDEX { nsmContextName, nsmRegistrationPoint,
|
||
|
nsmRegistrationPriority }
|
||
|
::= { nsModuleTable 1 }
|
||
|
|
||
|
NsModuleEntry ::= SEQUENCE {
|
||
|
nsmContextName SnmpAdminString,
|
||
|
nsmRegistrationPoint OBJECT IDENTIFIER,
|
||
|
nsmRegistrationPriority INTEGER,
|
||
|
nsModuleName DisplayString,
|
||
|
nsModuleModes BITS,
|
||
|
nsModuleTimeout Integer32
|
||
|
}
|
||
|
|
||
|
nsmContextName OBJECT-TYPE
|
||
|
SYNTAX SnmpAdminString
|
||
|
MAX-ACCESS not-accessible
|
||
|
STATUS current
|
||
|
DESCRIPTION
|
||
|
"The context name the module is registered under."
|
||
|
::= { nsModuleEntry 1 }
|
||
|
|
||
|
nsmRegistrationPoint OBJECT-TYPE
|
||
|
SYNTAX OBJECT IDENTIFIER
|
||
|
MAX-ACCESS not-accessible
|
||
|
STATUS current
|
||
|
DESCRIPTION
|
||
|
"The registry OID of a mib module."
|
||
|
::= { nsModuleEntry 2 }
|
||
|
|
||
|
nsmRegistrationPriority OBJECT-TYPE
|
||
|
SYNTAX INTEGER (-2147483648..2147483647)
|
||
|
MAX-ACCESS not-accessible
|
||
|
STATUS current
|
||
|
DESCRIPTION
|
||
|
"The priority of the registered mib module."
|
||
|
::= { nsModuleEntry 3 }
|
||
|
|
||
|
nsModuleName OBJECT-TYPE
|
||
|
SYNTAX DisplayString
|
||
|
MAX-ACCESS read-only
|
||
|
STATUS current
|
||
|
DESCRIPTION
|
||
|
"The module name that registered this OID."
|
||
|
::= { nsModuleEntry 4 }
|
||
|
|
||
|
nsModuleModes OBJECT-TYPE
|
||
|
SYNTAX BITS { getAndGetNext(0), set(1), getBulk(2) }
|
||
|
MAX-ACCESS read-only
|
||
|
STATUS current
|
||
|
DESCRIPTION
|
||
|
"The modes that the particular lower level handler can cope
|
||
|
with directly."
|
||
|
::= { nsModuleEntry 5 }
|
||
|
|
||
|
nsModuleTimeout OBJECT-TYPE
|
||
|
SYNTAX Integer32
|
||
|
MAX-ACCESS read-only
|
||
|
STATUS current
|
||
|
DESCRIPTION
|
||
|
"The registered timeout. This is only meaningful for handlers
|
||
|
that expect to return results at a later date (subagents,
|
||
|
etc)"
|
||
|
::= { nsModuleEntry 6 }
|
||
|
|
||
|
|
||
|
--
|
||
|
-- Notifications relating to the basic operation of the agent
|
||
|
--
|
||
|
|
||
|
nsNotifyStart NOTIFICATION-TYPE
|
||
|
STATUS current
|
||
|
DESCRIPTION
|
||
|
"An indication that the agent has started running."
|
||
|
::= { netSnmpNotifications 1 }
|
||
|
|
||
|
nsNotifyShutdown NOTIFICATION-TYPE
|
||
|
STATUS current
|
||
|
DESCRIPTION
|
||
|
"An indication that the agent is in the process of being shut down."
|
||
|
::= { netSnmpNotifications 2 }
|
||
|
|
||
|
nsNotifyRestart NOTIFICATION-TYPE
|
||
|
STATUS current
|
||
|
DESCRIPTION
|
||
|
"An indication that the agent has been restarted.
|
||
|
This does not imply anything about whether the configuration has
|
||
|
changed or not (unlike the standard coldStart or warmStart traps)"
|
||
|
::= { netSnmpNotifications 3 }
|
||
|
|
||
|
|
||
|
--
|
||
|
-- Conformance-related definitions
|
||
|
--
|
||
|
|
||
|
nsModuleGroup OBJECT-GROUP
|
||
|
OBJECTS {
|
||
|
nsModuleName, nsModuleModes, nsModuleTimeout
|
||
|
}
|
||
|
STATUS current
|
||
|
DESCRIPTION
|
||
|
"The objects relating to the list of MIB modules registered
|
||
|
with the Net-SNMP agent."
|
||
|
::= { netSnmpGroups 2 }
|
||
|
|
||
|
nsCacheGroup OBJECT-GROUP
|
||
|
OBJECTS {
|
||
|
nsCacheDefaultTimeout, nsCacheEnabled,
|
||
|
nsCacheTimeout, nsCacheStatus
|
||
|
}
|
||
|
STATUS current
|
||
|
DESCRIPTION
|
||
|
"The objects relating to data caching in the Net-SNMP agent."
|
||
|
::= { netSnmpGroups 4 }
|
||
|
|
||
|
nsConfigGroups OBJECT IDENTIFIER ::= {netSnmpGroups 7}
|
||
|
|
||
|
nsDebugGroup OBJECT-GROUP
|
||
|
OBJECTS {
|
||
|
nsDebugEnabled, nsDebugOutputAll, nsDebugDumpPdu,
|
||
|
nsDebugTokenStatus
|
||
|
}
|
||
|
STATUS current
|
||
|
DESCRIPTION
|
||
|
"The objects relating to debug configuration in the Net-SNMP agent."
|
||
|
::= { nsConfigGroups 1 }
|
||
|
|
||
|
nsLoggingGroup OBJECT-GROUP
|
||
|
OBJECTS {
|
||
|
nsLogType, nsLogMaxLevel, nsLogStatus
|
||
|
}
|
||
|
STATUS current
|
||
|
DESCRIPTION
|
||
|
"The objects relating to logging configuration in the Net-SNMP agent."
|
||
|
::= { nsConfigGroups 2 }
|
||
|
|
||
|
nsTransactionGroup OBJECT-GROUP
|
||
|
OBJECTS {
|
||
|
nsTransactionMode
|
||
|
}
|
||
|
STATUS current
|
||
|
DESCRIPTION
|
||
|
"The objects relating to transaction monitoring in the Net-SNMP agent."
|
||
|
::= { netSnmpGroups 8 }
|
||
|
|
||
|
nsAgentNotifyGroup NOTIFICATION-GROUP
|
||
|
NOTIFICATIONS { nsNotifyStart, nsNotifyShutdown, nsNotifyRestart }
|
||
|
STATUS current
|
||
|
DESCRIPTION
|
||
|
"The notifications relating to the basic operation of the Net-SNMP agent."
|
||
|
::= { netSnmpGroups 9 }
|
||
|
|
||
|
|
||
|
|
||
|
END
|