corba/src/java.corba/share/classes/org/omg/DynamicAny/package.html
author avstepan
Wed, 08 Apr 2015 16:01:26 +0400
changeset 29827 aac4782e69ac
parent 25862 a5e25d68f971
child 30826 725746fe9e37
permissions -rw-r--r--
8039440: Tidy warnings cleanup for org/omg Summary: some HTML markup fixes for CORBA Reviewed-by: yan, rriggs, lancea
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
4
02bb8761fcce Initial load
duke
parents:
diff changeset
     1
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
02bb8761fcce Initial load
duke
parents:
diff changeset
     2
<html>
02bb8761fcce Initial load
duke
parents:
diff changeset
     3
<head>
02bb8761fcce Initial load
duke
parents:
diff changeset
     4
<!--
02bb8761fcce Initial load
duke
parents:
diff changeset
     5
29827
aac4782e69ac 8039440: Tidy warnings cleanup for org/omg
avstepan
parents: 25862
diff changeset
     6
 Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.
4
02bb8761fcce Initial load
duke
parents:
diff changeset
     7
 DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
02bb8761fcce Initial load
duke
parents:
diff changeset
     8
02bb8761fcce Initial load
duke
parents:
diff changeset
     9
 This code is free software; you can redistribute it and/or modify it
02bb8761fcce Initial load
duke
parents:
diff changeset
    10
 under the terms of the GNU General Public License version 2 only, as
5555
b2b5ed3f0d0d 6943119: Rebrand source copyright notices
ohair
parents: 4
diff changeset
    11
 published by the Free Software Foundation.  Oracle designates this
4
02bb8761fcce Initial load
duke
parents:
diff changeset
    12
 particular file as subject to the "Classpath" exception as provided
5555
b2b5ed3f0d0d 6943119: Rebrand source copyright notices
ohair
parents: 4
diff changeset
    13
 by Oracle in the LICENSE file that accompanied this code.
4
02bb8761fcce Initial load
duke
parents:
diff changeset
    14
02bb8761fcce Initial load
duke
parents:
diff changeset
    15
 This code is distributed in the hope that it will be useful, but WITHOUT
02bb8761fcce Initial load
duke
parents:
diff changeset
    16
 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
02bb8761fcce Initial load
duke
parents:
diff changeset
    17
 FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
02bb8761fcce Initial load
duke
parents:
diff changeset
    18
 version 2 for more details (a copy is included in the LICENSE file that
02bb8761fcce Initial load
duke
parents:
diff changeset
    19
 accompanied this code).
02bb8761fcce Initial load
duke
parents:
diff changeset
    20
02bb8761fcce Initial load
duke
parents:
diff changeset
    21
 You should have received a copy of the GNU General Public License version
02bb8761fcce Initial load
duke
parents:
diff changeset
    22
 2 along with this work; if not, write to the Free Software Foundation,
02bb8761fcce Initial load
duke
parents:
diff changeset
    23
 Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
02bb8761fcce Initial load
duke
parents:
diff changeset
    24
5555
b2b5ed3f0d0d 6943119: Rebrand source copyright notices
ohair
parents: 4
diff changeset
    25
 Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
b2b5ed3f0d0d 6943119: Rebrand source copyright notices
ohair
parents: 4
diff changeset
    26
 or visit www.oracle.com if you need additional information or have any
b2b5ed3f0d0d 6943119: Rebrand source copyright notices
ohair
parents: 4
diff changeset
    27
 questions.
4
02bb8761fcce Initial load
duke
parents:
diff changeset
    28
 
02bb8761fcce Initial load
duke
parents:
diff changeset
    29
-->
02bb8761fcce Initial load
duke
parents:
diff changeset
    30
02bb8761fcce Initial load
duke
parents:
diff changeset
    31
</head>
02bb8761fcce Initial load
duke
parents:
diff changeset
    32
<body bgcolor="white">
02bb8761fcce Initial load
duke
parents:
diff changeset
    33
<P>Provides classes and interfaces that enable traversal of the data value
02bb8761fcce Initial load
duke
parents:
diff changeset
    34
 associated with an <code>any</code> at
02bb8761fcce Initial load
duke
parents:
diff changeset
    35
runtime, and extraction of the primitive constituents of the data value.
02bb8761fcce Initial load
duke
parents:
diff changeset
    36
02bb8761fcce Initial load
duke
parents:
diff changeset
    37
02bb8761fcce Initial load
duke
parents:
diff changeset
    38
<P>An <code>any</code> can be passed to a program that doesn't have any static information 
02bb8761fcce Initial load
duke
parents:
diff changeset
    39
for the type of the <code>any</code> (code generated for the type by an IDL compiler has not 
02bb8761fcce Initial load
duke
parents:
diff changeset
    40
been compiled with the object implementation). As a result, the object receiving the 
02bb8761fcce Initial load
duke
parents:
diff changeset
    41
<code>any</code> does not have a portable method of using it.
02bb8761fcce Initial load
duke
parents:
diff changeset
    42
02bb8761fcce Initial load
duke
parents:
diff changeset
    43
<P><code>DynAny</code>s enable traversal of the data value associated with an 
02bb8761fcce Initial load
duke
parents:
diff changeset
    44
<code>any</code> at runtime, and extraction of the primitive constituents of the data value. 
02bb8761fcce Initial load
duke
parents:
diff changeset
    45
This is especially helpful for writing powerful generic servers (bridges, event channels 
02bb8761fcce Initial load
duke
parents:
diff changeset
    46
supporting filtering).  Similarly, this facility enables the construction of an 
02bb8761fcce Initial load
duke
parents:
diff changeset
    47
<code>any</code> at runtime, without having static knowledge of its type. This is especially 
02bb8761fcce Initial load
duke
parents:
diff changeset
    48
helpful for writing generic clients (bridges, browsers, debuggers, user interface tools).
02bb8761fcce Initial load
duke
parents:
diff changeset
    49
02bb8761fcce Initial load
duke
parents:
diff changeset
    50
<P><code>Any</code> values can be dynamically interpreted (traversed) and constructed through  
02bb8761fcce Initial load
duke
parents:
diff changeset
    51
<tt>DynAny</tt> objects.  A <tt>DynAny</tt> object is associated with a data 
02bb8761fcce Initial load
duke
parents:
diff changeset
    52
value which corresponds to a copy of the value inserted into an <tt>Any</tt>.  A 
02bb8761fcce Initial load
duke
parents:
diff changeset
    53
<tt>DynAny</tt> object may be viewed as an ordered collection of component 
02bb8761fcce Initial load
duke
parents:
diff changeset
    54
<tt>DynAny</tt>s. For <tt>DynAny</tt>s representing a basic type, such as <code>long</code>, 
02bb8761fcce Initial load
duke
parents:
diff changeset
    55
or a type without components, such as an empty exception, the ordered collection of 
02bb8761fcce Initial load
duke
parents:
diff changeset
    56
components is empty. 
02bb8761fcce Initial load
duke
parents:
diff changeset
    57
02bb8761fcce Initial load
duke
parents:
diff changeset
    58
<P>Each <tt>DynAny</tt> object maintains the notion of a current position into its collection 
02bb8761fcce Initial load
duke
parents:
diff changeset
    59
of component <tt>DynAny</tt>s. The current position is identified by an index value that runs 
02bb8761fcce Initial load
duke
parents:
diff changeset
    60
from 0 to n-1, where <em>n</em> is the number of components.  The special index value -1 
02bb8761fcce Initial load
duke
parents:
diff changeset
    61
indicates a current position that points nowhere.
02bb8761fcce Initial load
duke
parents:
diff changeset
    62
 For values that cannot have a current position (such as an empty exception),
02bb8761fcce Initial load
duke
parents:
diff changeset
    63
 the index value is fixed at -1.
02bb8761fcce Initial load
duke
parents:
diff changeset
    64
 If a <code>DynAny</code> is initialized with a value that has components, the index is 
02bb8761fcce Initial load
duke
parents:
diff changeset
    65
initialized to 0.
02bb8761fcce Initial load
duke
parents:
diff changeset
    66
 After creation of an uninitialized <code>DynAny</code> (that is, a <code>DynAny</code> that 
02bb8761fcce Initial load
duke
parents:
diff changeset
    67
has no value but a <code>TypeCode</code>
02bb8761fcce Initial load
duke
parents:
diff changeset
    68
 that permits components), the current position depends on the type of value represented by
02bb8761fcce Initial load
duke
parents:
diff changeset
    69
 the <code>DynAny</code>. (The current position is set to 0 or -1, depending on whether the 
02bb8761fcce Initial load
duke
parents:
diff changeset
    70
new <code>DynAny</code>
02bb8761fcce Initial load
duke
parents:
diff changeset
    71
 gets default values for its components.)
02bb8761fcce Initial load
duke
parents:
diff changeset
    72
 
02bb8761fcce Initial load
duke
parents:
diff changeset
    73
 
02bb8761fcce Initial load
duke
parents:
diff changeset
    74
 <P>The iteration operations <code>rewind</code>, <code>seek</code>, and <code>next</code> 
02bb8761fcce Initial load
duke
parents:
diff changeset
    75
can be used to change the current position
02bb8761fcce Initial load
duke
parents:
diff changeset
    76
 and the <code>current_component</code> operation returns the component at the current 
02bb8761fcce Initial load
duke
parents:
diff changeset
    77
position.
02bb8761fcce Initial load
duke
parents:
diff changeset
    78
 The <code>component_count</code> operation returns the number of components of a 
02bb8761fcce Initial load
duke
parents:
diff changeset
    79
<code>DynAny</code>.
02bb8761fcce Initial load
duke
parents:
diff changeset
    80
 Collectively, these operations enable iteration over the components of a 
02bb8761fcce Initial load
duke
parents:
diff changeset
    81
<code>DynAny</code>, for example,
02bb8761fcce Initial load
duke
parents:
diff changeset
    82
 to (recursively) examine its contents.
02bb8761fcce Initial load
duke
parents:
diff changeset
    83
 
02bb8761fcce Initial load
duke
parents:
diff changeset
    84
 
02bb8761fcce Initial load
duke
parents:
diff changeset
    85
 <P>A constructed <code>DynAny</code> object is a <code>DynAny</code> object associated with 
02bb8761fcce Initial load
duke
parents:
diff changeset
    86
a constructed type.
02bb8761fcce Initial load
duke
parents:
diff changeset
    87
 There is a different interface, inheriting from the <code>DynAny</code> interface, 
02bb8761fcce Initial load
duke
parents:
diff changeset
    88
associated with
02bb8761fcce Initial load
duke
parents:
diff changeset
    89
 each kind of constructed type in IDL (fixed, enum, struct, sequence, union, array,
02bb8761fcce Initial load
duke
parents:
diff changeset
    90
 exception, and value type).  A constructed <code>DynAny</code> object exports operations 
02bb8761fcce Initial load
duke
parents:
diff changeset
    91
that enable the creation of new <code>DynAny</code> objects,
02bb8761fcce Initial load
duke
parents:
diff changeset
    92
 each of them associated with a component of the constructed data value.
02bb8761fcce Initial load
duke
parents:
diff changeset
    93
 As an example, a <code>DynStruct</code> is associated with a <code>struct</code> value. This 
02bb8761fcce Initial load
duke
parents:
diff changeset
    94
means that the <code>DynStruct</code>
02bb8761fcce Initial load
duke
parents:
diff changeset
    95
 may be seen as owning an ordered collection of components, one for each structure member.
02bb8761fcce Initial load
duke
parents:
diff changeset
    96
 The <code>DynStruct</code> object exports operations that enable the creation of new 
02bb8761fcce Initial load
duke
parents:
diff changeset
    97
<code>DynAny</code> objects,
02bb8761fcce Initial load
duke
parents:
diff changeset
    98
 each of them associated with a member of the <code>struct</code>.
02bb8761fcce Initial load
duke
parents:
diff changeset
    99
 
02bb8761fcce Initial load
duke
parents:
diff changeset
   100
 
02bb8761fcce Initial load
duke
parents:
diff changeset
   101
 <P>If a <code>DynAny</code> object has been obtained from another (constructed) 
02bb8761fcce Initial load
duke
parents:
diff changeset
   102
<code>DynAny</code> object,
02bb8761fcce Initial load
duke
parents:
diff changeset
   103
 such as a <code>DynAny</code> representing a structure member that was created from a 
02bb8761fcce Initial load
duke
parents:
diff changeset
   104
<code>DynStruct</code>,
02bb8761fcce Initial load
duke
parents:
diff changeset
   105
 the member <code>DynAny</code> is logically contained in the <code>DynStruct</code>.
02bb8761fcce Initial load
duke
parents:
diff changeset
   106
 Calling an <code>insert</code> or <code>get</code> operation leaves the current position 
02bb8761fcce Initial load
duke
parents:
diff changeset
   107
unchanged.
02bb8761fcce Initial load
duke
parents:
diff changeset
   108
 Destroying a top-level <code>DynAny</code> object (one that was not obtained as a component 
02bb8761fcce Initial load
duke
parents:
diff changeset
   109
of another <code>DynAny</code>)
02bb8761fcce Initial load
duke
parents:
diff changeset
   110
 also destroys any component <code>DynAny</code> objects obtained from it.
02bb8761fcce Initial load
duke
parents:
diff changeset
   111
 Destroying a non-top level <code>DynAny</code> object does nothing.
02bb8761fcce Initial load
duke
parents:
diff changeset
   112
 Invoking operations on a destroyed top-level <code>DynAny</code> or any of its descendants 
02bb8761fcce Initial load
duke
parents:
diff changeset
   113
raises OBJECT_NOT_EXIST.
02bb8761fcce Initial load
duke
parents:
diff changeset
   114
 If the programmer wants to destroy a <code>DynAny</code> object but still wants to 
02bb8761fcce Initial load
duke
parents:
diff changeset
   115
manipulate some component
02bb8761fcce Initial load
duke
parents:
diff changeset
   116
 of the data value associated with it, then he or she should first create a 
02bb8761fcce Initial load
duke
parents:
diff changeset
   117
<code>DynAny</code> for the component
02bb8761fcce Initial load
duke
parents:
diff changeset
   118
 and, after that, make a copy of the created <code>DynAny</code> object.
02bb8761fcce Initial load
duke
parents:
diff changeset
   119
 
02bb8761fcce Initial load
duke
parents:
diff changeset
   120
 
02bb8761fcce Initial load
duke
parents:
diff changeset
   121
 <P>The behavior of <code>DynAny</code> objects has been defined in order to enable efficient 
02bb8761fcce Initial load
duke
parents:
diff changeset
   122
implementations
02bb8761fcce Initial load
duke
parents:
diff changeset
   123
 in terms of allocated memory space and speed of access. <code>DynAny</code> objects are 
02bb8761fcce Initial load
duke
parents:
diff changeset
   124
intended to be used
02bb8761fcce Initial load
duke
parents:
diff changeset
   125
 for traversing values extracted from <code>any</code>s or constructing values of 
02bb8761fcce Initial load
duke
parents:
diff changeset
   126
<code>any</code>s at runtime.
02bb8761fcce Initial load
duke
parents:
diff changeset
   127
 Their use for other purposes is not recommended.
02bb8761fcce Initial load
duke
parents:
diff changeset
   128
 
02bb8761fcce Initial load
duke
parents:
diff changeset
   129
 
02bb8761fcce Initial load
duke
parents:
diff changeset
   130
 
02bb8761fcce Initial load
duke
parents:
diff changeset
   131
 <H2>Handling DynAny objects</H2>
02bb8761fcce Initial load
duke
parents:
diff changeset
   132
 
02bb8761fcce Initial load
duke
parents:
diff changeset
   133
 <P><code>Insert</code> and <code>get</code> operations are necessary to handle basic 
02bb8761fcce Initial load
duke
parents:
diff changeset
   134
<code>DynAny</code> objects
02bb8761fcce Initial load
duke
parents:
diff changeset
   135
 but are also helpful to handle constructed <code>DynAny</code> objects.
02bb8761fcce Initial load
duke
parents:
diff changeset
   136
 Inserting a basic data type value into a constructed <code>DynAny</code> object
02bb8761fcce Initial load
duke
parents:
diff changeset
   137
 implies initializing the current component of the constructed data value
02bb8761fcce Initial load
duke
parents:
diff changeset
   138
 associated with the <code>DynAny</code> object. For example, invoking 
02bb8761fcce Initial load
duke
parents:
diff changeset
   139
<code>insert_boolean</code> on a
02bb8761fcce Initial load
duke
parents:
diff changeset
   140
 <code>DynStruct</code> implies inserting a <code>boolean</code> data value at the current 
02bb8761fcce Initial load
duke
parents:
diff changeset
   141
position
02bb8761fcce Initial load
duke
parents:
diff changeset
   142
 of the associated <code>struct</code> data value.
02bb8761fcce Initial load
duke
parents:
diff changeset
   143
 A type is consistent for inserting or extracting a value if its <code>TypeCode</code> is 
02bb8761fcce Initial load
duke
parents:
diff changeset
   144
equivalent to
02bb8761fcce Initial load
duke
parents:
diff changeset
   145
 the <code>TypeCode</code> contained in the <code>DynAny</code> or, if the 
02bb8761fcce Initial load
duke
parents:
diff changeset
   146
<code>DynAny</code> has components, is equivalent to the <code>TypeCode</code>
02bb8761fcce Initial load
duke
parents:
diff changeset
   147
 of the <code>DynAny</code> at the current position.
02bb8761fcce Initial load
duke
parents:
diff changeset
   148
 
02bb8761fcce Initial load
duke
parents:
diff changeset
   149
 <P>Basic operations include:
02bb8761fcce Initial load
duke
parents:
diff changeset
   150
 <P>
02bb8761fcce Initial load
duke
parents:
diff changeset
   151
 <UL>
02bb8761fcce Initial load
duke
parents:
diff changeset
   152
 	<LI>insert_boolean, get_boolean
02bb8761fcce Initial load
duke
parents:
diff changeset
   153
 	<LI>insert_char, get_char
02bb8761fcce Initial load
duke
parents:
diff changeset
   154
 	<LI>insert_short, get_short
02bb8761fcce Initial load
duke
parents:
diff changeset
   155
 	<LI>insert_ushort, get_ushort
02bb8761fcce Initial load
duke
parents:
diff changeset
   156
 	<LI>insert_long, get_long
02bb8761fcce Initial load
duke
parents:
diff changeset
   157
 	<LI>insert_ulong, get_ulong
02bb8761fcce Initial load
duke
parents:
diff changeset
   158
 	<LI>insert_double, get_double
02bb8761fcce Initial load
duke
parents:
diff changeset
   159
 	<LI>insert_string, get_string
02bb8761fcce Initial load
duke
parents:
diff changeset
   160
 	<LI>insert_reference, get_reference
02bb8761fcce Initial load
duke
parents:
diff changeset
   161
 	<LI>insert_typecode, get_typecode
02bb8761fcce Initial load
duke
parents:
diff changeset
   162
 	<LI>insert_longlong, get_longlong
02bb8761fcce Initial load
duke
parents:
diff changeset
   163
 	<LI>insert_ulonglong, get_ulonglong
02bb8761fcce Initial load
duke
parents:
diff changeset
   164
 	<LI>insert_longdouble, get_longdouble
02bb8761fcce Initial load
duke
parents:
diff changeset
   165
 	<LI>insert_wchar, get_wchar
02bb8761fcce Initial load
duke
parents:
diff changeset
   166
 	<LI>insert_wstring, get_wstring
02bb8761fcce Initial load
duke
parents:
diff changeset
   167
 	<LI>insert_any, get_any
02bb8761fcce Initial load
duke
parents:
diff changeset
   168
 	<LI>insert_dyn_any, get_dyn_any
02bb8761fcce Initial load
duke
parents:
diff changeset
   169
 	<LI>insert_val, get_val
02bb8761fcce Initial load
duke
parents:
diff changeset
   170
 	<LI>insert_octet, get_octet
02bb8761fcce Initial load
duke
parents:
diff changeset
   171
 	<LI>insert_float, get_float
02bb8761fcce Initial load
duke
parents:
diff changeset
   172
 	<LI>get_value
02bb8761fcce Initial load
duke
parents:
diff changeset
   173
 	<LI>get_as_string
02bb8761fcce Initial load
duke
parents:
diff changeset
   174
 	<LI>get_as_ulong
02bb8761fcce Initial load
duke
parents:
diff changeset
   175
 	<LI>get_members
02bb8761fcce Initial load
duke
parents:
diff changeset
   176
 	<LI>get_members_as_dyn_any
02bb8761fcce Initial load
duke
parents:
diff changeset
   177
 	<LI>get_discriminator
02bb8761fcce Initial load
duke
parents:
diff changeset
   178
 	<LI>get_length
02bb8761fcce Initial load
duke
parents:
diff changeset
   179
 	<LI>get_elements
02bb8761fcce Initial load
duke
parents:
diff changeset
   180
 	<LI>get_elements_as_dyn_any
02bb8761fcce Initial load
duke
parents:
diff changeset
   181
 	<LI>get_boxed_value
02bb8761fcce Initial load
duke
parents:
diff changeset
   182
 	<LI>get_boxed_value_as_dyn_any
02bb8761fcce Initial load
duke
parents:
diff changeset
   183
 </UL>
02bb8761fcce Initial load
duke
parents:
diff changeset
   184
 
02bb8761fcce Initial load
duke
parents:
diff changeset
   185
 
02bb8761fcce Initial load
duke
parents:
diff changeset
   186
 <P><code>DynAny</code> and <code>DynAnyFactory</code> objects are intended to be local to 
02bb8761fcce Initial load
duke
parents:
diff changeset
   187
the process in which they are
02bb8761fcce Initial load
duke
parents:
diff changeset
   188
 created and used. This means that references to <code>DynAny</code> and 
02bb8761fcce Initial load
duke
parents:
diff changeset
   189
<code>DynAnyFactory</code> objects cannot be exported
02bb8761fcce Initial load
duke
parents:
diff changeset
   190
 to other processes, or externalized with <code>ORB.object_to_string()</code>.
02bb8761fcce Initial load
duke
parents:
diff changeset
   191
 If any attempt is made to do so, the offending operation will raise a MARSHAL system 
02bb8761fcce Initial load
duke
parents:
diff changeset
   192
exception.
02bb8761fcce Initial load
duke
parents:
diff changeset
   193
 Since their interfaces are specified in IDL, <code>DynAny</code> objects export operations 
02bb8761fcce Initial load
duke
parents:
diff changeset
   194
defined in the standard
02bb8761fcce Initial load
duke
parents:
diff changeset
   195
 <code>org.omg.CORBA.Object</code> interface. However, any attempt to invoke operations 
02bb8761fcce Initial load
duke
parents:
diff changeset
   196
exported through the <code>Object</code>
02bb8761fcce Initial load
duke
parents:
diff changeset
   197
 interface may raise the standard NO_IMPLEMENT exception.
02bb8761fcce Initial load
duke
parents:
diff changeset
   198
 An attempt to use a <code>DynAny</code> object with the DII may raise the NO_IMPLEMENT 
02bb8761fcce Initial load
duke
parents:
diff changeset
   199
exception.
02bb8761fcce Initial load
duke
parents:
diff changeset
   200
02bb8761fcce Initial load
duke
parents:
diff changeset
   201
<H3>Package Specification</H3>
29827
aac4782e69ac 8039440: Tidy warnings cleanup for org/omg
avstepan
parents: 25862
diff changeset
   202
4
02bb8761fcce Initial load
duke
parents:
diff changeset
   203
<P>For a precise list of supported sections of official specifications with which 
02bb8761fcce Initial load
duke
parents:
diff changeset
   204
the Java[tm] Platform, Standard Edition 6 ORB complies, see <A 
02bb8761fcce Initial load
duke
parents:
diff changeset
   205
HREF="../CORBA/doc-files/compliance.html">Official Specifications for CORBA 
02bb8761fcce Initial load
duke
parents:
diff changeset
   206
support in Java[tm] SE 6</A>.
29827
aac4782e69ac 8039440: Tidy warnings cleanup for org/omg
avstepan
parents: 25862
diff changeset
   207
4
02bb8761fcce Initial load
duke
parents:
diff changeset
   208
@since 1.4
02bb8761fcce Initial load
duke
parents:
diff changeset
   209
<br>
02bb8761fcce Initial load
duke
parents:
diff changeset
   210
@serial exclude
02bb8761fcce Initial load
duke
parents:
diff changeset
   211
</body>
02bb8761fcce Initial load
duke
parents:
diff changeset
   212
</html>